<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>140133</bug_id>
          
          <creation_ts>2015-01-06 11:08:50 -0800</creation_ts>
          <short_desc>Move the Windows only plug-in code to WebKit/win</short_desc>
          <delta_ts>2015-01-11 08:40:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>japhet</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1059065</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-06 11:08:50 -0800</bug_when>
    <thetext>Move the Windows only plug-in code to WebKit/win</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059067</commentid>
    <comment_count>1</comment_count>
      <attachid>244076</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-06 11:09:24 -0800</bug_when>
    <thetext>Created attachment 244076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059069</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-06 11:12:24 -0800</bug_when>
    <thetext>Attachment 244076 did not pass style-queue:

ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:57:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:58:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:66:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:83:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:47:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:48:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:201:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:254:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:333:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:339:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:350:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:479:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:111:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:133:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:153:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:171:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:176:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:177:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:103:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:245:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:307:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:335:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:348:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:368:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:668:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:671:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:673:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:684:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:687:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:699:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:811:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:829:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:843:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:902:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:934:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:66:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.h:117:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:156:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;reason&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:166:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:167:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:168:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:169:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:170:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:200:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:277:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:278:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:399:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:53:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:54:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:40:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:42:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:43:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:44:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:47:  The parameter name &quot;drawingModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:48:  The parameter name &quot;eventModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:206:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:36:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:38:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:112:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:66:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:85:  The parameter name &quot;mimeDescription&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.cpp:126:  Declaration has space between type name and * in PluginMessage *message  [whitespace/declaration] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:70:  The parameter name &quot;plugin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:88:  The parameter name &quot;persistentMetadataCachePath&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:89:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:253:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:629:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:638:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:654:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:678:  Weird number of spac
es at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:988:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:986:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:991:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1009:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1077:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1092:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1133:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1246:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:162:  map_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:163:  map_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:243:  mime_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:245:  mime_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:572:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:573:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:574:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:575:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:643:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 133 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059113</commentid>
    <comment_count>3</comment_count>
      <attachid>244088</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-06 12:18:46 -0800</bug_when>
    <thetext>Created attachment 244088
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059115</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-06 12:22:29 -0800</bug_when>
    <thetext>Attachment 244088 did not pass style-queue:

ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:57:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:58:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:66:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:83:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:47:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:48:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:201:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:254:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:333:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:339:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:350:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:479:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:111:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:133:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:153:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:171:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:176:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:177:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:103:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:245:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:307:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:335:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:348:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:368:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:668:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:671:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:673:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:684:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:687:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:699:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:811:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:829:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:843:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:902:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:934:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:66:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.h:117:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:156:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;reason&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:166:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:167:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:168:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:169:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:170:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:200:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:277:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:278:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:399:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:53:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:54:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:40:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:42:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:43:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:44:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:47:  The parameter name &quot;drawingModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:48:  The parameter name &quot;eventModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:206:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:36:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:38:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:112:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:66:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:85:  The parameter name &quot;mimeDescription&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.cpp:126:  Declaration has space between type name and * in PluginMessage *message  [whitespace/declaration] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:89:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:253:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:629:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:638:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:654:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:678:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:988:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:986:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:99
1:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1009:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1077:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1092:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1133:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1246:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:70:  The parameter name &quot;plugin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:88:  The parameter name &quot;persistentMetadataCachePath&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:162:  map_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:163:  map_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:243:  mime_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:245:  mime_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:572:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:573:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:574:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:575:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:643:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 133 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059149</commentid>
    <comment_count>5</comment_count>
      <attachid>244094</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-06 13:50:02 -0800</bug_when>
    <thetext>Created attachment 244094
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059151</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-06 13:52:00 -0800</bug_when>
    <thetext>Attachment 244094 did not pass style-queue:

ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:57:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:58:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:66:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:83:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:47:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:48:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:201:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:254:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:333:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:339:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:350:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:479:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:111:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:133:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:153:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:171:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:176:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:177:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:162:  map_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:163:  map_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:243:  mime_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:245:  mime_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:572:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:573:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:574:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:575:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:643:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:103:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:245:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:307:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:335:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:348:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:368:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:668:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:671:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:673:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:684:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:687:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:699:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:811:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:829:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:843:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:902:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:934:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:66:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.h:117:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:156:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;reason&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:166:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:167:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:168:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:169:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:170:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:200:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:277:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:278:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:399:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:53:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:54:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.cpp:126:  Declaration has space between type name and * in PluginMessage *message  [whitespace/declaration] [3]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:40:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:42:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:43:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:44:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:47:  The parameter name &quot;drawingModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:48:  The parameter name &quot;eventModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:206:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:36:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:38:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:112:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins
/npapi.cpp:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:66:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:85:  The parameter name &quot;mimeDescription&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:89:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:253:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:629:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:638:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:654:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:678:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:988:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:986:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:991:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1009:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1077:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1092:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1133:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1246:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:70:  The parameter name &quot;plugin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:88:  The parameter name &quot;persistentMetadataCachePath&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 133 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059156</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-01-06 14:14:22 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; Move the Windows only plug-in code to WebKit/win

There are many GTK guarded code in the proposed patch, I 
don&apos;t think if these code should be moved into WebKit/win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059158</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-01-06 14:17:30 -0800</bug_when>
    <thetext>If this GTK+-guraded code is only used in WebKit1, it can probably be removed completely. I imagine it&apos;s left over from the WebKitGTK+ WebKit1 port for Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059171</commentid>
    <comment_count>9</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-06 14:39:12 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; If this GTK+-guraded code is only used in WebKit1, it can probably be
&gt; removed completely. I imagine it&apos;s left over from the WebKitGTK+ WebKit1
&gt; port for Windows.

Or the WebKitGTK+ WebKit1 port altogether.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059175</commentid>
    <comment_count>10</comment_count>
      <attachid>244098</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-06 14:52:53 -0800</bug_when>
    <thetext>Created attachment 244098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059176</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-06 14:55:22 -0800</bug_when>
    <thetext>Attachment 244098 did not pass style-queue:

ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:57:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:58:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:66:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:83:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:47:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:48:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:201:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:254:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:333:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:339:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:350:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:479:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:111:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:133:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:153:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:171:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:176:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:177:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:162:  map_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:163:  map_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:243:  mime_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:245:  mime_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:572:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:573:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:574:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:575:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:643:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:103:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:245:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:307:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:335:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:348:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:368:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:668:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:671:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:673:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:684:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:687:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:699:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:811:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:829:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:843:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:902:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:934:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:66:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.h:117:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:156:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;reason&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:166:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:167:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:168:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:169:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:170:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:200:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:277:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:278:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:399:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:53:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:54:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.cpp:126:  Declaration has space between type name and * in PluginMessage *message  [whitespace/declaration] [3]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:40:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:42:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:43:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:44:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:47:  The parameter name &quot;drawingModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:48:  The parameter name &quot;eventModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:206:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:36:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:38:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:112:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins
/npapi.cpp:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:66:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:85:  The parameter name &quot;mimeDescription&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:89:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:253:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:629:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:638:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:654:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:678:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:988:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:986:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:991:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1009:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1077:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1092:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1133:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1246:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:70:  The parameter name &quot;plugin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:88:  The parameter name &quot;persistentMetadataCachePath&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 133 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059353</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-01-07 01:00:32 -0800</bug_when>
    <thetext>All the GTK specific code there are indeed leftovers, the WebKit1 GTK port was removed from trunk already, so it&apos;s safe to remove all that code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059449</commentid>
    <comment_count>13</comment_count>
      <attachid>244171</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-07 12:01:14 -0800</bug_when>
    <thetext>Created attachment 244171
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059450</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-07 12:03:49 -0800</bug_when>
    <thetext>Attachment 244171 did not pass style-queue:

ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:57:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:58:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:66:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:83:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:47:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:48:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:201:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:254:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:333:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:339:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:350:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:479:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:111:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:133:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:153:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:171:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:176:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:177:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:162:  map_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:163:  map_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:243:  mime_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:245:  mime_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:572:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:573:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:574:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:575:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:643:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:103:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:245:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:307:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:335:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:348:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:368:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:668:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:671:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:673:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:684:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:687:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:699:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:811:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:829:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:843:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:902:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:934:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:66:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.h:117:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:156:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;reason&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:166:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:167:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:168:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:169:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:170:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:200:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:277:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:278:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:399:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:53:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:54:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.cpp:126:  Declaration has space between type name and * in PluginMessage *message  [whitespace/declaration] [3]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:40:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:42:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:43:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:44:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:47:  The parameter name &quot;drawingModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:48:  The parameter name &quot;eventModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:206:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:36:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:38:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:112:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:42:  Code inside a namespace sho
uld not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:66:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:85:  The parameter name &quot;mimeDescription&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:89:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:253:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:629:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:638:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:654:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:678:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:988:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:986:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:991:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1009:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1077:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1092:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1133:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1246:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:70:  The parameter name &quot;plugin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:88:  The parameter name &quot;persistentMetadataCachePath&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 130 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059830</commentid>
    <comment_count>15</comment_count>
      <attachid>244264</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-08 08:56:45 -0800</bug_when>
    <thetext>Created attachment 244264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059832</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-08 09:00:00 -0800</bug_when>
    <thetext>Attachment 244264 did not pass style-queue:

ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:57:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:58:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:66:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:83:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:47:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:48:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:201:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:254:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:333:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:339:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:350:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:479:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:111:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:133:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:153:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:171:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:176:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:177:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:162:  map_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:163:  map_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:243:  mime_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:245:  mime_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:572:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:573:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:574:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:575:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:643:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:59:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:103:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:245:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:307:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:335:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:348:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:368:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:668:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:671:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:673:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:684:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:687:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:699:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:811:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:829:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:843:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:902:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:934:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:66:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.h:117:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:156:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;reason&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:166:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:167:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:168:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:169:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:170:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:200:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:277:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:278:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:399:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:53:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:54:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.cpp:126:  Declaration has space between type name and * in PluginMessage *message  [whitespace/declaration] [3]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:40:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:42:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:43:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:44:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:47:  The parameter name &quot;drawingModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:48:  The parameter name &quot;eventModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:206:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:36:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:38:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:112:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:156:  Weird number of spaces at line-start.  Ar
e you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:66:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:85:  The parameter name &quot;mimeDescription&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:89:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:253:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:629:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:638:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:654:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:678:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:988:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:986:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:991:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1009:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1077:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1092:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1133:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1246:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:70:  The parameter name &quot;plugin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:88:  The parameter name &quot;persistentMetadataCachePath&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 131 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059839</commentid>
    <comment_count>17</comment_count>
      <attachid>244264</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-08 09:16:07 -0800</bug_when>
    <thetext>Comment on attachment 244264
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=244264&amp;action=review

r=me assuming the Windows build succeeds

&gt; Source/WebKit/win/Plugins/PluginDatabase.cpp:378
&gt; +#if (!OS(WINDOWS) || !ENABLE(NETSCAPE_PLUGIN_API))

Can we make this Windows-specific now that we are moving it? Seems unnecessary to check OS(WINDOWS).

&gt; Source/WebKit/win/Plugins/PluginDatabase.cpp:388
&gt; +#if defined(XP_UNIX)

Or to check XP_UNIX.

&gt; Source/WebKit/win/Plugins/PluginDatabase.cpp:424
&gt; +#elif defined(XP_MACOSX)

Or XP_MACOSX.

&gt; Source/WebKit/win/Plugins/PluginDatabase.cpp:429
&gt; +#elif defined(XP_WIN)

Or XP_WIN.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059841</commentid>
    <comment_count>18</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-08 09:24:57 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Comment on attachment 244264 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=244264&amp;action=review
&gt; 
&gt; r=me assuming the Windows build succeeds
&gt; 
&gt; &gt; Source/WebKit/win/Plugins/PluginDatabase.cpp:378
&gt; &gt; +#if (!OS(WINDOWS) || !ENABLE(NETSCAPE_PLUGIN_API))
&gt; 
&gt; Can we make this Windows-specific now that we are moving it? Seems
&gt; unnecessary to check OS(WINDOWS).

Yeah, there&apos;s a lot of cleanup to be done here once everything has been moved successfully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060291</commentid>
    <comment_count>19</comment_count>
      <attachid>244375</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-09 14:54:03 -0800</bug_when>
    <thetext>Created attachment 244375
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060293</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-09 14:56:07 -0800</bug_when>
    <thetext>Attachment 244375 did not pass style-queue:

ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:57:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.h:58:  The parameter name &quot;message&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:66:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginDebug.cpp:83:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:47:  Use &apos;using namespace std;&apos; instead of &apos;using std::max;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:48:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:201:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:254:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:296:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:333:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:339:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:350:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.cpp:479:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:96:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:111:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:133:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabaseWin.cpp:153:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:171:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:176:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackageWin.cpp:177:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:162:  map_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:163:  map_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:243:  mime_end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:245:  mime_it is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:572:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:573:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:574:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:575:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:643:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:644:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:645:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:59:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:103:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:242:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:245:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:307:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:335:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:347:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:348:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:352:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:368:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:667:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:668:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:671:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:673:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:684:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:687:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:699:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:811:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:829:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:843:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:902:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginViewWin.cpp:934:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:66:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.h:117:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:126:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:129:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:155:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:156:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;stream&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:157:  The parameter name &quot;reason&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:166:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:167:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:168:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:169:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:170:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:200:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:277:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:278:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.h:399:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:53:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginStream.h:54:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginQuirkSet.h:57:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginMessageThrottlerWin.cpp:126:  Declaration has space between type name and * in PluginMessage *message  [whitespace/declaration] [3]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:40:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:42:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:43:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:44:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:47:  The parameter name &quot;drawingModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDebug.h:48:  The parameter name &quot;eventModel&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.cpp:206:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:36:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:38:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:112:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:148:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:149:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/npapi.cpp:156:  Weird number of spaces at line-start.  Ar
e you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:66:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginPackage.h:85:  The parameter name &quot;mimeDescription&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:89:  Use &apos;using namespace std;&apos; instead of &apos;using std::min;&apos;.  [build/using_std] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:253:  Use 0 instead of NULL.  [readability/null] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:629:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:638:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:654:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:678:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:988:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:986:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:991:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1009:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1072:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1077:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1092:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1093:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1133:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/WebKit/win/Plugins/PluginView.cpp:1246:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:70:  The parameter name &quot;plugin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/win/Plugins/PluginDatabase.h:88:  The parameter name &quot;persistentMetadataCachePath&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 131 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060326</commentid>
    <comment_count>21</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-01-09 16:16:52 -0800</bug_when>
    <thetext>Committed r178219: &lt;http://trac.webkit.org/changeset/178219&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060352</commentid>
    <comment_count>22</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-09 17:23:43 -0800</bug_when>
    <thetext>This actually breaks Windows builds if you do a full rebuild (such that there is no longer a pre-assembled PaintHooks.asm-&gt;PainHooks.obj) file in the build directory.

Fix committed in r178225: &lt;http://trac.webkit.org/changeset/178225&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244076</attachid>
            <date>2015-01-06 11:09:24 -0800</date>
            <delta_ts>2015-01-06 12:18:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140133-20150106110928.patch</filename>
            <type>text/plain</type>
            <size>488185</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVlNTJkZmMxNjVjZmM2
NzM5MWM3MzVjZmU0MWU5ODlmNmNhYjdhYy4uZjAzYzVjMjdhZDM5ZGM1YjU0Y2FhMzQ0MzNlZDJh
NTlhZTkwNDgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0aGUgV2lu
ZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
OgorCisyMDE1LTAxLTA2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisK
ICAgICAgICAgVHJ5IHRvIGZpeCB0aGUgV2luZG93cyBidWlsZC4KIAogICAgICAgICAqIFdlYkNv
cmUudmN4cHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5MDg5NTNj
YWYyZTQzN2Q4NjI4OTNjNjQ4NTQ5MGYzODMyNTQ3MWZmLi4zYmFiZTM0MmE0MjVmNDMxNjgyY2Yy
ZGJhYzVhMTE5MWJhOWQyOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0
aGUgV2luZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvajoKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0
LnZjeHByb2ouZmlsdGVyczoKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlkZXIK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEyNgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKaW5kZXggNjNhNWNjNjg5NGY4NmU0N2YxYmU4YjhiOWJjMGM4NjgwMTli
NjdhZS4uNzAyMjc4YWI2NmRlYmMzOTU4ZWU5ODBjZjg3ZTI1NDE0YjAzZDgyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwpAQCAtMSw1ICsxLDMxMCBAQAogMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCisgICAgICAgIE1vdmUgdGhlIFdpbmRvd3Mgb25seSBwbHVn
LWluIGNvZGUgdG8gV2ViS2l0L3dpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQwMTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbHVnaW5zL1BhaW50SG9va3MuYXNtOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGFpbnRIb29rcy5hc20uCisgICAgICAgICogUGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6UGx1
Z2luRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVz
aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZURp
c2FibGVkUGx1Z2luRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6YWRk
RGlzYWJsZWRQbHVnaW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpk
ZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFk
VVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlVVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnNldFBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjphZGRQbHVnaW5Q
YXRoc0Zyb21SZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6Z2V0
UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVmVyc2lv
blN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlVmVyc2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6YWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3Jl
OjphZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6YWRk
SmF2YVBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpzYWZhcmlQbHVnaW5zRGly
ZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmll
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVj
dG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXR0
eU5hbWVGb3JEcmF3aW5nTW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvckV2
ZW50TW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUpOgorICAgICAgICAqIFBsdWdpbnMv
UGx1Z2luRGVidWcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGVidWcuaC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW46On5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vzc1F1ZXVl
ZE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNzYWdlKToKKyAgICAgICAgKiBQ
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaC4KKyAgICAgICAg
KiBQbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2th
Z2U6On5QbHVnaW5QYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZy
ZWVMaWJyYXJ5U29vbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmcmVlTGli
cmFyeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6Y29tcGFy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnVubG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZTo6ZGV0ZXJtaW5lUXVpcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0TGlzdEZyb21WYXJpYW50QXJncyk6CisgICAgICAgIChXZWJDb3JlOjptYWtlU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOUE5f
SW52b2tlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2luTG9hZGVkKToKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdp
blBhY2thZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5oLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnBhcmVudERpcmVj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjptb2R1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblBhY2thZ2U6Om1pbWVUb0Rlc2NyaXB0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjptaW1lVG9FeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
OjpwbHVnaW5GdW5jcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpxdWlya3Mp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6dmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmdWxsTUlNRURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blBhY2thZ2VIYXNoOjplcXVhbCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2lu
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmVyc2lvbkluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2U6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24pOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luUXVp
cmtTZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtT
ZXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblF1aXJrU2V0OjpQbHVnaW5RdWlya1NldCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5RdWlya1NldDo6YWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblF1aXJrU2V0Ojpjb250YWlucyk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6c3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5TdHJlYW06OlBsdWdpblN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJl
YW06On5QbHVnaW5TdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6bGFzdE1vZGlmaWVkRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OnN0YXJ0U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6b3duZXJGb3JT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblN0cmVhbTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjp3YW50
c0FsbFN0cmVhbXMpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luU3RyZWFtLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luU3RyZWFtQ2xpZW50Ojp+UGx1Z2luU3RyZWFtQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5TdHJlYW06OnNldExvYWRNYW51YWxseSk6CisgICAgICAgICogUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
dy5jcHAuCisgICAgICAgIChXZWJDb3JlOjppbnN0YW5jZU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNl
dEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpmcmFtZVJlY3RzQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
dGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjdXJy
ZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVVVEY4U3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNjaGVkdWxlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6Z2V0VVJMTm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpwb3N0VVJMTm90aWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBvc3RVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6bmV3U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRlc3Ryb3lTdHJlYW0p
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmludmFsaWRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnB1
c2hQb3B1cHNFbmFibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmFyZVBv
cHVwc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0SmF2YVNjcmlw
dFBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OlBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9jdXNQbHVnaW5F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0Q2FsbGluZ1BsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppc0Nh
bGxpbmdQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydHNXaXRoQmxhbmtMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2F0aW9u
QWZ0ZXJGaXJzdEJsYW5rTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRU9MKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlUG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZh
bGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50U3Rh
dGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjprZWVwQWxpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5WaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblJlcXVlc3Q6OlBsdWdpblJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUmVxdWVzdDo6ZnJhbWVMb2FkUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5SZXF1ZXN0Ojpub3RpZnlEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblJlcXVlc3Q6OnNlbmROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luUmVxdWVzdDo6c2hvdWxkQWxsb3dQb3B1cHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWFudWFsTG9hZGVyOjp+UGx1Z2luTWFudWFsTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdGF0dXMpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwYXJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbHVnaW5zUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjptaW1l
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cmwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cGx1Z2luV25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXRQbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjp0b1BsdWdp
blZpZXcpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcC4KKyAgICAgICAg
KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aG9va2VkQmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpob29r
ZWRFbmRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpob29rKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3Rl
clBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlld1du
ZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6aXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRlbnRzVG9OYXRpdmVXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFp
bnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnNuYXBzaG90KToKKyAgICAgICAgKiBQbHVnaW5zL25wYXBpLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwLgorICAgICAgICAocGx1Z2luVmlld0Zvcklu
c3RhbmNlKToKKyAgICAgICAgKE5QTl9NZW1BbGxvYyk6CisgICAgICAgIChOUE5fTWVtRnJlZSk6
CisgICAgICAgIChOUE5fTWVtRmx1c2gpOgorICAgICAgICAoTlBOX1JlbG9hZFBsdWdpbnMpOgor
ICAgICAgICAoTlBOX1JlcXVlc3RSZWFkKToKKyAgICAgICAgKE5QTl9HZXRVUkxOb3RpZnkpOgor
ICAgICAgICAoTlBOX0dldFVSTCk6CisgICAgICAgIChOUE5fUG9zdFVSTE5vdGlmeSk6CisgICAg
ICAgIChOUE5fUG9zdFVSTCk6CisgICAgICAgIChOUE5fTmV3U3RyZWFtKToKKyAgICAgICAgKE5Q
Tl9Xcml0ZSk6CisgICAgICAgIChOUE5fRGVzdHJveVN0cmVhbSk6CisgICAgICAgIChOUE5fVXNl
ckFnZW50KToKKyAgICAgICAgKE5QTl9TdGF0dXMpOgorICAgICAgICAoTlBOX0ludmFsaWRhdGVS
ZWN0KToKKyAgICAgICAgKE5QTl9JbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKE5QTl9Gb3Jj
ZVJlZHJhdyk6CisgICAgICAgIChOUE5fR2V0VmFsdWUpOgorICAgICAgICAoTlBOX1NldFZhbHVl
KToKKyAgICAgICAgKE5QTl9HZXRKYXZhRW52KToKKyAgICAgICAgKE5QTl9HZXRKYXZhUGVlcik6
CisgICAgICAgIChOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSk6CisgICAgICAgIChOUE5fUG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwp
OgorICAgICAgICAoTlBOX0dldFZhbHVlRm9yVVJMKToKKyAgICAgICAgKE5QTl9TZXRWYWx1ZUZv
clVSTCk6CisgICAgICAgIChOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKE5Q
Tl9Qb3BVcENvbnRleHRNZW51KToKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlk
ZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEy
NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpp
bmRleCA0Zjc2NjkzNjQyMGVlMGMwMzVkZWExOTgzYTE0Nzc3MzA5OGFhYTA5Li41ZmE3YjNkYjg2
NDI5ZmM4YTU1NDJiYmFkZjdhOTFmYTc1N2M4NTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTE3NzU0LDE4ICsxNzc1NCw4IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXERPTU1pbWVUeXBlQXJyYXkuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xET01QbHVnaW4uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xET01QbHVnaW5BcnJheS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXG5wYXBpLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YS5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGVidWcuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblN0cmVhbS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luRGF0YWJh
c2VXaW4uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblZpZXdXaW4uY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3ZnXFNWR0FsbEluT25lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHN2Z1xTVkdGb250RmFjZUVsZW1lbnQuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC0yMTAzMSwxNSArMjEwMjEsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xucGZ1bmN0aW9ucy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xucHJ1bnRpbWUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YS5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUXVpcmtTZXQuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyYXRlZ3kuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyZWFtLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4u
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN2Z1xDb2xvckRpc3RhbmNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcU1ZHQUVsZW1lbnQuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCIgLz4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ou
ZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ou
ZmlsdGVycwppbmRleCBmOTU5YjYzNGUzZTE2MWFkZjcwNmE0ZjAzMDdjZjEzNjM1NDczOTgyLi4y
MjMwODQ2MzY1YmM0N2M5YjNjYTY4YWVlYzgxMjFkNWFmZjUwZWFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBA
IC00NTY5LDQyICs0NTY5LDEyIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XERPTVBsdWdpbkFycmF5LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcbnBhcGku
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhLmNwcCI+CiAgICAg
ICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5z
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bHVnaW5zXFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGx1
Z2luczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5QYWNrYWdlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luU3RyZWFtLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
Vmlldy5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5EYXRhYmFz
ZVdpbi5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zXHdpbjwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zXHdpbjwvRmlsdGVy
PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3
aW5cUGx1Z2luUGFja2FnZVdpbi5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zXHdpbjwvRmls
dGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1x3aW5cUGx1Z2luVmlld1dpbi5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zXHdpbjwvRmls
dGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3ZnXFNW
R0FsbEluT25lLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzdmc8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTExNjEzLDMzICsxMTU4MywxMiBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhLmgiPgogICAgICAgPEZpbHRlcj5wbHVnaW5z
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bHVnaW5zXFBsdWdpbkRhdGFiYXNlLmgiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRlYnVnLmgiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXIuaCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2Fn
ZS5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5RdWlya1NldC5oIj4KLSAg
ICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5TdHJhdGVneS5oIj4KICAgICAgIDxGaWx0
ZXI+cGx1Z2luczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5TdHJlYW0uaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcUGx1Z2luVmlldy5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luc1x3aW48L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN2Z1xD
b2xvckRpc3RhbmNlLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3ZnPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmEyY2VlMmRhNzJjYWYxNGI3NWNmMzZm
YWFkMTRiNzVlNTc0ODU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJVUkwuaCIK
LSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jZW5kaWYKLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+
ID4gUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
TUVUQURBVEFfQ0FDSEUpCi1zdGF0aWMgY29uc3Qgc2l6ZV90IG1heGltdW1QZXJzaXN0ZW50UGx1
Z2luTWV0YWRhdGFDYWNoZVNpemUgPSAzMjc2ODsKLQotc3RhdGljIGJvb2wgZ1BlcnNpc3RlbnRQ
bHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOwotCi1TdHJpbmcmIHBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlUGF0aCgpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgY2FjaGVQYXRoLCAoKSk7Ci0gICAgcmV0dXJuIGNhY2hlUGF0aDsKLX0KLSNlbmRp
ZgotCi1QbHVnaW5EYXRhYmFzZTo6UGx1Z2luRGF0YWJhc2UoKQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgOiBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hl
SXNMb2FkZWQoZmFsc2UpCi0jZW5kaWYKLXsKLX0KLQotUGx1Z2luRGF0YWJhc2UqIFBsdWdpbkRh
dGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKGJvb2wgcG9wdWxhdGUpCi17Ci0gICAgc3RhdGljIFBs
dWdpbkRhdGFiYXNlKiBwbHVnaW5zID0gMDsKLQotICAgIGlmICghcGx1Z2lucykgewotICAgICAg
ICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlOwotCi0gICAgICAgIGlmIChwb3B1bGF0ZSkg
ewotICAgICAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luRGlyZWN0b3JpZXMoUGx1Z2luRGF0YWJh
c2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpKTsKLSAgICAgICAgICAgIHBsdWdpbnMtPnJl
ZnJlc2goKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5zOwotfQotCi1i
b29sIFBsdWdpbkRhdGFiYXNlOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVm
cmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIHJldHVybiAocmVm
cmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpOwotfQot
Ci12b2lkIFBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJp
bmcmIGRpcmVjdG9yeSkKLXsKLSAgICBtX3BsdWdpbkRpcmVjdG9yaWVzLmFwcGVuZChkaXJlY3Rv
cnkpOwotICAgIHJlZnJlc2goKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgp
Ci17Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICBpZiAo
IW1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCkKLSAgICAgICAgbG9hZFBlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlKCk7Ci0jZW5kaWYKLSAgICBib29sIHBsdWdpblNldENoYW5nZWQgPSBm
YWxzZTsKLQotICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkgewotICAgICAgICBQbHVnaW5T
ZXQgcGx1Z2luc1RvVW5sb2FkOwotICAgICAgICBnZXREZWxldGVkUGx1Z2lucyhwbHVnaW5zVG9V
bmxvYWQpOwotCi0gICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCi0gICAgICAgIFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgpOwotICAgICAgICBmb3Ig
KFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgcmVtb3ZlKGl0LT5nZXQoKSk7Ci0KLSAgICAg
ICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpOwotICAgIH0K
LQotICAgIEhhc2hTZXQ8U3RyaW5nPiBwYXRoczsKLSAgICBnZXRQbHVnaW5QYXRoc0luRGlyZWN0
b3JpZXMocGF0aHMpOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVfdD4gcGF0aHNXaXRoVGlt
ZXM7Ci0KLSAgICAvLyBXZSBzaG91bGQgb25seSBza2lwIHVuY2hhbmdlZCBmaWxlcyBpZiB3ZSBk
aWRuJ3QgcmVtb3ZlIGFueSBwbHVnaW5zIGFib3ZlLiBJZiB3ZSBkaWQgcmVtb3ZlCi0gICAgLy8g
YW55IHBsdWdpbnMsIHdlIG5lZWQgdG8gbG9vayBhdCBldmVyeSBwbHVnaW4gZmlsZSBzbyB0aGF0
LCBlLmcuLCBpZiB0aGUgdXNlciBoYXMgdHdvIHZlcnNpb25zCi0gICAgLy8gb2YgUmVhbFBsYXll
ciBpbnN0YWxsZWQgYW5kIGp1c3QgcmVtb3ZlZCB0aGUgbmV3ZXIgb25lLCB3ZSdsbCBwaWNrIHVw
IHRoZSBvbGRlciBvbmUuCi0gICAgYm9vbCBzaG91bGRTa2lwVW5jaGFuZ2VkRmlsZXMgPSAhcGx1
Z2luU2V0Q2hhbmdlZDsKLQotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGF0
aHNFbmQgPSBwYXRocy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBpdCAhPSBwYXRoc0VuZDsgKytpdCkgewotICAgICAg
ICB0aW1lX3QgbGFzdE1vZGlmaWVkOwotICAgICAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25U
aW1lKCppdCwgbGFzdE1vZGlmaWVkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IHBhdGhzV2l0aFRpbWVzLmFkZCgqaXQsIGxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgLy8gSWYg
dGhlIHBhdGgncyB0aW1lc3RhbXAgaGFzbid0IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3
ZSByYW4gcmVmcmVzaCgpLCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBp
ZiAoc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzICYmIG1fcGx1Z2luUGF0aHNXaXRoVGltZXMuZ2V0
KCppdCkgPT0gbGFzdE1vZGlmaWVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBvbGRQYWNrYWdlID0gbV9wbHVnaW5zQnlQYXRoLmdl
dCgqaXQpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIXNob3VsZFNraXBVbmNoYW5nZWRGaWxlcyB8
fCBvbGRQYWNrYWdlLT5sYXN0TW9kaWZpZWQoKSAhPSBsYXN0TW9kaWZpZWQpOwotICAgICAgICAg
ICAgcmVtb3ZlKG9sZFBhY2thZ2UuZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRy
PFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKCpp
dCwgbGFzdE1vZGlmaWVkKTsKLSAgICAgICAgaWYgKHBhY2thZ2UgJiYgYWRkKHBhY2thZ2UucmVs
ZWFzZSgpKSkKLSAgICAgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSB0cnVlOwotICAgIH0KLQot
ICAgIC8vIENhY2hlIGFsbCB0aGUgcGF0aHMgd2UgZm91bmQgd2l0aCB0aGVpciB0aW1lc3RhbXBz
IGZvciBuZXh0IHRpbWUuCi0gICAgcGF0aHNXaXRoVGltZXMuc3dhcChtX3BsdWdpblBhdGhzV2l0
aFRpbWVzKTsKLQotICAgIGlmICghcGx1Z2luU2V0Q2hhbmdlZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICB1
cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOwotI2VuZGlmCi0KLSAgICBtX3JlZ2lzdGVy
ZWRNSU1FVHlwZXMuY2xlYXIoKTsKLQotICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBl
cwotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwot
ICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgLy8gR2V0IE1JTUUgdHlwZXMKLSAgICAgICAg
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWlt
ZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKLSAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVu
ZCgpOwotICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KQotICAgICAg
ICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmtleSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLVZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gUGx1Z2luRGF0YWJh
c2U6OnBsdWdpbnMoKSBjb25zdAotewotICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcmVzdWx0
OwotCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7
Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJl
ZFBsdWdpbkNvbXBhcmUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKLXsKLSAgICBQbHVn
aW5QYWNrYWdlKiBwbHVnaW5BID0gKnN0YXRpY19jYXN0PFBsdWdpblBhY2thZ2UqIGNvbnN0Kj4o
YSk7Ci0gICAgUGx1Z2luUGFja2FnZSogcGx1Z2luQiA9ICpzdGF0aWNfY2FzdDxQbHVnaW5QYWNr
YWdlKiBjb25zdCo+KGIpOwotCi0gICAgcmV0dXJuIHBsdWdpbkEtPmNvbXBhcmUoKnBsdWdpbkIp
OwotfQotCi1QbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwot
ICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAg
IFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQo
a2V5KTsKLSAgICBpZiAocHJlZmVycmVkUGx1Z2luCi0gICAgICAgICYmIHByZWZlcnJlZFBsdWdp
bi0+aXNFbmFibGVkKCkKLSAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2luLT5taW1lVG9EZXNjcmlw
dGlvbnMoKS5jb250YWlucyhrZXkpKSB7Ci0gICAgICAgIHJldHVybiBwcmVmZXJyZWRQbHVnaW47
Ci0gICAgfQotCi0gICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqLCAyPiBwbHVnaW5DaG9pY2VzOwot
Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAo
Kml0KS5nZXQoKTsKLQotICAgICAgICBpZiAoIXBsdWdpbi0+aXNFbmFibGVkKCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAocGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMo
KS5jb250YWlucyhrZXkpKSB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9D
QUNIRSkKLSAgICAgICAgICAgIGlmICghcGx1Z2luLT5lbnN1cmVQbHVnaW5Mb2FkZWQoKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZgotICAgICAgICAgICAgcGx1Z2luQ2hvaWNl
cy5hcHBlbmQocGx1Z2luKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwbHVnaW5DaG9p
Y2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBxc29ydChwbHVnaW5DaG9p
Y2VzLmRhdGEoKSwgcGx1Z2luQ2hvaWNlcy5zaXplKCksIHNpemVvZihQbHVnaW5QYWNrYWdlKiks
IFBsdWdpbkRhdGFiYXNlOjpwcmVmZXJyZWRQbHVnaW5Db21wYXJlKTsKLQotICAgIHJldHVybiBw
bHVnaW5DaG9pY2VzWzBdOwotfQotCi1TdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9y
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAotewotICAgIGlmIChleHRl
bnNpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBTdHJpbmcgbWlt
ZVR5cGU7Ci0gICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqLCAyPiBwbHVnaW5DaG9pY2VzOwotICAg
IEhhc2hNYXA8UGx1Z2luUGFja2FnZSosIFN0cmluZz4gbWltZVR5cGVGb3JQbHVnaW47Ci0KLSAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghKCppdCktPmlzRW5hYmxlZCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwotCi0g
ICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9
ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsg
KyttaW1lX2l0KSB7Ci0gICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQtPmtleTsKLSAgICAg
ICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lu
cy5nZXQobWltZVR5cGUpOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVu
c2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRNYXBwaW5nID0g
ZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5z
aXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShleHRl
bnNpb25zW2ldLCBleHRlbnNpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIFBsdWdpblBhY2th
Z2UqIHBsdWdpbiA9ICgqaXQpLmdldCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcmVm
ZXJyZWRQbHVnaW4gJiYgUGx1Z2luUGFja2FnZTo6ZXF1YWwoKnBsdWdpbiwgKnByZWZlcnJlZFBs
dWdpbikpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWltZVR5cGU7Ci0KLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICAgICAgICAgICAg
ICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2luTG9hZGVkKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBwbHVnaW5DaG9pY2Vz
LmFwcGVuZChwbHVnaW4pOwotICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZUZvclBsdWdpbi5h
ZGQocGx1Z2luLCBtaW1lVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwcGluZyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmb3VuZE1hcHBpbmcpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocGx1Z2luQ2hvaWNlcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHFzb3J0KHBsdWdpbkNob2lj
ZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUoKSwgc2l6ZW9mKFBsdWdpblBhY2thZ2UqKSwg
UGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUpOwotCi0gICAgcmV0dXJuIG1p
bWVUeXBlRm9yUGx1Z2luLmdldChwbHVnaW5DaG9pY2VzWzBdKTsKLX0KLQotUGx1Z2luUGFja2Fn
ZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgVVJMJiB1cmwsIFN0cmluZyYgbWlt
ZVR5cGUpCi17Ci0gICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBw
bHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgCi0gICAgU3RyaW5nIGZpbGVuYW1lID0g
dXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7Ci0gICAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcvJykp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGludCBleHRlbnNpb25Qb3MgPSBmaWxlbmFt
ZS5yZXZlcnNlRmluZCgnLicpOwotICAgIGlmIChleHRlbnNpb25Qb3MgPT0gLTEpCi0gICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIFN0cmluZyBtaW1lVHlwZUZvckV4dGVuc2lvbiA9IE1JTUVU
eXBlRm9yRXh0ZW5zaW9uKGZpbGVuYW1lLnN1YnN0cmluZyhleHRlbnNpb25Qb3MgKyAxKSk7Ci0g
ICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGVGb3JF
eHRlbnNpb24pOwotICAgIGlmICghcGx1Z2luKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBpZiBubyBw
bHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRvd3MgZm9yIHRoZSBtaW1lIHR5cGUKLSAg
ICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgCi0gICAgbWltZVR5cGUgPSBtaW1lVHlwZUZvckV4dGVuc2lvbjsKLSAg
ICByZXR1cm4gcGx1Z2luOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQ
bHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQbHVnaW5QYWNrYWdlKiBw
bHVnaW4pCi17Ci0gICAgaWYgKCFwbHVnaW4gfHwgcGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCku
Y29udGFpbnMobWltZVR5cGUpKQotICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMuc2V0KG1pbWVU
eXBlLmxvd2VyKCksIHBsdWdpbik7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmZpbGVFeGlz
dHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpIGNvbnN0Ci17Ci0gICAg
Ly8gU2tpcCBwbHVnaW4gZmlsZXMgdGhhdCBhcmUgZGlzYWJsZWQgYnkgZmlsZW5hbWUuCi0gICAg
aWYgKG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5jb250YWlucyhwYXRoR2V0RmlsZU5hbWUoZmlsZVBh
dGgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGZpbGVFeGlzdHMoZmls
ZVBhdGgpOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXREZWxldGVkUGx1Z2lucyhQbHVn
aW5TZXQmIHBsdWdpbnMpIGNvbnN0Ci17Ci0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAo
IWZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKCgqaXQpLT5wYXRoKCkpKQotICAgICAgICAgICAg
cGx1Z2lucy5hZGQoKml0KTsKLSAgICB9Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmFkZChQ
YXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBycFBhY2thZ2UpCi17Ci0gICAgQVNTRVJUX0FSRyhw
cnBQYWNrYWdlLCBwcnBQYWNrYWdlKTsKLQotICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNr
YWdlID0gcHJwUGFja2FnZTsKLQotICAgIGlmICghbV9wbHVnaW5zLmFkZChwYWNrYWdlKS5pc05l
d0VudHJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3BsdWdpbnNCeVBhdGguYWRk
KHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
UGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNrYWdlKiBwYWNrYWdlKQotewotICAgIE1J
TUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFja2FnZS0+bWltZVRvRXh0
ZW5zaW9ucygpLmJlZ2luKCk7Ci0gICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwotICAgIGZvciAoIDsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBhY2thZ2VCeU5hbWVNYXA6Oml0ZXJh
dG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lucy5maW5kKGl0LT5rZXkpOwotICAg
ICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJlZmVycmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNr
YWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2UpCi0gICAgICAgICAgICBtX3ByZWZlcnJlZFBsdWdp
bnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7Ci0gICAgfQotCi0gICAgbV9wbHVnaW5zLnJlbW92ZShw
YWNrYWdlKTsKLSAgICBtX3BsdWdpbnNCeVBhdGgucmVtb3ZlKHBhY2thZ2UtPnBhdGgoKSk7Ci19
Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmNsZWFyKCkKLXsKLSAgICBtX3BsdWdpbnMuY2xlYXIo
KTsKLSAgICBtX3BsdWdpbnNCeVBhdGguY2xlYXIoKTsKLSAgICBtX3BsdWdpblBhdGhzV2l0aFRp
bWVzLmNsZWFyKCk7Ci0gICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7Ci0gICAgbV9w
cmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRB
REFUQV9DQUNIRSkKLSAgICBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQgPSBmYWxz
ZTsKLSNlbmRpZgotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpyZW1vdmVEaXNhYmxlZFBsdWdp
bkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKLXsKLSAgICByZXR1cm4gbV9kaXNhYmxlZFBs
dWdpbkZpbGVzLnJlbW92ZShmaWxlTmFtZSk7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmFk
ZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQotewotICAgIHJldHVy
biBtX2Rpc2FibGVkUGx1Z2luRmlsZXMuYWRkKGZpbGVOYW1lKS5pc05ld0VudHJ5OwotfQotCi0j
aWYgKCFPUyhXSU5ET1dTKSB8fCAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpKQotLy8gRm9y
IFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZAot
Ly8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQgaWYgd2UgY2FuIHVzZSBXZWJDb3JlIGNv
bnN0cnVjdHMKLS8vIGZvciB0aGUgbG9naWMgd2Ugc2hvdWxkIHBlcmhhcHMgbW92ZSBpdCBoZXJl
IHVuZGVyIFhQX1dJTj8KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQ
bHVnaW5EaXJlY3RvcmllcygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0KLSAgICAv
LyBBZGQgcGF0aHMgc3BlY2lmaWMgdG8gZWFjaCBwbGF0Zm9ybQotI2lmIGRlZmluZWQoWFBfVU5J
WCkKLSAgICBTdHJpbmcgdXNlclBsdWdpblBhdGggPSBob21lRGlyZWN0b3J5UGF0aCgpOwotICAg
IHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmcoIi8ubW96aWxsYS9wbHVnaW5zIikpOwotICAg
IHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7Ci0KLSAgICB1c2VyUGx1Z2luUGF0aCA9IGhv
bWVEaXJlY3RvcnlQYXRoKCk7Ci0gICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiLy5u
ZXRzY2FwZS9wbHVnaW5zIikpOwotICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7Ci0K
LSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dzZXIvcGx1Z2lucyIpOwotICAgIHBhdGhz
LmFwcGVuZCgiL3Vzci9sb2NhbC9saWIvbW96aWxsYS9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBw
ZW5kKCIvdXNyL2xpYi9maXJlZm94L3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3Iv
bGliNjQvYnJvd3Nlci1wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9icm93
c2VyLXBsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL21vemlsbGEvcGx1Z2lu
cyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9uZXRzY2FwZS9wbHVnaW5zIik7Ci0g
ICAgcGF0aHMuYXBwZW5kKCIvb3B0L21vemlsbGEvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVu
ZCgiL29wdC9tb3ppbGxhL2xpYi9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvb3B0L25l
dHNjYXBlL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi9vcHQvbmV0c2NhcGUvY29tbXVu
aWNhdG9yL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25ldHNjYXBlL3Bs
dWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25ldHNjYXBlL3BsdWdpbnMtbGli
YzUiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25ldHNjYXBlL3BsdWdpbnMtbGliYzYi
KTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvbmV0c2NhcGUvcGx1Z2lucyIpOwotICAg
IHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9tb3ppbGxhL3BsdWdpbnMiKTsKLSAgICBwYXRocy5h
cHBlbmQoIi91c3IvbGliL25zYnJvd3Nlci9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIv
dXNyL2xpYjY0L25zYnJvd3Nlci9wbHVnaW5zIik7Ci0KLSAgICBTdHJpbmcgbW96SG9tZShnZXRl
bnYoIk1PWklMTEFfSE9NRSIpKTsKLSAgICBtb3pIb21lLmFwcGVuZCgiL3BsdWdpbnMiKTsKLSAg
ICBwYXRocy5hcHBlbmQobW96SG9tZSk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBtb3pQYXRoczsK
LSAgICBTdHJpbmcgbW96UGF0aChnZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpKTsKLSAgICBtb3pQ
YXRoLnNwbGl0KFVDaGFyKCc6JyksIC8qIGFsbG93RW1wdHlFbnRyaWVzICovIGZhbHNlLCBtb3pQ
YXRocyk7Ci0gICAgcGF0aHMuYXBwZW5kVmVjdG9yKG1velBhdGhzKTsKLSNlbGlmIGRlZmluZWQo
WFBfTUFDT1NYKQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRo
KCk7Ci0gICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiL0xpYnJhcnkvSW50ZXJuZXQg
UGx1Zy1JbnMiKSk7Ci0gICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKLSAgICBwYXRo
cy5hcHBlbmQoIi9MaWJyYXJ5L0ludGVybmV0IFBsdWctSW5zIik7Ci0jZWxpZiBkZWZpbmVkKFhQ
X1dJTikKLSAgICBTdHJpbmcgdXNlclBsdWdpblBhdGggPSBob21lRGlyZWN0b3J5UGF0aCgpOwot
ICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmcoIlxcQXBwbGljYXRpb24gRGF0YVxcTW96
aWxsYVxccGx1Z2lucyIpKTsKLSAgICBwYXRocy5hcHBlbmQodXNlclBsdWdpblBhdGgpOwotI2Vu
ZGlmCi0KLSAgICByZXR1cm4gcGF0aHM7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJl
ZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBTdHJpbmcg
cHJlZmVycmVkUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0KLSNpZiBkZWZpbmVkKFhQX1VO
SVgpCi0gICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3RyaW5nKCIvLm1vemlsbGEvcGx1Z2lucyIp
KTsKLSNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQotICAgIHByZWZlcnJlZFBhdGguYXBwZW5kKFN0
cmluZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7Ci0jZWxpZiBkZWZpbmVkKFhQX1dJ
TikKLSAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJpbmcoIlxcQXBwbGljYXRpb24gRGF0YVxc
TW96aWxsYVxccGx1Z2lucyIpKTsKLSNlbmRpZgotCi0gICAgLy8gVE9ETzogV2Ugc2hvdWxkIG5v
cm1hbGl6ZSB0aGUgcGF0aCBiZWZvcmUgZG9pbmcgYSBjb21wYXJpc29uLgotICAgIHJldHVybiBw
YXRoID09IHByZWZlcnJlZFBhdGg7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdp
blBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mIHBhdGhzKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgotICAgIEhh
c2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0g
ICAgU3RyaW5nIGZpbGVOYW1lRmlsdGVyKCIqLnNvIik7Ci0jZWxzZQotICAgIFN0cmluZyBmaWxl
TmFtZUZpbHRlcigiIik7Ci0jZW5kaWYKLQotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBkaXJzRW5kID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5lbmQoKTsKLSAgICBmb3IgKFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkSXQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2lu
KCk7IGRJdCAhPSBkaXJzRW5kOyArK2RJdCkgewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVn
aW5QYXRocyA9IGxpc3REaXJlY3RvcnkoKmRJdCwgZmlsZU5hbWVGaWx0ZXIpOwotICAgICAgICBW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGx1Z2luc0VuZCA9IHBsdWdpblBhdGhzLmVu
ZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwSXQgPSBw
bHVnaW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1Z2luc0VuZDsgKytwSXQpIHsKLSAgICAgICAg
ICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKnBJdCkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHBhdGhzLmFkZCgqcEl0KTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotI2VuZGlmIC8vICFPUyhXSU5ET1dTKQotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLQotc3RhdGljIHZvaWQgZmlsbEJ1ZmZlcldpdGhDb250
ZW50c09mRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIp
Ci17Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAwOwotICAgIHNpemVfdCBidWZmZXJDYXBhY2l0
eSA9IDEwMjQ7Ci0gICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7Ci0KLSAgICBkbyB7
Ci0gICAgICAgIGJ1ZmZlclNpemUgKz0gcmVhZEZyb21GaWxlKGZpbGUsIGJ1ZmZlci5kYXRhKCkg
KyBidWZmZXJTaXplLCBidWZmZXJDYXBhY2l0eSAtIGJ1ZmZlclNpemUpOwotICAgICAgICBpZiAo
YnVmZmVyU2l6ZSA9PSBidWZmZXJDYXBhY2l0eSkgewotICAgICAgICAgICAgaWYgKGJ1ZmZlckNh
cGFjaXR5IDwgbWF4aW11bVBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlU2l6ZSkgewotICAg
ICAgICAgICAgICAgIGJ1ZmZlckNhcGFjaXR5ICo9IDI7Ci0gICAgICAgICAgICAgICAgYnVmZmVy
LnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGJ1ZmZlci5jbGVhcigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBicmVhazsKLSAgICB9IHdoaWxlICh0
cnVlKTsKLQotICAgIGJ1ZmZlci5zaHJpbmsoYnVmZmVyU2l6ZSk7Ci19Ci0KLXN0YXRpYyBib29s
IHJlYWRVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0U3RyaW5nLCBjaGFyKiYgc3RhcnQsIGNvbnN0
IGNoYXIqIGVuZCkKLXsKLSAgICBpZiAoc3RhcnQgPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpbnQgbGVuID0gc3RybGVuKHN0YXJ0KTsKLSAgICByZXN1bHRTdHJpbmcgPSBT
dHJpbmc6OmZyb21VVEY4KHN0YXJ0LCBsZW4pOwotICAgIHN0YXJ0ICs9IGxlbiArIDE7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgcmVhZFRpbWUodGltZV90JiByZXN1bHRU
aW1lLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKLXsKLSAgICBpZiAoc3RhcnQgKyBz
aXplb2YodGltZV90KSA+PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRo
ZSBzdHJlYW0gaXMgbm90IG5lY2Vzc2FyeSBhbGlnbmVkLgotICAgIG1lbWNweSgmcmVzdWx0VGlt
ZSwgc3RhcnQsIHNpemVvZih0aW1lX3QpKTsKLSAgICBzdGFydCArPSBzaXplb2YodGltZV90KTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciBzY2hlbWFWZXJzaW9u
ID0gJzEnOwotc3RhdGljIGNvbnN0IGNoYXIgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVG
aWxlbmFtZVtdID0gIlBsdWdpbk1ldGFkYXRhQ2FjaGUuYmluIjsKLQotdm9pZCBQbHVnaW5EYXRh
YmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCkKLXsKLSAgICBpZiAoIWlzUGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkgfHwgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRo
KCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbGF0Zm9ybUZpbGVIYW5kbGUg
ZmlsZTsKLSAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQocGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCksIHBlcnNpc3RlbnRQbHVnaW5NZXRh
ZGF0YUNhY2hlRmlsZW5hbWUpOwotICAgIGZpbGUgPSBvcGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0
aCwgT3BlbkZvclJlYWQpOwotCi0gICAgaWYgKCFpc0hhbmRsZVZhbGlkKGZpbGUpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIGNhY2hlIGFzIGxvYWRlZCByZWdhcmRsZXNzIG9mIHN1
Y2Nlc3Mgb3IgZmFpbHVyZS4gSWYKLSAgICAvLyB0aGVyZSdzIGVycm9yIGluIHRoZSBjYWNoZSwg
d2Ugd29uJ3QgdHJ5IHRvIGxvYWQgaXQgYW55bW9yZS4KLSAgICBtX3BlcnNpc3RlbnRNZXRhZGF0
YUNhY2hlSXNMb2FkZWQgPSB0cnVlOwotCi0gICAgVmVjdG9yPGNoYXI+IGZpbGVDb250ZW50czsK
LSAgICBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGUsIGZpbGVDb250ZW50cyk7Ci0g
ICAgY2xvc2VGaWxlKGZpbGUpOwotCi0gICAgaWYgKGZpbGVDb250ZW50cy5zaXplKCkgPCAyIHx8
IGZpbGVDb250ZW50cy5maXJzdCgpICE9IHNjaGVtYVZlcnNpb24gfHwgZmlsZUNvbnRlbnRzLmxh
c3QoKSAhPSAnXDAnKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlYWQgcGx1Z2lu
IG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IHNjaGVtYSIpOwotICAgICAgICBkZWxldGVGaWxlKGFi
c29sdXRlQ2FjaGVQYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNoYXIqIGJ1
ZmZlclBvcyA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyAxOwotICAgIGNoYXIqIGVuZCA9IGZpbGVD
b250ZW50cy5kYXRhKCkgKyBmaWxlQ29udGVudHMuc2l6ZSgpOwotCi0gICAgUGx1Z2luU2V0IGNh
Y2hlZFBsdWdpbnM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVfdD4gY2FjaGVkUGx1Z2luUGF0
aHNXaXRoVGltZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+
IGNhY2hlZFBsdWdpbnNCeVBhdGg7Ci0KLSAgICB3aGlsZSAoYnVmZmVyUG9zIDwgZW5kKSB7Ci0g
ICAgICAgIFN0cmluZyBwYXRoOwotICAgICAgICB0aW1lX3QgbGFzdE1vZGlmaWVkOwotICAgICAg
ICBTdHJpbmcgbmFtZTsKLSAgICAgICAgU3RyaW5nIGRlc2M7Ci0gICAgICAgIFN0cmluZyBtaW1l
RGVzYzsKLSAgICAgICAgaWYgKCEocmVhZFVURjhTdHJpbmcocGF0aCwgYnVmZmVyUG9zLCBlbmQp
Ci0gICAgICAgICAgICAgICYmIHJlYWRUaW1lKGxhc3RNb2RpZmllZCwgYnVmZmVyUG9zLCBlbmQp
Ci0gICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5nKG5hbWUsIGJ1ZmZlclBvcywgZW5kKQot
ICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhkZXNjLCBidWZmZXJQb3MsIGVuZCkKLSAg
ICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcobWltZURlc2MsIGJ1ZmZlclBvcywgZW5kKSkp
IHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRh
IGNhY2hlOiBjb3JydXB0IGRhdGEiKTsKLSAgICAgICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVD
YWNoZVBhdGgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
U2tpcCBtZXRhZGF0YSB0aGF0IHBvaW50cyB0byBwbHVnaW5zIGZyb20gZGlyZWN0b3JpZXMgdGhh
dAotICAgICAgICAvLyBhcmUgbm90IHBhcnQgb2YgcGx1Z2luIGRpcmVjdG9yeSBsaXN0IGFueW1v
cmUuCi0gICAgICAgIFN0cmluZyBwbHVnaW5EaXJlY3RvcnlOYW1lID0gZGlyZWN0b3J5TmFtZShw
YXRoKTsKLSAgICAgICAgaWYgKG1fcGx1Z2luRGlyZWN0b3JpZXMuZmluZChwbHVnaW5EaXJlY3Rv
cnlOYW1lKSA9PSBXVEY6Om5vdEZvdW5kKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQ
YWNrYWdlRnJvbUNhY2hlKHBhdGgsIGxhc3RNb2RpZmllZCwgbmFtZSwgZGVzYywgbWltZURlc2Mp
OwotCi0gICAgICAgIGlmIChwYWNrYWdlICYmIGNhY2hlZFBsdWdpbnMuYWRkKHBhY2thZ2UpLmlz
TmV3RW50cnkpIHsKLSAgICAgICAgICAgIGNhY2hlZFBsdWdpblBhdGhzV2l0aFRpbWVzLmFkZChw
YWNrYWdlLT5wYXRoKCksIHBhY2thZ2UtPmxhc3RNb2RpZmllZCgpKTsKLSAgICAgICAgICAgIGNh
Y2hlZFBsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBtX3BsdWdpbnMuc3dhcChjYWNoZWRQbHVnaW5zKTsKLSAgICBtX3Bs
dWdpbnNCeVBhdGguc3dhcChjYWNoZWRQbHVnaW5zQnlQYXRoKTsKLSAgICBtX3BsdWdpblBhdGhz
V2l0aFRpbWVzLnN3YXAoY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXMpOwotfQotCi1zdGF0aWMg
Ym9vbCB3cml0ZVVURjhTdHJpbmcoUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQotewotICAgIENTdHJpbmcgdXRmOFN0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0g
ICAgaW50IGxlbmd0aCA9IHV0ZjhTdHJpbmcubGVuZ3RoKCkgKyAxOwotICAgIHJldHVybiB3cml0
ZVRvRmlsZShmaWxlLCB1dGY4U3RyaW5nLmRhdGEoKSwgbGVuZ3RoKSA9PSBsZW5ndGg7Ci19Ci0K
LXN0YXRpYyBib29sIHdyaXRlVGltZShQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgY29uc3QgdGlt
ZV90JiB0aW1lKQotewotICAgIHJldHVybiB3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPigmdGltZSksIHNpemVvZih0aW1lX3QpKSA9PSBzaXplb2YodGltZV90
KTsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6dXBkYXRlUGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGUoKQotewotICAgIGlmICghaXNQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBw
ZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1ha2VBbGxEaXJlY3RvcmllcyhwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSk7
Ci0gICAgU3RyaW5nIGFic29sdXRlQ2FjaGVQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLCBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFD
YWNoZUZpbGVuYW1lKTsKLSAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKLQotICAg
IGlmIChtX3BsdWdpbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbGF0Zm9y
bUZpbGVIYW5kbGUgZmlsZTsKLSAgICBmaWxlID0gb3BlbkZpbGUoYWJzb2x1dGVDYWNoZVBhdGgs
IE9wZW5Gb3JXcml0ZSk7Ci0KLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoZmlsZSkpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBwbHVnaW4gbWV0YWRhdGEgY2FjaGUgZm9yIHNh
dmluZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciBsb2NhbFNjaGVtYVZl
cnNpb24gPSBzY2hlbWFWZXJzaW9uOwotICAgIGlmICh3cml0ZVRvRmlsZShmaWxlLCAmbG9jYWxT
Y2hlbWFWZXJzaW9uLCAxKSAhPSAxKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHdy
aXRlIHBsdWdpbiBtZXRhZGF0YSBjYWNoZSBzY2hlbWEiKTsKLSAgICAgICAgY2xvc2VGaWxlKGZp
bGUpOwotICAgICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVn
aW5zLmVuZCgpOwotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEod3JpdGVVVEY4
U3RyaW5nKGZpbGUsICgqaXQpLT5wYXRoKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVGltZShm
aWxlLCAoKml0KS0+bGFzdE1vZGlmaWVkKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0
cmluZyhmaWxlLCAoKml0KS0+bmFtZSgpKQotICAgICAgICAgICAgICAmJiB3cml0ZVVURjhTdHJp
bmcoZmlsZSwgKCppdCktPmRlc2NyaXB0aW9uKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVVRG
OFN0cmluZyhmaWxlLCAoKml0KS0+ZnVsbE1JTUVEZXNjcmlwdGlvbigpKSkpIHsKLSAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBtZXRhZGF0YSB0byBjYWNoZSIp
OwotICAgICAgICAgICAgY2xvc2VGaWxlKGZpbGUpOwotICAgICAgICAgICAgZGVsZXRlRmlsZShh
YnNvbHV0ZUNhY2hlUGF0aCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBjbG9zZUZpbGUoZmlsZSk7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUGVy
c2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gZ1BlcnNpc3RlbnRQ
bHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpz
ZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCi17Ci0gICAg
Z1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkID0gaXNFbmFibGVkOwotfQot
Ci1TdHJpbmcgUGx1Z2luRGF0YWJhc2U6OnBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpCi17
Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgp
OwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBh
dGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpCi17Ci0gICAgV2Vi
Q29yZTo6cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCkgPSBwZXJzaXN0ZW50TWV0
YWRhdGFDYWNoZVBhdGg7Ci19Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjNDhlY2RmZjZjZjIy
NDM1NTk0ZjhhZTg1MjMwMWE2MjYzY2Y4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVn
aW5EYXRhYmFzZV9oCi0jZGVmaW5lIFBsdWdpbkRhdGFiYXNlX2gKLQotI2luY2x1ZGUgIlBsdWdp
blBhY2thZ2UuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBFbGVtZW50
OwotICAgIGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgVVJMOwot
ICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlQ2xpZW50OwotICAgIGNsYXNzIFBsdWdpblBhY2thZ2U7
Ci0KLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2U+LCBQbHVnaW5QYWNr
YWdlSGFzaCwgUGx1Z2luUGFja2FnZUhhc2hUcmFpdHM+IFBsdWdpblNldDsKLQotICAgIGNsYXNz
IFBsdWdpbkRhdGFiYXNlIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luRGF0
YWJhc2UpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBs
dWdpbkRhdGFiYXNlKCk7Ci0KLSAgICAgICAgLy8gVGhlIGZpcnN0IGNhbGwgdG8gaW5zdGFsbGVk
UGx1Z2lucyBjcmVhdGVzIHRoZSBwbHVnaW4gZGF0YWJhc2UKLSAgICAgICAgLy8gYW5kIGJ5IGRl
ZmF1bHQgcG9wdWxhdGVzIGl0IHdpdGggdGhlIHBsdWdpbnMgaW5zdGFsbGVkIG9uIHRoZSBzeXN0
ZW0uCi0gICAgICAgIC8vIEZvciB0ZXN0aW5nIHB1cnBvc2VzLCBpdCBpcyBwb3NzaWJsZSB0byBu
b3QgcG9wdWxhdGUgdGhlIGRhdGFiYXNlCi0gICAgICAgIC8vIGF1dG9tYXRpY2FsbHksIGFzIHRo
ZSBwbHVnaW5zIG1pZ2h0IGFmZmVjdCB0aGUgRFJUIHJlc3VsdHMgYnkKLSAgICAgICAgLy8gd3Jp
dGluZyB0byBhLm8uIHN0ZGVyci4KLSAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBpbnN0
YWxsZWRQbHVnaW5zKGJvb2wgcG9wdWxhdGUgPSB0cnVlKTsKLQotICAgICAgICBib29sIHJlZnJl
c2goKTsKLSAgICAgICAgdm9pZCBjbGVhcigpOwotICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2Fn
ZSo+IHBsdWdpbnMoKSBjb25zdDsKLSAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpbkRpcmVj
dG9yeShjb25zdCBTdHJpbmcmKTsKLQotICAgICAgICBzdGF0aWMgYm9vbCBpc1ByZWZlcnJlZFBs
dWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSk7Ci0gICAgICAgIHN0YXRpYyBp
bnQgcHJlZmVycmVkUGx1Z2luQ29tcGFyZShjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCopOwotCi0g
ICAgICAgIFBsdWdpblBhY2thZ2UqIGZpbmRQbHVnaW4oY29uc3QgVVJMJiwgU3RyaW5nJiBtaW1l
VHlwZSk7Ci0gICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpOwotICAgICAgICB2b2lkIHNldFByZWZlcnJlZFBsdWdpbkZvck1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBsdWdpblBhY2thZ2UqIHBsdWdpbik7Ci0KLSAg
ICAgICAgdm9pZCBzZXRQbHVnaW5EaXJlY3Rvcmllcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGly
ZWN0b3JpZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICBt
X3BsdWdpbkRpcmVjdG9yaWVzID0gZGlyZWN0b3JpZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBi
b29sIHJlbW92ZURpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKLSAg
ICAgICAgYm9vbCBhZGREaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7
Ci0gICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMo
KTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gcGx1Z2luRGlyZWN0b3JpZXMoKSBjb25zdCB7IHJl
dHVybiBtX3BsdWdpbkRpcmVjdG9yaWVzOyB9Ci0KLSAgICAgICAgU3RyaW5nIE1JTUVUeXBlRm9y
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdDsKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICBzdGF0aWMgYm9vbCBpc1BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpOwotICAgICAgICBzdGF0aWMgdm9pZCBzZXRQZXJz
aXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpOwotICAgICAgICBzdGF0
aWMgU3RyaW5nIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpOwotICAgICAgICBzdGF0aWMg
dm9pZCBzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZVBhdGgpOwotI2VuZGlmCi0KLSAgICBwcml2YXRlOgotICAgICAgICB2
b2lkIGdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mKSBjb25zdDsK
LSAgICAgICAgdm9pZCBnZXREZWxldGVkUGx1Z2lucyhQbHVnaW5TZXQmKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZChjb25zdCBTdHJpbmcmKSBjb25zdDsK
LQotICAgICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHBsdWdpbiB3YXMgYWN0dWFsbHkgYWRk
ZWQgb3Igbm90IChpdCB3b24ndCBiZSBhZGRlZCBpZiBpdCdzIGEgZHVwbGljYXRlIG9mIGFuIGV4
aXN0aW5nIHBsdWdpbikuCi0gICAgICAgIGJvb2wgYWRkKFBhc3NSZWZQdHI8UGx1Z2luUGFja2Fn
ZT4pOwotICAgICAgICB2b2lkIHJlbW92ZShQbHVnaW5QYWNrYWdlKik7Ci0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAgdm9pZCBsb2FkUGVyc2lzdGVu
dE1ldGFkYXRhQ2FjaGUoKTsKLSAgICAgICAgdm9pZCB1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFD
YWNoZSgpOwotI2VuZGlmCi0KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1fZGlzYWJsZWRQbHVn
aW5GaWxlczsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5EaXJlY3RvcmllczsKLSAg
ICAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKLSAgICAgICAgUGx1
Z2luU2V0IG1fcGx1Z2luczsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5Q
YWNrYWdlPiA+IG1fcGx1Z2luc0J5UGF0aDsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVf
dD4gbV9wbHVnaW5QYXRoc1dpdGhUaW1lczsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxQbHVnaW5QYWNrYWdlPiA+IG1fcHJlZmVycmVkUGx1Z2luczsKLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICBib29sIG1fcGVyc2lzdGVudE1ldGFk
YXRhQ2FjaGVJc0xvYWRlZDsKLSNlbmRpZgotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRl
YnVnLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmQyM2FlNjcxMzhhY2FiYzY1YjRlMzAwY2YyY2UxNzk4
MTQwNTM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdp
bkRlYnVnLmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmICFMT0df
RElTQUJMRUQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZXJyb3JTdHJpbmdzW10gPSB7Ci0gICAgIk5vIGVycm9ycyBvY2N1cnJlZC4iLCAvKiBOUEVS
Ul9OT19FUlJPUiAqLwotICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmljIGVycm9yIGNvZGUgb2Nj
dXJyZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLwotICAgICJJbnZhbGlkIGluc3RhbmNl
IHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9S
ICovCi0gICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9GVU5D
VEFCTEVfRVJST1IgKi8KLSAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZhaWxlZC4iLCAvKiBOUEVS
Ul9NT0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KLSAgICAiTWVtb3J5IGFsbG9jYXRpb24gZmFp
bGVkLiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KLSAgICAiUGx1Zy1pbiBtaXNz
aW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRVJST1IgKi8KLSAgICAi
UGx1Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURf
UExVR0lOX0RJUl9FUlJPUiAqLwotICAgICJWZXJzaW9ucyBvZiBwbHVnLWluIGFuZCBDb21tdW5p
Y2F0b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJMRV9WRVJTSU9OX0VSUk9S
ICovCi0gICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJ
RF9QQVJBTSAqLwotICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFM
SURfVVJMICovCi0gICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0ZJTEVf
Tk9UX0ZPVU5EICovCi0gICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIsIC8qIE5QRVJSX05P
X0RBVEEgKi8KLSAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIsIC8qIE5QRVJSX1NUUkVB
TV9OT1RfU0VFS0FCTEUgKi8KLSAgICAiVW5rbm93biBlcnJvciBjb2RlIgotfTsKLQotI2lmZGVm
IFhQX01BQ09TWAotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRyYXdpbmdNb2RlbHNbXSA9IHsK
LSAgICAiTlBEcmF3aW5nTW9kZWxRdWlja0RyYXciLAotICAgICJOUERyYXdpbmdNb2RlbENvcmVH
cmFwaGljcyIsCi0gICAgIk5QRHJhd2luZ01vZGVsT3BlbkdMIiwKLSAgICAiTlBEcmF3aW5nTW9k
ZWxDb3JlQW5pbWF0aW9uIgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGV2ZW50TW9k
ZWxzW10gPSB7Ci0gICAgIk5QRXZlbnRNb2RlbENhcmJvbiIsCi0gICAgIk5QRXZlbnRNb2RlbENv
Y29hIgotfTsKLSNlbmRpZiAvL1hQX01BQ09TWAotCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9y
TlBFcnJvcihOUEVycm9yIGVycm9yKQotewotICAgIHJldHVybiBlcnJvclN0cmluZ3NbZXJyb3Jd
OwotfQotCi0jaWZkZWYgWFBfTUFDT1NYCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRHJhd2lu
Z01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCkKLXsKLSAgICByZXR1cm4gZHJhd2lu
Z01vZGVsc1tkcmF3aW5nTW9kZWxdOwotfQotCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRXZl
bnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCkKLXsKLSAgICByZXR1cm4gZXZlbnRNb2Rl
bHNbZXZlbnRNb2RlbF07Ci19Ci0jZW5kaWYgLy9YUF9NQUNPU1gKLQotQ1N0cmluZyBwcmV0dHlO
YW1lRm9yTlBOVmFyaWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpCi17Ci0gICAgc3dpdGNoICh2
YXJpYWJsZSkgewotICAgIGNhc2UgTlBOVnhEaXNwbGF5OiByZXR1cm4gIk5QTlZ4RGlzcGxheSI7
Ci0gICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiByZXR1cm4gIk5QTlZ4dEFwcENvbnRleHQiOwot
ICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiByZXR1cm4gIk5QTlZuZXRzY2FwZVdpbmRvdyI7
Ci0gICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOiByZXR1cm4gIk5QTlZqYXZhc2Ny
aXB0RW5hYmxlZEJvb2wiOwotICAgIGNhc2UgTlBOVmFzZEVuYWJsZWRCb29sOiByZXR1cm4gIk5Q
TlZhc2RFbmFibGVkQm9vbCI7Ci0gICAgY2FzZSBOUE5WaXNPZmZsaW5lQm9vbDogcmV0dXJuICJO
UE5WaXNPZmZsaW5lQm9vbCI7Ci0KLSAgICBjYXNlIE5QTlZzZXJ2aWNlTWFuYWdlcjogcmV0dXJu
ICJOUE5Wc2VydmljZU1hbmFnZXIgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QTlZET01F
bGVtZW50OiByZXR1cm4gIk5QTlZET01FbGVtZW50IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2Fz
ZSBOUE5WRE9NV2luZG93OiByZXR1cm4gIk5QTlZET01XaW5kb3cgKG5vdCBzdXBwb3J0ZWQpIjsK
LSAgICBjYXNlIE5QTlZUb29sa2l0OiByZXR1cm4gIk5QTlZUb29sa2l0IChub3Qgc3VwcG9ydGVk
KSI7Ci0gICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiByZXR1cm4gIk5QTlZTdXBwb3J0
c1hFbWJlZEJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKLQotICAgIGNhc2UgTlBOVldpbmRvd05QT2Jq
ZWN0OiByZXR1cm4gIk5QTlZXaW5kb3dOUE9iamVjdCI7Ci0gICAgY2FzZSBOUE5WUGx1Z2luRWxl
bWVudE5QT2JqZWN0OiByZXR1cm4gIk5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3QiOwotICAgIGNh
c2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczogcmV0dXJuICJOUE5WU3VwcG9ydHNXaW5kb3dsZXNz
IjsKLSAgICBjYXNlIE5QTlZwcml2YXRlTW9kZUJvb2w6IHJldHVybiAiTlBOVnByaXZhdGVNb2Rl
Qm9vbCI7Ci0KLSNpZmRlZiBYUF9NQUNPU1gKLSAgICBjYXNlIE5QTlZwbHVnaW5EcmF3aW5nTW9k
ZWw6IHJldHVybiAiTlBOVnBsdWdpbkRyYXdpbmdNb2RlbCI7Ci0jaWZuZGVmIE5QX05PX1FVSUNL
RFJBVwotICAgIGNhc2UgTlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbDogcmV0dXJuICJOUE5Wc3Vw
cG9ydHNRdWlja0RyYXdCb29sIjsKLSNlbmRpZgotICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29yZUdy
YXBoaWNzQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb3JlR3JhcGhpY3NCb29sIjsKLSAgICBj
YXNlIE5QTlZzdXBwb3J0c09wZW5HTEJvb2w6IHJldHVybiAiTlBOVnN1cHBvcnRzT3BlbkdMQm9v
bCI7Ci0gICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbDogcmV0dXJuICJOUE5W
c3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbCI7Ci0jaWZuZGVmIE5QX05PX0NBUkJPTgotICAgIGNh
c2UgTlBOVnN1cHBvcnRzQ2FyYm9uQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDYXJib25Cb29s
IjsKLSNlbmRpZgotICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29jb2FCb29sOiByZXR1cm4gIk5QTlZz
dXBwb3J0c0NvY29hQm9vbCI7Ci0jZW5kaWYKLQotICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93
biB2YXJpYWJsZSI7Ci0gICAgfQotfQotCi1DU3RyaW5nIHByZXR0eU5hbWVGb3JOUFBWYXJpYWJs
ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCi17Ci0gICAgc3dpdGNoICh2YXJp
YWJsZSkgewotICAgIGNhc2UgTlBQVnBsdWdpbk5hbWVTdHJpbmc6IHJldHVybiAiTlBQVnBsdWdp
bk5hbWVTdHJpbmciOwotICAgIGNhc2UgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nOiByZXR1
cm4gIk5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZyI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luV2lu
ZG93Qm9vbDogcmV0dXJuICJOUFBWcGx1Z2luV2luZG93Qm9vbCI7Ci0gICAgY2FzZSBOUFBWcGx1
Z2luVHJhbnNwYXJlbnRCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2wiOwot
Ci0gICAgY2FzZSBOUFBWamF2YUNsYXNzOiByZXR1cm4gIk5QUFZqYXZhQ2xhc3MgKG5vdCBzdXBw
b3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dTaXplOiByZXR1cm4gIk5QUFZwbHVn
aW5XaW5kb3dTaXplIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luVGltZXJJ
bnRlcnZhbDogcmV0dXJuICJOUFBWcGx1Z2luVGltZXJJbnRlcnZhbCAobm90IHN1cHBvcnRlZCki
OwotICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVJbnN0YW5jZTogcmV0dXJuICJOUFBWcGx1
Z2luU2NyaXB0YWJsZUluc3RhbmNlIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1
Z2luU2NyaXB0YWJsZUlJRDogcmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0YWJsZUlJRCAobm90IHN1
cHBvcnRlZCkiOwotICAgIGNhc2UgTlBQVmphdmFzY3JpcHRQdXNoQ2FsbGVyQm9vbDogcmV0dXJu
ICJOUFBWamF2YXNjcmlwdFB1c2hDYWxsZXJCb29sIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2Fz
ZSBOUFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeTogcmV0dXJuICJOUFBWcGx1Z2luS2VlcExp
YnJhcnlJbk1lbW9yeSAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpbk5lZWRz
WEVtYmVkOiByZXR1cm4gIk5QUFZwbHVnaW5OZWVkc1hFbWJlZCAobm90IHN1cHBvcnRlZCkiOwot
Ci0gICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0OiByZXR1cm4gIk5QUFZwbHVn
aW5TY3JpcHRhYmxlTlBPYmplY3QiOwotCi0gICAgY2FzZSBOUFBWZm9ybVZhbHVlOiByZXR1cm4g
Ik5QUFZmb3JtVmFsdWUgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5VcmxS
ZXF1ZXN0c0Rpc3BsYXllZEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblVybFJlcXVlc3RzRGlzcGxh
eWVkQm9vbCAobm90IHN1cHBvcnRlZCkiOwotCi0gICAgY2FzZSBOUFBWcGx1Z2luV2FudHNBbGxO
ZXR3b3JrU3RyZWFtczogcmV0dXJuICJOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtcyI7
Ci0gICAgY2FzZSBOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtOiByZXR1cm4gIk5QUFZwbHVnaW5D
YW5jZWxTcmNTdHJlYW0iOwotCi0jaWZkZWYgWFBfTUFDT1NYCi0gICAgY2FzZSBOUFBWcGx1Z2lu
RHJhd2luZ01vZGVsOiB7Ci0gICAgICAgIFN0cmluZyByZXN1bHQoIk5QUFZwbHVnaW5EcmF3aW5n
TW9kZWwsICIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHByZXR0eU5hbWVGb3JEcmF3aW5nTW9k
ZWwoTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVlKSkpKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5sYXRpbjEoKTsKLSAgICB9Ci0gICAgY2FzZSBOUFBWcGx1Z2luRXZlbnRNb2RlbDogewot
ICAgICAgICBTdHJpbmcgcmVzdWx0KCJOUFBWcGx1Z2luRXZlbnRNb2RlbCwgIik7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQocHJldHR5TmFtZUZvckV2ZW50TW9kZWwoTlBFdmVudE1vZGVsKHVpbnRw
dHJfdCh2YWx1ZSkpKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQubGF0aW4xKCk7Ci0gICAgfQot
ICAgIGNhc2UgTlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllcjogcmV0dXJuICJOUFBWcGx1Z2lu
Q29yZUFuaW1hdGlvbkxheWVyIjsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNl
bmRpZgotCi0gICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlhYmxlIjsKLSAgICB9Ci19
Ci0KLUNTdHJpbmcgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5QTlVSTFZhcmlhYmxlIHZh
cmlhYmxlKQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlVSTFZDb29r
aWU6IHJldHVybiAiTlBOVVJMVkNvb2tpZSI7Ci0gICAgY2FzZSBOUE5VUkxWUHJveHk6IHJldHVy
biAiTlBOVVJMVlByb3h5IjsKLSAgICBkZWZhdWx0OiByZXR1cm4gIlVua25vd24gdmFyaWFibGUi
OwotICAgIH0KLX0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vICFMT0dfRElT
QUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjY3NDg1ZTkwOTI4YTA1ZmNiZGE4Mjk0MGE3Mzk2NzA5ODcxZGI2MS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIFBsdWdpbkRlYnVnX2gKLSNkZWZpbmUgUGx1Z2luRGVidWdfaAotCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotI2RlZmluZSBMT0dfTlBFUlJPUihlcnIpIGlmIChlcnIgIT0gTlBF
UlJfTk9fRVJST1IpIExPR19WRVJCT1NFKFBsdWdpbnMsICIlc1xuIiwgcHJldHR5TmFtZUZvck5Q
RXJyb3IoZXJyKSkKLSNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKSBMT0dfVkVSQk9TRShQ
bHVnaW5zLCAiU3RyZWFtIGZhaWxlZCBkdWUgdG8gcHJvYmxlbXMgd2l0aCBuZXR3b3JrLCBkaXNr
IEkvTywgbGFjayBvZiBtZW1vcnksIG9yIG90aGVyIHByb2JsZW1zLlxuIikKLQotI2lmICFMT0df
RElTQUJMRUQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1l
Rm9yTlBFcnJvcihOUEVycm9yIGVycm9yKTsKLQotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVmFy
aWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpOwotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBQVmFy
aWFibGUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKLUNTdHJpbmcgcHJldHR5
TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlKTsKLQotI2lmZGVm
IFhQX01BQ09TWAotY29uc3QgY2hhciogcHJldHR5TmFtZUZvckRyYXdpbmdNb2RlbChOUERyYXdp
bmdNb2RlbCBkcmF3aW5nTW9kZWwpOwotY29uc3QgY2hhciogcHJldHR5TmFtZUZvckV2ZW50TW9k
ZWwoTlBFdmVudE1vZGVsIGV2ZW50TW9kZWwpOwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKLQotI2VuZGlmIC8vIFBsdWdpbkRlYnVn
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3ZTA5OTg4MDQ5NzFjYWU1YWJhNjNjZDZjZGMxMzQ1ZmU3YzI0MGU0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0Nzgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLQotI2luY2x1
ZGUgImNfdXRpbGl0eS5oIgotI2luY2x1ZGUgIklkZW50aWZpZXJSZXAuaCIKLSNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTlBfanNvYmplY3QuaCIKLSNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAiUGx1
Z2luVmlldy5oIgotI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgIlRpbWVyLmgi
Ci0jaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9Db21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNHbG9iYWxPYmplY3QuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2thZ2UoKQotewot
ICAgIC8vIFRoaXMgZGVzdHJ1Y3RvciBnZXRzIGNhbGxlZCBkdXJpbmcgcmVmcmVzaCgpIGlmIFBs
dWdpbkRhdGFiYXNlJ3MKLSAgICAvLyBQbHVnaW5TZXQgaGFzaCBpcyBhbHJlYWR5IHBvcHVsYXRl
ZCwgYXMgaXQgcmVtb3ZlcyBpdGVtcyBmcm9tCi0gICAgLy8gdGhlIGhhc2ggdGFibGUuIENhbGxp
bmcgdGhlIGRlc3RydWN0b3Igb24gYSBsb2FkZWQgcGx1Zy1pbiBvZgotICAgIC8vIGNvdXJzZSB3
b3VsZCBjYXVzZSBhIGNyYXNoLCBzbyB3ZSBjaGVjayB0byBjYWxsIHVubG9hZCBiZWZvcmUgd2UK
LSAgICAvLyBBU1NFUlQuCi0gICAgLy8gRklYTUU6IFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVy
IHdheSB0byBmaXggdGhpcy4KLSAgICBpZiAoIW1fbG9hZENvdW50KQotICAgICAgICB1bmxvYWRX
aXRob3V0U2h1dGRvd24oKTsKLSAgICBlbHNlCi0gICAgICAgIHVubG9hZCgpOwotCi0gICAgQVNT
RVJUKCFtX2lzTG9hZGVkKTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVNv
b24oKQotewotICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOwotICAg
IEFTU0VSVChtX21vZHVsZSk7Ci0gICAgQVNTRVJUKCFtX2xvYWRDb3VudCk7Ci0KLSAgICBtX2Zy
ZWVMaWJyYXJ5VGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6
OmZyZWVMaWJyYXJ5VGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICAv
LyBEbyBub3RoaW5nIGlmIHRoZSBtb2R1bGUgZ290IGxvYWRlZCBhZ2FpbiBtZWFud2hpbGUKLSAg
ICBpZiAoIW1fbG9hZENvdW50KSB7Ci0gICAgICAgIHVubG9hZE1vZHVsZShtX21vZHVsZSk7Ci0g
ICAgICAgIG1fbW9kdWxlID0gMDsKLSAgICB9Ci19Ci0KLQotaW50IFBsdWdpblBhY2thZ2U6OmNv
bXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAotewotICAgIC8vIFNv
cnQgcGx1Zy1pbnMgdGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3QuCi0gICAgYm9v
bCBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgYm9vbCBCYWxsb3dzTXVsdGlwbGVJ
bnN0YW5jZXMgPSAhY29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFs
bG93TXVsdGlwbGVJbnN0YW5jZXMpOwotICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMg
IT0gQmFsbG93c011bHRpcGxlSW5zdGFuY2VzKQotICAgICAgICByZXR1cm4gQWFsbG93c011bHRp
cGxlSW5zdGFuY2VzID8gLTEgOiAxOwotCi0gICAgLy8gU29ydCBwbHVnLWlucyBpbiBhIHByZWZl
cnJlZCBwYXRoIGZpcnN0LgotICAgIGJvb2wgQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVn
aW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkocGFyZW50RGlyZWN0b3J5KCkp
OwotICAgIGJvb2wgQmlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRhYmFzZTo6aXNQ
cmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpKTsKLSAg
ICBpZiAoQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgIT0gQmlzSW5QcmVmZXJyZWREaXJlY3Rvcnkp
Ci0gICAgICAgIHJldHVybiBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA/IC0xIDogMTsKLQotICAg
IGludCBkaWZmID0gc3RyY21wKG5hbWUoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ubmFtZSgp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChkaWZmKQotICAgICAgICByZXR1cm4gZGlmZjsKLQot
ICAgIGRpZmYgPSBjb21wYXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZlcnNpb24oKSk7Ci0gICAg
aWYgKGRpZmYpCi0gICAgICAgIHJldHVybiBkaWZmOwotCi0gICAgcmV0dXJuIHN0cmNtcChwYXJl
bnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCku
dXRmOCgpLmRhdGEoKSk7Ci19Ci0KLVBsdWdpblBhY2thZ2U6OlBsdWdpblBhY2thZ2UoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKLSAgICA6IG1faXNFbmFi
bGVkKHRydWUpCi0gICAgLCBtX2lzTG9hZGVkKGZhbHNlKQotICAgICwgbV9sb2FkQ291bnQoMCkK
LSAgICAsIG1fcGF0aChwYXRoKQotICAgICwgbV9tb2R1bGVWZXJzaW9uKDApCi0gICAgLCBtX21v
ZHVsZSgwKQotICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQotICAgICwgbV9mcmVl
TGlicmFyeVRpbWVyKCp0aGlzLCAmUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVk
KQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgLCBtX2lu
Zm9Jc0Zyb21DYWNoZSh0cnVlKQotI2VuZGlmCi17Ci0gICAgbV9maWxlTmFtZSA9IHBhdGhHZXRG
aWxlTmFtZShtX3BhdGgpOwotICAgIG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9w
YXRoLmxlbmd0aCgpIC0gbV9maWxlTmFtZS5sZW5ndGgoKSAtIDEpOwotfQotCi12b2lkIFBsdWdp
blBhY2thZ2U6OnVubG9hZCgpCi17Ci0gICAgaWYgKCFtX2lzTG9hZGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoLS1tX2xvYWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybjsKLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIG1fTlBQX1NodXRkb3duKCk7Ci0jZW5k
aWYKLQotICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotfQotCi12b2lkIFBsdWdpblBhY2th
Z2U6OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCi17Ci0gICAgaWYgKCFtX2lzTG9hZGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKLSAgICBBU1NFUlQobV9t
b2R1bGUpOwotCi0gICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2ggd2hlbiBjbG9zaW5nIHRh
YiB3aXRoIHBkZiBmaWxlIChSZWFkZXIgNyBvbmx5KQotICAgIC8vIElmIHRoZSBwbHVnaW4gaGFz
IHN1YmNsYXNzZWQgaXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVhZGVyIDcsIHdlIG1heSBo
YXZlCi0gICAgLy8gZ290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVnaW4ncyBpbnRlcm5hbCB3
aW5kb3cgcHJvYyBmb3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKLSAgICAvLyBvcmlnaW5hbCB3
aW5kb3cgcHJvYy4gSWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkgZnJvbSBoZXJlLCB3ZSB3
aWxsIGp1bXAgYmFjawotICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVlZCB3aGVuIHdlIHJldHVy
biwgc28gZGVsYXkgY2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1bnRpbAotICAgIC8vIHRo
ZSBuZXh0IG1lc3NhZ2UgbG9vcAotICAgIGZyZWVMaWJyYXJ5U29vbigpOwotCi0gICAgbV9pc0xv
YWRlZCA9IGZhbHNlOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OnNldEVuYWJsZWQoYm9vbCBl
bmFibGVkKQotewotICAgIG1faXNFbmFibGVkID0gZW5hYmxlZDsKLX0KLQotUGFzc1JlZlB0cjxQ
bHVnaW5QYWNrYWdlPiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCi17Ci0gICAgUmVmUHRyPFBsdWdpblBh
Y2thZ2U+IHBhY2thZ2UgPSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBsYXN0TW9k
aWZpZWQpKTsKLQotICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIHBhY2thZ2UucmVsZWFzZSgpOwotfQotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLVBhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4g
UGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKQotewotICAg
IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYobmV3IFBsdWdpblBhY2th
Z2UocGF0aCwgbGFzdE1vZGlmaWVkKSk7Ci0gICAgcGFja2FnZS0+bV9uYW1lID0gbmFtZTsKLSAg
ICBwYWNrYWdlLT5tX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgcGFja2FnZS0+ZGV0
ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOwotICAgIHBhY2thZ2UtPnNldE1J
TUVEZXNjcmlwdGlvbihtaW1lRGVzY3JpcHRpb24pOwotICAgIHBhY2thZ2UtPm1faW5mb0lzRnJv
bUNhY2hlID0gdHJ1ZTsKLSAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Ci19Ci0jZW5kaWYK
LQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLXZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVp
cmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6
OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkgewotICAgICAgICAvLyBCZWNhdXNlIGEg
c2luZ2xlIHByb2Nlc3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3Qg
cmVsaWFibHkgdW5sb2FkIGEKLSAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0
aGUgSmF2YSBwbHVnaW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCi0g
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOwotCi0gICAg
ICAgIC8vIFNldHRpbmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNl
cyBiYWQgc2Nyb2xsaW5nIHJlcGFpbnQgcHJvYmxlbXMKLSAgICAgICAgLy8gd2l0aCB0aGUgSmF2
YSBwbHVnLWluLgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVy
b1JlY3RXaGVuU2Nyb2xsaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICht
aW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gZmxhc2hUZW5WZXJzaW9uKDB4MGEwMDAw
MDApOwotCi0gICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oZmxhc2hUZW5WZXJzaW9uKSA+
PSAwKSB7Ci0gICAgICAgICAgICAvLyBGbGFzaCAxMC4wIGIyMTggZG9lc24ndCBsaWtlIGhhdmlu
ZyBhIE5VTEwgd2luZG93IGhhbmRsZQotICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1
aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gRmxhc2ggOSBhbmQgb2xkZXIgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVn
aW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAotICAgICAgICAgICAgbV9xdWly
a3MuYWRkKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKLSAgICAgICAgfQotCi0j
aWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgLy8gNjQtYml0IEZsYXNoIGZyZWV6ZXMgaWYgcmlnaHQt
Y2xpY2sgaXMgc2VudCBpbiB3aW5kb3dsZXNzIG1vZGUKLSAgICAgICAgbV9xdWlya3MuYWRkKFBs
dWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUpOwotI2VuZGlmCi0KLSAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgp
OwotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOwot
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNz
YWdlcyk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVn
KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotI2lmICFPUyhXSU5ET1dTKQotdm9pZCBQbHVnaW5QYWNr
YWdlOjpkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCkKLXsKLSAgICAvLyBJ
dCdzIGEgYml0IGxhbWUgdG8gZGV0ZWN0IHRoZSBwbHVnaW4gdmVyc2lvbiBieSBwYXJzaW5nIGl0
Ci0gICAgLy8gZnJvbSB0aGUgcGx1Z2luIGRlc2NyaXB0aW9uIHN0cmluZywgYnV0IGl0IGRvZXNu
J3Qgc2VlbSB0aGF0Ci0gICAgLy8gdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4g
YW55IHN0YW5kYXJkaXplZCB3YXkgYXQKLSAgICAvLyB0aGUgbW9kdWxlIGxldmVsLCBsaWtlIGlu
IFdpbmRvd3MKLQotICAgIGlmIChtX2Rlc2NyaXB0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fZGVzY3JpcHRpb24uc3RhcnRzV2l0aCgiU2hvY2t3YXZlIEZsYXNo
IikgJiYgbV9kZXNjcmlwdGlvbi5sZW5ndGgoKSA+PSAxOSkgewotICAgICAgICAvLyBUaGUgZmxh
c2ggdmVyc2lvbiBhcyBhIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBkaWZmZXJzIG9uIFVuaXggZnJv
bSBXaW5kb3dzCi0gICAgICAgIC8vIHNpbmNlIHRoZSByZXZpc2lvbiBjYW4gYmUgbGFyZ2VyIHRo
YW4gYSA4IGJpdHMsIHNvIHdlIGFsbG93IGl0IDE2IGhlcmUgYW5kCi0gICAgICAgIC8vIHB1c2gg
dGhlIG1ham9yL21pbm9yIHVwIDggYml0cy4gVGh1cyBvbiBVbml4LCBGbGFzaCdzIHZlcnNpb24g
bWF5IGJlCi0gICAgICAgIC8vIDB4MGEwMDAwMDAgaW5zdGVhZCBvZiAweDAwMGEwMDAwLgotCi0g
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHZlcnNpb25QYXJ0czsKLSAgICAgICAgbV9kZXNjcmlwdGlv
bi5zdWJzdHJpbmcoMTYpLnNwbGl0KCcgJywgLyphbGxvd0VtcHR5RW50cmllcyA9Ki8gZmFsc2Us
IHZlcnNpb25QYXJ0cyk7Ci0gICAgICAgIGlmICh2ZXJzaW9uUGFydHMuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh2ZXJzaW9uUGFydHMuc2l6ZSgpID49IDEp
IHsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1ham9yTWlub3JQYXJ0czsKLSAgICAgICAg
ICAgIHZlcnNpb25QYXJ0c1swXS5zcGxpdCgnLicsIG1ham9yTWlub3JQYXJ0cyk7Ci0gICAgICAg
ICAgICBpZiAobWFqb3JNaW5vclBhcnRzLnNpemUoKSA+PSAxKSB7Ci0gICAgICAgICAgICAgICAg
Ym9vbCBjb252ZXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBtYWpvciA9
IG1ham9yTWlub3JQYXJ0c1swXS50b1VJbnQoJmNvbnZlcnRlZCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGNvbnZlcnRlZCkKLSAgICAgICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uID0gKG1h
am9yICYgMHhmZikgPDwgMjQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobWFqb3JN
aW5vclBhcnRzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBjb252ZXJ0ZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBtaW5vciA9IG1ham9yTWlub3JQYXJ0
c1sxXS50b1VJbnQoJmNvbnZlcnRlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRlZCkK
LSAgICAgICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uIHw9IChtaW5vciAmIDB4ZmYpIDw8
IDE2OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZlcnNpb25QYXJ0
cy5zaXplKCkgPj0gMikgewotICAgICAgICAgICAgU3RyaW5nIHJldmlzaW9uID0gdmVyc2lvblBh
cnRzWzFdOwotICAgICAgICAgICAgaWYgKHJldmlzaW9uLmxlbmd0aCgpID4gMSAmJiAocmV2aXNp
b25bMF0gPT0gJ3InIHx8IHJldmlzaW9uWzBdID09ICdiJykpIHsKLSAgICAgICAgICAgICAgICBy
ZXZpc2lvbi5yZW1vdmUoMCwgMSk7Ci0gICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uIHw9
IHJldmlzaW9uLnRvSW50KCkgJiAweGZmZmY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotc3RhdGlj
IHZvaWQgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
TlBWYXJpYW50KiBhcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgSlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogcm9vdE9iamVjdCwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYUxpc3QpCi17Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCi0gICAgICAgIGFMaXN0
LmFwcGVuZChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmYXJn
c1tpXSwgcm9vdE9iamVjdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTQzo6U291cmNlQ29kZSBt
YWtlU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCA9IFN0cmlu
ZygpLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb246Om1p
bmltdW1Qb3NpdGlvbigpKQotewotICAgIHJldHVybiBKU0M6OlNvdXJjZUNvZGUoSlNDOjpTdHJp
bmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9uKSwgc3Rh
cnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSwgc3RhcnRQb3NpdGlvbi5tX2NvbHVtbi5v
bmVCYXNlZEludCgpKTsKLX0KLQotc3RhdGljIGJvb2wgTlBOX0V2YWx1YXRlKE5QUCBpbnN0YW5j
ZSwgTlBPYmplY3QqIG8sIE5QU3RyaW5nKiBzLCBOUFZhcmlhbnQqIHZhcmlhbnQpCi17Ci0gICAg
aWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFTY3Jp
cHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOwot
Ci0gICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmotPnJv
b3RPYmplY3Q7Ci0gICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxp
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFRoZXJlIGlzIGEg
Y3Jhc2ggaW4gRmxhc2ggd2hlbiBldmFsdWF0aW5nIGEgc2NyaXB0IHRoYXQgZGVzdHJveXMgdGhl
Ci0gICAgICAgIC8vIFBsdWdpblZpZXcsIHNvIHdlIGRlc3Ryb3kgaXQgYXN5bmNocm9ub3VzbHku
Ci0gICAgICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShpbnN0YW5jZSk7Ci0KLSAgICAgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwotICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgICAgICBTdHJp
bmcgc2NyaXB0U3RyaW5nID0gSlNDOjpCaW5kaW5nczo6Y29udmVydE5QU3RyaW5nVG9VVEYxNihz
KTsKLQotICAgICAgICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0
U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkpOwotCi0gICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZl
cnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJldHVyblZhbHVlLCB2YXJpYW50KTsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgVk9JRF9UT19OUFZBUklBTlQoKnZhcmlhbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
c3RhdGljIGJvb2wgTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVy
IG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5Q
VmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RD
bGFzcykgewotICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0
PEphdmFTY3JpcHRPYmplY3QqPihvKTsKLQotICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3Rh
dGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KG1ldGhvZE5hbWUpOwotICAgICAgICBpZiAoIWktPmlz
U3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU3BlY2lh
bCBjYXNlIHRoZSAiZXZhbCIgbWV0aG9kLgotICAgICAgICBpZiAobWV0aG9kTmFtZSA9PSBfTlBO
X0dldFN0cmluZ0lkZW50aWZpZXIoImV2YWwiKSkgewotICAgICAgICAgICAgaWYgKGFyZ0NvdW50
ICE9IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGFy
Z3NbMF0udHlwZSAhPSBOUFZhcmlhbnRUeXBlX1N0cmluZykKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6TlBOX0V2YWx1YXRlKG5wcCwg
bywgY29uc3RfY2FzdDxOUFN0cmluZyo+KCZhcmdzWzBdLnZhbHVlLnN0cmluZ1ZhbHVlKSwgcmVz
dWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVj
dC4KLSAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+
cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIGZ1
bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBKU0M6OkJpbmRpbmdzOjppZGVudGlmaWVyRnJv
bU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwotICAgICAgICBKU0M6OkNhbGxEYXRh
IGNhbGxEYXRhOwotICAgICAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
ZnVuY3Rpb24sIGNhbGxEYXRhKTsKLSAgICAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5
cGVOb25lKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIENhbGwgdGhl
IGZ1bmN0aW9uIG9iamVjdC4KLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdM
aXN0OwotICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50
LCByb290T2JqZWN0LCBhcmdMaXN0KTsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdFYgPSBK
U0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqLT5pbXAsIGFy
Z0xpc3QpOwotCi0gICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRo
ZSBmdW5jdGlvbiBjYWxsLgotICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05Q
VmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoby0+X2NsYXNz
LT5pbnZva2UpCi0gICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmludm9rZShvLCBtZXRob2ROYW1l
LCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKLQotICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1
bHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OmluaXRpYWxp
emVCcm93c2VyRnVuY3MoKQotewotICAgIG1lbXNldCgmbV9icm93c2VyRnVuY3MsIDAsIHNpemVv
ZihtX2Jyb3dzZXJGdW5jcykpOwotICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YobV9i
cm93c2VyRnVuY3MpOwotICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUFZlcnNpb24oKTsK
LQotICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7Ci0gICAgbV9icm93c2Vy
RnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOwotICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3Ry
ZWFkID0gTlBOX1JlcXVlc3RSZWFkOwotICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5Q
Tl9OZXdTdHJlYW07Ci0gICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7Ci0gICAg
bV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOwotICAgIG1f
YnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7Ci0gICAgbV9icm93c2VyRnVuY3MudWFn
ZW50ID0gTlBOX1VzZXJBZ2VudDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9N
ZW1BbGxvYzsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7Ci0gICAg
bV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7Ci0gICAgbV9icm93c2VyRnVu
Y3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOwotICAgIG1fYnJvd3NlckZ1bmNz
LmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7Ci0gICAgbV9icm93c2VyRnVuY3MucG9z
dHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHZh
bHVlID0gTlBOX0dldFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1Nl
dFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRh
dGVSZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxp
ZGF0ZVJlZ2lvbjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJl
ZHJhdzsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7Ci0g
ICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7Ci0gICAgbV9i
cm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxl
ZFN0YXRlOwotICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Q
b3BQb3B1cHNFbmFibGVkU3RhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MucGx1Z2ludGhyZWFkYXN5
bmNjYWxsID0gTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbDsKLQotICAgIG1fYnJvd3NlckZ1bmNz
LnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7Ci0gICAgbV9i
cm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmll
cjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3Ry
aW5nSWRlbnRpZmllcnM7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9O
UE5fR2V0SW50SWRlbnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJp
bmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKLSAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJv
bWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5pbnRmcm9taWRlbnRpZmllciA9IF9OUE5fSW50RnJvbUlkZW50aWZpZXI7Ci0gICAgbV9icm93
c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7Ci0gICAgbV9icm93c2Vy
RnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7Ci0gICAgbV9icm93c2VyRnVu
Y3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5pbnZva2UgPSBXZWJDb3JlOjpOUE5fSW52b2tlOwotICAgIG1fYnJvd3NlckZ1bmNzLmludm9r
ZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7Ci0gICAgbV9icm93c2VyRnVuY3MuZXZhbHVh
dGUgPSBXZWJDb3JlOjpOUE5fRXZhbHVhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVy
dHkgPSBfTlBOX0dldFByb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0g
X05QTl9TZXRQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9O
UE5fUmVtb3ZlUHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBO
X0hhc1Byb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzTWV0
aG9kOwotICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9u
OwotICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOwotICAgIG1f
YnJvd3NlckZ1bmNzLmNvbnN0cnVjdCA9IF9OUE5fQ29uc3RydWN0OwotICAgIG1fYnJvd3NlckZ1
bmNzLmdldHZhbHVlZm9ydXJsID0gTlBOX0dldFZhbHVlRm9yVVJMOwotICAgIG1fYnJvd3NlckZ1
bmNzLnNldHZhbHVlZm9ydXJsID0gTlBOX1NldFZhbHVlRm9yVVJMOwotICAgIG1fYnJvd3NlckZ1
bmNzLmdldGF1dGhlbnRpY2F0aW9uaW5mbyA9IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm87Ci0K
LSAgICBtX2Jyb3dzZXJGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0gTlBOX1BvcFVwQ29udGV4dE1l
bnU7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpZiBFTkFC
TEUoUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hBU0gpCi11bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpo
YXNoKCkgY29uc3QKLXsKLSAgICBzdHJ1Y3QgSGFzaENvZGVzIHsKLSAgICAgICAgdW5zaWduZWQg
aGFzaDsKLSAgICAgICAgdGltZV90IG1vZGlmaWVkRGF0ZTsKLSAgICB9IGhhc2hDb2RlczsKLQot
ICAgIGhhc2hDb2Rlcy5oYXNoID0gbV9wYXRoLmltcGwoKS0+aGFzaCgpOwotICAgIGhhc2hDb2Rl
cy5tb2RpZmllZERhdGUgPSBtX2xhc3RNb2RpZmllZDsKLQotICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KCZoYXNoQ29kZXMpOwotfQotCi1ib29s
IFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdp
blBhY2thZ2UmIGIpCi17Ci0gICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3Jp
cHRpb247Ci19Ci0jZW5kaWYKLQotaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lv
bihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25zdAotewot
ICAgIC8vIHJldHVybiAtMSwgMCwgb3IgMSBpZiBwbHVnLWluIHZlcnNpb24gaXMgbGVzcyB0aGFu
LCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuCi0gICAgLy8gdGhlIHBhc3NlZCB2ZXJzaW9uCi0K
LSNpZiBPUyhXSU5ET1dTKQotICAgIGlmIChtX21vZHVsZVZlcnNpb24ubW9zdFNpZyAhPSBjb21w
YXJlVmVyc2lvbi5tb3N0U2lnKQotICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uLm1vc3RT
aWcgPiBjb21wYXJlVmVyc2lvbi5tb3N0U2lnID8gMSA6IC0xOwotICAgIGlmIChtX21vZHVsZVZl
cnNpb24ubGVhc3RTaWcgIT0gY29tcGFyZVZlcnNpb24ubGVhc3RTaWcpCi0gICAgICAgIHJldHVy
biBtX21vZHVsZVZlcnNpb24ubGVhc3RTaWcgPiBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZyA/IDEg
OiAtMTsKLSNlbHNlICAgIAotICAgIGlmIChtX21vZHVsZVZlcnNpb24gIT0gY29tcGFyZVZlcnNp
b24pCi0gICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24gPiBjb21wYXJlVmVyc2lvbiA/IDEg
OiAtMTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX01FVEFEQVRBX0NBQ0hFKQotYm9vbCBQbHVnaW5QYWNrYWdlOjplbnN1cmVQbHVnaW5M
b2FkZWQoKQotewotICAgIGlmICghbV9pbmZvSXNGcm9tQ2FjaGUpCi0gICAgICAgIHJldHVybiBt
X2lzTG9hZGVkOwotCi0gICAgbV9xdWlya3MgPSBQbHVnaW5RdWlya1NldCgpOwotICAgIG1fbmFt
ZSA9IFN0cmluZygpOwotICAgIG1fZGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKLSAgICBtX2Z1bGxN
SU1FRGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKLSAgICBtX21vZHVsZVZlcnNpb24gPSAwOwotCi0g
ICAgcmV0dXJuIGZldGNoSW5mbygpOwotfQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MzQwNTc2
Nzk3YWE2YmM4MzE3NzJiYzNiNGY5Y2NmOGNjOGJhNjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNr
YWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5QYWNr
YWdlX2gKLSNkZWZpbmUgUGx1Z2luUGFja2FnZV9oCi0KLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luUXVpcmtTZXQuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5o
IgotI2VuZGlmCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwotICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKLQot
ICAgIGNsYXNzIFBsdWdpblBhY2thZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdl
PiB7Ci0gICAgcHVibGljOgotICAgICAgICB+UGx1Z2luUGFja2FnZSgpOwotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOwotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblBh
Y2thZ2U+IGNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0
aW1lX3QmIGxhc3RNb2RpZmllZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRl
c2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbik7Ci0jZW5kaWYKLQotICAg
ICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICAg
ICAgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRp
b247IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRo
OyB9Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2Zp
bGVOYW1lOyB9Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgcGFyZW50RGlyZWN0b3J5KCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJlbnREaXJlY3Rvcnk7IH0KLSAgICAgICAgUGxhdGZvcm1Nb2R1bGUgbW9k
dWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGU7IH0KLSAgICAgICAgdWludDE2X3QgTlBWZXJz
aW9uKCkgY29uc3Q7Ci0gICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQoKSBjb25zdCB7IHJldHVy
biBtX2xhc3RNb2RpZmllZDsgfQotCi0gICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01h
cCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlv
bnM7IH0KLSAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQotCi0gICAgICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2lu
UGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYik7Ci0KLSAgICAgICAgYm9vbCBsb2Fk
KCk7Ci0gICAgICAgIHZvaWQgdW5sb2FkKCk7Ci0gICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNo
dXRkb3duKCk7Ci0KLSAgICAgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
RW5hYmxlZDsgfQotICAgICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7Ci0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2lu
RnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQotI2VuZGlmCi0gICAgICAg
IGludCBjb21wYXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJikgY29u
c3Q7Ci0gICAgICAgIGludCBjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmKSBjb25zdDsKLSAg
ICAgICAgUGx1Z2luUXVpcmtTZXQgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV9xdWlya3M7IH0K
LSAgICAgICAgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJiB2ZXJzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9tb2R1bGVWZXJzaW9uOyB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01F
VEFEQVRBX0NBQ0hFKQotICAgICAgICBib29sIGVuc3VyZVBsdWdpbkxvYWRlZCgpOwotICAgICAg
ICB2b2lkIHNldE1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbik7
Ci0gICAgICAgIFN0cmluZyBmdWxsTUlNRURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
dWxsTUlNRURlc2NyaXB0aW9uO30KLSNlbmRpZgotICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdp
blBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7
Ci0KLSAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKLSAgICAgICAgYm9vbCBpc1BsdWdpbkJsYWNr
bGlzdGVkKCk7Ci0gICAgICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpOwotCi0gICAgICAgIHZvaWQgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlw
dGlvbigpOwotICAgICAgICB2b2lkIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKLQotICAgICAg
ICBib29sIG1faXNFbmFibGVkOwotICAgICAgICBib29sIG1faXNMb2FkZWQ7Ci0gICAgICAgIGlu
dCBtX2xvYWRDb3VudDsKLQotICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKLSAgICAgICAg
U3RyaW5nIG1fcGF0aDsKLSAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7Ci0gICAgICAgIFN0cmlu
ZyBtX25hbWU7Ci0gICAgICAgIFN0cmluZyBtX3BhcmVudERpcmVjdG9yeTsKLQotICAgICAgICBQ
bGF0Zm9ybU1vZHVsZVZlcnNpb24gbV9tb2R1bGVWZXJzaW9uOwotCi0gICAgICAgIE1JTUVUb0Rl
c2NyaXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKLSAgICAgICAgTUlNRVRvRXh0ZW5z
aW9uc01hcCBtX21pbWVUb0V4dGVuc2lvbnM7Ci0KLSAgICAgICAgUGxhdGZvcm1Nb2R1bGUgbV9t
b2R1bGU7Ci0gICAgICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZDsKLQotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQX1NodXRk
b3duOwotICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7Ci0gICAgICAgIE5QTmV0
c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKLSNlbmRpZgotCi0gICAgICAgIHZvaWQgZnJlZUxp
YnJhcnlTb29uKCk7Ci0gICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKCk7Ci0gICAg
ICAgIFRpbWVyIG1fZnJlZUxpYnJhcnlUaW1lcjsKLQotICAgICAgICBQbHVnaW5RdWlya1NldCBt
X3F1aXJrczsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAg
ICAgICBTdHJpbmcgbV9mdWxsTUlNRURlc2NyaXB0aW9uOwotICAgICAgICBib29sIG1faW5mb0lz
RnJvbUNhY2hlOwotI2VuZGlmCi0gICAgfTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29y
a2Fyb3VuZCBiZWNhdXNlIFBsdWdpblBhY2thZ2VIYXNoIGlzIGJyb2tlbiBhbmQgbWF5IGNvbnNp
ZGVyIGtleXMgd2l0aCBkaWZmZXJlbnQgaGFzaGVzIGFzIGVxdWFsLgotICAgIHN0cnVjdCBQbHVn
aW5QYWNrYWdlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8UmVmUHRyPFBsdWdpblBhY2thZ2U+ID4g
ewotICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSA2NDsKLSAgICB9
OwotCi0gICAgc3RydWN0IFBsdWdpblBhY2thZ2VIYXNoIHsKLSAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgdWludHB0cl90IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQ
bHVnaW5QYWNrYWdlKj4oa2V5KS0+aGFzaCgpOyB9Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2go
KTsgfQotCi0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHVpbnRwdHJfdCBhLCBjb25z
dCB1aW50cHRyX3QgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNr
YWdlKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGIpKTsgfQotICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGEsIGNvbnN0
IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZTo6ZXF1YWwo
KmEuZ2V0KCksICpiLmdldCgpKTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblF1aXJrU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YTMzODNkYmI0NDY5MDk5NDA3ZDZiZGEx
MjNkMTAxZGNiNWQzODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpblF1aXJrU2V0X2gKLSNkZWZpbmUgUGx1Z2luUXVp
cmtTZXRfaAotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGVudW0gUGx1Z2luUXVpcmsg
ewotICAgICAgICBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCA9IDEgPDwgMCwKLSAg
ICAgICAgUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCA9IDEgPDwgMSwKLSAgICAg
ICAgUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUgPSAxIDw8IDIsIAotICAgICAgICBQbHVn
aW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtID0gMSA8PCAzLAotICAgICAgICBQbHVn
aW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzID0gMSA8PCA0LAotICAgICAgICBQ
bHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4gPSAxIDw8IDUsCi0gICAgICAgIFBsdWdpblF1aXJr
RG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSA9IDEgPDwgNiwKLSAgICAg
ICAgUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3NhZ2VMb29wID0gMSA8PCA3LAotICAgICAgICBQbHVn
aW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnID0gMSA8PCA4LAotICAgICAgICBQbHVnaW5RdWlya0Rv
bnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcgPSAxIDw8IDksCi0gICAgICAgIFBsdWdpblF1
aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kgPSAxIDw8IDEwLAotICAgICAgICBQ
bHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzID0gMSA8PCAxMSwKLSAgICAgICAg
UGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xLaXQgPSAxIDw8IDEyLAotICAgICAgICBQbHVnaW5R
dWlya1JlcXVpcmVzRGVmYXVsdFNjcmVlbkRlcHRoID0gMSA8PCAxMywKLSAgICAgICAgUGx1Z2lu
UXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVUaGFuT25jZSA9IDEgPDwgMTQsCi0gICAgICAgIFBs
dWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUgPSAxIDw8IDE1LAotICAg
ICAgICBQbHVnaW5RdWlya1dhbnRzQ2hyb21lVXNlckFnZW50ID0gMSA8PCAxNgotICAgIH07Ci0K
LSAgICBjbGFzcyBQbHVnaW5RdWlya1NldCB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAg
IFBsdWdpblF1aXJrU2V0KCkgOiBtX3F1aXJrcygwKSB7IH0KLSAgICAgICAgICAgIHZvaWQgYWRk
KFBsdWdpblF1aXJrIHF1aXJrKSB7IG1fcXVpcmtzIHw9IHF1aXJrOyB9Ci0gICAgICAgICAgICBi
b29sIGNvbnRhaW5zKFBsdWdpblF1aXJrIHF1aXJrKSBjb25zdCB7IHJldHVybiBtX3F1aXJrcyAm
IHF1aXJrOyB9Ci0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX3F1aXJr
czsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQbHVnaW5R
dWlya1NldF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVh
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YjliMTIwZjFmNDIwYzZiNGE3YzZiZmYwMDc2MzMwMGI1
NTgyNDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblN0
cmVhbS5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxv
YWRlci5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0vLyBXZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNv
bWUgcGx1Z2lucyBsaWtlIHRvIHJldHVybiAtMSB0byBpbmRpY2F0ZSBlcnJvcgotLy8gYW5kIHRo
aXMgd2F5IHdlIHdvbid0IGNsYXNoIHdpdGggdGhlbS4KLXN0YXRpYyBjb25zdCBpbnQgV2ViUmVh
c29uTm9uZSA9IC0yOwotCi11c2luZyBzdGQ6Om1heDsKLXVzaW5nIHN0ZDo6bWluOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgSGFzaE1hcDxOUFN0cmVhbSosIE5QUD4gU3RyZWFt
TWFwOwotc3RhdGljIFN0cmVhbU1hcCYgc3RyZWFtcygpCi17Ci0gICAgc3RhdGljIFN0cmVhbU1h
cCBzdGF0aWNTdHJlYW1zOwotICAgIHJldHVybiBzdGF0aWNTdHJlYW1zOwotfQotCi1QbHVnaW5T
dHJlYW06OlBsdWdpblN0cmVhbShQbHVnaW5TdHJlYW1DbGllbnQqIGNsaWVudCwgRnJhbWUqIGZy
YW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgYm9vbCBzZW5kTm90
aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5G
dW5jcywgTlBQIGluc3RhbmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtzKQotICAgIDog
bV9yZXNvdXJjZVJlcXVlc3QocmVzb3VyY2VSZXF1ZXN0KQotICAgICwgbV9jbGllbnQoY2xpZW50
KQotICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQot
ICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pCi0gICAgLCBtX3N0cmVh
bVN0YXRlKFN0cmVhbUJlZm9yZVN0YXJ0ZWQpCi0gICAgLCBtX2xvYWRNYW51YWxseShmYWxzZSkK
LSAgICAsIG1fZGVsYXlEZWxpdmVyeVRpbWVyKCp0aGlzLCAmUGx1Z2luU3RyZWFtOjpkZWxheURl
bGl2ZXJ5VGltZXJGaXJlZCkKLSAgICAsIG1fdGVtcEZpbGVIYW5kbGUoaW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZSkKLSAgICAsIG1fcGx1Z2luRnVuY3MocGx1Z2luRnVuY3MpCi0gICAgLCBtX2lu
c3RhbmNlKGluc3RhbmNlKQotICAgICwgbV9xdWlya3MocXVpcmtzKQotewotICAgIEFTU0VSVCht
X2luc3RhbmNlKTsKLQotICAgIG1fc3RyZWFtLnVybCA9IDA7Ci0gICAgbV9zdHJlYW0ubmRhdGEg
PSAwOwotICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKLSAgICBtX3N0cmVhbS5lbmQgPSAwOwotICAg
IG1fc3RyZWFtLm5vdGlmeURhdGEgPSAwOwotICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IDA7
Ci0gICAgbV9zdHJlYW0uaGVhZGVycyA9IDA7Ci0KLSAgICBzdHJlYW1zKCkuYWRkKCZtX3N0cmVh
bSwgbV9pbnN0YW5jZSk7Ci19Ci0KLVBsdWdpblN0cmVhbTo6flBsdWdpblN0cmVhbSgpCi17Ci0g
ICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RhcnRlZCk7Ci0gICAgQVNTRVJUKCFt
X2xvYWRlcik7Ci0KLSAgICBmYXN0RnJlZSgoY2hhciopbV9zdHJlYW0udXJsKTsKLQotICAgIHN0
cmVhbXMoKS5yZW1vdmUoJm1fc3RyZWFtKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0
KCkKLXsKLSAgICBBU1NFUlQoIW1fbG9hZE1hbnVhbGx5KTsKLSAgICBtX2xvYWRlciA9IHJlc291
cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQobV9mcmFtZSwgdGhp
cywgbV9yZXNvdXJjZVJlcXVlc3QpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6c3RvcCgpCi17
Ci0gICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7Ci0KLSAgICBpZiAobV9sb2FkTWFu
dWFsbHkpIHsKLSAgICAgICAgQVNTRVJUKCFtX2xvYWRlcik7Ci0KLSAgICAgICAgRG9jdW1lbnRM
b2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRM
b2FkZXIoKTsKLSAgICAgICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyKTsKLQotICAgICAgICBpZiAo
ZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKQotICAgICAgICAgICAgZG9j
dW1lbnRMb2FkZXItPmNhbmNlbE1haW5SZXNvdXJjZUxvYWQobV9mcmFtZS0+bG9hZGVyKCkuY2Fu
Y2VsbGVkRXJyb3IobV9yZXNvdXJjZVJlcXVlc3QpKTsKLQotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKG1fbG9hZGVyKSB7Ci0gICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKLSAg
ICAgICAgbV9sb2FkZXIgPSAwOwotICAgIH0KLQotICAgIG1fY2xpZW50ID0gMDsKLX0KLQotc3Rh
dGljIHVpbnQzMl90IGxhc3RNb2RpZmllZERhdGUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCi17Ci0gICAgZG91YmxlIGxhc3RNb2RpZmllZCA9IHJlc3BvbnNlLmxhc3RNb2RpZmll
ZCgpOwotICAgIGlmICghc3RkOjppc2Zpbml0ZShsYXN0TW9kaWZpZWQpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBsYXN0TW9kaWZpZWQgKiAxMDAwOwotfQotCi12b2lkIFBsdWdp
blN0cmVhbTo6c3RhcnRTdHJlYW0oKQotewotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0
cmVhbUJlZm9yZVN0YXJ0ZWQpOwotCi0gICAgY29uc3QgVVJMJiByZXNwb25zZVVSTCA9IG1fcmVz
b3VyY2VSZXNwb25zZS51cmwoKTsKLQotICAgIC8vIFNvbWUgcGx1Z2lucyAoRmxhc2gpIGV4cGVj
dCB0aGF0IGphdmFzY3JpcHQgVVJMcyBhcmUgcGFzc2VkIGJhY2sgZGVjb2RlZCBhcyB0aGlzIGlz
IHRoZQotICAgIC8vIGZvcm1hdCB1c2VkIHdoZW4gcmVxdWVzdGluZyB0aGUgVVJMLgotICAgIGlm
IChwcm90b2NvbElzSmF2YVNjcmlwdChyZXNwb25zZVVSTCkpCi0gICAgICAgIG1fc3RyZWFtLnVy
bCA9IGZhc3RTdHJEdXAoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHJlc3BvbnNlVVJMLnN0cmlu
ZygpKS51dGY4KCkuZGF0YSgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fc3RyZWFtLnVybCA9IGZh
c3RTdHJEdXAocmVzcG9uc2VVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBDU3Ry
aW5nIG1pbWVUeXBlU3RyID0gbV9yZXNvdXJjZVJlc3BvbnNlLm1pbWVUeXBlKCkudXRmOCgpOwot
Ci0gICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25z
ZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLQotICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2Uu
aXNIVFRQKCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAg
ICBTdHJpbmcgc2VwYXJhdG9yID0gQVNDSUlMaXRlcmFsKCI6ICIpOwotCi0gICAgICAgIFN0cmlu
ZyBzdGF0dXNMaW5lID0gIkhUVFAgIiArIFN0cmluZzo6bnVtYmVyKG1fcmVzb3VyY2VSZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpKSArICIgT0tcbiI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHN0YXR1c0xpbmUpOwotCi0gICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7Ci0gICAg
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVz
cG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7Ci0gICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoaXQtPnZhbHVlKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV9oZWFkZXJzID0gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpLnV0ZjgoKTsKLQotICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0
IGxpa2VseSBjb21wcmVzc2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBs
dWdpbiwKLSAgICAgICAgLy8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVk
IGxlbmd0aCwgbm90IHlldCBrbm93biBhdCB0aGUgbW9tZW50LgotICAgICAgICAvLyA8cmRhcjov
L3Byb2JsZW0vNDQ3MDU5OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3BvbnNlIGV4
cGVjdGVkQ29udGVudExlbmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KLSAgICAgICAg
U3RyaW5nIGNvbnRlbnRFbmNvZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRFbmNvZGluZyk7Ci0gICAgICAgIGlmICghY29udGVu
dEVuY29kaW5nLmlzTnVsbCgpICYmIGNvbnRlbnRFbmNvZGluZyAhPSAiaWRlbnRpdHkiKQotICAg
ICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gLTE7Ci0gICAgfQotCi0gICAgbV9zdHJl
YW0uaGVhZGVycyA9IG1faGVhZGVycy5kYXRhKCk7Ci0gICAgbV9zdHJlYW0ucGRhdGEgPSAwOwot
ICAgIG1fc3RyZWFtLm5kYXRhID0gdGhpczsKLSAgICBtX3N0cmVhbS5lbmQgPSBtYXgoZXhwZWN0
ZWRDb250ZW50TGVuZ3RoLCAwTEwpOwotICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IGxhc3RN
b2RpZmllZERhdGUobV9yZXNvdXJjZVJlc3BvbnNlKTsKLSAgICBtX3N0cmVhbS5ub3RpZnlEYXRh
ID0gbV9ub3RpZnlEYXRhOwotCi0gICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7Ci0gICAg
bV9vZmZzZXQgPSAwOwotICAgIG1fcmVhc29uID0gV2ViUmVhc29uTm9uZTsKLQotICAgIC8vIFBy
b3RlY3QgdGhlIHN0cmVhbSBpZiBkZXN0cm95c3RyZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0
aGUgbmV3c3RyZWFtIGhhbmRsZXIKLSAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRo
aXMpOwotCi0gICAgLy8gY2FsbGluZyBpbnRvIGEgcGx1Zy1pbiBjb3VsZCByZXN1bHQgaW4gcmUt
ZW50cmFuY2UgaWYgdGhlIHBsdWctaW4geWllbGRzCi0gICAgLy8gY29udHJvbCB0byB0aGUgc3lz
dGVtIChyZGFyOi8vNTc0NDg5OSkuIHByZXZlbnQgdGhpcyBieSBkZWZlcnJpbmcgZnVydGhlcgot
ICAgIC8vIGxvYWRpbmcgd2hpbGUgY2FsbGluZyBpbnRvIHRoZSBwbHVnLWluLgotICAgIGlmICht
X2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0gICAg
TlBFcnJvciBucEVyciA9IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbShtX2luc3RhbmNlLCAoTlBN
SU1FVHlwZSltaW1lVHlwZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVy
TW9kZSk7Ci0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9h
ZGluZyhmYWxzZSk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVzdHJveWVkIGlu
IHRoZSBjYWxsIHRvIG5ld3N0cmVhbSB3ZSByZXR1cm4KLSAgICBpZiAobV9yZWFzb24gIT0gV2Vi
UmVhc29uTm9uZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBpZiAobnBFcnIgIT0g
TlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShucEVycik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3Rh
cnRlZDsKLQotICAgIGlmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9OT1JNQUwpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fcGF0aCA9IG9wZW5UZW1wb3JhcnlGaWxlKCJXS1AiLCBtX3RlbXBGaWxl
SGFuZGxlKTsKLQotICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nLCBjYW5jZWwgbG9hZGluZyB0
aGUgc3RyZWFtCi0gICAgaWYgKCFpc0hhbmRsZVZhbGlkKG1fdGVtcEZpbGVIYW5kbGUpKQotICAg
ICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKLX0KLQotTlBQ
IFBsdWdpblN0cmVhbTo6b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSkKLXsKLSAgICBy
ZXR1cm4gc3RyZWFtcygpLmdldChzdHJlYW0pOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6Y2Fu
Y2VsQW5kRGVzdHJveVN0cmVhbShOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgUmVmUHRyPFBsdWdp
blN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0ocmVhc29uKTsKLSAg
ICBzdG9wKCk7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpkZXN0cm95U3RyZWFtKE5QUmVhc29u
IHJlYXNvbikKLXsKLSAgICBtX3JlYXNvbiA9IHJlYXNvbjsKLSAgICBpZiAobV9yZWFzb24gIT0g
TlBSRVNfRE9ORSkgewotICAgICAgICAvLyBTdG9wIGFueSBwZW5kaW5nIGRhdGEgZnJvbSBiZWlu
ZyBzdHJlYW1lZAotICAgICAgICBpZiAobV9kZWxpdmVyeURhdGEpCi0gICAgICAgICAgICBtX2Rl
bGl2ZXJ5RGF0YS0+cmVzaXplKDApOwotICAgIH0gZWxzZSBpZiAobV9kZWxpdmVyeURhdGEgJiYg
bV9kZWxpdmVyeURhdGEtPnNpemUoKSA+IDApIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbW9yZSBk
YXRhIHRvIGJlIHN0cmVhbWVkLCBkb24ndCBkZXN0cm95IHRoZSBzdHJlYW0gbm93LgotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGRlc3Ryb3lTdHJlYW0oKTsKLX0KLQotdm9pZCBQbHVnaW5T
dHJlYW06OmRlc3Ryb3lTdHJlYW0oKQotewotICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVh
bVN0b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3JlYXNvbiAhPSBXZWJS
ZWFzb25Ob25lKTsKLSAgICBBU1NFUlQoIW1fZGVsaXZlcnlEYXRhIHx8IG1fZGVsaXZlcnlEYXRh
LT5zaXplKCkgPT0gMCk7Ci0KLSAgICBjbG9zZUZpbGUobV90ZW1wRmlsZUhhbmRsZSk7Ci0KLSAg
ICBib29sIG5ld1N0cmVhbUNhbGxlZCA9IG1fc3RyZWFtLm5kYXRhOwotCi0gICAgLy8gUHJvdGVj
dCBmcm9tIGRlc3RydWN0aW9uIGlmOgotICAgIC8vICBOUE5fRGVzdHJveVN0cmVhbSBpcyBjYWxs
ZWQgZnJvbSBOUFBfTmV3U3RyZWFtIG9yCi0gICAgLy8gIFBsdWdpblN0cmVhbUNsaWVudDo6c3Ry
ZWFtRGlkRmluaXNoTG9hZGluZygpIHJlbW92ZXMgdGhlIGxhc3QgcmVmZXJlbmNlCi0gICAgUmVm
UHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGlmIChuZXdTdHJlYW1DYWxs
ZWQpIHsKLSAgICAgICAgaWYgKG1fcmVhc29uID09IE5QUkVTX0RPTkUgJiYgKG1fdHJhbnNmZXJN
b2RlID09IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSkgewot
ICAgICAgICAgICAgQVNTRVJUKCFtX3BhdGguaXNOdWxsKCkpOwotCi0gICAgICAgICAgICBpZiAo
bV9sb2FkZXIpCi0gICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1
ZSk7Ci0gICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0YW5jZSwgJm1fc3Ry
ZWFtLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0g
ICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCkg
ewotICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5z
ZXREZWZlcnNMb2FkaW5nKHRydWUpOwotCi0gICAgICAgICAgICBOUEVycm9yIG5wRXJyID0gbV9w
bHVnaW5GdW5jcy0+ZGVzdHJveXN0cmVhbShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29u
KTsKLQotICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgICAgIG1fbG9hZGVy
LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKLQotICAgICAgICAgICAgTE9HX05QRVJST1IobnBF
cnIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9zdHJlYW0ubmRhdGEgPSAwOwotICAgIH0KLQot
ICAgIGlmIChtX3NlbmROb3RpZmljYXRpb24pIHsKLSAgICAgICAgLy8gRmxhc2ggOSBjYW4gZGVy
ZWZlcmVuY2UgbnVsbCBpZiB3ZSBjYWxsIE5QUF9VUkxOb3RpZnkgd2l0aG91dCBmaXJzdCBjYWxs
aW5nIE5QUF9OZXdTdHJlYW0KLSAgICAgICAgLy8gZm9yIHJlcXVlc3RzIG1hZGUgd2l0aCBOUE5f
UG9zdFVSTE5vdGlmeTsgc2VlIDxyZGFyOi8vNTU4ODgwNz4KLSAgICAgICAgaWYgKG1fbG9hZGVy
KQotICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0gICAgICAg
IGlmICghbmV3U3RyZWFtQ2FsbGVkICYmIG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRmxh
c2hVUkxOb3RpZnlCdWcpICYmCi0gICAgICAgICAgICBlcXVhbElnbm9yaW5nQ2FzZShtX3Jlc291
cmNlUmVxdWVzdC5odHRwTWV0aG9kKCksICJQT1NUIikpIHsKLSAgICAgICAgICAgIG1fdHJhbnNm
ZXJNb2RlID0gTlBfTk9STUFMOwotICAgICAgICAgICAgbV9zdHJlYW0udXJsID0gIiI7Ci0gICAg
ICAgICAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRhOwotCi0gICAgICAgICAg
ICBzdGF0aWMgY2hhciBlbXB0eU1pbWVUeXBlW10gPSAiIjsKLSAgICAgICAgICAgIG1fcGx1Z2lu
RnVuY3MtPm5ld3N0cmVhbShtX2luc3RhbmNlLCBlbXB0eU1pbWVUeXBlLCAmbV9zdHJlYW0sIGZh
bHNlLCAmbV90cmFuc2Zlck1vZGUpOwotICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+ZGVzdHJv
eXN0cmVhbShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKLQotICAgICAgICAgICAg
Ly8gaW4gc3VjY2Vzc2Z1bCByZXF1ZXN0cywgdGhlIFVSTCBpcyBkeW5hbWljYWxseSBhbGxvY2F0
ZWQgYW5kIGZyZWVkIGluIG91cgotICAgICAgICAgICAgLy8gZGVzdHJ1Y3Rvciwgc28gcmVzZXQg
aXQgdG8gMAotICAgICAgICAgICAgbV9zdHJlYW0udXJsID0gMDsKLSAgICAgICAgfQotICAgICAg
ICBtX3BsdWdpbkZ1bmNzLT51cmxub3RpZnkobV9pbnN0YW5jZSwgbV9yZXNvdXJjZVJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9yZWFzb24sIG1fbm90aWZ5RGF0YSk7Ci0g
ICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2Fk
aW5nKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RvcHBlZDsK
LQotICAgIGlmICghbV9sb2FkTWFudWFsbHkgJiYgbV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50
LT5zdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHRoaXMpOwotCi0gICAgaWYgKCFtX3BhdGguaXNOdWxs
KCkpCi0gICAgICAgIGRlbGV0ZUZpbGUobV9wYXRoKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06
OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKCkKLXsKLSAgICBkZWxpdmVyRGF0YSgpOwotfQotCi12
b2lkIFBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEoKQotewotICAgIEFTU0VSVChtX2RlbGl2ZXJ5
RGF0YSk7Ci0gICAgCi0gICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKLSAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjYW5jZWwgb3VyIGpvYiBpbiB0aGUgU3VicmVzb3Vy
Y2VMb2FkZXIgb24gZXJyb3Igc28gd2UgZG9uJ3QgcmVhY2ggdGhpcyBjYXNlCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbUJlZm9yZVN0YXJ0ZWQp
OwotCi0gICAgaWYgKCFtX3N0cmVhbS5uZGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09
IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGludDMyX3QgdG90YWxCeXRlcyA9IG1fZGVsaXZl
cnlEYXRhLT5zaXplKCk7Ci0gICAgaW50MzJfdCB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKLQot
ICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1
ZSk7Ci0gICAgd2hpbGUgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7Ci0gICAg
ICAgIGludDMyX3QgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlcmVhZHkobV9p
bnN0YW5jZSwgJm1fc3RyZWFtKTsKLQotICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8PSAwKSB7
Ci0gICAgICAgICAgICBtX2RlbGF5RGVsaXZlcnlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0
ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWQp
OwotICAgICAgICAgICAgaW50MzJfdCBkYXRhTGVuZ3RoID0gZGVsaXZlcnlCeXRlczsKLSAgICAg
ICAgICAgIGNoYXIqIGRhdGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0Rl
bGl2ZXJlZDsKLQotICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEKLSAgICAgICAgICAgIGRl
bGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53cml0ZShtX2luc3RhbmNlLCAmbV9zdHJlYW0s
IG1fb2Zmc2V0LCBkYXRhTGVuZ3RoLCAodm9pZCopZGF0YSk7Ci0gICAgICAgICAgICBpZiAoZGVs
aXZlcnlCeXRlcyA8IDApIHsKLSAgICAgICAgICAgICAgICBMT0dfUExVR0lOX05FVF9FUlJPUigp
OwotICAgICAgICAgICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgICAgICAgICAgbV9s
b2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotICAgICAgICAgICAgICAgIGNhbmNlbEFu
ZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZl
cnlCeXRlcywgZGF0YUxlbmd0aCk7Ci0gICAgICAgICAgICBtX29mZnNldCArPSBkZWxpdmVyeUJ5
dGVzOwotICAgICAgICAgICAgdG90YWxCeXRlc0RlbGl2ZXJlZCArPSBkZWxpdmVyeUJ5dGVzOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXItPnNl
dERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCi0gICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPiAw
KSB7Ci0gICAgICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgewotICAg
ICAgICAgICAgaW50IHJlbWFpbmluZ0J5dGVzID0gdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxp
dmVyZWQ7Ci0gICAgICAgICAgICBtZW1tb3ZlKG1fZGVsaXZlcnlEYXRhLT5kYXRhKCksIG1fZGVs
aXZlcnlEYXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkLCByZW1haW5pbmdCeXRlcyk7
Ci0gICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKHJlbWFpbmluZ0J5dGVzKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7Ci0g
ICAgICAgICAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKLSAgICAgICAgICAgICAg
ICBkZXN0cm95U3RyZWFtKCk7Ci0gICAgICAgIH0KLSAgICB9IAotfQotCi12b2lkIFBsdWdpblN0
cmVhbTo6c2VuZEphdmFTY3JpcHRTdHJlYW0oY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBD
U3RyaW5nJiByZXN1bHRTdHJpbmcpCi17Ci0gICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIFJlc291
cmNlUmVzcG9uc2UocmVxdWVzdFVSTCwgInRleHQvcGxhaW4iLCByZXN1bHRTdHJpbmcubGVuZ3Ro
KCksICIiKSk7Ci0KLSAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlc3VsdFN0cmluZy5pc051bGwoKSkgewotICAgICAg
ICBkaWRSZWNlaXZlRGF0YSgwLCByZXN1bHRTdHJpbmcuZGF0YSgpLCByZXN1bHRTdHJpbmcubGVu
Z3RoKCkpOwotICAgICAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbG9hZGVyID0gMDsKLQotICAgIGRlc3Ry
b3lTdHJlYW0ocmVzdWx0U3RyaW5nLmlzTnVsbCgpID8gTlBSRVNfTkVUV09SS19FUlIgOiBOUFJF
U19ET05FKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZShOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVy
KTsKLSAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKLQot
ICAgIG1fcmVzb3VyY2VSZXNwb25zZSA9IHJlc3BvbnNlOwotCi0gICAgc3RhcnRTdHJlYW0oKTsK
LX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAg
QVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0gICAgQVNTRVJUKG1f
c3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7Ci0KLSAgICAvLyBJZiB0aGUgcGx1Zy1pbiBj
YW5jZWxzIHRoZSBzdHJlYW0gaW4gZGVsaXZlckRhdGEgaXQgY291bGQgYmUgZGVsZXRlZCwgCi0g
ICAgLy8gc28gcHJvdGVjdCBpdCBoZXJlLgotICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3Rl
Y3QodGhpcyk7Ci0KLSAgICBpZiAobV90cmFuc2Zlck1vZGUgIT0gTlBfQVNGSUxFT05MWSkgewot
ICAgICAgICBpZiAoIW1fZGVsaXZlcnlEYXRhKQotICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEg
PSBzdGQ6Om1ha2VfdW5pcXVlPFZlY3RvcjxjaGFyPj4oKTsKLQotICAgICAgICBpbnQgb2xkU2l6
ZSA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7Ci0gICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNp
emUob2xkU2l6ZSArIGxlbmd0aCk7Ci0gICAgICAgIG1lbWNweShtX2RlbGl2ZXJ5RGF0YS0+ZGF0
YSgpICsgb2xkU2l6ZSwgZGF0YSwgbGVuZ3RoKTsKLQotICAgICAgICBkZWxpdmVyRGF0YSgpOwot
ICAgIH0KLQotICAgIGlmIChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0b3BwZWQgJiYgaXNIYW5k
bGVWYWxpZChtX3RlbXBGaWxlSGFuZGxlKSkgewotICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0g
d3JpdGVUb0ZpbGUobV90ZW1wRmlsZUhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgaWYg
KGJ5dGVzV3JpdHRlbiAhPSBsZW5ndGgpCi0gICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3Ry
ZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpk
aWRGYWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNl
RXJyb3ImKQotewotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIp
OwotCi0gICAgTE9HX1BMVUdJTl9ORVRfRVJST1IoKTsKLQotICAgIC8vIGRlc3Ryb3lTdHJlYW0g
Y2FuIHJlc3VsdCBpbiBvdXIgYmVpbmcgZGVsZXRlZAotICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+
IHByb3RlY3QodGhpcyk7Ci0KLSAgICBkZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsK
LQotICAgIG1fbG9hZGVyID0gMDsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRpZEZpbmlzaExv
YWRpbmcoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlcikKLXsKLSAgICBBU1NFUlRf
VU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9zdHJlYW1T
dGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKLQotICAgIC8vIGRlc3Ryb3lTdHJlYW0gY2FuIHJlc3Vs
dCBpbiBvdXIgYmVpbmcgZGVsZXRlZAotICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3Qo
dGhpcyk7Ci0KLSAgICBkZXN0cm95U3RyZWFtKE5QUkVTX0RPTkUpOwotCi0gICAgbV9sb2FkZXIg
PSAwOwotfQotCi1ib29sIFBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJlYW1zKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fcGx1Z2luRnVuY3MtPmdldHZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB2b2lkKiByZXN1bHQgPSAwOwotICAgIGlmIChtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1
ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtcywgJnJlc3VsdCkg
IT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBy
ZXN1bHQgIT0gMDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5TdHJlYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMDMyYzRjMTkwNDUxMjJmNTZhY2VmNjMyZTU3
ODE4YTE1YTliY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uaAorKysgL2Rldi9udWxsCkBA
IC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUGx1Z2luU3RyZWFtX2gKLSNkZWZpbmUgUGx1
Z2luU3RyZWFtX2gKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJVUkwuaCIK
LSNpbmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgotI2luY2x1ZGUgIlBsdWdp
blF1aXJrU2V0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAibnBydW50aW1l
X2ludGVybmFsLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRnJh
bWU7Ci0gICAgY2xhc3MgUGx1Z2luU3RyZWFtOwotCi0gICAgZW51bSBQbHVnaW5TdHJlYW1TdGF0
ZSB7IFN0cmVhbUJlZm9yZVN0YXJ0ZWQsIFN0cmVhbVN0YXJ0ZWQsIFN0cmVhbVN0b3BwZWQgfTsK
LQotICAgIGNsYXNzIFBsdWdpblN0cmVhbUNsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICB2
aXJ0dWFsIH5QbHVnaW5TdHJlYW1DbGllbnQoKSB7fQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtRGlkRmluaXNoTG9hZGluZyhQbHVnaW5TdHJlYW0qKSB7fQotICAgIH07Ci0KLSAgICBjbGFz
cyBQbHVnaW5TdHJlYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5TdHJlYW0+LCBwcml2YXRl
IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblN0cmVhbT4gY3JlYXRlKFBsdWdpblN0cmVhbUNsaWVu
dCogY2xpZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Ym9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1
bmNzKiBmdW5jdGlvbnMsIE5QUCBpbnN0YW5jZSwgY29uc3QgUGx1Z2luUXVpcmtTZXQmIHF1aXJr
cykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5TdHJl
YW0oY2xpZW50LCBmcmFtZSwgcmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwg
ZnVuY3Rpb25zLCBpbnN0YW5jZSwgcXVpcmtzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmlydHVh
bCB+UGx1Z2luU3RyZWFtKCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIHN0YXJ0KCk7Ci0gICAg
ICAgIHZvaWQgc3RvcCgpOwotCi0gICAgICAgIHZvaWQgc3RhcnRTdHJlYW0oKTsKLQotICAgICAg
ICB2b2lkIHNldExvYWRNYW51YWxseShib29sIGxvYWRNYW51YWxseSkgeyBtX2xvYWRNYW51YWxs
eSA9IGxvYWRNYW51YWxseTsgfQotCi0gICAgICAgIHZvaWQgc2VuZEphdmFTY3JpcHRTdHJlYW0o
Y29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBXVEY6OkNTdHJpbmcmIHJlc3VsdFN0cmluZyk7
Ci0gICAgICAgIHZvaWQgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJlYXNvbik7Ci0KLSAgICAg
ICAgc3RhdGljIE5QUCBvd25lckZvclN0cmVhbShOUFN0cmVhbSopOwotCi0gICAgICAgIC8vIE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkRmFpbChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNl
RXJyb3ImKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIqKTsKLSAgICAgICAgdmlydHVhbCBib29sIHdhbnRzQWxsU3RyZWFt
cygpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luU3RyZWFtKFBsdWdpblN0
cmVhbUNsaWVudCosIEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90
aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiwgTlBQIGlu
c3RhbmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYpOwotCi0gICAgICAgIHZvaWQgZGVsaXZlckRh
dGEoKTsKLSAgICAgICAgdm9pZCBkZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKLSAgICAgICAgdm9p
ZCBkZXN0cm95U3RyZWFtKCk7Ci0KLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VS
ZXF1ZXN0OwotICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzb3VyY2VSZXNwb25zZTsKLQot
ICAgICAgICBQbHVnaW5TdHJlYW1DbGllbnQqIG1fY2xpZW50OwotICAgICAgICBGcmFtZSogbV9m
cmFtZTsKLSAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBtX2xvYWRl
cjsKLSAgICAgICAgdm9pZCogbV9ub3RpZnlEYXRhOwotICAgICAgICBib29sIG1fc2VuZE5vdGlm
aWNhdGlvbjsKLSAgICAgICAgUGx1Z2luU3RyZWFtU3RhdGUgbV9zdHJlYW1TdGF0ZTsKLSAgICAg
ICAgYm9vbCBtX2xvYWRNYW51YWxseTsKLQotICAgICAgICBUaW1lciBtX2RlbGF5RGVsaXZlcnlU
aW1lcjsKLSAgICAgICAgdm9pZCBkZWxheURlbGl2ZXJ5VGltZXJGaXJlZCgpOwotCi0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8Y2hhcj4+IG1fZGVsaXZlcnlEYXRhOwotCi0gICAgICAg
IFBsYXRmb3JtRmlsZUhhbmRsZSBtX3RlbXBGaWxlSGFuZGxlOwotCi0gICAgICAgIGNvbnN0IE5Q
UGx1Z2luRnVuY3MqIG1fcGx1Z2luRnVuY3M7Ci0gICAgICAgIE5QUCBtX2luc3RhbmNlOwotICAg
ICAgICB1aW50MTZfdCBtX3RyYW5zZmVyTW9kZTsKLSAgICAgICAgaW50MzJfdCBtX29mZnNldDsK
LSAgICAgICAgQ1N0cmluZyBtX2hlYWRlcnM7Ci0gICAgICAgIFN0cmluZyBtX3BhdGg7Ci0gICAg
ICAgIE5QUmVhc29uIG1fcmVhc29uOwotICAgICAgICBOUFN0cmVhbSBtX3N0cmVhbTsKLSAgICAg
ICAgUGx1Z2luUXVpcmtTZXQgbV9xdWlya3M7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWIyMjVjMDRjYzFlZTQxZDU2MmVkYmQ5MjBjOWQyOTc1
OGVlNGU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgotI2lu
Y2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgotI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCi0jaW5jbHVkZSAi
SFRUUEhlYWRlck5hbWVzLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVu
dC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2No
ZWR1bGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgIlByb3h5U2Vy
dmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRv
ci5oIgotI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJjX2luc3RhbmNlLmgiCi0j
aW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNp
bmNsdWRlIDxiaW5kaW5ncy9TY3JpcHRWYWx1ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNW
YWx1ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL0FTQ0lJ
Q1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIE9TKFdJTkRP
V1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2luY2x1ZGUgIlBsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJXaW4uaCIKLSNlbmRpZgotCi11c2luZyBKU0M6OkV4ZWNTdGF0ZTsKLXVzaW5n
IEpTQzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVjdDsKLXVzaW5nIEpTQzo6SlNWYWx1ZTsK
LQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi11c2luZyBzdGQ6Om1pbjsKLQot
dXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwotCi1zdGF0aWMgaW50IHNfY2FsbGluZ1BsdWdpbjsKLQotdHlwZWRl
ZiBIYXNoTWFwPE5QUCwgUGx1Z2luVmlldyo+IEluc3RhbmNlTWFwOwotCi1zdGF0aWMgSW5zdGFu
Y2VNYXAmIGluc3RhbmNlTWFwKCkKLXsKLSAgICBzdGF0aWMgSW5zdGFuY2VNYXAmIG1hcCA9ICpu
ZXcgSW5zdGFuY2VNYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIFN0cmluZyBzY3Jp
cHRTdHJpbmdJZkphdmFTY3JpcHRVUkwoY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgaWYgKCFwcm90
b2NvbElzSmF2YVNjcmlwdCh1cmwpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAv
LyBUaGlzIHJldHVybnMgYW4gdW5lc2NhcGVkIHN0cmluZwotICAgIHJldHVybiBkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXModXJsLnN0cmluZygpLnN1YnN0cmluZygxMSkpOwotfQotCi1QbHVnaW5W
aWV3KiBQbHVnaW5WaWV3OjpzX2N1cnJlbnRQbHVnaW5WaWV3ID0gMDsKLQotdm9pZCBQbHVnaW5W
aWV3Ojpwb3BQb3B1cHNTdGF0ZVRpbWVyRmlyZWQoKQotewotICAgIHBvcFBvcHVwc0VuYWJsZWRT
dGF0ZSgpOwotfQotCi1JbnRSZWN0IFBsdWdpblZpZXc6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QK
LXsKLSAgICAvLyBTdGFydCBieSBjbGlwcGluZyB0byBvdXIgYm91bmRzLgotICAgIEludFJlY3Qg
Y2xpcFJlY3QobV93aW5kb3dSZWN0KTsKLSAgICAKLSAgICAvLyBUYWtlIG91ciBlbGVtZW50IGFu
ZCBnZXQgdGhlIGNsaXAgcmVjdCBmcm9tIHRoZSBlbmNsb3NpbmcgbGF5ZXIgYW5kIGZyYW1lIHZp
ZXcuCi0gICAgRnJhbWVWaWV3KiBwYXJlbnRWaWV3ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLnZp
ZXcoKTsKLSAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFyZW50Vmlldy0+d2luZG93Q2xpcFJlY3RG
b3JGcmFtZU93bmVyKG1fZWxlbWVudCwgdHJ1ZSkpOwotCi0gICAgcmV0dXJuIGNsaXBSZWN0Owot
fQotCi12b2lkIFBsdWdpblZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCkucHJpbnRpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKHJlY3QgIT0gZnJhbWVSZWN0KCkpCi0gICAgICAgIFdpZGdldDo6c2V0
RnJhbWVSZWN0KHJlY3QpOwotCi0gICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci0KLSNpZiBPUyhX
SU5ET1dTKQotICAgIC8vIE9uIFdpbmRvd3MgYWx3YXlzIGNhbGwgcGx1Z2luIHRvIGNoYW5nZSBn
ZW9tZXRyeS4KLSAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Ci0jZWxpZiBkZWZpbmVkKFhQX1VO
SVgpCi0gICAgLy8gT24gVW5peCwgbXVsdGlwbGUgY2FsbHMgdG8gc2V0TlBXaW5kb3coKSBpbiB3
aW5kb3dlZCBtb2RlIGNhdXNlcyBGbGFzaCB0byBjcmFzaAotICAgIGlmIChtX21vZGUgPT0gTlBf
RlVMTCB8fCAhbV9pc1dpbmRvd2VkKQotICAgICAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpmcmFtZVJlY3RzQ2hhbmdlZCgpCi17Ci0gICAg
dXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6Y2xpcFJlY3RDaGFu
Z2VkKCkKLXsKLSAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lz
V2luZG93ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFByb3RlY3QgdGhlIHBsdWctaW4g
ZnJvbSBkZWxldGlvbiB3aGlsZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQuCi0gICAgUmVmUHRyPFBs
dWdpblZpZXc+IHByb3RlY3QodGhpcyk7Ci0KLSAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgp
KQotICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVu
dCkpOwotICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgaGFu
ZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKLSNp
ZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS53aGVlbEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
d2hlZWxFdmVudCkKLSAgICAgICAgaGFuZGxlV2hlZWxFdmVudChzdGF0aWNfY2FzdDxXaGVlbEV2
ZW50Kj4oZXZlbnQpKTsKLSNlbmRpZgotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQpCi0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFu
ZGxlZCgpOyAvLyBXZSBkb24ndCBrbm93IGlmIHRoZSBwbHVnLWluIGhhcyBoYW5kbGVkIG1vdXNl
ZG93biBldmVudCBieSBkaXNwbGF5aW5nIGEgY29udGV4dCBtZW51LCBzbyB3ZSBuZXZlciB3YW50
IFdlYktpdCB0byBzaG93IGEgZGVmYXVsdCBvbmUuCi0jaWYgZGVmaW5lZChYUF9VTklYKSAmJiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5mb2N1c291dEV2ZW50KQotICAgICAgICBoYW5kbGVGb2N1c091dEV2ZW50
KCk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNpbkV2
ZW50KQotICAgICAgICBoYW5kbGVGb2N1c0luRXZlbnQoKTsKLSNlbmRpZgotfQotCi12b2lkIFBs
dWdpblZpZXc6OmluaXQoKQotewotICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKCFtX3Bs
dWdpbikgewotICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzQ2FuTm90Rmlu
ZFBsdWdpbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMT0coUGx1Z2lucywgIlBs
dWdpblZpZXc6OmluaXQoKTogSW5pdGlhbGl6aW5nIHBsdWctaW4gJyVzJyIsIG1fcGx1Z2luLT5u
YW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBpZiAoIW1fcGx1Z2luLT5sb2FkKCkpIHsKLSAg
ICAgICAgbV9wbHVnaW4gPSAwOwotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5v
dExvYWRQbHVnaW47Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXN0YXJ0T3JB
ZGRUb1Vuc3RhcnRlZExpc3QoKSkgewotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nh
bk5vdExvYWRQbHVnaW47Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXR1cyA9
IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3Ojpz
dGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCkKLXsKLSAgICBpZiAoIW1fcGFyZW50RnJhbWUtPnBh
Z2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2Ugb25seSBkZWxheSBzdGFy
dGluZyB0aGUgcGx1Zy1pbiBpZiB3ZSdyZSBnb2luZyB0byBraWNrIG9mZiB0aGUgbG9hZAotICAg
IC8vIG91cnNlbHZlcy4gT3RoZXJ3aXNlLCB0aGUgbG9hZGVyIHdpbGwgdHJ5IHRvIGRlbGl2ZXIg
ZGF0YSBiZWZvcmUgd2UndmUKLSAgICAvLyBzdGFydGVkIHRoZSBwbHVnLWluLgotICAgIGlmICgh
bV9sb2FkTWFudWFsbHkgJiYgIW1fcGFyZW50RnJhbWUtPnBhZ2UoKS0+Y2FuU3RhcnRNZWRpYSgp
KSB7Ci0gICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmFkZE1lZGlhQ2FuU3RhcnRM
aXN0ZW5lcih0aGlzKTsKLSAgICAgICAgbV9pc1dhaXRpbmdUb1N0YXJ0ID0gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXJ0KCk7Ci19Ci0KLWJvb2wg
UGx1Z2luVmlldzo6c3RhcnQoKQotewotICAgIGlmIChtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbV9pc1dhaXRpbmdUb1N0YXJ0ID0gZmFsc2U7Ci0KLSAgICBQbHVn
aW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS5yZWdpc3RlclBsdWdpbihtX2luc3Rh
bmNlKTsKLQotICAgIEFTU0VSVChtX3BsdWdpbik7Ci0gICAgQVNTRVJUKG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5uZXdwKTsKLQotICAgIE5QRXJyb3IgbnBFcnI7Ci0gICAgewotICAgICAgICBQ
bHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbnBFcnIgPSBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLnV0ZjgoKS5k
YXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1f
cGFyYW1WYWx1ZXMsIE5VTEwpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAg
ICAgICAgTE9HX05QRVJST1IobnBFcnIpOwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldygwKTsKLSAgICB9Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1Ip
IHsKLSAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwotICAg
ICAgICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS51bnJlZ2lzdGVyUGx1
Z2luKG1faW5zdGFuY2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9p
c1N0YXJ0ZWQgPSB0cnVlOwotCi0gICAgaWYgKCFtX3VybC5pc0VtcHR5KCkgJiYgIW1fbG9hZE1h
bnVhbGx5KSB7Ci0gICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICAgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLSAgICAg
ICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobV91cmwpOwotICAg
ICAgICBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKLSAgICB9Ci0KLSAgICBtX3N0
YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKLQotICAgIGlmICghcGxhdGZv
cm1TdGFydCgpKQotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVn
aW47Ci0KLSAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQ
bHVnaW5WaWV3OjptZWRpYUNhblN0YXJ0KCkKLXsKLSAgICBBU1NFUlQoIW1faXNTdGFydGVkKTsK
LSAgICBpZiAoIXN0YXJ0KCkpCi0gICAgICAgIHBhcmVudEZyYW1lKCktPmxvYWRlcigpLmNsaWVu
dCgpLmRpc3BhdGNoRGlkRmFpbFRvU3RhcnRQbHVnaW4odGhpcyk7Ci19Ci0KLVBsdWdpblZpZXc6
On5QbHVnaW5WaWV3KCkKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6On5QbHVnaW5W
aWV3KCkiKTsKLQotICAgIEFTU0VSVCghbV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpOwot
Ci0gICAgLy8gSWYgd2UgZmFpbGVkIHRvIGZpbmQgdGhlIHBsdWctaW4sIHdlJ2xsIHJldHVybiBl
YXJseSBpbiBvdXIgY29uc3RydWN0b3IsIGFuZAotICAgIC8vIG1faW5zdGFuY2Ugd2lsbCBiZSAw
LgotICAgIGlmIChtX2luc3RhbmNlKQotICAgICAgICBpbnN0YW5jZU1hcCgpLnJlbW92ZShtX2lu
c3RhbmNlKTsKLQotICAgIGlmIChtX2lzV2FpdGluZ1RvU3RhcnQpCi0gICAgICAgIG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKLQot
ICAgIHN0b3AoKTsKLQotICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1D
b3VudCk7Ci0gICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7
Ci0KLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLQotICAgIG1fcGFyZW50RnJhbWUtPnNjcmlwdCgp
LmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRoaXMpOwotCi0gICAgaWYgKG1fcGx1Z2lu
ICYmICEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udFVubG9hZFBs
dWdpbikpKQotICAgICAgICBtX3BsdWdpbi0+dW5sb2FkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmll
dzo6c3RvcCgpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzdG9wKCk6IFN0b3BwaW5nIHBsdWctaW4gJyVz
JyIsIG1fcGx1Z2luLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBIYXNoU2V0PFJlZlB0
cjxQbHVnaW5TdHJlYW0+ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKLSAgICBIYXNoU2V0PFJlZlB0
cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7Ci0gICAgZm9y
IChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgKCppdCktPnN0b3AoKTsKLSAgICAg
ICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQoKSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1f
c3RyZWFtcy5pc0VtcHR5KCkpOwotCi0gICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKLQotICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpZiBkZWZpbmVk
KFhQX1dJTikgJiYgIVBMQVRGT1JNKEdUSykKLSAgICAvLyBVbnN1YmNsYXNzIHRoZSB3aW5kb3cK
LSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIFdORFBST0MgY3VycmVudFduZFByb2Mg
PSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBf
V05EUFJPQyk7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRXbmRQcm9jID09IFBsdWdpblZpZXdXbmRQ
cm9jKQotICAgICAgICAgICAgU2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCBHV0xQX1dORFBST0MsIChMT05HX1BUUiltX3BsdWdpblduZFByb2MpOwotICAgIH0KLSNlbmRp
ZiAvLyAhZGVmaW5lZChYUF9XSU4pIHx8IFBMQVRGT1JNKEdUSykKLSNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2lmICFkZWZpbmVkKFhQX01BQ09TWCkKLSAgICAvLyBD
bGVhciB0aGUgd2luZG93Ci0gICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOwotCi0gICAgaWYgKG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cgJiYgIW1fcGx1Z2luLT5xdWlya3MoKS5j
b250YWlucyhQbHVnaW5RdWlya0RvbnRTZXROdWxsV2luZG93SGFuZGxlT25EZXN0cm95KSkgewot
ICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7Ci0gICAgICAgIHNldENhbGxpbmdQ
bHVnaW4oZmFsc2UpOwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygw
KTsKLSAgICB9Ci0KLSNpZmRlZiBYUF9VTklYCi0gICAgZGVsZXRlIHN0YXRpY19jYXN0PE5QU2V0
V2luZG93Q2FsbGJhY2tTdHJ1Y3QqPihtX25wV2luZG93LndzX2luZm8pOwotICAgIG1fbnBXaW5k
b3cud3NfaW5mbyA9IDA7Ci0jZW5kaWYKLQotI2VuZGlmIC8vICFkZWZpbmVkKFhQX01BQ09TWCkK
LQotICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnVucmVnaXN0ZXJQ
bHVnaW4obV9pbnN0YW5jZSk7Ci0KLSAgICBOUFNhdmVkRGF0YSogc2F2ZWREYXRhID0gMDsKLSAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOwotICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZGVzdHJveShtX2luc3RhbmNlLCAmc2F2ZWREYXRhKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2lu
KGZhbHNlKTsKLSAgICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3Vy
cmVudFBsdWdpblZpZXcoMCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBpZiAoc2F2ZWREYXRhKSB7Ci0gICAgICAgIC8vIFRPRE86IEFjdHVhbGx5IHNhdmUgdGhpcyBk
YXRhIGluc3RlYWQgb2YganVzdCBkaXNjYXJkaW5nIGl0Ci0gICAgICAgIGlmIChzYXZlZERhdGEt
PmJ1ZikKLSAgICAgICAgICAgIE5QTl9NZW1GcmVlKHNhdmVkRGF0YS0+YnVmKTsKLSAgICAgICAg
TlBOX01lbUZyZWUoc2F2ZWREYXRhKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIG1faW5zdGFuY2Ut
PnBkYXRhID0gMDsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyhQ
bHVnaW5WaWV3KiBwbHVnaW5WaWV3KQotewotICAgIHNfY3VycmVudFBsdWdpblZpZXcgPSBwbHVn
aW5WaWV3OwotfQotCi1QbHVnaW5WaWV3KiBQbHVnaW5WaWV3OjpjdXJyZW50UGx1Z2luVmlldygp
Ci17Ci0gICAgcmV0dXJuIHNfY3VycmVudFBsdWdpblZpZXc7Ci19Ci0KLXN0YXRpYyBjaGFyKiBj
cmVhdGVVVEY4U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQotewotICAgIENTdHJpbmcgY3N0ciA9
IHN0ci51dGY4KCk7Ci0gICAgY29uc3Qgc2l6ZV90IGNzdHJMZW5ndGggPSBjc3RyLmxlbmd0aCgp
OwotICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2Mo
Y3N0ckxlbmd0aCArIDEpKTsKLQotICAgIG1lbWNweShyZXN1bHQsIGNzdHIuZGF0YSgpLCBjc3Ry
TGVuZ3RoKTsKLSAgICByZXN1bHRbY3N0ckxlbmd0aF0gPSAnXDAnOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0
KiByZXF1ZXN0KQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIGRvbid0IGxldCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQgaXMgbm8gbG9u
Z2VyIHBhcnQgb2YgYSBkb2N1bWVudCB0aGF0IGlzIGJlaW5nIAotICAgIC8vIGRpc3BsYXllZCB1
bmxlc3MgdGhlIGxvYWRzIGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1Z2luLgotICAg
IGNvbnN0IFN0cmluZyYgdGFyZ2V0RnJhbWVOYW1lID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVz
dCgpLmZyYW1lTmFtZSgpOwotICAgIGlmIChtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5kb2N1bWVu
dExvYWRlcigpICE9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmFjdGl2ZURvY3VtZW50TG9hZGVy
KCkgJiYgKHRhcmdldEZyYW1lTmFtZS5pc051bGwoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCku
ZmluZCh0YXJnZXRGcmFtZU5hbWUpICE9IG1fcGFyZW50RnJhbWUpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNv
dXJjZVJlcXVlc3QoKS51cmwoKTsKLSAgICBTdHJpbmcganNTdHJpbmcgPSBzY3JpcHRTdHJpbmdJ
ZkphdmFTY3JpcHRVUkwocmVxdWVzdFVSTCk7Ci0KLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBn
ZXN0dXJlSW5kaWNhdG9yKHJlcXVlc3QtPnNob3VsZEFsbG93UG9wdXBzKCkgPyBEZWZpbml0ZWx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwot
Ci0gICAgaWYgKGpzU3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIGlmIHRoaXMgaXMgbm90
IGEgdGFyZ2V0ZWQgcmVxdWVzdCwgY3JlYXRlIGEgc3RyZWFtIGZvciBpdC4gb3RoZXJ3aXNlLAot
ICAgICAgICAvLyBqdXN0IHBhc3MgaXQgb2ZmIHRvIHRoZSBsb2FkZXIKLSAgICAgICAgaWYgKHRh
cmdldEZyYW1lTmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJl
YW0+IHN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0
KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVz
dC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5w
bHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+cXVpcmtzKCkpOwotICAgICAgICAg
ICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOwotICAgICAgICAgICAgc3RyZWFtLT5zdGFydCgpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBmcmFtZSBpcyBv
dXIgZnJhbWUsIHdlIGNvdWxkIGRlc3Ryb3kgdGhlCi0gICAgICAgICAgICAvLyBQbHVnaW5WaWV3
LCBzbyB3ZSBwcm90ZWN0IGl0LiA8cmRhcjovL3Byb2JsZW0vNjk5MTI1MT4KLSAgICAgICAgICAg
IFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KHRoaXMpOwotCi0gICAgICAgICAgICBGcmFtZUxv
YWRSZXF1ZXN0IGZyYW1lUmVxdWVzdChtX3BhcmVudEZyYW1lLmdldCgpLCByZXF1ZXN0LT5mcmFt
ZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCkpOwotICAgICAgICAgICAgZnJhbWVSZXF1
ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXRGcmFtZU5hbWUpOwotICAgICAgICAgICAgZnJhbWVSZXF1
ZXN0LnNldFNob3VsZENoZWNrTmV3V2luZG93UG9saWN5KHRydWUpOwotICAgICAgICAgICAgbV9w
YXJlbnRGcmFtZS0+bG9hZGVyKCkubG9hZChmcmFtZVJlcXVlc3QpOwotCi0gICAgICAgICAgICAv
LyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQgd2hl
biB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKLSAgICAgICAgICAgIGlmIChyZXF1
ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwot
ICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnVybG5vdGlmeShtX2luc3RhbmNlLCByZXF1ZXN0VVJM
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIE5QUkVTX0RPTkUsIHJlcXVlc3QtPm5vdGlmeURhdGEo
KSk7Ci0gICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgICAgICAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRhcmdldGVkIEph
dmFTY3JpcHQgcmVxdWVzdHMgYXJlIG9ubHkgYWxsb3dlZCBvbiB0aGUgZnJhbWUgdGhhdCBjb250
YWlucyB0aGUgSmF2YVNjcmlwdCBwbHVnaW4KLSAgICAvLyBhbmQgdGhpcyBoYXMgYmVlbiBtYWRl
IHN1cmUgaW4gOjpsb2FkLgotICAgIEFTU0VSVCh0YXJnZXRGcmFtZU5hbWUuaXNFbXB0eSgpIHx8
IG1fcGFyZW50RnJhbWUtPnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSkgPT0gbV9wYXJlbnRG
cmFtZSk7Ci0gICAgCi0gICAgLy8gRXhlY3V0aW5nIGEgc2NyaXB0IGNhbiBjYXVzZSB0aGUgcGx1
Z2luIHZpZXcgdG8gYmUgZGVzdHJveWVkLCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIGl0Lgot
ICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgcmVzdWx0ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuZXhlY3V0ZVNjcmlw
dChqc1N0cmluZywgcmVxdWVzdC0+c2hvdWxkQWxsb3dQb3B1cHMoKSk7Ci0KLSAgICBpZiAodGFy
Z2V0RnJhbWVOYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7Ci0K
LSAgICAgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gbV9wYXJlbnRGcmFtZS0+c2Ny
aXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAg
IENTdHJpbmcgY3N0cjsKLSAgICAgICAgaWYgKHJlc3VsdC5nZXRTdHJpbmcoc2NyaXB0U3RhdGUs
IHJlc3VsdFN0cmluZykpCi0gICAgICAgICAgICBjc3RyID0gcmVzdWx0U3RyaW5nLnV0ZjgoKTsK
LQotICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBzdHJlYW0gPSBQbHVnaW5TdHJlYW06OmNy
ZWF0ZSh0aGlzLCBtX3BhcmVudEZyYW1lLmdldCgpLCByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0
KCkucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSwgcmVxdWVz
dC0+bm90aWZ5RGF0YSgpLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9w
bHVnaW4tPnF1aXJrcygpKTsKLSAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOwotICAgICAg
ICBzdHJlYW0tPnNlbmRKYXZhU2NyaXB0U3RyZWFtKHJlcXVlc3RVUkwsIGNzdHIpOwotICAgIH0K
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpyZXF1ZXN0VGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJU
KCFtX3JlcXVlc3RzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX2lzSmF2YVNjcmlwdFBhdXNl
ZCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4gcmVxdWVzdCA9IFdURjo6
bW92ZShtX3JlcXVlc3RzWzBdKTsKLSAgICBtX3JlcXVlc3RzLnJlbW92ZSgwKTsKLSAgICAKLSAg
ICAvLyBTY2hlZHVsZSBhIG5ldyByZXF1ZXN0IGJlZm9yZSBjYWxsaW5nIHBlcmZvcm1SZXF1ZXN0
IHNpbmNlIHRoZSBjYWxsIHRvCi0gICAgLy8gcGVyZm9ybVJlcXVlc3QgY2FuIGNhdXNlIHRoZSBw
bHVnaW4gdmlldyB0byBiZSBkZWxldGVkLgotICAgIGlmICghbV9yZXF1ZXN0cy5pc0VtcHR5KCkp
Ci0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLQotICAgIHBlcmZvcm1S
ZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNjaGVkdWxlUmVx
dWVzdChzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4gcmVxdWVzdCkKLXsKLSAgICBtX3Jl
cXVlc3RzLmFwcGVuZChXVEY6Om1vdmUocmVxdWVzdCkpOwotCi0gICAgaWYgKCFtX2lzSmF2YVNj
cmlwdFBhdXNlZCkKLSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOwotfQot
Ci1OUEVycm9yIFBsdWdpblZpZXc6OmxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVM
b2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQotewot
ICAgIEFTU0VSVChmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2Qo
KSA9PSAiR0VUIiB8fCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRo
b2QoKSA9PSAiUE9TVCIpOwotCi0gICAgVVJMIHVybCA9IGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkudXJsKCk7Ci0gICAgCi0gICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBOUEVSUl9JTlZBTElEX1VSTDsKLQotICAgIC8vIERvbid0IGFsbG93IHJlcXVlc3Rz
IHRvIGJlIG1hZGUgd2hlbiB0aGUgZG9jdW1lbnQgbG9hZGVyIGlzIHN0b3BwaW5nIGFsbCBsb2Fk
ZXJzLgotICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIo
KS5kb2N1bWVudExvYWRlcigpOwotICAgIGlmICghbG9hZGVyIHx8IGxvYWRlci0+aXNTdG9wcGlu
ZygpKQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgIGNvbnN0IFN0
cmluZyYgdGFyZ2V0RnJhbWVOYW1lID0gZnJhbWVMb2FkUmVxdWVzdC5mcmFtZU5hbWUoKTsKLSAg
ICBTdHJpbmcganNTdHJpbmcgPSBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwodXJsKTsKLQot
ICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gUmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1IgaWYgSlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgd2hhdCBNb3ppbGxhIGRvZXMu
Ci0gICAgICAgIGlmICghbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMo
Tm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7Ci0KLSAgICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkgYWxsb3cg
SlMgcmVxdWVzdHMgdG8gYmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgcGx1
Zy1pbi4KLSAgICAgICAgaWYgKCF0YXJnZXRGcmFtZU5hbWUuaXNOdWxsKCkgJiYgbV9wYXJlbnRG
cmFtZS0+dHJlZSgpLmZpbmQodGFyZ2V0RnJhbWVOYW1lKSAhPSBtX3BhcmVudEZyYW1lKQotICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0gICAgfSBlbHNlIGlmICghbV9w
YXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuRGlzcGxheSh1cmwp
KQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgIHNjaGVkdWxlUmVx
dWVzdChzdGQ6Om1ha2VfdW5pcXVlPFBsdWdpblJlcXVlc3Q+KGZyYW1lTG9hZFJlcXVlc3QsIHNl
bmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEsIGFyZVBvcHVwc0FsbG93ZWQoKSkpOwotCi0gICAg
cmV0dXJuIE5QRVJSX05PX0VSUk9SOwotfQotCi1zdGF0aWMgVVJMIG1ha2VVUkwoY29uc3QgVVJM
JiBiYXNlVVJMLCBjb25zdCBjaGFyKiByZWxhdGl2ZVVSTFN0cmluZykKLXsKLSAgICBTdHJpbmcg
dXJsU3RyaW5nID0gcmVsYXRpdmVVUkxTdHJpbmc7Ci0KLSAgICAvLyBTdHJpcCByZXR1cm4gY2hh
cmFjdGVycy4KLSAgICB1cmxTdHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKCdcbicsICIiKTsKLSAg
ICB1cmxTdHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKCdccicsICIiKTsKLQotICAgIHJldHVybiBV
UkwoYmFzZVVSTCwgdXJsU3RyaW5nKTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRVUkxO
b3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURh
dGEpCi17Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50RnJh
bWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOwotCi0gICAgZnJhbWVMb2FkUmVxdWVz
dC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFz
ZVVSTCgpLCB1cmwpKTsKLQotICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHRydWUs
IG5vdGlmeURhdGEpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFVSTChjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKLXsKLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1l
TG9hZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7
Ci0KLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX3BhcmVu
dEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOwotCi0gICAgcmV0dXJuIGxvYWQo
ZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OnBv
c3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90
IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKLXsK
LSAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlm
eURhdGEsIHRydWUsIHRydWUpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkwoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hh
ciogYnVmLCBOUEJvb2wgZmlsZSkKLXsKLSAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93
IGhlYWRlcnMgdG8gYmUgc3BlY2lmaWVkIHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmls
ZS4KLSAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAs
IGZhbHNlLCBmaWxlKTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpuZXdTdHJlYW0oTlBNSU1F
VHlwZSwgY29uc3QgY2hhciogLyogdGFyZ2V0ICovLCBOUFN0cmVhbSoqKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgLy8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKLX0KLQotaW50MzJfdCBQbHVnaW5WaWV3Ojp3cml0ZShOUFN0cmVhbSosIGludDMy
X3QgLyogbGVuICovLCB2b2lkKiAvKiBidWZmZXIgKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICAvLyBVbnN1cHBvcnRlZAotICAgIHJldHVybiAtMTsKLX0KLQotTlBFcnJvciBQbHVn
aW5WaWV3OjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikK
LXsKLSAgICBpZiAoIXN0cmVhbSB8fCBQbHVnaW5TdHJlYW06Om93bmVyRm9yU3RyZWFtKHN0cmVh
bSkgIT0gbV9pbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0Vf
RVJST1I7Ci0KLSAgICBQbHVnaW5TdHJlYW0qIGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNfY2FzdDxQ
bHVnaW5TdHJlYW0qPihzdHJlYW0tPm5kYXRhKTsKLSAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxB
bmREZXN0cm95U3RyZWFtKHJlYXNvbik7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAg
aWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNo
cm9tZSgpLnNldFN0YXR1c2JhclRleHQobV9wYXJlbnRGcmFtZS5nZXQoKSwgU3RyaW5nOjpmcm9t
VVRGOChtZXNzYWdlKSk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWUoTlBQVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6c2V0VmFsdWUoJXMpOiAiLCBwcmV0dHlOYW1lRm9yTlBQVmFyaWFibGUodmFyaWFibGUs
IHZhbHVlKS5kYXRhKCkpOwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBQ
VnBsdWdpbldpbmRvd0Jvb2w6Ci0gICAgICAgIG1faXNXaW5kb3dlZCA9IHZhbHVlOwotICAgICAg
ICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRC
b29sOgotICAgICAgICBtX2lzVHJhbnNwYXJlbnQgPSB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOwotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotICAgIGNhc2UgTlBQVnBsdWdp
bkRyYXdpbmdNb2RlbDogewotICAgICAgICAvLyBDYW4gb25seSBzZXQgZHJhd2luZyBtb2RlbCBp
bnNpZGUgTlBQX05ldygpCi0gICAgICAgIGlmICh0aGlzICE9IGN1cnJlbnRQbHVnaW5WaWV3KCkp
Ci0gICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgICAgIE5QRHJh
d2luZ01vZGVsIG5ld0RyYXdpbmdNb2RlbCA9IE5QRHJhd2luZ01vZGVsKHVpbnRwdHJfdCh2YWx1
ZSkpOwotICAgICAgICBzd2l0Y2ggKG5ld0RyYXdpbmdNb2RlbCkgewotICAgICAgICBjYXNlIE5Q
RHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzOgotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOwotICAgICAgICBjYXNlIE5QRHJhd2luZ01vZGVsQ29yZUFuaW1hdGlvbjoKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luIGFza2VkIGZvciB1bnN1
cHBvcnRlZCBkcmF3aW5nIG1vZGVsOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgIHByZXR0eU5h
bWVGb3JEcmF3aW5nTW9kZWwobmV3RHJhd2luZ01vZGVsKSk7Ci0gICAgICAgICAgICByZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNhc2UgTlBQVnBs
dWdpbkV2ZW50TW9kZWw6IHsKLSAgICAgICAgLy8gQ2FuIG9ubHkgc2V0IGV2ZW50IG1vZGVsIGlu
c2lkZSBOUFBfTmV3KCkKLSAgICAgICAgaWYgKHRoaXMgIT0gY3VycmVudFBsdWdpblZpZXcoKSkK
LSAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICAgICAgTlBFdmVu
dE1vZGVsIG5ld0V2ZW50TW9kZWwgPSBOUEV2ZW50TW9kZWwodWludHB0cl90KHZhbHVlKSk7Ci0g
ICAgICAgIHN3aXRjaCAobmV3RXZlbnRNb2RlbCkgewotICAgICAgICBjYXNlIE5QRXZlbnRNb2Rl
bENvY29hOgotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW4gYXNrZWQgZm9yIHVuc3VwcG9y
dGVkIGV2ZW50IG1vZGVsOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgIHByZXR0eU5hbWVGb3JF
dmVudE1vZGVsKG5ld0V2ZW50TW9kZWwpKTsKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8vIGRlZmluZWQoWFBfTUFDT1NY
KQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6Omlu
dmFsaWRhdGVUaW1lckZpcmVkKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9p
bnZhbGlkUmVjdHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGludmFsaWRhdGVSZWN0KG1faW52YWxp
ZFJlY3RzW2ldKTsKLSAgICBtX2ludmFsaWRSZWN0cy5jbGVhcigpOwotfQotCi0KLXZvaWQgUGx1
Z2luVmlldzo6cHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShib29sIHN0YXRlKQotewotICAgIG1fcG9w
dXBTdGF0ZVN0YWNrLmFwcGVuZChzdGF0ZSk7Ci19Ci0gCi12b2lkIFBsdWdpblZpZXc6OnBvcFBv
cHVwc0VuYWJsZWRTdGF0ZSgpCi17Ci0gICAgbV9wb3B1cFN0YXRlU3RhY2sucmVtb3ZlTGFzdCgp
OwotfQotCi1ib29sIFBsdWdpblZpZXc6OmFyZVBvcHVwc0FsbG93ZWQoKSBjb25zdAotewotICAg
IGlmICghbV9wb3B1cFN0YXRlU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wb3B1
cFN0YXRlU3RhY2subGFzdCgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OnNldEphdmFTY3JpcHRQYXVzZWQoYm9vbCBwYXVzZWQpCi17Ci0gICAgaWYgKG1faXNK
YXZhU2NyaXB0UGF1c2VkID09IHBhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faXNKYXZh
U2NyaXB0UGF1c2VkID0gcGF1c2VkOwotCi0gICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQot
ICAgICAgICBtX3JlcXVlc3RUaW1lci5zdG9wKCk7Ci0gICAgZWxzZSBpZiAoIW1fcmVxdWVzdHMu
aXNFbXB0eSgpKQotICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0K
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLU5QT2JqZWN0KiBQbHVnaW5WaWV3Ojpu
cE9iamVjdCgpCi17Ci0gICAgTlBPYmplY3QqIG9iamVjdCA9IDA7Ci0KLSAgICBpZiAoIW1faXNT
dGFydGVkIHx8ICFtX3BsdWdpbiB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVl
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIE9uIFdpbmRvd3MsIGNhbGxpbmcgSmF2YSdz
IE5QTl9HZXRWYWx1ZSBjYW4gYWxsb3cgdGhlIG1lc3NhZ2UgbG9vcCB0bwotICAgIC8vIHJ1biwg
YWxsb3dpbmcgbG9hZGluZyB0byB0YWtlIHBsYWNlIG9yIEphdmFTY3JpcHQgdG8gcnVuLiBQcm90
ZWN0IHRoZQotICAgIC8vIFBsdWdpblZpZXcgZnJvbSBkZXN0cnVjdGlvbi4gPHJkYXI6Ly9wcm9i
bGVtLzY5Nzg4MDQ+Ci0gICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3QodGhpcyk7Ci0KLSAg
ICBOUEVycm9yIG5wRXJyOwotICAgIHsKLSAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcodGhpcyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7Ci0gICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdl
dHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZvYmplY3Qp
OwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAgUGx1Z2luVmlldzo6
c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgfQotCi0gICAgaWYgKG5wRXJyICE9IE5QRVJS
X05PX0VSUk9SKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0j
ZW5kaWYKLQotUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gUGx1Z2luVmlldzo6
YmluZGluZ0luc3RhbmNlKCkKLXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBOUE9iamVjdCogb2JqZWN0ID0gbnBPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaGFzT25lUmVmKCkpIHsKLSAgICAgICAgLy8gVGhlIHJl
bmRlcmVyIGZvciB0aGUgUGx1Z2luVmlldyB3YXMgZGVzdHJveWVkIGR1cmluZyB0aGUgYWJvdmUg
Y2FsbCwgYW5kCi0gICAgICAgIC8vIHRoZSBQbHVnaW5WaWV3IHdpbGwgYmUgZGVzdHJveWVkIHdo
ZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBzbyB3ZQotICAgICAgICAvLyByZXR1cm4gbnVsbC4K
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJv
b3RPYmplY3Q+IHJvb3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5jcmVhdGVSb290T2JqZWN0
KHRoaXMpOwotICAgIFJlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gaW5zdGFuY2UgPSBK
U0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmNyZWF0ZShvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsK
LQotICAgIF9OUE5fUmVsZWFzZU9iamVjdChvYmplY3QpOwotCi0gICAgcmV0dXJuIGluc3RhbmNl
LnJlbGVhc2UoKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVn
aW5WaWV3OjpkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbSogc3RyZWFtKQotewotICAgIEFT
U0VSVChtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtKSk7Ci0KLSAgICBtX3N0cmVhbXMucmVtb3Zl
KHN0cmVhbSk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyYW1ldGVycyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVz
KQotewotICAgIEFTU0VSVChwYXJhbU5hbWVzLnNpemUoKSA9PSBwYXJhbVZhbHVlcy5zaXplKCkp
OwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IHBhcmFtTmFtZXMuc2l6ZSgpOwotICAgIHVuc2lnbmVk
IHBhcmFtQ291bnQgPSAwOwotCi0gICAgbV9wYXJhbU5hbWVzID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKLSAgICBtX3BhcmFtVmFs
dWVzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAq
IHNpemUpKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlbW92ZVdp
bmRvd2xlc3NWaWRlb1BhcmFtKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAi
d2luZG93bGVzc3ZpZGVvIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAo
cGFyYW1OYW1lc1tpXSA9PSAicGx1Z2luc3BhZ2UiKQotICAgICAgICAgICAgbV9wbHVnaW5zUGFn
ZSA9IHBhcmFtVmFsdWVzW2ldOwotCi0gICAgICAgIG1fcGFyYW1OYW1lc1twYXJhbUNvdW50XSA9
IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1OYW1lc1tpXSk7Ci0gICAgICAgIG1fcGFyYW1WYWx1ZXNb
cGFyYW1Db3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtVmFsdWVzW2ldKTsKLQotICAgICAg
ICBwYXJhbUNvdW50Kys7Ci0gICAgfQotCi0gICAgbV9wYXJhbUNvdW50ID0gcGFyYW1Db3VudDsK
LX0KLQotUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IElu
dFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHBsdWdpbiwgSFRNTFBsdWdJbkVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSkKLSAgICA6IG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCi0g
ICAgLCBtX3BsdWdpbihwbHVnaW4pCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAsIG1f
aXNTdGFydGVkKGZhbHNlKQotICAgICwgbV91cmwodXJsKQotICAgICwgbV9zdGF0dXMoUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICwgbV9yZXF1ZXN0VGltZXIoKnRoaXMsICZQ
bHVnaW5WaWV3OjpyZXF1ZXN0VGltZXJGaXJlZCkKLSAgICAsIG1faW52YWxpZGF0ZVRpbWVyKCp0
aGlzLCAmUGx1Z2luVmlldzo6aW52YWxpZGF0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX3BvcFBvcHVw
c1N0YXRlVGltZXIoKnRoaXMsICZQbHVnaW5WaWV3Ojpwb3BQb3B1cHNTdGF0ZVRpbWVyRmlyZWQp
Ci0gICAgLCBtX2xpZmVTdXBwb3J0VGltZXIoKnRoaXMsICZQbHVnaW5WaWV3OjpsaWZlU3VwcG9y
dFRpbWVyRmlyZWQpCi0gICAgLCBtX21vZGUobG9hZE1hbnVhbGx5ID8gTlBfRlVMTCA6IE5QX0VN
QkVEKQotICAgICwgbV9wYXJhbU5hbWVzKDApCi0gICAgLCBtX3BhcmFtVmFsdWVzKDApCi0gICAg
LCBtX21pbWVUeXBlKG1pbWVUeXBlKQotICAgICwgbV9pbnN0YW5jZSgwKQotI2lmIGRlZmluZWQo
WFBfTUFDT1NYKQotICAgICwgbV9pc1dpbmRvd2VkKGZhbHNlKQotICAgICwgbV91cGRhdGVkQ29j
b2FUZXh0SW5wdXRSZXF1ZXN0ZWQoZmFsc2UpCi0gICAgLCBtX2tleURvd25TZW50KGZhbHNlKQot
ICAgICwgbV9kaXNyZWdhcmRLZXlVcENvdW50ZXIoMCkKLSNlbHNlCi0gICAgLCBtX2lzV2luZG93
ZWQodHJ1ZSkKLSNlbmRpZgotICAgICwgbV9pc1RyYW5zcGFyZW50KGZhbHNlKQotICAgICwgbV9o
YXZlSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAgLCBtX2lzV2FpdGluZ1RvU3RhcnQoZmFsc2UpCi0j
aWYgZGVmaW5lZChYUF9VTklYKQotICAgICwgbV9uZWVkc1hFbWJlZChmYWxzZSkKLSNlbmRpZgot
I2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICwgbV9w
bHVnaW5XbmRQcm9jKDApCi0gICAgLCBtX2xhc3RNZXNzYWdlKDApCi0gICAgLCBtX2lzQ2FsbGlu
Z1BsdWdpblduZFByb2MoZmFsc2UpCi0gICAgLCBtX3dtUHJpbnRIREMoMCkKLSAgICAsIG1faGF2
ZVVwZGF0ZWRQbHVnaW5XaWRnZXQoZmFsc2UpCi0jZW5kaWYKLSNpZiBQTEFURk9STShFRkwpCi0g
ICAgLCBtX3dpbmRvdygwKQotI2VuZGlmCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgLCBt
X2NvbnRleHRSZWYoMCkKLSNlbmRpZgotI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSh0cnVl
KQotICAgICwgbV9kcmF3YWJsZSgwKQotICAgICwgbV92aXN1YWwoMCkKLSAgICAsIG1fY29sb3Jt
YXAoMCkKLSAgICAsIG1fcGx1Z2luRGlzcGxheSgwKQotI2VuZGlmCi0gICAgLCBtX2xvYWRNYW51
YWxseShsb2FkTWFudWFsbHkpCi0gICAgLCBtX21hbnVhbFN0cmVhbSgwKQotICAgICwgbV9pc0ph
dmFTY3JpcHRQYXVzZWQoZmFsc2UpCi0gICAgLCBtX2hhdmVDYWxsZWRTZXRXaW5kb3coZmFsc2Up
Ci17Ci0gICAgaWYgKCFtX3BsdWdpbikgewotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1
c0Nhbk5vdEZpbmRQbHVnaW47Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2luc3Rh
bmNlID0gJm1faW5zdGFuY2VTdHJ1Y3Q7Ci0gICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlzOwot
ICAgIG1faW5zdGFuY2UtPnBkYXRhID0gMDsKLQotICAgIGluc3RhbmNlTWFwKCkuYWRkKG1faW5z
dGFuY2UsIHRoaXMpOwotCi0gICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVl
cyk7Ci0KLSAgICBtZW1zZXQoJm1fbnBXaW5kb3csIDAsIHNpemVvZihtX25wV2luZG93KSk7Ci0j
aWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgbWVtc2V0KCZtX25wQ2dDb250ZXh0LCAwLCBzaXpl
b2YobV9ucENnQ29udGV4dCkpOwotI2VuZGlmCi0KLSAgICByZXNpemUoc2l6ZSk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6Zm9jdXNQbHVnaW5FbGVtZW50KCkKLXsKLSAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuc2V0Rm9jdXNlZEVsZW1lbnQobV9lbGVtZW50LCBtX3BhcmVudEZyYW1lKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWRFbGVtZW50KG1f
ZWxlbWVudCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChtX2xvYWRNYW51YWxseSk7Ci0gICAgQVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7Ci0KLSAgICBt
X21hbnVhbFN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIG1fcGFyZW50RnJhbWUu
Z2V0KCksIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJl
cXVlc3QoKSwgZmFsc2UsIDAsIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBt
X3BsdWdpbi0+cXVpcmtzKCkpOwotICAgIG1fbWFudWFsU3RyZWFtLT5zZXRMb2FkTWFudWFsbHko
dHJ1ZSk7Ci0KLSAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3Bv
bnNlKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2Fk
ZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvYWRNYW51
YWxseSk7Ci0gICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKLSAgICAKLSAgICBtX21hbnVhbFN0
cmVhbS0+ZGlkUmVjZWl2ZURhdGEoMCwgZGF0YSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpkaWRGaW5pc2hMb2FkaW5nKCkKLXsKLSAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9s
b2FkTWFudWFsbHkpOwotICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7Ci0KLSAgICBtX21hbnVh
bFN0cmVhbS0+ZGlkRmluaXNoTG9hZGluZygwKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQ
bHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChtX2xvYWRNYW51YWxseSk7Ci0gICAgCi0gICAgaWYgKG1fbWFudWFsU3RyZWFtKQotICAg
ICAgICBtX21hbnVhbFN0cmVhbS0+ZGlkRmFpbCgwLCBlcnJvcik7Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2V0Q2FsbGluZ1BsdWdpbihib29sIGIpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsdWdp
bi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3NhZ2VMb29wKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGIpCi0gICAgICAgICsrc19jYWxsaW5nUGx1Z2luOwot
ICAgIGVsc2UKLSAgICAgICAgLS1zX2NhbGxpbmdQbHVnaW47Ci0KLSAgICBBU1NFUlQoc19jYWxs
aW5nUGx1Z2luID49IDApOwotfQotCi1ib29sIFBsdWdpblZpZXc6OmlzQ2FsbGluZ1BsdWdpbigp
Ci17Ci0gICAgcmV0dXJuIHNfY2FsbGluZ1BsdWdpbiA+IDA7Ci19Ci0KLVBhc3NSZWZQdHI8UGx1
Z2luVmlldz4gUGx1Z2luVmlldzo6Y3JlYXRlKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKLXsK
LSAgICAvLyBpZiB3ZSBmYWlsIHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMgTUlNRSB0eXBlLCBm
aW5kUGx1Z2luIHdpbGwgc2VhcmNoIGZvcgotICAgIC8vIGEgcGx1Z2luIGJ5IHRoZSBmaWxlIGV4
dGVuc2lvbiBhbmQgdXBkYXRlIHRoZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBtdXRhYmxlIFN0cmlu
ZwotICAgIFN0cmluZyBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKLSAgICBQbHVnaW5QYWNrYWdl
KiBwbHVnaW4gPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5maW5kUGx1Z2lu
KHVybCwgbWltZVR5cGVDb3B5KTsKLQotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSBy
ZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgaWYgKCFwbHVn
aW4gJiYgUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpKSB7Ci0g
ICAgICAgIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOwotICAgICAgICBwbHVnaW4gPSBQbHVnaW5E
YXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5maW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpblZpZXcocGFyZW50RnJh
bWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywg
bWltZVR5cGVDb3B5LCBsb2FkTWFudWFsbHkpKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpmcmVl
U3RyaW5nQXJyYXkoY2hhcioqIHN0cmluZ0FycmF5LCBpbnQgbGVuZ3RoKQotewotICAgIGlmICgh
c3RyaW5nQXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspCi0gICAgICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5W2ldKTsKLQotICAgIGZh
c3RGcmVlKHN0cmluZ0FycmF5KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhC
bGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCi17Ci0gICAgcmV0dXJuIGJ1ZmZl
ci5zaXplKCkgPiAwICYmIGJ1ZmZlclswXSA9PSAnXG4nOwotfQotCi1zdGF0aWMgaW5saW5lIGlu
dCBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIp
Ci17Ci0gICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoIC0gNDsgaSsrKSB7Ci0gICAgICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNl
bmRzICJcblxuIi4KLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFd
ID09ICdcbicpCi0gICAgICAgICAgICByZXR1cm4gaSArIDI7Ci0gICAgICAgIAotICAgICAgICAv
LyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBhZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMg
dGhlIGZpcnN0IGxpbmUuCi0gICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kg
KyAxXSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBpZiAoaSA9
PSAyKQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgZWxzZSBpZiAoYnl0
ZXNbaV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4g
SXQgc2VuZHMgIlxyXG5cbiIgKDM4ODAzODcpLgotICAgICAgICAgICAgICAgIHJldHVybiBpICsg
MTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFd
ID09ICdcbicpCi0gICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRz
ICJcclxuXHJcbiIgKDM3NTgxMTMpLgotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBjb25z
dCBjaGFyKiBmaW5kRU9MKGNvbnN0IGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQIHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQg
YXMKLSAgICAvLyBhIENSTEYgcGFpci4gVW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwg
dXNlIExGCi0gICAgLy8gaW5zdGVhZC4gV29yc2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2Ug
YSBjb21iaW5hdGlvbgotICAgIC8vIG9mIGJvdGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4p
LCBzbyBmaW5kRU9MIG5lZWRzCi0gICAgLy8gdG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwg
bm93IGFjY2VwdCBDUkxGLCBMRiBvcgotICAgIC8vIENSLgotICAgIC8vCi0gICAgLy8gSXQgcmV0
dXJucyBOVUxMIGlmIEVPTEYgaXMgbm90IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJuCi0gICAgLy8g
YSBwb2ludGVyIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChieXRlc1tpXSA9
PSAnXG4nKQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgaWYgKGJ5dGVz
W2ldID09ICdccicpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBi
dWZmZXIgYm91bmRzCi0gICAgICAgICAgICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBz
bywgd2FpdCBmb3IKLSAgICAgICAgICAgIC8vIG5leHQgcmVhZC4KLSAgICAgICAgICAgIGlmIChp
ICsgMSA9PSBsZW5ndGgpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBieXRlcyArIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIGlubGluZSBTdHJpbmcgY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgYm9vbCBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsK
LSAgICBTdHJpbmcgcmVzdWx0OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUu
bGVuZ3RoKCk7IGkrKykgewotICAgICAgICBVQ2hhciBjOwotCi0gICAgICAgIGlmIChjYXBpdGFs
aXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3onKQotICAgICAg
ICAgICAgYyA9IHRvQVNDSUlVcHBlcihuYW1lW2ldKTsKLSAgICAgICAgZWxzZSBpZiAoIWNhcGl0
YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCi0gICAg
ICAgICAgICBjID0gdG9BU0NJSUxvd2VyKG5hbWVbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjID0gbmFtZVtpXTsKLQotICAgICAgICBpZiAobmFtZVtpXSA9PSAnLScpCi0gICAgICAg
ICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IGZhbHNlOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQo
Yyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBIVFRQ
SGVhZGVyTWFwIHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVm
ZmVyLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIu
ZGF0YSgpOwotICAgIGNvbnN0IGNoYXIqIGVvbDsKLSAgICBTdHJpbmcgbGFzdEtleTsKLSAgICBI
VFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKLQotICAgIC8vIExvb3Agb3ZlIHJsaW5lcyB1bnRp
bCB3ZSdyZSBwYXN0IHRoZSBoZWFkZXIsIG9yIHdlIGNhbid0IGZpbmQgYW55IG1vcmUgZW5kLW9m
LWxpbmVzCi0gICAgd2hpbGUgKChlb2wgPSBmaW5kRU9MKGJ5dGVzLCBsZW5ndGgpKSkgewotICAg
ICAgICBjb25zdCBjaGFyKiBsaW5lID0gYnl0ZXM7Ci0gICAgICAgIGludCBsaW5lTGVuZ3RoID0g
ZW9sIC0gYnl0ZXM7Ci0gICAgICAgIAotICAgICAgICAvLyBNb3ZlIGJ5dGVzIHRvIHRoZSBjaGFy
YWN0ZXIgYWZ0ZXIgdGhlIHRlcm1pbmF0b3IgYXMgcmV0dXJuZWQgYnkgZmluZEVPTC4KLSAgICAg
ICAgYnl0ZXMgPSBlb2wgKyAxOwotICAgICAgICBpZiAoKCplb2wgPT0gJ1xyJykgJiYgKCpieXRl
cyA9PSAnXG4nKSkKLSAgICAgICAgICAgIGJ5dGVzKys7IC8vIFNhZmUgc2luY2UgZmluZEVPTCB3
b24ndCByZXR1cm4gYSBzcGFubmluZyBDUkxGLgotCi0gICAgICAgIGxlbmd0aCAtPSAoYnl0ZXMg
LSBsaW5lKTsKLSAgICAgICAgaWYgKGxpbmVMZW5ndGggPT0gMCkKLSAgICAgICAgICAgIC8vIEJs
YW5rIGxpbmU7IHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGhlYWRlcgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGVsc2UgaWYgKCpsaW5lID09ICcgJyB8fCAqbGluZSA9PSAnXHQnKSB7Ci0g
ICAgICAgICAgICAvLyBDb250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgotICAgICAg
ICAgICAgaWYgKGxhc3RLZXkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBtYWxmb3Jt
ZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIE1lcmdlIHRoZSBj
b250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgotICAgICAgICAgICAgICAgIFN0cmlu
ZyBjdXJyZW50VmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOwotICAgICAgICAgICAg
ICAgIFN0cmluZyBuZXdWYWx1ZShsaW5lLCBsaW5lTGVuZ3RoKTsKLQotICAgICAgICAgICAgICAg
IGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhl
YWRlcgotICAgICAgICAgICAgY29uc3QgY2hhciogY29sb247Ci0gICAgICAgICAgICBmb3IgKGNv
bG9uID0gbGluZTsgKmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKLSAg
ICAgICAgICAgICAgICAvLyBlbXB0eSBsb29wCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoY29sb24gPT0gZW9sKSAKLSAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBp
Z25vcmUgaXQgYW5kIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhl
YWRlckZpZWxkTmFtZShTdHJpbmcobGluZSwgY29sb24gLSBsaW5lKSk7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAh
PSBlb2w7IGNvbG9uKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcg
JiYgKmNvbG9uICE9ICdcdCcpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkKLSAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSAiIjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gU3RyaW5nKGNvbG9uLCBlb2wgLSBjb2xvbik7Ci0KLSAgICAgICAg
ICAgICAgICBTdHJpbmcgb2xkVmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOwotICAg
ICAgICAgICAgICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gb2xkVmFsdWUgKyAiLCAiICsgdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBoZWFk
ZXJGaWVsZHMuc2V0KGxhc3RLZXksIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBoZWFkZXJGaWVsZHM7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmll
dzo6aGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMy
X3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9v
bCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycykKLXsKLSAgICBpZiAoIXVybCB8
fCAhbGVuIHx8ICFidWYpCi0gICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwotCi0g
ICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOwotCi0gICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVs
ZHM7Ci0gICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKLSAgICAKLSAgICBpZiAoZmlsZSkgewotICAg
ICAgICBOUEVycm9yIHJlYWRSZXN1bHQgPSBoYW5kbGVQb3N0UmVhZEZpbGUoYnVmZmVyLCBsZW4s
IGJ1Zik7Ci0gICAgICAgIGlmKHJlYWRSZXN1bHQgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAg
ICAgICByZXR1cm4gcmVhZFJlc3VsdDsKLSAgICB9IGVsc2UgewotICAgICAgICBidWZmZXIucmVz
aXplKGxlbik7Ci0gICAgICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBidWYsIGxlbik7Ci0gICAg
fQotCi0gICAgY29uc3QgY2hhciogcG9zdERhdGEgPSBidWZmZXIuZGF0YSgpOwotICAgIGludCBw
b3N0RGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7Ci0KLSAgICBpZiAoYWxsb3dIZWFkZXJzKSB7
Ci0gICAgICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZlcikpIHsKLSAgICAgICAgICAg
IHBvc3REYXRhKys7Ci0gICAgICAgICAgICBwb3N0RGF0YUxlbmd0aC0tOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRpb25BZnRlckZpcnN0QmxhbmtM
aW5lKGJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBv
ZiB0aGUgYnVmZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyCi0gICAgICAgICAg
ICAgICAgaGVhZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoYnVmZmVyLCBsb2Nh
dGlvbik7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXpl
KCkgLSBsb2NhdGlvbjsKLQotICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVnaW5zIGxp
a2UgdG8gc2V0IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3QsCi0gICAg
ICAgICAgICAgICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0LiBTbyB3
ZSB3aWxsIHJlbW92ZSB0aGUgaGVhZGVyCi0gICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQg
dHJ1bmNhdGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCi0gICAgICAgICAgICAg
ICAgU3RyaW5nIGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0KEhUVFBIZWFkZXJOYW1l
OjpDb250ZW50TGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5p
c051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVu
Z3RoLnRvSW50KCksIChpbnQpZGF0YUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaGVhZGVyRmll
bGRzLnJlbW92ZShIVFRQSGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCk7Ci0KLSAgICAgICAgICAg
ICAgICBwb3N0RGF0YSArPSBsb2NhdGlvbjsKLSAgICAgICAgICAgICAgICBwb3N0RGF0YUxlbmd0
aCA9IGRhdGFMZW5ndGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIlBPU1QiKTsK
LSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1f
cGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKSk7Ci0gICAgZnJhbWVMb2Fk
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQSGVhZGVyRmllbGRzKFdURjo6bW92ZSho
ZWFkZXJGaWVsZHMpKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNl
dEhUVFBCb2R5KEZvcm1EYXRhOjpjcmVhdGUocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSk7Ci0g
ICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKLQotICAgIHJldHVybiBs
b2FkKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOwotfQot
Ci12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIGlmICghaXNWaXNpYmxlKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBpZiAoIW1fZWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGF1dG8mIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PigqbV9lbGVtZW50LT5yZW5k
ZXJlcigpKTsKLSAgICAKLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7Ci0gICAgZGlydHlS
ZWN0Lm1vdmUocmVuZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFkZGluZ0xlZnQoKSwg
cmVuZGVyZXIuYm9yZGVyVG9wKCkgKyByZW5kZXJlci5wYWRkaW5nVG9wKCkpOwotICAgIHJlbmRl
cmVyLnJlcGFpbnRSZWN0YW5nbGUoZGlydHlSZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpw
YWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiBudWxsUGx1Z2luSW1hZ2U7
Ci0gICAgaWYgKCFudWxsUGx1Z2luSW1hZ2UpCi0gICAgICAgIG51bGxQbHVnaW5JbWFnZSA9IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibnVsbFBsdWdpbiIpOwotCi0gICAgSW50UmVjdCBp
bWFnZVJlY3QoZnJhbWVSZWN0KCkueCgpLCBmcmFtZVJlY3QoKS55KCksIG51bGxQbHVnaW5JbWFn
ZS0+d2lkdGgoKSwgbnVsbFBsdWdpbkltYWdlLT5oZWlnaHQoKSk7Ci0KLSAgICBpbnQgeE9mZnNl
dCA9IChmcmFtZVJlY3QoKS53aWR0aCgpIC0gaW1hZ2VSZWN0LndpZHRoKCkpIC8gMjsKLSAgICBp
bnQgeU9mZnNldCA9IChmcmFtZVJlY3QoKS5oZWlnaHQoKSAtIGltYWdlUmVjdC5oZWlnaHQoKSkg
LyAyOwotCi0gICAgaW1hZ2VSZWN0Lm1vdmUoeE9mZnNldCwgeU9mZnNldCk7Ci0KLSAgICBpZiAo
IXJlY3QuaW50ZXJzZWN0cyhpbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb250
ZXh0LT5zYXZlKCk7Ci0gICAgY29udGV4dC0+Y2xpcCh3aW5kb3dDbGlwUmVjdCgpKTsKLSAgICBj
b250ZXh0LT5kcmF3SW1hZ2UobnVsbFBsdWdpbkltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBpbWFnZVJlY3QubG9jYXRpb24oKSk7Ci0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotfQot
Ci1zdGF0aWMgY29uc3QgY2hhciogTW96aWxsYVVzZXJBZ2VudCA9ICJNb3ppbGxhLzUuMCAoIgot
I2lmIGRlZmluZWQoWFBfTUFDT1NYKQotICAgICAgICAiTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMg
T1MgWDsiCi0jZWxpZiBkZWZpbmVkKFhQX1dJTikKLSAgICAgICAgIldpbmRvd3M7IFU7IFdpbmRv
d3MgTlQgNS4xOyIKLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLS8vIFRoZSBHdGsgcG9ydCB1c2Vz
IFgxMSBwbHVnaW5zIGluIE1hYy4KLSNpZiBPUyhEQVJXSU4pICYmIFBMQVRGT1JNKEdUSykKLSAg
ICAiWDExOyBVOyBJbnRlbCBNYWMgT1MgWDsiCi0jZWxzZQotICAgICJYMTE7IFU7IExpbnV4IGk2
ODY7IgotI2VuZGlmCi0jZW5kaWYKLSAgICAgICAgIiBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIw
MDYxMDEwIEZpcmVmb3gvMi4wIjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENocm9tZVVz
ZXJBZ2VudCA9ICJNb3ppbGxhLzUuMCAoIgotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotICAgICJN
YWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBYOyIKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQotICAg
ICJXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsiCi0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0g
ICAgLy8gVGhlIEd0ayBwb3J0IHVzZXMgWDExIHBsdWdpbnMgaW4gTWFjLgotI2lmIE9TKERBUldJ
TikgJiYgUExBVEZPUk0oR1RLKQotICAgICJYMTE7IFU7IEludGVsIE1hYyBPUyBYOyIKLSNlbHNl
Ci0gICAgIlgxMTsgVTsgTGludXggaTY4NjsiCi0jZW5kaWYKLSNlbmRpZgotICAgICIgQXBwbGVX
ZWJLaXQvNTM0LjM0IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzE5LjAuMTA1NS4xIFNhZmFy
aS81MzQuMzQiOwotCi1jb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnQoKQotewotICAg
IGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtXYW50c01vemlsbGFV
c2VyQWdlbnQpKQotICAgICAgICByZXR1cm4gTW96aWxsYVVzZXJBZ2VudDsKLSAgICBlbHNlIGlm
IChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtXYW50c0Nocm9tZVVzZXJB
Z2VudCkpCi0gICAgICAgIHJldHVybiBDaHJvbWVVc2VyQWdlbnQ7Ci0gICAgaWYgKG1fdXNlckFn
ZW50LmlzTnVsbCgpKQotICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRl
cigpLnVzZXJBZ2VudChtX3VybCkudXRmOCgpOwotCi0gICAgcmV0dXJuIG1fdXNlckFnZW50LmRh
dGEoKTsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotY29uc3QgY2hhciog
UGx1Z2luVmlldzo6dXNlckFnZW50U3RhdGljKCkKLXsKLSAgICByZXR1cm4gTW96aWxsYVVzZXJB
Z2VudDsKLX0KLSNlbmRpZgotCi0KLXZvaWQgUGx1Z2luVmlldzo6bGlmZVN1cHBvcnRUaW1lckZp
cmVkKCkKLXsKLSAgICBkZXJlZigpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmtlZXBBbGl2ZSgp
Ci17Ci0gICAgaWYgKG1fbGlmZVN1cHBvcnRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICByZWYoKTsKLSAgICBtX2xpZmVTdXBwb3J0VGltZXIuc3RhcnRPbmVTaG90KDAp
OwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi12b2lkIFBsdWdpblZpZXc6
OmtlZXBBbGl2ZShOUFAgaW5zdGFuY2UpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IGluc3Rh
bmNlTWFwKCkuZ2V0KGluc3RhbmNlKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHZpZXctPmtlZXBBbGl2ZSgpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZh
bHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBMT0co
UGx1Z2lucywgIlBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKCVzKSIsIHByZXR0eU5hbWVGb3JO
UE5WYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0OwotICAg
IGlmIChwbGF0Zm9ybUdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsK
LX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZSgl
cykiLCBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0KLSAgICBO
UEVycm9yIHJlc3VsdDsKLSAgICBpZiAocGxhdGZvcm1HZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUs
ICZyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKHBsYXRmb3JtR2V0
VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLQotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlZXaW5kb3dOUE9i
amVjdDogewotICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0gICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICBOUE9iamVjdCogd2luZG93U2Ny
aXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkud2luZG93U2NyaXB0TlBPYmplY3Qo
KTsKLQotICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQs
IGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVn
aW4vbnBydW50aW1lLmh0bWw+Ci0gICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCi0gICAg
ICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOwotCi0gICAgICAg
IHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKLSAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmpl
Y3Q7Ci0KLSAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgIH0KLQotICAgIGNhc2Ug
TlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogewotICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQ
YXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAg
ICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKLQotICAgICAgICBpZiAobV9lbGVt
ZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVk
VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKLSAgICAgICAgICAgIHBs
dWdpblNjcmlwdE9iamVjdCA9IG1fZWxlbWVudC0+Z2V0TlBPYmplY3QoKTsKLQotICAgICAgICAv
LyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBo
ZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0
bWw+Ci0gICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCi0gICAgICAgICAgICBfTlBOX1Jl
dGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOwotCi0gICAgICAgIHZvaWQqKiB2ID0gKHZv
aWQqKil2YWx1ZTsKLSAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7Ci0KLSAgICAgICAg
cmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgIH0KLQotICAgIGNhc2UgTlBOVnByaXZhdGVNb2Rl
Qm9vbDogewotICAgICAgICBQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpOwotICAg
ICAgICBpZiAoIXBhZ2UpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsK
LSAgICAgICAgKigoTlBCb29sKil2YWx1ZSkgPSBwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigp
OwotICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotfQotCi1zdGF0aWMg
RnJhbWUqIGdldEZyYW1lKEZyYW1lKiBwYXJlbnRGcmFtZSwgRWxlbWVudCogZWxlbWVudCkKLXsK
LSAgICBpZiAocGFyZW50RnJhbWUpCi0gICAgICAgIHJldHVybiBwYXJlbnRGcmFtZTsKLSAgICAK
LSAgICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCi1OUEVycm9yIFBs
dWdpblZpZXc6OmdldFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBj
aGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbikKLXsKLSAgICBMT0coUGx1Z2lu
cywgIlBsdWdpblZpZXc6OmdldFZhbHVlRm9yVVJMKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5VUkxW
YXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0ID0gTlBFUlJf
Tk9fRVJST1I7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxWQ29v
a2llOiB7Ci0gICAgICAgIFVSTCB1KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwo
KSwgdXJsKTsKLSAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBGcmFtZSog
ZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwotICAgICAgICAgICAg
aWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBjb29raWVTdHIgPSBj
b29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1KS51dGY4KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb29raWVTdHIuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHNp
emUgPSBjb29raWVTdHIubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0
YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICgqdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgqdmFsdWUs
IDAsIHNpemUrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKnZhbHVlLCBjb29r
aWVTdHIuZGF0YSgpLCBzaXplKzEpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbGVuID0gc2l6ZTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9PVVRf
T0ZfTUVNT1JZX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTlBOVVJMVlByb3h5OiB7Ci0gICAgICAgIFVSTCB1
KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKTsKLSAgICAgICAgaWYg
KHUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJl
bnRGcmFtZSgpLCBtX2VsZW1lbnQpOwotICAgICAgICAgICAgY29uc3QgRnJhbWVMb2FkZXIqIGZy
YW1lTG9hZGVyID0gZnJhbWUgPyAmZnJhbWUtPmxvYWRlcigpIDogMDsKLSAgICAgICAgICAgIGNv
bnN0IE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gZnJhbWVMb2FkZXIgPyBmcmFtZUxvYWRl
ci0+bmV0d29ya2luZ0NvbnRleHQoKSA6IDA7Ci0gICAgICAgICAgICBjb25zdCBDU3RyaW5nIHBy
b3h5U3RyID0gdG9TdHJpbmcocHJveHlTZXJ2ZXJzRm9yVVJMKHUsIGNvbnRleHQpKS51dGY4KCk7
Ci0gICAgICAgICAgICBpZiAoIXByb3h5U3RyLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgaW50IHNpemUgPSBwcm94eVN0ci5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAqdmFs
dWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHNpemUrMSkpOwotICAgICAgICAg
ICAgICAgIGlmICgqdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCp2YWx1ZSwg
MCwgc2l6ZSsxKTsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCp2YWx1ZSwgcHJveHlTdHIu
ZGF0YSgpLCBzaXplKzEpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGVuKQotICAgICAgICAg
ICAgICAgICAgICAgICAgKmxlbiA9IHNpemU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1I7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfSU5W
QUxJRF9VUkw7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdp
blZpZXc6OmdldFZhbHVlRm9yVVJMOiAlcyIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2
YXJpYWJsZSkuZGF0YSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotCi1OUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSTFZh
cmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50
MzJfdCBsZW4pCi17Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVS
TCglcykiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0K
LSAgICBOUEVycm9yIHJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotCi0gICAgc3dpdGNoICh2YXJp
YWJsZSkgewotICAgIGNhc2UgTlBOVVJMVkNvb2tpZTogewotICAgICAgICBVUkwgdShtX3BhcmVu
dEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCk7Ci0gICAgICAgIGlmICh1LmlzVmFs
aWQoKSkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nIGNvb2tpZVN0ciA9IFN0cmluZzo6ZnJv
bVVURjgodmFsdWUsIGxlbik7Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShw
YXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwotICAgICAgICAgICAgaWYgKGZyYW1lICYmICFjb29r
aWVTdHIuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHNldENvb2tpZXMoZnJhbWUtPmRvY3Vt
ZW50KCksIHUsIGNvb2tpZVN0cik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0
ID0gTlBFUlJfSU5WQUxJRF9VUkw7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE5Q
TlVSTFZQcm94eToKLSAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZUZv
clVSTCglcyk6IFBsdWdpbnMgYXJlIE5PVCBhbGxvd2VkIHRvIHNldCBwcm94eSBpbmZvcm1hdGlv
bi4iLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0gICAg
ICAgIHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkw6
ICVzIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotICAg
ICAgICByZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldEF1dGhl
bnRpY2F0aW9uSW5mbyhjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50
MzJfdCBwb3J0LCBjb25zdCBjaGFyKiAvKiBzY2hlbWUgKi8sIGNvbnN0IGNoYXIqIC8qIHJlYWxt
ICovLCBjaGFyKiogIC8qIHVzZXJuYW1lICovLCB1aW50MzJfdCogLyogdWxlbiAqLywgY2hhcioq
IC8qIHBhc3N3b3JkICovLCB1aW50MzJfdCogLyogcGxlbiAqLykKLXsKLSNpZiBMT0dfRElTQUJM
RUQKLSAgICBVTlVTRURfUEFSQU0ocHJvdG9jb2wpOwotICAgIFVOVVNFRF9QQVJBTShob3N0KTsK
LSAgICBVTlVTRURfUEFSQU0ocG9ydCk7Ci0jZW5kaWYKLSAgICBMT0coUGx1Z2lucywgIlBsdWdp
blZpZXc6OmdldEF1dGhlbnRpY2F0aW9uSW5mbzogcHJvdG9jb2w9JXMsIGhvc3Q9JXMsIHBvcnQ9
JWQiLCBwcm90b2NvbCwgaG9zdCwgcG9ydCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLSNlbmRpZgotCi12b2lkIFBsdWdpblZpZXc6
OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQp
Ci17Ci0gICAgTlBQX1NldFZhbHVlUHJvY1B0ciBzZXRWYWx1ZSA9IG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5zZXR2YWx1ZTsKLSAgICBpZiAoIXNldFZhbHVlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZN
KCkpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgTlBCb29sIHZhbHVlID0gcHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZDsKLSAgICBzZXRWYWx1ZShtX2luc3RhbmNlLCBOUE5WcHJpdmF0
ZU1vZGVCb29sLCAmdmFsdWUpOwotICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NmJi
OWQyODExNGFkZDg2OTRkNWNkMTE3YTAzZDY2MGRkZmMwMzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJp
c2hAZm9yd2FyZGJpYXMuaW4+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIFBsdWdpblZpZXdfaAotI2RlZmluZSBQbHVnaW5WaWV3X2gKLQotI2lu
Y2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIK
LSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2luY2x1ZGUgIlBs
dWdpblN0cmVhbS5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotI2VuZGlmCi0K
LSNpZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCi10eXBlZGVmIHN0cnVjdCBIV05EX18q
IEhXTkQ7Ci10eXBlZGVmIEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7Ci0jZWxzZQotdHlwZWRl
ZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKLSNlbmRpZgotI2lmIFBMQVRG
T1JNKEdUSykKLXR5cGVkZWYgc3RydWN0IF9HdGtTb2NrZXQgR3RrU29ja2V0OwotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShYMTEpCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93OwotdHlwZWRl
ZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0g
ICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKLSAgICAgICAgY2xhc3MgSW5zdGFuY2U7Ci0gICAgfQot
fQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgRnJh
bWVWaWV3OwotICAgIGNsYXNzIEltYWdlOwotICAgIGNsYXNzIEhUTUxQbHVnSW5FbGVtZW50Owot
ICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7Ci0gICAgY2xhc3MgTW91c2VFdmVudDsKLSAgICBjbGFz
cyBVUkw7Ci0jaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjsKLSNlbmRpZgotICAgIGNsYXNzIFBs
dWdpblBhY2thZ2U7Ci0gICAgY2xhc3MgUGx1Z2luUmVxdWVzdDsKLSAgICBjbGFzcyBQbHVnaW5T
dHJlYW07Ci0gICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKLSAgICBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwotICAgIGNsYXNzIFdoZWVsRXZlbnQ7Ci0KLSAgICBlbnVtIFBsdWdpblN0YXR1cyB7Ci0g
ICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCi0gICAgICAgIFBsdWdpblN0YXR1
c0Nhbk5vdExvYWRQbHVnaW4sCi0gICAgICAgIFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxs
eQotICAgIH07Ci0KLSAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0IHsKLSAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUGx1Z2luUmVxdWVzdCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
IHB1YmxpYzoKLSAgICAgICAgUGx1Z2luUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBm
cmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEs
IGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMpCi0gICAgICAgICAgICA6IG1fZnJhbWVMb2FkUmVxdWVz
dChmcmFtZUxvYWRSZXF1ZXN0KQotICAgICAgICAgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0
YSkKLSAgICAgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pCi0g
ICAgICAgICAgICAsIG1fc2hvdWxkQWxsb3dQb3B1cHMoc2hvdWxkQWxsb3dQb3B1cHMpIHsgfQot
ICAgIHB1YmxpYzoKLSAgICAgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVx
dWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQotICAgICAgICB2b2lk
KiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9Ci0gICAgICAgIGJv
b2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZE5vdGlmaWNhdGlvbjsg
fQotICAgICAgICBib29sIHNob3VsZEFsbG93UG9wdXBzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRBbGxvd1BvcHVwczsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZyYW1lTG9hZFJlcXVlc3Qg
bV9mcmFtZUxvYWRSZXF1ZXN0OwotICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7Ci0gICAgICAg
IGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOwotICAgICAgICBib29sIG1fc2hvdWxkQWxsb3dQb3B1
cHM7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpbk1hbnVhbExvYWRlciB7Ci0gICAgcHVibGlj
OgotICAgICAgICB2aXJ0dWFsIH5QbHVnaW5NYW51YWxMb2FkZXIoKSB7fQotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KSA9
IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkgPSAwOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgPSAwOwotICAgIH07
Ci0KLSAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFBsdWdpblZpZXdCYXNlCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUg
UGx1Z2luU3RyZWFtQ2xpZW50Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IFBsdWdpbk1hbnVhbExvYWRlcgotICAgICAgICAgICAgICAgICAgICAgLCBwcml2YXRlIE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQbHVnaW5WaWV3PiBjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwg
SFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpblZp
ZXcoKTsKLQotICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBt
X3BsdWdpbi5nZXQoKTsgfQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAg
ICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9Ci0jZW5kaWYKLQot
ICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0
YXRpYyBQbHVnaW5WaWV3KiBjdXJyZW50UGx1Z2luVmlldygpOwotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCgpOwotI2VuZGlmCi0g
ICAgICAgIFBhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGJpbmRpbmdJbnN0YW5j
ZSgpOwotCi0gICAgICAgIFBsdWdpblN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0
YXR1czsgfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIC8vIE5Q
TiBmdW5jdGlvbnMKLSAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOwotICAgICAgICBOUEVycm9y
IGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7Ci0gICAgICAgIE5Q
RXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlE
YXRhKTsKLSAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOwot
ICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRh
cmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOwotICAgICAgICBpbnQzMl90IHdyaXRlKE5QU3RyZWFt
KiBzdHJlYW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwotICAgICAgICBOUEVycm9yIGRl
c3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKLSNlbmRpZgot
ICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZXJBZ2VudFN0YXRpYygpOwot
I2VuZGlmCi0gICAgICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwotICAgICAg
ICAKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBFcnJvciBnZXRW
YWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwotICAgICAgICBzdGF0aWMg
TlBFcnJvciBnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
OwotICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSk7Ci0gICAgICAgIE5QRXJyb3IgZ2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFy
aWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKTsKLSAg
ICAgICAgTlBFcnJvciBzZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3QgbGVuKTsKLSAgICAgICAg
TlBFcnJvciBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0
IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25zdCBjaGFy
KiByZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hhcioqIHBhc3N3b3Jk
LCB1aW50MzJfdCogcGxlbik7Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7
Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7Ci0jZW5kaWYKLSAgICAg
ICAgdm9pZCBmb3JjZVJlZHJhdygpOwotICAgICAgICB2b2lkIHB1c2hQb3B1cHNFbmFibGVkU3Rh
dGUoYm9vbCBzdGF0ZSk7Ci0gICAgICAgIHZvaWQgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLQot
ICAgICAgICBib29sIGFyZVBvcHVwc0FsbG93ZWQoKSBjb25zdDsKLQotICAgICAgICB2b2lkIHNl
dEphdmFTY3JpcHRQYXVzZWQoYm9vbCk7Ci0KLSAgICAgICAgdm9pZCBwcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWQoYm9vbCk7Ci0KLSAgICAgICAgdm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdp
blN0cmVhbSopOwotICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcoUGx1Z2luU3Ry
ZWFtKiBzdHJlYW0pIHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9Ci0KLSAgICAgICAgLy8g
V2lkZ2V0IGZ1bmN0aW9ucwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IHNob3coKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGNsaXBSZWN0Q2hhbmdlZCgpIG92ZXJyaWRlOwotCi0gICAgICAgIC8vIFRoaXMg
bWV0aG9kIGlzIHVzZWQgYnkgcGx1Z2lucyBvbiBhbGwgcGxhdGZvcm1zIHRvIG9idGFpbiBhIGNs
aXAgcmVjdCB0aGF0IGluY2x1ZGVzIGNsaXBzIHNldCBieSBXZWJDb3JlLAotICAgICAgICAvLyBl
LmcuLCBpbiBvdmVyZmxvdzphdXRvIHNlY3Rpb25zLiAgVGhlIGNsaXAgcmVjdHMgY29vcmRpbmF0
ZXMgYXJlIGluIHRoZSBjb250YWluaW5nIHdpbmRvdydzIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAg
ICAgIC8vIFRoaXMgY2xpcCBpbmNsdWRlcyBhbnkgY2xpcHMgdGhhdCB0aGUgd2lkZ2V0IGl0c2Vs
ZiBzZXRzIHVwIGZvciBpdHMgY2hpbGRyZW4uCi0gICAgICAgIEludFJlY3Qgd2luZG93Q2xpcFJl
Y3QoKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRQYXJlbnRWaXNpYmxlKGJvb2wpOwotCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBpc1BsdWdpblZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAg
ICAgRnJhbWUqIHBhcmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRGcmFtZS5nZXQo
KTsgfQotCi0gICAgICAgIHZvaWQgZm9jdXNQbHVnaW5FbGVtZW50KCk7Ci0KLSAgICAgICAgY29u
c3QgU3RyaW5nJiBwbHVnaW5zUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luc1BhZ2U7IH0K
LSAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5
cGU7IH0KLSAgICAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQot
Ci0jaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
ICAgICAgICBib29sIHBvcFVwQ29udGV4dE1lbnUoTlBNZW51Kik7Ci0jZW5kaWYKLQotI2lmIE9T
KFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0aWMg
TFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQ
QVJBTSk7Ci0gICAgICAgIExSRVNVTFQgd25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwg
V1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7Ci0gICAgICAgIFdORFBST0MgcGx1Z2luV25k
UHJvYygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luV25kUHJvYzsgfQotI2VuZGlmCi0KLSAgICAg
ICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRpbmcKLSAgICAgICAgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2b2lkIGRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqLCBpbnQpOwotICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsK
LSAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLQotICAgICAgICBz
dGF0aWMgYm9vbCBpc0NhbGxpbmdQbHVnaW4oKTsKLQotICAgICAgICBib29sIHN0YXJ0KCk7Ci0K
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgc3RhdGljIHZvaWQga2Vl
cEFsaXZlKE5QUCk7Ci0jZW5kaWYKLSAgICAgICAgdm9pZCBrZWVwQWxpdmUoKTsKLQotI2lmIFBM
QVRGT1JNKFgxMSkKLSAgICAgICAgc3RhdGljIERpc3BsYXkqIGdldFBsdWdpbkRpc3BsYXkoRnJh
bWUqKTsKLSAgICAgICAgc3RhdGljIFdpbmRvdyBnZXRSb290V2luZG93KEZyYW1lKiBwYXJlbnRG
cmFtZSk7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdpblZpZXcoRnJhbWUq
IHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZSosIEhUTUxQbHVnSW5F
bGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Ym9vbCBsb2FkTWFudWFsbHkpOwotCi0gICAgICAgIHZvaWQgc2V0UGFyYW1ldGVycyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFs
dWVzKTsKLSAgICAgICAgYm9vbCBzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCk7Ci0gICAgICAg
IHZvaWQgaW5pdCgpOwotICAgICAgICBib29sIHBsYXRmb3JtU3RhcnQoKTsKLSAgICAgICAgdm9p
ZCBzdG9wKCk7Ci0gICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJl
cXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOwotICAgICAg
ICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOwotICAgICAgICBO
UEVycm9yIGhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3Qg
bGVuLCBjb25zdCBjaGFyKiBidWYpOwotI2VuZGlmCi0gICAgICAgIHN0YXRpYyB2b2lkIGZyZWVT
dHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpOwotICAgICAgICB2b2lk
IHNldENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRl
V2luZG93bGVzc1BsdWdpblJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBtZWRpYUNhblN0YXJ0KCk7Ci0KLSNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICAgICAgdm9pZCBwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICBzdGF0aWMgSERD
IFdJTkFQSSBob29rZWRCZWdpblBhaW50KEhXTkQsIFBBSU5UU1RSVUNUKik7Ci0gICAgICAgIHN0
YXRpYyBCT09MIFdJTkFQSSBob29rZWRFbmRQYWludChIV05ELCBjb25zdCBQQUlOVFNUUlVDVCop
OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgc3Rh
dGljIGJvb2wgcGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7Ci0gICAgICAgIGJvb2wgcGxhdGZvcm1HZXRWYWx1
ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7Ci0j
ZW5kaWYKLQotICAgICAgICBSZWZQdHI8RnJhbWU+IG1fcGFyZW50RnJhbWU7Ci0gICAgICAgIFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiBtX3BsdWdpbjsKLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQq
IG1fZWxlbWVudDsKLSAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKLSAgICAgICAgVVJMIG1fdXJs
OwotICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7Ci0gICAgICAgIFZlY3RvcjxJbnRSZWN0
PiBtX2ludmFsaWRSZWN0czsKLQotICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJl
cXVlc3QqKTsKLSAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3Qoc3RkOjp1bmlxdWVfcHRyPFBs
dWdpblJlcXVlc3Q+KTsKLSAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZCgpOwotICAgICAg
ICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKCk7Ci0gICAgICAgIFRpbWVyIG1fcmVxdWVzdFRp
bWVyOwotICAgICAgICBUaW1lciBtX2ludmFsaWRhdGVUaW1lcjsKLQotICAgICAgICB2b2lkIHBv
cFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpOwotICAgICAgICBUaW1lciBtX3BvcFBvcHVwc1N0YXRl
VGltZXI7Ci0KLSAgICAgICAgdm9pZCBsaWZlU3VwcG9ydFRpbWVyRmlyZWQoKTsKLSAgICAgICAg
VGltZXIgbV9saWZlU3VwcG9ydFRpbWVyOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgICAgIGJvb2wgZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmKTsKLSNlbmRpZgotI2lm
IGRlZmluZWQoWFBfTUFDT1NYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAg
ICAgaW50MTZfdCBkaXNwYXRjaE5QQ29jb2FFdmVudChOUENvY29hRXZlbnQmKTsKLSAgICAgICAg
Ym9vbCBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZDsKLSAgICAgICAgYm9vbCBtX2tl
eURvd25TZW50OwotICAgICAgICB1aW50MTZfdCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcjsKLSNl
bmRpZgotCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgICAgIHZvaWQgaGFuZGxlV2hlZWxF
dmVudChXaGVlbEV2ZW50Kik7Ci0jZW5kaWYKLSAgICAgICAgdm9pZCB1cGRhdGVQbHVnaW5XaWRn
ZXQoKTsKLSAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCopOwotICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVu
dCopOwotI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgICAgIHZvaWQgaGFuZGxlRm9jdXNJbkV2ZW50KCk7Ci0gICAgICAgIHZvaWQgaGFuZGxl
Rm9jdXNPdXRFdmVudCgpOwotI2VuZGlmCi0KLSNpZiBPUyhXSU5ET1dTKQotICAgICAgICB2b2lk
IHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMpOwotICAgICAgICBQYXNzUmVmUHRyPElt
YWdlPiBzbmFwc2hvdCgpOwotI2VuZGlmCi0KLSAgICAgICAgaW50IG1fbW9kZTsKLSAgICAgICAg
aW50IG1fcGFyYW1Db3VudDsKLSAgICAgICAgY2hhcioqIG1fcGFyYW1OYW1lczsKLSAgICAgICAg
Y2hhcioqIG1fcGFyYW1WYWx1ZXM7Ci0gICAgICAgIFN0cmluZyBtX3BsdWdpbnNQYWdlOwotCi0g
ICAgICAgIFN0cmluZyBtX21pbWVUeXBlOwotICAgICAgICBXVEY6OkNTdHJpbmcgbV91c2VyQWdl
bnQ7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBQIG1faW5z
dGFuY2U7Ci0gICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7Ci0gICAgICAgIE5QV2luZG93
IG1fbnBXaW5kb3c7Ci0jZW5kaWYKLQotICAgICAgICBWZWN0b3I8Ym9vbCwgND4gbV9wb3B1cFN0
YXRlU3RhY2s7Ci0KLSAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IG1fc3Ry
ZWFtczsKLSAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0Pj4gbV9y
ZXF1ZXN0czsKLQotICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKLSAgICAgICAgYm9vbCBtX2lz
VHJhbnNwYXJlbnQ7Ci0gICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7Ci0gICAgICAgIGJv
b2wgbV9pc1dhaXRpbmdUb1N0YXJ0OwotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotICAgICAgICBi
b29sIG1fbmVlZHNYRW1iZWQ7Ci0jZW5kaWYKLQotI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxl
cldpbj4gbV9tZXNzYWdlVGhyb3R0bGVyOwotICAgICAgICBXTkRQUk9DIG1fcGx1Z2luV25kUHJv
YzsKLSAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKLSAgICAgICAgYm9vbCBtX2lzQ2Fs
bGluZ1BsdWdpblduZFByb2M7Ci0gICAgICAgIEhEQyBtX3dtUHJpbnRIREM7Ci0gICAgICAgIGJv
b2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKLSNlbmRpZgotCi0jaWYgKFBMQVRGT1JNKEdU
SykgJiYgT1MoV0lORE9XUykpIHx8IFBMQVRGT1JNKEVGTCkKLSAgICAgICAgLy8gT24gTWFjIE9T
WCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhhdmUgaXRzIG93biBuYXRpdmUg
d2lkZ2V0LAotICAgICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNvbnRhaW5pbmcgd2luZG93IGFz
IGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5nLgotICAgICAgICBQbGF0Zm9y
bVBsdWdpbldpZGdldCBtX3dpbmRvdzsKLXB1YmxpYzoKLSAgICAgICAgUGxhdGZvcm1QbHVnaW5X
aWRnZXQgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdzsgfQot
ICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3JtUGx1Z2luV2lkZ2V0
IHdpZGdldCkgeyBtX3dpbmRvdyA9IHdpZGdldDsgfQotI2Vsc2UKLXB1YmxpYzoKLSAgICAgICAg
dm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBsdWdpbldpZGdldCB3aWRnZXQp
IHsgc2V0UGxhdGZvcm1XaWRnZXQod2lkZ2V0KTsgfQotICAgICAgICBQbGF0Zm9ybVBsdWdpbldp
ZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtV2lkZ2V0
KCk7IH0KLSNlbmRpZgotCi1wcml2YXRlOgotCi0jaWYgZGVmaW5lZChYUF9VTklYKSB8fCBQTEFU
Rk9STShHVEspCi0gICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwotI2VsaWYgZGVm
aW5lZChYUF9NQUNPU1gpCi0gICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0OwotICAg
ICAgICBDR0NvbnRleHRSZWYgbV9jb250ZXh0UmVmOwotCi0gICAgICAgIHZvaWQgc2V0TlBXaW5k
b3dJZk5lZWRlZCgpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hh
bmdlOwotICAgICAgICBQaXhtYXAgbV9kcmF3YWJsZTsKLSAgICAgICAgVmlzdWFsKiBtX3Zpc3Vh
bDsKLSAgICAgICAgQ29sb3JtYXAgbV9jb2xvcm1hcDsKLSAgICAgICAgRGlzcGxheSogbV9wbHVn
aW5EaXNwbGF5OwotCi0gICAgICAgIHZvaWQgaW5pdFhFdmVudChYRXZlbnQqIGV2ZW50KTsKLSNl
bmRpZgotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gcGx1Z1Jl
bW92ZWRDYWxsYmFjayhHdGtTb2NrZXQqLCBQbHVnaW5WaWV3Kik7Ci0gICAgICAgIHN0YXRpYyB2
b2lkIHBsdWdBZGRlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdpblZpZXcqKTsKLSAgICAgICAg
dm9pZCB1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOwotICAgICAgICBib29sIG1fcGx1
Z0FkZGVkOwotICAgICAgICBJbnRSZWN0IG1fZGVsYXllZEFsbG9jYXRpb247Ci0jZW5kaWYKLQot
ICAgICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8g
YSB3aW5kb3dlZCBwbHVnLWluCi0gICAgICAgIEludFJlY3QgbV93aW5kb3dSZWN0OyAvLyBPdXIg
d2luZG93IHJlY3QuCi0KLSAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKLSAgICAgICAgUmVm
UHRyPFBsdWdpblN0cmVhbT4gbV9tYW51YWxTdHJlYW07Ci0KLSAgICAgICAgYm9vbCBtX2lzSmF2
YVNjcmlwdFBhdXNlZDsKLQotICAgICAgICBib29sIG1faGF2ZUNhbGxlZFNldFdpbmRvdzsKLQot
ICAgICAgICBzdGF0aWMgUGx1Z2luVmlldyogc19jdXJyZW50UGx1Z2luVmlldzsKLSAgICB9Owot
Ci1pbmxpbmUgUGx1Z2luVmlldyogdG9QbHVnaW5WaWV3KFdpZGdldCogd2lkZ2V0KQotewotICAg
IEFTU0VSVCghd2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3KCkpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KTsKLX0KLQotaW5saW5lIGNvbnN0IFBsdWdp
blZpZXcqIHRvUGx1Z2luVmlldyhjb25zdCBXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBBU1NFUlQo
IXdpZGdldCB8fCB3aWRnZXQtPmlzUGx1Z2luVmlldygpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgUGx1Z2luVmlldyo+KHdpZGdldCk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBh
bnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZvaWQgdG9QbHVnaW5WaWV3KGNvbnN0
IFBsdWdpblZpZXcqKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9ucGFwaS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZDkwYTUy
YjdhMWU3Yzk2ZThkZjRkODk5YmNmODAxOTQ4ZWZmZDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKLSNp
bmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0vLyBUaGUgcGx1Z2luIHZpZXcgaXMgYWx3YXlz
IHRoZSBuZGF0YSBvZiB0aGUgaW5zdGFuY2UsLiBTb21ldGltZXMsIHBsdWctaW5zIHdpbGwgY2Fs
bCBhbiBpbnN0YW5jZS1zcGVjaWZpYyBmdW5jdGlvbgotLy8gd2l0aCBhIE5VTEwgaW5zdGFuY2Uu
IFRvIHdvcmthcm91bmQgdGhpcywgY2FsbCB0aGUgbGFzdCBwbHVnLWluIHZpZXcgdGhhdCBtYWRl
IGEgY2FsbCB0byBhIHBsdWctaW4uCi0vLyBDdXJyZW50bHksIHRoZSBjdXJyZW50IHBsdWctaW4g
dmlldyBpcyBvbmx5IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQbHVnaW5WaWV3OjpzdGFydC4KLS8v
IFRoaXMgc3BlY2lmaWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFzaCBhbmQgU2hvY2t3YXZlLiBXaGVu
IHdlIGNhbGwgTlBQX05ldywgdGhleSBjYWxsIE5QTl9Vc2VyYWdlbnQgd2l0aCBhIE5VTEwgaW5z
dGFuY2UuCi1zdGF0aWMgUGx1Z2luVmlldyogcGx1Z2luVmlld0Zvckluc3RhbmNlKE5QUCBpbnN0
YW5jZSkKLXsKLSAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UtPm5kYXRhKQotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7Ci0gICAgcmV0
dXJuIFBsdWdpblZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCk7Ci19Ci0KLXZvaWQqIE5QTl9NZW1B
bGxvYyh1aW50MzJfdCBzaXplKQotewotICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Ci19Ci0KLXZv
aWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQotewotICAgIGZyZWUocHRyKTsKLX0KLQotdWludDMy
X3QgTlBOX01lbUZsdXNoKHVpbnQzMl90KQotewotICAgIC8vIERvIG5vdGhpbmcKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBOUE5fUmVsb2FkUGx1Z2lucyhOUEJvb2wgcmVsb2FkUGFnZXMpCi17
Ci0gICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMocmVsb2FkUGFnZXMpOwotfQotCi1OUEVycm9yIE5Q
Tl9SZXF1ZXN0UmVhZChOUFN0cmVhbSosIE5QQnl0ZVJhbmdlKikKLXsKLSAgICByZXR1cm4gTlBF
UlJfU1RSRUFNX05PVF9TRUVLQUJMRTsKLX0KLQotTlBFcnJvciBOUE5fR2V0VVJMTm90aWZ5KE5Q
UCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5v
dGlmeURhdGEpCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PmdldFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgTlBO
X0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
KQotewotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkwo
dXJsLCB0YXJnZXQpOwotfQotCi1OUEVycm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5QUCBpbnN0YW5j
ZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29u
c3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTE5vdGlmeSh1cmwsIHRh
cmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEpOwotfQotCi1OUEVycm9yIE5QTl9Qb3N0
VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVp
bnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkKLXsKLSAgICByZXR1cm4g
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTCh1cmwsIHRhcmdldCwgbGVu
LCBidWYsIGZpbGUpOwotfQotCi1OUEVycm9yIE5QTl9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBO
UE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCi17
Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPm5ld1N0cmVhbSh0
eXBlLCB0YXJnZXQsIHN0cmVhbSk7Ci19Ci0KLWludDMyX3QgTlBOX1dyaXRlKE5QUCBpbnN0YW5j
ZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcikKLXsKLSAgICBy
ZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+d3JpdGUoc3RyZWFtLCBsZW4s
IGJ1ZmZlcik7Ci19Ci0KLU5QRXJyb3IgTlBOX0Rlc3Ryb3lTdHJlYW0oTlBQIGluc3RhbmNlLCBO
UFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pOwot
fQotCi1jb25zdCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBpbnN0YW5jZSkKLXsKLSAgICBQbHVn
aW5WaWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKLQotICAgICBp
ZiAoIXZpZXcpCi0gICAgICAgICByZXR1cm4gUGx1Z2luVmlldzo6dXNlckFnZW50U3RhdGljKCk7
Ci0gCi0gICAgcmV0dXJuIHZpZXctPnVzZXJBZ2VudCgpOwotfQotCi12b2lkIE5QTl9TdGF0dXMo
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPnN0YXR1cyhtZXNzYWdlKTsKLX0KLQotdm9pZCBOUE5fSW52YWxp
ZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJlY3QqIGludmFsaWRSZWN0KQotewotICAgIFBsdWdp
blZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOwotI2lmIGRlZmlu
ZWQoWFBfVU5JWCkKLSAgICAvLyBOU1BsdWdpbldyYXBwZXIsIGEgcGx1Z2luIHdyYXBwZXIgYmlu
YXJ5IHRoYXQgYWxsb3dzIHJ1bm5pbmcgMzItYml0IHBsdWdpbnMKLSAgICAvLyBvbiA2NC1iaXQg
YXJjaGl0ZWN0dXJlcyB0eXBpY2FsbHkgdXNlZCBpbiBYMTEsIHdpbGwgc29tZXRpbWVzIGdpdmUg
dXMgYSBudWxsIE5QUCBoZXJlLgotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotI2Vu
ZGlmCi0gICAgdmlldy0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOwotfQotCi12b2lkIE5Q
Tl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikK
LXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVnaW9u
KGludmFsaWRSZWdpb24pOwotfQotCi12b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2Up
Ci17Ci0gICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9yY2VSZWRyYXcoKTsK
LX0KLQotTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJp
YWJsZSwgdm9pZCogdmFsdWUpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSk7Ci0KLSAgICAgaWYgKCF2aWV3KQotICAgICAgICAgcmV0dXJu
IFBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSk7Ci0KLSAgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWUodmFyaWFibGUsIHZh
bHVlKTsKLX0KLQotTlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCi17Ci0gICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKS0+c2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKLX0KLQotdm9pZCogTlBO
X0dldEphdmFFbnYoKQotewotICAgIC8vIFVuc3VwcG9ydGVkCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFApCi17Ci0gICAgLy8gVW5zdXBwb3J0ZWQKLSAgICBy
ZXR1cm4gMDsKLX0KLQotdm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFu
Y2UsIE5QQm9vbCBlbmFibGVkKQotewotICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSktPnB1c2hQb3B1cHNFbmFibGVkU3RhdGUoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTlBOX1BvcFBv
cHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UpCi17Ci0gICAgcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKS0+cG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci19Ci0KLWV4dGVybiAiQyIg
dHlwZWRlZiB2b2lkIFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1bmN0aW9uKHZvaWQqKTsKLXZvaWQg
TlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbChOUFAgaW5zdGFuY2UsIFBsdWdpblRocmVhZEFzeW5j
Q2FsbEZ1bmN0aW9uIGZ1bmMsIHZvaWQqIHVzZXJEYXRhKQotewotICAgIC8vIENhbGxiYWNrIGZ1
bmN0aW9uIHR5cGUgb25seSBkaWZmZXJzIGZyb20gTWFpblRocmVhZEZ1bmN0aW9uIGJ5IGJlaW5n
IGV4dGVybiAiQyIsIHdoaWNoIGRvZXNuJ3QgYWZmZWN0IGNhbGxpbmcgY29udmVudGlvbiBvbiBh
bnkgY29tcGlsZXJzIHdlIHVzZS4KLSAgICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hl
ZHVsZXIoKS5zY2hlZHVsZUNhbGwoaW5zdGFuY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlcjo6TWFpblRocmVhZEZ1bmN0aW9uKj4oZnVuYyksIHVzZXJEYXRhKTsK
LX0KLQotTlBFcnJvciBOUE5fR2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJp
YWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBs
ZW4pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFZh
bHVlRm9yVVJMKHZhcmlhYmxlLCB1cmwsIHZhbHVlLCBsZW4pOwotfQotCi1OUEVycm9yIE5QTl9T
ZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzJfdCBsZW4pCi17Ci0gICAgcmV0
dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVlRm9yVVJMKHZhcmlh
YmxlLCB1cmwsIHZhbHVlLCBsZW4pOwotfQotCi1OUEVycm9yIE5QTl9HZXRBdXRoZW50aWNhdGlv
bkluZm8oTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9z
dCwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIqIHJlYWxtLCBj
aGFyKiogdXNlcm5hbWUsIHVpbnQzMl90KiB1bGVuLCBjaGFyKiogcGFzc3dvcmQsIHVpbnQzMl90
KiBwbGVuKQotewotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5n
ZXRBdXRoZW50aWNhdGlvbkluZm8ocHJvdG9jb2wsIGhvc3QsIHBvcnQsIHNjaGVtZSwgcmVhbG0s
IHVzZXJuYW1lLCB1bGVuLCBwYXNzd29yZCwgcGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX1BvcFVw
Q29udGV4dE1lbnUoTlBQIGluc3RhbmNlLCBOUE1lbnUqIG1lbnUpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGluc3RhbmNlKTsKLSAgICBVTlVTRURfUEFSQU0obWVudSk7Ci0gICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGFp
bnRIb29rcy5hc20gYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QYWludEhvb2tzLmFzbQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUwODgxMzU2YTBkZGNkNzgzMDcyODExZTlm
MTVhMTE1OTRiMTg1ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QYWludEhvb2tzLmFzbQorKysgL2Rldi9u
dWxsCkBAIC0xLDUwICswLDAgQEAKLTsvKgotOyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi07Ci07ICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLTsg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLTsgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi07ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLTsKLTsgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi07ICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci07ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi07ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotOwotOyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi07ICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci07ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi07ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotOyov
Ci0KLTtIREMgX19zdGRjYWxsIF9IQmVnaW5QYWludChIV05EIGhXbmQsIExQUEFJTlRTVFJVQ1Qg
bHBQYWludCk7Ci0KLVBVQkxJQyAgX0hCZWdpblBhaW50Ci0KLV9URVhUICAgU0VHTUVOVAotCi1f
SEJlZ2luUGFpbnQgUFJPQwotICAgICBtb3YgIHIxMCxyY3gKLSAgICAgbW92ICBlYXgsMTAxN2gK
LSAgICAgc3lzY2FsbAotICAgICByZXQKLV9IQmVnaW5QYWludCBFTkRQCi0KLV9URVhUICAgRU5E
UwotCi07Qk9PTCBfX3N0ZGNhbGwgX0hFbmRQYWludChIV05EIGhXbmQsIGNvbnN0IFBBSU5UU1RS
VUNUKiBscFBhaW50KTsKLQotUFVCTElDICBfSEVuZFBhaW50Ci0KLV9URVhUICAgU0VHTUVOVAot
Ci1fSEVuZFBhaW50IFBST0MKLSAgICBtb3YgIHIxMCxyY3gKLSAgICBtb3YgIGVheCwxMDE5aAot
ICAgIHN5c2NhbGwKLSAgICByZXQKLV9IRW5kUGFpbnQgRU5EUAotCi1fVEVYVCAgIEVORFMKLQot
RU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFz
ZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYzZjZjM0OTlmYzI5ZGU2YWM1YWVh
ZGIzOTI0MDQyNzFhYTBlMTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKLQotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1
ZGUgPHd0Zi9XaW5kb3dzRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IGlubGluZSB2b2lkIGFkZFBsdWdpblBhdGhzRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwgSGFz
aFNldDxTdHJpbmc+JiBwYXRocykKLXsKLSAgICBIS0VZIGtleTsKLSAgICBIUkVTVUxUIHJlc3Vs
dCA9IFJlZ09wZW5LZXlFeFcocm9vdEtleSwgTCJTb2Z0d2FyZVxcTW96aWxsYVBsdWdpbnMiLCAw
LCBLRVlfRU5VTUVSQVRFX1NVQl9LRVlTLCAma2V5KTsKLQotICAgIGlmIChyZXN1bHQgIT0gRVJS
T1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2NoYXJfdCBuYW1lWzEyOF07Ci0g
ICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAg
ICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gV1RGX0FS
UkFZX0xFTkdUSChuYW1lKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGks
IG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAo
cmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBX
Q0hBUiBwYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIHBhdGhTdHJTaXplID0gc2l6
ZW9mKHBhdGhTdHIpOwotICAgICAgICBEV09SRCB0eXBlOwotCi0gICAgICAgIHJlc3VsdCA9IGdl
dFJlZ2lzdHJ5VmFsdWUoa2V5LCBuYW1lLCBMIlBhdGgiLCAmdHlwZSwgcGF0aFN0ciwgJnBhdGhT
dHJTaXplKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTIHx8IHR5cGUgIT0g
UkVHX1NaKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcGF0aHMuYWRkKFN0cmlu
ZyhwYXRoU3RyLCBwYXRoU3RyU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci0gICAgfQotCi0g
ICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2lu
UGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCi0gICAgSGFz
aFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKLQotICAgIEhBTkRMRSBoRmluZCA9IElOVkFM
SURfSEFORExFX1ZBTFVFOwotICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZEZpbGVEYXRhOwotCi0g
ICAgU3RyaW5nIG9sZFdNUFBsdWdpblBhdGg7Ci0gICAgU3RyaW5nIG5ld1dNUFBsdWdpblBhdGg7
Ci0KLSAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5EaXJl
Y3Rvcmllcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIFN0cmluZyBwYXR0ZXJuID0gKml0ICsgIlxcKiI7Ci0KLSAgICAgICAgaEZpbmQgPSBGaW5k
Rmlyc3RGaWxlVyhwYXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgp
LCAmZmluZEZpbGVEYXRhKTsKLQotICAgICAgICBpZiAoaEZpbmQgPT0gSU5WQUxJRF9IQU5ETEVf
VkFMVUUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICBpZiAoZmluZEZpbGVEYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJF
Q1RPUlkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBm
aWxlbmFtZSA9IFN0cmluZyhmaW5kRmlsZURhdGEuY0ZpbGVOYW1lLCB3Y3NsZW4oZmluZEZpbGVE
YXRhLmNGaWxlTmFtZSkpOwotICAgICAgICAgICAgaWYgKCghZmlsZW5hbWUuc3RhcnRzV2l0aCgi
bnAiLCBmYWxzZSkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKCJkbGwiLCBmYWxzZSkpICYmCi0gICAg
ICAgICAgICAgICAgKCFlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIlBsdWdpbi5kbGwiKSB8
fCAhaXQtPmVuZHNXaXRoKCJTaG9ja3dhdmUgMTAiLCBmYWxzZSkpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSAqaXQgKyAiXFwiICsg
ZmlsZW5hbWU7Ci0gICAgICAgICAgICBpZiAoIXVuaXF1ZUZpbGVuYW1lcy5hZGQoZnVsbFBhdGgp
LmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHBh
dGhzLmFkZChmdWxsUGF0aCk7Ci0KLSAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShm
aWxlbmFtZSwgIm5wZHNwbGF5LmRsbCIpKQotICAgICAgICAgICAgICAgIG9sZFdNUFBsdWdpblBh
dGggPSBmdWxsUGF0aDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZp
bGVuYW1lLCAibnAtbXN3bXAuZGxsIikpCi0gICAgICAgICAgICAgICAgbmV3V01QUGx1Z2luUGF0
aCA9IGZ1bGxQYXRoOwotCi0gICAgICAgIH0gd2hpbGUgKEZpbmROZXh0RmlsZVcoaEZpbmQsICZm
aW5kRmlsZURhdGEpICE9IDApOwotCi0gICAgICAgIEZpbmRDbG9zZShoRmluZCk7Ci0gICAgfQot
Ci0gICAgYWRkUGx1Z2luUGF0aHNGcm9tUmVnaXN0cnkoSEtFWV9MT0NBTF9NQUNISU5FLCBwYXRo
cyk7Ci0gICAgYWRkUGx1Z2luUGF0aHNGcm9tUmVnaXN0cnkoSEtFWV9DVVJSRU5UX1VTRVIsIHBh
dGhzKTsKLQotICAgIC8vIElmIGJvdGggdGhlIG9sZCBhbmQgbmV3IFdNUCBwbHVnaW4gYXJlIHBy
ZXNlbnQgaW4gdGhlIHBsdWdpbnMgc2V0LCAKLSAgICAvLyB3ZSByZW1vdmUgdGhlIG9sZCBvbmUg
c28gd2UgZG9uJ3QgZW5kIHVwIGNob29zaW5nIHRoZSBvbGQgb25lLgotICAgIGlmICghb2xkV01Q
UGx1Z2luUGF0aC5pc0VtcHR5KCkgJiYgIW5ld1dNUFBsdWdpblBhdGguaXNFbXB0eSgpKQotICAg
ICAgICBwYXRocy5yZW1vdmUob2xkV01QUGx1Z2luUGF0aCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
VmVjdG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYgdmVyc2lvblN0cmlu
ZykKLXsKLSAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOwotCi0gICAgdW5zaWduZWQgc3RhcnRQb3Mg
PSAwOwotICAgIHVuc2lnbmVkIGVuZFBvczsKLSAgICAKLSAgICB3aGlsZSAoc3RhcnRQb3MgPCB2
ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7Ci0gICAgICAgIGZvciAoZW5kUG9zID0gc3RhcnRQb3M7
IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQotICAgICAgICAgICAg
aWYgKHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0cmluZ1tlbmRQb3Nd
ID09ICdfJykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpbnQgdmVyc2lvbkNv
bXBvbmVudCA9IHZlcnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFy
dFBvcykudG9JbnQoKTsKLSAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lvbkNvbXBvbmVudCk7
Ci0KLSAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOwotICAgIH0KLQotICAgIHJldHVybiB2
ZXJzaW9uOwotfQotCi0vLyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBpcyBoaWdoZXIg
dGhhbiB2ZXJzaW9uQgotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJzaW9ucyhjb25zdCBW
ZWN0b3I8aW50PiYgdmVyc2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQikKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBpKyspIHsKLSAgICAg
ICAgaWYgKGkgPj0gdmVyc2lvbkIuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAgICAgaWYgKHZlcnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJzaW9uQltpXSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBjb21lIGhlcmUs
IHRoZSB2ZXJzaW9ucyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25CIGhhcyBhbiBleHRy
YSBjb21wb25lbnQsIGp1c3QgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1z
dGF0aWMgaW5saW5lIHZvaWQgYWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJp
bmc+JiBkaXJlY3RvcmllcykKLXsKLSAgICAvLyBFbnVtZXJhdGUgYWxsIE1vemlsbGEgcGx1Z2lu
IGRpcmVjdG9yaWVzIGluIHRoZSByZWdpc3RyeQotICAgIEhLRVkga2V5OwotICAgIExPTkcgcmVz
dWx0OwotICAgIAotICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUs
IFRFWFQoIlNvZnR3YXJlXFxNb3ppbGxhIiksIDAsIEtFWV9SRUFELCAma2V5KTsKLSAgICBpZiAo
cmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgV0NIQVIgbmFtZVsxMjhdOwotICAg
ICAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAgICAgLy8gRW51bWVyYXRlIHN1Ymtl
eXMKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgICAgIERXT1JEIG5h
bWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOwotICAgICAgICAgICAgcmVzdWx0
ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1v
ZGlmaWVkKTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uc1BhdGgg
PSBTdHJpbmcobmFtZSwgbmFtZUxlbikgKyAiXFxFeHRlbnNpb25zIjsKLSAgICAgICAgICAgIEhL
RVkgZXh0ZW5zaW9uc0tleTsKLQotICAgICAgICAgICAgLy8gVHJ5IG9wZW5pbmcgdGhlIGtleQot
ICAgICAgICAgICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KGtleSwgZXh0ZW5zaW9uc1BhdGguY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIDAsIEtFWV9SRUFELCAmZXh0ZW5z
aW9uc0tleSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewot
ICAgICAgICAgICAgICAgIC8vIE5vdyBnZXQgdGhlIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAg
ICAgICAgICAgV0NIQVIgcGx1Z2luc0RpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgICAgICAg
ICAgICAgIERXT1JEIHBsdWdpbnNEaXJlY3RvcnlTaXplID0gc2l6ZW9mKHBsdWdpbnNEaXJlY3Rv
cnlTdHIpOwotICAgICAgICAgICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBSZWdRdWVyeVZhbHVlRXgoZXh0ZW5zaW9uc0tleSwgVEVYVCgiUGx1Z2lucyIpLCAw
LCAmdHlwZSwgKExQQllURSkmcGx1Z2luc0RpcmVjdG9yeVN0ciwgJnBsdWdpbnNEaXJlY3RvcnlT
aXplKTsKLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0
eXBlID09IFJFR19TWikKLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKFN0
cmluZyhwbHVnaW5zRGlyZWN0b3J5U3RyLCBwbHVnaW5zRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihX
Q0hBUikgLSAxKSk7Ci0KLSAgICAgICAgICAgICAgICBSZWdDbG9zZUtleShleHRlbnNpb25zS2V5
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVnQ2xvc2VL
ZXkoa2V5KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRXaW5kb3dzTWVkaWFQ
bGF5ZXJQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAg
IC8vIFRoZSBuZXcgV01QIEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBs
dWdpbnMgaWYgaXQgY2FuJ3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscwotICAgIFdDSEFSIHBs
dWdpbkRpcmVjdG9yeVN0cltfTUFYX1BBVEggKyAxXTsKLSAgICBEV09SRCBwbHVnaW5EaXJlY3Rv
cnlTaXplID0gOjpFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVc
XFBGaWxlc1xcUGx1Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIFdURl9BUlJBWV9MRU5HVEgo
cGx1Z2luRGlyZWN0b3J5U3RyKSk7Ci0KLSAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+IDAg
JiYgcGx1Z2luRGlyZWN0b3J5U2l6ZSA8PSBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVjdG9y
eVN0cikpCi0gICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcocGx1Z2luRGlyZWN0b3J5
U3RyLCBwbHVnaW5EaXJlY3RvcnlTaXplIC0gMSkpOwotCi0gICAgRFdPUkQgdHlwZTsKLSAgICBX
Q0hBUiBpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICBEV09SRCBpbnN0
YWxsYXRpb25EaXJlY3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cik7
Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNI
SU5FLCBMIlNvZnR3YXJlXFxNaWNyb3NvZnRcXE1lZGlhUGxheWVyIiwgTCJJbnN0YWxsYXRpb24g
RGlyZWN0b3J5IiwgJnR5cGUsICZpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsICZpbnN0YWxsYXRp
b25EaXJlY3RvcnlTaXplKTsKLQotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0
eXBlID09IFJFR19TWikKLSAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKFN0cmluZyhpbnN0YWxs
YXRpb25EaXJlY3RvcnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NI
QVIpIC0gMSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkQWRvYmVBY3JvYmF0UGx1Z2lu
RGlyZWN0b3J5KFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKLXsKLSAgICBIS0VZIGtleTsK
LSAgICBIUkVTVUxUIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFRF
WFQoIlNvZnR3YXJlXFxBZG9iZVxcQWNyb2JhdCBSZWFkZXIiKSwgMCwgS0VZX1JFQUQsICZrZXkp
OwotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV0NIQVIgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgIFZl
Y3RvcjxpbnQ+IGxhdGVzdEFjcm9iYXRWZXJzaW9uOwotICAgIFN0cmluZyBsYXRlc3RBY3JvYmF0
VmVyc2lvblN0cmluZzsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQg
aSA9IDA7OyBpKyspIHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNp
emVvZihXQ0hBUik7Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1l
LCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVmVjdG9y
PGludD4gYWNyb2JhdFZlcnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUsIG5h
bWVMZW4pKTsKLSAgICAgICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhhY3JvYmF0VmVyc2lvbiwgbGF0
ZXN0QWNyb2JhdFZlcnNpb24pKSB7Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvbiA9
IGFjcm9iYXRWZXJzaW9uOwotICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcg
PSBTdHJpbmcobmFtZSwgbmFtZUxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWxh
dGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIERXT1JEIHR5cGU7
Ci0gICAgICAgIFdDSEFSIGFjcm9iYXRJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOwotICAgICAg
ICBEV09SRCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0YWxsUGF0
aFN0cik7Ci0KLSAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNvZnR3YXJl
XFxBZG9iZVxcQWNyb2JhdCBSZWFkZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyAr
ICJcXEluc3RhbGxQYXRoIjsKLSAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZ
X0xPQ0FMX01BQ0hJTkUsIGFjcm9iYXRQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpLCAwLCAmdHlwZSwgYWNyb2JhdEluc3RhbGxQYXRoU3RyLCAmYWNy
b2JhdEluc3RhbGxQYXRoU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUND
RVNTKSB7Ci0gICAgICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpbkRpcmVjdG9yeSA9IFN0cmlu
ZyhhY3JvYmF0SW5zdGFsbFBhdGhTdHIsIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgLyBzaXplb2Yo
V0NIQVIpIC0gMSkgKyAiXFxicm93c2VyIjsKLSAgICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVu
ZChhY3JvYmF0UGx1Z2luRGlyZWN0b3J5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZ0Ns
b3NlS2V5KGtleSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRKYXZhUGx1Z2luRGlyZWN0
b3J5KFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKLXsKLSAgICBIS0VZIGtleTsKLSAgICBI
UkVTVUxUIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNv
ZnR3YXJlXFxKYXZhU29mdFxcSmF2YSBQbHVnLWluIiksIDAsIEtFWV9SRUFELCAma2V5KTsKLSAg
ICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdD
SEFSIG5hbWVbMTI4XTsKLSAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICBWZWN0b3I8
aW50PiBsYXRlc3RKYXZhVmVyc2lvbjsKLSAgICBTdHJpbmcgbGF0ZXN0SmF2YVZlcnNpb25TdHJp
bmc7Ci0KLSAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgIGZvciAoaW50IGkgPSAwOzsgaSsr
KSB7Ci0gICAgICAgIERXT1JEIG5hbWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIp
OwotICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4s
IDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1Jf
U1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFZlY3RvcjxpbnQ+IGphdmFW
ZXJzaW9uID0gcGFyc2VWZXJzaW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7Ci0gICAg
ICAgIGlmIChjb21wYXJlVmVyc2lvbnMoamF2YVZlcnNpb24sIGxhdGVzdEphdmFWZXJzaW9uKSkg
ewotICAgICAgICAgICAgbGF0ZXN0SmF2YVZlcnNpb24gPSBqYXZhVmVyc2lvbjsKLSAgICAgICAg
ICAgIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFsYXRlc3RKYXZhVmVyc2lvblN0cmluZy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgRFdPUkQgdHlwZTsKLSAgICAgICAgV0NIQVIgamF2YUluc3RhbGxQYXRo
U3RyW19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIGphdmFJbnN0YWxsUGF0aFNpemUgPSBzaXpl
b2YoamF2YUluc3RhbGxQYXRoU3RyKTsKLSAgICAgICAgRFdPUkQgdXNlTmV3UGx1Z2luVmFsdWU7
Ci0gICAgICAgIERXT1JEIHVzZU5ld1BsdWdpblNpemU7Ci0KLSAgICAgICAgU3RyaW5nIGphdmFQ
bHVnaW5LZXlQYXRoID0gIlNvZnR3YXJlXFxKYXZhU29mdFxcSmF2YSBQbHVnLWluXFwiICsgbGF0
ZXN0SmF2YVZlcnNpb25TdHJpbmc7Ci0gICAgICAgIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUo
SEtFWV9MT0NBTF9NQUNISU5FLCBqYXZhUGx1Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLmRhdGEoKSwgTCJVc2VOZXdKYXZhUGx1Z2luIiwgJnR5cGUsICZ1c2VOZXdQ
bHVnaW5WYWx1ZSwgJnVzZU5ld1BsdWdpblNpemUpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0g
RVJST1JfU1VDQ0VTUyAmJiB1c2VOZXdQbHVnaW5WYWx1ZSA9PSAxKSB7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgamF2YVBsdWdpbktl
eVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEwiSmF2YUhvbWUi
LCAmdHlwZSwgamF2YUluc3RhbGxQYXRoU3RyLCAmamF2YUluc3RhbGxQYXRoU2l6ZSk7Ci0gICAg
ICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICBT
dHJpbmcgamF2YVBsdWdpbkRpcmVjdG9yeSA9IFN0cmluZyhqYXZhSW5zdGFsbFBhdGhTdHIsIGph
dmFJbnN0YWxsUGF0aFNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkgKyAiXFxiaW5cXG5ld19wbHVn
aW4iOwotICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChqYXZhUGx1Z2luRGlyZWN0
b3J5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZ0Nsb3NlS2V5
KGtleSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHNhZmFyaVBsdWdpbnNEaXJlY3Rvcnko
KQotewotICAgIFdDSEFSIG1vZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFUSF07Ci0gICAgc3RhdGlj
IFN0cmluZyBwbHVnaW5zRGlyZWN0b3J5OwotICAgIHN0YXRpYyBib29sIGNhY2hlZFBsdWdpbkRp
cmVjdG9yeSA9IGZhbHNlOwotCi0gICAgaWYgKCFjYWNoZWRQbHVnaW5EaXJlY3RvcnkpIHsKLSAg
ICAgICAgY2FjaGVkUGx1Z2luRGlyZWN0b3J5ID0gdHJ1ZTsKLQotICAgICAgICBpbnQgbW9kdWxl
RmlsZU5hbWVMZW4gPSBHZXRNb2R1bGVGaWxlTmFtZSgwLCBtb2R1bGVGaWxlTmFtZVN0ciwgX01B
WF9QQVRIKTsKLQotICAgICAgICBpZiAoIW1vZHVsZUZpbGVOYW1lTGVuIHx8IG1vZHVsZUZpbGVO
YW1lTGVuID09IF9NQVhfUEFUSCkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBp
ZiAoIVBhdGhSZW1vdmVGaWxlU3BlYyhtb2R1bGVGaWxlTmFtZVN0cikpCi0gICAgICAgICAgICBn
b3RvIGV4aXQ7Ci0KLSAgICAgICAgcGx1Z2luc0RpcmVjdG9yeSA9IFN0cmluZyhtb2R1bGVGaWxl
TmFtZVN0cikgKyAiXFxQbHVnaW5zIjsKLSAgICB9Ci1leGl0OgotICAgIHJldHVybiBwbHVnaW5z
RGlyZWN0b3J5OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpbkRp
cmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKLXsKLSAgICBXQ0hBUiBzeXN0
ZW1EaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwotCi0gICAgaWYgKCFHZXRTeXN0ZW1EaXJlY3Rvcnko
c3lzdGVtRGlyZWN0b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHN5c3RlbURpcmVjdG9yeVN0cikp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBXQ0hBUiBtYWNyb21lZGlhRGlyZWN0b3J5U3RyW01B
WF9QQVRIXTsKLQotICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3Rl
bURpcmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXEZsYXNoIikpOwotICAgIGRpcmVjdG9yaWVz
LmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKLQotICAgIFBhdGhDb21iaW5lKG1hY3Jv
bWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXFNo
b2Nrd2F2ZSAxMCIpKTsKLSAgICBkaXJlY3Rvcmllcy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9y
eVN0cik7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2lu
RGlyZWN0b3JpZXMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGRpcmVjdG9yaWVzOwotICAgIFN0
cmluZyBvdXJEaXJlY3RvcnkgPSBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCk7Ci0KLSAgICBpZiAo
IW91ckRpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKG91ckRp
cmVjdG9yeSk7Ci0gICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luRGlyZWN0b3J5KGRpcmVjdG9yaWVz
KTsKLSAgICBhZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMpOwotICAgIGFk
ZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeShkaXJlY3Rvcmllcyk7Ci0gICAgYWRk
TWFjcm9tZWRpYVBsdWdpbkRpcmVjdG9yaWVzKGRpcmVjdG9yaWVzKTsKLQotICAgIHJldHVybiBk
aXJlY3RvcmllczsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5E
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCi17Ci0gICAgU3RyaW5nIG91ckRpcmVj
dG9yeSA9IHNhZmFyaVBsdWdpbnNEaXJlY3RvcnkoKTsKLQotICAgIGlmICghb3VyRGlyZWN0b3J5
LmlzTnVsbCgpICYmICFkaXJlY3RvcnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBvdXJEaXJl
Y3RvcnkgPT0gZGlyZWN0b3J5OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTNjMzE1YzIwMTg0Mzk0ZjNi
NDA2NGEzZjU0NDc1NzNlZDJjZjA5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJv
dHRsZXJXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIgotCi0j
aW5jbHVkZSAiUGx1Z2luVmlldy5oIgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLy8gU2V0IGEgdGltZXIgdG8gbWFrZSBzdXJlIHdlIHByb2Nlc3Mg
YW55IHF1ZXVlZCBtZXNzYWdlcyBhdCBsZWFzdCBldmVyeSAxNm1zLgotLy8gVGhpcyB2YWx1ZSBh
bGxvd3MgRmxhc2ggNjAgbWVzc2FnZXMvc2Vjb25kLCB3aGljaCBzaG91bGQgYmUgZW5vdWdoIGZv
ciB2aWRlbwotLy8gcGxheWJhY2ssIGFuZCBhbHNvIGdldHMgdXMgb3ZlciB0aGUgbGltaXQgZm9y
IGtpY2tpbmcgaW50byBoaWdoLXJlc29sdXRpb24KLS8vIHRpbWVyIG1vZGUgKHNlZSBTaGFyZWRU
aW1lcldpbi5jcHApLgotc3RhdGljIGNvbnN0IGRvdWJsZSBNZXNzYWdlVGhyb3R0bGVUaW1lSW50
ZXJ2YWwgPSAwLjAxNjsKLQotLy8gRHVyaW5nIGEgY29udGludW91cyBzdHJlYW0gb2YgbWVzc2Fn
ZXMsIHByb2Nlc3Mgb25lIGV2ZXJ5IDVtcy4KLXN0YXRpYyBjb25zdCBkb3VibGUgTWVzc2FnZURp
cmVjdFByb2Nlc3NpbmdJbnRlcnZhbCA9IDAuMDA1OwotCi1QbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZpZXcqIHBsdWdpblZpZXcpCi0g
ICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKLSAgICAsIG1fYmFjaygwKQotICAgICwgbV9m
cm9udCgwKQotICAgICwgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcigqdGhpcywgJlBsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJXaW46Om1lc3NhZ2VUaHJvdHRsZVRpbWVyRmlyZWQpCi0gICAgLCBtX2xhc3RN
ZXNzYWdlVGltZSgwKQotewotICAgIC8vIEluaXRpYWxpemUgdGhlIGZyZWUgbGlzdCB3aXRoIG91
ciBpbmxpbmUgbWVzc2FnZXMKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtSW5saW5l
TWVzc2FnZXMgLSAxOyBpKyspCi0gICAgICAgIG1faW5saW5lTWVzc2FnZXNbaV0ubmV4dCA9ICZt
X2lubGluZU1lc3NhZ2VzW2kgKyAxXTsKLSAgICBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1l
c3NhZ2VzIC0gMV0ubmV4dCA9IDA7Ci0gICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSAmbV9pbmxp
bmVNZXNzYWdlc1swXTsKLX0KLQotUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6flBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW4oKQotewotICAgIFBsdWdpbk1lc3NhZ2UqIG5leHQ7Ci0KLSAgICBm
b3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OyBtZXNzYWdlOyBtZXNzYWdlID0g
bmV4dCkgewotICAgICAgICBuZXh0ID0gbWVzc2FnZS0+bmV4dDsKLSAgICAgICAgZnJlZU1lc3Nh
Z2UobWVzc2FnZSk7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46
OmFwcGVuZE1lc3NhZ2UoSFdORCBoV25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFN
IGxQYXJhbSkKLXsKLSAgICBQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdl
KCk7Ci0KLSAgICBtZXNzYWdlLT5oV25kID0gaFduZDsKLSAgICBtZXNzYWdlLT5tc2cgPSBtc2c7
Ci0gICAgbWVzc2FnZS0+d1BhcmFtID0gd1BhcmFtOwotICAgIG1lc3NhZ2UtPmxQYXJhbSA9IGxQ
YXJhbTsKLSAgICBtZXNzYWdlLT5uZXh0ID0gMDsKLQotICAgIGlmIChtX2JhY2spCi0gICAgICAg
IG1fYmFjay0+bmV4dCA9IG1lc3NhZ2U7Ci0gICAgbV9iYWNrID0gbWVzc2FnZTsKLSAgICBpZiAo
IW1fZnJvbnQpCi0gICAgICAgIG1fZnJvbnQgPSBtZXNzYWdlOwotCi0gICAgLy8gSWYgaXQgaGFz
IGJlZW4gbW9yZSB0aGFuIE1lc3NhZ2VEaXJlY3RQcm9jZXNzaW5nSW50ZXJ2YWwgYmV0d2VlbiB0
aHJvdHRsZWQgbWVzc2FnZXMsCi0gICAgLy8gZ28gYWhlYWQgYW5kIHByb2Nlc3MgYSBtZXNzYWdl
IGRpcmVjdGx5LgotICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpOwotICAgIGlmIChjdXJyZW50VGltZSAtIG1fbGFzdE1lc3NhZ2VUaW1lID4gTWVz
c2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCkgewotICAgICAgICBwcm9jZXNzUXVldWVkTWVz
c2FnZSgpOwotICAgICAgICBtX2xhc3RNZXNzYWdlVGltZSA9IGN1cnJlbnRUaW1lOwotICAgICAg
ICBpZiAoIW1fZnJvbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFt
X21lc3NhZ2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fbWVzc2FnZVRocm90
dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7Ci19Ci0K
LXZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKQot
ewotICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OwotICAgIG1fZnJvbnQgPSBt
X2Zyb250LT5uZXh0OwotICAgIGlmIChtZXNzYWdlID09IG1fYmFjaykKLSAgICAgICAgbV9iYWNr
ID0gMDsKLQotICAgIC8vIFByb3RlY3QgdGhlIFBsdWdpblZpZXcgZnJvbSBkZXN0cnVjdGlvbiB3
aGlsZSBjYWxsaW5nIGl0cyB3aW5kb3cgcHJvYy4KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vNjkz
MDI4MD4KLSAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdChtX3BsdWdpblZpZXcpOwotICAg
IDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5wbHVnaW5XbmRQcm9jKCksIG1lc3NhZ2Ut
PmhXbmQsIG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1BhcmFtLCBtZXNzYWdlLT5sUGFyYW0pOwot
Ci0gICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KLXZvaWQgUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCgpCi17Ci0gICAgcHJvY2Vzc1F1ZXVl
ZE1lc3NhZ2UoKTsKLQotICAgIGlmIChtX2Zyb250KQotICAgICAgICBtX21lc3NhZ2VUaHJvdHRs
ZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwpOwotfQotCi1Q
bHVnaW5NZXNzYWdlKiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2Uo
KQotewotICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgICBpZiAobV9mcmVlSW5saW5l
TWVzc2FnZXMpIHsKLSAgICAgICAgbWVzc2FnZSA9IG1fZnJlZUlubGluZU1lc3NhZ2VzOwotICAg
ICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2UtPm5leHQ7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG1lc3NhZ2UgPSBuZXcgUGx1Z2luTWVzc2FnZTsKLQotICAgIHJldHVybiBtZXNzYWdl
OwotfQotCi1ib29sIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmlzSW5saW5lTWVzc2FnZShQ
bHVnaW5NZXNzYWdlKiBtZXNzYWdlKQotewotICAgIHJldHVybiBtZXNzYWdlID49ICZtX2lubGlu
ZU1lc3NhZ2VzWzBdICYmIG1lc3NhZ2UgPD0gJm1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVz
c2FnZXMgLSAxXTsKLX0KLQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjpmcmVlTWVz
c2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQotewotICAgIGlmIChpc0lubGluZU1lc3NhZ2Uo
bWVzc2FnZSkpIHsKLSAgICAgICAgbWVzc2FnZS0+bmV4dCA9IG1fZnJlZUlubGluZU1lc3NhZ2Vz
OwotICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2U7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGRlbGV0ZSBtZXNzYWdlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luLmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNTEwMzA4MzZkM2EzZTkyNzdh
NjBkNTdhZDYzN2M1YWZmMWRhYzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbl9oCi0jZGVmaW5lIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW5faAotCi0jaW5jbHVkZSAiVGltZXIuaCIKLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIFBsdWdpblZpZXc7Ci0KLSAgICBzdHJ1Y3QgUGx1
Z2luTWVzc2FnZSB7Ci0gICAgICAgIEhXTkQgaFduZDsKLSAgICAgICAgVUlOVCBtc2c7Ci0gICAg
ICAgIFdQQVJBTSB3UGFyYW07Ci0gICAgICAgIExQQVJBTSBsUGFyYW07Ci0KLSAgICAgICAgc3Ry
dWN0IFBsdWdpbk1lc3NhZ2UqIG5leHQ7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJXaW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbihQbHVnaW5WaWV3Kik7Ci0gICAgICAgIH5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2lu
KCk7Ci0KLSAgICAgICAgdm9pZCBhcHBlbmRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0s
IExQQVJBTSk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHByb2Nlc3NRdWV1ZWRNZXNz
YWdlKCk7Ci0gICAgICAgIHZvaWQgbWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCgpOwotICAgICAg
ICBQbHVnaW5NZXNzYWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKTsKLSAgICAgICAgYm9vbCBpc0lubGlu
ZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSk7Ci0gICAgICAgIHZvaWQgZnJlZU1lc3Nh
Z2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSk7Ci0KLSAgICAgICAgUGx1Z2luVmlldyogbV9wbHVn
aW5WaWV3OwotICAgICAgICBQbHVnaW5NZXNzYWdlKiBtX2JhY2s7Ci0gICAgICAgIFBsdWdpbk1l
c3NhZ2UqIG1fZnJvbnQ7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBOdW1JbmxpbmVNZXNz
YWdlcyA9IDQ7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UgbV9pbmxpbmVNZXNzYWdlc1tOdW1Jbmxp
bmVNZXNzYWdlc107Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlubGluZU1lc3NhZ2Vz
OwotCi0gICAgICAgIFRpbWVyIG1fbWVzc2FnZVRocm90dGxlVGltZXI7Ci0gICAgICAgIGRvdWJs
ZSBtX2xhc3RNZXNzYWdlVGltZTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE4NTI1N2Q2MjI5MjcyMDkxOGE1MWEzNmQ4MjdkOGNjZDJkNDE5YzEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblBh
Y2thZ2UuaCIKLQotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJQbHVn
aW5EYXRhYmFzZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAiVGltZXIu
aCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8c2hsd2FwaS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBT
dHJpbmcgZ2V0VmVyc2lvbkluZm8oY29uc3QgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3Qg
U3RyaW5nJiBpbmZvKQotewotICAgIExQVk9JRCBidWZmZXI7Ci0gICAgVUlOVCBidWZmZXJMZW5n
dGg7Ci0gICAgU3RyaW5nIHN1YkluZm8gPSAiXFxTdHJpbmdmaWxlSW5mb1xcMDQwOTA0RTRcXCIg
KyBpbmZvOwotICAgIGJvb2wgcmV0dmFsID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbkluZm9EYXRh
LAotICAgICAgICBjb25zdF9jYXN0PFVDaGFyKj4oc3ViSW5mby5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLmRhdGEoKSksCi0gICAgICAgICZidWZmZXIsICZidWZmZXJMZW5ndGgpOwot
ICAgIGlmICghcmV0dmFsIHx8IGJ1ZmZlckxlbmd0aCA9PSAwKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0KLSAgICAvLyBTdWJ0cmFjdCAxIGZyb20gdGhlIGxlbmd0aDsgd2UgZG9uJ3Qgd2Fu
dCB0aGUgdHJhaWxpbmcgbnVsbCBjaGFyYWN0ZXIuCi0gICAgcmV0dXJuIFN0cmluZyhyZWludGVy
cHJldF9jYXN0PFVDaGFyKj4oYnVmZmVyKSwgYnVmZmVyTGVuZ3RoIC0gMSk7Ci19Ci0KLWJvb2wg
UGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCgpCi17Ci0gICAgaWYgKG5hbWUoKSA9
PSAiQ2l0cml4IElDQSBDbGllbnQiKSB7Ci0gICAgICAgIC8vIFRoZSBDaXRyaXggSUNBIENsaWVu
dCBwbHVnLWluIHJlcXVpcmVzIGEgTW96aWxsYS1iYXNlZCBicm93c2VyOyBzZWUgPHJkYXI6Ly82
NDE4NjgxPi4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUoKSA9
PSAiU2lsdmVybGlnaHQgUGx1Zy1JbiIpIHsKLSAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgPHJk
YXI6Ly81NTU3Mzc5PiBDcmFzaCBpbiBTaWx2ZXJsaWdodCB3aGVuIG9wZW5pbmcgbWljcm9zb2Z0
LmNvbS4KLSAgICAgICAgLy8gdGhlIGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBTaWx2ZXJsaWdodCBk
b2VzIG5vdCByZXByb2R1Y2UgdGhpcyBjcmFzaCwgc28gYWxsb3cgaXQKLSAgICAgICAgLy8gYW5k
IGFueSBuZXdlciB2ZXJzaW9ucwotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVW
ZXJzaW9uIHNsUGx1Z2luTWluUmVxdWlyZWQoMHg1MUJFMDAwMCwgMHgwMDAxMDAwMCk7Ci0KLSAg
ICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihzbFBsdWdpbk1pblJlcXVpcmVkKSA8IDApCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGZpbGVOYW1lKCksICJucG1vemF4LmRsbCIpKSB7Ci0gICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96
aWxsYSBBY3RpdmVYIGNvbnRyb2wgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5k
bGwKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShmaWxlTmFtZSgpLCAibnB3cGYuZGxsIikpIHsKLSAgICAgICAgLy8gQnVnIDU3MTE5OiBNaWNy
b3NvZnQgV2luZG93cyBQcmVzZW50YXRpb24gRm91bmRhdGlvbiAoV1BGKSBwbHVnLWluIGNvbXBs
YWlucyBhYm91dCBtaXNzaW5nIHhwY29tLmRsbAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
IGVsc2UgaWYgKG5hbWUoKSA9PSAiWWFob28gQXBwbGljYXRpb24gU3RhdGUgUGx1Z2luIikgewot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY4NjAK
LSAgICAgICAgLy8gQnVnIGluIFlhaG9vIEFwcGxpY2F0aW9uIFN0YXRlIHBsdWctaW4gZWFybGll
ciB0aGFuIDEuMC4wLjYgbGVhZHMgdG8gaGVhcCBjb3JydXB0aW9uLiAKLSAgICAgICAgc3RhdGlj
IGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiB5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVxdWly
ZWQoMHgwMDAwMDAwNiwgMHgwMDAxMDAwMCk7Ci0gICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNp
b24oeWFob29BcHBTdGF0ZVBsdWdpbk1pblJlcXVpcmVkKSA8IDApCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2luUGFj
a2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYg
KG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKLSAgICAgICAg
c3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBmbGFzaFRlblZlcnNpb24oMHgwMDAw
MDAwMCwgMHgwMDBhMDAwMCk7Ci0KLSAgICAgICAgLy8gUHJlIDEwIEZsYXNoIG9ubHkgcmVxdWVz
dHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAot
ICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKGZsYXNoVGVuVmVyc2lvbikgPCAwKQotICAg
ICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsK
LQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOwot
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNz
YWdlcyk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVn
KTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBuYW1l
KCkuY29udGFpbnMoIldpbmRvd3MgTWVkaWEiKSkgewotICAgICAgICAvLyBUaGUgV01QIHBsdWdp
biBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVy
IHVwZGF0ZXMgaXRzIHNpemUsIHNvCi0gICAgICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhl
IHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7Ci0KLSAgICAgICAgLy8gV2luZG93bGVz
cyBtb2RlIGRvZXMgbm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCBy
ZW1vdmUgdGhhdCBwYXJhbWV0ZXIgCi0gICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRo
ZSBwbHVnLWluLgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3ds
ZXNzVmlkZW9QYXJhbSk7Ci0KLSAgICAgICAgLy8gV01QIGhhcyBhIG1vZGFsIG1lc3NhZ2UgbG9v
cCB0aGF0IGl0IGVudGVycyB3aGVuZXZlciB3ZSBjYWxsIGl0IG9yCi0gICAgICAgIC8vIGFzayBp
dCB0byBwYWludC4gVGhpcyBtb2RhbCBsb29wIGNhbiBkZWxpdmVyIG1lc3NhZ2VzIHRvIG90aGVy
Ci0gICAgICAgIC8vIHdpbmRvd3MgaW4gV2ViS2l0IGF0IHRpbWVzIHdoZW4gdGhleSBhcmUgbm90
IGV4cGVjdGluZyB0aGVtIChmb3IKLSAgICAgICAgLy8gZXhhbXBsZSwgZGVsaXZlcmluZyBhIFdN
X1BBSU5UIG1lc3NhZ2UgZHVyaW5nIGEgbGF5b3V0KSwgYW5kIHRoZXNlCi0gICAgICAgIC8vIGNh
biBjYXVzZSBjcmFzaGVzLgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtIYXNNb2Rh
bE1lc3NhZ2VMb29wKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSgpID09ICJWTEMgTXVsdGltZWRp
YSBQbHVnaW4iIHx8IG5hbWUoKSA9PSAiVkxDIE11bHRpbWVkaWEgUGx1Zy1pbiIpIHsKLSAgICAg
ICAgLy8gVkxDIGhhbmdzIG9uIE5QUF9EZXN0cm95IGlmIHdlIGNhbGwgTlBQX1NldFdpbmRvdyB3
aXRoIGEgbnVsbCB3aW5kb3cgaGFuZGxlCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a0RvbnRTZXROdWxsV2luZG93SGFuZGxlT25EZXN0cm95KTsKLQotICAgICAgICAvLyBWTEMgMC44
LjZkIGFuZCAwLjguNmUgY3Jhc2ggaWYgbXVsdGlwbGUgaW5zdGFuY2VzIGFyZSBjcmVhdGVkLgot
ICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTc3MzA3MD4gdHJhY2tzIGFsbG93aW5nIG11bHRp
cGxlIGluc3RhbmNlcyB3aGVuIHRoaXMKLSAgICAgICAgLy8gYnVnIGlzIGZpeGVkLgotICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0g
ICAgfQotCi0gICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0
IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KLSAgICAv
LyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUK
LSAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQotICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7Ci0KLSAgICAvLyBGSVhNRTogVGhp
cyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJpbmRpbmdz
OyBpZiBhIHBsdWctaW4gY3JlYXRlcyBhbgotICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNzZXMgaXQg
dG8gYSBmdW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9iamVjdCB0
aGF0IE5QT2JqZWN0IGJlbG9uZ3MgdG8uCi0gICAgLy8gVGh1cywgd2UgZG9uJ3Qga25vdyB0aGF0
IHRoZSBvYmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4gaW5zdGFu
Y2UgZ29lcyBhd2F5LgotICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4uCi0gICAg
aWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKLSAgICAgICAgbV9x
dWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICBpZiAoTUlNRVR5
cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7Ci0gICAgICAgIC8v
IEJlY2F1c2UgYSBzaW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5k
IHdlIGNhbm5vdCByZWxpYWJseSB1bmxvYWQgYQotICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5u
b3QgdW5sb2FkIHRoZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3Vy
IG9ubHkgVk0KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdp
bik7Ci0KLSAgICAgICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSBy
ZWdpb24gY2F1c2VzIGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcwotICAgICAgICAvLyB3
aXRoIHRoZSBKYXZhIHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0Rv
bnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOwotICAgIH0KLQotICAgIGlmIChtaW1lVHlw
ZSA9PSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIikgewotICAgICAgICAvLyBQcmV2ZW50
IHRoZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5
LCBjYXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KLSAgICAgICAgbV9xdWlya3MuYWRkKFBs
dWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSk7Ci0KLSAg
ICAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBsYXN0S25vd25VbmxvYWRh
YmxlUmVhbFBsYXllclZlcnNpb24oMHgwMDBCMEIyNCwgMHgwMDA2MDAwMCk7Ci0KLSAgICAgICAg
Ly8gVW5sb2FkaW5nIFJlYWxQbGF5ZXIgdmVyc2lvbnMgbmV3ZXIgdGhhbiAxMC41IGNhbiBjYXVz
ZSBhIGhhbmc7IHNlZSByZGFyOi8vNTY2OTMxNy4KLSAgICAgICAgLy8gRklYTUU6IFJlc3VtZSB1
bmxvYWRpbmcgd2hlbiB0aGlzIGJ1ZyBpbiB0aGUgUmVhbFBsYXllciBQbHVnLUluIGlzIGZpeGVk
IChyZGFyOi8vNTcxMzE0NykKLSAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihsYXN0S25v
d25VbmxvYWRhYmxlUmVhbFBsYXllclZlcnNpb24pID4gMCkKLSAgICAgICAgICAgIG1fcXVpcmtz
LmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOwotICAgIH0KLX0KLQotYm9vbCBQbHVn
aW5QYWNrYWdlOjpmZXRjaEluZm8oKQotewotICAgIERXT1JEIHZlcnNpb25JbmZvU2l6ZSwgemVy
b0hhbmRsZTsKLSAgICB2ZXJzaW9uSW5mb1NpemUgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhj
b25zdF9jYXN0PFVDaGFyKj4obV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCku
ZGF0YSgpKSwgJnplcm9IYW5kbGUpOwotICAgIGlmICh2ZXJzaW9uSW5mb1NpemUgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byB2ZXJzaW9uSW5mb0RhdGEgPSBzdGQ6Om1h
a2VfdW5pcXVlPGNoYXJbXT4odmVyc2lvbkluZm9TaXplKTsKLQotICAgIGlmICghR2V0RmlsZVZl
cnNpb25JbmZvVyhjb25zdF9jYXN0PFVDaGFyKj4obV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpKSwKLSAgICAgICAgICAgIDAsIHZlcnNpb25JbmZvU2l6ZSwgdmVy
c2lvbkluZm9EYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9uYW1l
ID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiUHJvZHVjdE5hbWUiKTsK
LSAgICBtX2Rlc2NyaXB0aW9uID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgp
LCAiRmlsZURlc2NyaXB0aW9uIik7Ci0gICAgaWYgKG1fbmFtZS5pc051bGwoKSB8fCBtX2Rlc2Ny
aXB0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWU19GSVhFREZJ
TEVJTkZPKiBpbmZvOwotICAgIFVJTlQgaW5mb1NpemU7Ci0gICAgaWYgKCFWZXJRdWVyeVZhbHVl
Vyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksIEwiXFwiLCAoTFBWT0lEKikgJmluZm8sICZpbmZvU2l6
ZSkgfHwgaW5mb1NpemUgPCBzaXplb2YoVlNfRklYRURGSUxFSU5GTykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBtX21vZHVsZVZlcnNpb24ubGVhc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJz
aW9uTFM7Ci0gICAgbV9tb2R1bGVWZXJzaW9uLm1vc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9u
TVM7Ci0KLSAgICBpZiAoaXNQbHVnaW5CbGFja2xpc3RlZCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBnZXRWZXJzaW9uSW5mbyh2ZXJz
aW9uSW5mb0RhdGEuZ2V0KCksICJNSU1FVHlwZSIpLnNwbGl0KCd8JywgdHlwZXMpOwotICAgIFZl
Y3RvcjxTdHJpbmc+IGV4dGVuc2lvbkxpc3RzOwotICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25J
bmZvRGF0YS5nZXQoKSwgIkZpbGVFeHRlbnRzIikuc3BsaXQoJ3wnLCBleHRlbnNpb25MaXN0cyk7
Ci0gICAgVmVjdG9yPFN0cmluZz4gZGVzY3JpcHRpb25zOwotICAgIGdldFZlcnNpb25JbmZvKHZl
cnNpb25JbmZvRGF0YS5nZXQoKSwgIkZpbGVPcGVuTmFtZSIpLnNwbGl0KCd8JywgZGVzY3JpcHRp
b25zKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7IGkrKykg
ewotICAgICAgICBTdHJpbmcgdHlwZSA9IHR5cGVzW2ldLmxvd2VyKCk7Ci0gICAgICAgIFN0cmlu
ZyBkZXNjcmlwdGlvbiA9IGkgPCBkZXNjcmlwdGlvbnMuc2l6ZSgpID8gZGVzY3JpcHRpb25zW2ld
IDogIiI7Ci0gICAgICAgIFN0cmluZyBleHRlbnNpb25MaXN0ID0gaSA8IGV4dGVuc2lvbkxpc3Rz
LnNpemUoKSA/IGV4dGVuc2lvbkxpc3RzW2ldIDogIiI7Ci0KLSAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gZXh0ZW5zaW9uc1ZlY3RvcjsKLSAgICAgICAgZXh0ZW5zaW9uTGlzdC5zcGxpdCgnLCcsIGV4
dGVuc2lvbnNWZWN0b3IpOwotCi0gICAgICAgIC8vIEdldCByaWQgb2YgdGhlIGV4dGVuc2lvbiBs
aXN0IHRoYXQgbWF5IGJlIGF0IHRoZSBlbmQgb2YgdGhlIGRlc2NyaXB0aW9uIHN0cmluZy4KLSAg
ICAgICAgaW50IHBvcyA9IGRlc2NyaXB0aW9uLmZpbmQoIigqIik7Ci0gICAgICAgIGlmIChwb3Mg
IT0gLTEpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGEgc3BhY2UgdGhhdCB3ZSBu
ZWVkIHRvIGdldCByaWQgb2YuCi0gICAgICAgICAgICBpZiAocG9zID4gMSAmJiBkZXNjcmlwdGlv
bltwb3MgLSAxXSA9PSAnICcpCi0gICAgICAgICAgICAgICAgcG9zLS07Ci0gICAgICAgICAgICBk
ZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLmxlZnQocG9zKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIERldGVybWluZSB0aGUgcXVpcmtzIGZvciB0aGUgTUlNRSB0eXBlcyB0aGlzIHBsdWctaW4g
c3VwcG9ydHMKLSAgICAgICAgZGV0ZXJtaW5lUXVpcmtzKHR5cGUpOwotCi0gICAgICAgIG1fbWlt
ZVRvRXh0ZW5zaW9ucy5hZGQodHlwZSwgZXh0ZW5zaW9uc1ZlY3Rvcik7Ci0gICAgICAgIG1fbWlt
ZVRvRGVzY3JpcHRpb25zLmFkZCh0eXBlLCBkZXNjcmlwdGlvbik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCi17Ci0gICAgaWYgKG1f
ZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIEFTU0VSVChtX21vZHVsZSk7
Ci0gICAgICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdG9wKCk7Ci0gICAgfSBlbHNlIGlmIChtX2lz
TG9hZGVkKSB7Ci0gICAgICAgIGlmIChtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRB
bGxvd011bHRpcGxlSW5zdGFuY2VzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgbV9sb2FkQ291bnQrKzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgV0NIQVIgY3VycmVudFBhdGhbTUFYX1BBVEhdOwotCi0gICAgICAgIGlmICghOjpHZXRD
dXJyZW50RGlyZWN0b3J5VyhNQVhfUEFUSCwgY3VycmVudFBhdGgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIFN0cmluZyBwYXRoID0gbV9wYXRoLnN1YnN0cmluZygwLCBt
X3BhdGgucmV2ZXJzZUZpbmQoJ1xcJykpOwotCi0gICAgICAgIGlmICghOjpTZXRDdXJyZW50RGly
ZWN0b3J5VyhwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBMb2FkIHRoZSBsaWJyYXJ5Ci0g
ICAgICAgIG1fbW9kdWxlID0gOjpMb2FkTGlicmFyeUV4VyhtX3BhdGguY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKS5kYXRhKCksIDAsIExPQURfV0lUSF9BTFRFUkVEX1NFQVJDSF9QQVRI
KTsKLQotICAgICAgICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcoY3VycmVudFBhdGgpKSB7
Ci0gICAgICAgICAgICBpZiAobV9tb2R1bGUpCi0gICAgICAgICAgICAgICAgOjpGcmVlTGlicmFy
eShtX21vZHVsZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoIW1fbW9kdWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2lz
TG9hZGVkID0gdHJ1ZTsKLQotICAgIE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0ciBOUF9HZXRFbnRy
eVBvaW50cyA9IDA7Ci0gICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7
Ci0gICAgTlBFcnJvciBucEVycjsKLQotICAgIE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6
ZUZ1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7Ci0gICAg
TlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRy
ZXNzKG1fbW9kdWxlLCAiTlBfR2V0RW50cnlQb2ludHMiKTsKLSAgICBtX05QUF9TaHV0ZG93biA9
IChOUFBfU2h1dGRvd25Qcm9jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRv
d24iKTsKLQotICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwg
IW1fTlBQX1NodXRkb3duKQotICAgICAgICBnb3RvIGFib3J0OwotCi0gICAgbWVtc2V0KCZtX3Bs
dWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOwotICAgIG1fcGx1Z2luRnVuY3Mu
c2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKLQotICAgIG5wRXJyID0gTlBfR2V0RW50cnlQ
b2ludHMoJm1fcGx1Z2luRnVuY3MpOwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLSAgICBpZiAo
bnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBpbml0
aWFsaXplQnJvd3NlckZ1bmNzKCk7Ci0KLSAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJv
d3NlckZ1bmNzKTsKLSAgICBMT0dfTlBFUlJPUihucEVycik7Ci0KLSAgICBpZiAobnBFcnIgIT0g
TlBFUlJfTk9fRVJST1IpCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBtX2xvYWRDb3VudCsr
OwotICAgIHJldHVybiB0cnVlOwotCi1hYm9ydDoKLSAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24o
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2go
KSBjb25zdAoteyAKLSAgICBjb25zdCB1bnNpZ25lZCBoYXNoQ29kZXNbXSA9IHsKLSAgICAgICAg
bV9uYW1lLmltcGwoKS0+aGFzaCgpLAotICAgICAgICBtX2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFz
aCgpLAotICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgpCi0gICAgfTsKLQotICAgIHJl
dHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rl
cyk7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYg
YSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikKLXsKLSAgICBpZiAoYS5tX25hbWUgIT0gYi5tX25h
bWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLm1fZGVzY3JpcHRpb24gIT0g
Yi5tX2Rlc2NyaXB0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS5tX21p
bWVUb0V4dGVuc2lvbnMuc2l6ZSgpICE9IGIubV9taW1lVG9FeHRlbnNpb25zLnNpemUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRl
cmF0b3I6OktleXMgZW5kID0gYS5tX21pbWVUb0V4dGVuc2lvbnMuZW5kKCkua2V5cygpOwotICAg
IGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBhLm1f
bWltZVRvRXh0ZW5zaW9ucy5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGlmICghYi5tX21pbWVUb0V4dGVuc2lvbnMuY29udGFpbnMoKml0KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdWludDE2X3Qg
UGx1Z2luUGFja2FnZTo6TlBWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTlBfVkVSU0lP
Tl9NSU5PUjsKLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblZpZXdXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dp
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MjEyYmEyNDlmNDc3ZTAzNjkx
OGVjMjYxMzI4ZTc2ZjdkZjlmODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0KLSNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJCcmlkZ2VK
U0MuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVk
ZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGb2N1c0Nv
bnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVl
c3QuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgot
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCi0jaW5j
bHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2
ZW50LmgiCi0jaW5jbHVkZSAiTG9jYWxXaW5kb3dzQ29udGV4dC5oIgotI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NYWluVGhy
ZWFkU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIgot
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNp
bmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIldlYkNvcmVJbnN0YW5jZUhhbmRsZS5oIgot
I2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvd2luL0dESU9i
amVjdC5oPgotCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCi0jaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oR1RL
KQotI2luY2x1ZGUgPGdkay9nZGt3aW4zMi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNlbmRp
ZgotCi1zdGF0aWMgaW5saW5lIEhXTkQgd2luZG93SGFuZGxlRm9yUGFnZUNsaWVudChQbGF0Zm9y
bVBhZ2VDbGllbnQgY2xpZW50KQotewotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBpZiAoIWNsaWVu
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dp
ZGdldF9nZXRfd2luZG93KGNsaWVudCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIV05E
PihHREtfV0lORE9XX0hXTkQod2luZG93KSk7Ci0gICAgcmV0dXJuIDA7Ci0jZWxzZQotICAgIHJl
dHVybiBjbGllbnQ7Ci0jZW5kaWYKLX0KLQotdXNpbmcgSlNDOjpFeGVjU3RhdGU7Ci11c2luZyBK
U0M6OkpTTG9jazsKLXVzaW5nIEpTQzo6SlNPYmplY3Q7Ci0KLXVzaW5nIHN0ZDo6bWluOwotCi11
c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7Ci0KLWNvbnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdkb3dDbGFzc05h
bWUgPSBMIldlYlBsdWdpblZpZXciOwotY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld1Byb3Bl
cnR5ID0gTCJXZWJQbHVnaW5WaWV3UHJvcGVydHkiOwotCi0vLyBUaGUgY29kZSB1c2VkIHRvIGhv
b2sgQmVnaW5QYWludC9FbmRQYWludCBvcmlnaW5hbGx5IGNhbWUgZnJvbQotLy8gPGh0dHA6Ly93
d3cuZmVuZ3l1YW4uY29tL2FydGljbGUvd21wcmludC5odG1sPi4KLS8vIENvcHlyaWdodCAoQykg
MjAwMCBieSBGZW5nIFl1YW4gKHd3dy5mZW5neXVhbi5jb20pLgotCi1zdGF0aWMgdW5zaWduZWQg
YmVnaW5QYWludFN5c0NhbGw7Ci1zdGF0aWMgQllURSogYmVnaW5QYWludDsKLQotc3RhdGljIHVu
c2lnbmVkIGVuZFBhaW50U3lzQ2FsbDsKLXN0YXRpYyBCWVRFKiBlbmRQYWludDsKLQotdHlwZWRl
ZiBIREMgKFdJTkFQSSAqUHRyQmVnaW5QYWludCkoSFdORCwgUEFJTlRTVFJVQ1QqKTsKLXR5cGVk
ZWYgQk9PTCAoV0lOQVBJICpQdHJFbmRQYWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJVQ1QqKTsK
LQotI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpICYmIENPTVBJTEVSKE1TVkMpCi1leHRl
cm4gIkMiIEhEQyBfX3N0ZGNhbGwgX0hCZWdpblBhaW50KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVD
VCBscFBhaW50KTsKLWV4dGVybiAiQyIgQk9PTCBfX3N0ZGNhbGwgX0hFbmRQYWludChIV05EIGhX
bmQsIGNvbnN0IFBBSU5UU1RSVUNUKiBscFBhaW50KTsKLSNlbmRpZgotCi1IREMgV0lOQVBJIFBs
dWdpblZpZXc6Omhvb2tlZEJlZ2luUGFpbnQoSFdORCBoV25kLCBQQUlOVFNUUlVDVCogbHBQYWlu
dCkKLXsKLSAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxQbHVn
aW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7Ci0gICAgaWYg
KHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+bV93bVByaW50SERDKSB7Ci0gICAgICAgIC8vIFdl
J3JlIHNlY3JldGx5IGhhbmRsaW5nIFdNX1BSSU5UQ0xJRU5ULCBzbyBzZXQgdXAgdGhlIFBBSU5U
U1RSVUNUIHNvCi0gICAgICAgIC8vIHRoYXQgdGhlIHBsdWdpbiB3aWxsIHBhaW50IGludG8gdGhl
IEhEQyB3ZSBwcm92aWRlLgotICAgICAgICBtZW1zZXQobHBQYWludCwgMCwgc2l6ZW9mKFBBSU5U
U1RSVUNUKSk7Ci0gICAgICAgIGxwUGFpbnQtPmhkYyA9IHBsdWdpblZpZXctPm1fd21QcmludEhE
QzsKLSAgICAgICAgR2V0Q2xpZW50UmVjdChoV25kLCAmbHBQYWludC0+cmNQYWludCk7Ci0gICAg
ICAgIHJldHVybiBwbHVnaW5WaWV3LT5tX3dtUHJpbnRIREM7Ci0gICAgfQotCi0jaWYgQ09NUElM
RVIoR0NDKQotICAgIEhEQyByZXN1bHQ7Ci0gICAgYXNtICgicHVzaCAgICAlMlxuIgotICAgICAg
ICAgInB1c2ggICAgJTNcbiIKLSAgICAgICAgICJjYWxsICAgIColNFxuIgotICAgICAgICAgOiAi
PWEiIChyZXN1bHQpCi0gICAgICAgICA6ICJhIiAoYmVnaW5QYWludFN5c0NhbGwpLCAiZyIgKGxw
UGFpbnQpLCAiZyIgKGhXbmQpLCAibSIgKGJlZ2luUGFpbnQpCi0gICAgICAgICA6ICJtZW1vcnki
Ci0gICAgICAgICk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbGlmIGRlZmluZWQoX01fSVg4NikK
LSAgICAvLyBDYWxsIHRocm91Z2ggdG8gdGhlIG9yaWdpbmFsIEJlZ2luUGFpbnQuCi0gICAgX19h
c20gICBtb3YgICAgIGVheCwgYmVnaW5QYWludFN5c0NhbGwKLSAgICBfX2FzbSAgIHB1c2ggICAg
bHBQYWludAotICAgIF9fYXNtICAgcHVzaCAgICBoV25kCi0gICAgX19hc20gICBjYWxsICAgIGJl
Z2luUGFpbnQKLSNlbHNlCi0gICAgcmV0dXJuIF9IQmVnaW5QYWludChoV25kLCBscFBhaW50KTsK
LSNlbmRpZgotfQotCi1CT09MIFdJTkFQSSBQbHVnaW5WaWV3Ojpob29rZWRFbmRQYWludChIV05E
IGhXbmQsIGNvbnN0IFBBSU5UU1RSVUNUKiBscFBhaW50KQotewotICAgIFBsdWdpblZpZXcqIHBs
dWdpblZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtX
ZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKLSAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3
LT5tX3dtUHJpbnRIREMpIHsKLSAgICAgICAgLy8gV2UncmUgc2VjcmV0bHkgaGFuZGxpbmcgV01f
UFJJTlRDTElFTlQsIHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55Ci0gICAgICAgIC8vIGNsZWFu
dXAuCi0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotI2lmIENPTVBJTEVSKEdDQykKLSAg
ICBCT09MIHJlc3VsdDsKLSAgICBhc20gKCJwdXNoICAgJTJcbiIKLSAgICAgICAgICJwdXNoICAg
JTNcbiIKLSAgICAgICAgICJjYWxsICAgKiU0XG4iCi0gICAgICAgICA6ICI9YSIgKHJlc3VsdCkK
LSAgICAgICAgIDogImEiIChlbmRQYWludFN5c0NhbGwpLCAiZyIgKGxwUGFpbnQpLCAiZyIgKGhX
bmQpLCAibSIgKGVuZFBhaW50KQotICAgICAgICApOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxp
ZiBkZWZpbmVkIChfTV9JWDg2KQotICAgIC8vIENhbGwgdGhyb3VnaCB0byB0aGUgb3JpZ2luYWwg
RW5kUGFpbnQuCi0gICAgX19hc20gICBtb3YgICAgIGVheCwgZW5kUGFpbnRTeXNDYWxsCi0gICAg
X19hc20gICBwdXNoICAgIGxwUGFpbnQKLSAgICBfX2FzbSAgIHB1c2ggICAgaFduZAotICAgIF9f
YXNtICAgY2FsbCAgICBlbmRQYWludAotI2Vsc2UKLSAgICByZXR1cm4gX0hFbmRQYWludChoV25k
LCBscFBhaW50KTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBob29rKGNvbnN0IGNoYXIqIG1v
ZHVsZSwgY29uc3QgY2hhciogcHJvYywgdW5zaWduZWQmIHN5c0NhbGxJRCwgQllURSomIHBQcm9j
LCBjb25zdCB2b2lkKiBwTmV3UHJvYykKLXsKLSAgICAvLyBTZWUgPGh0dHA6Ly93d3cuZmVuZ3l1
YW4uY29tL2FydGljbGUvd21wcmludC5odG1sPiBmb3IgYW4gZXhwbGFuYXRpb24gb2YKLSAgICAv
LyBob3cgdGhpcyBmdW5jdGlvbiB3b3Jrcy4KLQotICAgIEhJTlNUQU5DRSBoTW9kID0gR2V0TW9k
dWxlSGFuZGxlQShtb2R1bGUpOwotCi0gICAgcFByb2MgPSByZWludGVycHJldF9jYXN0PEJZVEUq
PihyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oR2V0UHJvY0FkZHJlc3MoaE1vZCwgcHJvYykp
KTsKLQotI2lmIENPTVBJTEVSKEdDQykgfHwgZGVmaW5lZChfTV9JWDg2KQotICAgIGlmIChwUHJv
Y1swXSAhPSAweEI4KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IGJlIHJlYWRpbmcgdGhlIGJ5dGVzIG9uZS1ieS1vbmUgaW5zdGVhZCBvZiBkb2luZyBhbgotICAg
IC8vIHVuYWxpZ25lZCByZWFkPwotICAgIHN5c0NhbGxJRCA9ICpyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkKj4ocFByb2MgKyAxKTsKLQotICAgIERXT1JEIGZsT2xkUHJvdGVjdDsKLSAgICBpZiAo
IVZpcnR1YWxQcm90ZWN0KHBQcm9jLCA1LCBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFLCAmZmxPbGRQ
cm90ZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcFByb2NbMF0gPSAweEU5OwotICAgICpy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ocFByb2MgKyAxKSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHBOZXdQcm9jKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBQcm9jICsg
NSk7Ci0KLSAgICBwUHJvYyArPSA1OwotI2Vsc2UKLSAgICAvKiBEaXNhc3NlbWJseSBvZiBCZWdp
blBhaW50KCkKLSAgICAwMDAwMDAwMDc3OUZDNUIwIDRDIDhCIEQxICAgICAgICAgbW92ICAgICAg
ICAgcjEwLHJjeAotICAgIDAwMDAwMDAwNzc5RkM1QjMgQjggMTcgMTAgMDAgMDAgICBtb3YgICAg
ICAgICBlYXgsMTAxN2gKLSAgICAwMDAwMDAwMDc3OUZDNUI4IDBGIDA1ICAgICAgICAgICAgc3lz
Y2FsbAotICAgIDAwMDAwMDAwNzc5RkM1QkEgQzMgICAgICAgICAgICAgICByZXQKLSAgICAwMDAw
MDAwMDc3OUZDNUJCIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVCQyA5
MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QkQgOTAgICAgICAgICAgICAg
ICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUJFIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAw
MDAwMDA3NzlGQzVCRiA5MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QzAg
OTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUMxIDkwICAgICAgICAgICAg
ICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVDMiA5MCAgICAgICAgICAgICAgIG5vcAotICAgIDAw
MDAwMDAwNzc5RkM1QzMgOTAgICAgICAgICAgICAgICBub3AKLSAgICAqLwotICAgIC8vIENoZWNr
IGZvciB0aGUgc2lnbmF0dXJlIGFzIGluIHRoZSBhYm92ZSBkaXNhc3NlbWJseQotICAgIERXT1JE
IGd1YXJkID0gMHhCOEQxOEI0QzsKLSAgICBpZiAoKnJlaW50ZXJwcmV0X2Nhc3Q8RFdPUkQqPihw
UHJvYykgIT0gZ3VhcmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIERXT1JEIGZsT2xkUHJvdGVj
dDsKLSAgICBWaXJ0dWFsUHJvdGVjdChwUHJvYywgMTIsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUs
ICYgZmxPbGRQcm90ZWN0KTsKLSAgICBwUHJvY1swXSA9IDB4NDg7ICAgIC8vIG1vdiByYXgsIHRo
aXMKLSAgICBwUHJvY1sxXSA9IDB4Yjg7Ci0gICAgKihfX2ludDY0KikocFByb2MrMikgPSAoX19p
bnQ2NClwTmV3UHJvYzsKLSAgICBwUHJvY1sxMF0gPSAweGZmOyAgIC8vIGptcCByYXgKLSAgICBw
UHJvY1sxMV0gPSAweGUwOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHNldFVwT2Zmc2NyZWVu
UGFpbnRpbmdIb29rcyhIREMgKFdJTkFQSSpob29rZWRCZWdpblBhaW50KShIV05ELCBQQUlOVFNU
UlVDVCopLCBCT09MIChXSU5BUEkqaG9va2VkRW5kUGFpbnQpKEhXTkQsIGNvbnN0IFBBSU5UU1RS
VUNUKikpCi17Ci0gICAgc3RhdGljIGJvb2wgaGF2ZUhvb2tlZCA9IGZhbHNlOwotICAgIGlmICho
YXZlSG9va2VkKQotICAgICAgICByZXR1cm47Ci0gICAgaGF2ZUhvb2tlZCA9IHRydWU7Ci0KLSAg
ICAvLyBNb3N0IChhbGw/KSB3aW5kb3dlZCBwbHVnaW5zIGRvbid0IHNlZW0gdG8gcmVzcG9uZCB0
byBXTV9QUklOVENMSUVOVCwgc28KLSAgICAvLyB3ZSBob29rIGludG8gQmVnaW5QYWludC9FbmRQ
YWludCB0byBhbGxvdyB0aGVpciBub3JtYWwgV01fUEFJTlQgaGFuZGxpbmcKLSAgICAvLyB0byBk
cmF3IGludG8gYSBnaXZlbiBIREMuIE5vdGUgdGhhdCB0aGlzIGhvb2tpbmcgYWZmZWN0cyB0aGUg
ZW50aXJlCi0gICAgLy8gcHJvY2Vzcy4KLSAgICBob29rKCJ1c2VyMzIuZGxsIiwgIkJlZ2luUGFp
bnQiLCBiZWdpblBhaW50U3lzQ2FsbCwgYmVnaW5QYWludCwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihob29rZWRCZWdpblBhaW50KSkp
OwotICAgIGhvb2soInVzZXIzMi5kbGwiLCAiRW5kUGFpbnQiLCBlbmRQYWludFN5c0NhbGwsIGVu
ZFBhaW50LCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxw
dHJkaWZmX3Q+KGhvb2tlZEVuZFBhaW50KSkpOwotCi19Ci0KLXN0YXRpYyBib29sIHJlZ2lzdGVy
UGx1Z2luVmlldygpCi17Ci0gICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFz
cyA9IGZhbHNlOwotICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwotCi0j
aWYgUExBVEZPUk0oR1RLKQotICAgIFdlYkNvcmU6OnNldEluc3RhbmNlSGFuZGxlKChISU5TVEFO
Q0UpKEdldE1vZHVsZUhhbmRsZSgwKSkpOwotI2VuZGlmCi0KLSAgICBBU1NFUlQoV2ViQ29yZTo6
aW5zdGFuY2VIYW5kbGUoKSk7Ci0KLSAgICBXTkRDTEFTU0VYIHdjZXg7Ci0gICAgd2NleC5jYlNp
emUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0gICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7Ci0g
ICAgd2NleC5zdHlsZSAgICAgICAgICA9IENTX0RCTENMS1M7Ci0gICAgd2NleC5scGZuV25kUHJv
YyAgICA9IERlZldpbmRvd1Byb2M7Ci0gICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAg
d2NleC5jYlduZEV4dHJhICAgICA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IFdlYkNv
cmU6Omluc3RhbmNlSGFuZGxlKCk7Ci0gICAgd2NleC5oSWNvbiAgICAgICAgICA9IDA7Ci0gICAg
d2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4
LmhickJhY2tncm91bmQgID0gKEhCUlVTSClDT0xPUl9XSU5ET1c7Ci0gICAgd2NleC5scHN6TWVu
dU5hbWUgICA9IDA7Ci0gICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IGtXZWJQbHVnaW5WaWV3ZG93
Q2xhc3NOYW1lOwotCi0gICAgcmV0dXJuICEhUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKLX0KLQot
TFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3OjpQbHVnaW5WaWV3V25kUHJvYyhIV05EIGhXbmQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBQbHVn
aW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5WaWV3Kj4oR2V0UHJv
cChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7Ci0KLSAgICByZXR1cm4gcGx1Z2luVmll
dy0+d25kUHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShVSU5UIG1lc3NhZ2UpCi17Ci0gICAgc3dp
dGNoIChtZXNzYWdlKSB7Ci0gICAgICAgIGNhc2UgV01fTEJVVFRPTlVQOgotICAgICAgICBjYXNl
IFdNX01CVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgIGNhc2Ug
V01fS0VZVVA6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50UG9p
bnQgY29udGVudHNUb05hdGl2ZVdpbmRvdyhGcmFtZVZpZXcqIHZpZXcsIGNvbnN0IEludFBvaW50
JiBwb2ludCkKLXsKLSAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhwb2ludCk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgSW50UmVjdCBjb250ZW50c1RvTmF0aXZlV2luZG93KEZyYW1lVmll
dyogdmlldywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gdmlldy0+Y29udGVu
dHNUb1dpbmRvdyhyZWN0KTsKLX0KLQotTFJFU1VMVAotUGx1Z2luVmlldzo6d25kUHJvYyhIV05E
IGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAg
ICAvLyA8cmRhcjovLzU3MTExMzY+IFNvbWV0aW1lcyBGbGFzaCB3aWxsIGNhbGwgU2V0Q2FwdHVy
ZSBiZWZvcmUgY3JlYXRpbmcKLSAgICAvLyBhIGZ1bGwtc2NyZWVuIHdpbmRvdyBhbmQgd2lsbCBu
b3QgcmVsZWFzZSBpdCwgd2hpY2ggY2F1c2VzIHRoZQotICAgIC8vIGZ1bGwtc2NyZWVuIHdpbmRv
dyB0byBuZXZlciByZWNlaXZlIG1vdXNlIGV2ZW50cy4gV2Ugc2V0L3JlbGVhc2UgY2FwdHVyZQot
ICAgIC8vIG9uIG1vdXNlIGRvd24vdXAgYmVmb3JlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIHRoZSBw
bHVnLWluIHRvIHByZXZlbnQgdGhhdC4KLSAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSAgICAgICAg
Y2FzZSBXTV9MQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9NQlVUVE9ORE9XTjoKLSAgICAg
ICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKLSAgICAgICAgICAgIDo6U2V0Q2FwdHVyZShoV25kKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX0xCVVRUT05VUDoKLSAgICAgICAg
Y2FzZSBXTV9NQlVUVE9OVVA6Ci0gICAgICAgIGNhc2UgV01fUkJVVFRPTlVQOgotICAgICAgICAg
ICAgOjpSZWxlYXNlQ2FwdHVyZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
aWYgKG1lc3NhZ2UgPT0gbV9sYXN0TWVzc2FnZSAmJgotICAgICAgICBtX3BsdWdpbi0+cXVpcmtz
KCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vy
c2l2ZWx5KSAmJiAKLSAgICAgICAgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jKQotICAgICAgICBy
ZXR1cm4gMTsKLQotICAgIGlmIChtZXNzYWdlID09IFdNX1VTRVIgKyAxICYmCi0gICAgICAgIG1f
cGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09u
ZU1lc3NhZ2VzKSkgewotICAgICAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlcikKLSAgICAgICAg
ICAgIG1fbWVzc2FnZVRocm90dGxlciA9IGFkb3B0UHRyKG5ldyBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luKHRoaXMpKTsKLQotICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZXItPmFwcGVuZE1lc3Nh
Z2UoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBtX2xhc3RNZXNzYWdlID0gbWVzc2FnZTsKLSAgICBtX2lzQ2FsbGluZ1BsdWdp
blduZFByb2MgPSB0cnVlOwotCi0gICAgLy8gSWYgdGhlIHBsdWctaW4gZG9lc24ndCBleHBsaWNp
dGx5IHN1cHBvcnQgY2hhbmdpbmcgdGhlIHBvcC11cCBzdGF0ZSwgd2UgZW5hYmxlCi0gICAgLy8g
cG9wdXBzIGZvciBhbGwgdXNlciBnZXN0dXJlcy4KLSAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0
byBwb3AgdGhlIHN0YXRlIGluIGEgdGltZXIsIGJlY2F1c2UgdGhlIEZsYXNoIHBsdWctaW4gCi0g
ICAgLy8gcG9wcyB1cCB3aW5kb3dzIGluIHJlc3BvbnNlIHRvIGEgcG9zdGVkIG1lc3NhZ2UuCi0g
ICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT52ZXJzaW9uIDwgTlBWRVJTX0hBU19QT1BV
UFNfRU5BQkxFRF9TVEFURSAmJgotICAgICAgICBpc1dpbmRvd3NNZXNzYWdlVXNlckdlc3R1cmUo
bWVzc2FnZSkgJiYgIW1fcG9wUG9wdXBzU3RhdGVUaW1lci5pc0FjdGl2ZSgpKSB7Ci0KLSAgICAg
ICAgcHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSh0cnVlKTsKLQotICAgICAgICBtX3BvcFBvcHVwc1N0
YXRlVGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIH0KLQotICAgIGlmIChtZXNzYWdlID09IFdN
X1BSSU5UQ0xJRU5UKSB7Ci0gICAgICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMg
ZG9uJ3QgcmVzcG9uZCB0byBXTV9QUklOVENMSUVOVCwgc28gd2UKLSAgICAgICAgLy8gY2hhbmdl
IHRoZSBtZXNzYWdlIHRvIFdNX1BBSU5UIGFuZCByZWx5IG9uIG91ciBob29rZWQgdmVyc2lvbnMg
b2YKLSAgICAgICAgLy8gQmVnaW5QYWludC9FbmRQYWludCB0byBtYWtlIHRoZSBwbHVnaW4gZHJh
dyBpbnRvIHRoZSBnaXZlbiBIREMuCi0gICAgICAgIG1lc3NhZ2UgPSBXTV9QQUlOVDsKLSAgICAg
ICAgbV93bVByaW50SERDID0gcmVpbnRlcnByZXRfY2FzdDxIREM+KHdQYXJhbSk7Ci0gICAgfQot
Ci0gICAgLy8gQ2FsbCB0aGUgcGx1Zy1pbidzIHdpbmRvdyBwcm9jLgotICAgIExSRVNVTFQgcmVz
dWx0ID0gOjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblduZFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQ
YXJhbSwgbFBhcmFtKTsKLQotICAgIG1fd21QcmludEhEQyA9IDA7Ci0KLSAgICBtX2lzQ2FsbGlu
Z1BsdWdpblduZFByb2MgPSBmYWxzZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKLXsKLSAgICBpZiAoIXBhcmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IGRvd25jYXN0PEZy
YW1lVmlldz4oKnBhcmVudCgpKTsKLQotICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2lu
ZG93UmVjdDsKLSAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKLQotICAgIG1f
d2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0
KCkubG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7Ci0gICAgbV9jbGlwUmVjdCA9IHdp
bmRvd0NsaXBSZWN0KCk7Ci0gICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAt
bV93aW5kb3dSZWN0LnkoKSk7Ci0KLSAgICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSAmJiAo
IW1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQgfHwgbV93aW5kb3dSZWN0ICE9IG9sZFdpbmRvd1Jl
Y3QgfHwgbV9jbGlwUmVjdCAhPSBvbGRDbGlwUmVjdCkpIHsKLQotICAgICAgICBzZXRDYWxsaW5n
UGx1Z2luKHRydWUpOwotCi0gICAgICAgIC8vIFRvIHByZXZlbnQgZmxhc2hlcyB3aGlsZSBzY3Jv
bGxpbmcsIHdlIGRpc2FibGUgZHJhd2luZyBkdXJpbmcgdGhlIHdpbmRvdwotICAgICAgICAvLyB1
cGRhdGUgcHJvY2VzcyBieSBjbGlwcGluZyB0aGUgd2luZG93IHRvIHRoZSB6ZXJvIHJlY3QuCi0K
LSAgICAgICAgYm9vbCBjbGlwVG9aZXJvUmVjdCA9ICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVuU2Nyb2xsaW5nKTsKLQotICAgICAg
ICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsKLSAgICAgICAgICAgIGF1dG8gcmduID0gYWRvcHRHRElP
YmplY3QoOjpDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDApKTsKLSAgICAgICAgICAgIDo6U2V0V2lu
ZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCksIEZBTFNFKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gcmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVh
dGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhY
KCksIG1fY2xpcFJlY3QubWF4WSgpKSk7Ci0gICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLCByZ24ubGVhaygpLCBUUlVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCB8fCBtX3dpbmRvd1JlY3QgIT0gb2xk
V2luZG93UmVjdCkKLSAgICAgICAgICAgIDo6TW92ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lk
dGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLCBUUlVFKTsKLQotICAgICAgICBpZiAoY2xpcFRv
WmVyb1JlY3QpIHsKLSAgICAgICAgICAgIGF1dG8gcmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVh
dGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhY
KCksIG1fY2xpcFJlY3QubWF4WSgpKSk7Ci0gICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLCByZ24ubGVhaygpLCBUUlVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotCi0gICAgICAgIG1faGF2ZVVwZGF0ZWRQbHVn
aW5XaWRnZXQgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhi
b29sIGZvY3VzZWQpCi17Ci0gICAgaWYgKGZvY3VzZWQgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSkKLSAgICAgICAgU2V0Rm9jdXMocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0KLSAgICBXaWRn
ZXQ6OnNldEZvY3VzKGZvY3VzZWQpOwotCi0gICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lzV2luZG93
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLQotICAgIG5wRXZl
bnQuZXZlbnQgPSBmb2N1c2VkID8gV01fU0VURk9DVVMgOiBXTV9LSUxMRk9DVVM7Ci0gICAgbnBF
dmVudC53UGFyYW0gPSAwOwotICAgIG5wRXZlbnQubFBhcmFtID0gMDsKLQotICAgIGRpc3BhdGNo
TlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzaG93KCkKLXsKLSAgICBz
ZXRTZWxmVmlzaWJsZSh0cnVlKTsKLQotICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCksIFNXX1NIT1dOQSk7Ci0KLSAgICBXaWRnZXQ6OnNob3coKTsKLX0KLQotdm9pZCBQbHVn
aW5WaWV3OjpoaWRlKCkKLXsKLSAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7Ci0KLSAgICBpZiAo
aXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKLSAgICAgICAgU2hv
d1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19ISURFKTsKLQotICAgIFdpZGdldDo6
aGlkZSgpOwotfQotCi1ib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBu
cEV2ZW50KQotewotICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGJvb2wgc2hvdWxkUG9wID0gZmFsc2U7Ci0KLSAgICBp
ZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQU19F
TkFCTEVEX1NUQVRFICYmIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShucEV2ZW50LmV2ZW50
KSkgewotICAgICAgICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRydWUpOwotICAgICAgICBzaG91
bGRQb3AgPSB0cnVlOwotICAgIH0KLQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsKLSAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7Ci0KLSAgICBpZiAoc2hvdWxkUG9wKSAKLSAgICAgICAgcG9wUG9wdXBzRW5hYmxlZFN0YXRl
KCk7Ci0KLSAgICByZXR1cm4gYWNjZXB0ZWQ7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGFpbnRJ
bnRvVHJhbnNmb3JtZWRDb250ZXh0KEhEQyBoZGMpCi17Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkg
ewotICAgICAgICBTZW5kTWVzc2FnZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBXTV9QUklOVENM
SUVOVCwgcmVpbnRlcnByZXRfY2FzdDxXUEFSQU0+KGhkYyksIFBSRl9DTElFTlQgfCBQUkZfQ0hJ
TERSRU4gfCBQUkZfT1dORUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9ucFdp
bmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0gICAgbV9ucFdpbmRvdy53aW5kb3cg
PSBoZGM7Ci0KLSAgICBXSU5ET1dQT1Mgd2luZG93cG9zID0geyAwLCAwLCAwLCAwLCAwLCAwLCAw
IH07Ci0KLSAgICBJbnRSZWN0IHIgPSBjb250ZW50c1RvTmF0aXZlV2luZG93KGRvd25jYXN0PEZy
YW1lVmlldz4ocGFyZW50KCkpLCBmcmFtZVJlY3QoKSk7Ci0KLSAgICB3aW5kb3dwb3MueCA9IHIu
eCgpOwotICAgIHdpbmRvd3Bvcy55ID0gci55KCk7Ci0gICAgd2luZG93cG9zLmN4ID0gci53aWR0
aCgpOwotICAgIHdpbmRvd3Bvcy5jeSA9IHIuaGVpZ2h0KCk7Ci0KLSAgICBOUEV2ZW50IG5wRXZl
bnQ7Ci0gICAgbnBFdmVudC5ldmVudCA9IFdNX1dJTkRPV1BPU0NIQU5HRUQ7Ci0gICAgbnBFdmVu
dC5sUGFyYW0gPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oJndpbmRvd3Bvcyk7Ci0gICAg
bnBFdmVudC53UGFyYW0gPSAwOwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotCi0g
ICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKLQotICAgIG5wRXZlbnQuZXZlbnQgPSBX
TV9QQUlOVDsKLSAgICBucEV2ZW50LndQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihoZGMpOwotCi0gICAgLy8gVGhpcyBpcyBzdXBwb3NlZCB0byBiZSBhIHBvaW50ZXIgdG8gdGhl
IGRpcnR5IHJlY3QsIGJ1dCBpdCBzZWVtcyB0aGF0IHRoZSBGbGFzaCBwbHVnaW4KLSAgICAvLyBp
Z25vcmVzIGl0IHNvIHdlIGp1c3QgcGFzcyBudWxsLgotICAgIG5wRXZlbnQubFBhcmFtID0gMDsK
LQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpw
YWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotI2lmICFVU0UoV0lOR0RJKQotICAgIEFTU0VSVChtX2lz
V2luZG93ZWQpOwotICAgIEFTU0VSVChjb250ZXh0LT5zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dz
KCkpOwotCi0gICAgSW50UG9pbnQgbG9jYXRpb25JbldpbmRvdyA9IGRvd25jYXN0PEZyYW1lVmll
dz4oKnBhcmVudCgpKS5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0
aW9uKCkpOwotCi0gICAgTG9jYWxXaW5kb3dzQ29udGV4dCB3aW5kb3dzQ29udGV4dChjb250ZXh0
LCBmcmFtZVJlY3QoKSwgZmFsc2UpOwotCi0jaWYgVVNFKENBSVJPKQotICAgIC8vIE11c3QgZmx1
c2ggZHJhd2luZ3MgdXAgdG8gdGhpcyBwb2ludCB0byB0aGUgYmFja2luZyBtZXRhZmlsZSwgb3Ro
ZXJ3aXNlIHRoZQotICAgIC8vIHBsdWdpbiByZWdpb24gd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRo
IGFueSBjbGVhciByZWdpb25zIHNwZWNpZmllZCBpbiB0aGUKLSAgICAvLyBjYWlyby1jb250cm9s
bGVkIHBvcnRpb25zIG9mIHRoZSByZW5kZXJpbmcuCi0gICAgY2Fpcm9fc2hvd19wYWdlKGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLSNlbmRpZgotCi0gICAgSERDIGhkYyA9IHdp
bmRvd3NDb250ZXh0LmhkYygpOwotICAgIFhGT1JNIG9yaWdpbmFsVHJhbnNmb3JtOwotICAgIEdl
dFdvcmxkVHJhbnNmb3JtKGhkYywgJm9yaWdpbmFsVHJhbnNmb3JtKTsKLQotICAgIC8vIFRoZSBw
bHVnaW4gZXhwZWN0cyB0aGUgREMgdG8gYmUgaW4gY2xpZW50IGNvb3JkaW5hdGVzLCBzbyB3ZSB0
cmFuc2xhdGUKLSAgICAvLyB0aGUgREMgdG8gbWFrZSB0aGF0IHNvLgotICAgIEFmZmluZVRyYW5z
Zm9ybSBjdG0gPSBjb250ZXh0LT5nZXRDVE0oKTsKLSAgICBjdG0udHJhbnNsYXRlKGxvY2F0aW9u
SW5XaW5kb3cueCgpLCBsb2NhdGlvbkluV2luZG93LnkoKSk7Ci0gICAgWEZPUk0gdHJhbnNmb3Jt
ID0gc3RhdGljX2Nhc3Q8WEZPUk0+KGN0bS50b1RyYW5zZm9ybWF0aW9uTWF0cml4KCkpOwotCi0g
ICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmdHJhbnNmb3JtKTsKLQotICAgIHBhaW50SW50b1Ry
YW5zZm9ybWVkQ29udGV4dChoZGMpOwotCi0gICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmb3Jp
Z2luYWxUcmFuc2Zvcm0pOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICgh
bV9pc1N0YXJ0ZWQpIHsKLSAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFn
ZQotICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBjYWxsZWQgU2V0
V2luZG93IGJlZm9yZSB3ZSB0cnkgdG8gcGFpbnQuCi0gICAgaWYgKCFtX2hhdmVDYWxsZWRTZXRX
aW5kb3cpCi0gICAgICAgIHNldE5QV2luZG93UmVjdChmcmFtZVJlY3QoKSk7Ci0KLSAgICBpZiAo
bV9pc1dpbmRvd2VkKSB7Ci0jaWYgIVVTRShXSU5HREkpCi0gICAgICAgIGlmIChjb250ZXh0LT5z
aG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkpCi0gICAgICAgICAgICBwYWludFdpbmRvd2VkUGx1
Z2luSW50b0NvbnRleHQoY29udGV4dCwgcmVjdCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIEluIHRoZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGRyYXcgaW4gYW4gb2Zm
c2NyZWVuIGJ1ZmZlciBhbmQgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIHdpbmRvdwotICAgIC8vIGNv
b3JkaW5hdGVzLgotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBJbnRSZWN0IHJlY3RJbldpbmRvdyhy
ZWN0KTsKLSAgICByZWN0SW5XaW5kb3cuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKLSNlbHNlCi0g
ICAgSW50UmVjdCByZWN0SW5XaW5kb3cgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSku
Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSk7Ci0jZW5kaWYKLSAgICBMb2NhbFdpbmRvd3ND
b250ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQsIHJlY3RJbldpbmRvdywgbV9pc1RyYW5zcGFy
ZW50KTsKLQotICAgIC8vIE9uIFNhZmFyaS9XaW5kb3dzIHdpdGhvdXQgdHJhbnNwYXJlbmN5IGxh
eWVycyB0aGUgR3JhcGhpY3NDb250ZXh0IHJldHVybnMgdGhlIEhEQwotICAgIC8vIG9mIHRoZSB3
aW5kb3cgYW5kIHRoZSBwbHVnaW4gZXhwZWN0cyB0aGF0IHRoZSBwYXNzZWQgaW4gREMgaGFzIHdp
bmRvdyBjb29yZGluYXRlcy4KLSAgICAvLyBJbiB0aGUgR1RLIGFuZCBRdCBwb3J0cyB3ZSBhbHdh
eXMgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCB0aGVyZWZvcmUgbmVlZAotICAgIC8v
IHRvIHByZXNlcnZlIHRoZSB0cmFuc2xhdGlvbiBzZXQgaW4gZ2V0V2luZG93c0NvbnRleHQuCi0j
aWYgIVBMQVRGT1JNKEdUSykKLSAgICBpZiAoIWNvbnRleHQtPmlzSW5UcmFuc3BhcmVuY3lMYXll
cigpKSB7Ci0gICAgICAgIFhGT1JNIHRyYW5zZm9ybTsKLSAgICAgICAgR2V0V29ybGRUcmFuc2Zv
cm0od2luZG93c0NvbnRleHQuaGRjKCksICZ0cmFuc2Zvcm0pOwotICAgICAgICB0cmFuc2Zvcm0u
ZUR4ID0gMDsKLSAgICAgICAgdHJhbnNmb3JtLmVEeSA9IDA7Ci0gICAgICAgIFNldFdvcmxkVHJh
bnNmb3JtKHdpbmRvd3NDb250ZXh0LmhkYygpLCAmdHJhbnNmb3JtKTsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dCh3aW5kb3dzQ29udGV4dC5oZGMoKSk7
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
KiBldmVudCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW4gJiYgIW1faXNXaW5kb3dlZCk7Ci0KLSAg
ICBOUEV2ZW50IG5wRXZlbnQ7Ci0KLSAgICBucEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2Rl
KCk7Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50
KSB7Ci0gICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlET1dOOwotICAgICAgICBucEV2ZW50
LmxQYXJhbSA9IDA7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXlwcmVzc0V2ZW50KSB7Ci0gICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9DSEFSOwotICAg
ICAgICBucEV2ZW50LmxQYXJhbSA9IDA7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7Ci0gICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9L
RVlVUDsKLSAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAweDgwMDA7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgaWYgKGRpc3BhdGNoTlBFdmVudChu
cEV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLWV4dGVy
biBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91
c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW4gJiYgIW1f
aXNXaW5kb3dlZCk7Ci0KLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0KLSAgICBJbnRQb2ludCBwID0g
Y29udGVudHNUb05hdGl2ZVdpbmRvdyhkb3duY2FzdDxGcmFtZVZpZXc+KHBhcmVudCgpKSwgSW50
UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7Ci0KLSAgICBucEV2ZW50LmxQ
YXJhbSA9IE1BS0VMUEFSQU0ocC54KCksIHAueSgpKTsKLSAgICBucEV2ZW50LndQYXJhbSA9IDA7
Ci0KLSAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKLSAgICAgICAgbnBFdmVudC53UGFyYW0gfD0g
TUtfQ09OVFJPTDsKLSAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCi0gICAgICAgIG5wRXZlbnQu
d1BhcmFtIHw9IE1LX1NISUZUOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlbW92ZUV2ZW50IHx8Ci0gICAgICAgIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlb3V0RXZlbnQgfHwgCi0gICAgICAgIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlb3ZlckV2ZW50KSB7Ci0gICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NT1VTRU1P
VkU7Ci0gICAgICAgIGlmIChldmVudC0+YnV0dG9uRG93bigpKQotICAgICAgICAgICAgc3dpdGNo
IChldmVudC0+YnV0dG9uKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIExlZnRCdXR0b246Ci0g
ICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX0xCVVRUT047Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgTWlkZGxlQnV0dG9uOgot
ICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19NQlVUVE9OOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFJpZ2h0QnV0dG9uOgot
ICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19SQlVUVE9OOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewotICAgICAgICBmb2N1
c1BsdWdpbkVsZW1lbnQoKTsKLSAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKLSAg
ICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJV
VFRPTkRPV047Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0g
ICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01CVVRUT05ET1dOOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIG5wRXZl
bnQuZXZlbnQgPSBXTV9SQlVUVE9ORE9XTjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1
cEV2ZW50KSB7Ci0gICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7Ci0gICAgICAgICAg
ICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAg
ICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTlVQOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBX
TV9SQlVUVE9OVVA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICAvLyBGSVhNRTogQ29u
c2lkZXIgYmFjayBwb3J0aW5nIHRoZSBodHRwOi8vd2Via2l0Lm9yZy9iLzU4MTA4IGZpeCBoZXJl
LgotICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCi0gICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOwotCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAvLyBDdXJyZW50bHks
IFdpZGdldDo6c2V0Q3Vyc29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBp
biBFdmVudEhhbmRsZXIuY3BwCi0gICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3
ZSBzZXQgaWdub3JlTmV4dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0Lgot
ICAgIGlnbm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOwotICAgIGlmIChQYWdlKiBwYWdlID0gbV9w
YXJlbnRGcmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5zZXRM
YXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQotewotICAgIFdpZGdldDo6c2V0UGFy
ZW50KHBhcmVudCk7Ci0KLSAgICBpZiAocGFyZW50KQotICAgICAgICBpbml0KCk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGlmICghcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAvLyBJZiB0aGUgcGx1Zy1pbiB3aW5kb3cgb3Igb25lIG9mIGl0cyBj
aGlsZHJlbiBoYXZlIHRoZSBmb2N1cywgd2UgbmVlZCB0byAKLSAgICAgICAgLy8gY2xlYXIgaXQg
dG8gcHJldmVudCB0aGUgd2ViIHZpZXcgd2luZG93IGZyb20gYmVpbmcgZm9jdXNlZCBiZWNhdXNl
IHRoYXQgY2FuCi0gICAgICAgIC8vIHRyaWdnZXIgYSBsYXlvdXQgd2hpbGUgdGhlIHBsdWdpbiBl
bGVtZW50IGlzIGJlaW5nIGRldGFjaGVkLgotICAgICAgICBIV05EIGZvY3VzZWRXaW5kb3cgPSA6
OkdldEZvY3VzKCk7Ci0gICAgICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09IGZvY3Vz
ZWRXaW5kb3cgfHwgOjpJc0NoaWxkKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIGZvY3VzZWRXaW5k
b3cpKQotICAgICAgICAgICAgOjpTZXRGb2N1cygwKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKGlzUGFyZW50
VmlzaWJsZSgpID09IHZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdpZGdldDo6c2V0
UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKLQotICAgIGlmIChpc1NlbGZWaXNpYmxlKCkgJiYgcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSkgewotICAgICAgICBpZiAodmlzaWJsZSkKLSAgICAgICAgICAg
IFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1dfU0hPV05BKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgU2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19I
SURFKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSW4gdGhlIEdUSyBwb3J0IHdlIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZl
ciBhbmQgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIHdpbmRvdwotICAgIC8vIGNvb3JkaW5hdGVzLgot
IyBpZiBQTEFURk9STShHVEspCi0gICAgSW50UG9pbnQgcCA9IHJlY3QubG9jYXRpb24oKTsKLSMg
ZWxzZQotICAgIEludFBvaW50IHAgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29u
dGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOwotIyBlbmRpZgotICAgIG1fbnBXaW5kb3cu
eCA9IHAueCgpOwotICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOwotCi0gICAgbV9ucFdpbmRvdy53
aWR0aCA9IHJlY3Qud2lkdGgoKTsKLSAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0
KCk7Ci0KLSAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOwotICAg
IG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKLSAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmxlZnQgPSAwOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsK
LQotICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7Ci0gICAgICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgICAgIG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cp
OwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLQotICAgICAgICBtX2hhdmVDYWxs
ZWRTZXRXaW5kb3cgPSB0cnVlOwotCi0gICAgICAgIGlmICghbV9pc1dpbmRvd2VkKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsK
LQotICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9u
Z1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MpOwotICAgICAgICBpZiAo
Y3VycmVudFduZFByb2MgIT0gUGx1Z2luVmlld1duZFByb2MpCi0gICAgICAgICAgICBtX3BsdWdp
blduZFByb2MgPSAoV05EUFJPQylTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRSKVBsdWdpblZpZXdXbmRQcm9jKTsKLSAgICB9Ci19
Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYg
YnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKLXsKLSAgICBTdHJpbmcgZmls
ZW5hbWUoYnVmLCBsZW4pOwotCi0gICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8v
IikpCi0gICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOwotCi0gICAgLy8g
R2V0IGZpbGUgaW5mbwotICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cnM7Ci0gICAg
aWYgKEdldEZpbGVBdHRyaWJ1dGVzRXhXKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCkuZGF0YSgpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRycykgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgaWYgKGF0dHJzLmR3Rmls
ZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCi0gICAgICAgIHJldHVybiBO
UEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIEhBTkRMRSBmaWxlSGFuZGxlID0gQ3JlYXRlRmls
ZVcoZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEZJTEVf
UkVBRF9EQVRBLCBGSUxFX1NIQVJFX1JFQUQsIDAsIE9QRU5fRVhJU1RJTkcsIDAsIDApOwotICAg
IAotICAgIGlmIChmaWxlSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICBy
ZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBidWZmZXIucmVzaXplKGF0dHJzLm5G
aWxlU2l6ZUxvdyk7Ci0KLSAgICBEV09SRCBieXRlc1JlYWQ7Ci0gICAgaW50IHJldHZhbCA9IFJl
YWRGaWxlKGZpbGVIYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGF0dHJzLm5GaWxlU2l6ZUxvdywgJmJ5
dGVzUmVhZCwgMCk7Ci0KLSAgICBDbG9zZUhhbmRsZShmaWxlSGFuZGxlKTsKLQotICAgIGlmIChy
ZXR2YWwgPT0gMCB8fCBieXRlc1JlYWQgIT0gYXR0cnMubkZpbGVTaXplTG93KQotICAgICAgICBy
ZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7
Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJs
ZSwgdm9pZCosIE5QRXJyb3IqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1
ZSwgTlBFcnJvciogcmVzdWx0KQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICAgICAg
Y2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKLSAgICAgICAgICAgIEhXTkQqIHcgPSByZWludGVy
cHJldF9jYXN0PEhXTkQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAqdyA9IHdpbmRvd0hhbmRsZUZv
clBhZ2VDbGllbnQocGFyZW50KCkgPyBwYXJlbnQoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBh
Z2VDbGllbnQoKSA6IDApOwotICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE5QTlZT
dXBwb3J0c1dpbmRvd2xlc3M6IHsKLSAgICAgICAgICAgIE5QQm9vbCogZmxhZyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8TlBCb29sKj4odmFsdWUpOwotICAgICAgICAgICAgKmZsYWcgPSBUUlVFOwotICAg
ICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIFJFQ1QgaW52YWxpZFJl
Y3QgPSB7IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIH07Ci0g
ICAgICAgIDo6SW52YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRS
ZWN0LCBmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnZhbGlkYXRlV2lu
ZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0
ZVJlY3QoTlBSZWN0KiByZWN0KQotewotICAgIGlmICghcmVjdCkgewotICAgICAgICBpbnZhbGlk
YXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IHIocmVjdC0+bGVm
dCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJl
Y3QtPnRvcCk7Ci0KLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIFJFQ1QgaW52YWxp
ZFJlY3QgPSB7IHIueCgpLCByLnkoKSwgci5tYXhYKCksIHIubWF4WSgpIH07Ci0gICAgICAgIElu
dmFsaWRhdGVSZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICZpbnZhbGlkUmVjdCwgRkFMU0Up
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMo
UGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpKSB7Ci0gICAgICAgICAgICBtX2ludmFsaWRS
ZWN0cy5hcHBlbmQocik7Ci0gICAgICAgICAgICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgICAgICAgICAgbV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAu
MDAxKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpbnZhbGlkYXRlUmVjdChyKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdp
b24pCi17Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUkVD
VCByOwotCi0gICAgaWYgKEdldFJnbkJveChyZWdpb24sICZyKSA9PSAwKSB7Ci0gICAgICAgIGlu
dmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEludFJlY3QgcmVjdChJ
bnRQb2ludChyLmxlZnQsIHIudG9wKSwgSW50U2l6ZShyLnJpZ2h0LXIubGVmdCwgci5ib3R0b20t
ci50b3ApKTsKLSAgICBpbnZhbGlkYXRlUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
Ojpmb3JjZVJlZHJhdygpCi17Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgOjpVcGRh
dGVXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICA6OlVw
ZGF0ZVdpbmRvdyh3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KHBhcmVudCgpID8gcGFyZW50KCkt
Pmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkgOiAwKSk7Ci19Ci0KLWJvb2wgUGx1
Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKLQot
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgcmVnaXN0ZXJQbHVnaW5WaWV3KCk7Ci0g
ICAgICAgIHNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyhob29rZWRCZWdpblBhaW50LCBob29r
ZWRFbmRQYWludCk7Ci0KLSAgICAgICAgRFdPUkQgZmxhZ3MgPSBXU19DSElMRDsKLSAgICAgICAg
aWYgKGlzU2VsZlZpc2libGUoKSkKLSAgICAgICAgICAgIGZsYWdzIHw9IFdTX1ZJU0lCTEU7Ci0K
LSAgICAgICAgSFdORCBwYXJlbnRXaW5kb3dIYW5kbGUgPSB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xp
ZW50KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSk7Ci0gICAgICAgIEhXTkQgd2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2ViUGx1
Z2luVmlld2Rvd0NsYXNzTmFtZSwgMCwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBwYXJlbnRXaW5kb3dIYW5kbGUsIDAsIFdlYkNvcmU6
Omluc3RhbmNlSGFuZGxlKCksIDApOwotCi0jaWYgT1MoV0lORE9XUykgJiYgUExBVEZPUk0oR1RL
KQotICAgICAgICBtX3dpbmRvdyA9IHdpbmRvdzsKLSNlbHNlCi0gICAgICAgIHNldFBsYXRmb3Jt
V2lkZ2V0KHdpbmRvdyk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBDYWxsaW5nIFNldFdpbmRvd0xv
bmdQdHJBIGhlcmUgbWFrZXMgdGhlIHdpbmRvdyBwcm9jIEFTQ0lJLCB3aGljaCBpcyByZXF1aXJl
ZCBieSBhdCBsZWFzdAotICAgICAgICAvLyB0aGUgU2hvY2t3YXZlIERpcmVjdG9yIHBsdWctaW4u
Ci0jaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgOjpTZXRXaW5kb3dMb25n
UHRyQShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MsIChMT05HX1BUUilEZWZX
aW5kb3dQcm9jQSk7Ci0jZWxzZQotICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHJBKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9DLCAoTE9ORylEZWZXaW5kb3dQcm9jQSk7Ci0jZW5k
aWYKLSAgICAgICAgU2V0UHJvcChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBrV2ViUGx1Z2luVmll
d1Byb3BlcnR5LCB0aGlzKTsKLQotICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5
cGVXaW5kb3c7Ci0gICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gcGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5
cGVEcmF3YWJsZTsKLSAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOwotICAgIH0KLQotICAg
IHVwZGF0ZVBsdWdpbldpZGdldCgpOwotCi0gICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCkuY29u
dGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCi0gICAgICAgIHNldE5Q
V2luZG93UmVjdChmcmFtZVJlY3QoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQ
bHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQotewotICAgIGlmICghcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGVzdHJveVdpbmRvdyhwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKTsKLSAgICBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldCgwKTsKLX0KLQotUGFz
c1JlZlB0cjxJbWFnZT4gUGx1Z2luVmlldzo6c25hcHNob3QoKQotewotI2lmICFQTEFURk9STShH
VEspICYmICFVU0UoV0lOR0RJKQotICAgIGF1dG8gaGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVh
dGVDb21wYXRpYmxlREMoMCkpOwotCi0gICAgaWYgKCFtX2lzV2luZG93ZWQpIHsKLSAgICAgICAg
Ly8gRW5hYmxlIHdvcmxkIHRyYW5zZm9ybXMuCi0gICAgICAgIFNldEdyYXBoaWNzTW9kZShoZGMu
Z2V0KCksIEdNX0FEVkFOQ0VEKTsKLQotICAgICAgICBYRk9STSB0cmFuc2Zvcm07Ci0gICAgICAg
IEdldFdvcmxkVHJhbnNmb3JtKGhkYy5nZXQoKSwgJnRyYW5zZm9ybSk7Ci0KLSAgICAgICAgLy8g
V2luZG93bGVzcyBwbHVnLWlucyBhc3N1bWUgdGhhdCB0aGV5J3JlIGRyYXdpbmcgb250byB0aGUg
dmlldydzIERDLgotICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIGNvbnRleHQgc28gdGhhdCB0aGUg
cGx1Zy1pbiBkcmF3cyBhdCAoMCwgMCkuCi0gICAgICAgIEludFBvaW50IHBvc2l0aW9uID0gZG93
bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkp
LmxvY2F0aW9uKCk7Ci0gICAgICAgIHRyYW5zZm9ybS5lRHggPSAtcG9zaXRpb24ueCgpOwotICAg
ICAgICB0cmFuc2Zvcm0uZUR5ID0gLXBvc2l0aW9uLnkoKTsKLSAgICAgICAgU2V0V29ybGRUcmFu
c2Zvcm0oaGRjLmdldCgpLCAmdHJhbnNmb3JtKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBiaXRzOwot
ICAgIEJpdG1hcEluZm8gYm1wID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoZnJhbWVSZWN0
KCkuc2l6ZSgpKTsKLSAgICBhdXRvIGhibXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNl
Y3Rpb24oMCwgJmJtcCwgRElCX1JHQl9DT0xPUlMsICZiaXRzLCAwLCAwKSk7Ci0KLSAgICBIQklU
TUFQIGhibXBPbGQgPSBzdGF0aWNfY2FzdDxIQklUTUFQPihTZWxlY3RPYmplY3QoaGRjLmdldCgp
LCBoYm1wLmdldCgpKSk7Ci0KLSAgICBwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoaGRjLmdl
dCgpKTsKLQotICAgIFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXBPbGQpOwotCi0gICAgcmV0
dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoaGJtcC5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiAw
OwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qIGIvU291cmNlL1dl
YktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2oKaW5kZXggZmY3NTBiYzNh
M2EyOTI1MDUxZjE4NDY1NThjMTA4ZjZhM2MwOGRmOC4uYjAyODA1MDU5Zjg0OGQ4MWM3MDE1NGFh
NTgzZTUyMTg4Y2ViYjM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJv
ai9XZWJLaXQvV2ViS2l0LnZjeHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJv
ai9XZWJLaXQvV2ViS2l0LnZjeHByb2oKQEAgLTI5NCw2ICsyOTQsMTYgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViRGF0YWJhc2VQcm92aWRlci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYlN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxjZlxXZWJDb3Jl
U3VwcG9ydFxXZWJJbnNwZWN0b3JDbGllbnRDRi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xucGFwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EZWJ1Zy5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblN0cmVh
bS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVn
aW5WaWV3LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5z
XFBsdWdpbkRhdGFiYXNlV2luLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u
XHdpblxQbHVnaW5zXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luUGFja2FnZVdpbi5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5WaWV3V2lu
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlQmFz
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZURv
Y3VtZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3Np
YmxlSW1hZ2UuY3BwIiAvPgpAQCAtNDM2LDYgKzQ0NiwxNCBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlVHJhY2tlckNsaWVudC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxXZWJEYXRhYmFzZVByb3ZpZGVyLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYlN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNc
UGx1Z2luRGF0YWJhc2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxQ
bHVnaW5zXFBsdWdpbkRlYnVnLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3
aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5RdWlya1NldC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyYXRlZ3kuaCIgLz4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblN0cmVhbS5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luVmlldy5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2li
bGVCYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJs
ZURvY3VtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNz
aWJsZUltYWdlLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4
cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2ouZmlsdGVycwppbmRleCAwOTRmNjBhOWIxOTExN2Uz
ZDE4ZmU1ZTdiOWM5NTA2NzhlMjhjNDM0Li5lZDMxOGRiYjk2YzBjZTY1ZTFiZTIxMDk3NjVjMTYz
MWI3ZDI2YjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHBy
b2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMKQEAgLTIxNyw2ICsyMTcsMzYgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxXZWJTZXJpYWxpemVkSlNWYWx1ZS5jcHAi
PgogICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xucGFwaS5jcHAiPgorICAgICAg
PEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5jcHAiPgorICAgICAg
PEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EZWJ1Zy5jcHAiPgorICAgICAgPEZp
bHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlLmNwcCI+CisgICAgICA8Rmls
dGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblN0cmVhbS5jcHAiPgorICAgICAgPEZpbHRl
cj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5WaWV3LmNwcCI+CisgICAgICA8RmlsdGVyPlNv
dXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRhdGFiYXNlV2luLmNwcCI+CisgICAgICA8RmlsdGVy
PlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luUGFja2FnZVdpbi5jcHAiPgor
ICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5WaWV3V2luLmNwcCI+Cisg
ICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZUFyZWFJbXBsLmNwcCI+CiAgICAg
ICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTU1OCw2ICs1
ODgsMjcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxXZWJDb3JlU3VwcG9y
dFxBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oIj4KICAgICAgIDxGaWx0ZXI+V2ViQ29y
ZVN1cHBvcnQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmgiPgorICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRlYnVnLmgiPgorICAgICAgPEZpbHRlcj5I
ZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuaCI+CisgICAgICA8RmlsdGVy
PkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luUXVpcmtTZXQuaCI+CisgICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFtLmgiPgorICAgICAgPEZp
bHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXcuaCI+CisgICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5o
Ij4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5o
Ij4KICAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbSBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGFpbnRIb29rcy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTUwODgxMzU2
YTBkZGNkNzgzMDcyODExZTlmMTVhMTE1OTRiMTg1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGFpbnRIb29rcy5hc20KQEAgLTAsMCArMSw1MCBAQAorOy8q
Cis7ICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKzsKKzsgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworOyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKzsgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorOworOyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzsgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKzsgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKzsgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKzsgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKzsgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCis7Ki8KKworO0hEQyBfX3N0ZGNhbGwgX0hCZWdp
blBhaW50KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVDVCBscFBhaW50KTsKKworUFVCTElDICBfSEJl
Z2luUGFpbnQKKworX1RFWFQgICBTRUdNRU5UCisKK19IQmVnaW5QYWludCBQUk9DCisgICAgIG1v
diAgcjEwLHJjeAorICAgICBtb3YgIGVheCwxMDE3aAorICAgICBzeXNjYWxsCisgICAgIHJldAor
X0hCZWdpblBhaW50IEVORFAKKworX1RFWFQgICBFTkRTCisKKztCT09MIF9fc3RkY2FsbCBfSEVu
ZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpOworCitQVUJMSUMg
IF9IRW5kUGFpbnQKKworX1RFWFQgICBTRUdNRU5UCisKK19IRW5kUGFpbnQgUFJPQworICAgIG1v
diAgcjEwLHJjeAorICAgIG1vdiAgZWF4LDEwMTloCisgICAgc3lzY2FsbAorICAgIHJldAorX0hF
bmRQYWludCBFTkRQCisKK19URVhUICAgRU5EUworCitFTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC93aW4v
UGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmJhMmNlZTJkYTcyY2FmMTRi
NzVjZjM2ZmFhZDE0Yjc1ZTU3NDg1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsNjc3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisjaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IFBsdWdpblBhY2thZ2VCeU5hbWVNYXA7CisKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorc3RhdGljIGNvbnN0IHNp
emVfdCBtYXhpbXVtUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVTaXplID0gMzI3Njg7CisK
K3N0YXRpYyBib29sIGdQZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUlzRW5hYmxlZDsKKwor
U3RyaW5nJiBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVBhdGgoKQoreworICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGNhY2hlUGF0aCwgKCkpOworICAgIHJl
dHVybiBjYWNoZVBhdGg7Cit9CisjZW5kaWYKKworUGx1Z2luRGF0YWJhc2U6OlBsdWdpbkRhdGFi
YXNlKCkKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgIDog
bV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkKGZhbHNlKQorI2VuZGlmCit7Cit9CisK
K1BsdWdpbkRhdGFiYXNlKiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucyhib29sIHBv
cHVsYXRlKQoreworICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZSogcGx1Z2lucyA9IDA7CisKKyAg
ICBpZiAoIXBsdWdpbnMpIHsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZTsK
KworICAgICAgICBpZiAocG9wdWxhdGUpIHsKKyAgICAgICAgICAgIHBsdWdpbnMtPnNldFBsdWdp
bkRpcmVjdG9yaWVzKFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMoKSk7
CisgICAgICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gcGx1Z2luczsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJl
Z2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5
cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gTm8g
cGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hp
bmcgYWdhaW4KKyAgICByZXR1cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMu
Y29udGFpbnMobWltZVR5cGUpKTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRkRXh0cmFQ
bHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCit7CisgICAgbV9wbHVnaW5E
aXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2Jvb2wg
UGx1Z2luRGF0YWJhc2U6OnJlZnJlc2goKQoreworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
TUVUQURBVEFfQ0FDSEUpCisgICAgaWYgKCFtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2Fk
ZWQpCisgICAgICAgIGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworI2VuZGlmCisgICAg
Ym9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAgICBpZiAoIW1fcGx1Z2lucy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZDsKKyAgICAgICAgZ2V0
RGVsZXRlZFBsdWdpbnMocGx1Z2luc1RvVW5sb2FkKTsKKworICAgICAgICAvLyBVbmxvYWQgcGx1
Z2lucworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBsdWdpbnNUb1Vu
bG9hZC5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cGx1Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHJl
bW92ZShpdC0+Z2V0KCkpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1Z2luc1Rv
VW5sb2FkLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBIYXNoU2V0PFN0cmluZz4gcGF0aHM7Cisg
ICAgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKHBhdGhzKTsKKworICAgIEhhc2hNYXA8U3Ry
aW5nLCB0aW1lX3Q+IHBhdGhzV2l0aFRpbWVzOworCisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgc2tp
cCB1bmNoYW5nZWQgZmlsZXMgaWYgd2UgZGlkbid0IHJlbW92ZSBhbnkgcGx1Z2lucyBhYm92ZS4g
SWYgd2UgZGlkIHJlbW92ZQorICAgIC8vIGFueSBwbHVnaW5zLCB3ZSBuZWVkIHRvIGxvb2sgYXQg
ZXZlcnkgcGx1Z2luIGZpbGUgc28gdGhhdCwgZS5nLiwgaWYgdGhlIHVzZXIgaGFzIHR3byB2ZXJz
aW9ucworICAgIC8vIG9mIFJlYWxQbGF5ZXIgaW5zdGFsbGVkIGFuZCBqdXN0IHJlbW92ZWQgdGhl
IG5ld2VyIG9uZSwgd2UnbGwgcGljayB1cCB0aGUgb2xkZXIgb25lLgorICAgIGJvb2wgc2hvdWxk
U2tpcFVuY2hhbmdlZEZpbGVzID0gIXBsdWdpblNldENoYW5nZWQ7CisKKyAgICBIYXNoU2V0PFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhdGhzRW5kID0gcGF0aHMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGF0aHMuYmVnaW4oKTsgaXQgIT0g
cGF0aHNFbmQ7ICsraXQpIHsKKyAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZDsKKyAgICAgICAg
aWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZSgqaXQsIGxhc3RNb2RpZmllZCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBwYXRoc1dpdGhUaW1lcy5hZGQoKml0LCBsYXN0TW9k
aWZpZWQpOworCisgICAgICAgIC8vIElmIHRoZSBwYXRoJ3MgdGltZXN0YW1wIGhhc24ndCBjaGFu
Z2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgcmFuIHJlZnJlc2goKSwgd2UgZG9uJ3QgaGF2ZSB0
byBkbyBhbnl0aGluZy4KKyAgICAgICAgaWYgKHNob3VsZFNraXBVbmNoYW5nZWRGaWxlcyAmJiBt
X3BsdWdpblBhdGhzV2l0aFRpbWVzLmdldCgqaXQpID09IGxhc3RNb2RpZmllZCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChSZWZQdHI8UGx1Z2luUGFja2FnZT4gb2xkUGFj
a2FnZSA9IG1fcGx1Z2luc0J5UGF0aC5nZXQoKml0KSkgeworICAgICAgICAgICAgQVNTRVJUKCFz
aG91bGRTa2lwVW5jaGFuZ2VkRmlsZXMgfHwgb2xkUGFja2FnZS0+bGFzdE1vZGlmaWVkKCkgIT0g
bGFzdE1vZGlmaWVkKTsKKyAgICAgICAgICAgIHJlbW92ZShvbGRQYWNrYWdlLmdldCgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gUGx1Z2lu
UGFja2FnZTo6Y3JlYXRlUGFja2FnZSgqaXQsIGxhc3RNb2RpZmllZCk7CisgICAgICAgIGlmIChw
YWNrYWdlICYmIGFkZChwYWNrYWdlLnJlbGVhc2UoKSkpCisgICAgICAgICAgICBwbHVnaW5TZXRD
aGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDYWNoZSBhbGwgdGhlIHBhdGhzIHdlIGZv
dW5kIHdpdGggdGhlaXIgdGltZXN0YW1wcyBmb3IgbmV4dCB0aW1lLgorICAgIHBhdGhzV2l0aFRp
bWVzLnN3YXAobV9wbHVnaW5QYXRoc1dpdGhUaW1lcyk7CisKKyAgICBpZiAoIXBsdWdpblNldENo
YW5nZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fTUVUQURBVEFfQ0FDSEUpCisgICAgdXBkYXRlUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsK
KyNlbmRpZgorCisgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7CisKKyAgICAvLyBS
ZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8v
IEdldCBNSU1FIHR5cGVzCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgbWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7CisgICAg
ICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQp
LT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKKyAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBt
YXBfZW5kOyArK21hcF9pdCkKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQo
bWFwX2l0LT5rZXkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitWZWN0b3I8UGx1
Z2luUGFja2FnZSo+IFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5zKCkgY29uc3QKK3sKKyAgICBWZWN0
b3I8UGx1Z2luUGFja2FnZSo+IHJlc3VsdDsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoKCppdCkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50
IFBsdWdpbkRhdGFiYXNlOjpwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0IHZvaWQqIGEsIGNv
bnN0IHZvaWQqIGIpCit7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luQSA9ICpzdGF0aWNfY2Fz
dDxQbHVnaW5QYWNrYWdlKiBjb25zdCo+KGEpOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbkIg
PSAqc3RhdGljX2Nhc3Q8UGx1Z2luUGFja2FnZSogY29uc3QqPihiKTsKKworICAgIHJldHVybiBw
bHVnaW5BLT5jb21wYXJlKCpwbHVnaW5CKTsKK30KKworUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0
YWJhc2U6OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAg
aWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcg
a2V5ID0gbWltZVR5cGUubG93ZXIoKTsKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQbHVnaW4g
PSBtX3ByZWZlcnJlZFBsdWdpbnMuZ2V0KGtleSk7CisgICAgaWYgKHByZWZlcnJlZFBsdWdpbgor
ICAgICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPmlzRW5hYmxlZCgpCisgICAgICAgICYmIHByZWZl
cnJlZFBsdWdpbi0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkgeworICAgICAg
ICByZXR1cm4gcHJlZmVycmVkUGx1Z2luOworICAgIH0KKworICAgIFZlY3RvcjxQbHVnaW5QYWNr
YWdlKiwgMj4gcGx1Z2luQ2hvaWNlczsKKworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
UGx1Z2luUGFja2FnZSogcGx1Z2luID0gKCppdCkuZ2V0KCk7CisKKyAgICAgICAgaWYgKCFwbHVn
aW4tPmlzRW5hYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHBs
dWdpbi0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkgeworI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAgICAgICBpZiAoIXBsdWdpbi0+
ZW5zdXJlUGx1Z2luTG9hZGVkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYK
KyAgICAgICAgICAgIHBsdWdpbkNob2ljZXMuYXBwZW5kKHBsdWdpbik7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAocGx1Z2luQ2hvaWNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcXNvcnQocGx1Z2luQ2hvaWNlcy5kYXRhKCksIHBsdWdpbkNob2ljZXMuc2l6ZSgp
LCBzaXplb2YoUGx1Z2luUGFja2FnZSopLCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2lu
Q29tcGFyZSk7CisKKyAgICByZXR1cm4gcGx1Z2luQ2hvaWNlc1swXTsKK30KKworU3RyaW5nIFBs
dWdpbkRhdGFiYXNlOjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lv
bikgY29uc3QKK3sKKyAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdp
bnMuZW5kKCk7CisgICAgU3RyaW5nIG1pbWVUeXBlOworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdl
KiwgMj4gcGx1Z2luQ2hvaWNlczsKKyAgICBIYXNoTWFwPFBsdWdpblBhY2thZ2UqLCBTdHJpbmc+
IG1pbWVUeXBlRm9yUGx1Z2luOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAo
ISgqaXQpLT5pc0VuYWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIE1J
TUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVU
b0V4dGVuc2lvbnMoKS5lbmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2lu
KCk7IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAgICAgICAgbWltZVR5
cGUgPSBtaW1lX2l0LT5rZXk7CisgICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQ
bHVnaW4gPSBtX3ByZWZlcnJlZFBsdWdpbnMuZ2V0KG1pbWVUeXBlKTsKKyAgICAgICAgICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+dmFsdWU7CisgICAgICAg
ICAgICBib29sIGZvdW5kTWFwcGluZyA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgeworICAgICAg
ICAgICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAocHJlZmVycmVkUGx1Z2luICYmIFBsdWdpblBhY2thZ2U6OmVx
dWFsKCpwbHVnaW4sICpwcmVmZXJyZWRQbHVnaW4pKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1pbWVUeXBlOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9D
QUNIRSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBsdWdpbkxvYWRl
ZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICAgICAgcGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1Z2luKTsKKyAgICAgICAgICAgICAg
ICAgICAgbWltZVR5cGVGb3JQbHVnaW4uYWRkKHBsdWdpbiwgbWltZVR5cGUpOworICAgICAgICAg
ICAgICAgICAgICBmb3VuZE1hcHBpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZm91
bmRNYXBwaW5nKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHBsdWdpbkNob2ljZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKKyAgICBxc29ydChwbHVnaW5DaG9pY2VzLmRhdGEoKSwgcGx1Z2luQ2hvaWNlcy5zaXplKCks
IHNpemVvZihQbHVnaW5QYWNrYWdlKiksIFBsdWdpbkRhdGFiYXNlOjpwcmVmZXJyZWRQbHVnaW5D
b21wYXJlKTsKKworICAgIHJldHVybiBtaW1lVHlwZUZvclBsdWdpbi5nZXQocGx1Z2luQ2hvaWNl
c1swXSk7Cit9CisKK1BsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNv
bnN0IFVSTCYgdXJsLCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmICghbWltZVR5cGUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAg
IAorICAgIFN0cmluZyBmaWxlbmFtZSA9IHVybC5sYXN0UGF0aENvbXBvbmVudCgpOworICAgIGlm
IChmaWxlbmFtZS5lbmRzV2l0aCgnLycpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBp
bnQgZXh0ZW5zaW9uUG9zID0gZmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBpZiAoZXh0
ZW5zaW9uUG9zID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBTdHJpbmcgbWlt
ZVR5cGVGb3JFeHRlbnNpb24gPSBNSU1FVHlwZUZvckV4dGVuc2lvbihmaWxlbmFtZS5zdWJzdHJp
bmcoZXh0ZW5zaW9uUG9zICsgMSkpOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IHBsdWdp
bkZvck1JTUVUeXBlKG1pbWVUeXBlRm9yRXh0ZW5zaW9uKTsKKyAgICBpZiAoIXBsdWdpbikgewor
ICAgICAgICAvLyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBXaW5k
b3dzIGZvciB0aGUgbWltZSB0eXBlCisgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4
dGVuc2lvbi4KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIG1pbWVUeXBlID0g
bWltZVR5cGVGb3JFeHRlbnNpb247CisgICAgcmV0dXJuIHBsdWdpbjsKK30KKwordm9pZCBQbHVn
aW5EYXRhYmFzZTo6c2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luKQoreworICAgIGlmICghcGx1Z2luIHx8IHBs
dWdpbi0+bWltZVRvRXh0ZW5zaW9ucygpLmNvbnRhaW5zKG1pbWVUeXBlKSkKKyAgICAgICAgbV9w
cmVmZXJyZWRQbHVnaW5zLnNldChtaW1lVHlwZS5sb3dlcigpLCBwbHVnaW4pOworfQorCitib29s
IFBsdWdpbkRhdGFiYXNlOjpmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZChjb25zdCBTdHJpbmcm
IGZpbGVQYXRoKSBjb25zdAoreworICAgIC8vIFNraXAgcGx1Z2luIGZpbGVzIHRoYXQgYXJlIGRp
c2FibGVkIGJ5IGZpbGVuYW1lLgorICAgIGlmIChtX2Rpc2FibGVkUGx1Z2luRmlsZXMuY29udGFp
bnMocGF0aEdldEZpbGVOYW1lKGZpbGVQYXRoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiBmaWxlRXhpc3RzKGZpbGVQYXRoKTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFz
ZTo6Z2V0RGVsZXRlZFBsdWdpbnMoUGx1Z2luU2V0JiBwbHVnaW5zKSBjb25zdAoreworICAgIFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCFmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZCgoKml0
KS0+cGF0aCgpKSkKKyAgICAgICAgICAgIHBsdWdpbnMuYWRkKCppdCk7CisgICAgfQorfQorCiti
b29sIFBsdWdpbkRhdGFiYXNlOjphZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBwcnBQYWNr
YWdlKQoreworICAgIEFTU0VSVF9BUkcocHJwUGFja2FnZSwgcHJwUGFja2FnZSk7CisKKyAgICBS
ZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IHBycFBhY2thZ2U7CisKKyAgICBpZiAoIW1f
cGx1Z2lucy5hZGQocGFja2FnZSkuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgbV9wbHVnaW5zQnlQYXRoLmFkZChwYWNrYWdlLT5wYXRoKCksIHBhY2thZ2UpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpyZW1vdmUoUGx1Z2luUGFj
a2FnZSogcGFja2FnZSkKK3sKKyAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOworICAgIE1JTUVUb0V4
dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lv
bnMoKS5lbmQoKTsKKyAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBQbHVn
aW5QYWNrYWdlQnlOYW1lTWFwOjppdGVyYXRvciBwYWNrYWdlSW5NYXAgPSBtX3ByZWZlcnJlZFBs
dWdpbnMuZmluZChpdC0+a2V5KTsKKyAgICAgICAgaWYgKHBhY2thZ2VJbk1hcCAhPSBtX3ByZWZl
cnJlZFBsdWdpbnMuZW5kKCkgJiYgcGFja2FnZUluTWFwLT52YWx1ZSA9PSBwYWNrYWdlKQorICAg
ICAgICAgICAgbV9wcmVmZXJyZWRQbHVnaW5zLnJlbW92ZShwYWNrYWdlSW5NYXApOworICAgIH0K
KworICAgIG1fcGx1Z2lucy5yZW1vdmUocGFja2FnZSk7CisgICAgbV9wbHVnaW5zQnlQYXRoLnJl
bW92ZShwYWNrYWdlLT5wYXRoKCkpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpjbGVhcigp
Cit7CisgICAgbV9wbHVnaW5zLmNsZWFyKCk7CisgICAgbV9wbHVnaW5zQnlQYXRoLmNsZWFyKCk7
CisgICAgbV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5jbGVhcigpOworICAgIG1fcmVnaXN0ZXJlZE1J
TUVUeXBlcy5jbGVhcigpOworICAgIG1fcHJlZmVycmVkUGx1Z2lucy5jbGVhcigpOworI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgbV9wZXJzaXN0ZW50TWV0
YWRhdGFDYWNoZUlzTG9hZGVkID0gZmFsc2U7CisjZW5kaWYKK30KKworYm9vbCBQbHVnaW5EYXRh
YmFzZTo6cmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7
CisgICAgcmV0dXJuIG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5yZW1vdmUoZmlsZU5hbWUpOworfQor
Citib29sIFBsdWdpbkRhdGFiYXNlOjphZGREaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSkKK3sKKyAgICByZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLmFkZChmaWxl
TmFtZSkuaXNOZXdFbnRyeTsKK30KKworI2lmICghT1MoV0lORE9XUykgfHwgIUVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKSkKKy8vIEZvciBTYWZhcmkvV2luIHRoZSBmb2xsb3dpbmcgdGhyZWUg
bWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQKKy8vIGluIFBsdWdpbkRhdGFiYXNlV2luLmNwcCwgYnV0
IGlmIHdlIGNhbiB1c2UgV2ViQ29yZSBjb25zdHJ1Y3RzCisvLyBmb3IgdGhlIGxvZ2ljIHdlIHNo
b3VsZCBwZXJoYXBzIG1vdmUgaXQgaGVyZSB1bmRlciBYUF9XSU4/CisKK1ZlY3RvcjxTdHJpbmc+
IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMoKQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IHBhdGhzOworCisgICAgLy8gQWRkIHBhdGhzIHNwZWNpZmljIHRvIGVhY2ggcGxh
dGZvcm0KKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgU3RyaW5nIHVzZXJQbHVnaW5QYXRoID0g
aG9tZURpcmVjdG9yeVBhdGgoKTsKKyAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCIv
Lm1vemlsbGEvcGx1Z2lucyIpKTsKKyAgICBwYXRocy5hcHBlbmQodXNlclBsdWdpblBhdGgpOwor
CisgICAgdXNlclBsdWdpblBhdGggPSBob21lRGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVn
aW5QYXRoLmFwcGVuZChTdHJpbmcoIi8ubmV0c2NhcGUvcGx1Z2lucyIpKTsKKyAgICBwYXRocy5h
cHBlbmQodXNlclBsdWdpblBhdGgpOworCisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9icm93
c2VyL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbG9jYWwvbGliL21vemlsbGEv
cGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvZmlyZWZveC9wbHVnaW5zIik7
CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L2Jyb3dzZXItcGx1Z2lucyIpOworICAgIHBh
dGhzLmFwcGVuZCgiL3Vzci9saWIvYnJvd3Nlci1wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5k
KCIvdXNyL2xpYi9tb3ppbGxhL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbG9j
YWwvbmV0c2NhcGUvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL29wdC9tb3ppbGxhL3Bs
dWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi9vcHQvbW96aWxsYS9saWIvcGx1Z2lucyIpOwor
ICAgIHBhdGhzLmFwcGVuZCgiL29wdC9uZXRzY2FwZS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBw
ZW5kKCIvb3B0L25ldHNjYXBlL2NvbW11bmljYXRvci9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBw
ZW5kKCIvdXNyL2xpYi9uZXRzY2FwZS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNy
L2xpYi9uZXRzY2FwZS9wbHVnaW5zLWxpYmM1Iik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xp
Yi9uZXRzY2FwZS9wbHVnaW5zLWxpYmM2Iik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0
L25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvbW96aWxs
YS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9uc2Jyb3dzZXIvcGx1Z2lu
cyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9uc2Jyb3dzZXIvcGx1Z2lucyIpOwor
CisgICAgU3RyaW5nIG1vekhvbWUoZ2V0ZW52KCJNT1pJTExBX0hPTUUiKSk7CisgICAgbW96SG9t
ZS5hcHBlbmQoIi9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKG1vekhvbWUpOworCisgICAg
VmVjdG9yPFN0cmluZz4gbW96UGF0aHM7CisgICAgU3RyaW5nIG1velBhdGgoZ2V0ZW52KCJNT1pf
UExVR0lOX1BBVEgiKSk7CisgICAgbW96UGF0aC5zcGxpdChVQ2hhcignOicpLCAvKiBhbGxvd0Vt
cHR5RW50cmllcyAqLyBmYWxzZSwgbW96UGF0aHMpOworICAgIHBhdGhzLmFwcGVuZFZlY3Rvciht
b3pQYXRocyk7CisjZWxpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICBTdHJpbmcgdXNlclBsdWdp
blBhdGggPSBob21lRGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChT
dHJpbmcoIi9MaWJyYXJ5L0ludGVybmV0IFBsdWctSW5zIikpOworICAgIHBhdGhzLmFwcGVuZCh1
c2VyUGx1Z2luUGF0aCk7CisgICAgcGF0aHMuYXBwZW5kKCIvTGlicmFyeS9JbnRlcm5ldCBQbHVn
LUlucyIpOworI2VsaWYgZGVmaW5lZChYUF9XSU4pCisgICAgU3RyaW5nIHVzZXJQbHVnaW5QYXRo
ID0gaG9tZURpcmVjdG9yeVBhdGgoKTsKKyAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQoU3RyaW5n
KCJcXEFwcGxpY2F0aW9uIERhdGFcXE1vemlsbGFcXHBsdWdpbnMiKSk7CisgICAgcGF0aHMuYXBw
ZW5kKHVzZXJQbHVnaW5QYXRoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHBhdGhzOworfQorCiti
b29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJp
bmcmIHBhdGgpCit7CisgICAgU3RyaW5nIHByZWZlcnJlZFBhdGggPSBob21lRGlyZWN0b3J5UGF0
aCgpOworCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIHByZWZlcnJlZFBhdGguYXBwZW5kKFN0
cmluZygiLy5tb3ppbGxhL3BsdWdpbnMiKSk7CisjZWxpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAg
ICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJpbmcoIi9MaWJyYXJ5L0ludGVybmV0IFBsdWctSW5z
IikpOworI2VsaWYgZGVmaW5lZChYUF9XSU4pCisgICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3Ry
aW5nKCJcXEFwcGxpY2F0aW9uIERhdGFcXE1vemlsbGFcXHBsdWdpbnMiKSk7CisjZW5kaWYKKwor
ICAgIC8vIFRPRE86IFdlIHNob3VsZCBub3JtYWxpemUgdGhlIHBhdGggYmVmb3JlIGRvaW5nIGEg
Y29tcGFyaXNvbi4KKyAgICByZXR1cm4gcGF0aCA9PSBwcmVmZXJyZWRQYXRoOworfQorCit2b2lk
IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJp
bmc+JiBwYXRocykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNl
IGluc2Vuc2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwor
CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIFN0cmluZyBmaWxlTmFtZUZpbHRlcigiKi5zbyIp
OworI2Vsc2UKKyAgICBTdHJpbmcgZmlsZU5hbWVGaWx0ZXIoIiIpOworI2VuZGlmCisKKyAgICBW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZGlyc0VuZCA9IG1fcGx1Z2luRGlyZWN0b3Jp
ZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZEl0ID0g
bV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdpbigpOyBkSXQgIT0gZGlyc0VuZDsgKytkSXQpIHsKKyAg
ICAgICAgVmVjdG9yPFN0cmluZz4gcGx1Z2luUGF0aHMgPSBsaXN0RGlyZWN0b3J5KCpkSXQsIGZp
bGVOYW1lRmlsdGVyKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBs
dWdpbnNFbmQgPSBwbHVnaW5QYXRocy5lbmQoKTsKKyAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgcEl0ID0gcGx1Z2luUGF0aHMuYmVnaW4oKTsgcEl0ICE9IHBsdWdp
bnNFbmQ7ICsrcEl0KSB7CisgICAgICAgICAgICBpZiAoIWZpbGVFeGlzdHNBbmRJc05vdERpc2Fi
bGVkKCpwSXQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBwYXRo
cy5hZGQoKnBJdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNlbmRpZiAvLyAhT1MoV0lORE9X
UykKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisKK3N0YXRp
YyB2b2lkIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGZp
bGUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHNpemVfdCBidWZmZXJTaXplID0gMDsK
KyAgICBzaXplX3QgYnVmZmVyQ2FwYWNpdHkgPSAxMDI0OworICAgIGJ1ZmZlci5yZXNpemUoYnVm
ZmVyQ2FwYWNpdHkpOworCisgICAgZG8geworICAgICAgICBidWZmZXJTaXplICs9IHJlYWRGcm9t
RmlsZShmaWxlLCBidWZmZXIuZGF0YSgpICsgYnVmZmVyU2l6ZSwgYnVmZmVyQ2FwYWNpdHkgLSBi
dWZmZXJTaXplKTsKKyAgICAgICAgaWYgKGJ1ZmZlclNpemUgPT0gYnVmZmVyQ2FwYWNpdHkpIHsK
KyAgICAgICAgICAgIGlmIChidWZmZXJDYXBhY2l0eSA8IG1heGltdW1QZXJzaXN0ZW50UGx1Z2lu
TWV0YWRhdGFDYWNoZVNpemUpIHsKKyAgICAgICAgICAgICAgICBidWZmZXJDYXBhY2l0eSAqPSAy
OworICAgICAgICAgICAgICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZmZXIuY2xlYXIoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfSB3aGlsZSAodHJ1ZSk7CisKKyAgICBidWZmZXIuc2hyaW5rKGJ1ZmZl
clNpemUpOworfQorCitzdGF0aWMgYm9vbCByZWFkVVRGOFN0cmluZyhTdHJpbmcmIHJlc3VsdFN0
cmluZywgY2hhciomIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQpCit7CisgICAgaWYgKHN0YXJ0ID49
IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGxlbiA9IHN0cmxlbihzdGFy
dCk7CisgICAgcmVzdWx0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChzdGFydCwgbGVuKTsKKyAg
ICBzdGFydCArPSBsZW4gKyAxOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29s
IHJlYWRUaW1lKHRpbWVfdCYgcmVzdWx0VGltZSwgY2hhciomIHN0YXJ0LCBjb25zdCBjaGFyKiBl
bmQpCit7CisgICAgaWYgKHN0YXJ0ICsgc2l6ZW9mKHRpbWVfdCkgPj0gZW5kKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGUgc3RyZWFtIGlzIG5vdCBuZWNlc3NhcnkgYWxpZ25l
ZC4KKyAgICBtZW1jcHkoJnJlc3VsdFRpbWUsIHN0YXJ0LCBzaXplb2YodGltZV90KSk7CisgICAg
c3RhcnQgKz0gc2l6ZW9mKHRpbWVfdCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj
IGNvbnN0IGNoYXIgc2NoZW1hVmVyc2lvbiA9ICcxJzsKK3N0YXRpYyBjb25zdCBjaGFyIHBlcnNp
c3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmlsZW5hbWVbXSA9ICJQbHVnaW5NZXRhZGF0YUNhY2hl
LmJpbiI7CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNo
ZSgpCit7CisgICAgaWYgKCFpc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpIHx8IHBl
cnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGU7CisgICAgU3RyaW5nIGFic29sdXRlQ2FjaGVQ
YXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aCgpLCBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lKTsKKyAgICBmaWxlID0g
b3BlbkZpbGUoYWJzb2x1dGVDYWNoZVBhdGgsIE9wZW5Gb3JSZWFkKTsKKworICAgIGlmICghaXNI
YW5kbGVWYWxpZChmaWxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFyayBjYWNoZSBh
cyBsb2FkZWQgcmVnYXJkbGVzcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmUuIElmCisgICAgLy8gdGhl
cmUncyBlcnJvciBpbiB0aGUgY2FjaGUsIHdlIHdvbid0IHRyeSB0byBsb2FkIGl0IGFueW1vcmUu
CisgICAgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkID0gdHJ1ZTsKKworICAgIFZl
Y3RvcjxjaGFyPiBmaWxlQ29udGVudHM7CisgICAgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmls
ZShmaWxlLCBmaWxlQ29udGVudHMpOworICAgIGNsb3NlRmlsZShmaWxlKTsKKworICAgIGlmIChm
aWxlQ29udGVudHMuc2l6ZSgpIDwgMiB8fCBmaWxlQ29udGVudHMuZmlyc3QoKSAhPSBzY2hlbWFW
ZXJzaW9uIHx8IGZpbGVDb250ZW50cy5sYXN0KCkgIT0gJ1wwJykgeworICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byByZWFkIHBsdWdpbiBtZXRhZGF0YSBjYWNoZTogY29ycnVwdCBzY2hlbWEi
KTsKKyAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjaGFyKiBidWZmZXJQb3MgPSBmaWxlQ29udGVudHMuZGF0YSgpICsg
MTsKKyAgICBjaGFyKiBlbmQgPSBmaWxlQ29udGVudHMuZGF0YSgpICsgZmlsZUNvbnRlbnRzLnNp
emUoKTsKKworICAgIFBsdWdpblNldCBjYWNoZWRQbHVnaW5zOworICAgIEhhc2hNYXA8U3RyaW5n
LCB0aW1lX3Q+IGNhY2hlZFBsdWdpblBhdGhzV2l0aFRpbWVzOworICAgIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBjYWNoZWRQbHVnaW5zQnlQYXRoOworCisgICAgd2hp
bGUgKGJ1ZmZlclBvcyA8IGVuZCkgeworICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAgICAgdGlt
ZV90IGxhc3RNb2RpZmllZDsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmluZyBk
ZXNjOworICAgICAgICBTdHJpbmcgbWltZURlc2M7CisgICAgICAgIGlmICghKHJlYWRVVEY4U3Ry
aW5nKHBhdGgsIGJ1ZmZlclBvcywgZW5kKQorICAgICAgICAgICAgICAmJiByZWFkVGltZShsYXN0
TW9kaWZpZWQsIGJ1ZmZlclBvcywgZW5kKQorICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmlu
ZyhuYW1lLCBidWZmZXJQb3MsIGVuZCkKKyAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmco
ZGVzYywgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5nKG1p
bWVEZXNjLCBidWZmZXJQb3MsIGVuZCkpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byByZWFkIHBsdWdpbiBtZXRhZGF0YSBjYWNoZTogY29ycnVwdCBkYXRhIik7CisgICAgICAg
ICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFNraXAgbWV0YWRhdGEgdGhhdCBwb2ludHMgdG8gcGx1
Z2lucyBmcm9tIGRpcmVjdG9yaWVzIHRoYXQKKyAgICAgICAgLy8gYXJlIG5vdCBwYXJ0IG9mIHBs
dWdpbiBkaXJlY3RvcnkgbGlzdCBhbnltb3JlLgorICAgICAgICBTdHJpbmcgcGx1Z2luRGlyZWN0
b3J5TmFtZSA9IGRpcmVjdG9yeU5hbWUocGF0aCk7CisgICAgICAgIGlmIChtX3BsdWdpbkRpcmVj
dG9yaWVzLmZpbmQocGx1Z2luRGlyZWN0b3J5TmFtZSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdl
ID0gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZShwYXRoLCBsYXN0TW9kaWZp
ZWQsIG5hbWUsIGRlc2MsIG1pbWVEZXNjKTsKKworICAgICAgICBpZiAocGFja2FnZSAmJiBjYWNo
ZWRQbHVnaW5zLmFkZChwYWNrYWdlKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBjYWNoZWRQ
bHVnaW5QYXRoc1dpdGhUaW1lcy5hZGQocGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlLT5sYXN0TW9k
aWZpZWQoKSk7CisgICAgICAgICAgICBjYWNoZWRQbHVnaW5zQnlQYXRoLmFkZChwYWNrYWdlLT5w
YXRoKCksIHBhY2thZ2UpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wbHVnaW5zLnN3YXAo
Y2FjaGVkUGx1Z2lucyk7CisgICAgbV9wbHVnaW5zQnlQYXRoLnN3YXAoY2FjaGVkUGx1Z2luc0J5
UGF0aCk7CisgICAgbV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5zd2FwKGNhY2hlZFBsdWdpblBhdGhz
V2l0aFRpbWVzKTsKK30KKworc3RhdGljIGJvb2wgd3JpdGVVVEY4U3RyaW5nKFBsYXRmb3JtRmls
ZUhhbmRsZSBmaWxlLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBDU3RyaW5nIHV0ZjhT
dHJpbmcgPSBzdHJpbmcudXRmOCgpOworICAgIGludCBsZW5ndGggPSB1dGY4U3RyaW5nLmxlbmd0
aCgpICsgMTsKKyAgICByZXR1cm4gd3JpdGVUb0ZpbGUoZmlsZSwgdXRmOFN0cmluZy5kYXRhKCks
IGxlbmd0aCkgPT0gbGVuZ3RoOworfQorCitzdGF0aWMgYm9vbCB3cml0ZVRpbWUoUGxhdGZvcm1G
aWxlSGFuZGxlIGZpbGUsIGNvbnN0IHRpbWVfdCYgdGltZSkKK3sKKyAgICByZXR1cm4gd3JpdGVU
b0ZpbGUoZmlsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJnRpbWUpLCBzaXplb2Yo
dGltZV90KSkgPT0gc2l6ZW9mKHRpbWVfdCk7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OnVw
ZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCkKK3sKKyAgICBpZiAoIWlzUGVyc2lzdGVudE1l
dGFkYXRhQ2FjaGVFbmFibGVkKCkgfHwgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYWtlQWxsRGlyZWN0b3JpZXMocGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkpOworICAgIFN0cmluZyBhYnNvbHV0ZUNhY2hlUGF0aCA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSwg
cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZSk7CisgICAgZGVsZXRlRmlsZShh
YnNvbHV0ZUNhY2hlUGF0aCk7CisKKyAgICBpZiAobV9wbHVnaW5zLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGU7CisgICAgZmlsZSA9IG9w
ZW5GaWxlKGFic29sdXRlQ2FjaGVQYXRoLCBPcGVuRm9yV3JpdGUpOworCisgICAgaWYgKCFpc0hh
bmRsZVZhbGlkKGZpbGUpKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIG9wZW4gcGx1
Z2luIG1ldGFkYXRhIGNhY2hlIGZvciBzYXZpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNoYXIgbG9jYWxTY2hlbWFWZXJzaW9uID0gc2NoZW1hVmVyc2lvbjsKKyAgICBpZiAo
d3JpdGVUb0ZpbGUoZmlsZSwgJmxvY2FsU2NoZW1hVmVyc2lvbiwgMSkgIT0gMSkgeworICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byB3cml0ZSBwbHVnaW4gbWV0YWRhdGEgY2FjaGUgc2NoZW1h
Iik7CisgICAgICAgIGNsb3NlRmlsZShmaWxlKTsKKyAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0
ZUNhY2hlUGF0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIGlmICghKHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+cGF0aCgpKQorICAg
ICAgICAgICAgICAmJiB3cml0ZVRpbWUoZmlsZSwgKCppdCktPmxhc3RNb2RpZmllZCgpKQorICAg
ICAgICAgICAgICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPm5hbWUoKSkKKyAgICAg
ICAgICAgICAgJiYgd3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5kZXNjcmlwdGlvbigpKQor
ICAgICAgICAgICAgICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPmZ1bGxNSU1FRGVz
Y3JpcHRpb24oKSkpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB3cml0ZSBw
bHVnaW4gbWV0YWRhdGEgdG8gY2FjaGUiKTsKKyAgICAgICAgICAgIGNsb3NlRmlsZShmaWxlKTsK
KyAgICAgICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgY2xvc2VGaWxlKGZpbGUpOworfQorCiti
b29sIFBsdWdpbkRhdGFiYXNlOjppc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpCit7
CisgICAgcmV0dXJuIGdQZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUlzRW5hYmxlZDsKK30K
Kwordm9pZCBQbHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVk
KGJvb2wgaXNFbmFibGVkKQoreworICAgIGdQZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUlz
RW5hYmxlZCA9IGlzRW5hYmxlZDsKK30KKworU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZVBhdGgoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwZXJzaXN0ZW50
UGx1Z2luTWV0YWRhdGFDYWNoZVBhdGgoKTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6c2V0
UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKGNvbnN0IFN0cmluZyYgcGVyc2lzdGVudE1ldGFk
YXRhQ2FjaGVQYXRoKQoreworICAgIFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNh
Y2hlUGF0aCgpID0gcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoOworfQorI2VuZGlmCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmggYi9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZj
NDhlY2RmZjZjZjIyNDM1NTk0ZjhhZTg1MjMwMWE2MjYzY2Y4NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaApAQCAtMCwwICsxLDEx
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbHVnaW5EYXRhYmFzZV9oCisjZGVmaW5lIFBsdWdp
bkRhdGFiYXNlX2gKKworI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNs
YXNzIEludFNpemU7CisgICAgY2xhc3MgVVJMOworICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlQ2xp
ZW50OworICAgIGNsYXNzIFBsdWdpblBhY2thZ2U7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVm
UHRyPFBsdWdpblBhY2thZ2U+LCBQbHVnaW5QYWNrYWdlSGFzaCwgUGx1Z2luUGFja2FnZUhhc2hU
cmFpdHM+IFBsdWdpblNldDsKKworICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlIHsKKyAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luRGF0YWJhc2UpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFBsdWdpbkRhdGFiYXNlKCk7CisKKyAgICAgICAg
Ly8gVGhlIGZpcnN0IGNhbGwgdG8gaW5zdGFsbGVkUGx1Z2lucyBjcmVhdGVzIHRoZSBwbHVnaW4g
ZGF0YWJhc2UKKyAgICAgICAgLy8gYW5kIGJ5IGRlZmF1bHQgcG9wdWxhdGVzIGl0IHdpdGggdGhl
IHBsdWdpbnMgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uCisgICAgICAgIC8vIEZvciB0ZXN0aW5n
IHB1cnBvc2VzLCBpdCBpcyBwb3NzaWJsZSB0byBub3QgcG9wdWxhdGUgdGhlIGRhdGFiYXNlCisg
ICAgICAgIC8vIGF1dG9tYXRpY2FsbHksIGFzIHRoZSBwbHVnaW5zIG1pZ2h0IGFmZmVjdCB0aGUg
RFJUIHJlc3VsdHMgYnkKKyAgICAgICAgLy8gd3JpdGluZyB0byBhLm8uIHN0ZGVyci4KKyAgICAg
ICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBpbnN0YWxsZWRQbHVnaW5zKGJvb2wgcG9wdWxhdGUg
PSB0cnVlKTsKKworICAgICAgICBib29sIHJlZnJlc2goKTsKKyAgICAgICAgdm9pZCBjbGVhcigp
OworICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IHBsdWdpbnMoKSBjb25zdDsKKyAgICAg
ICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAg
ICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKKworICAg
ICAgICBzdGF0aWMgYm9vbCBpc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcm
IGRpcmVjdG9yeSk7CisgICAgICAgIHN0YXRpYyBpbnQgcHJlZmVycmVkUGx1Z2luQ29tcGFyZShj
b25zdCB2b2lkKiwgY29uc3Qgdm9pZCopOworCisgICAgICAgIFBsdWdpblBhY2thZ2UqIGZpbmRQ
bHVnaW4oY29uc3QgVVJMJiwgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFBsdWdpblBhY2th
Z2UqIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICB2
b2lkIHNldFByZWZlcnJlZFBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IFBsdWdpblBhY2thZ2UqIHBsdWdpbik7CisKKyAgICAgICAgdm9pZCBzZXRQbHVnaW5EaXJlY3Rv
cmllcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICBtX3BsdWdpbkRpcmVjdG9yaWVzID0gZGlyZWN0
b3JpZXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIHJlbW92ZURpc2FibGVkUGx1Z2luRmls
ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICAgICAgYm9vbCBhZGREaXNhYmxlZFBsdWdp
bkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7CisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMoKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4g
cGx1Z2luRGlyZWN0b3JpZXMoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkRpcmVjdG9yaWVzOyB9
CisKKyAgICAgICAgU3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uKSBjb25zdDsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hF
KQorICAgICAgICBzdGF0aWMgYm9vbCBpc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgp
OworICAgICAgICBzdGF0aWMgdm9pZCBzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQo
Ym9vbCBpc0VuYWJsZWQpOworICAgICAgICBzdGF0aWMgU3RyaW5nIHBlcnNpc3RlbnRNZXRhZGF0
YUNhY2hlUGF0aCgpOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRQZXJzaXN0ZW50TWV0YWRhdGFD
YWNoZVBhdGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOworI2Vu
ZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGdldFBsdWdpblBhdGhzSW5EaXJlY3Rv
cmllcyhIYXNoU2V0PFN0cmluZz4mKSBjb25zdDsKKyAgICAgICAgdm9pZCBnZXREZWxldGVkUGx1
Z2lucyhQbHVnaW5TZXQmKSBjb25zdDsKKyAgICAgICAgYm9vbCBmaWxlRXhpc3RzQW5kSXNOb3RE
aXNhYmxlZChjb25zdCBTdHJpbmcmKSBjb25zdDsKKworICAgICAgICAvLyBSZXR1cm5zIHdoZXRo
ZXIgdGhlIHBsdWdpbiB3YXMgYWN0dWFsbHkgYWRkZWQgb3Igbm90IChpdCB3b24ndCBiZSBhZGRl
ZCBpZiBpdCdzIGEgZHVwbGljYXRlIG9mIGFuIGV4aXN0aW5nIHBsdWdpbikuCisgICAgICAgIGJv
b2wgYWRkKFBhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4pOworICAgICAgICB2b2lkIHJlbW92ZShQ
bHVnaW5QYWNrYWdlKik7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNI
RSkKKyAgICAgICAgdm9pZCBsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsKKyAgICAgICAg
dm9pZCB1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworI2VuZGlmCisKKyAgICAgICAg
SGFzaFNldDxTdHJpbmc+IG1fZGlzYWJsZWRQbHVnaW5GaWxlczsKKyAgICAgICAgVmVjdG9yPFN0
cmluZz4gbV9wbHVnaW5EaXJlY3RvcmllczsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVn
aXN0ZXJlZE1JTUVUeXBlczsKKyAgICAgICAgUGx1Z2luU2V0IG1fcGx1Z2luczsKKyAgICAgICAg
SGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IG1fcGx1Z2luc0J5UGF0aDsK
KyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVfdD4gbV9wbHVnaW5QYXRoc1dpdGhUaW1lczsK
KyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IG1fcHJlZmVy
cmVkUGx1Z2luczsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQor
ICAgICAgICBib29sIG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZDsKKyNlbmRpZgor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkYzZj
ZjM0OTlmYzI5ZGU2YWM1YWVhZGIzOTI0MDQyNzFhYTBlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlV2luLmNwcApAQCAtMCwwICsx
LDM4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1v
YmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVn
aW5EYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNp
bmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luUGF0
aHNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBIYXNoU2V0PFN0cmluZz4mIHBhdGhzKQorewor
ICAgIEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4Vyhyb290S2V5
LCBMIlNvZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMs
ICZrZXkpOworCisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICByZXR1
cm47CisKKyAgICB3Y2hhcl90IG5hbWVbMTI4XTsKKyAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7
CisKKyAgICAvLyBFbnVtZXJhdGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7
CisgICAgICAgIERXT1JEIG5hbWVMZW4gPSBXVEZfQVJSQVlfTEVOR1RIKG5hbWUpOworICAgICAg
ICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAs
ICZsYXN0TW9kaWZpZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsK
KyAgICAgICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXplb2YocGF0aFN0cik7CisgICAgICAgIERX
T1JEIHR5cGU7CisKKyAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShrZXksIG5hbWUs
IEwiUGF0aCIsICZ0eXBlLCBwYXRoU3RyLCAmcGF0aFN0clNpemUpOworICAgICAgICBpZiAocmVz
dWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAhPSBSRUdfU1opCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBwYXRocy5hZGQoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8g
c2l6ZW9mKFdDSEFSKSAtIDEpKTsKKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQor
Cit2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNl
dDxTdHJpbmc+JiBwYXRocykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUg
YSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5h
bWVzOworCisgICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgV0lO
MzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7CisKKyAgICBTdHJpbmcgb2xkV01QUGx1Z2luUGF0
aDsKKyAgICBTdHJpbmcgbmV3V01QUGx1Z2luUGF0aDsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmVuZCgpOworICAgIGZvciAo
VmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQg
KyAiXFwqIjsKKworICAgICAgICBoRmluZCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksICZmaW5kRmlsZURhdGEpOworCisgICAg
ICAgIGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxl
QXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxl
RGF0YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7CisgICAgICAg
ICAgICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUu
ZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKKyAgICAgICAgICAgICAgICAoIWVxdWFsSWdub3Jp
bmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2
ZSAxMCIsIGZhbHNlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IFN0cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKKyAgICAgICAgICAgIGlm
ICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgcGF0aHMuYWRkKGZ1bGxQYXRoKTsKKworICAg
ICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnBkc3BsYXkuZGxsIikp
CisgICAgICAgICAgICAgICAgb2xkV01QUGx1Z2luUGF0aCA9IGZ1bGxQYXRoOworICAgICAgICAg
ICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucC1tc3dtcC5kbGwiKSkK
KyAgICAgICAgICAgICAgICBuZXdXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7CisKKyAgICAgICAg
fSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7CisKKyAg
ICAgICAgRmluZENsb3NlKGhGaW5kKTsKKyAgICB9CisKKyAgICBhZGRQbHVnaW5QYXRoc0Zyb21S
ZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBhdGhzKTsKKyAgICBhZGRQbHVnaW5QYXRoc0Zy
b21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGF0aHMpOworCisgICAgLy8gSWYgYm90aCB0
aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJlc2VudCBpbiB0aGUgcGx1Z2lucyBzZXQs
IAorICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBzbyB3ZSBkb24ndCBlbmQgdXAgY2hvb3Np
bmcgdGhlIG9sZCBvbmUuCisgICAgaWYgKCFvbGRXTVBQbHVnaW5QYXRoLmlzRW1wdHkoKSAmJiAh
bmV3V01QUGx1Z2luUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHBhdGhzLnJlbW92ZShvbGRXTVBQ
bHVnaW5QYXRoKTsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25T
dHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIFZlY3RvcjxpbnQ+IHZl
cnNpb247CisKKyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9z
OworICAgIAorICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsK
KyAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5s
ZW5ndGgoKTsgKytlbmRQb3MpCisgICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3Nd
ID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5z
dWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOworICAgICAgICB2
ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAgICAgICBzdGFydFBvcyA9IGVu
ZFBvcyArIDE7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247Cit9CisKKy8vIFRoaXMgcmV0
dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCitzdGF0aWMgaW5s
aW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29u
c3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXpl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodmVyc2lvbkFbaV0g
PiB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBlbHNlIGlm
ICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIg
dGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4g
ZmFsc2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3pp
bGxhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQoreworICAg
IC8vIEVudW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lz
dHJ5CisgICAgSEtFWSBrZXk7CisgICAgTE9ORyByZXN1bHQ7CisgICAgCisgICAgcmVzdWx0ID0g
UmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1vemlsbGEi
KSwgMCwgS0VZX1JFQUQsICZrZXkpOworICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykg
eworICAgICAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgICAgIEZJTEVUSU1FIGxhc3RNb2RpZmll
ZDsKKworICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5cworICAgICAgICBmb3IgKGludCBpID0g
MDs7IGkrKykgeworICAgICAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNp
emVvZihXQ0hBUik7CisgICAgICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwg
bmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOworCisgICAgICAgICAgICBp
ZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKSAr
ICJcXEV4dGVuc2lvbnMiOworICAgICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5OworCisgICAg
ICAgICAgICAvLyBUcnkgb3BlbmluZyB0aGUga2V5CisgICAgICAgICAgICByZXN1bHQgPSBSZWdP
cGVuS2V5RXgoa2V5LCBleHRlbnNpb25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLmRhdGEoKSwgMCwgS0VZX1JFQUQsICZleHRlbnNpb25zS2V5KTsKKworICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgLy8gTm93IGdl
dCB0aGUgcGx1Z2lucyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBXQ0hBUiBwbHVnaW5zRGly
ZWN0b3J5U3RyW19NQVhfUEFUSF07CisgICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc0RpcmVj
dG9yeVNpemUgPSBzaXplb2YocGx1Z2luc0RpcmVjdG9yeVN0cik7CisgICAgICAgICAgICAgICAg
RFdPUkQgdHlwZTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChl
eHRlbnNpb25zS2V5LCBURVhUKCJQbHVnaW5zIiksIDAsICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5z
RGlyZWN0b3J5U3RyLCAmcGx1Z2luc0RpcmVjdG9yeVNpemUpOworCisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAgICAgICAg
ICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBsdWdpbnNEaXJlY3RvcnlTdHIs
IHBsdWdpbnNEaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKKworICAgICAgICAg
ICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBSZWdDbG9zZUtleShrZXkpOworICAgIH0KK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeShWZWN0
b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCit7CisgICAgLy8gVGhlIG5ldyBXTVAgRmlyZWZveCBw
bHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFu
eSBGaXJlZm94IGluc3RhbGxzCisgICAgV0NIQVIgcGx1Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFU
SCArIDFdOworICAgIERXT1JEIHBsdWdpbkRpcmVjdG9yeVNpemUgPSA6OkV4cGFuZEVudmlyb25t
ZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxcUEZpbGVzXFxQbHVnaW5zIiksIHBsdWdp
bkRpcmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKTsKKwor
ICAgIGlmIChwbHVnaW5EaXJlY3RvcnlTaXplID4gMCAmJiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9
IFdURl9BUlJBWV9MRU5HVEgocGx1Z2luRGlyZWN0b3J5U3RyKSkKKyAgICAgICAgZGlyZWN0b3Jp
ZXMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUg
LSAxKSk7CisKKyAgICBEV09SRCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9y
eVN0cltfTUFYX1BBVEhdOworICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBz
aXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0g
Z2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIEwiU29mdHdhcmVcXE1pY3Jvc29m
dFxcTWVkaWFQbGF5ZXIiLCBMIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiLCAmdHlwZSwgJmluc3Rh
bGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOworCisgICAg
aWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAgICAgICBk
aXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFs
bGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBhZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4m
IGRpcmVjdG9yaWVzKQoreworICAgIEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVn
T3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3Jv
YmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJP
Ul9TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAg
RklMRVRJTUUgbGFzdE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZl
cnNpb247CisgICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOworCisgICAgLy8g
RW51bWVyYXRlIHN1YmtleXMKKyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBE
V09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVz
dWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFz
dE1vZGlmaWVkKTsKKworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBh
cnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29t
cGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKKyAg
ICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247CisgICAgICAg
ICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcu
aXNOdWxsKCkpIHsKKyAgICAgICAgRFdPUkQgdHlwZTsKKyAgICAgICAgV0NIQVIgYWNyb2JhdElu
c3RhbGxQYXRoU3RyW19NQVhfUEFUSF07CisgICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0
aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKKworICAgICAgICBTdHJpbmcg
YWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxc
IiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOworICAgICAg
ICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBs
dWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIDAsICZ0
eXBlLCBhY3JvYmF0SW5zdGFsbFBhdGhTdHIsICZhY3JvYmF0SW5zdGFsbFBhdGhTaXplKTsKKwor
ICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIFN0cmlu
ZyBhY3JvYmF0UGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5nKGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwg
YWNyb2JhdEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJyb3dzZXIi
OworICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKGFjcm9iYXRQbHVnaW5EaXJlY3Rvcnkp
OworICAgICAgICB9CisgICAgfQorCisgICAgUmVnQ2xvc2VLZXkoa2V5KTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIGFkZEphdmFQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVj
dG9yaWVzKQoreworICAgIEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3Blbktl
eUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEphdmFTb2Z0XFxKYXZhIFBs
dWctaW4iKSwgMCwgS0VZX1JFQUQsICZrZXkpOworICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VD
Q0VTUykKKyAgICAgICAgcmV0dXJuOworCisgICAgV0NIQVIgbmFtZVsxMjhdOworICAgIEZJTEVU
SU1FIGxhc3RNb2RpZmllZDsKKworICAgIFZlY3RvcjxpbnQ+IGxhdGVzdEphdmFWZXJzaW9uOwor
ICAgIFN0cmluZyBsYXRlc3RKYXZhVmVyc2lvblN0cmluZzsKKworICAgIC8vIEVudW1lcmF0ZSBz
dWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAgICAgRFdPUkQgbmFtZUxl
biA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7CisgICAgICAgIHJlc3VsdCA9IFJlZ0Vu
dW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7
CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgVmVjdG9yPGludD4gamF2YVZlcnNpb24gPSBwYXJzZVZlcnNpb25TdHJp
bmcoU3RyaW5nKG5hbWUsIG5hbWVMZW4pKTsKKyAgICAgICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhq
YXZhVmVyc2lvbiwgbGF0ZXN0SmF2YVZlcnNpb24pKSB7CisgICAgICAgICAgICBsYXRlc3RKYXZh
VmVyc2lvbiA9IGphdmFWZXJzaW9uOworICAgICAgICAgICAgbGF0ZXN0SmF2YVZlcnNpb25TdHJp
bmcgPSBTdHJpbmcobmFtZSwgbmFtZUxlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IWxhdGVzdEphdmFWZXJzaW9uU3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICBEV09SRCB0eXBl
OworICAgICAgICBXQ0hBUiBqYXZhSW5zdGFsbFBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAg
RFdPUkQgamF2YUluc3RhbGxQYXRoU2l6ZSA9IHNpemVvZihqYXZhSW5zdGFsbFBhdGhTdHIpOwor
ICAgICAgICBEV09SRCB1c2VOZXdQbHVnaW5WYWx1ZTsKKyAgICAgICAgRFdPUkQgdXNlTmV3UGx1
Z2luU2l6ZTsKKworICAgICAgICBTdHJpbmcgamF2YVBsdWdpbktleVBhdGggPSAiU29mdHdhcmVc
XEphdmFTb2Z0XFxKYXZhIFBsdWctaW5cXCIgKyBsYXRlc3RKYXZhVmVyc2lvblN0cmluZzsKKyAg
ICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQ
bHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBMIlVz
ZU5ld0phdmFQbHVnaW4iLCAmdHlwZSwgJnVzZU5ld1BsdWdpblZhbHVlLCAmdXNlTmV3UGx1Z2lu
U2l6ZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHVzZU5ld1Bs
dWdpblZhbHVlID09IDEpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUo
SEtFWV9MT0NBTF9NQUNISU5FLCBqYXZhUGx1Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLmRhdGEoKSwgTCJKYXZhSG9tZSIsICZ0eXBlLCBqYXZhSW5zdGFsbFBhdGhT
dHIsICZqYXZhSW5zdGFsbFBhdGhTaXplKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJS
T1JfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIFN0cmluZyBqYXZhUGx1Z2luRGlyZWN0b3J5
ID0gU3RyaW5nKGphdmFJbnN0YWxsUGF0aFN0ciwgamF2YUluc3RhbGxQYXRoU2l6ZSAvIHNpemVv
ZihXQ0hBUikgLSAxKSArICJcXGJpblxcbmV3X3BsdWdpbiI7CisgICAgICAgICAgICAgICAgZGly
ZWN0b3JpZXMuYXBwZW5kKGphdmFQbHVnaW5EaXJlY3RvcnkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgUmVnQ2xvc2VLZXkoa2V5KTsKK30KKworc3RhdGljIGlubGlu
ZSBTdHJpbmcgc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgpCit7CisgICAgV0NIQVIgbW9kdWxlRmls
ZU5hbWVTdHJbX01BWF9QQVRIXTsKKyAgICBzdGF0aWMgU3RyaW5nIHBsdWdpbnNEaXJlY3Rvcnk7
CisgICAgc3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luRGlyZWN0b3J5ID0gZmFsc2U7CisKKyAgICBp
ZiAoIWNhY2hlZFBsdWdpbkRpcmVjdG9yeSkgeworICAgICAgICBjYWNoZWRQbHVnaW5EaXJlY3Rv
cnkgPSB0cnVlOworCisgICAgICAgIGludCBtb2R1bGVGaWxlTmFtZUxlbiA9IEdldE1vZHVsZUZp
bGVOYW1lKDAsIG1vZHVsZUZpbGVOYW1lU3RyLCBfTUFYX1BBVEgpOworCisgICAgICAgIGlmICgh
bW9kdWxlRmlsZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5hbWVMZW4gPT0gX01BWF9QQVRIKQorICAg
ICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGlmICghUGF0aFJlbW92ZUZpbGVTcGVjKG1v
ZHVsZUZpbGVOYW1lU3RyKSkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBwbHVn
aW5zRGlyZWN0b3J5ID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOwor
ICAgIH0KK2V4aXQ6CisgICAgcmV0dXJuIHBsdWdpbnNEaXJlY3Rvcnk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4m
IGRpcmVjdG9yaWVzKQoreworICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07
CisKKyAgICBpZiAoIUdldFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIFdURl9B
UlJBWV9MRU5HVEgoc3lzdGVtRGlyZWN0b3J5U3RyKSkpCisgICAgICAgIHJldHVybjsKKworICAg
IFdDSEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAgUGF0aENvbWJp
bmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNy
b21lZFxcRmxhc2giKSk7CisgICAgZGlyZWN0b3JpZXMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3Rv
cnlTdHIpOworCisgICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVt
RGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOworICAgIGRpcmVj
dG9yaWVzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKK30KKworVmVjdG9yPFN0cmlu
Zz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCit7CisgICAgVmVj
dG9yPFN0cmluZz4gZGlyZWN0b3JpZXM7CisgICAgU3RyaW5nIG91ckRpcmVjdG9yeSA9IHNhZmFy
aVBsdWdpbnNEaXJlY3RvcnkoKTsKKworICAgIGlmICghb3VyRGlyZWN0b3J5LmlzTnVsbCgpKQor
ICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQob3VyRGlyZWN0b3J5KTsKKyAgICBhZGRBZG9iZUFj
cm9iYXRQbHVnaW5EaXJlY3RvcnkoZGlyZWN0b3JpZXMpOworICAgIGFkZE1vemlsbGFQbHVnaW5E
aXJlY3RvcmllcyhkaXJlY3Rvcmllcyk7CisgICAgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2lu
RGlyZWN0b3J5KGRpcmVjdG9yaWVzKTsKKyAgICBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3Jp
ZXMoZGlyZWN0b3JpZXMpOworCisgICAgcmV0dXJuIGRpcmVjdG9yaWVzOworfQorCitib29sIFBs
dWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRp
cmVjdG9yeSkKK3sKKyAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJpUGx1Z2luc0RpcmVj
dG9yeSgpOworCisgICAgaWYgKCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkgJiYgIWRpcmVjdG9yeS5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIG91ckRpcmVjdG9yeSA9PSBkaXJlY3Rvcnk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luRGVidWcuY3BwIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5E
ZWJ1Zy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjZkMjNhZTY3MTM4YWNhYmM2NWI0ZTMwMGNmMmNlMTc5ODE0
MDUzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2lu
RGVidWcuY3BwCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKKyNpZiAhTE9HX0RJU0FCTEVECisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IGVycm9yU3RyaW5nc1tdID0geworICAgICJObyBlcnJvcnMgb2Nj
dXJyZWQuIiwgLyogTlBFUlJfTk9fRVJST1IgKi8KKyAgICAiRXJyb3Igd2l0aCBubyBzcGVjaWZp
YyBlcnJvciBjb2RlIG9jY3VycmVkLiIsIC8qIE5QRVJSX0dFTkVSSUNfRVJST1IgKi8KKyAgICAi
SW52YWxpZCBpbnN0YW5jZSBwYXNzZWQgdG8gdGhlIHBsdWctaW4uIiwgLyogTlBFUlJfSU5WQUxJ
RF9JTlNUQU5DRV9FUlJPUiAqLworICAgICJGdW5jdGlvbiB0YWJsZSBpbnZhbGlkLiIsIC8qIE5Q
RVJSX0lOVkFMSURfRlVOQ1RBQkxFX0VSUk9SICovCisgICAgIkxvYWRpbmcgb2YgcGx1Zy1pbiBm
YWlsZWQuIiwgLyogTlBFUlJfTU9EVUxFX0xPQURfRkFJTEVEX0VSUk9SICovCisgICAgIk1lbW9y
eSBhbGxvY2F0aW9uIGZhaWxlZC4iLCAvKiBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9SICovCisg
ICAgIlBsdWctaW4gbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExVR0lO
X0VSUk9SICovCisgICAgIlBsdWctaW4gZGlyZWN0b3J5IG1pc3Npbmcgb3IgaW52YWxpZC4iLCAv
KiBOUEVSUl9JTlZBTElEX1BMVUdJTl9ESVJfRVJST1IgKi8KKyAgICAiVmVyc2lvbnMgb2YgcGx1
Zy1pbiBhbmQgQ29tbXVuaWNhdG9yIGRvIG5vdCBtYXRjaC4iLCAvKiBOUEVSUl9JTkNPTVBBVElC
TEVfVkVSU0lPTl9FUlJPUiAqLworICAgICJQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkLiIs
IC8qIE5QRVJSX0lOVkFMSURfUEFSQU0gKi8KKyAgICAiVVJMIG1pc3Npbmcgb3IgaW52YWxpZC4i
LCAvKiBOUEVSUl9JTlZBTElEX1VSTCAqLworICAgICJGaWxlIG1pc3Npbmcgb3IgaW52YWxpZC4i
LCAvKiBOUEVSUl9GSUxFX05PVF9GT1VORCAqLworICAgICJTdHJlYW0gY29udGFpbnMgbm8gZGF0
YS4iLCAvKiBOUEVSUl9OT19EQVRBICovCisgICAgIlNlZWthYmxlIHN0cmVhbSBleHBlY3RlZC4i
LCAvKiBOUEVSUl9TVFJFQU1fTk9UX1NFRUtBQkxFICovCisgICAgIlVua25vd24gZXJyb3IgY29k
ZSIKK307CisKKyNpZmRlZiBYUF9NQUNPU1gKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkcmF3
aW5nTW9kZWxzW10gPSB7CisgICAgIk5QRHJhd2luZ01vZGVsUXVpY2tEcmF3IiwKKyAgICAiTlBE
cmF3aW5nTW9kZWxDb3JlR3JhcGhpY3MiLAorICAgICJOUERyYXdpbmdNb2RlbE9wZW5HTCIsCisg
ICAgIk5QRHJhd2luZ01vZGVsQ29yZUFuaW1hdGlvbiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBldmVudE1vZGVsc1tdID0geworICAgICJOUEV2ZW50TW9kZWxDYXJib24iLAorICAg
ICJOUEV2ZW50TW9kZWxDb2NvYSIKK307CisjZW5kaWYgLy9YUF9NQUNPU1gKKworY29uc3QgY2hh
ciogcHJldHR5TmFtZUZvck5QRXJyb3IoTlBFcnJvciBlcnJvcikKK3sKKyAgICByZXR1cm4gZXJy
b3JTdHJpbmdzW2Vycm9yXTsKK30KKworI2lmZGVmIFhQX01BQ09TWAorY29uc3QgY2hhciogcHJl
dHR5TmFtZUZvckRyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCBkcmF3aW5nTW9kZWwpCit7Cisg
ICAgcmV0dXJuIGRyYXdpbmdNb2RlbHNbZHJhd2luZ01vZGVsXTsKK30KKworY29uc3QgY2hhciog
cHJldHR5TmFtZUZvckV2ZW50TW9kZWwoTlBFdmVudE1vZGVsIGV2ZW50TW9kZWwpCit7CisgICAg
cmV0dXJuIGV2ZW50TW9kZWxzW2V2ZW50TW9kZWxdOworfQorI2VuZGlmIC8vWFBfTUFDT1NYCisK
K0NTdHJpbmcgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKE5QTlZhcmlhYmxlIHZhcmlhYmxlKQor
eworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZ4RGlzcGxheTogcmV0dXJu
ICJOUE5WeERpc3BsYXkiOworICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDogcmV0dXJuICJOUE5W
eHRBcHBDb250ZXh0IjsKKyAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogcmV0dXJuICJOUE5W
bmV0c2NhcGVXaW5kb3ciOworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDogcmV0
dXJuICJOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sIjsKKyAgICBjYXNlIE5QTlZhc2RFbmFibGVk
Qm9vbDogcmV0dXJuICJOUE5WYXNkRW5hYmxlZEJvb2wiOworICAgIGNhc2UgTlBOVmlzT2ZmbGlu
ZUJvb2w6IHJldHVybiAiTlBOVmlzT2ZmbGluZUJvb2wiOworCisgICAgY2FzZSBOUE5Wc2Vydmlj
ZU1hbmFnZXI6IHJldHVybiAiTlBOVnNlcnZpY2VNYW5hZ2VyIChub3Qgc3VwcG9ydGVkKSI7Cisg
ICAgY2FzZSBOUE5WRE9NRWxlbWVudDogcmV0dXJuICJOUE5WRE9NRWxlbWVudCAobm90IHN1cHBv
cnRlZCkiOworICAgIGNhc2UgTlBOVkRPTVdpbmRvdzogcmV0dXJuICJOUE5WRE9NV2luZG93IChu
b3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUE5WVG9vbGtpdDogcmV0dXJuICJOUE5WVG9vbGtp
dCAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDogcmV0
dXJuICJOUE5WU3VwcG9ydHNYRW1iZWRCb29sIChub3Qgc3VwcG9ydGVkKSI7CisKKyAgICBjYXNl
IE5QTlZXaW5kb3dOUE9iamVjdDogcmV0dXJuICJOUE5WV2luZG93TlBPYmplY3QiOworICAgIGNh
c2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogcmV0dXJuICJOUE5WUGx1Z2luRWxlbWVudE5Q
T2JqZWN0IjsKKyAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6IHJldHVybiAiTlBOVlN1
cHBvcnRzV2luZG93bGVzcyI7CisgICAgY2FzZSBOUE5WcHJpdmF0ZU1vZGVCb29sOiByZXR1cm4g
Ik5QTlZwcml2YXRlTW9kZUJvb2wiOworCisjaWZkZWYgWFBfTUFDT1NYCisgICAgY2FzZSBOUE5W
cGx1Z2luRHJhd2luZ01vZGVsOiByZXR1cm4gIk5QTlZwbHVnaW5EcmF3aW5nTW9kZWwiOworI2lm
bmRlZiBOUF9OT19RVUlDS0RSQVcKKyAgICBjYXNlIE5QTlZzdXBwb3J0c1F1aWNrRHJhd0Jvb2w6
IHJldHVybiAiTlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbCI7CisjZW5kaWYKKyAgICBjYXNlIE5Q
TlZzdXBwb3J0c0NvcmVHcmFwaGljc0Jvb2w6IHJldHVybiAiTlBOVnN1cHBvcnRzQ29yZUdyYXBo
aWNzQm9vbCI7CisgICAgY2FzZSBOUE5Wc3VwcG9ydHNPcGVuR0xCb29sOiByZXR1cm4gIk5QTlZz
dXBwb3J0c09wZW5HTEJvb2wiOworICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29yZUFuaW1hdGlvbkJv
b2w6IHJldHVybiAiTlBOVnN1cHBvcnRzQ29yZUFuaW1hdGlvbkJvb2wiOworI2lmbmRlZiBOUF9O
T19DQVJCT04KKyAgICBjYXNlIE5QTlZzdXBwb3J0c0NhcmJvbkJvb2w6IHJldHVybiAiTlBOVnN1
cHBvcnRzQ2FyYm9uQm9vbCI7CisjZW5kaWYKKyAgICBjYXNlIE5QTlZzdXBwb3J0c0NvY29hQm9v
bDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb2NvYUJvb2wiOworI2VuZGlmCisKKyAgICBkZWZhdWx0
OiByZXR1cm4gIlVua25vd24gdmFyaWFibGUiOworICAgIH0KK30KKworQ1N0cmluZyBwcmV0dHlO
YW1lRm9yTlBQVmFyaWFibGUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQorewor
ICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QUFZwbHVnaW5OYW1lU3RyaW5nOiBy
ZXR1cm4gIk5QUFZwbHVnaW5OYW1lU3RyaW5nIjsKKyAgICBjYXNlIE5QUFZwbHVnaW5EZXNjcmlw
dGlvblN0cmluZzogcmV0dXJuICJOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmciOworICAgIGNh
c2UgTlBQVnBsdWdpbldpbmRvd0Jvb2w6IHJldHVybiAiTlBQVnBsdWdpbldpbmRvd0Jvb2wiOwor
ICAgIGNhc2UgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbDogcmV0dXJuICJOUFBWcGx1Z2luVHJh
bnNwYXJlbnRCb29sIjsKKworICAgIGNhc2UgTlBQVmphdmFDbGFzczogcmV0dXJuICJOUFBWamF2
YUNsYXNzIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93U2l6ZTog
cmV0dXJuICJOUFBWcGx1Z2luV2luZG93U2l6ZSAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2Ug
TlBQVnBsdWdpblRpbWVySW50ZXJ2YWw6IHJldHVybiAiTlBQVnBsdWdpblRpbWVySW50ZXJ2YWwg
KG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxlSW5zdGFuY2U6
IHJldHVybiAiTlBQVnBsdWdpblNjcmlwdGFibGVJbnN0YW5jZSAobm90IHN1cHBvcnRlZCkiOwor
ICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVJSUQ6IHJldHVybiAiTlBQVnBsdWdpblNjcmlw
dGFibGVJSUQgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZqYXZhc2NyaXB0UHVzaENh
bGxlckJvb2w6IHJldHVybiAiTlBQVmphdmFzY3JpcHRQdXNoQ2FsbGVyQm9vbCAobm90IHN1cHBv
cnRlZCkiOworICAgIGNhc2UgTlBQVnBsdWdpbktlZXBMaWJyYXJ5SW5NZW1vcnk6IHJldHVybiAi
TlBQVnBsdWdpbktlZXBMaWJyYXJ5SW5NZW1vcnkgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNl
IE5QUFZwbHVnaW5OZWVkc1hFbWJlZDogcmV0dXJuICJOUFBWcGx1Z2luTmVlZHNYRW1iZWQgKG5v
dCBzdXBwb3J0ZWQpIjsKKworICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdDog
cmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0IjsKKworICAgIGNhc2UgTlBQVmZv
cm1WYWx1ZTogcmV0dXJuICJOUFBWZm9ybVZhbHVlIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2Fz
ZSBOUFBWcGx1Z2luVXJsUmVxdWVzdHNEaXNwbGF5ZWRCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5V
cmxSZXF1ZXN0c0Rpc3BsYXllZEJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKKworICAgIGNhc2UgTlBQ
VnBsdWdpbldhbnRzQWxsTmV0d29ya1N0cmVhbXM6IHJldHVybiAiTlBQVnBsdWdpbldhbnRzQWxs
TmV0d29ya1N0cmVhbXMiOworICAgIGNhc2UgTlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVhbTogcmV0
dXJuICJOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtIjsKKworI2lmZGVmIFhQX01BQ09TWAorICAg
IGNhc2UgTlBQVnBsdWdpbkRyYXdpbmdNb2RlbDogeworICAgICAgICBTdHJpbmcgcmVzdWx0KCJO
UFBWcGx1Z2luRHJhd2luZ01vZGVsLCAiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChwcmV0dHlO
YW1lRm9yRHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsKHVpbnRwdHJfdCh2YWx1ZSkpKSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQubGF0aW4xKCk7CisgICAgfQorICAgIGNhc2UgTlBQVnBsdWdp
bkV2ZW50TW9kZWw6IHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCgiTlBQVnBsdWdpbkV2ZW50TW9k
ZWwsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKHByZXR0eU5hbWVGb3JFdmVudE1vZGVsKE5Q
RXZlbnRNb2RlbCh1aW50cHRyX3QodmFsdWUpKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0Lmxh
dGluMSgpOworICAgIH0KKyAgICBjYXNlIE5QUFZwbHVnaW5Db3JlQW5pbWF0aW9uTGF5ZXI6IHJl
dHVybiAiTlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllciI7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CisjZW5kaWYKKworICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93biB2YXJp
YWJsZSI7CisgICAgfQorfQorCitDU3RyaW5nIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZShO
UE5VUkxWYXJpYWJsZSB2YXJpYWJsZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAg
Y2FzZSBOUE5VUkxWQ29va2llOiByZXR1cm4gIk5QTlVSTFZDb29raWUiOworICAgIGNhc2UgTlBO
VVJMVlByb3h5OiByZXR1cm4gIk5QTlVSTFZQcm94eSI7CisgICAgZGVmYXVsdDogcmV0dXJuICJV
bmtub3duIHZhcmlhYmxlIjsKKyAgICB9Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyAhTE9HX0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVn
aW5zL1BsdWdpbkRlYnVnLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRlYnVn
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjY3NDg1ZTkwOTI4YTA1ZmNiZGE4Mjk0MGE3Mzk2NzA5ODcxZGI2MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGVidWcu
aApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpbkRlYnVnX2gKKyNkZWZpbmUgUGx1Z2luRGVi
dWdfaAorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5h
bC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2RlZmluZSBMT0dfTlBFUlJP
UihlcnIpIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIExPR19WRVJCT1NFKFBsdWdpbnMsICIl
c1xuIiwgcHJldHR5TmFtZUZvck5QRXJyb3IoZXJyKSkKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRf
RVJST1IoKSBMT0dfVkVSQk9TRShQbHVnaW5zLCAiU3RyZWFtIGZhaWxlZCBkdWUgdG8gcHJvYmxl
bXMgd2l0aCBuZXR3b3JrLCBkaXNrIEkvTywgbGFjayBvZiBtZW1vcnksIG9yIG90aGVyIHByb2Js
ZW1zLlxuIikKKworI2lmICFMT0dfRElTQUJMRUQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
b25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yTlBFcnJvcihOUEVycm9yIGVycm9yKTsKKworQ1N0cmlu
ZyBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpOworQ1N0cmlu
ZyBwcmV0dHlOYW1lRm9yTlBQVmFyaWFibGUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlKTsKK0NTdHJpbmcgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5QTlVSTFZhcmlhYmxl
IHZhcmlhYmxlKTsKKworI2lmZGVmIFhQX01BQ09TWAorY29uc3QgY2hhciogcHJldHR5TmFtZUZv
ckRyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCBkcmF3aW5nTW9kZWwpOworY29uc3QgY2hhciog
cHJldHR5TmFtZUZvckV2ZW50TW9kZWwoTlBFdmVudE1vZGVsIGV2ZW50TW9kZWwpOworI2VuZGlm
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKKwor
I2VuZGlmIC8vIFBsdWdpbkRlYnVnX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1M2MzMTVj
MjAxODQzOTRmM2I0MDY0YTNmNTQ0NzU3M2VkMmNmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwCkBAIC0w
LDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW4uaCIKKworI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRl
IDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNldCBhIHRpbWVy
IHRvIG1ha2Ugc3VyZSB3ZSBwcm9jZXNzIGFueSBxdWV1ZWQgbWVzc2FnZXMgYXQgbGVhc3QgZXZl
cnkgMTZtcy4KKy8vIFRoaXMgdmFsdWUgYWxsb3dzIEZsYXNoIDYwIG1lc3NhZ2VzL3NlY29uZCwg
d2hpY2ggc2hvdWxkIGJlIGVub3VnaCBmb3IgdmlkZW8KKy8vIHBsYXliYWNrLCBhbmQgYWxzbyBn
ZXRzIHVzIG92ZXIgdGhlIGxpbWl0IGZvciBraWNraW5nIGludG8gaGlnaC1yZXNvbHV0aW9uCisv
LyB0aW1lciBtb2RlIChzZWUgU2hhcmVkVGltZXJXaW4uY3BwKS4KK3N0YXRpYyBjb25zdCBkb3Vi
bGUgTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsID0gMC4wMTY7CisKKy8vIER1cmluZyBhIGNv
bnRpbnVvdXMgc3RyZWFtIG9mIG1lc3NhZ2VzLCBwcm9jZXNzIG9uZSBldmVyeSA1bXMuCitzdGF0
aWMgY29uc3QgZG91YmxlIE1lc3NhZ2VEaXJlY3RQcm9jZXNzaW5nSW50ZXJ2YWwgPSAwLjAwNTsK
KworUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbihQ
bHVnaW5WaWV3KiBwbHVnaW5WaWV3KQorICAgIDogbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCisg
ICAgLCBtX2JhY2soMCkKKyAgICAsIG1fZnJvbnQoMCkKKyAgICAsIG1fbWVzc2FnZVRocm90dGxl
VGltZXIoKnRoaXMsICZQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjptZXNzYWdlVGhyb3R0bGVU
aW1lckZpcmVkKQorICAgICwgbV9sYXN0TWVzc2FnZVRpbWUoMCkKK3sKKyAgICAvLyBJbml0aWFs
aXplIHRoZSBmcmVlIGxpc3Qgd2l0aCBvdXIgaW5saW5lIG1lc3NhZ2VzCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IE51bUlubGluZU1lc3NhZ2VzIC0gMTsgaSsrKQorICAgICAgICBtX2lu
bGluZU1lc3NhZ2VzW2ldLm5leHQgPSAmbV9pbmxpbmVNZXNzYWdlc1tpICsgMV07CisgICAgbV9p
bmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdLm5leHQgPSAwOworICAgIG1fZnJl
ZUlubGluZU1lc3NhZ2VzID0gJm1faW5saW5lTWVzc2FnZXNbMF07Cit9CisKK1BsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJXaW46On5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKCkKK3sKKyAgICBQbHVn
aW5NZXNzYWdlKiBuZXh0OworCisgICAgZm9yIChQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gbV9m
cm9udDsgbWVzc2FnZTsgbWVzc2FnZSA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IG1lc3NhZ2Ut
Pm5leHQ7CisgICAgICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOworICAgIH0KK30KKwordm9pZCBQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjphcHBlbmRNZXNzYWdlKEhXTkQgaFduZCwgVUlOVCBt
c2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgUGx1Z2luTWVzc2FnZSog
bWVzc2FnZSA9IGFsbG9jYXRlTWVzc2FnZSgpOworCisgICAgbWVzc2FnZS0+aFduZCA9IGhXbmQ7
CisgICAgbWVzc2FnZS0+bXNnID0gbXNnOworICAgIG1lc3NhZ2UtPndQYXJhbSA9IHdQYXJhbTsK
KyAgICBtZXNzYWdlLT5sUGFyYW0gPSBsUGFyYW07CisgICAgbWVzc2FnZS0+bmV4dCA9IDA7CisK
KyAgICBpZiAobV9iYWNrKQorICAgICAgICBtX2JhY2stPm5leHQgPSBtZXNzYWdlOworICAgIG1f
YmFjayA9IG1lc3NhZ2U7CisgICAgaWYgKCFtX2Zyb250KQorICAgICAgICBtX2Zyb250ID0gbWVz
c2FnZTsKKworICAgIC8vIElmIGl0IGhhcyBiZWVuIG1vcmUgdGhhbiBNZXNzYWdlRGlyZWN0UHJv
Y2Vzc2luZ0ludGVydmFsIGJldHdlZW4gdGhyb3R0bGVkIG1lc3NhZ2VzLAorICAgIC8vIGdvIGFo
ZWFkIGFuZCBwcm9jZXNzIGEgbWVzc2FnZSBkaXJlY3RseS4KKyAgICBkb3VibGUgY3VycmVudFRp
bWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBpZiAoY3VycmVudFRpbWUg
LSBtX2xhc3RNZXNzYWdlVGltZSA+IE1lc3NhZ2VEaXJlY3RQcm9jZXNzaW5nSW50ZXJ2YWwpIHsK
KyAgICAgICAgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKKyAgICAgICAgbV9sYXN0TWVzc2FnZVRp
bWUgPSBjdXJyZW50VGltZTsKKyAgICAgICAgaWYgKCFtX2Zyb250KQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5pc0FjdGl2ZSgp
KQorICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhy
b3R0bGVUaW1lSW50ZXJ2YWwpOworfQorCit2b2lkIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46
OnByb2Nlc3NRdWV1ZWRNZXNzYWdlKCkKK3sKKyAgICBQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0g
bV9mcm9udDsKKyAgICBtX2Zyb250ID0gbV9mcm9udC0+bmV4dDsKKyAgICBpZiAobWVzc2FnZSA9
PSBtX2JhY2spCisgICAgICAgIG1fYmFjayA9IDA7CisKKyAgICAvLyBQcm90ZWN0IHRoZSBQbHVn
aW5WaWV3IGZyb20gZGVzdHJ1Y3Rpb24gd2hpbGUgY2FsbGluZyBpdHMgd2luZG93IHByb2MuCisg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzY5MzAyODA+CisgICAgUmVmUHRyPFBsdWdpblZpZXc+IHBy
b3RlY3QobV9wbHVnaW5WaWV3KTsKKyAgICA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luVmlldy0+
cGx1Z2luV25kUHJvYygpLCBtZXNzYWdlLT5oV25kLCBtZXNzYWdlLT5tc2csIG1lc3NhZ2UtPndQ
YXJhbSwgbWVzc2FnZS0+bFBhcmFtKTsKKworICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOworfQor
Cit2b2lkIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46Om1lc3NhZ2VUaHJvdHRsZVRpbWVyRmly
ZWQoKQoreworICAgIHByb2Nlc3NRdWV1ZWRNZXNzYWdlKCk7CisKKyAgICBpZiAobV9mcm9udCkK
KyAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRocm90
dGxlVGltZUludGVydmFsKTsKK30KKworUGx1Z2luTWVzc2FnZSogUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbjo6YWxsb2NhdGVNZXNzYWdlKCkKK3sKKyAgICBQbHVnaW5NZXNzYWdlICptZXNzYWdl
OworCisgICAgaWYgKG1fZnJlZUlubGluZU1lc3NhZ2VzKSB7CisgICAgICAgIG1lc3NhZ2UgPSBt
X2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSBtZXNz
YWdlLT5uZXh0OworICAgIH0gZWxzZQorICAgICAgICBtZXNzYWdlID0gbmV3IFBsdWdpbk1lc3Nh
Z2U7CisKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKworYm9vbCBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luOjppc0lubGluZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBy
ZXR1cm4gbWVzc2FnZSA+PSAmbV9pbmxpbmVNZXNzYWdlc1swXSAmJiBtZXNzYWdlIDw9ICZtX2lu
bGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV07Cit9CisKK3ZvaWQgUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbjo6ZnJlZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkKK3sK
KyAgICBpZiAoaXNJbmxpbmVNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAgIG1lc3NhZ2UtPm5l
eHQgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMg
PSBtZXNzYWdlOworICAgIH0gZWxzZQorICAgICAgICBkZWxldGUgbWVzc2FnZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lu
cy9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5z
L1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YzUxMDMwODM2ZDNhM2U5
Mjc3YTYwZDU3YWQ2MzdjNWFmZjFkYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgKQEAgLTAsMCArMSw3NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbl9oCisjZGVmaW5lIFBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW5faAorCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2luY2x1ZGUg
PHdpbmRvd3MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFBsdWdpblZpZXc7
CisKKyAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSB7CisgICAgICAgIEhXTkQgaFduZDsKKyAgICAg
ICAgVUlOVCBtc2c7CisgICAgICAgIFdQQVJBTSB3UGFyYW07CisgICAgICAgIExQQVJBTSBsUGFy
YW07CisKKyAgICAgICAgc3RydWN0IFBsdWdpbk1lc3NhZ2UqIG5leHQ7CisgICAgfTsKKworICAg
IGNsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4geworICAgIHB1YmxpYzoKKyAgICAgICAg
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbihQbHVnaW5WaWV3Kik7CisgICAgICAgIH5QbHVnaW5N
ZXNzYWdlVGhyb3R0bGVyV2luKCk7CisKKyAgICAgICAgdm9pZCBhcHBlbmRNZXNzYWdlKEhXTkQs
IFVJTlQgbXNnLCBXUEFSQU0sIExQQVJBTSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IHByb2Nlc3NRdWV1ZWRNZXNzYWdlKCk7CisgICAgICAgIHZvaWQgbWVzc2FnZVRocm90dGxlVGlt
ZXJGaXJlZCgpOworICAgICAgICBQbHVnaW5NZXNzYWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKTsKKyAg
ICAgICAgYm9vbCBpc0lubGluZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSk7CisgICAg
ICAgIHZvaWQgZnJlZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSk7CisKKyAgICAgICAg
UGx1Z2luVmlldyogbV9wbHVnaW5WaWV3OworICAgICAgICBQbHVnaW5NZXNzYWdlKiBtX2JhY2s7
CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJvbnQ7CisKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBOdW1JbmxpbmVNZXNzYWdlcyA9IDQ7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UgbV9pbmxp
bmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlc107CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1f
ZnJlZUlubGluZU1lc3NhZ2VzOworCisgICAgICAgIFRpbWVyIG1fbWVzc2FnZVRocm90dGxlVGlt
ZXI7CisgICAgICAgIGRvdWJsZSBtX2xhc3RNZXNzYWdlVGltZTsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdlMDk5ODgwNDk3MWNhZTVhYmE2M2NkNmNkYzEzNDVmZTdjMjQwZTQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCkBAIC0wLDAg
KzEsNDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5j
bHVkZSAiY191dGlsaXR5LmgiCisjaW5jbHVkZSAiSWRlbnRpZmllclJlcC5oIgorI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOUF9qc29iamVjdC5oIgorI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQ
bHVnaW5WaWV3LmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCit7
CisgICAgLy8gVGhpcyBkZXN0cnVjdG9yIGdldHMgY2FsbGVkIGR1cmluZyByZWZyZXNoKCkgaWYg
UGx1Z2luRGF0YWJhc2UncworICAgIC8vIFBsdWdpblNldCBoYXNoIGlzIGFscmVhZHkgcG9wdWxh
dGVkLCBhcyBpdCByZW1vdmVzIGl0ZW1zIGZyb20KKyAgICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2Fs
bGluZyB0aGUgZGVzdHJ1Y3RvciBvbiBhIGxvYWRlZCBwbHVnLWluIG9mCisgICAgLy8gY291cnNl
IHdvdWxkIGNhdXNlIGEgY3Jhc2gsIHNvIHdlIGNoZWNrIHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3
ZQorICAgIC8vIEFTU0VSVC4KKyAgICAvLyBGSVhNRTogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0
ZXIgd2F5IHRvIGZpeCB0aGlzLgorICAgIGlmICghbV9sb2FkQ291bnQpCisgICAgICAgIHVubG9h
ZFdpdGhvdXRTaHV0ZG93bigpOworICAgIGVsc2UKKyAgICAgICAgdW5sb2FkKCk7CisKKyAgICBB
U1NFUlQoIW1faXNMb2FkZWQpOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5
U29vbigpCit7CisgICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSk7Cisg
ICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKKworICAgIG1f
ZnJlZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2Fn
ZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKCkKK3sKKyAgICBBU1NFUlQobV9tb2R1bGUpOworICAg
IC8vIERvIG5vdGhpbmcgaWYgdGhlIG1vZHVsZSBnb3QgbG9hZGVkIGFnYWluIG1lYW53aGlsZQor
ICAgIGlmICghbV9sb2FkQ291bnQpIHsKKyAgICAgICAgdW5sb2FkTW9kdWxlKG1fbW9kdWxlKTsK
KyAgICAgICAgbV9tb2R1bGUgPSAwOworICAgIH0KK30KKworCitpbnQgUGx1Z2luUGFja2FnZTo6
Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Cit7CisgICAgLy8g
U29ydCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4KKyAgICBi
b29sIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQbHVnaW5R
dWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKKyAgICBib29sIEJhbGxvd3NNdWx0aXBs
ZUluc3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250
QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgaWYgKEFhbGxvd3NNdWx0aXBsZUluc3RhbmNl
cyAhPSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCisgICAgICAgIHJldHVybiBBYWxsb3dzTXVs
dGlwbGVJbnN0YW5jZXMgPyAtMSA6IDE7CisKKyAgICAvLyBTb3J0IHBsdWctaW5zIGluIGEgcHJl
ZmVycmVkIHBhdGggZmlyc3QuCisgICAgYm9vbCBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBs
dWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShwYXJlbnREaXJlY3Rvcnko
KSk7CisgICAgYm9vbCBCaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFiYXNlOjpp
c1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkpOwor
ICAgIGlmIChBaXNJblByZWZlcnJlZERpcmVjdG9yeSAhPSBCaXNJblByZWZlcnJlZERpcmVjdG9y
eSkKKyAgICAgICAgcmV0dXJuIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ID8gLTEgOiAxOworCisg
ICAgaW50IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5uYW1l
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKGRpZmYpCisgICAgICAgIHJldHVybiBkaWZmOwor
CisgICAgZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKTsKKyAg
ICBpZiAoZGlmZikKKyAgICAgICAgcmV0dXJuIGRpZmY7CisKKyAgICByZXR1cm4gc3RyY21wKHBh
cmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3Rvcnko
KS51dGY4KCkuZGF0YSgpKTsKK30KKworUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQorICAgIDogbV9pc0Vu
YWJsZWQodHJ1ZSkKKyAgICAsIG1faXNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2xvYWRDb3VudCgw
KQorICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX21vZHVsZVZlcnNpb24oMCkKKyAgICAsIG1f
bW9kdWxlKDApCisgICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCisgICAgLCBtX2Zy
ZWVMaWJyYXJ5VGltZXIoKnRoaXMsICZQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmly
ZWQpCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAsIG1f
aW5mb0lzRnJvbUNhY2hlKHRydWUpCisjZW5kaWYKK3sKKyAgICBtX2ZpbGVOYW1lID0gcGF0aEdl
dEZpbGVOYW1lKG1fcGF0aCk7CisgICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdCht
X3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7Cit9CisKK3ZvaWQgUGx1
Z2luUGFja2FnZTo6dW5sb2FkKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKKyAgICAgICAgcmV0dXJuOworCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgbV9OUFBfU2h1dGRvd24oKTsKKyNl
bmRpZgorCisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFj
a2FnZTo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghbV9sb2FkQ291bnQpOworICAgIEFTU0VSVCht
X21vZHVsZSk7CisKKyAgICAvLyA8cmRhcjovLzU1MzA1MTk+OiBDcmFzaCB3aGVuIGNsb3Npbmcg
dGFiIHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkpCisgICAgLy8gSWYgdGhlIHBsdWdpbiBo
YXMgc3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywgYXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5
IGhhdmUKKyAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkgb2YgdGhlIHBsdWdpbidzIGludGVybmFs
IHdpbmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdlIHRvIG91cgorICAgIC8vIG9yaWdpbmFs
IHdpbmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVnaW4gbGlicmFyeSBmcm9tIGhlcmUsIHdl
IHdpbGwganVtcCBiYWNrCisgICAgLy8gdG8gY29kZSB3ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0
dXJuLCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5IGF0IGxlYXN0IHVudGlsCisgICAgLy8g
dGhlIG5leHQgbWVzc2FnZSBsb29wCisgICAgZnJlZUxpYnJhcnlTb29uKCk7CisKKyAgICBtX2lz
TG9hZGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZChib29s
IGVuYWJsZWQpCit7CisgICAgbV9pc0VuYWJsZWQgPSBlbmFibGVkOworfQorCitQYXNzUmVmUHRy
PFBsdWdpblBhY2thZ2U+IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKK3sKKyAgICBSZWZQdHI8UGx1Z2lu
UGFja2FnZT4gcGFja2FnZSA9IGFkb3B0UmVmKG5ldyBQbHVnaW5QYWNrYWdlKHBhdGgsIGxhc3RN
b2RpZmllZCkpOworCisgICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Cit9CisKKyNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdl
PiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pCit7Cisg
ICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBhZG9wdFJlZihuZXcgUGx1Z2luUGFj
a2FnZShwYXRoLCBsYXN0TW9kaWZpZWQpKTsKKyAgICBwYWNrYWdlLT5tX25hbWUgPSBuYW1lOwor
ICAgIHBhY2thZ2UtPm1fZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgICBwYWNrYWdlLT5k
ZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCk7CisgICAgcGFja2FnZS0+c2V0
TUlNRURlc2NyaXB0aW9uKG1pbWVEZXNjcmlwdGlvbik7CisgICAgcGFja2FnZS0+bV9pbmZvSXNG
cm9tQ2FjaGUgPSB0cnVlOworICAgIHJldHVybiBwYWNrYWdlLnJlbGVhc2UoKTsKK30KKyNlbmRp
ZgorCisjaWYgZGVmaW5lZChYUF9VTklYKQordm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVR
dWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7CisgICAgICAgIC8vIEJlY2F1c2Ug
YSBzaW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5v
dCByZWxpYWJseSB1bmxvYWQgYQorICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2Fk
IHRoZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0K
KyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisKKyAg
ICAgICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1
c2VzIGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcworICAgICAgICAvLyB3aXRoIHRoZSBK
YXZhIHBsdWctaW4uCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9a
ZXJvUmVjdFdoZW5TY3JvbGxpbmcpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBmbGFzaFRlblZlcnNpb24oMHgwYTAw
MDAwMCk7CisKKyAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihmbGFzaFRlblZlcnNpb24p
ID49IDApIHsKKyAgICAgICAgICAgIC8vIEZsYXNoIDEwLjAgYjIxOCBkb2Vzbid0IGxpa2UgaGF2
aW5nIGEgTlVMTCB3aW5kb3cgaGFuZGxlCisgICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBGbGFzaCA5IGFuZCBvbGRlciByZXF1ZXN0cyB3aW5kb3dsZXNzIHBs
dWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50CisgICAgICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOworICAgICAgICB9CisK
KyNpZiBDUFUoWDg2XzY0KQorICAgICAgICAvLyA2NC1iaXQgRmxhc2ggZnJlZXplcyBpZiByaWdo
dC1jbGljayBpcyBzZW50IGluIHdpbmRvd2xlc3MgbW9kZQorICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSk7CisjZW5kaWYKKwor
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0
aCk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7
CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1l
c3NhZ2VzKTsKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlC
dWcpOworICAgIH0KK30KKyNlbmRpZgorCisjaWYgIU9TKFdJTkRPV1MpCit2b2lkIFBsdWdpblBh
Y2thZ2U6OmRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKQoreworICAgIC8v
IEl0J3MgYSBiaXQgbGFtZSB0byBkZXRlY3QgdGhlIHBsdWdpbiB2ZXJzaW9uIGJ5IHBhcnNpbmcg
aXQKKyAgICAvLyBmcm9tIHRoZSBwbHVnaW4gZGVzY3JpcHRpb24gc3RyaW5nLCBidXQgaXQgZG9l
c24ndCBzZWVtIHRoYXQKKyAgICAvLyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBp
biBhbnkgc3RhbmRhcmRpemVkIHdheSBhdAorICAgIC8vIHRoZSBtb2R1bGUgbGV2ZWwsIGxpa2Ug
aW4gV2luZG93cworCisgICAgaWYgKG1fZGVzY3JpcHRpb24uaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9kZXNjcmlwdGlvbi5zdGFydHNXaXRoKCJTaG9ja3dhdmUgRmxh
c2giKSAmJiBtX2Rlc2NyaXB0aW9uLmxlbmd0aCgpID49IDE5KSB7CisgICAgICAgIC8vIFRoZSBm
bGFzaCB2ZXJzaW9uIGFzIGEgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGRpZmZlcnMgb24gVW5peCBm
cm9tIFdpbmRvd3MKKyAgICAgICAgLy8gc2luY2UgdGhlIHJldmlzaW9uIGNhbiBiZSBsYXJnZXIg
dGhhbiBhIDggYml0cywgc28gd2UgYWxsb3cgaXQgMTYgaGVyZSBhbmQKKyAgICAgICAgLy8gcHVz
aCB0aGUgbWFqb3IvbWlub3IgdXAgOCBiaXRzLiBUaHVzIG9uIFVuaXgsIEZsYXNoJ3MgdmVyc2lv
biBtYXkgYmUKKyAgICAgICAgLy8gMHgwYTAwMDAwMCBpbnN0ZWFkIG9mIDB4MDAwYTAwMDAuCisK
KyAgICAgICAgVmVjdG9yPFN0cmluZz4gdmVyc2lvblBhcnRzOworICAgICAgICBtX2Rlc2NyaXB0
aW9uLnN1YnN0cmluZygxNikuc3BsaXQoJyAnLCAvKmFsbG93RW1wdHlFbnRyaWVzID0qLyBmYWxz
ZSwgdmVyc2lvblBhcnRzKTsKKyAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5zaXplKCkgPj0g
MSkgeworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gbWFqb3JNaW5vclBhcnRzOworICAgICAg
ICAgICAgdmVyc2lvblBhcnRzWzBdLnNwbGl0KCcuJywgbWFqb3JNaW5vclBhcnRzKTsKKyAgICAg
ICAgICAgIGlmIChtYWpvck1pbm9yUGFydHMuc2l6ZSgpID49IDEpIHsKKyAgICAgICAgICAgICAg
ICBib29sIGNvbnZlcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1ham9y
ID0gbWFqb3JNaW5vclBhcnRzWzBdLnRvVUludCgmY29udmVydGVkKTsKKyAgICAgICAgICAgICAg
ICBpZiAoY29udmVydGVkKQorICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gPSAo
bWFqb3IgJiAweGZmKSA8PCAyNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYWpv
ck1pbm9yUGFydHMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgICAgICAgICBib29sIGNvbnZlcnRl
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbm9yID0gbWFqb3JNaW5vclBh
cnRzWzFdLnRvVUludCgmY29udmVydGVkKTsKKyAgICAgICAgICAgICAgICBpZiAoY29udmVydGVk
KQorICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0gKG1pbm9yICYgMHhmZikg
PDwgMTY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyc2lvblBh
cnRzLnNpemUoKSA+PSAyKSB7CisgICAgICAgICAgICBTdHJpbmcgcmV2aXNpb24gPSB2ZXJzaW9u
UGFydHNbMV07CisgICAgICAgICAgICBpZiAocmV2aXNpb24ubGVuZ3RoKCkgPiAxICYmIChyZXZp
c2lvblswXSA9PSAncicgfHwgcmV2aXNpb25bMF0gPT0gJ2InKSkgeworICAgICAgICAgICAgICAg
IHJldmlzaW9uLnJlbW92ZSgwLCAxKTsKKyAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24g
fD0gcmV2aXNpb24udG9JbnQoKSAmIDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitzdGF0
aWMgdm9pZCBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBOUFZhcmlhbnQqIGFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBKU0M6OkJpbmRpbmdzOjpSb290
T2JqZWN0KiByb290T2JqZWN0LCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhTGlzdCkKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKyAgICAgICAgYUxp
c3QuYXBwZW5kKEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZh
cmdzW2ldLCByb290T2JqZWN0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpTb3VyY2VDb2Rl
IG1ha2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsID0gU3Ry
aW5nKCksIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6
bWluaW11bVBvc2l0aW9uKCkpCit7CisgICAgcmV0dXJuIEpTQzo6U291cmNlQ29kZShKU0M6OlN0
cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1cmwsIHN0YXJ0UG9zaXRpb24pLCBz
dGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1u
Lm9uZUJhc2VkSW50KCkpOworfQorCitzdGF0aWMgYm9vbCBOUE5fRXZhbHVhdGUoTlBQIGluc3Rh
bmNlLCBOUE9iamVjdCogbywgTlBTdHJpbmcqIHMsIE5QVmFyaWFudCogdmFyaWFudCkKK3sKKyAg
ICBpZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKKyAgICAgICAgSmF2YVNj
cmlwdE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7
CisKKyAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+
cm9vdE9iamVjdDsKKyAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1Zh
bGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gVGhlcmUgaXMg
YSBjcmFzaCBpbiBGbGFzaCB3aGVuIGV2YWx1YXRpbmcgYSBzY3JpcHQgdGhhdCBkZXN0cm95cyB0
aGUKKyAgICAgICAgLy8gUGx1Z2luVmlldywgc28gd2UgZGVzdHJveSBpdCBhc3luY2hyb25vdXNs
eS4KKyAgICAgICAgUGx1Z2luVmlldzo6a2VlcEFsaXZlKGluc3RhbmNlKTsKKworICAgICAgICBK
U0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIFN0
cmluZyBzY3JpcHRTdHJpbmcgPSBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBTdHJpbmdUb1VURjE2
KHMpOworCisgICAgICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUo
cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShzY3Jp
cHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7CisKKyAgICAgICAgSlNDOjpCaW5kaW5nczo6Y29u
dmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmV0dXJuVmFsdWUsIHZhcmlhbnQpOworICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBWT0lEX1RPX05QVkFSSUFOVCgqdmFyaWFudCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgYm9vbCBOUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZp
ZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwg
TlBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVj
dENsYXNzKSB7CisgICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOworCisgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBz
dGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4obWV0aG9kTmFtZSk7CisgICAgICAgIGlmICghaS0+
aXNTdHJpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBTcGVj
aWFsIGNhc2UgdGhlICJldmFsIiBtZXRob2QuCisgICAgICAgIGlmIChtZXRob2ROYW1lID09IF9O
UE5fR2V0U3RyaW5nSWRlbnRpZmllcigiZXZhbCIpKSB7CisgICAgICAgICAgICBpZiAoYXJnQ291
bnQgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
YXJnc1swXS50eXBlICE9IE5QVmFyaWFudFR5cGVfU3RyaW5nKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpOUE5fRXZhbHVhdGUobnBw
LCBvLCBjb25zdF9jYXN0PE5QU3RyaW5nKj4oJmFyZ3NbMF0udmFsdWUuc3RyaW5nVmFsdWUpLCBy
ZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2Jq
ZWN0LgorICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2Jq
LT5yb290T2JqZWN0OworICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAg
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBKU0M6OkpTVmFsdWUg
ZnVuY3Rpb24gPSBvYmotPmltcC0+Z2V0KGV4ZWMsIEpTQzo6QmluZGluZ3M6OmlkZW50aWZpZXJG
cm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CisgICAgICAgIEpTQzo6Q2FsbERh
dGEgY2FsbERhdGE7CisgICAgICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0
YShmdW5jdGlvbiwgY2FsbERhdGEpOworICAgICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxs
VHlwZU5vbmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gQ2FsbCB0
aGUgZnVuY3Rpb24gb2JqZWN0LgorICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z0xpc3Q7CisgICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoZXhlYywgYXJncywgYXJnQ291
bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3QpOworICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ViA9
IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmotPmltcCwg
YXJnTGlzdCk7CisKKyAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2Yg
dGhlIGZ1bmN0aW9uIGNhbGwuCisgICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRv
TlBWYXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChvLT5fY2xh
c3MtPmludm9rZSkKKyAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+aW52b2tlKG8sIG1ldGhvZE5h
bWUsIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOworCisgICAgVk9JRF9UT19OUFZBUklBTlQoKnJl
c3VsdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6aW5pdGlh
bGl6ZUJyb3dzZXJGdW5jcygpCit7CisgICAgbWVtc2V0KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6
ZW9mKG1fYnJvd3NlckZ1bmNzKSk7CisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiht
X2Jyb3dzZXJGdW5jcyk7CisgICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QVmVyc2lvbigp
OworCisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVuY3MucmVxdWVz
dHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0g
TlBOX05ld1N0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07CisgICAg
bV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dzZXJGdW5jcy51
YWdlbnQgPSBOUE5fVXNlckFnZW50OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBO
X01lbUFsbG9jOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9icm93c2VyRnVu
Y3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5w
b3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0
dmFsdWUgPSBOUE5fR2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5f
U2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxp
ZGF0ZVJlY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZh
bGlkYXRlUmVnaW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNl
UmVkcmF3OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFi
bGVkU3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBO
X1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wbHVnaW50aHJlYWRh
c3luY2NhbGwgPSBOUE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsOworCisgICAgbV9icm93c2VyRnVu
Y3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlm
aWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRT
dHJpbmdJZGVudGlmaWVyczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0g
X05QTl9HZXRJbnRJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0
cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhm
cm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1
bmNzLmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1
bmNzLmludm9rZSA9IFdlYkNvcmU6Ok5QTl9JbnZva2U7CisgICAgbV9icm93c2VyRnVuY3MuaW52
b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFs
dWF0ZSA9IFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9w
ZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkg
PSBfTlBOX1NldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0g
X05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9O
UE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNN
ZXRob2Q7CisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRp
b247CisgICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisgICAg
bV9icm93c2VyRnVuY3MuY29uc3RydWN0ID0gX05QTl9Db25zdHJ1Y3Q7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0dmFsdWVmb3J1cmwgPSBOUE5fR2V0VmFsdWVGb3JVUkw7CisgICAgbV9icm93c2Vy
RnVuY3Muc2V0dmFsdWVmb3J1cmwgPSBOUE5fU2V0VmFsdWVGb3JVUkw7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0YXV0aGVudGljYXRpb25pbmZvID0gTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mbzsK
KworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHVwY29udGV4dG1lbnUgPSBOUE5fUG9wVXBDb250ZXh0
TWVudTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKworI2lmIEVO
QUJMRShQTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCkKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6
Omhhc2goKSBjb25zdAoreworICAgIHN0cnVjdCBIYXNoQ29kZXMgeworICAgICAgICB1bnNpZ25l
ZCBoYXNoOworICAgICAgICB0aW1lX3QgbW9kaWZpZWREYXRlOworICAgIH0gaGFzaENvZGVzOwor
CisgICAgaGFzaENvZGVzLmhhc2ggPSBtX3BhdGguaW1wbCgpLT5oYXNoKCk7CisgICAgaGFzaENv
ZGVzLm1vZGlmaWVkRGF0ZSA9IG1fbGFzdE1vZGlmaWVkOworCisgICAgcmV0dXJuIFN0cmluZ0hh
c2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oJmhhc2hDb2Rlcyk7Cit9CisKK2Jv
b2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1
Z2luUGFja2FnZSYgYikKK3sKKyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNj
cmlwdGlvbjsKK30KKyNlbmRpZgorCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJz
aW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0Cit7
CisgICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRo
YW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KKyAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24K
KworI2lmIE9TKFdJTkRPV1MpCisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5tb3N0U2lnICE9IGNv
bXBhcmVWZXJzaW9uLm1vc3RTaWcpCisgICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24ubW9z
dFNpZyA+IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcgPyAxIDogLTE7CisgICAgaWYgKG1fbW9kdWxl
VmVyc2lvbi5sZWFzdFNpZyAhPSBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZykKKyAgICAgICAgcmV0
dXJuIG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA+IGNvbXBhcmVWZXJzaW9uLmxlYXN0U2lnID8g
MSA6IC0xOworI2Vsc2UgICAgCisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbiAhPSBjb21wYXJlVmVy
c2lvbikKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbiA+IGNvbXBhcmVWZXJzaW9uID8g
MSA6IC0xOworI2VuZGlmCisKKyAgICByZXR1cm4gMDsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCitib29sIFBsdWdpblBhY2thZ2U6OmVuc3VyZVBsdWdp
bkxvYWRlZCgpCit7CisgICAgaWYgKCFtX2luZm9Jc0Zyb21DYWNoZSkKKyAgICAgICAgcmV0dXJu
IG1faXNMb2FkZWQ7CisKKyAgICBtX3F1aXJrcyA9IFBsdWdpblF1aXJrU2V0KCk7CisgICAgbV9u
YW1lID0gU3RyaW5nKCk7CisgICAgbV9kZXNjcmlwdGlvbiA9IFN0cmluZygpOworICAgIG1fZnVs
bE1JTUVEZXNjcmlwdGlvbiA9IFN0cmluZygpOworICAgIG1fbW9kdWxlVmVyc2lvbiA9IDA7CisK
KyAgICByZXR1cm4gZmV0Y2hJbmZvKCk7Cit9CisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmggYi9Tb3VyY2UvV2ViS2l0L3dp
bi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODM0MDU3Njc5N2FhNmJjODMx
NzcyYmMzYjRmOWNjZjhjYzhiYTYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGx1
Z2luUGFja2FnZV9oCisjZGVmaW5lIFBsdWdpblBhY2thZ2VfaAorCisjaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgorI2luY2x1ZGUgIlBsdWdpblF1aXJrU2V0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50
ZXJuYWwuaCIKKyNlbmRpZgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2NyaXB0aW9uc01hcDsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNN
YXA7CisKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2lu
UGFja2FnZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgflBsdWdpblBhY2thZ2UoKTsKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gY3JlYXRlUGFja2FnZShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
bHVnaW5QYWNrYWdlPiBjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pOworI2VuZGlm
CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgICAgIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rl
c2NyaXB0aW9uOyB9CisgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aDsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9maWxlTmFtZTsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIHBhcmVudERpcmVjdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RGlyZWN0b3J5OyB9CisgICAgICAgIFBsYXRmb3JtTW9k
dWxlIG1vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlOyB9CisgICAgICAgIHVpbnQxNl90
IE5QVmVyc2lvbigpIGNvbnN0OworICAgICAgICB0aW1lX3QgbGFzdE1vZGlmaWVkKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXN0TW9kaWZpZWQ7IH0KKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlw
dGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRGVz
Y3JpcHRpb25zOyB9CisgICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1pbWVUb0V4
dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KKworICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIpOworCisgICAgICAgIGJv
b2wgbG9hZCgpOworICAgICAgICB2b2lkIHVubG9hZCgpOworICAgICAgICB2b2lkIHVubG9hZFdp
dGhvdXRTaHV0ZG93bigpOworCisgICAgICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9pc0VuYWJsZWQ7IH0KKyAgICAgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3Mq
IHBsdWdpbkZ1bmNzKCkgY29uc3QgeyByZXR1cm4gJm1fcGx1Z2luRnVuY3M7IH0KKyNlbmRpZgor
ICAgICAgICBpbnQgY29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lv
biYpIGNvbnN0OworICAgICAgICBpbnQgY29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJikgY29u
c3Q7CisgICAgICAgIFBsdWdpblF1aXJrU2V0IHF1aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1fcXVp
cmtzOyB9CisgICAgICAgIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgdmVyc2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbjsgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgYm9vbCBlbnN1cmVQbHVnaW5Mb2FkZWQoKTsK
KyAgICAgICAgdm9pZCBzZXRNSU1FRGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiBtaW1lRGVzY3Jp
cHRpb24pOworICAgICAgICBTdHJpbmcgZnVsbE1JTUVEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZnVsbE1JTUVEZXNjcmlwdGlvbjt9CisjZW5kaWYKKyAgICBwcml2YXRlOgorICAgICAg
ICBQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9k
aWZpZWQpOworCisgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisgICAgICAgIGJvb2wgaXNQbHVn
aW5CbGFja2xpc3RlZCgpOworICAgICAgICB2b2lkIGRldGVybWluZVF1aXJrcyhjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKTsKKworICAgICAgICB2b2lkIGRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9t
RGVzY3JpcHRpb24oKTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplQnJvd3NlckZ1bmNzKCk7CisK
KyAgICAgICAgYm9vbCBtX2lzRW5hYmxlZDsKKyAgICAgICAgYm9vbCBtX2lzTG9hZGVkOworICAg
ICAgICBpbnQgbV9sb2FkQ291bnQ7CisKKyAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247Cisg
ICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOworICAgICAg
ICBTdHJpbmcgbV9uYW1lOworICAgICAgICBTdHJpbmcgbV9wYXJlbnREaXJlY3Rvcnk7CisKKyAg
ICAgICAgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIG1fbW9kdWxlVmVyc2lvbjsKKworICAgICAgICBN
SU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9taW1lVG9EZXNjcmlwdGlvbnM7CisgICAgICAgIE1JTUVU
b0V4dGVuc2lvbnNNYXAgbV9taW1lVG9FeHRlbnNpb25zOworCisgICAgICAgIFBsYXRmb3JtTW9k
dWxlIG1fbW9kdWxlOworICAgICAgICB0aW1lX3QgbV9sYXN0TW9kaWZpZWQ7CisKKyNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBQX1NodXRkb3duUHJvY1B0ciBtX05Q
UF9TaHV0ZG93bjsKKyAgICAgICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNzOworICAgICAg
ICBOUE5ldHNjYXBlRnVuY3MgbV9icm93c2VyRnVuY3M7CisjZW5kaWYKKworICAgICAgICB2b2lk
IGZyZWVMaWJyYXJ5U29vbigpOworICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5VGltZXJGaXJlZCgp
OworICAgICAgICBUaW1lciBtX2ZyZWVMaWJyYXJ5VGltZXI7CisKKyAgICAgICAgUGx1Z2luUXVp
cmtTZXQgbV9xdWlya3M7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNI
RSkKKyAgICAgICAgU3RyaW5nIG1fZnVsbE1JTUVEZXNjcmlwdGlvbjsKKyAgICAgICAgYm9vbCBt
X2luZm9Jc0Zyb21DYWNoZTsKKyNlbmRpZgorICAgIH07CisKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyBhIHdvcmthcm91bmQgYmVjYXVzZSBQbHVnaW5QYWNrYWdlSGFzaCBpcyBicm9rZW4gYW5kIG1h
eSBjb25zaWRlciBrZXlzIHdpdGggZGlmZmVyZW50IGhhc2hlcyBhcyBlcXVhbC4KKyAgICBzdHJ1
Y3QgUGx1Z2luUGFja2FnZUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPFJlZlB0cjxQbHVnaW5QYWNr
YWdlPiA+IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gNjQ7
CisgICAgfTsKKworICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlSGFzaCB7CisgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IHVpbnRwdHJfdCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGtleSktPmhhc2goKTsgfQorICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGtleSkgeyByZXR1cm4ga2V5
LT5oYXNoKCk7IH0KKworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCB1aW50cHRyX3Qg
YSwgY29uc3QgdWludHB0cl90IGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1
Z2luUGFja2FnZSo+KGEpLCByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihiKSk7IH0K
KyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBh
LCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2U6
OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
UGx1Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luUGFja2FnZVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTg1MjU3ZDYyMjkyNzIwOTE4YTUxYTM2
ZDgyN2Q4Y2NkMmQ0MTljMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luUGFja2FnZVdpbi5jcHAKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNs
dWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAibnBydW50
aW1lX2ltcGwuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHNobHdhcGku
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZv
KGNvbnN0IExQVk9JRCB2ZXJzaW9uSW5mb0RhdGEsIGNvbnN0IFN0cmluZyYgaW5mbykKK3sKKyAg
ICBMUFZPSUQgYnVmZmVyOworICAgIFVJTlQgYnVmZmVyTGVuZ3RoOworICAgIFN0cmluZyBzdWJJ
bmZvID0gIlxcU3RyaW5nZmlsZUluZm9cXDA0MDkwNEU0XFwiICsgaW5mbzsKKyAgICBib29sIHJl
dHZhbCA9IFZlclF1ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0YSwKKyAgICAgICAgY29uc3RfY2Fz
dDxVQ2hhcio+KHN1YkluZm8uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkp
LAorICAgICAgICAmYnVmZmVyLCAmYnVmZmVyTGVuZ3RoKTsKKyAgICBpZiAoIXJldHZhbCB8fCBi
dWZmZXJMZW5ndGggPT0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gU3Vi
dHJhY3QgMSBmcm9tIHRoZSBsZW5ndGg7IHdlIGRvbid0IHdhbnQgdGhlIHRyYWlsaW5nIG51bGwg
Y2hhcmFjdGVyLgorICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGJ1
ZmZlciksIGJ1ZmZlckxlbmd0aCAtIDEpOworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmlzUGx1
Z2luQmxhY2tsaXN0ZWQoKQoreworICAgIGlmIChuYW1lKCkgPT0gIkNpdHJpeCBJQ0EgQ2xpZW50
IikgeworICAgICAgICAvLyBUaGUgQ2l0cml4IElDQSBDbGllbnQgcGx1Zy1pbiByZXF1aXJlcyBh
IE1vemlsbGEtYmFzZWQgYnJvd3Nlcjsgc2VlIDxyZGFyOi8vNjQxODY4MT4uCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChuYW1lKCkgPT0gIlNpbHZlcmxpZ2h0IFBsdWct
SW4iKSB7CisgICAgICAgIC8vIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vNTU1NzM3OT4gQ3Jhc2gg
aW4gU2lsdmVybGlnaHQgd2hlbiBvcGVuaW5nIG1pY3Jvc29mdC5jb20uCisgICAgICAgIC8vIHRo
ZSBsYXRlc3QgMS4wIHZlcnNpb24gb2YgU2lsdmVybGlnaHQgZG9lcyBub3QgcmVwcm9kdWNlIHRo
aXMgY3Jhc2gsIHNvIGFsbG93IGl0CisgICAgICAgIC8vIGFuZCBhbnkgbmV3ZXIgdmVyc2lvbnMK
KyAgICAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBzbFBsdWdpbk1pblJl
cXVpcmVkKDB4NTFCRTAwMDAsIDB4MDAwMTAwMDApOworCisgICAgICAgIGlmIChjb21wYXJlRmls
ZVZlcnNpb24oc2xQbHVnaW5NaW5SZXF1aXJlZCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlTmFtZSgpLCAibnBtb3ph
eC5kbGwiKSkgeworICAgICAgICAvLyBCdWcgMTUyMTc6IE1vemlsbGEgQWN0aXZlWCBjb250cm9s
IGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHhwY29tX2NvcmUuZGxsCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZU5hbWUoKSwgIm5wd3Bm
LmRsbCIpKSB7CisgICAgICAgIC8vIEJ1ZyA1NzExOTogTWljcm9zb2Z0IFdpbmRvd3MgUHJlc2Vu
dGF0aW9uIEZvdW5kYXRpb24gKFdQRikgcGx1Zy1pbiBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4
cGNvbS5kbGwKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChuYW1lKCkgPT0g
IllhaG9vIEFwcGxpY2F0aW9uIFN0YXRlIFBsdWdpbiIpIHsKKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2ODYwCisgICAgICAgIC8vIEJ1ZyBpbiBZ
YWhvbyBBcHBsaWNhdGlvbiBTdGF0ZSBwbHVnLWluIGVhcmxpZXIgdGhhbiAxLjAuMC42IGxlYWRz
IHRvIGhlYXAgY29ycnVwdGlvbi4gCisgICAgICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVs
ZVZlcnNpb24geWFob29BcHBTdGF0ZVBsdWdpbk1pblJlcXVpcmVkKDB4MDAwMDAwMDYsIDB4MDAw
MTAwMDApOworICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKHlhaG9vQXBwU3RhdGVQbHVn
aW5NaW5SZXF1aXJlZCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZVF1aXJr
cyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGlj
YXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9y
bU1vZHVsZVZlcnNpb24gZmxhc2hUZW5WZXJzaW9uKDB4MDAwMDAwMDAsIDB4MDAwYTAwMDApOwor
CisgICAgICAgIC8vIFByZSAxMCBGbGFzaCBvbmx5IHJlcXVlc3RzIHdpbmRvd2xlc3MgcGx1Z2lu
cyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAgICAgICAgaWYgKGNvbXBhcmVG
aWxlVmVyc2lvbihmbGFzaFRlblZlcnNpb24pIDwgMCkKKyAgICAgICAgICAgIG1fcXVpcmtzLmFk
ZChQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCk7CisKKyAgICAgICAgbV9xdWlya3Mu
YWRkKFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlKTsKKyAgICAgICAgbV9xdWlya3MuYWRk
KFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMpOworICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1Zyk7CisgICAgfQorCisgICAgaWYg
KG5hbWUoKS5jb250YWlucygiTWljcm9zb2Z0IikgJiYgbmFtZSgpLmNvbnRhaW5zKCJXaW5kb3dz
IE1lZGlhIikpIHsKKyAgICAgICAgLy8gVGhlIFdNUCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0
aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBz
bworICAgICAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBj
b3JyZWN0IHNpemUKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNl
dFdpbmRvd0NhbGwpOworCisgICAgICAgIC8vIFdpbmRvd2xlc3MgbW9kZSBkb2VzIG5vdCB3b3Jr
IGF0IGFsbCB3aXRoIHRoZSBXTVAgcGx1Z2luIHNvIGp1c3QgcmVtb3ZlIHRoYXQgcGFyYW1ldGVy
IAorICAgICAgICAvLyBhbmQgZG9uJ3QgcGFzcyBpdCB0byB0aGUgcGx1Zy1pbi4KKyAgICAgICAg
bV9xdWlya3MuYWRkKFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pOworCisg
ICAgICAgIC8vIFdNUCBoYXMgYSBtb2RhbCBtZXNzYWdlIGxvb3AgdGhhdCBpdCBlbnRlcnMgd2hl
bmV2ZXIgd2UgY2FsbCBpdCBvcgorICAgICAgICAvLyBhc2sgaXQgdG8gcGFpbnQuIFRoaXMgbW9k
YWwgbG9vcCBjYW4gZGVsaXZlciBtZXNzYWdlcyB0byBvdGhlcgorICAgICAgICAvLyB3aW5kb3dz
IGluIFdlYktpdCBhdCB0aW1lcyB3aGVuIHRoZXkgYXJlIG5vdCBleHBlY3RpbmcgdGhlbSAoZm9y
CisgICAgICAgIC8vIGV4YW1wbGUsIGRlbGl2ZXJpbmcgYSBXTV9QQUlOVCBtZXNzYWdlIGR1cmlu
ZyBhIGxheW91dCksIGFuZCB0aGVzZQorICAgICAgICAvLyBjYW4gY2F1c2UgY3Jhc2hlcy4KKyAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrSGFzTW9kYWxNZXNzYWdlTG9vcCk7CisgICAg
fQorCisgICAgaWYgKG5hbWUoKSA9PSAiVkxDIE11bHRpbWVkaWEgUGx1Z2luIiB8fCBuYW1lKCkg
PT0gIlZMQyBNdWx0aW1lZGlhIFBsdWctaW4iKSB7CisgICAgICAgIC8vIFZMQyBoYW5ncyBvbiBO
UFBfRGVzdHJveSBpZiB3ZSBjYWxsIE5QUF9TZXRXaW5kb3cgd2l0aCBhIG51bGwgd2luZG93IGhh
bmRsZQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hh
bmRsZU9uRGVzdHJveSk7CisKKyAgICAgICAgLy8gVkxDIDAuOC42ZCBhbmQgMC44LjZlIGNyYXNo
IGlmIG11bHRpcGxlIGluc3RhbmNlcyBhcmUgY3JlYXRlZC4KKyAgICAgICAgLy8gPHJkYXI6Ly9w
cm9ibGVtLzU3NzMwNzA+IHRyYWNrcyBhbGxvd2luZyBtdWx0aXBsZSBpbnN0YW5jZXMgd2hlbiB0
aGlzCisgICAgICAgIC8vIGJ1ZyBpcyBmaXhlZC4KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdp
blF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIH0KKworICAgIC8vIFRoZSBE
aXZYIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwg
YW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hl
biB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1pbWVUeXBlID09
ICJ2aWRlby9kaXZ4IikKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRGVmZXJGaXJz
dFNldFdpbmRvd0NhbGwpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciBhIHByb2JsZW0gaW4gb3VyIE5QUnVudGltZSBiaW5kaW5nczsgaWYgYSBwbHVnLWluIGNyZWF0
ZXMgYW4KKyAgICAvLyBOUE9iamVjdCBhbmQgcGFzc2VzIGl0IHRvIGEgZnVuY3Rpb24gaXQncyBu
b3QgcG9zc2libGUgdG8gc2VlIHdoYXQgcm9vdCBvYmplY3QgdGhhdCBOUE9iamVjdCBiZWxvbmdz
IHRvLgorICAgIC8vIFRodXMsIHdlIGRvbid0IGtub3cgdGhhdCB0aGUgb2JqZWN0IHNob3VsZCBi
ZSBpbnZhbGlkYXRlZCB3aGVuIHRoZSBwbHVnLWluIGluc3RhbmNlIGdvZXMgYXdheS4KKyAgICAv
LyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU0ODc3NDI+LgorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBw
bGljYXRpb24veC1zaWx2ZXJsaWdodCIpCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFw
cGxldE1JTUVUeXBlKG1pbWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNlIGEgc2luZ2xlIHBy
b2Nlc3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3QgcmVsaWFibHkg
dW5sb2FkIGEKKyAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0aGUgSmF2YSBw
bHVnaW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCisgICAgICAgIG1f
cXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgICAgIC8vIFNl
dHRpbmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBiYWQgc2Ny
b2xsaW5nIHJlcGFpbnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUgSmF2YSBwbHVnLWlu
LgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVu
U2Nyb2xsaW5nKTsKKyAgICB9CisKKyAgICBpZiAobWltZVR5cGUgPT0gImF1ZGlvL3gtcG4tcmVh
bGF1ZGlvLXBsdWdpbiIpIHsKKyAgICAgICAgLy8gUHJldmVudCB0aGUgUmVhbCBwbHVnaW4gZnJv
bSBjYWxsaW5nIHRoZSBXaW5kb3cgUHJvYyByZWN1cnNpdmVseSwgY2F1c2luZyB0aGUgc3RhY2sg
dG8gb3ZlcmZsb3cuCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDYWxsV25k
UHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHkpOworCisgICAgICAgIHN0YXRpYyBjb25zdCBQ
bGF0Zm9ybU1vZHVsZVZlcnNpb24gbGFzdEtub3duVW5sb2FkYWJsZVJlYWxQbGF5ZXJWZXJzaW9u
KDB4MDAwQjBCMjQsIDB4MDAwNjAwMDApOworCisgICAgICAgIC8vIFVubG9hZGluZyBSZWFsUGxh
eWVyIHZlcnNpb25zIG5ld2VyIHRoYW4gMTAuNSBjYW4gY2F1c2UgYSBoYW5nOyBzZWUgcmRhcjov
LzU2NjkzMTcuCisgICAgICAgIC8vIEZJWE1FOiBSZXN1bWUgdW5sb2FkaW5nIHdoZW4gdGhpcyBi
dWcgaW4gdGhlIFJlYWxQbGF5ZXIgUGx1Zy1JbiBpcyBmaXhlZCAocmRhcjovLzU3MTMxNDcpCisg
ICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24obGFzdEtub3duVW5sb2FkYWJsZVJlYWxQbGF5
ZXJWZXJzaW9uKSA+IDApCisgICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250
VW5sb2FkUGx1Z2luKTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZv
KCkKK3sKKyAgICBEV09SRCB2ZXJzaW9uSW5mb1NpemUsIHplcm9IYW5kbGU7CisgICAgdmVyc2lv
bkluZm9TaXplID0gR2V0RmlsZVZlcnNpb25JbmZvU2l6ZVcoY29uc3RfY2FzdDxVQ2hhcio+KG1f
cGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSksICZ6ZXJvSGFuZGxl
KTsKKyAgICBpZiAodmVyc2lvbkluZm9TaXplID09IDApCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gdmVyc2lvbkluZm9EYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxjaGFyW10+KHZl
cnNpb25JbmZvU2l6ZSk7CisKKyAgICBpZiAoIUdldEZpbGVWZXJzaW9uSW5mb1coY29uc3RfY2Fz
dDxVQ2hhcio+KG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSks
CisgICAgICAgICAgICAwLCB2ZXJzaW9uSW5mb1NpemUsIHZlcnNpb25JbmZvRGF0YS5nZXQoKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fbmFtZSA9IGdldFZlcnNpb25JbmZvKHZl
cnNpb25JbmZvRGF0YS5nZXQoKSwgIlByb2R1Y3ROYW1lIik7CisgICAgbV9kZXNjcmlwdGlvbiA9
IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIkZpbGVEZXNjcmlwdGlvbiIp
OworICAgIGlmIChtX25hbWUuaXNOdWxsKCkgfHwgbV9kZXNjcmlwdGlvbi5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsKKyAgICBV
SU5UIGluZm9TaXplOworICAgIGlmICghVmVyUXVlcnlWYWx1ZVcodmVyc2lvbkluZm9EYXRhLmdl
dCgpLCBMIlxcIiwgKExQVk9JRCopICZpbmZvLCAmaW5mb1NpemUpIHx8IGluZm9TaXplIDwgc2l6
ZW9mKFZTX0ZJWEVERklMRUlORk8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9tb2R1
bGVWZXJzaW9uLmxlYXN0U2lnID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOworICAgIG1fbW9kdWxl
VmVyc2lvbi5tb3N0U2lnID0gaW5mby0+ZHdGaWxlVmVyc2lvbk1TOworCisgICAgaWYgKGlzUGx1
Z2luQmxhY2tsaXN0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPFN0
cmluZz4gdHlwZXM7CisgICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAi
TUlNRVR5cGUiKS5zcGxpdCgnfCcsIHR5cGVzKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNp
b25MaXN0czsKKyAgICBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJGaWxl
RXh0ZW50cyIpLnNwbGl0KCd8JywgZXh0ZW5zaW9uTGlzdHMpOworICAgIFZlY3RvcjxTdHJpbmc+
IGRlc2NyaXB0aW9uczsKKyAgICBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCks
ICJGaWxlT3Blbk5hbWUiKS5zcGxpdCgnfCcsIGRlc2NyaXB0aW9ucyk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgU3RyaW5nIHR5
cGUgPSB0eXBlc1tpXS5sb3dlcigpOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBpIDwg
ZGVzY3JpcHRpb25zLnNpemUoKSA/IGRlc2NyaXB0aW9uc1tpXSA6ICIiOworICAgICAgICBTdHJp
bmcgZXh0ZW5zaW9uTGlzdCA9IGkgPCBleHRlbnNpb25MaXN0cy5zaXplKCkgPyBleHRlbnNpb25M
aXN0c1tpXSA6ICIiOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnNWZWN0b3I7
CisgICAgICAgIGV4dGVuc2lvbkxpc3Quc3BsaXQoJywnLCBleHRlbnNpb25zVmVjdG9yKTsKKwor
ICAgICAgICAvLyBHZXQgcmlkIG9mIHRoZSBleHRlbnNpb24gbGlzdCB0aGF0IG1heSBiZSBhdCB0
aGUgZW5kIG9mIHRoZSBkZXNjcmlwdGlvbiBzdHJpbmcuCisgICAgICAgIGludCBwb3MgPSBkZXNj
cmlwdGlvbi5maW5kKCIoKiIpOworICAgICAgICBpZiAocG9zICE9IC0xKSB7CisgICAgICAgICAg
ICAvLyBUaGVyZSBtaWdodCBiZSBhIHNwYWNlIHRoYXQgd2UgbmVlZCB0byBnZXQgcmlkIG9mLgor
ICAgICAgICAgICAgaWYgKHBvcyA+IDEgJiYgZGVzY3JpcHRpb25bcG9zIC0gMV0gPT0gJyAnKQor
ICAgICAgICAgICAgICAgIHBvcy0tOworICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlw
dGlvbi5sZWZ0KHBvcyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHF1
aXJrcyBmb3IgdGhlIE1JTUUgdHlwZXMgdGhpcyBwbHVnLWluIHN1cHBvcnRzCisgICAgICAgIGRl
dGVybWluZVF1aXJrcyh0eXBlKTsKKworICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKHR5
cGUsIGV4dGVuc2lvbnNWZWN0b3IpOworICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQo
dHlwZSwgZGVzY3JpcHRpb24pOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFBsdWdpblBhY2thZ2U6OmxvYWQoKQoreworICAgIGlmIChtX2ZyZWVMaWJyYXJ5VGltZXIuaXNB
Y3RpdmUoKSkgeworICAgICAgICBBU1NFUlQobV9tb2R1bGUpOworICAgICAgICBtX2ZyZWVMaWJy
YXJ5VGltZXIuc3RvcCgpOworICAgIH0gZWxzZSBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBp
ZiAobV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNl
cykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fbG9hZENvdW50Kys7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIFdDSEFSIGN1cnJlbnRQ
YXRoW01BWF9QQVRIXTsKKworICAgICAgICBpZiAoITo6R2V0Q3VycmVudERpcmVjdG9yeVcoTUFY
X1BBVEgsIGN1cnJlbnRQYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBTdHJpbmcgcGF0aCA9IG1fcGF0aC5zdWJzdHJpbmcoMCwgbV9wYXRoLnJldmVyc2VGaW5kKCdc
XCcpKTsKKworICAgICAgICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcocGF0aC5jaGFyYWN0
ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgLy8gTG9hZCB0aGUgbGlicmFyeQorICAgICAgICBtX21vZHVsZSA9IDo6
TG9hZExpYnJhcnlFeFcobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0
YSgpLCAwLCBMT0FEX1dJVEhfQUxURVJFRF9TRUFSQ0hfUEFUSCk7CisKKyAgICAgICAgaWYgKCE6
OlNldEN1cnJlbnREaXJlY3RvcnlXKGN1cnJlbnRQYXRoKSkgeworICAgICAgICAgICAgaWYgKG1f
bW9kdWxlKQorICAgICAgICAgICAgICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1bGUpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX21vZHVs
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAg
ICBOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIgTlBfR2V0RW50cnlQb2ludHMgPSAwOworICAgIE5Q
X0luaXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxpemUgPSAwOworICAgIE5QRXJyb3IgbnBFcnI7
CisKKyAgICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRy
ZXNzKG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIpOworICAgIE5QX0dldEVudHJ5UG9pbnRzID0g
KE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0dl
dEVudHJ5UG9pbnRzIik7CisgICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0
cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX1NodXRkb3duIik7CisKKyAgICBpZiAoIU5Q
X0luaXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93bikKKyAg
ICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9m
KG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVn
aW5GdW5jcyk7CisKKyAgICBucEVyciA9IE5QX0dldEVudHJ5UG9pbnRzKCZtX3BsdWdpbkZ1bmNz
KTsKKyAgICBMT0dfTlBFUlJPUihucEVycik7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VS
Uk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygp
OworCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcyk7CisgICAgTE9H
X05QRVJST1IobnBFcnIpOworCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAg
ICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsK
KworYWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QKK3sgCisgICAgY29u
c3QgdW5zaWduZWQgaGFzaENvZGVzW10gPSB7CisgICAgICAgIG1fbmFtZS5pbXBsKCktPmhhc2go
KSwKKyAgICAgICAgbV9kZXNjcmlwdGlvbi5pbXBsKCktPmhhc2goKSwKKyAgICAgICAgbV9taW1l
VG9FeHRlbnNpb25zLnNpemUoKQorICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpo
YXNoTWVtb3J5PHNpemVvZihoYXNoQ29kZXMpPihoYXNoQ29kZXMpOworfQorCitib29sIFBsdWdp
blBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2th
Z2UmIGIpCit7CisgICAgaWYgKGEubV9uYW1lICE9IGIubV9uYW1lKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoYS5tX2Rlc2NyaXB0aW9uICE9IGIubV9kZXNjcmlwdGlvbikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGEubV9taW1lVG9FeHRlbnNpb25zLnNpemUo
KSAhPSBiLm1fbWltZVRvRXh0ZW5zaW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IGEu
bV9taW1lVG9FeHRlbnNpb25zLmVuZCgpLmtleXMoKTsKKyAgICBmb3IgKE1JTUVUb0V4dGVuc2lv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gYS5tX21pbWVUb0V4dGVuc2lvbnMuYmVn
aW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoIWIubV9taW1lVG9F
eHRlbnNpb25zLmNvbnRhaW5zKCppdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3VpbnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVy
c2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIE5QX1ZFUlNJT05fTUlOT1I7Cit9Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblF1aXJrU2V0LmggYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDlhMzM4
M2RiYjQ0NjkwOTk0MDdkNmJkYTEyM2QxMDFkY2I1ZDM4NAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApAQCAtMCwwICsxLDY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUGx1Z2luUXVpcmtTZXRfaAorI2RlZmluZSBQbHVnaW5RdWlya1NldF9oCisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisgICAgZW51bSBQbHVnaW5RdWlyayB7CisgICAgICAgIFBsdWdpblF1
aXJrV2FudHNNb3ppbGxhVXNlckFnZW50ID0gMSA8PCAwLAorICAgICAgICBQbHVnaW5RdWlya0Rl
ZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0gMSA8PCAxLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90
dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwgCisgICAgICAgIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93
bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVXTVVz
ZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8IDQsCisgICAgICAgIFBsdWdpblF1aXJrRG9udFVubG9h
ZFBsdWdpbiA9IDEgPDwgNSwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JT
YW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0gMSA8PCA2LAorICAgICAgICBQbHVnaW5RdWlya0hhc01v
ZGFsTWVzc2FnZUxvb3AgPSAxIDw8IDcsCisgICAgICAgIFBsdWdpblF1aXJrRmxhc2hVUkxOb3Rp
ZnlCdWcgPSAxIDw8IDgsCisgICAgICAgIFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hl
blNjcm9sbGluZyA9IDEgPDwgOSwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRv
d0hhbmRsZU9uRGVzdHJveSA9IDEgPDwgMTAsCisgICAgICAgIFBsdWdpblF1aXJrRG9udEFsbG93
TXVsdGlwbGVJbnN0YW5jZXMgPSAxIDw8IDExLAorICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVz
R3RrVG9vbEtpdCA9IDEgPDwgMTIsCisgICAgICAgIFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0
U2NyZWVuRGVwdGggPSAxIDw8IDEzLAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsU2V0V2lu
ZG93TW9yZVRoYW5PbmNlID0gMSA8PCAxNCwKKyAgICAgICAgUGx1Z2luUXVpcmtJZ25vcmVSaWdo
dENsaWNrSW5XaW5kb3dsZXNzTW9kZSA9IDEgPDwgMTUsCisgICAgICAgIFBsdWdpblF1aXJrV2Fu
dHNDaHJvbWVVc2VyQWdlbnQgPSAxIDw8IDE2CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpblF1
aXJrU2V0IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgUGx1Z2luUXVpcmtTZXQoKSA6
IG1fcXVpcmtzKDApIHsgfQorICAgICAgICAgICAgdm9pZCBhZGQoUGx1Z2luUXVpcmsgcXVpcmsp
IHsgbV9xdWlya3MgfD0gcXVpcms7IH0KKyAgICAgICAgICAgIGJvb2wgY29udGFpbnMoUGx1Z2lu
UXVpcmsgcXVpcmspIGNvbnN0IHsgcmV0dXJuIG1fcXVpcmtzICYgcXVpcms7IH0KKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIHVuc2lnbmVkIG1fcXVpcmtzOworICAgIH07CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBsdWdpblF1aXJrU2V0X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OWI5YjEyMGYx
ZjQyMGM2YjRhN2M2YmZmMDA3NjMzMDBiNTU4MjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCkBAIC0wLDAgKzEsNDgyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW0uaCIKKworI2lu
Y2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgorI2luY2x1ZGUgIlBs
dWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworLy8gV2UgdXNlIC0yIGhlcmUgYmVjYXVzZSBzb21lIHBsdWdpbnMgbGlr
ZSB0byByZXR1cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3IKKy8vIGFuZCB0aGlzIHdheSB3ZSB3b24n
dCBjbGFzaCB3aXRoIHRoZW0uCitzdGF0aWMgY29uc3QgaW50IFdlYlJlYXNvbk5vbmUgPSAtMjsK
KwordXNpbmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit0eXBlZGVmIEhhc2hNYXA8TlBTdHJlYW0qLCBOUFA+IFN0cmVhbU1hcDsKK3N0YXRpYyBT
dHJlYW1NYXAmIHN0cmVhbXMoKQoreworICAgIHN0YXRpYyBTdHJlYW1NYXAgc3RhdGljU3RyZWFt
czsKKyAgICByZXR1cm4gc3RhdGljU3RyZWFtczsKK30KKworUGx1Z2luU3RyZWFtOjpQbHVnaW5T
dHJlYW0oUGx1Z2luU3RyZWFtQ2xpZW50KiBjbGllbnQsIEZyYW1lKiBmcmFtZSwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9p
ZCogbm90aWZ5RGF0YSwgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MsIE5QUCBpbnN0
YW5jZSwgY29uc3QgUGx1Z2luUXVpcmtTZXQmIHF1aXJrcykKKyAgICA6IG1fcmVzb3VyY2VSZXF1
ZXN0KHJlc291cmNlUmVxdWVzdCkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fZnJh
bWUoZnJhbWUpCisgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKKyAgICAsIG1fc2VuZE5v
dGlmaWNhdGlvbihzZW5kTm90aWZpY2F0aW9uKQorICAgICwgbV9zdHJlYW1TdGF0ZShTdHJlYW1C
ZWZvcmVTdGFydGVkKQorICAgICwgbV9sb2FkTWFudWFsbHkoZmFsc2UpCisgICAgLCBtX2RlbGF5
RGVsaXZlcnlUaW1lcigqdGhpcywgJlBsdWdpblN0cmVhbTo6ZGVsYXlEZWxpdmVyeVRpbWVyRmly
ZWQpCisgICAgLCBtX3RlbXBGaWxlSGFuZGxlKGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisg
ICAgLCBtX3BsdWdpbkZ1bmNzKHBsdWdpbkZ1bmNzKQorICAgICwgbV9pbnN0YW5jZShpbnN0YW5j
ZSkKKyAgICAsIG1fcXVpcmtzKHF1aXJrcykKK3sKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7CisK
KyAgICBtX3N0cmVhbS51cmwgPSAwOworICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICBtX3N0
cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0uZW5kID0gMDsKKyAgICBtX3N0cmVhbS5ub3Rp
ZnlEYXRhID0gMDsKKyAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSAwOworICAgIG1fc3RyZWFt
LmhlYWRlcnMgPSAwOworCisgICAgc3RyZWFtcygpLmFkZCgmbV9zdHJlYW0sIG1faW5zdGFuY2Up
OworfQorCitQbHVnaW5TdHJlYW06On5QbHVnaW5TdHJlYW0oKQoreworICAgIEFTU0VSVChtX3N0
cmVhbVN0YXRlICE9IFN0cmVhbVN0YXJ0ZWQpOworICAgIEFTU0VSVCghbV9sb2FkZXIpOworCisg
ICAgZmFzdEZyZWUoKGNoYXIqKW1fc3RyZWFtLnVybCk7CisKKyAgICBzdHJlYW1zKCkucmVtb3Zl
KCZtX3N0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydCgpCit7CisgICAgQVNT
RVJUKCFtX2xvYWRNYW51YWxseSk7CisgICAgbV9sb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKS0+c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKG1fZnJhbWUsIHRoaXMsIG1fcmVzb3VyY2VS
ZXF1ZXN0KTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OnN0b3AoKQoreworICAgIG1fc3RyZWFt
U3RhdGUgPSBTdHJlYW1TdG9wcGVkOworCisgICAgaWYgKG1fbG9hZE1hbnVhbGx5KSB7CisgICAg
ICAgIEFTU0VSVCghbV9sb2FkZXIpOworCisgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVu
dExvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpLmFjdGl2ZURvY3VtZW50TG9hZGVyKCk7CisgICAg
ICAgIEFTU0VSVChkb2N1bWVudExvYWRlcik7CisKKyAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVy
LT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkKKyAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5j
YW5jZWxNYWluUmVzb3VyY2VMb2FkKG1fZnJhbWUtPmxvYWRlcigpLmNhbmNlbGxlZEVycm9yKG1f
cmVzb3VyY2VSZXF1ZXN0KSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X2xvYWRlcikgeworICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgICAgIG1fbG9hZGVy
ID0gMDsKKyAgICB9CisKKyAgICBtX2NsaWVudCA9IDA7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBs
YXN0TW9kaWZpZWREYXRlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAg
IGRvdWJsZSBsYXN0TW9kaWZpZWQgPSByZXNwb25zZS5sYXN0TW9kaWZpZWQoKTsKKyAgICBpZiAo
IXN0ZDo6aXNmaW5pdGUobGFzdE1vZGlmaWVkKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gbGFzdE1vZGlmaWVkICogMTAwMDsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0
U3RyZWFtKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFy
dGVkKTsKKworICAgIGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwgPSBtX3Jlc291cmNlUmVzcG9uc2Uu
dXJsKCk7CisKKyAgICAvLyBTb21lIHBsdWdpbnMgKEZsYXNoKSBleHBlY3QgdGhhdCBqYXZhc2Ny
aXB0IFVSTHMgYXJlIHBhc3NlZCBiYWNrIGRlY29kZWQgYXMgdGhpcyBpcyB0aGUKKyAgICAvLyBm
b3JtYXQgdXNlZCB3aGVuIHJlcXVlc3RpbmcgdGhlIFVSTC4KKyAgICBpZiAocHJvdG9jb2xJc0ph
dmFTY3JpcHQocmVzcG9uc2VVUkwpKQorICAgICAgICBtX3N0cmVhbS51cmwgPSBmYXN0U3RyRHVw
KGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhyZXNwb25zZVVSTC5zdHJpbmcoKSkudXRmOCgpLmRh
dGEoKSk7CisgICAgZWxzZQorICAgICAgICBtX3N0cmVhbS51cmwgPSBmYXN0U3RyRHVwKHJlc3Bv
bnNlVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgQ1N0cmluZyBtaW1lVHlwZVN0
ciA9IG1fcmVzb3VyY2VSZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKTsKKworICAgIGxvbmcgbG9u
ZyBleHBlY3RlZENvbnRlbnRMZW5ndGggPSBtX3Jlc291cmNlUmVzcG9uc2UuZXhwZWN0ZWRDb250
ZW50TGVuZ3RoKCk7CisKKyAgICBpZiAobV9yZXNvdXJjZVJlc3BvbnNlLmlzSFRUUCgpKSB7Cisg
ICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgU3RyaW5nIHNlcGFy
YXRvciA9IEFTQ0lJTGl0ZXJhbCgiOiAiKTsKKworICAgICAgICBTdHJpbmcgc3RhdHVzTGluZSA9
ICJIVFRQICIgKyBTdHJpbmc6Om51bWJlcihtX3Jlc291cmNlUmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSkgKyAiIE9LXG4iOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzdGF0dXNMaW5l
KTsKKworICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291
cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOworICAgICAgICBmb3IgKEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFk
ZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoc2VwYXJhdG9yKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1
ZSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgfQor
CisgICAgICAgIG1faGVhZGVycyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisK
KyAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMgZW5jb2RlZCAobW9zdCBsaWtlbHkgY29tcHJl
c3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMgbGVuZ3RoIHRvIHRoZSBwbHVnaW4sCisgICAgICAg
IC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZGVjb2RlZCBsZW5ndGgsIG5vdCB5
ZXQga25vd24gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ0NzA1
OTk+IHRyYWNrcyBhIHJlcXVlc3QgZm9yIC1bTlNVUkxSZXNwb25zZSBleHBlY3RlZENvbnRlbnRM
ZW5ndGhdIHRvIGluY29ycG9yYXRlIHRoaXMgbG9naWMuCisgICAgICAgIFN0cmluZyBjb250ZW50
RW5jb2RpbmcgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpDb250ZW50RW5jb2RpbmcpOworICAgICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5pc051
bGwoKSAmJiBjb250ZW50RW5jb2RpbmcgIT0gImlkZW50aXR5IikKKyAgICAgICAgICAgIGV4cGVj
dGVkQ29udGVudExlbmd0aCA9IC0xOworICAgIH0KKworICAgIG1fc3RyZWFtLmhlYWRlcnMgPSBt
X2hlYWRlcnMuZGF0YSgpOworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5u
ZGF0YSA9IHRoaXM7CisgICAgbV9zdHJlYW0uZW5kID0gbWF4KGV4cGVjdGVkQ29udGVudExlbmd0
aCwgMExMKTsKKyAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSBsYXN0TW9kaWZpZWREYXRlKG1f
cmVzb3VyY2VSZXNwb25zZSk7CisgICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9IG1fbm90aWZ5RGF0
YTsKKworICAgIG1fdHJhbnNmZXJNb2RlID0gTlBfTk9STUFMOworICAgIG1fb2Zmc2V0ID0gMDsK
KyAgICBtX3JlYXNvbiA9IFdlYlJlYXNvbk5vbmU7CisKKyAgICAvLyBQcm90ZWN0IHRoZSBzdHJl
YW0gaWYgZGVzdHJveXN0cmVhbSBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG5ld3N0cmVhbSBo
YW5kbGVyCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKKworICAgIC8v
IGNhbGxpbmcgaW50byBhIHBsdWctaW4gY291bGQgcmVzdWx0IGluIHJlLWVudHJhbmNlIGlmIHRo
ZSBwbHVnLWluIHlpZWxkcworICAgIC8vIGNvbnRyb2wgdG8gdGhlIHN5c3RlbSAocmRhcjovLzU3
NDQ4OTkpLiBwcmV2ZW50IHRoaXMgYnkgZGVmZXJyaW5nIGZ1cnRoZXIKKyAgICAvLyBsb2FkaW5n
IHdoaWxlIGNhbGxpbmcgaW50byB0aGUgcGx1Zy1pbi4KKyAgICBpZiAobV9sb2FkZXIpCisgICAg
ICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOworICAgIE5QRXJyb3IgbnBFcnIg
PSBtX3BsdWdpbkZ1bmNzLT5uZXdzdHJlYW0obV9pbnN0YW5jZSwgKE5QTUlNRVR5cGUpbWltZVR5
cGVTdHIuZGF0YSgpLCAmbV9zdHJlYW0sIGZhbHNlLCAmbV90cmFuc2Zlck1vZGUpOworICAgIGlm
IChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwor
ICAgIAorICAgIC8vIElmIHRoZSBzdHJlYW0gd2FzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbCB0byBu
ZXdzdHJlYW0gd2UgcmV0dXJuCisgICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpCisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9S
KSB7CisgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0obnBFcnIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0YXJ0ZWQ7CisKKyAgICBp
ZiAobV90cmFuc2Zlck1vZGUgPT0gTlBfTk9STUFMKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3BhdGggPSBvcGVuVGVtcG9yYXJ5RmlsZSgiV0tQIiwgbV90ZW1wRmlsZUhhbmRsZSk7CisKKyAg
ICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZywgY2FuY2VsIGxvYWRpbmcgdGhlIHN0cmVhbQorICAg
IGlmICghaXNIYW5kbGVWYWxpZChtX3RlbXBGaWxlSGFuZGxlKSkKKyAgICAgICAgY2FuY2VsQW5k
RGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Cit9CisKK05QUCBQbHVnaW5TdHJlYW06
Om93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHN0cmVhbXMo
KS5nZXQoc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmNhbmNlbEFuZERlc3Ryb3lT
dHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3Rl
Y3QodGhpcyk7CisKKyAgICBkZXN0cm95U3RyZWFtKHJlYXNvbik7CisgICAgc3RvcCgpOworfQor
Cit2b2lkIFBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbShOUFJlYXNvbiByZWFzb24pCit7Cisg
ICAgbV9yZWFzb24gPSByZWFzb247CisgICAgaWYgKG1fcmVhc29uICE9IE5QUkVTX0RPTkUpIHsK
KyAgICAgICAgLy8gU3RvcCBhbnkgcGVuZGluZyBkYXRhIGZyb20gYmVpbmcgc3RyZWFtZWQKKyAg
ICAgICAgaWYgKG1fZGVsaXZlcnlEYXRhKQorICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJl
c2l6ZSgwKTsKKyAgICB9IGVsc2UgaWYgKG1fZGVsaXZlcnlEYXRhICYmIG1fZGVsaXZlcnlEYXRh
LT5zaXplKCkgPiAwKSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG1vcmUgZGF0YSB0byBiZSBzdHJl
YW1lZCwgZG9uJ3QgZGVzdHJveSB0aGUgc3RyZWFtIG5vdy4KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBkZXN0cm95U3RyZWFtKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpkZXN0cm95
U3RyZWFtKCkKK3sKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSk7Cisg
ICAgQVNTRVJUKCFtX2RlbGl2ZXJ5RGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDAp
OworCisgICAgY2xvc2VGaWxlKG1fdGVtcEZpbGVIYW5kbGUpOworCisgICAgYm9vbCBuZXdTdHJl
YW1DYWxsZWQgPSBtX3N0cmVhbS5uZGF0YTsKKworICAgIC8vIFByb3RlY3QgZnJvbSBkZXN0cnVj
dGlvbiBpZjoKKyAgICAvLyAgTlBOX0Rlc3Ryb3lTdHJlYW0gaXMgY2FsbGVkIGZyb20gTlBQX05l
d1N0cmVhbSBvcgorICAgIC8vICBQbHVnaW5TdHJlYW1DbGllbnQ6OnN0cmVhbURpZEZpbmlzaExv
YWRpbmcoKSByZW1vdmVzIHRoZSBsYXN0IHJlZmVyZW5jZQorICAgIFJlZlB0cjxQbHVnaW5TdHJl
YW0+IHByb3RlY3QodGhpcyk7CisKKyAgICBpZiAobmV3U3RyZWFtQ2FsbGVkKSB7CisgICAgICAg
IGlmIChtX3JlYXNvbiA9PSBOUFJFU19ET05FICYmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJ
TEUgfHwgbV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFT05MWSkpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghbV9wYXRoLmlzTnVsbCgpKTsKKworICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQorICAg
ICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOworICAgICAgICAg
ICAgbV9wbHVnaW5GdW5jcy0+YXNmaWxlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9wYXRoLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICAgICAgICAg
IG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpIHsKKyAgICAgICAgICAg
IGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGlu
Zyh0cnVlKTsKKworICAgICAgICAgICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luRnVuY3MtPmRl
c3Ryb3lzdHJlYW0obV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX3JlYXNvbik7CisKKyAgICAgICAg
ICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9h
ZGluZyhmYWxzZSk7CisKKyAgICAgICAgICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9zZW5k
Tm90aWZpY2F0aW9uKSB7CisgICAgICAgIC8vIEZsYXNoIDkgY2FuIGRlcmVmZXJlbmNlIG51bGwg
aWYgd2UgY2FsbCBOUFBfVVJMTm90aWZ5IHdpdGhvdXQgZmlyc3QgY2FsbGluZyBOUFBfTmV3U3Ry
ZWFtCisgICAgICAgIC8vIGZvciByZXF1ZXN0cyBtYWRlIHdpdGggTlBOX1Bvc3RVUkxOb3RpZnk7
IHNlZSA8cmRhcjovLzU1ODg4MDc+CisgICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAg
IG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOworICAgICAgICBpZiAoIW5ld1N0cmVh
bUNhbGxlZCAmJiBtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVn
KSAmJgorICAgICAgICAgICAgZXF1YWxJZ25vcmluZ0Nhc2UobV9yZXNvdXJjZVJlcXVlc3QuaHR0
cE1ldGhvZCgpLCAiUE9TVCIpKSB7CisgICAgICAgICAgICBtX3RyYW5zZmVyTW9kZSA9IE5QX05P
Uk1BTDsKKyAgICAgICAgICAgIG1fc3RyZWFtLnVybCA9ICIiOworICAgICAgICAgICAgbV9zdHJl
YW0ubm90aWZ5RGF0YSA9IG1fbm90aWZ5RGF0YTsKKworICAgICAgICAgICAgc3RhdGljIGNoYXIg
ZW1wdHlNaW1lVHlwZVtdID0gIiI7CisgICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5uZXdzdHJl
YW0obV9pbnN0YW5jZSwgZW1wdHlNaW1lVHlwZSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNm
ZXJNb2RlKTsKKyAgICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPmRlc3Ryb3lzdHJlYW0obV9pbnN0
YW5jZSwgJm1fc3RyZWFtLCBtX3JlYXNvbik7CisKKyAgICAgICAgICAgIC8vIGluIHN1Y2Nlc3Nm
dWwgcmVxdWVzdHMsIHRoZSBVUkwgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBmcmVlZCBp
biBvdXIKKyAgICAgICAgICAgIC8vIGRlc3RydWN0b3IsIHNvIHJlc2V0IGl0IHRvIDAKKyAgICAg
ICAgICAgIG1fc3RyZWFtLnVybCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbV9wbHVnaW5GdW5j
cy0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIG1fcmVhc29uLCBtX25vdGlmeURhdGEpOworICAgICAgICBpZiAobV9s
b2FkZXIpCisgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Cisg
ICAgfQorCisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICBpZiAoIW1f
bG9hZE1hbnVhbGx5ICYmIG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c3RyZWFtRGlkRmlu
aXNoTG9hZGluZyh0aGlzKTsKKworICAgIGlmICghbV9wYXRoLmlzTnVsbCgpKQorICAgICAgICBk
ZWxldGVGaWxlKG1fcGF0aCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpkZWxheURlbGl2ZXJ5
VGltZXJGaXJlZCgpCit7CisgICAgZGVsaXZlckRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5TdHJl
YW06OmRlbGl2ZXJEYXRhKCkKK3sKKyAgICBBU1NFUlQobV9kZWxpdmVyeURhdGEpOworICAgIAor
ICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgY2FuY2VsIG91ciBqb2IgaW4gdGhlIFN1YnJlc291cmNlTG9hZGVyIG9uIGVy
cm9yIHNvIHdlIGRvbid0IHJlYWNoIHRoaXMgY2FzZQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIGlmICgh
bV9zdHJlYW0ubmRhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnQzMl90IHRvdGFsQnl0ZXMgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgp
OworICAgIGludDMyX3QgdG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7CisKKyAgICBpZiAobV9sb2Fk
ZXIpCisgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOworICAgIHdoaWxl
ICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICBpbnQzMl90IGRl
bGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53cml0ZXJlYWR5KG1faW5zdGFuY2UsICZtX3N0
cmVhbSk7CisKKyAgICAgICAgaWYgKGRlbGl2ZXJ5Qnl0ZXMgPD0gMCkgeworICAgICAgICAgICAg
bV9kZWxheURlbGl2ZXJ5VGltZXIuc3RhcnRPbmVTaG90KDApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2
ZXJ5Qnl0ZXMsIHRvdGFsQnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkKTsKKyAgICAgICAgICAg
IGludDMyX3QgZGF0YUxlbmd0aCA9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgICAgICBjaGFyKiBk
YXRhID0gbV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7CisKKyAg
ICAgICAgICAgIC8vIFdyaXRlIHRoZSBkYXRhCisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0g
bV9wbHVnaW5GdW5jcy0+d3JpdGUobV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX29mZnNldCwgZGF0
YUxlbmd0aCwgKHZvaWQqKWRhdGEpOworICAgICAgICAgICAgaWYgKGRlbGl2ZXJ5Qnl0ZXMgPCAw
KSB7CisgICAgICAgICAgICAgICAgTE9HX1BMVUdJTl9ORVRfRVJST1IoKTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZl
cnNMb2FkaW5nKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFt
KE5QUkVTX05FVFdPUktfRVJSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIGRhdGFM
ZW5ndGgpOworICAgICAgICAgICAgbV9vZmZzZXQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAg
ICAgIHRvdGFsQnl0ZXNEZWxpdmVyZWQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5n
KGZhbHNlKTsKKworICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkID4gMCkgeworICAgICAgICBp
ZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgICAgIGludCBy
ZW1haW5pbmdCeXRlcyA9IHRvdGFsQnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkOworICAgICAg
ICAgICAgbWVtbW92ZShtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpLCBtX2RlbGl2ZXJ5RGF0YS0+ZGF0
YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZCwgcmVtYWluaW5nQnl0ZXMpOworICAgICAgICAgICAg
bV9kZWxpdmVyeURhdGEtPnJlc2l6ZShyZW1haW5pbmdCeXRlcyk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKDApOworICAgICAgICAgICAgaWYg
KG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpCisgICAgICAgICAgICAgICAgZGVzdHJveVN0cmVh
bSgpOworICAgICAgICB9CisgICAgfSAKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OnNlbmRKYXZh
U2NyaXB0U3RyZWFtKGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwgY29uc3QgQ1N0cmluZyYgcmVzdWx0
U3RyaW5nKQoreworICAgIGRpZFJlY2VpdmVSZXNwb25zZSgwLCBSZXNvdXJjZVJlc3BvbnNlKHJl
cXVlc3RVUkwsICJ0ZXh0L3BsYWluIiwgcmVzdWx0U3RyaW5nLmxlbmd0aCgpLCAiIikpOworCisg
ICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFyZXN1bHRTdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgZGlkUmVjZWl2ZURh
dGEoMCwgcmVzdWx0U3RyaW5nLmRhdGEoKSwgcmVzdWx0U3RyaW5nLmxlbmd0aCgpKTsKKyAgICAg
ICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2xvYWRlciA9IDA7CisKKyAgICBkZXN0cm95U3RyZWFtKHJlc3Vs
dFN0cmluZy5pc051bGwoKSA/IE5QUkVTX05FVFdPUktfRVJSIDogTlBSRVNfRE9ORSk7Cit9CisK
K3ZvaWQgUGx1Z2luU3RyZWFtOjpkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7Cisg
ICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJU
KG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBtX3Jlc291cmNl
UmVzcG9uc2UgPSByZXNwb25zZTsKKworICAgIHN0YXJ0U3RyZWFtKCk7Cit9CisKK3ZvaWQgUGx1
Z2luU3RyZWFtOjpkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9h
ZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVF9VTlVTRUQo
bG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09
IFN0cmVhbVN0YXJ0ZWQpOworCisgICAgLy8gSWYgdGhlIHBsdWctaW4gY2FuY2VscyB0aGUgc3Ry
ZWFtIGluIGRlbGl2ZXJEYXRhIGl0IGNvdWxkIGJlIGRlbGV0ZWQsIAorICAgIC8vIHNvIHByb3Rl
Y3QgaXQgaGVyZS4KKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOworCisg
ICAgaWYgKG1fdHJhbnNmZXJNb2RlICE9IE5QX0FTRklMRU9OTFkpIHsKKyAgICAgICAgaWYgKCFt
X2RlbGl2ZXJ5RGF0YSkKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxWZWN0b3I8Y2hhcj4+KCk7CisKKyAgICAgICAgaW50IG9sZFNpemUgPSBtX2RlbGl2ZXJ5
RGF0YS0+c2l6ZSgpOworICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKG9sZFNpemUgKyBs
ZW5ndGgpOworICAgICAgICBtZW1jcHkobV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIG9sZFNpemUs
IGRhdGEsIGxlbmd0aCk7CisKKyAgICAgICAgZGVsaXZlckRhdGEoKTsKKyAgICB9CisKKyAgICBp
ZiAobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1TdG9wcGVkICYmIGlzSGFuZGxlVmFsaWQobV90ZW1w
RmlsZUhhbmRsZSkpIHsKKyAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IHdyaXRlVG9GaWxlKG1f
dGVtcEZpbGVIYW5kbGUsIGRhdGEsIGxlbmd0aCk7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4g
IT0gbGVuZ3RoKQorICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRX
T1JLX0VSUik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGlkRmFpbChOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3sKKyAg
ICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKworICAgIExPR19Q
TFVHSU5fTkVUX0VSUk9SKCk7CisKKyAgICAvLyBkZXN0cm95U3RyZWFtIGNhbiByZXN1bHQgaW4g
b3VyIGJlaW5nIGRlbGV0ZWQKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMp
OworCisgICAgZGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7CisKKyAgICBtX2xvYWRl
ciA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIpCit7CisgICAgQVNTRVJUX1VOVVNFRChsb2FkZXIs
IGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFt
U3RhcnRlZCk7CisKKyAgICAvLyBkZXN0cm95U3RyZWFtIGNhbiByZXN1bHQgaW4gb3VyIGJlaW5n
IGRlbGV0ZWQKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOworCisgICAg
ZGVzdHJveVN0cmVhbShOUFJFU19ET05FKTsKKworICAgIG1fbG9hZGVyID0gMDsKK30KKworYm9v
bCBQbHVnaW5TdHJlYW06OndhbnRzQWxsU3RyZWFtcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Bs
dWdpbkZ1bmNzLT5nZXR2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdm9pZCog
cmVzdWx0ID0gMDsKKyAgICBpZiAobV9wbHVnaW5GdW5jcy0+Z2V0dmFsdWUobV9pbnN0YW5jZSwg
TlBQVnBsdWdpbldhbnRzQWxsTmV0d29ya1N0cmVhbXMsICZyZXN1bHQpICE9IE5QRVJSX05PX0VS
Uk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzdWx0ICE9IDA7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFt
LmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjIwMDMyYzRjMTkwNDUxMjJmNTZhY2VmNjMyZTU3ODE4YTE1YTliY2YKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5oCkBAIC0wLDAgKzEs
MTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luU3RyZWFtX2gKKyNkZWZpbmUgUGx1Z2luU3RyZWFt
X2gKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRl
ICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgorI2luY2x1ZGUgIlBsdWdpblF1aXJrU2V0
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFs
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWU7CisgICAg
Y2xhc3MgUGx1Z2luU3RyZWFtOworCisgICAgZW51bSBQbHVnaW5TdHJlYW1TdGF0ZSB7IFN0cmVh
bUJlZm9yZVN0YXJ0ZWQsIFN0cmVhbVN0YXJ0ZWQsIFN0cmVhbVN0b3BwZWQgfTsKKworICAgIGNs
YXNzIFBsdWdpblN0cmVhbUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5Q
bHVnaW5TdHJlYW1DbGllbnQoKSB7fQorICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmlu
aXNoTG9hZGluZyhQbHVnaW5TdHJlYW0qKSB7fQorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5T
dHJlYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5TdHJlYW0+LCBwcml2YXRlIE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFBsdWdpblN0cmVhbT4gY3JlYXRlKFBsdWdpblN0cmVhbUNsaWVudCogY2xpZW50
LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzZW5k
Tm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiBmdW5j
dGlvbnMsIE5QUCBpbnN0YW5jZSwgY29uc3QgUGx1Z2luUXVpcmtTZXQmIHF1aXJrcykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5TdHJlYW0oY2xpZW50
LCBmcmFtZSwgcmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwgZnVuY3Rpb25z
LCBpbnN0YW5jZSwgcXVpcmtzKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB+UGx1Z2lu
U3RyZWFtKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHN0YXJ0KCk7CisgICAgICAgIHZvaWQg
c3RvcCgpOworCisgICAgICAgIHZvaWQgc3RhcnRTdHJlYW0oKTsKKworICAgICAgICB2b2lkIHNl
dExvYWRNYW51YWxseShib29sIGxvYWRNYW51YWxseSkgeyBtX2xvYWRNYW51YWxseSA9IGxvYWRN
YW51YWxseTsgfQorCisgICAgICAgIHZvaWQgc2VuZEphdmFTY3JpcHRTdHJlYW0oY29uc3QgVVJM
JiByZXF1ZXN0VVJMLCBjb25zdCBXVEY6OkNTdHJpbmcmIHJlc3VsdFN0cmluZyk7CisgICAgICAg
IHZvaWQgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJlYXNvbik7CisKKyAgICAgICAgc3RhdGlj
IE5QUCBvd25lckZvclN0cmVhbShOUFN0cmVhbSopOworCisgICAgICAgIC8vIE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyQ2xpZW50CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmFpbChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXIqKTsKKyAgICAgICAgdmlydHVhbCBib29sIHdhbnRzQWxsU3RyZWFtcygpIGNvbnN0
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luU3RyZWFtKFBsdWdpblN0cmVhbUNsaWVu
dCosIEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9u
LCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiwgTlBQIGluc3RhbmNlLCBj
b25zdCBQbHVnaW5RdWlya1NldCYpOworCisgICAgICAgIHZvaWQgZGVsaXZlckRhdGEoKTsKKyAg
ICAgICAgdm9pZCBkZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKKyAgICAgICAgdm9pZCBkZXN0cm95
U3RyZWFtKCk7CisKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0Owor
ICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzb3VyY2VSZXNwb25zZTsKKworICAgICAgICBQ
bHVnaW5TdHJlYW1DbGllbnQqIG1fY2xpZW50OworICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAg
ICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBtX2xvYWRlcjsKKyAgICAg
ICAgdm9pZCogbV9ub3RpZnlEYXRhOworICAgICAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsK
KyAgICAgICAgUGx1Z2luU3RyZWFtU3RhdGUgbV9zdHJlYW1TdGF0ZTsKKyAgICAgICAgYm9vbCBt
X2xvYWRNYW51YWxseTsKKworICAgICAgICBUaW1lciBtX2RlbGF5RGVsaXZlcnlUaW1lcjsKKyAg
ICAgICAgdm9pZCBkZWxheURlbGl2ZXJ5VGltZXJGaXJlZCgpOworCisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxWZWN0b3I8Y2hhcj4+IG1fZGVsaXZlcnlEYXRhOworCisgICAgICAgIFBsYXRmb3Jt
RmlsZUhhbmRsZSBtX3RlbXBGaWxlSGFuZGxlOworCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVu
Y3MqIG1fcGx1Z2luRnVuY3M7CisgICAgICAgIE5QUCBtX2luc3RhbmNlOworICAgICAgICB1aW50
MTZfdCBtX3RyYW5zZmVyTW9kZTsKKyAgICAgICAgaW50MzJfdCBtX29mZnNldDsKKyAgICAgICAg
Q1N0cmluZyBtX2hlYWRlcnM7CisgICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAgICAgIE5QUmVh
c29uIG1fcmVhc29uOworICAgICAgICBOUFN0cmVhbSBtX3N0cmVhbTsKKyAgICAgICAgUGx1Z2lu
UXVpcmtTZXQgbV9xdWlya3M7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhlYjIyNWMwNGNjMWVlNDFkNTYyZWRiZDkyMGM5ZDI5NzU4ZWU0ZTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0wLDAgKzEs
MTQ4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAiQnJpZGdlSlNDLmgiCisjaW5jbHVk
ZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVFRQ
SGVhZGVyTmFtZXMuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50Lmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNp
bmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVs
ZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAiUHJveHlTZXJ2ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
KyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgi
CisjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKKyNpbmNs
dWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1
ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVl
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlw
ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgT1MoV0lORE9XUykg
JiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbi5oIgorI2VuZGlmCisKK3VzaW5nIEpTQzo6RXhlY1N0YXRlOwordXNpbmcgSlND
OjpKU0xvY2s7Cit1c2luZyBKU0M6OkpTT2JqZWN0OwordXNpbmcgSlNDOjpKU1ZhbHVlOworCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisKK3VzaW5nIHN0ZDo6bWluOworCit1c2lu
ZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CisKK3N0YXRpYyBpbnQgc19jYWxsaW5nUGx1Z2luOworCit0eXBlZGVmIEhh
c2hNYXA8TlBQLCBQbHVnaW5WaWV3Kj4gSW5zdGFuY2VNYXA7CisKK3N0YXRpYyBJbnN0YW5jZU1h
cCYgaW5zdGFuY2VNYXAoKQoreworICAgIHN0YXRpYyBJbnN0YW5jZU1hcCYgbWFwID0gKm5ldyBJ
bnN0YW5jZU1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgU3RyaW5nIHNjcmlwdFN0
cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAoIXByb3RvY29s
SXNKYXZhU2NyaXB0KHVybCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFRo
aXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDExKSk7Cit9CisKK1BsdWdpblZpZXcq
IFBsdWdpblZpZXc6OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOworCit2b2lkIFBsdWdpblZpZXc6
OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpCit7CisgICAgcG9wUG9wdXBzRW5hYmxlZFN0YXRl
KCk7Cit9CisKK0ludFJlY3QgUGx1Z2luVmlldzo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAorewor
ICAgIC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCisgICAgSW50UmVjdCBjbGlw
UmVjdChtX3dpbmRvd1JlY3QpOworICAgIAorICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5kIGdl
dCB0aGUgY2xpcCByZWN0IGZyb20gdGhlIGVuY2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmlldy4K
KyAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkudmlldygp
OworICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZvckZy
YW1lT3duZXIobV9lbGVtZW50LCB0cnVlKSk7CisKKyAgICByZXR1cm4gY2xpcFJlY3Q7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAocmVjdCAhPSBmcmFtZVJlY3QoKSkKKyAgICAgICAgV2lkZ2V0OjpzZXRGcmFt
ZVJlY3QocmVjdCk7CisKKyAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKKworI2lmIE9TKFdJTkRP
V1MpCisgICAgLy8gT24gV2luZG93cyBhbHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdlb21l
dHJ5LgorICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKKyNlbGlmIGRlZmluZWQoWFBfVU5JWCkK
KyAgICAvLyBPbiBVbml4LCBtdWx0aXBsZSBjYWxscyB0byBzZXROUFdpbmRvdygpIGluIHdpbmRv
d2VkIG1vZGUgY2F1c2VzIEZsYXNoIHRvIGNyYXNoCisgICAgaWYgKG1fbW9kZSA9PSBOUF9GVUxM
IHx8ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKKyNlbmRp
ZgorfQorCit2b2lkIFBsdWdpblZpZXc6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKK3sKKyAgICB1cGRh
dGVQbHVnaW5XaWRnZXQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQo
KQoreworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6Omhh
bmRsZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5k
b3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUHJvdGVjdCB0aGUgcGx1Zy1pbiBmcm9t
IGRlbGV0aW9uIHdoaWxlIGRpc3BhdGNoaW5nIHRoZSBldmVudC4KKyAgICBSZWZQdHI8UGx1Z2lu
Vmlldz4gcHJvdGVjdCh0aGlzKTsKKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisg
ICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7
CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBoYW5kbGVL
ZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOworI2lmIGRl
ZmluZWQoWFBfTUFDT1NYKQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVl
bEV2ZW50KQorICAgICAgICBoYW5kbGVXaGVlbEV2ZW50KHN0YXRpY19jYXN0PFdoZWVsRXZlbnQq
PihldmVudCkpOworI2VuZGlmCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuY29udGV4dG1lbnVFdmVudCkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7IC8vIFdlIGRvbid0IGtub3cgaWYgdGhlIHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vkb3du
IGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBjb250ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQgV2Vi
S2l0IHRvIHNob3cgYSBkZWZhdWx0IG9uZS4KKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmZvY3Vzb3V0RXZlbnQpCisgICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsK
KyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5mb2N1c2luRXZlbnQp
CisgICAgICAgIGhhbmRsZUZvY3VzSW5FdmVudCgpOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6aW5pdCgpCit7CisgICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGx1Z2lu
KSB7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1
Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6aW5pdCgpOiBJbml0aWFsaXppbmcgcGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5hbWUo
KS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAg
ICBtX3BsdWdpbiA9IDA7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9h
ZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnRPckFkZFRv
VW5zdGFydGVkTGlzdCgpKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3RhdHVzID0gUGx1
Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OworfQorCitib29sIFBsdWdpblZpZXc6OnN0YXJ0
T3JBZGRUb1Vuc3RhcnRlZExpc3QoKQoreworICAgIGlmICghbV9wYXJlbnRGcmFtZS0+cGFnZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBvbmx5IGRlbGF5IHN0YXJ0aW5n
IHRoZSBwbHVnLWluIGlmIHdlJ3JlIGdvaW5nIHRvIGtpY2sgb2ZmIHRoZSBsb2FkCisgICAgLy8g
b3Vyc2VsdmVzLiBPdGhlcndpc2UsIHRoZSBsb2FkZXIgd2lsbCB0cnkgdG8gZGVsaXZlciBkYXRh
IGJlZm9yZSB3ZSd2ZQorICAgIC8vIHN0YXJ0ZWQgdGhlIHBsdWctaW4uCisgICAgaWYgKCFtX2xv
YWRNYW51YWxseSAmJiAhbV9wYXJlbnRGcmFtZS0+cGFnZSgpLT5jYW5TdGFydE1lZGlhKCkpIHsK
KyAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3Rl
bmVyKHRoaXMpOworICAgICAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhcnQoKTsKK30KKworYm9vbCBQbHVn
aW5WaWV3OjpzdGFydCgpCit7CisgICAgaWYgKG1faXNTdGFydGVkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSBmYWxzZTsKKworICAgIFBsdWdpbk1h
aW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnJlZ2lzdGVyUGx1Z2luKG1faW5zdGFuY2Up
OworCisgICAgQVNTRVJUKG1fcGx1Z2luKTsKKyAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPm5ld3ApOworCisgICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwor
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBucEVyciA9IG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUudXRmOCgpLmRhdGEo
KSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3BhcmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9wYXJh
bVZhbHVlcywgTlVMTCk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgICAg
ICBMT0dfTlBFUlJPUihucEVycik7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KDApOworICAgIH0KKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikgewor
ICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAg
IFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnVucmVnaXN0ZXJQbHVnaW4o
bV9pbnN0YW5jZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2lzU3Rh
cnRlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFudWFs
bHkpIHsKKyAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgICAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtX3VybCk7CisgICAgICAg
IGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOworICAgIH0KKworICAgIG1fc3RhdHVz
ID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OworCisgICAgaWYgKCFwbGF0Zm9ybVN0
YXJ0KCkpCisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsK
KworICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdp
blZpZXc6Om1lZGlhQ2FuU3RhcnQoKQoreworICAgIEFTU0VSVCghbV9pc1N0YXJ0ZWQpOworICAg
IGlmICghc3RhcnQoKSkKKyAgICAgICAgcGFyZW50RnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50KCku
ZGlzcGF0Y2hEaWRGYWlsVG9TdGFydFBsdWdpbih0aGlzKTsKK30KKworUGx1Z2luVmlldzo6flBs
dWdpblZpZXcoKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6flBsdWdpblZpZXco
KSIpOworCisgICAgQVNTRVJUKCFtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7CisKKyAg
ICAvLyBJZiB3ZSBmYWlsZWQgdG8gZmluZCB0aGUgcGx1Zy1pbiwgd2UnbGwgcmV0dXJuIGVhcmx5
IGluIG91ciBjb25zdHJ1Y3RvciwgYW5kCisgICAgLy8gbV9pbnN0YW5jZSB3aWxsIGJlIDAuCisg
ICAgaWYgKG1faW5zdGFuY2UpCisgICAgICAgIGluc3RhbmNlTWFwKCkucmVtb3ZlKG1faW5zdGFu
Y2UpOworCisgICAgaWYgKG1faXNXYWl0aW5nVG9TdGFydCkKKyAgICAgICAgbV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworCisgICAg
c3RvcCgpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50
KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsKKwor
ICAgIHBsYXRmb3JtRGVzdHJveSgpOworCisgICAgbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY2xl
YW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYg
IShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2lu
KSkpCisgICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpz
dG9wKCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBM
T0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnN0b3AoKTogU3RvcHBpbmcgcGx1Zy1pbiAnJXMnIiwg
bV9wbHVnaW4tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIEhhc2hTZXQ8UmVmUHRyPFBs
dWdpblN0cmVhbT4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhhc2hTZXQ8UmVmUHRyPFBs
dWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0KS0+c3RvcCgpOworICAgICAgICBk
aXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9zdHJl
YW1zLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOworCisgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIGRlZmluZWQoWFBf
V0lOKSAmJiAhUExBVEZPUk0oR1RLKQorICAgIC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdworICAg
IGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChX
TkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQ
Uk9DKTsKKworICAgICAgICBpZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2Mp
CisgICAgICAgICAgICBTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdX
TFBfV05EUFJPQywgKExPTkdfUFRSKW1fcGx1Z2luV25kUHJvYyk7CisgICAgfQorI2VuZGlmIC8v
ICFkZWZpbmVkKFhQX1dJTikgfHwgUExBVEZPUk0oR1RLKQorI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQorCisjaWYgIWRlZmluZWQoWFBfTUFDT1NYKQorICAgIC8vIENsZWFy
IHRoZSB3aW5kb3cKKyAgICBtX25wV2luZG93LndpbmRvdyA9IDA7CisKKyAgICBpZiAobV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyAmJiAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRh
aW5zKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpKSB7CisgICAg
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0
d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bihmYWxzZSk7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwor
ICAgIH0KKworI2lmZGVmIFhQX1VOSVgKKyAgICBkZWxldGUgc3RhdGljX2Nhc3Q8TlBTZXRXaW5k
b3dDYWxsYmFja1N0cnVjdCo+KG1fbnBXaW5kb3cud3NfaW5mbyk7CisgICAgbV9ucFdpbmRvdy53
c19pbmZvID0gMDsKKyNlbmRpZgorCisjZW5kaWYgLy8gIWRlZmluZWQoWFBfTUFDT1NYKQorCisg
ICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBsdWdp
bihtX2luc3RhbmNlKTsKKworICAgIE5QU2F2ZWREYXRhKiBzYXZlZERhdGEgPSAwOworICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIHNldENhbGxpbmdQbHVn
aW4odHJ1ZSk7CisgICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5k
ZXN0cm95KG1faW5zdGFuY2UsICZzYXZlZERhdGEpOworICAgIHNldENhbGxpbmdQbHVnaW4oZmFs
c2UpOworICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50
UGx1Z2luVmlldygwKTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGlm
IChzYXZlZERhdGEpIHsKKyAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgc2F2ZSB0aGlzIGRhdGEg
aW5zdGVhZCBvZiBqdXN0IGRpc2NhcmRpbmcgaXQKKyAgICAgICAgaWYgKHNhdmVkRGF0YS0+YnVm
KQorICAgICAgICAgICAgTlBOX01lbUZyZWUoc2F2ZWREYXRhLT5idWYpOworICAgICAgICBOUE5f
TWVtRnJlZShzYXZlZERhdGEpOworICAgIH0KKyNlbmRpZgorCisgICAgbV9pbnN0YW5jZS0+cGRh
dGEgPSAwOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdp
blZpZXcqIHBsdWdpblZpZXcpCit7CisgICAgc19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdpblZp
ZXc7Cit9CisKK1BsdWdpblZpZXcqIFBsdWdpblZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCkKK3sK
KyAgICByZXR1cm4gc19jdXJyZW50UGx1Z2luVmlldzsKK30KKworc3RhdGljIGNoYXIqIGNyZWF0
ZVVURjhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCit7CisgICAgQ1N0cmluZyBjc3RyID0gc3Ry
LnV0ZjgoKTsKKyAgICBjb25zdCBzaXplX3QgY3N0ckxlbmd0aCA9IGNzdHIubGVuZ3RoKCk7Cisg
ICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjc3Ry
TGVuZ3RoICsgMSkpOworCisgICAgbWVtY3B5KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHJMZW5n
dGgpOworICAgIHJlc3VsdFtjc3RyTGVuZ3RoXSA9ICdcMCc7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIg
cGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCisgICAgLy8gZGlzcGxheWVkIHVubGVz
cyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCisgICAgY29u
c3QgU3RyaW5nJiB0YXJnZXRGcmFtZU5hbWUgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCku
ZnJhbWVOYW1lKCk7CisgICAgaWYgKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9h
ZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAm
JiAodGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS5maW5k
KHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJlbnRGcmFtZSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFVSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNl
UmVxdWVzdCgpLnVybCgpOworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2
YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKKworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1
cmVJbmRpY2F0b3IocmVxdWVzdC0+c2hvdWxkQWxsb3dQb3B1cHMoKSA/IERlZmluaXRlbHlQcm9j
ZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisKKyAg
ICBpZiAoanNTdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gaWYgdGhpcyBpcyBub3QgYSB0
YXJnZXRlZCByZXF1ZXN0LCBjcmVhdGUgYSBzdHJlYW0gZm9yIGl0LiBvdGhlcndpc2UsCisgICAg
ICAgIC8vIGp1c3QgcGFzcyBpdCBvZmYgdG8gdGhlIGxvYWRlcgorICAgICAgICBpZiAodGFyZ2V0
RnJhbWVOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4g
c3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwg
cmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5z
ZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdp
bkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7CisgICAgICAgICAgICBt
X3N0cmVhbXMuYWRkKHN0cmVhbSk7CisgICAgICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGZyYW1lIGlzIG91ciBm
cmFtZSwgd2UgY291bGQgZGVzdHJveSB0aGUKKyAgICAgICAgICAgIC8vIFBsdWdpblZpZXcsIHNv
IHdlIHByb3RlY3QgaXQuIDxyZGFyOi8vcHJvYmxlbS82OTkxMjUxPgorICAgICAgICAgICAgUmVm
UHRyPFBsdWdpblZpZXc+IHByb3RlY3QodGhpcyk7CisKKyAgICAgICAgICAgIEZyYW1lTG9hZFJl
cXVlc3QgZnJhbWVSZXF1ZXN0KG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9h
ZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSk7CisgICAgICAgICAgICBmcmFtZVJlcXVlc3Qu
c2V0RnJhbWVOYW1lKHRhcmdldEZyYW1lTmFtZSk7CisgICAgICAgICAgICBmcmFtZVJlcXVlc3Qu
c2V0U2hvdWxkQ2hlY2tOZXdXaW5kb3dQb2xpY3kodHJ1ZSk7CisgICAgICAgICAgICBtX3BhcmVu
dEZyYW1lLT5sb2FkZXIoKS5sb2FkKGZyYW1lUmVxdWVzdCk7CisKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVuIHRo
ZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZworICAgICAgICAgICAgaWYgKHJlcXVlc3Qt
PnNlbmROb3RpZmljYXRpb24oKSkgeworICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAg
ICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsK
KyAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGFyZ2V0ZWQgSmF2YVNj
cmlwdCByZXF1ZXN0cyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5z
IHRoZSBKYXZhU2NyaXB0IHBsdWdpbgorICAgIC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUgc3Vy
ZSBpbiA6OmxvYWQuCisgICAgQVNTRVJUKHRhcmdldEZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgbV9w
YXJlbnRGcmFtZS0+dHJlZSgpLmZpbmQodGFyZ2V0RnJhbWVOYW1lKSA9PSBtX3BhcmVudEZyYW1l
KTsKKyAgICAKKyAgICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4g
dmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gaXQuCisgICAg
UmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSByZXN1bHQgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5leGVjdXRlU2NyaXB0KGpz
U3RyaW5nLCByZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpKTsKKworICAgIGlmICh0YXJnZXRG
cmFtZU5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKKworICAg
ICAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQo
KS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgQ1N0
cmluZyBjc3RyOworICAgICAgICBpZiAocmVzdWx0LmdldFN0cmluZyhzY3JpcHRTdGF0ZSwgcmVz
dWx0U3RyaW5nKSkKKyAgICAgICAgICAgIGNzdHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOworCisg
ICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3JlYXRl
KHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5y
ZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5u
b3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3BsdWdp
bi0+cXVpcmtzKCkpOworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisgICAgICAgIHN0
cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0ocmVxdWVzdFVSTCwgY3N0cik7CisgICAgfQorfQor
Cit2b2lkIFBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKCkKK3sKKyAgICBBU1NFUlQoIW1f
cmVxdWVzdHMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1faXNKYXZhU2NyaXB0UGF1c2VkKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0ID0gV1RGOjptb3Zl
KG1fcmVxdWVzdHNbMF0pOworICAgIG1fcmVxdWVzdHMucmVtb3ZlKDApOworICAgIAorICAgIC8v
IFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVmb3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2lu
Y2UgdGhlIGNhbGwgdG8KKyAgICAvLyBwZXJmb3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdp
biB2aWV3IHRvIGJlIGRlbGV0ZWQuCisgICAgaWYgKCFtX3JlcXVlc3RzLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworCisgICAgcGVyZm9ybVJlcXVl
c3QocmVxdWVzdC5nZXQoKSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2NoZWR1bGVSZXF1ZXN0
KHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0KQoreworICAgIG1fcmVxdWVz
dHMuYXBwZW5kKFdURjo6bW92ZShyZXF1ZXN0KSk7CisKKyAgICBpZiAoIW1faXNKYXZhU2NyaXB0
UGF1c2VkKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK05Q
RXJyb3IgUGx1Z2luVmlldzo6bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRS
ZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAg
QVNTRVJUKGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09
ICJHRVQiIHx8IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgp
ID09ICJQT1NUIik7CisKKyAgICBVUkwgdXJsID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS51cmwoKTsKKyAgICAKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIE5QRVJSX0lOVkFMSURfVVJMOworCisgICAgLy8gRG9uJ3QgYWxsb3cgcmVxdWVzdHMgdG8g
YmUgbWFkZSB3aGVuIHRoZSBkb2N1bWVudCBsb2FkZXIgaXMgc3RvcHBpbmcgYWxsIGxvYWRlcnMu
CisgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmRv
Y3VtZW50TG9hZGVyKCk7CisgICAgaWYgKCFsb2FkZXIgfHwgbG9hZGVyLT5pc1N0b3BwaW5nKCkp
CisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgY29uc3QgU3RyaW5n
JiB0YXJnZXRGcmFtZU5hbWUgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgpOworICAgIFN0
cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwpOworCisgICAg
aWYgKCFqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4KKyAg
ICAgICAgaWYgKCFtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhOb3RB
Ym91dFRvRXhlY3V0ZVNjcmlwdCkpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsKKworICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBhbGxvdyBKUyBy
ZXF1ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVnLWlu
LgorICAgICAgICBpZiAoIXRhcmdldEZyYW1lTmFtZS5pc051bGwoKSAmJiBtX3BhcmVudEZyYW1l
LT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUpICE9IG1fcGFyZW50RnJhbWUpCisgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICB9IGVsc2UgaWYgKCFtX3BhcmVu
dEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNwbGF5KHVybCkpCisg
ICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgc2NoZWR1bGVSZXF1ZXN0
KHN0ZDo6bWFrZV91bmlxdWU8UGx1Z2luUmVxdWVzdD4oZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5v
dGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwgYXJlUG9wdXBzQWxsb3dlZCgpKSk7CisKKyAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK3N0YXRpYyBVUkwgbWFrZVVSTChjb25zdCBVUkwmIGJh
c2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMU3RyaW5nKQoreworICAgIFN0cmluZyB1cmxT
dHJpbmcgPSByZWxhdGl2ZVVSTFN0cmluZzsKKworICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0
ZXJzLgorICAgIHVybFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJ1xuJywgIiIpOworICAgIHVy
bFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJ1xyJywgIiIpOworCisgICAgcmV0dXJuIFVSTChi
YXNlVVJMLCB1cmxTdHJpbmcpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmdldFVSTE5vdGlm
eShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkK
K3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNl
dEZyYW1lTmFtZSh0YXJnZXQpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0
KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJM
KCksIHVybCkpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwgbm90
aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0KQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2Fk
UmVxdWVzdChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKwor
ICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2Fk
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFt
ZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50RnJh
bWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFt
ZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6cG9zdFVS
TE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVu
LCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAg
IHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0
YSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6cG9zdFVSTChjb25zdCBj
aGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBi
dWYsIE5QQm9vbCBmaWxlKQoreworICAgIC8vIEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cgaGVh
ZGVycyB0byBiZSBzcGVjaWZpZWQgdmlhIE5QUF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxlLgor
ICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwgZmFs
c2UsIGZpbGUpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6Om5ld1N0cmVhbShOUE1JTUVUeXBl
LCBjb25zdCBjaGFyKiAvKiB0YXJnZXQgKi8sIE5QU3RyZWFtKiopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOworfQorCitpbnQzMl90IFBsdWdpblZpZXc6OndyaXRlKE5QU3RyZWFtKiwgaW50MzJfdCAv
KiBsZW4gKi8sIHZvaWQqIC8qIGJ1ZmZlciAqLykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIC0xOworfQorCitOUEVycm9yIFBsdWdpblZp
ZXc6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQorewor
ICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0cmVhbTo6b3duZXJGb3JTdHJlYW0oc3RyZWFtKSAh
PSBtX2luc3RhbmNlKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJP
UjsKKworICAgIFBsdWdpblN0cmVhbSogYnJvd3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBsdWdp
blN0cmVhbSo+KHN0cmVhbS0+bmRhdGEpOworICAgIGJyb3dzZXJTdHJlYW0tPmNhbmNlbEFuZERl
c3Ryb3lTdHJlYW0ocmVhc29uKTsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAo
UGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21l
KCkuc2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLmdldCgpLCBTdHJpbmc6OmZyb21VVEY4
KG1lc3NhZ2UpKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZShOUFBWYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3
OjpzZXRWYWx1ZSglcyk6ICIsIHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSh2YXJpYWJsZSwgdmFs
dWUpLmRhdGEoKSk7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUFBWcGx1
Z2luV2luZG93Qm9vbDoKKyAgICAgICAgbV9pc1dpbmRvd2VkID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6
CisgICAgICAgIG1faXNUcmFuc3BhcmVudCA9IHZhbHVlOworICAgICAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7CisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgY2FzZSBOUFBWcGx1Z2luRHJh
d2luZ01vZGVsOiB7CisgICAgICAgIC8vIENhbiBvbmx5IHNldCBkcmF3aW5nIG1vZGVsIGluc2lk
ZSBOUFBfTmV3KCkKKyAgICAgICAgaWYgKHRoaXMgIT0gY3VycmVudFBsdWdpblZpZXcoKSkKKyAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBEcmF3aW5n
TW9kZWwgbmV3RHJhd2luZ01vZGVsID0gTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVlKSk7
CisgICAgICAgIHN3aXRjaCAobmV3RHJhd2luZ01vZGVsKSB7CisgICAgICAgIGNhc2UgTlBEcmF3
aW5nTW9kZWxDb3JlR3JhcGhpY3M6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7
CisgICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uOgorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW4gYXNrZWQgZm9yIHVuc3VwcG9y
dGVkIGRyYXdpbmcgbW9kZWw6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgcHJldHR5TmFtZUZv
ckRyYXdpbmdNb2RlbChuZXdEcmF3aW5nTW9kZWwpKTsKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9HRU5FUklDX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgY2FzZSBOUFBWcGx1Z2lu
RXZlbnRNb2RlbDogeworICAgICAgICAvLyBDYW4gb25seSBzZXQgZXZlbnQgbW9kZWwgaW5zaWRl
IE5QUF9OZXcoKQorICAgICAgICBpZiAodGhpcyAhPSBjdXJyZW50UGx1Z2luVmlldygpKQorICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICBOUEV2ZW50TW9k
ZWwgbmV3RXZlbnRNb2RlbCA9IE5QRXZlbnRNb2RlbCh1aW50cHRyX3QodmFsdWUpKTsKKyAgICAg
ICAgc3dpdGNoIChuZXdFdmVudE1vZGVsKSB7CisgICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29j
b2E6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBhc2tlZCBmb3IgdW5zdXBwb3J0ZWQg
ZXZlbnQgbW9kZWw6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgcHJldHR5TmFtZUZvckV2ZW50
TW9kZWwobmV3RXZlbnRNb2RlbCkpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gZGVmaW5lZChYUF9NQUNPU1gpCisK
KyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVRpbWVyRmlyZWQoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ludmFs
aWRSZWN0cy5zaXplKCk7IGkrKykKKyAgICAgICAgaW52YWxpZGF0ZVJlY3QobV9pbnZhbGlkUmVj
dHNbaV0pOworICAgIG1faW52YWxpZFJlY3RzLmNsZWFyKCk7Cit9CisKKwordm9pZCBQbHVnaW5W
aWV3OjpwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGJvb2wgc3RhdGUpCit7CisgICAgbV9wb3B1cFN0
YXRlU3RhY2suYXBwZW5kKHN0YXRlKTsKK30KKyAKK3ZvaWQgUGx1Z2luVmlldzo6cG9wUG9wdXBz
RW5hYmxlZFN0YXRlKCkKK3sKKyAgICBtX3BvcHVwU3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Cit9
CisKK2Jvb2wgUGx1Z2luVmlldzo6YXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3BvcHVwU3RhdGVTdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX3BvcHVwU3Rh
dGVTdGFjay5sYXN0KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6c2V0SmF2YVNjcmlwdFBhdXNlZChib29sIHBhdXNlZCkKK3sKKyAgICBpZiAobV9pc0phdmFT
Y3JpcHRQYXVzZWQgPT0gcGF1c2VkKQorICAgICAgICByZXR1cm47CisgICAgbV9pc0phdmFTY3Jp
cHRQYXVzZWQgPSBwYXVzZWQ7CisKKyAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCisgICAg
ICAgIG1fcmVxdWVzdFRpbWVyLnN0b3AoKTsKKyAgICBlbHNlIGlmICghbV9yZXF1ZXN0cy5pc0Vt
cHR5KCkpCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorTlBPYmplY3QqIFBsdWdpblZpZXc6Om5wT2Jq
ZWN0KCkKK3sKKyAgICBOUE9iamVjdCogb2JqZWN0ID0gMDsKKworICAgIGlmICghbV9pc1N0YXJ0
ZWQgfHwgIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgLy8gT24gV2luZG93cywgY2FsbGluZyBKYXZhJ3MgTlBO
X0dldFZhbHVlIGNhbiBhbGxvdyB0aGUgbWVzc2FnZSBsb29wIHRvCisgICAgLy8gcnVuLCBhbGxv
d2luZyBsb2FkaW5nIHRvIHRha2UgcGxhY2Ugb3IgSmF2YVNjcmlwdCB0byBydW4uIFByb3RlY3Qg
dGhlCisgICAgLy8gUGx1Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uLiA8cmRhcjovL3Byb2JsZW0v
Njk3ODgwND4KKyAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKKworICAgIE5Q
RXJyb3IgbnBFcnI7CisgICAgeworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKKyAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFs
dWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7Cisg
ICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgICAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldygwKTsKKyAgICB9CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9f
RVJST1IpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKyNlbmRp
ZgorCitQYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBQbHVnaW5WaWV3OjpiaW5k
aW5nSW5zdGFuY2UoKQoreworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIE5Q
T2JqZWN0KiBvYmplY3QgPSBucE9iamVjdCgpOworICAgIGlmICghb2JqZWN0KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmIChoYXNPbmVSZWYoKSkgeworICAgICAgICAvLyBUaGUgcmVuZGVy
ZXIgZm9yIHRoZSBQbHVnaW5WaWV3IHdhcyBkZXN0cm95ZWQgZHVyaW5nIHRoZSBhYm92ZSBjYWxs
LCBhbmQKKyAgICAgICAgLy8gdGhlIFBsdWdpblZpZXcgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB0
aGlzIGZ1bmN0aW9uIHJldHVybnMsIHNvIHdlCisgICAgICAgIC8vIHJldHVybiBudWxsLgorICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNyZWF0ZVJvb3RPYmplY3QodGhp
cyk7CisgICAgUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBpbnN0YW5jZSA9IEpTQzo6
QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRlKG9iamVjdCwgcm9vdC5yZWxlYXNlKCkpOworCisg
ICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7CisKKyAgICByZXR1cm4gaW5zdGFuY2UucmVs
ZWFzZSgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIFBsdWdpblZp
ZXc6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKiBzdHJlYW0pCit7CisgICAgQVNTRVJU
KG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0pKTsKKworICAgIG1fc3RyZWFtcy5yZW1vdmUoc3Ry
ZWFtKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7
CisgICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CisK
KyAgICB1bnNpZ25lZCBzaXplID0gcGFyYW1OYW1lcy5zaXplKCk7CisgICAgdW5zaWduZWQgcGFy
YW1Db3VudCA9IDA7CisKKyAgICBtX3BhcmFtTmFtZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIq
Kj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOworICAgIG1fcGFyYW1WYWx1ZXMg
PSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6
ZSkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAg
ICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2luZG93
bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdub3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3aW5k
b3dsZXNzdmlkZW8iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChwYXJh
bU5hbWVzW2ldID09ICJwbHVnaW5zcGFnZSIpCisgICAgICAgICAgICBtX3BsdWdpbnNQYWdlID0g
cGFyYW1WYWx1ZXNbaV07CisKKyAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3Jl
YXRlVVRGOFN0cmluZyhwYXJhbU5hbWVzW2ldKTsKKyAgICAgICAgbV9wYXJhbVZhbHVlc1twYXJh
bUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOworCisgICAgICAgIHBh
cmFtQ291bnQrKzsKKyAgICB9CisKKyAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50OworfQor
CitQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgbG9hZE1hbnVhbGx5KQorICAgIDogbV9wYXJlbnRGcmFtZShwYXJlbnRGcmFtZSkKKyAgICAs
IG1fcGx1Z2luKHBsdWdpbikKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9pc1N0
YXJ0ZWQoZmFsc2UpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX3N0YXR1cyhQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgLCBtX3JlcXVlc3RUaW1lcigqdGhpcywgJlBsdWdp
blZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKQorICAgICwgbV9pbnZhbGlkYXRlVGltZXIoKnRoaXMs
ICZQbHVnaW5WaWV3OjppbnZhbGlkYXRlVGltZXJGaXJlZCkKKyAgICAsIG1fcG9wUG9wdXBzU3Rh
dGVUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCkKKyAg
ICAsIG1fbGlmZVN1cHBvcnRUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGlt
ZXJGaXJlZCkKKyAgICAsIG1fbW9kZShsb2FkTWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1CRUQp
CisgICAgLCBtX3BhcmFtTmFtZXMoMCkKKyAgICAsIG1fcGFyYW1WYWx1ZXMoMCkKKyAgICAsIG1f
bWltZVR5cGUobWltZVR5cGUpCisgICAgLCBtX2luc3RhbmNlKDApCisjaWYgZGVmaW5lZChYUF9N
QUNPU1gpCisgICAgLCBtX2lzV2luZG93ZWQoZmFsc2UpCisgICAgLCBtX3VwZGF0ZWRDb2NvYVRl
eHRJbnB1dFJlcXVlc3RlZChmYWxzZSkKKyAgICAsIG1fa2V5RG93blNlbnQoZmFsc2UpCisgICAg
LCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcigwKQorI2Vsc2UKKyAgICAsIG1faXNXaW5kb3dlZCh0
cnVlKQorI2VuZGlmCisgICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAgLCBtX2hhdmVJ
bml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1faXNXYWl0aW5nVG9TdGFydChmYWxzZSkKKyNpZiBk
ZWZpbmVkKFhQX1VOSVgpCisgICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQorI2VuZGlmCisjaWYg
T1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgLCBtX3BsdWdp
blduZFByb2MoMCkKKyAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKKyAgICAsIG1faXNDYWxsaW5nUGx1
Z2luV25kUHJvYyhmYWxzZSkKKyAgICAsIG1fd21QcmludEhEQygwKQorICAgICwgbV9oYXZlVXBk
YXRlZFBsdWdpbldpZGdldChmYWxzZSkKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEVGTCkKKyAgICAs
IG1fd2luZG93KDApCisjZW5kaWYKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAsIG1fY29u
dGV4dFJlZigwKQorI2VuZGlmCisjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKyAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlKHRydWUpCisg
ICAgLCBtX2RyYXdhYmxlKDApCisgICAgLCBtX3Zpc3VhbCgwKQorICAgICwgbV9jb2xvcm1hcCgw
KQorICAgICwgbV9wbHVnaW5EaXNwbGF5KDApCisjZW5kaWYKKyAgICAsIG1fbG9hZE1hbnVhbGx5
KGxvYWRNYW51YWxseSkKKyAgICAsIG1fbWFudWFsU3RyZWFtKDApCisgICAgLCBtX2lzSmF2YVNj
cmlwdFBhdXNlZChmYWxzZSkKKyAgICAsIG1faGF2ZUNhbGxlZFNldFdpbmRvdyhmYWxzZSkKK3sK
KyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2Fu
Tm90RmluZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW5zdGFuY2Ug
PSAmbV9pbnN0YW5jZVN0cnVjdDsKKyAgICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7CisgICAg
bV9pbnN0YW5jZS0+cGRhdGEgPSAwOworCisgICAgaW5zdGFuY2VNYXAoKS5hZGQobV9pbnN0YW5j
ZSwgdGhpcyk7CisKKyAgICBzZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsK
KworICAgIG1lbXNldCgmbV9ucFdpbmRvdywgMCwgc2l6ZW9mKG1fbnBXaW5kb3cpKTsKKyNpZiBk
ZWZpbmVkKFhQX01BQ09TWCkKKyAgICBtZW1zZXQoJm1fbnBDZ0NvbnRleHQsIDAsIHNpemVvZiht
X25wQ2dDb250ZXh0KSk7CisjZW5kaWYKKworICAgIHJlc2l6ZShzaXplKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3Ojpmb2N1c1BsdWdpbkVsZW1lbnQoKQoreworICAgIGlmIChQYWdlKiBwYWdlID0g
bV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5z
ZXRGb2N1c2VkRWxlbWVudChtX2VsZW1lbnQsIG1fcGFyZW50RnJhbWUpOworICAgIGVsc2UKKyAg
ICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobV9lbGVt
ZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0
YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1f
bG9hZE1hbnVhbGx5KTsKKyAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFu
dWFsU3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQo
KSwgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVz
dCgpLCBmYWxzZSwgMCwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1
Z2luLT5xdWlya3MoKSk7CisgICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVl
KTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2Up
OworfQorCit2b2lkIFBsdWdpblZpZXc6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGgpCit7CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1
Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5
KTsKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworICAgIAorICAgIG1fbWFudWFsU3RyZWFt
LT5kaWRSZWNlaXZlRGF0YSgwLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBsdWdpblZpZXc6
OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNM
b2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2xvYWRN
YW51YWxseSk7CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3Ry
ZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOworfQorCit2b2lkIFBsdWdpblZpZXc6OmRpZEZhaWwo
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdp
blN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KG1fbG9hZE1hbnVhbGx5KTsKKyAgICAKKyAgICBpZiAobV9tYW51YWxTdHJlYW0pCisgICAgICAg
IG1fbWFudWFsU3RyZWFtLT5kaWRGYWlsKDAsIGVycm9yKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpzZXRDYWxsaW5nUGx1Z2luKGJvb2wgYikgY29uc3QKK3sKKyAgICBpZiAoIW1fcGx1Z2luLT5x
dWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoYikKKyAgICAgICAgKytzX2NhbGxpbmdQbHVnaW47CisgICAg
ZWxzZQorICAgICAgICAtLXNfY2FsbGluZ1BsdWdpbjsKKworICAgIEFTU0VSVChzX2NhbGxpbmdQ
bHVnaW4gPj0gMCk7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkKK3sK
KyAgICByZXR1cm4gc19jYWxsaW5nUGx1Z2luID4gMDsKK30KKworUGFzc1JlZlB0cjxQbHVnaW5W
aWV3PiBQbHVnaW5WaWV3OjpjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1W
YWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAg
IC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQ
bHVnaW4gd2lsbCBzZWFyY2ggZm9yCisgICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5z
aW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCisg
ICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOworICAgIFBsdWdpblBhY2thZ2UqIHBs
dWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4odXJs
LCBtaW1lVHlwZUNvcHkpOworCisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJl
c2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBpZiAoIXBsdWdpbiAm
JiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCkpIHsKKyAgICAg
ICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAgICAgIHBsdWdpbiA9IFBsdWdpbkRhdGFi
YXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwor
ICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luVmlldyhwYXJlbnRGcmFtZSwg
c2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1l
VHlwZUNvcHksIGxvYWRNYW51YWxseSkpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmZyZWVTdHJp
bmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFzdHJp
bmdBcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykKKyAgICAgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOworCisgICAgZmFzdEZy
ZWUoc3RyaW5nQXJyYXkpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5r
TGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gYnVmZmVyLnNp
emUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxv
Y2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sK
KyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgdW5zaWduZWQgbGVu
Z3RoID0gYnVmZmVyLnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGggLSA0OyBpKyspIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMg
IlxuXG4iLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0g
J1xuJykKKyAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgCisgICAgICAgIC8vIFJl
dHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUg
Zmlyc3QgbGluZS4KKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFd
ID09ICdcbicpIHsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGlmIChpID09IDIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tp
XSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBz
ZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwor
ICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0g
J1xuJykKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxy
XG5cclxuIiAoMzc1ODExMykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNo
YXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAv
LyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcwor
ICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2Ug
TEYKKyAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNv
bWJpbmF0aW9uCisgICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNv
IGZpbmRFT0wgbmVlZHMKKyAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cg
YWNjZXB0IENSTEYsIExGIG9yCisgICAgLy8gQ1IuCisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5z
IE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4KKyAgICAvLyBhIHBv
aW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdc
bicpCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICBpZiAoYnl0ZXNbaV0g
PT0gJ1xyJykgeworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZl
ciBib3VuZHMKKyAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3
YWl0IGZvcgorICAgICAgICAgICAgLy8gbmV4dCByZWFkLgorICAgICAgICAgICAgaWYgKGkgKyAx
ID09IGxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgcmV0dXJu
IGJ5dGVzICsgaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0
aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSkKK3sKKyAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAg
IFN0cmluZyByZXN1bHQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5n
dGgoKTsgaSsrKSB7CisgICAgICAgIFVDaGFyIGM7CisKKyAgICAgICAgaWYgKGNhcGl0YWxpemVD
aGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCisgICAgICAgICAg
ICBjID0gdG9BU0NJSVVwcGVyKG5hbWVbaV0pOworICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6
ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykKKyAgICAgICAg
ICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChuYW1lW2ldID09ICctJykKKyAgICAgICAgICAg
IGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj
YXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEhUVFBIZWFk
ZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRh
KCk7CisgICAgY29uc3QgY2hhciogZW9sOworICAgIFN0cmluZyBsYXN0S2V5OworICAgIEhUVFBI
ZWFkZXJNYXAgaGVhZGVyRmllbGRzOworCisgICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdl
J3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGlu
ZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7CisgICAgICAg
IGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKKyAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wg
LSBieXRlczsKKyAgICAgICAgCisgICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3Rl
ciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBieSBmaW5kRU9MLgorICAgICAgICBi
eXRlcyA9IGVvbCArIDE7CisgICAgICAgIGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09
ICdcbicpKQorICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0
IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCisKKyAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxp
bmUpOworICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQorICAgICAgICAgICAgLy8gQmxhbmsg
bGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKKyAgICAg
ICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAg
ICBpZiAobGFzdEtleS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBo
ZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRp
bnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICAgICAgU3RyaW5nIGN1
cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAg
U3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVMZW5ndGgpOworCisgICAgICAgICAgICAgICAgaGVh
ZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVy
CisgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xvbjsKKyAgICAgICAgICAgIGZvciAoY29sb24g
PSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAg
ICAgICAgICAgIC8vIGVtcHR5IGxvb3AKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChj
b2xvbiA9PSBlb2wpIAorICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9y
ZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVy
RmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xvbiAtIGxpbmUpKTsKKyAgICAgICAgICAgICAgICBT
dHJpbmcgdmFsdWU7CisKKyAgICAgICAgICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVv
bDsgY29sb24rKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAq
Y29sb24gIT0gJ1x0JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKQorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9ICIiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24sIGVvbCAtIGNvbG9uKTsKKworICAgICAgICAgICAg
ICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBvbGRWYWx1ZSArICIsICIgKyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGhlYWRlckZp
ZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIGhlYWRlckZpZWxkczsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpo
YW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBs
ZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNl
bmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8ICFs
ZW4gfHwgIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAgICBG
cmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKSk7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsK
KyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIAorICAgIGlmIChmaWxlKSB7CisgICAgICAg
IE5QRXJyb3IgcmVhZFJlc3VsdCA9IGhhbmRsZVBvc3RSZWFkRmlsZShidWZmZXIsIGxlbiwgYnVm
KTsKKyAgICAgICAgaWYocmVhZFJlc3VsdCAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgICAg
IHJldHVybiByZWFkUmVzdWx0OworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZmZlci5yZXNpemUo
bGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKKyAgICB9CisK
KyAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaW50IHBvc3RE
YXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKworICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKKyAg
ICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgeworICAgICAgICAgICAgcG9z
dERhdGErKzsKKyAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUo
YnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgeworICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRo
ZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAg
ICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9u
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAt
IGxvY2F0aW9uOworCisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0
byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKKyAgICAgICAg
ICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdp
bGwgcmVtb3ZlIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVu
Y2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAgICAgICAgICAgICAgICBT
dHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoSFRUUEhlYWRlck5hbWU6OkNv
bnRlbnRMZW5ndGgpOworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVs
bCgpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5ndGgu
dG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMu
cmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoKTsKKworICAgICAgICAgICAgICAg
IHBvc3REYXRhICs9IGxvY2F0aW9uOworICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0g
ZGF0YUxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAg
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9wYXJl
bnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKKyAgICBmcmFtZUxvYWRSZXF1
ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGOjptb3ZlKGhlYWRl
ckZpZWxkcykpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRU
UEJvZHkoRm9ybURhdGE6OmNyZWF0ZShwb3N0RGF0YSwgcG9zdERhdGFMZW5ndGgpKTsKKyAgICBm
cmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworCisgICAgcmV0dXJuIGxvYWQo
ZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKCFpc1Zpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmICghbV9lbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CisgICAg
YXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCptX2VsZW1lbnQtPnJlbmRlcmVy
KCkpOworICAgIAorICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKKyAgICBkaXJ0eVJlY3Qu
bW92ZShyZW5kZXJlci5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci5wYWRkaW5nTGVmdCgpLCByZW5k
ZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKSk7CisgICAgcmVuZGVyZXIu
cmVwYWludFJlY3RhbmdsZShkaXJ0eVJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50
TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IG51bGxQbHVnaW5JbWFnZTsKKyAg
ICBpZiAoIW51bGxQbHVnaW5JbWFnZSkKKyAgICAgICAgbnVsbFBsdWdpbkltYWdlID0gSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJudWxsUGx1Z2luIik7CisKKyAgICBJbnRSZWN0IGltYWdl
UmVjdChmcmFtZVJlY3QoKS54KCksIGZyYW1lUmVjdCgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53
aWR0aCgpLCBudWxsUGx1Z2luSW1hZ2UtPmhlaWdodCgpKTsKKworICAgIGludCB4T2Zmc2V0ID0g
KGZyYW1lUmVjdCgpLndpZHRoKCkgLSBpbWFnZVJlY3Qud2lkdGgoKSkgLyAyOworICAgIGludCB5
T2Zmc2V0ID0gKGZyYW1lUmVjdCgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7
CisKKyAgICBpbWFnZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKKworICAgIGlmICghcmVj
dC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQt
PnNhdmUoKTsKKyAgICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0KCkpOworICAgIGNvbnRl
eHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wICgiCisjaWYg
ZGVmaW5lZChYUF9NQUNPU1gpCisgICAgICAgICJNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBY
OyIKKyNlbGlmIGRlZmluZWQoWFBfV0lOKQorICAgICAgICAiV2luZG93czsgVTsgV2luZG93cyBO
VCA1LjE7IgorI2VsaWYgZGVmaW5lZChYUF9VTklYKQorLy8gVGhlIEd0ayBwb3J0IHVzZXMgWDEx
IHBsdWdpbnMgaW4gTWFjLgorI2lmIE9TKERBUldJTikgJiYgUExBVEZPUk0oR1RLKQorICAgICJY
MTE7IFU7IEludGVsIE1hYyBPUyBYOyIKKyNlbHNlCisgICAgIlgxMTsgVTsgTGludXggaTY4Njsi
CisjZW5kaWYKKyNlbmRpZgorICAgICAgICAiIGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEw
MTAgRmlyZWZveC8yLjAiOworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ2hyb21lVXNlckFn
ZW50ID0gIk1vemlsbGEvNS4wICgiCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgIk1hY2lu
dG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2VsaWYgZGVmaW5lZChYUF9XSU4pCisgICAgIldp
bmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyIKKyNlbGlmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAv
LyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEgcGx1Z2lucyBpbiBNYWMuCisjaWYgT1MoREFSV0lOKSAm
JiBQTEFURk9STShHVEspCisgICAgIlgxMTsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2Vsc2UKKyAg
ICAiWDExOyBVOyBMaW51eCBpNjg2OyIKKyNlbmRpZgorI2VuZGlmCisgICAgIiBBcHBsZVdlYktp
dC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTkuMC4xMDU1LjEgU2FmYXJpLzUz
NC4zNCI7CisKK2NvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCit7CisgICAgaWYg
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJB
Z2VudCkpCisgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OworICAgIGVsc2UgaWYgKG1f
cGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzQ2hyb21lVXNlckFnZW50
KSkKKyAgICAgICAgcmV0dXJuIENocm9tZVVzZXJBZ2VudDsKKyAgICBpZiAobV91c2VyQWdlbnQu
aXNOdWxsKCkpCisgICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCku
dXNlckFnZW50KG1fdXJsKS51dGY4KCk7CisKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgp
OworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitjb25zdCBjaGFyKiBQbHVn
aW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKQoreworICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50
OworfQorI2VuZGlmCisKKwordm9pZCBQbHVnaW5WaWV3OjpsaWZlU3VwcG9ydFRpbWVyRmlyZWQo
KQoreworICAgIGRlcmVmKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKCkKK3sK
KyAgICBpZiAobV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHJlZigpOworICAgIG1fbGlmZVN1cHBvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9
CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3ZvaWQgUGx1Z2luVmlldzo6a2Vl
cEFsaXZlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gaW5zdGFuY2VN
YXAoKS5nZXQoaW5zdGFuY2UpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdmlldy0+a2VlcEFsaXZlKCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVT
dGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIExPRyhQbHVn
aW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoJXMpIiwgcHJldHR5TmFtZUZvck5QTlZh
cmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOworCisgICAgTlBFcnJvciByZXN1bHQ7CisgICAgaWYg
KHBsYXRmb3JtR2V0VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQor
CitOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSkKK3sKKyAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OmdldFZhbHVlKCVzKSIs
IHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKKworICAgIE5QRXJy
b3IgcmVzdWx0OworICAgIGlmIChwbGF0Zm9ybUdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSwgJnJl
c3VsdCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAocGxhdGZvcm1HZXRWYWx1
ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUsICZyZXN1bHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworCisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0
OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKyAgICAgICAgICAgIHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRP
YmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS53aW5kb3dTY3JpcHROUE9iamVjdCgpOwor
CisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMg
ZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9u
cHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKKyAgICAgICAg
ICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAgdm9p
ZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsK
KworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfQorCisgICAgY2FzZSBOUE5W
UGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNl
ZCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgIE5Q
T2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgIGlmIChtX2VsZW1lbnQt
Pmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcp
IHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgcGx1Z2lu
U2NyaXB0T2JqZWN0ID0gbV9lbGVtZW50LT5nZXROUE9iamVjdCgpOworCisgICAgICAgIC8vIFJl
dHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6
IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4K
KyAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWlu
T2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoq
KXZhbHVlOworICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfQorCisgICAgY2FzZSBOUE5WcHJpdmF0ZU1vZGVCb29s
OiB7CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCk7CisgICAgICAg
IGlmICghcGFnZSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAg
ICAgICAqKChOUEJvb2wqKXZhbHVlKSA9IHBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCk7Cisg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3N0YXRpYyBGcmFt
ZSogZ2V0RnJhbWUoRnJhbWUqIHBhcmVudEZyYW1lLCBFbGVtZW50KiBlbGVtZW50KQoreworICAg
IGlmIChwYXJlbnRGcmFtZSkKKyAgICAgICAgcmV0dXJuIHBhcmVudEZyYW1lOworICAgIAorICAg
IHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7Cit9CisKK05QRXJyb3IgUGx1Z2lu
Vmlldzo6Z2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIq
IHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKQoreworICAgIExPRyhQbHVnaW5zLCAi
UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwoJXMpIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlh
YmxlKHZhcmlhYmxlKS5kYXRhKCkpOworCisgICAgTlBFcnJvciByZXN1bHQgPSBOUEVSUl9OT19F
UlJPUjsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlVSTFZDb29raWU6
IHsKKyAgICAgICAgVVJMIHUobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1
cmwpOworICAgICAgICBpZiAodS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFt
ZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CisgICAgICAgICAgICBpZiAo
ZnJhbWUpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNvb2tp
ZXMoZnJhbWUtPmRvY3VtZW50KCksIHUpLnV0ZjgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNv
b2tpZVN0ci5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9
IGNvb2tpZVN0ci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCp2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCp2YWx1ZSwgMCwg
c2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIGNvb2tpZVN0
ci5kYXRhKCksIHNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpsZW4gPSBzaXplOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX09VVF9PRl9N
RU1PUllfRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBOUE5VUkxWUHJveHk6IHsKKyAgICAgICAgVVJMIHUobV9w
YXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOworICAgICAgICBpZiAodS5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZy
YW1lKCksIG1fZWxlbWVudCk7CisgICAgICAgICAgICBjb25zdCBGcmFtZUxvYWRlciogZnJhbWVM
b2FkZXIgPSBmcmFtZSA/ICZmcmFtZS0+bG9hZGVyKCkgOiAwOworICAgICAgICAgICAgY29uc3Qg
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBmcmFtZUxvYWRlciA/IGZyYW1lTG9hZGVyLT5u
ZXR3b3JraW5nQ29udGV4dCgpIDogMDsKKyAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgcHJveHlT
dHIgPSB0b1N0cmluZyhwcm94eVNlcnZlcnNGb3JVUkwodSwgY29udGV4dCkpLnV0ZjgoKTsKKyAg
ICAgICAgICAgIGlmICghcHJveHlTdHIuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBpbnQgc2l6ZSA9IHByb3h5U3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICp2YWx1ZSA9
IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCp2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAwLCBz
aXplKzEpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKnZhbHVlLCBwcm94eVN0ci5kYXRh
KCksIHNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pCisgICAgICAgICAgICAg
ICAgICAgICAgICAqbGVuID0gc2l6ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElE
X1VSTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3Vs
dCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmll
dzo6Z2V0VmFsdWVGb3JVUkw6ICVzIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlh
YmxlKS5kYXRhKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisKK05QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFi
bGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90
IGxlbikKK3sKKyAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKCVz
KSIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKKworICAg
IE5QRXJyb3IgcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxl
KSB7CisgICAgY2FzZSBOUE5VUkxWQ29va2llOiB7CisgICAgICAgIFVSTCB1KG1fcGFyZW50RnJh
bWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKTsKKyAgICAgICAgaWYgKHUuaXNWYWxpZCgp
KSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSwgbGVuKTsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVu
dEZyYW1lKCksIG1fZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tpZVN0
ci5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQo
KSwgdSwgY29va2llU3RyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBO
UEVSUl9JTlZBTElEX1VSTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlBOVVJM
VlByb3h5OgorICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJM
KCVzKTogUGx1Z2lucyBhcmUgTk9UIGFsbG93ZWQgdG8gc2V0IHByb3h5IGluZm9ybWF0aW9uLiIs
IHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKKyAgICAgICAg
cmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTDogJXMi
LCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisgICAgICAg
IHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0QXV0aGVudGlj
YXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQzMl90
IHBvcnQsIGNvbnN0IGNoYXIqIC8qIHNjaGVtZSAqLywgY29uc3QgY2hhciogLyogcmVhbG0gKi8s
IGNoYXIqKiAgLyogdXNlcm5hbWUgKi8sIHVpbnQzMl90KiAvKiB1bGVuICovLCBjaGFyKiogLyog
cGFzc3dvcmQgKi8sIHVpbnQzMl90KiAvKiBwbGVuICovKQoreworI2lmIExPR19ESVNBQkxFRAor
ICAgIFVOVVNFRF9QQVJBTShwcm90b2NvbCk7CisgICAgVU5VU0VEX1BBUkFNKGhvc3QpOworICAg
IFVOVVNFRF9QQVJBTShwb3J0KTsKKyNlbmRpZgorICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmll
dzo6Z2V0QXV0aGVudGljYXRpb25JbmZvOiBwcm90b2NvbD0lcywgaG9zdD0lcywgcG9ydD0lZCIs
IHByb3RvY29sLCBob3N0LCBwb3J0KTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOworfQorI2VuZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6cHJp
dmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKK3sK
KyAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNldFZhbHVlID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnNldHZhbHVlOworICAgIGlmICghc2V0VmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7
CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRl
QnJvd3NpbmdFbmFibGVkOworICAgIHNldFZhbHVlKG1faW5zdGFuY2UsIE5QTlZwcml2YXRlTW9k
ZUJvb2wsICZ2YWx1ZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViS2l0L3dp
bi9QbHVnaW5zL1BsdWdpblZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODZiYjlkMjgxMTRhZGQ4Njk0ZDVj
ZDExN2EwM2Q2NjBkZGZjMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4v
UGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTAsMCArMSw0NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2ly
aXNoQGZvcndhcmRiaWFzLmluPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBQbHVnaW5WaWV3X2gKKyNkZWZpbmUgUGx1Z2luVmlld19oCisKKyNp
bmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRlICJQ
bHVnaW5TdHJlYW0uaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKyNlbmRpZgor
CisjaWYgT1MoV0lORE9XUykgJiYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgSFdORF9f
KiBIV05EOwordHlwZWRlZiBIV05EIFBsYXRmb3JtUGx1Z2luV2lkZ2V0OworI2Vsc2UKK3R5cGVk
ZWYgUGxhdGZvcm1XaWRnZXQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CisjZW5kaWYKKyNpZiBQTEFU
Rk9STShHVEspCit0eXBlZGVmIHN0cnVjdCBfR3RrU29ja2V0IEd0a1NvY2tldDsKKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oWDExKQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFdpbmRvdzsKK3R5cGVk
ZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5OworI2VuZGlmCisKK25hbWVzcGFjZSBKU0Mgewor
ICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7CisgICAgICAgIGNsYXNzIEluc3RhbmNlOworICAgIH0K
K30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEZy
YW1lVmlldzsKKyAgICBjbGFzcyBJbWFnZTsKKyAgICBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsK
KyAgICBjbGFzcyBLZXlib2FyZEV2ZW50OworICAgIGNsYXNzIE1vdXNlRXZlbnQ7CisgICAgY2xh
c3MgVVJMOworI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
ICAgIGNsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW47CisjZW5kaWYKKyAgICBjbGFzcyBQ
bHVnaW5QYWNrYWdlOworICAgIGNsYXNzIFBsdWdpblJlcXVlc3Q7CisgICAgY2xhc3MgUGx1Z2lu
U3RyZWFtOworICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CisgICAgY2xhc3MgUmVzb3VyY2VSZXNw
b25zZTsKKyAgICBjbGFzcyBXaGVlbEV2ZW50OworCisgICAgZW51bSBQbHVnaW5TdGF0dXMgewor
ICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0
dXNDYW5Ob3RMb2FkUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVs
bHkKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdCB7CisgICAgICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFBsdWdpblJlcXVlc3QpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFBsdWdpblJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYg
ZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRh
LCBib29sIHNob3VsZEFsbG93UG9wdXBzKQorICAgICAgICAgICAgOiBtX2ZyYW1lTG9hZFJlcXVl
c3QoZnJhbWVMb2FkUmVxdWVzdCkKKyAgICAgICAgICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURh
dGEpCisgICAgICAgICAgICAsIG1fc2VuZE5vdGlmaWNhdGlvbihzZW5kTm90aWZpY2F0aW9uKQor
ICAgICAgICAgICAgLCBtX3Nob3VsZEFsbG93UG9wdXBzKHNob3VsZEFsbG93UG9wdXBzKSB7IH0K
KyAgICBwdWJsaWM6CisgICAgICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJl
cXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7IH0KKyAgICAgICAgdm9p
ZCogbm90aWZ5RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbm90aWZ5RGF0YTsgfQorICAgICAgICBi
b29sIHNlbmROb3RpZmljYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbmROb3RpZmljYXRpb247
IH0KKyAgICAgICAgYm9vbCBzaG91bGRBbGxvd1BvcHVwcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
dWxkQWxsb3dQb3B1cHM7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0
IG1fZnJhbWVMb2FkUmVxdWVzdDsKKyAgICAgICAgdm9pZCogbV9ub3RpZnlEYXRhOworICAgICAg
ICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAgICAgYm9vbCBtX3Nob3VsZEFsbG93UG9w
dXBzOworICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5NYW51YWxMb2FkZXIgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgdmlydHVhbCB+UGx1Z2luTWFudWFsTG9hZGVyKCkge30KKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCkg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZygpID0gMDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpID0gMDsKKyAgICB9
OworCisgICAgY2xhc3MgUGx1Z2luVmlldyA6IHB1YmxpYyBQbHVnaW5WaWV3QmFzZQorI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICAgICAgICAgICAgICAgLCBwcml2YXRl
IFBsdWdpblN0cmVhbUNsaWVudAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAsIHB1Ymxp
YyBQbHVnaW5NYW51YWxMb2FkZXIKKyAgICAgICAgICAgICAgICAgICAgICwgcHJpdmF0ZSBNZWRp
YUNhblN0YXJ0TGlzdGVuZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGx1Z2luVmlldz4gY3JlYXRlKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYs
IEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworICAgICAgICB2aXJ0dWFsIH5QbHVnaW5W
aWV3KCk7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luKCkgY29uc3QgeyByZXR1cm4g
bV9wbHVnaW4uZ2V0KCk7IH0KKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAg
ICAgTlBQIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQorI2VuZGlmCisK
KyAgICAgICAgdm9pZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpOworICAgICAgICBz
dGF0aWMgUGx1Z2luVmlldyogY3VycmVudFBsdWdpblZpZXcoKTsKKworI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBOUE9iamVjdCogbnBPYmplY3QoKTsKKyNlbmRpZgor
ICAgICAgICBQYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBiaW5kaW5nSW5zdGFu
Y2UoKTsKKworICAgICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0dXM7IH0KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICAvLyBO
UE4gZnVuY3Rpb25zCisgICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJv
ciBnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOworICAgICAgICBO
UEVycm9yIHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5
RGF0YSk7CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNo
YXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsK
KyAgICAgICAgTlBFcnJvciBuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0
YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKTsKKyAgICAgICAgaW50MzJfdCB3cml0ZShOUFN0cmVh
bSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKTsKKyAgICAgICAgTlBFcnJvciBk
ZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CisjZW5kaWYK
KyAgICAgICAgY29uc3QgY2hhciogdXNlckFnZW50KCk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1c2VyQWdlbnRTdGF0aWMoKTsK
KyNlbmRpZgorICAgICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICAg
ICAgCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QRXJyb3IgZ2V0
VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAgc3RhdGlj
IE5QRXJyb3IgZ2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVl
KTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpOworICAgICAgICBOUEVycm9yIGdldFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZh
cmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbik7Cisg
ICAgICAgIE5QRXJyb3Igc2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNv
bnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbik7CisgICAgICAg
IE5QRXJyb3IgZ2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25z
dCBjaGFyKiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hh
ciogcmVhbG0sIGNoYXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29y
ZCwgdWludDMyX3QqIHBsZW4pOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCop
OworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOworI2VuZGlmCisgICAg
ICAgIHZvaWQgZm9yY2VSZWRyYXcoKTsKKyAgICAgICAgdm9pZCBwdXNoUG9wdXBzRW5hYmxlZFN0
YXRlKGJvb2wgc3RhdGUpOworICAgICAgICB2b2lkIHBvcFBvcHVwc0VuYWJsZWRTdGF0ZSgpOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0Jik7CisK
KyAgICAgICAgYm9vbCBhcmVQb3B1cHNBbGxvd2VkKCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBz
ZXRKYXZhU2NyaXB0UGF1c2VkKGJvb2wpOworCisgICAgICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5n
U3RhdGVDaGFuZ2VkKGJvb2wpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdFN0cmVhbShQbHVn
aW5TdHJlYW0qKTsKKyAgICAgICAgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKFBsdWdpblN0
cmVhbSogc3RyZWFtKSB7IGRpc2Nvbm5lY3RTdHJlYW0oc3RyZWFtKTsgfQorCisgICAgICAgIC8v
IFdpZGdldCBmdW5jdGlvbnMKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmcmFtZVJlY3RzQ2hhbmdlZCgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBjbGlwUmVjdENoYW5nZWQoKSBvdmVycmlkZTsKKworICAgICAgICAvLyBUaGlz
IG1ldGhvZCBpcyB1c2VkIGJ5IHBsdWdpbnMgb24gYWxsIHBsYXRmb3JtcyB0byBvYnRhaW4gYSBj
bGlwIHJlY3QgdGhhdCBpbmNsdWRlcyBjbGlwcyBzZXQgYnkgV2ViQ29yZSwKKyAgICAgICAgLy8g
ZS5nLiwgaW4gb3ZlcmZsb3c6YXV0byBzZWN0aW9ucy4gIFRoZSBjbGlwIHJlY3RzIGNvb3JkaW5h
dGVzIGFyZSBpbiB0aGUgY29udGFpbmluZyB3aW5kb3cncyBjb29yZGluYXRlIHNwYWNlLgorICAg
ICAgICAvLyBUaGlzIGNsaXAgaW5jbHVkZXMgYW55IGNsaXBzIHRoYXQgdGhlIHdpZGdldCBpdHNl
bGYgc2V0cyB1cCBmb3IgaXRzIGNoaWxkcmVuLgorICAgICAgICBJbnRSZWN0IHdpbmRvd0NsaXBS
ZWN0KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0UGFyZW50VmlzaWJsZShib29sKTsKKworICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNQbHVnaW5WaWV3KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
ICAgIEZyYW1lKiBwYXJlbnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RnJhbWUuZ2V0
KCk7IH0KKworICAgICAgICB2b2lkIGZvY3VzUGx1Z2luRWxlbWVudCgpOworCisgICAgICAgIGNv
bnN0IFN0cmluZyYgcGx1Z2luc1BhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbnNQYWdlOyB9
CisgICAgICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21pbWVU
eXBlOyB9CisgICAgICAgIGNvbnN0IFVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0K
KworI2lmIGRlZmluZWQoWFBfTUFDT1NYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICAgICAgYm9vbCBwb3BVcENvbnRleHRNZW51KE5QTWVudSopOworI2VuZGlmCisKKyNpZiBP
UyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3RhdGlj
IExSRVNVTFQgQ0FMTEJBQ0sgUGx1Z2luVmlld1duZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBM
UEFSQU0pOworICAgICAgICBMUkVTVUxUIHduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOworICAgICAgICBXTkRQUk9DIHBsdWdpbldu
ZFByb2MoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpblduZFByb2M7IH0KKyNlbmRpZgorCisgICAg
ICAgIC8vIFVzZWQgZm9yIG1hbnVhbCBsb2FkaW5nCisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZl
RGF0YShjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7
CisgICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisKKyAgICAgICAg
c3RhdGljIGJvb2wgaXNDYWxsaW5nUGx1Z2luKCk7CisKKyAgICAgICAgYm9vbCBzdGFydCgpOwor
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIHN0YXRpYyB2b2lkIGtl
ZXBBbGl2ZShOUFApOworI2VuZGlmCisgICAgICAgIHZvaWQga2VlcEFsaXZlKCk7CisKKyNpZiBQ
TEFURk9STShYMTEpCisgICAgICAgIHN0YXRpYyBEaXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5KEZy
YW1lKik7CisgICAgICAgIHN0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50
RnJhbWUpOworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5WaWV3KEZyYW1l
KiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2UqLCBIVE1MUGx1Z0lu
RWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGJvb2wgbG9hZE1hbnVhbGx5KTsKKworICAgICAgICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZh
bHVlcyk7CisgICAgICAgIGJvb2wgc3RhcnRPckFkZFRvVW5zdGFydGVkTGlzdCgpOworICAgICAg
ICB2b2lkIGluaXQoKTsKKyAgICAgICAgYm9vbCBwbGF0Zm9ybVN0YXJ0KCk7CisgICAgICAgIHZv
aWQgc3RvcCgpOworICAgICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworICAgICAgICBzdGF0
aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3Kik7CisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QRXJyb3IgbG9hZChjb25zdCBGcmFtZUxvYWRS
ZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAg
ICAgTlBFcnJvciBoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlE
YXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKKyAgICAgICAg
TlBFcnJvciBoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90
IGxlbiwgY29uc3QgY2hhciogYnVmKTsKKyNlbmRpZgorICAgICAgICBzdGF0aWMgdm9pZCBmcmVl
U3RyaW5nQXJyYXkoY2hhcioqIHN0cmluZ0FycmF5LCBpbnQgbGVuZ3RoKTsKKyAgICAgICAgdm9p
ZCBzZXRDYWxsaW5nUGx1Z2luKGJvb2wpIGNvbnN0OworCisgICAgICAgIHZvaWQgaW52YWxpZGF0
ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFs
IHZvaWQgbWVkaWFDYW5TdGFydCgpOworCisjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisgICAgICAgIHZvaWQgcGFpbnRXaW5kb3dlZFBsdWdpbkludG9Db250
ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgc3RhdGljIEhE
QyBXSU5BUEkgaG9va2VkQmVnaW5QYWludChIV05ELCBQQUlOVFNUUlVDVCopOworICAgICAgICBz
dGF0aWMgQk9PTCBXSU5BUEkgaG9va2VkRW5kUGFpbnQoSFdORCwgY29uc3QgUEFJTlRTVFJVQ1Qq
KTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIHN0
YXRpYyBib29sIHBsYXRmb3JtR2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZv
aWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpOworICAgICAgICBib29sIHBsYXRmb3JtR2V0VmFs
dWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpOwor
I2VuZGlmCisKKyAgICAgICAgUmVmUHRyPEZyYW1lPiBtX3BhcmVudEZyYW1lOworICAgICAgICBS
ZWZQdHI8UGx1Z2luUGFja2FnZT4gbV9wbHVnaW47CisgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50
KiBtX2VsZW1lbnQ7CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7CisgICAgICAgIFVSTCBtX3Vy
bDsKKyAgICAgICAgUGx1Z2luU3RhdHVzIG1fc3RhdHVzOworICAgICAgICBWZWN0b3I8SW50UmVj
dD4gbV9pbnZhbGlkUmVjdHM7CisKKyAgICAgICAgdm9pZCBwZXJmb3JtUmVxdWVzdChQbHVnaW5S
ZXF1ZXN0Kik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVSZXF1ZXN0KHN0ZDo6dW5pcXVlX3B0cjxQ
bHVnaW5SZXF1ZXN0Pik7CisgICAgICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoKTsKKyAgICAg
ICAgdm9pZCBpbnZhbGlkYXRlVGltZXJGaXJlZCgpOworICAgICAgICBUaW1lciBtX3JlcXVlc3RU
aW1lcjsKKyAgICAgICAgVGltZXIgbV9pbnZhbGlkYXRlVGltZXI7CisKKyAgICAgICAgdm9pZCBw
b3BQb3B1cHNTdGF0ZVRpbWVyRmlyZWQoKTsKKyAgICAgICAgVGltZXIgbV9wb3BQb3B1cHNTdGF0
ZVRpbWVyOworCisgICAgICAgIHZvaWQgbGlmZVN1cHBvcnRUaW1lckZpcmVkKCk7CisgICAgICAg
IFRpbWVyIG1fbGlmZVN1cHBvcnRUaW1lcjsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQorICAgICAgICBib29sIGRpc3BhdGNoTlBFdmVudChOUEV2ZW50Jik7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAg
ICAgIGludDE2X3QgZGlzcGF0Y2hOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50Jik7CisgICAgICAg
IGJvb2wgbV91cGRhdGVkQ29jb2FUZXh0SW5wdXRSZXF1ZXN0ZWQ7CisgICAgICAgIGJvb2wgbV9r
ZXlEb3duU2VudDsKKyAgICAgICAgdWludDE2X3QgbV9kaXNyZWdhcmRLZXlVcENvdW50ZXI7Cisj
ZW5kaWYKKworI2lmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgICAgICB2b2lkIGhhbmRsZVdoZWVs
RXZlbnQoV2hlZWxFdmVudCopOworI2VuZGlmCisgICAgICAgIHZvaWQgdXBkYXRlUGx1Z2luV2lk
Z2V0KCk7CisgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZl
bnQqKTsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorICAgICAgICB2b2lkIGhhbmRsZUZvY3VzSW5FdmVudCgpOworICAgICAgICB2b2lkIGhhbmRs
ZUZvY3VzT3V0RXZlbnQoKTsKKyNlbmRpZgorCisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgdm9p
ZCBwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoSERDKTsKKyAgICAgICAgUGFzc1JlZlB0cjxJ
bWFnZT4gc25hcHNob3QoKTsKKyNlbmRpZgorCisgICAgICAgIGludCBtX21vZGU7CisgICAgICAg
IGludCBtX3BhcmFtQ291bnQ7CisgICAgICAgIGNoYXIqKiBtX3BhcmFtTmFtZXM7CisgICAgICAg
IGNoYXIqKiBtX3BhcmFtVmFsdWVzOworICAgICAgICBTdHJpbmcgbV9wbHVnaW5zUGFnZTsKKwor
ICAgICAgICBTdHJpbmcgbV9taW1lVHlwZTsKKyAgICAgICAgV1RGOjpDU3RyaW5nIG1fdXNlckFn
ZW50OworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QUCBtX2lu
c3RhbmNlOworICAgICAgICBOUFBfdCBtX2luc3RhbmNlU3RydWN0OworICAgICAgICBOUFdpbmRv
dyBtX25wV2luZG93OworI2VuZGlmCisKKyAgICAgICAgVmVjdG9yPGJvb2wsIDQ+IG1fcG9wdXBT
dGF0ZVN0YWNrOworCisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBtX3N0
cmVhbXM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4+IG1f
cmVxdWVzdHM7CisKKyAgICAgICAgYm9vbCBtX2lzV2luZG93ZWQ7CisgICAgICAgIGJvb2wgbV9p
c1RyYW5zcGFyZW50OworICAgICAgICBib29sIG1faGF2ZUluaXRpYWxpemVkOworICAgICAgICBi
b29sIG1faXNXYWl0aW5nVG9TdGFydDsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAgICAg
Ym9vbCBtX25lZWRzWEVtYmVkOworI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgT3duUHRyPFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW4+IG1fbWVzc2FnZVRocm90dGxlcjsKKyAgICAgICAgV05EUFJPQyBtX3BsdWdpblduZFBy
b2M7CisgICAgICAgIHVuc2lnbmVkIG1fbGFzdE1lc3NhZ2U7CisgICAgICAgIGJvb2wgbV9pc0Nh
bGxpbmdQbHVnaW5XbmRQcm9jOworICAgICAgICBIREMgbV93bVByaW50SERDOworICAgICAgICBi
b29sIG1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQ7CisjZW5kaWYKKworI2lmIChQTEFURk9STShH
VEspICYmIE9TKFdJTkRPV1MpKSB8fCBQTEFURk9STShFRkwpCisgICAgICAgIC8vIE9uIE1hYyBP
U1ggYW5kIFF0L1dpbmRvd3MgdGhlIHBsdWdpbiBkb2VzIG5vdCBoYXZlIGl0cyBvd24gbmF0aXZl
IHdpZGdldCwKKyAgICAgICAgLy8gYnV0IGlzIHVzaW5nIHRoZSBjb250YWluaW5nIHdpbmRvdyBh
cyBpdHMgcmVmZXJlbmNlIGZvciBwb3NpdGlvbmluZy9wYWludGluZy4KKyAgICAgICAgUGxhdGZv
cm1QbHVnaW5XaWRnZXQgbV93aW5kb3c7CitwdWJsaWM6CisgICAgICAgIFBsYXRmb3JtUGx1Z2lu
V2lkZ2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3c7IH0K
KyAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBsdWdpbldpZGdl
dCB3aWRnZXQpIHsgbV93aW5kb3cgPSB3aWRnZXQ7IH0KKyNlbHNlCitwdWJsaWM6CisgICAgICAg
IHZvaWQgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQoUGxhdGZvcm1QbHVnaW5XaWRnZXQgd2lkZ2V0
KSB7IHNldFBsYXRmb3JtV2lkZ2V0KHdpZGdldCk7IH0KKyAgICAgICAgUGxhdGZvcm1QbHVnaW5X
aWRnZXQgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSBjb25zdCB7IHJldHVybiBwbGF0Zm9ybVdpZGdl
dCgpOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKworI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgUExB
VEZPUk0oR1RLKQorICAgICAgICB2b2lkIHNldE5QV2luZG93SWZOZWVkZWQoKTsKKyNlbGlmIGRl
ZmluZWQoWFBfTUFDT1NYKQorICAgICAgICBOUF9DR0NvbnRleHQgbV9ucENnQ29udGV4dDsKKyAg
ICAgICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dFJlZjsKKworICAgICAgICB2b2lkIHNldE5QV2lu
ZG93SWZOZWVkZWQoKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNo
YW5nZTsKKyAgICAgICAgUGl4bWFwIG1fZHJhd2FibGU7CisgICAgICAgIFZpc3VhbCogbV92aXN1
YWw7CisgICAgICAgIENvbG9ybWFwIG1fY29sb3JtYXA7CisgICAgICAgIERpc3BsYXkqIG1fcGx1
Z2luRGlzcGxheTsKKworICAgICAgICB2b2lkIGluaXRYRXZlbnQoWEV2ZW50KiBldmVudCk7Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgc3RhdGljIGdib29sZWFuIHBsdWdS
ZW1vdmVkQ2FsbGJhY2soR3RrU29ja2V0KiwgUGx1Z2luVmlldyopOworICAgICAgICBzdGF0aWMg
dm9pZCBwbHVnQWRkZWRDYWxsYmFjayhHdGtTb2NrZXQqLCBQbHVnaW5WaWV3Kik7CisgICAgICAg
IHZvaWQgdXBkYXRlV2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKTsKKyAgICAgICAgYm9vbCBtX3Bs
dWdBZGRlZDsKKyAgICAgICAgSW50UmVjdCBtX2RlbGF5ZWRBbGxvY2F0aW9uOworI2VuZGlmCisK
KyAgICAgICAgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFwcGx5IHRv
IGEgd2luZG93ZWQgcGx1Zy1pbgorICAgICAgICBJbnRSZWN0IG1fd2luZG93UmVjdDsgLy8gT3Vy
IHdpbmRvdyByZWN0LgorCisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7CisgICAgICAgIFJl
ZlB0cjxQbHVnaW5TdHJlYW0+IG1fbWFudWFsU3RyZWFtOworCisgICAgICAgIGJvb2wgbV9pc0ph
dmFTY3JpcHRQYXVzZWQ7CisKKyAgICAgICAgYm9vbCBtX2hhdmVDYWxsZWRTZXRXaW5kb3c7CisK
KyAgICAgICAgc3RhdGljIFBsdWdpblZpZXcqIHNfY3VycmVudFBsdWdpblZpZXc7CisgICAgfTsK
KworaW5saW5lIFBsdWdpblZpZXcqIHRvUGx1Z2luVmlldyhXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICBBU1NFUlQoIXdpZGdldCB8fCB3aWRnZXQtPmlzUGx1Z2luVmlldygpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdldCk7Cit9CisKK2lubGluZSBjb25zdCBQbHVn
aW5WaWV3KiB0b1BsdWdpblZpZXcoY29uc3QgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgQVNTRVJU
KCF3aWRnZXQgfHwgd2lkZ2V0LT5pc1BsdWdpblZpZXcoKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFBsdWdpblZpZXcqPih3aWRnZXQpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2gg
YW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUGx1Z2luVmlldyhjb25z
dCBQbHVnaW5WaWV3Kik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3V2luLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOTIx
MmJhMjQ5ZjQ3N2UwMzY5MThlYzI2MTMyOGU3NmY3ZGY5Zjg2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3V2luLmNwcApAQCAtMCwwICsxLDEw
MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBU
b3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkJp
dG1hcEluZm8uaCIKKyNpbmNsdWRlICJCcmlkZ2VKU0MuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1
ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01X
aW5kb3cuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTG9jYWxXaW5k
b3dzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVi
dWcuaCIKKyNpbmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAi
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
KyNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgIldlYkNvcmVJbnN0YW5jZUhhbmRsZS5oIgorI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKKyNp
bmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+
CisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgorCisjaWYgVVNFKENBSVJPKQor
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSA8Y2Fpcm8td2luMzIu
aD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGdkay9nZGt3aW4zMi5o
PgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEhXTkQgd2lu
ZG93SGFuZGxlRm9yUGFnZUNsaWVudChQbGF0Zm9ybVBhZ2VDbGllbnQgY2xpZW50KQoreworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
aWYgKEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KGNsaWVudCkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIV05EPihHREtfV0lORE9XX0hXTkQod2luZG93KSk7
CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIHJldHVybiBjbGllbnQ7CisjZW5kaWYKK30KKwor
dXNpbmcgSlNDOjpFeGVjU3RhdGU7Cit1c2luZyBKU0M6OkpTTG9jazsKK3VzaW5nIEpTQzo6SlNP
YmplY3Q7CisKK3VzaW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2NvbnN0IExQ
Q1dTVFIga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWUgPSBMIldlYlBsdWdpblZpZXciOworY29u
c3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld1Byb3BlcnR5ID0gTCJXZWJQbHVnaW5WaWV3UHJvcGVy
dHkiOworCisvLyBUaGUgY29kZSB1c2VkIHRvIGhvb2sgQmVnaW5QYWludC9FbmRQYWludCBvcmln
aW5hbGx5IGNhbWUgZnJvbQorLy8gPGh0dHA6Ly93d3cuZmVuZ3l1YW4uY29tL2FydGljbGUvd21w
cmludC5odG1sPi4KKy8vIENvcHlyaWdodCAoQykgMjAwMCBieSBGZW5nIFl1YW4gKHd3dy5mZW5n
eXVhbi5jb20pLgorCitzdGF0aWMgdW5zaWduZWQgYmVnaW5QYWludFN5c0NhbGw7CitzdGF0aWMg
QllURSogYmVnaW5QYWludDsKKworc3RhdGljIHVuc2lnbmVkIGVuZFBhaW50U3lzQ2FsbDsKK3N0
YXRpYyBCWVRFKiBlbmRQYWludDsKKwordHlwZWRlZiBIREMgKFdJTkFQSSAqUHRyQmVnaW5QYWlu
dCkoSFdORCwgUEFJTlRTVFJVQ1QqKTsKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICpQdHJFbmRQYWlu
dCkoSFdORCwgY29uc3QgUEFJTlRTVFJVQ1QqKTsKKworI2lmIE9TKFdJTkRPV1MpICYmIENQVShY
ODZfNjQpICYmIENPTVBJTEVSKE1TVkMpCitleHRlcm4gIkMiIEhEQyBfX3N0ZGNhbGwgX0hCZWdp
blBhaW50KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVDVCBscFBhaW50KTsKK2V4dGVybiAiQyIgQk9P
TCBfX3N0ZGNhbGwgX0hFbmRQYWludChIV05EIGhXbmQsIGNvbnN0IFBBSU5UU1RSVUNUKiBscFBh
aW50KTsKKyNlbmRpZgorCitIREMgV0lOQVBJIFBsdWdpblZpZXc6Omhvb2tlZEJlZ2luUGFpbnQo
SFdORCBoV25kLCBQQUlOVFNUUlVDVCogbHBQYWludCkKK3sKKyAgICBQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2Vi
UGx1Z2luVmlld1Byb3BlcnR5KSk7CisgICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+
bV93bVByaW50SERDKSB7CisgICAgICAgIC8vIFdlJ3JlIHNlY3JldGx5IGhhbmRsaW5nIFdNX1BS
SU5UQ0xJRU5ULCBzbyBzZXQgdXAgdGhlIFBBSU5UU1RSVUNUIHNvCisgICAgICAgIC8vIHRoYXQg
dGhlIHBsdWdpbiB3aWxsIHBhaW50IGludG8gdGhlIEhEQyB3ZSBwcm92aWRlLgorICAgICAgICBt
ZW1zZXQobHBQYWludCwgMCwgc2l6ZW9mKFBBSU5UU1RSVUNUKSk7CisgICAgICAgIGxwUGFpbnQt
PmhkYyA9IHBsdWdpblZpZXctPm1fd21QcmludEhEQzsKKyAgICAgICAgR2V0Q2xpZW50UmVjdCho
V25kLCAmbHBQYWludC0+cmNQYWludCk7CisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3LT5tX3dt
UHJpbnRIREM7CisgICAgfQorCisjaWYgQ09NUElMRVIoR0NDKQorICAgIEhEQyByZXN1bHQ7Cisg
ICAgYXNtICgicHVzaCAgICAlMlxuIgorICAgICAgICAgInB1c2ggICAgJTNcbiIKKyAgICAgICAg
ICJjYWxsICAgIColNFxuIgorICAgICAgICAgOiAiPWEiIChyZXN1bHQpCisgICAgICAgICA6ICJh
IiAoYmVnaW5QYWludFN5c0NhbGwpLCAiZyIgKGxwUGFpbnQpLCAiZyIgKGhXbmQpLCAibSIgKGJl
Z2luUGFpbnQpCisgICAgICAgICA6ICJtZW1vcnkiCisgICAgICAgICk7CisgICAgcmV0dXJuIHJl
c3VsdDsKKyNlbGlmIGRlZmluZWQoX01fSVg4NikKKyAgICAvLyBDYWxsIHRocm91Z2ggdG8gdGhl
IG9yaWdpbmFsIEJlZ2luUGFpbnQuCisgICAgX19hc20gICBtb3YgICAgIGVheCwgYmVnaW5QYWlu
dFN5c0NhbGwKKyAgICBfX2FzbSAgIHB1c2ggICAgbHBQYWludAorICAgIF9fYXNtICAgcHVzaCAg
ICBoV25kCisgICAgX19hc20gICBjYWxsICAgIGJlZ2luUGFpbnQKKyNlbHNlCisgICAgcmV0dXJu
IF9IQmVnaW5QYWludChoV25kLCBscFBhaW50KTsKKyNlbmRpZgorfQorCitCT09MIFdJTkFQSSBQ
bHVnaW5WaWV3Ojpob29rZWRFbmRQYWludChIV05EIGhXbmQsIGNvbnN0IFBBSU5UU1RSVUNUKiBs
cFBhaW50KQoreworICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJldF9jYXN0
PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKKyAg
ICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5tX3dtUHJpbnRIREMpIHsKKyAgICAgICAg
Ly8gV2UncmUgc2VjcmV0bHkgaGFuZGxpbmcgV01fUFJJTlRDTElFTlQsIHNvIHdlIGRvbid0IGhh
dmUgdG8gZG8gYW55CisgICAgICAgIC8vIGNsZWFudXAuCisgICAgICAgIHJldHVybiBUUlVFOwor
ICAgIH0KKworI2lmIENPTVBJTEVSKEdDQykKKyAgICBCT09MIHJlc3VsdDsKKyAgICBhc20gKCJw
dXNoICAgJTJcbiIKKyAgICAgICAgICJwdXNoICAgJTNcbiIKKyAgICAgICAgICJjYWxsICAgKiU0
XG4iCisgICAgICAgICA6ICI9YSIgKHJlc3VsdCkKKyAgICAgICAgIDogImEiIChlbmRQYWludFN5
c0NhbGwpLCAiZyIgKGxwUGFpbnQpLCAiZyIgKGhXbmQpLCAibSIgKGVuZFBhaW50KQorICAgICAg
ICApOworICAgIHJldHVybiByZXN1bHQ7CisjZWxpZiBkZWZpbmVkIChfTV9JWDg2KQorICAgIC8v
IENhbGwgdGhyb3VnaCB0byB0aGUgb3JpZ2luYWwgRW5kUGFpbnQuCisgICAgX19hc20gICBtb3Yg
ICAgIGVheCwgZW5kUGFpbnRTeXNDYWxsCisgICAgX19hc20gICBwdXNoICAgIGxwUGFpbnQKKyAg
ICBfX2FzbSAgIHB1c2ggICAgaFduZAorICAgIF9fYXNtICAgY2FsbCAgICBlbmRQYWludAorI2Vs
c2UKKyAgICByZXR1cm4gX0hFbmRQYWludChoV25kLCBscFBhaW50KTsKKyNlbmRpZgorfQorCitz
dGF0aWMgdm9pZCBob29rKGNvbnN0IGNoYXIqIG1vZHVsZSwgY29uc3QgY2hhciogcHJvYywgdW5z
aWduZWQmIHN5c0NhbGxJRCwgQllURSomIHBQcm9jLCBjb25zdCB2b2lkKiBwTmV3UHJvYykKK3sK
KyAgICAvLyBTZWUgPGh0dHA6Ly93d3cuZmVuZ3l1YW4uY29tL2FydGljbGUvd21wcmludC5odG1s
PiBmb3IgYW4gZXhwbGFuYXRpb24gb2YKKyAgICAvLyBob3cgdGhpcyBmdW5jdGlvbiB3b3Jrcy4K
KworICAgIEhJTlNUQU5DRSBoTW9kID0gR2V0TW9kdWxlSGFuZGxlQShtb2R1bGUpOworCisgICAg
cFByb2MgPSByZWludGVycHJldF9jYXN0PEJZVEUqPihyZWludGVycHJldF9jYXN0PHB0cmRpZmZf
dD4oR2V0UHJvY0FkZHJlc3MoaE1vZCwgcHJvYykpKTsKKworI2lmIENPTVBJTEVSKEdDQykgfHwg
ZGVmaW5lZChfTV9JWDg2KQorICAgIGlmIChwUHJvY1swXSAhPSAweEI4KQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGJlIHJlYWRpbmcgdGhlIGJ5dGVzIG9uZS1i
eS1vbmUgaW5zdGVhZCBvZiBkb2luZyBhbgorICAgIC8vIHVuYWxpZ25lZCByZWFkPworICAgIHN5
c0NhbGxJRCA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ocFByb2MgKyAxKTsKKworICAg
IERXT1JEIGZsT2xkUHJvdGVjdDsKKyAgICBpZiAoIVZpcnR1YWxQcm90ZWN0KHBQcm9jLCA1LCBQ
QUdFX0VYRUNVVEVfUkVBRFdSSVRFLCAmZmxPbGRQcm90ZWN0KSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcFByb2NbMF0gPSAweEU5OworICAgICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4o
cFByb2MgKyAxKSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBOZXdQcm9jKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBQcm9jICsgNSk7CisKKyAgICBwUHJvYyArPSA1OworI2Vs
c2UKKyAgICAvKiBEaXNhc3NlbWJseSBvZiBCZWdpblBhaW50KCkKKyAgICAwMDAwMDAwMDc3OUZD
NUIwIDRDIDhCIEQxICAgICAgICAgbW92ICAgICAgICAgcjEwLHJjeAorICAgIDAwMDAwMDAwNzc5
RkM1QjMgQjggMTcgMTAgMDAgMDAgICBtb3YgICAgICAgICBlYXgsMTAxN2gKKyAgICAwMDAwMDAw
MDc3OUZDNUI4IDBGIDA1ICAgICAgICAgICAgc3lzY2FsbAorICAgIDAwMDAwMDAwNzc5RkM1QkEg
QzMgICAgICAgICAgICAgICByZXQKKyAgICAwMDAwMDAwMDc3OUZDNUJCIDkwICAgICAgICAgICAg
ICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVCQyA5MCAgICAgICAgICAgICAgIG5vcAorICAgIDAw
MDAwMDAwNzc5RkM1QkQgOTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUJF
IDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVCRiA5MCAgICAgICAgICAg
ICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QzAgOTAgICAgICAgICAgICAgICBub3AKKyAgICAw
MDAwMDAwMDc3OUZDNUMxIDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVD
MiA5MCAgICAgICAgICAgICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QzMgOTAgICAgICAgICAg
ICAgICBub3AKKyAgICAqLworICAgIC8vIENoZWNrIGZvciB0aGUgc2lnbmF0dXJlIGFzIGluIHRo
ZSBhYm92ZSBkaXNhc3NlbWJseQorICAgIERXT1JEIGd1YXJkID0gMHhCOEQxOEI0QzsKKyAgICBp
ZiAoKnJlaW50ZXJwcmV0X2Nhc3Q8RFdPUkQqPihwUHJvYykgIT0gZ3VhcmQpCisgICAgICAgIHJl
dHVybjsKKworICAgIERXT1JEIGZsT2xkUHJvdGVjdDsKKyAgICBWaXJ0dWFsUHJvdGVjdChwUHJv
YywgMTIsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUsICYgZmxPbGRQcm90ZWN0KTsKKyAgICBwUHJv
Y1swXSA9IDB4NDg7ICAgIC8vIG1vdiByYXgsIHRoaXMKKyAgICBwUHJvY1sxXSA9IDB4Yjg7Cisg
ICAgKihfX2ludDY0KikocFByb2MrMikgPSAoX19pbnQ2NClwTmV3UHJvYzsKKyAgICBwUHJvY1sx
MF0gPSAweGZmOyAgIC8vIGptcCByYXgKKyAgICBwUHJvY1sxMV0gPSAweGUwOworI2VuZGlmCit9
CisKK3N0YXRpYyB2b2lkIHNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyhIREMgKFdJTkFQSSpo
b29rZWRCZWdpblBhaW50KShIV05ELCBQQUlOVFNUUlVDVCopLCBCT09MIChXSU5BUEkqaG9va2Vk
RW5kUGFpbnQpKEhXTkQsIGNvbnN0IFBBSU5UU1RSVUNUKikpCit7CisgICAgc3RhdGljIGJvb2wg
aGF2ZUhvb2tlZCA9IGZhbHNlOworICAgIGlmIChoYXZlSG9va2VkKQorICAgICAgICByZXR1cm47
CisgICAgaGF2ZUhvb2tlZCA9IHRydWU7CisKKyAgICAvLyBNb3N0IChhbGw/KSB3aW5kb3dlZCBw
bHVnaW5zIGRvbid0IHNlZW0gdG8gcmVzcG9uZCB0byBXTV9QUklOVENMSUVOVCwgc28KKyAgICAv
LyB3ZSBob29rIGludG8gQmVnaW5QYWludC9FbmRQYWludCB0byBhbGxvdyB0aGVpciBub3JtYWwg
V01fUEFJTlQgaGFuZGxpbmcKKyAgICAvLyB0byBkcmF3IGludG8gYSBnaXZlbiBIREMuIE5vdGUg
dGhhdCB0aGlzIGhvb2tpbmcgYWZmZWN0cyB0aGUgZW50aXJlCisgICAgLy8gcHJvY2Vzcy4KKyAg
ICBob29rKCJ1c2VyMzIuZGxsIiwgIkJlZ2luUGFpbnQiLCBiZWdpblBhaW50U3lzQ2FsbCwgYmVn
aW5QYWludCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8
cHRyZGlmZl90Pihob29rZWRCZWdpblBhaW50KSkpOworICAgIGhvb2soInVzZXIzMi5kbGwiLCAi
RW5kUGFpbnQiLCBlbmRQYWludFN5c0NhbGwsIGVuZFBhaW50LCByZWludGVycHJldF9jYXN0PGNv
bnN0IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGhvb2tlZEVuZFBhaW50KSkp
OworCit9CisKK3N0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygpCit7CisgICAgc3RhdGlj
IGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOworICAgIGlmIChoYXZlUmVn
aXN0ZXJlZFdpbmRvd0NsYXNzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGhhdmVSZWdp
c3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIFdlYkNv
cmU6OnNldEluc3RhbmNlSGFuZGxlKChISU5TVEFOQ0UpKEdldE1vZHVsZUhhbmRsZSgwKSkpOwor
I2VuZGlmCisKKyAgICBBU1NFUlQoV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSk7CisKKyAgICBX
TkRDTEFTU0VYIHdjZXg7CisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Cisg
ICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7CisgICAgd2NleC5zdHlsZSAgICAgICAgICA9IENT
X0RCTENMS1M7CisgICAgd2NleC5scGZuV25kUHJvYyAgICA9IERlZldpbmRvd1Byb2M7CisgICAg
d2NleC5jYkNsc0V4dHJhICAgICA9IDA7CisgICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7Cisg
ICAgd2NleC5oSW5zdGFuY2UgICAgICA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7CisgICAg
d2NleC5oSWNvbiAgICAgICAgICA9IDA7CisgICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRD
dXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQgID0gKEhCUlVTSClD
T0xPUl9XSU5ET1c7CisgICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7CisgICAgd2NleC5scHN6
Q2xhc3NOYW1lICA9IGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lOworCisgICAgcmV0dXJuICEh
UmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKK30KKworTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3
OjpQbHVnaW5WaWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJh
bSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRl
cnByZXRfY2FzdDxQbHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3Bl
cnR5KSk7CisKKyAgICByZXR1cm4gcGx1Z2luVmlldy0+d25kUHJvYyhoV25kLCBtZXNzYWdlLCB3
UGFyYW0sIGxQYXJhbSk7Cit9CisKK3N0YXRpYyBib29sIGlzV2luZG93c01lc3NhZ2VVc2VyR2Vz
dHVyZShVSU5UIG1lc3NhZ2UpCit7CisgICAgc3dpdGNoIChtZXNzYWdlKSB7CisgICAgICAgIGNh
c2UgV01fTEJVVFRPTlVQOgorICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKKyAgICAgICAgY2Fz
ZSBXTV9SQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01fS0VZVVA6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50UG9pbnQgY29udGVudHNUb05hdGl2ZVdpbmRvdyhG
cmFtZVZpZXcqIHZpZXcsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gdmll
dy0+Y29udGVudHNUb1dpbmRvdyhwb2ludCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50UmVjdCBj
b250ZW50c1RvTmF0aXZlV2luZG93KEZyYW1lVmlldyogdmlldywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKK30KKworTFJF
U1VMVAorUGx1Z2luVmlldzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFN
IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICAvLyA8cmRhcjovLzU3MTExMzY+IFNvbWV0
aW1lcyBGbGFzaCB3aWxsIGNhbGwgU2V0Q2FwdHVyZSBiZWZvcmUgY3JlYXRpbmcKKyAgICAvLyBh
IGZ1bGwtc2NyZWVuIHdpbmRvdyBhbmQgd2lsbCBub3QgcmVsZWFzZSBpdCwgd2hpY2ggY2F1c2Vz
IHRoZQorICAgIC8vIGZ1bGwtc2NyZWVuIHdpbmRvdyB0byBuZXZlciByZWNlaXZlIG1vdXNlIGV2
ZW50cy4gV2Ugc2V0L3JlbGVhc2UgY2FwdHVyZQorICAgIC8vIG9uIG1vdXNlIGRvd24vdXAgYmVm
b3JlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIHRoZSBwbHVnLWluIHRvIHByZXZlbnQgdGhhdC4KKyAg
ICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKKyAgICAg
ICAgY2FzZSBXTV9NQlVUVE9ORE9XTjoKKyAgICAgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKKyAg
ICAgICAgICAgIDo6U2V0Q2FwdHVyZShoV25kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdNX0xCVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9NQlVUVE9OVVA6CisgICAgICAg
IGNhc2UgV01fUkJVVFRPTlVQOgorICAgICAgICAgICAgOjpSZWxlYXNlQ2FwdHVyZSgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UgPT0gbV9sYXN0TWVzc2Fn
ZSAmJgorICAgICAgICBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250
Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KSAmJiAKKyAgICAgICAgbV9pc0Nh
bGxpbmdQbHVnaW5XbmRQcm9jKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmIChtZXNzYWdl
ID09IFdNX1VTRVIgKyAxICYmCisgICAgICAgIG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKSkgeworICAgICAgICBpZiAo
IW1fbWVzc2FnZVRocm90dGxlcikKKyAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlciA9IGFk
b3B0UHRyKG5ldyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKHRoaXMpKTsKKworICAgICAgICBt
X21lc3NhZ2VUaHJvdHRsZXItPmFwcGVuZE1lc3NhZ2UoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBs
UGFyYW0pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtX2xhc3RNZXNzYWdlID0g
bWVzc2FnZTsKKyAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MgPSB0cnVlOworCisgICAgLy8g
SWYgdGhlIHBsdWctaW4gZG9lc24ndCBleHBsaWNpdGx5IHN1cHBvcnQgY2hhbmdpbmcgdGhlIHBv
cC11cCBzdGF0ZSwgd2UgZW5hYmxlCisgICAgLy8gcG9wdXBzIGZvciBhbGwgdXNlciBnZXN0dXJl
cy4KKyAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBwb3AgdGhlIHN0YXRlIGluIGEgdGltZXIs
IGJlY2F1c2UgdGhlIEZsYXNoIHBsdWctaW4gCisgICAgLy8gcG9wcyB1cCB3aW5kb3dzIGluIHJl
c3BvbnNlIHRvIGEgcG9zdGVkIG1lc3NhZ2UuCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT52ZXJzaW9uIDwgTlBWRVJTX0hBU19QT1BVUFNfRU5BQkxFRF9TVEFURSAmJgorICAgICAg
ICBpc1dpbmRvd3NNZXNzYWdlVXNlckdlc3R1cmUobWVzc2FnZSkgJiYgIW1fcG9wUG9wdXBzU3Rh
dGVUaW1lci5pc0FjdGl2ZSgpKSB7CisKKyAgICAgICAgcHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSh0
cnVlKTsKKworICAgICAgICBtX3BvcFBvcHVwc1N0YXRlVGltZXIuc3RhcnRPbmVTaG90KDApOwor
ICAgIH0KKworICAgIGlmIChtZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7CisgICAgICAgIC8v
IE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBXTV9QUklOVENM
SUVOVCwgc28gd2UKKyAgICAgICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdNX1BBSU5UIGFu
ZCByZWx5IG9uIG91ciBob29rZWQgdmVyc2lvbnMgb2YKKyAgICAgICAgLy8gQmVnaW5QYWludC9F
bmRQYWludCB0byBtYWtlIHRoZSBwbHVnaW4gZHJhdyBpbnRvIHRoZSBnaXZlbiBIREMuCisgICAg
ICAgIG1lc3NhZ2UgPSBXTV9QQUlOVDsKKyAgICAgICAgbV93bVByaW50SERDID0gcmVpbnRlcnBy
ZXRfY2FzdDxIREM+KHdQYXJhbSk7CisgICAgfQorCisgICAgLy8gQ2FsbCB0aGUgcGx1Zy1pbidz
IHdpbmRvdyBwcm9jLgorICAgIExSRVNVTFQgcmVzdWx0ID0gOjpDYWxsV2luZG93UHJvYyhtX3Bs
dWdpblduZFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKworICAgIG1fd21Q
cmludEhEQyA9IDA7CisKKyAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MgPSBmYWxzZTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lk
Z2V0KCkKK3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFt
ZVZpZXcmIGZyYW1lVmlldyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKTsKKworICAg
IEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENs
aXBSZWN0ID0gbV9jbGlwUmVjdDsKKworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVW
aWV3LmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSksIGZyYW1lUmVjdCgp
LnNpemUoKSk7CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlw
UmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CisKKyAgICBp
ZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSAmJiAoIW1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQg
fHwgbV93aW5kb3dSZWN0ICE9IG9sZFdpbmRvd1JlY3QgfHwgbV9jbGlwUmVjdCAhPSBvbGRDbGlw
UmVjdCkpIHsKKworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgICAgIC8v
IFRvIHByZXZlbnQgZmxhc2hlcyB3aGlsZSBzY3JvbGxpbmcsIHdlIGRpc2FibGUgZHJhd2luZyBk
dXJpbmcgdGhlIHdpbmRvdworICAgICAgICAvLyB1cGRhdGUgcHJvY2VzcyBieSBjbGlwcGluZyB0
aGUgd2luZG93IHRvIHRoZSB6ZXJvIHJlY3QuCisKKyAgICAgICAgYm9vbCBjbGlwVG9aZXJvUmVj
dCA9ICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVy
b1JlY3RXaGVuU2Nyb2xsaW5nKTsKKworICAgICAgICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsKKyAg
ICAgICAgICAgIGF1dG8gcmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKDAsIDAs
IDAsIDApKTsKKyAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCksIHJnbi5sZWFrKCksIEZBTFNFKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8gcmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBt
X2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKSk7Cisg
ICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24ubGVh
aygpLCBUUlVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9oYXZlVXBkYXRlZFBsdWdp
bldpZGdldCB8fCBtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCkKKyAgICAgICAgICAgIDo6
TW92ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dp
bmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgp
LCBUUlVFKTsKKworICAgICAgICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsKKyAgICAgICAgICAgIGF1
dG8gcmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBt
X2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKSk7Cisg
ICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24ubGVh
aygpLCBUUlVFKTsKKyAgICAgICAgfQorCisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OworCisgICAgICAgIG1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQgPSB0cnVlOworICAgIH0KK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCit7CisgICAgaWYgKGZv
Y3VzZWQgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgU2V0Rm9jdXMocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSk7CisKKyAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOworCisg
ICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IE5QRXZlbnQgbnBFdmVudDsKKworICAgIG5wRXZlbnQuZXZlbnQgPSBmb2N1c2VkID8gV01fU0VU
Rk9DVVMgOiBXTV9LSUxMRk9DVVM7CisgICAgbnBFdmVudC53UGFyYW0gPSAwOworICAgIG5wRXZl
bnQubFBhcmFtID0gMDsKKworICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpzaG93KCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsKKworICAg
IGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAg
ICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX1NIT1dOQSk7CisKKyAgICBX
aWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkKK3sKKyAgICBzZXRT
ZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgU2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCBTV19ISURFKTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCitib29sIFBsdWdpblZp
ZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBucEV2ZW50KQoreworICAgIGlmICghbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGJv
b2wgc2hvdWxkUG9wID0gZmFsc2U7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQU19FTkFCTEVEX1NUQVRFICYmIGlzV2luZG93c01l
c3NhZ2VVc2VyR2VzdHVyZShucEV2ZW50LmV2ZW50KSkgeworICAgICAgICBwdXNoUG9wdXBzRW5h
YmxlZFN0YXRlKHRydWUpOworICAgICAgICBzaG91bGRQb3AgPSB0cnVlOworICAgIH0KKworICAg
IEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6
Y29tbW9uVk0oKSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBib29sIGFjY2Vw
dGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVu
dCk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisKKyAgICBpZiAoc2hvdWxkUG9wKSAK
KyAgICAgICAgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7CisKKyAgICByZXR1cm4gYWNjZXB0ZWQ7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KEhEQyBo
ZGMpCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBTZW5kTWVzc2FnZShwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLCBXTV9QUklOVENMSUVOVCwgcmVpbnRlcnByZXRfY2FzdDxXUEFS
QU0+KGhkYyksIFBSRl9DTElFTlQgfCBQUkZfQ0hJTERSRU4gfCBQUkZfT1dORUQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJh
d2FibGU7CisgICAgbV9ucFdpbmRvdy53aW5kb3cgPSBoZGM7CisKKyAgICBXSU5ET1dQT1Mgd2lu
ZG93cG9zID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisKKyAgICBJbnRSZWN0IHIgPSBjb250
ZW50c1RvTmF0aXZlV2luZG93KGRvd25jYXN0PEZyYW1lVmlldz4ocGFyZW50KCkpLCBmcmFtZVJl
Y3QoKSk7CisKKyAgICB3aW5kb3dwb3MueCA9IHIueCgpOworICAgIHdpbmRvd3Bvcy55ID0gci55
KCk7CisgICAgd2luZG93cG9zLmN4ID0gci53aWR0aCgpOworICAgIHdpbmRvd3Bvcy5jeSA9IHIu
aGVpZ2h0KCk7CisKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisgICAgbnBFdmVudC5ldmVudCA9IFdN
X1dJTkRPV1BPU0NIQU5HRUQ7CisgICAgbnBFdmVudC5sUGFyYW0gPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oJndpbmRvd3Bvcyk7CisgICAgbnBFdmVudC53UGFyYW0gPSAwOworCisgICAg
ZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworCisgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVj
dCgpKTsKKworICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9QQUlOVDsKKyAgICBucEV2ZW50LndQYXJh
bSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoZGMpOworCisgICAgLy8gVGhpcyBpcyBz
dXBwb3NlZCB0byBiZSBhIHBvaW50ZXIgdG8gdGhlIGRpcnR5IHJlY3QsIGJ1dCBpdCBzZWVtcyB0
aGF0IHRoZSBGbGFzaCBwbHVnaW4KKyAgICAvLyBpZ25vcmVzIGl0IHNvIHdlIGp1c3QgcGFzcyBu
dWxsLgorICAgIG5wRXZlbnQubFBhcmFtID0gMDsKKworICAgIGRpc3BhdGNoTlBFdmVudChucEV2
ZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworI2lm
ICFVU0UoV0lOR0RJKQorICAgIEFTU0VSVChtX2lzV2luZG93ZWQpOworICAgIEFTU0VSVChjb250
ZXh0LT5zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkpOworCisgICAgSW50UG9pbnQgbG9jYXRp
b25JbldpbmRvdyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb252ZXJ0VG9Db250
YWluaW5nV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOworCisgICAgTG9jYWxXaW5kb3dz
Q29udGV4dCB3aW5kb3dzQ29udGV4dChjb250ZXh0LCBmcmFtZVJlY3QoKSwgZmFsc2UpOworCisj
aWYgVVNFKENBSVJPKQorICAgIC8vIE11c3QgZmx1c2ggZHJhd2luZ3MgdXAgdG8gdGhpcyBwb2lu
dCB0byB0aGUgYmFja2luZyBtZXRhZmlsZSwgb3RoZXJ3aXNlIHRoZQorICAgIC8vIHBsdWdpbiBy
ZWdpb24gd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIGFueSBjbGVhciByZWdpb25zIHNwZWNpZmll
ZCBpbiB0aGUKKyAgICAvLyBjYWlyby1jb250cm9sbGVkIHBvcnRpb25zIG9mIHRoZSByZW5kZXJp
bmcuCisgICAgY2Fpcm9fc2hvd19wYWdlKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
KTsKKyNlbmRpZgorCisgICAgSERDIGhkYyA9IHdpbmRvd3NDb250ZXh0LmhkYygpOworICAgIFhG
T1JNIG9yaWdpbmFsVHJhbnNmb3JtOworICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYywgJm9yaWdp
bmFsVHJhbnNmb3JtKTsKKworICAgIC8vIFRoZSBwbHVnaW4gZXhwZWN0cyB0aGUgREMgdG8gYmUg
aW4gY2xpZW50IGNvb3JkaW5hdGVzLCBzbyB3ZSB0cmFuc2xhdGUKKyAgICAvLyB0aGUgREMgdG8g
bWFrZSB0aGF0IHNvLgorICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjb250ZXh0LT5nZXRDVE0o
KTsKKyAgICBjdG0udHJhbnNsYXRlKGxvY2F0aW9uSW5XaW5kb3cueCgpLCBsb2NhdGlvbkluV2lu
ZG93LnkoKSk7CisgICAgWEZPUk0gdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8WEZPUk0+KGN0bS50
b1RyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworCisgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAm
dHJhbnNmb3JtKTsKKworICAgIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChoZGMpOworCisg
ICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmb3JpZ2luYWxUcmFuc2Zvcm0pOworI2VuZGlmCit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgLy8g
RHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAgICBwYWludE1pc3NpbmdQbHVn
aW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
RW5zdXJlIHRoYXQgd2UgaGF2ZSBjYWxsZWQgU2V0V2luZG93IGJlZm9yZSB3ZSB0cnkgdG8gcGFp
bnQuCisgICAgaWYgKCFtX2hhdmVDYWxsZWRTZXRXaW5kb3cpCisgICAgICAgIHNldE5QV2luZG93
UmVjdChmcmFtZVJlY3QoKSk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisjaWYgIVVTRShX
SU5HREkpCisgICAgICAgIGlmIChjb250ZXh0LT5zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkp
CisgICAgICAgICAgICBwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQoY29udGV4dCwgcmVj
dCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEluIHRoZSBHVEsg
YW5kIFF0IHBvcnRzIHdlIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgZG9uJ3Qgd2Fu
dCB0byB1c2UgdGhlIHdpbmRvdworICAgIC8vIGNvb3JkaW5hdGVzLgorI2lmIFBMQVRGT1JNKEdU
SykKKyAgICBJbnRSZWN0IHJlY3RJbldpbmRvdyhyZWN0KTsKKyAgICByZWN0SW5XaW5kb3cuaW50
ZXJzZWN0KGZyYW1lUmVjdCgpKTsKKyNlbHNlCisgICAgSW50UmVjdCByZWN0SW5XaW5kb3cgPSBk
b3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3Qo
KSk7CisjZW5kaWYKKyAgICBMb2NhbFdpbmRvd3NDb250ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRl
eHQsIHJlY3RJbldpbmRvdywgbV9pc1RyYW5zcGFyZW50KTsKKworICAgIC8vIE9uIFNhZmFyaS9X
aW5kb3dzIHdpdGhvdXQgdHJhbnNwYXJlbmN5IGxheWVycyB0aGUgR3JhcGhpY3NDb250ZXh0IHJl
dHVybnMgdGhlIEhEQworICAgIC8vIG9mIHRoZSB3aW5kb3cgYW5kIHRoZSBwbHVnaW4gZXhwZWN0
cyB0aGF0IHRoZSBwYXNzZWQgaW4gREMgaGFzIHdpbmRvdyBjb29yZGluYXRlcy4KKyAgICAvLyBJ
biB0aGUgR1RLIGFuZCBRdCBwb3J0cyB3ZSBhbHdheXMgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVm
ZmVyIGFuZCB0aGVyZWZvcmUgbmVlZAorICAgIC8vIHRvIHByZXNlcnZlIHRoZSB0cmFuc2xhdGlv
biBzZXQgaW4gZ2V0V2luZG93c0NvbnRleHQuCisjaWYgIVBMQVRGT1JNKEdUSykKKyAgICBpZiAo
IWNvbnRleHQtPmlzSW5UcmFuc3BhcmVuY3lMYXllcigpKSB7CisgICAgICAgIFhGT1JNIHRyYW5z
Zm9ybTsKKyAgICAgICAgR2V0V29ybGRUcmFuc2Zvcm0od2luZG93c0NvbnRleHQuaGRjKCksICZ0
cmFuc2Zvcm0pOworICAgICAgICB0cmFuc2Zvcm0uZUR4ID0gMDsKKyAgICAgICAgdHJhbnNmb3Jt
LmVEeSA9IDA7CisgICAgICAgIFNldFdvcmxkVHJhbnNmb3JtKHdpbmRvd3NDb250ZXh0LmhkYygp
LCAmdHJhbnNmb3JtKTsKKyAgICB9CisjZW5kaWYKKworICAgIHBhaW50SW50b1RyYW5zZm9ybWVk
Q29udGV4dCh3aW5kb3dzQ29udGV4dC5oZGMoKSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQobV9w
bHVnaW4gJiYgIW1faXNXaW5kb3dlZCk7CisKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICBu
cEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2RlKCk7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQg
PSBXTV9LRVlET1dOOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CisgICAgICAg
IG5wRXZlbnQuZXZlbnQgPSBXTV9DSEFSOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7Cisg
ICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7
CisgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlVUDsKKyAgICAgICAgbnBFdmVudC5sUGFy
YW0gPSAweDgwMDA7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7CisgICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK2V4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7
CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkK
K3sKKyAgICBBU1NFUlQobV9wbHVnaW4gJiYgIW1faXNXaW5kb3dlZCk7CisKKyAgICBOUEV2ZW50
IG5wRXZlbnQ7CisKKyAgICBJbnRQb2ludCBwID0gY29udGVudHNUb05hdGl2ZVdpbmRvdyhkb3du
Y2FzdDxGcmFtZVZpZXc+KHBhcmVudCgpKSwgSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50
LT5wYWdlWSgpKSk7CisKKyAgICBucEV2ZW50LmxQYXJhbSA9IE1BS0VMUEFSQU0ocC54KCksIHAu
eSgpKTsKKyAgICBucEV2ZW50LndQYXJhbSA9IDA7CisKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXko
KSkKKyAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfQ09OVFJPTDsKKyAgICBpZiAoZXZlbnQt
PnNoaWZ0S2V5KCkpCisgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOworCisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50IHx8CisgICAg
ICAgIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgCisgICAg
ICAgIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CisgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7CisgICAgICAgIGlmIChldmVudC0+YnV0
dG9uRG93bigpKQorICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIExlZnRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQu
d1BhcmFtIHw9IE1LX0xCVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50
LndQYXJhbSB8PSBNS19NQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50
LndQYXJhbSB8PSBNS19SQlVUVE9OOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZWRvd25FdmVudCkgeworICAgICAgICBmb2N1c1BsdWdpbkVsZW1lbnQoKTsKKyAgICAgICAg
c3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAg
ICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTkRPV047CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVu
dCA9IFdNX01CVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9ORE9XTjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7CisgICAgICAgIHN3aXRjaCAo
ZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJV
VFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAg
ICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9OVVA7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmFjayBwb3J0aW5nIHRoZSBodHRw
Oi8vd2Via2l0Lm9yZy9iLzU4MTA4IGZpeCBoZXJlLgorICAgIGlmIChkaXNwYXRjaE5QRXZlbnQo
bnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworCisjaWYgIVBM
QVRGT1JNKEdUSykKKyAgICAvLyBDdXJyZW50bHksIFdpZGdldDo6c2V0Q3Vyc29yIGlzIGFsd2F5
cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpbiBFdmVudEhhbmRsZXIuY3BwCisgICAgLy8g
YW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3ZSBzZXQgaWdub3JlTmV4dFNldEN1cnNvciB0
byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0LgorICAgIGlnbm9yZU5leHRTZXRDdXJzb3IgPSB0
cnVlOworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAg
ICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5zZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29y
KCk7CisjZW5kaWYKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyog
cGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisKKyAgICBpZiAocGFy
ZW50KQorICAgICAgICBpbml0KCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghcGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBJZiB0aGUg
cGx1Zy1pbiB3aW5kb3cgb3Igb25lIG9mIGl0cyBjaGlsZHJlbiBoYXZlIHRoZSBmb2N1cywgd2Ug
bmVlZCB0byAKKyAgICAgICAgLy8gY2xlYXIgaXQgdG8gcHJldmVudCB0aGUgd2ViIHZpZXcgd2lu
ZG93IGZyb20gYmVpbmcgZm9jdXNlZCBiZWNhdXNlIHRoYXQgY2FuCisgICAgICAgIC8vIHRyaWdn
ZXIgYSBsYXlvdXQgd2hpbGUgdGhlIHBsdWdpbiBlbGVtZW50IGlzIGJlaW5nIGRldGFjaGVkLgor
ICAgICAgICBIV05EIGZvY3VzZWRXaW5kb3cgPSA6OkdldEZvY3VzKCk7CisgICAgICAgIGlmIChw
bGF0Zm9ybVBsdWdpbldpZGdldCgpID09IGZvY3VzZWRXaW5kb3cgfHwgOjpJc0NoaWxkKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIGZvY3VzZWRXaW5kb3cpKQorICAgICAgICAgICAgOjpTZXRGb2N1
cygwKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29s
IHZpc2libGUpCit7CisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKKwor
ICAgIGlmIChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgeworICAg
ICAgICBpZiAodmlzaWJsZSkKKyAgICAgICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgU1dfU0hPV05BKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgU2hvd1dpbmRv
dyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19ISURFKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW4gdGhlIEdUSyBwb3J0
IHdlIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgZG9uJ3Qgd2FudCB0byB1c2UgdGhl
IHdpbmRvdworICAgIC8vIGNvb3JkaW5hdGVzLgorIyBpZiBQTEFURk9STShHVEspCisgICAgSW50
UG9pbnQgcCA9IHJlY3QubG9jYXRpb24oKTsKKyMgZWxzZQorICAgIEludFBvaW50IHAgPSBkb3du
Y2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9u
KCkpOworIyBlbmRpZgorICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cu
eSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBt
X25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9t
ID0gcmVjdC5oZWlnaHQoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAg
IG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3
aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KGZhbHNlKTsKKworICAgICAgICBtX2hhdmVDYWxsZWRTZXRXaW5kb3cgPSB0cnVlOworCisgICAg
ICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFT
U0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKworICAgICAgICBXTkRQUk9DIGN1cnJlbnRX
bmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCBHV0xQX1dORFBST0MpOworICAgICAgICBpZiAoY3VycmVudFduZFByb2MgIT0gUGx1Z2luVmll
d1duZFByb2MpCisgICAgICAgICAgICBtX3BsdWdpblduZFByb2MgPSAoV05EUFJPQylTZXRXaW5k
b3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRS
KVBsdWdpblZpZXdXbmRQcm9jKTsKKyAgICB9Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFu
ZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0
IGNoYXIqIGJ1ZikKK3sKKyAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOworCisgICAgaWYg
KGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAgIGZpbGVuYW1lID0gZmls
ZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAgLy8gR2V0IGZpbGUgaW5mbworICAgIFdJTjMyX0ZJ
TEVfQVRUUklCVVRFX0RBVEEgYXR0cnM7CisgICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXhXKGZp
bGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBHZXRGaWxlRXhJ
bmZvU3RhbmRhcmQsICZhdHRycykgPT0gMCkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9U
X0ZPVU5EOworCisgICAgaWYgKGF0dHJzLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVU
RV9ESVJFQ1RPUlkpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAg
IEhBTkRMRSBmaWxlSGFuZGxlID0gQ3JlYXRlRmlsZVcoZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKS5kYXRhKCksIEZJTEVfUkVBRF9EQVRBLCBGSUxFX1NIQVJFX1JFQUQs
IDAsIE9QRU5fRVhJU1RJTkcsIDAsIDApOworICAgIAorICAgIGlmIChmaWxlSGFuZGxlID09IElO
VkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7
CisKKyAgICBidWZmZXIucmVzaXplKGF0dHJzLm5GaWxlU2l6ZUxvdyk7CisKKyAgICBEV09SRCBi
eXRlc1JlYWQ7CisgICAgaW50IHJldHZhbCA9IFJlYWRGaWxlKGZpbGVIYW5kbGUsIGJ1ZmZlci5k
YXRhKCksIGF0dHJzLm5GaWxlU2l6ZUxvdywgJmJ5dGVzUmVhZCwgMCk7CisKKyAgICBDbG9zZUhh
bmRsZShmaWxlSGFuZGxlKTsKKworICAgIGlmIChyZXR2YWwgPT0gMCB8fCBieXRlc1JlYWQgIT0g
YXR0cnMubkZpbGVTaXplTG93KQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7
CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSwgdm9pZCosIE5QRXJyb3IqKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5Q
TlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAg
IHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsK
KyAgICAgICAgICAgIEhXTkQqIHcgPSByZWludGVycHJldF9jYXN0PEhXTkQqPih2YWx1ZSk7Cisg
ICAgICAgICAgICAqdyA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQocGFyZW50KCkgPyBwYXJl
bnQoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSA6IDApOworICAgICAgICAg
ICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6IHsKKyAgICAg
ICAgICAgIE5QQm9vbCogZmxhZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBCb29sKj4odmFsdWUpOwor
ICAgICAgICAgICAgKmZsYWcgPSBUUlVFOworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05P
X0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9pc1dpbmRv
d2VkKSB7CisgICAgICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHJlY3QueCgpLCByZWN0LnkoKSwg
cmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIH07CisgICAgICAgIDo6SW52YWxpZGF0ZVJlY3QocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRSZWN0LCBmYWxzZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAg
IGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAt
IHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7CisKKyAgICBpZiAobV9pc1dp
bmRvd2VkKSB7CisgICAgICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHIueCgpLCByLnkoKSwgci5t
YXhYKCksIHIubWF4WSgpIH07CisgICAgICAgIEludmFsaWRhdGVSZWN0KHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCksICZpbnZhbGlkUmVjdCwgRkFMU0UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRh
dGUpKSB7CisgICAgICAgICAgICBtX2ludmFsaWRSZWN0cy5hcHBlbmQocik7CisgICAgICAgICAg
ICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICAgICAgbV9p
bnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBpbnZhbGlkYXRlUmVjdChyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgaWYgKG1faXNXaW5kb3dl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUkVDVCByOworCisgICAgaWYgKEdldFJnbkJveChy
ZWdpb24sICZyKSA9PSAwKSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEludFJlY3QgcmVjdChJbnRQb2ludChyLmxlZnQsIHIudG9wKSwgSW50
U2l6ZShyLnJpZ2h0LXIubGVmdCwgci5ib3R0b20tci50b3ApKTsKKyAgICBpbnZhbGlkYXRlUmVj
dChyZWN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7CisgICAgaWYg
KG1faXNXaW5kb3dlZCkKKyAgICAgICAgOjpVcGRhdGVXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSk7CisgICAgZWxzZQorICAgICAgICA6OlVwZGF0ZVdpbmRvdyh3aW5kb3dIYW5kbGVGb3JQ
YWdlQ2xpZW50KHBhcmVudCgpID8gcGFyZW50KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdl
Q2xpZW50KCkgOiAwKSk7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCit7
CisgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKKyAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAg
ICAgICAgcmVnaXN0ZXJQbHVnaW5WaWV3KCk7CisgICAgICAgIHNldFVwT2Zmc2NyZWVuUGFpbnRp
bmdIb29rcyhob29rZWRCZWdpblBhaW50LCBob29rZWRFbmRQYWludCk7CisKKyAgICAgICAgRFdP
UkQgZmxhZ3MgPSBXU19DSElMRDsKKyAgICAgICAgaWYgKGlzU2VsZlZpc2libGUoKSkKKyAgICAg
ICAgICAgIGZsYWdzIHw9IFdTX1ZJU0lCTEU7CisKKyAgICAgICAgSFdORCBwYXJlbnRXaW5kb3dI
YW5kbGUgPSB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7CisgICAgICAgIEhXTkQgd2luZG93
ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZSwgMCwgZmxh
Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBw
YXJlbnRXaW5kb3dIYW5kbGUsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCksIDApOworCisj
aWYgT1MoV0lORE9XUykgJiYgUExBVEZPUk0oR1RLKQorICAgICAgICBtX3dpbmRvdyA9IHdpbmRv
dzsKKyNlbHNlCisgICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KHdpbmRvdyk7CisjZW5kaWYKKwor
ICAgICAgICAvLyBDYWxsaW5nIFNldFdpbmRvd0xvbmdQdHJBIGhlcmUgbWFrZXMgdGhlIHdpbmRv
dyBwcm9jIEFTQ0lJLCB3aGljaCBpcyByZXF1aXJlZCBieSBhdCBsZWFzdAorICAgICAgICAvLyB0
aGUgU2hvY2t3YXZlIERpcmVjdG9yIHBsdWctaW4uCisjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4
Nl82NCkKKyAgICAgICAgOjpTZXRXaW5kb3dMb25nUHRyQShwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCBHV0xQX1dORFBST0MsIChMT05HX1BUUilEZWZXaW5kb3dQcm9jQSk7CisjZWxzZQorICAgICAg
ICA6OlNldFdpbmRvd0xvbmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9D
LCAoTE9ORylEZWZXaW5kb3dQcm9jQSk7CisjZW5kaWYKKyAgICAgICAgU2V0UHJvcChwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5LCB0aGlzKTsKKworICAgICAg
ICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAgICAgIG1fbnBXaW5k
b3cud2luZG93ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdp
bmRvdy53aW5kb3cgPSAwOworICAgIH0KKworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOworCisg
ICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0
U2V0V2luZG93Q2FsbCkpCisgICAgICAgIHNldE5QV2luZG93UmVjdChmcmFtZVJlY3QoKSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3ko
KQoreworICAgIGlmICghcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRGVzdHJveVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICBzZXRQbGF0
Zm9ybVBsdWdpbldpZGdldCgwKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gUGx1Z2luVmlldzo6
c25hcHNob3QoKQoreworI2lmICFQTEFURk9STShHVEspICYmICFVU0UoV0lOR0RJKQorICAgIGF1
dG8gaGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOworCisgICAg
aWYgKCFtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgLy8gRW5hYmxlIHdvcmxkIHRyYW5zZm9ybXMu
CisgICAgICAgIFNldEdyYXBoaWNzTW9kZShoZGMuZ2V0KCksIEdNX0FEVkFOQ0VEKTsKKworICAg
ICAgICBYRk9STSB0cmFuc2Zvcm07CisgICAgICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYy5nZXQo
KSwgJnRyYW5zZm9ybSk7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBwbHVnLWlucyBhc3N1bWUg
dGhhdCB0aGV5J3JlIGRyYXdpbmcgb250byB0aGUgdmlldydzIERDLgorICAgICAgICAvLyBUcmFu
c2xhdGUgdGhlIGNvbnRleHQgc28gdGhhdCB0aGUgcGx1Zy1pbiBkcmF3cyBhdCAoMCwgMCkuCisg
ICAgICAgIEludFBvaW50IHBvc2l0aW9uID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkp
LmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkpLmxvY2F0aW9uKCk7CisgICAgICAgIHRyYW5z
Zm9ybS5lRHggPSAtcG9zaXRpb24ueCgpOworICAgICAgICB0cmFuc2Zvcm0uZUR5ID0gLXBvc2l0
aW9uLnkoKTsKKyAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgpLCAmdHJhbnNmb3Jt
KTsKKyAgICB9CisKKyAgICB2b2lkKiBiaXRzOworICAgIEJpdG1hcEluZm8gYm1wID0gQml0bWFw
SW5mbzo6Y3JlYXRlQm90dG9tVXAoZnJhbWVSZWN0KCkuc2l6ZSgpKTsKKyAgICBhdXRvIGhibXAg
PSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJtcCwgRElCX1JHQl9DT0xP
UlMsICZiaXRzLCAwLCAwKSk7CisKKyAgICBIQklUTUFQIGhibXBPbGQgPSBzdGF0aWNfY2FzdDxI
QklUTUFQPihTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1wLmdldCgpKSk7CisKKyAgICBwYWlu
dEludG9UcmFuc2Zvcm1lZENvbnRleHQoaGRjLmdldCgpKTsKKworICAgIFNlbGVjdE9iamVjdCho
ZGMuZ2V0KCksIGhibXBPbGQpOworCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoaGJt
cC5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvbnBhcGku
Y3BwIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9ucGFwaS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRk
OTBhNTJiN2ExZTdjOTZlOGRmNGQ4OTliY2Y4MDE5NDhlZmZkMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvbnBhcGkuY3BwCkBAIC0wLDAgKzEsMjA4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJu
cHJ1bnRpbWVfaW50ZXJuYWwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRo
ZSBwbHVnaW4gdmlldyBpcyBhbHdheXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0
aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxsIGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCisv
LyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0
IHBsdWctaW4gdmlldyB0aGF0IG1hZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4KKy8vIEN1cnJlbnRs
eSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGlu
IFBsdWdpblZpZXc6OnN0YXJ0LgorLy8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZs
YXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1Vz
ZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0YW5jZS4KK3N0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoTlBQIGluc3RhbmNlKQoreworICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0
YW5jZS0+bmRhdGEpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5z
dGFuY2UtPm5kYXRhKTsKKyAgICByZXR1cm4gUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZpZXco
KTsKK30KKwordm9pZCogTlBOX01lbUFsbG9jKHVpbnQzMl90IHNpemUpCit7CisgICAgcmV0dXJu
IG1hbGxvYyhzaXplKTsKK30KKwordm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCit7CisgICAg
ZnJlZShwdHIpOworfQorCit1aW50MzJfdCBOUE5fTWVtRmx1c2godWludDMyX3QpCit7CisgICAg
Ly8gRG8gbm90aGluZworICAgIHJldHVybiAwOworfQorCit2b2lkIE5QTl9SZWxvYWRQbHVnaW5z
KE5QQm9vbCByZWxvYWRQYWdlcykKK3sKKyAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxvYWRQ
YWdlcyk7Cit9CisKK05QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiwgTlBCeXRlUmFu
Z2UqKQoreworICAgIHJldHVybiBOUEVSUl9TVFJFQU1fTk9UX1NFRUtBQkxFOworfQorCitOUEVy
cm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3RpZnlE
YXRhKTsKK30KKworTlBFcnJvciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPmdldFVSTCh1cmwsIHRhcmdldCk7Cit9CisKK05QRXJyb3IgTlBOX1Bv
c3RVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBu
b3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5wb3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7
Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9v
bCBmaWxlKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5w
b3N0VVJMKHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSk7Cit9CisKK05QRXJyb3IgTlBOX05l
d1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0
LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKS0+bmV3U3RyZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKK30KKworaW50MzJf
dCBOUE5fV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwg
dm9pZCogYnVmZmVyKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT53cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKK30KKworTlBFcnJvciBOUE5fRGVzdHJv
eVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikK
K3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0
cmVhbShzdHJlYW0sIHJlYXNvbik7Cit9CisKK2NvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQ
IGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpOworCisgICAgIGlmICghdmlldykKKyAgICAgICAgIHJldHVybiBQbHVnaW5W
aWV3Ojp1c2VyQWdlbnRTdGF0aWMoKTsKKyAKKyAgICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7
Cit9CisKK3ZvaWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
Cit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2Up
OworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52
YWxpZFJlY3QpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5j
ZShpbnN0YW5jZSk7CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIC8vIE5TUGx1Z2luV3JhcHBl
ciwgYSBwbHVnaW4gd3JhcHBlciBiaW5hcnkgdGhhdCBhbGxvd3MgcnVubmluZyAzMi1iaXQgcGx1
Z2lucworICAgIC8vIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIHR5cGljYWxseSB1c2VkIGluIFgx
MSwgd2lsbCBzb21ldGltZXMgZ2l2ZSB1cyBhIG51bGwgTlBQIGhlcmUuCisgICAgaWYgKCF2aWV3
KQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChpbnZh
bGlkUmVjdCk7Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNlLCBO
UFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSktPmludmFsaWRhdGVSZWdpb24oaW52YWxpZFJlZ2lvbik7Cit9CisKK3ZvaWQgTlBOX0Zv
cmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT5mb3JjZVJlZHJhdygpOworfQorCitOUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5z
dGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBQbHVnaW5W
aWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKKworICAgICBpZiAo
IXZpZXcpCisgICAgICAgICByZXR1cm4gUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWModmFyaWFi
bGUsIHZhbHVlKTsKKworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQorCitOUEVycm9yIE5QTl9TZXRWYWx1ZShO
UFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgIHJl
dHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwg
dmFsdWUpOworfQorCit2b2lkKiBOUE5fR2V0SmF2YUVudigpCit7CisgICAgLy8gVW5zdXBwb3J0
ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCogTlBOX0dldEphdmFQZWVyKE5QUCkKK3sKKyAg
ICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkIE5QTl9QdXNoUG9wdXBz
RW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpCit7CisgICAgcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShlbmFibGVk
KTsKK30KKwordm9pZCBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkKK3sK
KyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3BQb3B1cHNFbmFibGVkU3Rh
dGUoKTsKK30KKworZXh0ZXJuICJDIiB0eXBlZGVmIHZvaWQgUGx1Z2luVGhyZWFkQXN5bmNDYWxs
RnVuY3Rpb24odm9pZCopOwordm9pZCBOUE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsKE5QUCBpbnN0
YW5jZSwgUGx1Z2luVGhyZWFkQXN5bmNDYWxsRnVuY3Rpb24gZnVuYywgdm9pZCogdXNlckRhdGEp
Cit7CisgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZSBvbmx5IGRpZmZlcnMgZnJvbSBNYWlu
VGhyZWFkRnVuY3Rpb24gYnkgYmVpbmcgZXh0ZXJuICJDIiwgd2hpY2ggZG9lc24ndCBhZmZlY3Qg
Y2FsbGluZyBjb252ZW50aW9uIG9uIGFueSBjb21waWxlcnMgd2UgdXNlLgorICAgIFBsdWdpbk1h
aW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnNjaGVkdWxlQ2FsbChpbnN0YW5jZSwgcmVp
bnRlcnByZXRfY2FzdDxQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpNYWluVGhyZWFkRnVuY3Rp
b24qPihmdW5jKSwgdXNlckRhdGEpOworfQorCitOUEVycm9yIE5QTl9HZXRWYWx1ZUZvclVSTChO
UFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNo
YXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWVGb3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUsIGxl
bik7Cit9CisKK05QRXJyb3IgTlBOX1NldFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJM
VmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVp
bnQzMl90IGxlbikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+c2V0VmFsdWVGb3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUsIGxlbik7Cit9CisKK05QRXJy
b3IgTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mbyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHBy
b3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVt
ZSwgY29uc3QgY2hhciogcmVhbG0sIGNoYXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNo
YXIqKiBwYXNzd29yZCwgdWludDMyX3QqIHBsZW4pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSktPmdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90b2NvbCwgaG9z
dCwgcG9ydCwgc2NoZW1lLCByZWFsbSwgdXNlcm5hbWUsIHVsZW4sIHBhc3N3b3JkLCBwbGVuKTsK
K30KKworTlBFcnJvciBOUE5fUG9wVXBDb250ZXh0TWVudShOUFAgaW5zdGFuY2UsIE5QTWVudSog
bWVudSkKK3sKKyAgICBVTlVTRURfUEFSQU0oaW5zdGFuY2UpOworICAgIFVOVVNFRF9QQVJBTSht
ZW51KTsKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244088</attachid>
            <date>2015-01-06 12:18:46 -0800</date>
            <delta_ts>2015-01-06 13:50:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140133-20150106121850.patch</filename>
            <type>text/plain</type>
            <size>488686</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVlNTJkZmMxNjVjZmM2
NzM5MWM3MzVjZmU0MWU5ODlmNmNhYjdhYy4uZjAzYzVjMjdhZDM5ZGM1YjU0Y2FhMzQ0MzNlZDJh
NTlhZTkwNDgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0aGUgV2lu
ZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
OgorCisyMDE1LTAxLTA2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisK
ICAgICAgICAgVHJ5IHRvIGZpeCB0aGUgV2luZG93cyBidWlsZC4KIAogICAgICAgICAqIFdlYkNv
cmUudmN4cHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5MDg5NTNj
YWYyZTQzN2Q4NjI4OTNjNjQ4NTQ5MGYzODMyNTQ3MWZmLi4zYmFiZTM0MmE0MjVmNDMxNjgyY2Yy
ZGJhYzVhMTE5MWJhOWQyOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0
aGUgV2luZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvajoKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0
LnZjeHByb2ouZmlsdGVyczoKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlkZXIK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEyNgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKaW5kZXggNjNhNWNjNjg5NGY4NmU0N2YxYmU4YjhiOWJjMGM4NjgwMTli
NjdhZS4uNzAyMjc4YWI2NmRlYmMzOTU4ZWU5ODBjZjg3ZTI1NDE0YjAzZDgyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwpAQCAtMSw1ICsxLDMxMCBAQAogMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCisgICAgICAgIE1vdmUgdGhlIFdpbmRvd3Mgb25seSBwbHVn
LWluIGNvZGUgdG8gV2ViS2l0L3dpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQwMTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbHVnaW5zL1BhaW50SG9va3MuYXNtOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGFpbnRIb29rcy5hc20uCisgICAgICAgICogUGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6UGx1
Z2luRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVz
aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZURp
c2FibGVkUGx1Z2luRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6YWRk
RGlzYWJsZWRQbHVnaW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpk
ZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFk
VVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlVVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnNldFBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjphZGRQbHVnaW5Q
YXRoc0Zyb21SZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6Z2V0
UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVmVyc2lv
blN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlVmVyc2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6YWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3Jl
OjphZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6YWRk
SmF2YVBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpzYWZhcmlQbHVnaW5zRGly
ZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmll
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVj
dG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXR0
eU5hbWVGb3JEcmF3aW5nTW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvckV2
ZW50TW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUpOgorICAgICAgICAqIFBsdWdpbnMv
UGx1Z2luRGVidWcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGVidWcuaC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW46On5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vzc1F1ZXVl
ZE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNzYWdlKToKKyAgICAgICAgKiBQ
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaC4KKyAgICAgICAg
KiBQbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2th
Z2U6On5QbHVnaW5QYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZy
ZWVMaWJyYXJ5U29vbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmcmVlTGli
cmFyeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6Y29tcGFy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnVubG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZTo6ZGV0ZXJtaW5lUXVpcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0TGlzdEZyb21WYXJpYW50QXJncyk6CisgICAgICAgIChXZWJDb3JlOjptYWtlU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOUE5f
SW52b2tlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2luTG9hZGVkKToKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdp
blBhY2thZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5oLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnBhcmVudERpcmVj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjptb2R1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblBhY2thZ2U6Om1pbWVUb0Rlc2NyaXB0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjptaW1lVG9FeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
OjpwbHVnaW5GdW5jcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpxdWlya3Mp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6dmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmdWxsTUlNRURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blBhY2thZ2VIYXNoOjplcXVhbCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2lu
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmVyc2lvbkluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2U6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24pOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luUXVp
cmtTZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtT
ZXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblF1aXJrU2V0OjpQbHVnaW5RdWlya1NldCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5RdWlya1NldDo6YWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblF1aXJrU2V0Ojpjb250YWlucyk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6c3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5TdHJlYW06OlBsdWdpblN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJl
YW06On5QbHVnaW5TdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6bGFzdE1vZGlmaWVkRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OnN0YXJ0U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6b3duZXJGb3JT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblN0cmVhbTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjp3YW50
c0FsbFN0cmVhbXMpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luU3RyZWFtLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luU3RyZWFtQ2xpZW50Ojp+UGx1Z2luU3RyZWFtQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5TdHJlYW06OnNldExvYWRNYW51YWxseSk6CisgICAgICAgICogUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
dy5jcHAuCisgICAgICAgIChXZWJDb3JlOjppbnN0YW5jZU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNl
dEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpmcmFtZVJlY3RzQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
dGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjdXJy
ZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVVVEY4U3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNjaGVkdWxlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6Z2V0VVJMTm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpwb3N0VVJMTm90aWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBvc3RVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6bmV3U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRlc3Ryb3lTdHJlYW0p
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmludmFsaWRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnB1
c2hQb3B1cHNFbmFibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmFyZVBv
cHVwc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0SmF2YVNjcmlw
dFBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OlBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9jdXNQbHVnaW5F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0Q2FsbGluZ1BsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppc0Nh
bGxpbmdQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydHNXaXRoQmxhbmtMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2F0aW9u
QWZ0ZXJGaXJzdEJsYW5rTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRU9MKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlUG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZh
bGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50U3Rh
dGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjprZWVwQWxpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5WaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblJlcXVlc3Q6OlBsdWdpblJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUmVxdWVzdDo6ZnJhbWVMb2FkUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5SZXF1ZXN0Ojpub3RpZnlEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblJlcXVlc3Q6OnNlbmROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luUmVxdWVzdDo6c2hvdWxkQWxsb3dQb3B1cHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWFudWFsTG9hZGVyOjp+UGx1Z2luTWFudWFsTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdGF0dXMpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwYXJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbHVnaW5zUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjptaW1l
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cmwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cGx1Z2luV25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXRQbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjp0b1BsdWdp
blZpZXcpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcC4KKyAgICAgICAg
KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aG9va2VkQmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpob29r
ZWRFbmRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpob29rKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3Rl
clBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlld1du
ZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6aXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRlbnRzVG9OYXRpdmVXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFp
bnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnNuYXBzaG90KToKKyAgICAgICAgKiBQbHVnaW5zL25wYXBpLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwLgorICAgICAgICAocGx1Z2luVmlld0Zvcklu
c3RhbmNlKToKKyAgICAgICAgKE5QTl9NZW1BbGxvYyk6CisgICAgICAgIChOUE5fTWVtRnJlZSk6
CisgICAgICAgIChOUE5fTWVtRmx1c2gpOgorICAgICAgICAoTlBOX1JlbG9hZFBsdWdpbnMpOgor
ICAgICAgICAoTlBOX1JlcXVlc3RSZWFkKToKKyAgICAgICAgKE5QTl9HZXRVUkxOb3RpZnkpOgor
ICAgICAgICAoTlBOX0dldFVSTCk6CisgICAgICAgIChOUE5fUG9zdFVSTE5vdGlmeSk6CisgICAg
ICAgIChOUE5fUG9zdFVSTCk6CisgICAgICAgIChOUE5fTmV3U3RyZWFtKToKKyAgICAgICAgKE5Q
Tl9Xcml0ZSk6CisgICAgICAgIChOUE5fRGVzdHJveVN0cmVhbSk6CisgICAgICAgIChOUE5fVXNl
ckFnZW50KToKKyAgICAgICAgKE5QTl9TdGF0dXMpOgorICAgICAgICAoTlBOX0ludmFsaWRhdGVS
ZWN0KToKKyAgICAgICAgKE5QTl9JbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKE5QTl9Gb3Jj
ZVJlZHJhdyk6CisgICAgICAgIChOUE5fR2V0VmFsdWUpOgorICAgICAgICAoTlBOX1NldFZhbHVl
KToKKyAgICAgICAgKE5QTl9HZXRKYXZhRW52KToKKyAgICAgICAgKE5QTl9HZXRKYXZhUGVlcik6
CisgICAgICAgIChOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSk6CisgICAgICAgIChOUE5fUG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwp
OgorICAgICAgICAoTlBOX0dldFZhbHVlRm9yVVJMKToKKyAgICAgICAgKE5QTl9TZXRWYWx1ZUZv
clVSTCk6CisgICAgICAgIChOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKE5Q
Tl9Qb3BVcENvbnRleHRNZW51KToKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlk
ZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEy
NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpp
bmRleCA0Zjc2NjkzNjQyMGVlMGMwMzVkZWExOTgzYTE0Nzc3MzA5OGFhYTA5Li41ZmE3YjNkYjg2
NDI5ZmM4YTU1NDJiYmFkZjdhOTFmYTc1N2M4NTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTE3NzU0LDE4ICsxNzc1NCw4IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXERPTU1pbWVUeXBlQXJyYXkuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xET01QbHVnaW4uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xET01QbHVnaW5BcnJheS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXG5wYXBpLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YS5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGVidWcuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblN0cmVhbS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luRGF0YWJh
c2VXaW4uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblZpZXdXaW4uY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cc3ZnXFNWR0FsbEluT25lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHN2Z1xTVkdGb250RmFjZUVsZW1lbnQuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC0yMTAzMSwxNSArMjEwMjEsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xucGZ1bmN0aW9ucy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xucHJ1bnRpbWUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YS5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUXVpcmtTZXQuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyYXRlZ3kuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyZWFtLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4u
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN2Z1xDb2xvckRpc3RhbmNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcU1ZHQUVsZW1lbnQuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCIgLz4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ou
ZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ou
ZmlsdGVycwppbmRleCBmOTU5YjYzNGUzZTE2MWFkZjcwNmE0ZjAzMDdjZjEzNjM1NDczOTgyLi4y
MjMwODQ2MzY1YmM0N2M5YjNjYTY4YWVlYzgxMjFkNWFmZjUwZWFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBA
IC00NTY5LDQyICs0NTY5LDEyIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XERPTVBsdWdpbkFycmF5LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcbnBhcGku
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhLmNwcCI+CiAgICAg
ICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5z
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
bHVnaW5zXFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGx1
Z2luczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5QYWNrYWdlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luU3RyZWFtLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
Vmlldy5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5EYXRhYmFz
ZVdpbi5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zXHdpbjwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zXHdpbjwvRmlsdGVy
PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3
aW5cUGx1Z2luUGFja2FnZVdpbi5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zXHdpbjwvRmls
dGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1x3aW5cUGx1Z2luVmlld1dpbi5jcHAiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zXHdpbjwvRmls
dGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cc3ZnXFNW
R0FsbEluT25lLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzdmc8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTExNjEzLDMzICsxMTU4MywxMiBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhLmgiPgogICAgICAgPEZpbHRlcj5wbHVnaW5z
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bHVnaW5zXFBsdWdpbkRhdGFiYXNlLmgiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRlYnVnLmgiPgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXIuaCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2Fn
ZS5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5RdWlya1NldC5oIj4KLSAg
ICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5TdHJhdGVneS5oIj4KICAgICAgIDxGaWx0
ZXI+cGx1Z2luczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5TdHJlYW0uaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcUGx1Z2luVmlldy5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luc1x3aW48L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHN2Z1xD
b2xvckRpc3RhbmNlLmgiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc3ZnPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA2
NmIwYzM0Mzg1Nzc4NWJiNjgzNDEyMDhhMDczNjQzZTVmMjAzMTBhLi4wMTE4YzUwMzEzOTYwYTRm
NTYyZGIyMThkZmU4YTkzOTRiZmQ4N2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKQEAgLTkxLDcgKzkxLDYgQEAKICNpbmNsdWRlICJQYWdlVHJhbnNpdGlvbkV2ZW50Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5o
IgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJQb2xpY3lDaGVja2VyLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2Vy
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmYmEyY2VlMmRhNzJjYWYxNGI3NWNmMzZmYWFkMTRiNzVlNTc0
ODU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
Njc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0
ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFz
ZS5oIgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlLmgiCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNI
RSkKLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRsaWIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gUGx1Z2luUGFj
a2FnZUJ5TmFtZU1hcDsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FD
SEUpCi1zdGF0aWMgY29uc3Qgc2l6ZV90IG1heGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFD
YWNoZVNpemUgPSAzMjc2ODsKLQotc3RhdGljIGJvb2wgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0
YUNhY2hlSXNFbmFibGVkOwotCi1TdHJpbmcmIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hl
UGF0aCgpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY2Fj
aGVQYXRoLCAoKSk7Ci0gICAgcmV0dXJuIGNhY2hlUGF0aDsKLX0KLSNlbmRpZgotCi1QbHVnaW5E
YXRhYmFzZTo6UGx1Z2luRGF0YWJhc2UoKQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVU
QURBVEFfQ0FDSEUpCi0gICAgOiBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQoZmFs
c2UpCi0jZW5kaWYKLXsKLX0KLQotUGx1Z2luRGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0
YWxsZWRQbHVnaW5zKGJvb2wgcG9wdWxhdGUpCi17Ci0gICAgc3RhdGljIFBsdWdpbkRhdGFiYXNl
KiBwbHVnaW5zID0gMDsKLQotICAgIGlmICghcGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0g
bmV3IFBsdWdpbkRhdGFiYXNlOwotCi0gICAgICAgIGlmIChwb3B1bGF0ZSkgewotICAgICAgICAg
ICAgcGx1Z2lucy0+c2V0UGx1Z2luRGlyZWN0b3JpZXMoUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQ
bHVnaW5EaXJlY3RvcmllcygpKTsKLSAgICAgICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwbHVnaW5zOwotfQotCi1ib29sIFBsdWdpbkRh
dGFiYXNlOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewot
ICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUg
ZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgotICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1f
cmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpOwotfQotCi12b2lkIFBsdWdp
bkRhdGFiYXNlOjphZGRFeHRyYVBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9y
eSkKLXsKLSAgICBtX3BsdWdpbkRpcmVjdG9yaWVzLmFwcGVuZChkaXJlY3RvcnkpOwotICAgIHJl
ZnJlc2goKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgpCi17Ci0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICBpZiAoIW1fcGVyc2lzdGVu
dE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCkKLSAgICAgICAgbG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlKCk7Ci0jZW5kaWYKLSAgICBib29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKLQotICAg
IGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkgewotICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1Rv
VW5sb2FkOwotICAgICAgICBnZXREZWxldGVkUGx1Z2lucyhwbHVnaW5zVG9VbmxvYWQpOwotCi0g
ICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCi0gICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgpOwotICAgICAgICBmb3IgKFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgcmVtb3ZlKGl0LT5nZXQoKSk7Ci0KLSAgICAgICAgcGx1Z2luU2V0
Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIEhhc2hT
ZXQ8U3RyaW5nPiBwYXRoczsKLSAgICBnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMocGF0aHMp
OwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVfdD4gcGF0aHNXaXRoVGltZXM7Ci0KLSAgICAv
LyBXZSBzaG91bGQgb25seSBza2lwIHVuY2hhbmdlZCBmaWxlcyBpZiB3ZSBkaWRuJ3QgcmVtb3Zl
IGFueSBwbHVnaW5zIGFib3ZlLiBJZiB3ZSBkaWQgcmVtb3ZlCi0gICAgLy8gYW55IHBsdWdpbnMs
IHdlIG5lZWQgdG8gbG9vayBhdCBldmVyeSBwbHVnaW4gZmlsZSBzbyB0aGF0LCBlLmcuLCBpZiB0
aGUgdXNlciBoYXMgdHdvIHZlcnNpb25zCi0gICAgLy8gb2YgUmVhbFBsYXllciBpbnN0YWxsZWQg
YW5kIGp1c3QgcmVtb3ZlZCB0aGUgbmV3ZXIgb25lLCB3ZSdsbCBwaWNrIHVwIHRoZSBvbGRlciBv
bmUuCi0gICAgYm9vbCBzaG91bGRTa2lwVW5jaGFuZ2VkRmlsZXMgPSAhcGx1Z2luU2V0Q2hhbmdl
ZDsKLQotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGF0aHNFbmQgPSBwYXRo
cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
YXRocy5iZWdpbigpOyBpdCAhPSBwYXRoc0VuZDsgKytpdCkgewotICAgICAgICB0aW1lX3QgbGFz
dE1vZGlmaWVkOwotICAgICAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKCppdCwgbGFz
dE1vZGlmaWVkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHBhdGhzV2l0aFRp
bWVzLmFkZCgqaXQsIGxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHBhdGgncyB0
aW1lc3RhbXAgaGFzbid0IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSByYW4gcmVmcmVz
aCgpLCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgotICAgICAgICBpZiAoc2hvdWxkU2tp
cFVuY2hhbmdlZEZpbGVzICYmIG1fcGx1Z2luUGF0aHNXaXRoVGltZXMuZ2V0KCppdCkgPT0gbGFz
dE1vZGlmaWVkKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKFJlZlB0cjxQ
bHVnaW5QYWNrYWdlPiBvbGRQYWNrYWdlID0gbV9wbHVnaW5zQnlQYXRoLmdldCgqaXQpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIXNob3VsZFNraXBVbmNoYW5nZWRGaWxlcyB8fCBvbGRQYWNrYWdl
LT5sYXN0TW9kaWZpZWQoKSAhPSBsYXN0TW9kaWZpZWQpOwotICAgICAgICAgICAgcmVtb3ZlKG9s
ZFBhY2thZ2UuZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPFBsdWdpblBhY2th
Z2U+IHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKCppdCwgbGFzdE1vZGlm
aWVkKTsKLSAgICAgICAgaWYgKHBhY2thZ2UgJiYgYWRkKHBhY2thZ2UucmVsZWFzZSgpKSkKLSAg
ICAgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIENhY2hl
IGFsbCB0aGUgcGF0aHMgd2UgZm91bmQgd2l0aCB0aGVpciB0aW1lc3RhbXBzIGZvciBuZXh0IHRp
bWUuCi0gICAgcGF0aHNXaXRoVGltZXMuc3dhcChtX3BsdWdpblBhdGhzV2l0aFRpbWVzKTsKLQot
ICAgIGlmICghcGx1Z2luU2V0Q2hhbmdlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICB1cGRhdGVQZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZSgpOwotI2VuZGlmCi0KLSAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMu
Y2xlYXIoKTsKLQotICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcwotICAgIFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIGZvciAoUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgLy8gR2V0IE1JTUUgdHlwZXMKLSAgICAgICAgTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRp
b25zKCkuYmVnaW4oKTsKLSAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOwotICAgICAg
ICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KQotICAgICAgICAgICAgbV9yZWdp
c3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmtleSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLVZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gUGx1Z2luRGF0YWJhc2U6OnBsdWdpbnMo
KSBjb25zdAotewotICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcmVzdWx0OwotCi0gICAgUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1pbnQgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBh
cmUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKLXsKLSAgICBQbHVnaW5QYWNrYWdlKiBw
bHVnaW5BID0gKnN0YXRpY19jYXN0PFBsdWdpblBhY2thZ2UqIGNvbnN0Kj4oYSk7Ci0gICAgUGx1
Z2luUGFja2FnZSogcGx1Z2luQiA9ICpzdGF0aWNfY2FzdDxQbHVnaW5QYWNrYWdlKiBjb25zdCo+
KGIpOwotCi0gICAgcmV0dXJuIHBsdWdpbkEtPmNvbXBhcmUoKnBsdWdpbkIpOwotfQotCi1QbHVn
aW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwotICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIFBsdWdpblBhY2th
Z2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQoa2V5KTsKLSAgICBp
ZiAocHJlZmVycmVkUGx1Z2luCi0gICAgICAgICYmIHByZWZlcnJlZFBsdWdpbi0+aXNFbmFibGVk
KCkKLSAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250
YWlucyhrZXkpKSB7Ci0gICAgICAgIHJldHVybiBwcmVmZXJyZWRQbHVnaW47Ci0gICAgfQotCi0g
ICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqLCAyPiBwbHVnaW5DaG9pY2VzOwotCi0gICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAoKml0KS5nZXQoKTsK
LQotICAgICAgICBpZiAoIXBsdWdpbi0+aXNFbmFibGVkKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBpZiAocGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhr
ZXkpKSB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAg
ICAgICAgIGlmICghcGx1Z2luLT5lbnN1cmVQbHVnaW5Mb2FkZWQoKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSNlbmRpZgotICAgICAgICAgICAgcGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1
Z2luKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBxc29ydChwbHVnaW5DaG9pY2VzLmRhdGEoKSwg
cGx1Z2luQ2hvaWNlcy5zaXplKCksIHNpemVvZihQbHVnaW5QYWNrYWdlKiksIFBsdWdpbkRhdGFi
YXNlOjpwcmVmZXJyZWRQbHVnaW5Db21wYXJlKTsKLQotICAgIHJldHVybiBwbHVnaW5DaG9pY2Vz
WzBdOwotfQotCi1TdHJpbmcgUGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAotewotICAgIGlmIChleHRlbnNpb24uaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBTdHJpbmcgbWltZVR5cGU7Ci0gICAg
VmVjdG9yPFBsdWdpblBhY2thZ2UqLCAyPiBwbHVnaW5DaG9pY2VzOwotICAgIEhhc2hNYXA8UGx1
Z2luUGFja2FnZSosIFN0cmluZz4gbWltZVR5cGVGb3JQbHVnaW47Ci0KLSAgICBmb3IgKFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGlmICghKCppdCktPmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWlt
ZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwotCi0gICAgICAgIGZvciAo
TUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1l
VG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7
Ci0gICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVfaXQtPmtleTsKLSAgICAgICAgICAgIFBsdWdp
blBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWltZVR5
cGUpOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1l
X2l0LT52YWx1ZTsKLSAgICAgICAgICAgIGJvb2wgZm91bmRNYXBwaW5nID0gZmFsc2U7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykg
ewotICAgICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBl
eHRlbnNpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9
ICgqaXQpLmdldCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcmVmZXJyZWRQbHVnaW4g
JiYgUGx1Z2luUGFja2FnZTo6ZXF1YWwoKnBsdWdpbiwgKnByZWZlcnJlZFBsdWdpbikpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWltZVR5cGU7Ci0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICAgICAgICAgICAgICBpZiAoIXBsdWdp
bi0+ZW5zdXJlUGx1Z2luTG9hZGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBwbHVnaW5DaG9pY2VzLmFwcGVuZChwbHVn
aW4pOwotICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZUZvclBsdWdpbi5hZGQocGx1Z2luLCBt
aW1lVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwcGluZyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChmb3VuZE1hcHBpbmcpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocGx1Z2luQ2hvaWNlcy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHFzb3J0KHBsdWdpbkNob2ljZXMuZGF0YSgpLCBw
bHVnaW5DaG9pY2VzLnNpemUoKSwgc2l6ZW9mKFBsdWdpblBhY2thZ2UqKSwgUGx1Z2luRGF0YWJh
c2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUpOwotCi0gICAgcmV0dXJuIG1pbWVUeXBlRm9yUGx1
Z2luLmdldChwbHVnaW5DaG9pY2VzWzBdKTsKLX0KLQotUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0
YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCi17Ci0g
ICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBwbHVnaW5Gb3JNSU1F
VHlwZShtaW1lVHlwZSk7Ci0gICAgCi0gICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRo
Q29tcG9uZW50KCk7Ci0gICAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKCcvJykpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIAotICAgIGludCBleHRlbnNpb25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmlu
ZCgnLicpOwotICAgIGlmIChleHRlbnNpb25Qb3MgPT0gLTEpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIFN0cmluZyBtaW1lVHlwZUZvckV4dGVuc2lvbiA9IE1JTUVUeXBlRm9yRXh0ZW5z
aW9uKGZpbGVuYW1lLnN1YnN0cmluZyhleHRlbnNpb25Qb3MgKyAxKSk7Ci0gICAgUGx1Z2luUGFj
a2FnZSogcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGVGb3JFeHRlbnNpb24pOwot
ICAgIGlmICghcGx1Z2luKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQg
YmUgZm91bmQsIHF1ZXJ5IFdpbmRvd3MgZm9yIHRoZSBtaW1lIHR5cGUKLSAgICAgICAgLy8gY29y
cmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgCi0gICAgbWltZVR5cGUgPSBtaW1lVHlwZUZvckV4dGVuc2lvbjsKLSAgICByZXR1cm4gcGx1
Z2luOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4pCi17Ci0g
ICAgaWYgKCFwbHVnaW4gfHwgcGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuY29udGFpbnMobWlt
ZVR5cGUpKQotICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMuc2V0KG1pbWVUeXBlLmxvd2VyKCks
IHBsdWdpbik7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmZpbGVFeGlzdHNBbmRJc05vdERp
c2FibGVkKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpIGNvbnN0Ci17Ci0gICAgLy8gU2tpcCBwbHVn
aW4gZmlsZXMgdGhhdCBhcmUgZGlzYWJsZWQgYnkgZmlsZW5hbWUuCi0gICAgaWYgKG1fZGlzYWJs
ZWRQbHVnaW5GaWxlcy5jb250YWlucyhwYXRoR2V0RmlsZU5hbWUoZmlsZVBhdGgpKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGZpbGVFeGlzdHMoZmlsZVBhdGgpOwotfQot
Ci12b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXREZWxldGVkUGx1Z2lucyhQbHVnaW5TZXQmIHBsdWdp
bnMpIGNvbnN0Ci17Ci0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdp
bnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVn
aW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWZpbGVFeGlzdHNB
bmRJc05vdERpc2FibGVkKCgqaXQpLT5wYXRoKCkpKQotICAgICAgICAgICAgcGx1Z2lucy5hZGQo
Kml0KTsKLSAgICB9Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmFkZChQYXNzUmVmUHRyPFBs
dWdpblBhY2thZ2U+IHBycFBhY2thZ2UpCi17Ci0gICAgQVNTRVJUX0FSRyhwcnBQYWNrYWdlLCBw
cnBQYWNrYWdlKTsKLQotICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gcHJwUGFj
a2FnZTsKLQotICAgIGlmICghbV9wbHVnaW5zLmFkZChwYWNrYWdlKS5pc05ld0VudHJ5KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3BsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBh
dGgoKSwgcGFja2FnZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJh
c2U6OnJlbW92ZShQbHVnaW5QYWNrYWdlKiBwYWNrYWdlKQotewotICAgIE1JTUVUb0V4dGVuc2lv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJl
Z2luKCk7Ci0gICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFj
a2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOwotICAgIGZvciAoIDsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFBsdWdpblBhY2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJ
bk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lucy5maW5kKGl0LT5rZXkpOwotICAgICAgICBpZiAocGFj
a2FnZUluTWFwICE9IG1fcHJlZmVycmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZh
bHVlID09IHBhY2thZ2UpCi0gICAgICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBh
Y2thZ2VJbk1hcCk7Ci0gICAgfQotCi0gICAgbV9wbHVnaW5zLnJlbW92ZShwYWNrYWdlKTsKLSAg
ICBtX3BsdWdpbnNCeVBhdGgucmVtb3ZlKHBhY2thZ2UtPnBhdGgoKSk7Ci19Ci0KLXZvaWQgUGx1
Z2luRGF0YWJhc2U6OmNsZWFyKCkKLXsKLSAgICBtX3BsdWdpbnMuY2xlYXIoKTsKLSAgICBtX3Bs
dWdpbnNCeVBhdGguY2xlYXIoKTsKLSAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLmNsZWFyKCk7
Ci0gICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7Ci0gICAgbV9wcmVmZXJyZWRQbHVn
aW5zLmNsZWFyKCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkK
LSAgICBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQgPSBmYWxzZTsKLSNlbmRpZgot
fQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpyZW1vdmVEaXNhYmxlZFBsdWdpbkZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSkKLXsKLSAgICByZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLnJl
bW92ZShmaWxlTmFtZSk7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmFkZERpc2FibGVkUGx1
Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQotewotICAgIHJldHVybiBtX2Rpc2FibGVk
UGx1Z2luRmlsZXMuYWRkKGZpbGVOYW1lKS5pc05ld0VudHJ5OwotfQotCi0jaWYgKCFPUyhXSU5E
T1dTKSB8fCAhRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpKQotLy8gRm9yIFNhZmFyaS9XaW4g
dGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZAotLy8gaW4gUGx1Z2lu
RGF0YWJhc2VXaW4uY3BwLCBidXQgaWYgd2UgY2FuIHVzZSBXZWJDb3JlIGNvbnN0cnVjdHMKLS8v
IGZvciB0aGUgbG9naWMgd2Ugc2hvdWxkIHBlcmhhcHMgbW92ZSBpdCBoZXJlIHVuZGVyIFhQX1dJ
Tj8KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3Rv
cmllcygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0KLSAgICAvLyBBZGQgcGF0aHMg
c3BlY2lmaWMgdG8gZWFjaCBwbGF0Zm9ybQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAgICBTdHJp
bmcgdXNlclBsdWdpblBhdGggPSBob21lRGlyZWN0b3J5UGF0aCgpOwotICAgIHVzZXJQbHVnaW5Q
YXRoLmFwcGVuZChTdHJpbmcoIi8ubW96aWxsYS9wbHVnaW5zIikpOwotICAgIHBhdGhzLmFwcGVu
ZCh1c2VyUGx1Z2luUGF0aCk7Ci0KLSAgICB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQ
YXRoKCk7Ci0gICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiLy5uZXRzY2FwZS9wbHVn
aW5zIikpOwotICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7Ci0KLSAgICBwYXRocy5h
cHBlbmQoIi91c3IvbGliL2Jyb3dzZXIvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vz
ci9sb2NhbC9saWIvbW96aWxsYS9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xp
Yi9maXJlZm94L3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvYnJvd3Nl
ci1wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9icm93c2VyLXBsdWdpbnMi
KTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL21vemlsbGEvcGx1Z2lucyIpOwotICAgIHBh
dGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9uZXRzY2FwZS9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBw
ZW5kKCIvb3B0L21vemlsbGEvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL29wdC9tb3pp
bGxhL2xpYi9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvb3B0L25ldHNjYXBlL3BsdWdp
bnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi9vcHQvbmV0c2NhcGUvY29tbXVuaWNhdG9yL3BsdWdp
bnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25ldHNjYXBlL3BsdWdpbnMiKTsKLSAg
ICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25ldHNjYXBlL3BsdWdpbnMtbGliYzUiKTsKLSAgICBw
YXRocy5hcHBlbmQoIi91c3IvbGliL25ldHNjYXBlL3BsdWdpbnMtbGliYzYiKTsKLSAgICBwYXRo
cy5hcHBlbmQoIi91c3IvbGliNjQvbmV0c2NhcGUvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVu
ZCgiL3Vzci9saWI2NC9tb3ppbGxhL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3Iv
bGliL25zYnJvd3Nlci9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L25z
YnJvd3Nlci9wbHVnaW5zIik7Ci0KLSAgICBTdHJpbmcgbW96SG9tZShnZXRlbnYoIk1PWklMTEFf
SE9NRSIpKTsKLSAgICBtb3pIb21lLmFwcGVuZCgiL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBl
bmQobW96SG9tZSk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBtb3pQYXRoczsKLSAgICBTdHJpbmcg
bW96UGF0aChnZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpKTsKLSAgICBtb3pQYXRoLnNwbGl0KFVD
aGFyKCc6JyksIC8qIGFsbG93RW1wdHlFbnRyaWVzICovIGZhbHNlLCBtb3pQYXRocyk7Ci0gICAg
cGF0aHMuYXBwZW5kVmVjdG9yKG1velBhdGhzKTsKLSNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQot
ICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0gICAgdXNl
clBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7
Ci0gICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKLSAgICBwYXRocy5hcHBlbmQoIi9M
aWJyYXJ5L0ludGVybmV0IFBsdWctSW5zIik7Ci0jZWxpZiBkZWZpbmVkKFhQX1dJTikKLSAgICBT
dHJpbmcgdXNlclBsdWdpblBhdGggPSBob21lRGlyZWN0b3J5UGF0aCgpOwotICAgIHVzZXJQbHVn
aW5QYXRoLmFwcGVuZChTdHJpbmcoIlxcQXBwbGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lu
cyIpKTsKLSAgICBwYXRocy5hcHBlbmQodXNlclBsdWdpblBhdGgpOwotI2VuZGlmCi0KLSAgICBy
ZXR1cm4gcGF0aHM7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2lu
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBTdHJpbmcgcHJlZmVycmVkUGF0
aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgcHJl
ZmVycmVkUGF0aC5hcHBlbmQoU3RyaW5nKCIvLm1vemlsbGEvcGx1Z2lucyIpKTsKLSNlbGlmIGRl
ZmluZWQoWFBfTUFDT1NYKQotICAgIHByZWZlcnJlZFBhdGguYXBwZW5kKFN0cmluZygiL0xpYnJh
cnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7Ci0jZWxpZiBkZWZpbmVkKFhQX1dJTikKLSAgICBwcmVm
ZXJyZWRQYXRoLmFwcGVuZChTdHJpbmcoIlxcQXBwbGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1
Z2lucyIpKTsKLSNlbmRpZgotCi0gICAgLy8gVE9ETzogV2Ugc2hvdWxkIG5vcm1hbGl6ZSB0aGUg
cGF0aCBiZWZvcmUgZG9pbmcgYSBjb21wYXJpc29uLgotICAgIHJldHVybiBwYXRoID09IHByZWZl
cnJlZFBhdGg7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJl
Y3RvcmllcyhIYXNoU2V0PFN0cmluZz4mIHBhdGhzKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgotICAgIEhhc2hTZXQ8U3RyaW5n
PiB1bmlxdWVGaWxlbmFtZXM7Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgU3RyaW5nIGZp
bGVOYW1lRmlsdGVyKCIqLnNvIik7Ci0jZWxzZQotICAgIFN0cmluZyBmaWxlTmFtZUZpbHRlcigi
Iik7Ci0jZW5kaWYKLQotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkaXJzRW5k
ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBkSXQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2luKCk7IGRJdCAhPSBk
aXJzRW5kOyArK2RJdCkgewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVnaW5QYXRocyA9IGxp
c3REaXJlY3RvcnkoKmRJdCwgZmlsZU5hbWVGaWx0ZXIpOwotICAgICAgICBWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgcGx1Z2luc0VuZCA9IHBsdWdpblBhdGhzLmVuZCgpOwotICAgICAg
ICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwSXQgPSBwbHVnaW5QYXRocy5i
ZWdpbigpOyBwSXQgIT0gcGx1Z2luc0VuZDsgKytwSXQpIHsKLSAgICAgICAgICAgIGlmICghZmls
ZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKnBJdCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgIHBhdGhzLmFkZCgqcEl0KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
I2VuZGlmIC8vICFPUyhXSU5ET1dTKQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRB
REFUQV9DQUNIRSkKLQotc3RhdGljIHZvaWQgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCi17Ci0gICAgc2l6
ZV90IGJ1ZmZlclNpemUgPSAwOwotICAgIHNpemVfdCBidWZmZXJDYXBhY2l0eSA9IDEwMjQ7Ci0g
ICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGJ1
ZmZlclNpemUgKz0gcmVhZEZyb21GaWxlKGZpbGUsIGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJTaXpl
LCBidWZmZXJDYXBhY2l0eSAtIGJ1ZmZlclNpemUpOwotICAgICAgICBpZiAoYnVmZmVyU2l6ZSA9
PSBidWZmZXJDYXBhY2l0eSkgewotICAgICAgICAgICAgaWYgKGJ1ZmZlckNhcGFjaXR5IDwgbWF4
aW11bVBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlU2l6ZSkgewotICAgICAgICAgICAgICAg
IGJ1ZmZlckNhcGFjaXR5ICo9IDI7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShidWZm
ZXJDYXBhY2l0eSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1ZmZl
ci5jbGVhcigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBicmVhazsKLSAgICB9IHdoaWxlICh0cnVlKTsKLQotICAg
IGJ1ZmZlci5zaHJpbmsoYnVmZmVyU2l6ZSk7Ci19Ci0KLXN0YXRpYyBib29sIHJlYWRVVEY4U3Ry
aW5nKFN0cmluZyYgcmVzdWx0U3RyaW5nLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkK
LXsKLSAgICBpZiAoc3RhcnQgPj0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
bnQgbGVuID0gc3RybGVuKHN0YXJ0KTsKLSAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmc6OmZyb21V
VEY4KHN0YXJ0LCBsZW4pOwotICAgIHN0YXJ0ICs9IGxlbiArIDE7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIGJvb2wgcmVhZFRpbWUodGltZV90JiByZXN1bHRUaW1lLCBjaGFyKiYg
c3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKLXsKLSAgICBpZiAoc3RhcnQgKyBzaXplb2YodGltZV90
KSA+PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoZSBzdHJlYW0gaXMg
bm90IG5lY2Vzc2FyeSBhbGlnbmVkLgotICAgIG1lbWNweSgmcmVzdWx0VGltZSwgc3RhcnQsIHNp
emVvZih0aW1lX3QpKTsKLSAgICBzdGFydCArPSBzaXplb2YodGltZV90KTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciBzY2hlbWFWZXJzaW9uID0gJzEnOwotc3Rh
dGljIGNvbnN0IGNoYXIgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZVtdID0g
IlBsdWdpbk1ldGFkYXRhQ2FjaGUuYmluIjsKLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6bG9hZFBl
cnNpc3RlbnRNZXRhZGF0YUNhY2hlKCkKLXsKLSAgICBpZiAoIWlzUGVyc2lzdGVudE1ldGFkYXRh
Q2FjaGVFbmFibGVkKCkgfHwgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKLSAgICBT
dHJpbmcgYWJzb2x1dGVDYWNoZVBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVQYXRoKCksIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmls
ZW5hbWUpOwotICAgIGZpbGUgPSBvcGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwgT3BlbkZvclJl
YWQpOwotCi0gICAgaWYgKCFpc0hhbmRsZVZhbGlkKGZpbGUpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBNYXJrIGNhY2hlIGFzIGxvYWRlZCByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mgb3IgZmFp
bHVyZS4gSWYKLSAgICAvLyB0aGVyZSdzIGVycm9yIGluIHRoZSBjYWNoZSwgd2Ugd29uJ3QgdHJ5
IHRvIGxvYWQgaXQgYW55bW9yZS4KLSAgICBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2Fk
ZWQgPSB0cnVlOwotCi0gICAgVmVjdG9yPGNoYXI+IGZpbGVDb250ZW50czsKLSAgICBmaWxsQnVm
ZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGUsIGZpbGVDb250ZW50cyk7Ci0gICAgY2xvc2VGaWxl
KGZpbGUpOwotCi0gICAgaWYgKGZpbGVDb250ZW50cy5zaXplKCkgPCAyIHx8IGZpbGVDb250ZW50
cy5maXJzdCgpICE9IHNjaGVtYVZlcnNpb24gfHwgZmlsZUNvbnRlbnRzLmxhc3QoKSAhPSAnXDAn
KSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRhIGNh
Y2hlOiBjb3JydXB0IHNjaGVtYSIpOwotICAgICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQ
YXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNoYXIqIGJ1ZmZlclBvcyA9IGZp
bGVDb250ZW50cy5kYXRhKCkgKyAxOwotICAgIGNoYXIqIGVuZCA9IGZpbGVDb250ZW50cy5kYXRh
KCkgKyBmaWxlQ29udGVudHMuc2l6ZSgpOwotCi0gICAgUGx1Z2luU2V0IGNhY2hlZFBsdWdpbnM7
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVfdD4gY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXM7
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IGNhY2hlZFBsdWdp
bnNCeVBhdGg7Ci0KLSAgICB3aGlsZSAoYnVmZmVyUG9zIDwgZW5kKSB7Ci0gICAgICAgIFN0cmlu
ZyBwYXRoOwotICAgICAgICB0aW1lX3QgbGFzdE1vZGlmaWVkOwotICAgICAgICBTdHJpbmcgbmFt
ZTsKLSAgICAgICAgU3RyaW5nIGRlc2M7Ci0gICAgICAgIFN0cmluZyBtaW1lRGVzYzsKLSAgICAg
ICAgaWYgKCEocmVhZFVURjhTdHJpbmcocGF0aCwgYnVmZmVyUG9zLCBlbmQpCi0gICAgICAgICAg
ICAgICYmIHJlYWRUaW1lKGxhc3RNb2RpZmllZCwgYnVmZmVyUG9zLCBlbmQpCi0gICAgICAgICAg
ICAgICYmIHJlYWRVVEY4U3RyaW5nKG5hbWUsIGJ1ZmZlclBvcywgZW5kKQotICAgICAgICAgICAg
ICAmJiByZWFkVVRGOFN0cmluZyhkZXNjLCBidWZmZXJQb3MsIGVuZCkKLSAgICAgICAgICAgICAg
JiYgcmVhZFVURjhTdHJpbmcobWltZURlc2MsIGJ1ZmZlclBvcywgZW5kKSkpIHsKLSAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3Jy
dXB0IGRhdGEiKTsKLSAgICAgICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2tpcCBtZXRhZGF0
YSB0aGF0IHBvaW50cyB0byBwbHVnaW5zIGZyb20gZGlyZWN0b3JpZXMgdGhhdAotICAgICAgICAv
LyBhcmUgbm90IHBhcnQgb2YgcGx1Z2luIGRpcmVjdG9yeSBsaXN0IGFueW1vcmUuCi0gICAgICAg
IFN0cmluZyBwbHVnaW5EaXJlY3RvcnlOYW1lID0gZGlyZWN0b3J5TmFtZShwYXRoKTsKLSAgICAg
ICAgaWYgKG1fcGx1Z2luRGlyZWN0b3JpZXMuZmluZChwbHVnaW5EaXJlY3RvcnlOYW1lKSA9PSBX
VEY6Om5vdEZvdW5kKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVmUHRyPFBs
dWdpblBhY2thZ2U+IHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNh
Y2hlKHBhdGgsIGxhc3RNb2RpZmllZCwgbmFtZSwgZGVzYywgbWltZURlc2MpOwotCi0gICAgICAg
IGlmIChwYWNrYWdlICYmIGNhY2hlZFBsdWdpbnMuYWRkKHBhY2thZ2UpLmlzTmV3RW50cnkpIHsK
LSAgICAgICAgICAgIGNhY2hlZFBsdWdpblBhdGhzV2l0aFRpbWVzLmFkZChwYWNrYWdlLT5wYXRo
KCksIHBhY2thZ2UtPmxhc3RNb2RpZmllZCgpKTsKLSAgICAgICAgICAgIGNhY2hlZFBsdWdpbnNC
eVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBtX3BsdWdpbnMuc3dhcChjYWNoZWRQbHVnaW5zKTsKLSAgICBtX3BsdWdpbnNCeVBhdGgu
c3dhcChjYWNoZWRQbHVnaW5zQnlQYXRoKTsKLSAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLnN3
YXAoY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXMpOwotfQotCi1zdGF0aWMgYm9vbCB3cml0ZVVU
RjhTdHJpbmcoUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQot
ewotICAgIENTdHJpbmcgdXRmOFN0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAgaW50IGxlbmd0
aCA9IHV0ZjhTdHJpbmcubGVuZ3RoKCkgKyAxOwotICAgIHJldHVybiB3cml0ZVRvRmlsZShmaWxl
LCB1dGY4U3RyaW5nLmRhdGEoKSwgbGVuZ3RoKSA9PSBsZW5ndGg7Ci19Ci0KLXN0YXRpYyBib29s
IHdyaXRlVGltZShQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgY29uc3QgdGltZV90JiB0aW1lKQot
ewotICAgIHJldHVybiB3cml0ZVRvRmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPigmdGltZSksIHNpemVvZih0aW1lX3QpKSA9PSBzaXplb2YodGltZV90KTsKLX0KLQotdm9p
ZCBQbHVnaW5EYXRhYmFzZTo6dXBkYXRlUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKQotewotICAg
IGlmICghaXNQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50TWV0
YWRhdGFDYWNoZVBhdGgoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VB
bGxEaXJlY3RvcmllcyhwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSk7Ci0gICAgU3RyaW5n
IGFic29sdXRlQ2FjaGVQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlUGF0aCgpLCBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1l
KTsKLSAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKLQotICAgIGlmIChtX3BsdWdp
bnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbGF0Zm9ybUZpbGVIYW5kbGUg
ZmlsZTsKLSAgICBmaWxlID0gb3BlbkZpbGUoYWJzb2x1dGVDYWNoZVBhdGgsIE9wZW5Gb3JXcml0
ZSk7Ci0KLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoZmlsZSkpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gb3BlbiBwbHVnaW4gbWV0YWRhdGEgY2FjaGUgZm9yIHNhdmluZyIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciBsb2NhbFNjaGVtYVZlcnNpb24gPSBzY2hl
bWFWZXJzaW9uOwotICAgIGlmICh3cml0ZVRvRmlsZShmaWxlLCAmbG9jYWxTY2hlbWFWZXJzaW9u
LCAxKSAhPSAxKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBt
ZXRhZGF0YSBjYWNoZSBzY2hlbWEiKTsKLSAgICAgICAgY2xvc2VGaWxlKGZpbGUpOwotICAgICAg
ICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwot
ICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEod3JpdGVVVEY4U3RyaW5nKGZpbGUs
ICgqaXQpLT5wYXRoKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVGltZShmaWxlLCAoKml0KS0+
bGFzdE1vZGlmaWVkKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAo
Kml0KS0+bmFtZSgpKQotICAgICAgICAgICAgICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCpp
dCktPmRlc2NyaXB0aW9uKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxl
LCAoKml0KS0+ZnVsbE1JTUVEZXNjcmlwdGlvbigpKSkpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBtZXRhZGF0YSB0byBjYWNoZSIpOwotICAgICAgICAg
ICAgY2xvc2VGaWxlKGZpbGUpOwotICAgICAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hl
UGF0aCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjbG9z
ZUZpbGUoZmlsZSk7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUGVyc2lzdGVudE1ldGFk
YXRhQ2FjaGVFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0
YUNhY2hlSXNFbmFibGVkOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50
TWV0YWRhdGFDYWNoZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpCi17Ci0gICAgZ1BlcnNpc3RlbnRQ
bHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkID0gaXNFbmFibGVkOwotfQotCi1TdHJpbmcgUGx1
Z2luRGF0YWJhc2U6OnBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpCi17Ci0gICAgcmV0dXJu
IFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpOwotfQotCi12b2lk
IFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29uc3QgU3Ry
aW5nJiBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpCi17Ci0gICAgV2ViQ29yZTo6cGVyc2lz
dGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCkgPSBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBh
dGg7Ci19Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjNDhlY2RmZjZjZjIyNDM1NTk0ZjhhZTg1
MjMwMWE2MjYzY2Y4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5EYXRhYmFzZV9o
Ci0jZGVmaW5lIFBsdWdpbkRhdGFiYXNlX2gKLQotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBFbGVtZW50OwotICAgIGNsYXNz
IEZyYW1lOwotICAgIGNsYXNzIEludFNpemU7Ci0gICAgY2xhc3MgVVJMOwotICAgIGNsYXNzIFBs
dWdpbkRhdGFiYXNlQ2xpZW50OwotICAgIGNsYXNzIFBsdWdpblBhY2thZ2U7Ci0KLSAgICB0eXBl
ZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2U+LCBQbHVnaW5QYWNrYWdlSGFzaCwgUGx1
Z2luUGFja2FnZUhhc2hUcmFpdHM+IFBsdWdpblNldDsKLQotICAgIGNsYXNzIFBsdWdpbkRhdGFi
YXNlIHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luRGF0YWJhc2UpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbkRhdGFiYXNl
KCk7Ci0KLSAgICAgICAgLy8gVGhlIGZpcnN0IGNhbGwgdG8gaW5zdGFsbGVkUGx1Z2lucyBjcmVh
dGVzIHRoZSBwbHVnaW4gZGF0YWJhc2UKLSAgICAgICAgLy8gYW5kIGJ5IGRlZmF1bHQgcG9wdWxh
dGVzIGl0IHdpdGggdGhlIHBsdWdpbnMgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uCi0gICAgICAg
IC8vIEZvciB0ZXN0aW5nIHB1cnBvc2VzLCBpdCBpcyBwb3NzaWJsZSB0byBub3QgcG9wdWxhdGUg
dGhlIGRhdGFiYXNlCi0gICAgICAgIC8vIGF1dG9tYXRpY2FsbHksIGFzIHRoZSBwbHVnaW5zIG1p
Z2h0IGFmZmVjdCB0aGUgRFJUIHJlc3VsdHMgYnkKLSAgICAgICAgLy8gd3JpdGluZyB0byBhLm8u
IHN0ZGVyci4KLSAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBpbnN0YWxsZWRQbHVnaW5z
KGJvb2wgcG9wdWxhdGUgPSB0cnVlKTsKLQotICAgICAgICBib29sIHJlZnJlc2goKTsKLSAgICAg
ICAgdm9pZCBjbGVhcigpOwotICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSo+IHBsdWdpbnMo
KSBjb25zdDsKLSAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKTsKLSAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpbkRpcmVjdG9yeShjb25zdCBT
dHJpbmcmKTsKLQotICAgICAgICBzdGF0aWMgYm9vbCBpc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9y
eShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSk7Ci0gICAgICAgIHN0YXRpYyBpbnQgcHJlZmVycmVk
UGx1Z2luQ29tcGFyZShjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCopOwotCi0gICAgICAgIFBsdWdp
blBhY2thZ2UqIGZpbmRQbHVnaW4oY29uc3QgVVJMJiwgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAg
ICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpOwotICAgICAgICB2b2lkIHNldFByZWZlcnJlZFBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIFBsdWdpblBhY2thZ2UqIHBsdWdpbik7Ci0KLSAgICAgICAgdm9pZCBz
ZXRQbHVnaW5EaXJlY3Rvcmllcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICBtX3BsdWdpbkRpcmVj
dG9yaWVzID0gZGlyZWN0b3JpZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHJlbW92ZURp
c2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKLSAgICAgICAgYm9vbCBh
ZGREaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSk7Ci0gICAgICAgIHN0
YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMoKTsKLSAgICAgICAg
VmVjdG9yPFN0cmluZz4gcGx1Z2luRGlyZWN0b3JpZXMoKSBjb25zdCB7IHJldHVybiBtX3BsdWdp
bkRpcmVjdG9yaWVzOyB9Ci0KLSAgICAgICAgU3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdDsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X01FVEFEQVRBX0NBQ0hFKQotICAgICAgICBzdGF0aWMgYm9vbCBpc1BlcnNpc3RlbnRNZXRhZGF0
YUNhY2hlRW5hYmxlZCgpOwotICAgICAgICBzdGF0aWMgdm9pZCBzZXRQZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpOwotICAgICAgICBzdGF0aWMgU3RyaW5nIHBl
cnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpOwotICAgICAgICBzdGF0aWMgdm9pZCBzZXRQZXJz
aXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRhdGFD
YWNoZVBhdGgpOwotI2VuZGlmCi0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGdldFBsdWdp
blBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mKSBjb25zdDsKLSAgICAgICAgdm9p
ZCBnZXREZWxldGVkUGx1Z2lucyhQbHVnaW5TZXQmKSBjb25zdDsKLSAgICAgICAgYm9vbCBmaWxl
RXhpc3RzQW5kSXNOb3REaXNhYmxlZChjb25zdCBTdHJpbmcmKSBjb25zdDsKLQotICAgICAgICAv
LyBSZXR1cm5zIHdoZXRoZXIgdGhlIHBsdWdpbiB3YXMgYWN0dWFsbHkgYWRkZWQgb3Igbm90IChp
dCB3b24ndCBiZSBhZGRlZCBpZiBpdCdzIGEgZHVwbGljYXRlIG9mIGFuIGV4aXN0aW5nIHBsdWdp
bikuCi0gICAgICAgIGJvb2wgYWRkKFBhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4pOwotICAgICAg
ICB2b2lkIHJlbW92ZShQbHVnaW5QYWNrYWdlKik7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAgdm9pZCBsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGUoKTsKLSAgICAgICAgdm9pZCB1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOwotI2Vu
ZGlmCi0KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1fZGlzYWJsZWRQbHVnaW5GaWxlczsKLSAg
ICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5EaXJlY3RvcmllczsKLSAgICAgICAgSGFzaFNl
dDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKLSAgICAgICAgUGx1Z2luU2V0IG1fcGx1
Z2luczsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IG1f
cGx1Z2luc0J5UGF0aDsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVfdD4gbV9wbHVnaW5Q
YXRoc1dpdGhUaW1lczsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNr
YWdlPiA+IG1fcHJlZmVycmVkUGx1Z2luczsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01F
VEFEQVRBX0NBQ0hFKQotICAgICAgICBib29sIG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xv
YWRlZDsKLSNlbmRpZgotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2NmQyM2FlNjcxMzhhY2FiYzY1YjRlMzAwY2YyY2UxNzk4MTQwNTM2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGVidWcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmICFMT0dfRElTQUJMRUQKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXJyb3JTdHJp
bmdzW10gPSB7Ci0gICAgIk5vIGVycm9ycyBvY2N1cnJlZC4iLCAvKiBOUEVSUl9OT19FUlJPUiAq
LwotICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmljIGVycm9yIGNvZGUgb2NjdXJyZWQuIiwgLyog
TlBFUlJfR0VORVJJQ19FUlJPUiAqLwotICAgICJJbnZhbGlkIGluc3RhbmNlIHBhc3NlZCB0byB0
aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9SICovCi0gICAgIkZ1
bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9GVU5DVEFCTEVfRVJST1Ig
Ki8KLSAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZhaWxlZC4iLCAvKiBOUEVSUl9NT0RVTEVfTE9B
RF9GQUlMRURfRVJST1IgKi8KLSAgICAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiIsIC8qIE5Q
RVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KLSAgICAiUGx1Zy1pbiBtaXNzaW5nIG9yIGludmFs
aWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRVJST1IgKi8KLSAgICAiUGx1Zy1pbiBkaXJl
Y3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExVR0lOX0RJUl9F
UlJPUiAqLwotICAgICJWZXJzaW9ucyBvZiBwbHVnLWluIGFuZCBDb21tdW5pY2F0b3IgZG8gbm90
IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJMRV9WRVJTSU9OX0VSUk9SICovCi0gICAgIlBh
cmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QQVJBTSAqLwot
ICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfVVJMICovCi0g
ICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EICov
Ci0gICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIsIC8qIE5QRVJSX05PX0RBVEEgKi8KLSAg
ICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIsIC8qIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FC
TEUgKi8KLSAgICAiVW5rbm93biBlcnJvciBjb2RlIgotfTsKLQotI2lmZGVmIFhQX01BQ09TWAot
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRyYXdpbmdNb2RlbHNbXSA9IHsKLSAgICAiTlBEcmF3
aW5nTW9kZWxRdWlja0RyYXciLAotICAgICJOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljcyIsCi0g
ICAgIk5QRHJhd2luZ01vZGVsT3BlbkdMIiwKLSAgICAiTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0
aW9uIgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGV2ZW50TW9kZWxzW10gPSB7Ci0g
ICAgIk5QRXZlbnRNb2RlbENhcmJvbiIsCi0gICAgIk5QRXZlbnRNb2RlbENvY29hIgotfTsKLSNl
bmRpZiAvL1hQX01BQ09TWAotCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yTlBFcnJvcihOUEVy
cm9yIGVycm9yKQotewotICAgIHJldHVybiBlcnJvclN0cmluZ3NbZXJyb3JdOwotfQotCi0jaWZk
ZWYgWFBfTUFDT1NYCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRHJhd2luZ01vZGVsKE5QRHJh
d2luZ01vZGVsIGRyYXdpbmdNb2RlbCkKLXsKLSAgICByZXR1cm4gZHJhd2luZ01vZGVsc1tkcmF3
aW5nTW9kZWxdOwotfQotCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2
ZW50TW9kZWwgZXZlbnRNb2RlbCkKLXsKLSAgICByZXR1cm4gZXZlbnRNb2RlbHNbZXZlbnRNb2Rl
bF07Ci19Ci0jZW5kaWYgLy9YUF9NQUNPU1gKLQotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVmFy
aWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewot
ICAgIGNhc2UgTlBOVnhEaXNwbGF5OiByZXR1cm4gIk5QTlZ4RGlzcGxheSI7Ci0gICAgY2FzZSBO
UE5WeHRBcHBDb250ZXh0OiByZXR1cm4gIk5QTlZ4dEFwcENvbnRleHQiOwotICAgIGNhc2UgTlBO
Vm5ldHNjYXBlV2luZG93OiByZXR1cm4gIk5QTlZuZXRzY2FwZVdpbmRvdyI7Ci0gICAgY2FzZSBO
UE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOiByZXR1cm4gIk5QTlZqYXZhc2NyaXB0RW5hYmxlZEJv
b2wiOwotICAgIGNhc2UgTlBOVmFzZEVuYWJsZWRCb29sOiByZXR1cm4gIk5QTlZhc2RFbmFibGVk
Qm9vbCI7Ci0gICAgY2FzZSBOUE5WaXNPZmZsaW5lQm9vbDogcmV0dXJuICJOUE5WaXNPZmZsaW5l
Qm9vbCI7Ci0KLSAgICBjYXNlIE5QTlZzZXJ2aWNlTWFuYWdlcjogcmV0dXJuICJOUE5Wc2Vydmlj
ZU1hbmFnZXIgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QTlZET01FbGVtZW50OiByZXR1
cm4gIk5QTlZET01FbGVtZW50IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUE5WRE9NV2lu
ZG93OiByZXR1cm4gIk5QTlZET01XaW5kb3cgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5Q
TlZUb29sa2l0OiByZXR1cm4gIk5QTlZUb29sa2l0IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2Fz
ZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiByZXR1cm4gIk5QTlZTdXBwb3J0c1hFbWJlZEJvb2wg
KG5vdCBzdXBwb3J0ZWQpIjsKLQotICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiByZXR1cm4g
Ik5QTlZXaW5kb3dOUE9iamVjdCI7Ci0gICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0
OiByZXR1cm4gIk5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3QiOwotICAgIGNhc2UgTlBOVlN1cHBv
cnRzV2luZG93bGVzczogcmV0dXJuICJOUE5WU3VwcG9ydHNXaW5kb3dsZXNzIjsKLSAgICBjYXNl
IE5QTlZwcml2YXRlTW9kZUJvb2w6IHJldHVybiAiTlBOVnByaXZhdGVNb2RlQm9vbCI7Ci0KLSNp
ZmRlZiBYUF9NQUNPU1gKLSAgICBjYXNlIE5QTlZwbHVnaW5EcmF3aW5nTW9kZWw6IHJldHVybiAi
TlBOVnBsdWdpbkRyYXdpbmdNb2RlbCI7Ci0jaWZuZGVmIE5QX05PX1FVSUNLRFJBVwotICAgIGNh
c2UgTlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNRdWlja0Ry
YXdCb29sIjsKLSNlbmRpZgotICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29yZUdyYXBoaWNzQm9vbDog
cmV0dXJuICJOUE5Wc3VwcG9ydHNDb3JlR3JhcGhpY3NCb29sIjsKLSAgICBjYXNlIE5QTlZzdXBw
b3J0c09wZW5HTEJvb2w6IHJldHVybiAiTlBOVnN1cHBvcnRzT3BlbkdMQm9vbCI7Ci0gICAgY2Fz
ZSBOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb3Jl
QW5pbWF0aW9uQm9vbCI7Ci0jaWZuZGVmIE5QX05PX0NBUkJPTgotICAgIGNhc2UgTlBOVnN1cHBv
cnRzQ2FyYm9uQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDYXJib25Cb29sIjsKLSNlbmRpZgot
ICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29jb2FCb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c0NvY29h
Qm9vbCI7Ci0jZW5kaWYKLQotICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7
Ci0gICAgfQotfQotCi1DU3RyaW5nIHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAg
IGNhc2UgTlBQVnBsdWdpbk5hbWVTdHJpbmc6IHJldHVybiAiTlBQVnBsdWdpbk5hbWVTdHJpbmci
OwotICAgIGNhc2UgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nOiByZXR1cm4gIk5QUFZwbHVn
aW5EZXNjcmlwdGlvblN0cmluZyI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9vbDogcmV0
dXJuICJOUFBWcGx1Z2luV2luZG93Qm9vbCI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJl
bnRCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2wiOwotCi0gICAgY2FzZSBO
UFBWamF2YUNsYXNzOiByZXR1cm4gIk5QUFZqYXZhQ2xhc3MgKG5vdCBzdXBwb3J0ZWQpIjsKLSAg
ICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dTaXplOiByZXR1cm4gIk5QUFZwbHVnaW5XaW5kb3dTaXpl
IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luVGltZXJJbnRlcnZhbDogcmV0
dXJuICJOUFBWcGx1Z2luVGltZXJJbnRlcnZhbCAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2Ug
TlBQVnBsdWdpblNjcmlwdGFibGVJbnN0YW5jZTogcmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0YWJs
ZUluc3RhbmNlIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJs
ZUlJRDogcmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0YWJsZUlJRCAobm90IHN1cHBvcnRlZCkiOwot
ICAgIGNhc2UgTlBQVmphdmFzY3JpcHRQdXNoQ2FsbGVyQm9vbDogcmV0dXJuICJOUFBWamF2YXNj
cmlwdFB1c2hDYWxsZXJCb29sIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2lu
S2VlcExpYnJhcnlJbk1lbW9yeTogcmV0dXJuICJOUFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9y
eSAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpbk5lZWRzWEVtYmVkOiByZXR1
cm4gIk5QUFZwbHVnaW5OZWVkc1hFbWJlZCAobm90IHN1cHBvcnRlZCkiOwotCi0gICAgY2FzZSBO
UFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0OiByZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRhYmxl
TlBPYmplY3QiOwotCi0gICAgY2FzZSBOUFBWZm9ybVZhbHVlOiByZXR1cm4gIk5QUFZmb3JtVmFs
dWUgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5VcmxSZXF1ZXN0c0Rpc3Bs
YXllZEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblVybFJlcXVlc3RzRGlzcGxheWVkQm9vbCAobm90
IHN1cHBvcnRlZCkiOwotCi0gICAgY2FzZSBOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFt
czogcmV0dXJuICJOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtcyI7Ci0gICAgY2FzZSBO
UFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtOiByZXR1cm4gIk5QUFZwbHVnaW5DYW5jZWxTcmNTdHJl
YW0iOwotCi0jaWZkZWYgWFBfTUFDT1NYCi0gICAgY2FzZSBOUFBWcGx1Z2luRHJhd2luZ01vZGVs
OiB7Ci0gICAgICAgIFN0cmluZyByZXN1bHQoIk5QUFZwbHVnaW5EcmF3aW5nTW9kZWwsICIpOwot
ICAgICAgICByZXN1bHQuYXBwZW5kKHByZXR0eU5hbWVGb3JEcmF3aW5nTW9kZWwoTlBEcmF3aW5n
TW9kZWwodWludHB0cl90KHZhbHVlKSkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5sYXRpbjEo
KTsKLSAgICB9Ci0gICAgY2FzZSBOUFBWcGx1Z2luRXZlbnRNb2RlbDogewotICAgICAgICBTdHJp
bmcgcmVzdWx0KCJOUFBWcGx1Z2luRXZlbnRNb2RlbCwgIik7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQocHJldHR5TmFtZUZvckV2ZW50TW9kZWwoTlBFdmVudE1vZGVsKHVpbnRwdHJfdCh2YWx1ZSkp
KSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQubGF0aW4xKCk7Ci0gICAgfQotICAgIGNhc2UgTlBQ
VnBsdWdpbkNvcmVBbmltYXRpb25MYXllcjogcmV0dXJuICJOUFBWcGx1Z2luQ29yZUFuaW1hdGlv
bkxheWVyIjsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZgotCi0gICAg
ZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlhYmxlIjsKLSAgICB9Ci19Ci0KLUNTdHJpbmcg
cHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlKQotewot
ICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlVSTFZDb29raWU6IHJldHVybiAi
TlBOVVJMVkNvb2tpZSI7Ci0gICAgY2FzZSBOUE5VUkxWUHJveHk6IHJldHVybiAiTlBOVVJMVlBy
b3h5IjsKLSAgICBkZWZhdWx0OiByZXR1cm4gIlVua25vd24gdmFyaWFibGUiOwotICAgIH0KLX0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjY3NDg1ZTkwOTI4YTA1ZmNiZGE4Mjk0MGE3Mzk2NzA5ODcxZGI2MS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbkRlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBsdWdpbkRl
YnVnX2gKLSNkZWZpbmUgUGx1Z2luRGVidWdfaAotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2lu
Y2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotI2RlZmluZSBMT0dfTlBFUlJPUihlcnIpIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1Ip
IExPR19WRVJCT1NFKFBsdWdpbnMsICIlc1xuIiwgcHJldHR5TmFtZUZvck5QRXJyb3IoZXJyKSkK
LSNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKSBMT0dfVkVSQk9TRShQbHVnaW5zLCAiU3Ry
ZWFtIGZhaWxlZCBkdWUgdG8gcHJvYmxlbXMgd2l0aCBuZXR3b3JrLCBkaXNrIEkvTywgbGFjayBv
ZiBtZW1vcnksIG9yIG90aGVyIHByb2JsZW1zLlxuIikKLQotI2lmICFMT0dfRElTQUJMRUQKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yTlBFcnJvcihO
UEVycm9yIGVycm9yKTsKLQotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUoTlBOVmFy
aWFibGUgdmFyaWFibGUpOwotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBQVmFyaWFibGUoTlBQVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKLUNTdHJpbmcgcHJldHR5TmFtZUZvck5QTlVS
TFZhcmlhYmxlKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlKTsKLQotI2lmZGVmIFhQX01BQ09TWAot
Y29uc3QgY2hhciogcHJldHR5TmFtZUZvckRyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCBkcmF3
aW5nTW9kZWwpOwotY29uc3QgY2hhciogcHJldHR5TmFtZUZvckV2ZW50TW9kZWwoTlBFdmVudE1v
ZGVsIGV2ZW50TW9kZWwpOwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vICFMT0dfRElTQUJMRUQKLQotI2VuZGlmIC8vIFBsdWdpbkRlYnVnX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3ZTA5OTg4MDQ5NzFjYWU1YWJhNjNjZDZjZGMxMzQ1ZmU3YzI0MGU0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luUGFja2FnZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NzggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLQotI2luY2x1ZGUgImNfdXRpbGl0
eS5oIgotI2luY2x1ZGUgIklkZW50aWZpZXJSZXAuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCi0jaW5jbHVkZSAiTlBfanNvYmplY3QuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFz
ZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgot
I2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAi
bnBydW50aW1lX2ltcGwuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9Db21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxP
YmplY3QuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotUGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2thZ2UoKQotewotICAgIC8vIFRoaXMg
ZGVzdHJ1Y3RvciBnZXRzIGNhbGxlZCBkdXJpbmcgcmVmcmVzaCgpIGlmIFBsdWdpbkRhdGFiYXNl
J3MKLSAgICAvLyBQbHVnaW5TZXQgaGFzaCBpcyBhbHJlYWR5IHBvcHVsYXRlZCwgYXMgaXQgcmVt
b3ZlcyBpdGVtcyBmcm9tCi0gICAgLy8gdGhlIGhhc2ggdGFibGUuIENhbGxpbmcgdGhlIGRlc3Ry
dWN0b3Igb24gYSBsb2FkZWQgcGx1Zy1pbiBvZgotICAgIC8vIGNvdXJzZSB3b3VsZCBjYXVzZSBh
IGNyYXNoLCBzbyB3ZSBjaGVjayB0byBjYWxsIHVubG9hZCBiZWZvcmUgd2UKLSAgICAvLyBBU1NF
UlQuCi0gICAgLy8gRklYTUU6IFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBmaXgg
dGhpcy4KLSAgICBpZiAoIW1fbG9hZENvdW50KQotICAgICAgICB1bmxvYWRXaXRob3V0U2h1dGRv
d24oKTsKLSAgICBlbHNlCi0gICAgICAgIHVubG9hZCgpOwotCi0gICAgQVNTRVJUKCFtX2lzTG9h
ZGVkKTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVNvb24oKQotewotICAg
IEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVChtX21v
ZHVsZSk7Ci0gICAgQVNTRVJUKCFtX2xvYWRDb3VudCk7Ci0KLSAgICBtX2ZyZWVMaWJyYXJ5VGlt
ZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5
VGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICAvLyBEbyBub3RoaW5n
IGlmIHRoZSBtb2R1bGUgZ290IGxvYWRlZCBhZ2FpbiBtZWFud2hpbGUKLSAgICBpZiAoIW1fbG9h
ZENvdW50KSB7Ci0gICAgICAgIHVubG9hZE1vZHVsZShtX21vZHVsZSk7Ci0gICAgICAgIG1fbW9k
dWxlID0gMDsKLSAgICB9Ci19Ci0KLQotaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmUoY29uc3Qg
UGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAotewotICAgIC8vIFNvcnQgcGx1Zy1pbnMg
dGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3QuCi0gICAgYm9vbCBBYWxsb3dzTXVs
dGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dN
dWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgYm9vbCBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAh
Y29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJ
bnN0YW5jZXMpOwotICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgIT0gQmFsbG93c011
bHRpcGxlSW5zdGFuY2VzKQotICAgICAgICByZXR1cm4gQWFsbG93c011bHRpcGxlSW5zdGFuY2Vz
ID8gLTEgOiAxOwotCi0gICAgLy8gU29ydCBwbHVnLWlucyBpbiBhIHByZWZlcnJlZCBwYXRoIGZp
cnN0LgotICAgIGJvb2wgQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRhYmFzZTo6
aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkocGFyZW50RGlyZWN0b3J5KCkpOwotICAgIGJvb2wg
QmlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVn
aW5EaXJlY3RvcnkoY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpKTsKLSAgICBpZiAoQWlzSW5Q
cmVmZXJyZWREaXJlY3RvcnkgIT0gQmlzSW5QcmVmZXJyZWREaXJlY3RvcnkpCi0gICAgICAgIHJl
dHVybiBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA/IC0xIDogMTsKLQotICAgIGludCBkaWZmID0g
c3RyY21wKG5hbWUoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ubmFtZSgpLnV0ZjgoKS5kYXRh
KCkpOwotICAgIGlmIChkaWZmKQotICAgICAgICByZXR1cm4gZGlmZjsKLQotICAgIGRpZmYgPSBj
b21wYXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZlcnNpb24oKSk7Ci0gICAgaWYgKGRpZmYpCi0g
ICAgICAgIHJldHVybiBkaWZmOwotCi0gICAgcmV0dXJuIHN0cmNtcChwYXJlbnREaXJlY3Rvcnko
KS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkudXRmOCgpLmRhdGEo
KSk7Ci19Ci0KLVBsdWdpblBhY2thZ2U6OlBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKLSAgICA6IG1faXNFbmFibGVkKHRydWUpCi0g
ICAgLCBtX2lzTG9hZGVkKGZhbHNlKQotICAgICwgbV9sb2FkQ291bnQoMCkKLSAgICAsIG1fcGF0
aChwYXRoKQotICAgICwgbV9tb2R1bGVWZXJzaW9uKDApCi0gICAgLCBtX21vZHVsZSgwKQotICAg
ICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQotICAgICwgbV9mcmVlTGlicmFyeVRpbWVy
KCp0aGlzLCAmUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgLCBtX2luZm9Jc0Zyb21DYWNo
ZSh0cnVlKQotI2VuZGlmCi17Ci0gICAgbV9maWxlTmFtZSA9IHBhdGhHZXRGaWxlTmFtZShtX3Bh
dGgpOwotICAgIG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxlbmd0aCgp
IC0gbV9maWxlTmFtZS5sZW5ndGgoKSAtIDEpOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OnVu
bG9hZCgpCi17Ci0gICAgaWYgKCFtX2lzTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoLS1tX2xvYWRDb3VudCA+IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgIG1fTlBQX1NodXRkb3duKCk7Ci0jZW5kaWYKLQotICAgIHVu
bG9hZFdpdGhvdXRTaHV0ZG93bigpOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OnVubG9hZFdp
dGhvdXRTaHV0ZG93bigpCi17Ci0gICAgaWYgKCFtX2lzTG9hZGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKLSAgICBBU1NFUlQobV9tb2R1bGUpOwotCi0g
ICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2ggd2hlbiBjbG9zaW5nIHRhYiB3aXRoIHBkZiBm
aWxlIChSZWFkZXIgNyBvbmx5KQotICAgIC8vIElmIHRoZSBwbHVnaW4gaGFzIHN1YmNsYXNzZWQg
aXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVhZGVyIDcsIHdlIG1heSBoYXZlCi0gICAgLy8g
Z290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVnaW4ncyBpbnRlcm5hbCB3aW5kb3cgcHJvYyBm
b3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKLSAgICAvLyBvcmlnaW5hbCB3aW5kb3cgcHJvYy4g
SWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkgZnJvbSBoZXJlLCB3ZSB3aWxsIGp1bXAgYmFj
awotICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVlZCB3aGVuIHdlIHJldHVybiwgc28gZGVsYXkg
Y2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1bnRpbAotICAgIC8vIHRoZSBuZXh0IG1lc3Nh
Z2UgbG9vcAotICAgIGZyZWVMaWJyYXJ5U29vbigpOwotCi0gICAgbV9pc0xvYWRlZCA9IGZhbHNl
OwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQotewot
ICAgIG1faXNFbmFibGVkID0gZW5hYmxlZDsKLX0KLQotUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdl
PiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
dGltZV90JiBsYXN0TW9kaWZpZWQpCi17Ci0gICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2th
Z2UgPSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBsYXN0TW9kaWZpZWQpKTsKLQot
ICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIHBhY2thZ2UucmVsZWFzZSgpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9NRVRBREFUQV9DQUNIRSkKLVBhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gUGx1Z2luUGFja2Fn
ZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVf
dCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3Jp
cHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKQotewotICAgIFJlZlB0cjxQbHVn
aW5QYWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYobmV3IFBsdWdpblBhY2thZ2UocGF0aCwgbGFz
dE1vZGlmaWVkKSk7Ci0gICAgcGFja2FnZS0+bV9uYW1lID0gbmFtZTsKLSAgICBwYWNrYWdlLT5t
X2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gICAgcGFja2FnZS0+ZGV0ZXJtaW5lTW9kdWxl
VmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOwotICAgIHBhY2thZ2UtPnNldE1JTUVEZXNjcmlwdGlv
bihtaW1lRGVzY3JpcHRpb24pOwotICAgIHBhY2thZ2UtPm1faW5mb0lzRnJvbUNhY2hlID0gdHJ1
ZTsKLSAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmlu
ZWQoWFBfVU5JWCkKLXZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxl
dE1JTUVUeXBlKG1pbWVUeXBlKSkgewotICAgICAgICAvLyBCZWNhdXNlIGEgc2luZ2xlIHByb2Nl
c3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3QgcmVsaWFibHkgdW5s
b2FkIGEKLSAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0aGUgSmF2YSBwbHVn
aW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCi0gICAgICAgIG1fcXVp
cmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOwotCi0gICAgICAgIC8vIFNldHRp
bmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBiYWQgc2Nyb2xs
aW5nIHJlcGFpbnQgcHJvYmxlbXMKLSAgICAgICAgLy8gd2l0aCB0aGUgSmF2YSBwbHVnLWluLgot
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVuU2Ny
b2xsaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSA9PSAi
YXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBQ
bGF0Zm9ybU1vZHVsZVZlcnNpb24gZmxhc2hUZW5WZXJzaW9uKDB4MGEwMDAwMDApOwotCi0gICAg
ICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oZmxhc2hUZW5WZXJzaW9uKSA+PSAwKSB7Ci0gICAg
ICAgICAgICAvLyBGbGFzaCAxMC4wIGIyMTggZG9lc24ndCBsaWtlIGhhdmluZyBhIE5VTEwgd2lu
ZG93IGhhbmRsZQotICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFNldE51
bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gRmxhc2ggOSBhbmQgb2xkZXIgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJl
dHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAotICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdp
blF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKLSAgICAgICAgfQotCi0jaWYgQ1BVKFg4Nl82
NCkKLSAgICAgICAgLy8gNjQtYml0IEZsYXNoIGZyZWV6ZXMgaWYgcmlnaHQtY2xpY2sgaXMgc2Vu
dCBpbiB3aW5kb3dsZXNzIG1vZGUKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrSWdu
b3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUpOwotI2VuZGlmCi0KLSAgICAgICAgbV9xdWly
a3MuYWRkKFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgpOwotICAgICAgICBt
X3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOwotICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyk7Ci0gICAg
ICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsKLSAgICB9Ci19
Ci0jZW5kaWYKLQotI2lmICFPUyhXSU5ET1dTKQotdm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1p
bmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCkKLXsKLSAgICAvLyBJdCdzIGEgYml0IGxh
bWUgdG8gZGV0ZWN0IHRoZSBwbHVnaW4gdmVyc2lvbiBieSBwYXJzaW5nIGl0Ci0gICAgLy8gZnJv
bSB0aGUgcGx1Z2luIGRlc2NyaXB0aW9uIHN0cmluZywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0aGF0
Ci0gICAgLy8gdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gYW55IHN0YW5kYXJk
aXplZCB3YXkgYXQKLSAgICAvLyB0aGUgbW9kdWxlIGxldmVsLCBsaWtlIGluIFdpbmRvd3MKLQot
ICAgIGlmIChtX2Rlc2NyaXB0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fZGVzY3JpcHRpb24uc3RhcnRzV2l0aCgiU2hvY2t3YXZlIEZsYXNoIikgJiYgbV9kZXNj
cmlwdGlvbi5sZW5ndGgoKSA+PSAxOSkgewotICAgICAgICAvLyBUaGUgZmxhc2ggdmVyc2lvbiBh
cyBhIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBkaWZmZXJzIG9uIFVuaXggZnJvbSBXaW5kb3dzCi0g
ICAgICAgIC8vIHNpbmNlIHRoZSByZXZpc2lvbiBjYW4gYmUgbGFyZ2VyIHRoYW4gYSA4IGJpdHMs
IHNvIHdlIGFsbG93IGl0IDE2IGhlcmUgYW5kCi0gICAgICAgIC8vIHB1c2ggdGhlIG1ham9yL21p
bm9yIHVwIDggYml0cy4gVGh1cyBvbiBVbml4LCBGbGFzaCdzIHZlcnNpb24gbWF5IGJlCi0gICAg
ICAgIC8vIDB4MGEwMDAwMDAgaW5zdGVhZCBvZiAweDAwMGEwMDAwLgotCi0gICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHZlcnNpb25QYXJ0czsKLSAgICAgICAgbV9kZXNjcmlwdGlvbi5zdWJzdHJpbmco
MTYpLnNwbGl0KCcgJywgLyphbGxvd0VtcHR5RW50cmllcyA9Ki8gZmFsc2UsIHZlcnNpb25QYXJ0
cyk7Ci0gICAgICAgIGlmICh2ZXJzaW9uUGFydHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGlmICh2ZXJzaW9uUGFydHMuc2l6ZSgpID49IDEpIHsKLSAgICAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IG1ham9yTWlub3JQYXJ0czsKLSAgICAgICAgICAgIHZlcnNpb25Q
YXJ0c1swXS5zcGxpdCgnLicsIG1ham9yTWlub3JQYXJ0cyk7Ci0gICAgICAgICAgICBpZiAobWFq
b3JNaW5vclBhcnRzLnNpemUoKSA+PSAxKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBjb252ZXJ0
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBtYWpvciA9IG1ham9yTWlub3JQ
YXJ0c1swXS50b1VJbnQoJmNvbnZlcnRlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRl
ZCkKLSAgICAgICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uID0gKG1ham9yICYgMHhmZikg
PDwgMjQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobWFqb3JNaW5vclBhcnRzLnNp
emUoKSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBjb252ZXJ0ZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBtaW5vciA9IG1ham9yTWlub3JQYXJ0c1sxXS50b1VJbnQo
JmNvbnZlcnRlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRlZCkKLSAgICAgICAgICAg
ICAgICAgICAgbV9tb2R1bGVWZXJzaW9uIHw9IChtaW5vciAmIDB4ZmYpIDw8IDE2OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5zaXplKCkgPj0g
MikgewotICAgICAgICAgICAgU3RyaW5nIHJldmlzaW9uID0gdmVyc2lvblBhcnRzWzFdOwotICAg
ICAgICAgICAgaWYgKHJldmlzaW9uLmxlbmd0aCgpID4gMSAmJiAocmV2aXNpb25bMF0gPT0gJ3In
IHx8IHJldmlzaW9uWzBdID09ICdiJykpIHsKLSAgICAgICAgICAgICAgICByZXZpc2lvbi5yZW1v
dmUoMCwgMSk7Ci0gICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uIHw9IHJldmlzaW9uLnRv
SW50KCkgJiAweGZmZmY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0jZW5k
aWYKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotc3RhdGljIHZvaWQgZ2V0TGlz
dEZyb21WYXJpYW50QXJncyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTlBWYXJpYW50KiBh
cmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9i
amVjdCwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYUxpc3QpCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCi0gICAgICAgIGFMaXN0LmFwcGVuZChKU0M6
OkJpbmRpbmdzOjpjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmYXJnc1tpXSwgcm9vdE9i
amVjdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIEpTQzo6U291cmNlQ29kZSBtYWtlU291cmNlKGNv
bnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCA9IFN0cmluZygpLCBjb25zdCBU
ZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb246Om1pbmltdW1Qb3NpdGlv
bigpKQotewotICAgIHJldHVybiBKU0M6OlNvdXJjZUNvZGUoSlNDOjpTdHJpbmdTb3VyY2VQcm92
aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9uKSwgc3RhcnRQb3NpdGlvbi5t
X2xpbmUub25lQmFzZWRJbnQoKSwgc3RhcnRQb3NpdGlvbi5tX2NvbHVtbi5vbmVCYXNlZEludCgp
KTsKLX0KLQotc3RhdGljIGJvb2wgTlBOX0V2YWx1YXRlKE5QUCBpbnN0YW5jZSwgTlBPYmplY3Qq
IG8sIE5QU3RyaW5nKiBzLCBOUFZhcmlhbnQqIHZhcmlhbnQpCi17Ci0gICAgaWYgKG8tPl9jbGFz
cyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9i
aiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOwotCi0gICAgICAgIEpT
Qzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmotPnJvb3RPYmplY3Q7Ci0g
ICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFRoZXJlIGlzIGEgY3Jhc2ggaW4gRmxh
c2ggd2hlbiBldmFsdWF0aW5nIGEgc2NyaXB0IHRoYXQgZGVzdHJveXMgdGhlCi0gICAgICAgIC8v
IFBsdWdpblZpZXcsIHNvIHdlIGRlc3Ryb3kgaXQgYXN5bmNocm9ub3VzbHkuCi0gICAgICAgIFBs
dWdpblZpZXc6OmtlZXBBbGl2ZShpbnN0YW5jZSk7Ci0KLSAgICAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgICAgICBTdHJpbmcgc2NyaXB0U3Ry
aW5nID0gSlNDOjpCaW5kaW5nczo6Y29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKLQotICAgICAg
ICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlND
OjpKU1ZhbHVlKCkpOwotCi0gICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBW
YXJpYW50KGV4ZWMsIHJldHVyblZhbHVlLCB2YXJpYW50KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgVk9JRF9UT19O
UFZBUklBTlQoKnZhcmlhbnQpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wg
TlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUs
IGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVz
dWx0KQotewotICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgewotICAg
ICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRP
YmplY3QqPihvKTsKLQotICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRl
bnRpZmllclJlcCo+KG1ldGhvZE5hbWUpOwotICAgICAgICBpZiAoIWktPmlzU3RyaW5nKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIHRoZSAi
ZXZhbCIgbWV0aG9kLgotICAgICAgICBpZiAobWV0aG9kTmFtZSA9PSBfTlBOX0dldFN0cmluZ0lk
ZW50aWZpZXIoImV2YWwiKSkgewotICAgICAgICAgICAgaWYgKGFyZ0NvdW50ICE9IDEpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGFyZ3NbMF0udHlwZSAh
PSBOUFZhcmlhbnRUeXBlX1N0cmluZykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6TlBOX0V2YWx1YXRlKG5wcCwgbywgY29uc3RfY2Fz
dDxOUFN0cmluZyo+KCZhcmdzWzBdLnZhbHVlLnN0cmluZ1ZhbHVlKSwgcmVzdWx0KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAgICAgICAg
SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsK
LSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0gb2Jq
LT5pbXAtPmdldChleGVjLCBKU0M6OkJpbmRpbmdzOjppZGVudGlmaWVyRnJvbU5QSWRlbnRpZmll
cihleGVjLCBpLT5zdHJpbmcoKSkpOwotICAgICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwot
ICAgICAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNh
bGxEYXRhKTsKLSAgICAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGVOb25lKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIG9i
amVjdC4KLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwotICAgICAg
ICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50LCByb290T2JqZWN0
LCBhcmdMaXN0KTsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdFYgPSBKU0M6OmNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqLT5pbXAsIGFyZ0xpc3QpOwotCi0g
ICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBj
YWxsLgotICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVj
LCByZXN1bHRWLCByZXN1bHQpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoby0+X2NsYXNzLT5pbnZva2UpCi0g
ICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmludm9rZShvLCBtZXRob2ROYW1lLCBhcmdzLCBhcmdD
b3VudCwgcmVzdWx0KTsKLQotICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93c2VyRnVu
Y3MoKQotewotICAgIG1lbXNldCgmbV9icm93c2VyRnVuY3MsIDAsIHNpemVvZihtX2Jyb3dzZXJG
dW5jcykpOwotICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YobV9icm93c2VyRnVuY3Mp
OwotICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUFZlcnNpb24oKTsKLQotICAgIG1fYnJv
d3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7Ci0gICAgbV9icm93c2VyRnVuY3MucG9zdHVy
bCA9IE5QTl9Qb3N0VVJMOwotICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1Jl
cXVlc3RSZWFkOwotICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07
Ci0gICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7Ci0gICAgbV9icm93c2VyRnVu
Y3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOwotICAgIG1fYnJvd3NlckZ1bmNz
LnN0YXR1cyA9IE5QTl9TdGF0dXM7Ci0gICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1Vz
ZXJBZ2VudDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7Ci0gICAgbV9icm93c2VyRnVu
Y3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7Ci0gICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1
Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlm
eSA9IE5QTl9HZXRVUkxOb3RpZnk7Ci0gICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9
IE5QTl9Qb3N0VVJMTm90aWZ5OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dl
dFZhbHVlOwotICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOwotICAg
IG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OwotICAg
IG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7Ci0gICAgbV9icm93c2Vy
RnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7Ci0gICAgbV9icm93c2VyRnVuY3Mu
cHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOwotICAg
IG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFi
bGVkU3RhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MucGx1Z2ludGhyZWFkYXN5bmNjYWxsID0gTlBO
X1BsdWdpblRocmVhZEFzeW5jQ2FsbDsKLQotICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJp
YW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3Mu
Z2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmll
cnM7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRl
bnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lk
ZW50aWZpZXJJc1N0cmluZzsKLSAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIg
PSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pbnRmcm9taWRl
bnRpZmllciA9IF9OUE5fSW50RnJvbUlkZW50aWZpZXI7Ci0gICAgbV9icm93c2VyRnVuY3MuY3Jl
YXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MucmV0YWlu
b2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9i
amVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBX
ZWJDb3JlOjpOUE5fSW52b2tlOwotICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBf
TlBOX0ludm9rZURlZmF1bHQ7Ci0gICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBXZWJDb3Jl
OjpOUE5fRXZhbHVhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dl
dFByb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9w
ZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJv
cGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc1Byb3BlcnR5
OwotICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzTWV0aG9kOwotICAgIG1f
YnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOwotICAgIG1fYnJv
d3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOwotICAgIG1fYnJvd3NlckZ1bmNz
LmNvbnN0cnVjdCA9IF9OUE5fQ29uc3RydWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVl
Zm9ydXJsID0gTlBOX0dldFZhbHVlRm9yVVJMOwotICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVl
Zm9ydXJsID0gTlBOX1NldFZhbHVlRm9yVVJMOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldGF1dGhl
bnRpY2F0aW9uaW5mbyA9IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm87Ci0KLSAgICBtX2Jyb3dz
ZXJGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0gTlBOX1BvcFVwQ29udGV4dE1lbnU7Ci19Ci0jZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLSNpZiBFTkFCTEUoUExVR0lOX1BB
Q0tBR0VfU0lNUExFX0hBU0gpCi11bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QK
LXsKLSAgICBzdHJ1Y3QgSGFzaENvZGVzIHsKLSAgICAgICAgdW5zaWduZWQgaGFzaDsKLSAgICAg
ICAgdGltZV90IG1vZGlmaWVkRGF0ZTsKLSAgICB9IGhhc2hDb2RlczsKLQotICAgIGhhc2hDb2Rl
cy5oYXNoID0gbV9wYXRoLmltcGwoKS0+aGFzaCgpOwotICAgIGhhc2hDb2Rlcy5tb2RpZmllZERh
dGUgPSBtX2xhc3RNb2RpZmllZDsKLQotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhhc2hNZW1v
cnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KCZoYXNoQ29kZXMpOwotfQotCi1ib29sIFBsdWdpblBhY2th
Z2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIp
Ci17Ci0gICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb247Ci19Ci0j
ZW5kaWYKLQotaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0
Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25zdAotewotICAgIC8vIHJldHVy
biAtMSwgMCwgb3IgMSBpZiBwbHVnLWluIHZlcnNpb24gaXMgbGVzcyB0aGFuLCBlcXVhbCB0bywg
b3IgZ3JlYXRlciB0aGFuCi0gICAgLy8gdGhlIHBhc3NlZCB2ZXJzaW9uCi0KLSNpZiBPUyhXSU5E
T1dTKQotICAgIGlmIChtX21vZHVsZVZlcnNpb24ubW9zdFNpZyAhPSBjb21wYXJlVmVyc2lvbi5t
b3N0U2lnKQotICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uLm1vc3RTaWcgPiBjb21wYXJl
VmVyc2lvbi5tb3N0U2lnID8gMSA6IC0xOwotICAgIGlmIChtX21vZHVsZVZlcnNpb24ubGVhc3RT
aWcgIT0gY29tcGFyZVZlcnNpb24ubGVhc3RTaWcpCi0gICAgICAgIHJldHVybiBtX21vZHVsZVZl
cnNpb24ubGVhc3RTaWcgPiBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZyA/IDEgOiAtMTsKLSNlbHNl
ICAgIAotICAgIGlmIChtX21vZHVsZVZlcnNpb24gIT0gY29tcGFyZVZlcnNpb24pCi0gICAgICAg
IHJldHVybiBtX21vZHVsZVZlcnNpb24gPiBjb21wYXJlVmVyc2lvbiA/IDEgOiAtMTsKLSNlbmRp
ZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFE
QVRBX0NBQ0hFKQotYm9vbCBQbHVnaW5QYWNrYWdlOjplbnN1cmVQbHVnaW5Mb2FkZWQoKQotewot
ICAgIGlmICghbV9pbmZvSXNGcm9tQ2FjaGUpCi0gICAgICAgIHJldHVybiBtX2lzTG9hZGVkOwot
Ci0gICAgbV9xdWlya3MgPSBQbHVnaW5RdWlya1NldCgpOwotICAgIG1fbmFtZSA9IFN0cmluZygp
OwotICAgIG1fZGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKLSAgICBtX2Z1bGxNSU1FRGVzY3JpcHRp
b24gPSBTdHJpbmcoKTsKLSAgICBtX21vZHVsZVZlcnNpb24gPSAwOwotCi0gICAgcmV0dXJuIGZl
dGNoSW5mbygpOwotfQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luUGFja2FnZS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNr
YWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MzQwNTc2Nzk3YWE2YmM4MzE3
NzJiYzNiNGY5Y2NmOGNjOGJhNjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4
IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5QYWNrYWdlX2gKLSNkZWZp
bmUgUGx1Z2luUGFja2FnZV9oCi0KLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAi
UGx1Z2luUXVpcmtTZXQuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotI2VuZGlmCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKLQotICAgIGNsYXNzIFBs
dWdpblBhY2thZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlPiB7Ci0gICAgcHVi
bGljOgotICAgICAgICB+UGx1Z2luUGFja2FnZSgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQbHVnaW5QYWNrYWdlPiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
dGltZV90JiBsYXN0TW9kaWZpZWQpOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURB
VEFfQ0FDSEUpCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IGNyZWF0
ZVBhY2thZ2VGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RN
b2RpZmllZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBj
b25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbik7Ci0jZW5kaWYKLQotICAgICAgICBjb25zdCBT
dHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICAgICAgY29uc3QgU3Ry
aW5nJiBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KLSAgICAg
ICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgICAg
IGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9Ci0g
ICAgICAgIGNvbnN0IFN0cmluZyYgcGFyZW50RGlyZWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9w
YXJlbnREaXJlY3Rvcnk7IH0KLSAgICAgICAgUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2R1bGU7IH0KLSAgICAgICAgdWludDE2X3QgTlBWZXJzaW9uKCkgY29uc3Q7
Ci0gICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RNb2Rp
ZmllZDsgfQotCi0gICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVz
Y3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KLSAgICAg
ICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQotCi0gICAgICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwg
Y29uc3QgUGx1Z2luUGFja2FnZSYgYik7Ci0KLSAgICAgICAgYm9vbCBsb2FkKCk7Ci0gICAgICAg
IHZvaWQgdW5sb2FkKCk7Ci0gICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Ci0K
LSAgICAgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRW5hYmxlZDsgfQot
ICAgICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25z
dCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQotI2VuZGlmCi0gICAgICAgIGludCBjb21wYXJl
RmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJikgY29uc3Q7Ci0gICAgICAg
IGludCBjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmKSBjb25zdDsKLSAgICAgICAgUGx1Z2lu
UXVpcmtTZXQgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV9xdWlya3M7IH0KLSAgICAgICAgY29u
c3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJiB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGVWZXJzaW9uOyB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hF
KQotICAgICAgICBib29sIGVuc3VyZVBsdWdpbkxvYWRlZCgpOwotICAgICAgICB2b2lkIHNldE1J
TUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbik7Ci0gICAgICAgIFN0
cmluZyBmdWxsTUlNRURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdWxsTUlNRURlc2Ny
aXB0aW9uO30KLSNlbmRpZgotICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdpblBhY2thZ2UoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAg
Ym9vbCBmZXRjaEluZm8oKTsKLSAgICAgICAgYm9vbCBpc1BsdWdpbkJsYWNrbGlzdGVkKCk7Ci0g
ICAgICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotCi0g
ICAgICAgIHZvaWQgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOwotICAg
ICAgICB2b2lkIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKLQotICAgICAgICBib29sIG1faXNF
bmFibGVkOwotICAgICAgICBib29sIG1faXNMb2FkZWQ7Ci0gICAgICAgIGludCBtX2xvYWRDb3Vu
dDsKLQotICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKLSAgICAgICAgU3RyaW5nIG1fcGF0
aDsKLSAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7Ci0gICAgICAgIFN0cmluZyBtX25hbWU7Ci0g
ICAgICAgIFN0cmluZyBtX3BhcmVudERpcmVjdG9yeTsKLQotICAgICAgICBQbGF0Zm9ybU1vZHVs
ZVZlcnNpb24gbV9tb2R1bGVWZXJzaW9uOwotCi0gICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01h
cCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKLSAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21p
bWVUb0V4dGVuc2lvbnM7Ci0KLSAgICAgICAgUGxhdGZvcm1Nb2R1bGUgbV9tb2R1bGU7Ci0gICAg
ICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZDsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQX1NodXRkb3duOwotICAgICAg
ICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7Ci0gICAgICAgIE5QTmV0c2NhcGVGdW5jcyBt
X2Jyb3dzZXJGdW5jczsKLSNlbmRpZgotCi0gICAgICAgIHZvaWQgZnJlZUxpYnJhcnlTb29uKCk7
Ci0gICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKCk7Ci0gICAgICAgIFRpbWVyIG1f
ZnJlZUxpYnJhcnlUaW1lcjsKLQotICAgICAgICBQbHVnaW5RdWlya1NldCBtX3F1aXJrczsKLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICBTdHJpbmcg
bV9mdWxsTUlNRURlc2NyaXB0aW9uOwotICAgICAgICBib29sIG1faW5mb0lzRnJvbUNhY2hlOwot
I2VuZGlmCi0gICAgfTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBiZWNh
dXNlIFBsdWdpblBhY2thZ2VIYXNoIGlzIGJyb2tlbiBhbmQgbWF5IGNvbnNpZGVyIGtleXMgd2l0
aCBkaWZmZXJlbnQgaGFzaGVzIGFzIGVxdWFsLgotICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlSGFz
aFRyYWl0cyA6IEhhc2hUcmFpdHM8UmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gewotICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSA2NDsKLSAgICB9OwotCi0gICAgc3Ry
dWN0IFBsdWdpblBhY2thZ2VIYXNoIHsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgdWludHB0cl90IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdl
Kj4oa2V5KS0+aGFzaCgpOyB9Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQotCi0gICAg
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHVpbnRwdHJfdCBhLCBjb25zdCB1aW50cHRyX3Qg
YikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYSksIHJl
aW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGIpKTsgfQotICAgICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGEsIGNvbnN0IFJlZlB0cjxQbHVn
aW5QYWNrYWdlPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZTo6ZXF1YWwoKmEuZ2V0KCksICpi
LmdldCgpKTsgfQotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IGZhbHNlOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblF1aXJrU2V0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQ5YTMzODNkYmI0NDY5MDk5NDA3ZDZiZGExMjNkMTAxZGNiNWQz
ODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFBsdWdpblF1aXJrU2V0X2gKLSNkZWZpbmUgUGx1Z2luUXVpcmtTZXRfaAotCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGVudW0gUGx1Z2luUXVpcmsgewotICAgICAgICBQ
bHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCA9IDEgPDwgMCwKLSAgICAgICAgUGx1Z2lu
UXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCA9IDEgPDwgMSwKLSAgICAgICAgUGx1Z2luUXVp
cmtUaHJvdHRsZUludmFsaWRhdGUgPSAxIDw8IDIsIAotICAgICAgICBQbHVnaW5RdWlya1JlbW92
ZVdpbmRvd2xlc3NWaWRlb1BhcmFtID0gMSA8PCAzLAotICAgICAgICBQbHVnaW5RdWlya1Rocm90
dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzID0gMSA8PCA0LAotICAgICAgICBQbHVnaW5RdWlya0Rv
bnRVbmxvYWRQbHVnaW4gPSAxIDw8IDUsCi0gICAgICAgIFBsdWdpblF1aXJrRG9udENhbGxXbmRQ
cm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSA9IDEgPDwgNiwKLSAgICAgICAgUGx1Z2luUXVp
cmtIYXNNb2RhbE1lc3NhZ2VMb29wID0gMSA8PCA3LAotICAgICAgICBQbHVnaW5RdWlya0ZsYXNo
VVJMTm90aWZ5QnVnID0gMSA8PCA4LAotICAgICAgICBQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJv
UmVjdFdoZW5TY3JvbGxpbmcgPSAxIDw8IDksCi0gICAgICAgIFBsdWdpblF1aXJrRG9udFNldE51
bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kgPSAxIDw8IDEwLAotICAgICAgICBQbHVnaW5RdWlya0Rv
bnRBbGxvd011bHRpcGxlSW5zdGFuY2VzID0gMSA8PCAxMSwKLSAgICAgICAgUGx1Z2luUXVpcmtS
ZXF1aXJlc0d0a1Rvb2xLaXQgPSAxIDw8IDEyLAotICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVz
RGVmYXVsdFNjcmVlbkRlcHRoID0gMSA8PCAxMywKLSAgICAgICAgUGx1Z2luUXVpcmtEb250Q2Fs
bFNldFdpbmRvd01vcmVUaGFuT25jZSA9IDEgPDwgMTQsCi0gICAgICAgIFBsdWdpblF1aXJrSWdu
b3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUgPSAxIDw8IDE1LAotICAgICAgICBQbHVnaW5R
dWlya1dhbnRzQ2hyb21lVXNlckFnZW50ID0gMSA8PCAxNgotICAgIH07Ci0KLSAgICBjbGFzcyBQ
bHVnaW5RdWlya1NldCB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFBsdWdpblF1aXJr
U2V0KCkgOiBtX3F1aXJrcygwKSB7IH0KLSAgICAgICAgICAgIHZvaWQgYWRkKFBsdWdpblF1aXJr
IHF1aXJrKSB7IG1fcXVpcmtzIHw9IHF1aXJrOyB9Ci0gICAgICAgICAgICBib29sIGNvbnRhaW5z
KFBsdWdpblF1aXJrIHF1aXJrKSBjb25zdCB7IHJldHVybiBtX3F1aXJrcyAmIHF1aXJrOyB9Ci0g
ICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX3F1aXJrczsKLSAgICB9Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQbHVnaW5RdWlya1NldF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDc5YjliMTIwZjFmNDIwYzZiNGE3YzZiZmYwMDc2MzMwMGI1NTgyNDcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblN0cmVhbS5oIgotCi0j
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCi0jaW5jbHVkZSAi
UGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKLSNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgotI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi0vLyBXZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBs
aWtlIHRvIHJldHVybiAtMSB0byBpbmRpY2F0ZSBlcnJvcgotLy8gYW5kIHRoaXMgd2F5IHdlIHdv
bid0IGNsYXNoIHdpdGggdGhlbS4KLXN0YXRpYyBjb25zdCBpbnQgV2ViUmVhc29uTm9uZSA9IC0y
OwotCi11c2luZyBzdGQ6Om1heDsKLXVzaW5nIHN0ZDo6bWluOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXR5cGVkZWYgSGFzaE1hcDxOUFN0cmVhbSosIE5QUD4gU3RyZWFtTWFwOwotc3RhdGlj
IFN0cmVhbU1hcCYgc3RyZWFtcygpCi17Ci0gICAgc3RhdGljIFN0cmVhbU1hcCBzdGF0aWNTdHJl
YW1zOwotICAgIHJldHVybiBzdGF0aWNTdHJlYW1zOwotfQotCi1QbHVnaW5TdHJlYW06OlBsdWdp
blN0cmVhbShQbHVnaW5TdHJlYW1DbGllbnQqIGNsaWVudCwgRnJhbWUqIGZyYW1lLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2
b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcywgTlBQIGlu
c3RhbmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtzKQotICAgIDogbV9yZXNvdXJjZVJl
cXVlc3QocmVzb3VyY2VSZXF1ZXN0KQotICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9m
cmFtZShmcmFtZSkKLSAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQotICAgICwgbV9zZW5k
Tm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pCi0gICAgLCBtX3N0cmVhbVN0YXRlKFN0cmVh
bUJlZm9yZVN0YXJ0ZWQpCi0gICAgLCBtX2xvYWRNYW51YWxseShmYWxzZSkKLSAgICAsIG1fZGVs
YXlEZWxpdmVyeVRpbWVyKCp0aGlzLCAmUGx1Z2luU3RyZWFtOjpkZWxheURlbGl2ZXJ5VGltZXJG
aXJlZCkKLSAgICAsIG1fdGVtcEZpbGVIYW5kbGUoaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkK
LSAgICAsIG1fcGx1Z2luRnVuY3MocGx1Z2luRnVuY3MpCi0gICAgLCBtX2luc3RhbmNlKGluc3Rh
bmNlKQotICAgICwgbV9xdWlya3MocXVpcmtzKQotewotICAgIEFTU0VSVChtX2luc3RhbmNlKTsK
LQotICAgIG1fc3RyZWFtLnVybCA9IDA7Ci0gICAgbV9zdHJlYW0ubmRhdGEgPSAwOwotICAgIG1f
c3RyZWFtLnBkYXRhID0gMDsKLSAgICBtX3N0cmVhbS5lbmQgPSAwOwotICAgIG1fc3RyZWFtLm5v
dGlmeURhdGEgPSAwOwotICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IDA7Ci0gICAgbV9zdHJl
YW0uaGVhZGVycyA9IDA7Ci0KLSAgICBzdHJlYW1zKCkuYWRkKCZtX3N0cmVhbSwgbV9pbnN0YW5j
ZSk7Ci19Ci0KLVBsdWdpblN0cmVhbTo6flBsdWdpblN0cmVhbSgpCi17Ci0gICAgQVNTRVJUKG1f
c3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RhcnRlZCk7Ci0gICAgQVNTRVJUKCFtX2xvYWRlcik7Ci0K
LSAgICBmYXN0RnJlZSgoY2hhciopbV9zdHJlYW0udXJsKTsKLQotICAgIHN0cmVhbXMoKS5yZW1v
dmUoJm1fc3RyZWFtKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0KCkKLXsKLSAgICBB
U1NFUlQoIW1fbG9hZE1hbnVhbGx5KTsKLSAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVk
dWxlcigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQobV9mcmFtZSwgdGhpcywgbV9yZXNvdXJj
ZVJlcXVlc3QpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6c3RvcCgpCi17Ci0gICAgbV9zdHJl
YW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7Ci0KLSAgICBpZiAobV9sb2FkTWFudWFsbHkpIHsKLSAg
ICAgICAgQVNTRVJUKCFtX2xvYWRlcik7Ci0KLSAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3Vt
ZW50TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKTsKLSAg
ICAgICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyKTsKLQotICAgICAgICBpZiAoZG9jdW1lbnRMb2Fk
ZXItPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKQotICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIt
PmNhbmNlbE1haW5SZXNvdXJjZUxvYWQobV9mcmFtZS0+bG9hZGVyKCkuY2FuY2VsbGVkRXJyb3Io
bV9yZXNvdXJjZVJlcXVlc3QpKTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KG1fbG9hZGVyKSB7Ci0gICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKLSAgICAgICAgbV9sb2Fk
ZXIgPSAwOwotICAgIH0KLQotICAgIG1fY2xpZW50ID0gMDsKLX0KLQotc3RhdGljIHVpbnQzMl90
IGxhc3RNb2RpZmllZERhdGUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0g
ICAgZG91YmxlIGxhc3RNb2RpZmllZCA9IHJlc3BvbnNlLmxhc3RNb2RpZmllZCgpOwotICAgIGlm
ICghc3RkOjppc2Zpbml0ZShsYXN0TW9kaWZpZWQpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBsYXN0TW9kaWZpZWQgKiAxMDAwOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6c3Rh
cnRTdHJlYW0oKQotewotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0
YXJ0ZWQpOwotCi0gICAgY29uc3QgVVJMJiByZXNwb25zZVVSTCA9IG1fcmVzb3VyY2VSZXNwb25z
ZS51cmwoKTsKLQotICAgIC8vIFNvbWUgcGx1Z2lucyAoRmxhc2gpIGV4cGVjdCB0aGF0IGphdmFz
Y3JpcHQgVVJMcyBhcmUgcGFzc2VkIGJhY2sgZGVjb2RlZCBhcyB0aGlzIGlzIHRoZQotICAgIC8v
IGZvcm1hdCB1c2VkIHdoZW4gcmVxdWVzdGluZyB0aGUgVVJMLgotICAgIGlmIChwcm90b2NvbElz
SmF2YVNjcmlwdChyZXNwb25zZVVSTCkpCi0gICAgICAgIG1fc3RyZWFtLnVybCA9IGZhc3RTdHJE
dXAoZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHJlc3BvbnNlVVJMLnN0cmluZygpKS51dGY4KCku
ZGF0YSgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fc3RyZWFtLnVybCA9IGZhc3RTdHJEdXAocmVz
cG9uc2VVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBDU3RyaW5nIG1pbWVUeXBl
U3RyID0gbV9yZXNvdXJjZVJlc3BvbnNlLm1pbWVUeXBlKCkudXRmOCgpOwotCi0gICAgbG9uZyBs
b25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25zZS5leHBlY3RlZENv
bnRlbnRMZW5ndGgoKTsKLQotICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2UuaXNIVFRQKCkpIHsK
LSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBTdHJpbmcgc2Vw
YXJhdG9yID0gQVNDSUlMaXRlcmFsKCI6ICIpOwotCi0gICAgICAgIFN0cmluZyBzdGF0dXNMaW5l
ID0gIkhUVFAgIiArIFN0cmluZzo6bnVtYmVyKG1fcmVzb3VyY2VSZXNwb25zZS5odHRwU3RhdHVz
Q29kZSgpKSArICIgT0tcbiI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0YXR1c0xp
bmUpOwotCi0gICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVz
b3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7Ci0gICAgICAgIGZvciAoSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoaXQtPmtleSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChzZXBhcmF0b3IpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZh
bHVlKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICB9
Ci0KLSAgICAgICAgbV9oZWFkZXJzID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsK
LQotICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxpa2VseSBjb21w
cmVzc2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdpbiwKLSAgICAg
ICAgLy8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90
IHlldCBrbm93biBhdCB0aGUgbW9tZW50LgotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDQ3
MDU5OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3BvbnNlIGV4cGVjdGVkQ29udGVu
dExlbmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KLSAgICAgICAgU3RyaW5nIGNvbnRl
bnRFbmNvZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRl
ck5hbWU6OkNvbnRlbnRFbmNvZGluZyk7Ci0gICAgICAgIGlmICghY29udGVudEVuY29kaW5nLmlz
TnVsbCgpICYmIGNvbnRlbnRFbmNvZGluZyAhPSAiaWRlbnRpdHkiKQotICAgICAgICAgICAgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoID0gLTE7Ci0gICAgfQotCi0gICAgbV9zdHJlYW0uaGVhZGVycyA9
IG1faGVhZGVycy5kYXRhKCk7Ci0gICAgbV9zdHJlYW0ucGRhdGEgPSAwOwotICAgIG1fc3RyZWFt
Lm5kYXRhID0gdGhpczsKLSAgICBtX3N0cmVhbS5lbmQgPSBtYXgoZXhwZWN0ZWRDb250ZW50TGVu
Z3RoLCAwTEwpOwotICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IGxhc3RNb2RpZmllZERhdGUo
bV9yZXNvdXJjZVJlc3BvbnNlKTsKLSAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlE
YXRhOwotCi0gICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7Ci0gICAgbV9vZmZzZXQgPSAw
OwotICAgIG1fcmVhc29uID0gV2ViUmVhc29uTm9uZTsKLQotICAgIC8vIFByb3RlY3QgdGhlIHN0
cmVhbSBpZiBkZXN0cm95c3RyZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgbmV3c3RyZWFt
IGhhbmRsZXIKLSAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAg
Ly8gY2FsbGluZyBpbnRvIGEgcGx1Zy1pbiBjb3VsZCByZXN1bHQgaW4gcmUtZW50cmFuY2UgaWYg
dGhlIHBsdWctaW4geWllbGRzCi0gICAgLy8gY29udHJvbCB0byB0aGUgc3lzdGVtIChyZGFyOi8v
NTc0NDg5OSkuIHByZXZlbnQgdGhpcyBieSBkZWZlcnJpbmcgZnVydGhlcgotICAgIC8vIGxvYWRp
bmcgd2hpbGUgY2FsbGluZyBpbnRvIHRoZSBwbHVnLWluLgotICAgIGlmIChtX2xvYWRlcikKLSAg
ICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0gICAgTlBFcnJvciBucEVy
ciA9IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbShtX2luc3RhbmNlLCAoTlBNSU1FVHlwZSltaW1l
VHlwZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVyTW9kZSk7Ci0gICAg
aWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7
Ci0gICAgCi0gICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVzdHJveWVkIGluIHRoZSBjYWxsIHRv
IG5ld3N0cmVhbSB3ZSByZXR1cm4KLSAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkK
LSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJS
T1IpIHsKLSAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShucEVycik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RhcnRlZDsKLQotICAg
IGlmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9OT1JNQUwpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fcGF0aCA9IG9wZW5UZW1wb3JhcnlGaWxlKCJXS1AiLCBtX3RlbXBGaWxlSGFuZGxlKTsKLQot
ICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nLCBjYW5jZWwgbG9hZGluZyB0aGUgc3RyZWFtCi0g
ICAgaWYgKCFpc0hhbmRsZVZhbGlkKG1fdGVtcEZpbGVIYW5kbGUpKQotICAgICAgICBjYW5jZWxB
bmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKLX0KLQotTlBQIFBsdWdpblN0cmVh
bTo6b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSkKLXsKLSAgICByZXR1cm4gc3RyZWFt
cygpLmdldChzdHJlYW0pOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6Y2FuY2VsQW5kRGVzdHJv
eVN0cmVhbShOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJv
dGVjdCh0aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0ocmVhc29uKTsKLSAgICBzdG9wKCk7Ci19
Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpkZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKLXsK
LSAgICBtX3JlYXNvbiA9IHJlYXNvbjsKLSAgICBpZiAobV9yZWFzb24gIT0gTlBSRVNfRE9ORSkg
ewotICAgICAgICAvLyBTdG9wIGFueSBwZW5kaW5nIGRhdGEgZnJvbSBiZWluZyBzdHJlYW1lZAot
ICAgICAgICBpZiAobV9kZWxpdmVyeURhdGEpCi0gICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+
cmVzaXplKDApOwotICAgIH0gZWxzZSBpZiAobV9kZWxpdmVyeURhdGEgJiYgbV9kZWxpdmVyeURh
dGEtPnNpemUoKSA+IDApIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgbW9yZSBkYXRhIHRvIGJlIHN0
cmVhbWVkLCBkb24ndCBkZXN0cm95IHRoZSBzdHJlYW0gbm93LgotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGRlc3Ryb3lTdHJlYW0oKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRlc3Ry
b3lTdHJlYW0oKQotewotICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKTsK
LSAgICBBU1NFUlQoIW1fZGVsaXZlcnlEYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0g
MCk7Ci0KLSAgICBjbG9zZUZpbGUobV90ZW1wRmlsZUhhbmRsZSk7Ci0KLSAgICBib29sIG5ld1N0
cmVhbUNhbGxlZCA9IG1fc3RyZWFtLm5kYXRhOwotCi0gICAgLy8gUHJvdGVjdCBmcm9tIGRlc3Ry
dWN0aW9uIGlmOgotICAgIC8vICBOUE5fRGVzdHJveVN0cmVhbSBpcyBjYWxsZWQgZnJvbSBOUFBf
TmV3U3RyZWFtIG9yCi0gICAgLy8gIFBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFtRGlkRmluaXNo
TG9hZGluZygpIHJlbW92ZXMgdGhlIGxhc3QgcmVmZXJlbmNlCi0gICAgUmVmUHRyPFBsdWdpblN0
cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGlmIChuZXdTdHJlYW1DYWxsZWQpIHsKLSAgICAg
ICAgaWYgKG1fcmVhc29uID09IE5QUkVTX0RPTkUgJiYgKG1fdHJhbnNmZXJNb2RlID09IE5QX0FT
RklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSkgewotICAgICAgICAgICAg
QVNTRVJUKCFtX3BhdGguaXNOdWxsKCkpOwotCi0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0g
ICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0gICAgICAg
ICAgICBtX3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX3BhdGgu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICAg
ICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCkgewotICAgICAgICAg
ICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2Fk
aW5nKHRydWUpOwotCi0gICAgICAgICAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+
ZGVzdHJveXN0cmVhbShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKLQotICAgICAg
ICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNM
b2FkaW5nKGZhbHNlKTsKLQotICAgICAgICAgICAgTE9HX05QRVJST1IobnBFcnIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbV9zdHJlYW0ubmRhdGEgPSAwOwotICAgIH0KLQotICAgIGlmIChtX3Nl
bmROb3RpZmljYXRpb24pIHsKLSAgICAgICAgLy8gRmxhc2ggOSBjYW4gZGVyZWZlcmVuY2UgbnVs
bCBpZiB3ZSBjYWxsIE5QUF9VUkxOb3RpZnkgd2l0aG91dCBmaXJzdCBjYWxsaW5nIE5QUF9OZXdT
dHJlYW0KLSAgICAgICAgLy8gZm9yIHJlcXVlc3RzIG1hZGUgd2l0aCBOUE5fUG9zdFVSTE5vdGlm
eTsgc2VlIDxyZGFyOi8vNTU4ODgwNz4KLSAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAg
ICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0gICAgICAgIGlmICghbmV3U3Ry
ZWFtQ2FsbGVkICYmIG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlC
dWcpICYmCi0gICAgICAgICAgICBlcXVhbElnbm9yaW5nQ2FzZShtX3Jlc291cmNlUmVxdWVzdC5o
dHRwTWV0aG9kKCksICJQT1NUIikpIHsKLSAgICAgICAgICAgIG1fdHJhbnNmZXJNb2RlID0gTlBf
Tk9STUFMOwotICAgICAgICAgICAgbV9zdHJlYW0udXJsID0gIiI7Ci0gICAgICAgICAgICBtX3N0
cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRhOwotCi0gICAgICAgICAgICBzdGF0aWMgY2hh
ciBlbXB0eU1pbWVUeXBlW10gPSAiIjsKLSAgICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPm5ld3N0
cmVhbShtX2luc3RhbmNlLCBlbXB0eU1pbWVUeXBlLCAmbV9zdHJlYW0sIGZhbHNlLCAmbV90cmFu
c2Zlck1vZGUpOwotICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+ZGVzdHJveXN0cmVhbShtX2lu
c3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKLQotICAgICAgICAgICAgLy8gaW4gc3VjY2Vz
c2Z1bCByZXF1ZXN0cywgdGhlIFVSTCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIGZyZWVk
IGluIG91cgotICAgICAgICAgICAgLy8gZGVzdHJ1Y3Rvciwgc28gcmVzZXQgaXQgdG8gMAotICAg
ICAgICAgICAgbV9zdHJlYW0udXJsID0gMDsKLSAgICAgICAgfQotICAgICAgICBtX3BsdWdpbkZ1
bmNzLT51cmxub3RpZnkobV9pbnN0YW5jZSwgbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgbV9yZWFzb24sIG1fbm90aWZ5RGF0YSk7Ci0gICAgICAgIGlmICht
X2xvYWRlcikKLSAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsK
LSAgICB9Ci0KLSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RvcHBlZDsKLQotICAgIGlmICgh
bV9sb2FkTWFudWFsbHkgJiYgbV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5zdHJlYW1EaWRG
aW5pc2hMb2FkaW5nKHRoaXMpOwotCi0gICAgaWYgKCFtX3BhdGguaXNOdWxsKCkpCi0gICAgICAg
IGRlbGV0ZUZpbGUobV9wYXRoKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZl
cnlUaW1lckZpcmVkKCkKLXsKLSAgICBkZWxpdmVyRGF0YSgpOwotfQotCi12b2lkIFBsdWdpblN0
cmVhbTo6ZGVsaXZlckRhdGEoKQotewotICAgIEFTU0VSVChtX2RlbGl2ZXJ5RGF0YSk7Ci0gICAg
Ci0gICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKLSAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBjYW5jZWwgb3VyIGpvYiBpbiB0aGUgU3VicmVzb3VyY2VMb2FkZXIgb24g
ZXJyb3Igc28gd2UgZG9uJ3QgcmVhY2ggdGhpcyBjYXNlCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOwotCi0gICAgaWYg
KCFtX3N0cmVhbS5uZGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApCi0gICAgICAg
IHJldHVybjsKLQotICAgIGludDMyX3QgdG90YWxCeXRlcyA9IG1fZGVsaXZlcnlEYXRhLT5zaXpl
KCk7Ci0gICAgaW50MzJfdCB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKLQotICAgIGlmIChtX2xv
YWRlcikKLSAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0gICAgd2hp
bGUgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7Ci0gICAgICAgIGludDMyX3Qg
ZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlcmVhZHkobV9pbnN0YW5jZSwgJm1f
c3RyZWFtKTsKLQotICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8PSAwKSB7Ci0gICAgICAgICAg
ICBtX2RlbGF5RGVsaXZlcnlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVs
aXZlcnlCeXRlcywgdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWQpOwotICAgICAgICAg
ICAgaW50MzJfdCBkYXRhTGVuZ3RoID0gZGVsaXZlcnlCeXRlczsKLSAgICAgICAgICAgIGNoYXIq
IGRhdGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKLQot
ICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEKLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMg
PSBtX3BsdWdpbkZ1bmNzLT53cml0ZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fb2Zmc2V0LCBk
YXRhTGVuZ3RoLCAodm9pZCopZGF0YSk7Ci0gICAgICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8
IDApIHsKLSAgICAgICAgICAgICAgICBMT0dfUExVR0lOX05FVF9FUlJPUigpOwotICAgICAgICAg
ICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERl
ZmVyc0xvYWRpbmcoZmFsc2UpOwotICAgICAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJl
YW0oTlBSRVNfTkVUV09SS19FUlIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgZGF0
YUxlbmd0aCk7Ci0gICAgICAgICAgICBtX29mZnNldCArPSBkZWxpdmVyeUJ5dGVzOwotICAgICAg
ICAgICAgdG90YWxCeXRlc0RlbGl2ZXJlZCArPSBkZWxpdmVyeUJ5dGVzOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOwotCi0gICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPiAwKSB7Ci0gICAgICAg
IGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgewotICAgICAgICAgICAgaW50
IHJlbWFpbmluZ0J5dGVzID0gdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7Ci0gICAg
ICAgICAgICBtZW1tb3ZlKG1fZGVsaXZlcnlEYXRhLT5kYXRhKCksIG1fZGVsaXZlcnlEYXRhLT5k
YXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkLCByZW1haW5pbmdCeXRlcyk7Ci0gICAgICAgICAg
ICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKHJlbWFpbmluZ0J5dGVzKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7Ci0gICAgICAgICAgICBp
ZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKLSAgICAgICAgICAgICAgICBkZXN0cm95U3Ry
ZWFtKCk7Ci0gICAgICAgIH0KLSAgICB9IAotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6c2VuZEph
dmFTY3JpcHRTdHJlYW0oY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiByZXN1
bHRTdHJpbmcpCi17Ci0gICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIFJlc291cmNlUmVzcG9uc2Uo
cmVxdWVzdFVSTCwgInRleHQvcGxhaW4iLCByZXN1bHRTdHJpbmcubGVuZ3RoKCksICIiKSk7Ci0K
LSAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIXJlc3VsdFN0cmluZy5pc051bGwoKSkgewotICAgICAgICBkaWRSZWNlaXZl
RGF0YSgwLCByZXN1bHRTdHJpbmcuZGF0YSgpLCByZXN1bHRTdHJpbmcubGVuZ3RoKCkpOwotICAg
ICAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fbG9hZGVyID0gMDsKLQotICAgIGRlc3Ryb3lTdHJlYW0ocmVz
dWx0U3RyaW5nLmlzTnVsbCgpID8gTlBSRVNfTkVUV09SS19FUlIgOiBOUFJFU19ET05FKTsKLX0K
LQotdm9pZCBQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICBBU1NF
UlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKLQotICAgIG1fcmVzb3Vy
Y2VSZXNwb25zZSA9IHJlc3BvbnNlOwotCi0gICAgc3RhcnRTdHJlYW0oKTsKLX0KLQotdm9pZCBQ
bHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUX1VOVVNF
RChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0gICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUg
PT0gU3RyZWFtU3RhcnRlZCk7Ci0KLSAgICAvLyBJZiB0aGUgcGx1Zy1pbiBjYW5jZWxzIHRoZSBz
dHJlYW0gaW4gZGVsaXZlckRhdGEgaXQgY291bGQgYmUgZGVsZXRlZCwgCi0gICAgLy8gc28gcHJv
dGVjdCBpdCBoZXJlLgotICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7Ci0K
LSAgICBpZiAobV90cmFuc2Zlck1vZGUgIT0gTlBfQVNGSUxFT05MWSkgewotICAgICAgICBpZiAo
IW1fZGVsaXZlcnlEYXRhKQotICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFZlY3RvcjxjaGFyPj4oKTsKLQotICAgICAgICBpbnQgb2xkU2l6ZSA9IG1fZGVsaXZl
cnlEYXRhLT5zaXplKCk7Ci0gICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUob2xkU2l6ZSAr
IGxlbmd0aCk7Ci0gICAgICAgIG1lbWNweShtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgb2xkU2l6
ZSwgZGF0YSwgbGVuZ3RoKTsKLQotICAgICAgICBkZWxpdmVyRGF0YSgpOwotICAgIH0KLQotICAg
IGlmIChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0b3BwZWQgJiYgaXNIYW5kbGVWYWxpZChtX3Rl
bXBGaWxlSGFuZGxlKSkgewotICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gd3JpdGVUb0ZpbGUo
bV90ZW1wRmlsZUhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgaWYgKGJ5dGVzV3JpdHRl
biAhPSBsZW5ndGgpCi0gICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05F
VFdPUktfRVJSKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpkaWRGYWlsKE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQotewot
ICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotCi0gICAgTE9H
X1BMVUdJTl9ORVRfRVJST1IoKTsKLQotICAgIC8vIGRlc3Ryb3lTdHJlYW0gY2FuIHJlc3VsdCBp
biBvdXIgYmVpbmcgZGVsZXRlZAotICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhp
cyk7Ci0KLSAgICBkZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKLQotICAgIG1fbG9h
ZGVyID0gMDsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRpZEZpbmlzaExvYWRpbmcoTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRl
ciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJl
YW1TdGFydGVkKTsKLQotICAgIC8vIGRlc3Ryb3lTdHJlYW0gY2FuIHJlc3VsdCBpbiBvdXIgYmVp
bmcgZGVsZXRlZAotICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7Ci0KLSAg
ICBkZXN0cm95U3RyZWFtKE5QUkVTX0RPTkUpOwotCi0gICAgbV9sb2FkZXIgPSAwOwotfQotCi1i
b29sIFBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJlYW1zKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
cGx1Z2luRnVuY3MtPmdldHZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2b2lk
KiByZXN1bHQgPSAwOwotICAgIGlmIChtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1ZShtX2luc3RhbmNl
LCBOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtcywgJnJlc3VsdCkgIT0gTlBFUlJfTk9f
RVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiByZXN1bHQgIT0gMDsK
LX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDIwMDMyYzRjMTkwNDUxMjJmNTZhY2VmNjMyZTU3ODE4YTE1YTliY2Yu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgUGx1Z2luU3RyZWFtX2gKLSNkZWZpbmUgUGx1Z2luU3RyZWFtX2gK
LQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgotI2luY2x1ZGUgIlBsdWdpblF1aXJrU2V0Lmgi
Ci0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgi
Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xh
c3MgUGx1Z2luU3RyZWFtOwotCi0gICAgZW51bSBQbHVnaW5TdHJlYW1TdGF0ZSB7IFN0cmVhbUJl
Zm9yZVN0YXJ0ZWQsIFN0cmVhbVN0YXJ0ZWQsIFN0cmVhbVN0b3BwZWQgfTsKLQotICAgIGNsYXNz
IFBsdWdpblN0cmVhbUNsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5QbHVn
aW5TdHJlYW1DbGllbnQoKSB7fQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmluaXNo
TG9hZGluZyhQbHVnaW5TdHJlYW0qKSB7fQotICAgIH07Ci0KLSAgICBjbGFzcyBQbHVnaW5TdHJl
YW0gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5TdHJlYW0+LCBwcml2YXRlIE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBsdWdpblN0cmVhbT4gY3JlYXRlKFBsdWdpblN0cmVhbUNsaWVudCogY2xpZW50LCBG
cmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzZW5kTm90
aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiBmdW5jdGlv
bnMsIE5QUCBpbnN0YW5jZSwgY29uc3QgUGx1Z2luUXVpcmtTZXQmIHF1aXJrcykKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5TdHJlYW0oY2xpZW50LCBm
cmFtZSwgcmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwgZnVuY3Rpb25zLCBp
bnN0YW5jZSwgcXVpcmtzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmlydHVhbCB+UGx1Z2luU3Ry
ZWFtKCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgICAgIHZvaWQgc3Rv
cCgpOwotCi0gICAgICAgIHZvaWQgc3RhcnRTdHJlYW0oKTsKLQotICAgICAgICB2b2lkIHNldExv
YWRNYW51YWxseShib29sIGxvYWRNYW51YWxseSkgeyBtX2xvYWRNYW51YWxseSA9IGxvYWRNYW51
YWxseTsgfQotCi0gICAgICAgIHZvaWQgc2VuZEphdmFTY3JpcHRTdHJlYW0oY29uc3QgVVJMJiBy
ZXF1ZXN0VVJMLCBjb25zdCBXVEY6OkNTdHJpbmcmIHJlc3VsdFN0cmluZyk7Ci0gICAgICAgIHZv
aWQgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJlYXNvbik7Ci0KLSAgICAgICAgc3RhdGljIE5Q
UCBvd25lckZvclN0cmVhbShOUFN0cmVhbSopOwotCi0gICAgICAgIC8vIE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyQ2xpZW50Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXIqKTsKLSAgICAgICAgdmlydHVhbCBib29sIHdhbnRzQWxsU3RyZWFtcygpIGNvbnN0Owot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luU3RyZWFtKFBsdWdpblN0cmVhbUNsaWVudCos
IEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2
b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiwgTlBQIGluc3RhbmNlLCBjb25z
dCBQbHVnaW5RdWlya1NldCYpOwotCi0gICAgICAgIHZvaWQgZGVsaXZlckRhdGEoKTsKLSAgICAg
ICAgdm9pZCBkZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKLSAgICAgICAgdm9pZCBkZXN0cm95U3Ry
ZWFtKCk7Ci0KLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OwotICAg
ICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzb3VyY2VSZXNwb25zZTsKLQotICAgICAgICBQbHVn
aW5TdHJlYW1DbGllbnQqIG1fY2xpZW50OwotICAgICAgICBGcmFtZSogbV9mcmFtZTsKLSAgICAg
ICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBtX2xvYWRlcjsKLSAgICAgICAg
dm9pZCogbV9ub3RpZnlEYXRhOwotICAgICAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKLSAg
ICAgICAgUGx1Z2luU3RyZWFtU3RhdGUgbV9zdHJlYW1TdGF0ZTsKLSAgICAgICAgYm9vbCBtX2xv
YWRNYW51YWxseTsKLQotICAgICAgICBUaW1lciBtX2RlbGF5RGVsaXZlcnlUaW1lcjsKLSAgICAg
ICAgdm9pZCBkZWxheURlbGl2ZXJ5VGltZXJGaXJlZCgpOwotCi0gICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxWZWN0b3I8Y2hhcj4+IG1fZGVsaXZlcnlEYXRhOwotCi0gICAgICAgIFBsYXRmb3JtRmls
ZUhhbmRsZSBtX3RlbXBGaWxlSGFuZGxlOwotCi0gICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3Mq
IG1fcGx1Z2luRnVuY3M7Ci0gICAgICAgIE5QUCBtX2luc3RhbmNlOwotICAgICAgICB1aW50MTZf
dCBtX3RyYW5zZmVyTW9kZTsKLSAgICAgICAgaW50MzJfdCBtX29mZnNldDsKLSAgICAgICAgQ1N0
cmluZyBtX2hlYWRlcnM7Ci0gICAgICAgIFN0cmluZyBtX3BhdGg7Ci0gICAgICAgIE5QUmVhc29u
IG1fcmVhc29uOwotICAgICAgICBOUFN0cmVhbSBtX3N0cmVhbTsKLSAgICAgICAgUGx1Z2luUXVp
cmtTZXQgbV9xdWlya3M7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4ZWIyMjVjMDRjYzFlZTQxZDU2MmVkYmQ5MjBjOWQyOTc1OGVlNGU2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDg5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR2lyaXNo
IFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlBsdWdpblZpZXcuaCIKLQotI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgotI2luY2x1ZGUgIkNocm9t
ZS5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAi
Rm9jdXNDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxv
YWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgotI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRUUEhlYWRlck5h
bWVzLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNp
bmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAi
UGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiCi0j
aW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgIlByb3h5U2VydmVyLmgiCi0jaW5j
bHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgotI2luY2x1
ZGUgIldoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJjX2luc3RhbmNlLmgiCi0jaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNsdWRlIDxiaW5k
aW5ncy9TY3JpcHRWYWx1ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2luY2x1ZGUgIlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW4uaCIKLSNlbmRpZgotCi11c2luZyBKU0M6OkV4ZWNTdGF0ZTsKLXVzaW5nIEpTQzo6SlNMb2Nr
OwotdXNpbmcgSlNDOjpKU09iamVjdDsKLXVzaW5nIEpTQzo6SlNWYWx1ZTsKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi11c2luZyBzdGQ6Om1pbjsKLQotdXNpbmcgbmFtZXNw
YWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwotCi1zdGF0aWMgaW50IHNfY2FsbGluZ1BsdWdpbjsKLQotdHlwZWRlZiBIYXNoTWFwPE5Q
UCwgUGx1Z2luVmlldyo+IEluc3RhbmNlTWFwOwotCi1zdGF0aWMgSW5zdGFuY2VNYXAmIGluc3Rh
bmNlTWFwKCkKLXsKLSAgICBzdGF0aWMgSW5zdGFuY2VNYXAmIG1hcCA9ICpuZXcgSW5zdGFuY2VN
YXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotc3RhdGljIFN0cmluZyBzY3JpcHRTdHJpbmdJZkph
dmFTY3JpcHRVUkwoY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgaWYgKCFwcm90b2NvbElzSmF2YVNj
cmlwdCh1cmwpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAvLyBUaGlzIHJldHVy
bnMgYW4gdW5lc2NhcGVkIHN0cmluZwotICAgIHJldHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXModXJsLnN0cmluZygpLnN1YnN0cmluZygxMSkpOwotfQotCi1QbHVnaW5WaWV3KiBQbHVnaW5W
aWV3OjpzX2N1cnJlbnRQbHVnaW5WaWV3ID0gMDsKLQotdm9pZCBQbHVnaW5WaWV3Ojpwb3BQb3B1
cHNTdGF0ZVRpbWVyRmlyZWQoKQotewotICAgIHBvcFBvcHVwc0VuYWJsZWRTdGF0ZSgpOwotfQot
Ci1JbnRSZWN0IFBsdWdpblZpZXc6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKLXsKLSAgICAvLyBT
dGFydCBieSBjbGlwcGluZyB0byBvdXIgYm91bmRzLgotICAgIEludFJlY3QgY2xpcFJlY3QobV93
aW5kb3dSZWN0KTsKLSAgICAKLSAgICAvLyBUYWtlIG91ciBlbGVtZW50IGFuZCBnZXQgdGhlIGNs
aXAgcmVjdCBmcm9tIHRoZSBlbmNsb3NpbmcgbGF5ZXIgYW5kIGZyYW1lIHZpZXcuCi0gICAgRnJh
bWVWaWV3KiBwYXJlbnRWaWV3ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLnZpZXcoKTsKLSAgICBj
bGlwUmVjdC5pbnRlcnNlY3QocGFyZW50Vmlldy0+d2luZG93Q2xpcFJlY3RGb3JGcmFtZU93bmVy
KG1fZWxlbWVudCwgdHJ1ZSkpOwotCi0gICAgcmV0dXJuIGNsaXBSZWN0OwotfQotCi12b2lkIFBs
dWdpblZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICht
X2VsZW1lbnQtPmRvY3VtZW50KCkucHJpbnRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKHJlY3QgIT0gZnJhbWVSZWN0KCkpCi0gICAgICAgIFdpZGdldDo6c2V0RnJhbWVSZWN0KHJl
Y3QpOwotCi0gICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAg
IC8vIE9uIFdpbmRvd3MgYWx3YXlzIGNhbGwgcGx1Z2luIHRvIGNoYW5nZSBnZW9tZXRyeS4KLSAg
ICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Ci0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgLy8g
T24gVW5peCwgbXVsdGlwbGUgY2FsbHMgdG8gc2V0TlBXaW5kb3coKSBpbiB3aW5kb3dlZCBtb2Rl
IGNhdXNlcyBGbGFzaCB0byBjcmFzaAotICAgIGlmIChtX21vZGUgPT0gTlBfRlVMTCB8fCAhbV9p
c1dpbmRvd2VkKQotICAgICAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpmcmFtZVJlY3RzQ2hhbmdlZCgpCi17Ci0gICAgdXBkYXRlUGx1Z2lu
V2lkZ2V0KCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6Y2xpcFJlY3RDaGFuZ2VkKCkKLXsKLSAg
ICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVFdmVu
dChFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lzV2luZG93ZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIFByb3RlY3QgdGhlIHBsdWctaW4gZnJvbSBkZWxldGlv
biB3aGlsZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQuCi0gICAgUmVmUHRyPFBsdWdpblZpZXc+IHBy
b3RlY3QodGhpcyk7Ci0KLSAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQotICAgICAgICBo
YW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOwotICAgIGVs
c2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgaGFuZGxlS2V5Ym9hcmRF
dmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKLSNpZiBkZWZpbmVkKFhQ
X01BQ09TWCkKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53aGVl
bEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCkK
LSAgICAgICAgaGFuZGxlV2hlZWxFdmVudChzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZlbnQp
KTsKLSNlbmRpZgotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNv
bnRleHRtZW51RXZlbnQpCi0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOyAvLyBX
ZSBkb24ndCBrbm93IGlmIHRoZSBwbHVnLWluIGhhcyBoYW5kbGVkIG1vdXNlZG93biBldmVudCBi
eSBkaXNwbGF5aW5nIGEgY29udGV4dCBtZW51LCBzbyB3ZSBuZXZlciB3YW50IFdlYktpdCB0byBz
aG93IGEgZGVmYXVsdCBvbmUuCi0jaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5mb2N1c291dEV2ZW50KQotICAgICAgICBoYW5kbGVGb2N1c091dEV2ZW50KCk7Ci0gICAgZWxz
ZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNpbkV2ZW50KQotICAgICAg
ICBoYW5kbGVGb2N1c0luRXZlbnQoKTsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdpblZpZXc6Omlu
aXQoKQotewotICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgaWYgKCFtX3BsdWdpbikgewotICAg
ICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6Omlu
aXQoKTogSW5pdGlhbGl6aW5nIHBsdWctaW4gJyVzJyIsIG1fcGx1Z2luLT5uYW1lKCkudXRmOCgp
LmRhdGEoKSk7Ci0KLSAgICBpZiAoIW1fcGx1Z2luLT5sb2FkKCkpIHsKLSAgICAgICAgbV9wbHVn
aW4gPSAwOwotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXN0YXJ0T3JBZGRUb1Vuc3RhcnRl
ZExpc3QoKSkgewotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVn
aW47Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1
c0xvYWRlZFN1Y2Nlc3NmdWxseTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpzdGFydE9yQWRkVG9V
bnN0YXJ0ZWRMaXN0KCkKLXsKLSAgICBpZiAoIW1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2Ugb25seSBkZWxheSBzdGFydGluZyB0aGUgcGx1
Zy1pbiBpZiB3ZSdyZSBnb2luZyB0byBraWNrIG9mZiB0aGUgbG9hZAotICAgIC8vIG91cnNlbHZl
cy4gT3RoZXJ3aXNlLCB0aGUgbG9hZGVyIHdpbGwgdHJ5IHRvIGRlbGl2ZXIgZGF0YSBiZWZvcmUg
d2UndmUKLSAgICAvLyBzdGFydGVkIHRoZSBwbHVnLWluLgotICAgIGlmICghbV9sb2FkTWFudWFs
bHkgJiYgIW1fcGFyZW50RnJhbWUtPnBhZ2UoKS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0gICAgICAg
IG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlz
KTsKLSAgICAgICAgbV9pc1dhaXRpbmdUb1N0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXJ0KCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6
c3RhcnQoKQotewotICAgIGlmIChtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbV9pc1dhaXRpbmdUb1N0YXJ0ID0gZmFsc2U7Ci0KLSAgICBQbHVnaW5NYWluVGhyZWFk
U2NoZWR1bGVyOjpzY2hlZHVsZXIoKS5yZWdpc3RlclBsdWdpbihtX2luc3RhbmNlKTsKLQotICAg
IEFTU0VSVChtX3BsdWdpbik7Ci0gICAgQVNTRVJUKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5u
ZXdwKTsKLQotICAgIE5QRXJyb3IgbnBFcnI7Ci0gICAgewotICAgICAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLnV0ZjgoKS5kYXRhKCksIG1faW5z
dGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMs
IE5VTEwpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAgTE9HX05Q
RVJST1IobnBFcnIpOwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygw
KTsKLSAgICB9Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpIHsKLSAgICAgICAg
bV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwotICAgICAgICBQbHVnaW5N
YWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS51bnJlZ2lzdGVyUGx1Z2luKG1faW5zdGFu
Y2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9pc1N0YXJ0ZWQgPSB0
cnVlOwotCi0gICAgaWYgKCFtX3VybC5pc0VtcHR5KCkgJiYgIW1fbG9hZE1hbnVhbGx5KSB7Ci0g
ICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3BhcmVudEZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLSAgICAgICAgZnJhbWVMb2Fk
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobV91cmwpOwotICAgICAgICBsb2FkKGZy
YW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKLSAgICB9Ci0KLSAgICBtX3N0YXR1cyA9IFBsdWdp
blN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKLQotICAgIGlmICghcGxhdGZvcm1TdGFydCgpKQot
ICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47Ci0KLSAgICBp
ZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpt
ZWRpYUNhblN0YXJ0KCkKLXsKLSAgICBBU1NFUlQoIW1faXNTdGFydGVkKTsKLSAgICBpZiAoIXN0
YXJ0KCkpCi0gICAgICAgIHBhcmVudEZyYW1lKCktPmxvYWRlcigpLmNsaWVudCgpLmRpc3BhdGNo
RGlkRmFpbFRvU3RhcnRQbHVnaW4odGhpcyk7Ci19Ci0KLVBsdWdpblZpZXc6On5QbHVnaW5WaWV3
KCkKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkiKTsKLQot
ICAgIEFTU0VSVCghbV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpOwotCi0gICAgLy8gSWYg
d2UgZmFpbGVkIHRvIGZpbmQgdGhlIHBsdWctaW4sIHdlJ2xsIHJldHVybiBlYXJseSBpbiBvdXIg
Y29uc3RydWN0b3IsIGFuZAotICAgIC8vIG1faW5zdGFuY2Ugd2lsbCBiZSAwLgotICAgIGlmICht
X2luc3RhbmNlKQotICAgICAgICBpbnN0YW5jZU1hcCgpLnJlbW92ZShtX2luc3RhbmNlKTsKLQot
ICAgIGlmIChtX2lzV2FpdGluZ1RvU3RhcnQpCi0gICAgICAgIG1fcGFyZW50RnJhbWUtPmRvY3Vt
ZW50KCktPnJlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcih0aGlzKTsKLQotICAgIHN0b3AoKTsK
LQotICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7Ci0gICAg
ZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7Ci0KLSAgICBwbGF0
Zm9ybURlc3Ryb3koKTsKLQotICAgIG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNsZWFudXBTY3Jp
cHRPYmplY3RzRm9yUGx1Z2luKHRoaXMpOwotCi0gICAgaWYgKG1fcGx1Z2luICYmICEobV9wbHVn
aW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbikpKQotICAg
ICAgICBtX3BsdWdpbi0+dW5sb2FkKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCi17
Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HKFBsdWdp
bnMsICJQbHVnaW5WaWV3OjpzdG9wKCk6IFN0b3BwaW5nIHBsdWctaW4gJyVzJyIsIG1fcGx1Z2lu
LT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJl
YW0+ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKLSAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJl
YW0+ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJl
ZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgKCppdCktPnN0b3AoKTsKLSAgICAgICAgZGlzY29ubmVj
dFN0cmVhbSgoKml0KS5nZXQoKSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fc3RyZWFtcy5pc0Vt
cHR5KCkpOwotCi0gICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKLQotICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0K
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSNpZiBkZWZpbmVkKFhQX1dJTikgJiYg
IVBMQVRGT1JNKEdUSykKLSAgICAvLyBVbnN1YmNsYXNzIHRoZSB3aW5kb3cKLSAgICBpZiAobV9p
c1dpbmRvd2VkKSB7Ci0gICAgICAgIFdORFBST0MgY3VycmVudFduZFByb2MgPSAoV05EUFJPQylH
ZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQyk7Ci0K
LSAgICAgICAgaWYgKGN1cnJlbnRXbmRQcm9jID09IFBsdWdpblZpZXdXbmRQcm9jKQotICAgICAg
ICAgICAgU2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBS
T0MsIChMT05HX1BUUiltX3BsdWdpblduZFByb2MpOwotICAgIH0KLSNlbmRpZiAvLyAhZGVmaW5l
ZChYUF9XSU4pIHx8IFBMQVRGT1JNKEdUSykKLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLQotI2lmICFkZWZpbmVkKFhQX01BQ09TWCkKLSAgICAvLyBDbGVhciB0aGUgd2lu
ZG93Ci0gICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOwotCi0gICAgaWYgKG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5zZXR3aW5kb3cgJiYgIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya0RvbnRTZXROdWxsV2luZG93SGFuZGxlT25EZXN0cm95KSkgewotICAgICAgICBQbHVn
aW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsKLSAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyht
X2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9Ci0K
LSNpZmRlZiBYUF9VTklYCi0gICAgZGVsZXRlIHN0YXRpY19jYXN0PE5QU2V0V2luZG93Q2FsbGJh
Y2tTdHJ1Y3QqPihtX25wV2luZG93LndzX2luZm8pOwotICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9
IDA7Ci0jZW5kaWYKLQotI2VuZGlmIC8vICFkZWZpbmVkKFhQX01BQ09TWCkKLQotICAgIFBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnVucmVnaXN0ZXJQbHVnaW4obV9pbnN0
YW5jZSk7Ci0KLSAgICBOUFNhdmVkRGF0YSogc2F2ZWREYXRhID0gMDsKLSAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUp
OwotICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveSht
X2luc3RhbmNlLCAmc2F2ZWREYXRhKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAg
ICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZp
ZXcoMCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAoc2F2ZWRE
YXRhKSB7Ci0gICAgICAgIC8vIFRPRE86IEFjdHVhbGx5IHNhdmUgdGhpcyBkYXRhIGluc3RlYWQg
b2YganVzdCBkaXNjYXJkaW5nIGl0Ci0gICAgICAgIGlmIChzYXZlZERhdGEtPmJ1ZikKLSAgICAg
ICAgICAgIE5QTl9NZW1GcmVlKHNhdmVkRGF0YS0+YnVmKTsKLSAgICAgICAgTlBOX01lbUZyZWUo
c2F2ZWREYXRhKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIG1faW5zdGFuY2UtPnBkYXRhID0gMDsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3KiBw
bHVnaW5WaWV3KQotewotICAgIHNfY3VycmVudFBsdWdpblZpZXcgPSBwbHVnaW5WaWV3OwotfQot
Ci1QbHVnaW5WaWV3KiBQbHVnaW5WaWV3OjpjdXJyZW50UGx1Z2luVmlldygpCi17Ci0gICAgcmV0
dXJuIHNfY3VycmVudFBsdWdpblZpZXc7Ci19Ci0KLXN0YXRpYyBjaGFyKiBjcmVhdGVVVEY4U3Ry
aW5nKGNvbnN0IFN0cmluZyYgc3RyKQotewotICAgIENTdHJpbmcgY3N0ciA9IHN0ci51dGY4KCk7
Ci0gICAgY29uc3Qgc2l6ZV90IGNzdHJMZW5ndGggPSBjc3RyLmxlbmd0aCgpOwotICAgIGNoYXIq
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MoY3N0ckxlbmd0aCAr
IDEpKTsKLQotICAgIG1lbWNweShyZXN1bHQsIGNzdHIuZGF0YSgpLCBjc3RyTGVuZ3RoKTsKLSAg
ICByZXN1bHRbY3N0ckxlbmd0aF0gPSAnXDAnOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0KiByZXF1ZXN0KQot
ewotICAgIGlmICghbV9pc1N0YXJ0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIGRvbid0
IGxldCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQgaXMgbm8gbG9uZ2VyIHBhcnQgb2Yg
YSBkb2N1bWVudCB0aGF0IGlzIGJlaW5nIAotICAgIC8vIGRpc3BsYXllZCB1bmxlc3MgdGhlIGxv
YWRzIGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1Z2luLgotICAgIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0RnJhbWVOYW1lID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFt
ZSgpOwotICAgIGlmIChtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpICE9
IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgJiYgKHRhcmdl
dEZyYW1lTmFtZS5pc051bGwoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCkuZmluZCh0YXJnZXRG
cmFtZU5hbWUpICE9IG1fcGFyZW50RnJhbWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBVUkwg
cmVxdWVzdFVSTCA9IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3Qo
KS51cmwoKTsKLSAgICBTdHJpbmcganNTdHJpbmcgPSBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRV
UkwocmVxdWVzdFVSTCk7Ci0KLSAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNh
dG9yKHJlcXVlc3QtPnNob3VsZEFsbG93UG9wdXBzKCkgPyBEZWZpbml0ZWx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlIDogUG9zc2libHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotCi0gICAgaWYgKGpz
U3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIGlmIHRoaXMgaXMgbm90IGEgdGFyZ2V0ZWQg
cmVxdWVzdCwgY3JlYXRlIGEgc3RyZWFtIGZvciBpdC4gb3RoZXJ3aXNlLAotICAgICAgICAvLyBq
dXN0IHBhc3MgaXQgb2ZmIHRvIHRoZSBsb2FkZXIKLSAgICAgICAgaWYgKHRhcmdldEZyYW1lTmFt
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9
IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3Qt
PmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlm
aWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygp
LCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+cXVpcmtzKCkpOwotICAgICAgICAgICAgbV9zdHJlYW1z
LmFkZChzdHJlYW0pOwotICAgICAgICAgICAgc3RyZWFtLT5zdGFydCgpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBmcmFtZSBpcyBvdXIgZnJhbWUsIHdl
IGNvdWxkIGRlc3Ryb3kgdGhlCi0gICAgICAgICAgICAvLyBQbHVnaW5WaWV3LCBzbyB3ZSBwcm90
ZWN0IGl0LiA8cmRhcjovL3Byb2JsZW0vNjk5MTI1MT4KLSAgICAgICAgICAgIFJlZlB0cjxQbHVn
aW5WaWV3PiBwcm90ZWN0KHRoaXMpOwotCi0gICAgICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZy
YW1lUmVxdWVzdChtX3BhcmVudEZyYW1lLmdldCgpLCByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0
KCkucmVzb3VyY2VSZXF1ZXN0KCkpOwotICAgICAgICAgICAgZnJhbWVSZXF1ZXN0LnNldEZyYW1l
TmFtZSh0YXJnZXRGcmFtZU5hbWUpOwotICAgICAgICAgICAgZnJhbWVSZXF1ZXN0LnNldFNob3Vs
ZENoZWNrTmV3V2luZG93UG9saWN5KHRydWUpOwotICAgICAgICAgICAgbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCkubG9hZChmcmFtZVJlcXVlc3QpOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1l
bnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90
aWZpY2F0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldyh0aGlzKTsKLSAgICAgICAgICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgICAgICAgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPnVybG5vdGlmeShtX2luc3RhbmNlLCByZXF1ZXN0VVJMLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCksIE5QUkVTX0RPTkUsIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7Ci0gICAgICAg
ICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRhcmdldGVkIEphdmFTY3JpcHQgcmVx
dWVzdHMgYXJlIG9ubHkgYWxsb3dlZCBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgSmF2
YVNjcmlwdCBwbHVnaW4KLSAgICAvLyBhbmQgdGhpcyBoYXMgYmVlbiBtYWRlIHN1cmUgaW4gOjps
b2FkLgotICAgIEFTU0VSVCh0YXJnZXRGcmFtZU5hbWUuaXNFbXB0eSgpIHx8IG1fcGFyZW50RnJh
bWUtPnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSkgPT0gbV9wYXJlbnRGcmFtZSk7Ci0gICAg
Ci0gICAgLy8gRXhlY3V0aW5nIGEgc2NyaXB0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8g
YmUgZGVzdHJveWVkLCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIGl0LgotICAgIFJlZlB0cjxQ
bHVnaW5WaWV3PiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUg
cmVzdWx0ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuZXhlY3V0ZVNjcmlwdChqc1N0cmluZywg
cmVxdWVzdC0+c2hvdWxkQWxsb3dQb3B1cHMoKSk7Ci0KLSAgICBpZiAodGFyZ2V0RnJhbWVOYW1l
LmlzTnVsbCgpKSB7Ci0gICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7Ci0KLSAgICAgICAgSlND
OjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuZ2xvYmFs
T2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIENTdHJpbmcgY3N0
cjsKLSAgICAgICAgaWYgKHJlc3VsdC5nZXRTdHJpbmcoc2NyaXB0U3RhdGUsIHJlc3VsdFN0cmlu
ZykpCi0gICAgICAgICAgICBjc3RyID0gcmVzdWx0U3RyaW5nLnV0ZjgoKTsKLQotICAgICAgICBS
ZWZQdHI8UGx1Z2luU3RyZWFtPiBzdHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBt
X3BhcmVudEZyYW1lLmdldCgpLCByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VS
ZXF1ZXN0KCksIHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0
YSgpLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9wbHVnaW4tPnF1aXJr
cygpKTsKLSAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOwotICAgICAgICBzdHJlYW0tPnNl
bmRKYXZhU2NyaXB0U3RyZWFtKHJlcXVlc3RVUkwsIGNzdHIpOwotICAgIH0KLX0KLQotdm9pZCBQ
bHVnaW5WaWV3OjpyZXF1ZXN0VGltZXJGaXJlZCgpCi17Ci0gICAgQVNTRVJUKCFtX3JlcXVlc3Rz
LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX2lzSmF2YVNjcmlwdFBhdXNlZCk7Ci0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4gcmVxdWVzdCA9IFdURjo6bW92ZShtX3JlcXVl
c3RzWzBdKTsKLSAgICBtX3JlcXVlc3RzLnJlbW92ZSgwKTsKLSAgICAKLSAgICAvLyBTY2hlZHVs
ZSBhIG5ldyByZXF1ZXN0IGJlZm9yZSBjYWxsaW5nIHBlcmZvcm1SZXF1ZXN0IHNpbmNlIHRoZSBj
YWxsIHRvCi0gICAgLy8gcGVyZm9ybVJlcXVlc3QgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0
byBiZSBkZWxldGVkLgotICAgIGlmICghbV9yZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1f
cmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLQotICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVl
c3QuZ2V0KCkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNjaGVkdWxlUmVxdWVzdChzdGQ6OnVu
aXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4gcmVxdWVzdCkKLXsKLSAgICBtX3JlcXVlc3RzLmFwcGVu
ZChXVEY6Om1vdmUocmVxdWVzdCkpOwotCi0gICAgaWYgKCFtX2lzSmF2YVNjcmlwdFBhdXNlZCkK
LSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi1OUEVycm9yIFBs
dWdpblZpZXc6OmxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwg
Ym9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAgIEFTU0VSVChm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8
fCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9T
VCIpOwotCi0gICAgVVJMIHVybCA9IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
dXJsKCk7Ci0gICAgCi0gICAgaWYgKHVybC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBOUEVS
Ul9JTlZBTElEX1VSTDsKLQotICAgIC8vIERvbid0IGFsbG93IHJlcXVlc3RzIHRvIGJlIG1hZGUg
d2hlbiB0aGUgZG9jdW1lbnQgbG9hZGVyIGlzIHN0b3BwaW5nIGFsbCBsb2FkZXJzLgotICAgIERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExv
YWRlcigpOwotICAgIGlmICghbG9hZGVyIHx8IGxvYWRlci0+aXNTdG9wcGluZygpKQotICAgICAg
ICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0
RnJhbWVOYW1lID0gZnJhbWVMb2FkUmVxdWVzdC5mcmFtZU5hbWUoKTsKLSAgICBTdHJpbmcganNT
dHJpbmcgPSBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwodXJsKTsKLQotICAgIGlmICghanNT
dHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gUmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1Ig
aWYgSlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgd2hhdCBNb3ppbGxhIGRvZXMuCi0gICAgICAgIGlm
ICghbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4
ZWN1dGVTY3JpcHQpKQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0K
LSAgICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkgYWxsb3cgSlMgcmVxdWVzdHMg
dG8gYmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgcGx1Zy1pbi4KLSAgICAg
ICAgaWYgKCF0YXJnZXRGcmFtZU5hbWUuaXNOdWxsKCkgJiYgbV9wYXJlbnRGcmFtZS0+dHJlZSgp
LmZpbmQodGFyZ2V0RnJhbWVOYW1lKSAhPSBtX3BhcmVudEZyYW1lKQotICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0gICAgfSBlbHNlIGlmICghbV9wYXJlbnRGcmFtZS0+
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuRGlzcGxheSh1cmwpKQotICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgIHNjaGVkdWxlUmVxdWVzdChzdGQ6Om1h
a2VfdW5pcXVlPFBsdWdpblJlcXVlc3Q+KGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRp
b24sIG5vdGlmeURhdGEsIGFyZVBvcHVwc0FsbG93ZWQoKSkpOwotCi0gICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOwotfQotCi1zdGF0aWMgVVJMIG1ha2VVUkwoY29uc3QgVVJMJiBiYXNlVVJMLCBj
b25zdCBjaGFyKiByZWxhdGl2ZVVSTFN0cmluZykKLXsKLSAgICBTdHJpbmcgdXJsU3RyaW5nID0g
cmVsYXRpdmVVUkxTdHJpbmc7Ci0KLSAgICAvLyBTdHJpcCByZXR1cm4gY2hhcmFjdGVycy4KLSAg
ICB1cmxTdHJpbmcucmVwbGFjZVdpdGhMaXRlcmFsKCdcbicsICIiKTsKLSAgICB1cmxTdHJpbmcu
cmVwbGFjZVdpdGhMaXRlcmFsKCdccicsICIiKTsKLQotICAgIHJldHVybiBVUkwoYmFzZVVSTCwg
dXJsU3RyaW5nKTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRVUkxOb3RpZnkoY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCi17Ci0gICAg
RnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCkpOwotCi0gICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5h
bWUodGFyZ2V0KTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhU
VFBNZXRob2QoIkdFVCIpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
c2V0VVJMKG1ha2VVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwp
KTsKLQotICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHRydWUsIG5vdGlmeURhdGEp
OwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IGNoYXIqIHRhcmdldCkKLXsKLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Qo
bV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0KLSAgICBmcmFt
ZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotICAgIGZyYW1lTG9hZFJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgZnJhbWVMb2FkUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1
bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOwotCi0gICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVx
dWVzdCwgZmFsc2UsIDApOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkxOb3RpZnko
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4g
aGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEsIHRydWUs
IHRydWUpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OnBvc3RVUkwoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJv
b2wgZmlsZSkKLXsKLSAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMgdG8g
YmUgc3BlY2lmaWVkIHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmlsZS4KLSAgICByZXR1
cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAsIGZhbHNlLCBmaWxl
KTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpuZXdTdHJlYW0oTlBNSU1FVHlwZSwgY29uc3Qg
Y2hhciogLyogdGFyZ2V0ICovLCBOUFN0cmVhbSoqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgLy8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0K
LQotaW50MzJfdCBQbHVnaW5WaWV3Ojp3cml0ZShOUFN0cmVhbSosIGludDMyX3QgLyogbGVuICov
LCB2b2lkKiAvKiBidWZmZXIgKi8pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAvLyBV
bnN1cHBvcnRlZAotICAgIHJldHVybiAtMTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpkZXN0
cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICBpZiAo
IXN0cmVhbSB8fCBQbHVnaW5TdHJlYW06Om93bmVyRm9yU3RyZWFtKHN0cmVhbSkgIT0gbV9pbnN0
YW5jZSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1I7Ci0KLSAg
ICBQbHVnaW5TdHJlYW0qIGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNfY2FzdDxQbHVnaW5TdHJlYW0q
PihzdHJlYW0tPm5kYXRhKTsKLSAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxBbmREZXN0cm95U3Ry
ZWFtKHJlYXNvbik7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKFBhZ2UqIHBh
Z2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLnNldFN0
YXR1c2JhclRleHQobV9wYXJlbnRGcmFtZS5nZXQoKSwgU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdl
KSk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFi
bGUsIHZvaWQqIHZhbHVlKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFs
dWUoJXMpOiAiLCBwcmV0dHlOYW1lRm9yTlBQVmFyaWFibGUodmFyaWFibGUsIHZhbHVlKS5kYXRh
KCkpOwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBQVnBsdWdpbldpbmRv
d0Jvb2w6Ci0gICAgICAgIG1faXNXaW5kb3dlZCA9IHZhbHVlOwotICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Ci0gICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOgotICAgICAg
ICBtX2lzVHJhbnNwYXJlbnQgPSB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OwotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotICAgIGNhc2UgTlBQVnBsdWdpbkRyYXdpbmdNb2Rl
bDogewotICAgICAgICAvLyBDYW4gb25seSBzZXQgZHJhd2luZyBtb2RlbCBpbnNpZGUgTlBQX05l
dygpCi0gICAgICAgIGlmICh0aGlzICE9IGN1cnJlbnRQbHVnaW5WaWV3KCkpCi0gICAgICAgICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgICAgIE5QRHJhd2luZ01vZGVsIG5l
d0RyYXdpbmdNb2RlbCA9IE5QRHJhd2luZ01vZGVsKHVpbnRwdHJfdCh2YWx1ZSkpOwotICAgICAg
ICBzd2l0Y2ggKG5ld0RyYXdpbmdNb2RlbCkgewotICAgICAgICBjYXNlIE5QRHJhd2luZ01vZGVs
Q29yZUdyYXBoaWNzOgotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAg
ICBjYXNlIE5QRHJhd2luZ01vZGVsQ29yZUFuaW1hdGlvbjoKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luIGFza2VkIGZvciB1bnN1cHBvcnRlZCBkcmF3
aW5nIG1vZGVsOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgIHByZXR0eU5hbWVGb3JEcmF3aW5n
TW9kZWwobmV3RHJhd2luZ01vZGVsKSk7Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNhc2UgTlBQVnBsdWdpbkV2ZW50TW9k
ZWw6IHsKLSAgICAgICAgLy8gQ2FuIG9ubHkgc2V0IGV2ZW50IG1vZGVsIGluc2lkZSBOUFBfTmV3
KCkKLSAgICAgICAgaWYgKHRoaXMgIT0gY3VycmVudFBsdWdpblZpZXcoKSkKLSAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICAgICAgTlBFdmVudE1vZGVsIG5ld0V2
ZW50TW9kZWwgPSBOUEV2ZW50TW9kZWwodWludHB0cl90KHZhbHVlKSk7Ci0gICAgICAgIHN3aXRj
aCAobmV3RXZlbnRNb2RlbCkgewotICAgICAgICBjYXNlIE5QRXZlbnRNb2RlbENvY29hOgotICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW4gYXNrZWQgZm9yIHVuc3VwcG9ydGVkIGV2ZW50IG1v
ZGVsOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgIHByZXR0eU5hbWVGb3JFdmVudE1vZGVsKG5l
d0V2ZW50TW9kZWwpKTsKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
ICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8vIGRlZmluZWQoWFBfTUFDT1NYKQotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1I7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVUaW1l
ckZpcmVkKCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbnZhbGlkUmVjdHMu
c2l6ZSgpOyBpKyspCi0gICAgICAgIGludmFsaWRhdGVSZWN0KG1faW52YWxpZFJlY3RzW2ldKTsK
LSAgICBtX2ludmFsaWRSZWN0cy5jbGVhcigpOwotfQotCi0KLXZvaWQgUGx1Z2luVmlldzo6cHVz
aFBvcHVwc0VuYWJsZWRTdGF0ZShib29sIHN0YXRlKQotewotICAgIG1fcG9wdXBTdGF0ZVN0YWNr
LmFwcGVuZChzdGF0ZSk7Ci19Ci0gCi12b2lkIFBsdWdpblZpZXc6OnBvcFBvcHVwc0VuYWJsZWRT
dGF0ZSgpCi17Ci0gICAgbV9wb3B1cFN0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCi1ib29s
IFBsdWdpblZpZXc6OmFyZVBvcHVwc0FsbG93ZWQoKSBjb25zdAotewotICAgIGlmICghbV9wb3B1
cFN0YXRlU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9wb3B1cFN0YXRlU3RhY2su
bGFzdCgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldEph
dmFTY3JpcHRQYXVzZWQoYm9vbCBwYXVzZWQpCi17Ci0gICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1
c2VkID09IHBhdXNlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faXNKYXZhU2NyaXB0UGF1c2Vk
ID0gcGF1c2VkOwotCi0gICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQotICAgICAgICBtX3Jl
cXVlc3RUaW1lci5zdG9wKCk7Ci0gICAgZWxzZSBpZiAoIW1fcmVxdWVzdHMuaXNFbXB0eSgpKQot
ICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLU5QT2JqZWN0KiBQbHVnaW5WaWV3OjpucE9iamVjdCgpCi17
Ci0gICAgTlBPYmplY3QqIG9iamVjdCA9IDA7Ci0KLSAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFt
X3BsdWdpbiB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIC8vIE9uIFdpbmRvd3MsIGNhbGxpbmcgSmF2YSdzIE5QTl9HZXRWYWx1
ZSBjYW4gYWxsb3cgdGhlIG1lc3NhZ2UgbG9vcCB0bwotICAgIC8vIHJ1biwgYWxsb3dpbmcgbG9h
ZGluZyB0byB0YWtlIHBsYWNlIG9yIEphdmFTY3JpcHQgdG8gcnVuLiBQcm90ZWN0IHRoZQotICAg
IC8vIFBsdWdpblZpZXcgZnJvbSBkZXN0cnVjdGlvbi4gPHJkYXI6Ly9wcm9ibGVtLzY5Nzg4MDQ+
Ci0gICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3QodGhpcyk7Ci0KLSAgICBOUEVycm9yIG5w
RXJyOwotICAgIHsKLSAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhp
cyk7Ci0gICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7
Ci0gICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5z
dGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZvYmplY3QpOwotICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBs
dWdpblZpZXcoMCk7Ci0gICAgfQotCi0gICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0jZW5kaWYKLQotUGFz
c1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gUGx1Z2luVmlldzo6YmluZGluZ0luc3Rh
bmNlKCkKLXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBOUE9iamVjdCog
b2JqZWN0ID0gbnBPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpZiAoaGFzT25lUmVmKCkpIHsKLSAgICAgICAgLy8gVGhlIHJlbmRlcmVyIGZvciB0
aGUgUGx1Z2luVmlldyB3YXMgZGVzdHJveWVkIGR1cmluZyB0aGUgYWJvdmUgY2FsbCwgYW5kCi0g
ICAgICAgIC8vIHRoZSBQbHVnaW5WaWV3IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gdGhpcyBmdW5j
dGlvbiByZXR1cm5zLCBzbyB3ZQotICAgICAgICAvLyByZXR1cm4gbnVsbC4KLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJv
b3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5jcmVhdGVSb290T2JqZWN0KHRoaXMpOwotICAg
IFJlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gaW5zdGFuY2UgPSBKU0M6OkJpbmRpbmdz
OjpDSW5zdGFuY2U6OmNyZWF0ZShvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsKLQotICAgIF9OUE5f
UmVsZWFzZU9iamVjdChvYmplY3QpOwotCi0gICAgcmV0dXJuIGluc3RhbmNlLnJlbGVhc2UoKTsK
LSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpkaXNj
b25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbSogc3RyZWFtKQotewotICAgIEFTU0VSVChtX3N0cmVh
bXMuY29udGFpbnMoc3RyZWFtKSk7Ci0KLSAgICBtX3N0cmVhbXMucmVtb3ZlKHN0cmVhbSk7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQotewotICAgIEFT
U0VSVChwYXJhbU5hbWVzLnNpemUoKSA9PSBwYXJhbVZhbHVlcy5zaXplKCkpOwotCi0gICAgdW5z
aWduZWQgc2l6ZSA9IHBhcmFtTmFtZXMuc2l6ZSgpOwotICAgIHVuc2lnbmVkIHBhcmFtQ291bnQg
PSAwOwotCi0gICAgbV9wYXJhbU5hbWVzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGZhc3RN
YWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKLSAgICBtX3BhcmFtVmFsdWVzID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgaWYgKG1f
cGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRl
b1BhcmFtKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3Zp
ZGVvIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAocGFyYW1OYW1lc1tp
XSA9PSAicGx1Z2luc3BhZ2UiKQotICAgICAgICAgICAgbV9wbHVnaW5zUGFnZSA9IHBhcmFtVmFs
dWVzW2ldOwotCi0gICAgICAgIG1fcGFyYW1OYW1lc1twYXJhbUNvdW50XSA9IGNyZWF0ZVVURjhT
dHJpbmcocGFyYW1OYW1lc1tpXSk7Ci0gICAgICAgIG1fcGFyYW1WYWx1ZXNbcGFyYW1Db3VudF0g
PSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtVmFsdWVzW2ldKTsKLQotICAgICAgICBwYXJhbUNvdW50
Kys7Ci0gICAgfQotCi0gICAgbV9wYXJhbUNvdW50ID0gcGFyYW1Db3VudDsKLX0KLQotUGx1Z2lu
Vmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUs
IFBsdWdpblBhY2thZ2UqIHBsdWdpbiwgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKLSAgICA6IG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCi0gICAgLCBtX3BsdWdp
bihwbHVnaW4pCi0gICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAsIG1faXNTdGFydGVkKGZh
bHNlKQotICAgICwgbV91cmwodXJsKQotICAgICwgbV9zdGF0dXMoUGx1Z2luU3RhdHVzTG9hZGVk
U3VjY2Vzc2Z1bGx5KQotICAgICwgbV9yZXF1ZXN0VGltZXIoKnRoaXMsICZQbHVnaW5WaWV3Ojpy
ZXF1ZXN0VGltZXJGaXJlZCkKLSAgICAsIG1faW52YWxpZGF0ZVRpbWVyKCp0aGlzLCAmUGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX3BvcFBvcHVwc1N0YXRlVGltZXIo
KnRoaXMsICZQbHVnaW5WaWV3Ojpwb3BQb3B1cHNTdGF0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX2xp
ZmVTdXBwb3J0VGltZXIoKnRoaXMsICZQbHVnaW5WaWV3OjpsaWZlU3VwcG9ydFRpbWVyRmlyZWQp
Ci0gICAgLCBtX21vZGUobG9hZE1hbnVhbGx5ID8gTlBfRlVMTCA6IE5QX0VNQkVEKQotICAgICwg
bV9wYXJhbU5hbWVzKDApCi0gICAgLCBtX3BhcmFtVmFsdWVzKDApCi0gICAgLCBtX21pbWVUeXBl
KG1pbWVUeXBlKQotICAgICwgbV9pbnN0YW5jZSgwKQotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQot
ICAgICwgbV9pc1dpbmRvd2VkKGZhbHNlKQotICAgICwgbV91cGRhdGVkQ29jb2FUZXh0SW5wdXRS
ZXF1ZXN0ZWQoZmFsc2UpCi0gICAgLCBtX2tleURvd25TZW50KGZhbHNlKQotICAgICwgbV9kaXNy
ZWdhcmRLZXlVcENvdW50ZXIoMCkKLSNlbHNlCi0gICAgLCBtX2lzV2luZG93ZWQodHJ1ZSkKLSNl
bmRpZgotICAgICwgbV9pc1RyYW5zcGFyZW50KGZhbHNlKQotICAgICwgbV9oYXZlSW5pdGlhbGl6
ZWQoZmFsc2UpCi0gICAgLCBtX2lzV2FpdGluZ1RvU3RhcnQoZmFsc2UpCi0jaWYgZGVmaW5lZChY
UF9VTklYKQotICAgICwgbV9uZWVkc1hFbWJlZChmYWxzZSkKLSNlbmRpZgotI2lmIE9TKFdJTkRP
V1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICwgbV9wbHVnaW5XbmRQcm9j
KDApCi0gICAgLCBtX2xhc3RNZXNzYWdlKDApCi0gICAgLCBtX2lzQ2FsbGluZ1BsdWdpblduZFBy
b2MoZmFsc2UpCi0gICAgLCBtX3dtUHJpbnRIREMoMCkKLSAgICAsIG1faGF2ZVVwZGF0ZWRQbHVn
aW5XaWRnZXQoZmFsc2UpCi0jZW5kaWYKLSNpZiBQTEFURk9STShFRkwpCi0gICAgLCBtX3dpbmRv
dygwKQotI2VuZGlmCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgLCBtX2NvbnRleHRSZWYo
MCkKLSNlbmRpZgotI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi0gICAgLCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZSh0cnVlKQotICAgICwgbV9k
cmF3YWJsZSgwKQotICAgICwgbV92aXN1YWwoMCkKLSAgICAsIG1fY29sb3JtYXAoMCkKLSAgICAs
IG1fcGx1Z2luRGlzcGxheSgwKQotI2VuZGlmCi0gICAgLCBtX2xvYWRNYW51YWxseShsb2FkTWFu
dWFsbHkpCi0gICAgLCBtX21hbnVhbFN0cmVhbSgwKQotICAgICwgbV9pc0phdmFTY3JpcHRQYXVz
ZWQoZmFsc2UpCi0gICAgLCBtX2hhdmVDYWxsZWRTZXRXaW5kb3coZmFsc2UpCi17Ci0gICAgaWYg
KCFtX3BsdWdpbikgewotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQ
bHVnaW47Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2luc3RhbmNlID0gJm1faW5z
dGFuY2VTdHJ1Y3Q7Ci0gICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlzOwotICAgIG1faW5zdGFu
Y2UtPnBkYXRhID0gMDsKLQotICAgIGluc3RhbmNlTWFwKCkuYWRkKG1faW5zdGFuY2UsIHRoaXMp
OwotCi0gICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7Ci0KLSAgICBt
ZW1zZXQoJm1fbnBXaW5kb3csIDAsIHNpemVvZihtX25wV2luZG93KSk7Ci0jaWYgZGVmaW5lZChY
UF9NQUNPU1gpCi0gICAgbWVtc2V0KCZtX25wQ2dDb250ZXh0LCAwLCBzaXplb2YobV9ucENnQ29u
dGV4dCkpOwotI2VuZGlmCi0KLSAgICByZXNpemUoc2l6ZSk7Ci19Ci0KLXZvaWQgUGx1Z2luVmll
dzo6Zm9jdXNQbHVnaW5FbGVtZW50KCkKLXsKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50
RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0Rm9jdXNl
ZEVsZW1lbnQobV9lbGVtZW50LCBtX3BhcmVudEZyYW1lKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
cGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWRFbGVtZW50KG1fZWxlbWVudCk7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2Fk
ZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvYWRNYW51
YWxseSk7Ci0gICAgQVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7Ci0KLSAgICBtX21hbnVhbFN0cmVh
bSA9IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0KCksIG1fcGFy
ZW50RnJhbWUtPmxvYWRlcigpLmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSwgZmFs
c2UsIDAsIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+cXVp
cmtzKCkpOwotICAgIG1fbWFudWFsU3RyZWFtLT5zZXRMb2FkTWFudWFsbHkodHJ1ZSk7Ci0KLSAg
ICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVs
bHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvYWRNYW51YWxseSk7Ci0gICAg
QVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKLSAgICAKLSAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVj
ZWl2ZURhdGEoMCwgZGF0YSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpkaWRGaW5p
c2hMb2FkaW5nKCkKLXsKLSAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3Vj
Y2Vzc2Z1bGx5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9sb2FkTWFudWFsbHkp
OwotICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7Ci0KLSAgICBtX21hbnVhbFN0cmVhbS0+ZGlk
RmluaXNoTG9hZGluZygwKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpkaWRGYWlsKGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNM
b2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvYWRN
YW51YWxseSk7Ci0gICAgCi0gICAgaWYgKG1fbWFudWFsU3RyZWFtKQotICAgICAgICBtX21hbnVh
bFN0cmVhbS0+ZGlkRmFpbCgwLCBlcnJvcik7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0Q2Fs
bGluZ1BsdWdpbihib29sIGIpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCku
Y29udGFpbnMoUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3NhZ2VMb29wKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGIpCi0gICAgICAgICsrc19jYWxsaW5nUGx1Z2luOwotICAgIGVsc2UKLSAg
ICAgICAgLS1zX2NhbGxpbmdQbHVnaW47Ci0KLSAgICBBU1NFUlQoc19jYWxsaW5nUGx1Z2luID49
IDApOwotfQotCi1ib29sIFBsdWdpblZpZXc6OmlzQ2FsbGluZ1BsdWdpbigpCi17Ci0gICAgcmV0
dXJuIHNfY2FsbGluZ1BsdWdpbiA+IDA7Ci19Ci0KLVBhc3NSZWZQdHI8UGx1Z2luVmlldz4gUGx1
Z2luVmlldzo6Y3JlYXRlKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKLXsKLSAgICAvLyBpZiB3
ZSBmYWlsIHRvIGZpbmQgYSBwbHVnaW4gZm9yIHRoaXMgTUlNRSB0eXBlLCBmaW5kUGx1Z2luIHdp
bGwgc2VhcmNoIGZvcgotICAgIC8vIGEgcGx1Z2luIGJ5IHRoZSBmaWxlIGV4dGVuc2lvbiBhbmQg
dXBkYXRlIHRoZSBNSU1FIHR5cGUsIHNvIHBhc3MgYSBtdXRhYmxlIFN0cmluZwotICAgIFN0cmlu
ZyBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBQ
bHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5maW5kUGx1Z2luKHVybCwgbWltZVR5
cGVDb3B5KTsKLQotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRo
ZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgaWYgKCFwbHVnaW4gJiYgUGx1Z2lu
RGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpKSB7Ci0gICAgICAgIG1pbWVU
eXBlQ29weSA9IG1pbWVUeXBlOwotICAgICAgICBwbHVnaW4gPSBQbHVnaW5EYXRhYmFzZTo6aW5z
dGFsbGVkUGx1Z2lucygpLT5maW5kUGx1Z2luKHVybCwgbWltZVR5cGVDb3B5KTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpblZpZXcocGFyZW50RnJhbWUsIHNpemUsIHBs
dWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGVDb3B5
LCBsb2FkTWFudWFsbHkpKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpmcmVlU3RyaW5nQXJyYXko
Y2hhcioqIHN0cmluZ0FycmF5LCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghc3RyaW5nQXJyYXkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
Ci0gICAgICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5W2ldKTsKLQotICAgIGZhc3RGcmVlKHN0cmlu
Z0FycmF5KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29u
c3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCi17Ci0gICAgcmV0dXJuIGJ1ZmZlci5zaXplKCkgPiAw
ICYmIGJ1ZmZlclswXSA9PSAnXG4nOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFm
dGVyRmlyc3RCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCi17Ci0gICAgY29u
c3QgY2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1
ZmZlci5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsg
aSsrKSB7Ci0gICAgICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4K
LSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCi0g
ICAgICAgICAgICByZXR1cm4gaSArIDI7Ci0gICAgICAgIAotICAgICAgICAvLyBSZXR1cm5zIHRo
ZSBwb3NpdGlvbiBhZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxp
bmUuCi0gICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4n
KSB7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBpZiAoaSA9PSAyKQotICAgICAg
ICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xu
JykKLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxy
XG5cbiIgKDM4ODAzODcpLgotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCi0g
ICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIg
KDM3NTgxMTMpLgotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5k
RU9MKGNvbnN0IGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgLy8gQWNjb3Jk
aW5nIHRvIHRoZSBIVFRQIHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKLSAgICAvLyBh
IENSTEYgcGFpci4gVW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCi0gICAg
Ly8gaW5zdGVhZC4gV29yc2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlv
bgotICAgIC8vIG9mIGJvdGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9M
IG5lZWRzCi0gICAgLy8gdG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBD
UkxGLCBMRiBvcgotICAgIC8vIENSLgotICAgIC8vCi0gICAgLy8gSXQgcmV0dXJucyBOVUxMIGlm
IEVPTEYgaXMgbm90IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJuCi0gICAgLy8gYSBwb2ludGVyIHRv
IHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQotICAg
ICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicp
IHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRz
Ci0gICAgICAgICAgICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IK
LSAgICAgICAgICAgIC8vIG5leHQgcmVhZC4KLSAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5n
dGgpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHJldHVybiBieXRlcyAr
IGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGlu
ZSBTdHJpbmcgY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgYm9vbCBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKLSAgICBTdHJpbmcg
cmVzdWx0OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkr
KykgewotICAgICAgICBVQ2hhciBjOwotCi0gICAgICAgIGlmIChjYXBpdGFsaXplQ2hhcmFjdGVy
ICYmIG5hbWVbaV0gPj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3onKQotICAgICAgICAgICAgYyA9IHRv
QVNDSUlVcHBlcihuYW1lW2ldKTsKLSAgICAgICAgZWxzZSBpZiAoIWNhcGl0YWxpemVDaGFyYWN0
ZXIgJiYgbmFtZVtpXSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCi0gICAgICAgICAgICBjID0g
dG9BU0NJSUxvd2VyKG5hbWVbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjID0gbmFt
ZVtpXTsKLQotICAgICAgICBpZiAobmFtZVtpXSA9PSAnLScpCi0gICAgICAgICAgICBjYXBpdGFs
aXplQ2hhcmFjdGVyID0gdHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FwaXRhbGl6
ZUNoYXJhY3RlciA9IGZhbHNlOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBIVFRQSGVhZGVyTWFwIHBh
cnNlUkZDODIySGVhZGVyRmllbGRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOwotICAg
IGNvbnN0IGNoYXIqIGVvbDsKLSAgICBTdHJpbmcgbGFzdEtleTsKLSAgICBIVFRQSGVhZGVyTWFw
IGhlYWRlckZpZWxkczsKLQotICAgIC8vIExvb3Agb3ZlIHJsaW5lcyB1bnRpbCB3ZSdyZSBwYXN0
IHRoZSBoZWFkZXIsIG9yIHdlIGNhbid0IGZpbmQgYW55IG1vcmUgZW5kLW9mLWxpbmVzCi0gICAg
d2hpbGUgKChlb2wgPSBmaW5kRU9MKGJ5dGVzLCBsZW5ndGgpKSkgewotICAgICAgICBjb25zdCBj
aGFyKiBsaW5lID0gYnl0ZXM7Ci0gICAgICAgIGludCBsaW5lTGVuZ3RoID0gZW9sIC0gYnl0ZXM7
Ci0gICAgICAgIAotICAgICAgICAvLyBNb3ZlIGJ5dGVzIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIg
dGhlIHRlcm1pbmF0b3IgYXMgcmV0dXJuZWQgYnkgZmluZEVPTC4KLSAgICAgICAgYnl0ZXMgPSBl
b2wgKyAxOwotICAgICAgICBpZiAoKCplb2wgPT0gJ1xyJykgJiYgKCpieXRlcyA9PSAnXG4nKSkK
LSAgICAgICAgICAgIGJ5dGVzKys7IC8vIFNhZmUgc2luY2UgZmluZEVPTCB3b24ndCByZXR1cm4g
YSBzcGFubmluZyBDUkxGLgotCi0gICAgICAgIGxlbmd0aCAtPSAoYnl0ZXMgLSBsaW5lKTsKLSAg
ICAgICAgaWYgKGxpbmVMZW5ndGggPT0gMCkKLSAgICAgICAgICAgIC8vIEJsYW5rIGxpbmU7IHdl
J3JlIGF0IHRoZSBlbmQgb2YgdGhlIGhlYWRlcgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGVsc2UgaWYgKCpsaW5lID09ICcgJyB8fCAqbGluZSA9PSAnXHQnKSB7Ci0gICAgICAgICAgICAv
LyBDb250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgotICAgICAgICAgICAgaWYgKGxh
c3RLZXkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBp
Z25vcmUgaXQgYW5kIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIE1lcmdlIHRoZSBjb250aW51YXRpb24g
b2YgdGhlIHByZXZpb3VzIGhlYWRlcgotICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50VmFs
dWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBu
ZXdWYWx1ZShsaW5lLCBsaW5lTGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIGhlYWRlckZpZWxk
cy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhlYWRlcgotICAgICAg
ICAgICAgY29uc3QgY2hhciogY29sb247Ci0gICAgICAgICAgICBmb3IgKGNvbG9uID0gbGluZTsg
KmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKLSAgICAgICAgICAgICAg
ICAvLyBlbXB0eSBsb29wCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY29sb24gPT0g
ZW9sKSAKLSAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5k
IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFt
ZShTdHJpbmcobGluZSwgY29sb24gLSBsaW5lKSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHZh
bHVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAhPSBlb2w7IGNvbG9u
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcgJiYgKmNvbG9uICE9
ICdcdCcpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSAiIjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHZh
bHVlID0gU3RyaW5nKGNvbG9uLCBlb2wgLSBjb2xvbik7Ci0KLSAgICAgICAgICAgICAgICBTdHJp
bmcgb2xkVmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOwotICAgICAgICAgICAgICAg
IGlmICghb2xkVmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2xk
VmFsdWUgKyAiLCAiICsgdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0
KGxhc3RLZXksIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBoZWFkZXJGaWVsZHM7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9z
dChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25z
dCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZp
Y2F0aW9uLCBib29sIGFsbG93SGVhZGVycykKLXsKLSAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFi
dWYpCi0gICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwotCi0gICAgRnJhbWVMb2Fk
UmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCkpOwotCi0gICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7Ci0gICAgVmVj
dG9yPGNoYXI+IGJ1ZmZlcjsKLSAgICAKLSAgICBpZiAoZmlsZSkgewotICAgICAgICBOUEVycm9y
IHJlYWRSZXN1bHQgPSBoYW5kbGVQb3N0UmVhZEZpbGUoYnVmZmVyLCBsZW4sIGJ1Zik7Ci0gICAg
ICAgIGlmKHJlYWRSZXN1bHQgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgICAgICByZXR1cm4g
cmVhZFJlc3VsdDsKLSAgICB9IGVsc2UgewotICAgICAgICBidWZmZXIucmVzaXplKGxlbik7Ci0g
ICAgICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBidWYsIGxlbik7Ci0gICAgfQotCi0gICAgY29u
c3QgY2hhciogcG9zdERhdGEgPSBidWZmZXIuZGF0YSgpOwotICAgIGludCBwb3N0RGF0YUxlbmd0
aCA9IGJ1ZmZlci5zaXplKCk7Ci0KLSAgICBpZiAoYWxsb3dIZWFkZXJzKSB7Ci0gICAgICAgIGlm
IChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZlcikpIHsKLSAgICAgICAgICAgIHBvc3REYXRhKys7
Ci0gICAgICAgICAgICBwb3N0RGF0YUxlbmd0aC0tOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGJ1ZmZlcik7
Ci0gICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYnVmZmVy
LCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyCi0gICAgICAgICAgICAgICAgaGVhZGVy
RmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoYnVmZmVyLCBsb2NhdGlvbik7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCkgLSBsb2NhdGlv
bjsKLQotICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVnaW5zIGxpa2UgdG8gc2V0IENv
bnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3QsCi0gICAgICAgICAgICAgICAg
Ly8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0LiBTbyB3ZSB3aWxsIHJlbW92
ZSB0aGUgaGVhZGVyCi0gICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQgdHJ1bmNhdGUgdGhl
IGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCi0gICAgICAgICAgICAgICAgU3RyaW5nIGNv
bnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0KEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVu
Z3RoKTsKLQotICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50KCks
IChpbnQpZGF0YUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZShI
VFRQSGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICBwb3N0RGF0
YSArPSBsb2NhdGlvbjsKLSAgICAgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aCA9IGRhdGFMZW5n
dGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmcmFtZUxvYWRSZXF1
ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIlBPU1QiKTsKLSAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50RnJhbWUt
PmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKSk7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS5zZXRIVFRQSGVhZGVyRmllbGRzKFdURjo6bW92ZShoZWFkZXJGaWVsZHMp
KTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5KEZv
cm1EYXRhOjpjcmVhdGUocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSk7Ci0gICAgZnJhbWVMb2Fk
UmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKLQotICAgIHJldHVybiBsb2FkKGZyYW1lTG9h
ZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OmludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIGlmICghaXNWaXNpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBp
ZiAoIW1fZWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8mIHJl
bmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PigqbV9lbGVtZW50LT5yZW5kZXJlcigpKTsKLSAg
ICAKLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7Ci0gICAgZGlydHlSZWN0Lm1vdmUocmVu
ZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFkZGluZ0xlZnQoKSwgcmVuZGVyZXIuYm9y
ZGVyVG9wKCkgKyByZW5kZXJlci5wYWRkaW5nVG9wKCkpOwotICAgIHJlbmRlcmVyLnJlcGFpbnRS
ZWN0YW5nbGUoZGlydHlSZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludE1pc3NpbmdQ
bHVnaW5JY29uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICBzdGF0aWMgUmVmUHRyPEltYWdlPiBudWxsUGx1Z2luSW1hZ2U7Ci0gICAgaWYgKCFu
dWxsUGx1Z2luSW1hZ2UpCi0gICAgICAgIG51bGxQbHVnaW5JbWFnZSA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgibnVsbFBsdWdpbiIpOwotCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoZnJh
bWVSZWN0KCkueCgpLCBmcmFtZVJlY3QoKS55KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoKSwg
bnVsbFBsdWdpbkltYWdlLT5oZWlnaHQoKSk7Ci0KLSAgICBpbnQgeE9mZnNldCA9IChmcmFtZVJl
Y3QoKS53aWR0aCgpIC0gaW1hZ2VSZWN0LndpZHRoKCkpIC8gMjsKLSAgICBpbnQgeU9mZnNldCA9
IChmcmFtZVJlY3QoKS5oZWlnaHQoKSAtIGltYWdlUmVjdC5oZWlnaHQoKSkgLyAyOwotCi0gICAg
aW1hZ2VSZWN0Lm1vdmUoeE9mZnNldCwgeU9mZnNldCk7Ci0KLSAgICBpZiAoIXJlY3QuaW50ZXJz
ZWN0cyhpbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb250ZXh0LT5zYXZlKCk7
Ci0gICAgY29udGV4dC0+Y2xpcCh3aW5kb3dDbGlwUmVjdCgpKTsKLSAgICBjb250ZXh0LT5kcmF3
SW1hZ2UobnVsbFBsdWdpbkltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBpbWFnZVJl
Y3QubG9jYXRpb24oKSk7Ci0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotfQotCi1zdGF0aWMgY29u
c3QgY2hhciogTW96aWxsYVVzZXJBZ2VudCA9ICJNb3ppbGxhLzUuMCAoIgotI2lmIGRlZmluZWQo
WFBfTUFDT1NYKQotICAgICAgICAiTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMgT1MgWDsiCi0jZWxp
ZiBkZWZpbmVkKFhQX1dJTikKLSAgICAgICAgIldpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyIK
LSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLS8vIFRoZSBHdGsgcG9ydCB1c2VzIFgxMSBwbHVnaW5z
IGluIE1hYy4KLSNpZiBPUyhEQVJXSU4pICYmIFBMQVRGT1JNKEdUSykKLSAgICAiWDExOyBVOyBJ
bnRlbCBNYWMgT1MgWDsiCi0jZWxzZQotICAgICJYMTE7IFU7IExpbnV4IGk2ODY7IgotI2VuZGlm
Ci0jZW5kaWYKLSAgICAgICAgIiBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDEwIEZpcmVm
b3gvMi4wIjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENocm9tZVVzZXJBZ2VudCA9ICJN
b3ppbGxhLzUuMCAoIgotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotICAgICJNYWNpbnRvc2g7IFU7
IEludGVsIE1hYyBPUyBYOyIKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQotICAgICJXaW5kb3dzOyBV
OyBXaW5kb3dzIE5UIDUuMTsiCi0jZWxpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgLy8gVGhlIEd0
ayBwb3J0IHVzZXMgWDExIHBsdWdpbnMgaW4gTWFjLgotI2lmIE9TKERBUldJTikgJiYgUExBVEZP
Uk0oR1RLKQotICAgICJYMTE7IFU7IEludGVsIE1hYyBPUyBYOyIKLSNlbHNlCi0gICAgIlgxMTsg
VTsgTGludXggaTY4NjsiCi0jZW5kaWYKLSNlbmRpZgotICAgICIgQXBwbGVXZWJLaXQvNTM0LjM0
IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzE5LjAuMTA1NS4xIFNhZmFyaS81MzQuMzQiOwot
Ci1jb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnQoKQotewotICAgIGlmIChtX3BsdWdp
bi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpKQot
ICAgICAgICByZXR1cm4gTW96aWxsYVVzZXJBZ2VudDsKLSAgICBlbHNlIGlmIChtX3BsdWdpbi0+
cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtXYW50c0Nocm9tZVVzZXJBZ2VudCkpCi0gICAg
ICAgIHJldHVybiBDaHJvbWVVc2VyQWdlbnQ7Ci0gICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgp
KQotICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLnVzZXJBZ2Vu
dChtX3VybCkudXRmOCgpOwotCi0gICAgcmV0dXJuIG1fdXNlckFnZW50LmRhdGEoKTsKLX0KLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotY29uc3QgY2hhciogUGx1Z2luVmlldzo6
dXNlckFnZW50U3RhdGljKCkKLXsKLSAgICByZXR1cm4gTW96aWxsYVVzZXJBZ2VudDsKLX0KLSNl
bmRpZgotCi0KLXZvaWQgUGx1Z2luVmlldzo6bGlmZVN1cHBvcnRUaW1lckZpcmVkKCkKLXsKLSAg
ICBkZXJlZigpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmtlZXBBbGl2ZSgpCi17Ci0gICAgaWYg
KG1fbGlmZVN1cHBvcnRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBy
ZWYoKTsKLSAgICBtX2xpZmVTdXBwb3J0VGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi12b2lkIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShO
UFAgaW5zdGFuY2UpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IGluc3RhbmNlTWFwKCkuZ2V0
KGluc3RhbmNlKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZpZXct
PmtlZXBBbGl2ZSgpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKE5Q
TlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBMT0coUGx1Z2lucywgIlBs
dWdpblZpZXc6OmdldFZhbHVlU3RhdGljKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZSh2
YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0OwotICAgIGlmIChwbGF0Zm9y
bUdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0KLSAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLX0KLQotTlBFcnJv
ciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
Ci17Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZSglcykiLCBwcmV0dHlO
YW1lRm9yTlBOVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0KLSAgICBOUEVycm9yIHJlc3Vs
dDsKLSAgICBpZiAocGxhdGZvcm1HZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUsICZyZXN1bHQpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKHBsYXRmb3JtR2V0VmFsdWVTdGF0aWMo
dmFyaWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAg
IHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogewotICAg
ICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKLQotICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0g
bV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkud2luZG93U2NyaXB0TlBPYmplY3QoKTsKLQotICAgICAg
ICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJl
ZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1l
Lmh0bWw+Ci0gICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCi0gICAgICAgICAgICBfTlBO
X1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOwotCi0gICAgICAgIHZvaWQqKiB2ID0g
KHZvaWQqKil2YWx1ZTsKLSAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7Ci0KLSAgICAg
ICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgIH0KLQotICAgIGNhc2UgTlBOVlBsdWdpbkVs
ZW1lbnROUE9iamVjdDogewotICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0gICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICBOUE9iamVjdCog
cGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKLQotICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdO
YW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2Vs
ZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKLSAgICAgICAgICAgIHBsdWdpblNjcmlwdE9i
amVjdCA9IG1fZWxlbWVudC0+Z2V0TlBPYmplY3QoKTsKLQotICAgICAgICAvLyBSZXR1cm4gdmFs
dWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDov
L3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+Ci0gICAgICAg
IGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCi0gICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChw
bHVnaW5TY3JpcHRPYmplY3QpOwotCi0gICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsK
LSAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7Ci0KLSAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOwotICAgIH0KLQotICAgIGNhc2UgTlBOVnByaXZhdGVNb2RlQm9vbDogewotICAg
ICAgICBQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpOwotICAgICAgICBpZiAoIXBh
Z2UpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgKigo
TlBCb29sKil2YWx1ZSkgPSBwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpOwotICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotfQotCi1zdGF0aWMgRnJhbWUqIGdldEZy
YW1lKEZyYW1lKiBwYXJlbnRGcmFtZSwgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAocGFy
ZW50RnJhbWUpCi0gICAgICAgIHJldHVybiBwYXJlbnRGcmFtZTsKLSAgICAKLSAgICByZXR1cm4g
ZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6Omdl
dFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNo
YXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbikKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZp
ZXc6OmdldFZhbHVlRm9yVVJMKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJp
YWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0K
LSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxWQ29va2llOiB7Ci0gICAg
ICAgIFVSTCB1KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKTsKLSAg
ICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRG
cmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwotICAgICAgICAgICAgaWYgKGZyYW1lKSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBjb29raWVTdHIgPSBjb29raWVzKGZyYW1l
LT5kb2N1bWVudCgpLCB1KS51dGY4KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIu
aXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHNpemUgPSBjb29raWVT
dHIubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNo
YXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqdmFs
dWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgqdmFsdWUsIDAsIHNpemUrMSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKnZhbHVlLCBjb29raWVTdHIuZGF0YSgp
LCBzaXplKzEpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqbGVuID0gc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VS
Uk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgTlBOVVJMVlByb3h5OiB7Ci0gICAgICAgIFVSTCB1KG1fcGFyZW50RnJh
bWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKTsKLSAgICAgICAgaWYgKHUuaXNWYWxpZCgp
KSB7Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBt
X2VsZW1lbnQpOwotICAgICAgICAgICAgY29uc3QgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0g
ZnJhbWUgPyAmZnJhbWUtPmxvYWRlcigpIDogMDsKLSAgICAgICAgICAgIGNvbnN0IE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0ID0gZnJhbWVMb2FkZXIgPyBmcmFtZUxvYWRlci0+bmV0d29ya2lu
Z0NvbnRleHQoKSA6IDA7Ci0gICAgICAgICAgICBjb25zdCBDU3RyaW5nIHByb3h5U3RyID0gdG9T
dHJpbmcocHJveHlTZXJ2ZXJzRm9yVVJMKHUsIGNvbnRleHQpKS51dGY4KCk7Ci0gICAgICAgICAg
ICBpZiAoIXByb3h5U3RyLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IHNp
emUgPSBwcm94eVN0ci5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNf
Y2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHNpemUrMSkpOwotICAgICAgICAgICAgICAgIGlmICgq
dmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCp2YWx1ZSwgMCwgc2l6ZSsxKTsK
LSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCp2YWx1ZSwgcHJveHlTdHIuZGF0YSgpLCBzaXpl
KzEpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGVuKQotICAgICAgICAgICAgICAgICAgICAg
ICAgKmxlbiA9IHNpemU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1I7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfSU5WQUxJRF9VUkw7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXN1bHQgPSBOUEVS
Ul9HRU5FUklDX0VSUk9SOwotICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OmdldFZh
bHVlRm9yVVJMOiAlcyIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0
YSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Ci1OUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlh
YmxlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzJfdCBsZW4pCi17
Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCglcykiLCBwcmV0
dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0KLSAgICBOUEVycm9y
IHJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAg
IGNhc2UgTlBOVVJMVkNvb2tpZTogewotICAgICAgICBVUkwgdShtX3BhcmVudEZyYW1lLT5kb2N1
bWVudCgpLT5iYXNlVVJMKCksIHVybCk7Ci0gICAgICAgIGlmICh1LmlzVmFsaWQoKSkgewotICAg
ICAgICAgICAgY29uc3QgU3RyaW5nIGNvb2tpZVN0ciA9IFN0cmluZzo6ZnJvbVVURjgodmFsdWUs
IGxlbik7Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgp
LCBtX2VsZW1lbnQpOwotICAgICAgICAgICAgaWYgKGZyYW1lICYmICFjb29raWVTdHIuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgIHNldENvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHUsIGNv
b2tpZVN0cik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfSU5W
QUxJRF9VUkw7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE5QTlVSTFZQcm94eToK
LSAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCglcyk6IFBs
dWdpbnMgYXJlIE5PVCBhbGxvd2VkIHRvIHNldCBwcm94eSBpbmZvcm1hdGlvbi4iLCBwcmV0dHlO
YW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0gICAgICAgIHJlc3VsdCA9
IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkw6ICVzIiwgcHJldHR5
TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotICAgICAgICByZXN1bHQg
PSBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldEF1dGhlbnRpY2F0aW9uSW5m
byhjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBj
b25zdCBjaGFyKiAvKiBzY2hlbWUgKi8sIGNvbnN0IGNoYXIqIC8qIHJlYWxtICovLCBjaGFyKiog
IC8qIHVzZXJuYW1lICovLCB1aW50MzJfdCogLyogdWxlbiAqLywgY2hhcioqIC8qIHBhc3N3b3Jk
ICovLCB1aW50MzJfdCogLyogcGxlbiAqLykKLXsKLSNpZiBMT0dfRElTQUJMRUQKLSAgICBVTlVT
RURfUEFSQU0ocHJvdG9jb2wpOwotICAgIFVOVVNFRF9QQVJBTShob3N0KTsKLSAgICBVTlVTRURf
UEFSQU0ocG9ydCk7Ci0jZW5kaWYKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OmdldEF1
dGhlbnRpY2F0aW9uSW5mbzogcHJvdG9jb2w9JXMsIGhvc3Q9JXMsIHBvcnQ9JWQiLCBwcm90b2Nv
bCwgaG9zdCwgcG9ydCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKLX0KLSNlbmRpZgotCi12b2lkIFBsdWdpblZpZXc6OnByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZChib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCi17Ci0gICAgTlBQ
X1NldFZhbHVlUHJvY1B0ciBzZXRWYWx1ZSA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR2
YWx1ZTsKLSAgICBpZiAoIXNldFZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgIHNl
dENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgTlBCb29sIHZhbHVlID0gcHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZDsKLSAgICBzZXRWYWx1ZShtX2luc3RhbmNlLCBOUE5WcHJpdmF0ZU1vZGVCb29sLCAm
dmFsdWUpOwotICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KDApOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NmJiOWQyODExNGFkZDg2
OTRkNWNkMTE3YTAzZDY2MGRkZmMwMzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJp
YXMuaW4+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIFBsdWdpblZpZXdfaAotI2RlZmluZSBQbHVnaW5WaWV3X2gKLQotI2luY2x1ZGUgIkZyYW1l
TG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTWVkaWFDYW5T
dGFydExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2luY2x1ZGUgIlBsdWdpblN0cmVhbS5o
IgotI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgotI2VuZGlmCi0KLSNpZiBPUyhXSU5E
T1dTKSAmJiBQTEFURk9STShHVEspCi10eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7Ci10eXBl
ZGVmIEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7Ci0jZWxzZQotdHlwZWRlZiBQbGF0Zm9ybVdp
ZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEdUSykKLXR5
cGVkZWYgc3RydWN0IF9HdGtTb2NrZXQgR3RrU29ja2V0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShYMTEpCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93OwotdHlwZWRlZiBzdHJ1Y3QgX1hE
aXNwbGF5IERpc3BsYXk7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0gICAgbmFtZXNwYWNl
IEJpbmRpbmdzIHsKLSAgICAgICAgY2xhc3MgSW5zdGFuY2U7Ci0gICAgfQotfQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgRnJhbWVWaWV3OwotICAg
IGNsYXNzIEltYWdlOwotICAgIGNsYXNzIEhUTUxQbHVnSW5FbGVtZW50OwotICAgIGNsYXNzIEtl
eWJvYXJkRXZlbnQ7Ci0gICAgY2xhc3MgTW91c2VFdmVudDsKLSAgICBjbGFzcyBVUkw7Ci0jaWYg
T1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgY2xhc3MgUGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbjsKLSNlbmRpZgotICAgIGNsYXNzIFBsdWdpblBhY2thZ2U7
Ci0gICAgY2xhc3MgUGx1Z2luUmVxdWVzdDsKLSAgICBjbGFzcyBQbHVnaW5TdHJlYW07Ci0gICAg
Y2xhc3MgUmVzb3VyY2VFcnJvcjsKLSAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotICAgIGNs
YXNzIFdoZWVsRXZlbnQ7Ci0KLSAgICBlbnVtIFBsdWdpblN0YXR1cyB7Ci0gICAgICAgIFBsdWdp
blN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCi0gICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQ
bHVnaW4sCi0gICAgICAgIFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseQotICAgIH07Ci0K
LSAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0IHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UGx1Z2luUmVxdWVzdCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgUGx1Z2luUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1
ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2hvdWxk
QWxsb3dQb3B1cHMpCi0gICAgICAgICAgICA6IG1fZnJhbWVMb2FkUmVxdWVzdChmcmFtZUxvYWRS
ZXF1ZXN0KQotICAgICAgICAgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKLSAgICAgICAg
ICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pCi0gICAgICAgICAgICAs
IG1fc2hvdWxkQWxsb3dQb3B1cHMoc2hvdWxkQWxsb3dQb3B1cHMpIHsgfQotICAgIHB1YmxpYzoK
LSAgICAgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQotICAgICAgICB2b2lkKiBub3RpZnlEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9Ci0gICAgICAgIGJvb2wgc2VuZE5vdGlm
aWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZE5vdGlmaWNhdGlvbjsgfQotICAgICAgICBi
b29sIHNob3VsZEFsbG93UG9wdXBzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRBbGxvd1BvcHVw
czsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRS
ZXF1ZXN0OwotICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7Ci0gICAgICAgIGJvb2wgbV9zZW5k
Tm90aWZpY2F0aW9uOwotICAgICAgICBib29sIG1fc2hvdWxkQWxsb3dQb3B1cHM7Ci0gICAgfTsK
LQotICAgIGNsYXNzIFBsdWdpbk1hbnVhbExvYWRlciB7Ci0gICAgcHVibGljOgotICAgICAgICB2
aXJ0dWFsIH5QbHVnaW5NYW51YWxMb2FkZXIoKSB7fQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgPSAwOwotICAgIH07Ci0KLSAgICBjbGFz
cyBQbHVnaW5WaWV3IDogcHVibGljIFBsdWdpblZpZXdCYXNlCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0gICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUgUGx1Z2luU3RyZWFt
Q2xpZW50Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFBsdWdpbk1hbnVh
bExvYWRlcgotICAgICAgICAgICAgICAgICAgICAgLCBwcml2YXRlIE1lZGlhQ2FuU3RhcnRMaXN0
ZW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5WaWV3
PiBjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVs
ZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIGxvYWRNYW51YWxseSk7Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpblZpZXcoKTsKLQotICAg
ICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5nZXQo
KTsgfQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUFAgaW5zdGFu
Y2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9Ci0jZW5kaWYKLQotICAgICAgICB2b2lk
IHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyBQbHVnaW5W
aWV3KiBjdXJyZW50UGx1Z2luVmlldygpOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCgpOwotI2VuZGlmCi0gICAgICAgIFBhc3NS
ZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGJpbmRpbmdJbnN0YW5jZSgpOwotCi0gICAg
ICAgIFBsdWdpblN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQotCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIC8vIE5QTiBmdW5jdGlvbnMK
LSAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOwotICAgICAgICBOUEVycm9yIGdldFVSTChjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7Ci0gICAgICAgIE5QRXJyb3IgcG9zdFVS
TE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVu
LCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKLSAgICAg
ICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1
aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOwotICAgICAgICBOUEVy
cm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJl
YW0qKiBzdHJlYW0pOwotICAgICAgICBpbnQzMl90IHdyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGlu
dDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwotICAgICAgICBOUEVycm9yIGRlc3Ryb3lTdHJlYW0o
TlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKLSNlbmRpZgotICAgICAgICBjb25z
dCBjaGFyKiB1c2VyQWdlbnQoKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZXJBZ2VudFN0YXRpYygpOwotI2VuZGlmCi0gICAg
ICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwotICAgICAgICAKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBFcnJvciBnZXRWYWx1ZShOUE5WYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwotICAgICAgICBzdGF0aWMgTlBFcnJvciBnZXRW
YWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwotICAgICAgICBO
UEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7Ci0gICAg
ICAgIE5QRXJyb3IgZ2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0
IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKTsKLSAgICAgICAgTlBFcnJv
ciBzZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3QgbGVuKTsKLSAgICAgICAgTlBFcnJvciBnZXRB
dXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3Qs
IGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25zdCBjaGFyKiByZWFsbSwgY2hh
cioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hhcioqIHBhc3N3b3JkLCB1aW50MzJfdCog
cGxlbik7Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7Ci0gICAgICAgIHZv
aWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7Ci0jZW5kaWYKLSAgICAgICAgdm9pZCBmb3Jj
ZVJlZHJhdygpOwotICAgICAgICB2b2lkIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0
ZSk7Ci0gICAgICAgIHZvaWQgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICBib29s
IGFyZVBvcHVwc0FsbG93ZWQoKSBjb25zdDsKLQotICAgICAgICB2b2lkIHNldEphdmFTY3JpcHRQ
YXVzZWQoYm9vbCk7Ci0KLSAgICAgICAgdm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQo
Ym9vbCk7Ci0KLSAgICAgICAgdm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbSopOwot
ICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcoUGx1Z2luU3RyZWFtKiBzdHJlYW0p
IHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9Ci0KLSAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0
aW9ucwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCk7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNob3coKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNs
aXBSZWN0Q2hhbmdlZCgpIG92ZXJyaWRlOwotCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVz
ZWQgYnkgcGx1Z2lucyBvbiBhbGwgcGxhdGZvcm1zIHRvIG9idGFpbiBhIGNsaXAgcmVjdCB0aGF0
IGluY2x1ZGVzIGNsaXBzIHNldCBieSBXZWJDb3JlLAotICAgICAgICAvLyBlLmcuLCBpbiBvdmVy
ZmxvdzphdXRvIHNlY3Rpb25zLiAgVGhlIGNsaXAgcmVjdHMgY29vcmRpbmF0ZXMgYXJlIGluIHRo
ZSBjb250YWluaW5nIHdpbmRvdydzIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgICAgIC8vIFRoaXMg
Y2xpcCBpbmNsdWRlcyBhbnkgY2xpcHMgdGhhdCB0aGUgd2lkZ2V0IGl0c2VsZiBzZXRzIHVwIGZv
ciBpdHMgY2hpbGRyZW4uCi0gICAgICAgIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsK
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRQYXJlbnRWaXNpYmxlKGJvb2wpOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1BsdWdpblZp
ZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgRnJhbWUqIHBh
cmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRGcmFtZS5nZXQoKTsgfQotCi0gICAg
ICAgIHZvaWQgZm9jdXNQbHVnaW5FbGVtZW50KCk7Ci0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBw
bHVnaW5zUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luc1BhZ2U7IH0KLSAgICAgICAgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5cGU7IH0KLSAgICAg
ICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQotCi0jaWYgZGVmaW5l
ZChYUF9NQUNPU1gpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBib29s
IHBvcFVwQ29udGV4dE1lbnUoTlBNZW51Kik7Ci0jZW5kaWYKLQotI2lmIE9TKFdJTkRPV1MpICYm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0aWMgTFJFU1VMVCBDQUxM
QkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci0gICAg
ICAgIExSRVNVTFQgd25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJh
bSwgTFBBUkFNIGxQYXJhbSk7Ci0gICAgICAgIFdORFBST0MgcGx1Z2luV25kUHJvYygpIGNvbnN0
IHsgcmV0dXJuIG1fcGx1Z2luV25kUHJvYzsgfQotI2VuZGlmCi0KLSAgICAgICAgLy8gVXNlZCBm
b3IgbWFudWFsIGxvYWRpbmcKLSAgICAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNo
YXIqLCBpbnQpOwotICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKLSAgICAgICAgdm9p
ZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLQotICAgICAgICBzdGF0aWMgYm9vbCBp
c0NhbGxpbmdQbHVnaW4oKTsKLQotICAgICAgICBib29sIHN0YXJ0KCk7Ci0KLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgc3RhdGljIHZvaWQga2VlcEFsaXZlKE5QUCk7
Ci0jZW5kaWYKLSAgICAgICAgdm9pZCBrZWVwQWxpdmUoKTsKLQotI2lmIFBMQVRGT1JNKFgxMSkK
LSAgICAgICAgc3RhdGljIERpc3BsYXkqIGdldFBsdWdpbkRpc3BsYXkoRnJhbWUqKTsKLSAgICAg
ICAgc3RhdGljIFdpbmRvdyBnZXRSb290V2luZG93KEZyYW1lKiBwYXJlbnRGcmFtZSk7Ci0jZW5k
aWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1l
LCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZSosIEhUTUxQbHVnSW5FbGVtZW50KiwgY29u
c3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFu
dWFsbHkpOwotCi0gICAgICAgIHZvaWQgc2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKLSAgICAg
ICAgYm9vbCBzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCk7Ci0gICAgICAgIHZvaWQgaW5pdCgp
OwotICAgICAgICBib29sIHBsYXRmb3JtU3RhcnQoKTsKLSAgICAgICAgdm9pZCBzdG9wKCk7Ci0g
ICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldEN1
cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29s
IHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOwotICAgICAgICBOUEVycm9yIGhh
bmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxl
biwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2Vu
ZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOwotICAgICAgICBOUEVycm9yIGhhbmRs
ZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBj
aGFyKiBidWYpOwotI2VuZGlmCi0gICAgICAgIHN0YXRpYyB2b2lkIGZyZWVTdHJpbmdBcnJheShj
aGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpOwotICAgICAgICB2b2lkIHNldENhbGxpbmdQ
bHVnaW4oYm9vbCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlV2luZG93bGVzc1Bs
dWdpblJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBtZWRpYUNh
blN0YXJ0KCk7Ci0KLSNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICAgICAgdm9pZCBwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICBzdGF0aWMgSERDIFdJTkFQSSBob29r
ZWRCZWdpblBhaW50KEhXTkQsIFBBSU5UU1RSVUNUKik7Ci0gICAgICAgIHN0YXRpYyBCT09MIFdJ
TkFQSSBob29rZWRFbmRQYWludChIV05ELCBjb25zdCBQQUlOVFNUUlVDVCopOwotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgc3RhdGljIGJvb2wgcGxh
dGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5Q
RXJyb3IqIHJlc3VsdCk7Ci0gICAgICAgIGJvb2wgcGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7Ci0jZW5kaWYKLQotICAg
ICAgICBSZWZQdHI8RnJhbWU+IG1fcGFyZW50RnJhbWU7Ci0gICAgICAgIFJlZlB0cjxQbHVnaW5Q
YWNrYWdlPiBtX3BsdWdpbjsKLSAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQqIG1fZWxlbWVudDsK
LSAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKLSAgICAgICAgVVJMIG1fdXJsOwotICAgICAgICBQ
bHVnaW5TdGF0dXMgbV9zdGF0dXM7Ci0gICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRS
ZWN0czsKLQotICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3QqKTsKLSAg
ICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3Qoc3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+
KTsKLSAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZCgpOwotICAgICAgICB2b2lkIGludmFs
aWRhdGVUaW1lckZpcmVkKCk7Ci0gICAgICAgIFRpbWVyIG1fcmVxdWVzdFRpbWVyOwotICAgICAg
ICBUaW1lciBtX2ludmFsaWRhdGVUaW1lcjsKLQotICAgICAgICB2b2lkIHBvcFBvcHVwc1N0YXRl
VGltZXJGaXJlZCgpOwotICAgICAgICBUaW1lciBtX3BvcFBvcHVwc1N0YXRlVGltZXI7Ci0KLSAg
ICAgICAgdm9pZCBsaWZlU3VwcG9ydFRpbWVyRmlyZWQoKTsKLSAgICAgICAgVGltZXIgbV9saWZl
U3VwcG9ydFRpbWVyOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAg
IGJvb2wgZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoWFBf
TUFDT1NYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgaW50MTZfdCBk
aXNwYXRjaE5QQ29jb2FFdmVudChOUENvY29hRXZlbnQmKTsKLSAgICAgICAgYm9vbCBtX3VwZGF0
ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZDsKLSAgICAgICAgYm9vbCBtX2tleURvd25TZW50Owot
ICAgICAgICB1aW50MTZfdCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcjsKLSNlbmRpZgotCi0jaWYg
ZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudChXaGVlbEV2
ZW50Kik7Ci0jZW5kaWYKLSAgICAgICAgdm9pZCB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLSAgICAg
ICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmKTsKLQotICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVu
dCopOwotICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopOwotI2lmIGRl
ZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIHZv
aWQgaGFuZGxlRm9jdXNJbkV2ZW50KCk7Ci0gICAgICAgIHZvaWQgaGFuZGxlRm9jdXNPdXRFdmVu
dCgpOwotI2VuZGlmCi0KLSNpZiBPUyhXSU5ET1dTKQotICAgICAgICB2b2lkIHBhaW50SW50b1Ry
YW5zZm9ybWVkQ29udGV4dChIREMpOwotICAgICAgICBQYXNzUmVmUHRyPEltYWdlPiBzbmFwc2hv
dCgpOwotI2VuZGlmCi0KLSAgICAgICAgaW50IG1fbW9kZTsKLSAgICAgICAgaW50IG1fcGFyYW1D
b3VudDsKLSAgICAgICAgY2hhcioqIG1fcGFyYW1OYW1lczsKLSAgICAgICAgY2hhcioqIG1fcGFy
YW1WYWx1ZXM7Ci0gICAgICAgIFN0cmluZyBtX3BsdWdpbnNQYWdlOwotCi0gICAgICAgIFN0cmlu
ZyBtX21pbWVUeXBlOwotICAgICAgICBXVEY6OkNTdHJpbmcgbV91c2VyQWdlbnQ7Ci0KLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBQIG1faW5zdGFuY2U7Ci0gICAg
ICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7Ci0gICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7
Ci0jZW5kaWYKLQotICAgICAgICBWZWN0b3I8Ym9vbCwgND4gbV9wb3B1cFN0YXRlU3RhY2s7Ci0K
LSAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IG1fc3RyZWFtczsKLSAgICAg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0Pj4gbV9yZXF1ZXN0czsKLQot
ICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKLSAgICAgICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7
Ci0gICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7Ci0gICAgICAgIGJvb2wgbV9pc1dhaXRp
bmdUb1N0YXJ0OwotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotICAgICAgICBib29sIG1fbmVlZHNY
RW1iZWQ7Ci0jZW5kaWYKLQotI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbj4gbV9tZXNz
YWdlVGhyb3R0bGVyOwotICAgICAgICBXTkRQUk9DIG1fcGx1Z2luV25kUHJvYzsKLSAgICAgICAg
dW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKLSAgICAgICAgYm9vbCBtX2lzQ2FsbGluZ1BsdWdpbldu
ZFByb2M7Ci0gICAgICAgIEhEQyBtX3dtUHJpbnRIREM7Ci0gICAgICAgIGJvb2wgbV9oYXZlVXBk
YXRlZFBsdWdpbldpZGdldDsKLSNlbmRpZgotCi0jaWYgKFBMQVRGT1JNKEdUSykgJiYgT1MoV0lO
RE9XUykpIHx8IFBMQVRGT1JNKEVGTCkKLSAgICAgICAgLy8gT24gTWFjIE9TWCBhbmQgUXQvV2lu
ZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhhdmUgaXRzIG93biBuYXRpdmUgd2lkZ2V0LAotICAg
ICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNvbnRhaW5pbmcgd2luZG93IGFzIGl0cyByZWZlcmVu
Y2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5nLgotICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdl
dCBtX3dpbmRvdzsKLXB1YmxpYzoKLSAgICAgICAgUGxhdGZvcm1QbHVnaW5XaWRnZXQgcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdzsgfQotICAgICAgICB2b2lk
IHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHdpZGdldCkgeyBt
X3dpbmRvdyA9IHdpZGdldDsgfQotI2Vsc2UKLXB1YmxpYzoKLSAgICAgICAgdm9pZCBzZXRQbGF0
Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBsdWdpbldpZGdldCB3aWRnZXQpIHsgc2V0UGxhdGZv
cm1XaWRnZXQod2lkZ2V0KTsgfQotICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtV2lkZ2V0KCk7IH0KLSNlbmRp
ZgotCi1wcml2YXRlOgotCi0jaWYgZGVmaW5lZChYUF9VTklYKSB8fCBQTEFURk9STShHVEspCi0g
ICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOwotI2VsaWYgZGVmaW5lZChYUF9NQUNP
U1gpCi0gICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0OwotICAgICAgICBDR0NvbnRl
eHRSZWYgbV9jb250ZXh0UmVmOwotCi0gICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgp
OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlOwotICAgICAg
ICBQaXhtYXAgbV9kcmF3YWJsZTsKLSAgICAgICAgVmlzdWFsKiBtX3Zpc3VhbDsKLSAgICAgICAg
Q29sb3JtYXAgbV9jb2xvcm1hcDsKLSAgICAgICAgRGlzcGxheSogbV9wbHVnaW5EaXNwbGF5Owot
Ci0gICAgICAgIHZvaWQgaW5pdFhFdmVudChYRXZlbnQqIGV2ZW50KTsKLSNlbmRpZgotCi0jaWYg
UExBVEZPUk0oR1RLKQotICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gcGx1Z1JlbW92ZWRDYWxsYmFj
ayhHdGtTb2NrZXQqLCBQbHVnaW5WaWV3Kik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBsdWdBZGRl
ZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdpblZpZXcqKTsKLSAgICAgICAgdm9pZCB1cGRhdGVX
aWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOwotICAgICAgICBib29sIG1fcGx1Z0FkZGVkOwotICAg
ICAgICBJbnRSZWN0IG1fZGVsYXllZEFsbG9jYXRpb247Ci0jZW5kaWYKLQotICAgICAgICBJbnRS
ZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBw
bHVnLWluCi0gICAgICAgIEludFJlY3QgbV93aW5kb3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3Qu
Ci0KLSAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKLSAgICAgICAgUmVmUHRyPFBsdWdpblN0
cmVhbT4gbV9tYW51YWxTdHJlYW07Ci0KLSAgICAgICAgYm9vbCBtX2lzSmF2YVNjcmlwdFBhdXNl
ZDsKLQotICAgICAgICBib29sIG1faGF2ZUNhbGxlZFNldFdpbmRvdzsKLQotICAgICAgICBzdGF0
aWMgUGx1Z2luVmlldyogc19jdXJyZW50UGx1Z2luVmlldzsKLSAgICB9OwotCi1pbmxpbmUgUGx1
Z2luVmlldyogdG9QbHVnaW5WaWV3KFdpZGdldCogd2lkZ2V0KQotewotICAgIEFTU0VSVCghd2lk
Z2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQ
bHVnaW5WaWV3Kj4od2lkZ2V0KTsKLX0KLQotaW5saW5lIGNvbnN0IFBsdWdpblZpZXcqIHRvUGx1
Z2luVmlldyhjb25zdCBXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBBU1NFUlQoIXdpZGdldCB8fCB3
aWRnZXQtPmlzUGx1Z2luVmlldygpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1
Z2luVmlldyo+KHdpZGdldCk7Ci19Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcg
YW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZvaWQgdG9QbHVnaW5WaWV3KGNvbnN0IFBsdWdpblZpZXcq
KTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFw
aS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZDkwYTUyYjdhMWU3Yzk2ZThk
ZjRkODk5YmNmODAxOTQ4ZWZmZDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi0vLyBUaGUgcGx1Z2luIHZpZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBv
ZiB0aGUgaW5zdGFuY2UsLiBTb21ldGltZXMsIHBsdWctaW5zIHdpbGwgY2FsbCBhbiBpbnN0YW5j
ZS1zcGVjaWZpYyBmdW5jdGlvbgotLy8gd2l0aCBhIE5VTEwgaW5zdGFuY2UuIFRvIHdvcmthcm91
bmQgdGhpcywgY2FsbCB0aGUgbGFzdCBwbHVnLWluIHZpZXcgdGhhdCBtYWRlIGEgY2FsbCB0byBh
IHBsdWctaW4uCi0vLyBDdXJyZW50bHksIHRoZSBjdXJyZW50IHBsdWctaW4gdmlldyBpcyBvbmx5
IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQbHVnaW5WaWV3OjpzdGFydC4KLS8vIFRoaXMgc3BlY2lm
aWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFzaCBhbmQgU2hvY2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQ
X05ldywgdGhleSBjYWxsIE5QTl9Vc2VyYWdlbnQgd2l0aCBhIE5VTEwgaW5zdGFuY2UuCi1zdGF0
aWMgUGx1Z2luVmlldyogcGx1Z2luVmlld0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKLXsKLSAg
ICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UtPm5kYXRhKQotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UGx1Z2luVmlldyo+KGluc3RhbmNlLT5uZGF0YSk7Ci0gICAgcmV0dXJuIFBsdWdpblZp
ZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCk7Ci19Ci0KLXZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzJf
dCBzaXplKQotewotICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Ci19Ci0KLXZvaWQgTlBOX01lbUZy
ZWUodm9pZCogcHRyKQotewotICAgIGZyZWUocHRyKTsKLX0KLQotdWludDMyX3QgTlBOX01lbUZs
dXNoKHVpbnQzMl90KQotewotICAgIC8vIERvIG5vdGhpbmcKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBOUE5fUmVsb2FkUGx1Z2lucyhOUEJvb2wgcmVsb2FkUGFnZXMpCi17Ci0gICAgUGFnZTo6
cmVmcmVzaFBsdWdpbnMocmVsb2FkUGFnZXMpOwotfQotCi1OUEVycm9yIE5QTl9SZXF1ZXN0UmVh
ZChOUFN0cmVhbSosIE5QQnl0ZVJhbmdlKikKLXsKLSAgICByZXR1cm4gTlBFUlJfU1RSRUFNX05P
VF9TRUVLQUJMRTsKLX0KLQotTlBFcnJvciBOUE5fR2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwg
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCi17
Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTE5vdGlm
eSh1cmwsIHRhcmdldCwgbm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgTlBOX0dldFVSTChOUFAg
aW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQotewotICAgIHJl
dHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkwodXJsLCB0YXJnZXQp
OwotfQotCi1OUEVycm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVm
LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbGVuLCBi
dWYsIGZpbGUsIG5vdGlmeURhdGEpOwotfQotCi1OUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0
YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwg
Y29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUp
OwotfQotCi1OUEVycm9yIE5QTl9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5
cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCi17Ci0gICAgcmV0dXJu
IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQs
IHN0cmVhbSk7Ci19Ci0KLWludDMyX3QgTlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0q
IHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+d3JpdGUoc3RyZWFtLCBsZW4sIGJ1ZmZlcik7Ci19
Ci0KLU5QRXJyb3IgTlBOX0Rlc3Ryb3lTdHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3Ry
ZWFtLCBOUFJlYXNvbiByZWFzb24pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5j
ZShpbnN0YW5jZSktPmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pOwotfQotCi1jb25zdCBj
aGFyKiBOUE5fVXNlckFnZW50KE5QUCBpbnN0YW5jZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3
ID0gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKLQotICAgICBpZiAoIXZpZXcpCi0g
ICAgICAgICByZXR1cm4gUGx1Z2luVmlldzo6dXNlckFnZW50U3RhdGljKCk7Ci0gCi0gICAgcmV0
dXJuIHZpZXctPnVzZXJBZ2VudCgpOwotfQotCi12b2lkIE5QTl9TdGF0dXMoTlBQIGluc3RhbmNl
LCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSktPnN0YXR1cyhtZXNzYWdlKTsKLX0KLQotdm9pZCBOUE5fSW52YWxpZGF0ZVJlY3QoTlBQ
IGluc3RhbmNlLCBOUFJlY3QqIGludmFsaWRSZWN0KQotewotICAgIFBsdWdpblZpZXcqIHZpZXcg
PSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOwotI2lmIGRlZmluZWQoWFBfVU5JWCkK
LSAgICAvLyBOU1BsdWdpbldyYXBwZXIsIGEgcGx1Z2luIHdyYXBwZXIgYmluYXJ5IHRoYXQgYWxs
b3dzIHJ1bm5pbmcgMzItYml0IHBsdWdpbnMKLSAgICAvLyBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJl
cyB0eXBpY2FsbHkgdXNlZCBpbiBYMTEsIHdpbGwgc29tZXRpbWVzIGdpdmUgdXMgYSBudWxsIE5Q
UCBoZXJlLgotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgdmll
dy0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOwotfQotCi12b2lkIE5QTl9JbnZhbGlkYXRl
UmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikKLXsKLSAgICBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVnaW9uKGludmFsaWRSZWdp
b24pOwotfQotCi12b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCi17Ci0gICAgcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9yY2VSZWRyYXcoKTsKLX0KLQotTlBFcnJv
ciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSk7Ci0KLSAgICAgaWYgKCF2aWV3KQotICAgICAgICAgcmV0dXJuIFBsdWdpblZpZXc6
OmdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSk7Ci0KLSAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKLX0KLQot
TlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpCi17Ci0gICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+c2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKLX0KLQotdm9pZCogTlBOX0dldEphdmFFbnYo
KQotewotICAgIC8vIFVuc3VwcG9ydGVkCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQqIE5QTl9H
ZXRKYXZhUGVlcihOUFApCi17Ci0gICAgLy8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9vbCBl
bmFibGVkKQotewotICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnB1c2hQb3B1
cHNFbmFibGVkU3RhdGUoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgTlBOX1BvcFBvcHVwc0VuYWJsZWRT
dGF0ZShOUFAgaW5zdGFuY2UpCi17Ci0gICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+cG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci19Ci0KLWV4dGVybiAiQyIgdHlwZWRlZiB2b2lk
IFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1bmN0aW9uKHZvaWQqKTsKLXZvaWQgTlBOX1BsdWdpblRo
cmVhZEFzeW5jQ2FsbChOUFAgaW5zdGFuY2UsIFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1bmN0aW9u
IGZ1bmMsIHZvaWQqIHVzZXJEYXRhKQotewotICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUg
b25seSBkaWZmZXJzIGZyb20gTWFpblRocmVhZEZ1bmN0aW9uIGJ5IGJlaW5nIGV4dGVybiAiQyIs
IHdoaWNoIGRvZXNuJ3QgYWZmZWN0IGNhbGxpbmcgY29udmVudGlvbiBvbiBhbnkgY29tcGlsZXJz
IHdlIHVzZS4KLSAgICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS5zY2hl
ZHVsZUNhbGwoaW5zdGFuY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlcjo6TWFpblRocmVhZEZ1bmN0aW9uKj4oZnVuYyksIHVzZXJEYXRhKTsKLX0KLQotTlBFcnJv
ciBOUE5fR2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJs
ZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCi17Ci0gICAg
cmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFZhbHVlRm9yVVJMKHZh
cmlhYmxlLCB1cmwsIHZhbHVlLCBsZW4pOwotfQotCi1OUEVycm9yIE5QTl9TZXRWYWx1ZUZvclVS
TChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzJfdCBsZW4pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVlRm9yVVJMKHZhcmlhYmxlLCB1cmwsIHZh
bHVlLCBsZW4pOwotfQotCi1OUEVycm9yIE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQIGlu
c3RhbmNlLCBjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJfdCBw
b3J0LCBjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIqIHJlYWxtLCBjaGFyKiogdXNlcm5h
bWUsIHVpbnQzMl90KiB1bGVuLCBjaGFyKiogcGFzc3dvcmQsIHVpbnQzMl90KiBwbGVuKQotewot
ICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRBdXRoZW50aWNh
dGlvbkluZm8ocHJvdG9jb2wsIGhvc3QsIHBvcnQsIHNjaGVtZSwgcmVhbG0sIHVzZXJuYW1lLCB1
bGVuLCBwYXNzd29yZCwgcGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX1BvcFVwQ29udGV4dE1lbnUo
TlBQIGluc3RhbmNlLCBOUE1lbnUqIG1lbnUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGluc3RhbmNl
KTsKLSAgICBVTlVTRURfUEFSQU0obWVudSk7Ci0gICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGFpbnRIb29rcy5hc20g
Yi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QYWludEhvb2tzLmFzbQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMTUwODgxMzU2YTBkZGNkNzgzMDcyODExZTlmMTVhMTE1OTRiMTg1
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL3dpbi9QYWludEhvb2tzLmFzbQorKysgL2Rldi9udWxsCkBAIC0xLDUw
ICswLDAgQEAKLTsvKgotOyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi07Ci07ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLTsgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLTsgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi07ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLTsKLTsgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi07ICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi07ICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi07ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotOwotOyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi07ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi07ICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi07ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotOyovCi0KLTtIREMgX19z
dGRjYWxsIF9IQmVnaW5QYWludChIV05EIGhXbmQsIExQUEFJTlRTVFJVQ1QgbHBQYWludCk7Ci0K
LVBVQkxJQyAgX0hCZWdpblBhaW50Ci0KLV9URVhUICAgU0VHTUVOVAotCi1fSEJlZ2luUGFpbnQg
UFJPQwotICAgICBtb3YgIHIxMCxyY3gKLSAgICAgbW92ICBlYXgsMTAxN2gKLSAgICAgc3lzY2Fs
bAotICAgICByZXQKLV9IQmVnaW5QYWludCBFTkRQCi0KLV9URVhUICAgRU5EUwotCi07Qk9PTCBf
X3N0ZGNhbGwgX0hFbmRQYWludChIV05EIGhXbmQsIGNvbnN0IFBBSU5UU1RSVUNUKiBscFBhaW50
KTsKLQotUFVCTElDICBfSEVuZFBhaW50Ci0KLV9URVhUICAgU0VHTUVOVAotCi1fSEVuZFBhaW50
IFBST0MKLSAgICBtb3YgIHIxMCxyY3gKLSAgICBtb3YgIGVheCwxMDE5aAotICAgIHN5c2NhbGwK
LSAgICByZXQKLV9IRW5kUGFpbnQgRU5EUAotCi1fVEVYVCAgIEVORFMKLQotRU5ECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYzZjZjM0OTlmYzI5ZGU2YWM1YWVhZGIzOTI0MDQyNzFh
YTBlMTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVk
ZSAiVVJMLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgPHd0Zi9XaW5k
b3dzRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSB2b2lk
IGFkZFBsdWdpblBhdGhzRnJvbVJlZ2lzdHJ5KEhLRVkgcm9vdEtleSwgSGFzaFNldDxTdHJpbmc+
JiBwYXRocykKLXsKLSAgICBIS0VZIGtleTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IFJlZ09wZW5L
ZXlFeFcocm9vdEtleSwgTCJTb2Z0d2FyZVxcTW96aWxsYVBsdWdpbnMiLCAwLCBLRVlfRU5VTUVS
QVRFX1NVQl9LRVlTLCAma2V5KTsKLQotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgd2NoYXJfdCBuYW1lWzEyOF07Ci0gICAgRklMRVRJTUUg
bGFzdE1vZGlmaWVkOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBp
ID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gV1RGX0FSUkFZX0xFTkdUSChu
YW1lKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1l
TGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IEVS
Uk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBXQ0hBUiBwYXRoU3Ry
W19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIHBhdGhTdHJTaXplID0gc2l6ZW9mKHBhdGhTdHIp
OwotICAgICAgICBEV09SRCB0eXBlOwotCi0gICAgICAgIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFs
dWUoa2V5LCBuYW1lLCBMIlBhdGgiLCAmdHlwZSwgcGF0aFN0ciwgJnBhdGhTdHJTaXplKTsKLSAg
ICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTIHx8IHR5cGUgIT0gUkVHX1NaKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcGF0aHMuYWRkKFN0cmluZyhwYXRoU3RyLCBw
YXRoU3RyU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VL
ZXkoa2V5KTsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luUGF0aHNJbkRpcmVj
dG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCi0gICAgSGFzaFNldDxTdHJpbmc+
IHVuaXF1ZUZpbGVuYW1lczsKLQotICAgIEhBTkRMRSBoRmluZCA9IElOVkFMSURfSEFORExFX1ZB
TFVFOwotICAgIFdJTjMyX0ZJTkRfREFUQVcgZmluZEZpbGVEYXRhOwotCi0gICAgU3RyaW5nIG9s
ZFdNUFBsdWdpblBhdGg7Ci0gICAgU3RyaW5nIG5ld1dNUFBsdWdpblBhdGg7Ci0KLSAgICBWZWN0
b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5lbmQo
KTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lu
RGlyZWN0b3JpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFN0cmluZyBw
YXR0ZXJuID0gKml0ICsgIlxcKiI7Ci0KLSAgICAgICAgaEZpbmQgPSBGaW5kRmlyc3RGaWxlVyhw
YXR0ZXJuLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCAmZmluZEZpbGVE
YXRhKTsKLQotICAgICAgICBpZiAoaEZpbmQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoZmluZEZp
bGVEYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IFN0
cmluZyhmaW5kRmlsZURhdGEuY0ZpbGVOYW1lLCB3Y3NsZW4oZmluZEZpbGVEYXRhLmNGaWxlTmFt
ZSkpOwotICAgICAgICAgICAgaWYgKCghZmlsZW5hbWUuc3RhcnRzV2l0aCgibnAiLCBmYWxzZSkg
fHwgIWZpbGVuYW1lLmVuZHNXaXRoKCJkbGwiLCBmYWxzZSkpICYmCi0gICAgICAgICAgICAgICAg
KCFlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIlBsdWdpbi5kbGwiKSB8fCAhaXQtPmVuZHNX
aXRoKCJTaG9ja3dhdmUgMTAiLCBmYWxzZSkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBTdHJpbmcgZnVsbFBhdGggPSAqaXQgKyAiXFwiICsgZmlsZW5hbWU7Ci0g
ICAgICAgICAgICBpZiAoIXVuaXF1ZUZpbGVuYW1lcy5hZGQoZnVsbFBhdGgpLmlzTmV3RW50cnkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHBhdGhzLmFkZChmdWxs
UGF0aCk7Ci0KLSAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5w
ZHNwbGF5LmRsbCIpKQotICAgICAgICAgICAgICAgIG9sZFdNUFBsdWdpblBhdGggPSBmdWxsUGF0
aDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnAt
bXN3bXAuZGxsIikpCi0gICAgICAgICAgICAgICAgbmV3V01QUGx1Z2luUGF0aCA9IGZ1bGxQYXRo
OwotCi0gICAgICAgIH0gd2hpbGUgKEZpbmROZXh0RmlsZVcoaEZpbmQsICZmaW5kRmlsZURhdGEp
ICE9IDApOwotCi0gICAgICAgIEZpbmRDbG9zZShoRmluZCk7Ci0gICAgfQotCi0gICAgYWRkUGx1
Z2luUGF0aHNGcm9tUmVnaXN0cnkoSEtFWV9MT0NBTF9NQUNISU5FLCBwYXRocyk7Ci0gICAgYWRk
UGx1Z2luUGF0aHNGcm9tUmVnaXN0cnkoSEtFWV9DVVJSRU5UX1VTRVIsIHBhdGhzKTsKLQotICAg
IC8vIElmIGJvdGggdGhlIG9sZCBhbmQgbmV3IFdNUCBwbHVnaW4gYXJlIHByZXNlbnQgaW4gdGhl
IHBsdWdpbnMgc2V0LCAKLSAgICAvLyB3ZSByZW1vdmUgdGhlIG9sZCBvbmUgc28gd2UgZG9uJ3Qg
ZW5kIHVwIGNob29zaW5nIHRoZSBvbGQgb25lLgotICAgIGlmICghb2xkV01QUGx1Z2luUGF0aC5p
c0VtcHR5KCkgJiYgIW5ld1dNUFBsdWdpblBhdGguaXNFbXB0eSgpKQotICAgICAgICBwYXRocy5y
ZW1vdmUob2xkV01QUGx1Z2luUGF0aCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVmVjdG9yPGludD4g
cGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYgdmVyc2lvblN0cmluZykKLXsKLSAgICBW
ZWN0b3I8aW50PiB2ZXJzaW9uOwotCi0gICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOwotICAgIHVu
c2lnbmVkIGVuZFBvczsKLSAgICAKLSAgICB3aGlsZSAoc3RhcnRQb3MgPCB2ZXJzaW9uU3RyaW5n
Lmxlbmd0aCgpKSB7Ci0gICAgICAgIGZvciAoZW5kUG9zID0gc3RhcnRQb3M7IGVuZFBvcyA8IHZl
cnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQotICAgICAgICAgICAgaWYgKHZlcnNpb25T
dHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICdfJykKLSAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpbnQgdmVyc2lvbkNvbXBvbmVudCA9IHZl
cnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykudG9JbnQo
KTsKLSAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lvbkNvbXBvbmVudCk7Ci0KLSAgICAgICAg
c3RhcnRQb3MgPSBlbmRQb3MgKyAxOwotICAgIH0KLQotICAgIHJldHVybiB2ZXJzaW9uOwotfQot
Ci0vLyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9u
Qgotc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJzaW9ucyhjb25zdCBWZWN0b3I8aW50PiYg
dmVyc2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQikKLXsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGkgPj0g
dmVyc2lvbkIuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYg
KHZlcnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJzaW9uQltpXSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBjb21lIGhlcmUsIHRoZSB2ZXJzaW9u
cyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25CIGhhcyBhbiBleHRyYSBjb21wb25lbnQs
IGp1c3QgcmV0dXJuIGZhbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgYWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBkaXJlY3Rv
cmllcykKLXsKLSAgICAvLyBFbnVtZXJhdGUgYWxsIE1vemlsbGEgcGx1Z2luIGRpcmVjdG9yaWVz
IGluIHRoZSByZWdpc3RyeQotICAgIEhLRVkga2V5OwotICAgIExPTkcgcmVzdWx0OwotICAgIAot
ICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3
YXJlXFxNb3ppbGxhIiksIDAsIEtFWV9SRUFELCAma2V5KTsKLSAgICBpZiAocmVzdWx0ID09IEVS
Uk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgV0NIQVIgbmFtZVsxMjhdOwotICAgICAgICBGSUxFVElN
RSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAgICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgICAgIERXT1JEIG5hbWVMZW4gPSBzaXpl
b2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOwotICAgICAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtl
eUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQot
ICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uc1BhdGggPSBTdHJpbmcobmFt
ZSwgbmFtZUxlbikgKyAiXFxFeHRlbnNpb25zIjsKLSAgICAgICAgICAgIEhLRVkgZXh0ZW5zaW9u
c0tleTsKLQotICAgICAgICAgICAgLy8gVHJ5IG9wZW5pbmcgdGhlIGtleQotICAgICAgICAgICAg
cmVzdWx0ID0gUmVnT3BlbktleUV4KGtleSwgZXh0ZW5zaW9uc1BhdGguY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKS5kYXRhKCksIDAsIEtFWV9SRUFELCAmZXh0ZW5zaW9uc0tleSk7Ci0K
LSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAg
ICAgIC8vIE5vdyBnZXQgdGhlIHBsdWdpbnMgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgV0NI
QVIgcGx1Z2luc0RpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgICAgICAgICAgICAgIERXT1JE
IHBsdWdpbnNEaXJlY3RvcnlTaXplID0gc2l6ZW9mKHBsdWdpbnNEaXJlY3RvcnlTdHIpOwotICAg
ICAgICAgICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBSZWdR
dWVyeVZhbHVlRXgoZXh0ZW5zaW9uc0tleSwgVEVYVCgiUGx1Z2lucyIpLCAwLCAmdHlwZSwgKExQ
QllURSkmcGx1Z2luc0RpcmVjdG9yeVN0ciwgJnBsdWdpbnNEaXJlY3RvcnlTaXplKTsKLQotICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19T
WikKLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKFN0cmluZyhwbHVnaW5z
RGlyZWN0b3J5U3RyLCBwbHVnaW5zRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7
Ci0KLSAgICAgICAgICAgICAgICBSZWdDbG9zZUtleShleHRlbnNpb25zS2V5KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5E
aXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIC8vIFRoZSBuZXcg
V01QIEZpcmVmb3ggcGx1Z2luIGlzIGluc3RhbGxlZCBpbiBcUEZpbGVzXFBsdWdpbnMgaWYgaXQg
Y2FuJ3QgZmluZCBhbnkgRmlyZWZveCBpbnN0YWxscwotICAgIFdDSEFSIHBsdWdpbkRpcmVjdG9y
eVN0cltfTUFYX1BBVEggKyAxXTsKLSAgICBEV09SRCBwbHVnaW5EaXJlY3RvcnlTaXplID0gOjpF
eHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKFRFWFQoIiVTWVNURU1EUklWRSVcXFBGaWxlc1xcUGx1
Z2lucyIpLCBwbHVnaW5EaXJlY3RvcnlTdHIsIFdURl9BUlJBWV9MRU5HVEgocGx1Z2luRGlyZWN0
b3J5U3RyKSk7Ci0KLSAgICBpZiAocGx1Z2luRGlyZWN0b3J5U2l6ZSA+IDAgJiYgcGx1Z2luRGly
ZWN0b3J5U2l6ZSA8PSBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVjdG9yeVN0cikpCi0gICAg
ICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcocGx1Z2luRGlyZWN0b3J5U3RyLCBwbHVnaW5E
aXJlY3RvcnlTaXplIC0gMSkpOwotCi0gICAgRFdPUkQgdHlwZTsKLSAgICBXQ0hBUiBpbnN0YWxs
YXRpb25EaXJlY3RvcnlTdHJbX01BWF9QQVRIXTsKLSAgICBEV09SRCBpbnN0YWxsYXRpb25EaXJl
Y3RvcnlTaXplID0gc2l6ZW9mKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cik7Ci0KLSAgICBIUkVT
VUxUIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBMIlNvZnR3
YXJlXFxNaWNyb3NvZnRcXE1lZGlhUGxheWVyIiwgTCJJbnN0YWxsYXRpb24gRGlyZWN0b3J5Iiwg
JnR5cGUsICZpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsICZpbnN0YWxsYXRpb25EaXJlY3RvcnlT
aXplKTsKLQotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUyAmJiB0eXBlID09IFJFR19T
WikKLSAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKFN0cmluZyhpbnN0YWxsYXRpb25EaXJlY3Rv
cnlTdHIsIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOwot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkQWRvYmVBY3JvYmF0UGx1Z2luRGlyZWN0b3J5KFZl
Y3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKLXsKLSAgICBIS0VZIGtleTsKLSAgICBIUkVTVUxU
IHJlc3VsdCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJl
XFxBZG9iZVxcQWNyb2JhdCBSZWFkZXIiKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChy
ZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0NIQVIgbmFt
ZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgIFZlY3RvcjxpbnQ+IGxh
dGVzdEFjcm9iYXRWZXJzaW9uOwotICAgIFN0cmluZyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmlu
ZzsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKysp
IHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7
Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwg
MCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVmVjdG9yPGludD4gYWNyb2Jh
dFZlcnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUsIG5hbWVMZW4pKTsKLSAg
ICAgICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhhY3JvYmF0VmVyc2lvbiwgbGF0ZXN0QWNyb2JhdFZl
cnNpb24pKSB7Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvbiA9IGFjcm9iYXRWZXJz
aW9uOwotICAgICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgPSBTdHJpbmcobmFt
ZSwgbmFtZUxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWxhdGVzdEFjcm9iYXRW
ZXJzaW9uU3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIERXT1JEIHR5cGU7Ci0gICAgICAgIFdD
SEFSIGFjcm9iYXRJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOwotICAgICAgICBEV09SRCBhY3Jv
YmF0SW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0YWxsUGF0aFN0cik7Ci0KLSAg
ICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNvZnR3YXJlXFxBZG9iZVxcQWNy
b2JhdCBSZWFkZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyArICJcXEluc3RhbGxQ
YXRoIjsKLSAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJ
TkUsIGFjcm9iYXRQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCku
ZGF0YSgpLCAwLCAmdHlwZSwgYWNyb2JhdEluc3RhbGxQYXRoU3RyLCAmYWNyb2JhdEluc3RhbGxQ
YXRoU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAg
ICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpbkRpcmVjdG9yeSA9IFN0cmluZyhhY3JvYmF0SW5z
dGFsbFBhdGhTdHIsIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkg
KyAiXFxicm93c2VyIjsKLSAgICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChhY3JvYmF0UGx1
Z2luRGlyZWN0b3J5KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZ0Nsb3NlS2V5KGtleSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRKYXZhUGx1Z2luRGlyZWN0b3J5KFZlY3RvcjxT
dHJpbmc+JiBkaXJlY3RvcmllcykKLXsKLSAgICBIS0VZIGtleTsKLSAgICBIUkVTVUxUIHJlc3Vs
dCA9IFJlZ09wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIFRFWFQoIlNvZnR3YXJlXFxKYXZh
U29mdFxcSmF2YSBQbHVnLWluIiksIDAsIEtFWV9SRUFELCAma2V5KTsKLSAgICBpZiAocmVzdWx0
ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFSIG5hbWVbMTI4
XTsKLSAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICBWZWN0b3I8aW50PiBsYXRlc3RK
YXZhVmVyc2lvbjsKLSAgICBTdHJpbmcgbGF0ZXN0SmF2YVZlcnNpb25TdHJpbmc7Ci0KLSAgICAv
LyBFbnVtZXJhdGUgc3Via2V5cwotICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAg
IERXT1JEIG5hbWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOwotICAgICAgICBy
ZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZs
YXN0TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFZlY3RvcjxpbnQ+IGphdmFWZXJzaW9uID0gcGFy
c2VWZXJzaW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7Ci0gICAgICAgIGlmIChjb21w
YXJlVmVyc2lvbnMoamF2YVZlcnNpb24sIGxhdGVzdEphdmFWZXJzaW9uKSkgewotICAgICAgICAg
ICAgbGF0ZXN0SmF2YVZlcnNpb24gPSBqYXZhVmVyc2lvbjsKLSAgICAgICAgICAgIGxhdGVzdEph
dmFWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCFsYXRlc3RKYXZhVmVyc2lvblN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgRFdPUkQgdHlwZTsKLSAgICAgICAgV0NIQVIgamF2YUluc3RhbGxQYXRoU3RyW19NQVhfUEFU
SF07Ci0gICAgICAgIERXT1JEIGphdmFJbnN0YWxsUGF0aFNpemUgPSBzaXplb2YoamF2YUluc3Rh
bGxQYXRoU3RyKTsKLSAgICAgICAgRFdPUkQgdXNlTmV3UGx1Z2luVmFsdWU7Ci0gICAgICAgIERX
T1JEIHVzZU5ld1BsdWdpblNpemU7Ci0KLSAgICAgICAgU3RyaW5nIGphdmFQbHVnaW5LZXlQYXRo
ID0gIlNvZnR3YXJlXFxKYXZhU29mdFxcSmF2YSBQbHVnLWluXFwiICsgbGF0ZXN0SmF2YVZlcnNp
b25TdHJpbmc7Ci0gICAgICAgIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9N
QUNISU5FLCBqYXZhUGx1Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LmRhdGEoKSwgTCJVc2VOZXdKYXZhUGx1Z2luIiwgJnR5cGUsICZ1c2VOZXdQbHVnaW5WYWx1ZSwg
JnVzZU5ld1BsdWdpblNpemUpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VT
UyAmJiB1c2VOZXdQbHVnaW5WYWx1ZSA9PSAxKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBnZXRS
ZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgamF2YVBsdWdpbktleVBhdGguY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEwiSmF2YUhvbWUiLCAmdHlwZSwgamF2
YUluc3RhbGxQYXRoU3RyLCAmamF2YUluc3RhbGxQYXRoU2l6ZSk7Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgamF2YVBs
dWdpbkRpcmVjdG9yeSA9IFN0cmluZyhqYXZhSW5zdGFsbFBhdGhTdHIsIGphdmFJbnN0YWxsUGF0
aFNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkgKyAiXFxiaW5cXG5ld19wbHVnaW4iOwotICAgICAg
ICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChqYXZhUGx1Z2luRGlyZWN0b3J5KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZ0Nsb3NlS2V5KGtleSk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgU3RyaW5nIHNhZmFyaVBsdWdpbnNEaXJlY3RvcnkoKQotewotICAgIFdD
SEFSIG1vZHVsZUZpbGVOYW1lU3RyW19NQVhfUEFUSF07Ci0gICAgc3RhdGljIFN0cmluZyBwbHVn
aW5zRGlyZWN0b3J5OwotICAgIHN0YXRpYyBib29sIGNhY2hlZFBsdWdpbkRpcmVjdG9yeSA9IGZh
bHNlOwotCi0gICAgaWYgKCFjYWNoZWRQbHVnaW5EaXJlY3RvcnkpIHsKLSAgICAgICAgY2FjaGVk
UGx1Z2luRGlyZWN0b3J5ID0gdHJ1ZTsKLQotICAgICAgICBpbnQgbW9kdWxlRmlsZU5hbWVMZW4g
PSBHZXRNb2R1bGVGaWxlTmFtZSgwLCBtb2R1bGVGaWxlTmFtZVN0ciwgX01BWF9QQVRIKTsKLQot
ICAgICAgICBpZiAoIW1vZHVsZUZpbGVOYW1lTGVuIHx8IG1vZHVsZUZpbGVOYW1lTGVuID09IF9N
QVhfUEFUSCkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBpZiAoIVBhdGhSZW1v
dmVGaWxlU3BlYyhtb2R1bGVGaWxlTmFtZVN0cikpCi0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0K
LSAgICAgICAgcGx1Z2luc0RpcmVjdG9yeSA9IFN0cmluZyhtb2R1bGVGaWxlTmFtZVN0cikgKyAi
XFxQbHVnaW5zIjsKLSAgICB9Ci1leGl0OgotICAgIHJldHVybiBwbHVnaW5zRGlyZWN0b3J5Owot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkTWFjcm9tZWRpYVBsdWdpbkRpcmVjdG9yaWVzKFZl
Y3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKLXsKLSAgICBXQ0hBUiBzeXN0ZW1EaXJlY3RvcnlT
dHJbTUFYX1BBVEhdOwotCi0gICAgaWYgKCFHZXRTeXN0ZW1EaXJlY3Rvcnkoc3lzdGVtRGlyZWN0
b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHN5c3RlbURpcmVjdG9yeVN0cikpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBXQ0hBUiBtYWNyb21lZGlhRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKLQot
ICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0
ciwgVEVYVCgibWFjcm9tZWRcXEZsYXNoIikpOwotICAgIGRpcmVjdG9yaWVzLmFwcGVuZChtYWNy
b21lZGlhRGlyZWN0b3J5U3RyKTsKLQotICAgIFBhdGhDb21iaW5lKG1hY3JvbWVkaWFEaXJlY3Rv
cnlTdHIsIHN5c3RlbURpcmVjdG9yeVN0ciwgVEVYVCgibWFjcm9tZWRcXFNob2Nrd2F2ZSAxMCIp
KTsKLSAgICBkaXJlY3Rvcmllcy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7Ci19Ci0K
LVZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMo
KQotewotICAgIFZlY3RvcjxTdHJpbmc+IGRpcmVjdG9yaWVzOwotICAgIFN0cmluZyBvdXJEaXJl
Y3RvcnkgPSBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCk7Ci0KLSAgICBpZiAoIW91ckRpcmVjdG9y
eS5pc051bGwoKSkKLSAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKG91ckRpcmVjdG9yeSk7Ci0g
ICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luRGlyZWN0b3J5KGRpcmVjdG9yaWVzKTsKLSAgICBhZGRN
b3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMpOwotICAgIGFkZFdpbmRvd3NNZWRp
YVBsYXllclBsdWdpbkRpcmVjdG9yeShkaXJlY3Rvcmllcyk7Ci0gICAgYWRkTWFjcm9tZWRpYVBs
dWdpbkRpcmVjdG9yaWVzKGRpcmVjdG9yaWVzKTsKLQotICAgIHJldHVybiBkaXJlY3RvcmllczsK
LX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBkaXJlY3RvcnkpCi17Ci0gICAgU3RyaW5nIG91ckRpcmVjdG9yeSA9IHNhZmFy
aVBsdWdpbnNEaXJlY3RvcnkoKTsKLQotICAgIGlmICghb3VyRGlyZWN0b3J5LmlzTnVsbCgpICYm
ICFkaXJlY3RvcnkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBvdXJEaXJlY3RvcnkgPT0gZGly
ZWN0b3J5OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTNjMzE1YzIwMTg0Mzk0ZjNiNDA2NGEzZjU0NDc1
NzNlZDJjZjA5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIgotCi0jaW5jbHVkZSAiUGx1
Z2luVmlldy5oIgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotLy8gU2V0IGEgdGltZXIgdG8gbWFrZSBzdXJlIHdlIHByb2Nlc3MgYW55IHF1ZXVlZCBt
ZXNzYWdlcyBhdCBsZWFzdCBldmVyeSAxNm1zLgotLy8gVGhpcyB2YWx1ZSBhbGxvd3MgRmxhc2gg
NjAgbWVzc2FnZXMvc2Vjb25kLCB3aGljaCBzaG91bGQgYmUgZW5vdWdoIGZvciB2aWRlbwotLy8g
cGxheWJhY2ssIGFuZCBhbHNvIGdldHMgdXMgb3ZlciB0aGUgbGltaXQgZm9yIGtpY2tpbmcgaW50
byBoaWdoLXJlc29sdXRpb24KLS8vIHRpbWVyIG1vZGUgKHNlZSBTaGFyZWRUaW1lcldpbi5jcHAp
Lgotc3RhdGljIGNvbnN0IGRvdWJsZSBNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwgPSAwLjAx
NjsKLQotLy8gRHVyaW5nIGEgY29udGludW91cyBzdHJlYW0gb2YgbWVzc2FnZXMsIHByb2Nlc3Mg
b25lIGV2ZXJ5IDVtcy4KLXN0YXRpYyBjb25zdCBkb3VibGUgTWVzc2FnZURpcmVjdFByb2Nlc3Np
bmdJbnRlcnZhbCA9IDAuMDA1OwotCi1QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjpQbHVnaW5N
ZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZpZXcqIHBsdWdpblZpZXcpCi0gICAgOiBtX3BsdWdp
blZpZXcocGx1Z2luVmlldykKLSAgICAsIG1fYmFjaygwKQotICAgICwgbV9mcm9udCgwKQotICAg
ICwgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcigqdGhpcywgJlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW46Om1lc3NhZ2VUaHJvdHRsZVRpbWVyRmlyZWQpCi0gICAgLCBtX2xhc3RNZXNzYWdlVGltZSgw
KQotewotICAgIC8vIEluaXRpYWxpemUgdGhlIGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUgbWVz
c2FnZXMKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtSW5saW5lTWVzc2FnZXMgLSAx
OyBpKyspCi0gICAgICAgIG1faW5saW5lTWVzc2FnZXNbaV0ubmV4dCA9ICZtX2lubGluZU1lc3Nh
Z2VzW2kgKyAxXTsKLSAgICBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV0u
bmV4dCA9IDA7Ci0gICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1sw
XTsKLX0KLQotUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6flBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW4oKQotewotICAgIFBsdWdpbk1lc3NhZ2UqIG5leHQ7Ci0KLSAgICBmb3IgKFBsdWdpbk1l
c3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgewotICAg
ICAgICBuZXh0ID0gbWVzc2FnZS0+bmV4dDsKLSAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7
Ci0gICAgfQotfQotCi12b2lkIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3Nh
Z2UoSFdORCBoV25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsK
LSAgICBQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7Ci0KLSAgICBt
ZXNzYWdlLT5oV25kID0gaFduZDsKLSAgICBtZXNzYWdlLT5tc2cgPSBtc2c7Ci0gICAgbWVzc2Fn
ZS0+d1BhcmFtID0gd1BhcmFtOwotICAgIG1lc3NhZ2UtPmxQYXJhbSA9IGxQYXJhbTsKLSAgICBt
ZXNzYWdlLT5uZXh0ID0gMDsKLQotICAgIGlmIChtX2JhY2spCi0gICAgICAgIG1fYmFjay0+bmV4
dCA9IG1lc3NhZ2U7Ci0gICAgbV9iYWNrID0gbWVzc2FnZTsKLSAgICBpZiAoIW1fZnJvbnQpCi0g
ICAgICAgIG1fZnJvbnQgPSBtZXNzYWdlOwotCi0gICAgLy8gSWYgaXQgaGFzIGJlZW4gbW9yZSB0
aGFuIE1lc3NhZ2VEaXJlY3RQcm9jZXNzaW5nSW50ZXJ2YWwgYmV0d2VlbiB0aHJvdHRsZWQgbWVz
c2FnZXMsCi0gICAgLy8gZ28gYWhlYWQgYW5kIHByb2Nlc3MgYSBtZXNzYWdlIGRpcmVjdGx5Lgot
ICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwot
ICAgIGlmIChjdXJyZW50VGltZSAtIG1fbGFzdE1lc3NhZ2VUaW1lID4gTWVzc2FnZURpcmVjdFBy
b2Nlc3NpbmdJbnRlcnZhbCkgewotICAgICAgICBwcm9jZXNzUXVldWVkTWVzc2FnZSgpOwotICAg
ICAgICBtX2xhc3RNZXNzYWdlVGltZSA9IGN1cnJlbnRUaW1lOwotICAgICAgICBpZiAoIW1fZnJv
bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX21lc3NhZ2VUaHJv
dHRsZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3Rh
cnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgUGx1Z2lu
TWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKQotewotICAgIFBsdWdp
bk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OwotICAgIG1fZnJvbnQgPSBtX2Zyb250LT5uZXh0
OwotICAgIGlmIChtZXNzYWdlID09IG1fYmFjaykKLSAgICAgICAgbV9iYWNrID0gMDsKLQotICAg
IC8vIFByb3RlY3QgdGhlIFBsdWdpblZpZXcgZnJvbSBkZXN0cnVjdGlvbiB3aGlsZSBjYWxsaW5n
IGl0cyB3aW5kb3cgcHJvYy4KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vNjkzMDI4MD4KLSAgICBS
ZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdChtX3BsdWdpblZpZXcpOwotICAgIDo6Q2FsbFdpbmRv
d1Byb2MobV9wbHVnaW5WaWV3LT5wbHVnaW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3Nh
Z2UtPm1zZywgbWVzc2FnZS0+d1BhcmFtLCBtZXNzYWdlLT5sUGFyYW0pOwotCi0gICAgZnJlZU1l
c3NhZ2UobWVzc2FnZSk7Ci19Ci0KLXZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6bWVz
c2FnZVRocm90dGxlVGltZXJGaXJlZCgpCi17Ci0gICAgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsK
LQotICAgIGlmIChtX2Zyb250KQotICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0
T25lU2hvdChNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwpOwotfQotCi1QbHVnaW5NZXNzYWdl
KiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UoKQotewotICAgIFBs
dWdpbk1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgICBpZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsK
LSAgICAgICAgbWVzc2FnZSA9IG1fZnJlZUlubGluZU1lc3NhZ2VzOwotICAgICAgICBtX2ZyZWVJ
bmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2UtPm5leHQ7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1lc3Nh
Z2UgPSBuZXcgUGx1Z2luTWVzc2FnZTsKLQotICAgIHJldHVybiBtZXNzYWdlOwotfQotCi1ib29s
IFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdl
KiBtZXNzYWdlKQotewotICAgIHJldHVybiBtZXNzYWdlID49ICZtX2lubGluZU1lc3NhZ2VzWzBd
ICYmIG1lc3NhZ2UgPD0gJm1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXTsK
LX0KLQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjpmcmVlTWVzc2FnZShQbHVnaW5N
ZXNzYWdlKiBtZXNzYWdlKQotewotICAgIGlmIChpc0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsK
LSAgICAgICAgbWVzc2FnZS0+bmV4dCA9IG1fZnJlZUlubGluZU1lc3NhZ2VzOwotICAgICAgICBt
X2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRlbGV0
ZSBtZXNzYWdlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNTEwMzA4MzZkM2EzZTkyNzdhNjBkNTdhZDYzN2M1
YWZmMWRhYzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCisr
KyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbl9oCi0jZGVmaW5lIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faAotCi0jaW5j
bHVkZSAiVGltZXIuaCIKLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIGNsYXNzIFBsdWdpblZpZXc7Ci0KLSAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSB7
Ci0gICAgICAgIEhXTkQgaFduZDsKLSAgICAgICAgVUlOVCBtc2c7Ci0gICAgICAgIFdQQVJBTSB3
UGFyYW07Ci0gICAgICAgIExQQVJBTSBsUGFyYW07Ci0KLSAgICAgICAgc3RydWN0IFBsdWdpbk1l
c3NhZ2UqIG5leHQ7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbihQbHVn
aW5WaWV3Kik7Ci0gICAgICAgIH5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKCk7Ci0KLSAgICAg
ICAgdm9pZCBhcHBlbmRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBXUEFSQU0sIExQQVJBTSk7Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHByb2Nlc3NRdWV1ZWRNZXNzYWdlKCk7Ci0gICAg
ICAgIHZvaWQgbWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCgpOwotICAgICAgICBQbHVnaW5NZXNz
YWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKTsKLSAgICAgICAgYm9vbCBpc0lubGluZU1lc3NhZ2UoUGx1
Z2luTWVzc2FnZSogbWVzc2FnZSk7Ci0gICAgICAgIHZvaWQgZnJlZU1lc3NhZ2UoUGx1Z2luTWVz
c2FnZSogbWVzc2FnZSk7Ci0KLSAgICAgICAgUGx1Z2luVmlldyogbV9wbHVnaW5WaWV3OwotICAg
ICAgICBQbHVnaW5NZXNzYWdlKiBtX2JhY2s7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJv
bnQ7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBOdW1JbmxpbmVNZXNzYWdlcyA9IDQ7Ci0g
ICAgICAgIFBsdWdpbk1lc3NhZ2UgbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlc107
Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlubGluZU1lc3NhZ2VzOwotCi0gICAgICAg
IFRpbWVyIG1fbWVzc2FnZVRocm90dGxlVGltZXI7Ci0gICAgICAgIGRvdWJsZSBtX2xhc3RNZXNz
YWdlVGltZTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4
NTI1N2Q2MjI5MjcyMDkxOGE1MWEzNmQ4MjdkOGNjZDJkNDE5YzEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luUGFja2FnZVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLQot
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5o
IgotI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRl
ICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
c2hsd2FwaS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0VmVy
c2lvbkluZm8oY29uc3QgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5nJiBpbmZv
KQotewotICAgIExQVk9JRCBidWZmZXI7Ci0gICAgVUlOVCBidWZmZXJMZW5ndGg7Ci0gICAgU3Ry
aW5nIHN1YkluZm8gPSAiXFxTdHJpbmdmaWxlSW5mb1xcMDQwOTA0RTRcXCIgKyBpbmZvOwotICAg
IGJvb2wgcmV0dmFsID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbkluZm9EYXRhLAotICAgICAgICBj
b25zdF9jYXN0PFVDaGFyKj4oc3ViSW5mby5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LmRhdGEoKSksCi0gICAgICAgICZidWZmZXIsICZidWZmZXJMZW5ndGgpOwotICAgIGlmICghcmV0
dmFsIHx8IGJ1ZmZlckxlbmd0aCA9PSAwKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAg
ICAvLyBTdWJ0cmFjdCAxIGZyb20gdGhlIGxlbmd0aDsgd2UgZG9uJ3Qgd2FudCB0aGUgdHJhaWxp
bmcgbnVsbCBjaGFyYWN0ZXIuCi0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PFVD
aGFyKj4oYnVmZmVyKSwgYnVmZmVyTGVuZ3RoIC0gMSk7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2Fn
ZTo6aXNQbHVnaW5CbGFja2xpc3RlZCgpCi17Ci0gICAgaWYgKG5hbWUoKSA9PSAiQ2l0cml4IElD
QSBDbGllbnQiKSB7Ci0gICAgICAgIC8vIFRoZSBDaXRyaXggSUNBIENsaWVudCBwbHVnLWluIHJl
cXVpcmVzIGEgTW96aWxsYS1iYXNlZCBicm93c2VyOyBzZWUgPHJkYXI6Ly82NDE4NjgxPi4KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUoKSA9PSAiU2lsdmVybGln
aHQgUGx1Zy1JbiIpIHsKLSAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly81NTU3Mzc5
PiBDcmFzaCBpbiBTaWx2ZXJsaWdodCB3aGVuIG9wZW5pbmcgbWljcm9zb2Z0LmNvbS4KLSAgICAg
ICAgLy8gdGhlIGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBTaWx2ZXJsaWdodCBkb2VzIG5vdCByZXBy
b2R1Y2UgdGhpcyBjcmFzaCwgc28gYWxsb3cgaXQKLSAgICAgICAgLy8gYW5kIGFueSBuZXdlciB2
ZXJzaW9ucwotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHNsUGx1
Z2luTWluUmVxdWlyZWQoMHg1MUJFMDAwMCwgMHgwMDAxMDAwMCk7Ci0KLSAgICAgICAgaWYgKGNv
bXBhcmVGaWxlVmVyc2lvbihzbFBsdWdpbk1pblJlcXVpcmVkKSA8IDApCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVOYW1lKCks
ICJucG1vemF4LmRsbCIpKSB7Ci0gICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxsYSBBY3RpdmVY
IGNvbnRyb2wgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5kbGwKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlTmFtZSgp
LCAibnB3cGYuZGxsIikpIHsKLSAgICAgICAgLy8gQnVnIDU3MTE5OiBNaWNyb3NvZnQgV2luZG93
cyBQcmVzZW50YXRpb24gRm91bmRhdGlvbiAoV1BGKSBwbHVnLWluIGNvbXBsYWlucyBhYm91dCBt
aXNzaW5nIHhwY29tLmRsbAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKG5h
bWUoKSA9PSAiWWFob28gQXBwbGljYXRpb24gU3RhdGUgUGx1Z2luIikgewotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY4NjAKLSAgICAgICAgLy8g
QnVnIGluIFlhaG9vIEFwcGxpY2F0aW9uIFN0YXRlIHBsdWctaW4gZWFybGllciB0aGFuIDEuMC4w
LjYgbGVhZHMgdG8gaGVhcCBjb3JydXB0aW9uLiAKLSAgICAgICAgc3RhdGljIGNvbnN0IFBsYXRm
b3JtTW9kdWxlVmVyc2lvbiB5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVxdWlyZWQoMHgwMDAwMDAw
NiwgMHgwMDAxMDAwMCk7Ci0gICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oeWFob29BcHBT
dGF0ZVBsdWdpbk1pblJlcXVpcmVkKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJt
aW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBlID09
ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBmbGFzaFRlblZlcnNpb24oMHgwMDAwMDAwMCwgMHgwMDBh
MDAwMCk7Ci0KLSAgICAgICAgLy8gUHJlIDEwIEZsYXNoIG9ubHkgcmVxdWVzdHMgd2luZG93bGVz
cyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAotICAgICAgICBpZiAo
Y29tcGFyZUZpbGVWZXJzaW9uKGZsYXNoVGVuVmVyc2lvbikgPCAwKQotICAgICAgICAgICAgbV9x
dWlya3MuYWRkKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKLQotICAgICAgICBt
X3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOwotICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyk7Ci0gICAg
ICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsKLSAgICB9Ci0K
LSAgICBpZiAobmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBuYW1lKCkuY29udGFpbnMo
IldpbmRvd3MgTWVkaWEiKSkgewotICAgICAgICAvLyBUaGUgV01QIHBsdWdpbiBzZXRzIGl0cyBz
aXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRz
IHNpemUsIHNvCi0gICAgICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3
IGhhcyBhIGNvcnJlY3Qgc2l6ZQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZl
ckZpcnN0U2V0V2luZG93Q2FsbCk7Ci0KLSAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRvZXMg
bm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhhdCBw
YXJhbWV0ZXIgCi0gICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWluLgot
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJh
bSk7Ci0KLSAgICAgICAgLy8gV01QIGhhcyBhIG1vZGFsIG1lc3NhZ2UgbG9vcCB0aGF0IGl0IGVu
dGVycyB3aGVuZXZlciB3ZSBjYWxsIGl0IG9yCi0gICAgICAgIC8vIGFzayBpdCB0byBwYWludC4g
VGhpcyBtb2RhbCBsb29wIGNhbiBkZWxpdmVyIG1lc3NhZ2VzIHRvIG90aGVyCi0gICAgICAgIC8v
IHdpbmRvd3MgaW4gV2ViS2l0IGF0IHRpbWVzIHdoZW4gdGhleSBhcmUgbm90IGV4cGVjdGluZyB0
aGVtIChmb3IKLSAgICAgICAgLy8gZXhhbXBsZSwgZGVsaXZlcmluZyBhIFdNX1BBSU5UIG1lc3Nh
Z2UgZHVyaW5nIGEgbGF5b3V0KSwgYW5kIHRoZXNlCi0gICAgICAgIC8vIGNhbiBjYXVzZSBjcmFz
aGVzLgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3NhZ2VMb29w
KTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSgpID09ICJWTEMgTXVsdGltZWRpYSBQbHVnaW4iIHx8
IG5hbWUoKSA9PSAiVkxDIE11bHRpbWVkaWEgUGx1Zy1pbiIpIHsKLSAgICAgICAgLy8gVkxDIGhh
bmdzIG9uIE5QUF9EZXN0cm95IGlmIHdlIGNhbGwgTlBQX1NldFdpbmRvdyB3aXRoIGEgbnVsbCB3
aW5kb3cgaGFuZGxlCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRTZXROdWxs
V2luZG93SGFuZGxlT25EZXN0cm95KTsKLQotICAgICAgICAvLyBWTEMgMC44LjZkIGFuZCAwLjgu
NmUgY3Jhc2ggaWYgbXVsdGlwbGUgaW5zdGFuY2VzIGFyZSBjcmVhdGVkLgotICAgICAgICAvLyA8
cmRhcjovL3Byb2JsZW0vNTc3MzA3MD4gdHJhY2tzIGFsbG93aW5nIG11bHRpcGxlIGluc3RhbmNl
cyB3aGVuIHRoaXMKLSAgICAgICAgLy8gYnVnIGlzIGZpeGVkLgotICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgfQotCi0gICAg
Ly8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5k
b3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KLSAgICAvLyBjYWxsIFNldFdp
bmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKLSAgICBpZiAobWlt
ZVR5cGUgPT0gInZpZGVvL2RpdngiKQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtE
ZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmth
cm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJpbmRpbmdzOyBpZiBhIHBsdWct
aW4gY3JlYXRlcyBhbgotICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNzZXMgaXQgdG8gYSBmdW5jdGlv
biBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9iamVjdCB0aGF0IE5QT2JqZWN0
IGJlbG9uZ3MgdG8uCi0gICAgLy8gVGh1cywgd2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBvYmplY3Qg
c2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4gaW5zdGFuY2UgZ29lcyBhd2F5
LgotICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4uCi0gICAgaWYgKG1pbWVUeXBl
ID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKLSAgICAgICAgbV9xdWlya3MuYWRkKFBs
dWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6
aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7Ci0gICAgICAgIC8vIEJlY2F1c2UgYSBz
aW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCBy
ZWxpYWJseSB1bmxvYWQgYQotICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRo
ZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KLSAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICAg
ICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1c2Vz
IGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcwotICAgICAgICAvLyB3aXRoIHRoZSBKYXZh
IHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJv
UmVjdFdoZW5TY3JvbGxpbmcpOwotICAgIH0KLQotICAgIGlmIChtaW1lVHlwZSA9PSAiYXVkaW8v
eC1wbi1yZWFsYXVkaW8tcGx1Z2luIikgewotICAgICAgICAvLyBQcmV2ZW50IHRoZSBSZWFsIHBs
dWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5LCBjYXVzaW5nIHRo
ZSBzdGFjayB0byBvdmVyZmxvdy4KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9u
dENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSk7Ci0KLSAgICAgICAgc3RhdGlj
IGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBsYXN0S25vd25VbmxvYWRhYmxlUmVhbFBsYXll
clZlcnNpb24oMHgwMDBCMEIyNCwgMHgwMDA2MDAwMCk7Ci0KLSAgICAgICAgLy8gVW5sb2FkaW5n
IFJlYWxQbGF5ZXIgdmVyc2lvbnMgbmV3ZXIgdGhhbiAxMC41IGNhbiBjYXVzZSBhIGhhbmc7IHNl
ZSByZGFyOi8vNTY2OTMxNy4KLSAgICAgICAgLy8gRklYTUU6IFJlc3VtZSB1bmxvYWRpbmcgd2hl
biB0aGlzIGJ1ZyBpbiB0aGUgUmVhbFBsYXllciBQbHVnLUluIGlzIGZpeGVkIChyZGFyOi8vNTcx
MzE0NykKLSAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihsYXN0S25vd25VbmxvYWRhYmxl
UmVhbFBsYXllclZlcnNpb24pID4gMCkKLSAgICAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya0RvbnRVbmxvYWRQbHVnaW4pOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpm
ZXRjaEluZm8oKQotewotICAgIERXT1JEIHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKLSAg
ICB2ZXJzaW9uSW5mb1NpemUgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhjb25zdF9jYXN0PFVD
aGFyKj4obV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwgJnpl
cm9IYW5kbGUpOwotICAgIGlmICh2ZXJzaW9uSW5mb1NpemUgPT0gMCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byB2ZXJzaW9uSW5mb0RhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPGNo
YXJbXT4odmVyc2lvbkluZm9TaXplKTsKLQotICAgIGlmICghR2V0RmlsZVZlcnNpb25JbmZvVyhj
b25zdF9jYXN0PFVDaGFyKj4obV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCku
ZGF0YSgpKSwKLSAgICAgICAgICAgIDAsIHZlcnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRh
LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9uYW1lID0gZ2V0VmVyc2lv
bkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiUHJvZHVjdE5hbWUiKTsKLSAgICBtX2Rlc2Ny
aXB0aW9uID0gZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZURlc2Ny
aXB0aW9uIik7Ci0gICAgaWYgKG1fbmFtZS5pc051bGwoKSB8fCBtX2Rlc2NyaXB0aW9uLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWU19GSVhFREZJTEVJTkZPKiBpbmZv
OwotICAgIFVJTlQgaW5mb1NpemU7Ci0gICAgaWYgKCFWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5m
b0RhdGEuZ2V0KCksIEwiXFwiLCAoTFBWT0lEKikgJmluZm8sICZpbmZvU2l6ZSkgfHwgaW5mb1Np
emUgPCBzaXplb2YoVlNfRklYRURGSUxFSU5GTykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX21vZHVsZVZlcnNpb24ubGVhc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTFM7Ci0gICAg
bV9tb2R1bGVWZXJzaW9uLm1vc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTVM7Ci0KLSAgICBp
ZiAoaXNQbHVnaW5CbGFja2xpc3RlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBW
ZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEu
Z2V0KCksICJNSU1FVHlwZSIpLnNwbGl0KCd8JywgdHlwZXMpOwotICAgIFZlY3RvcjxTdHJpbmc+
IGV4dGVuc2lvbkxpc3RzOwotICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQo
KSwgIkZpbGVFeHRlbnRzIikuc3BsaXQoJ3wnLCBleHRlbnNpb25MaXN0cyk7Ci0gICAgVmVjdG9y
PFN0cmluZz4gZGVzY3JpcHRpb25zOwotICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0
YS5nZXQoKSwgIkZpbGVPcGVuTmFtZSIpLnNwbGl0KCd8JywgZGVzY3JpcHRpb25zKTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7IGkrKykgewotICAgICAgICBT
dHJpbmcgdHlwZSA9IHR5cGVzW2ldLmxvd2VyKCk7Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlv
biA9IGkgPCBkZXNjcmlwdGlvbnMuc2l6ZSgpID8gZGVzY3JpcHRpb25zW2ldIDogIiI7Ci0gICAg
ICAgIFN0cmluZyBleHRlbnNpb25MaXN0ID0gaSA8IGV4dGVuc2lvbkxpc3RzLnNpemUoKSA/IGV4
dGVuc2lvbkxpc3RzW2ldIDogIiI7Ci0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9u
c1ZlY3RvcjsKLSAgICAgICAgZXh0ZW5zaW9uTGlzdC5zcGxpdCgnLCcsIGV4dGVuc2lvbnNWZWN0
b3IpOwotCi0gICAgICAgIC8vIEdldCByaWQgb2YgdGhlIGV4dGVuc2lvbiBsaXN0IHRoYXQgbWF5
IGJlIGF0IHRoZSBlbmQgb2YgdGhlIGRlc2NyaXB0aW9uIHN0cmluZy4KLSAgICAgICAgaW50IHBv
cyA9IGRlc2NyaXB0aW9uLmZpbmQoIigqIik7Ci0gICAgICAgIGlmIChwb3MgIT0gLTEpIHsKLSAg
ICAgICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGEgc3BhY2UgdGhhdCB3ZSBuZWVkIHRvIGdldCBy
aWQgb2YuCi0gICAgICAgICAgICBpZiAocG9zID4gMSAmJiBkZXNjcmlwdGlvbltwb3MgLSAxXSA9
PSAnICcpCi0gICAgICAgICAgICAgICAgcG9zLS07Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9
IGRlc2NyaXB0aW9uLmxlZnQocG9zKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERldGVybWlu
ZSB0aGUgcXVpcmtzIGZvciB0aGUgTUlNRSB0eXBlcyB0aGlzIHBsdWctaW4gc3VwcG9ydHMKLSAg
ICAgICAgZGV0ZXJtaW5lUXVpcmtzKHR5cGUpOwotCi0gICAgICAgIG1fbWltZVRvRXh0ZW5zaW9u
cy5hZGQodHlwZSwgZXh0ZW5zaW9uc1ZlY3Rvcik7Ci0gICAgICAgIG1fbWltZVRvRGVzY3JpcHRp
b25zLmFkZCh0eXBlLCBkZXNjcmlwdGlvbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCi17Ci0gICAgaWYgKG1fZnJlZUxpYnJhcnlU
aW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIEFTU0VSVChtX21vZHVsZSk7Ci0gICAgICAgIG1f
ZnJlZUxpYnJhcnlUaW1lci5zdG9wKCk7Ci0gICAgfSBlbHNlIGlmIChtX2lzTG9hZGVkKSB7Ci0g
ICAgICAgIGlmIChtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxl
SW5zdGFuY2VzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9sb2FkQ291
bnQrKzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgV0NIQVIg
Y3VycmVudFBhdGhbTUFYX1BBVEhdOwotCi0gICAgICAgIGlmICghOjpHZXRDdXJyZW50RGlyZWN0
b3J5VyhNQVhfUEFUSCwgY3VycmVudFBhdGgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIFN0cmluZyBwYXRoID0gbV9wYXRoLnN1YnN0cmluZygwLCBtX3BhdGgucmV2ZXJz
ZUZpbmQoJ1xcJykpOwotCi0gICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRo
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAvLyBMb2FkIHRoZSBsaWJyYXJ5Ci0gICAgICAgIG1fbW9k
dWxlID0gOjpMb2FkTGlicmFyeUV4VyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKS5kYXRhKCksIDAsIExPQURfV0lUSF9BTFRFUkVEX1NFQVJDSF9QQVRIKTsKLQotICAgICAg
ICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcoY3VycmVudFBhdGgpKSB7Ci0gICAgICAgICAg
ICBpZiAobV9tb2R1bGUpCi0gICAgICAgICAgICAgICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IW1fbW9kdWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2lzTG9hZGVkID0gdHJ1
ZTsKLQotICAgIE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0ciBOUF9HZXRFbnRyeVBvaW50cyA9IDA7
Ci0gICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7Ci0gICAgTlBFcnJv
ciBucEVycjsKLQotICAgIE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0
UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7Ci0gICAgTlBfR2V0RW50cnlQ
b2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxl
LCAiTlBfR2V0RW50cnlQb2ludHMiKTsKLSAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRv
d25Qcm9jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKLQotICAg
IGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIW1fTlBQX1NodXRk
b3duKQotICAgICAgICBnb3RvIGFib3J0OwotCi0gICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAw
LCBzaXplb2YobV9wbHVnaW5GdW5jcykpOwotICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVv
ZihtX3BsdWdpbkZ1bmNzKTsKLQotICAgIG5wRXJyID0gTlBfR2V0RW50cnlQb2ludHMoJm1fcGx1
Z2luRnVuY3MpOwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLSAgICBpZiAobnBFcnIgIT0gTlBF
UlJfTk9fRVJST1IpCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBpbml0aWFsaXplQnJvd3Nl
ckZ1bmNzKCk7Ci0KLSAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsK
LSAgICBMT0dfTlBFUlJPUihucEVycik7Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJS
T1IpCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBtX2xvYWRDb3VudCsrOwotICAgIHJldHVy
biB0cnVlOwotCi1hYm9ydDoKLSAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAoteyAK
LSAgICBjb25zdCB1bnNpZ25lZCBoYXNoQ29kZXNbXSA9IHsKLSAgICAgICAgbV9uYW1lLmltcGwo
KS0+aGFzaCgpLAotICAgICAgICBtX2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLAotICAgICAg
ICBtX21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgpCi0gICAgfTsKLQotICAgIHJldHVybiBTdHJpbmdI
YXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7Ci19Ci0KLWJv
b2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1
Z2luUGFja2FnZSYgYikKLXsKLSAgICBpZiAoYS5tX25hbWUgIT0gYi5tX25hbWUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLm1fZGVzY3JpcHRpb24gIT0gYi5tX2Rlc2NyaXB0
aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYS5tX21pbWVUb0V4dGVuc2lv
bnMuc2l6ZSgpICE9IGIubV9taW1lVG9FeHRlbnNpb25zLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMg
ZW5kID0gYS5tX21pbWVUb0V4dGVuc2lvbnMuZW5kKCkua2V5cygpOwotICAgIGZvciAoTUlNRVRv
RXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBhLm1fbWltZVRvRXh0ZW5z
aW9ucy5iZWdpbigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghYi5t
X21pbWVUb0V4dGVuc2lvbnMuY29udGFpbnMoKml0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdWludDE2X3QgUGx1Z2luUGFja2Fn
ZTo6TlBWZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gTlBfVkVSU0lPTl9NSU5PUjsKLX0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MjEyYmEyNDlmNDc3ZTAzNjkxOGVjMjYxMzI4ZTc2
ZjdkZjlmODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJCcmlkZ2VKU0MuaCIKLSNpbmNs
dWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5o
IgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgotI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgotI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCi0jaW5jbHVkZSAiSG9zdFdp
bmRvdy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0j
aW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5j
bHVkZSAiTG9jYWxXaW5kb3dzQ29udGV4dC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmgiCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIgotI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJTZXR0
aW5ncy5oIgotI2luY2x1ZGUgIldlYkNvcmVJbnN0YW5jZUhhbmRsZS5oIgotI2luY2x1ZGUgImNf
aW5zdGFuY2UuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgInJ1bnRp
bWVfcm9vdC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgotCi0j
aWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVk
ZSA8Y2Fpcm8td2luMzIuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUg
PGdkay9nZGt3aW4zMi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNlbmRpZgotCi1zdGF0aWMg
aW5saW5lIEhXTkQgd2luZG93SGFuZGxlRm9yUGFnZUNsaWVudChQbGF0Zm9ybVBhZ2VDbGllbnQg
Y2xpZW50KQotewotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKEdka1dpbmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2lu
ZG93KGNsaWVudCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIV05EPihHREtfV0lORE9X
X0hXTkQod2luZG93KSk7Ci0gICAgcmV0dXJuIDA7Ci0jZWxzZQotICAgIHJldHVybiBjbGllbnQ7
Ci0jZW5kaWYKLX0KLQotdXNpbmcgSlNDOjpFeGVjU3RhdGU7Ci11c2luZyBKU0M6OkpTTG9jazsK
LXVzaW5nIEpTQzo6SlNPYmplY3Q7Ci0KLXVzaW5nIHN0ZDo6bWluOwotCi11c2luZyBuYW1lc3Bh
Y2UgV1RGOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7Ci0KLWNvbnN0IExQQ1dTVFIga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWUgPSBMIldlYlBs
dWdpblZpZXciOwotY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld1Byb3BlcnR5ID0gTCJXZWJQ
bHVnaW5WaWV3UHJvcGVydHkiOwotCi0vLyBUaGUgY29kZSB1c2VkIHRvIGhvb2sgQmVnaW5QYWlu
dC9FbmRQYWludCBvcmlnaW5hbGx5IGNhbWUgZnJvbQotLy8gPGh0dHA6Ly93d3cuZmVuZ3l1YW4u
Y29tL2FydGljbGUvd21wcmludC5odG1sPi4KLS8vIENvcHlyaWdodCAoQykgMjAwMCBieSBGZW5n
IFl1YW4gKHd3dy5mZW5neXVhbi5jb20pLgotCi1zdGF0aWMgdW5zaWduZWQgYmVnaW5QYWludFN5
c0NhbGw7Ci1zdGF0aWMgQllURSogYmVnaW5QYWludDsKLQotc3RhdGljIHVuc2lnbmVkIGVuZFBh
aW50U3lzQ2FsbDsKLXN0YXRpYyBCWVRFKiBlbmRQYWludDsKLQotdHlwZWRlZiBIREMgKFdJTkFQ
SSAqUHRyQmVnaW5QYWludCkoSFdORCwgUEFJTlRTVFJVQ1QqKTsKLXR5cGVkZWYgQk9PTCAoV0lO
QVBJICpQdHJFbmRQYWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJVQ1QqKTsKLQotI2lmIE9TKFdJ
TkRPV1MpICYmIENQVShYODZfNjQpICYmIENPTVBJTEVSKE1TVkMpCi1leHRlcm4gIkMiIEhEQyBf
X3N0ZGNhbGwgX0hCZWdpblBhaW50KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVDVCBscFBhaW50KTsK
LWV4dGVybiAiQyIgQk9PTCBfX3N0ZGNhbGwgX0hFbmRQYWludChIV05EIGhXbmQsIGNvbnN0IFBB
SU5UU1RSVUNUKiBscFBhaW50KTsKLSNlbmRpZgotCi1IREMgV0lOQVBJIFBsdWdpblZpZXc6Omhv
b2tlZEJlZ2luUGFpbnQoSFdORCBoV25kLCBQQUlOVFNUUlVDVCogbHBQYWludCkKLXsKLSAgICBQ
bHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5WaWV3Kj4oR2V0
UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7Ci0gICAgaWYgKHBsdWdpblZpZXcg
JiYgcGx1Z2luVmlldy0+bV93bVByaW50SERDKSB7Ci0gICAgICAgIC8vIFdlJ3JlIHNlY3JldGx5
IGhhbmRsaW5nIFdNX1BSSU5UQ0xJRU5ULCBzbyBzZXQgdXAgdGhlIFBBSU5UU1RSVUNUIHNvCi0g
ICAgICAgIC8vIHRoYXQgdGhlIHBsdWdpbiB3aWxsIHBhaW50IGludG8gdGhlIEhEQyB3ZSBwcm92
aWRlLgotICAgICAgICBtZW1zZXQobHBQYWludCwgMCwgc2l6ZW9mKFBBSU5UU1RSVUNUKSk7Ci0g
ICAgICAgIGxwUGFpbnQtPmhkYyA9IHBsdWdpblZpZXctPm1fd21QcmludEhEQzsKLSAgICAgICAg
R2V0Q2xpZW50UmVjdChoV25kLCAmbHBQYWludC0+cmNQYWludCk7Ci0gICAgICAgIHJldHVybiBw
bHVnaW5WaWV3LT5tX3dtUHJpbnRIREM7Ci0gICAgfQotCi0jaWYgQ09NUElMRVIoR0NDKQotICAg
IEhEQyByZXN1bHQ7Ci0gICAgYXNtICgicHVzaCAgICAlMlxuIgotICAgICAgICAgInB1c2ggICAg
JTNcbiIKLSAgICAgICAgICJjYWxsICAgIColNFxuIgotICAgICAgICAgOiAiPWEiIChyZXN1bHQp
Ci0gICAgICAgICA6ICJhIiAoYmVnaW5QYWludFN5c0NhbGwpLCAiZyIgKGxwUGFpbnQpLCAiZyIg
KGhXbmQpLCAibSIgKGJlZ2luUGFpbnQpCi0gICAgICAgICA6ICJtZW1vcnkiCi0gICAgICAgICk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbGlmIGRlZmluZWQoX01fSVg4NikKLSAgICAvLyBDYWxs
IHRocm91Z2ggdG8gdGhlIG9yaWdpbmFsIEJlZ2luUGFpbnQuCi0gICAgX19hc20gICBtb3YgICAg
IGVheCwgYmVnaW5QYWludFN5c0NhbGwKLSAgICBfX2FzbSAgIHB1c2ggICAgbHBQYWludAotICAg
IF9fYXNtICAgcHVzaCAgICBoV25kCi0gICAgX19hc20gICBjYWxsICAgIGJlZ2luUGFpbnQKLSNl
bHNlCi0gICAgcmV0dXJuIF9IQmVnaW5QYWludChoV25kLCBscFBhaW50KTsKLSNlbmRpZgotfQot
Ci1CT09MIFdJTkFQSSBQbHVnaW5WaWV3Ojpob29rZWRFbmRQYWludChIV05EIGhXbmQsIGNvbnN0
IFBBSU5UU1RSVUNUKiBscFBhaW50KQotewotICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBy
ZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3
UHJvcGVydHkpKTsKLSAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5tX3dtUHJpbnRI
REMpIHsKLSAgICAgICAgLy8gV2UncmUgc2VjcmV0bHkgaGFuZGxpbmcgV01fUFJJTlRDTElFTlQs
IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55Ci0gICAgICAgIC8vIGNsZWFudXAuCi0gICAgICAg
IHJldHVybiBUUlVFOwotICAgIH0KLQotI2lmIENPTVBJTEVSKEdDQykKLSAgICBCT09MIHJlc3Vs
dDsKLSAgICBhc20gKCJwdXNoICAgJTJcbiIKLSAgICAgICAgICJwdXNoICAgJTNcbiIKLSAgICAg
ICAgICJjYWxsICAgKiU0XG4iCi0gICAgICAgICA6ICI9YSIgKHJlc3VsdCkKLSAgICAgICAgIDog
ImEiIChlbmRQYWludFN5c0NhbGwpLCAiZyIgKGxwUGFpbnQpLCAiZyIgKGhXbmQpLCAibSIgKGVu
ZFBhaW50KQotICAgICAgICApOwotICAgIHJldHVybiByZXN1bHQ7Ci0jZWxpZiBkZWZpbmVkIChf
TV9JWDg2KQotICAgIC8vIENhbGwgdGhyb3VnaCB0byB0aGUgb3JpZ2luYWwgRW5kUGFpbnQuCi0g
ICAgX19hc20gICBtb3YgICAgIGVheCwgZW5kUGFpbnRTeXNDYWxsCi0gICAgX19hc20gICBwdXNo
ICAgIGxwUGFpbnQKLSAgICBfX2FzbSAgIHB1c2ggICAgaFduZAotICAgIF9fYXNtICAgY2FsbCAg
ICBlbmRQYWludAotI2Vsc2UKLSAgICByZXR1cm4gX0hFbmRQYWludChoV25kLCBscFBhaW50KTsK
LSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBob29rKGNvbnN0IGNoYXIqIG1vZHVsZSwgY29uc3Qg
Y2hhciogcHJvYywgdW5zaWduZWQmIHN5c0NhbGxJRCwgQllURSomIHBQcm9jLCBjb25zdCB2b2lk
KiBwTmV3UHJvYykKLXsKLSAgICAvLyBTZWUgPGh0dHA6Ly93d3cuZmVuZ3l1YW4uY29tL2FydGlj
bGUvd21wcmludC5odG1sPiBmb3IgYW4gZXhwbGFuYXRpb24gb2YKLSAgICAvLyBob3cgdGhpcyBm
dW5jdGlvbiB3b3Jrcy4KLQotICAgIEhJTlNUQU5DRSBoTW9kID0gR2V0TW9kdWxlSGFuZGxlQSht
b2R1bGUpOwotCi0gICAgcFByb2MgPSByZWludGVycHJldF9jYXN0PEJZVEUqPihyZWludGVycHJl
dF9jYXN0PHB0cmRpZmZfdD4oR2V0UHJvY0FkZHJlc3MoaE1vZCwgcHJvYykpKTsKLQotI2lmIENP
TVBJTEVSKEdDQykgfHwgZGVmaW5lZChfTV9JWDg2KQotICAgIGlmIChwUHJvY1swXSAhPSAweEI4
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGJlIHJlYWRpbmcg
dGhlIGJ5dGVzIG9uZS1ieS1vbmUgaW5zdGVhZCBvZiBkb2luZyBhbgotICAgIC8vIHVuYWxpZ25l
ZCByZWFkPwotICAgIHN5c0NhbGxJRCA9ICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ocFBy
b2MgKyAxKTsKLQotICAgIERXT1JEIGZsT2xkUHJvdGVjdDsKLSAgICBpZiAoIVZpcnR1YWxQcm90
ZWN0KHBQcm9jLCA1LCBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFLCAmZmxPbGRQcm90ZWN0KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcFByb2NbMF0gPSAweEU5OwotICAgICpyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkKj4ocFByb2MgKyAxKSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBO
ZXdQcm9jKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBQcm9jICsgNSk7Ci0KLSAgICBw
UHJvYyArPSA1OwotI2Vsc2UKLSAgICAvKiBEaXNhc3NlbWJseSBvZiBCZWdpblBhaW50KCkKLSAg
ICAwMDAwMDAwMDc3OUZDNUIwIDRDIDhCIEQxICAgICAgICAgbW92ICAgICAgICAgcjEwLHJjeAot
ICAgIDAwMDAwMDAwNzc5RkM1QjMgQjggMTcgMTAgMDAgMDAgICBtb3YgICAgICAgICBlYXgsMTAx
N2gKLSAgICAwMDAwMDAwMDc3OUZDNUI4IDBGIDA1ICAgICAgICAgICAgc3lzY2FsbAotICAgIDAw
MDAwMDAwNzc5RkM1QkEgQzMgICAgICAgICAgICAgICByZXQKLSAgICAwMDAwMDAwMDc3OUZDNUJC
IDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVCQyA5MCAgICAgICAgICAg
ICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QkQgOTAgICAgICAgICAgICAgICBub3AKLSAgICAw
MDAwMDAwMDc3OUZDNUJFIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVC
RiA5MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QzAgOTAgICAgICAgICAg
ICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUMxIDkwICAgICAgICAgICAgICAgbm9wCi0gICAg
MDAwMDAwMDA3NzlGQzVDMiA5MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1
QzMgOTAgICAgICAgICAgICAgICBub3AKLSAgICAqLwotICAgIC8vIENoZWNrIGZvciB0aGUgc2ln
bmF0dXJlIGFzIGluIHRoZSBhYm92ZSBkaXNhc3NlbWJseQotICAgIERXT1JEIGd1YXJkID0gMHhC
OEQxOEI0QzsKLSAgICBpZiAoKnJlaW50ZXJwcmV0X2Nhc3Q8RFdPUkQqPihwUHJvYykgIT0gZ3Vh
cmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIERXT1JEIGZsT2xkUHJvdGVjdDsKLSAgICBWaXJ0
dWFsUHJvdGVjdChwUHJvYywgMTIsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUsICYgZmxPbGRQcm90
ZWN0KTsKLSAgICBwUHJvY1swXSA9IDB4NDg7ICAgIC8vIG1vdiByYXgsIHRoaXMKLSAgICBwUHJv
Y1sxXSA9IDB4Yjg7Ci0gICAgKihfX2ludDY0KikocFByb2MrMikgPSAoX19pbnQ2NClwTmV3UHJv
YzsKLSAgICBwUHJvY1sxMF0gPSAweGZmOyAgIC8vIGptcCByYXgKLSAgICBwUHJvY1sxMV0gPSAw
eGUwOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29r
cyhIREMgKFdJTkFQSSpob29rZWRCZWdpblBhaW50KShIV05ELCBQQUlOVFNUUlVDVCopLCBCT09M
IChXSU5BUEkqaG9va2VkRW5kUGFpbnQpKEhXTkQsIGNvbnN0IFBBSU5UU1RSVUNUKikpCi17Ci0g
ICAgc3RhdGljIGJvb2wgaGF2ZUhvb2tlZCA9IGZhbHNlOwotICAgIGlmIChoYXZlSG9va2VkKQot
ICAgICAgICByZXR1cm47Ci0gICAgaGF2ZUhvb2tlZCA9IHRydWU7Ci0KLSAgICAvLyBNb3N0IChh
bGw/KSB3aW5kb3dlZCBwbHVnaW5zIGRvbid0IHNlZW0gdG8gcmVzcG9uZCB0byBXTV9QUklOVENM
SUVOVCwgc28KLSAgICAvLyB3ZSBob29rIGludG8gQmVnaW5QYWludC9FbmRQYWludCB0byBhbGxv
dyB0aGVpciBub3JtYWwgV01fUEFJTlQgaGFuZGxpbmcKLSAgICAvLyB0byBkcmF3IGludG8gYSBn
aXZlbiBIREMuIE5vdGUgdGhhdCB0aGlzIGhvb2tpbmcgYWZmZWN0cyB0aGUgZW50aXJlCi0gICAg
Ly8gcHJvY2Vzcy4KLSAgICBob29rKCJ1c2VyMzIuZGxsIiwgIkJlZ2luUGFpbnQiLCBiZWdpblBh
aW50U3lzQ2FsbCwgYmVnaW5QYWludCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KHJl
aW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihob29rZWRCZWdpblBhaW50KSkpOwotICAgIGhvb2so
InVzZXIzMi5kbGwiLCAiRW5kUGFpbnQiLCBlbmRQYWludFN5c0NhbGwsIGVuZFBhaW50LCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGhv
b2tlZEVuZFBhaW50KSkpOwotCi19Ci0KLXN0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygp
Ci17Ci0gICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOwot
ICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSB0cnVlOwotCi0jaWYgUExBVEZPUk0o
R1RLKQotICAgIFdlYkNvcmU6OnNldEluc3RhbmNlSGFuZGxlKChISU5TVEFOQ0UpKEdldE1vZHVs
ZUhhbmRsZSgwKSkpOwotI2VuZGlmCi0KLSAgICBBU1NFUlQoV2ViQ29yZTo6aW5zdGFuY2VIYW5k
bGUoKSk7Ci0KLSAgICBXTkRDTEFTU0VYIHdjZXg7Ci0gICAgd2NleC5jYlNpemUgPSBzaXplb2Yo
V05EQ0xBU1NFWCk7Ci0gICAgd2NleC5oSWNvblNtICAgICAgICA9IDA7Ci0gICAgd2NleC5zdHls
ZSAgICAgICAgICA9IENTX0RCTENMS1M7Ci0gICAgd2NleC5scGZuV25kUHJvYyAgICA9IERlZldp
bmRvd1Byb2M7Ci0gICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0gICAgd2NleC5jYlduZEV4
dHJhICAgICA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IFdlYkNvcmU6Omluc3RhbmNl
SGFuZGxlKCk7Ci0gICAgd2NleC5oSWNvbiAgICAgICAgICA9IDA7Ci0gICAgd2NleC5oQ3Vyc29y
ICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91
bmQgID0gKEhCUlVTSClDT0xPUl9XSU5ET1c7Ci0gICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7
Ci0gICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lOwot
Ci0gICAgcmV0dXJuICEhUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKLX0KLQotTFJFU1VMVCBDQUxM
QkFDSyBQbHVnaW5WaWV3OjpQbHVnaW5WaWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2Vi
UGx1Z2luVmlld1Byb3BlcnR5KSk7Ci0KLSAgICByZXR1cm4gcGx1Z2luVmlldy0+d25kUHJvYyho
V25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci19Ci0KLXN0YXRpYyBib29sIGlzV2luZG93
c01lc3NhZ2VVc2VyR2VzdHVyZShVSU5UIG1lc3NhZ2UpCi17Ci0gICAgc3dpdGNoIChtZXNzYWdl
KSB7Ci0gICAgICAgIGNhc2UgV01fTEJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX01CVVRUT05V
UDoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgIGNhc2UgV01fS0VZVVA6Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50UG9pbnQgY29udGVudHNU
b05hdGl2ZVdpbmRvdyhGcmFtZVZpZXcqIHZpZXcsIGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsK
LSAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhwb2ludCk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgSW50UmVjdCBjb250ZW50c1RvTmF0aXZlV2luZG93KEZyYW1lVmlldyogdmlldywgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhy
ZWN0KTsKLX0KLQotTFJFU1VMVAotUGx1Z2luVmlldzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQg
bWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICAvLyA8cmRhcjov
LzU3MTExMzY+IFNvbWV0aW1lcyBGbGFzaCB3aWxsIGNhbGwgU2V0Q2FwdHVyZSBiZWZvcmUgY3Jl
YXRpbmcKLSAgICAvLyBhIGZ1bGwtc2NyZWVuIHdpbmRvdyBhbmQgd2lsbCBub3QgcmVsZWFzZSBp
dCwgd2hpY2ggY2F1c2VzIHRoZQotICAgIC8vIGZ1bGwtc2NyZWVuIHdpbmRvdyB0byBuZXZlciBy
ZWNlaXZlIG1vdXNlIGV2ZW50cy4gV2Ugc2V0L3JlbGVhc2UgY2FwdHVyZQotICAgIC8vIG9uIG1v
dXNlIGRvd24vdXAgYmVmb3JlIHNlbmRpbmcgdGhlIGV2ZW50IHRvIHRoZSBwbHVnLWluIHRvIHBy
ZXZlbnQgdGhhdC4KLSAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9MQlVU
VE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9NQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9S
QlVUVE9ORE9XTjoKLSAgICAgICAgICAgIDo6U2V0Q2FwdHVyZShoV25kKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFdNX0xCVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9NQlVU
VE9OVVA6Ci0gICAgICAgIGNhc2UgV01fUkJVVFRPTlVQOgotICAgICAgICAgICAgOjpSZWxlYXNl
Q2FwdHVyZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2Ug
PT0gbV9sYXN0TWVzc2FnZSAmJgotICAgICAgICBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMo
UGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KSAmJiAK
LSAgICAgICAgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jKQotICAgICAgICByZXR1cm4gMTsKLQot
ICAgIGlmIChtZXNzYWdlID09IFdNX1VTRVIgKyAxICYmCi0gICAgICAgIG1fcGx1Z2luLT5xdWly
a3MoKS5jb250YWlucyhQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKSkg
ewotICAgICAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlcikKLSAgICAgICAgICAgIG1fbWVzc2Fn
ZVRocm90dGxlciA9IGFkb3B0UHRyKG5ldyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKHRoaXMp
KTsKLQotICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZXItPmFwcGVuZE1lc3NhZ2UoaFduZCwgbWVz
c2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBt
X2xhc3RNZXNzYWdlID0gbWVzc2FnZTsKLSAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MgPSB0
cnVlOwotCi0gICAgLy8gSWYgdGhlIHBsdWctaW4gZG9lc24ndCBleHBsaWNpdGx5IHN1cHBvcnQg
Y2hhbmdpbmcgdGhlIHBvcC11cCBzdGF0ZSwgd2UgZW5hYmxlCi0gICAgLy8gcG9wdXBzIGZvciBh
bGwgdXNlciBnZXN0dXJlcy4KLSAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBwb3AgdGhlIHN0
YXRlIGluIGEgdGltZXIsIGJlY2F1c2UgdGhlIEZsYXNoIHBsdWctaW4gCi0gICAgLy8gcG9wcyB1
cCB3aW5kb3dzIGluIHJlc3BvbnNlIHRvIGEgcG9zdGVkIG1lc3NhZ2UuCi0gICAgaWYgKG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT52ZXJzaW9uIDwgTlBWRVJTX0hBU19QT1BVUFNfRU5BQkxFRF9T
VEFURSAmJgotICAgICAgICBpc1dpbmRvd3NNZXNzYWdlVXNlckdlc3R1cmUobWVzc2FnZSkgJiYg
IW1fcG9wUG9wdXBzU3RhdGVUaW1lci5pc0FjdGl2ZSgpKSB7Ci0KLSAgICAgICAgcHVzaFBvcHVw
c0VuYWJsZWRTdGF0ZSh0cnVlKTsKLQotICAgICAgICBtX3BvcFBvcHVwc1N0YXRlVGltZXIuc3Rh
cnRPbmVTaG90KDApOwotICAgIH0KLQotICAgIGlmIChtZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5U
KSB7Ci0gICAgICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9u
ZCB0byBXTV9QUklOVENMSUVOVCwgc28gd2UKLSAgICAgICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdl
IHRvIFdNX1BBSU5UIGFuZCByZWx5IG9uIG91ciBob29rZWQgdmVyc2lvbnMgb2YKLSAgICAgICAg
Ly8gQmVnaW5QYWludC9FbmRQYWludCB0byBtYWtlIHRoZSBwbHVnaW4gZHJhdyBpbnRvIHRoZSBn
aXZlbiBIREMuCi0gICAgICAgIG1lc3NhZ2UgPSBXTV9QQUlOVDsKLSAgICAgICAgbV93bVByaW50
SERDID0gcmVpbnRlcnByZXRfY2FzdDxIREM+KHdQYXJhbSk7Ci0gICAgfQotCi0gICAgLy8gQ2Fs
bCB0aGUgcGx1Zy1pbidzIHdpbmRvdyBwcm9jLgotICAgIExSRVNVTFQgcmVzdWx0ID0gOjpDYWxs
V2luZG93UHJvYyhtX3BsdWdpblduZFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFt
KTsKLQotICAgIG1fd21QcmludEhEQyA9IDA7Ci0KLSAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFBy
b2MgPSBmYWxzZTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6
dXBkYXRlUGx1Z2luV2lkZ2V0KCkKLXsKLSAgICBpZiAoIXBhcmVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBh
cmVudCgpKTsKLQotICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKLSAg
ICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKLQotICAgIG1fd2luZG93UmVjdCA9
IEludFJlY3QoZnJhbWVWaWV3LmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24o
KSksIGZyYW1lUmVjdCgpLnNpemUoKSk7Ci0gICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0
KCk7Ci0gICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0
LnkoKSk7Ci0KLSAgICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSAmJiAoIW1faGF2ZVVwZGF0
ZWRQbHVnaW5XaWRnZXQgfHwgbV93aW5kb3dSZWN0ICE9IG9sZFdpbmRvd1JlY3QgfHwgbV9jbGlw
UmVjdCAhPSBvbGRDbGlwUmVjdCkpIHsKLQotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUp
OwotCi0gICAgICAgIC8vIFRvIHByZXZlbnQgZmxhc2hlcyB3aGlsZSBzY3JvbGxpbmcsIHdlIGRp
c2FibGUgZHJhd2luZyBkdXJpbmcgdGhlIHdpbmRvdwotICAgICAgICAvLyB1cGRhdGUgcHJvY2Vz
cyBieSBjbGlwcGluZyB0aGUgd2luZG93IHRvIHRoZSB6ZXJvIHJlY3QuCi0KLSAgICAgICAgYm9v
bCBjbGlwVG9aZXJvUmVjdCA9ICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtEb250Q2xpcFRvWmVyb1JlY3RXaGVuU2Nyb2xsaW5nKTsKLQotICAgICAgICBpZiAoY2xpcFRv
WmVyb1JlY3QpIHsKLSAgICAgICAgICAgIGF1dG8gcmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVh
dGVSZWN0UmduKDAsIDAsIDAsIDApKTsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCksIEZBTFNFKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGF1dG8gcmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKG1f
Y2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJl
Y3QubWF4WSgpKSk7Ci0gICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCByZ24ubGVhaygpLCBUUlVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9o
YXZlVXBkYXRlZFBsdWdpbldpZGdldCB8fCBtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCkK
LSAgICAgICAgICAgIDo6TW92ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRv
d1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5k
b3dSZWN0LmhlaWdodCgpLCBUUlVFKTsKLQotICAgICAgICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsK
LSAgICAgICAgICAgIGF1dG8gcmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKG1f
Y2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJl
Y3QubWF4WSgpKSk7Ci0gICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCByZ24ubGVhaygpLCBUUlVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNldENhbGxp
bmdQbHVnaW4oZmFsc2UpOwotCi0gICAgICAgIG1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQgPSB0
cnVlOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQp
Ci17Ci0gICAgaWYgKGZvY3VzZWQgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKLSAgICAgICAg
U2V0Rm9jdXMocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0KLSAgICBXaWRnZXQ6OnNldEZvY3Vz
KGZvY3VzZWQpOwotCi0gICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lzV2luZG93ZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLQotICAgIG5wRXZlbnQuZXZlbnQgPSBm
b2N1c2VkID8gV01fU0VURk9DVVMgOiBXTV9LSUxMRk9DVVM7Ci0gICAgbnBFdmVudC53UGFyYW0g
PSAwOwotICAgIG5wRXZlbnQubFBhcmFtID0gMDsKLQotICAgIGRpc3BhdGNoTlBFdmVudChucEV2
ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzaG93KCkKLXsKLSAgICBzZXRTZWxmVmlzaWJs
ZSh0cnVlKTsKLQotICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKQotICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX1NI
T1dOQSk7Ci0KLSAgICBXaWRnZXQ6OnNob3coKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoaWRl
KCkKLXsKLSAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7Ci0KLSAgICBpZiAoaXNQYXJlbnRWaXNp
YmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKLSAgICAgICAgU2hvd1dpbmRvdyhwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLCBTV19ISURFKTsKLQotICAgIFdpZGdldDo6aGlkZSgpOwotfQot
Ci1ib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBucEV2ZW50KQotewot
ICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGJvb2wgc2hvdWxkUG9wID0gZmFsc2U7Ci0KLSAgICBpZiAobV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQU19FTkFCTEVEX1NUQVRF
ICYmIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShucEV2ZW50LmV2ZW50KSkgewotICAgICAg
ICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRydWUpOwotICAgICAgICBzaG91bGRQb3AgPSB0cnVl
OwotICAgIH0KLQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpT
RE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsK
LSAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2lu
c3RhbmNlLCAmbnBFdmVudCk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0KLSAgICBp
ZiAoc2hvdWxkUG9wKSAKLSAgICAgICAgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci0KLSAgICBy
ZXR1cm4gYWNjZXB0ZWQ7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGFpbnRJbnRvVHJhbnNmb3Jt
ZWRDb250ZXh0KEhEQyBoZGMpCi17Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBT
ZW5kTWVzc2FnZShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBXTV9QUklOVENMSUVOVCwgcmVpbnRl
cnByZXRfY2FzdDxXUEFSQU0+KGhkYyksIFBSRl9DTElFTlQgfCBQUkZfQ0hJTERSRU4gfCBQUkZf
T1dORUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9ucFdpbmRvdy50eXBlID0g
TlBXaW5kb3dUeXBlRHJhd2FibGU7Ci0gICAgbV9ucFdpbmRvdy53aW5kb3cgPSBoZGM7Ci0KLSAg
ICBXSU5ET1dQT1Mgd2luZG93cG9zID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwIH07Ci0KLSAgICBJ
bnRSZWN0IHIgPSBjb250ZW50c1RvTmF0aXZlV2luZG93KGRvd25jYXN0PEZyYW1lVmlldz4ocGFy
ZW50KCkpLCBmcmFtZVJlY3QoKSk7Ci0KLSAgICB3aW5kb3dwb3MueCA9IHIueCgpOwotICAgIHdp
bmRvd3Bvcy55ID0gci55KCk7Ci0gICAgd2luZG93cG9zLmN4ID0gci53aWR0aCgpOwotICAgIHdp
bmRvd3Bvcy5jeSA9IHIuaGVpZ2h0KCk7Ci0KLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0gICAgbnBF
dmVudC5ldmVudCA9IFdNX1dJTkRPV1BPU0NIQU5HRUQ7Ci0gICAgbnBFdmVudC5sUGFyYW0gPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oJndpbmRvd3Bvcyk7Ci0gICAgbnBFdmVudC53UGFy
YW0gPSAwOwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotCi0gICAgc2V0TlBXaW5k
b3dSZWN0KGZyYW1lUmVjdCgpKTsKLQotICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9QQUlOVDsKLSAg
ICBucEV2ZW50LndQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoZGMpOwotCi0g
ICAgLy8gVGhpcyBpcyBzdXBwb3NlZCB0byBiZSBhIHBvaW50ZXIgdG8gdGhlIGRpcnR5IHJlY3Qs
IGJ1dCBpdCBzZWVtcyB0aGF0IHRoZSBGbGFzaCBwbHVnaW4KLSAgICAvLyBpZ25vcmVzIGl0IHNv
IHdlIGp1c3QgcGFzcyBudWxsLgotICAgIG5wRXZlbnQubFBhcmFtID0gMDsKLQotICAgIGRpc3Bh
dGNoTlBFdmVudChucEV2ZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludFdpbmRvd2Vk
UGx1Z2luSW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQotewotI2lmICFVU0UoV0lOR0RJKQotICAgIEFTU0VSVChtX2lzV2luZG93ZWQpOwot
ICAgIEFTU0VSVChjb250ZXh0LT5zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkpOwotCi0gICAg
SW50UG9pbnQgbG9jYXRpb25JbldpbmRvdyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgp
KS5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOwotCi0g
ICAgTG9jYWxXaW5kb3dzQ29udGV4dCB3aW5kb3dzQ29udGV4dChjb250ZXh0LCBmcmFtZVJlY3Qo
KSwgZmFsc2UpOwotCi0jaWYgVVNFKENBSVJPKQotICAgIC8vIE11c3QgZmx1c2ggZHJhd2luZ3Mg
dXAgdG8gdGhpcyBwb2ludCB0byB0aGUgYmFja2luZyBtZXRhZmlsZSwgb3RoZXJ3aXNlIHRoZQot
ICAgIC8vIHBsdWdpbiByZWdpb24gd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIGFueSBjbGVhciBy
ZWdpb25zIHNwZWNpZmllZCBpbiB0aGUKLSAgICAvLyBjYWlyby1jb250cm9sbGVkIHBvcnRpb25z
IG9mIHRoZSByZW5kZXJpbmcuCi0gICAgY2Fpcm9fc2hvd19wYWdlKGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpKTsKLSNlbmRpZgotCi0gICAgSERDIGhkYyA9IHdpbmRvd3NDb250ZXh0
LmhkYygpOwotICAgIFhGT1JNIG9yaWdpbmFsVHJhbnNmb3JtOwotICAgIEdldFdvcmxkVHJhbnNm
b3JtKGhkYywgJm9yaWdpbmFsVHJhbnNmb3JtKTsKLQotICAgIC8vIFRoZSBwbHVnaW4gZXhwZWN0
cyB0aGUgREMgdG8gYmUgaW4gY2xpZW50IGNvb3JkaW5hdGVzLCBzbyB3ZSB0cmFuc2xhdGUKLSAg
ICAvLyB0aGUgREMgdG8gbWFrZSB0aGF0IHNvLgotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBj
b250ZXh0LT5nZXRDVE0oKTsKLSAgICBjdG0udHJhbnNsYXRlKGxvY2F0aW9uSW5XaW5kb3cueCgp
LCBsb2NhdGlvbkluV2luZG93LnkoKSk7Ci0gICAgWEZPUk0gdHJhbnNmb3JtID0gc3RhdGljX2Nh
c3Q8WEZPUk0+KGN0bS50b1RyYW5zZm9ybWF0aW9uTWF0cml4KCkpOwotCi0gICAgU2V0V29ybGRU
cmFuc2Zvcm0oaGRjLCAmdHJhbnNmb3JtKTsKLQotICAgIHBhaW50SW50b1RyYW5zZm9ybWVkQ29u
dGV4dChoZGMpOwotCi0gICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmb3JpZ2luYWxUcmFuc2Zv
cm0pOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9pc1N0YXJ0ZWQp
IHsKLSAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQotICAgICAgICBw
YWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBjYWxsZWQgU2V0V2luZG93IGJlZm9y
ZSB3ZSB0cnkgdG8gcGFpbnQuCi0gICAgaWYgKCFtX2hhdmVDYWxsZWRTZXRXaW5kb3cpCi0gICAg
ICAgIHNldE5QV2luZG93UmVjdChmcmFtZVJlY3QoKSk7Ci0KLSAgICBpZiAobV9pc1dpbmRvd2Vk
KSB7Ci0jaWYgIVVTRShXSU5HREkpCi0gICAgICAgIGlmIChjb250ZXh0LT5zaG91bGRJbmNsdWRl
Q2hpbGRXaW5kb3dzKCkpCi0gICAgICAgICAgICBwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRl
eHQoY29udGV4dCwgcmVjdCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIEluIHRoZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZl
ciBhbmQgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIHdpbmRvdwotICAgIC8vIGNvb3JkaW5hdGVzLgot
I2lmIFBMQVRGT1JNKEdUSykKLSAgICBJbnRSZWN0IHJlY3RJbldpbmRvdyhyZWN0KTsKLSAgICBy
ZWN0SW5XaW5kb3cuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKLSNlbHNlCi0gICAgSW50UmVjdCBy
ZWN0SW5XaW5kb3cgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udGVudHNUb1dp
bmRvdyhmcmFtZVJlY3QoKSk7Ci0jZW5kaWYKLSAgICBMb2NhbFdpbmRvd3NDb250ZXh0IHdpbmRv
d3NDb250ZXh0KGNvbnRleHQsIHJlY3RJbldpbmRvdywgbV9pc1RyYW5zcGFyZW50KTsKLQotICAg
IC8vIE9uIFNhZmFyaS9XaW5kb3dzIHdpdGhvdXQgdHJhbnNwYXJlbmN5IGxheWVycyB0aGUgR3Jh
cGhpY3NDb250ZXh0IHJldHVybnMgdGhlIEhEQwotICAgIC8vIG9mIHRoZSB3aW5kb3cgYW5kIHRo
ZSBwbHVnaW4gZXhwZWN0cyB0aGF0IHRoZSBwYXNzZWQgaW4gREMgaGFzIHdpbmRvdyBjb29yZGlu
YXRlcy4KLSAgICAvLyBJbiB0aGUgR1RLIGFuZCBRdCBwb3J0cyB3ZSBhbHdheXMgZHJhdyBpbiBh
biBvZmZzY3JlZW4gYnVmZmVyIGFuZCB0aGVyZWZvcmUgbmVlZAotICAgIC8vIHRvIHByZXNlcnZl
IHRoZSB0cmFuc2xhdGlvbiBzZXQgaW4gZ2V0V2luZG93c0NvbnRleHQuCi0jaWYgIVBMQVRGT1JN
KEdUSykKLSAgICBpZiAoIWNvbnRleHQtPmlzSW5UcmFuc3BhcmVuY3lMYXllcigpKSB7Ci0gICAg
ICAgIFhGT1JNIHRyYW5zZm9ybTsKLSAgICAgICAgR2V0V29ybGRUcmFuc2Zvcm0od2luZG93c0Nv
bnRleHQuaGRjKCksICZ0cmFuc2Zvcm0pOwotICAgICAgICB0cmFuc2Zvcm0uZUR4ID0gMDsKLSAg
ICAgICAgdHJhbnNmb3JtLmVEeSA9IDA7Ci0gICAgICAgIFNldFdvcmxkVHJhbnNmb3JtKHdpbmRv
d3NDb250ZXh0LmhkYygpLCAmdHJhbnNmb3JtKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHBhaW50
SW50b1RyYW5zZm9ybWVkQ29udGV4dCh3aW5kb3dzQ29udGV4dC5oZGMoKSk7Ci19Ci0KLXZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKLXsK
LSAgICBBU1NFUlQobV9wbHVnaW4gJiYgIW1faXNXaW5kb3dlZCk7Ci0KLSAgICBOUEV2ZW50IG5w
RXZlbnQ7Ci0KLSAgICBucEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2RlKCk7Ci0KLSAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7Ci0gICAgICAg
IG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlET1dOOwotICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7
Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2
ZW50KSB7Ci0gICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9DSEFSOwotICAgICAgICBucEV2ZW50
LmxQYXJhbSA9IDA7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5rZXl1cEV2ZW50KSB7Ci0gICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlVUDsKLSAgICAg
ICAgbnBFdmVudC5sUGFyYW0gPSAweDgwMDA7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybjsK
LQotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93
QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKLSAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci19Ci0KLWV4dGVybiBib29sIGlnbm9y
ZU5leHRTZXRDdXJzb3I7Ci0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3Vz
ZUV2ZW50KiBldmVudCkKLXsKLSAgICBBU1NFUlQobV9wbHVnaW4gJiYgIW1faXNXaW5kb3dlZCk7
Ci0KLSAgICBOUEV2ZW50IG5wRXZlbnQ7Ci0KLSAgICBJbnRQb2ludCBwID0gY29udGVudHNUb05h
dGl2ZVdpbmRvdyhkb3duY2FzdDxGcmFtZVZpZXc+KHBhcmVudCgpKSwgSW50UG9pbnQoZXZlbnQt
PnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7Ci0KLSAgICBucEV2ZW50LmxQYXJhbSA9IE1BS0VM
UEFSQU0ocC54KCksIHAueSgpKTsKLSAgICBucEV2ZW50LndQYXJhbSA9IDA7Ci0KLSAgICBpZiAo
ZXZlbnQtPmN0cmxLZXkoKSkKLSAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfQ09OVFJPTDsK
LSAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCi0gICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1L
X1NISUZUOwotCi0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92
ZUV2ZW50IHx8Ci0gICAgICAgIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0
RXZlbnQgfHwgCi0gICAgICAgIGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3Zl
ckV2ZW50KSB7Ci0gICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7Ci0gICAgICAg
IGlmIChldmVudC0+YnV0dG9uRG93bigpKQotICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0
dG9uKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIExlZnRCdXR0b246Ci0gICAgICAgICAgICAg
ICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX0xCVVRUT047Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgTWlkZGxlQnV0dG9uOgotICAgICAgICAgICAg
ICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19NQlVUVE9OOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFJpZ2h0QnV0dG9uOgotICAgICAgICAgICAg
ICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19SQlVUVE9OOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCkgewotICAgICAgICBmb2N1c1BsdWdpbkVsZW1l
bnQoKTsKLSAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgMDoKLSAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTkRPV047Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAg
ICAgbnBFdmVudC5ldmVudCA9IFdNX01CVVRUT05ET1dOOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBX
TV9SQlVUVE9ORE9XTjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7Ci0g
ICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0g
ICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBucEV2ZW50
LmV2ZW50ID0gV01fTUJVVFRPTlVQOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9OVVA7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNE
T01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmFjayBw
b3J0aW5nIHRoZSBodHRwOi8vd2Via2l0Lm9yZy9iLzU4MTA4IGZpeCBoZXJlLgotICAgIGlmIChk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCi0gICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwotCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAvLyBDdXJyZW50bHksIFdpZGdldDo6c2V0
Q3Vyc29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpbiBFdmVudEhhbmRs
ZXIuY3BwCi0gICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3ZSBzZXQgaWdub3Jl
TmV4dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0LgotICAgIGlnbm9yZU5l
eHRTZXRDdXJzb3IgPSB0cnVlOwotICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+
cGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5zZXRMYXN0U2V0Q3Vyc29y
VG9DdXJyZW50Q3Vyc29yKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJl
bnQoU2Nyb2xsVmlldyogcGFyZW50KQotewotICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7
Ci0KLSAgICBpZiAocGFyZW50KQotICAgICAgICBpbml0KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGlmICghcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAvLyBJZiB0aGUgcGx1Zy1pbiB3aW5kb3cgb3Igb25lIG9mIGl0cyBjaGlsZHJlbiBoYXZl
IHRoZSBmb2N1cywgd2UgbmVlZCB0byAKLSAgICAgICAgLy8gY2xlYXIgaXQgdG8gcHJldmVudCB0
aGUgd2ViIHZpZXcgd2luZG93IGZyb20gYmVpbmcgZm9jdXNlZCBiZWNhdXNlIHRoYXQgY2FuCi0g
ICAgICAgIC8vIHRyaWdnZXIgYSBsYXlvdXQgd2hpbGUgdGhlIHBsdWdpbiBlbGVtZW50IGlzIGJl
aW5nIGRldGFjaGVkLgotICAgICAgICBIV05EIGZvY3VzZWRXaW5kb3cgPSA6OkdldEZvY3VzKCk7
Ci0gICAgICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpID09IGZvY3VzZWRXaW5kb3cgfHwg
OjpJc0NoaWxkKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIGZvY3VzZWRXaW5kb3cpKQotICAgICAg
ICAgICAgOjpTZXRGb2N1cygwKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFy
ZW50VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09
IHZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJs
ZSh2aXNpYmxlKTsKLQotICAgIGlmIChpc1NlbGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSkgewotICAgICAgICBpZiAodmlzaWJsZSkKLSAgICAgICAgICAgIFNob3dXaW5kb3co
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1dfU0hPV05BKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgU2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19ISURFKTsKLSAgICB9
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
SW4gdGhlIEdUSyBwb3J0IHdlIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgZG9uJ3Qg
d2FudCB0byB1c2UgdGhlIHdpbmRvdwotICAgIC8vIGNvb3JkaW5hdGVzLgotIyBpZiBQTEFURk9S
TShHVEspCi0gICAgSW50UG9pbnQgcCA9IHJlY3QubG9jYXRpb24oKTsKLSMgZWxzZQotICAgIElu
dFBvaW50IHAgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udGVudHNUb1dpbmRv
dyhyZWN0LmxvY2F0aW9uKCkpOwotIyBlbmRpZgotICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOwot
ICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOwotCi0gICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qu
d2lkdGgoKTsKLSAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBt
X25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0
LmxlZnQgPSAwOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKLQotICAgIGlmICht
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7Ci0gICAgICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7
Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwotICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLQotICAgICAgICBtX2hhdmVDYWxsZWRTZXRXaW5kb3cg
PSB0cnVlOwotCi0gICAgICAgIGlmICghbV9pc1dpbmRvd2VkKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIEFTU0VSVChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLQotICAgICAgICBX
TkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MpOwotICAgICAgICBpZiAoY3VycmVudFduZFBy
b2MgIT0gUGx1Z2luVmlld1duZFByb2MpCi0gICAgICAgICAgICBtX3BsdWdpblduZFByb2MgPSAo
V05EUFJPQylTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05E
UFJPQywgKExPTkdfUFRSKVBsdWdpblZpZXdXbmRQcm9jKTsKLSAgICB9Ci19Ci0KLU5QRXJyb3Ig
UGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50
MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKLXsKLSAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBs
ZW4pOwotCi0gICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCi0gICAgICAg
IGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOwotCi0gICAgLy8gR2V0IGZpbGUgaW5m
bwotICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cnM7Ci0gICAgaWYgKEdldEZpbGVB
dHRyaWJ1dGVzRXhXKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0
YSgpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRycykgPT0gMCkKLSAgICAgICAgcmV0dXJu
IE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgaWYgKGF0dHJzLmR3RmlsZUF0dHJpYnV0ZXMg
JiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05P
VF9GT1VORDsKLQotICAgIEhBTkRMRSBmaWxlSGFuZGxlID0gQ3JlYXRlRmlsZVcoZmlsZW5hbWUu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEZJTEVfUkVBRF9EQVRBLCBG
SUxFX1NIQVJFX1JFQUQsIDAsIE9QRU5fRVhJU1RJTkcsIDAsIDApOwotICAgIAotICAgIGlmIChm
aWxlSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICByZXR1cm4gTlBFUlJf
RklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBidWZmZXIucmVzaXplKGF0dHJzLm5GaWxlU2l6ZUxvdyk7
Ci0KLSAgICBEV09SRCBieXRlc1JlYWQ7Ci0gICAgaW50IHJldHZhbCA9IFJlYWRGaWxlKGZpbGVI
YW5kbGUsIGJ1ZmZlci5kYXRhKCksIGF0dHJzLm5GaWxlU2l6ZUxvdywgJmJ5dGVzUmVhZCwgMCk7
Ci0KLSAgICBDbG9zZUhhbmRsZShmaWxlSGFuZGxlKTsKLQotICAgIGlmIChyZXR2YWwgPT0gMCB8
fCBieXRlc1JlYWQgIT0gYXR0cnMubkZpbGVTaXplTG93KQotICAgICAgICByZXR1cm4gTlBFUlJf
RklMRV9OT1RfRk9VTkQ7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLWJvb2wg
UGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSwgdm9pZCosIE5Q
RXJyb3IqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0
Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciog
cmVzdWx0KQotewotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICAgICAgY2FzZSBOUE5WbmV0
c2NhcGVXaW5kb3c6IHsKLSAgICAgICAgICAgIEhXTkQqIHcgPSByZWludGVycHJldF9jYXN0PEhX
TkQqPih2YWx1ZSk7Ci0gICAgICAgICAgICAqdyA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQo
cGFyZW50KCkgPyBwYXJlbnQoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSA6
IDApOwotICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRv
d2xlc3M6IHsKLSAgICAgICAgICAgIE5QQm9vbCogZmxhZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBC
b29sKj4odmFsdWUpOwotICAgICAgICAgICAgKmZsYWcgPSBUUlVFOwotICAgICAgICAgICAgKnJl
c3VsdCA9IE5QRVJSX05PX0VSUk9SOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIH07Ci0gICAgICAgIDo6SW52
YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRSZWN0LCBmYWxzZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdp
blJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0
KiByZWN0KQotewotICAgIGlmICghcmVjdCkgewotICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9w
LCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7Ci0K
LSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHIu
eCgpLCByLnkoKSwgci5tYXhYKCksIHIubWF4WSgpIH07Ci0gICAgICAgIEludmFsaWRhdGVSZWN0
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICZpbnZhbGlkUmVjdCwgRkFMU0UpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtU
aHJvdHRsZUludmFsaWRhdGUpKSB7Ci0gICAgICAgICAgICBtX2ludmFsaWRSZWN0cy5hcHBlbmQo
cik7Ci0gICAgICAgICAgICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCi0gICAg
ICAgICAgICAgICAgbV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBpbnZhbGlkYXRlUmVjdChyKTsKLSAgICB9Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCi17Ci0gICAg
aWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUkVDVCByOwotCi0gICAg
aWYgKEdldFJnbkJveChyZWdpb24sICZyKSA9PSAwKSB7Ci0gICAgICAgIGludmFsaWRhdGUoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEludFJlY3QgcmVjdChJbnRQb2ludChyLmxl
ZnQsIHIudG9wKSwgSW50U2l6ZShyLnJpZ2h0LXIubGVmdCwgci5ib3R0b20tci50b3ApKTsKLSAg
ICBpbnZhbGlkYXRlUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJh
dygpCi17Ci0gICAgaWYgKG1faXNXaW5kb3dlZCkKLSAgICAgICAgOjpVcGRhdGVXaW5kb3cocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSk7Ci0gICAgZWxzZQotICAgICAgICA6OlVwZGF0ZVdpbmRvdyh3
aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KHBhcmVudCgpID8gcGFyZW50KCktPmhvc3RXaW5kb3co
KS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkgOiAwKSk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6cGxh
dGZvcm1TdGFydCgpCi17Ci0gICAgQVNTRVJUKG1faXNTdGFydGVkKTsKLSAgICBBU1NFUlQobV9z
dGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KTsKLQotICAgIGlmIChtX2lz
V2luZG93ZWQpIHsKLSAgICAgICAgcmVnaXN0ZXJQbHVnaW5WaWV3KCk7Ci0gICAgICAgIHNldFVw
T2Zmc2NyZWVuUGFpbnRpbmdIb29rcyhob29rZWRCZWdpblBhaW50LCBob29rZWRFbmRQYWludCk7
Ci0KLSAgICAgICAgRFdPUkQgZmxhZ3MgPSBXU19DSElMRDsKLSAgICAgICAgaWYgKGlzU2VsZlZp
c2libGUoKSkKLSAgICAgICAgICAgIGZsYWdzIHw9IFdTX1ZJU0lCTEU7Ci0KLSAgICAgICAgSFdO
RCBwYXJlbnRXaW5kb3dIYW5kbGUgPSB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KG1fcGFyZW50
RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7Ci0gICAg
ICAgIEhXTkQgd2luZG93ID0gOjpDcmVhdGVXaW5kb3dFeCgwLCBrV2ViUGx1Z2luVmlld2Rvd0Ns
YXNzTmFtZSwgMCwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAwLCAwLCBwYXJlbnRXaW5kb3dIYW5kbGUsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFu
ZGxlKCksIDApOwotCi0jaWYgT1MoV0lORE9XUykgJiYgUExBVEZPUk0oR1RLKQotICAgICAgICBt
X3dpbmRvdyA9IHdpbmRvdzsKLSNlbHNlCi0gICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KHdpbmRv
dyk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBDYWxsaW5nIFNldFdpbmRvd0xvbmdQdHJBIGhlcmUg
bWFrZXMgdGhlIHdpbmRvdyBwcm9jIEFTQ0lJLCB3aGljaCBpcyByZXF1aXJlZCBieSBhdCBsZWFz
dAotICAgICAgICAvLyB0aGUgU2hvY2t3YXZlIERpcmVjdG9yIHBsdWctaW4uCi0jaWYgT1MoV0lO
RE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgOjpTZXRXaW5kb3dMb25nUHRyQShwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MsIChMT05HX1BUUilEZWZXaW5kb3dQcm9jQSk7
Ci0jZWxzZQotICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCksIEdXTF9XTkRQUk9DLCAoTE9ORylEZWZXaW5kb3dQcm9jQSk7Ci0jZW5kaWYKLSAgICAgICAg
U2V0UHJvcChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5LCB0
aGlzKTsKLQotICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7Ci0g
ICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gcGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsK
LSAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOwotICAgIH0KLQotICAgIHVwZGF0ZVBsdWdp
bldpZGdldCgpOwotCi0gICAgaWYgKCFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2lu
UXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCi0gICAgICAgIHNldE5QV2luZG93UmVjdChm
cmFtZVJlY3QoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpw
bGF0Zm9ybURlc3Ryb3koKQotewotICAgIGlmICghcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRGVzdHJveVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KTsKLSAgICBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldCgwKTsKLX0KLQotUGFzc1JlZlB0cjxJbWFn
ZT4gUGx1Z2luVmlldzo6c25hcHNob3QoKQotewotI2lmICFQTEFURk9STShHVEspICYmICFVU0Uo
V0lOR0RJKQotICAgIGF1dG8gaGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxl
REMoMCkpOwotCi0gICAgaWYgKCFtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgLy8gRW5hYmxlIHdv
cmxkIHRyYW5zZm9ybXMuCi0gICAgICAgIFNldEdyYXBoaWNzTW9kZShoZGMuZ2V0KCksIEdNX0FE
VkFOQ0VEKTsKLQotICAgICAgICBYRk9STSB0cmFuc2Zvcm07Ci0gICAgICAgIEdldFdvcmxkVHJh
bnNmb3JtKGhkYy5nZXQoKSwgJnRyYW5zZm9ybSk7Ci0KLSAgICAgICAgLy8gV2luZG93bGVzcyBw
bHVnLWlucyBhc3N1bWUgdGhhdCB0aGV5J3JlIGRyYXdpbmcgb250byB0aGUgdmlldydzIERDLgot
ICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIGNvbnRleHQgc28gdGhhdCB0aGUgcGx1Zy1pbiBkcmF3
cyBhdCAoMCwgMCkuCi0gICAgICAgIEludFBvaW50IHBvc2l0aW9uID0gZG93bmNhc3Q8RnJhbWVW
aWV3PigqcGFyZW50KCkpLmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkpLmxvY2F0aW9uKCk7
Ci0gICAgICAgIHRyYW5zZm9ybS5lRHggPSAtcG9zaXRpb24ueCgpOwotICAgICAgICB0cmFuc2Zv
cm0uZUR5ID0gLXBvc2l0aW9uLnkoKTsKLSAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdl
dCgpLCAmdHJhbnNmb3JtKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBiaXRzOwotICAgIEJpdG1hcElu
Zm8gYm1wID0gQml0bWFwSW5mbzo6Y3JlYXRlQm90dG9tVXAoZnJhbWVSZWN0KCkuc2l6ZSgpKTsK
LSAgICBhdXRvIGhibXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJt
cCwgRElCX1JHQl9DT0xPUlMsICZiaXRzLCAwLCAwKSk7Ci0KLSAgICBIQklUTUFQIGhibXBPbGQg
PSBzdGF0aWNfY2FzdDxIQklUTUFQPihTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1wLmdldCgp
KSk7Ci0KLSAgICBwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoaGRjLmdldCgpKTsKLQotICAg
IFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXBPbGQpOwotCi0gICAgcmV0dXJuIEJpdG1hcElt
YWdlOjpjcmVhdGUoaGJtcC5nZXQoKSk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmCi19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQu
dmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2oKaW5kZXggZmY3NTBiYzNhM2EyOTI1MDUxZjE4
NDY1NThjMTA4ZjZhM2MwOGRmOC4uYjAyODA1MDU5Zjg0OGQ4MWM3MDE1NGFhNTgzZTUyMTg4Y2Vi
YjM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2Vi
S2l0LnZjeHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2Vi
S2l0LnZjeHByb2oKQEAgLTI5NCw2ICsyOTQsMTYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXC4uXFN0b3JhZ2VcV2ViRGF0YWJhc2VQcm92aWRlci5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxjZlxXZWJDb3JlU3VwcG9ydFxXZWJJ
bnNwZWN0b3JDbGllbnRDRi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3
aW5cUGx1Z2luc1xucGFwaS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3
aW5cUGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EZWJ1Zy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblN0cmVhbS5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5WaWV3LmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRhdGFi
YXNlV2luLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5z
XFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luUGFja2FnZVdpbi5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5WaWV3V2luLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlQmFzZS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZURvY3VtZW50LmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlSW1hZ2UuY3Bw
IiAvPgpAQCAtNDM2LDYgKzQ0NiwxNCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5c
U3RvcmFnZVxTdG9yYWdlVHJhY2tlckNsaWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cLi5cU3RvcmFnZVxXZWJEYXRhYmFzZVByb3ZpZGVyLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJh
c2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdp
bkRlYnVnLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQ
bHVnaW5QYWNrYWdlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1
Z2luc1xQbHVnaW5RdWlya1NldC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5c
d2luXFBsdWdpbnNcUGx1Z2luU3RyYXRlZ3kuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblN0cmVhbS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luVmlldy5oIiAvPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVCYXNlLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZURvY3VtZW50Lmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUltYWdlLmgi
IC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJL
aXQudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQv
V2ViS2l0LnZjeHByb2ouZmlsdGVycwppbmRleCAwOTRmNjBhOWIxOTExN2UzZDE4ZmU1ZTdiOWM5
NTA2NzhlMjhjNDM0Li5lZDMxOGRiYjk2YzBjZTY1ZTFiZTIxMDk3NjVjMTYzMWI3ZDI2YjliIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4
cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dl
YktpdC52Y3hwcm9qLmZpbHRlcnMKQEAgLTIxNyw2ICsyMTcsMzYgQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXC4uXHdpblxXZWJTZXJpYWxpemVkSlNWYWx1ZS5jcHAiPgogICAgICAgPEZp
bHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xucGFwaS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3Vy
Y2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3Vy
Y2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EZWJ1Zy5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2Vz
PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu
Llx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8
L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u
XHdpblxQbHVnaW5zXFBsdWdpblN0cmVhbS5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3
aW5cUGx1Z2luc1xQbHVnaW5WaWV3LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRl
cj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQ
bHVnaW5zXFBsdWdpbkRhdGFiYXNlV2luLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0Zp
bHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdp
blxQbHVnaW5zXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+
U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luUGFja2FnZVdpbi5jcHAiPgorICAgICAgPEZpbHRl
cj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5WaWV3V2luLmNwcCI+CisgICAgICA8RmlsdGVy
PlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZUFyZWFJbXBsLmNwcCI+CiAgICAgICA8RmlsdGVyPlNv
dXJjZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTU1OCw2ICs1ODgsMjcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxXZWJDb3JlU3VwcG9ydFxBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dC5oIj4KICAgICAgIDxGaWx0ZXI+V2ViQ29yZVN1cHBvcnQ8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdp
blxQbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XHdpblxQbHVnaW5zXFBsdWdpbkRlYnVnLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxl
czwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Li5cd2luXFBsdWdpbnNcUGx1Z2luUXVpcmtTZXQuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFtLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIg
RmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBG
aWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIj4KKyAgICAgIDxG
aWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VBcmVhSW1wbC5oIj4KICAgICAgIDxG
aWx0ZXI+U291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbSBiL1NvdXJjZS9XZWJLaXQvd2lu
L1BsdWdpbnMvUGFpbnRIb29rcy5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTUwODgxMzU2YTBkZGNkNzgzMDcy
ODExZTlmMTVhMTE1OTRiMTg1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2lu
L1BsdWdpbnMvUGFpbnRIb29rcy5hc20KQEAgLTAsMCArMSw1MCBAQAorOy8qCis7ICAgIENvcHly
aWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKzsKKzsgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorOyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworOyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKzsgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKzsgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKzsgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKzsgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKzsgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKzsgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKzsgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCis7Ki8KKworO0hEQyBfX3N0ZGNhbGwgX0hCZWdpblBhaW50KEhXTkQg
aFduZCwgTFBQQUlOVFNUUlVDVCBscFBhaW50KTsKKworUFVCTElDICBfSEJlZ2luUGFpbnQKKwor
X1RFWFQgICBTRUdNRU5UCisKK19IQmVnaW5QYWludCBQUk9DCisgICAgIG1vdiAgcjEwLHJjeAor
ICAgICBtb3YgIGVheCwxMDE3aAorICAgICBzeXNjYWxsCisgICAgIHJldAorX0hCZWdpblBhaW50
IEVORFAKKworX1RFWFQgICBFTkRTCisKKztCT09MIF9fc3RkY2FsbCBfSEVuZFBhaW50KEhXTkQg
aFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpOworCitQVUJMSUMgIF9IRW5kUGFpbnQK
KworX1RFWFQgICBTRUdNRU5UCisKK19IRW5kUGFpbnQgUFJPQworICAgIG1vdiAgcjEwLHJjeAor
ICAgIG1vdiAgZWF4LDEwMTloCisgICAgc3lzY2FsbAorICAgIHJldAorX0hFbmRQYWludCBFTkRQ
CisKK19URVhUICAgRU5EUworCitFTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVn
aW5EYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmJhMmNlZTJkYTcyY2FmMTRiNzVjZjM2ZmFhZDE0
Yjc1ZTU3NDg1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luRGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsNjc3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiVVJMLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2Vu
ZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQ
bHVnaW5QYWNrYWdlPiA+IFBsdWdpblBhY2thZ2VCeU5hbWVNYXA7CisKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVt
UGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVTaXplID0gMzI3Njg7CisKK3N0YXRpYyBib29s
IGdQZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUlzRW5hYmxlZDsKKworU3RyaW5nJiBwZXJz
aXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVBhdGgoKQoreworICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIGNhY2hlUGF0aCwgKCkpOworICAgIHJldHVybiBjYWNoZVBh
dGg7Cit9CisjZW5kaWYKKworUGx1Z2luRGF0YWJhc2U6OlBsdWdpbkRhdGFiYXNlKCkKKyNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgIDogbV9wZXJzaXN0ZW50
TWV0YWRhdGFDYWNoZUlzTG9hZGVkKGZhbHNlKQorI2VuZGlmCit7Cit9CisKK1BsdWdpbkRhdGFi
YXNlKiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucyhib29sIHBvcHVsYXRlKQorewor
ICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZSogcGx1Z2lucyA9IDA7CisKKyAgICBpZiAoIXBsdWdp
bnMpIHsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZTsKKworICAgICAgICBp
ZiAocG9wdWxhdGUpIHsKKyAgICAgICAgICAgIHBsdWdpbnMtPnNldFBsdWdpbkRpcmVjdG9yaWVz
KFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMoKSk7CisgICAgICAgICAg
ICBwbHVnaW5zLT5yZWZyZXNoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1
Z2luczsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5z
KG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gTm8gcGx1Z2luIHdhcyBm
b3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAg
ICByZXR1cm4gKHJlZnJlc2goKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWlt
ZVR5cGUpKTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6YWRkRXh0cmFQbHVnaW5EaXJlY3Rv
cnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCit7CisgICAgbV9wbHVnaW5EaXJlY3Rvcmllcy5h
cHBlbmQoZGlyZWN0b3J5KTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJh
c2U6OnJlZnJlc2goKQoreworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FD
SEUpCisgICAgaWYgKCFtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQpCisgICAgICAg
IGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworI2VuZGlmCisgICAgYm9vbCBwbHVnaW5T
ZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAgICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZDsKKyAgICAgICAgZ2V0RGVsZXRlZFBsdWdp
bnMocGx1Z2luc1RvVW5sb2FkKTsKKworICAgICAgICAvLyBVbmxvYWQgcGx1Z2lucworICAgICAg
ICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsK
KyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5s
b2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHJlbW92ZShpdC0+Z2V0
KCkpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1w
dHkoKTsKKyAgICB9CisKKyAgICBIYXNoU2V0PFN0cmluZz4gcGF0aHM7CisgICAgZ2V0UGx1Z2lu
UGF0aHNJbkRpcmVjdG9yaWVzKHBhdGhzKTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCB0aW1lX3Q+
IHBhdGhzV2l0aFRpbWVzOworCisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgc2tpcCB1bmNoYW5nZWQg
ZmlsZXMgaWYgd2UgZGlkbid0IHJlbW92ZSBhbnkgcGx1Z2lucyBhYm92ZS4gSWYgd2UgZGlkIHJl
bW92ZQorICAgIC8vIGFueSBwbHVnaW5zLCB3ZSBuZWVkIHRvIGxvb2sgYXQgZXZlcnkgcGx1Z2lu
IGZpbGUgc28gdGhhdCwgZS5nLiwgaWYgdGhlIHVzZXIgaGFzIHR3byB2ZXJzaW9ucworICAgIC8v
IG9mIFJlYWxQbGF5ZXIgaW5zdGFsbGVkIGFuZCBqdXN0IHJlbW92ZWQgdGhlIG5ld2VyIG9uZSwg
d2UnbGwgcGljayB1cCB0aGUgb2xkZXIgb25lLgorICAgIGJvb2wgc2hvdWxkU2tpcFVuY2hhbmdl
ZEZpbGVzID0gIXBsdWdpblNldENoYW5nZWQ7CisKKyAgICBIYXNoU2V0PFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIHBhdGhzRW5kID0gcGF0aHMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGF0aHMuYmVnaW4oKTsgaXQgIT0gcGF0aHNFbmQ7ICsr
aXQpIHsKKyAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZDsKKyAgICAgICAgaWYgKCFnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZSgqaXQsIGxhc3RNb2RpZmllZCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBwYXRoc1dpdGhUaW1lcy5hZGQoKml0LCBsYXN0TW9kaWZpZWQpOworCisg
ICAgICAgIC8vIElmIHRoZSBwYXRoJ3MgdGltZXN0YW1wIGhhc24ndCBjaGFuZ2VkIHNpbmNlIHRo
ZSBsYXN0IHRpbWUgd2UgcmFuIHJlZnJlc2goKSwgd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGlu
Zy4KKyAgICAgICAgaWYgKHNob3VsZFNraXBVbmNoYW5nZWRGaWxlcyAmJiBtX3BsdWdpblBhdGhz
V2l0aFRpbWVzLmdldCgqaXQpID09IGxhc3RNb2RpZmllZCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmIChSZWZQdHI8UGx1Z2luUGFja2FnZT4gb2xkUGFja2FnZSA9IG1fcGx1
Z2luc0J5UGF0aC5nZXQoKml0KSkgeworICAgICAgICAgICAgQVNTRVJUKCFzaG91bGRTa2lwVW5j
aGFuZ2VkRmlsZXMgfHwgb2xkUGFja2FnZS0+bGFzdE1vZGlmaWVkKCkgIT0gbGFzdE1vZGlmaWVk
KTsKKyAgICAgICAgICAgIHJlbW92ZShvbGRQYWNrYWdlLmdldCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gUGx1Z2luUGFja2FnZTo6Y3Jl
YXRlUGFja2FnZSgqaXQsIGxhc3RNb2RpZmllZCk7CisgICAgICAgIGlmIChwYWNrYWdlICYmIGFk
ZChwYWNrYWdlLnJlbGVhc2UoKSkpCisgICAgICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyBDYWNoZSBhbGwgdGhlIHBhdGhzIHdlIGZvdW5kIHdpdGggdGhl
aXIgdGltZXN0YW1wcyBmb3IgbmV4dCB0aW1lLgorICAgIHBhdGhzV2l0aFRpbWVzLnN3YXAobV9w
bHVnaW5QYXRoc1dpdGhUaW1lcyk7CisKKyAgICBpZiAoIXBsdWdpblNldENoYW5nZWQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFf
Q0FDSEUpCisgICAgdXBkYXRlUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsKKyNlbmRpZgorCisg
ICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7CisKKyAgICAvLyBSZWdpc3RlciBwbHVn
LWluIE1JTUUgdHlwZXMKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1
Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Bs
dWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8vIEdldCBNSU1FIHR5
cGVzCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0
ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7CisgICAgICAgIE1JTUVUb0Rl
c2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNj
cmlwdGlvbnMoKS5lbmQoKTsKKyAgICAgICAgZm9yICg7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21h
cF9pdCkKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5rZXkp
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitWZWN0b3I8UGx1Z2luUGFja2FnZSo+
IFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8UGx1Z2luUGFj
a2FnZSo+IHJlc3VsdDsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
bHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
KCppdCkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IFBsdWdpbkRhdGFi
YXNlOjpwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIp
Cit7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luQSA9ICpzdGF0aWNfY2FzdDxQbHVnaW5QYWNr
YWdlKiBjb25zdCo+KGEpOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbkIgPSAqc3RhdGljX2Nh
c3Q8UGx1Z2luUGFja2FnZSogY29uc3QqPihiKTsKKworICAgIHJldHVybiBwbHVnaW5BLT5jb21w
YXJlKCpwbHVnaW5CKTsKK30KKworUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OnBsdWdp
bkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcga2V5ID0gbWltZVR5
cGUubG93ZXIoKTsKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKKyAgICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQbHVnaW4gPSBtX3ByZWZlcnJl
ZFBsdWdpbnMuZ2V0KGtleSk7CisgICAgaWYgKHByZWZlcnJlZFBsdWdpbgorICAgICAgICAmJiBw
cmVmZXJyZWRQbHVnaW4tPmlzRW5hYmxlZCgpCisgICAgICAgICYmIHByZWZlcnJlZFBsdWdpbi0+
bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkgeworICAgICAgICByZXR1cm4gcHJl
ZmVycmVkUGx1Z2luOworICAgIH0KKworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKiwgMj4gcGx1
Z2luQ2hvaWNlczsKKworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUGx1Z2luUGFja2Fn
ZSogcGx1Z2luID0gKCppdCkuZ2V0KCk7CisKKyAgICAgICAgaWYgKCFwbHVnaW4tPmlzRW5hYmxl
ZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHBsdWdpbi0+bWltZVRv
RGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkgeworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAgICAgICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2lu
TG9hZGVkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAgICAg
IHBsdWdpbkNob2ljZXMuYXBwZW5kKHBsdWdpbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAocGx1Z2luQ2hvaWNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcXNv
cnQocGx1Z2luQ2hvaWNlcy5kYXRhKCksIHBsdWdpbkNob2ljZXMuc2l6ZSgpLCBzaXplb2YoUGx1
Z2luUGFja2FnZSopLCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk7CisK
KyAgICByZXR1cm4gcGx1Z2luQ2hvaWNlc1swXTsKK30KKworU3RyaW5nIFBsdWdpbkRhdGFiYXNl
OjpNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikgY29uc3QKK3sK
KyAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Cisg
ICAgU3RyaW5nIG1pbWVUeXBlOworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKiwgMj4gcGx1Z2lu
Q2hvaWNlczsKKyAgICBIYXNoTWFwPFBsdWdpblBhY2thZ2UqLCBTdHJpbmc+IG1pbWVUeXBlRm9y
UGx1Z2luOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVn
aW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoISgqaXQpLT5pc0Vu
YWJsZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIE1JTUVUb0V4dGVuc2lv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMo
KS5lbmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7IG1pbWVfaXQg
IT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAgICAgICAgbWltZVR5cGUgPSBtaW1lX2l0
LT5rZXk7CisgICAgICAgICAgICBQbHVnaW5QYWNrYWdlKiBwcmVmZXJyZWRQbHVnaW4gPSBtX3By
ZWZlcnJlZFBsdWdpbnMuZ2V0KG1pbWVUeXBlKTsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+dmFsdWU7CisgICAgICAgICAgICBib29sIGZv
dW5kTWFwcGluZyA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgICAgICAg
ICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKworICAgICAgICAgICAgICAg
ICAgICBpZiAocHJlZmVycmVkUGx1Z2luICYmIFBsdWdpblBhY2thZ2U6OmVxdWFsKCpwbHVnaW4s
ICpwcmVmZXJyZWRQbHVnaW4pKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pbWVU
eXBlOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBsdWdpbkxvYWRlZCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAg
cGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1Z2luKTsKKyAgICAgICAgICAgICAgICAgICAgbWltZVR5
cGVGb3JQbHVnaW4uYWRkKHBsdWdpbiwgbWltZVR5cGUpOworICAgICAgICAgICAgICAgICAgICBm
b3VuZE1hcHBpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZm91bmRNYXBwaW5nKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHBsdWdp
bkNob2ljZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBxc29y
dChwbHVnaW5DaG9pY2VzLmRhdGEoKSwgcGx1Z2luQ2hvaWNlcy5zaXplKCksIHNpemVvZihQbHVn
aW5QYWNrYWdlKiksIFBsdWdpbkRhdGFiYXNlOjpwcmVmZXJyZWRQbHVnaW5Db21wYXJlKTsKKwor
ICAgIHJldHVybiBtaW1lVHlwZUZvclBsdWdpbi5nZXQocGx1Z2luQ2hvaWNlc1swXSk7Cit9CisK
K1BsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKGNvbnN0IFVSTCYgdXJs
LCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmICghbWltZVR5cGUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAgIAorICAgIFN0cmlu
ZyBmaWxlbmFtZSA9IHVybC5sYXN0UGF0aENvbXBvbmVudCgpOworICAgIGlmIChmaWxlbmFtZS5l
bmRzV2l0aCgnLycpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpbnQgZXh0ZW5zaW9u
UG9zID0gZmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBpZiAoZXh0ZW5zaW9uUG9zID09
IC0xKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBTdHJpbmcgbWltZVR5cGVGb3JFeHRl
bnNpb24gPSBNSU1FVHlwZUZvckV4dGVuc2lvbihmaWxlbmFtZS5zdWJzdHJpbmcoZXh0ZW5zaW9u
UG9zICsgMSkpOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBl
KG1pbWVUeXBlRm9yRXh0ZW5zaW9uKTsKKyAgICBpZiAoIXBsdWdpbikgeworICAgICAgICAvLyBG
SVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSBXaW5kb3dzIGZvciB0aGUg
bWltZSB0eXBlCisgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIG1pbWVUeXBlID0gbWltZVR5cGVGb3JF
eHRlbnNpb247CisgICAgcmV0dXJuIHBsdWdpbjsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6
c2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1
Z2luUGFja2FnZSogcGx1Z2luKQoreworICAgIGlmICghcGx1Z2luIHx8IHBsdWdpbi0+bWltZVRv
RXh0ZW5zaW9ucygpLmNvbnRhaW5zKG1pbWVUeXBlKSkKKyAgICAgICAgbV9wcmVmZXJyZWRQbHVn
aW5zLnNldChtaW1lVHlwZS5sb3dlcigpLCBwbHVnaW4pOworfQorCitib29sIFBsdWdpbkRhdGFi
YXNlOjpmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZChjb25zdCBTdHJpbmcmIGZpbGVQYXRoKSBj
b25zdAoreworICAgIC8vIFNraXAgcGx1Z2luIGZpbGVzIHRoYXQgYXJlIGRpc2FibGVkIGJ5IGZp
bGVuYW1lLgorICAgIGlmIChtX2Rpc2FibGVkUGx1Z2luRmlsZXMuY29udGFpbnMocGF0aEdldEZp
bGVOYW1lKGZpbGVQYXRoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBm
aWxlRXhpc3RzKGZpbGVQYXRoKTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6Z2V0RGVsZXRl
ZFBsdWdpbnMoUGx1Z2luU2V0JiBwbHVnaW5zKSBjb25zdAoreworICAgIFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgaWYgKCFmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZCgoKml0KS0+cGF0aCgpKSkK
KyAgICAgICAgICAgIHBsdWdpbnMuYWRkKCppdCk7CisgICAgfQorfQorCitib29sIFBsdWdpbkRh
dGFiYXNlOjphZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBwcnBQYWNrYWdlKQoreworICAg
IEFTU0VSVF9BUkcocHJwUGFja2FnZSwgcHJwUGFja2FnZSk7CisKKyAgICBSZWZQdHI8UGx1Z2lu
UGFja2FnZT4gcGFja2FnZSA9IHBycFBhY2thZ2U7CisKKyAgICBpZiAoIW1fcGx1Z2lucy5hZGQo
cGFja2FnZSkuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9wbHVn
aW5zQnlQYXRoLmFkZChwYWNrYWdlLT5wYXRoKCksIHBhY2thZ2UpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpyZW1vdmUoUGx1Z2luUGFja2FnZSogcGFja2Fn
ZSkKK3sKKyAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHBhY2th
Z2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOworICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsK
KyAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBQbHVnaW5QYWNrYWdlQnlO
YW1lTWFwOjppdGVyYXRvciBwYWNrYWdlSW5NYXAgPSBtX3ByZWZlcnJlZFBsdWdpbnMuZmluZChp
dC0+a2V5KTsKKyAgICAgICAgaWYgKHBhY2thZ2VJbk1hcCAhPSBtX3ByZWZlcnJlZFBsdWdpbnMu
ZW5kKCkgJiYgcGFja2FnZUluTWFwLT52YWx1ZSA9PSBwYWNrYWdlKQorICAgICAgICAgICAgbV9w
cmVmZXJyZWRQbHVnaW5zLnJlbW92ZShwYWNrYWdlSW5NYXApOworICAgIH0KKworICAgIG1fcGx1
Z2lucy5yZW1vdmUocGFja2FnZSk7CisgICAgbV9wbHVnaW5zQnlQYXRoLnJlbW92ZShwYWNrYWdl
LT5wYXRoKCkpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpjbGVhcigpCit7CisgICAgbV9w
bHVnaW5zLmNsZWFyKCk7CisgICAgbV9wbHVnaW5zQnlQYXRoLmNsZWFyKCk7CisgICAgbV9wbHVn
aW5QYXRoc1dpdGhUaW1lcy5jbGVhcigpOworICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVh
cigpOworICAgIG1fcHJlZmVycmVkUGx1Z2lucy5jbGVhcigpOworI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlz
TG9hZGVkID0gZmFsc2U7CisjZW5kaWYKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVtb3Zl
RGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCit7CisgICAgcmV0dXJu
IG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5yZW1vdmUoZmlsZU5hbWUpOworfQorCitib29sIFBsdWdp
bkRhdGFiYXNlOjphZGREaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkK
K3sKKyAgICByZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLmFkZChmaWxlTmFtZSkuaXNOZXdF
bnRyeTsKK30KKworI2lmICghT1MoV0lORE9XUykgfHwgIUVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKSkKKy8vIEZvciBTYWZhcmkvV2luIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcyBhcmUg
aW1wbGVtZW50ZWQKKy8vIGluIFBsdWdpbkRhdGFiYXNlV2luLmNwcCwgYnV0IGlmIHdlIGNhbiB1
c2UgV2ViQ29yZSBjb25zdHJ1Y3RzCisvLyBmb3IgdGhlIGxvZ2ljIHdlIHNob3VsZCBwZXJoYXBz
IG1vdmUgaXQgaGVyZSB1bmRlciBYUF9XSU4/CisKK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFi
YXNlOjpkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHBh
dGhzOworCisgICAgLy8gQWRkIHBhdGhzIHNwZWNpZmljIHRvIGVhY2ggcGxhdGZvcm0KKyNpZiBk
ZWZpbmVkKFhQX1VOSVgpCisgICAgU3RyaW5nIHVzZXJQbHVnaW5QYXRoID0gaG9tZURpcmVjdG9y
eVBhdGgoKTsKKyAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCIvLm1vemlsbGEvcGx1
Z2lucyIpKTsKKyAgICBwYXRocy5hcHBlbmQodXNlclBsdWdpblBhdGgpOworCisgICAgdXNlclBs
dWdpblBhdGggPSBob21lRGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVu
ZChTdHJpbmcoIi8ubmV0c2NhcGUvcGx1Z2lucyIpKTsKKyAgICBwYXRocy5hcHBlbmQodXNlclBs
dWdpblBhdGgpOworCisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9icm93c2VyL3BsdWdpbnMi
KTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbG9jYWwvbGliL21vemlsbGEvcGx1Z2lucyIpOwor
ICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvZmlyZWZveC9wbHVnaW5zIik7CisgICAgcGF0aHMu
YXBwZW5kKCIvdXNyL2xpYjY0L2Jyb3dzZXItcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgi
L3Vzci9saWIvYnJvd3Nlci1wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9t
b3ppbGxhL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbG9jYWwvbmV0c2NhcGUv
cGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL29wdC9tb3ppbGxhL3BsdWdpbnMiKTsKKyAg
ICBwYXRocy5hcHBlbmQoIi9vcHQvbW96aWxsYS9saWIvcGx1Z2lucyIpOworICAgIHBhdGhzLmFw
cGVuZCgiL29wdC9uZXRzY2FwZS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvb3B0L25l
dHNjYXBlL2NvbW11bmljYXRvci9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xp
Yi9uZXRzY2FwZS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9uZXRzY2Fw
ZS9wbHVnaW5zLWxpYmM1Iik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9uZXRzY2FwZS9w
bHVnaW5zLWxpYmM2Iik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L25ldHNjYXBlL3Bs
dWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvbW96aWxsYS9wbHVnaW5zIik7
CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9uc2Jyb3dzZXIvcGx1Z2lucyIpOworICAgIHBh
dGhzLmFwcGVuZCgiL3Vzci9saWI2NC9uc2Jyb3dzZXIvcGx1Z2lucyIpOworCisgICAgU3RyaW5n
IG1vekhvbWUoZ2V0ZW52KCJNT1pJTExBX0hPTUUiKSk7CisgICAgbW96SG9tZS5hcHBlbmQoIi9w
bHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKG1vekhvbWUpOworCisgICAgVmVjdG9yPFN0cmlu
Zz4gbW96UGF0aHM7CisgICAgU3RyaW5nIG1velBhdGgoZ2V0ZW52KCJNT1pfUExVR0lOX1BBVEgi
KSk7CisgICAgbW96UGF0aC5zcGxpdChVQ2hhcignOicpLCAvKiBhbGxvd0VtcHR5RW50cmllcyAq
LyBmYWxzZSwgbW96UGF0aHMpOworICAgIHBhdGhzLmFwcGVuZFZlY3Rvcihtb3pQYXRocyk7Cisj
ZWxpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGggPSBob21l
RGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmcoIi9MaWJy
YXJ5L0ludGVybmV0IFBsdWctSW5zIikpOworICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0
aCk7CisgICAgcGF0aHMuYXBwZW5kKCIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlucyIpOworI2Vs
aWYgZGVmaW5lZChYUF9XSU4pCisgICAgU3RyaW5nIHVzZXJQbHVnaW5QYXRoID0gaG9tZURpcmVj
dG9yeVBhdGgoKTsKKyAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCJcXEFwcGxpY2F0
aW9uIERhdGFcXE1vemlsbGFcXHBsdWdpbnMiKSk7CisgICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVn
aW5QYXRoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRh
dGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7
CisgICAgU3RyaW5nIHByZWZlcnJlZFBhdGggPSBob21lRGlyZWN0b3J5UGF0aCgpOworCisjaWYg
ZGVmaW5lZChYUF9VTklYKQorICAgIHByZWZlcnJlZFBhdGguYXBwZW5kKFN0cmluZygiLy5tb3pp
bGxhL3BsdWdpbnMiKSk7CisjZWxpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICBwcmVmZXJyZWRQ
YXRoLmFwcGVuZChTdHJpbmcoIi9MaWJyYXJ5L0ludGVybmV0IFBsdWctSW5zIikpOworI2VsaWYg
ZGVmaW5lZChYUF9XSU4pCisgICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3RyaW5nKCJcXEFwcGxp
Y2F0aW9uIERhdGFcXE1vemlsbGFcXHBsdWdpbnMiKSk7CisjZW5kaWYKKworICAgIC8vIFRPRE86
IFdlIHNob3VsZCBub3JtYWxpemUgdGhlIHBhdGggYmVmb3JlIGRvaW5nIGEgY29tcGFyaXNvbi4K
KyAgICByZXR1cm4gcGF0aCA9PSBwcmVmZXJyZWRQYXRoOworfQorCit2b2lkIFBsdWdpbkRhdGFi
YXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZl
IHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworCisjaWYgZGVmaW5l
ZChYUF9VTklYKQorICAgIFN0cmluZyBmaWxlTmFtZUZpbHRlcigiKi5zbyIpOworI2Vsc2UKKyAg
ICBTdHJpbmcgZmlsZU5hbWVGaWx0ZXIoIiIpOworI2VuZGlmCisKKyAgICBWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZGlyc0VuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7Cisg
ICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZEl0ID0gbV9wbHVnaW5EaXJl
Y3Rvcmllcy5iZWdpbigpOyBkSXQgIT0gZGlyc0VuZDsgKytkSXQpIHsKKyAgICAgICAgVmVjdG9y
PFN0cmluZz4gcGx1Z2luUGF0aHMgPSBsaXN0RGlyZWN0b3J5KCpkSXQsIGZpbGVOYW1lRmlsdGVy
KTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBsdWdpbnNFbmQgPSBw
bHVnaW5QYXRocy5lbmQoKTsKKyAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgcEl0ID0gcGx1Z2luUGF0aHMuYmVnaW4oKTsgcEl0ICE9IHBsdWdpbnNFbmQ7ICsrcEl0
KSB7CisgICAgICAgICAgICBpZiAoIWZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKCpwSXQpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBwYXRocy5hZGQoKnBJdCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNlbmRpZiAvLyAhT1MoV0lORE9XUykKKworI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisKK3N0YXRpYyB2b2lkIGZpbGxC
dWZmZXJXaXRoQ29udGVudHNPZkZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGUsIFZlY3Rvcjxj
aGFyPiYgYnVmZmVyKQoreworICAgIHNpemVfdCBidWZmZXJTaXplID0gMDsKKyAgICBzaXplX3Qg
YnVmZmVyQ2FwYWNpdHkgPSAxMDI0OworICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkp
OworCisgICAgZG8geworICAgICAgICBidWZmZXJTaXplICs9IHJlYWRGcm9tRmlsZShmaWxlLCBi
dWZmZXIuZGF0YSgpICsgYnVmZmVyU2l6ZSwgYnVmZmVyQ2FwYWNpdHkgLSBidWZmZXJTaXplKTsK
KyAgICAgICAgaWYgKGJ1ZmZlclNpemUgPT0gYnVmZmVyQ2FwYWNpdHkpIHsKKyAgICAgICAgICAg
IGlmIChidWZmZXJDYXBhY2l0eSA8IG1heGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNo
ZVNpemUpIHsKKyAgICAgICAgICAgICAgICBidWZmZXJDYXBhY2l0eSAqPSAyOworICAgICAgICAg
ICAgICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBidWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfSB3aGlsZSAodHJ1ZSk7CisKKyAgICBidWZmZXIuc2hyaW5rKGJ1ZmZlclNpemUpOworfQor
CitzdGF0aWMgYm9vbCByZWFkVVRGOFN0cmluZyhTdHJpbmcmIHJlc3VsdFN0cmluZywgY2hhciom
IHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQpCit7CisgICAgaWYgKHN0YXJ0ID49IGVuZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IGxlbiA9IHN0cmxlbihzdGFydCk7CisgICAgcmVz
dWx0U3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChzdGFydCwgbGVuKTsKKyAgICBzdGFydCArPSBs
ZW4gKyAxOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHJlYWRUaW1lKHRp
bWVfdCYgcmVzdWx0VGltZSwgY2hhciomIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQpCit7CisgICAg
aWYgKHN0YXJ0ICsgc2l6ZW9mKHRpbWVfdCkgPj0gZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBUaGUgc3RyZWFtIGlzIG5vdCBuZWNlc3NhcnkgYWxpZ25lZC4KKyAgICBtZW1j
cHkoJnJlc3VsdFRpbWUsIHN0YXJ0LCBzaXplb2YodGltZV90KSk7CisgICAgc3RhcnQgKz0gc2l6
ZW9mKHRpbWVfdCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIg
c2NoZW1hVmVyc2lvbiA9ICcxJzsKK3N0YXRpYyBjb25zdCBjaGFyIHBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlRmlsZW5hbWVbXSA9ICJQbHVnaW5NZXRhZGF0YUNhY2hlLmJpbiI7CisKK3Zv
aWQgUGx1Z2luRGF0YWJhc2U6OmxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpCit7CisgICAg
aWYgKCFpc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpIHx8IHBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlUGF0aCgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxhdGZv
cm1GaWxlSGFuZGxlIGZpbGU7CisgICAgU3RyaW5nIGFic29sdXRlQ2FjaGVQYXRoID0gcGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLCBwZXJzaXN0
ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lKTsKKyAgICBmaWxlID0gb3BlbkZpbGUoYWJz
b2x1dGVDYWNoZVBhdGgsIE9wZW5Gb3JSZWFkKTsKKworICAgIGlmICghaXNIYW5kbGVWYWxpZChm
aWxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFyayBjYWNoZSBhcyBsb2FkZWQgcmVn
YXJkbGVzcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmUuIElmCisgICAgLy8gdGhlcmUncyBlcnJvciBp
biB0aGUgY2FjaGUsIHdlIHdvbid0IHRyeSB0byBsb2FkIGl0IGFueW1vcmUuCisgICAgbV9wZXJz
aXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkID0gdHJ1ZTsKKworICAgIFZlY3RvcjxjaGFyPiBm
aWxlQ29udGVudHM7CisgICAgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlLCBmaWxl
Q29udGVudHMpOworICAgIGNsb3NlRmlsZShmaWxlKTsKKworICAgIGlmIChmaWxlQ29udGVudHMu
c2l6ZSgpIDwgMiB8fCBmaWxlQ29udGVudHMuZmlyc3QoKSAhPSBzY2hlbWFWZXJzaW9uIHx8IGZp
bGVDb250ZW50cy5sYXN0KCkgIT0gJ1wwJykgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byByZWFkIHBsdWdpbiBtZXRhZGF0YSBjYWNoZTogY29ycnVwdCBzY2hlbWEiKTsKKyAgICAgICAg
ZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBjaGFyKiBidWZmZXJQb3MgPSBmaWxlQ29udGVudHMuZGF0YSgpICsgMTsKKyAgICBjaGFy
KiBlbmQgPSBmaWxlQ29udGVudHMuZGF0YSgpICsgZmlsZUNvbnRlbnRzLnNpemUoKTsKKworICAg
IFBsdWdpblNldCBjYWNoZWRQbHVnaW5zOworICAgIEhhc2hNYXA8U3RyaW5nLCB0aW1lX3Q+IGNh
Y2hlZFBsdWdpblBhdGhzV2l0aFRpbWVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1
Z2luUGFja2FnZT4gPiBjYWNoZWRQbHVnaW5zQnlQYXRoOworCisgICAgd2hpbGUgKGJ1ZmZlclBv
cyA8IGVuZCkgeworICAgICAgICBTdHJpbmcgcGF0aDsKKyAgICAgICAgdGltZV90IGxhc3RNb2Rp
ZmllZDsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmluZyBkZXNjOworICAgICAg
ICBTdHJpbmcgbWltZURlc2M7CisgICAgICAgIGlmICghKHJlYWRVVEY4U3RyaW5nKHBhdGgsIGJ1
ZmZlclBvcywgZW5kKQorICAgICAgICAgICAgICAmJiByZWFkVGltZShsYXN0TW9kaWZpZWQsIGJ1
ZmZlclBvcywgZW5kKQorICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhuYW1lLCBidWZm
ZXJQb3MsIGVuZCkKKyAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcoZGVzYywgYnVmZmVy
UG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5nKG1pbWVEZXNjLCBidWZm
ZXJQb3MsIGVuZCkpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZWFkIHBs
dWdpbiBtZXRhZGF0YSBjYWNoZTogY29ycnVwdCBkYXRhIik7CisgICAgICAgICAgICBkZWxldGVG
aWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFNraXAgbWV0YWRhdGEgdGhhdCBwb2ludHMgdG8gcGx1Z2lucyBmcm9tIGRp
cmVjdG9yaWVzIHRoYXQKKyAgICAgICAgLy8gYXJlIG5vdCBwYXJ0IG9mIHBsdWdpbiBkaXJlY3Rv
cnkgbGlzdCBhbnltb3JlLgorICAgICAgICBTdHJpbmcgcGx1Z2luRGlyZWN0b3J5TmFtZSA9IGRp
cmVjdG9yeU5hbWUocGF0aCk7CisgICAgICAgIGlmIChtX3BsdWdpbkRpcmVjdG9yaWVzLmZpbmQo
cGx1Z2luRGlyZWN0b3J5TmFtZSkgPT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gUGx1Z2luUGFj
a2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZShwYXRoLCBsYXN0TW9kaWZpZWQsIG5hbWUsIGRl
c2MsIG1pbWVEZXNjKTsKKworICAgICAgICBpZiAocGFja2FnZSAmJiBjYWNoZWRQbHVnaW5zLmFk
ZChwYWNrYWdlKS5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBjYWNoZWRQbHVnaW5QYXRoc1dp
dGhUaW1lcy5hZGQocGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlLT5sYXN0TW9kaWZpZWQoKSk7Cisg
ICAgICAgICAgICBjYWNoZWRQbHVnaW5zQnlQYXRoLmFkZChwYWNrYWdlLT5wYXRoKCksIHBhY2th
Z2UpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9wbHVnaW5zLnN3YXAoY2FjaGVkUGx1Z2lu
cyk7CisgICAgbV9wbHVnaW5zQnlQYXRoLnN3YXAoY2FjaGVkUGx1Z2luc0J5UGF0aCk7CisgICAg
bV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5zd2FwKGNhY2hlZFBsdWdpblBhdGhzV2l0aFRpbWVzKTsK
K30KKworc3RhdGljIGJvb2wgd3JpdGVVVEY4U3RyaW5nKFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxl
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBDU3RyaW5nIHV0ZjhTdHJpbmcgPSBzdHJp
bmcudXRmOCgpOworICAgIGludCBsZW5ndGggPSB1dGY4U3RyaW5nLmxlbmd0aCgpICsgMTsKKyAg
ICByZXR1cm4gd3JpdGVUb0ZpbGUoZmlsZSwgdXRmOFN0cmluZy5kYXRhKCksIGxlbmd0aCkgPT0g
bGVuZ3RoOworfQorCitzdGF0aWMgYm9vbCB3cml0ZVRpbWUoUGxhdGZvcm1GaWxlSGFuZGxlIGZp
bGUsIGNvbnN0IHRpbWVfdCYgdGltZSkKK3sKKyAgICByZXR1cm4gd3JpdGVUb0ZpbGUoZmlsZSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oJnRpbWUpLCBzaXplb2YodGltZV90KSkgPT0g
c2l6ZW9mKHRpbWVfdCk7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlKCkKK3sKKyAgICBpZiAoIWlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVF
bmFibGVkKCkgfHwgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtYWtlQWxsRGlyZWN0b3JpZXMocGVyc2lzdGVudE1ldGFkYXRh
Q2FjaGVQYXRoKCkpOworICAgIFN0cmluZyBhYnNvbHV0ZUNhY2hlUGF0aCA9IHBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSwgcGVyc2lzdGVudFBs
dWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZSk7CisgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hl
UGF0aCk7CisKKyAgICBpZiAobV9wbHVnaW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGZpbGU7CisgICAgZmlsZSA9IG9wZW5GaWxlKGFic29s
dXRlQ2FjaGVQYXRoLCBPcGVuRm9yV3JpdGUpOworCisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGZp
bGUpKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIG9wZW4gcGx1Z2luIG1ldGFkYXRh
IGNhY2hlIGZvciBzYXZpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNoYXIg
bG9jYWxTY2hlbWFWZXJzaW9uID0gc2NoZW1hVmVyc2lvbjsKKyAgICBpZiAod3JpdGVUb0ZpbGUo
ZmlsZSwgJmxvY2FsU2NoZW1hVmVyc2lvbiwgMSkgIT0gMSkgeworICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byB3cml0ZSBwbHVnaW4gbWV0YWRhdGEgY2FjaGUgc2NoZW1hIik7CisgICAgICAg
IGNsb3NlRmlsZShmaWxlKTsKKyAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlm
ICghKHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+cGF0aCgpKQorICAgICAgICAgICAgICAm
JiB3cml0ZVRpbWUoZmlsZSwgKCppdCktPmxhc3RNb2RpZmllZCgpKQorICAgICAgICAgICAgICAm
JiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPm5hbWUoKSkKKyAgICAgICAgICAgICAgJiYg
d3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5kZXNjcmlwdGlvbigpKQorICAgICAgICAgICAg
ICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPmZ1bGxNSU1FRGVzY3JpcHRpb24oKSkp
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB3cml0ZSBwbHVnaW4gbWV0YWRh
dGEgdG8gY2FjaGUiKTsKKyAgICAgICAgICAgIGNsb3NlRmlsZShmaWxlKTsKKyAgICAgICAgICAg
IGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgY2xvc2VGaWxlKGZpbGUpOworfQorCitib29sIFBsdWdpbkRh
dGFiYXNlOjppc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpCit7CisgICAgcmV0dXJu
IGdQZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUlzRW5hYmxlZDsKK30KKwordm9pZCBQbHVn
aW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKGJvb2wgaXNFbmFi
bGVkKQoreworICAgIGdQZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUlzRW5hYmxlZCA9IGlz
RW5hYmxlZDsKK30KKworU3RyaW5nIFBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50TWV0YWRhdGFD
YWNoZVBhdGgoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwZXJzaXN0ZW50UGx1Z2luTWV0YWRh
dGFDYWNoZVBhdGgoKTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6c2V0UGVyc2lzdGVudE1l
dGFkYXRhQ2FjaGVQYXRoKGNvbnN0IFN0cmluZyYgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRo
KQoreworICAgIFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpID0g
cGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoOworfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0
L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZjNDhlY2RmZjZjZjIy
NDM1NTk0ZjhhZTg1MjMwMWE2MjYzY2Y4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQbHVnaW5EYXRhYmFzZV9oCisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlX2gK
KworI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEludFNpemU7
CisgICAgY2xhc3MgVVJMOworICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlQ2xpZW50OworICAgIGNs
YXNzIFBsdWdpblBhY2thZ2U7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBh
Y2thZ2U+LCBQbHVnaW5QYWNrYWdlSGFzaCwgUGx1Z2luUGFja2FnZUhhc2hUcmFpdHM+IFBsdWdp
blNldDsKKworICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlIHsKKyAgICAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUGx1Z2luRGF0YWJhc2UpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBw
dWJsaWM6CisgICAgICAgIFBsdWdpbkRhdGFiYXNlKCk7CisKKyAgICAgICAgLy8gVGhlIGZpcnN0
IGNhbGwgdG8gaW5zdGFsbGVkUGx1Z2lucyBjcmVhdGVzIHRoZSBwbHVnaW4gZGF0YWJhc2UKKyAg
ICAgICAgLy8gYW5kIGJ5IGRlZmF1bHQgcG9wdWxhdGVzIGl0IHdpdGggdGhlIHBsdWdpbnMgaW5z
dGFsbGVkIG9uIHRoZSBzeXN0ZW0uCisgICAgICAgIC8vIEZvciB0ZXN0aW5nIHB1cnBvc2VzLCBp
dCBpcyBwb3NzaWJsZSB0byBub3QgcG9wdWxhdGUgdGhlIGRhdGFiYXNlCisgICAgICAgIC8vIGF1
dG9tYXRpY2FsbHksIGFzIHRoZSBwbHVnaW5zIG1pZ2h0IGFmZmVjdCB0aGUgRFJUIHJlc3VsdHMg
YnkKKyAgICAgICAgLy8gd3JpdGluZyB0byBhLm8uIHN0ZGVyci4KKyAgICAgICAgc3RhdGljIFBs
dWdpbkRhdGFiYXNlKiBpbnN0YWxsZWRQbHVnaW5zKGJvb2wgcG9wdWxhdGUgPSB0cnVlKTsKKwor
ICAgICAgICBib29sIHJlZnJlc2goKTsKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICBW
ZWN0b3I8UGx1Z2luUGFja2FnZSo+IHBsdWdpbnMoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc01J
TUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgdm9pZCBh
ZGRFeHRyYVBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKKworICAgICAgICBzdGF0aWMg
Ym9vbCBpc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSk7
CisgICAgICAgIHN0YXRpYyBpbnQgcHJlZmVycmVkUGx1Z2luQ29tcGFyZShjb25zdCB2b2lkKiwg
Y29uc3Qgdm9pZCopOworCisgICAgICAgIFBsdWdpblBhY2thZ2UqIGZpbmRQbHVnaW4oY29uc3Qg
VVJMJiwgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbkZv
ck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICB2b2lkIHNldFByZWZl
cnJlZFBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBsdWdpblBhY2th
Z2UqIHBsdWdpbik7CisKKyAgICAgICAgdm9pZCBzZXRQbHVnaW5EaXJlY3Rvcmllcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsZWFy
KCk7CisgICAgICAgICAgICBtX3BsdWdpbkRpcmVjdG9yaWVzID0gZGlyZWN0b3JpZXM7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHJlbW92ZURpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVOYW1lKTsKKyAgICAgICAgYm9vbCBhZGREaXNhYmxlZFBsdWdpbkZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSk7CisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0
UGx1Z2luRGlyZWN0b3JpZXMoKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcGx1Z2luRGlyZWN0
b3JpZXMoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkRpcmVjdG9yaWVzOyB9CisKKyAgICAgICAg
U3RyaW5nIE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25z
dDsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICAgICBz
dGF0aWMgYm9vbCBpc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpOworICAgICAgICBz
dGF0aWMgdm9pZCBzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoYm9vbCBpc0VuYWJs
ZWQpOworICAgICAgICBzdGF0aWMgU3RyaW5nIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgp
OworICAgICAgICBzdGF0aWMgdm9pZCBzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29u
c3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOworI2VuZGlmCisKKyAgICBw
cml2YXRlOgorICAgICAgICB2b2lkIGdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0
PFN0cmluZz4mKSBjb25zdDsKKyAgICAgICAgdm9pZCBnZXREZWxldGVkUGx1Z2lucyhQbHVnaW5T
ZXQmKSBjb25zdDsKKyAgICAgICAgYm9vbCBmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZChjb25z
dCBTdHJpbmcmKSBjb25zdDsKKworICAgICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHBsdWdp
biB3YXMgYWN0dWFsbHkgYWRkZWQgb3Igbm90IChpdCB3b24ndCBiZSBhZGRlZCBpZiBpdCdzIGEg
ZHVwbGljYXRlIG9mIGFuIGV4aXN0aW5nIHBsdWdpbikuCisgICAgICAgIGJvb2wgYWRkKFBhc3NS
ZWZQdHI8UGx1Z2luUGFja2FnZT4pOworICAgICAgICB2b2lkIHJlbW92ZShQbHVnaW5QYWNrYWdl
Kik7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAg
dm9pZCBsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsKKyAgICAgICAgdm9pZCB1cGRhdGVQ
ZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworI2VuZGlmCisKKyAgICAgICAgSGFzaFNldDxTdHJp
bmc+IG1fZGlzYWJsZWRQbHVnaW5GaWxlczsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVn
aW5EaXJlY3RvcmllczsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVU
eXBlczsKKyAgICAgICAgUGx1Z2luU2V0IG1fcGx1Z2luczsKKyAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IG1fcGx1Z2luc0J5UGF0aDsKKyAgICAgICAgSGFz
aE1hcDxTdHJpbmcsIHRpbWVfdD4gbV9wbHVnaW5QYXRoc1dpdGhUaW1lczsKKyAgICAgICAgSGFz
aE1hcDxTdHJpbmcsIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IG1fcHJlZmVycmVkUGx1Z2luczsK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICAgICBib29s
IG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZDsKKyNlbmRpZgorICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkYzZjZjM0OTlmYzI5ZGU2
YWM1YWVhZGIzOTI0MDQyNzFhYTBlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9QbHVnaW5zL1BsdWdpbkRhdGFiYXNlV2luLmNwcApAQCAtMCwwICsxLDM4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5o
IgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJQbHVn
aW5QYWNrYWdlLmgiCisjaW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luUGF0aHNGcm9tUmVnaXN0
cnkoSEtFWSByb290S2V5LCBIYXNoU2V0PFN0cmluZz4mIHBhdGhzKQoreworICAgIEhLRVkga2V5
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJl
XFxNb3ppbGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpOworCisg
ICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICByZXR1cm47CisKKyAgICB3
Y2hhcl90IG5hbWVbMTI4XTsKKyAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICAvLyBF
bnVtZXJhdGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERX
T1JEIG5hbWVMZW4gPSBXVEZfQVJSQVlfTEVOR1RIKG5hbWUpOworICAgICAgICByZXN1bHQgPSBS
ZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZp
ZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdP
UkQgcGF0aFN0clNpemUgPSBzaXplb2YocGF0aFN0cik7CisgICAgICAgIERXT1JEIHR5cGU7CisK
KyAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShrZXksIG5hbWUsIEwiUGF0aCIsICZ0
eXBlLCBwYXRoU3RyLCAmcGF0aFN0clNpemUpOworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9S
X1NVQ0NFU1MgfHwgdHlwZSAhPSBSRUdfU1opCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBwYXRocy5hZGQoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFS
KSAtIDEpKTsKKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCit2b2lkIFBsdWdp
bkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBw
YXRocykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vu
c2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworCisgICAg
SEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgV0lOMzJfRklORF9EQVRB
VyBmaW5kRmlsZURhdGE7CisKKyAgICBTdHJpbmcgb2xkV01QUGx1Z2luUGF0aDsKKyAgICBTdHJp
bmcgbmV3V01QUGx1Z2luUGF0aDsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwqIjsKKwor
ICAgICAgICBoRmluZCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKS5kYXRhKCksICZmaW5kRmlsZURhdGEpOworCisgICAgICAgIGlmIChoRmlu
ZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlcyAm
IEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5h
bWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7CisgICAgICAgICAgICBpZiAoKCFm
aWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRs
bCIsIGZhbHNlKSkgJiYKKyAgICAgICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNlKGZpbGVu
YW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNl
KSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFN0cmluZyBmdWxs
UGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKKyAgICAgICAgICAgIGlmICghdW5pcXVlRmls
ZW5hbWVzLmFkZChmdWxsUGF0aCkuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgcGF0aHMuYWRkKGZ1bGxQYXRoKTsKKworICAgICAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnBkc3BsYXkuZGxsIikpCisgICAgICAgICAg
ICAgICAgb2xkV01QUGx1Z2luUGF0aCA9IGZ1bGxQYXRoOworICAgICAgICAgICAgZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKKyAgICAgICAgICAg
ICAgICBuZXdXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7CisKKyAgICAgICAgfSB3aGlsZSAoRmlu
ZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7CisKKyAgICAgICAgRmluZENs
b3NlKGhGaW5kKTsKKyAgICB9CisKKyAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZ
X0xPQ0FMX01BQ0hJTkUsIHBhdGhzKTsKKyAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShI
S0VZX0NVUlJFTlRfVVNFUiwgcGF0aHMpOworCisgICAgLy8gSWYgYm90aCB0aGUgb2xkIGFuZCBu
ZXcgV01QIHBsdWdpbiBhcmUgcHJlc2VudCBpbiB0aGUgcGx1Z2lucyBzZXQsIAorICAgIC8vIHdl
IHJlbW92ZSB0aGUgb2xkIG9uZSBzbyB3ZSBkb24ndCBlbmQgdXAgY2hvb3NpbmcgdGhlIG9sZCBv
bmUuCisgICAgaWYgKCFvbGRXTVBQbHVnaW5QYXRoLmlzRW1wdHkoKSAmJiAhbmV3V01QUGx1Z2lu
UGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHBhdGhzLnJlbW92ZShvbGRXTVBQbHVnaW5QYXRoKTsK
K30KKworc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJpbmcoY29uc3Qg
U3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIFZlY3RvcjxpbnQ+IHZlcnNpb247CisKKyAg
ICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9zOworICAgIAorICAg
IHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKKyAgICAgICAgZm9y
IChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKTsgKytl
bmRQb3MpCisgICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICcuJyB8fCB2
ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJzdHJpbmcoc3Rh
cnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOworICAgICAgICB2ZXJzaW9uLmFwcGVu
ZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyArIDE7Cisg
ICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247Cit9CisKKy8vIFRoaXMgcmV0dXJucyB3aGV0aGVy
IHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCitzdGF0aWMgaW5saW5lIGJvb2wgY29t
cGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGlu
dD4mIHZlcnNpb25CKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5z
aXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltp
XSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBlbHNlIGlmICh2ZXJzaW9uQVtp
XSA8IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhlIHNhbWUgb3Ig
dmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luRGly
ZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQoreworICAgIC8vIEVudW1lcmF0
ZSBhbGwgTW96aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lzdHJ5CisgICAgSEtF
WSBrZXk7CisgICAgTE9ORyByZXN1bHQ7CisgICAgCisgICAgcmVzdWx0ID0gUmVnT3BlbktleUV4
KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1vemlsbGEiKSwgMCwgS0VZX1JF
QUQsICZrZXkpOworICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICBX
Q0hBUiBuYW1lWzEyOF07CisgICAgICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKworICAgICAg
ICAvLyBFbnVtZXJhdGUgc3Via2V5cworICAgICAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewor
ICAgICAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7
CisgICAgICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVM
ZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ICE9
IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIFN0
cmluZyBleHRlbnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKSArICJcXEV4dGVuc2lv
bnMiOworICAgICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5OworCisgICAgICAgICAgICAvLyBU
cnkgb3BlbmluZyB0aGUga2V5CisgICAgICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoa2V5
LCBleHRlbnNpb25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwg
MCwgS0VZX1JFQUQsICZleHRlbnNpb25zS2V5KTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgLy8gTm93IGdldCB0aGUgcGx1Z2lu
cyBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICBXQ0hBUiBwbHVnaW5zRGlyZWN0b3J5U3RyW19N
QVhfUEFUSF07CisgICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc0RpcmVjdG9yeVNpemUgPSBz
aXplb2YocGx1Z2luc0RpcmVjdG9yeVN0cik7CisgICAgICAgICAgICAgICAgRFdPUkQgdHlwZTsK
KworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChleHRlbnNpb25zS2V5
LCBURVhUKCJQbHVnaW5zIiksIDAsICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5zRGlyZWN0b3J5U3Ry
LCAmcGx1Z2luc0RpcmVjdG9yeVNpemUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAgICAgICAgICAgICAgICAgICBk
aXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBsdWdpbnNEaXJlY3RvcnlTdHIsIHBsdWdpbnNEaXJl
Y3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKKworICAgICAgICAgICAgICAgIFJlZ0Ns
b3NlS2V5KGV4dGVuc2lvbnNLZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBSZWdDbG9zZUtleShrZXkpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2
b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYg
ZGlyZWN0b3JpZXMpCit7CisgICAgLy8gVGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5z
dGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGlu
c3RhbGxzCisgICAgV0NIQVIgcGx1Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOworICAg
IERXT1JEIHBsdWdpbkRpcmVjdG9yeVNpemUgPSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1co
VEVYVCgiJVNZU1RFTURSSVZFJVxcUEZpbGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0
ciwgV1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKTsKKworICAgIGlmIChwbHVn
aW5EaXJlY3RvcnlTaXplID4gMCAmJiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IFdURl9BUlJBWV9M
RU5HVEgocGx1Z2luRGlyZWN0b3J5U3RyKSkKKyAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKFN0
cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7CisKKyAg
ICBEV09SRCB0eXBlOworICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BB
VEhdOworICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFs
bGF0aW9uRGlyZWN0b3J5U3RyKTsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0UmVnaXN0cnlW
YWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIEwiU29mdHdhcmVcXE1pY3Jvc29mdFxcTWVkaWFQbGF5
ZXIiLCBMIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiLCAmdHlwZSwgJmluc3RhbGxhdGlvbkRpcmVj
dG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOworCisgICAgaWYgKHJlc3VsdCA9
PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQorICAgICAgICBkaXJlY3Rvcmllcy5h
cHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0
b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVz
KQoreworICAgIEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhL
RVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIp
LCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklMRVRJTUUgbGFz
dE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247CisgICAg
U3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51bWVyYXRlIHN1
YmtleXMKKyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVu
ID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51
bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsK
KworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0
cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25z
KGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKKyAgICAgICAgICAgIGxh
dGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247CisgICAgICAgICAgICBsYXRlc3RB
Y3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsK
KyAgICAgICAgRFdPUkQgdHlwZTsKKyAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3Ry
W19NQVhfUEFUSF07CisgICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXpl
b2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKKworICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdp
bktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFj
cm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOworICAgICAgICByZXN1bHQgPSBn
ZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGgu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIDAsICZ0eXBlLCBhY3JvYmF0
SW5zdGFsbFBhdGhTdHIsICZhY3JvYmF0SW5zdGFsbFBhdGhTaXplKTsKKworICAgICAgICBpZiAo
cmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIFN0cmluZyBhY3JvYmF0UGx1
Z2luRGlyZWN0b3J5ID0gU3RyaW5nKGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgYWNyb2JhdEluc3Rh
bGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJyb3dzZXIiOworICAgICAgICAg
ICAgZGlyZWN0b3JpZXMuYXBwZW5kKGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOworICAgICAgICB9
CisgICAgfQorCisgICAgUmVnQ2xvc2VLZXkoa2V5KTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IGFkZEphdmFQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQorewor
ICAgIEhLRVkga2V5OworICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9D
QUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEphdmFTb2Z0XFxKYXZhIFBsdWctaW4iKSwgMCwg
S0VZX1JFQUQsICZrZXkpOworICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgV0NIQVIgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2Rp
ZmllZDsKKworICAgIFZlY3RvcjxpbnQ+IGxhdGVzdEphdmFWZXJzaW9uOworICAgIFN0cmluZyBs
YXRlc3RKYXZhVmVyc2lvblN0cmluZzsKKworICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAg
Zm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihu
YW1lKSAvIHNpemVvZihXQ0hBUik7CisgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5
LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAg
aWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgVmVjdG9yPGludD4gamF2YVZlcnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5h
bWUsIG5hbWVMZW4pKTsKKyAgICAgICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhqYXZhVmVyc2lvbiwg
bGF0ZXN0SmF2YVZlcnNpb24pKSB7CisgICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lvbiA9IGph
dmFWZXJzaW9uOworICAgICAgICAgICAgbGF0ZXN0SmF2YVZlcnNpb25TdHJpbmcgPSBTdHJpbmco
bmFtZSwgbmFtZUxlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWxhdGVzdEphdmFW
ZXJzaW9uU3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICBEV09SRCB0eXBlOworICAgICAgICBX
Q0hBUiBqYXZhSW5zdGFsbFBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgamF2YUlu
c3RhbGxQYXRoU2l6ZSA9IHNpemVvZihqYXZhSW5zdGFsbFBhdGhTdHIpOworICAgICAgICBEV09S
RCB1c2VOZXdQbHVnaW5WYWx1ZTsKKyAgICAgICAgRFdPUkQgdXNlTmV3UGx1Z2luU2l6ZTsKKwor
ICAgICAgICBTdHJpbmcgamF2YVBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEphdmFTb2Z0XFxK
YXZhIFBsdWctaW5cXCIgKyBsYXRlc3RKYXZhVmVyc2lvblN0cmluZzsKKyAgICAgICAgcmVzdWx0
ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQbHVnaW5LZXlQYXRo
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBMIlVzZU5ld0phdmFQbHVn
aW4iLCAmdHlwZSwgJnVzZU5ld1BsdWdpblZhbHVlLCAmdXNlTmV3UGx1Z2luU2l6ZSk7CisKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHVzZU5ld1BsdWdpblZhbHVlID09
IDEpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9N
QUNISU5FLCBqYXZhUGx1Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LmRhdGEoKSwgTCJKYXZhSG9tZSIsICZ0eXBlLCBqYXZhSW5zdGFsbFBhdGhTdHIsICZqYXZhSW5z
dGFsbFBhdGhTaXplKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykg
eworICAgICAgICAgICAgICAgIFN0cmluZyBqYXZhUGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5nKGph
dmFJbnN0YWxsUGF0aFN0ciwgamF2YUluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAx
KSArICJcXGJpblxcbmV3X3BsdWdpbiI7CisgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBw
ZW5kKGphdmFQbHVnaW5EaXJlY3RvcnkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgUmVnQ2xvc2VLZXkoa2V5KTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc2Fm
YXJpUGx1Z2luc0RpcmVjdG9yeSgpCit7CisgICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVTdHJbX01B
WF9QQVRIXTsKKyAgICBzdGF0aWMgU3RyaW5nIHBsdWdpbnNEaXJlY3Rvcnk7CisgICAgc3RhdGlj
IGJvb2wgY2FjaGVkUGx1Z2luRGlyZWN0b3J5ID0gZmFsc2U7CisKKyAgICBpZiAoIWNhY2hlZFBs
dWdpbkRpcmVjdG9yeSkgeworICAgICAgICBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSB0cnVlOwor
CisgICAgICAgIGludCBtb2R1bGVGaWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAsIG1v
ZHVsZUZpbGVOYW1lU3RyLCBfTUFYX1BBVEgpOworCisgICAgICAgIGlmICghbW9kdWxlRmlsZU5h
bWVMZW4gfHwgbW9kdWxlRmlsZU5hbWVMZW4gPT0gX01BWF9QQVRIKQorICAgICAgICAgICAgZ290
byBleGl0OworCisgICAgICAgIGlmICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVOYW1l
U3RyKSkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBwbHVnaW5zRGlyZWN0b3J5
ID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOworICAgIH0KK2V4aXQ6
CisgICAgcmV0dXJuIHBsdWdpbnNEaXJlY3Rvcnk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVz
KQoreworICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBpZiAo
IUdldFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIFdURl9BUlJBWV9MRU5HVEgo
c3lzdGVtRGlyZWN0b3J5U3RyKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG1hY3Jv
bWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhdOworCisgICAgUGF0aENvbWJpbmUobWFjcm9tZWRp
YURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2gi
KSk7CisgICAgZGlyZWN0b3JpZXMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOworCisg
ICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3Ry
LCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOworICAgIGRpcmVjdG9yaWVzLmFwcGVu
ZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKK30KKworVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0
YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCit7CisgICAgVmVjdG9yPFN0cmluZz4g
ZGlyZWN0b3JpZXM7CisgICAgU3RyaW5nIG91ckRpcmVjdG9yeSA9IHNhZmFyaVBsdWdpbnNEaXJl
Y3RvcnkoKTsKKworICAgIGlmICghb3VyRGlyZWN0b3J5LmlzTnVsbCgpKQorICAgICAgICBkaXJl
Y3Rvcmllcy5hcHBlbmQob3VyRGlyZWN0b3J5KTsKKyAgICBhZGRBZG9iZUFjcm9iYXRQbHVnaW5E
aXJlY3RvcnkoZGlyZWN0b3JpZXMpOworICAgIGFkZE1vemlsbGFQbHVnaW5EaXJlY3Rvcmllcyhk
aXJlY3Rvcmllcyk7CisgICAgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KGRp
cmVjdG9yaWVzKTsKKyAgICBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoZGlyZWN0b3Jp
ZXMpOworCisgICAgcmV0dXJuIGRpcmVjdG9yaWVzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNl
Ojppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKK3sK
KyAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgpOworCisg
ICAgaWYgKCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkgJiYgIWRpcmVjdG9yeS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIG91ckRpcmVjdG9yeSA9PSBkaXJlY3Rvcnk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2lu
RGVidWcuY3BwIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjZkMjNhZTY3MTM4YWNhYmM2NWI0ZTMwMGNmMmNlMTc5ODE0MDUzNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGVidWcuY3BwCkBA
IC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EZWJ1Zy5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiAh
TE9HX0RJU0FCTEVECisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGVycm9yU3RyaW5nc1tdID0geworICAgICJObyBlcnJvcnMgb2NjdXJyZWQuIiwgLyog
TlBFUlJfTk9fRVJST1IgKi8KKyAgICAiRXJyb3Igd2l0aCBubyBzcGVjaWZpYyBlcnJvciBjb2Rl
IG9jY3VycmVkLiIsIC8qIE5QRVJSX0dFTkVSSUNfRVJST1IgKi8KKyAgICAiSW52YWxpZCBpbnN0
YW5jZSBwYXNzZWQgdG8gdGhlIHBsdWctaW4uIiwgLyogTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9F
UlJPUiAqLworICAgICJGdW5jdGlvbiB0YWJsZSBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURf
RlVOQ1RBQkxFX0VSUk9SICovCisgICAgIkxvYWRpbmcgb2YgcGx1Zy1pbiBmYWlsZWQuIiwgLyog
TlBFUlJfTU9EVUxFX0xPQURfRkFJTEVEX0VSUk9SICovCisgICAgIk1lbW9yeSBhbGxvY2F0aW9u
IGZhaWxlZC4iLCAvKiBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9SICovCisgICAgIlBsdWctaW4g
bWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExVR0lOX0VSUk9SICovCisg
ICAgIlBsdWctaW4gZGlyZWN0b3J5IG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZB
TElEX1BMVUdJTl9ESVJfRVJST1IgKi8KKyAgICAiVmVyc2lvbnMgb2YgcGx1Zy1pbiBhbmQgQ29t
bXVuaWNhdG9yIGRvIG5vdCBtYXRjaC4iLCAvKiBOUEVSUl9JTkNPTVBBVElCTEVfVkVSU0lPTl9F
UlJPUiAqLworICAgICJQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lO
VkFMSURfUEFSQU0gKi8KKyAgICAiVVJMIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9J
TlZBTElEX1VSTCAqLworICAgICJGaWxlIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9G
SUxFX05PVF9GT1VORCAqLworICAgICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iLCAvKiBOUEVS
Ul9OT19EQVRBICovCisgICAgIlNlZWthYmxlIHN0cmVhbSBleHBlY3RlZC4iLCAvKiBOUEVSUl9T
VFJFQU1fTk9UX1NFRUtBQkxFICovCisgICAgIlVua25vd24gZXJyb3IgY29kZSIKK307CisKKyNp
ZmRlZiBYUF9NQUNPU1gKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkcmF3aW5nTW9kZWxzW10g
PSB7CisgICAgIk5QRHJhd2luZ01vZGVsUXVpY2tEcmF3IiwKKyAgICAiTlBEcmF3aW5nTW9kZWxD
b3JlR3JhcGhpY3MiLAorICAgICJOUERyYXdpbmdNb2RlbE9wZW5HTCIsCisgICAgIk5QRHJhd2lu
Z01vZGVsQ29yZUFuaW1hdGlvbiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBldmVu
dE1vZGVsc1tdID0geworICAgICJOUEV2ZW50TW9kZWxDYXJib24iLAorICAgICJOUEV2ZW50TW9k
ZWxDb2NvYSIKK307CisjZW5kaWYgLy9YUF9NQUNPU1gKKworY29uc3QgY2hhciogcHJldHR5TmFt
ZUZvck5QRXJyb3IoTlBFcnJvciBlcnJvcikKK3sKKyAgICByZXR1cm4gZXJyb3JTdHJpbmdzW2Vy
cm9yXTsKK30KKworI2lmZGVmIFhQX01BQ09TWAorY29uc3QgY2hhciogcHJldHR5TmFtZUZvckRy
YXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCBkcmF3aW5nTW9kZWwpCit7CisgICAgcmV0dXJuIGRy
YXdpbmdNb2RlbHNbZHJhd2luZ01vZGVsXTsKK30KKworY29uc3QgY2hhciogcHJldHR5TmFtZUZv
ckV2ZW50TW9kZWwoTlBFdmVudE1vZGVsIGV2ZW50TW9kZWwpCit7CisgICAgcmV0dXJuIGV2ZW50
TW9kZWxzW2V2ZW50TW9kZWxdOworfQorI2VuZGlmIC8vWFBfTUFDT1NYCisKK0NTdHJpbmcgcHJl
dHR5TmFtZUZvck5QTlZhcmlhYmxlKE5QTlZhcmlhYmxlIHZhcmlhYmxlKQoreworICAgIHN3aXRj
aCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZ4RGlzcGxheTogcmV0dXJuICJOUE5WeERpc3Bs
YXkiOworICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDogcmV0dXJuICJOUE5WeHRBcHBDb250ZXh0
IjsKKyAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogcmV0dXJuICJOUE5WbmV0c2NhcGVXaW5k
b3ciOworICAgIGNhc2UgTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbDogcmV0dXJuICJOUE5WamF2
YXNjcmlwdEVuYWJsZWRCb29sIjsKKyAgICBjYXNlIE5QTlZhc2RFbmFibGVkQm9vbDogcmV0dXJu
ICJOUE5WYXNkRW5hYmxlZEJvb2wiOworICAgIGNhc2UgTlBOVmlzT2ZmbGluZUJvb2w6IHJldHVy
biAiTlBOVmlzT2ZmbGluZUJvb2wiOworCisgICAgY2FzZSBOUE5Wc2VydmljZU1hbmFnZXI6IHJl
dHVybiAiTlBOVnNlcnZpY2VNYW5hZ2VyIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUE5W
RE9NRWxlbWVudDogcmV0dXJuICJOUE5WRE9NRWxlbWVudCAobm90IHN1cHBvcnRlZCkiOworICAg
IGNhc2UgTlBOVkRPTVdpbmRvdzogcmV0dXJuICJOUE5WRE9NV2luZG93IChub3Qgc3VwcG9ydGVk
KSI7CisgICAgY2FzZSBOUE5WVG9vbGtpdDogcmV0dXJuICJOUE5WVG9vbGtpdCAobm90IHN1cHBv
cnRlZCkiOworICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDogcmV0dXJuICJOUE5WU3Vw
cG9ydHNYRW1iZWRCb29sIChub3Qgc3VwcG9ydGVkKSI7CisKKyAgICBjYXNlIE5QTlZXaW5kb3dO
UE9iamVjdDogcmV0dXJuICJOUE5WV2luZG93TlBPYmplY3QiOworICAgIGNhc2UgTlBOVlBsdWdp
bkVsZW1lbnROUE9iamVjdDogcmV0dXJuICJOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0IjsKKyAg
ICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6IHJldHVybiAiTlBOVlN1cHBvcnRzV2luZG93
bGVzcyI7CisgICAgY2FzZSBOUE5WcHJpdmF0ZU1vZGVCb29sOiByZXR1cm4gIk5QTlZwcml2YXRl
TW9kZUJvb2wiOworCisjaWZkZWYgWFBfTUFDT1NYCisgICAgY2FzZSBOUE5WcGx1Z2luRHJhd2lu
Z01vZGVsOiByZXR1cm4gIk5QTlZwbHVnaW5EcmF3aW5nTW9kZWwiOworI2lmbmRlZiBOUF9OT19R
VUlDS0RSQVcKKyAgICBjYXNlIE5QTlZzdXBwb3J0c1F1aWNrRHJhd0Jvb2w6IHJldHVybiAiTlBO
VnN1cHBvcnRzUXVpY2tEcmF3Qm9vbCI7CisjZW5kaWYKKyAgICBjYXNlIE5QTlZzdXBwb3J0c0Nv
cmVHcmFwaGljc0Jvb2w6IHJldHVybiAiTlBOVnN1cHBvcnRzQ29yZUdyYXBoaWNzQm9vbCI7Cisg
ICAgY2FzZSBOUE5Wc3VwcG9ydHNPcGVuR0xCb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c09wZW5H
TEJvb2wiOworICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29yZUFuaW1hdGlvbkJvb2w6IHJldHVybiAi
TlBOVnN1cHBvcnRzQ29yZUFuaW1hdGlvbkJvb2wiOworI2lmbmRlZiBOUF9OT19DQVJCT04KKyAg
ICBjYXNlIE5QTlZzdXBwb3J0c0NhcmJvbkJvb2w6IHJldHVybiAiTlBOVnN1cHBvcnRzQ2FyYm9u
Qm9vbCI7CisjZW5kaWYKKyAgICBjYXNlIE5QTlZzdXBwb3J0c0NvY29hQm9vbDogcmV0dXJuICJO
UE5Wc3VwcG9ydHNDb2NvYUJvb2wiOworI2VuZGlmCisKKyAgICBkZWZhdWx0OiByZXR1cm4gIlVu
a25vd24gdmFyaWFibGUiOworICAgIH0KK30KKworQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBQVmFy
aWFibGUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAo
dmFyaWFibGUpIHsKKyAgICBjYXNlIE5QUFZwbHVnaW5OYW1lU3RyaW5nOiByZXR1cm4gIk5QUFZw
bHVnaW5OYW1lU3RyaW5nIjsKKyAgICBjYXNlIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZzog
cmV0dXJuICJOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmciOworICAgIGNhc2UgTlBQVnBsdWdp
bldpbmRvd0Jvb2w6IHJldHVybiAiTlBQVnBsdWdpbldpbmRvd0Jvb2wiOworICAgIGNhc2UgTlBQ
VnBsdWdpblRyYW5zcGFyZW50Qm9vbDogcmV0dXJuICJOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29s
IjsKKworICAgIGNhc2UgTlBQVmphdmFDbGFzczogcmV0dXJuICJOUFBWamF2YUNsYXNzIChub3Qg
c3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93U2l6ZTogcmV0dXJuICJOUFBW
cGx1Z2luV2luZG93U2l6ZSAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVnBsdWdpblRp
bWVySW50ZXJ2YWw6IHJldHVybiAiTlBQVnBsdWdpblRpbWVySW50ZXJ2YWwgKG5vdCBzdXBwb3J0
ZWQpIjsKKyAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxlSW5zdGFuY2U6IHJldHVybiAiTlBQ
VnBsdWdpblNjcmlwdGFibGVJbnN0YW5jZSAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQ
VnBsdWdpblNjcmlwdGFibGVJSUQ6IHJldHVybiAiTlBQVnBsdWdpblNjcmlwdGFibGVJSUQgKG5v
dCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZqYXZhc2NyaXB0UHVzaENhbGxlckJvb2w6IHJl
dHVybiAiTlBQVmphdmFzY3JpcHRQdXNoQ2FsbGVyQm9vbCAobm90IHN1cHBvcnRlZCkiOworICAg
IGNhc2UgTlBQVnBsdWdpbktlZXBMaWJyYXJ5SW5NZW1vcnk6IHJldHVybiAiTlBQVnBsdWdpbktl
ZXBMaWJyYXJ5SW5NZW1vcnkgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZwbHVnaW5O
ZWVkc1hFbWJlZDogcmV0dXJuICJOUFBWcGx1Z2luTmVlZHNYRW1iZWQgKG5vdCBzdXBwb3J0ZWQp
IjsKKworICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdDogcmV0dXJuICJOUFBW
cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0IjsKKworICAgIGNhc2UgTlBQVmZvcm1WYWx1ZTogcmV0
dXJuICJOUFBWZm9ybVZhbHVlIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUFBWcGx1Z2lu
VXJsUmVxdWVzdHNEaXNwbGF5ZWRCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5VcmxSZXF1ZXN0c0Rp
c3BsYXllZEJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKKworICAgIGNhc2UgTlBQVnBsdWdpbldhbnRz
QWxsTmV0d29ya1N0cmVhbXM6IHJldHVybiAiTlBQVnBsdWdpbldhbnRzQWxsTmV0d29ya1N0cmVh
bXMiOworICAgIGNhc2UgTlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVhbTogcmV0dXJuICJOUFBWcGx1
Z2luQ2FuY2VsU3JjU3RyZWFtIjsKKworI2lmZGVmIFhQX01BQ09TWAorICAgIGNhc2UgTlBQVnBs
dWdpbkRyYXdpbmdNb2RlbDogeworICAgICAgICBTdHJpbmcgcmVzdWx0KCJOUFBWcGx1Z2luRHJh
d2luZ01vZGVsLCAiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChwcmV0dHlOYW1lRm9yRHJhd2lu
Z01vZGVsKE5QRHJhd2luZ01vZGVsKHVpbnRwdHJfdCh2YWx1ZSkpKSk7CisgICAgICAgIHJldHVy
biByZXN1bHQubGF0aW4xKCk7CisgICAgfQorICAgIGNhc2UgTlBQVnBsdWdpbkV2ZW50TW9kZWw6
IHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCgiTlBQVnBsdWdpbkV2ZW50TW9kZWwsICIpOworICAg
ICAgICByZXN1bHQuYXBwZW5kKHByZXR0eU5hbWVGb3JFdmVudE1vZGVsKE5QRXZlbnRNb2RlbCh1
aW50cHRyX3QodmFsdWUpKSkpOworICAgICAgICByZXR1cm4gcmVzdWx0LmxhdGluMSgpOworICAg
IH0KKyAgICBjYXNlIE5QUFZwbHVnaW5Db3JlQW5pbWF0aW9uTGF5ZXI6IHJldHVybiAiTlBQVnBs
dWdpbkNvcmVBbmltYXRpb25MYXllciI7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CisjZW5kaWYKKworICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7CisgICAg
fQorfQorCitDU3RyaW5nIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZShOUE5VUkxWYXJpYWJs
ZSB2YXJpYWJsZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5VUkxW
Q29va2llOiByZXR1cm4gIk5QTlVSTFZDb29raWUiOworICAgIGNhc2UgTlBOVVJMVlByb3h5OiBy
ZXR1cm4gIk5QTlVSTFZQcm94eSI7CisgICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlh
YmxlIjsKKyAgICB9Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhTE9H
X0RJU0FCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRl
YnVnLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRlYnVnLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjY3NDg1ZTkwOTI4YTA1ZmNiZGE4Mjk0MGE3Mzk2NzA5ODcxZGI2MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGVidWcuaApAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFBsdWdpbkRlYnVnX2gKKyNkZWZpbmUgUGx1Z2luRGVidWdfaAorCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2RlZmluZSBMT0dfTlBFUlJPUihlcnIpIGlmIChl
cnIgIT0gTlBFUlJfTk9fRVJST1IpIExPR19WRVJCT1NFKFBsdWdpbnMsICIlc1xuIiwgcHJldHR5
TmFtZUZvck5QRXJyb3IoZXJyKSkKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKSBMT0df
VkVSQk9TRShQbHVnaW5zLCAiU3RyZWFtIGZhaWxlZCBkdWUgdG8gcHJvYmxlbXMgd2l0aCBuZXR3
b3JrLCBkaXNrIEkvTywgbGFjayBvZiBtZW1vcnksIG9yIG90aGVyIHByb2JsZW1zLlxuIikKKwor
I2lmICFMT0dfRElTQUJMRUQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBjaGFyKiBw
cmV0dHlOYW1lRm9yTlBFcnJvcihOUEVycm9yIGVycm9yKTsKKworQ1N0cmluZyBwcmV0dHlOYW1l
Rm9yTlBOVmFyaWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpOworQ1N0cmluZyBwcmV0dHlOYW1l
Rm9yTlBQVmFyaWFibGUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKK0NTdHJp
bmcgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlKTsK
KworI2lmZGVmIFhQX01BQ09TWAorY29uc3QgY2hhciogcHJldHR5TmFtZUZvckRyYXdpbmdNb2Rl
bChOUERyYXdpbmdNb2RlbCBkcmF3aW5nTW9kZWwpOworY29uc3QgY2hhciogcHJldHR5TmFtZUZv
ckV2ZW50TW9kZWwoTlBFdmVudE1vZGVsIGV2ZW50TW9kZWwpOworI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKKworI2VuZGlmIC8vIFBs
dWdpbkRlYnVnX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2lu
TWVzc2FnZVRocm90dGxlcldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1M2MzMTVjMjAxODQzOTRmM2I0
MDY0YTNmNTQ0NzU3M2VkMmNmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9QbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwCkBAIC0wLDAgKzEsMTUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW4uaCIKKworI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNldCBhIHRpbWVyIHRvIG1ha2Ugc3Vy
ZSB3ZSBwcm9jZXNzIGFueSBxdWV1ZWQgbWVzc2FnZXMgYXQgbGVhc3QgZXZlcnkgMTZtcy4KKy8v
IFRoaXMgdmFsdWUgYWxsb3dzIEZsYXNoIDYwIG1lc3NhZ2VzL3NlY29uZCwgd2hpY2ggc2hvdWxk
IGJlIGVub3VnaCBmb3IgdmlkZW8KKy8vIHBsYXliYWNrLCBhbmQgYWxzbyBnZXRzIHVzIG92ZXIg
dGhlIGxpbWl0IGZvciBraWNraW5nIGludG8gaGlnaC1yZXNvbHV0aW9uCisvLyB0aW1lciBtb2Rl
IChzZWUgU2hhcmVkVGltZXJXaW4uY3BwKS4KK3N0YXRpYyBjb25zdCBkb3VibGUgTWVzc2FnZVRo
cm90dGxlVGltZUludGVydmFsID0gMC4wMTY7CisKKy8vIER1cmluZyBhIGNvbnRpbnVvdXMgc3Ry
ZWFtIG9mIG1lc3NhZ2VzLCBwcm9jZXNzIG9uZSBldmVyeSA1bXMuCitzdGF0aWMgY29uc3QgZG91
YmxlIE1lc3NhZ2VEaXJlY3RQcm9jZXNzaW5nSW50ZXJ2YWwgPSAwLjAwNTsKKworUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbjo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbihQbHVnaW5WaWV3KiBw
bHVnaW5WaWV3KQorICAgIDogbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCisgICAgLCBtX2JhY2so
MCkKKyAgICAsIG1fZnJvbnQoMCkKKyAgICAsIG1fbWVzc2FnZVRocm90dGxlVGltZXIoKnRoaXMs
ICZQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjptZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKQor
ICAgICwgbV9sYXN0TWVzc2FnZVRpbWUoMCkKK3sKKyAgICAvLyBJbml0aWFsaXplIHRoZSBmcmVl
IGxpc3Qgd2l0aCBvdXIgaW5saW5lIG1lc3NhZ2VzCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IE51bUlubGluZU1lc3NhZ2VzIC0gMTsgaSsrKQorICAgICAgICBtX2lubGluZU1lc3NhZ2Vz
W2ldLm5leHQgPSAmbV9pbmxpbmVNZXNzYWdlc1tpICsgMV07CisgICAgbV9pbmxpbmVNZXNzYWdl
c1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdLm5leHQgPSAwOworICAgIG1fZnJlZUlubGluZU1lc3Nh
Z2VzID0gJm1faW5saW5lTWVzc2FnZXNbMF07Cit9CisKK1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW46On5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKCkKK3sKKyAgICBQbHVnaW5NZXNzYWdlKiBu
ZXh0OworCisgICAgZm9yIChQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gbV9mcm9udDsgbWVzc2Fn
ZTsgbWVzc2FnZSA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IG1lc3NhZ2UtPm5leHQ7CisgICAg
ICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5NZXNzYWdl
VGhyb3R0bGVyV2luOjphcHBlbmRNZXNzYWdlKEhXTkQgaFduZCwgVUlOVCBtc2csIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IGFs
bG9jYXRlTWVzc2FnZSgpOworCisgICAgbWVzc2FnZS0+aFduZCA9IGhXbmQ7CisgICAgbWVzc2Fn
ZS0+bXNnID0gbXNnOworICAgIG1lc3NhZ2UtPndQYXJhbSA9IHdQYXJhbTsKKyAgICBtZXNzYWdl
LT5sUGFyYW0gPSBsUGFyYW07CisgICAgbWVzc2FnZS0+bmV4dCA9IDA7CisKKyAgICBpZiAobV9i
YWNrKQorICAgICAgICBtX2JhY2stPm5leHQgPSBtZXNzYWdlOworICAgIG1fYmFjayA9IG1lc3Nh
Z2U7CisgICAgaWYgKCFtX2Zyb250KQorICAgICAgICBtX2Zyb250ID0gbWVzc2FnZTsKKworICAg
IC8vIElmIGl0IGhhcyBiZWVuIG1vcmUgdGhhbiBNZXNzYWdlRGlyZWN0UHJvY2Vzc2luZ0ludGVy
dmFsIGJldHdlZW4gdGhyb3R0bGVkIG1lc3NhZ2VzLAorICAgIC8vIGdvIGFoZWFkIGFuZCBwcm9j
ZXNzIGEgbWVzc2FnZSBkaXJlY3RseS4KKyAgICBkb3VibGUgY3VycmVudFRpbWUgPSBtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBpZiAoY3VycmVudFRpbWUgLSBtX2xhc3RNZXNz
YWdlVGltZSA+IE1lc3NhZ2VEaXJlY3RQcm9jZXNzaW5nSW50ZXJ2YWwpIHsKKyAgICAgICAgcHJv
Y2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKKyAgICAgICAgbV9sYXN0TWVzc2FnZVRpbWUgPSBjdXJyZW50
VGltZTsKKyAgICAgICAgaWYgKCFtX2Zyb250KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBt
X21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0bGVUaW1lSW50
ZXJ2YWwpOworfQorCit2b2lkIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OnByb2Nlc3NRdWV1
ZWRNZXNzYWdlKCkKK3sKKyAgICBQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gbV9mcm9udDsKKyAg
ICBtX2Zyb250ID0gbV9mcm9udC0+bmV4dDsKKyAgICBpZiAobWVzc2FnZSA9PSBtX2JhY2spCisg
ICAgICAgIG1fYmFjayA9IDA7CisKKyAgICAvLyBQcm90ZWN0IHRoZSBQbHVnaW5WaWV3IGZyb20g
ZGVzdHJ1Y3Rpb24gd2hpbGUgY2FsbGluZyBpdHMgd2luZG93IHByb2MuCisgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzY5MzAyODA+CisgICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3QobV9wbHVn
aW5WaWV3KTsKKyAgICA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luVmlldy0+cGx1Z2luV25kUHJv
YygpLCBtZXNzYWdlLT5oV25kLCBtZXNzYWdlLT5tc2csIG1lc3NhZ2UtPndQYXJhbSwgbWVzc2Fn
ZS0+bFBhcmFtKTsKKworICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOworfQorCit2b2lkIFBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW46Om1lc3NhZ2VUaHJvdHRsZVRpbWVyRmlyZWQoKQoreworICAg
IHByb2Nlc3NRdWV1ZWRNZXNzYWdlKCk7CisKKyAgICBpZiAobV9mcm9udCkKKyAgICAgICAgbV9t
ZXNzYWdlVGhyb3R0bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVy
dmFsKTsKK30KKworUGx1Z2luTWVzc2FnZSogUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6YWxs
b2NhdGVNZXNzYWdlKCkKK3sKKyAgICBQbHVnaW5NZXNzYWdlICptZXNzYWdlOworCisgICAgaWYg
KG1fZnJlZUlubGluZU1lc3NhZ2VzKSB7CisgICAgICAgIG1lc3NhZ2UgPSBtX2ZyZWVJbmxpbmVN
ZXNzYWdlczsKKyAgICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSBtZXNzYWdlLT5uZXh0Owor
ICAgIH0gZWxzZQorICAgICAgICBtZXNzYWdlID0gbmV3IFBsdWdpbk1lc3NhZ2U7CisKKyAgICBy
ZXR1cm4gbWVzc2FnZTsKK30KKworYm9vbCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjppc0lu
bGluZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICByZXR1cm4gbWVzc2Fn
ZSA+PSAmbV9pbmxpbmVNZXNzYWdlc1swXSAmJiBtZXNzYWdlIDw9ICZtX2lubGluZU1lc3NhZ2Vz
W051bUlubGluZU1lc3NhZ2VzIC0gMV07Cit9CisKK3ZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxl
cldpbjo6ZnJlZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBpZiAoaXNJ
bmxpbmVNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAgIG1lc3NhZ2UtPm5leHQgPSBtX2ZyZWVJ
bmxpbmVNZXNzYWdlczsKKyAgICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSBtZXNzYWdlOwor
ICAgIH0gZWxzZQorICAgICAgICBkZWxldGUgbWVzc2FnZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJXaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YzUxMDMwODM2ZDNhM2U5Mjc3YTYwZDU3YWQ2
MzdjNWFmZjFkYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lu
cy9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbl9oCisjZGVmaW5lIFBsdWdpbk1lc3NhZ2VUaHJv
dHRsZXJXaW5faAorCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFBsdWdpblZpZXc7CisKKyAgICBzdHJ1
Y3QgUGx1Z2luTWVzc2FnZSB7CisgICAgICAgIEhXTkQgaFduZDsKKyAgICAgICAgVUlOVCBtc2c7
CisgICAgICAgIFdQQVJBTSB3UGFyYW07CisgICAgICAgIExQQVJBTSBsUGFyYW07CisKKyAgICAg
ICAgc3RydWN0IFBsdWdpbk1lc3NhZ2UqIG5leHQ7CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW4geworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbihQbHVnaW5WaWV3Kik7CisgICAgICAgIH5QbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luKCk7CisKKyAgICAgICAgdm9pZCBhcHBlbmRNZXNzYWdlKEhXTkQsIFVJTlQgbXNnLCBX
UEFSQU0sIExQQVJBTSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHByb2Nlc3NRdWV1
ZWRNZXNzYWdlKCk7CisgICAgICAgIHZvaWQgbWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCgpOwor
ICAgICAgICBQbHVnaW5NZXNzYWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKTsKKyAgICAgICAgYm9vbCBp
c0lubGluZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSk7CisgICAgICAgIHZvaWQgZnJl
ZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSk7CisKKyAgICAgICAgUGx1Z2luVmlldyog
bV9wbHVnaW5WaWV3OworICAgICAgICBQbHVnaW5NZXNzYWdlKiBtX2JhY2s7CisgICAgICAgIFBs
dWdpbk1lc3NhZ2UqIG1fZnJvbnQ7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBOdW1Jbmxp
bmVNZXNzYWdlcyA9IDQ7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UgbV9pbmxpbmVNZXNzYWdlc1tO
dW1JbmxpbmVNZXNzYWdlc107CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlubGluZU1l
c3NhZ2VzOworCisgICAgICAgIFRpbWVyIG1fbWVzc2FnZVRocm90dGxlVGltZXI7CisgICAgICAg
IGRvdWJsZSBtX2xhc3RNZXNzYWdlVGltZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlMDk5ODgwNDk3
MWNhZTVhYmE2M2NkNmNkYzEzNDVmZTdjMjQwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCkBAIC0wLDAgKzEsNDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
cgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVkZSAiY191dGls
aXR5LmgiCisjaW5jbHVkZSAiSWRlbnRpZmllclJlcC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKKyNpbmNsdWRlICJOUF9qc29iamVjdC5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3Lmgi
CisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
ICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2Jh
bE9iamVjdC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCit7CisgICAgLy8gVGhp
cyBkZXN0cnVjdG9yIGdldHMgY2FsbGVkIGR1cmluZyByZWZyZXNoKCkgaWYgUGx1Z2luRGF0YWJh
c2UncworICAgIC8vIFBsdWdpblNldCBoYXNoIGlzIGFscmVhZHkgcG9wdWxhdGVkLCBhcyBpdCBy
ZW1vdmVzIGl0ZW1zIGZyb20KKyAgICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2FsbGluZyB0aGUgZGVz
dHJ1Y3RvciBvbiBhIGxvYWRlZCBwbHVnLWluIG9mCisgICAgLy8gY291cnNlIHdvdWxkIGNhdXNl
IGEgY3Jhc2gsIHNvIHdlIGNoZWNrIHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3ZQorICAgIC8vIEFT
U0VSVC4KKyAgICAvLyBGSVhNRTogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGZp
eCB0aGlzLgorICAgIGlmICghbV9sb2FkQ291bnQpCisgICAgICAgIHVubG9hZFdpdGhvdXRTaHV0
ZG93bigpOworICAgIGVsc2UKKyAgICAgICAgdW5sb2FkKCk7CisKKyAgICBBU1NFUlQoIW1faXNM
b2FkZWQpOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5U29vbigpCit7Cisg
ICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKG1f
bW9kdWxlKTsKKyAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKKworICAgIG1fZnJlZUxpYnJhcnlU
aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJh
cnlUaW1lckZpcmVkKCkKK3sKKyAgICBBU1NFUlQobV9tb2R1bGUpOworICAgIC8vIERvIG5vdGhp
bmcgaWYgdGhlIG1vZHVsZSBnb3QgbG9hZGVkIGFnYWluIG1lYW53aGlsZQorICAgIGlmICghbV9s
b2FkQ291bnQpIHsKKyAgICAgICAgdW5sb2FkTW9kdWxlKG1fbW9kdWxlKTsKKyAgICAgICAgbV9t
b2R1bGUgPSAwOworICAgIH0KK30KKworCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25z
dCBQbHVnaW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Cit7CisgICAgLy8gU29ydCBwbHVnLWlu
cyB0aGF0IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4KKyAgICBib29sIEFhbGxvd3NN
dWx0aXBsZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxv
d011bHRpcGxlSW5zdGFuY2VzKTsKKyAgICBib29sIEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9
ICFjb21wYXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBs
ZUluc3RhbmNlcyk7CisgICAgaWYgKEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyAhPSBCYWxsb3dz
TXVsdGlwbGVJbnN0YW5jZXMpCisgICAgICAgIHJldHVybiBBYWxsb3dzTXVsdGlwbGVJbnN0YW5j
ZXMgPyAtMSA6IDE7CisKKyAgICAvLyBTb3J0IHBsdWctaW5zIGluIGEgcHJlZmVycmVkIHBhdGgg
Zmlyc3QuCisgICAgYm9vbCBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFiYXNl
Ojppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShwYXJlbnREaXJlY3RvcnkoKSk7CisgICAgYm9v
bCBCaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpbkRpcmVjdG9yeShjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkpOworICAgIGlmIChBaXNJ
blByZWZlcnJlZERpcmVjdG9yeSAhPSBCaXNJblByZWZlcnJlZERpcmVjdG9yeSkKKyAgICAgICAg
cmV0dXJuIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ID8gLTEgOiAxOworCisgICAgaW50IGRpZmYg
PSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5uYW1lKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgaWYgKGRpZmYpCisgICAgICAgIHJldHVybiBkaWZmOworCisgICAgZGlmZiA9
IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKTsKKyAgICBpZiAoZGlmZikK
KyAgICAgICAgcmV0dXJuIGRpZmY7CisKKyAgICByZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9y
eSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0
YSgpKTsKK30KKworUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQorICAgIDogbV9pc0VuYWJsZWQodHJ1ZSkK
KyAgICAsIG1faXNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2xvYWRDb3VudCgwKQorICAgICwgbV9w
YXRoKHBhdGgpCisgICAgLCBtX21vZHVsZVZlcnNpb24oMCkKKyAgICAsIG1fbW9kdWxlKDApCisg
ICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCisgICAgLCBtX2ZyZWVMaWJyYXJ5VGlt
ZXIoKnRoaXMsICZQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAsIG1faW5mb0lzRnJvbUNh
Y2hlKHRydWUpCisjZW5kaWYKK3sKKyAgICBtX2ZpbGVOYW1lID0gcGF0aEdldEZpbGVOYW1lKG1f
cGF0aCk7CisgICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3Ro
KCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6
dW5sb2FkKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICgtLW1fbG9hZENvdW50ID4gMCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCisgICAgbV9OUFBfU2h1dGRvd24oKTsKKyNlbmRpZgorCisgICAg
dW5sb2FkV2l0aG91dFNodXRkb3duKCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2Fk
V2l0aG91dFNodXRkb3duKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVCghbV9sb2FkQ291bnQpOworICAgIEFTU0VSVChtX21vZHVsZSk7CisK
KyAgICAvLyA8cmRhcjovLzU1MzA1MTk+OiBDcmFzaCB3aGVuIGNsb3NpbmcgdGFiIHdpdGggcGRm
IGZpbGUgKFJlYWRlciA3IG9ubHkpCisgICAgLy8gSWYgdGhlIHBsdWdpbiBoYXMgc3ViY2xhc3Nl
ZCBpdHMgcGFyZW50IHdpbmRvdywgYXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5IGhhdmUKKyAgICAv
LyBnb3R0ZW4gaGVyZSBieSB3YXkgb2YgdGhlIHBsdWdpbidzIGludGVybmFsIHdpbmRvdyBwcm9j
IGZvcndhcmRpbmcgYSBtZXNzYWdlIHRvIG91cgorICAgIC8vIG9yaWdpbmFsIHdpbmRvdyBwcm9j
LiBJZiB3ZSBmcmVlIHRoZSBwbHVnaW4gbGlicmFyeSBmcm9tIGhlcmUsIHdlIHdpbGwganVtcCBi
YWNrCisgICAgLy8gdG8gY29kZSB3ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0dXJuLCBzbyBkZWxh
eSBjYWxsaW5nIEZyZWVMaWJyYXJ5IGF0IGxlYXN0IHVudGlsCisgICAgLy8gdGhlIG5leHQgbWVz
c2FnZSBsb29wCisgICAgZnJlZUxpYnJhcnlTb29uKCk7CisKKyAgICBtX2lzTG9hZGVkID0gZmFs
c2U7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCit7
CisgICAgbV9pc0VuYWJsZWQgPSBlbmFibGVkOworfQorCitQYXNzUmVmUHRyPFBsdWdpblBhY2th
Z2U+IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKK3sKKyAgICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFj
a2FnZSA9IGFkb3B0UmVmKG5ldyBQbHVnaW5QYWNrYWdlKHBhdGgsIGxhc3RNb2RpZmllZCkpOwor
CisgICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX01FVEFEQVRBX0NBQ0hFKQorUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBQbHVnaW5QYWNr
YWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGlt
ZV90JiBsYXN0TW9kaWZpZWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkZXNj
cmlwdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pCit7CisgICAgUmVmUHRyPFBs
dWdpblBhY2thZ2U+IHBhY2thZ2UgPSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBs
YXN0TW9kaWZpZWQpKTsKKyAgICBwYWNrYWdlLT5tX25hbWUgPSBuYW1lOworICAgIHBhY2thZ2Ut
Pm1fZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgICBwYWNrYWdlLT5kZXRlcm1pbmVNb2R1
bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCk7CisgICAgcGFja2FnZS0+c2V0TUlNRURlc2NyaXB0
aW9uKG1pbWVEZXNjcmlwdGlvbik7CisgICAgcGFja2FnZS0+bV9pbmZvSXNGcm9tQ2FjaGUgPSB0
cnVlOworICAgIHJldHVybiBwYWNrYWdlLnJlbGVhc2UoKTsKK30KKyNlbmRpZgorCisjaWYgZGVm
aW5lZChYUF9VTklYKQordm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBw
bGV0TUlNRVR5cGUobWltZVR5cGUpKSB7CisgICAgICAgIC8vIEJlY2F1c2UgYSBzaW5nbGUgcHJv
Y2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCByZWxpYWJseSB1
bmxvYWQgYQorICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRoZSBKYXZhIHBs
dWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KKyAgICAgICAgbV9x
dWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisKKyAgICAgICAgLy8gU2V0
dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1c2VzIGJhZCBzY3Jv
bGxpbmcgcmVwYWludCBwcm9ibGVtcworICAgICAgICAvLyB3aXRoIHRoZSBKYXZhIHBsdWctaW4u
CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5T
Y3JvbGxpbmcpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1pbWVUeXBlID09
ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBmbGFzaFRlblZlcnNpb24oMHgwYTAwMDAwMCk7CisKKyAg
ICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihmbGFzaFRlblZlcnNpb24pID49IDApIHsKKyAg
ICAgICAgICAgIC8vIEZsYXNoIDEwLjAgYjIxOCBkb2Vzbid0IGxpa2UgaGF2aW5nIGEgTlVMTCB3
aW5kb3cgaGFuZGxlCisgICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250U2V0
TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBGbGFzaCA5IGFuZCBvbGRlciByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2Ug
cmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50CisgICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOworICAgICAgICB9CisKKyNpZiBDUFUoWDg2
XzY0KQorICAgICAgICAvLyA2NC1iaXQgRmxhc2ggZnJlZXplcyBpZiByaWdodC1jbGljayBpcyBz
ZW50IGluIHdpbmRvd2xlc3MgbW9kZQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtJ
Z25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSk7CisjZW5kaWYKKworICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCk7CisgICAgICAg
IG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7CisgICAgICAgIG1f
cXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKKyAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOworICAgIH0K
K30KKyNlbmRpZgorCisjaWYgIU9TKFdJTkRPV1MpCit2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVy
bWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKQoreworICAgIC8vIEl0J3MgYSBiaXQg
bGFtZSB0byBkZXRlY3QgdGhlIHBsdWdpbiB2ZXJzaW9uIGJ5IHBhcnNpbmcgaXQKKyAgICAvLyBm
cm9tIHRoZSBwbHVnaW4gZGVzY3JpcHRpb24gc3RyaW5nLCBidXQgaXQgZG9lc24ndCBzZWVtIHRo
YXQKKyAgICAvLyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBhbnkgc3RhbmRh
cmRpemVkIHdheSBhdAorICAgIC8vIHRoZSBtb2R1bGUgbGV2ZWwsIGxpa2UgaW4gV2luZG93cwor
CisgICAgaWYgKG1fZGVzY3JpcHRpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobV9kZXNjcmlwdGlvbi5zdGFydHNXaXRoKCJTaG9ja3dhdmUgRmxhc2giKSAmJiBtX2Rl
c2NyaXB0aW9uLmxlbmd0aCgpID49IDE5KSB7CisgICAgICAgIC8vIFRoZSBmbGFzaCB2ZXJzaW9u
IGFzIGEgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGRpZmZlcnMgb24gVW5peCBmcm9tIFdpbmRvd3MK
KyAgICAgICAgLy8gc2luY2UgdGhlIHJldmlzaW9uIGNhbiBiZSBsYXJnZXIgdGhhbiBhIDggYml0
cywgc28gd2UgYWxsb3cgaXQgMTYgaGVyZSBhbmQKKyAgICAgICAgLy8gcHVzaCB0aGUgbWFqb3Iv
bWlub3IgdXAgOCBiaXRzLiBUaHVzIG9uIFVuaXgsIEZsYXNoJ3MgdmVyc2lvbiBtYXkgYmUKKyAg
ICAgICAgLy8gMHgwYTAwMDAwMCBpbnN0ZWFkIG9mIDB4MDAwYTAwMDAuCisKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gdmVyc2lvblBhcnRzOworICAgICAgICBtX2Rlc2NyaXB0aW9uLnN1YnN0cmlu
ZygxNikuc3BsaXQoJyAnLCAvKmFsbG93RW1wdHlFbnRyaWVzID0qLyBmYWxzZSwgdmVyc2lvblBh
cnRzKTsKKyAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5zaXplKCkgPj0gMSkgeworICAgICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gbWFqb3JNaW5vclBhcnRzOworICAgICAgICAgICAgdmVyc2lv
blBhcnRzWzBdLnNwbGl0KCcuJywgbWFqb3JNaW5vclBhcnRzKTsKKyAgICAgICAgICAgIGlmICht
YWpvck1pbm9yUGFydHMuc2l6ZSgpID49IDEpIHsKKyAgICAgICAgICAgICAgICBib29sIGNvbnZl
cnRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1ham9yID0gbWFqb3JNaW5v
clBhcnRzWzBdLnRvVUludCgmY29udmVydGVkKTsKKyAgICAgICAgICAgICAgICBpZiAoY29udmVy
dGVkKQorICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gPSAobWFqb3IgJiAweGZm
KSA8PCAyNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYWpvck1pbm9yUGFydHMu
c2l6ZSgpID09IDIpIHsKKyAgICAgICAgICAgICAgICBib29sIGNvbnZlcnRlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbm9yID0gbWFqb3JNaW5vclBhcnRzWzFdLnRvVUlu
dCgmY29udmVydGVkKTsKKyAgICAgICAgICAgICAgICBpZiAoY29udmVydGVkKQorICAgICAgICAg
ICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0gKG1pbm9yICYgMHhmZikgPDwgMTY7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyc2lvblBhcnRzLnNpemUoKSA+
PSAyKSB7CisgICAgICAgICAgICBTdHJpbmcgcmV2aXNpb24gPSB2ZXJzaW9uUGFydHNbMV07Cisg
ICAgICAgICAgICBpZiAocmV2aXNpb24ubGVuZ3RoKCkgPiAxICYmIChyZXZpc2lvblswXSA9PSAn
cicgfHwgcmV2aXNpb25bMF0gPT0gJ2InKSkgeworICAgICAgICAgICAgICAgIHJldmlzaW9uLnJl
bW92ZSgwLCAxKTsKKyAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0gcmV2aXNpb24u
dG9JbnQoKSAmIDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKyNl
bmRpZgorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitzdGF0aWMgdm9pZCBnZXRM
aXN0RnJvbVZhcmlhbnRBcmdzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBOUFZhcmlhbnQq
IGFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290
T2JqZWN0LCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhTGlzdCkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKyAgICAgICAgYUxpc3QuYXBwZW5kKEpT
Qzo6QmluZGluZ3M6OmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZhcmdzW2ldLCByb290
T2JqZWN0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpTb3VyY2VDb2RlIG1ha2VTb3VyY2Uo
Y29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsID0gU3RyaW5nKCksIGNvbnN0
IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0
aW9uKCkpCit7CisgICAgcmV0dXJuIEpTQzo6U291cmNlQ29kZShKU0M6OlN0cmluZ1NvdXJjZVBy
b3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1cmwsIHN0YXJ0UG9zaXRpb24pLCBzdGFydFBvc2l0aW9u
Lm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50
KCkpOworfQorCitzdGF0aWMgYm9vbCBOUE5fRXZhbHVhdGUoTlBQIGluc3RhbmNlLCBOUE9iamVj
dCogbywgTlBTdHJpbmcqIHMsIE5QVmFyaWFudCogdmFyaWFudCkKK3sKKyAgICBpZiAoby0+X2Ns
YXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKKyAgICAgICAgSmF2YVNjcmlwdE9iamVjdCog
b2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7CisKKyAgICAgICAg
SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsK
KyAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gVGhlcmUgaXMgYSBjcmFzaCBpbiBG
bGFzaCB3aGVuIGV2YWx1YXRpbmcgYSBzY3JpcHQgdGhhdCBkZXN0cm95cyB0aGUKKyAgICAgICAg
Ly8gUGx1Z2luVmlldywgc28gd2UgZGVzdHJveSBpdCBhc3luY2hyb25vdXNseS4KKyAgICAgICAg
UGx1Z2luVmlldzo6a2VlcEFsaXZlKGluc3RhbmNlKTsKKworICAgICAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAg
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIFN0cmluZyBzY3JpcHRT
dHJpbmcgPSBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOworCisgICAg
ICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBK
U0M6OkpTVmFsdWUoKSk7CisKKyAgICAgICAgSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9O
UFZhcmlhbnQoZXhlYywgcmV0dXJuVmFsdWUsIHZhcmlhbnQpOworICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBWT0lEX1RP
X05QVkFSSUFOVCgqdmFyaWFudCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9v
bCBOUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIgbWV0aG9kTmFt
ZSwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Cisg
ICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlw
dE9iamVjdCo+KG8pOworCisgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJ
ZGVudGlmaWVyUmVwKj4obWV0aG9kTmFtZSk7CisgICAgICAgIGlmICghaS0+aXNTdHJpbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBTcGVjaWFsIGNhc2UgdGhl
ICJldmFsIiBtZXRob2QuCisgICAgICAgIGlmIChtZXRob2ROYW1lID09IF9OUE5fR2V0U3RyaW5n
SWRlbnRpZmllcigiZXZhbCIpKSB7CisgICAgICAgICAgICBpZiAoYXJnQ291bnQgIT0gMSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoYXJnc1swXS50eXBl
ICE9IE5QVmFyaWFudFR5cGVfU3RyaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpOUE5fRXZhbHVhdGUobnBwLCBvLCBjb25zdF9j
YXN0PE5QU3RyaW5nKj4oJmFyZ3NbMF0udmFsdWUuc3RyaW5nVmFsdWUpLCByZXN1bHQpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgorICAgICAg
ICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0
OworICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBv
YmotPmltcC0+Z2V0KGV4ZWMsIEpTQzo6QmluZGluZ3M6OmlkZW50aWZpZXJGcm9tTlBJZGVudGlm
aWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CisgICAgICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7
CisgICAgICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOworICAgICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZU5vbmUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24g
b2JqZWN0LgorICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7CisgICAg
ICAgIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoZXhlYywgYXJncywgYXJnQ291bnQsIHJvb3RPYmpl
Y3QsIGFyZ0xpc3QpOworICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ViA9IEpTQzo6Y2FsbChl
eGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmotPmltcCwgYXJnTGlzdCk7CisK
KyAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9u
IGNhbGwuCisgICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4
ZWMsIHJlc3VsdFYsIHJlc3VsdCk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChvLT5fY2xhc3MtPmludm9rZSkK
KyAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+aW52b2tlKG8sIG1ldGhvZE5hbWUsIGFyZ3MsIGFy
Z0NvdW50LCByZXN1bHQpOworCisgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6aW5pdGlhbGl6ZUJyb3dzZXJG
dW5jcygpCit7CisgICAgbWVtc2V0KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6ZW9mKG1fYnJvd3Nl
ckZ1bmNzKSk7CisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZihtX2Jyb3dzZXJGdW5j
cyk7CisgICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QVmVyc2lvbigpOworCisgICAgbV9i
cm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0
dXJsID0gTlBOX1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5f
UmVxdWVzdFJlYWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVh
bTsKKyAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07CisgICAgbV9icm93c2VyRnVu
Y3Muc3RhdHVzID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5f
VXNlckFnZW50OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOwor
ICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRw
bHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90
aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5
ID0gTlBOX1Bvc3RVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5f
R2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7Cisg
ICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7Cisg
ICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9u
OworICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OworICAg
IG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7Cisg
ICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0Vu
YWJsZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wbHVnaW50aHJlYWRhc3luY2NhbGwgPSBO
UE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsOworCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZh
cmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOworICAgIG1f
YnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlm
aWVyczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJ
ZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5f
SWRlbnRpZmllcklzU3RyaW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmll
ciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmludGZyb21p
ZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5j
cmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXRh
aW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNl
b2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9
IFdlYkNvcmU6Ok5QTl9JbnZva2U7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9
IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IFdlYkNv
cmU6Ok5QTl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5f
R2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFBy
b3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQ
cm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzUHJvcGVy
dHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNNZXRob2Q7CisgICAg
bV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9i
cm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisgICAgbV9icm93c2VyRnVu
Y3MuY29uc3RydWN0ID0gX05QTl9Db25zdHJ1Y3Q7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dmFs
dWVmb3J1cmwgPSBOUE5fR2V0VmFsdWVGb3JVUkw7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFs
dWVmb3J1cmwgPSBOUE5fU2V0VmFsdWVGb3JVUkw7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0YXV0
aGVudGljYXRpb25pbmZvID0gTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mbzsKKworICAgIG1fYnJv
d3NlckZ1bmNzLnBvcHVwY29udGV4dG1lbnUgPSBOUE5fUG9wVXBDb250ZXh0TWVudTsKK30KKyNl
bmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKworI2lmIEVOQUJMRShQTFVHSU5f
UEFDS0FHRV9TSU1QTEVfSEFTSCkKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25z
dAoreworICAgIHN0cnVjdCBIYXNoQ29kZXMgeworICAgICAgICB1bnNpZ25lZCBoYXNoOworICAg
ICAgICB0aW1lX3QgbW9kaWZpZWREYXRlOworICAgIH0gaGFzaENvZGVzOworCisgICAgaGFzaENv
ZGVzLmhhc2ggPSBtX3BhdGguaW1wbCgpLT5oYXNoKCk7CisgICAgaGFzaENvZGVzLm1vZGlmaWVk
RGF0ZSA9IG1fbGFzdE1vZGlmaWVkOworCisgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1l
bW9yeTxzaXplb2YoaGFzaENvZGVzKT4oJmhhc2hDb2Rlcyk7Cit9CisKK2Jvb2wgUGx1Z2luUGFj
a2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYg
YikKK3sKKyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKK30K
KyNlbmRpZgorCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0Cit7CisgICAgLy8gcmV0
dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4sIGVxdWFsIHRv
LCBvciBncmVhdGVyIHRoYW4KKyAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KKworI2lmIE9TKFdJ
TkRPV1MpCisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5tb3N0U2lnICE9IGNvbXBhcmVWZXJzaW9u
Lm1vc3RTaWcpCisgICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24ubW9zdFNpZyA+IGNvbXBh
cmVWZXJzaW9uLm1vc3RTaWcgPyAxIDogLTE7CisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5sZWFz
dFNpZyAhPSBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZykKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxl
VmVyc2lvbi5sZWFzdFNpZyA+IGNvbXBhcmVWZXJzaW9uLmxlYXN0U2lnID8gMSA6IC0xOworI2Vs
c2UgICAgCisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbiAhPSBjb21wYXJlVmVyc2lvbikKKyAgICAg
ICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbiA+IGNvbXBhcmVWZXJzaW9uID8gMSA6IC0xOworI2Vu
ZGlmCisKKyAgICByZXR1cm4gMDsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVU
QURBVEFfQ0FDSEUpCitib29sIFBsdWdpblBhY2thZ2U6OmVuc3VyZVBsdWdpbkxvYWRlZCgpCit7
CisgICAgaWYgKCFtX2luZm9Jc0Zyb21DYWNoZSkKKyAgICAgICAgcmV0dXJuIG1faXNMb2FkZWQ7
CisKKyAgICBtX3F1aXJrcyA9IFBsdWdpblF1aXJrU2V0KCk7CisgICAgbV9uYW1lID0gU3RyaW5n
KCk7CisgICAgbV9kZXNjcmlwdGlvbiA9IFN0cmluZygpOworICAgIG1fZnVsbE1JTUVEZXNjcmlw
dGlvbiA9IFN0cmluZygpOworICAgIG1fbW9kdWxlVmVyc2lvbiA9IDA7CisKKyAgICByZXR1cm4g
ZmV0Y2hJbmZvKCk7Cit9CisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1Bs
dWdpblBhY2thZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODM0MDU3Njc5N2FhNmJjODMxNzcyYmMzYjRmOWNj
ZjhjYzhiYTYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5QYWNrYWdlLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGx1Z2luUGFja2FnZV9o
CisjZGVmaW5lIFBsdWdpblBhY2thZ2VfaAorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2lu
Y2x1ZGUgIlBsdWdpblF1aXJrU2V0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKyNl
bmRpZgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2NyaXB0aW9uc01hcDsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CisKKyAgICBj
bGFzcyBQbHVnaW5QYWNrYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZT4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgflBsdWdpblBhY2thZ2UoKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X01FVEFEQVRBX0NBQ0hFKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdl
PiBjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90
JiBsYXN0TW9kaWZpZWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlw
dGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pOworI2VuZGlmCisKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgICAgIGNv
bnN0IFN0cmluZyYgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9
CisgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQor
ICAgICAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFt
ZTsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIHBhcmVudERpcmVjdG9yeSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyZW50RGlyZWN0b3J5OyB9CisgICAgICAgIFBsYXRmb3JtTW9kdWxlIG1vZHVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlOyB9CisgICAgICAgIHVpbnQxNl90IE5QVmVyc2lvbigp
IGNvbnN0OworICAgICAgICB0aW1lX3QgbGFzdE1vZGlmaWVkKCkgY29uc3QgeyByZXR1cm4gbV9s
YXN0TW9kaWZpZWQ7IH0KKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1p
bWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRGVzY3JpcHRpb25zOyB9
CisgICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1pbWVUb0V4dGVuc2lvbnMoKSBj
b25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KKworICAgICAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3Q7CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2th
Z2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIpOworCisgICAgICAgIGJvb2wgbG9hZCgpOwor
ICAgICAgICB2b2lkIHVubG9hZCgpOworICAgICAgICB2b2lkIHVubG9hZFdpdGhvdXRTaHV0ZG93
bigpOworCisgICAgICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0VuYWJs
ZWQ7IH0KKyAgICAgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNz
KCkgY29uc3QgeyByZXR1cm4gJm1fcGx1Z2luRnVuY3M7IH0KKyNlbmRpZgorICAgICAgICBpbnQg
Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYpIGNvbnN0Owor
ICAgICAgICBpbnQgY29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJikgY29uc3Q7CisgICAgICAg
IFBsdWdpblF1aXJrU2V0IHF1aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1fcXVpcmtzOyB9CisgICAg
ICAgIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbW9kdWxlVmVyc2lvbjsgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFU
QV9DQUNIRSkKKyAgICAgICAgYm9vbCBlbnN1cmVQbHVnaW5Mb2FkZWQoKTsKKyAgICAgICAgdm9p
ZCBzZXRNSU1FRGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pOworICAg
ICAgICBTdHJpbmcgZnVsbE1JTUVEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbE1J
TUVEZXNjcmlwdGlvbjt9CisjZW5kaWYKKyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5QYWNr
YWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworCisg
ICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisgICAgICAgIGJvb2wgaXNQbHVnaW5CbGFja2xpc3Rl
ZCgpOworICAgICAgICB2b2lkIGRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKKworICAgICAgICB2b2lkIGRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24o
KTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplQnJvd3NlckZ1bmNzKCk7CisKKyAgICAgICAgYm9v
bCBtX2lzRW5hYmxlZDsKKyAgICAgICAgYm9vbCBtX2lzTG9hZGVkOworICAgICAgICBpbnQgbV9s
b2FkQ291bnQ7CisKKyAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247CisgICAgICAgIFN0cmlu
ZyBtX3BhdGg7CisgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOworICAgICAgICBTdHJpbmcgbV9u
YW1lOworICAgICAgICBTdHJpbmcgbV9wYXJlbnREaXJlY3Rvcnk7CisKKyAgICAgICAgUGxhdGZv
cm1Nb2R1bGVWZXJzaW9uIG1fbW9kdWxlVmVyc2lvbjsKKworICAgICAgICBNSU1FVG9EZXNjcmlw
dGlvbnNNYXAgbV9taW1lVG9EZXNjcmlwdGlvbnM7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNN
YXAgbV9taW1lVG9FeHRlbnNpb25zOworCisgICAgICAgIFBsYXRmb3JtTW9kdWxlIG1fbW9kdWxl
OworICAgICAgICB0aW1lX3QgbV9sYXN0TW9kaWZpZWQ7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKKyAgICAgICAgTlBQX1NodXRkb3duUHJvY1B0ciBtX05QUF9TaHV0ZG93bjsK
KyAgICAgICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNzOworICAgICAgICBOUE5ldHNjYXBl
RnVuY3MgbV9icm93c2VyRnVuY3M7CisjZW5kaWYKKworICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5
U29vbigpOworICAgICAgICB2b2lkIGZyZWVMaWJyYXJ5VGltZXJGaXJlZCgpOworICAgICAgICBU
aW1lciBtX2ZyZWVMaWJyYXJ5VGltZXI7CisKKyAgICAgICAgUGx1Z2luUXVpcmtTZXQgbV9xdWly
a3M7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAg
U3RyaW5nIG1fZnVsbE1JTUVEZXNjcmlwdGlvbjsKKyAgICAgICAgYm9vbCBtX2luZm9Jc0Zyb21D
YWNoZTsKKyNlbmRpZgorICAgIH07CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91
bmQgYmVjYXVzZSBQbHVnaW5QYWNrYWdlSGFzaCBpcyBicm9rZW4gYW5kIG1heSBjb25zaWRlciBr
ZXlzIHdpdGggZGlmZmVyZW50IGhhc2hlcyBhcyBlcXVhbC4KKyAgICBzdHJ1Y3QgUGx1Z2luUGFj
a2FnZUhhc2hUcmFpdHMgOiBIYXNoVHJhaXRzPFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IHsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gNjQ7CisgICAgfTsKKwor
ICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlSGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IHVpbnRwdHJfdCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2lu
UGFja2FnZSo+KGtleSktPmhhc2goKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0K
KworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCB1aW50cHRyX3QgYSwgY29uc3QgdWlu
dHB0cl90IGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+
KGEpLCByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihiKSk7IH0KKyAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBhLCBjb25zdCBSZWZQ
dHI8UGx1Z2luUGFja2FnZT4mIGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2U6OmVxdWFsKCphLmdl
dCgpLCAqYi5nZXQoKSk7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFy
ZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVn
aW5QYWNrYWdlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2Fn
ZVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTg1MjU3ZDYyMjkyNzIwOTE4YTUxYTM2ZDgyN2Q4Y2NkMmQ0
MTljMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2lu
UGFja2FnZVdpbi5jcHAKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5E
ZWJ1Zy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIK
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgU3RyaW5nIGdldFZlcnNpb25JbmZvKGNvbnN0IExQVk9J
RCB2ZXJzaW9uSW5mb0RhdGEsIGNvbnN0IFN0cmluZyYgaW5mbykKK3sKKyAgICBMUFZPSUQgYnVm
ZmVyOworICAgIFVJTlQgYnVmZmVyTGVuZ3RoOworICAgIFN0cmluZyBzdWJJbmZvID0gIlxcU3Ry
aW5nZmlsZUluZm9cXDA0MDkwNEU0XFwiICsgaW5mbzsKKyAgICBib29sIHJldHZhbCA9IFZlclF1
ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0YSwKKyAgICAgICAgY29uc3RfY2FzdDxVQ2hhcio+KHN1
YkluZm8uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLAorICAgICAgICAm
YnVmZmVyLCAmYnVmZmVyTGVuZ3RoKTsKKyAgICBpZiAoIXJldHZhbCB8fCBidWZmZXJMZW5ndGgg
PT0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gU3VidHJhY3QgMSBmcm9t
IHRoZSBsZW5ndGg7IHdlIGRvbid0IHdhbnQgdGhlIHRyYWlsaW5nIG51bGwgY2hhcmFjdGVyLgor
ICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGJ1ZmZlciksIGJ1ZmZl
ckxlbmd0aCAtIDEpOworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmlzUGx1Z2luQmxhY2tsaXN0
ZWQoKQoreworICAgIGlmIChuYW1lKCkgPT0gIkNpdHJpeCBJQ0EgQ2xpZW50IikgeworICAgICAg
ICAvLyBUaGUgQ2l0cml4IElDQSBDbGllbnQgcGx1Zy1pbiByZXF1aXJlcyBhIE1vemlsbGEtYmFz
ZWQgYnJvd3Nlcjsgc2VlIDxyZGFyOi8vNjQxODY4MT4uCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChuYW1lKCkgPT0gIlNpbHZlcmxpZ2h0IFBsdWctSW4iKSB7CisgICAg
ICAgIC8vIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vNTU1NzM3OT4gQ3Jhc2ggaW4gU2lsdmVybGln
aHQgd2hlbiBvcGVuaW5nIG1pY3Jvc29mdC5jb20uCisgICAgICAgIC8vIHRoZSBsYXRlc3QgMS4w
IHZlcnNpb24gb2YgU2lsdmVybGlnaHQgZG9lcyBub3QgcmVwcm9kdWNlIHRoaXMgY3Jhc2gsIHNv
IGFsbG93IGl0CisgICAgICAgIC8vIGFuZCBhbnkgbmV3ZXIgdmVyc2lvbnMKKyAgICAgICAgc3Rh
dGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBzbFBsdWdpbk1pblJlcXVpcmVkKDB4NTFC
RTAwMDAsIDB4MDAwMTAwMDApOworCisgICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oc2xQ
bHVnaW5NaW5SZXF1aXJlZCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlTmFtZSgpLCAibnBtb3pheC5kbGwiKSkgewor
ICAgICAgICAvLyBCdWcgMTUyMTc6IE1vemlsbGEgQWN0aXZlWCBjb250cm9sIGNvbXBsYWlucyBh
Ym91dCBtaXNzaW5nIHhwY29tX2NvcmUuZGxsCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZU5hbWUoKSwgIm5wd3BmLmRsbCIpKSB7Cisg
ICAgICAgIC8vIEJ1ZyA1NzExOTogTWljcm9zb2Z0IFdpbmRvd3MgUHJlc2VudGF0aW9uIEZvdW5k
YXRpb24gKFdQRikgcGx1Zy1pbiBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4cGNvbS5kbGwKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChuYW1lKCkgPT0gIllhaG9vIEFwcGxp
Y2F0aW9uIFN0YXRlIFBsdWdpbiIpIHsKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI2ODYwCisgICAgICAgIC8vIEJ1ZyBpbiBZYWhvbyBBcHBsaWNh
dGlvbiBTdGF0ZSBwbHVnLWluIGVhcmxpZXIgdGhhbiAxLjAuMC42IGxlYWRzIHRvIGhlYXAgY29y
cnVwdGlvbi4gCisgICAgICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24geWFo
b29BcHBTdGF0ZVBsdWdpbk1pblJlcXVpcmVkKDB4MDAwMDAwMDYsIDB4MDAwMTAwMDApOworICAg
ICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKHlhaG9vQXBwU3RhdGVQbHVnaW5NaW5SZXF1aXJl
ZCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZVF1aXJrcyhjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9j
a3dhdmUtZmxhc2giKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNp
b24gZmxhc2hUZW5WZXJzaW9uKDB4MDAwMDAwMDAsIDB4MDAwYTAwMDApOworCisgICAgICAgIC8v
IFByZSAxMCBGbGFzaCBvbmx5IHJlcXVlc3RzIHdpbmRvd2xlc3MgcGx1Z2lucyBpZiB3ZSByZXR1
cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihm
bGFzaFRlblZlcnNpb24pIDwgMCkKKyAgICAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a1dhbnRzTW96aWxsYVVzZXJBZ2VudCk7CisKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1
aXJrVGhyb3R0bGVJbnZhbGlkYXRlKTsKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
VGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1Zyk7CisgICAgfQorCisgICAgaWYgKG5hbWUoKS5jb250
YWlucygiTWljcm9zb2Z0IikgJiYgbmFtZSgpLmNvbnRhaW5zKCJXaW5kb3dzIE1lZGlhIikpIHsK
KyAgICAgICAgLy8gVGhlIFdNUCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQ
X1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgICAgICAv
LyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUK
KyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwp
OworCisgICAgICAgIC8vIFdpbmRvd2xlc3MgbW9kZSBkb2VzIG5vdCB3b3JrIGF0IGFsbCB3aXRo
IHRoZSBXTVAgcGx1Z2luIHNvIGp1c3QgcmVtb3ZlIHRoYXQgcGFyYW1ldGVyIAorICAgICAgICAv
LyBhbmQgZG9uJ3QgcGFzcyBpdCB0byB0aGUgcGx1Zy1pbi4KKyAgICAgICAgbV9xdWlya3MuYWRk
KFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pOworCisgICAgICAgIC8vIFdN
UCBoYXMgYSBtb2RhbCBtZXNzYWdlIGxvb3AgdGhhdCBpdCBlbnRlcnMgd2hlbmV2ZXIgd2UgY2Fs
bCBpdCBvcgorICAgICAgICAvLyBhc2sgaXQgdG8gcGFpbnQuIFRoaXMgbW9kYWwgbG9vcCBjYW4g
ZGVsaXZlciBtZXNzYWdlcyB0byBvdGhlcgorICAgICAgICAvLyB3aW5kb3dzIGluIFdlYktpdCBh
dCB0aW1lcyB3aGVuIHRoZXkgYXJlIG5vdCBleHBlY3RpbmcgdGhlbSAoZm9yCisgICAgICAgIC8v
IGV4YW1wbGUsIGRlbGl2ZXJpbmcgYSBXTV9QQUlOVCBtZXNzYWdlIGR1cmluZyBhIGxheW91dCks
IGFuZCB0aGVzZQorICAgICAgICAvLyBjYW4gY2F1c2UgY3Jhc2hlcy4KKyAgICAgICAgbV9xdWly
a3MuYWRkKFBsdWdpblF1aXJrSGFzTW9kYWxNZXNzYWdlTG9vcCk7CisgICAgfQorCisgICAgaWYg
KG5hbWUoKSA9PSAiVkxDIE11bHRpbWVkaWEgUGx1Z2luIiB8fCBuYW1lKCkgPT0gIlZMQyBNdWx0
aW1lZGlhIFBsdWctaW4iKSB7CisgICAgICAgIC8vIFZMQyBoYW5ncyBvbiBOUFBfRGVzdHJveSBp
ZiB3ZSBjYWxsIE5QUF9TZXRXaW5kb3cgd2l0aCBhIG51bGwgd2luZG93IGhhbmRsZQorICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJv
eSk7CisKKyAgICAgICAgLy8gVkxDIDAuOC42ZCBhbmQgMC44LjZlIGNyYXNoIGlmIG11bHRpcGxl
IGluc3RhbmNlcyBhcmUgY3JlYXRlZC4KKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU3NzMw
NzA+IHRyYWNrcyBhbGxvd2luZyBtdWx0aXBsZSBpbnN0YW5jZXMgd2hlbiB0aGlzCisgICAgICAg
IC8vIGJ1ZyBpcyBmaXhlZC4KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udEFs
bG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIH0KKworICAgIC8vIFRoZSBEaXZYIHBsdWdpbiBz
ZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVw
ZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2lu
IHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1pbWVUeXBlID09ICJ2aWRlby9kaXZ4
IikKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0Nh
bGwpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0g
aW4gb3VyIE5QUnVudGltZSBiaW5kaW5nczsgaWYgYSBwbHVnLWluIGNyZWF0ZXMgYW4KKyAgICAv
LyBOUE9iamVjdCBhbmQgcGFzc2VzIGl0IHRvIGEgZnVuY3Rpb24gaXQncyBub3QgcG9zc2libGUg
dG8gc2VlIHdoYXQgcm9vdCBvYmplY3QgdGhhdCBOUE9iamVjdCBiZWxvbmdzIHRvLgorICAgIC8v
IFRodXMsIHdlIGRvbid0IGtub3cgdGhhdCB0aGUgb2JqZWN0IHNob3VsZCBiZSBpbnZhbGlkYXRl
ZCB3aGVuIHRoZSBwbHVnLWluIGluc3RhbmNlIGdvZXMgYXdheS4KKyAgICAvLyBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzU0ODc3NDI+LgorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1z
aWx2ZXJsaWdodCIpCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQ
bHVnaW4pOworCisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBl
KG1pbWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNlIGEgc2luZ2xlIHByb2Nlc3MgY2Fubm90
IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3QgcmVsaWFibHkgdW5sb2FkIGEKKyAg
ICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0aGUgSmF2YSBwbHVnaW4sIG9yIHdl
J2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCisgICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgICAgIC8vIFNldHRpbmcgdGhlIHdp
bmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBiYWQgc2Nyb2xsaW5nIHJlcGFp
bnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUgSmF2YSBwbHVnLWluLgorICAgICAgICBt
X3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVuU2Nyb2xsaW5nKTsK
KyAgICB9CisKKyAgICBpZiAobWltZVR5cGUgPT0gImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdp
biIpIHsKKyAgICAgICAgLy8gUHJldmVudCB0aGUgUmVhbCBwbHVnaW4gZnJvbSBjYWxsaW5nIHRo
ZSBXaW5kb3cgUHJvYyByZWN1cnNpdmVseSwgY2F1c2luZyB0aGUgc3RhY2sgdG8gb3ZlcmZsb3cu
CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVN
ZXNzYWdlUmVjdXJzaXZlbHkpOworCisgICAgICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVs
ZVZlcnNpb24gbGFzdEtub3duVW5sb2FkYWJsZVJlYWxQbGF5ZXJWZXJzaW9uKDB4MDAwQjBCMjQs
IDB4MDAwNjAwMDApOworCisgICAgICAgIC8vIFVubG9hZGluZyBSZWFsUGxheWVyIHZlcnNpb25z
IG5ld2VyIHRoYW4gMTAuNSBjYW4gY2F1c2UgYSBoYW5nOyBzZWUgcmRhcjovLzU2NjkzMTcuCisg
ICAgICAgIC8vIEZJWE1FOiBSZXN1bWUgdW5sb2FkaW5nIHdoZW4gdGhpcyBidWcgaW4gdGhlIFJl
YWxQbGF5ZXIgUGx1Zy1JbiBpcyBmaXhlZCAocmRhcjovLzU3MTMxNDcpCisgICAgICAgIGlmIChj
b21wYXJlRmlsZVZlcnNpb24obGFzdEtub3duVW5sb2FkYWJsZVJlYWxQbGF5ZXJWZXJzaW9uKSA+
IDApCisgICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2lu
KTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBE
V09SRCB2ZXJzaW9uSW5mb1NpemUsIHplcm9IYW5kbGU7CisgICAgdmVyc2lvbkluZm9TaXplID0g
R2V0RmlsZVZlcnNpb25JbmZvU2l6ZVcoY29uc3RfY2FzdDxVQ2hhcio+KG1fcGF0aC5jaGFyYWN0
ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSksICZ6ZXJvSGFuZGxlKTsKKyAgICBpZiAo
dmVyc2lvbkluZm9TaXplID09IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
dmVyc2lvbkluZm9EYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxjaGFyW10+KHZlcnNpb25JbmZvU2l6
ZSk7CisKKyAgICBpZiAoIUdldEZpbGVWZXJzaW9uSW5mb1coY29uc3RfY2FzdDxVQ2hhcio+KG1f
cGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSksCisgICAgICAgICAg
ICAwLCB2ZXJzaW9uSW5mb1NpemUsIHZlcnNpb25JbmZvRGF0YS5nZXQoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIG1fbmFtZSA9IGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0
YS5nZXQoKSwgIlByb2R1Y3ROYW1lIik7CisgICAgbV9kZXNjcmlwdGlvbiA9IGdldFZlcnNpb25J
bmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIkZpbGVEZXNjcmlwdGlvbiIpOworICAgIGlmICht
X25hbWUuaXNOdWxsKCkgfHwgbV9kZXNjcmlwdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgVlNfRklYRURGSUxFSU5GTyogaW5mbzsKKyAgICBVSU5UIGluZm9TaXpl
OworICAgIGlmICghVmVyUXVlcnlWYWx1ZVcodmVyc2lvbkluZm9EYXRhLmdldCgpLCBMIlxcIiwg
KExQVk9JRCopICZpbmZvLCAmaW5mb1NpemUpIHx8IGluZm9TaXplIDwgc2l6ZW9mKFZTX0ZJWEVE
RklMRUlORk8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9tb2R1bGVWZXJzaW9uLmxl
YXN0U2lnID0gaW5mby0+ZHdGaWxlVmVyc2lvbkxTOworICAgIG1fbW9kdWxlVmVyc2lvbi5tb3N0
U2lnID0gaW5mby0+ZHdGaWxlVmVyc2lvbk1TOworCisgICAgaWYgKGlzUGx1Z2luQmxhY2tsaXN0
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7
CisgICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiTUlNRVR5cGUiKS5z
cGxpdCgnfCcsIHR5cGVzKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25MaXN0czsKKyAg
ICBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJGaWxlRXh0ZW50cyIpLnNw
bGl0KCd8JywgZXh0ZW5zaW9uTGlzdHMpOworICAgIFZlY3RvcjxTdHJpbmc+IGRlc2NyaXB0aW9u
czsKKyAgICBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJGaWxlT3Blbk5h
bWUiKS5zcGxpdCgnfCcsIGRlc2NyaXB0aW9ucyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdHlwZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgU3RyaW5nIHR5cGUgPSB0eXBlc1tp
XS5sb3dlcigpOworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBpIDwgZGVzY3JpcHRpb25z
LnNpemUoKSA/IGRlc2NyaXB0aW9uc1tpXSA6ICIiOworICAgICAgICBTdHJpbmcgZXh0ZW5zaW9u
TGlzdCA9IGkgPCBleHRlbnNpb25MaXN0cy5zaXplKCkgPyBleHRlbnNpb25MaXN0c1tpXSA6ICIi
OworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnNWZWN0b3I7CisgICAgICAgIGV4
dGVuc2lvbkxpc3Quc3BsaXQoJywnLCBleHRlbnNpb25zVmVjdG9yKTsKKworICAgICAgICAvLyBH
ZXQgcmlkIG9mIHRoZSBleHRlbnNpb24gbGlzdCB0aGF0IG1heSBiZSBhdCB0aGUgZW5kIG9mIHRo
ZSBkZXNjcmlwdGlvbiBzdHJpbmcuCisgICAgICAgIGludCBwb3MgPSBkZXNjcmlwdGlvbi5maW5k
KCIoKiIpOworICAgICAgICBpZiAocG9zICE9IC0xKSB7CisgICAgICAgICAgICAvLyBUaGVyZSBt
aWdodCBiZSBhIHNwYWNlIHRoYXQgd2UgbmVlZCB0byBnZXQgcmlkIG9mLgorICAgICAgICAgICAg
aWYgKHBvcyA+IDEgJiYgZGVzY3JpcHRpb25bcG9zIC0gMV0gPT0gJyAnKQorICAgICAgICAgICAg
ICAgIHBvcy0tOworICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5sZWZ0KHBv
cyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHF1aXJrcyBmb3IgdGhl
IE1JTUUgdHlwZXMgdGhpcyBwbHVnLWluIHN1cHBvcnRzCisgICAgICAgIGRldGVybWluZVF1aXJr
cyh0eXBlKTsKKworICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKHR5cGUsIGV4dGVuc2lv
bnNWZWN0b3IpOworICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQodHlwZSwgZGVzY3Jp
cHRpb24pOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2th
Z2U6OmxvYWQoKQoreworICAgIGlmIChtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSkgewor
ICAgICAgICBBU1NFUlQobV9tb2R1bGUpOworICAgICAgICBtX2ZyZWVMaWJyYXJ5VGltZXIuc3Rv
cCgpOworICAgIH0gZWxzZSBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBpZiAobV9xdWlya3Mu
Y29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcykpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIFdDSEFSIGN1cnJlbnRQYXRoW01BWF9QQVRI
XTsKKworICAgICAgICBpZiAoITo6R2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgsIGN1cnJl
bnRQYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBTdHJpbmcgcGF0
aCA9IG1fcGF0aC5zdWJzdHJpbmcoMCwgbV9wYXRoLnJldmVyc2VGaW5kKCdcXCcpKTsKKworICAg
ICAgICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLmRhdGEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgLy8gTG9hZCB0aGUgbGlicmFyeQorICAgICAgICBtX21vZHVsZSA9IDo6TG9hZExpYnJhcnlF
eFcobV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCAwLCBMT0FE
X1dJVEhfQUxURVJFRF9TRUFSQ0hfUEFUSCk7CisKKyAgICAgICAgaWYgKCE6OlNldEN1cnJlbnRE
aXJlY3RvcnlXKGN1cnJlbnRQYXRoKSkgeworICAgICAgICAgICAgaWYgKG1fbW9kdWxlKQorICAg
ICAgICAgICAgICAgIDo6RnJlZUxpYnJhcnkobV9tb2R1bGUpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9HZXRFbnRy
eVBvaW50c0Z1bmNQdHIgTlBfR2V0RW50cnlQb2ludHMgPSAwOworICAgIE5QX0luaXRpYWxpemVG
dW5jUHRyIE5QX0luaXRpYWxpemUgPSAwOworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBOUF9J
bml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxl
LCAiTlBfSW5pdGlhbGl6ZSIpOworICAgIE5QX0dldEVudHJ5UG9pbnRzID0gKE5QX0dldEVudHJ5
UG9pbnRzRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0dldEVudHJ5UG9pbnRz
Iik7CisgICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilHZXRQcm9jQWRk
cmVzcyhtX21vZHVsZSwgIk5QX1NodXRkb3duIik7CisKKyAgICBpZiAoIU5QX0luaXRpYWxpemUg
fHwgIU5QX0dldEVudHJ5UG9pbnRzIHx8ICFtX05QUF9TaHV0ZG93bikKKyAgICAgICAgZ290byBh
Ym9ydDsKKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVu
Y3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisK
KyAgICBucEVyciA9IE5QX0dldEVudHJ5UG9pbnRzKCZtX3BsdWdpbkZ1bmNzKTsKKyAgICBMT0df
TlBFUlJPUihucEVycik7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAg
ICBnb3RvIGFib3J0OworCisgICAgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOworCisgICAgbnBF
cnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcyk7CisgICAgTE9HX05QRVJST1IobnBF
cnIpOworCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFi
b3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6Cisg
ICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit1bnNp
Z25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QKK3sgCisgICAgY29uc3QgdW5zaWduZWQg
aGFzaENvZGVzW10gPSB7CisgICAgICAgIG1fbmFtZS5pbXBsKCktPmhhc2goKSwKKyAgICAgICAg
bV9kZXNjcmlwdGlvbi5pbXBsKCktPmhhc2goKSwKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25z
LnNpemUoKQorICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNp
emVvZihoYXNoQ29kZXMpPihoYXNoQ29kZXMpOworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmVx
dWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2UmIGIpCit7Cisg
ICAgaWYgKGEubV9uYW1lICE9IGIubV9uYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoYS5tX2Rlc2NyaXB0aW9uICE9IGIubV9kZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGEubV9taW1lVG9FeHRlbnNpb25zLnNpemUoKSAhPSBiLm1fbWlt
ZVRvRXh0ZW5zaW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE1JTUVU
b0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGVuZCA9IGEubV9taW1lVG9FeHRl
bnNpb25zLmVuZCgpLmtleXMoKTsKKyAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yOjpLZXlzIGl0ID0gYS5tX21pbWVUb0V4dGVuc2lvbnMuYmVnaW4oKS5rZXlzKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoIWIubV9taW1lVG9FeHRlbnNpb25zLmNv
bnRhaW5zKCppdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3VpbnQxNl90IFBsdWdpblBhY2thZ2U6Ok5QVmVyc2lvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIE5QX1ZFUlNJT05fTUlOT1I7Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblF1aXJrU2V0LmggYi9Tb3VyY2UvV2ViS2l0L3dp
bi9QbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDlhMzM4M2RiYjQ0NjkwOTk0
MDdkNmJkYTEyM2QxMDFkY2I1ZDM4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2luL1BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGx1Z2luUXVp
cmtTZXRfaAorI2RlZmluZSBQbHVnaW5RdWlya1NldF9oCisKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisgICAgZW51bSBQbHVnaW5RdWlyayB7CisgICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3pp
bGxhVXNlckFnZW50ID0gMSA8PCAwLAorICAgICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRX
aW5kb3dDYWxsID0gMSA8PCAxLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0
ZSA9IDEgPDwgMiwgCisgICAgICAgIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFy
YW0gPSAxIDw8IDMsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVz
c2FnZXMgPSAxIDw8IDQsCisgICAgICAgIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEg
PDwgNSwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJl
Y3Vyc2l2ZWx5ID0gMSA8PCA2LAorICAgICAgICBQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxv
b3AgPSAxIDw8IDcsCisgICAgICAgIFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcgPSAxIDw8
IDgsCisgICAgICAgIFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyA9
IDEgPDwgOSwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVz
dHJveSA9IDEgPDwgMTAsCisgICAgICAgIFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0
YW5jZXMgPSAxIDw8IDExLAorICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCA9
IDEgPDwgMTIsCisgICAgICAgIFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgg
PSAxIDw8IDEzLAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsU2V0V2luZG93TW9yZVRoYW5P
bmNlID0gMSA8PCAxNCwKKyAgICAgICAgUGx1Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5k
b3dsZXNzTW9kZSA9IDEgPDwgMTUsCisgICAgICAgIFBsdWdpblF1aXJrV2FudHNDaHJvbWVVc2Vy
QWdlbnQgPSAxIDw8IDE2CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpblF1aXJrU2V0IHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgUGx1Z2luUXVpcmtTZXQoKSA6IG1fcXVpcmtzKDAp
IHsgfQorICAgICAgICAgICAgdm9pZCBhZGQoUGx1Z2luUXVpcmsgcXVpcmspIHsgbV9xdWlya3Mg
fD0gcXVpcms7IH0KKyAgICAgICAgICAgIGJvb2wgY29udGFpbnMoUGx1Z2luUXVpcmsgcXVpcmsp
IGNvbnN0IHsgcmV0dXJuIG1fcXVpcmtzICYgcXVpcms7IH0KKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG1fcXVpcmtzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFBsdWdpblF1aXJrU2V0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luU3RyZWFtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OWI5YjEyMGYxZjQyMGM2YjRhN2M2
YmZmMDA3NjMzMDBiNTU4MjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4v
UGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW0uaCIKKworI2luY2x1ZGUgIkRvY3Vt
ZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworLy8gV2UgdXNlIC0yIGhlcmUgYmVjYXVzZSBzb21lIHBsdWdpbnMgbGlrZSB0byByZXR1cm4g
LTEgdG8gaW5kaWNhdGUgZXJyb3IKKy8vIGFuZCB0aGlzIHdheSB3ZSB3b24ndCBjbGFzaCB3aXRo
IHRoZW0uCitzdGF0aWMgY29uc3QgaW50IFdlYlJlYXNvbk5vbmUgPSAtMjsKKwordXNpbmcgc3Rk
OjptYXg7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVm
IEhhc2hNYXA8TlBTdHJlYW0qLCBOUFA+IFN0cmVhbU1hcDsKK3N0YXRpYyBTdHJlYW1NYXAmIHN0
cmVhbXMoKQoreworICAgIHN0YXRpYyBTdHJlYW1NYXAgc3RhdGljU3RyZWFtczsKKyAgICByZXR1
cm4gc3RhdGljU3RyZWFtczsKK30KKworUGx1Z2luU3RyZWFtOjpQbHVnaW5TdHJlYW0oUGx1Z2lu
U3RyZWFtQ2xpZW50KiBjbGllbnQsIEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXNvdXJjZVJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0
YSwgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MsIE5QUCBpbnN0YW5jZSwgY29uc3Qg
UGx1Z2luUXVpcmtTZXQmIHF1aXJrcykKKyAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KHJlc291cmNl
UmVxdWVzdCkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCisg
ICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKKyAgICAsIG1fc2VuZE5vdGlmaWNhdGlvbihz
ZW5kTm90aWZpY2F0aW9uKQorICAgICwgbV9zdHJlYW1TdGF0ZShTdHJlYW1CZWZvcmVTdGFydGVk
KQorICAgICwgbV9sb2FkTWFudWFsbHkoZmFsc2UpCisgICAgLCBtX2RlbGF5RGVsaXZlcnlUaW1l
cigqdGhpcywgJlBsdWdpblN0cmVhbTo6ZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQpCisgICAgLCBt
X3RlbXBGaWxlSGFuZGxlKGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCisgICAgLCBtX3BsdWdp
bkZ1bmNzKHBsdWdpbkZ1bmNzKQorICAgICwgbV9pbnN0YW5jZShpbnN0YW5jZSkKKyAgICAsIG1f
cXVpcmtzKHF1aXJrcykKK3sKKyAgICBBU1NFUlQobV9pbnN0YW5jZSk7CisKKyAgICBtX3N0cmVh
bS51cmwgPSAwOworICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICBtX3N0cmVhbS5wZGF0YSA9
IDA7CisgICAgbV9zdHJlYW0uZW5kID0gMDsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gMDsK
KyAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSAwOworICAgIG1fc3RyZWFtLmhlYWRlcnMgPSAw
OworCisgICAgc3RyZWFtcygpLmFkZCgmbV9zdHJlYW0sIG1faW5zdGFuY2UpOworfQorCitQbHVn
aW5TdHJlYW06On5QbHVnaW5TdHJlYW0oKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlICE9
IFN0cmVhbVN0YXJ0ZWQpOworICAgIEFTU0VSVCghbV9sb2FkZXIpOworCisgICAgZmFzdEZyZWUo
KGNoYXIqKW1fc3RyZWFtLnVybCk7CisKKyAgICBzdHJlYW1zKCkucmVtb3ZlKCZtX3N0cmVhbSk7
Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydCgpCit7CisgICAgQVNTRVJUKCFtX2xvYWRN
YW51YWxseSk7CisgICAgbV9sb2FkZXIgPSByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS0+c2NoZWR1
bGVQbHVnaW5TdHJlYW1Mb2FkKG1fZnJhbWUsIHRoaXMsIG1fcmVzb3VyY2VSZXF1ZXN0KTsKK30K
Kwordm9pZCBQbHVnaW5TdHJlYW06OnN0b3AoKQoreworICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJl
YW1TdG9wcGVkOworCisgICAgaWYgKG1fbG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEFTU0VSVCgh
bV9sb2FkZXIpOworCisgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IG1f
ZnJhbWUtPmxvYWRlcigpLmFjdGl2ZURvY3VtZW50TG9hZGVyKCk7CisgICAgICAgIEFTU0VSVChk
b2N1bWVudExvYWRlcik7CisKKyAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdN
YWluUmVzb3VyY2UoKSkKKyAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5jYW5jZWxNYWluUmVz
b3VyY2VMb2FkKG1fZnJhbWUtPmxvYWRlcigpLmNhbmNlbGxlZEVycm9yKG1fcmVzb3VyY2VSZXF1
ZXN0KSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xvYWRlcikgewor
ICAgICAgICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgICAgIG1fbG9hZGVyID0gMDsKKyAgICB9
CisKKyAgICBtX2NsaWVudCA9IDA7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBsYXN0TW9kaWZpZWRE
YXRlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGRvdWJsZSBsYXN0
TW9kaWZpZWQgPSByZXNwb25zZS5sYXN0TW9kaWZpZWQoKTsKKyAgICBpZiAoIXN0ZDo6aXNmaW5p
dGUobGFzdE1vZGlmaWVkKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbGFzdE1v
ZGlmaWVkICogMTAwMDsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0U3RyZWFtKCkKK3sK
KyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAg
IGNvbnN0IFVSTCYgcmVzcG9uc2VVUkwgPSBtX3Jlc291cmNlUmVzcG9uc2UudXJsKCk7CisKKyAg
ICAvLyBTb21lIHBsdWdpbnMgKEZsYXNoKSBleHBlY3QgdGhhdCBqYXZhc2NyaXB0IFVSTHMgYXJl
IHBhc3NlZCBiYWNrIGRlY29kZWQgYXMgdGhpcyBpcyB0aGUKKyAgICAvLyBmb3JtYXQgdXNlZCB3
aGVuIHJlcXVlc3RpbmcgdGhlIFVSTC4KKyAgICBpZiAocHJvdG9jb2xJc0phdmFTY3JpcHQocmVz
cG9uc2VVUkwpKQorICAgICAgICBtX3N0cmVhbS51cmwgPSBmYXN0U3RyRHVwKGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlcyhyZXNwb25zZVVSTC5zdHJpbmcoKSkudXRmOCgpLmRhdGEoKSk7CisgICAg
ZWxzZQorICAgICAgICBtX3N0cmVhbS51cmwgPSBmYXN0U3RyRHVwKHJlc3BvbnNlVVJMLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgQ1N0cmluZyBtaW1lVHlwZVN0ciA9IG1fcmVzb3Vy
Y2VSZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKTsKKworICAgIGxvbmcgbG9uZyBleHBlY3RlZENv
bnRlbnRMZW5ndGggPSBtX3Jlc291cmNlUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7
CisKKyAgICBpZiAobV9yZXNvdXJjZVJlc3BvbnNlLmlzSFRUUCgpKSB7CisgICAgICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgU3RyaW5nIHNlcGFyYXRvciA9IEFTQ0lJ
TGl0ZXJhbCgiOiAiKTsKKworICAgICAgICBTdHJpbmcgc3RhdHVzTGluZSA9ICJIVFRQICIgKyBT
dHJpbmc6Om51bWJlcihtX3Jlc291cmNlUmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkgKyAiIE9L
XG4iOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzdGF0dXNMaW5lKTsKKworICAgICAg
ICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlUmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOworICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGl0LT5rZXkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9y
KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT52YWx1ZSk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgfQorCisgICAgICAgIG1f
aGVhZGVycyA9IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisKKyAgICAgICAgLy8g
SWYgdGhlIGNvbnRlbnQgaXMgZW5jb2RlZCAobW9zdCBsaWtlbHkgY29tcHJlc3NlZCksIHRoZW4g
ZG9uJ3Qgc2VuZCBpdHMgbGVuZ3RoIHRvIHRoZSBwbHVnaW4sCisgICAgICAgIC8vIHdoaWNoIGlz
IG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZGVjb2RlZCBsZW5ndGgsIG5vdCB5ZXQga25vd24gYXQg
dGhlIG1vbWVudC4KKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ0NzA1OTk+IHRyYWNrcyBh
IHJlcXVlc3QgZm9yIC1bTlNVUkxSZXNwb25zZSBleHBlY3RlZENvbnRlbnRMZW5ndGhdIHRvIGlu
Y29ycG9yYXRlIHRoaXMgbG9naWMuCisgICAgICAgIFN0cmluZyBjb250ZW50RW5jb2RpbmcgPSBt
X3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50
RW5jb2RpbmcpOworICAgICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5pc051bGwoKSAmJiBjb250
ZW50RW5jb2RpbmcgIT0gImlkZW50aXR5IikKKyAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExl
bmd0aCA9IC0xOworICAgIH0KKworICAgIG1fc3RyZWFtLmhlYWRlcnMgPSBtX2hlYWRlcnMuZGF0
YSgpOworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IHRoaXM7
CisgICAgbV9zdHJlYW0uZW5kID0gbWF4KGV4cGVjdGVkQ29udGVudExlbmd0aCwgMExMKTsKKyAg
ICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSBsYXN0TW9kaWZpZWREYXRlKG1fcmVzb3VyY2VSZXNw
b25zZSk7CisgICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9IG1fbm90aWZ5RGF0YTsKKworICAgIG1f
dHJhbnNmZXJNb2RlID0gTlBfTk9STUFMOworICAgIG1fb2Zmc2V0ID0gMDsKKyAgICBtX3JlYXNv
biA9IFdlYlJlYXNvbk5vbmU7CisKKyAgICAvLyBQcm90ZWN0IHRoZSBzdHJlYW0gaWYgZGVzdHJv
eXN0cmVhbSBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG5ld3N0cmVhbSBoYW5kbGVyCisgICAg
UmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKKworICAgIC8vIGNhbGxpbmcgaW50
byBhIHBsdWctaW4gY291bGQgcmVzdWx0IGluIHJlLWVudHJhbmNlIGlmIHRoZSBwbHVnLWluIHlp
ZWxkcworICAgIC8vIGNvbnRyb2wgdG8gdGhlIHN5c3RlbSAocmRhcjovLzU3NDQ4OTkpLiBwcmV2
ZW50IHRoaXMgYnkgZGVmZXJyaW5nIGZ1cnRoZXIKKyAgICAvLyBsb2FkaW5nIHdoaWxlIGNhbGxp
bmcgaW50byB0aGUgcGx1Zy1pbi4KKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVy
LT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOworICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbkZ1
bmNzLT5uZXdzdHJlYW0obV9pbnN0YW5jZSwgKE5QTUlNRVR5cGUpbWltZVR5cGVTdHIuZGF0YSgp
LCAmbV9zdHJlYW0sIGZhbHNlLCAmbV90cmFuc2Zlck1vZGUpOworICAgIGlmIChtX2xvYWRlcikK
KyAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOworICAgIAorICAgIC8v
IElmIHRoZSBzdHJlYW0gd2FzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbCB0byBuZXdzdHJlYW0gd2Ug
cmV0dXJuCisgICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpCisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKSB7CisgICAgICAg
IGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0obnBFcnIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0YXJ0ZWQ7CisKKyAgICBpZiAobV90cmFuc2Zl
ck1vZGUgPT0gTlBfTk9STUFMKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhdGggPSBvcGVu
VGVtcG9yYXJ5RmlsZSgiV0tQIiwgbV90ZW1wRmlsZUhhbmRsZSk7CisKKyAgICAvLyBTb21ldGhp
bmcgd2VudCB3cm9uZywgY2FuY2VsIGxvYWRpbmcgdGhlIHN0cmVhbQorICAgIGlmICghaXNIYW5k
bGVWYWxpZChtX3RlbXBGaWxlSGFuZGxlKSkKKyAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVh
bShOUFJFU19ORVRXT1JLX0VSUik7Cit9CisKK05QUCBQbHVnaW5TdHJlYW06Om93bmVyRm9yU3Ry
ZWFtKE5QU3RyZWFtKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHN0cmVhbXMoKS5nZXQoc3RyZWFt
KTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFz
b24gcmVhc29uKQoreworICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7CisK
KyAgICBkZXN0cm95U3RyZWFtKHJlYXNvbik7CisgICAgc3RvcCgpOworfQorCit2b2lkIFBsdWdp
blN0cmVhbTo6ZGVzdHJveVN0cmVhbShOUFJlYXNvbiByZWFzb24pCit7CisgICAgbV9yZWFzb24g
PSByZWFzb247CisgICAgaWYgKG1fcmVhc29uICE9IE5QUkVTX0RPTkUpIHsKKyAgICAgICAgLy8g
U3RvcCBhbnkgcGVuZGluZyBkYXRhIGZyb20gYmVpbmcgc3RyZWFtZWQKKyAgICAgICAgaWYgKG1f
ZGVsaXZlcnlEYXRhKQorICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAg
ICB9IGVsc2UgaWYgKG1fZGVsaXZlcnlEYXRhICYmIG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPiAw
KSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG1vcmUgZGF0YSB0byBiZSBzdHJlYW1lZCwgZG9uJ3Qg
ZGVzdHJveSB0aGUgc3RyZWFtIG5vdy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZXN0
cm95U3RyZWFtKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpkZXN0cm95U3RyZWFtKCkKK3sK
KyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSk7CisgICAgQVNTRVJUKCFt
X2RlbGl2ZXJ5RGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApOworCisgICAgY2xv
c2VGaWxlKG1fdGVtcEZpbGVIYW5kbGUpOworCisgICAgYm9vbCBuZXdTdHJlYW1DYWxsZWQgPSBt
X3N0cmVhbS5uZGF0YTsKKworICAgIC8vIFByb3RlY3QgZnJvbSBkZXN0cnVjdGlvbiBpZjoKKyAg
ICAvLyAgTlBOX0Rlc3Ryb3lTdHJlYW0gaXMgY2FsbGVkIGZyb20gTlBQX05ld1N0cmVhbSBvcgor
ICAgIC8vICBQbHVnaW5TdHJlYW1DbGllbnQ6OnN0cmVhbURpZEZpbmlzaExvYWRpbmcoKSByZW1v
dmVzIHRoZSBsYXN0IHJlZmVyZW5jZQorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3Qo
dGhpcyk7CisKKyAgICBpZiAobmV3U3RyZWFtQ2FsbGVkKSB7CisgICAgICAgIGlmIChtX3JlYXNv
biA9PSBOUFJFU19ET05FICYmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEUgfHwgbV90cmFu
c2Zlck1vZGUgPT0gTlBfQVNGSUxFT05MWSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wYXRo
LmlzTnVsbCgpKTsKKworICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICAgICAgICAg
IG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOworICAgICAgICAgICAgbV9wbHVnaW5G
dW5jcy0+YXNmaWxlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5z
ZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3N0cmVh
bVN0YXRlICE9IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpIHsKKyAgICAgICAgICAgIGlmIChtX2xvYWRl
cikKKyAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKwor
ICAgICAgICAgICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luRnVuY3MtPmRlc3Ryb3lzdHJlYW0o
bV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX3JlYXNvbik7CisKKyAgICAgICAgICAgIGlmIChtX2xv
YWRlcikKKyAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7
CisKKyAgICAgICAgICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9zZW5kTm90aWZpY2F0aW9u
KSB7CisgICAgICAgIC8vIEZsYXNoIDkgY2FuIGRlcmVmZXJlbmNlIG51bGwgaWYgd2UgY2FsbCBO
UFBfVVJMTm90aWZ5IHdpdGhvdXQgZmlyc3QgY2FsbGluZyBOUFBfTmV3U3RyZWFtCisgICAgICAg
IC8vIGZvciByZXF1ZXN0cyBtYWRlIHdpdGggTlBOX1Bvc3RVUkxOb3RpZnk7IHNlZSA8cmRhcjov
LzU1ODg4MDc+CisgICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgIG1fbG9hZGVyLT5z
ZXREZWZlcnNMb2FkaW5nKHRydWUpOworICAgICAgICBpZiAoIW5ld1N0cmVhbUNhbGxlZCAmJiBt
X3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKSAmJgorICAgICAg
ICAgICAgZXF1YWxJZ25vcmluZ0Nhc2UobV9yZXNvdXJjZVJlcXVlc3QuaHR0cE1ldGhvZCgpLCAi
UE9TVCIpKSB7CisgICAgICAgICAgICBtX3RyYW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKKyAgICAg
ICAgICAgIG1fc3RyZWFtLnVybCA9ICIiOworICAgICAgICAgICAgbV9zdHJlYW0ubm90aWZ5RGF0
YSA9IG1fbm90aWZ5RGF0YTsKKworICAgICAgICAgICAgc3RhdGljIGNoYXIgZW1wdHlNaW1lVHlw
ZVtdID0gIiI7CisgICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5uZXdzdHJlYW0obV9pbnN0YW5j
ZSwgZW1wdHlNaW1lVHlwZSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKKyAg
ICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPmRlc3Ryb3lzdHJlYW0obV9pbnN0YW5jZSwgJm1fc3Ry
ZWFtLCBtX3JlYXNvbik7CisKKyAgICAgICAgICAgIC8vIGluIHN1Y2Nlc3NmdWwgcmVxdWVzdHMs
IHRoZSBVUkwgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBmcmVlZCBpbiBvdXIKKyAgICAg
ICAgICAgIC8vIGRlc3RydWN0b3IsIHNvIHJlc2V0IGl0IHRvIDAKKyAgICAgICAgICAgIG1fc3Ry
ZWFtLnVybCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbV9wbHVnaW5GdW5jcy0+dXJsbm90aWZ5
KG1faW5zdGFuY2UsIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIG1fcmVhc29uLCBtX25vdGlmeURhdGEpOworICAgICAgICBpZiAobV9sb2FkZXIpCisgICAg
ICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CisgICAgfQorCisgICAg
bV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICBpZiAoIW1fbG9hZE1hbnVhbGx5
ICYmIG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c3RyZWFtRGlkRmluaXNoTG9hZGluZyh0
aGlzKTsKKworICAgIGlmICghbV9wYXRoLmlzTnVsbCgpKQorICAgICAgICBkZWxldGVGaWxlKG1f
cGF0aCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZCgp
Cit7CisgICAgZGVsaXZlckRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmRlbGl2ZXJE
YXRhKCkKK3sKKyAgICBBU1NFUlQobV9kZWxpdmVyeURhdGEpOworICAgIAorICAgIGlmIChtX3N0
cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
Y2FuY2VsIG91ciBqb2IgaW4gdGhlIFN1YnJlc291cmNlTG9hZGVyIG9uIGVycm9yIHNvIHdlIGRv
bid0IHJlYWNoIHRoaXMgY2FzZQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdHJl
YW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIGlmICghbV9zdHJlYW0ubmRh
dGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnQzMl90IHRvdGFsQnl0ZXMgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOworICAgIGludDMy
X3QgdG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7CisKKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAg
IG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOworICAgIHdoaWxlICh0b3RhbEJ5dGVz
RGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICBpbnQzMl90IGRlbGl2ZXJ5Qnl0ZXMg
PSBtX3BsdWdpbkZ1bmNzLT53cml0ZXJlYWR5KG1faW5zdGFuY2UsICZtX3N0cmVhbSk7CisKKyAg
ICAgICAgaWYgKGRlbGl2ZXJ5Qnl0ZXMgPD0gMCkgeworICAgICAgICAgICAgbV9kZWxheURlbGl2
ZXJ5VGltZXIuc3RhcnRPbmVTaG90KDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIHRv
dGFsQnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkKTsKKyAgICAgICAgICAgIGludDMyX3QgZGF0
YUxlbmd0aCA9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgICAgICBjaGFyKiBkYXRhID0gbV9kZWxp
dmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7CisKKyAgICAgICAgICAgIC8v
IFdyaXRlIHRoZSBkYXRhCisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5j
cy0+d3JpdGUobV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX29mZnNldCwgZGF0YUxlbmd0aCwgKHZv
aWQqKWRhdGEpOworICAgICAgICAgICAgaWYgKGRlbGl2ZXJ5Qnl0ZXMgPCAwKSB7CisgICAgICAg
ICAgICAgICAgTE9HX1BMVUdJTl9ORVRfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBpZiAobV9s
b2FkZXIpCisgICAgICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZh
bHNlKTsKKyAgICAgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdP
UktfRVJSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIGRhdGFMZW5ndGgpOworICAg
ICAgICAgICAgbV9vZmZzZXQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIHRvdGFsQnl0
ZXNEZWxpdmVyZWQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
bV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKwor
ICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkID4gMCkgeworICAgICAgICBpZiAodG90YWxCeXRl
c0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgICAgIGludCByZW1haW5pbmdCeXRl
cyA9IHRvdGFsQnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkOworICAgICAgICAgICAgbWVtbW92
ZShtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpLCBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxC
eXRlc0RlbGl2ZXJlZCwgcmVtYWluaW5nQnl0ZXMpOworICAgICAgICAgICAgbV9kZWxpdmVyeURh
dGEtPnJlc2l6ZShyZW1haW5pbmdCeXRlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKDApOworICAgICAgICAgICAgaWYgKG1fcmVhc29uICE9
IFdlYlJlYXNvbk5vbmUpCisgICAgICAgICAgICAgICAgZGVzdHJveVN0cmVhbSgpOworICAgICAg
ICB9CisgICAgfSAKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OnNlbmRKYXZhU2NyaXB0U3RyZWFt
KGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwgY29uc3QgQ1N0cmluZyYgcmVzdWx0U3RyaW5nKQorewor
ICAgIGRpZFJlY2VpdmVSZXNwb25zZSgwLCBSZXNvdXJjZVJlc3BvbnNlKHJlcXVlc3RVUkwsICJ0
ZXh0L3BsYWluIiwgcmVzdWx0U3RyaW5nLmxlbmd0aCgpLCAiIikpOworCisgICAgaWYgKG1fc3Ry
ZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFy
ZXN1bHRTdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgZGlkUmVjZWl2ZURhdGEoMCwgcmVzdWx0
U3RyaW5nLmRhdGEoKSwgcmVzdWx0U3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgaWYgKG1fc3Ry
ZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2xvYWRlciA9IDA7CisKKyAgICBkZXN0cm95U3RyZWFtKHJlc3VsdFN0cmluZy5pc051
bGwoKSA/IE5QUkVTX05FVFdPUktfRVJSIDogTlBSRVNfRE9ORSk7Cit9CisKK3ZvaWQgUGx1Z2lu
U3RyZWFtOjpkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxv
YWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUX1VO
VVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3Rh
dGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBtX3Jlc291cmNlUmVzcG9uc2UgPSBy
ZXNwb25zZTsKKworICAgIHN0YXJ0U3RyZWFtKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpk
aWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2Fk
ZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0YXJ0
ZWQpOworCisgICAgLy8gSWYgdGhlIHBsdWctaW4gY2FuY2VscyB0aGUgc3RyZWFtIGluIGRlbGl2
ZXJEYXRhIGl0IGNvdWxkIGJlIGRlbGV0ZWQsIAorICAgIC8vIHNvIHByb3RlY3QgaXQgaGVyZS4K
KyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOworCisgICAgaWYgKG1fdHJh
bnNmZXJNb2RlICE9IE5QX0FTRklMRU9OTFkpIHsKKyAgICAgICAgaWYgKCFtX2RlbGl2ZXJ5RGF0
YSkKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8
Y2hhcj4+KCk7CisKKyAgICAgICAgaW50IG9sZFNpemUgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgp
OworICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKG9sZFNpemUgKyBsZW5ndGgpOworICAg
ICAgICBtZW1jcHkobV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbmd0
aCk7CisKKyAgICAgICAgZGVsaXZlckRhdGEoKTsKKyAgICB9CisKKyAgICBpZiAobV9zdHJlYW1T
dGF0ZSAhPSBTdHJlYW1TdG9wcGVkICYmIGlzSGFuZGxlVmFsaWQobV90ZW1wRmlsZUhhbmRsZSkp
IHsKKyAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IHdyaXRlVG9GaWxlKG1fdGVtcEZpbGVIYW5k
bGUsIGRhdGEsIGxlbmd0aCk7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gIT0gbGVuZ3RoKQor
ICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Cisg
ICAgfQorfQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGlkRmFpbChOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3sKKyAgICBBU1NFUlRfVU5V
U0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKworICAgIExPR19QTFVHSU5fTkVUX0VS
Uk9SKCk7CisKKyAgICAvLyBkZXN0cm95U3RyZWFtIGNhbiByZXN1bHQgaW4gb3VyIGJlaW5nIGRl
bGV0ZWQKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOworCisgICAgZGVz
dHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7CisKKyAgICBtX2xvYWRlciA9IDA7Cit9CisK
K3ZvaWQgUGx1Z2luU3RyZWFtOjpkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyKiBsb2FkZXIpCit7CisgICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBt
X2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7CisK
KyAgICAvLyBkZXN0cm95U3RyZWFtIGNhbiByZXN1bHQgaW4gb3VyIGJlaW5nIGRlbGV0ZWQKKyAg
ICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOworCisgICAgZGVzdHJveVN0cmVh
bShOUFJFU19ET05FKTsKKworICAgIG1fbG9hZGVyID0gMDsKK30KKworYm9vbCBQbHVnaW5TdHJl
YW06OndhbnRzQWxsU3RyZWFtcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsdWdpbkZ1bmNzLT5n
ZXR2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdm9pZCogcmVzdWx0ID0gMDsK
KyAgICBpZiAobV9wbHVnaW5GdW5jcy0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbldh
bnRzQWxsTmV0d29ya1N0cmVhbXMsICZyZXN1bHQpICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVzdWx0ICE9IDA7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmggYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwMDMyYzRjMTkw
NDUxMjJmNTZhY2VmNjMyZTU3ODE4YTE1YTliY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgUGx1Z2luU3RyZWFtX2gKKyNkZWZpbmUgUGx1Z2luU3RyZWFtX2gKKworI2luY2x1
ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlci5oIgorI2luY2x1ZGUgIlBsdWdpblF1aXJrU2V0LmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2lu
Y2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgUGx1Z2lu
U3RyZWFtOworCisgICAgZW51bSBQbHVnaW5TdHJlYW1TdGF0ZSB7IFN0cmVhbUJlZm9yZVN0YXJ0
ZWQsIFN0cmVhbVN0YXJ0ZWQsIFN0cmVhbVN0b3BwZWQgfTsKKworICAgIGNsYXNzIFBsdWdpblN0
cmVhbUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5QbHVnaW5TdHJlYW1D
bGllbnQoKSB7fQorICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyhQ
bHVnaW5TdHJlYW0qKSB7fQorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5TdHJlYW0gOiBwdWJs
aWMgUmVmQ291bnRlZDxQbHVnaW5TdHJlYW0+LCBwcml2YXRlIE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBs
dWdpblN0cmVhbT4gY3JlYXRlKFBsdWdpblN0cmVhbUNsaWVudCogY2xpZW50LCBGcmFtZSogZnJh
bWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9u
LCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiBmdW5jdGlvbnMsIE5QUCBp
bnN0YW5jZSwgY29uc3QgUGx1Z2luUXVpcmtTZXQmIHF1aXJrcykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5TdHJlYW0oY2xpZW50LCBmcmFtZSwgcmVx
dWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwgZnVuY3Rpb25zLCBpbnN0YW5jZSwg
cXVpcmtzKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB+UGx1Z2luU3RyZWFtKCk7Cisg
ICAgICAgIAorICAgICAgICB2b2lkIHN0YXJ0KCk7CisgICAgICAgIHZvaWQgc3RvcCgpOworCisg
ICAgICAgIHZvaWQgc3RhcnRTdHJlYW0oKTsKKworICAgICAgICB2b2lkIHNldExvYWRNYW51YWxs
eShib29sIGxvYWRNYW51YWxseSkgeyBtX2xvYWRNYW51YWxseSA9IGxvYWRNYW51YWxseTsgfQor
CisgICAgICAgIHZvaWQgc2VuZEphdmFTY3JpcHRTdHJlYW0oY29uc3QgVVJMJiByZXF1ZXN0VVJM
LCBjb25zdCBXVEY6OkNTdHJpbmcmIHJlc3VsdFN0cmluZyk7CisgICAgICAgIHZvaWQgY2FuY2Vs
QW5kRGVzdHJveVN0cmVhbShOUFJlYXNvbik7CisKKyAgICAgICAgc3RhdGljIE5QUCBvd25lckZv
clN0cmVhbShOUFN0cmVhbSopOworCisgICAgICAgIC8vIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyQ2xpZW50CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcios
IGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqKTsK
KyAgICAgICAgdmlydHVhbCBib29sIHdhbnRzQWxsU3RyZWFtcygpIGNvbnN0OworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgUGx1Z2luU3RyZWFtKFBsdWdpblN0cmVhbUNsaWVudCosIEZyYW1lKiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3Rp
ZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiwgTlBQIGluc3RhbmNlLCBjb25zdCBQbHVnaW5R
dWlya1NldCYpOworCisgICAgICAgIHZvaWQgZGVsaXZlckRhdGEoKTsKKyAgICAgICAgdm9pZCBk
ZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKKyAgICAgICAgdm9pZCBkZXN0cm95U3RyZWFtKCk7CisK
KyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OworICAgICAgICBSZXNv
dXJjZVJlc3BvbnNlIG1fcmVzb3VyY2VSZXNwb25zZTsKKworICAgICAgICBQbHVnaW5TdHJlYW1D
bGllbnQqIG1fY2xpZW50OworICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgUmVmUHRy
PE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBtX2xvYWRlcjsKKyAgICAgICAgdm9pZCogbV9u
b3RpZnlEYXRhOworICAgICAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAgICAgUGx1
Z2luU3RyZWFtU3RhdGUgbV9zdHJlYW1TdGF0ZTsKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxs
eTsKKworICAgICAgICBUaW1lciBtX2RlbGF5RGVsaXZlcnlUaW1lcjsKKyAgICAgICAgdm9pZCBk
ZWxheURlbGl2ZXJ5VGltZXJGaXJlZCgpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0
b3I8Y2hhcj4+IG1fZGVsaXZlcnlEYXRhOworCisgICAgICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBt
X3RlbXBGaWxlSGFuZGxlOworCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIG1fcGx1Z2lu
RnVuY3M7CisgICAgICAgIE5QUCBtX2luc3RhbmNlOworICAgICAgICB1aW50MTZfdCBtX3RyYW5z
ZmVyTW9kZTsKKyAgICAgICAgaW50MzJfdCBtX29mZnNldDsKKyAgICAgICAgQ1N0cmluZyBtX2hl
YWRlcnM7CisgICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAgICAgIE5QUmVhc29uIG1fcmVhc29u
OworICAgICAgICBOUFN0cmVhbSBtX3N0cmVhbTsKKyAgICAgICAgUGx1Z2luUXVpcmtTZXQgbV9x
dWlya3M7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlYjIyNWMwNGNj
MWVlNDFkNTYyZWRiZDkyMGM5ZDI5NzU4ZWU0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0wLDAgKzEsMTQ4OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHaXJpc2ggUmFt
YWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1
Z2luVmlldy5oIgorCisjaW5jbHVkZSAiQnJpZGdlSlNDLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgi
CisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGb2N1
c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJl
cXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisj
aW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMu
aCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1
ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1N
b3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVn
aW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKKyNpbmNs
dWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAiUHJveHlTZXJ2ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTY3Jp
cHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJT
ZXR0aW5ncy5oIgorI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCisjaW5jbHVkZSAi
V2hlZWxFdmVudC5oIgorI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJucHJ1bnRp
bWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGJpbmRpbmdz
L1NjcmlwdFZhbHVlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCisjaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5o
IgorI2VuZGlmCisKK3VzaW5nIEpTQzo6RXhlY1N0YXRlOwordXNpbmcgSlNDOjpKU0xvY2s7Cit1
c2luZyBKU0M6OkpTT2JqZWN0OwordXNpbmcgSlNDOjpKU1ZhbHVlOworCisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCisKK3VzaW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2Ug
V1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CisKK3N0YXRpYyBpbnQgc19jYWxsaW5nUGx1Z2luOworCit0eXBlZGVmIEhhc2hNYXA8TlBQLCBQ
bHVnaW5WaWV3Kj4gSW5zdGFuY2VNYXA7CisKK3N0YXRpYyBJbnN0YW5jZU1hcCYgaW5zdGFuY2VN
YXAoKQoreworICAgIHN0YXRpYyBJbnN0YW5jZU1hcCYgbWFwID0gKm5ldyBJbnN0YW5jZU1hcDsK
KyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgU3RyaW5nIHNjcmlwdFN0cmluZ0lmSmF2YVNj
cmlwdFVSTChjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAoIXByb3RvY29sSXNKYXZhU2NyaXB0
KHVybCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFRoaXMgcmV0dXJucyBh
biB1bmVzY2FwZWQgc3RyaW5nCisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1
cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDExKSk7Cit9CisKK1BsdWdpblZpZXcqIFBsdWdpblZpZXc6
OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOworCit2b2lkIFBsdWdpblZpZXc6OnBvcFBvcHVwc1N0
YXRlVGltZXJGaXJlZCgpCit7CisgICAgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Cit9CisKK0lu
dFJlY3QgUGx1Z2luVmlldzo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAoreworICAgIC8vIFN0YXJ0
IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCisgICAgSW50UmVjdCBjbGlwUmVjdChtX3dpbmRv
d1JlY3QpOworICAgIAorICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5kIGdldCB0aGUgY2xpcCBy
ZWN0IGZyb20gdGhlIGVuY2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmlldy4KKyAgICBGcmFtZVZp
ZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkudmlldygpOworICAgIGNsaXBS
ZWN0LmludGVyc2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZvckZyYW1lT3duZXIobV9l
bGVtZW50LCB0cnVlKSk7CisKKyAgICByZXR1cm4gY2xpcFJlY3Q7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKG1fZWxl
bWVudC0+ZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
cmVjdCAhPSBmcmFtZVJlY3QoKSkKKyAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZVJlY3QocmVjdCk7
CisKKyAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgLy8g
T24gV2luZG93cyBhbHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdlb21ldHJ5LgorICAgIHNl
dE5QV2luZG93UmVjdChyZWN0KTsKKyNlbGlmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAvLyBPbiBV
bml4LCBtdWx0aXBsZSBjYWxscyB0byBzZXROUFdpbmRvdygpIGluIHdpbmRvd2VkIG1vZGUgY2F1
c2VzIEZsYXNoIHRvIGNyYXNoCisgICAgaWYgKG1fbW9kZSA9PSBOUF9GVUxMIHx8ICFtX2lzV2lu
ZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKKyNlbmRpZgorfQorCit2b2lk
IFBsdWdpblZpZXc6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVQbHVnaW5XaWRn
ZXQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQoKQoreworICAgIHVw
ZGF0ZVBsdWdpbldpZGdldCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KEV2
ZW50KiBldmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gUHJvdGVjdCB0aGUgcGx1Zy1pbiBmcm9tIGRlbGV0aW9uIHdo
aWxlIGRpc3BhdGNoaW5nIHRoZSBldmVudC4KKyAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVj
dCh0aGlzKTsKKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgICAgIGhhbmRs
ZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBp
ZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50
KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOworI2lmIGRlZmluZWQoWFBfTUFD
T1NYKQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZl
bnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQorICAg
ICAgICBoYW5kbGVXaGVlbEV2ZW50KHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCkpOwor
I2VuZGlmCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29udGV4
dG1lbnVFdmVudCkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7IC8vIFdlIGRv
bid0IGtub3cgaWYgdGhlIHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vkb3duIGV2ZW50IGJ5IGRp
c3BsYXlpbmcgYSBjb250ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQgV2ViS2l0IHRvIHNob3cg
YSBkZWZhdWx0IG9uZS4KKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZv
Y3Vzb3V0RXZlbnQpCisgICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKKyAgICBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5mb2N1c2luRXZlbnQpCisgICAgICAgIGhh
bmRsZUZvY3VzSW5FdmVudCgpOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW5pdCgp
Cit7CisgICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2hhdmVJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAg
IEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6aW5pdCgp
OiBJbml0aWFsaXppbmcgcGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5hbWUoKS51dGY4KCkuZGF0
YSgpKTsKKworICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9
IDA7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnRPckFkZFRvVW5zdGFydGVkTGlz
dCgpKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9h
ZGVkU3VjY2Vzc2Z1bGx5OworfQorCitib29sIFBsdWdpblZpZXc6OnN0YXJ0T3JBZGRUb1Vuc3Rh
cnRlZExpc3QoKQoreworICAgIGlmICghbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBvbmx5IGRlbGF5IHN0YXJ0aW5nIHRoZSBwbHVnLWlu
IGlmIHdlJ3JlIGdvaW5nIHRvIGtpY2sgb2ZmIHRoZSBsb2FkCisgICAgLy8gb3Vyc2VsdmVzLiBP
dGhlcndpc2UsIHRoZSBsb2FkZXIgd2lsbCB0cnkgdG8gZGVsaXZlciBkYXRhIGJlZm9yZSB3ZSd2
ZQorICAgIC8vIHN0YXJ0ZWQgdGhlIHBsdWctaW4uCisgICAgaWYgKCFtX2xvYWRNYW51YWxseSAm
JiAhbV9wYXJlbnRGcmFtZS0+cGFnZSgpLT5jYW5TdGFydE1lZGlhKCkpIHsKKyAgICAgICAgbV9w
YXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwor
ICAgICAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gc3RhcnQoKTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpzdGFy
dCgpCit7CisgICAgaWYgKG1faXNTdGFydGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBtX2lzV2FpdGluZ1RvU3RhcnQgPSBmYWxzZTsKKworICAgIFBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXI6OnNjaGVkdWxlcigpLnJlZ2lzdGVyUGx1Z2luKG1faW5zdGFuY2UpOworCisgICAgQVNT
RVJUKG1fcGx1Z2luKTsKKyAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3Ap
OworCisgICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUudXRmOCgpLmRhdGEoKSwgbV9pbnN0YW5j
ZSwgbV9tb2RlLCBtX3BhcmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9wYXJhbVZhbHVlcywgTlVM
TCk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgICAgICBMT0dfTlBFUlJP
UihucEVycik7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwor
ICAgIH0KKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikgeworICAgICAgICBtX3N0
YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIFBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnVucmVnaXN0ZXJQbHVnaW4obV9pbnN0YW5jZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2lzU3RhcnRlZCA9IHRydWU7
CisKKyAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFudWFsbHkpIHsKKyAgICAg
ICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgICAgICBmcmFtZUxvYWRSZXF1
ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtX3VybCk7CisgICAgICAgIGxvYWQoZnJhbWVM
b2FkUmVxdWVzdCwgZmFsc2UsIDApOworICAgIH0KKworICAgIG1fc3RhdHVzID0gUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OworCisgICAgaWYgKCFwbGF0Zm9ybVN0YXJ0KCkpCisgICAg
ICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKworICAgIGlmICht
X3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXc6Om1lZGlh
Q2FuU3RhcnQoKQoreworICAgIEFTU0VSVCghbV9pc1N0YXJ0ZWQpOworICAgIGlmICghc3RhcnQo
KSkKKyAgICAgICAgcGFyZW50RnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50KCkuZGlzcGF0Y2hEaWRG
YWlsVG9TdGFydFBsdWdpbih0aGlzKTsKK30KKworUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQor
eworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKSIpOworCisgICAg
QVNTRVJUKCFtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7CisKKyAgICAvLyBJZiB3ZSBm
YWlsZWQgdG8gZmluZCB0aGUgcGx1Zy1pbiwgd2UnbGwgcmV0dXJuIGVhcmx5IGluIG91ciBjb25z
dHJ1Y3RvciwgYW5kCisgICAgLy8gbV9pbnN0YW5jZSB3aWxsIGJlIDAuCisgICAgaWYgKG1faW5z
dGFuY2UpCisgICAgICAgIGluc3RhbmNlTWFwKCkucmVtb3ZlKG1faW5zdGFuY2UpOworCisgICAg
aWYgKG1faXNXYWl0aW5nVG9TdGFydCkKKyAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQo
KS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOworCisgICAgc3RvcCgpOworCisg
ICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsKKyAgICBmcmVl
U3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsKKworICAgIHBsYXRmb3Jt
RGVzdHJveSgpOworCisgICAgbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY2xlYW51cFNjcmlwdE9i
amVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYgIShtX3BsdWdpbi0+
cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkpCisgICAgICAg
IG1fcGx1Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKK3sKKyAg
ICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBMT0coUGx1Z2lucywg
IlBsdWdpblZpZXc6OnN0b3AoKTogU3RvcHBpbmcgcGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4g
PiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4g
Pjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRy
PFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICAoKml0KS0+c3RvcCgpOworICAgICAgICBkaXNjb25uZWN0U3Ry
ZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1wdHko
KSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOworCisgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2lmIGRlZmluZWQoWFBfV0lOKSAmJiAhUExB
VEZPUk0oR1RLKQorICAgIC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdworICAgIGlmIChtX2lzV2lu
ZG93ZWQpIHsKKyAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdp
bmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsKKworICAg
ICAgICBpZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2MpCisgICAgICAgICAg
ICBTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywg
KExPTkdfUFRSKW1fcGx1Z2luV25kUHJvYyk7CisgICAgfQorI2VuZGlmIC8vICFkZWZpbmVkKFhQ
X1dJTikgfHwgUExBVEZPUk0oR1RLKQorI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQorCisjaWYgIWRlZmluZWQoWFBfTUFDT1NYKQorICAgIC8vIENsZWFyIHRoZSB3aW5kb3cK
KyAgICBtX25wV2luZG93LndpbmRvdyA9IDA7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPnNldHdpbmRvdyAmJiAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1
aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpKSB7CisgICAgICAgIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5z
dGFuY2UsICZtX25wV2luZG93KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Cisg
ICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKworI2lm
ZGVmIFhQX1VOSVgKKyAgICBkZWxldGUgc3RhdGljX2Nhc3Q8TlBTZXRXaW5kb3dDYWxsYmFja1N0
cnVjdCo+KG1fbnBXaW5kb3cud3NfaW5mbyk7CisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gMDsK
KyNlbmRpZgorCisjZW5kaWYgLy8gIWRlZmluZWQoWFBfTUFDT1NYKQorCisgICAgUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBsdWdpbihtX2luc3RhbmNl
KTsKKworICAgIE5QU2F2ZWREYXRhKiBzYXZlZERhdGEgPSAwOworICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Cisg
ICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5kZXN0cm95KG1faW5z
dGFuY2UsICZzYXZlZERhdGEpOworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIExP
R19OUEVSUk9SKG5wRXJyKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygw
KTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGlmIChzYXZlZERhdGEp
IHsKKyAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgc2F2ZSB0aGlzIGRhdGEgaW5zdGVhZCBvZiBq
dXN0IGRpc2NhcmRpbmcgaXQKKyAgICAgICAgaWYgKHNhdmVkRGF0YS0+YnVmKQorICAgICAgICAg
ICAgTlBOX01lbUZyZWUoc2F2ZWREYXRhLT5idWYpOworICAgICAgICBOUE5fTWVtRnJlZShzYXZl
ZERhdGEpOworICAgIH0KKyNlbmRpZgorCisgICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqIHBsdWdp
blZpZXcpCit7CisgICAgc19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdpblZpZXc7Cit9CisKK1Bs
dWdpblZpZXcqIFBsdWdpblZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCkKK3sKKyAgICByZXR1cm4g
c19jdXJyZW50UGx1Z2luVmlldzsKK30KKworc3RhdGljIGNoYXIqIGNyZWF0ZVVURjhTdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHIpCit7CisgICAgQ1N0cmluZyBjc3RyID0gc3RyLnV0ZjgoKTsKKyAg
ICBjb25zdCBzaXplX3QgY3N0ckxlbmd0aCA9IGNzdHIubGVuZ3RoKCk7CisgICAgY2hhciogcmVz
dWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjc3RyTGVuZ3RoICsgMSkp
OworCisgICAgbWVtY3B5KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHJMZW5ndGgpOworICAgIHJl
c3VsdFtjc3RyTGVuZ3RoXSA9ICdcMCc7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3QqIHJlcXVlc3QpCit7Cisg
ICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gZG9uJ3QgbGV0
IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIgcGFydCBvZiBhIGRv
Y3VtZW50IHRoYXQgaXMgYmVpbmcgCisgICAgLy8gZGlzcGxheWVkIHVubGVzcyB0aGUgbG9hZHMg
YXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCisgICAgY29uc3QgU3RyaW5nJiB0
YXJnZXRGcmFtZU5hbWUgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCk7
CisgICAgaWYgKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkgIT0gbV9w
YXJlbnRGcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJiAodGFyZ2V0RnJh
bWVOYW1lLmlzTnVsbCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS5maW5kKHRhcmdldEZyYW1l
TmFtZSkgIT0gbV9wYXJlbnRGcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFVSTCByZXF1
ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLnVy
bCgpOworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChy
ZXF1ZXN0VVJMKTsKKworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3Io
cmVxdWVzdC0+c2hvdWxkQWxsb3dQb3B1cHMoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdl
c3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisKKyAgICBpZiAoanNTdHJp
bmcuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gaWYgdGhpcyBpcyBub3QgYSB0YXJnZXRlZCByZXF1
ZXN0LCBjcmVhdGUgYSBzdHJlYW0gZm9yIGl0LiBvdGhlcndpc2UsCisgICAgICAgIC8vIGp1c3Qg
cGFzcyBpdCBvZmYgdG8gdGhlIGxvYWRlcgorICAgICAgICBpZiAodGFyZ2V0RnJhbWVOYW1lLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gc3RyZWFtID0gUGx1
Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVzdC0+ZnJh
bWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0
aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGlu
c3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7CisgICAgICAgICAgICBtX3N0cmVhbXMuYWRk
KHN0cmVhbSk7CisgICAgICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGZyYW1lIGlzIG91ciBmcmFtZSwgd2UgY291
bGQgZGVzdHJveSB0aGUKKyAgICAgICAgICAgIC8vIFBsdWdpblZpZXcsIHNvIHdlIHByb3RlY3Qg
aXQuIDxyZGFyOi8vcHJvYmxlbS82OTkxMjUxPgorICAgICAgICAgICAgUmVmUHRyPFBsdWdpblZp
ZXc+IHByb3RlY3QodGhpcyk7CisKKyAgICAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVS
ZXF1ZXN0KG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5y
ZXNvdXJjZVJlcXVlc3QoKSk7CisgICAgICAgICAgICBmcmFtZVJlcXVlc3Quc2V0RnJhbWVOYW1l
KHRhcmdldEZyYW1lTmFtZSk7CisgICAgICAgICAgICBmcmFtZVJlcXVlc3Quc2V0U2hvdWxkQ2hl
Y2tOZXdXaW5kb3dQb2xpY3kodHJ1ZSk7CisgICAgICAgICAgICBtX3BhcmVudEZyYW1lLT5sb2Fk
ZXIoKS5sb2FkKGZyYW1lUmVxdWVzdCk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjov
L3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVuIHRoZSBkb2N1bWVudCBo
YXMgZmluaXNoZWQgbG9hZGluZworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmlj
YXRpb24oKSkgeworICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KHRoaXMpOworICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgICAgICAgICAg
c2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGFyZ2V0ZWQgSmF2YVNjcmlwdCByZXF1ZXN0
cyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBKYXZhU2Ny
aXB0IHBsdWdpbgorICAgIC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUgc3VyZSBpbiA6OmxvYWQu
CisgICAgQVNTRVJUKHRhcmdldEZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgbV9wYXJlbnRGcmFtZS0+
dHJlZSgpLmZpbmQodGFyZ2V0RnJhbWVOYW1lKSA9PSBtX3BhcmVudEZyYW1lKTsKKyAgICAKKyAg
ICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBk
ZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gaXQuCisgICAgUmVmUHRyPFBsdWdp
blZpZXc+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSByZXN1
bHQgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5leGVjdXRlU2NyaXB0KGpzU3RyaW5nLCByZXF1
ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpKTsKKworICAgIGlmICh0YXJnZXRGcmFtZU5hbWUuaXNO
dWxsKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKKworICAgICAgICBKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmpl
Y3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgQ1N0cmluZyBjc3RyOwor
ICAgICAgICBpZiAocmVzdWx0LmdldFN0cmluZyhzY3JpcHRTdGF0ZSwgcmVzdWx0U3RyaW5nKSkK
KyAgICAgICAgICAgIGNzdHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOworCisgICAgICAgIFJlZlB0
cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIG1fcGFy
ZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVl
c3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCks
IHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+cXVpcmtzKCkp
OworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisgICAgICAgIHN0cmVhbS0+c2VuZEph
dmFTY3JpcHRTdHJlYW0ocmVxdWVzdFVSTCwgY3N0cik7CisgICAgfQorfQorCit2b2lkIFBsdWdp
blZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKCkKK3sKKyAgICBBU1NFUlQoIW1fcmVxdWVzdHMuaXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQoIW1faXNKYXZhU2NyaXB0UGF1c2VkKTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0ID0gV1RGOjptb3ZlKG1fcmVxdWVzdHNb
MF0pOworICAgIG1fcmVxdWVzdHMucmVtb3ZlKDApOworICAgIAorICAgIC8vIFNjaGVkdWxlIGEg
bmV3IHJlcXVlc3QgYmVmb3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNhbGwg
dG8KKyAgICAvLyBwZXJmb3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJl
IGRlbGV0ZWQuCisgICAgaWYgKCFtX3JlcXVlc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9yZXF1
ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworCisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdC5n
ZXQoKSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2NoZWR1bGVSZXF1ZXN0KHN0ZDo6dW5pcXVl
X3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0KQoreworICAgIG1fcmVxdWVzdHMuYXBwZW5kKFdU
Rjo6bW92ZShyZXF1ZXN0KSk7CisKKyAgICBpZiAoIW1faXNKYXZhU2NyaXB0UGF1c2VkKQorICAg
ICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK05QRXJyb3IgUGx1Z2lu
Vmlldzo6bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29s
IHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgQVNTRVJUKGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJHRVQiIHx8IGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7
CisKKyAgICBVUkwgdXJsID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwo
KTsKKyAgICAKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lO
VkFMSURfVVJMOworCisgICAgLy8gRG9uJ3QgYWxsb3cgcmVxdWVzdHMgdG8gYmUgbWFkZSB3aGVu
IHRoZSBkb2N1bWVudCBsb2FkZXIgaXMgc3RvcHBpbmcgYWxsIGxvYWRlcnMuCisgICAgRG9jdW1l
bnRMb2FkZXIqIGxvYWRlciA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVy
KCk7CisgICAgaWYgKCFsb2FkZXIgfHwgbG9hZGVyLT5pc1N0b3BwaW5nKCkpCisgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgY29uc3QgU3RyaW5nJiB0YXJnZXRGcmFt
ZU5hbWUgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgpOworICAgIFN0cmluZyBqc1N0cmlu
ZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwpOworCisgICAgaWYgKCFqc1N0cmlu
Zy5pc051bGwoKSkgeworICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUiBpZiBK
UyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4KKyAgICAgICAgaWYgKCFt
X3BhcmVudEZyYW1lLT5zY3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0
ZVNjcmlwdCkpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAg
ICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBhbGxvdyBKUyByZXF1ZXN0cyB0byBi
ZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVnLWluLgorICAgICAgICBp
ZiAoIXRhcmdldEZyYW1lTmFtZS5pc051bGwoKSAmJiBtX3BhcmVudEZyYW1lLT50cmVlKCkuZmlu
ZCh0YXJnZXRGcmFtZU5hbWUpICE9IG1fcGFyZW50RnJhbWUpCisgICAgICAgICAgICByZXR1cm4g
TlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICB9IGVsc2UgaWYgKCFtX3BhcmVudEZyYW1lLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNwbGF5KHVybCkpCisgICAgICAgIHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgc2NoZWR1bGVSZXF1ZXN0KHN0ZDo6bWFrZV91
bmlxdWU8UGx1Z2luUmVxdWVzdD4oZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwg
bm90aWZ5RGF0YSwgYXJlUG9wdXBzQWxsb3dlZCgpKSk7CisKKyAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7Cit9CisKK3N0YXRpYyBVUkwgbWFrZVVSTChjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0
IGNoYXIqIHJlbGF0aXZlVVJMU3RyaW5nKQoreworICAgIFN0cmluZyB1cmxTdHJpbmcgPSByZWxh
dGl2ZVVSTFN0cmluZzsKKworICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgorICAgIHVy
bFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJ1xuJywgIiIpOworICAgIHVybFN0cmluZy5yZXBs
YWNlV2l0aExpdGVyYWwoJ1xyJywgIiIpOworCisgICAgcmV0dXJuIFVSTChiYXNlVVJMLCB1cmxT
dHJpbmcpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmdldFVSTE5vdGlmeShjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICBGcmFt
ZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKSk7CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0
YXJnZXQpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1l
dGhvZCgiR0VUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRV
UkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOwor
CisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwgbm90aWZ5RGF0YSk7Cit9
CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0KQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIGZyYW1lTG9h
ZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50
KCktPmJhc2VVUkwoKSwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0
LCBmYWxzZSwgMCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6cG9zdFVSTE5vdGlmeShjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFy
KiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBoYW5k
bGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSwgdHJ1ZSwgdHJ1
ZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6cG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBm
aWxlKQoreworICAgIC8vIEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cgaGVhZGVycyB0byBiZSBz
cGVjaWZpZWQgdmlhIE5QUF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxlLgorICAgIHJldHVybiBo
YW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwgZmFsc2UsIGZpbGUpOwor
fQorCitOUEVycm9yIFBsdWdpblZpZXc6Om5ld1N0cmVhbShOUE1JTUVUeXBlLCBjb25zdCBjaGFy
KiAvKiB0YXJnZXQgKi8sIE5QU3RyZWFtKiopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQorCitp
bnQzMl90IFBsdWdpblZpZXc6OndyaXRlKE5QU3RyZWFtKiwgaW50MzJfdCAvKiBsZW4gKi8sIHZv
aWQqIC8qIGJ1ZmZlciAqLykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFVuc3Vw
cG9ydGVkCisgICAgcmV0dXJuIC0xOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmRlc3Ryb3lT
dHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQoreworICAgIGlmICghc3Ry
ZWFtIHx8IFBsdWdpblN0cmVhbTo6b3duZXJGb3JTdHJlYW0oc3RyZWFtKSAhPSBtX2luc3RhbmNl
KQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUjsKKworICAgIFBs
dWdpblN0cmVhbSogYnJvd3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBsdWdpblN0cmVhbSo+KHN0
cmVhbS0+bmRhdGEpOworICAgIGJyb3dzZXJTdHJlYW0tPmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0o
cmVhc29uKTsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKwordm9pZCBQbHVnaW5W
aWV3OjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAoUGFnZSogcGFnZSA9
IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCkuc2V0U3RhdHVz
YmFyVGV4dChtX3BhcmVudEZyYW1lLmdldCgpLCBTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpKTsK
K30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpCit7CisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZSgl
cyk6ICIsIHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSh2YXJpYWJsZSwgdmFsdWUpLmRhdGEoKSk7
CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9v
bDoKKyAgICAgICAgbV9pc1dpbmRvd2VkID0gdmFsdWU7CisgICAgICAgIHJldHVybiBOUEVSUl9O
T19FUlJPUjsKKyAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6CisgICAgICAgIG1f
aXNUcmFuc3BhcmVudCA9IHZhbHVlOworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cisj
aWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgY2FzZSBOUFBWcGx1Z2luRHJhd2luZ01vZGVsOiB7
CisgICAgICAgIC8vIENhbiBvbmx5IHNldCBkcmF3aW5nIG1vZGVsIGluc2lkZSBOUFBfTmV3KCkK
KyAgICAgICAgaWYgKHRoaXMgIT0gY3VycmVudFBsdWdpblZpZXcoKSkKKyAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBEcmF3aW5nTW9kZWwgbmV3RHJh
d2luZ01vZGVsID0gTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVlKSk7CisgICAgICAgIHN3
aXRjaCAobmV3RHJhd2luZ01vZGVsKSB7CisgICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3Jl
R3JhcGhpY3M6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIGNh
c2UgTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uOgorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW4gYXNrZWQgZm9yIHVuc3VwcG9ydGVkIGRyYXdpbmcg
bW9kZWw6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgcHJldHR5TmFtZUZvckRyYXdpbmdNb2Rl
bChuZXdEcmF3aW5nTW9kZWwpKTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOworICAgICAgICB9CisgICAgfQorCisgICAgY2FzZSBOUFBWcGx1Z2luRXZlbnRNb2RlbDog
eworICAgICAgICAvLyBDYW4gb25seSBzZXQgZXZlbnQgbW9kZWwgaW5zaWRlIE5QUF9OZXcoKQor
ICAgICAgICBpZiAodGhpcyAhPSBjdXJyZW50UGx1Z2luVmlldygpKQorICAgICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICBOUEV2ZW50TW9kZWwgbmV3RXZlbnRN
b2RlbCA9IE5QRXZlbnRNb2RlbCh1aW50cHRyX3QodmFsdWUpKTsKKyAgICAgICAgc3dpdGNoIChu
ZXdFdmVudE1vZGVsKSB7CisgICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29jb2E6CisgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBMT0coUGx1Z2lucywgIlBsdWdpbiBhc2tlZCBmb3IgdW5zdXBwb3J0ZWQgZXZlbnQgbW9kZWw6
ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgcHJldHR5TmFtZUZvckV2ZW50TW9kZWwobmV3RXZl
bnRNb2RlbCkpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAg
ICAgIH0KKyAgICB9CisjZW5kaWYgLy8gZGVmaW5lZChYUF9NQUNPU1gpCisKKyAgICBkZWZhdWx0
OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVRpbWVyRmly
ZWQoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0cy5zaXpl
KCk7IGkrKykKKyAgICAgICAgaW52YWxpZGF0ZVJlY3QobV9pbnZhbGlkUmVjdHNbaV0pOworICAg
IG1faW52YWxpZFJlY3RzLmNsZWFyKCk7Cit9CisKKwordm9pZCBQbHVnaW5WaWV3OjpwdXNoUG9w
dXBzRW5hYmxlZFN0YXRlKGJvb2wgc3RhdGUpCit7CisgICAgbV9wb3B1cFN0YXRlU3RhY2suYXBw
ZW5kKHN0YXRlKTsKK30KKyAKK3ZvaWQgUGx1Z2luVmlldzo6cG9wUG9wdXBzRW5hYmxlZFN0YXRl
KCkKK3sKKyAgICBtX3BvcHVwU3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK2Jvb2wgUGx1
Z2luVmlldzo6YXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BvcHVwU3Rh
dGVTdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX3BvcHVwU3RhdGVTdGFjay5sYXN0
KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0SmF2YVNj
cmlwdFBhdXNlZChib29sIHBhdXNlZCkKK3sKKyAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQg
PT0gcGF1c2VkKQorICAgICAgICByZXR1cm47CisgICAgbV9pc0phdmFTY3JpcHRQYXVzZWQgPSBw
YXVzZWQ7CisKKyAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCisgICAgICAgIG1fcmVxdWVz
dFRpbWVyLnN0b3AoKTsKKyAgICBlbHNlIGlmICghbV9yZXF1ZXN0cy5pc0VtcHR5KCkpCisgICAg
ICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQorTlBPYmplY3QqIFBsdWdpblZpZXc6Om5wT2JqZWN0KCkKK3sKKyAg
ICBOUE9iamVjdCogb2JqZWN0ID0gMDsKKworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIW1fcGx1
Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIHJldHVy
biAwOworCisgICAgLy8gT24gV2luZG93cywgY2FsbGluZyBKYXZhJ3MgTlBOX0dldFZhbHVlIGNh
biBhbGxvdyB0aGUgbWVzc2FnZSBsb29wIHRvCisgICAgLy8gcnVuLCBhbGxvd2luZyBsb2FkaW5n
IHRvIHRha2UgcGxhY2Ugb3IgSmF2YVNjcmlwdCB0byBydW4uIFByb3RlY3QgdGhlCisgICAgLy8g
UGx1Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uLiA8cmRhcjovL3Byb2JsZW0vNjk3ODgwND4KKyAg
ICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKKworICAgIE5QRXJyb3IgbnBFcnI7
CisgICAgeworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsK
KyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAg
ICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5j
ZSwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7CisgICAgICAgIHNldENh
bGxpbmdQbHVnaW4oZmFsc2UpOworICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
VmlldygwKTsKKyAgICB9CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKyNlbmRpZgorCitQYXNzUmVm
UHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2Uo
KQoreworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIE5QT2JqZWN0KiBvYmpl
Y3QgPSBucE9iamVjdCgpOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChoYXNPbmVSZWYoKSkgeworICAgICAgICAvLyBUaGUgcmVuZGVyZXIgZm9yIHRoZSBQ
bHVnaW5WaWV3IHdhcyBkZXN0cm95ZWQgZHVyaW5nIHRoZSBhYm92ZSBjYWxsLCBhbmQKKyAgICAg
ICAgLy8gdGhlIFBsdWdpblZpZXcgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB0aGlzIGZ1bmN0aW9u
IHJldHVybnMsIHNvIHdlCisgICAgICAgIC8vIHJldHVybiBudWxsLgorICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdCA9
IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNyZWF0ZVJvb3RPYmplY3QodGhpcyk7CisgICAgUmVm
UHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBpbnN0YW5jZSA9IEpTQzo6QmluZGluZ3M6OkNJ
bnN0YW5jZTo6Y3JlYXRlKG9iamVjdCwgcm9vdC5yZWxlYXNlKCkpOworCisgICAgX05QTl9SZWxl
YXNlT2JqZWN0KG9iamVjdCk7CisKKyAgICByZXR1cm4gaW5zdGFuY2UucmVsZWFzZSgpOworI2Vs
c2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIFBsdWdpblZpZXc6OmRpc2Nvbm5l
Y3RTdHJlYW0oUGx1Z2luU3RyZWFtKiBzdHJlYW0pCit7CisgICAgQVNTRVJUKG1fc3RyZWFtcy5j
b250YWlucyhzdHJlYW0pKTsKKworICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgQVNTRVJU
KHBhcmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CisKKyAgICB1bnNpZ25l
ZCBzaXplID0gcGFyYW1OYW1lcy5zaXplKCk7CisgICAgdW5zaWduZWQgcGFyYW1Db3VudCA9IDA7
CisKKyAgICBtX3BhcmFtTmFtZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxv
YyhzaXplb2YoY2hhciopICogc2l6ZSkpOworICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBpZiAobV9wbHVn
aW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFy
YW0pICYmIGVxdWFsSWdub3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3aW5kb3dsZXNzdmlkZW8i
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChwYXJhbU5hbWVzW2ldID09
ICJwbHVnaW5zcGFnZSIpCisgICAgICAgICAgICBtX3BsdWdpbnNQYWdlID0gcGFyYW1WYWx1ZXNb
aV07CisKKyAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmlu
ZyhwYXJhbU5hbWVzW2ldKTsKKyAgICAgICAgbV9wYXJhbVZhbHVlc1twYXJhbUNvdW50XSA9IGNy
ZWF0ZVVURjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOworCisgICAgICAgIHBhcmFtQ291bnQrKzsK
KyAgICB9CisKKyAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50OworfQorCitQbHVnaW5WaWV3
OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1
Z2luUGFja2FnZSogcGx1Z2luLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJM
JiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVh
bGx5KQorICAgIDogbV9wYXJlbnRGcmFtZShwYXJlbnRGcmFtZSkKKyAgICAsIG1fcGx1Z2luKHBs
dWdpbikKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9pc1N0YXJ0ZWQoZmFsc2Up
CisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX3N0YXR1cyhQbHVnaW5TdGF0dXNMb2FkZWRTdWNj
ZXNzZnVsbHkpCisgICAgLCBtX3JlcXVlc3RUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OnJlcXVl
c3RUaW1lckZpcmVkKQorICAgICwgbV9pbnZhbGlkYXRlVGltZXIoKnRoaXMsICZQbHVnaW5WaWV3
OjppbnZhbGlkYXRlVGltZXJGaXJlZCkKKyAgICAsIG1fcG9wUG9wdXBzU3RhdGVUaW1lcigqdGhp
cywgJlBsdWdpblZpZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCkKKyAgICAsIG1fbGlmZVN1
cHBvcnRUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJlZCkKKyAg
ICAsIG1fbW9kZShsb2FkTWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1CRUQpCisgICAgLCBtX3Bh
cmFtTmFtZXMoMCkKKyAgICAsIG1fcGFyYW1WYWx1ZXMoMCkKKyAgICAsIG1fbWltZVR5cGUobWlt
ZVR5cGUpCisgICAgLCBtX2luc3RhbmNlKDApCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAg
LCBtX2lzV2luZG93ZWQoZmFsc2UpCisgICAgLCBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVl
c3RlZChmYWxzZSkKKyAgICAsIG1fa2V5RG93blNlbnQoZmFsc2UpCisgICAgLCBtX2Rpc3JlZ2Fy
ZEtleVVwQ291bnRlcigwKQorI2Vsc2UKKyAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQorI2VuZGlm
CisgICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAgLCBtX2hhdmVJbml0aWFsaXplZChm
YWxzZSkKKyAgICAsIG1faXNXYWl0aW5nVG9TdGFydChmYWxzZSkKKyNpZiBkZWZpbmVkKFhQX1VO
SVgpCisgICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQorI2VuZGlmCisjaWYgT1MoV0lORE9XUykg
JiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgLCBtX3BsdWdpblduZFByb2MoMCkK
KyAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKKyAgICAsIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyhm
YWxzZSkKKyAgICAsIG1fd21QcmludEhEQygwKQorICAgICwgbV9oYXZlVXBkYXRlZFBsdWdpbldp
ZGdldChmYWxzZSkKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEVGTCkKKyAgICAsIG1fd2luZG93KDAp
CisjZW5kaWYKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAsIG1fY29udGV4dFJlZigwKQor
I2VuZGlmCisjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKKyAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlKHRydWUpCisgICAgLCBtX2RyYXdh
YmxlKDApCisgICAgLCBtX3Zpc3VhbCgwKQorICAgICwgbV9jb2xvcm1hcCgwKQorICAgICwgbV9w
bHVnaW5EaXNwbGF5KDApCisjZW5kaWYKKyAgICAsIG1fbG9hZE1hbnVhbGx5KGxvYWRNYW51YWxs
eSkKKyAgICAsIG1fbWFudWFsU3RyZWFtKDApCisgICAgLCBtX2lzSmF2YVNjcmlwdFBhdXNlZChm
YWxzZSkKKyAgICAsIG1faGF2ZUNhbGxlZFNldFdpbmRvdyhmYWxzZSkKK3sKKyAgICBpZiAoIW1f
cGx1Z2luKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdp
bjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW5zdGFuY2UgPSAmbV9pbnN0YW5j
ZVN0cnVjdDsKKyAgICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7CisgICAgbV9pbnN0YW5jZS0+
cGRhdGEgPSAwOworCisgICAgaW5zdGFuY2VNYXAoKS5hZGQobV9pbnN0YW5jZSwgdGhpcyk7CisK
KyAgICBzZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKworICAgIG1lbXNl
dCgmbV9ucFdpbmRvdywgMCwgc2l6ZW9mKG1fbnBXaW5kb3cpKTsKKyNpZiBkZWZpbmVkKFhQX01B
Q09TWCkKKyAgICBtZW1zZXQoJm1fbnBDZ0NvbnRleHQsIDAsIHNpemVvZihtX25wQ2dDb250ZXh0
KSk7CisjZW5kaWYKKworICAgIHJlc2l6ZShzaXplKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpm
b2N1c1BsdWdpbkVsZW1lbnQoKQoreworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFt
ZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxl
bWVudChtX2VsZW1lbnQsIG1fcGFyZW50RnJhbWUpOworICAgIGVsc2UKKyAgICAgICAgbV9wYXJl
bnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobV9lbGVtZW50KTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1
Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5
KTsKKyAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtID0g
UGx1Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgbV9wYXJlbnRG
cmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwg
MCwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3Mo
KSk7CisgICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKKworICAgIG1f
bWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
Cit7CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKKyAgICBBU1NF
UlQobV9tYW51YWxTdHJlYW0pOworICAgIAorICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZl
RGF0YSgwLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmRpZEZpbmlzaExv
YWRpbmcoKQoreworICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNz
ZnVsbHkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2xvYWRNYW51YWxseSk7Cisg
ICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGaW5p
c2hMb2FkaW5nKDApOworfQorCit2b2lkIFBsdWdpblZpZXc6OmRpZEZhaWwoY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCit7CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZE1hbnVh
bGx5KTsKKyAgICAKKyAgICBpZiAobV9tYW51YWxTdHJlYW0pCisgICAgICAgIG1fbWFudWFsU3Ry
ZWFtLT5kaWRGYWlsKDAsIGVycm9yKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRDYWxsaW5n
UGx1Z2luKGJvb2wgYikgY29uc3QKK3sKKyAgICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoYikKKyAgICAgICAgKytzX2NhbGxpbmdQbHVnaW47CisgICAgZWxzZQorICAgICAg
ICAtLXNfY2FsbGluZ1BsdWdpbjsKKworICAgIEFTU0VSVChzX2NhbGxpbmdQbHVnaW4gPj0gMCk7
Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkKK3sKKyAgICByZXR1cm4g
c19jYWxsaW5nUGx1Z2luID4gMDsKK30KKworUGFzc1JlZlB0cjxQbHVnaW5WaWV3PiBQbHVnaW5W
aWV3OjpjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBIVE1M
UGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAgIC8vIGlmIHdlIGZh
aWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQbHVnaW4gd2lsbCBz
ZWFyY2ggZm9yCisgICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCB1cGRh
dGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCisgICAgU3RyaW5nIG1p
bWVUeXBlQ29weSA9IG1pbWVUeXBlOworICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IFBsdWdp
bkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNv
cHkpOworCisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRh
dGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBpZiAoIXBsdWdpbiAmJiBQbHVnaW5EYXRh
YmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCkpIHsKKyAgICAgICAgbWltZVR5cGVD
b3B5ID0gbWltZVR5cGU7CisgICAgICAgIHBsdWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxs
ZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOworICAgIH0KKworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luVmlldyhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2lu
LCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxv
YWRNYW51YWxseSkpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheShjaGFy
Kiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFzdHJpbmdBcnJheSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAg
ICAgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOworCisgICAgZmFzdEZyZWUoc3RyaW5nQXJy
YXkpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBW
ZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYg
YnVmZmVyWzBdID09ICdcbic7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJG
aXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBjb25zdCBj
aGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVy
LnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKysp
IHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgorICAg
ICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAg
ICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIHBv
c2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4K
KyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsK
KyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGlmIChpID09IDIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQor
ICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxu
IiAoMzg4MDM4NykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAgICAg
ZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAg
ICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1
ODExMykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0wo
Y29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBBY2NvcmRpbmcg
dG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcworICAgIC8vIGEgQ1JM
RiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKKyAgICAvLyBp
bnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCisg
ICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVl
ZHMKKyAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYs
IExGIG9yCisgICAgLy8gQ1IuCisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9M
RiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4KKyAgICAvLyBhIHBvaW50ZXIgdG8gdGhl
IGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAg
ICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgewor
ICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKKyAg
ICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgorICAg
ICAgICAgICAgLy8gbmV4dCByZWFkLgorICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIFN0
cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgIFN0cmluZyByZXN1
bHQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7
CisgICAgICAgIFVDaGFyIGM7CisKKyAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYg
bmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCisgICAgICAgICAgICBjID0gdG9BU0NJ
SVVwcGVyKG5hbWVbaV0pOworICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAm
JiBuYW1lW2ldID49ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykKKyAgICAgICAgICAgIGMgPSB0b0FT
Q0lJTG93ZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ld
OworCisgICAgICAgIGlmIChuYW1lW2ldID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVD
aGFyYWN0ZXIgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hh
cmFjdGVyID0gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VS
RkM4MjJIZWFkZXJGaWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29u
c3QgY2hhciogZW9sOworICAgIFN0cmluZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVh
ZGVyRmllbGRzOworCisgICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhl
IGhlYWRlciwgb3Igd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGls
ZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIq
IGxpbmUgPSBieXRlczsKKyAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAg
ICAgICAgCisgICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUg
dGVybWluYXRvciBhcyByZXR1cm5lZCBieSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCAr
IDE7CisgICAgICAgIGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAg
ICAgICAgICAgYnl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNw
YW5uaW5nIENSTEYuCisKKyAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAg
ICBpZiAobGluZUxlbmd0aCA9PSAwKQorICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUg
YXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxz
ZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENv
bnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtl
eS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9y
ZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0
aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9
IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1Zh
bHVlKGxpbmUsIGxpbmVMZW5ndGgpOworCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNl
dChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCisgICAgICAgICAg
ICBjb25zdCBjaGFyKiBjb2xvbjsKKyAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29s
b24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAgIC8v
IGVtcHR5IGxvb3AKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wp
IAorICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29u
dGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKFN0
cmluZyhsaW5lLCBjb2xvbiAtIGxpbmUpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7
CisKKyAgICAgICAgICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0
JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKQorICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9ICIiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSBTdHJpbmcoY29sb24sIGVvbCAtIGNvbG9uKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyBv
bGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgaWYg
KCFvbGRWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvbGRWYWx1
ZSArICIsICIgKyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFz
dEtleSwgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGhlYWRlckZpZWxkczsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNv
bnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNo
YXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRp
b24sIGJvb2wgYWxsb3dIZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikK
KyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAgICBGcmFtZUxvYWRSZXF1
ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKSk7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKyAgICBWZWN0b3I8
Y2hhcj4gYnVmZmVyOworICAgIAorICAgIGlmIChmaWxlKSB7CisgICAgICAgIE5QRXJyb3IgcmVh
ZFJlc3VsdCA9IGhhbmRsZVBvc3RSZWFkRmlsZShidWZmZXIsIGxlbiwgYnVmKTsKKyAgICAgICAg
aWYocmVhZFJlc3VsdCAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiByZWFk
UmVzdWx0OworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZmZlci5yZXNpemUobGVuKTsKKyAgICAg
ICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKKyAgICB9CisKKyAgICBjb25zdCBj
aGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaW50IHBvc3REYXRhTGVuZ3RoID0g
YnVmZmVyLnNpemUoKTsKKworICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKKyAgICAgICAgaWYgKHN0
YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgeworICAgICAgICAgICAgcG9zdERhdGErKzsKKyAg
ICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKKyAg
ICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2
ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVs
ZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOwor
CisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVu
dC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKKyAgICAgICAgICAgICAgICAvLyBi
dXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRo
ZSBoZWFkZXIKKyAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0
YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVu
dExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgp
OworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgpKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5ndGgudG9JbnQoKSwgKGlu
dClkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBI
ZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9
IGxvY2F0aW9uOworICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9wYXJlbnRGcmFtZS0+ZG9j
dW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNl
UmVxdWVzdCgpLnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGOjptb3ZlKGhlYWRlckZpZWxkcykpOwor
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEJvZHkoRm9ybURh
dGE6OmNyZWF0ZShwb3N0RGF0YSwgcG9zdERhdGFMZW5ndGgpKTsKKyAgICBmcmFtZUxvYWRSZXF1
ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVx
dWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6aW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgaWYgKCFpc1Zpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICgh
bV9lbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byYgcmVuZGVy
ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCptX2VsZW1lbnQtPnJlbmRlcmVyKCkpOworICAgIAor
ICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKKyAgICBkaXJ0eVJlY3QubW92ZShyZW5kZXJl
ci5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci5wYWRkaW5nTGVmdCgpLCByZW5kZXJlci5ib3JkZXJU
b3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKSk7CisgICAgcmVuZGVyZXIucmVwYWludFJlY3Rh
bmdsZShkaXJ0eVJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50TWlzc2luZ1BsdWdp
bkljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IG51bGxQbHVnaW5JbWFnZTsKKyAgICBpZiAoIW51bGxQ
bHVnaW5JbWFnZSkKKyAgICAgICAgbnVsbFBsdWdpbkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJudWxsUGx1Z2luIik7CisKKyAgICBJbnRSZWN0IGltYWdlUmVjdChmcmFtZVJl
Y3QoKS54KCksIGZyYW1lUmVjdCgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53aWR0aCgpLCBudWxs
UGx1Z2luSW1hZ2UtPmhlaWdodCgpKTsKKworICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lUmVjdCgp
LndpZHRoKCkgLSBpbWFnZVJlY3Qud2lkdGgoKSkgLyAyOworICAgIGludCB5T2Zmc2V0ID0gKGZy
YW1lUmVjdCgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7CisKKyAgICBpbWFn
ZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKKworICAgIGlmICghcmVjdC5pbnRlcnNlY3Rz
KGltYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAg
ICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0KCkpOworICAgIGNvbnRleHQtPmRyYXdJbWFn
ZShudWxsUGx1Z2luSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGltYWdlUmVjdC5s
b2NhdGlvbigpKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3N0YXRpYyBjb25zdCBj
aGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wICgiCisjaWYgZGVmaW5lZChYUF9N
QUNPU1gpCisgICAgICAgICJNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBYOyIKKyNlbGlmIGRl
ZmluZWQoWFBfV0lOKQorICAgICAgICAiV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IgorI2Vs
aWYgZGVmaW5lZChYUF9VTklYKQorLy8gVGhlIEd0ayBwb3J0IHVzZXMgWDExIHBsdWdpbnMgaW4g
TWFjLgorI2lmIE9TKERBUldJTikgJiYgUExBVEZPUk0oR1RLKQorICAgICJYMTE7IFU7IEludGVs
IE1hYyBPUyBYOyIKKyNlbHNlCisgICAgIlgxMTsgVTsgTGludXggaTY4NjsiCisjZW5kaWYKKyNl
bmRpZgorICAgICAgICAiIGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8y
LjAiOworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ2hyb21lVXNlckFnZW50ID0gIk1vemls
bGEvNS4wICgiCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgIk1hY2ludG9zaDsgVTsgSW50
ZWwgTWFjIE9TIFg7IgorI2VsaWYgZGVmaW5lZChYUF9XSU4pCisgICAgIldpbmRvd3M7IFU7IFdp
bmRvd3MgTlQgNS4xOyIKKyNlbGlmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAvLyBUaGUgR3RrIHBv
cnQgdXNlcyBYMTEgcGx1Z2lucyBpbiBNYWMuCisjaWYgT1MoREFSV0lOKSAmJiBQTEFURk9STShH
VEspCisgICAgIlgxMTsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2Vsc2UKKyAgICAiWDExOyBVOyBM
aW51eCBpNjg2OyIKKyNlbmRpZgorI2VuZGlmCisgICAgIiBBcHBsZVdlYktpdC81MzQuMzQgKEtI
VE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTkuMC4xMDU1LjEgU2FmYXJpLzUzNC4zNCI7CisKK2Nv
bnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1fcGx1Z2luLT5x
dWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCisgICAg
ICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OworICAgIGVsc2UgaWYgKG1fcGx1Z2luLT5xdWly
a3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzQ2hyb21lVXNlckFnZW50KSkKKyAgICAgICAg
cmV0dXJuIENocm9tZVVzZXJBZ2VudDsKKyAgICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCisg
ICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkudXNlckFnZW50KG1f
dXJsKS51dGY4KCk7CisKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOworfQorCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitjb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2Vy
QWdlbnRTdGF0aWMoKQoreworICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OworfQorI2VuZGlm
CisKKwordm9pZCBQbHVnaW5WaWV3OjpsaWZlU3VwcG9ydFRpbWVyRmlyZWQoKQoreworICAgIGRl
cmVmKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKCkKK3sKKyAgICBpZiAobV9s
aWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlZigp
OworICAgIG1fbGlmZVN1cHBvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKKyNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3ZvaWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKE5QUCBp
bnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gaW5zdGFuY2VNYXAoKS5nZXQoaW5z
dGFuY2UpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgdmlldy0+a2Vl
cEFsaXZlKCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoTlBOVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6Z2V0VmFsdWVTdGF0aWMoJXMpIiwgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlh
YmxlKS5kYXRhKCkpOworCisgICAgTlBFcnJvciByZXN1bHQ7CisgICAgaWYgKHBsYXRmb3JtR2V0
VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKworICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQorCitOUEVycm9yIFBs
dWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sK
KyAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OmdldFZhbHVlKCVzKSIsIHByZXR0eU5hbWVG
b3JOUE5WYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKKworICAgIE5QRXJyb3IgcmVzdWx0Owor
ICAgIGlmIChwbGF0Zm9ybUdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAocGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyh2YXJp
YWJsZSwgdmFsdWUsICZyZXN1bHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgc3dp
dGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisgICAgICAg
IGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOworCisgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3Bh
cmVudEZyYW1lLT5zY3JpcHQoKS53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAgIC8v
IFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhl
cmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRt
bD4KKyAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0
YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9p
ZCoqKXZhbHVlOworICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsKKworICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfQorCisgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVu
dE5QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgIE5QT2JqZWN0KiBwbHVn
aW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUo
YXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVu
dC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0
ID0gbV9lbGVtZW50LT5nZXROUE9iamVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBp
cyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3
Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYg
KHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdp
blNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAg
ICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7CisgICAgfQorCisgICAgY2FzZSBOUE5WcHJpdmF0ZU1vZGVCb29sOiB7CisgICAgICAg
IFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCk7CisgICAgICAgIGlmICghcGFnZSkK
KyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICAqKChOUEJv
b2wqKXZhbHVlKSA9IHBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCk7CisgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3N0YXRpYyBGcmFtZSogZ2V0RnJhbWUo
RnJhbWUqIHBhcmVudEZyYW1lLCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChwYXJlbnRG
cmFtZSkKKyAgICAgICAgcmV0dXJuIHBhcmVudEZyYW1lOworICAgIAorICAgIHJldHVybiBlbGVt
ZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFs
dWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hhcioq
IHZhbHVlLCB1aW50MzJfdCogbGVuKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6
Z2V0VmFsdWVGb3JVUkwoJXMpIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxl
KS5kYXRhKCkpOworCisgICAgTlBFcnJvciByZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKworICAg
IHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlVSTFZDb29raWU6IHsKKyAgICAgICAg
VVJMIHUobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOworICAgICAg
ICBpZiAodS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1l
KHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoZnJhbWUpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNvb2tpZXMoZnJhbWUtPmRv
Y3VtZW50KCksIHUpLnV0ZjgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvb2tpZVN0ci5pc051
bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IGNvb2tpZVN0ci5s
ZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCp2YWx1ZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCp2YWx1ZSwgMCwgc2l6ZSsxKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIGNvb2tpZVN0ci5kYXRhKCksIHNp
emUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpsZW4gPSBzaXplOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1I7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBOUE5VUkxWUHJveHk6IHsKKyAgICAgICAgVVJMIHUobV9wYXJlbnRGcmFtZS0+
ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOworICAgICAgICBpZiAodS5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxl
bWVudCk7CisgICAgICAgICAgICBjb25zdCBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBmcmFt
ZSA/ICZmcmFtZS0+bG9hZGVyKCkgOiAwOworICAgICAgICAgICAgY29uc3QgTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQgPSBmcmFtZUxvYWRlciA/IGZyYW1lTG9hZGVyLT5uZXR3b3JraW5nQ29u
dGV4dCgpIDogMDsKKyAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgcHJveHlTdHIgPSB0b1N0cmlu
Zyhwcm94eVNlcnZlcnNGb3JVUkwodSwgY29udGV4dCkpLnV0ZjgoKTsKKyAgICAgICAgICAgIGlm
ICghcHJveHlTdHIuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9
IHByb3h5U3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0
PGNoYXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7CisgICAgICAgICAgICAgICAgaWYgKCp2YWx1
ZSkgeworICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAwLCBzaXplKzEpOworICAg
ICAgICAgICAgICAgICAgICBtZW1jcHkoKnZhbHVlLCBwcm94eVN0ci5kYXRhKCksIHNpemUrMSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAq
bGVuID0gc2l6ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJlc3VsdCA9IE5QRVJSX0dF
TkVSSUNfRVJST1I7CisgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVG
b3JVUkw6ICVzIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK05Q
RXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUs
IGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikKK3sKKyAg
ICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKCVzKSIsIHByZXR0eU5h
bWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKKworICAgIE5QRXJyb3IgcmVz
dWx0ID0gTlBFUlJfTk9fRVJST1I7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2Fz
ZSBOUE5VUkxWQ29va2llOiB7CisgICAgICAgIFVSTCB1KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50
KCktPmJhc2VVUkwoKSwgdXJsKTsKKyAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7CisgICAgICAg
ICAgICBjb25zdCBTdHJpbmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVu
KTsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1f
ZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2ll
U3RyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElE
X1VSTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTlBOVVJMVlByb3h5OgorICAg
ICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKCVzKTogUGx1Z2lu
cyBhcmUgTk9UIGFsbG93ZWQgdG8gc2V0IHByb3h5IGluZm9ybWF0aW9uLiIsIHByZXR0eU5hbWVG
b3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKKyAgICAgICAgcmVzdWx0ID0gTlBF
UlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
TE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTDogJXMiLCBwcmV0dHlOYW1l
Rm9yTlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisgICAgICAgIHJlc3VsdCA9IE5Q
RVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKGNv
bnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0
IGNoYXIqIC8qIHNjaGVtZSAqLywgY29uc3QgY2hhciogLyogcmVhbG0gKi8sIGNoYXIqKiAgLyog
dXNlcm5hbWUgKi8sIHVpbnQzMl90KiAvKiB1bGVuICovLCBjaGFyKiogLyogcGFzc3dvcmQgKi8s
IHVpbnQzMl90KiAvKiBwbGVuICovKQoreworI2lmIExPR19ESVNBQkxFRAorICAgIFVOVVNFRF9Q
QVJBTShwcm90b2NvbCk7CisgICAgVU5VU0VEX1BBUkFNKGhvc3QpOworICAgIFVOVVNFRF9QQVJB
TShwb3J0KTsKKyNlbmRpZgorICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0QXV0aGVu
dGljYXRpb25JbmZvOiBwcm90b2NvbD0lcywgaG9zdD0lcywgcG9ydD0lZCIsIHByb3RvY29sLCBo
b3N0LCBwb3J0KTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOworfQorI2VuZGlmCisKK3ZvaWQgUGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5n
U3RhdGVDaGFuZ2VkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKK3sKKyAgICBOUFBfU2V0
VmFsdWVQcm9jUHRyIHNldFZhbHVlID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHZhbHVl
OworICAgIGlmICghc2V0VmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKKyAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFi
bGVkOworICAgIHNldFZhbHVlKG1faW5zdGFuY2UsIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1
ZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3Vy
cmVudFBsdWdpblZpZXcoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1Bs
dWdpblZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODZiYjlkMjgxMTRhZGQ4Njk0ZDVjZDExN2EwM2Q2NjBk
ZGZjMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVn
aW5WaWV3LmgKQEAgLTAsMCArMSw0NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRi
aWFzLmluPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBQbHVnaW5WaWV3X2gKKyNkZWZpbmUgUGx1Z2luVmlld19oCisKKyNpbmNsdWRlICJGcmFt
ZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1lZGlhQ2Fu
U3RhcnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW0u
aCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKyNlbmRpZgorCisjaWYgT1MoV0lO
RE9XUykgJiYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOwordHlw
ZWRlZiBIV05EIFBsYXRmb3JtUGx1Z2luV2lkZ2V0OworI2Vsc2UKK3R5cGVkZWYgUGxhdGZvcm1X
aWRnZXQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCit0
eXBlZGVmIHN0cnVjdCBfR3RrU29ja2V0IEd0a1NvY2tldDsKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oWDExKQordHlwZWRlZiB1bnNpZ25lZCBsb25nIFdpbmRvdzsKK3R5cGVkZWYgc3RydWN0IF9Y
RGlzcGxheSBEaXNwbGF5OworI2VuZGlmCisKK25hbWVzcGFjZSBKU0MgeworICAgIG5hbWVzcGFj
ZSBCaW5kaW5ncyB7CisgICAgICAgIGNsYXNzIEluc3RhbmNlOworICAgIH0KK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEZyYW1lVmlldzsKKyAg
ICBjbGFzcyBJbWFnZTsKKyAgICBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsKKyAgICBjbGFzcyBL
ZXlib2FyZEV2ZW50OworICAgIGNsYXNzIE1vdXNlRXZlbnQ7CisgICAgY2xhc3MgVVJMOworI2lm
IE9TKFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGNsYXNzIFBs
dWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW47CisjZW5kaWYKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdl
OworICAgIGNsYXNzIFBsdWdpblJlcXVlc3Q7CisgICAgY2xhc3MgUGx1Z2luU3RyZWFtOworICAg
IGNsYXNzIFJlc291cmNlRXJyb3I7CisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICBj
bGFzcyBXaGVlbEV2ZW50OworCisgICAgZW51bSBQbHVnaW5TdGF0dXMgeworICAgICAgICBQbHVn
aW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RMb2Fk
UGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKKyAgICB9Owor
CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFBsdWdpblJlcXVlc3QpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFBsdWdpblJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVx
dWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNob3Vs
ZEFsbG93UG9wdXBzKQorICAgICAgICAgICAgOiBtX2ZyYW1lTG9hZFJlcXVlc3QoZnJhbWVMb2Fk
UmVxdWVzdCkKKyAgICAgICAgICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAgICAg
ICAgICAsIG1fc2VuZE5vdGlmaWNhdGlvbihzZW5kTm90aWZpY2F0aW9uKQorICAgICAgICAgICAg
LCBtX3Nob3VsZEFsbG93UG9wdXBzKHNob3VsZEFsbG93UG9wdXBzKSB7IH0KKyAgICBwdWJsaWM6
CisgICAgICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7IH0KKyAgICAgICAgdm9pZCogbm90aWZ5RGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fbm90aWZ5RGF0YTsgfQorICAgICAgICBib29sIHNlbmROb3Rp
ZmljYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbmROb3RpZmljYXRpb247IH0KKyAgICAgICAg
Ym9vbCBzaG91bGRBbGxvd1BvcHVwcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQWxsb3dQb3B1
cHM7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IG1fZnJhbWVMb2Fk
UmVxdWVzdDsKKyAgICAgICAgdm9pZCogbV9ub3RpZnlEYXRhOworICAgICAgICBib29sIG1fc2Vu
ZE5vdGlmaWNhdGlvbjsKKyAgICAgICAgYm9vbCBtX3Nob3VsZEFsbG93UG9wdXBzOworICAgIH07
CisKKyAgICBjbGFzcyBQbHVnaW5NYW51YWxMb2FkZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dmlydHVhbCB+UGx1Z2luTWFudWFsTG9hZGVyKCkge30KKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZygpID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpID0gMDsKKyAgICB9OworCisgICAgY2xh
c3MgUGx1Z2luVmlldyA6IHB1YmxpYyBQbHVnaW5WaWV3QmFzZQorI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorICAgICAgICAgICAgICAgICAgICAgLCBwcml2YXRlIFBsdWdpblN0cmVh
bUNsaWVudAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBQbHVnaW5NYW51
YWxMb2FkZXIKKyAgICAgICAgICAgICAgICAgICAgICwgcHJpdmF0ZSBNZWRpYUNhblN0YXJ0TGlz
dGVuZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luVmll
dz4gY3JlYXRlKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIEhUTUxQbHVnSW5F
bGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Ym9vbCBsb2FkTWFudWFsbHkpOworICAgICAgICB2aXJ0dWFsIH5QbHVnaW5WaWV3KCk7CisKKyAg
ICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW4uZ2V0
KCk7IH0KKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBQIGluc3Rh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQorI2VuZGlmCisKKyAgICAgICAgdm9p
ZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpOworICAgICAgICBzdGF0aWMgUGx1Z2lu
VmlldyogY3VycmVudFBsdWdpblZpZXcoKTsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQorICAgICAgICBOUE9iamVjdCogbnBPYmplY3QoKTsKKyNlbmRpZgorICAgICAgICBQYXNz
UmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBiaW5kaW5nSW5zdGFuY2UoKTsKKworICAg
ICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKwor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICAvLyBOUE4gZnVuY3Rpb25z
CisgICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBnZXRVUkwoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOworICAgICAgICBOUEVycm9yIHBvc3RV
UkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxl
biwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAg
ICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKKyAgICAgICAgTlBF
cnJvciBuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3Ry
ZWFtKiogc3RyZWFtKTsKKyAgICAgICAgaW50MzJfdCB3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBp
bnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKTsKKyAgICAgICAgTlBFcnJvciBkZXN0cm95U3RyZWFt
KE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CisjZW5kaWYKKyAgICAgICAgY29u
c3QgY2hhciogdXNlckFnZW50KCk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisg
ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiB1c2VyQWdlbnRTdGF0aWMoKTsKKyNlbmRpZgorICAg
ICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICAgICAgCisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWUoTlBOVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAgc3RhdGljIE5QRXJyb3IgZ2V0
VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAg
TlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAg
ICAgICBOUEVycm9yIGdldFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25z
dCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbik7CisgICAgICAgIE5QRXJy
b3Igc2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbik7CisgICAgICAgIE5QRXJyb3IgZ2V0
QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0
LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hhciogcmVhbG0sIGNo
YXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29yZCwgdWludDMyX3Qq
IHBsZW4pOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCopOworICAgICAgICB2
b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOworI2VuZGlmCisgICAgICAgIHZvaWQgZm9y
Y2VSZWRyYXcoKTsKKyAgICAgICAgdm9pZCBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGJvb2wgc3Rh
dGUpOworICAgICAgICB2b2lkIHBvcFBvcHVwc0VuYWJsZWRTdGF0ZSgpOworCisgICAgICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgYm9v
bCBhcmVQb3B1cHNBbGxvd2VkKCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRKYXZhU2NyaXB0
UGF1c2VkKGJvb2wpOworCisgICAgICAgIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2Vk
KGJvb2wpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW0qKTsK
KyAgICAgICAgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKFBsdWdpblN0cmVhbSogc3RyZWFt
KSB7IGRpc2Nvbm5lY3RTdHJlYW0oc3RyZWFtKTsgfQorCisgICAgICAgIC8vIFdpZGdldCBmdW5j
dGlvbnMKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBmcmFtZVJlY3RzQ2hhbmdlZCgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBj
bGlwUmVjdENoYW5nZWQoKSBvdmVycmlkZTsKKworICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyB1
c2VkIGJ5IHBsdWdpbnMgb24gYWxsIHBsYXRmb3JtcyB0byBvYnRhaW4gYSBjbGlwIHJlY3QgdGhh
dCBpbmNsdWRlcyBjbGlwcyBzZXQgYnkgV2ViQ29yZSwKKyAgICAgICAgLy8gZS5nLiwgaW4gb3Zl
cmZsb3c6YXV0byBzZWN0aW9ucy4gIFRoZSBjbGlwIHJlY3RzIGNvb3JkaW5hdGVzIGFyZSBpbiB0
aGUgY29udGFpbmluZyB3aW5kb3cncyBjb29yZGluYXRlIHNwYWNlLgorICAgICAgICAvLyBUaGlz
IGNsaXAgaW5jbHVkZXMgYW55IGNsaXBzIHRoYXQgdGhlIHdpZGdldCBpdHNlbGYgc2V0cyB1cCBm
b3IgaXRzIGNoaWxkcmVuLgorICAgICAgICBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOworICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0UGFyZW50VmlzaWJsZShib29sKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQbHVnaW5W
aWV3KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIEZyYW1lKiBw
YXJlbnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RnJhbWUuZ2V0KCk7IH0KKworICAg
ICAgICB2b2lkIGZvY3VzUGx1Z2luRWxlbWVudCgpOworCisgICAgICAgIGNvbnN0IFN0cmluZyYg
cGx1Z2luc1BhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbnNQYWdlOyB9CisgICAgICAgIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21pbWVUeXBlOyB9CisgICAg
ICAgIGNvbnN0IFVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKworI2lmIGRlZmlu
ZWQoWFBfTUFDT1NYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgYm9v
bCBwb3BVcENvbnRleHRNZW51KE5QTWVudSopOworI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKSAm
JiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3RhdGljIExSRVNVTFQgQ0FM
TEJBQ0sgUGx1Z2luVmlld1duZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworICAg
ICAgICBMUkVTVUxUIHduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFy
YW0sIExQQVJBTSBsUGFyYW0pOworICAgICAgICBXTkRQUk9DIHBsdWdpblduZFByb2MoKSBjb25z
dCB7IHJldHVybiBtX3BsdWdpblduZFByb2M7IH0KKyNlbmRpZgorCisgICAgICAgIC8vIFVzZWQg
Zm9yIG1hbnVhbCBsb2FkaW5nCisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgICAgIHZv
aWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisKKyAgICAgICAgc3RhdGljIGJvb2wg
aXNDYWxsaW5nUGx1Z2luKCk7CisKKyAgICAgICAgYm9vbCBzdGFydCgpOworCisjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIHN0YXRpYyB2b2lkIGtlZXBBbGl2ZShOUFAp
OworI2VuZGlmCisgICAgICAgIHZvaWQga2VlcEFsaXZlKCk7CisKKyNpZiBQTEFURk9STShYMTEp
CisgICAgICAgIHN0YXRpYyBEaXNwbGF5KiBnZXRQbHVnaW5EaXNwbGF5KEZyYW1lKik7CisgICAg
ICAgIHN0YXRpYyBXaW5kb3cgZ2V0Um9vdFdpbmRvdyhGcmFtZSogcGFyZW50RnJhbWUpOworI2Vu
ZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFt
ZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2UqLCBIVE1MUGx1Z0luRWxlbWVudCosIGNv
bnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1h
bnVhbGx5KTsKKworICAgICAgICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisgICAg
ICAgIGJvb2wgc3RhcnRPckFkZFRvVW5zdGFydGVkTGlzdCgpOworICAgICAgICB2b2lkIGluaXQo
KTsKKyAgICAgICAgYm9vbCBwbGF0Zm9ybVN0YXJ0KCk7CisgICAgICAgIHZvaWQgc3RvcCgpOwor
ICAgICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRD
dXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3Kik7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCisgICAgICAgIE5QRXJyb3IgbG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9v
bCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBo
YW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBs
ZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNl
bmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKKyAgICAgICAgTlBFcnJvciBoYW5k
bGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnVmKTsKKyNlbmRpZgorICAgICAgICBzdGF0aWMgdm9pZCBmcmVlU3RyaW5nQXJyYXko
Y2hhcioqIHN0cmluZ0FycmF5LCBpbnQgbGVuZ3RoKTsKKyAgICAgICAgdm9pZCBzZXRDYWxsaW5n
UGx1Z2luKGJvb2wpIGNvbnN0OworCisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVdpbmRvd2xlc3NQ
bHVnaW5SZWN0KGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFD
YW5TdGFydCgpOworCisjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgICAgIHZvaWQgcGFpbnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgc3RhdGljIEhEQyBXSU5BUEkgaG9v
a2VkQmVnaW5QYWludChIV05ELCBQQUlOVFNUUlVDVCopOworICAgICAgICBzdGF0aWMgQk9PTCBX
SU5BUEkgaG9va2VkRW5kUGFpbnQoSFdORCwgY29uc3QgUEFJTlRTVFJVQ1QqKTsKKyNlbmRpZgor
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIHN0YXRpYyBib29sIHBs
YXRmb3JtR2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBO
UEVycm9yKiByZXN1bHQpOworICAgICAgICBib29sIHBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFi
bGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpOworI2VuZGlmCisKKyAg
ICAgICAgUmVmUHRyPEZyYW1lPiBtX3BhcmVudEZyYW1lOworICAgICAgICBSZWZQdHI8UGx1Z2lu
UGFja2FnZT4gbV9wbHVnaW47CisgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50KiBtX2VsZW1lbnQ7
CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7CisgICAgICAgIFVSTCBtX3VybDsKKyAgICAgICAg
UGx1Z2luU3RhdHVzIG1fc3RhdHVzOworICAgICAgICBWZWN0b3I8SW50UmVjdD4gbV9pbnZhbGlk
UmVjdHM7CisKKyAgICAgICAgdm9pZCBwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0Kik7Cisg
ICAgICAgIHZvaWQgc2NoZWR1bGVSZXF1ZXN0KHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0
Pik7CisgICAgICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoKTsKKyAgICAgICAgdm9pZCBpbnZh
bGlkYXRlVGltZXJGaXJlZCgpOworICAgICAgICBUaW1lciBtX3JlcXVlc3RUaW1lcjsKKyAgICAg
ICAgVGltZXIgbV9pbnZhbGlkYXRlVGltZXI7CisKKyAgICAgICAgdm9pZCBwb3BQb3B1cHNTdGF0
ZVRpbWVyRmlyZWQoKTsKKyAgICAgICAgVGltZXIgbV9wb3BQb3B1cHNTdGF0ZVRpbWVyOworCisg
ICAgICAgIHZvaWQgbGlmZVN1cHBvcnRUaW1lckZpcmVkKCk7CisgICAgICAgIFRpbWVyIG1fbGlm
ZVN1cHBvcnRUaW1lcjsKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAg
ICBib29sIGRpc3BhdGNoTlBFdmVudChOUEV2ZW50Jik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFhQ
X01BQ09TWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGludDE2X3Qg
ZGlzcGF0Y2hOUENvY29hRXZlbnQoTlBDb2NvYUV2ZW50Jik7CisgICAgICAgIGJvb2wgbV91cGRh
dGVkQ29jb2FUZXh0SW5wdXRSZXF1ZXN0ZWQ7CisgICAgICAgIGJvb2wgbV9rZXlEb3duU2VudDsK
KyAgICAgICAgdWludDE2X3QgbV9kaXNyZWdhcmRLZXlVcENvdW50ZXI7CisjZW5kaWYKKworI2lm
IGRlZmluZWQoWFBfTUFDT1NYKQorICAgICAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoV2hlZWxF
dmVudCopOworI2VuZGlmCisgICAgICAgIHZvaWQgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7CisgICAg
ICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKKyNpZiBk
ZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICB2
b2lkIGhhbmRsZUZvY3VzSW5FdmVudCgpOworICAgICAgICB2b2lkIGhhbmRsZUZvY3VzT3V0RXZl
bnQoKTsKKyNlbmRpZgorCisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgdm9pZCBwYWludEludG9U
cmFuc2Zvcm1lZENvbnRleHQoSERDKTsKKyAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gc25hcHNo
b3QoKTsKKyNlbmRpZgorCisgICAgICAgIGludCBtX21vZGU7CisgICAgICAgIGludCBtX3BhcmFt
Q291bnQ7CisgICAgICAgIGNoYXIqKiBtX3BhcmFtTmFtZXM7CisgICAgICAgIGNoYXIqKiBtX3Bh
cmFtVmFsdWVzOworICAgICAgICBTdHJpbmcgbV9wbHVnaW5zUGFnZTsKKworICAgICAgICBTdHJp
bmcgbV9taW1lVHlwZTsKKyAgICAgICAgV1RGOjpDU3RyaW5nIG1fdXNlckFnZW50OworCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QUCBtX2luc3RhbmNlOworICAg
ICAgICBOUFBfdCBtX2luc3RhbmNlU3RydWN0OworICAgICAgICBOUFdpbmRvdyBtX25wV2luZG93
OworI2VuZGlmCisKKyAgICAgICAgVmVjdG9yPGJvb2wsIDQ+IG1fcG9wdXBTdGF0ZVN0YWNrOwor
CisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBtX3N0cmVhbXM7CisgICAg
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4+IG1fcmVxdWVzdHM7CisK
KyAgICAgICAgYm9vbCBtX2lzV2luZG93ZWQ7CisgICAgICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50
OworICAgICAgICBib29sIG1faGF2ZUluaXRpYWxpemVkOworICAgICAgICBib29sIG1faXNXYWl0
aW5nVG9TdGFydDsKKworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAgICAgYm9vbCBtX25lZWRz
WEVtYmVkOworI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICAgICAgT3duUHRyPFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4+IG1fbWVz
c2FnZVRocm90dGxlcjsKKyAgICAgICAgV05EUFJPQyBtX3BsdWdpblduZFByb2M7CisgICAgICAg
IHVuc2lnbmVkIG1fbGFzdE1lc3NhZ2U7CisgICAgICAgIGJvb2wgbV9pc0NhbGxpbmdQbHVnaW5X
bmRQcm9jOworICAgICAgICBIREMgbV93bVByaW50SERDOworICAgICAgICBib29sIG1faGF2ZVVw
ZGF0ZWRQbHVnaW5XaWRnZXQ7CisjZW5kaWYKKworI2lmIChQTEFURk9STShHVEspICYmIE9TKFdJ
TkRPV1MpKSB8fCBQTEFURk9STShFRkwpCisgICAgICAgIC8vIE9uIE1hYyBPU1ggYW5kIFF0L1dp
bmRvd3MgdGhlIHBsdWdpbiBkb2VzIG5vdCBoYXZlIGl0cyBvd24gbmF0aXZlIHdpZGdldCwKKyAg
ICAgICAgLy8gYnV0IGlzIHVzaW5nIHRoZSBjb250YWluaW5nIHdpbmRvdyBhcyBpdHMgcmVmZXJl
bmNlIGZvciBwb3NpdGlvbmluZy9wYWludGluZy4KKyAgICAgICAgUGxhdGZvcm1QbHVnaW5XaWRn
ZXQgbV93aW5kb3c7CitwdWJsaWM6CisgICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3c7IH0KKyAgICAgICAgdm9p
ZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBsdWdpbldpZGdldCB3aWRnZXQpIHsg
bV93aW5kb3cgPSB3aWRnZXQ7IH0KKyNlbHNlCitwdWJsaWM6CisgICAgICAgIHZvaWQgc2V0UGxh
dGZvcm1QbHVnaW5XaWRnZXQoUGxhdGZvcm1QbHVnaW5XaWRnZXQgd2lkZ2V0KSB7IHNldFBsYXRm
b3JtV2lkZ2V0KHdpZGdldCk7IH0KKyAgICAgICAgUGxhdGZvcm1QbHVnaW5XaWRnZXQgcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSBjb25zdCB7IHJldHVybiBwbGF0Zm9ybVdpZGdldCgpOyB9CisjZW5k
aWYKKworcHJpdmF0ZToKKworI2lmIGRlZmluZWQoWFBfVU5JWCkgfHwgUExBVEZPUk0oR1RLKQor
ICAgICAgICB2b2lkIHNldE5QV2luZG93SWZOZWVkZWQoKTsKKyNlbGlmIGRlZmluZWQoWFBfTUFD
T1NYKQorICAgICAgICBOUF9DR0NvbnRleHQgbV9ucENnQ29udGV4dDsKKyAgICAgICAgQ0dDb250
ZXh0UmVmIG1fY29udGV4dFJlZjsKKworICAgICAgICB2b2lkIHNldE5QV2luZG93SWZOZWVkZWQo
KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICAgICAgYm9vbCBtX2hhc1BlbmRpbmdHZW9tZXRyeUNoYW5nZTsKKyAgICAg
ICAgUGl4bWFwIG1fZHJhd2FibGU7CisgICAgICAgIFZpc3VhbCogbV92aXN1YWw7CisgICAgICAg
IENvbG9ybWFwIG1fY29sb3JtYXA7CisgICAgICAgIERpc3BsYXkqIG1fcGx1Z2luRGlzcGxheTsK
KworICAgICAgICB2b2lkIGluaXRYRXZlbnQoWEV2ZW50KiBldmVudCk7CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICAgICAgc3RhdGljIGdib29sZWFuIHBsdWdSZW1vdmVkQ2FsbGJh
Y2soR3RrU29ja2V0KiwgUGx1Z2luVmlldyopOworICAgICAgICBzdGF0aWMgdm9pZCBwbHVnQWRk
ZWRDYWxsYmFjayhHdGtTb2NrZXQqLCBQbHVnaW5WaWV3Kik7CisgICAgICAgIHZvaWQgdXBkYXRl
V2lkZ2V0QWxsb2NhdGlvbkFuZENsaXAoKTsKKyAgICAgICAgYm9vbCBtX3BsdWdBZGRlZDsKKyAg
ICAgICAgSW50UmVjdCBtX2RlbGF5ZWRBbGxvY2F0aW9uOworI2VuZGlmCisKKyAgICAgICAgSW50
UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFwcGx5IHRvIGEgd2luZG93ZWQg
cGx1Zy1pbgorICAgICAgICBJbnRSZWN0IG1fd2luZG93UmVjdDsgLy8gT3VyIHdpbmRvdyByZWN0
LgorCisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5T
dHJlYW0+IG1fbWFudWFsU3RyZWFtOworCisgICAgICAgIGJvb2wgbV9pc0phdmFTY3JpcHRQYXVz
ZWQ7CisKKyAgICAgICAgYm9vbCBtX2hhdmVDYWxsZWRTZXRXaW5kb3c7CisKKyAgICAgICAgc3Rh
dGljIFBsdWdpblZpZXcqIHNfY3VycmVudFBsdWdpblZpZXc7CisgICAgfTsKKworaW5saW5lIFBs
dWdpblZpZXcqIHRvUGx1Z2luVmlldyhXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBBU1NFUlQoIXdp
ZGdldCB8fCB3aWRnZXQtPmlzUGx1Z2luVmlldygpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UGx1Z2luVmlldyo+KHdpZGdldCk7Cit9CisKK2lubGluZSBjb25zdCBQbHVnaW5WaWV3KiB0b1Bs
dWdpblZpZXcoY29uc3QgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgQVNTRVJUKCF3aWRnZXQgfHwg
d2lkZ2V0LT5pc1BsdWdpblZpZXcoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFBs
dWdpblZpZXcqPih3aWRnZXQpOworfQorCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25lIGRvaW5n
IGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUGx1Z2luVmlldyhjb25zdCBQbHVnaW5WaWV3
Kik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwIGIvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5WaWV3V2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOTIxMmJhMjQ5ZjQ3N2Uw
MzY5MThlYzI2MTMyOGU3NmY3ZGY5Zjg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3V2luLmNwcApAQCAtMCwwICsxLDEwMTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3
LmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIK
KyNpbmNsdWRlICJCcmlkZ2VKU0MuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJD
aHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
KyNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVn
SW5FbGVtZW50LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIkltYWdlLmgi
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNp
bmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTG9jYWxXaW5kb3dzQ29udGV4dC5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50Lmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2lu
Y2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNs
dWRlICJQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbi5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJS
ZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYkNvcmVJ
bnN0YW5jZUhhbmRsZS5oIgorI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJucHJ1
bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNDSlNWYWx1ZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8
d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgorCisjaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPGdkay9nZGt3aW4zMi5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEhXTkQgd2luZG93SGFuZGxlRm9y
UGFnZUNsaWVudChQbGF0Zm9ybVBhZ2VDbGllbnQgY2xpZW50KQoreworI2lmIFBMQVRGT1JNKEdU
SykKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKEdka1dpbmRv
dyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KGNsaWVudCkpCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIV05EPihHREtfV0lORE9XX0hXTkQod2luZG93KSk7CisgICAgcmV0dXJu
IDA7CisjZWxzZQorICAgIHJldHVybiBjbGllbnQ7CisjZW5kaWYKK30KKwordXNpbmcgSlNDOjpF
eGVjU3RhdGU7Cit1c2luZyBKU0M6OkpTTG9jazsKK3VzaW5nIEpTQzo6SlNPYmplY3Q7CisKK3Vz
aW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2NvbnN0IExQQ1dTVFIga1dlYlBs
dWdpblZpZXdkb3dDbGFzc05hbWUgPSBMIldlYlBsdWdpblZpZXciOworY29uc3QgTFBDV1NUUiBr
V2ViUGx1Z2luVmlld1Byb3BlcnR5ID0gTCJXZWJQbHVnaW5WaWV3UHJvcGVydHkiOworCisvLyBU
aGUgY29kZSB1c2VkIHRvIGhvb2sgQmVnaW5QYWludC9FbmRQYWludCBvcmlnaW5hbGx5IGNhbWUg
ZnJvbQorLy8gPGh0dHA6Ly93d3cuZmVuZ3l1YW4uY29tL2FydGljbGUvd21wcmludC5odG1sPi4K
Ky8vIENvcHlyaWdodCAoQykgMjAwMCBieSBGZW5nIFl1YW4gKHd3dy5mZW5neXVhbi5jb20pLgor
CitzdGF0aWMgdW5zaWduZWQgYmVnaW5QYWludFN5c0NhbGw7CitzdGF0aWMgQllURSogYmVnaW5Q
YWludDsKKworc3RhdGljIHVuc2lnbmVkIGVuZFBhaW50U3lzQ2FsbDsKK3N0YXRpYyBCWVRFKiBl
bmRQYWludDsKKwordHlwZWRlZiBIREMgKFdJTkFQSSAqUHRyQmVnaW5QYWludCkoSFdORCwgUEFJ
TlRTVFJVQ1QqKTsKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICpQdHJFbmRQYWludCkoSFdORCwgY29u
c3QgUEFJTlRTVFJVQ1QqKTsKKworI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpICYmIENP
TVBJTEVSKE1TVkMpCitleHRlcm4gIkMiIEhEQyBfX3N0ZGNhbGwgX0hCZWdpblBhaW50KEhXTkQg
aFduZCwgTFBQQUlOVFNUUlVDVCBscFBhaW50KTsKK2V4dGVybiAiQyIgQk9PTCBfX3N0ZGNhbGwg
X0hFbmRQYWludChIV05EIGhXbmQsIGNvbnN0IFBBSU5UU1RSVUNUKiBscFBhaW50KTsKKyNlbmRp
ZgorCitIREMgV0lOQVBJIFBsdWdpblZpZXc6Omhvb2tlZEJlZ2luUGFpbnQoSFdORCBoV25kLCBQ
QUlOVFNUUlVDVCogbHBQYWludCkKK3sKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVp
bnRlcnByZXRfY2FzdDxQbHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1By
b3BlcnR5KSk7CisgICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+bV93bVByaW50SERD
KSB7CisgICAgICAgIC8vIFdlJ3JlIHNlY3JldGx5IGhhbmRsaW5nIFdNX1BSSU5UQ0xJRU5ULCBz
byBzZXQgdXAgdGhlIFBBSU5UU1RSVUNUIHNvCisgICAgICAgIC8vIHRoYXQgdGhlIHBsdWdpbiB3
aWxsIHBhaW50IGludG8gdGhlIEhEQyB3ZSBwcm92aWRlLgorICAgICAgICBtZW1zZXQobHBQYWlu
dCwgMCwgc2l6ZW9mKFBBSU5UU1RSVUNUKSk7CisgICAgICAgIGxwUGFpbnQtPmhkYyA9IHBsdWdp
blZpZXctPm1fd21QcmludEhEQzsKKyAgICAgICAgR2V0Q2xpZW50UmVjdChoV25kLCAmbHBQYWlu
dC0+cmNQYWludCk7CisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3LT5tX3dtUHJpbnRIREM7Cisg
ICAgfQorCisjaWYgQ09NUElMRVIoR0NDKQorICAgIEhEQyByZXN1bHQ7CisgICAgYXNtICgicHVz
aCAgICAlMlxuIgorICAgICAgICAgInB1c2ggICAgJTNcbiIKKyAgICAgICAgICJjYWxsICAgICol
NFxuIgorICAgICAgICAgOiAiPWEiIChyZXN1bHQpCisgICAgICAgICA6ICJhIiAoYmVnaW5QYWlu
dFN5c0NhbGwpLCAiZyIgKGxwUGFpbnQpLCAiZyIgKGhXbmQpLCAibSIgKGJlZ2luUGFpbnQpCisg
ICAgICAgICA6ICJtZW1vcnkiCisgICAgICAgICk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbGlm
IGRlZmluZWQoX01fSVg4NikKKyAgICAvLyBDYWxsIHRocm91Z2ggdG8gdGhlIG9yaWdpbmFsIEJl
Z2luUGFpbnQuCisgICAgX19hc20gICBtb3YgICAgIGVheCwgYmVnaW5QYWludFN5c0NhbGwKKyAg
ICBfX2FzbSAgIHB1c2ggICAgbHBQYWludAorICAgIF9fYXNtICAgcHVzaCAgICBoV25kCisgICAg
X19hc20gICBjYWxsICAgIGJlZ2luUGFpbnQKKyNlbHNlCisgICAgcmV0dXJuIF9IQmVnaW5QYWlu
dChoV25kLCBscFBhaW50KTsKKyNlbmRpZgorfQorCitCT09MIFdJTkFQSSBQbHVnaW5WaWV3Ojpo
b29rZWRFbmRQYWludChIV05EIGhXbmQsIGNvbnN0IFBBSU5UU1RSVUNUKiBscFBhaW50KQorewor
ICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcq
PihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKKyAgICBpZiAocGx1Z2lu
VmlldyAmJiBwbHVnaW5WaWV3LT5tX3dtUHJpbnRIREMpIHsKKyAgICAgICAgLy8gV2UncmUgc2Vj
cmV0bHkgaGFuZGxpbmcgV01fUFJJTlRDTElFTlQsIHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55
CisgICAgICAgIC8vIGNsZWFudXAuCisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworI2lm
IENPTVBJTEVSKEdDQykKKyAgICBCT09MIHJlc3VsdDsKKyAgICBhc20gKCJwdXNoICAgJTJcbiIK
KyAgICAgICAgICJwdXNoICAgJTNcbiIKKyAgICAgICAgICJjYWxsICAgKiU0XG4iCisgICAgICAg
ICA6ICI9YSIgKHJlc3VsdCkKKyAgICAgICAgIDogImEiIChlbmRQYWludFN5c0NhbGwpLCAiZyIg
KGxwUGFpbnQpLCAiZyIgKGhXbmQpLCAibSIgKGVuZFBhaW50KQorICAgICAgICApOworICAgIHJl
dHVybiByZXN1bHQ7CisjZWxpZiBkZWZpbmVkIChfTV9JWDg2KQorICAgIC8vIENhbGwgdGhyb3Vn
aCB0byB0aGUgb3JpZ2luYWwgRW5kUGFpbnQuCisgICAgX19hc20gICBtb3YgICAgIGVheCwgZW5k
UGFpbnRTeXNDYWxsCisgICAgX19hc20gICBwdXNoICAgIGxwUGFpbnQKKyAgICBfX2FzbSAgIHB1
c2ggICAgaFduZAorICAgIF9fYXNtICAgY2FsbCAgICBlbmRQYWludAorI2Vsc2UKKyAgICByZXR1
cm4gX0hFbmRQYWludChoV25kLCBscFBhaW50KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBo
b29rKGNvbnN0IGNoYXIqIG1vZHVsZSwgY29uc3QgY2hhciogcHJvYywgdW5zaWduZWQmIHN5c0Nh
bGxJRCwgQllURSomIHBQcm9jLCBjb25zdCB2b2lkKiBwTmV3UHJvYykKK3sKKyAgICAvLyBTZWUg
PGh0dHA6Ly93d3cuZmVuZ3l1YW4uY29tL2FydGljbGUvd21wcmludC5odG1sPiBmb3IgYW4gZXhw
bGFuYXRpb24gb2YKKyAgICAvLyBob3cgdGhpcyBmdW5jdGlvbiB3b3Jrcy4KKworICAgIEhJTlNU
QU5DRSBoTW9kID0gR2V0TW9kdWxlSGFuZGxlQShtb2R1bGUpOworCisgICAgcFByb2MgPSByZWlu
dGVycHJldF9jYXN0PEJZVEUqPihyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oR2V0UHJvY0Fk
ZHJlc3MoaE1vZCwgcHJvYykpKTsKKworI2lmIENPTVBJTEVSKEdDQykgfHwgZGVmaW5lZChfTV9J
WDg2KQorICAgIGlmIChwUHJvY1swXSAhPSAweEI4KQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIGJlIHJlYWRpbmcgdGhlIGJ5dGVzIG9uZS1ieS1vbmUgaW5zdGVh
ZCBvZiBkb2luZyBhbgorICAgIC8vIHVuYWxpZ25lZCByZWFkPworICAgIHN5c0NhbGxJRCA9ICpy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ocFByb2MgKyAxKTsKKworICAgIERXT1JEIGZsT2xk
UHJvdGVjdDsKKyAgICBpZiAoIVZpcnR1YWxQcm90ZWN0KHBQcm9jLCA1LCBQQUdFX0VYRUNVVEVf
UkVBRFdSSVRFLCAmZmxPbGRQcm90ZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcFByb2Nb
MF0gPSAweEU5OworICAgICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ocFByb2MgKyAxKSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBOZXdQcm9jKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHBQcm9jICsgNSk7CisKKyAgICBwUHJvYyArPSA1OworI2Vsc2UKKyAgICAvKiBE
aXNhc3NlbWJseSBvZiBCZWdpblBhaW50KCkKKyAgICAwMDAwMDAwMDc3OUZDNUIwIDRDIDhCIEQx
ICAgICAgICAgbW92ICAgICAgICAgcjEwLHJjeAorICAgIDAwMDAwMDAwNzc5RkM1QjMgQjggMTcg
MTAgMDAgMDAgICBtb3YgICAgICAgICBlYXgsMTAxN2gKKyAgICAwMDAwMDAwMDc3OUZDNUI4IDBG
IDA1ICAgICAgICAgICAgc3lzY2FsbAorICAgIDAwMDAwMDAwNzc5RkM1QkEgQzMgICAgICAgICAg
ICAgICByZXQKKyAgICAwMDAwMDAwMDc3OUZDNUJCIDkwICAgICAgICAgICAgICAgbm9wCisgICAg
MDAwMDAwMDA3NzlGQzVCQyA5MCAgICAgICAgICAgICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1
QkQgOTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUJFIDkwICAgICAgICAg
ICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVCRiA5MCAgICAgICAgICAgICAgIG5vcAorICAg
IDAwMDAwMDAwNzc5RkM1QzAgOTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZD
NUMxIDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVDMiA5MCAgICAgICAg
ICAgICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QzMgOTAgICAgICAgICAgICAgICBub3AKKyAg
ICAqLworICAgIC8vIENoZWNrIGZvciB0aGUgc2lnbmF0dXJlIGFzIGluIHRoZSBhYm92ZSBkaXNh
c3NlbWJseQorICAgIERXT1JEIGd1YXJkID0gMHhCOEQxOEI0QzsKKyAgICBpZiAoKnJlaW50ZXJw
cmV0X2Nhc3Q8RFdPUkQqPihwUHJvYykgIT0gZ3VhcmQpCisgICAgICAgIHJldHVybjsKKworICAg
IERXT1JEIGZsT2xkUHJvdGVjdDsKKyAgICBWaXJ0dWFsUHJvdGVjdChwUHJvYywgMTIsIFBBR0Vf
RVhFQ1VURV9SRUFEV1JJVEUsICYgZmxPbGRQcm90ZWN0KTsKKyAgICBwUHJvY1swXSA9IDB4NDg7
ICAgIC8vIG1vdiByYXgsIHRoaXMKKyAgICBwUHJvY1sxXSA9IDB4Yjg7CisgICAgKihfX2ludDY0
KikocFByb2MrMikgPSAoX19pbnQ2NClwTmV3UHJvYzsKKyAgICBwUHJvY1sxMF0gPSAweGZmOyAg
IC8vIGptcCByYXgKKyAgICBwUHJvY1sxMV0gPSAweGUwOworI2VuZGlmCit9CisKK3N0YXRpYyB2
b2lkIHNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyhIREMgKFdJTkFQSSpob29rZWRCZWdpblBh
aW50KShIV05ELCBQQUlOVFNUUlVDVCopLCBCT09MIChXSU5BUEkqaG9va2VkRW5kUGFpbnQpKEhX
TkQsIGNvbnN0IFBBSU5UU1RSVUNUKikpCit7CisgICAgc3RhdGljIGJvb2wgaGF2ZUhvb2tlZCA9
IGZhbHNlOworICAgIGlmIChoYXZlSG9va2VkKQorICAgICAgICByZXR1cm47CisgICAgaGF2ZUhv
b2tlZCA9IHRydWU7CisKKyAgICAvLyBNb3N0IChhbGw/KSB3aW5kb3dlZCBwbHVnaW5zIGRvbid0
IHNlZW0gdG8gcmVzcG9uZCB0byBXTV9QUklOVENMSUVOVCwgc28KKyAgICAvLyB3ZSBob29rIGlu
dG8gQmVnaW5QYWludC9FbmRQYWludCB0byBhbGxvdyB0aGVpciBub3JtYWwgV01fUEFJTlQgaGFu
ZGxpbmcKKyAgICAvLyB0byBkcmF3IGludG8gYSBnaXZlbiBIREMuIE5vdGUgdGhhdCB0aGlzIGhv
b2tpbmcgYWZmZWN0cyB0aGUgZW50aXJlCisgICAgLy8gcHJvY2Vzcy4KKyAgICBob29rKCJ1c2Vy
MzIuZGxsIiwgIkJlZ2luUGFpbnQiLCBiZWdpblBhaW50U3lzQ2FsbCwgYmVnaW5QYWludCwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Piho
b29rZWRCZWdpblBhaW50KSkpOworICAgIGhvb2soInVzZXIzMi5kbGwiLCAiRW5kUGFpbnQiLCBl
bmRQYWludFN5c0NhbGwsIGVuZFBhaW50LCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4o
cmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGhvb2tlZEVuZFBhaW50KSkpOworCit9CisKK3N0
YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygpCit7CisgICAgc3RhdGljIGJvb2wgaGF2ZVJl
Z2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOworICAgIGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRv
d0NsYXNzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGhhdmVSZWdpc3RlcmVkV2luZG93
Q2xhc3MgPSB0cnVlOworCisjaWYgUExBVEZPUk0oR1RLKQorICAgIFdlYkNvcmU6OnNldEluc3Rh
bmNlSGFuZGxlKChISU5TVEFOQ0UpKEdldE1vZHVsZUhhbmRsZSgwKSkpOworI2VuZGlmCisKKyAg
ICBBU1NFUlQoV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSk7CisKKyAgICBXTkRDTEFTU0VYIHdj
ZXg7CisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CisgICAgd2NleC5oSWNv
blNtICAgICAgICA9IDA7CisgICAgd2NleC5zdHlsZSAgICAgICAgICA9IENTX0RCTENMS1M7Cisg
ICAgd2NleC5scGZuV25kUHJvYyAgICA9IERlZldpbmRvd1Byb2M7CisgICAgd2NleC5jYkNsc0V4
dHJhICAgICA9IDA7CisgICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7CisgICAgd2NleC5oSW5z
dGFuY2UgICAgICA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCk7CisgICAgd2NleC5oSWNvbiAg
ICAgICAgICA9IDA7CisgICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURD
X0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQgID0gKEhCUlVTSClDT0xPUl9XSU5ET1c7
CisgICAgd2NleC5scHN6TWVudU5hbWUgICA9IDA7CisgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9
IGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lOworCisgICAgcmV0dXJuICEhUmVnaXN0ZXJDbGFz
c0V4KCZ3Y2V4KTsKK30KKworTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3OjpQbHVnaW5WaWV3
V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKK3sKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxQ
bHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7CisKKyAg
ICByZXR1cm4gcGx1Z2luVmlldy0+d25kUHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJh
bSk7Cit9CisKK3N0YXRpYyBib29sIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShVSU5UIG1l
c3NhZ2UpCit7CisgICAgc3dpdGNoIChtZXNzYWdlKSB7CisgICAgICAgIGNhc2UgV01fTEJVVFRP
TlVQOgorICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9SQlVUVE9O
VVA6CisgICAgICAgIGNhc2UgV01fS0VZVVA6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0
YXRpYyBpbmxpbmUgSW50UG9pbnQgY29udGVudHNUb05hdGl2ZVdpbmRvdyhGcmFtZVZpZXcqIHZp
ZXcsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNU
b1dpbmRvdyhwb2ludCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50UmVjdCBjb250ZW50c1RvTmF0
aXZlV2luZG93KEZyYW1lVmlldyogdmlldywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBy
ZXR1cm4gdmlldy0+Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKK30KKworTFJFU1VMVAorUGx1Z2lu
Vmlldzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSkKK3sKKyAgICAvLyA8cmRhcjovLzU3MTExMzY+IFNvbWV0aW1lcyBGbGFzaCB3
aWxsIGNhbGwgU2V0Q2FwdHVyZSBiZWZvcmUgY3JlYXRpbmcKKyAgICAvLyBhIGZ1bGwtc2NyZWVu
IHdpbmRvdyBhbmQgd2lsbCBub3QgcmVsZWFzZSBpdCwgd2hpY2ggY2F1c2VzIHRoZQorICAgIC8v
IGZ1bGwtc2NyZWVuIHdpbmRvdyB0byBuZXZlciByZWNlaXZlIG1vdXNlIGV2ZW50cy4gV2Ugc2V0
L3JlbGVhc2UgY2FwdHVyZQorICAgIC8vIG9uIG1vdXNlIGRvd24vdXAgYmVmb3JlIHNlbmRpbmcg
dGhlIGV2ZW50IHRvIHRoZSBwbHVnLWluIHRvIHByZXZlbnQgdGhhdC4KKyAgICBzd2l0Y2ggKG1l
c3NhZ2UpIHsKKyAgICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKKyAgICAgICAgY2FzZSBXTV9N
QlVUVE9ORE9XTjoKKyAgICAgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKKyAgICAgICAgICAgIDo6
U2V0Q2FwdHVyZShoV25kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdNX0xC
VVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9NQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01fUkJV
VFRPTlVQOgorICAgICAgICAgICAgOjpSZWxlYXNlQ2FwdHVyZSgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UgPT0gbV9sYXN0TWVzc2FnZSAmJgorICAgICAg
ICBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NG
b3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KSAmJiAKKyAgICAgICAgbV9pc0NhbGxpbmdQbHVnaW5X
bmRQcm9jKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmIChtZXNzYWdlID09IFdNX1VTRVIg
KyAxICYmCisgICAgICAgIG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1Ro
cm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKSkgeworICAgICAgICBpZiAoIW1fbWVzc2FnZVRo
cm90dGxlcikKKyAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlciA9IGFkb3B0UHRyKG5ldyBQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKHRoaXMpKTsKKworICAgICAgICBtX21lc3NhZ2VUaHJv
dHRsZXItPmFwcGVuZE1lc3NhZ2UoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtX2xhc3RNZXNzYWdlID0gbWVzc2FnZTsKKyAg
ICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MgPSB0cnVlOworCisgICAgLy8gSWYgdGhlIHBsdWct
aW4gZG9lc24ndCBleHBsaWNpdGx5IHN1cHBvcnQgY2hhbmdpbmcgdGhlIHBvcC11cCBzdGF0ZSwg
d2UgZW5hYmxlCisgICAgLy8gcG9wdXBzIGZvciBhbGwgdXNlciBnZXN0dXJlcy4KKyAgICAvLyBO
b3RlIHRoYXQgd2UgbmVlZCB0byBwb3AgdGhlIHN0YXRlIGluIGEgdGltZXIsIGJlY2F1c2UgdGhl
IEZsYXNoIHBsdWctaW4gCisgICAgLy8gcG9wcyB1cCB3aW5kb3dzIGluIHJlc3BvbnNlIHRvIGEg
cG9zdGVkIG1lc3NhZ2UuCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT52ZXJzaW9u
IDwgTlBWRVJTX0hBU19QT1BVUFNfRU5BQkxFRF9TVEFURSAmJgorICAgICAgICBpc1dpbmRvd3NN
ZXNzYWdlVXNlckdlc3R1cmUobWVzc2FnZSkgJiYgIW1fcG9wUG9wdXBzU3RhdGVUaW1lci5pc0Fj
dGl2ZSgpKSB7CisKKyAgICAgICAgcHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSh0cnVlKTsKKworICAg
ICAgICBtX3BvcFBvcHVwc1N0YXRlVGltZXIuc3RhcnRPbmVTaG90KDApOworICAgIH0KKworICAg
IGlmIChtZXNzYWdlID09IFdNX1BSSU5UQ0xJRU5UKSB7CisgICAgICAgIC8vIE1vc3QgKGFsbD8p
IHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3QgcmVzcG9uZCB0byBXTV9QUklOVENMSUVOVCwgc28gd2UK
KyAgICAgICAgLy8gY2hhbmdlIHRoZSBtZXNzYWdlIHRvIFdNX1BBSU5UIGFuZCByZWx5IG9uIG91
ciBob29rZWQgdmVyc2lvbnMgb2YKKyAgICAgICAgLy8gQmVnaW5QYWludC9FbmRQYWludCB0byBt
YWtlIHRoZSBwbHVnaW4gZHJhdyBpbnRvIHRoZSBnaXZlbiBIREMuCisgICAgICAgIG1lc3NhZ2Ug
PSBXTV9QQUlOVDsKKyAgICAgICAgbV93bVByaW50SERDID0gcmVpbnRlcnByZXRfY2FzdDxIREM+
KHdQYXJhbSk7CisgICAgfQorCisgICAgLy8gQ2FsbCB0aGUgcGx1Zy1pbidzIHdpbmRvdyBwcm9j
LgorICAgIExSRVNVTFQgcmVzdWx0ID0gOjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblduZFByb2Ms
IGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKworICAgIG1fd21QcmludEhEQyA9IDA7
CisKKyAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MgPSBmYWxzZTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKK3sKKyAg
ICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZVZpZXcmIGZyYW1l
VmlldyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xk
V2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9j
bGlwUmVjdDsKKworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LmNvbnRlbnRz
VG9XaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSksIGZyYW1lUmVjdCgpLnNpemUoKSk7Cisg
ICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3ZlKC1t
X3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CisKKyAgICBpZiAocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSAmJiAoIW1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQgfHwgbV93aW5kb3dS
ZWN0ICE9IG9sZFdpbmRvd1JlY3QgfHwgbV9jbGlwUmVjdCAhPSBvbGRDbGlwUmVjdCkpIHsKKwor
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworCisgICAgICAgIC8vIFRvIHByZXZlbnQg
Zmxhc2hlcyB3aGlsZSBzY3JvbGxpbmcsIHdlIGRpc2FibGUgZHJhd2luZyBkdXJpbmcgdGhlIHdp
bmRvdworICAgICAgICAvLyB1cGRhdGUgcHJvY2VzcyBieSBjbGlwcGluZyB0aGUgd2luZG93IHRv
IHRoZSB6ZXJvIHJlY3QuCisKKyAgICAgICAgYm9vbCBjbGlwVG9aZXJvUmVjdCA9ICFtX3BsdWdp
bi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVuU2Ny
b2xsaW5nKTsKKworICAgICAgICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsKKyAgICAgICAgICAgIGF1
dG8gcmduID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDApKTsKKyAg
ICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFr
KCksIEZBTFNFKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gcmduID0gYWRv
cHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0Lnko
KSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKSk7CisgICAgICAgICAgICA6
OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24ubGVhaygpLCBUUlVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCB8fCBt
X3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCkKKyAgICAgICAgICAgIDo6TW92ZVdpbmRvdyhw
bGF0Zm9ybVBsdWdpbldpZGdldCgpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgp
LCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLCBUUlVFKTsKKwor
ICAgICAgICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsKKyAgICAgICAgICAgIGF1dG8gcmduID0gYWRv
cHRHRElPYmplY3QoOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0Lnko
KSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKSk7CisgICAgICAgICAgICA6
OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24ubGVhaygpLCBUUlVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworCisgICAgICAg
IG1faGF2ZVVwZGF0ZWRQbHVnaW5XaWRnZXQgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBQbHVn
aW5WaWV3OjpzZXRGb2N1cyhib29sIGZvY3VzZWQpCit7CisgICAgaWYgKGZvY3VzZWQgJiYgcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgU2V0Rm9jdXMocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSk7CisKKyAgICBXaWRnZXQ6OnNldEZvY3VzKGZvY3VzZWQpOworCisgICAgaWYgKCFtX3Bs
dWdpbiB8fCBtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIE5QRXZlbnQgbnBF
dmVudDsKKworICAgIG5wRXZlbnQuZXZlbnQgPSBmb2N1c2VkID8gV01fU0VURk9DVVMgOiBXTV9L
SUxMRk9DVVM7CisgICAgbnBFdmVudC53UGFyYW0gPSAwOworICAgIG5wRXZlbnQubFBhcmFtID0g
MDsKKworICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpzaG93KCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZSh0cnVlKTsKKworICAgIGlmIChpc1BhcmVu
dFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBTaG93V2luZG93
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX1NIT1dOQSk7CisKKyAgICBXaWRnZXQ6OnNob3co
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkKK3sKKyAgICBzZXRTZWxmVmlzaWJsZShm
YWxzZSk7CisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSkKKyAgICAgICAgU2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19ISURF
KTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNo
TlBFdmVudChOUEV2ZW50JiBucEV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmV2ZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGJvb2wgc2hvdWxkUG9w
ID0gZmFsc2U7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnZlcnNpb24gPCBO
UFZFUlNfSEFTX1BPUFVQU19FTkFCTEVEX1NUQVRFICYmIGlzV2luZG93c01lc3NhZ2VVc2VyR2Vz
dHVyZShucEV2ZW50LmV2ZW50KSkgeworICAgICAgICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRy
dWUpOworICAgICAgICBzaG91bGRQb3AgPSB0cnVlOworICAgIH0KKworICAgIEpTQzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7
CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBib29sIGFjY2VwdGVkID0gIW1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisKKyAgICBpZiAoc2hvdWxkUG9wKSAKKyAgICAgICAgcG9w
UG9wdXBzRW5hYmxlZFN0YXRlKCk7CisKKyAgICByZXR1cm4gYWNjZXB0ZWQ7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6cGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KEhEQyBoZGMpCit7CisgICAg
aWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBTZW5kTWVzc2FnZShwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCBXTV9QUklOVENMSUVOVCwgcmVpbnRlcnByZXRfY2FzdDxXUEFSQU0+KGhkYyksIFBS
Rl9DTElFTlQgfCBQUkZfQ0hJTERSRU4gfCBQUkZfT1dORUQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAg
bV9ucFdpbmRvdy53aW5kb3cgPSBoZGM7CisKKyAgICBXSU5ET1dQT1Mgd2luZG93cG9zID0geyAw
LCAwLCAwLCAwLCAwLCAwLCAwIH07CisKKyAgICBJbnRSZWN0IHIgPSBjb250ZW50c1RvTmF0aXZl
V2luZG93KGRvd25jYXN0PEZyYW1lVmlldz4ocGFyZW50KCkpLCBmcmFtZVJlY3QoKSk7CisKKyAg
ICB3aW5kb3dwb3MueCA9IHIueCgpOworICAgIHdpbmRvd3Bvcy55ID0gci55KCk7CisgICAgd2lu
ZG93cG9zLmN4ID0gci53aWR0aCgpOworICAgIHdpbmRvd3Bvcy5jeSA9IHIuaGVpZ2h0KCk7CisK
KyAgICBOUEV2ZW50IG5wRXZlbnQ7CisgICAgbnBFdmVudC5ldmVudCA9IFdNX1dJTkRPV1BPU0NI
QU5HRUQ7CisgICAgbnBFdmVudC5sUGFyYW0gPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
JndpbmRvd3Bvcyk7CisgICAgbnBFdmVudC53UGFyYW0gPSAwOworCisgICAgZGlzcGF0Y2hOUEV2
ZW50KG5wRXZlbnQpOworCisgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKKworICAg
IG5wRXZlbnQuZXZlbnQgPSBXTV9QQUlOVDsKKyAgICBucEV2ZW50LndQYXJhbSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihoZGMpOworCisgICAgLy8gVGhpcyBpcyBzdXBwb3NlZCB0byBi
ZSBhIHBvaW50ZXIgdG8gdGhlIGRpcnR5IHJlY3QsIGJ1dCBpdCBzZWVtcyB0aGF0IHRoZSBGbGFz
aCBwbHVnaW4KKyAgICAvLyBpZ25vcmVzIGl0IHNvIHdlIGp1c3QgcGFzcyBudWxsLgorICAgIG5w
RXZlbnQubFBhcmFtID0gMDsKKworICAgIGRpc3BhdGNoTlBFdmVudChucEV2ZW50KTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworI2lmICFVU0UoV0lOR0RJ
KQorICAgIEFTU0VSVChtX2lzV2luZG93ZWQpOworICAgIEFTU0VSVChjb250ZXh0LT5zaG91bGRJ
bmNsdWRlQ2hpbGRXaW5kb3dzKCkpOworCisgICAgSW50UG9pbnQgbG9jYXRpb25JbldpbmRvdyA9
IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb252ZXJ0VG9Db250YWluaW5nV2luZG93
KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOworCisgICAgTG9jYWxXaW5kb3dzQ29udGV4dCB3aW5k
b3dzQ29udGV4dChjb250ZXh0LCBmcmFtZVJlY3QoKSwgZmFsc2UpOworCisjaWYgVVNFKENBSVJP
KQorICAgIC8vIE11c3QgZmx1c2ggZHJhd2luZ3MgdXAgdG8gdGhpcyBwb2ludCB0byB0aGUgYmFj
a2luZyBtZXRhZmlsZSwgb3RoZXJ3aXNlIHRoZQorICAgIC8vIHBsdWdpbiByZWdpb24gd2lsbCBi
ZSBvdmVyd3JpdHRlbiB3aXRoIGFueSBjbGVhciByZWdpb25zIHNwZWNpZmllZCBpbiB0aGUKKyAg
ICAvLyBjYWlyby1jb250cm9sbGVkIHBvcnRpb25zIG9mIHRoZSByZW5kZXJpbmcuCisgICAgY2Fp
cm9fc2hvd19wYWdlKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKKyNlbmRpZgor
CisgICAgSERDIGhkYyA9IHdpbmRvd3NDb250ZXh0LmhkYygpOworICAgIFhGT1JNIG9yaWdpbmFs
VHJhbnNmb3JtOworICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYywgJm9yaWdpbmFsVHJhbnNmb3Jt
KTsKKworICAgIC8vIFRoZSBwbHVnaW4gZXhwZWN0cyB0aGUgREMgdG8gYmUgaW4gY2xpZW50IGNv
b3JkaW5hdGVzLCBzbyB3ZSB0cmFuc2xhdGUKKyAgICAvLyB0aGUgREMgdG8gbWFrZSB0aGF0IHNv
LgorICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjb250ZXh0LT5nZXRDVE0oKTsKKyAgICBjdG0u
dHJhbnNsYXRlKGxvY2F0aW9uSW5XaW5kb3cueCgpLCBsb2NhdGlvbkluV2luZG93LnkoKSk7Cisg
ICAgWEZPUk0gdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8WEZPUk0+KGN0bS50b1RyYW5zZm9ybWF0
aW9uTWF0cml4KCkpOworCisgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmdHJhbnNmb3JtKTsK
KworICAgIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChoZGMpOworCisgICAgU2V0V29ybGRU
cmFuc2Zvcm0oaGRjLCAmb3JpZ2luYWxUcmFuc2Zvcm0pOworI2VuZGlmCit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1p
c3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRl
eHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRW5zdXJlIHRoYXQg
d2UgaGF2ZSBjYWxsZWQgU2V0V2luZG93IGJlZm9yZSB3ZSB0cnkgdG8gcGFpbnQuCisgICAgaWYg
KCFtX2hhdmVDYWxsZWRTZXRXaW5kb3cpCisgICAgICAgIHNldE5QV2luZG93UmVjdChmcmFtZVJl
Y3QoKSk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisjaWYgIVVTRShXSU5HREkpCisgICAg
ICAgIGlmIChjb250ZXh0LT5zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkpCisgICAgICAgICAg
ICBwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRleHQoY29udGV4dCwgcmVjdCk7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEluIHRoZSBHVEsgYW5kIFF0IHBvcnRz
IHdlIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgZG9uJ3Qgd2FudCB0byB1c2UgdGhl
IHdpbmRvdworICAgIC8vIGNvb3JkaW5hdGVzLgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICBJbnRS
ZWN0IHJlY3RJbldpbmRvdyhyZWN0KTsKKyAgICByZWN0SW5XaW5kb3cuaW50ZXJzZWN0KGZyYW1l
UmVjdCgpKTsKKyNlbHNlCisgICAgSW50UmVjdCByZWN0SW5XaW5kb3cgPSBkb3duY2FzdDxGcmFt
ZVZpZXc+KCpwYXJlbnQoKSkuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSk7CisjZW5kaWYK
KyAgICBMb2NhbFdpbmRvd3NDb250ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQsIHJlY3RJbldp
bmRvdywgbV9pc1RyYW5zcGFyZW50KTsKKworICAgIC8vIE9uIFNhZmFyaS9XaW5kb3dzIHdpdGhv
dXQgdHJhbnNwYXJlbmN5IGxheWVycyB0aGUgR3JhcGhpY3NDb250ZXh0IHJldHVybnMgdGhlIEhE
QworICAgIC8vIG9mIHRoZSB3aW5kb3cgYW5kIHRoZSBwbHVnaW4gZXhwZWN0cyB0aGF0IHRoZSBw
YXNzZWQgaW4gREMgaGFzIHdpbmRvdyBjb29yZGluYXRlcy4KKyAgICAvLyBJbiB0aGUgR1RLIGFu
ZCBRdCBwb3J0cyB3ZSBhbHdheXMgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCB0aGVy
ZWZvcmUgbmVlZAorICAgIC8vIHRvIHByZXNlcnZlIHRoZSB0cmFuc2xhdGlvbiBzZXQgaW4gZ2V0
V2luZG93c0NvbnRleHQuCisjaWYgIVBMQVRGT1JNKEdUSykKKyAgICBpZiAoIWNvbnRleHQtPmlz
SW5UcmFuc3BhcmVuY3lMYXllcigpKSB7CisgICAgICAgIFhGT1JNIHRyYW5zZm9ybTsKKyAgICAg
ICAgR2V0V29ybGRUcmFuc2Zvcm0od2luZG93c0NvbnRleHQuaGRjKCksICZ0cmFuc2Zvcm0pOwor
ICAgICAgICB0cmFuc2Zvcm0uZUR4ID0gMDsKKyAgICAgICAgdHJhbnNmb3JtLmVEeSA9IDA7Cisg
ICAgICAgIFNldFdvcmxkVHJhbnNmb3JtKHdpbmRvd3NDb250ZXh0LmhkYygpLCAmdHJhbnNmb3Jt
KTsKKyAgICB9CisjZW5kaWYKKworICAgIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dCh3aW5k
b3dzQ29udGV4dC5oZGMoKSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NFUlQobV9wbHVnaW4gJiYgIW1f
aXNXaW5kb3dlZCk7CisKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICBucEV2ZW50LndQYXJh
bSA9IGV2ZW50LT5rZXlDb2RlKCk7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkua2V5ZG93bkV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlET1dO
OworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZl
bnQgPSBXTV9DSEFSOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KSB7CisgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9LRVlVUDsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAweDgwMDA7
CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgaWYg
KGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7Cit9CisKK2V4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisKK3ZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBBU1NF
UlQobV9wbHVnaW4gJiYgIW1faXNXaW5kb3dlZCk7CisKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisK
KyAgICBJbnRQb2ludCBwID0gY29udGVudHNUb05hdGl2ZVdpbmRvdyhkb3duY2FzdDxGcmFtZVZp
ZXc+KHBhcmVudCgpKSwgSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7
CisKKyAgICBucEV2ZW50LmxQYXJhbSA9IE1BS0VMUEFSQU0ocC54KCksIHAueSgpKTsKKyAgICBu
cEV2ZW50LndQYXJhbSA9IDA7CisKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAg
bnBFdmVudC53UGFyYW0gfD0gTUtfQ09OVFJPTDsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkp
CisgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOworCisgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50IHx8CisgICAgICAgIGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQgfHwgCisgICAgICAgIGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQu
ZXZlbnQgPSBXTV9NT1VTRU1PVkU7CisgICAgICAgIGlmIChldmVudC0+YnV0dG9uRG93bigpKQor
ICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIExlZnRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1L
X0xCVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgTWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBN
S19NQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBN
S19SQlVUVE9OOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVu
dCkgeworICAgICAgICBmb2N1c1BsdWdpbkVsZW1lbnQoKTsKKyAgICAgICAgc3dpdGNoIChldmVu
dC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2
ZW50LmV2ZW50ID0gV01fTEJVVFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01CVVRU
T05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAg
ICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9ORE9XTjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubW91c2V1cEV2ZW50KSB7CisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRv
bigpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVu
dCA9IFdNX0xCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgMToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTlVQOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAg
IG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
KyAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmFjayBwb3J0aW5nIHRoZSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzU4MTA4IGZpeCBoZXJlLgorICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCisg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworCisjaWYgIVBMQVRGT1JNKEdUSykK
KyAgICAvLyBDdXJyZW50bHksIFdpZGdldDo6c2V0Q3Vyc29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0
ZXIgdGhpcyBmdW5jdGlvbiBpbiBFdmVudEhhbmRsZXIuY3BwCisgICAgLy8gYW5kIHNpbmNlIHdl
IGRvbid0IHdhbnQgdGhhdCB3ZSBzZXQgaWdub3JlTmV4dFNldEN1cnNvciB0byB0cnVlIGhlcmUg
dG8gcHJldmVudCB0aGF0LgorICAgIGlnbm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOworICAgIGlm
IChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJv
bWUoKS5jbGllbnQoKS5zZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCk7CisjZW5kaWYK
K30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQorewor
ICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisKKyAgICBpZiAocGFyZW50KQorICAgICAg
ICBpbml0KCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghcGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBJZiB0aGUgcGx1Zy1pbiB3aW5k
b3cgb3Igb25lIG9mIGl0cyBjaGlsZHJlbiBoYXZlIHRoZSBmb2N1cywgd2UgbmVlZCB0byAKKyAg
ICAgICAgLy8gY2xlYXIgaXQgdG8gcHJldmVudCB0aGUgd2ViIHZpZXcgd2luZG93IGZyb20gYmVp
bmcgZm9jdXNlZCBiZWNhdXNlIHRoYXQgY2FuCisgICAgICAgIC8vIHRyaWdnZXIgYSBsYXlvdXQg
d2hpbGUgdGhlIHBsdWdpbiBlbGVtZW50IGlzIGJlaW5nIGRldGFjaGVkLgorICAgICAgICBIV05E
IGZvY3VzZWRXaW5kb3cgPSA6OkdldEZvY3VzKCk7CisgICAgICAgIGlmIChwbGF0Zm9ybVBsdWdp
bldpZGdldCgpID09IGZvY3VzZWRXaW5kb3cgfHwgOjpJc0NoaWxkKHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCksIGZvY3VzZWRXaW5kb3cpKQorICAgICAgICAgICAgOjpTZXRGb2N1cygwKTsKKyAgICB9
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZShib29sIHZpc2libGUpCit7
CisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpID09IHZpc2libGUpCisgICAgICAgIHJldHVybjsK
KworICAgIFdpZGdldDo6c2V0UGFyZW50VmlzaWJsZSh2aXNpYmxlKTsKKworICAgIGlmIChpc1Nl
bGZWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgeworICAgICAgICBpZiAodmlz
aWJsZSkKKyAgICAgICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1df
U0hPV05BKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgU2hvd1dpbmRvdyhwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLCBTV19ISURFKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW4gdGhlIEdUSyBwb3J0IHdlIGRyYXcgaW4g
YW4gb2Zmc2NyZWVuIGJ1ZmZlciBhbmQgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIHdpbmRvdworICAg
IC8vIGNvb3JkaW5hdGVzLgorIyBpZiBQTEFURk9STShHVEspCisgICAgSW50UG9pbnQgcCA9IHJl
Y3QubG9jYXRpb24oKTsKKyMgZWxzZQorICAgIEludFBvaW50IHAgPSBkb3duY2FzdDxGcmFtZVZp
ZXc+KCpwYXJlbnQoKSkuY29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOworIyBlbmRp
ZgorICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOwor
CisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93Lmhl
aWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0g
cmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWln
aHQoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QudG9wID0gMDsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0
d2luZG93KSB7CisgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
dHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0
YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKwor
ICAgICAgICBtX2hhdmVDYWxsZWRTZXRXaW5kb3cgPSB0cnVlOworCisgICAgICAgIGlmICghbV9p
c1dpbmRvd2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKTsKKworICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdO
RFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBS
T0MpOworICAgICAgICBpZiAoY3VycmVudFduZFByb2MgIT0gUGx1Z2luVmlld1duZFByb2MpCisg
ICAgICAgICAgICBtX3BsdWdpblduZFByb2MgPSAoV05EUFJPQylTZXRXaW5kb3dMb25nUHRyKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRSKVBsdWdpblZpZXdX
bmRQcm9jKTsKKyAgICB9Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRG
aWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikK
K3sKKyAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOworCisgICAgaWYgKGZpbGVuYW1lLnN0
YXJ0c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3Ry
aW5nKDgpOworCisgICAgLy8gR2V0IGZpbGUgaW5mbworICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRF
X0RBVEEgYXR0cnM7CisgICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXhXKGZpbGVuYW1lLmNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQs
ICZhdHRycykgPT0gMCkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisg
ICAgaWYgKGF0dHJzLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkp
CisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIEhBTkRMRSBmaWxl
SGFuZGxlID0gQ3JlYXRlRmlsZVcoZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKS5kYXRhKCksIEZJTEVfUkVBRF9EQVRBLCBGSUxFX1NIQVJFX1JFQUQsIDAsIE9QRU5fRVhJ
U1RJTkcsIDAsIDApOworICAgIAorICAgIGlmIChmaWxlSGFuZGxlID09IElOVkFMSURfSEFORExF
X1ZBTFVFKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBidWZm
ZXIucmVzaXplKGF0dHJzLm5GaWxlU2l6ZUxvdyk7CisKKyAgICBEV09SRCBieXRlc1JlYWQ7Cisg
ICAgaW50IHJldHZhbCA9IFJlYWRGaWxlKGZpbGVIYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGF0dHJz
Lm5GaWxlU2l6ZUxvdywgJmJ5dGVzUmVhZCwgMCk7CisKKyAgICBDbG9zZUhhbmRsZShmaWxlSGFu
ZGxlKTsKKworICAgIGlmIChyZXR2YWwgPT0gMCB8fCBieXRlc1JlYWQgIT0gYXR0cnMubkZpbGVT
aXplTG93KQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1
ZVN0YXRpYyhOUE5WYXJpYWJsZSwgdm9pZCosIE5QRXJyb3IqKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZh
cmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KQoreworICAgIHN3aXRjaCAodmFy
aWFibGUpIHsKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgICAg
IEhXTkQqIHcgPSByZWludGVycHJldF9jYXN0PEhXTkQqPih2YWx1ZSk7CisgICAgICAgICAgICAq
dyA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQocGFyZW50KCkgPyBwYXJlbnQoKS0+aG9zdFdp
bmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSA6IDApOworICAgICAgICAgICAgKnJlc3VsdCA9
IE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIE5QTlZTdXBwb3J0c1dpbmRvd2xlc3M6IHsKKyAgICAgICAgICAgIE5QQm9v
bCogZmxhZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TlBCb29sKj4odmFsdWUpOworICAgICAgICAgICAg
KmZsYWcgPSBUUlVFOworICAgICAgICAgICAgKnJlc3VsdCA9IE5QRVJSX05PX0VSUk9SOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAg
ICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC5tYXhYKCks
IHJlY3QubWF4WSgpIH07CisgICAgICAgIDo6SW52YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgJmludmFsaWRSZWN0LCBmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkg
eworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJ
bnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQs
IHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7Cisg
ICAgICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHIueCgpLCByLnkoKSwgci5tYXhYKCksIHIubWF4
WSgpIH07CisgICAgICAgIEludmFsaWRhdGVSZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICZp
bnZhbGlkUmVjdCwgRkFMU0UpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3BsdWdpbi0+
cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpKSB7CisgICAg
ICAgICAgICBtX2ludmFsaWRSZWN0cy5hcHBlbmQocik7CisgICAgICAgICAgICBpZiAoIW1faW52
YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICAgICAgbV9pbnZhbGlkYXRlVGlt
ZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpbnZh
bGlkYXRlUmVjdChyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJl
Z2lvbihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUkVDVCByOworCisgICAgaWYgKEdldFJnbkJveChyZWdpb24sICZyKSA9
PSAwKSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEludFJlY3QgcmVjdChJbnRQb2ludChyLmxlZnQsIHIudG9wKSwgSW50U2l6ZShyLnJpZ2h0
LXIubGVmdCwgci5ib3R0b20tci50b3ApKTsKKyAgICBpbnZhbGlkYXRlUmVjdChyZWN0KTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7CisgICAgaWYgKG1faXNXaW5kb3dl
ZCkKKyAgICAgICAgOjpVcGRhdGVXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAg
ZWxzZQorICAgICAgICA6OlVwZGF0ZVdpbmRvdyh3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KHBh
cmVudCgpID8gcGFyZW50KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkgOiAw
KSk7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1TdGFydCgpCit7CisgICAgQVNTRVJU
KG1faXNTdGFydGVkKTsKKyAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzTG9hZGVk
U3VjY2Vzc2Z1bGx5KTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgcmVnaXN0
ZXJQbHVnaW5WaWV3KCk7CisgICAgICAgIHNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyhob29r
ZWRCZWdpblBhaW50LCBob29rZWRFbmRQYWludCk7CisKKyAgICAgICAgRFdPUkQgZmxhZ3MgPSBX
U19DSElMRDsKKyAgICAgICAgaWYgKGlzU2VsZlZpc2libGUoKSkKKyAgICAgICAgICAgIGZsYWdz
IHw9IFdTX1ZJU0lCTEU7CisKKyAgICAgICAgSFdORCBwYXJlbnRXaW5kb3dIYW5kbGUgPSB3aW5k
b3dIYW5kbGVGb3JQYWdlQ2xpZW50KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygp
LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSk7CisgICAgICAgIEhXTkQgd2luZG93ID0gOjpDcmVhdGVX
aW5kb3dFeCgwLCBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZSwgMCwgZmxhZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBwYXJlbnRXaW5kb3dI
YW5kbGUsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCksIDApOworCisjaWYgT1MoV0lORE9X
UykgJiYgUExBVEZPUk0oR1RLKQorICAgICAgICBtX3dpbmRvdyA9IHdpbmRvdzsKKyNlbHNlCisg
ICAgICAgIHNldFBsYXRmb3JtV2lkZ2V0KHdpbmRvdyk7CisjZW5kaWYKKworICAgICAgICAvLyBD
YWxsaW5nIFNldFdpbmRvd0xvbmdQdHJBIGhlcmUgbWFrZXMgdGhlIHdpbmRvdyBwcm9jIEFTQ0lJ
LCB3aGljaCBpcyByZXF1aXJlZCBieSBhdCBsZWFzdAorICAgICAgICAvLyB0aGUgU2hvY2t3YXZl
IERpcmVjdG9yIHBsdWctaW4uCisjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKKyAgICAg
ICAgOjpTZXRXaW5kb3dMb25nUHRyQShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBS
T0MsIChMT05HX1BUUilEZWZXaW5kb3dQcm9jQSk7CisjZWxzZQorICAgICAgICA6OlNldFdpbmRv
d0xvbmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTF9XTkRQUk9DLCAoTE9ORylEZWZX
aW5kb3dQcm9jQSk7CisjZW5kaWYKKyAgICAgICAgU2V0UHJvcChwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5LCB0aGlzKTsKKworICAgICAgICBtX25wV2luZG93
LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0g
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25wV2luZG93
LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cg
PSAwOworICAgIH0KKworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOworCisgICAgaWYgKCFtX3Bs
dWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2Fs
bCkpCisgICAgICAgIHNldE5QV2luZG93UmVjdChmcmFtZVJlY3QoKSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAgIGlm
ICghcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGVzdHJv
eVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICBzZXRQbGF0Zm9ybVBsdWdpbldp
ZGdldCgwKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gUGx1Z2luVmlldzo6c25hcHNob3QoKQor
eworI2lmICFQTEFURk9STShHVEspICYmICFVU0UoV0lOR0RJKQorICAgIGF1dG8gaGRjID0gYWRv
cHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOworCisgICAgaWYgKCFtX2lzV2lu
ZG93ZWQpIHsKKyAgICAgICAgLy8gRW5hYmxlIHdvcmxkIHRyYW5zZm9ybXMuCisgICAgICAgIFNl
dEdyYXBoaWNzTW9kZShoZGMuZ2V0KCksIEdNX0FEVkFOQ0VEKTsKKworICAgICAgICBYRk9STSB0
cmFuc2Zvcm07CisgICAgICAgIEdldFdvcmxkVHJhbnNmb3JtKGhkYy5nZXQoKSwgJnRyYW5zZm9y
bSk7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBwbHVnLWlucyBhc3N1bWUgdGhhdCB0aGV5J3Jl
IGRyYXdpbmcgb250byB0aGUgdmlldydzIERDLgorICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIGNv
bnRleHQgc28gdGhhdCB0aGUgcGx1Zy1pbiBkcmF3cyBhdCAoMCwgMCkuCisgICAgICAgIEludFBv
aW50IHBvc2l0aW9uID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNvbnRlbnRzVG9X
aW5kb3coZnJhbWVSZWN0KCkpLmxvY2F0aW9uKCk7CisgICAgICAgIHRyYW5zZm9ybS5lRHggPSAt
cG9zaXRpb24ueCgpOworICAgICAgICB0cmFuc2Zvcm0uZUR5ID0gLXBvc2l0aW9uLnkoKTsKKyAg
ICAgICAgU2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgpLCAmdHJhbnNmb3JtKTsKKyAgICB9CisK
KyAgICB2b2lkKiBiaXRzOworICAgIEJpdG1hcEluZm8gYm1wID0gQml0bWFwSW5mbzo6Y3JlYXRl
Qm90dG9tVXAoZnJhbWVSZWN0KCkuc2l6ZSgpKTsKKyAgICBhdXRvIGhibXAgPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJtcCwgRElCX1JHQl9DT0xPUlMsICZiaXRzLCAw
LCAwKSk7CisKKyAgICBIQklUTUFQIGhibXBPbGQgPSBzdGF0aWNfY2FzdDxIQklUTUFQPihTZWxl
Y3RPYmplY3QoaGRjLmdldCgpLCBoYm1wLmdldCgpKSk7CisKKyAgICBwYWludEludG9UcmFuc2Zv
cm1lZENvbnRleHQoaGRjLmdldCgpKTsKKworICAgIFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhi
bXBPbGQpOworCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoaGJtcC5nZXQoKSk7Cisj
ZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvbnBhcGkuY3BwIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9ucGFwaS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRkOTBhNTJiN2ExZTdj
OTZlOGRmNGQ4OTliY2Y4MDE5NDhlZmZkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL1BsdWdpbnMvbnBhcGkuY3BwCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVk
dWxlci5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50
ZXJuYWwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoZSBwbHVnaW4gdmll
dyBpcyBhbHdheXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1p
bnMgd2lsbCBjYWxsIGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCisvLyB3aXRoIGEgTlVM
TCBpbnN0YW5jZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmll
dyB0aGF0IG1hZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4KKy8vIEN1cnJlbnRseSwgdGhlIGN1cnJl
bnQgcGx1Zy1pbiB2aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXc6
OnN0YXJ0LgorLy8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9j
a3dhdmUuIFdoZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRo
IGEgTlVMTCBpbnN0YW5jZS4KK3N0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoTlBQIGluc3RhbmNlKQoreworICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEp
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRh
KTsKKyAgICByZXR1cm4gUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZpZXcoKTsKK30KKwordm9p
ZCogTlBOX01lbUFsbG9jKHVpbnQzMl90IHNpemUpCit7CisgICAgcmV0dXJuIG1hbGxvYyhzaXpl
KTsKK30KKwordm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCit7CisgICAgZnJlZShwdHIpOwor
fQorCit1aW50MzJfdCBOUE5fTWVtRmx1c2godWludDMyX3QpCit7CisgICAgLy8gRG8gbm90aGlu
ZworICAgIHJldHVybiAwOworfQorCit2b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxv
YWRQYWdlcykKK3sKKyAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7Cit9CisK
K05QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiwgTlBCeXRlUmFuZ2UqKQoreworICAg
IHJldHVybiBOUEVSUl9TVFJFQU1fTk9UX1NFRUtBQkxFOworfQorCitOUEVycm9yIE5QTl9HZXRV
UkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdl
dCwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3RpZnlEYXRhKTsKK30KKwor
TlBFcnJvciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSktPmdldFVSTCh1cmwsIHRhcmdldCk7Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnko
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMy
X3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQor
eworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMTm90
aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7Cit9CisKK05QRXJy
b3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIq
IHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQorewor
ICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwg
dGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSk7Cit9CisKK05QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAg
aW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoq
IHN0cmVhbSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
bmV3U3RyZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKK30KKworaW50MzJfdCBOUE5fV3JpdGUo
TlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVy
KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53cml0ZShz
dHJlYW0sIGxlbiwgYnVmZmVyKTsKK30KKworTlBFcnJvciBOUE5fRGVzdHJveVN0cmVhbShOUFAg
aW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0cmVhbShzdHJlYW0s
IHJlYXNvbik7Cit9CisKK2NvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKQor
eworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
OworCisgICAgIGlmICghdmlldykKKyAgICAgICAgIHJldHVybiBQbHVnaW5WaWV3Ojp1c2VyQWdl
bnRTdGF0aWMoKTsKKyAKKyAgICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Cit9CisKK3ZvaWQg
TlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOworfQorCit2b2lk
IE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCit7
CisgICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7
CisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIC8vIE5TUGx1Z2luV3JhcHBlciwgYSBwbHVnaW4g
d3JhcHBlciBiaW5hcnkgdGhhdCBhbGxvd3MgcnVubmluZyAzMi1iaXQgcGx1Z2lucworICAgIC8v
IG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIHR5cGljYWxseSB1c2VkIGluIFgxMSwgd2lsbCBzb21l
dGltZXMgZ2l2ZSB1cyBhIG51bGwgTlBQIGhlcmUuCisgICAgaWYgKCF2aWV3KQorICAgICAgICBy
ZXR1cm47CisjZW5kaWYKKyAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVjdCk7Cit9
CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZh
bGlkUmVnaW9uKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFs
aWRhdGVSZWdpb24oaW52YWxpZFJlZ2lvbik7Cit9CisKK3ZvaWQgTlBOX0ZvcmNlUmVkcmF3KE5Q
UCBpbnN0YW5jZSkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5mb3Jj
ZVJlZHJhdygpOworfQorCitOUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QTlZh
cmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0g
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKKworICAgICBpZiAoIXZpZXcpCisgICAg
ICAgICByZXR1cm4gUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlKTsK
KworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2
YXJpYWJsZSwgdmFsdWUpOworfQorCitOUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2Us
IE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgIHJldHVybiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQor
Cit2b2lkKiBOUE5fR2V0SmF2YUVudigpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCogTlBOX0dldEphdmFQZWVyKE5QUCkKK3sKKyAgICAvLyBVbnN1cHBv
cnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRl
KE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKS0+cHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShlbmFibGVkKTsKK30KKwordm9p
ZCBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKK30KKwor
ZXh0ZXJuICJDIiB0eXBlZGVmIHZvaWQgUGx1Z2luVGhyZWFkQXN5bmNDYWxsRnVuY3Rpb24odm9p
ZCopOwordm9pZCBOUE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsKE5QUCBpbnN0YW5jZSwgUGx1Z2lu
VGhyZWFkQXN5bmNDYWxsRnVuY3Rpb24gZnVuYywgdm9pZCogdXNlckRhdGEpCit7CisgICAgLy8g
Q2FsbGJhY2sgZnVuY3Rpb24gdHlwZSBvbmx5IGRpZmZlcnMgZnJvbSBNYWluVGhyZWFkRnVuY3Rp
b24gYnkgYmVpbmcgZXh0ZXJuICJDIiwgd2hpY2ggZG9lc24ndCBhZmZlY3QgY2FsbGluZyBjb252
ZW50aW9uIG9uIGFueSBjb21waWxlcnMgd2UgdXNlLgorICAgIFBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXI6OnNjaGVkdWxlcigpLnNjaGVkdWxlQ2FsbChpbnN0YW5jZSwgcmVpbnRlcnByZXRfY2Fz
dDxQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpNYWluVGhyZWFkRnVuY3Rpb24qPihmdW5jKSwg
dXNlckRhdGEpOworfQorCitOUEVycm9yIE5QTl9HZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2Us
IE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwg
dWludDMyX3QqIGxlbikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+Z2V0VmFsdWVGb3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUsIGxlbik7Cit9CisKK05Q
RXJyb3IgTlBOX1NldFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFy
aWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikK
K3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c2V0VmFsdWVG
b3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUsIGxlbik7Cit9CisKK05QRXJyb3IgTlBOX0dldEF1
dGhlbnRpY2F0aW9uSW5mbyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25z
dCBjaGFyKiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hh
ciogcmVhbG0sIGNoYXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29y
ZCwgdWludDMyX3QqIHBsZW4pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPmdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90b2NvbCwgaG9zdCwgcG9ydCwgc2No
ZW1lLCByZWFsbSwgdXNlcm5hbWUsIHVsZW4sIHBhc3N3b3JkLCBwbGVuKTsKK30KKworTlBFcnJv
ciBOUE5fUG9wVXBDb250ZXh0TWVudShOUFAgaW5zdGFuY2UsIE5QTWVudSogbWVudSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oaW5zdGFuY2UpOworICAgIFVOVVNFRF9QQVJBTShtZW51KTsKKyAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244094</attachid>
            <date>2015-01-06 13:50:02 -0800</date>
            <delta_ts>2015-01-06 14:52:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140133-20150106135006.patch</filename>
            <type>text/plain</type>
            <size>489723</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVlNTJkZmMxNjVjZmM2
NzM5MWM3MzVjZmU0MWU5ODlmNmNhYjdhYy4uZjAzYzVjMjdhZDM5ZGM1YjU0Y2FhMzQ0MzNlZDJh
NTlhZTkwNDgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0aGUgV2lu
ZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
OgorCisyMDE1LTAxLTA2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisK
ICAgICAgICAgVHJ5IHRvIGZpeCB0aGUgV2luZG93cyBidWlsZC4KIAogICAgICAgICAqIFdlYkNv
cmUudmN4cHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5MDg5NTNj
YWYyZTQzN2Q4NjI4OTNjNjQ4NTQ5MGYzODMyNTQ3MWZmLi4zYmFiZTM0MmE0MjVmNDMxNjgyY2Yy
ZGJhYzVhMTE5MWJhOWQyOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0
aGUgV2luZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvajoKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0
LnZjeHByb2ouZmlsdGVyczoKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlkZXIK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEyNgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKaW5kZXggNjNhNWNjNjg5NGY4NmU0N2YxYmU4YjhiOWJjMGM4NjgwMTli
NjdhZS4uNzAyMjc4YWI2NmRlYmMzOTU4ZWU5ODBjZjg3ZTI1NDE0YjAzZDgyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwpAQCAtMSw1ICsxLDMxMCBAQAogMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCisgICAgICAgIE1vdmUgdGhlIFdpbmRvd3Mgb25seSBwbHVn
LWluIGNvZGUgdG8gV2ViS2l0L3dpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQwMTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbHVnaW5zL1BhaW50SG9va3MuYXNtOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGFpbnRIb29rcy5hc20uCisgICAgICAgICogUGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6UGx1
Z2luRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVz
aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZURp
c2FibGVkUGx1Z2luRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6YWRk
RGlzYWJsZWRQbHVnaW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpk
ZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFk
VVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlVVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnNldFBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjphZGRQbHVnaW5Q
YXRoc0Zyb21SZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6Z2V0
UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVmVyc2lv
blN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlVmVyc2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6YWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3Jl
OjphZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6YWRk
SmF2YVBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpzYWZhcmlQbHVnaW5zRGly
ZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmll
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVj
dG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXR0
eU5hbWVGb3JEcmF3aW5nTW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvckV2
ZW50TW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUpOgorICAgICAgICAqIFBsdWdpbnMv
UGx1Z2luRGVidWcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGVidWcuaC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW46On5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vzc1F1ZXVl
ZE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNzYWdlKToKKyAgICAgICAgKiBQ
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaC4KKyAgICAgICAg
KiBQbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2th
Z2U6On5QbHVnaW5QYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZy
ZWVMaWJyYXJ5U29vbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmcmVlTGli
cmFyeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6Y29tcGFy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnVubG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZTo6ZGV0ZXJtaW5lUXVpcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0TGlzdEZyb21WYXJpYW50QXJncyk6CisgICAgICAgIChXZWJDb3JlOjptYWtlU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOUE5f
SW52b2tlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2luTG9hZGVkKToKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdp
blBhY2thZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5oLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnBhcmVudERpcmVj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjptb2R1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblBhY2thZ2U6Om1pbWVUb0Rlc2NyaXB0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjptaW1lVG9FeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
OjpwbHVnaW5GdW5jcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpxdWlya3Mp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6dmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmdWxsTUlNRURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blBhY2thZ2VIYXNoOjplcXVhbCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2lu
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmVyc2lvbkluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2U6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24pOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luUXVp
cmtTZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtT
ZXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblF1aXJrU2V0OjpQbHVnaW5RdWlya1NldCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5RdWlya1NldDo6YWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblF1aXJrU2V0Ojpjb250YWlucyk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6c3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5TdHJlYW06OlBsdWdpblN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJl
YW06On5QbHVnaW5TdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6bGFzdE1vZGlmaWVkRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OnN0YXJ0U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6b3duZXJGb3JT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblN0cmVhbTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjp3YW50
c0FsbFN0cmVhbXMpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luU3RyZWFtLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luU3RyZWFtQ2xpZW50Ojp+UGx1Z2luU3RyZWFtQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5TdHJlYW06OnNldExvYWRNYW51YWxseSk6CisgICAgICAgICogUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
dy5jcHAuCisgICAgICAgIChXZWJDb3JlOjppbnN0YW5jZU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNl
dEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpmcmFtZVJlY3RzQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
dGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjdXJy
ZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVVVEY4U3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNjaGVkdWxlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6Z2V0VVJMTm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpwb3N0VVJMTm90aWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBvc3RVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6bmV3U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRlc3Ryb3lTdHJlYW0p
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmludmFsaWRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnB1
c2hQb3B1cHNFbmFibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmFyZVBv
cHVwc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0SmF2YVNjcmlw
dFBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OlBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9jdXNQbHVnaW5F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0Q2FsbGluZ1BsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppc0Nh
bGxpbmdQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydHNXaXRoQmxhbmtMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2F0aW9u
QWZ0ZXJGaXJzdEJsYW5rTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRU9MKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlUG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZh
bGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50U3Rh
dGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjprZWVwQWxpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5WaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblJlcXVlc3Q6OlBsdWdpblJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUmVxdWVzdDo6ZnJhbWVMb2FkUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5SZXF1ZXN0Ojpub3RpZnlEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblJlcXVlc3Q6OnNlbmROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luUmVxdWVzdDo6c2hvdWxkQWxsb3dQb3B1cHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWFudWFsTG9hZGVyOjp+UGx1Z2luTWFudWFsTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdGF0dXMpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwYXJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbHVnaW5zUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjptaW1l
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cmwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cGx1Z2luV25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXRQbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjp0b1BsdWdp
blZpZXcpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcC4KKyAgICAgICAg
KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aG9va2VkQmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpob29r
ZWRFbmRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpob29rKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3Rl
clBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlld1du
ZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6aXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRlbnRzVG9OYXRpdmVXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFp
bnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnNuYXBzaG90KToKKyAgICAgICAgKiBQbHVnaW5zL25wYXBpLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwLgorICAgICAgICAocGx1Z2luVmlld0Zvcklu
c3RhbmNlKToKKyAgICAgICAgKE5QTl9NZW1BbGxvYyk6CisgICAgICAgIChOUE5fTWVtRnJlZSk6
CisgICAgICAgIChOUE5fTWVtRmx1c2gpOgorICAgICAgICAoTlBOX1JlbG9hZFBsdWdpbnMpOgor
ICAgICAgICAoTlBOX1JlcXVlc3RSZWFkKToKKyAgICAgICAgKE5QTl9HZXRVUkxOb3RpZnkpOgor
ICAgICAgICAoTlBOX0dldFVSTCk6CisgICAgICAgIChOUE5fUG9zdFVSTE5vdGlmeSk6CisgICAg
ICAgIChOUE5fUG9zdFVSTCk6CisgICAgICAgIChOUE5fTmV3U3RyZWFtKToKKyAgICAgICAgKE5Q
Tl9Xcml0ZSk6CisgICAgICAgIChOUE5fRGVzdHJveVN0cmVhbSk6CisgICAgICAgIChOUE5fVXNl
ckFnZW50KToKKyAgICAgICAgKE5QTl9TdGF0dXMpOgorICAgICAgICAoTlBOX0ludmFsaWRhdGVS
ZWN0KToKKyAgICAgICAgKE5QTl9JbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKE5QTl9Gb3Jj
ZVJlZHJhdyk6CisgICAgICAgIChOUE5fR2V0VmFsdWUpOgorICAgICAgICAoTlBOX1NldFZhbHVl
KToKKyAgICAgICAgKE5QTl9HZXRKYXZhRW52KToKKyAgICAgICAgKE5QTl9HZXRKYXZhUGVlcik6
CisgICAgICAgIChOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSk6CisgICAgICAgIChOUE5fUG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwp
OgorICAgICAgICAoTlBOX0dldFZhbHVlRm9yVVJMKToKKyAgICAgICAgKE5QTl9TZXRWYWx1ZUZv
clVSTCk6CisgICAgICAgIChOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKE5Q
Tl9Qb3BVcENvbnRleHRNZW51KToKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlk
ZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEy
NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc3MzBlOWE3NDI4YjM4ZjU2YjJmNjJlYjIxZWQ5
MGMxM2IyZWUzMzYuLmUxZDY0YmRhNjU2NTYyOGQ0ZGJmN2MyZjcyODlkOGUzMDQxOTJmMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjQyLDkgKzIyNDIsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGx1Z2lucy9ET01QbHVnaW4uY3BwCiAgICAgcGx1Z2lucy9ET01QbHVnaW5BcnJh
eS5jcHAKICAgICBwbHVnaW5zL1BsdWdpbkRhdGEuY3BwCi0gICAgcGx1Z2lucy9QbHVnaW5EZWJ1
Zy5jcHAKICAgICBwbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCi0gICAgcGx1
Z2lucy9QbHVnaW5TdHJlYW0uY3BwCiAKICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNw
cAogICAgIHJlbmRlcmluZy9CaWRpUnVuLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggNGY3NjY5MzY0MjBlZTBjMDM1ZGVhMTk4M2Ex
NDc3NzMwOThhYWEwOS4uNWZhN2IzZGI4NjQyOWZjOGE1NTQyYmJhZGY3YTkxZmE3NTdjODU4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBA
IC0xNzc1NCwxOCArMTc3NTQsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1xET01NaW1lVHlwZUFycmF5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcRE9NUGx1Z2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcRE9NUGx1Z2luQXJyYXkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1
Z2luc1xucGFwaS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRhdGEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVn
aW5EYXRhYmFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRlYnVnLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5TdHJlYW0uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5WaWV3LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsdWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2luLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luUGFja2FnZVdpbi5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5WaWV3
V2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbGxJbk9uZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdmdcU1ZHRm9udEZhY2VFbGVtZW50
LmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgpAQCAtMjEwMzEsMTUgKzIxMDIxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcbnBmdW5jdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcbnBydW50aW1lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRhdGEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGF0YWJhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGVidWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1xQbHVnaW5QYWNrYWdlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblF1aXJrU2V0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblN0cmF0ZWd5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblN0cmVhbS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQ
bHVnaW5WaWV3LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzdmdcQ29sb3JEaXN0YW5jZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Zn
XFNWR0FFbGVtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZjk1OWI2MzRlM2UxNjFhZGY3
MDZhNGYwMzA3Y2YxMzYzNTQ3Mzk4Mi4uMjIzMDg0NjM2NWJjNDdjOWIzY2E2OGFlZWM4MTIxZDVh
ZmY1MGVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNDU2OSw0MiArNDU2OSwxMiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xET01QbHVnaW5BcnJheS5jcHAiPgogICAgICAgPEZp
bHRlcj5wbHVnaW5zPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbHVnaW5zXG5wYXBpLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luRGF0YS5jcHAiPgogICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpbkRh
dGFiYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGVidWcuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5jcHAiPgot
ICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblN0cmVhbS5jcHAiPgotICAgICAgPEZp
bHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2lu
czwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGx1Z2luc1x3aW5cUGx1Z2luRGF0YWJhc2VXaW4uY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2lu
c1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIj4KLSAgICAgIDxG
aWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblBhY2thZ2VXaW4uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblZpZXdXaW4uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbGxJbk9uZS5jcHAiPgogICAgICAgPEZpbHRlcj5y
ZW5kZXJpbmdcc3ZnPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xMTYxMywzMyArMTE1
ODMsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YS5o
Ij4KICAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1
Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiPgogICAgICAgPEZpbHRlcj5w
bHVnaW5zPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luUXVpcmtTZXQuaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
U3RyYXRlZ3kuaCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyZWFtLmgi
PgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuaCI+Ci0gICAgICA8Rmls
dGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCI+Ci0gICAg
ICA8RmlsdGVyPnBsdWdpbnNcd2luPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcQ29sb3JEaXN0YW5jZS5oIj4KICAgICAgIDxGaWx0ZXI+
cmVuZGVyaW5nXHN2ZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNjZiMGMzNDM4NTc3ODViYjY4MzQxMjA4YTA3MzY0M2U1
ZjIwMzEwYS4uMDExOGM1MDMxMzk2MGE0ZjU2MmRiMjE4ZGZlOGE5Mzk0YmZkODdmMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC05MSw3ICs5MSw2IEBACiAjaW5jbHVk
ZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5o
IgogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgog
I2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgog
I2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAppbmRleCBkMjcyNDU4Y2EwM2ZiZWM1NzE2
MjNlZTRhYTFiMjNkYmVjMzNiNzA1Li4xOTkzOGQyMzE1ZGFiYzg4OGY5NDFmOGM5MWMwYjBlZjI3
ODBmYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
UGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYTJjZWUyZGE3MmNhZjE0Yjc1Y2YzNmZh
YWQxNGI3NWU1NzQ4NTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlLmgiCi0KLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlVSTC5oIgot
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01F
VEFEQVRBX0NBQ0hFKQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNlbmRpZgotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4g
PiBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKLXN0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bVBlcnNpc3RlbnRQbHVn
aW5NZXRhZGF0YUNhY2hlU2l6ZSA9IDMyNzY4OwotCi1zdGF0aWMgYm9vbCBnUGVyc2lzdGVudFBs
dWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7Ci0KLVN0cmluZyYgcGVyc2lzdGVudFBsdWdpbk1l
dGFkYXRhQ2FjaGVQYXRoKCkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBjYWNoZVBhdGgsICgpKTsKLSAgICByZXR1cm4gY2FjaGVQYXRoOwotfQotI2VuZGlm
Ci0KLVBsdWdpbkRhdGFiYXNlOjpQbHVnaW5EYXRhYmFzZSgpCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICA6IG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJ
c0xvYWRlZChmYWxzZSkKLSNlbmRpZgotewotfQotCi1QbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0
YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSkKLXsKLSAgICBzdGF0aWMgUGx1
Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAwOwotCi0gICAgaWYgKCFwbHVnaW5zKSB7Ci0gICAgICAg
IHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2U7Ci0KLSAgICAgICAgaWYgKHBvcHVsYXRlKSB7
Ci0gICAgICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5EaXJlY3RvcmllcyhQbHVnaW5EYXRhYmFz
ZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkpOwotICAgICAgICAgICAgcGx1Z2lucy0+cmVm
cmVzaCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpbnM7Ci19Ci0KLWJv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZy
ZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgcmV0dXJuIChyZWZy
ZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7Ci19Ci0K
LXZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5KQotewotICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9y
eSk7Ci0gICAgcmVmcmVzaCgpOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkK
LXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIGlmICgh
bV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkKQotICAgICAgICBsb2FkUGVyc2lzdGVu
dE1ldGFkYXRhQ2FjaGUoKTsKLSNlbmRpZgotICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZh
bHNlOwotCi0gICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBsdWdpblNl
dCBwbHVnaW5zVG9VbmxvYWQ7Ci0gICAgICAgIGdldERlbGV0ZWRQbHVnaW5zKHBsdWdpbnNUb1Vu
bG9hZCk7Ci0KLSAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKLSAgICAgICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBwbHVnaW5zVG9VbmxvYWQuZW5kKCk7Ci0gICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICByZW1vdmUoaXQtPmdldCgpKTsKLQotICAgICAg
ICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCk7Ci0gICAgfQot
Ci0gICAgSGFzaFNldDxTdHJpbmc+IHBhdGhzOwotICAgIGdldFBsdWdpblBhdGhzSW5EaXJlY3Rv
cmllcyhwYXRocyk7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBwYXRoc1dpdGhUaW1l
czsKLQotICAgIC8vIFdlIHNob3VsZCBvbmx5IHNraXAgdW5jaGFuZ2VkIGZpbGVzIGlmIHdlIGRp
ZG4ndCByZW1vdmUgYW55IHBsdWdpbnMgYWJvdmUuIElmIHdlIGRpZCByZW1vdmUKLSAgICAvLyBh
bnkgcGx1Z2lucywgd2UgbmVlZCB0byBsb29rIGF0IGV2ZXJ5IHBsdWdpbiBmaWxlIHNvIHRoYXQs
IGUuZy4sIGlmIHRoZSB1c2VyIGhhcyB0d28gdmVyc2lvbnMKLSAgICAvLyBvZiBSZWFsUGxheWVy
IGluc3RhbGxlZCBhbmQganVzdCByZW1vdmVkIHRoZSBuZXdlciBvbmUsIHdlJ2xsIHBpY2sgdXAg
dGhlIG9sZGVyIG9uZS4KLSAgICBib29sIHNob3VsZFNraXBVbmNoYW5nZWRGaWxlcyA9ICFwbHVn
aW5TZXRDaGFuZ2VkOwotCi0gICAgSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXRo
c0VuZCA9IHBhdGhzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHBhdGhzLmJlZ2luKCk7IGl0ICE9IHBhdGhzRW5kOyArK2l0KSB7Ci0gICAgICAg
IHRpbWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRp
bWUoKml0LCBsYXN0TW9kaWZpZWQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
cGF0aHNXaXRoVGltZXMuYWRkKCppdCwgbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICAvLyBJZiB0
aGUgcGF0aCdzIHRpbWVzdGFtcCBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdl
IHJhbiByZWZyZXNoKCksIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCi0gICAgICAgIGlm
IChzaG91bGRTa2lwVW5jaGFuZ2VkRmlsZXMgJiYgbV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5nZXQo
Kml0KSA9PSBsYXN0TW9kaWZpZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBp
ZiAoUmVmUHRyPFBsdWdpblBhY2thZ2U+IG9sZFBhY2thZ2UgPSBtX3BsdWdpbnNCeVBhdGguZ2V0
KCppdCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzIHx8
IG9sZFBhY2thZ2UtPmxhc3RNb2RpZmllZCgpICE9IGxhc3RNb2RpZmllZCk7Ci0gICAgICAgICAg
ICByZW1vdmUob2xkUGFja2FnZS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8
UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoKml0
LCBsYXN0TW9kaWZpZWQpOwotICAgICAgICBpZiAocGFja2FnZSAmJiBhZGQocGFja2FnZS5yZWxl
YXNlKCkpKQotICAgICAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgLy8gQ2FjaGUgYWxsIHRoZSBwYXRocyB3ZSBmb3VuZCB3aXRoIHRoZWlyIHRpbWVzdGFtcHMg
Zm9yIG5leHQgdGltZS4KLSAgICBwYXRoc1dpdGhUaW1lcy5zd2FwKG1fcGx1Z2luUGF0aHNXaXRo
VGltZXMpOwotCi0gICAgaWYgKCFwbHVnaW5TZXRDaGFuZ2VkKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIHVw
ZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7Ci0jZW5kaWYKLQotICAgIG1fcmVnaXN0ZXJl
ZE1JTUVUeXBlcy5jbGVhcigpOwotCi0gICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVz
Ci0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0g
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcwotICAgICAgICBN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1l
VG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwotICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5k
KCk7Ci0gICAgICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAg
ICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+a2V5KTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBQbHVnaW5EYXRhYmFz
ZTo6cGx1Z2lucygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7
Ci0KLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsK
LSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVk
UGx1Z2luQ29tcGFyZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQotewotICAgIFBsdWdp
blBhY2thZ2UqIHBsdWdpbkEgPSAqc3RhdGljX2Nhc3Q8UGx1Z2luUGFja2FnZSogY29uc3QqPihh
KTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5CID0gKnN0YXRpY19jYXN0PFBsdWdpblBhY2th
Z2UqIGNvbnN0Kj4oYik7Ci0KLSAgICByZXR1cm4gcGx1Z2luQS0+Y29tcGFyZSgqcGx1Z2luQik7
Ci19Ci0KLVBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7Ci0g
ICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAg
UGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChr
ZXkpOwotICAgIGlmIChwcmVmZXJyZWRQbHVnaW4KLSAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2lu
LT5pc0VuYWJsZWQoKQotICAgICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPm1pbWVUb0Rlc2NyaXB0
aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKLSAgICAgICAgcmV0dXJuIHByZWZlcnJlZFBsdWdpbjsK
LSAgICB9Ci0KLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0K
LSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9ICgq
aXQpLmdldCgpOwotCi0gICAgICAgIGlmICghcGx1Z2luLT5pc0VuYWJsZWQoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChwbHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9ucygp
LmNvbnRhaW5zKGtleSkpIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NB
Q0hFKQotICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBsdWdpbkxvYWRlZCgpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgICAgICBwbHVnaW5DaG9pY2Vz
LmFwcGVuZChwbHVnaW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHBsdWdpbkNob2lj
ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHFzb3J0KHBsdWdpbkNob2lj
ZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUoKSwgc2l6ZW9mKFBsdWdpblBhY2thZ2UqKSwg
UGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUpOwotCi0gICAgcmV0dXJuIHBs
dWdpbkNob2ljZXNbMF07Ci19Ci0KLVN0cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGV4dGVu
c2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIFN0cmluZyBtaW1l
VHlwZTsKLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0gICAg
SGFzaE1hcDxQbHVnaW5QYWNrYWdlKiwgU3RyaW5nPiBtaW1lVHlwZUZvclBsdWdpbjsKLQotICAg
IGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoKml0KS0+aXNFbmFibGVkKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7Ci0KLSAg
ICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0g
KCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyAr
K21pbWVfaXQpIHsKLSAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+a2V5OwotICAgICAg
ICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5z
LmdldChtaW1lVHlwZSk7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5z
aW9ucyA9IG1pbWVfaXQtPnZhbHVlOwotICAgICAgICAgICAgYm9vbCBmb3VuZE1hcHBpbmcgPSBm
YWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVu
c2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgUGx1Z2luUGFja2Fn
ZSogcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZl
cnJlZFBsdWdpbiAmJiBQbHVnaW5QYWNrYWdlOjplcXVhbCgqcGx1Z2luLCAqcHJlZmVycmVkUGx1
Z2luKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtaW1lVHlwZTsKLQotI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgICAgICAgICAgICAg
IGlmICghcGx1Z2luLT5lbnN1cmVQbHVnaW5Mb2FkZWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIHBsdWdpbkNob2ljZXMu
YXBwZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlRm9yUGx1Z2luLmFk
ZChwbHVnaW4sIG1pbWVUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRNYXBwaW5nID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZvdW5kTWFwcGluZykKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcXNvcnQocGx1Z2luQ2hvaWNl
cy5kYXRhKCksIHBsdWdpbkNob2ljZXMuc2l6ZSgpLCBzaXplb2YoUGx1Z2luUGFja2FnZSopLCBQ
bHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk7Ci0KLSAgICByZXR1cm4gbWlt
ZVR5cGVGb3JQbHVnaW4uZ2V0KHBsdWdpbkNob2ljZXNbMF0pOwotfQotCi1QbHVnaW5QYWNrYWdl
KiBQbHVnaW5EYXRhYmFzZTo6ZmluZFBsdWdpbihjb25zdCBVUkwmIHVybCwgU3RyaW5nJiBtaW1l
VHlwZSkKLXsKLSAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBs
dWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICAKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSB1
cmwubGFzdFBhdGhDb21wb25lbnQoKTsKLSAgICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy8nKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1l
LnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYgKGV4dGVuc2lvblBvcyA9PSAtMSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCi0gICAgU3RyaW5nIG1pbWVUeXBlRm9yRXh0ZW5zaW9uID0gTUlNRVR5
cGVGb3JFeHRlbnNpb24oZmlsZW5hbWUuc3Vic3RyaW5nKGV4dGVuc2lvblBvcyArIDEpKTsKLSAg
ICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZUZvckV4
dGVuc2lvbik7Ci0gICAgaWYgKCFwbHVnaW4pIHsKLSAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBs
dWdpbiBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgV2luZG93cyBmb3IgdGhlIG1pbWUgdHlwZQotICAg
ICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCi0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICAKLSAgICBtaW1lVHlwZSA9IG1pbWVUeXBlRm9yRXh0ZW5zaW9uOwotICAg
IHJldHVybiBwbHVnaW47Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNldFByZWZlcnJlZFBs
dWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBsdWdpblBhY2thZ2UqIHBs
dWdpbikKLXsKLSAgICBpZiAoIXBsdWdpbiB8fCBwbHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5j
b250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIG1fcHJlZmVycmVkUGx1Z2lucy5zZXQobWltZVR5
cGUubG93ZXIoKSwgcGx1Z2luKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0
c0FuZElzTm90RGlzYWJsZWQoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkgY29uc3QKLXsKLSAgICAv
LyBTa2lwIHBsdWdpbiBmaWxlcyB0aGF0IGFyZSBkaXNhYmxlZCBieSBmaWxlbmFtZS4KLSAgICBp
ZiAobV9kaXNhYmxlZFBsdWdpbkZpbGVzLmNvbnRhaW5zKHBhdGhHZXRGaWxlTmFtZShmaWxlUGF0
aCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZmlsZUV4aXN0cyhmaWxl
UGF0aCk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKFBsdWdp
blNldCYgcGx1Z2lucykgY29uc3QKLXsKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgh
ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKCppdCktPnBhdGgoKSkpCi0gICAgICAgICAgICBw
bHVnaW5zLmFkZCgqaXQpOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6YWRkKFBh
c3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gcHJwUGFja2FnZSkKLXsKLSAgICBBU1NFUlRfQVJHKHBy
cFBhY2thZ2UsIHBycFBhY2thZ2UpOwotCi0gICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2th
Z2UgPSBwcnBQYWNrYWdlOwotCi0gICAgaWYgKCFtX3BsdWdpbnMuYWRkKHBhY2thZ2UpLmlzTmV3
RW50cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcGx1Z2luc0J5UGF0aC5hZGQo
cGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQ
bHVnaW5EYXRhYmFzZTo6cmVtb3ZlKFBsdWdpblBhY2thZ2UqIHBhY2thZ2UpCi17Ci0gICAgTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWNrYWdlLT5taW1lVG9FeHRl
bnNpb25zKCkuYmVnaW4oKTsKLSAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7Ci0gICAgZm9yICggOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0
b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVnaW5zLmZpbmQoaXQtPmtleSk7Ci0gICAg
ICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJyZWRQbHVnaW5zLmVuZCgpICYmIHBhY2th
Z2VJbk1hcC0+dmFsdWUgPT0gcGFja2FnZSkKLSAgICAgICAgICAgIG1fcHJlZmVycmVkUGx1Z2lu
cy5yZW1vdmUocGFja2FnZUluTWFwKTsKLSAgICB9Ci0KLSAgICBtX3BsdWdpbnMucmVtb3ZlKHBh
Y2thZ2UpOwotICAgIG1fcGx1Z2luc0J5UGF0aC5yZW1vdmUocGFja2FnZS0+cGF0aCgpKTsKLX0K
LQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Y2xlYXIoKQotewotICAgIG1fcGx1Z2lucy5jbGVhcigp
OwotICAgIG1fcGx1Z2luc0J5UGF0aC5jbGVhcigpOwotICAgIG1fcGx1Z2luUGF0aHNXaXRoVGlt
ZXMuY2xlYXIoKTsKLSAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKLSAgICBtX3By
ZWZlcnJlZFBsdWdpbnMuY2xlYXIoKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFE
QVRBX0NBQ0hFKQotICAgIG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCA9IGZhbHNl
OwotI2VuZGlmCi19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZURpc2FibGVkUGx1Z2lu
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQotewotICAgIHJldHVybiBtX2Rpc2FibGVkUGx1
Z2luRmlsZXMucmVtb3ZlKGZpbGVOYW1lKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6YWRk
RGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCi17Ci0gICAgcmV0dXJu
IG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5hZGQoZmlsZU5hbWUpLmlzTmV3RW50cnk7Ci19Ci0KLSNp
ZiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkpCi0vLyBGb3Ig
U2FmYXJpL1dpbiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkCi0v
LyBpbiBQbHVnaW5EYXRhYmFzZVdpbi5jcHAsIGJ1dCBpZiB3ZSBjYW4gdXNlIFdlYkNvcmUgY29u
c3RydWN0cwotLy8gZm9yIHRoZSBsb2dpYyB3ZSBzaG91bGQgcGVyaGFwcyBtb3ZlIGl0IGhlcmUg
dW5kZXIgWFBfV0lOPwotCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBs
dWdpbkRpcmVjdG9yaWVzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLQotICAgIC8v
IEFkZCBwYXRocyBzcGVjaWZpYyB0byBlYWNoIHBsYXRmb3JtCi0jaWYgZGVmaW5lZChYUF9VTklY
KQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0gICAg
dXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiLy5tb3ppbGxhL3BsdWdpbnMiKSk7Ci0gICAg
cGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKLQotICAgIHVzZXJQbHVnaW5QYXRoID0gaG9t
ZURpcmVjdG9yeVBhdGgoKTsKLSAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCIvLm5l
dHNjYXBlL3BsdWdpbnMiKSk7Ci0gICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKLQot
ICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvYnJvd3Nlci9wbHVnaW5zIik7Ci0gICAgcGF0aHMu
YXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxhL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBl
bmQoIi91c3IvbGliL2ZpcmVmb3gvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9s
aWI2NC9icm93c2VyLXBsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dz
ZXItcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbW96aWxsYS9wbHVnaW5z
Iik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL25ldHNjYXBlL3BsdWdpbnMiKTsKLSAg
ICBwYXRocy5hcHBlbmQoIi9vcHQvbW96aWxsYS9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5k
KCIvb3B0L21vemlsbGEvbGliL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi9vcHQvbmV0
c2NhcGUvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL29wdC9uZXRzY2FwZS9jb21tdW5p
Y2F0b3IvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1
Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1Z2lucy1saWJj
NSIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1Z2lucy1saWJjNiIp
OwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9uZXRzY2FwZS9wbHVnaW5zIik7Ci0gICAg
cGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L21vemlsbGEvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFw
cGVuZCgiL3Vzci9saWIvbnNicm93c2VyL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91
c3IvbGliNjQvbnNicm93c2VyL3BsdWdpbnMiKTsKLQotICAgIFN0cmluZyBtb3pIb21lKGdldGVu
digiTU9aSUxMQV9IT01FIikpOwotICAgIG1vekhvbWUuYXBwZW5kKCIvcGx1Z2lucyIpOwotICAg
IHBhdGhzLmFwcGVuZChtb3pIb21lKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IG1velBhdGhzOwot
ICAgIFN0cmluZyBtb3pQYXRoKGdldGVudigiTU9aX1BMVUdJTl9QQVRIIikpOwotICAgIG1velBh
dGguc3BsaXQoVUNoYXIoJzonKSwgLyogYWxsb3dFbXB0eUVudHJpZXMgKi8gZmFsc2UsIG1velBh
dGhzKTsKLSAgICBwYXRocy5hcHBlbmRWZWN0b3IobW96UGF0aHMpOwotI2VsaWYgZGVmaW5lZChY
UF9NQUNPU1gpCi0gICAgU3RyaW5nIHVzZXJQbHVnaW5QYXRoID0gaG9tZURpcmVjdG9yeVBhdGgo
KTsKLSAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCIvTGlicmFyeS9JbnRlcm5ldCBQ
bHVnLUlucyIpKTsKLSAgICBwYXRocy5hcHBlbmQodXNlclBsdWdpblBhdGgpOwotICAgIHBhdGhz
LmFwcGVuZCgiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKTsKLSNlbGlmIGRlZmluZWQoWFBf
V0lOKQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0g
ICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiXFxBcHBsaWNhdGlvbiBEYXRhXFxNb3pp
bGxhXFxwbHVnaW5zIikpOwotICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7Ci0jZW5k
aWYKLQotICAgIHJldHVybiBwYXRoczsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVm
ZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBw
cmVmZXJyZWRQYXRoID0gaG9tZURpcmVjdG9yeVBhdGgoKTsKLQotI2lmIGRlZmluZWQoWFBfVU5J
WCkKLSAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJpbmcoIi8ubW96aWxsYS9wbHVnaW5zIikp
OwotI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3Ry
aW5nKCIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlucyIpKTsKLSNlbGlmIGRlZmluZWQoWFBfV0lO
KQotICAgIHByZWZlcnJlZFBhdGguYXBwZW5kKFN0cmluZygiXFxBcHBsaWNhdGlvbiBEYXRhXFxN
b3ppbGxhXFxwbHVnaW5zIikpOwotI2VuZGlmCi0KLSAgICAvLyBUT0RPOiBXZSBzaG91bGQgbm9y
bWFsaXplIHRoZSBwYXRoIGJlZm9yZSBkb2luZyBhIGNvbXBhcmlzb24uCi0gICAgcmV0dXJuIHBh
dGggPT0gcHJlZmVycmVkUGF0aDsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2lu
UGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCi0gICAgSGFz
aFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAg
ICBTdHJpbmcgZmlsZU5hbWVGaWx0ZXIoIiouc28iKTsKLSNlbHNlCi0gICAgU3RyaW5nIGZpbGVO
YW1lRmlsdGVyKCIiKTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGRpcnNFbmQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9y
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRJdCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuYmVnaW4o
KTsgZEl0ICE9IGRpcnNFbmQ7ICsrZEl0KSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdp
blBhdGhzID0gbGlzdERpcmVjdG9yeSgqZEl0LCBmaWxlTmFtZUZpbHRlcik7Ci0gICAgICAgIFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwbHVnaW5zRW5kID0gcGx1Z2luUGF0aHMuZW5k
KCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBJdCA9IHBs
dWdpblBhdGhzLmJlZ2luKCk7IHBJdCAhPSBwbHVnaW5zRW5kOyArK3BJdCkgewotICAgICAgICAg
ICAgaWYgKCFmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZCgqcEl0KSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgcGF0aHMuYWRkKCpwSXQpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi0jZW5kaWYgLy8gIU9TKFdJTkRPV1MpCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX01FVEFEQVRBX0NBQ0hFKQotCi1zdGF0aWMgdm9pZCBmaWxsQnVmZmVyV2l0aENvbnRl
bnRzT2ZGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikK
LXsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDA7Ci0gICAgc2l6ZV90IGJ1ZmZlckNhcGFjaXR5
ID0gMTAyNDsKLSAgICBidWZmZXIucmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKLQotICAgIGRvIHsK
LSAgICAgICAgYnVmZmVyU2l6ZSArPSByZWFkRnJvbUZpbGUoZmlsZSwgYnVmZmVyLmRhdGEoKSAr
IGJ1ZmZlclNpemUsIGJ1ZmZlckNhcGFjaXR5IC0gYnVmZmVyU2l6ZSk7Ci0gICAgICAgIGlmIChi
dWZmZXJTaXplID09IGJ1ZmZlckNhcGFjaXR5KSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyQ2Fw
YWNpdHkgPCBtYXhpbXVtUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVTaXplKSB7Ci0gICAg
ICAgICAgICAgICAgYnVmZmVyQ2FwYWNpdHkgKj0gMjsKLSAgICAgICAgICAgICAgICBidWZmZXIu
cmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0gd2hpbGUgKHRy
dWUpOwotCi0gICAgYnVmZmVyLnNocmluayhidWZmZXJTaXplKTsKLX0KLQotc3RhdGljIGJvb2wg
cmVhZFVURjhTdHJpbmcoU3RyaW5nJiByZXN1bHRTdHJpbmcsIGNoYXIqJiBzdGFydCwgY29uc3Qg
Y2hhciogZW5kKQotewotICAgIGlmIChzdGFydCA+PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGludCBsZW4gPSBzdHJsZW4oc3RhcnQpOwotICAgIHJlc3VsdFN0cmluZyA9IFN0
cmluZzo6ZnJvbVVURjgoc3RhcnQsIGxlbik7Ci0gICAgc3RhcnQgKz0gbGVuICsgMTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCByZWFkVGltZSh0aW1lX3QmIHJlc3VsdFRp
bWUsIGNoYXIqJiBzdGFydCwgY29uc3QgY2hhciogZW5kKQotewotICAgIGlmIChzdGFydCArIHNp
emVvZih0aW1lX3QpID49IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhl
IHN0cmVhbSBpcyBub3QgbmVjZXNzYXJ5IGFsaWduZWQuCi0gICAgbWVtY3B5KCZyZXN1bHRUaW1l
LCBzdGFydCwgc2l6ZW9mKHRpbWVfdCkpOwotICAgIHN0YXJ0ICs9IHNpemVvZih0aW1lX3QpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHNjaGVtYVZlcnNpb24g
PSAnMSc7Ci1zdGF0aWMgY29uc3QgY2hhciBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZp
bGVuYW1lW10gPSAiUGx1Z2luTWV0YWRhdGFDYWNoZS5iaW4iOwotCi12b2lkIFBsdWdpbkRhdGFi
YXNlOjpsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKQotewotICAgIGlmICghaXNQZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgo
KS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBm
aWxlOwotICAgIFN0cmluZyBhYnNvbHV0ZUNhY2hlUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSwgcGVyc2lzdGVudFBsdWdpbk1ldGFk
YXRhQ2FjaGVGaWxlbmFtZSk7Ci0gICAgZmlsZSA9IG9wZW5GaWxlKGFic29sdXRlQ2FjaGVQYXRo
LCBPcGVuRm9yUmVhZCk7Ci0KLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoZmlsZSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIE1hcmsgY2FjaGUgYXMgbG9hZGVkIHJlZ2FyZGxlc3Mgb2Ygc3Vj
Y2VzcyBvciBmYWlsdXJlLiBJZgotICAgIC8vIHRoZXJlJ3MgZXJyb3IgaW4gdGhlIGNhY2hlLCB3
ZSB3b24ndCB0cnkgdG8gbG9hZCBpdCBhbnltb3JlLgotICAgIG1fcGVyc2lzdGVudE1ldGFkYXRh
Q2FjaGVJc0xvYWRlZCA9IHRydWU7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZmlsZUNvbnRlbnRzOwot
ICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZSwgZmlsZUNvbnRlbnRzKTsKLSAg
ICBjbG9zZUZpbGUoZmlsZSk7Ci0KLSAgICBpZiAoZmlsZUNvbnRlbnRzLnNpemUoKSA8IDIgfHwg
ZmlsZUNvbnRlbnRzLmZpcnN0KCkgIT0gc2NoZW1hVmVyc2lvbiB8fCBmaWxlQ29udGVudHMubGFz
dCgpICE9ICdcMCcpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmVhZCBwbHVnaW4g
bWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgc2NoZW1hIik7Ci0gICAgICAgIGRlbGV0ZUZpbGUoYWJz
b2x1dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciogYnVm
ZmVyUG9zID0gZmlsZUNvbnRlbnRzLmRhdGEoKSArIDE7Ci0gICAgY2hhciogZW5kID0gZmlsZUNv
bnRlbnRzLmRhdGEoKSArIGZpbGVDb250ZW50cy5zaXplKCk7Ci0KLSAgICBQbHVnaW5TZXQgY2Fj
aGVkUGx1Z2luczsKLSAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBjYWNoZWRQbHVnaW5QYXRo
c1dpdGhUaW1lczsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4g
Y2FjaGVkUGx1Z2luc0J5UGF0aDsKLQotICAgIHdoaWxlIChidWZmZXJQb3MgPCBlbmQpIHsKLSAg
ICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAg
IFN0cmluZyBuYW1lOwotICAgICAgICBTdHJpbmcgZGVzYzsKLSAgICAgICAgU3RyaW5nIG1pbWVE
ZXNjOwotICAgICAgICBpZiAoIShyZWFkVVRGOFN0cmluZyhwYXRoLCBidWZmZXJQb3MsIGVuZCkK
LSAgICAgICAgICAgICAgJiYgcmVhZFRpbWUobGFzdE1vZGlmaWVkLCBidWZmZXJQb3MsIGVuZCkK
LSAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcobmFtZSwgYnVmZmVyUG9zLCBlbmQpCi0g
ICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5nKGRlc2MsIGJ1ZmZlclBvcywgZW5kKQotICAg
ICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhtaW1lRGVzYywgYnVmZmVyUG9zLCBlbmQpKSkg
ewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEg
Y2FjaGU6IGNvcnJ1cHQgZGF0YSIpOwotICAgICAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNh
Y2hlUGF0aCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBT
a2lwIG1ldGFkYXRhIHRoYXQgcG9pbnRzIHRvIHBsdWdpbnMgZnJvbSBkaXJlY3RvcmllcyB0aGF0
Ci0gICAgICAgIC8vIGFyZSBub3QgcGFydCBvZiBwbHVnaW4gZGlyZWN0b3J5IGxpc3QgYW55bW9y
ZS4KLSAgICAgICAgU3RyaW5nIHBsdWdpbkRpcmVjdG9yeU5hbWUgPSBkaXJlY3RvcnlOYW1lKHBh
dGgpOwotICAgICAgICBpZiAobV9wbHVnaW5EaXJlY3Rvcmllcy5maW5kKHBsdWdpbkRpcmVjdG9y
eU5hbWUpID09IFdURjo6bm90Rm91bmQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBh
Y2thZ2VGcm9tQ2FjaGUocGF0aCwgbGFzdE1vZGlmaWVkLCBuYW1lLCBkZXNjLCBtaW1lRGVzYyk7
Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UgJiYgY2FjaGVkUGx1Z2lucy5hZGQocGFja2FnZSkuaXNO
ZXdFbnRyeSkgewotICAgICAgICAgICAgY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXMuYWRkKHBh
Y2thZ2UtPnBhdGgoKSwgcGFja2FnZS0+bGFzdE1vZGlmaWVkKCkpOwotICAgICAgICAgICAgY2Fj
aGVkUGx1Z2luc0J5UGF0aC5hZGQocGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIG1fcGx1Z2lucy5zd2FwKGNhY2hlZFBsdWdpbnMpOwotICAgIG1fcGx1
Z2luc0J5UGF0aC5zd2FwKGNhY2hlZFBsdWdpbnNCeVBhdGgpOwotICAgIG1fcGx1Z2luUGF0aHNX
aXRoVGltZXMuc3dhcChjYWNoZWRQbHVnaW5QYXRoc1dpdGhUaW1lcyk7Ci19Ci0KLXN0YXRpYyBi
b29sIHdyaXRlVVRGOFN0cmluZyhQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgY29uc3QgU3RyaW5n
JiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAg
ICBpbnQgbGVuZ3RoID0gdXRmOFN0cmluZy5sZW5ndGgoKSArIDE7Ci0gICAgcmV0dXJuIHdyaXRl
VG9GaWxlKGZpbGUsIHV0ZjhTdHJpbmcuZGF0YSgpLCBsZW5ndGgpID09IGxlbmd0aDsKLX0KLQot
c3RhdGljIGJvb2wgd3JpdGVUaW1lKFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBjb25zdCB0aW1l
X3QmIHRpbWUpCi17Ci0gICAgcmV0dXJuIHdyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KCZ0aW1lKSwgc2l6ZW9mKHRpbWVfdCkpID09IHNpemVvZih0aW1lX3Qp
OwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjp1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNo
ZSgpCi17Ci0gICAgaWYgKCFpc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpIHx8IHBl
cnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbWFrZUFsbERpcmVjdG9yaWVzKHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpKTsK
LSAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
cGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCksIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNh
Y2hlRmlsZW5hbWUpOwotICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwotCi0gICAg
aWYgKG1fcGx1Z2lucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRmb3Jt
RmlsZUhhbmRsZSBmaWxlOwotICAgIGZpbGUgPSBvcGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwg
T3BlbkZvcldyaXRlKTsKLQotICAgIGlmICghaXNIYW5kbGVWYWxpZChmaWxlKSkgewotICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIHBsdWdpbiBtZXRhZGF0YSBjYWNoZSBmb3Igc2F2
aW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjaGFyIGxvY2FsU2NoZW1hVmVy
c2lvbiA9IHNjaGVtYVZlcnNpb247Ci0gICAgaWYgKHdyaXRlVG9GaWxlKGZpbGUsICZsb2NhbFNj
aGVtYVZlcnNpb24sIDEpICE9IDEpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3Jp
dGUgcGx1Z2luIG1ldGFkYXRhIGNhY2hlIHNjaGVtYSIpOwotICAgICAgICBjbG9zZUZpbGUoZmls
ZSk7Ci0gICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdp
bnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVn
aW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoISh3cml0ZVVURjhT
dHJpbmcoZmlsZSwgKCppdCktPnBhdGgoKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVUaW1lKGZp
bGUsICgqaXQpLT5sYXN0TW9kaWZpZWQoKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVVVEY4U3Ry
aW5nKGZpbGUsICgqaXQpLT5uYW1lKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmlu
ZyhmaWxlLCAoKml0KS0+ZGVzY3JpcHRpb24oKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVVVEY4
U3RyaW5nKGZpbGUsICgqaXQpLT5mdWxsTUlNRURlc2NyaXB0aW9uKCkpKSkgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3JpdGUgcGx1Z2luIG1ldGFkYXRhIHRvIGNhY2hlIik7
Ci0gICAgICAgICAgICBjbG9zZUZpbGUoZmlsZSk7Ci0gICAgICAgICAgICBkZWxldGVGaWxlKGFi
c29sdXRlQ2FjaGVQYXRoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNsb3NlRmlsZShmaWxlKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQZXJz
aXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKQotewotICAgIHJldHVybiBnUGVyc2lzdGVudFBs
dWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNl
dFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChib29sIGlzRW5hYmxlZCkKLXsKLSAgICBn
UGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQgPSBpc0VuYWJsZWQ7Ci19Ci0K
LVN0cmluZyBQbHVnaW5EYXRhYmFzZTo6cGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkKLXsK
LSAgICByZXR1cm4gV2ViQ29yZTo6cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCk7
Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCkKLXsKLSAgICBXZWJD
b3JlOjpwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVBhdGgoKSA9IHBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlUGF0aDsKLX0KLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhYmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmM0OGVjZGZmNmNmMjI0
MzU1OTRmOGFlODUyMzAxYTYyNjNjZjg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAor
KysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdp
bkRhdGFiYXNlX2gKLSNkZWZpbmUgUGx1Z2luRGF0YWJhc2VfaAotCi0jaW5jbHVkZSAiUGx1Z2lu
UGFja2FnZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEVsZW1lbnQ7
Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgSW50U2l6ZTsKLSAgICBjbGFzcyBVUkw7Ci0g
ICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VDbGllbnQ7Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZTsK
LQotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2th
Z2VIYXNoLCBQbHVnaW5QYWNrYWdlSGFzaFRyYWl0cz4gUGx1Z2luU2V0OwotCi0gICAgY2xhc3Mg
UGx1Z2luRGF0YWJhc2UgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbHVnaW5EYXRh
YmFzZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1
Z2luRGF0YWJhc2UoKTsKLQotICAgICAgICAvLyBUaGUgZmlyc3QgY2FsbCB0byBpbnN0YWxsZWRQ
bHVnaW5zIGNyZWF0ZXMgdGhlIHBsdWdpbiBkYXRhYmFzZQotICAgICAgICAvLyBhbmQgYnkgZGVm
YXVsdCBwb3B1bGF0ZXMgaXQgd2l0aCB0aGUgcGx1Z2lucyBpbnN0YWxsZWQgb24gdGhlIHN5c3Rl
bS4KLSAgICAgICAgLy8gRm9yIHRlc3RpbmcgcHVycG9zZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG5v
dCBwb3B1bGF0ZSB0aGUgZGF0YWJhc2UKLSAgICAgICAgLy8gYXV0b21hdGljYWxseSwgYXMgdGhl
IHBsdWdpbnMgbWlnaHQgYWZmZWN0IHRoZSBEUlQgcmVzdWx0cyBieQotICAgICAgICAvLyB3cml0
aW5nIHRvIGEuby4gc3RkZXJyLgotICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIGluc3Rh
bGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSA9IHRydWUpOwotCi0gICAgICAgIGJvb2wgcmVmcmVz
aCgpOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdl
Kj4gcGx1Z2lucygpIGNvbnN0OwotICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgICAgIHN0YXRpYyBib29sIGlzUHJlZmVycmVkUGx1
Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KTsKLSAgICAgICAgc3RhdGljIGlu
dCBwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKik7Ci0KLSAg
ICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBsdWdpbihjb25zdCBVUkwmLCBTdHJpbmcmIG1pbWVU
eXBlKTsKLSAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIHZvaWQgc2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luKTsKLQotICAg
ICAgICB2b2lkIHNldFBsdWdpbkRpcmVjdG9yaWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJl
Y3RvcmllcykKLSAgICAgICAgewotICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgICAgIG1f
cGx1Z2luRGlyZWN0b3JpZXMgPSBkaXJlY3RvcmllczsKLSAgICAgICAgfQotCi0gICAgICAgIGJv
b2wgcmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwotICAg
ICAgICBib29sIGFkZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsK
LSAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5EaXJlY3Rvcmllcygp
OwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVnaW5EaXJlY3RvcmllcygpIGNvbnN0IHsgcmV0
dXJuIG1fcGx1Z2luRGlyZWN0b3JpZXM7IH0KLQotICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0OwotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIHN0YXRpYyBib29sIGlzUGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChib29sIGlzRW5hYmxlZCk7Ci0gICAgICAgIHN0YXRp
YyBTdHJpbmcgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCk7Ci0gICAgICAgIHN0YXRpYyB2
b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlUGF0aCk7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYpIGNvbnN0Owot
ICAgICAgICB2b2lkIGdldERlbGV0ZWRQbHVnaW5zKFBsdWdpblNldCYpIGNvbnN0OwotICAgICAg
ICBib29sIGZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0Owot
Ci0gICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgcGx1Z2luIHdhcyBhY3R1YWxseSBhZGRl
ZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVkIGlmIGl0J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhp
c3RpbmcgcGx1Z2luKS4KLSAgICAgICAgYm9vbCBhZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdl
Pik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFBsdWdpblBhY2thZ2UqKTsKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50
TWV0YWRhdGFDYWNoZSgpOwotICAgICAgICB2b2lkIHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlKCk7Ci0jZW5kaWYKLQotICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9kaXNhYmxlZFBsdWdp
bkZpbGVzOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpbkRpcmVjdG9yaWVzOwotICAg
ICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOwotICAgICAgICBQbHVn
aW5TZXQgbV9wbHVnaW5zOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBh
Y2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgdGltZV90
PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJyZWRQbHVnaW5zOwotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZUlzTG9hZGVkOwotI2VuZGlmCi0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVi
dWcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZDIzYWU2NzEzOGFjYWJjNjViNGUzMDBjZjJjZTE3OTgx
NDA1MzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
RGVidWcuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgIUxPR19E
SVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBlcnJvclN0cmluZ3NbXSA9IHsKLSAgICAiTm8gZXJyb3JzIG9jY3VycmVkLiIsIC8qIE5QRVJS
X05PX0VSUk9SICovCi0gICAgIkVycm9yIHdpdGggbm8gc3BlY2lmaWMgZXJyb3IgY29kZSBvY2N1
cnJlZC4iLCAvKiBOUEVSUl9HRU5FUklDX0VSUk9SICovCi0gICAgIkludmFsaWQgaW5zdGFuY2Ug
cGFzc2VkIHRvIHRoZSBwbHVnLWluLiIsIC8qIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1Ig
Ki8KLSAgICAiRnVuY3Rpb24gdGFibGUgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX0ZVTkNU
QUJMRV9FUlJPUiAqLwotICAgICJMb2FkaW5nIG9mIHBsdWctaW4gZmFpbGVkLiIsIC8qIE5QRVJS
X01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAqLwotICAgICJNZW1vcnkgYWxsb2NhdGlvbiBmYWls
ZWQuIiwgLyogTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUiAqLwotICAgICJQbHVnLWluIG1pc3Np
bmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BMVUdJTl9FUlJPUiAqLwotICAgICJQ
bHVnLWluIGRpcmVjdG9yeSBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9Q
TFVHSU5fRElSX0VSUk9SICovCi0gICAgIlZlcnNpb25zIG9mIHBsdWctaW4gYW5kIENvbW11bmlj
YXRvciBkbyBub3QgbWF0Y2guIiwgLyogTlBFUlJfSU5DT01QQVRJQkxFX1ZFUlNJT05fRVJST1Ig
Ki8KLSAgICAiUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElE
X1BBUkFNICovCi0gICAgIlVSTCBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJ
RF9VUkwgKi8KLSAgICAiRmlsZSBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfRklMRV9O
T1RfRk9VTkQgKi8KLSAgICAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIiwgLyogTlBFUlJfTk9f
REFUQSAqLwotICAgICJTZWVrYWJsZSBzdHJlYW0gZXhwZWN0ZWQuIiwgLyogTlBFUlJfU1RSRUFN
X05PVF9TRUVLQUJMRSAqLwotICAgICJVbmtub3duIGVycm9yIGNvZGUiCi19OwotCi0jaWZkZWYg
WFBfTUFDT1NYCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHJhd2luZ01vZGVsc1tdID0gewot
ICAgICJOUERyYXdpbmdNb2RlbFF1aWNrRHJhdyIsCi0gICAgIk5QRHJhd2luZ01vZGVsQ29yZUdy
YXBoaWNzIiwKLSAgICAiTlBEcmF3aW5nTW9kZWxPcGVuR0wiLAotICAgICJOUERyYXdpbmdNb2Rl
bENvcmVBbmltYXRpb24iCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXZlbnRNb2Rl
bHNbXSA9IHsKLSAgICAiTlBFdmVudE1vZGVsQ2FyYm9uIiwKLSAgICAiTlBFdmVudE1vZGVsQ29j
b2EiCi19OwotI2VuZGlmIC8vWFBfTUFDT1NYCi0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JO
UEVycm9yKE5QRXJyb3IgZXJyb3IpCi17Ci0gICAgcmV0dXJuIGVycm9yU3RyaW5nc1tlcnJvcl07
Ci19Ci0KLSNpZmRlZiBYUF9NQUNPU1gKLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JEcmF3aW5n
TW9kZWwoTlBEcmF3aW5nTW9kZWwgZHJhd2luZ01vZGVsKQotewotICAgIHJldHVybiBkcmF3aW5n
TW9kZWxzW2RyYXdpbmdNb2RlbF07Ci19Ci0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JFdmVu
dE1vZGVsKE5QRXZlbnRNb2RlbCBldmVudE1vZGVsKQotewotICAgIHJldHVybiBldmVudE1vZGVs
c1tldmVudE1vZGVsXTsKLX0KLSNlbmRpZiAvL1hQX01BQ09TWAotCi1DU3RyaW5nIHByZXR0eU5h
bWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSkKLXsKLSAgICBzd2l0Y2ggKHZh
cmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WeERpc3BsYXk6IHJldHVybiAiTlBOVnhEaXNwbGF5IjsK
LSAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHJldHVybiAiTlBOVnh0QXBwQ29udGV4dCI7Ci0g
ICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHJldHVybiAiTlBOVm5ldHNjYXBlV2luZG93IjsK
LSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6IHJldHVybiAiTlBOVmphdmFzY3Jp
cHRFbmFibGVkQm9vbCI7Ci0gICAgY2FzZSBOUE5WYXNkRW5hYmxlZEJvb2w6IHJldHVybiAiTlBO
VmFzZEVuYWJsZWRCb29sIjsKLSAgICBjYXNlIE5QTlZpc09mZmxpbmVCb29sOiByZXR1cm4gIk5Q
TlZpc09mZmxpbmVCb29sIjsKLQotICAgIGNhc2UgTlBOVnNlcnZpY2VNYW5hZ2VyOiByZXR1cm4g
Ik5QTlZzZXJ2aWNlTWFuYWdlciAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBOVkRPTUVs
ZW1lbnQ6IHJldHVybiAiTlBOVkRPTUVsZW1lbnQgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNl
IE5QTlZET01XaW5kb3c6IHJldHVybiAiTlBOVkRPTVdpbmRvdyAobm90IHN1cHBvcnRlZCkiOwot
ICAgIGNhc2UgTlBOVlRvb2xraXQ6IHJldHVybiAiTlBOVlRvb2xraXQgKG5vdCBzdXBwb3J0ZWQp
IjsKLSAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHJldHVybiAiTlBOVlN1cHBvcnRz
WEVtYmVkQm9vbCAobm90IHN1cHBvcnRlZCkiOwotCi0gICAgY2FzZSBOUE5WV2luZG93TlBPYmpl
Y3Q6IHJldHVybiAiTlBOVldpbmRvd05QT2JqZWN0IjsKLSAgICBjYXNlIE5QTlZQbHVnaW5FbGVt
ZW50TlBPYmplY3Q6IHJldHVybiAiTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdCI7Ci0gICAgY2Fz
ZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOiByZXR1cm4gIk5QTlZTdXBwb3J0c1dpbmRvd2xlc3Mi
OwotICAgIGNhc2UgTlBOVnByaXZhdGVNb2RlQm9vbDogcmV0dXJuICJOUE5WcHJpdmF0ZU1vZGVC
b29sIjsKLQotI2lmZGVmIFhQX01BQ09TWAotICAgIGNhc2UgTlBOVnBsdWdpbkRyYXdpbmdNb2Rl
bDogcmV0dXJuICJOUE5WcGx1Z2luRHJhd2luZ01vZGVsIjsKLSNpZm5kZWYgTlBfTk9fUVVJQ0tE
UkFXCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNRdWlja0RyYXdCb29sOiByZXR1cm4gIk5QTlZzdXBw
b3J0c1F1aWNrRHJhd0Jvb2wiOwotI2VuZGlmCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlR3Jh
cGhpY3NCb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c0NvcmVHcmFwaGljc0Jvb2wiOwotICAgIGNh
c2UgTlBOVnN1cHBvcnRzT3BlbkdMQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNPcGVuR0xCb29s
IjsKLSAgICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVBbmltYXRpb25Cb29sOiByZXR1cm4gIk5QTlZz
dXBwb3J0c0NvcmVBbmltYXRpb25Cb29sIjsKLSNpZm5kZWYgTlBfTk9fQ0FSQk9OCi0gICAgY2Fz
ZSBOUE5Wc3VwcG9ydHNDYXJib25Cb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c0NhcmJvbkJvb2wi
OwotI2VuZGlmCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNDb2NvYUJvb2w6IHJldHVybiAiTlBOVnN1
cHBvcnRzQ29jb2FCb29sIjsKLSNlbmRpZgotCi0gICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3du
IHZhcmlhYmxlIjsKLSAgICB9Ci19Ci0KLUNTdHJpbmcgcHJldHR5TmFtZUZvck5QUFZhcmlhYmxl
KE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHZhcmlh
YmxlKSB7Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmFtZVN0cmluZzogcmV0dXJuICJOUFBWcGx1Z2lu
TmFtZVN0cmluZyI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmc6IHJldHVy
biAiTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5XaW5k
b3dCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5XaW5kb3dCb29sIjsKLSAgICBjYXNlIE5QUFZwbHVn
aW5UcmFuc3BhcmVudEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbCI7Ci0K
LSAgICBjYXNlIE5QUFZqYXZhQ2xhc3M6IHJldHVybiAiTlBQVmphdmFDbGFzcyAobm90IHN1cHBv
cnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd1NpemU6IHJldHVybiAiTlBQVnBsdWdp
bldpbmRvd1NpemUgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5UaW1lcklu
dGVydmFsOiByZXR1cm4gIk5QUFZwbHVnaW5UaW1lckludGVydmFsIChub3Qgc3VwcG9ydGVkKSI7
Ci0gICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlOiByZXR1cm4gIk5QUFZwbHVn
aW5TY3JpcHRhYmxlSW5zdGFuY2UgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVn
aW5TY3JpcHRhYmxlSUlEOiByZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRhYmxlSUlEIChub3Qgc3Vw
cG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWamF2YXNjcmlwdFB1c2hDYWxsZXJCb29sOiByZXR1cm4g
Ik5QUFZqYXZhc2NyaXB0UHVzaENhbGxlckJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNl
IE5QUFZwbHVnaW5LZWVwTGlicmFyeUluTWVtb3J5OiByZXR1cm4gIk5QUFZwbHVnaW5LZWVwTGli
cmFyeUluTWVtb3J5IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmVlZHNY
RW1iZWQ6IHJldHVybiAiTlBQVnBsdWdpbk5lZWRzWEVtYmVkIChub3Qgc3VwcG9ydGVkKSI7Ci0K
LSAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3Q6IHJldHVybiAiTlBQVnBsdWdp
blNjcmlwdGFibGVOUE9iamVjdCI7Ci0KLSAgICBjYXNlIE5QUFZmb3JtVmFsdWU6IHJldHVybiAi
TlBQVmZvcm1WYWx1ZSAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpblVybFJl
cXVlc3RzRGlzcGxheWVkQm9vbDogcmV0dXJuICJOUFBWcGx1Z2luVXJsUmVxdWVzdHNEaXNwbGF5
ZWRCb29sIChub3Qgc3VwcG9ydGVkKSI7Ci0KLSAgICBjYXNlIE5QUFZwbHVnaW5XYW50c0FsbE5l
dHdvcmtTdHJlYW1zOiByZXR1cm4gIk5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zIjsK
LSAgICBjYXNlIE5QUFZwbHVnaW5DYW5jZWxTcmNTdHJlYW06IHJldHVybiAiTlBQVnBsdWdpbkNh
bmNlbFNyY1N0cmVhbSI7Ci0KLSNpZmRlZiBYUF9NQUNPU1gKLSAgICBjYXNlIE5QUFZwbHVnaW5E
cmF3aW5nTW9kZWw6IHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCgiTlBQVnBsdWdpbkRyYXdpbmdN
b2RlbCwgIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocHJldHR5TmFtZUZvckRyYXdpbmdNb2Rl
bChOUERyYXdpbmdNb2RlbCh1aW50cHRyX3QodmFsdWUpKSkpOwotICAgICAgICByZXR1cm4gcmVz
dWx0LmxhdGluMSgpOwotICAgIH0KLSAgICBjYXNlIE5QUFZwbHVnaW5FdmVudE1vZGVsOiB7Ci0g
ICAgICAgIFN0cmluZyByZXN1bHQoIk5QUFZwbHVnaW5FdmVudE1vZGVsLCAiKTsKLSAgICAgICAg
cmVzdWx0LmFwcGVuZChwcmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwodWludHB0
cl90KHZhbHVlKSkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5sYXRpbjEoKTsKLSAgICB9Ci0g
ICAgY2FzZSBOUFBWcGx1Z2luQ29yZUFuaW1hdGlvbkxheWVyOiByZXR1cm4gIk5QUFZwbHVnaW5D
b3JlQW5pbWF0aW9uTGF5ZXIiOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2Vu
ZGlmCi0KLSAgICBkZWZhdWx0OiByZXR1cm4gIlVua25vd24gdmFyaWFibGUiOwotICAgIH0KLX0K
LQotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFy
aWFibGUpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBOVVJMVkNvb2tp
ZTogcmV0dXJuICJOUE5VUkxWQ29va2llIjsKLSAgICBjYXNlIE5QTlVSTFZQcm94eTogcmV0dXJu
ICJOUE5VUkxWUHJveHkiOwotICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7
Ci0gICAgfQotfQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNB
QkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5oIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2Njc0ODVlOTA5MjhhMDVmY2JkYTgyOTQwYTczOTY3MDk4NzFkYjYxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgUGx1Z2luRGVidWdfaAotI2RlZmluZSBQbHVnaW5EZWJ1Z19oCi0KLSNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIExPR19OUEVSUk9SKGVycikgaWYgKGVyciAhPSBOUEVS
Ul9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lucywgIiVzXG4iLCBwcmV0dHlOYW1lRm9yTlBF
cnJvcihlcnIpKQotI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigpIExPR19WRVJCT1NFKFBs
dWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVtcyB3aXRoIG5ldHdvcmssIGRpc2sg
SS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxlbXMuXG4iKQotCi0jaWYgIUxPR19E
SVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVG
b3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOwotCi1DU3RyaW5nIHByZXR0eU5hbWVGb3JOUE5WYXJp
YWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7Ci1DU3RyaW5nIHByZXR0eU5hbWVGb3JOUFBWYXJp
YWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwotQ1N0cmluZyBwcmV0dHlO
YW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUpOwotCi0jaWZkZWYg
WFBfTUFDT1NYCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRHJhd2luZ01vZGVsKE5QRHJhd2lu
Z01vZGVsIGRyYXdpbmdNb2RlbCk7Ci1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRXZlbnRNb2Rl
bChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCk7Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxFRAotCi0jZW5kaWYgLy8gUGx1Z2luRGVidWdf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDdlMDk5ODgwNDk3MWNhZTVhYmE2M2NkNmNkYzEzNDVmZTdjMjQwZTQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotCi0jaW5jbHVk
ZSAiY191dGlsaXR5LmgiCi0jaW5jbHVkZSAiSWRlbnRpZmllclJlcC5oIgotI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOUF9qc29iamVjdC5oIgotI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIK
LSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCi17Ci0g
ICAgLy8gVGhpcyBkZXN0cnVjdG9yIGdldHMgY2FsbGVkIGR1cmluZyByZWZyZXNoKCkgaWYgUGx1
Z2luRGF0YWJhc2UncwotICAgIC8vIFBsdWdpblNldCBoYXNoIGlzIGFscmVhZHkgcG9wdWxhdGVk
LCBhcyBpdCByZW1vdmVzIGl0ZW1zIGZyb20KLSAgICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2FsbGlu
ZyB0aGUgZGVzdHJ1Y3RvciBvbiBhIGxvYWRlZCBwbHVnLWluIG9mCi0gICAgLy8gY291cnNlIHdv
dWxkIGNhdXNlIGEgY3Jhc2gsIHNvIHdlIGNoZWNrIHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3ZQot
ICAgIC8vIEFTU0VSVC4KLSAgICAvLyBGSVhNRTogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIg
d2F5IHRvIGZpeCB0aGlzLgotICAgIGlmICghbV9sb2FkQ291bnQpCi0gICAgICAgIHVubG9hZFdp
dGhvdXRTaHV0ZG93bigpOwotICAgIGVsc2UKLSAgICAgICAgdW5sb2FkKCk7Ci0KLSAgICBBU1NF
UlQoIW1faXNMb2FkZWQpOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5U29v
bigpCi17Ci0gICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAg
QVNTRVJUKG1fbW9kdWxlKTsKLSAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKLQotICAgIG1fZnJl
ZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6
ZnJlZUxpYnJhcnlUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgIC8v
IERvIG5vdGhpbmcgaWYgdGhlIG1vZHVsZSBnb3QgbG9hZGVkIGFnYWluIG1lYW53aGlsZQotICAg
IGlmICghbV9sb2FkQ291bnQpIHsKLSAgICAgICAgdW5sb2FkTW9kdWxlKG1fbW9kdWxlKTsKLSAg
ICAgICAgbV9tb2R1bGUgPSAwOwotICAgIH0KLX0KLQotCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29t
cGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Ci17Ci0gICAgLy8gU29y
dCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4KLSAgICBib29s
IEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAgICBib29sIEJhbGxvd3NNdWx0aXBsZUlu
c3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxs
b3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgaWYgKEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyAh
PSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCi0gICAgICAgIHJldHVybiBBYWxsb3dzTXVsdGlw
bGVJbnN0YW5jZXMgPyAtMSA6IDE7Ci0KLSAgICAvLyBTb3J0IHBsdWctaW5zIGluIGEgcHJlZmVy
cmVkIHBhdGggZmlyc3QuCi0gICAgYm9vbCBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdp
bkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShwYXJlbnREaXJlY3RvcnkoKSk7
Ci0gICAgYm9vbCBCaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFiYXNlOjppc1By
ZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkpOwotICAg
IGlmIChBaXNJblByZWZlcnJlZERpcmVjdG9yeSAhPSBCaXNJblByZWZlcnJlZERpcmVjdG9yeSkK
LSAgICAgICAgcmV0dXJuIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ID8gLTEgOiAxOwotCi0gICAg
aW50IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5uYW1lKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKGRpZmYpCi0gICAgICAgIHJldHVybiBkaWZmOwotCi0g
ICAgZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKTsKLSAgICBp
ZiAoZGlmZikKLSAgICAgICAgcmV0dXJuIGRpZmY7Ci0KLSAgICByZXR1cm4gc3RyY21wKHBhcmVu
dERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51
dGY4KCkuZGF0YSgpKTsKLX0KLQotUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQotICAgIDogbV9pc0VuYWJs
ZWQodHJ1ZSkKLSAgICAsIG1faXNMb2FkZWQoZmFsc2UpCi0gICAgLCBtX2xvYWRDb3VudCgwKQot
ICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX21vZHVsZVZlcnNpb24oMCkKLSAgICAsIG1fbW9k
dWxlKDApCi0gICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCi0gICAgLCBtX2ZyZWVM
aWJyYXJ5VGltZXIoKnRoaXMsICZQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQp
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAsIG1faW5m
b0lzRnJvbUNhY2hlKHRydWUpCi0jZW5kaWYKLXsKLSAgICBtX2ZpbGVOYW1lID0gcGF0aEdldEZp
bGVOYW1lKG1fcGF0aCk7Ci0gICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3Bh
dGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7Ci19Ci0KLXZvaWQgUGx1Z2lu
UGFja2FnZTo6dW5sb2FkKCkKLXsKLSAgICBpZiAoIW1faXNMb2FkZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9OUFBfU2h1dGRvd24oKTsKLSNlbmRp
ZgotCi0gICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2Fn
ZTo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKLXsKLSAgICBpZiAoIW1faXNMb2FkZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9sb2FkQ291bnQpOwotICAgIEFTU0VSVChtX21v
ZHVsZSk7Ci0KLSAgICAvLyA8cmRhcjovLzU1MzA1MTk+OiBDcmFzaCB3aGVuIGNsb3NpbmcgdGFi
IHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkpCi0gICAgLy8gSWYgdGhlIHBsdWdpbiBoYXMg
c3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywgYXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5IGhh
dmUKLSAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkgb2YgdGhlIHBsdWdpbidzIGludGVybmFsIHdp
bmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdlIHRvIG91cgotICAgIC8vIG9yaWdpbmFsIHdp
bmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVnaW4gbGlicmFyeSBmcm9tIGhlcmUsIHdlIHdp
bGwganVtcCBiYWNrCi0gICAgLy8gdG8gY29kZSB3ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0dXJu
LCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5IGF0IGxlYXN0IHVudGlsCi0gICAgLy8gdGhl
IG5leHQgbWVzc2FnZSBsb29wCi0gICAgZnJlZUxpYnJhcnlTb29uKCk7Ci0KLSAgICBtX2lzTG9h
ZGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZChib29sIGVu
YWJsZWQpCi17Ci0gICAgbV9pc0VuYWJsZWQgPSBlbmFibGVkOwotfQotCi1QYXNzUmVmUHRyPFBs
dWdpblBhY2thZ2U+IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKLXsKLSAgICBSZWZQdHI8UGx1Z2luUGFj
a2FnZT4gcGFja2FnZSA9IGFkb3B0UmVmKG5ldyBQbHVnaW5QYWNrYWdlKHBhdGgsIGxhc3RNb2Rp
ZmllZCkpOwotCi0gICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBQ
bHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pCi17Ci0gICAg
UmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2Fn
ZShwYXRoLCBsYXN0TW9kaWZpZWQpKTsKLSAgICBwYWNrYWdlLT5tX25hbWUgPSBuYW1lOwotICAg
IHBhY2thZ2UtPm1fZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICBwYWNrYWdlLT5kZXRl
cm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCk7Ci0gICAgcGFja2FnZS0+c2V0TUlN
RURlc2NyaXB0aW9uKG1pbWVEZXNjcmlwdGlvbik7Ci0gICAgcGFja2FnZS0+bV9pbmZvSXNGcm9t
Q2FjaGUgPSB0cnVlOwotICAgIHJldHVybiBwYWNrYWdlLnJlbGVhc2UoKTsKLX0KLSNlbmRpZgot
Ci0jaWYgZGVmaW5lZChYUF9VTklYKQotdm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWly
a3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6
aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7Ci0gICAgICAgIC8vIEJlY2F1c2UgYSBz
aW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCBy
ZWxpYWJseSB1bmxvYWQgYQotICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRo
ZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KLSAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICAg
ICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1c2Vz
IGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcwotICAgICAgICAvLyB3aXRoIHRoZSBKYXZh
IHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJv
UmVjdFdoZW5TY3JvbGxpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1p
bWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBmbGFzaFRlblZlcnNpb24oMHgwYTAwMDAw
MCk7Ci0KLSAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihmbGFzaFRlblZlcnNpb24pID49
IDApIHsKLSAgICAgICAgICAgIC8vIEZsYXNoIDEwLjAgYjIxOCBkb2Vzbid0IGxpa2UgaGF2aW5n
IGEgTlVMTCB3aW5kb3cgaGFuZGxlCi0gICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVp
cmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBGbGFzaCA5IGFuZCBvbGRlciByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdp
bnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50Ci0gICAgICAgICAgICBtX3F1aXJr
cy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOwotICAgICAgICB9Ci0KLSNp
ZiBDUFUoWDg2XzY0KQotICAgICAgICAvLyA2NC1iaXQgRmxhc2ggZnJlZXplcyBpZiByaWdodC1j
bGljayBpcyBzZW50IGluIHdpbmRvd2xlc3MgbW9kZQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSk7Ci0jZW5kaWYKLQotICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCk7
Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0g
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3Nh
Z2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcp
OwotICAgIH0KLX0KLSNlbmRpZgotCi0jaWYgIU9TKFdJTkRPV1MpCi12b2lkIFBsdWdpblBhY2th
Z2U6OmRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKQotewotICAgIC8vIEl0
J3MgYSBiaXQgbGFtZSB0byBkZXRlY3QgdGhlIHBsdWdpbiB2ZXJzaW9uIGJ5IHBhcnNpbmcgaXQK
LSAgICAvLyBmcm9tIHRoZSBwbHVnaW4gZGVzY3JpcHRpb24gc3RyaW5nLCBidXQgaXQgZG9lc24n
dCBzZWVtIHRoYXQKLSAgICAvLyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBh
bnkgc3RhbmRhcmRpemVkIHdheSBhdAotICAgIC8vIHRoZSBtb2R1bGUgbGV2ZWwsIGxpa2UgaW4g
V2luZG93cwotCi0gICAgaWYgKG1fZGVzY3JpcHRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9kZXNjcmlwdGlvbi5zdGFydHNXaXRoKCJTaG9ja3dhdmUgRmxhc2gi
KSAmJiBtX2Rlc2NyaXB0aW9uLmxlbmd0aCgpID49IDE5KSB7Ci0gICAgICAgIC8vIFRoZSBmbGFz
aCB2ZXJzaW9uIGFzIGEgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGRpZmZlcnMgb24gVW5peCBmcm9t
IFdpbmRvd3MKLSAgICAgICAgLy8gc2luY2UgdGhlIHJldmlzaW9uIGNhbiBiZSBsYXJnZXIgdGhh
biBhIDggYml0cywgc28gd2UgYWxsb3cgaXQgMTYgaGVyZSBhbmQKLSAgICAgICAgLy8gcHVzaCB0
aGUgbWFqb3IvbWlub3IgdXAgOCBiaXRzLiBUaHVzIG9uIFVuaXgsIEZsYXNoJ3MgdmVyc2lvbiBt
YXkgYmUKLSAgICAgICAgLy8gMHgwYTAwMDAwMCBpbnN0ZWFkIG9mIDB4MDAwYTAwMDAuCi0KLSAg
ICAgICAgVmVjdG9yPFN0cmluZz4gdmVyc2lvblBhcnRzOwotICAgICAgICBtX2Rlc2NyaXB0aW9u
LnN1YnN0cmluZygxNikuc3BsaXQoJyAnLCAvKmFsbG93RW1wdHlFbnRyaWVzID0qLyBmYWxzZSwg
dmVyc2lvblBhcnRzKTsKLSAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5zaXplKCkgPj0gMSkg
ewotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gbWFqb3JNaW5vclBhcnRzOwotICAgICAgICAg
ICAgdmVyc2lvblBhcnRzWzBdLnNwbGl0KCcuJywgbWFqb3JNaW5vclBhcnRzKTsKLSAgICAgICAg
ICAgIGlmIChtYWpvck1pbm9yUGFydHMuc2l6ZSgpID49IDEpIHsKLSAgICAgICAgICAgICAgICBi
b29sIGNvbnZlcnRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1ham9yID0g
bWFqb3JNaW5vclBhcnRzWzBdLnRvVUludCgmY29udmVydGVkKTsKLSAgICAgICAgICAgICAgICBp
ZiAoY29udmVydGVkKQotICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gPSAobWFq
b3IgJiAweGZmKSA8PCAyNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtYWpvck1p
bm9yUGFydHMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAgICAgICAgICBib29sIGNvbnZlcnRlZCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbm9yID0gbWFqb3JNaW5vclBhcnRz
WzFdLnRvVUludCgmY29udmVydGVkKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udmVydGVkKQot
ICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0gKG1pbm9yICYgMHhmZikgPDwg
MTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmVyc2lvblBhcnRz
LnNpemUoKSA+PSAyKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcmV2aXNpb24gPSB2ZXJzaW9uUGFy
dHNbMV07Ci0gICAgICAgICAgICBpZiAocmV2aXNpb24ubGVuZ3RoKCkgPiAxICYmIChyZXZpc2lv
blswXSA9PSAncicgfHwgcmV2aXNpb25bMF0gPT0gJ2InKSkgewotICAgICAgICAgICAgICAgIHJl
dmlzaW9uLnJlbW92ZSgwLCAxKTsKLSAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0g
cmV2aXNpb24udG9JbnQoKSAmIDB4ZmZmZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1zdGF0aWMg
dm9pZCBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBO
UFZhcmlhbnQqIGFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0KiByb290T2JqZWN0LCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhTGlzdCkKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKLSAgICAgICAgYUxpc3Qu
YXBwZW5kKEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZhcmdz
W2ldLCByb290T2JqZWN0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNDOjpTb3VyY2VDb2RlIG1h
a2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsID0gU3RyaW5n
KCksIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6bWlu
aW11bVBvc2l0aW9uKCkpCi17Ci0gICAgcmV0dXJuIEpTQzo6U291cmNlQ29kZShKU0M6OlN0cmlu
Z1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1cmwsIHN0YXJ0UG9zaXRpb24pLCBzdGFy
dFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9u
ZUJhc2VkSW50KCkpOwotfQotCi1zdGF0aWMgYm9vbCBOUE5fRXZhbHVhdGUoTlBQIGluc3RhbmNl
LCBOUE9iamVjdCogbywgTlBTdHJpbmcqIHMsIE5QVmFyaWFudCogdmFyaWFudCkKLXsKLSAgICBp
ZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlw
dE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7Ci0K
LSAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9v
dE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gVGhlcmUgaXMgYSBj
cmFzaCBpbiBGbGFzaCB3aGVuIGV2YWx1YXRpbmcgYSBzY3JpcHQgdGhhdCBkZXN0cm95cyB0aGUK
LSAgICAgICAgLy8gUGx1Z2luVmlldywgc28gd2UgZGVzdHJveSBpdCBhc3luY2hyb25vdXNseS4K
LSAgICAgICAgUGx1Z2luVmlldzo6a2VlcEFsaXZlKGluc3RhbmNlKTsKLQotICAgICAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgICAgIFN0cmlu
ZyBzY3JpcHRTdHJpbmcgPSBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMp
OwotCi0gICAgICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShzY3JpcHRT
dHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7Ci0KLSAgICAgICAgSlNDOjpCaW5kaW5nczo6Y29udmVy
dFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmV0dXJuVmFsdWUsIHZhcmlhbnQpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBWT0lEX1RPX05QVkFSSUFOVCgqdmFyaWFudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1z
dGF0aWMgYm9vbCBOUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIg
bWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENs
YXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SmF2YVNjcmlwdE9iamVjdCo+KG8pOwotCi0gICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0
aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4obWV0aG9kTmFtZSk7Ci0gICAgICAgIGlmICghaS0+aXNT
dHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBTcGVjaWFs
IGNhc2UgdGhlICJldmFsIiBtZXRob2QuCi0gICAgICAgIGlmIChtZXRob2ROYW1lID09IF9OUE5f
R2V0U3RyaW5nSWRlbnRpZmllcigiZXZhbCIpKSB7Ci0gICAgICAgICAgICBpZiAoYXJnQ291bnQg
IT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYXJn
c1swXS50eXBlICE9IE5QVmFyaWFudFR5cGVfU3RyaW5nKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpOUE5fRXZhbHVhdGUobnBwLCBv
LCBjb25zdF9jYXN0PE5QU3RyaW5nKj4oJmFyZ3NbMF0udmFsdWUuc3RyaW5nVmFsdWUpLCByZXN1
bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0
LgotICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5y
b290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgICAgICBKU0M6OkpTVmFsdWUgZnVu
Y3Rpb24gPSBvYmotPmltcC0+Z2V0KGV4ZWMsIEpTQzo6QmluZGluZ3M6OmlkZW50aWZpZXJGcm9t
TlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7Ci0gICAgICAgIEpTQzo6Q2FsbERhdGEg
Y2FsbERhdGE7Ci0gICAgICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShm
dW5jdGlvbiwgY2FsbERhdGEpOwotICAgICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlw
ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gQ2FsbCB0aGUg
ZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xp
c3Q7Ci0gICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoZXhlYywgYXJncywgYXJnQ291bnQs
IHJvb3RPYmplY3QsIGFyZ0xpc3QpOwotICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ViA9IEpT
Qzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmotPmltcCwgYXJn
TGlzdCk7Ci0KLSAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhl
IGZ1bmN0aW9uIGNhbGwuCi0gICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBW
YXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChvLT5fY2xhc3Mt
Pmludm9rZSkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+aW52b2tlKG8sIG1ldGhvZE5hbWUs
IGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOwotCi0gICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6aW5pdGlhbGl6
ZUJyb3dzZXJGdW5jcygpCi17Ci0gICAgbWVtc2V0KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6ZW9m
KG1fYnJvd3NlckZ1bmNzKSk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZihtX2Jy
b3dzZXJGdW5jcyk7Ci0gICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QVmVyc2lvbigpOwot
Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7Ci0gICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJl
YWQgPSBOUE5fUmVxdWVzdFJlYWQ7Ci0gICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBO
X05ld1N0cmVhbTsKLSAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07Ci0gICAgbV9i
cm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKLSAgICBtX2Jyb3dzZXJGdW5jcy51YWdl
bnQgPSBOUE5fVXNlckFnZW50OwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01l
bUFsbG9jOwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7Ci0gICAgbV9icm93c2VyRnVuY3Mu
Z2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0
dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dmFs
dWUgPSBOUE5fR2V0VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0
VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0
ZVJlY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlk
YXRlUmVnaW9uOwotICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVk
cmF3OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVk
U3RhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1Bv
cFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wbHVnaW50aHJlYWRhc3lu
Y2NhbGwgPSBOUE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsOwotCi0gICAgbV9icm93c2VyRnVuY3Mu
cmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVy
OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyczsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05Q
Tl9HZXRJbnRJZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmlu
ZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOwotICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9t
aWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNz
LmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRpZmllcjsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OwotICAgIG1fYnJvd3NlckZ1bmNz
Lmludm9rZSA9IFdlYkNvcmU6Ok5QTl9JbnZva2U7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52b2tl
RGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0
ZSA9IFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0
eSA9IF9OUE5fR2V0UHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBf
TlBOX1NldFByb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05Q
Tl9SZW1vdmVQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5f
SGFzUHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNNZXRo
b2Q7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247
Ci0gICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7Ci0gICAgbV9i
cm93c2VyRnVuY3MuY29uc3RydWN0ID0gX05QTl9Db25zdHJ1Y3Q7Ci0gICAgbV9icm93c2VyRnVu
Y3MuZ2V0dmFsdWVmb3J1cmwgPSBOUE5fR2V0VmFsdWVGb3JVUkw7Ci0gICAgbV9icm93c2VyRnVu
Y3Muc2V0dmFsdWVmb3J1cmwgPSBOUE5fU2V0VmFsdWVGb3JVUkw7Ci0gICAgbV9icm93c2VyRnVu
Y3MuZ2V0YXV0aGVudGljYXRpb25pbmZvID0gTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mbzsKLQot
ICAgIG1fYnJvd3NlckZ1bmNzLnBvcHVwY29udGV4dG1lbnUgPSBOUE5fUG9wVXBDb250ZXh0TWVu
dTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2lmIEVOQUJM
RShQTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCkKLXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhh
c2goKSBjb25zdAotewotICAgIHN0cnVjdCBIYXNoQ29kZXMgewotICAgICAgICB1bnNpZ25lZCBo
YXNoOwotICAgICAgICB0aW1lX3QgbW9kaWZpZWREYXRlOwotICAgIH0gaGFzaENvZGVzOwotCi0g
ICAgaGFzaENvZGVzLmhhc2ggPSBtX3BhdGguaW1wbCgpLT5oYXNoKCk7Ci0gICAgaGFzaENvZGVz
Lm1vZGlmaWVkRGF0ZSA9IG1fbGFzdE1vZGlmaWVkOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oJmhhc2hDb2Rlcyk7Ci19Ci0KLWJvb2wg
UGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2lu
UGFja2FnZSYgYikKLXsKLSAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlw
dGlvbjsKLX0KLSNlbmRpZgotCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9u
KGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0Ci17Ci0g
ICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4s
IGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KLSAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KLQot
I2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5tb3N0U2lnICE9IGNvbXBh
cmVWZXJzaW9uLm1vc3RTaWcpCi0gICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24ubW9zdFNp
ZyA+IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcgPyAxIDogLTE7Ci0gICAgaWYgKG1fbW9kdWxlVmVy
c2lvbi5sZWFzdFNpZyAhPSBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZykKLSAgICAgICAgcmV0dXJu
IG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA+IGNvbXBhcmVWZXJzaW9uLmxlYXN0U2lnID8gMSA6
IC0xOwotI2Vsc2UgICAgCi0gICAgaWYgKG1fbW9kdWxlVmVyc2lvbiAhPSBjb21wYXJlVmVyc2lv
bikKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbiA+IGNvbXBhcmVWZXJzaW9uID8gMSA6
IC0xOwotI2VuZGlmCi0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fTUVUQURBVEFfQ0FDSEUpCi1ib29sIFBsdWdpblBhY2thZ2U6OmVuc3VyZVBsdWdpbkxv
YWRlZCgpCi17Ci0gICAgaWYgKCFtX2luZm9Jc0Zyb21DYWNoZSkKLSAgICAgICAgcmV0dXJuIG1f
aXNMb2FkZWQ7Ci0KLSAgICBtX3F1aXJrcyA9IFBsdWdpblF1aXJrU2V0KCk7Ci0gICAgbV9uYW1l
ID0gU3RyaW5nKCk7Ci0gICAgbV9kZXNjcmlwdGlvbiA9IFN0cmluZygpOwotICAgIG1fZnVsbE1J
TUVEZXNjcmlwdGlvbiA9IFN0cmluZygpOwotICAgIG1fbW9kdWxlVmVyc2lvbiA9IDA7Ci0KLSAg
ICByZXR1cm4gZmV0Y2hJbmZvKCk7Ci19Ci0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblBhY2thZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgzNDA1NzY3
OTdhYTZiYzgzMTc3MmJjM2I0ZjljY2Y4Y2M4YmE2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2th
Z2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpblBhY2th
Z2VfaAotI2RlZmluZSBQbHVnaW5QYWNrYWdlX2gKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
LSNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgi
Ci0jZW5kaWYKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOwotCi0g
ICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5QbHVnaW5QYWNrYWdlKCk7Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUGFj
a2FnZT4gY3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRp
bWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsKLSNlbmRpZgotCi0gICAg
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgICAg
ICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlv
bjsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7
IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBwYXJlbnREaXJlY3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudERpcmVjdG9yeTsgfQotICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtb2R1
bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZTsgfQotICAgICAgICB1aW50MTZfdCBOUFZlcnNp
b24oKSBjb25zdDsKLSAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFzdE1vZGlmaWVkOyB9Ci0KLSAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFw
JiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9u
czsgfQotICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9Ci0KLSAgICAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5Q
YWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKTsKLQotICAgICAgICBib29sIGxvYWQo
KTsKLSAgICAgICAgdm9pZCB1bmxvYWQoKTsKLSAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1
dGRvd24oKTsKLQotICAgICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNF
bmFibGVkOyB9Ci0gICAgICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5G
dW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9Ci0jZW5kaWYKLSAgICAgICAg
aW50IGNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25z
dDsKLSAgICAgICAgaW50IGNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0OwotICAg
ICAgICBQbHVnaW5RdWlya1NldCBxdWlya3MoKSBjb25zdCB7IHJldHVybiBtX3F1aXJrczsgfQot
ICAgICAgICBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIHZlcnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX21vZHVsZVZlcnNpb247IH0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVU
QURBVEFfQ0FDSEUpCi0gICAgICAgIGJvb2wgZW5zdXJlUGx1Z2luTG9hZGVkKCk7Ci0gICAgICAg
IHZvaWQgc2V0TUlNRURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsK
LSAgICAgICAgU3RyaW5nIGZ1bGxNSU1FRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1
bGxNSU1FRGVzY3JpcHRpb247fQotI2VuZGlmCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2lu
UGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsK
LQotICAgICAgICBib29sIGZldGNoSW5mbygpOwotICAgICAgICBib29sIGlzUGx1Z2luQmxhY2ts
aXN0ZWQoKTsKLSAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSk7Ci0KLSAgICAgICAgdm9pZCBkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0
aW9uKCk7Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOwotCi0gICAgICAg
IGJvb2wgbV9pc0VuYWJsZWQ7Ci0gICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKLSAgICAgICAgaW50
IG1fbG9hZENvdW50OwotCi0gICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOwotICAgICAgICBT
dHJpbmcgbV9wYXRoOwotICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKLSAgICAgICAgU3RyaW5n
IG1fbmFtZTsKLSAgICAgICAgU3RyaW5nIG1fcGFyZW50RGlyZWN0b3J5OwotCi0gICAgICAgIFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiBtX21vZHVsZVZlcnNpb247Ci0KLSAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOwotICAgICAgICBNSU1FVG9FeHRlbnNp
b25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKLQotICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtX21v
ZHVsZTsKLSAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOwotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRv
d247Ci0gICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKLSAgICAgICAgTlBOZXRz
Y2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOwotI2VuZGlmCi0KLSAgICAgICAgdm9pZCBmcmVlTGli
cmFyeVNvb24oKTsKLSAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoKTsKLSAgICAg
ICAgVGltZXIgbV9mcmVlTGlicmFyeVRpbWVyOwotCi0gICAgICAgIFBsdWdpblF1aXJrU2V0IG1f
cXVpcmtzOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAg
ICAgIFN0cmluZyBtX2Z1bGxNSU1FRGVzY3JpcHRpb247Ci0gICAgICAgIGJvb2wgbV9pbmZvSXNG
cm9tQ2FjaGU7Ci0jZW5kaWYKLSAgICB9OwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3Jr
YXJvdW5kIGJlY2F1c2UgUGx1Z2luUGFja2FnZUhhc2ggaXMgYnJva2VuIGFuZCBtYXkgY29uc2lk
ZXIga2V5cyB3aXRoIGRpZmZlcmVudCBoYXNoZXMgYXMgZXF1YWwuCi0gICAgc3RydWN0IFBsdWdp
blBhY2thZ2VIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IDY0OwotICAgIH07
Ci0KLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2ggewotICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCB1aW50cHRyX3Qga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBs
dWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgp
OyB9Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgdWludHB0cl90IGEsIGNvbnN0
IHVpbnRwdHJfdCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2th
Z2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYikpOyB9Ci0gICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYgYSwgY29uc3Qg
UmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlOjplcXVhbCgq
YS5nZXQoKSwgKmIuZ2V0KCkpOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luUXVpcmtTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhMzM4M2RiYjQ0NjkwOTk0MDdkNmJkYTEy
M2QxMDFkY2I1ZDM4NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luUXVpcmtTZXRfaAotI2RlZmluZSBQbHVnaW5RdWly
a1NldF9oCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgZW51bSBQbHVnaW5RdWlyayB7
Ci0gICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50ID0gMSA8PCAwLAotICAg
ICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0gMSA8PCAxLAotICAgICAg
ICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwgCi0gICAgICAgIFBsdWdp
blF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMsCi0gICAgICAgIFBsdWdp
blF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8IDQsCi0gICAgICAgIFBs
dWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEgPDwgNSwKLSAgICAgICAgUGx1Z2luUXVpcmtE
b250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0gMSA8PCA2LAotICAgICAg
ICBQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3AgPSAxIDw8IDcsCi0gICAgICAgIFBsdWdp
blF1aXJrRmxhc2hVUkxOb3RpZnlCdWcgPSAxIDw8IDgsCi0gICAgICAgIFBsdWdpblF1aXJrRG9u
dENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyA9IDEgPDwgOSwKLSAgICAgICAgUGx1Z2luUXVp
cmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSA9IDEgPDwgMTAsCi0gICAgICAgIFBs
dWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMgPSAxIDw8IDExLAotICAgICAgICBQ
bHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCA9IDEgPDwgMTIsCi0gICAgICAgIFBsdWdpblF1
aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGggPSAxIDw8IDEzLAotICAgICAgICBQbHVnaW5R
dWlya0RvbnRDYWxsU2V0V2luZG93TW9yZVRoYW5PbmNlID0gMSA8PCAxNCwKLSAgICAgICAgUGx1
Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSA9IDEgPDwgMTUsCi0gICAg
ICAgIFBsdWdpblF1aXJrV2FudHNDaHJvbWVVc2VyQWdlbnQgPSAxIDw8IDE2Ci0gICAgfTsKLQot
ICAgIGNsYXNzIFBsdWdpblF1aXJrU2V0IHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAg
UGx1Z2luUXVpcmtTZXQoKSA6IG1fcXVpcmtzKDApIHsgfQotICAgICAgICAgICAgdm9pZCBhZGQo
UGx1Z2luUXVpcmsgcXVpcmspIHsgbV9xdWlya3MgfD0gcXVpcms7IH0KLSAgICAgICAgICAgIGJv
b2wgY29udGFpbnMoUGx1Z2luUXVpcmsgcXVpcmspIGNvbnN0IHsgcmV0dXJuIG1fcXVpcmtzICYg
cXVpcms7IH0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIG1fcXVpcmtz
OwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsdWdpblF1
aXJrU2V0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzliOWIxMjBmMWY0MjBjNmI0YTdjNmJmZjAwNzYzMzAwYjU1
ODI0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
ODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
LCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luU3Ry
ZWFtLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIK
LSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxl
ci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9h
ZGVyLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLS8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29t
ZSBwbHVnaW5zIGxpa2UgdG8gcmV0dXJuIC0xIHRvIGluZGljYXRlIGVycm9yCi0vLyBhbmQgdGhp
cyB3YXkgd2Ugd29uJ3QgY2xhc2ggd2l0aCB0aGVtLgotc3RhdGljIGNvbnN0IGludCBXZWJSZWFz
b25Ob25lID0gLTI7Ci0KLXVzaW5nIHN0ZDo6bWF4OwotdXNpbmcgc3RkOjptaW47Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNoTWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1N
YXA7Ci1zdGF0aWMgU3RyZWFtTWFwJiBzdHJlYW1zKCkKLXsKLSAgICBzdGF0aWMgU3RyZWFtTWFw
IHN0YXRpY1N0cmVhbXM7Ci0gICAgcmV0dXJuIHN0YXRpY1N0cmVhbXM7Ci19Ci0KLVBsdWdpblN0
cmVhbTo6UGx1Z2luU3RyZWFtKFBsdWdpblN0cmVhbUNsaWVudCogY2xpZW50LCBGcmFtZSogZnJh
bWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1
bmNzLCBOUFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0JiBxdWlya3MpCi0gICAgOiBt
X3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpCi0gICAgLCBtX2NsaWVudChjbGllbnQp
Ci0gICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCi0g
ICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKLSAgICAsIG1fc3RyZWFt
U3RhdGUoU3RyZWFtQmVmb3JlU3RhcnRlZCkKLSAgICAsIG1fbG9hZE1hbnVhbGx5KGZhbHNlKQot
ICAgICwgbV9kZWxheURlbGl2ZXJ5VGltZXIoKnRoaXMsICZQbHVnaW5TdHJlYW06OmRlbGF5RGVs
aXZlcnlUaW1lckZpcmVkKQotICAgICwgbV90ZW1wRmlsZUhhbmRsZShpbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlKQotICAgICwgbV9wbHVnaW5GdW5jcyhwbHVnaW5GdW5jcykKLSAgICAsIG1faW5z
dGFuY2UoaW5zdGFuY2UpCi0gICAgLCBtX3F1aXJrcyhxdWlya3MpCi17Ci0gICAgQVNTRVJUKG1f
aW5zdGFuY2UpOwotCi0gICAgbV9zdHJlYW0udXJsID0gMDsKLSAgICBtX3N0cmVhbS5uZGF0YSA9
IDA7Ci0gICAgbV9zdHJlYW0ucGRhdGEgPSAwOwotICAgIG1fc3RyZWFtLmVuZCA9IDA7Ci0gICAg
bV9zdHJlYW0ubm90aWZ5RGF0YSA9IDA7Ci0gICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsK
LSAgICBtX3N0cmVhbS5oZWFkZXJzID0gMDsKLQotICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFt
LCBtX2luc3RhbmNlKTsKLX0KLQotUGx1Z2luU3RyZWFtOjp+UGx1Z2luU3RyZWFtKCkKLXsKLSAg
ICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1TdGFydGVkKTsKLSAgICBBU1NFUlQoIW1f
bG9hZGVyKTsKLQotICAgIGZhc3RGcmVlKChjaGFyKiltX3N0cmVhbS51cmwpOwotCi0gICAgc3Ry
ZWFtcygpLnJlbW92ZSgmbV9zdHJlYW0pOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6c3RhcnQo
KQotewotICAgIEFTU0VSVCghbV9sb2FkTWFudWFsbHkpOwotICAgIG1fbG9hZGVyID0gcmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChtX2ZyYW1lLCB0aGlz
LCBtX3Jlc291cmNlUmVxdWVzdCk7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpzdG9wKCkKLXsK
LSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RvcHBlZDsKLQotICAgIGlmIChtX2xvYWRNYW51
YWxseSkgewotICAgICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKLQotICAgICAgICBEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExv
YWRlcigpOwotICAgICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOwotCi0gICAgICAgIGlmIChk
b2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFpblJlc291cmNlKCkpCi0gICAgICAgICAgICBkb2N1
bWVudExvYWRlci0+Y2FuY2VsTWFpblJlc291cmNlTG9hZChtX2ZyYW1lLT5sb2FkZXIoKS5jYW5j
ZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAobV9sb2FkZXIpIHsKLSAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwotICAg
ICAgICBtX2xvYWRlciA9IDA7Ci0gICAgfQotCi0gICAgbV9jbGllbnQgPSAwOwotfQotCi1zdGF0
aWMgdWludDMyX3QgbGFzdE1vZGlmaWVkRGF0ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKLXsKLSAgICBkb3VibGUgbGFzdE1vZGlmaWVkID0gcmVzcG9uc2UubGFzdE1vZGlmaWVk
KCk7Ci0gICAgaWYgKCFzdGQ6OmlzZmluaXRlKGxhc3RNb2RpZmllZCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIGxhc3RNb2RpZmllZCAqIDEwMDA7Ci19Ci0KLXZvaWQgUGx1Z2lu
U3RyZWFtOjpzdGFydFN0cmVhbSgpCi17Ci0gICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3Ry
ZWFtQmVmb3JlU3RhcnRlZCk7Ci0KLSAgICBjb25zdCBVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNv
dXJjZVJlc3BvbnNlLnVybCgpOwotCi0gICAgLy8gU29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0
IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBwYXNzZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMg
dGhlCi0gICAgLy8gZm9ybWF0IHVzZWQgd2hlbiByZXF1ZXN0aW5nIHRoZSBVUkwuCi0gICAgaWYg
KHByb3RvY29sSXNKYXZhU2NyaXB0KHJlc3BvbnNlVVJMKSkKLSAgICAgICAgbV9zdHJlYW0udXJs
ID0gZmFzdFN0ckR1cChkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMocmVzcG9uc2VVUkwuc3RyaW5n
KCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9zdHJlYW0udXJsID0gZmFz
dFN0ckR1cChyZXNwb25zZVVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIENTdHJp
bmcgbWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7Ci0K
LSAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNl
LmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotCi0gICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5p
c0hUVFAoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAg
IFN0cmluZyBzZXBhcmF0b3IgPSBBU0NJSUxpdGVyYWwoIjogIik7Ci0KLSAgICAgICAgU3RyaW5n
IHN0YXR1c0xpbmUgPSAiSFRUUCAiICsgU3RyaW5nOjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCkpICsgIiBPS1xuIjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoc3RhdHVzTGluZSk7Ci0KLSAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKLSAgICAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNw
b25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChpdC0+dmFsdWUpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtX2hlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkudXRmOCgpOwotCi0gICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3Qg
bGlrZWx5IGNvbXByZXNzZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1
Z2luLAotICAgICAgICAvLyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQg
bGVuZ3RoLCBub3QgeWV0IGtub3duIGF0IHRoZSBtb21lbnQuCi0gICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS80NDcwNTk5PiB0cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoXSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgotICAgICAgICBT
dHJpbmcgY29udGVudEVuY29kaW5nID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudEVuY29kaW5nKTsKLSAgICAgICAgaWYgKCFjb250ZW50
RW5jb2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCi0gICAg
ICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggPSAtMTsKLSAgICB9Ci0KLSAgICBtX3N0cmVh
bS5oZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsKLSAgICBtX3N0cmVhbS5wZGF0YSA9IDA7Ci0g
ICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOwotICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3Rl
ZENvbnRlbnRMZW5ndGgsIDBMTCk7Ci0gICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbGFzdE1v
ZGlmaWVkRGF0ZShtX3Jlc291cmNlUmVzcG9uc2UpOwotICAgIG1fc3RyZWFtLm5vdGlmeURhdGEg
PSBtX25vdGlmeURhdGE7Ci0KLSAgICBtX3RyYW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKLSAgICBt
X29mZnNldCA9IDA7Ci0gICAgbV9yZWFzb24gPSBXZWJSZWFzb25Ob25lOwotCi0gICAgLy8gUHJv
dGVjdCB0aGUgc3RyZWFtIGlmIGRlc3Ryb3lzdHJlYW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRo
ZSBuZXdzdHJlYW0gaGFuZGxlcgotICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhp
cyk7Ci0KLSAgICAvLyBjYWxsaW5nIGludG8gYSBwbHVnLWluIGNvdWxkIHJlc3VsdCBpbiByZS1l
bnRyYW5jZSBpZiB0aGUgcGx1Zy1pbiB5aWVsZHMKLSAgICAvLyBjb250cm9sIHRvIHRoZSBzeXN0
ZW0gKHJkYXI6Ly81NzQ0ODk5KS4gcHJldmVudCB0aGlzIGJ5IGRlZmVycmluZyBmdXJ0aGVyCi0g
ICAgLy8gbG9hZGluZyB3aGlsZSBjYWxsaW5nIGludG8gdGhlIHBsdWctaW4uCi0gICAgaWYgKG1f
bG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICBO
UEVycm9yIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1J
TUVUeXBlKW1pbWVUeXBlU3RyLmRhdGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJN
b2RlKTsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2Fk
aW5nKGZhbHNlKTsKLSAgICAKLSAgICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4g
dGhlIGNhbGwgdG8gbmV3c3RyZWFtIHdlIHJldHVybgotICAgIGlmIChtX3JlYXNvbiAhPSBXZWJS
ZWFzb25Ob25lKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGlmIChucEVyciAhPSBO
UEVSUl9OT19FUlJPUikgewotICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKG5wRXJyKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFy
dGVkOwotCi0gICAgaWYgKG1fdHJhbnNmZXJNb2RlID09IE5QX05PUk1BTCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9wYXRoID0gb3BlblRlbXBvcmFyeUZpbGUoIldLUCIsIG1fdGVtcEZpbGVI
YW5kbGUpOwotCi0gICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRo
ZSBzdHJlYW0KLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQobV90ZW1wRmlsZUhhbmRsZSkpCi0gICAg
ICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwotfQotCi1OUFAg
UGx1Z2luU3RyZWFtOjpvd25lckZvclN0cmVhbShOUFN0cmVhbSogc3RyZWFtKQotewotICAgIHJl
dHVybiBzdHJlYW1zKCkuZ2V0KHN0cmVhbSk7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpjYW5j
ZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICBSZWZQdHI8UGx1Z2lu
U3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZGVzdHJveVN0cmVhbShyZWFzb24pOwotICAg
IHN0b3AoKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24g
cmVhc29uKQotewotICAgIG1fcmVhc29uID0gcmVhc29uOwotICAgIGlmIChtX3JlYXNvbiAhPSBO
UFJFU19ET05FKSB7Ci0gICAgICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5n
IHN0cmVhbWVkCi0gICAgICAgIGlmIChtX2RlbGl2ZXJ5RGF0YSkKLSAgICAgICAgICAgIG1fZGVs
aXZlcnlEYXRhLT5yZXNpemUoMCk7Ci0gICAgfSBlbHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBt
X2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgewotICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRh
dGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ryb3kgdGhlIHN0cmVhbSBub3cuCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgZGVzdHJveVN0cmVhbSgpOwotfQotCi12b2lkIFBsdWdpblN0
cmVhbTo6ZGVzdHJveVN0cmVhbSgpCi17Ci0gICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFt
U3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fcmVhc29uICE9IFdlYlJl
YXNvbk5vbmUpOwotICAgIEFTU0VSVCghbV9kZWxpdmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEt
PnNpemUoKSA9PSAwKTsKLQotICAgIGNsb3NlRmlsZShtX3RlbXBGaWxlSGFuZGxlKTsKLQotICAg
IGJvb2wgbmV3U3RyZWFtQ2FsbGVkID0gbV9zdHJlYW0ubmRhdGE7Ci0KLSAgICAvLyBQcm90ZWN0
IGZyb20gZGVzdHJ1Y3Rpb24gaWY6Ci0gICAgLy8gIE5QTl9EZXN0cm95U3RyZWFtIGlzIGNhbGxl
ZCBmcm9tIE5QUF9OZXdTdHJlYW0gb3IKLSAgICAvLyAgUGx1Z2luU3RyZWFtQ2xpZW50OjpzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKCkgcmVtb3ZlcyB0aGUgbGFzdCByZWZlcmVuY2UKLSAgICBSZWZQ
dHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgaWYgKG5ld1N0cmVhbUNhbGxl
ZCkgewotICAgICAgICBpZiAobV9yZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90cmFuc2Zlck1v
ZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIW1fcGF0aC5pc051bGwoKSk7Ci0KLSAgICAgICAgICAgIGlmICht
X2xvYWRlcikKLSAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVl
KTsKLSAgICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJl
YW0sIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChtX2xvYWRlcikKLSAg
ICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKSB7
Ci0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICAgICAgbV9sb2FkZXItPnNl
dERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0KLSAgICAgICAgICAgIE5QRXJyb3IgbnBFcnIgPSBtX3Bs
dWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24p
OwotCi0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICAgICAgbV9sb2FkZXIt
PnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCi0gICAgICAgICAgICBMT0dfTlBFUlJPUihucEVy
cik7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0cmVhbS5uZGF0YSA9IDA7Ci0gICAgfQotCi0g
ICAgaWYgKG1fc2VuZE5vdGlmaWNhdGlvbikgewotICAgICAgICAvLyBGbGFzaCA5IGNhbiBkZXJl
ZmVyZW5jZSBudWxsIGlmIHdlIGNhbGwgTlBQX1VSTE5vdGlmeSB3aXRob3V0IGZpcnN0IGNhbGxp
bmcgTlBQX05ld1N0cmVhbQotICAgICAgICAvLyBmb3IgcmVxdWVzdHMgbWFkZSB3aXRoIE5QTl9Q
b3N0VVJMTm90aWZ5OyBzZWUgPHJkYXI6Ly81NTg4ODA3PgotICAgICAgICBpZiAobV9sb2FkZXIp
Ci0gICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICAgICAg
aWYgKCFuZXdTdHJlYW1DYWxsZWQgJiYgbV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtGbGFz
aFVSTE5vdGlmeUJ1ZykgJiYKLSAgICAgICAgICAgIGVxdWFsSWdub3JpbmdDYXNlKG1fcmVzb3Vy
Y2VSZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIlBPU1QiKSkgewotICAgICAgICAgICAgbV90cmFuc2Zl
ck1vZGUgPSBOUF9OT1JNQUw7Ci0gICAgICAgICAgICBtX3N0cmVhbS51cmwgPSAiIjsKLSAgICAg
ICAgICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7Ci0KLSAgICAgICAgICAg
IHN0YXRpYyBjaGFyIGVtcHR5TWltZVR5cGVbXSA9ICIiOwotICAgICAgICAgICAgbV9wbHVnaW5G
dW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIGVtcHR5TWltZVR5cGUsICZtX3N0cmVhbSwgZmFs
c2UsICZtX3RyYW5zZmVyTW9kZSk7Ci0gICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95
c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOwotCi0gICAgICAgICAgICAv
LyBpbiBzdWNjZXNzZnVsIHJlcXVlc3RzLCB0aGUgVVJMIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRl
ZCBhbmQgZnJlZWQgaW4gb3VyCi0gICAgICAgICAgICAvLyBkZXN0cnVjdG9yLCBzbyByZXNldCBp
dCB0byAwCi0gICAgICAgICAgICBtX3N0cmVhbS51cmwgPSAwOwotICAgICAgICB9Ci0gICAgICAg
IG1fcGx1Z2luRnVuY3MtPnVybG5vdGlmeShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKLSAg
ICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOwotICAgIH0KLQotICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOwot
Ci0gICAgaWYgKCFtX2xvYWRNYW51YWxseSAmJiBtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQt
PnN0cmVhbURpZEZpbmlzaExvYWRpbmcodGhpcyk7Ci0KLSAgICBpZiAoIW1fcGF0aC5pc051bGwo
KSkKLSAgICAgICAgZGVsZXRlRmlsZShtX3BhdGgpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6
ZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoKQotewotICAgIGRlbGl2ZXJEYXRhKCk7Ci19Ci0KLXZv
aWQgUGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YSgpCi17Ci0gICAgQVNTRVJUKG1fZGVsaXZlcnlE
YXRhKTsKLSAgICAKLSAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNhbmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJj
ZUxvYWRlciBvbiBlcnJvciBzbyB3ZSBkb24ndCByZWFjaCB0aGlzIGNhc2UKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7
Ci0KLSAgICBpZiAoIW1fc3RyZWFtLm5kYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50MzJfdCB0b3RhbEJ5dGVzID0gbV9kZWxpdmVy
eURhdGEtPnNpemUoKTsKLSAgICBpbnQzMl90IHRvdGFsQnl0ZXNEZWxpdmVyZWQgPSAwOwotCi0g
ICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVl
KTsKLSAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKLSAgICAg
ICAgaW50MzJfdCBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2lu
c3RhbmNlLCAmbV9zdHJlYW0pOwotCi0gICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsK
LSAgICAgICAgICAgIG1fZGVsYXlEZWxpdmVyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsaXZlcnlCeXRl
cyA9IG1pbihkZWxpdmVyeUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7
Ci0gICAgICAgICAgICBpbnQzMl90IGRhdGFMZW5ndGggPSBkZWxpdmVyeUJ5dGVzOwotICAgICAg
ICAgICAgY2hhciogZGF0YSA9IG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVs
aXZlcmVkOwotCi0gICAgICAgICAgICAvLyBXcml0ZSB0aGUgZGF0YQotICAgICAgICAgICAgZGVs
aXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwg
bV9vZmZzZXQsIGRhdGFMZW5ndGgsICh2b2lkKilkYXRhKTsKLSAgICAgICAgICAgIGlmIChkZWxp
dmVyeUJ5dGVzIDwgMCkgewotICAgICAgICAgICAgICAgIExPR19QTFVHSU5fTkVUX0VSUk9SKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgICAgICAgICBtX2xv
YWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0gICAgICAgICAgICAgICAgY2FuY2VsQW5k
RGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVy
eUJ5dGVzLCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0
ZXM7Ci0gICAgICAgICAgICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0
RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0KLSAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDAp
IHsKLSAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7Ci0gICAg
ICAgICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2
ZXJlZDsKLSAgICAgICAgICAgIG1lbW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxp
dmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsK
LSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKLSAg
ICAgICAgICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQotICAgICAgICAgICAgICAg
IGRlc3Ryb3lTdHJlYW0oKTsKLSAgICAgICAgfQotICAgIH0gCi19Ci0KLXZvaWQgUGx1Z2luU3Ry
ZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENT
dHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3Vy
Y2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9wbGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgo
KSwgIiIpKTsKLQotICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0U3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAg
IGRpZFJlY2VpdmVEYXRhKDAsIHJlc3VsdFN0cmluZy5kYXRhKCksIHJlc3VsdFN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9sb2FkZXIgPSAwOwotCi0gICAgZGVzdHJv
eVN0cmVhbShyZXN1bHRTdHJpbmcuaXNOdWxsKCkgPyBOUFJFU19ORVRXT1JLX0VSUiA6IE5QUkVT
X0RPTkUpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQotewotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIp
OwotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOwotCi0g
ICAgbV9yZXNvdXJjZVJlc3BvbnNlID0gcmVzcG9uc2U7Ci0KLSAgICBzdGFydFN0cmVhbSgpOwot
fQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBB
U1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9z
dHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKLQotICAgIC8vIElmIHRoZSBwbHVnLWluIGNh
bmNlbHMgdGhlIHN0cmVhbSBpbiBkZWxpdmVyRGF0YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKLSAg
ICAvLyBzbyBwcm90ZWN0IGl0IGhlcmUuCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVj
dCh0aGlzKTsKLQotICAgIGlmIChtX3RyYW5zZmVyTW9kZSAhPSBOUF9BU0ZJTEVPTkxZKSB7Ci0g
ICAgICAgIGlmICghbV9kZWxpdmVyeURhdGEpCi0gICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPGNoYXI+PigpOwotCi0gICAgICAgIGludCBvbGRTaXpl
ID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKLSAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6
ZShvbGRTaXplICsgbGVuZ3RoKTsKLSAgICAgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRh
KCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgpOwotCi0gICAgICAgIGRlbGl2ZXJEYXRhKCk7Ci0g
ICAgfQotCi0gICAgaWYgKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RvcHBlZCAmJiBpc0hhbmRs
ZVZhbGlkKG1fdGVtcEZpbGVIYW5kbGUpKSB7Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSB3
cml0ZVRvRmlsZShtX3RlbXBGaWxlSGFuZGxlLCBkYXRhLCBsZW5ndGgpOwotICAgICAgICBpZiAo
Ynl0ZXNXcml0dGVuICE9IGxlbmd0aCkKLSAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJl
YW0oTlBSRVNfTkVUV09SS19FUlIpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRp
ZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VF
cnJvciYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7
Ci0KLSAgICBMT0dfUExVR0lOX05FVF9FUlJPUigpOwotCi0gICAgLy8gZGVzdHJveVN0cmVhbSBj
YW4gcmVzdWx0IGluIG91ciBiZWluZyBkZWxldGVkCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4g
cHJvdGVjdCh0aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwot
Ci0gICAgbV9sb2FkZXIgPSAwOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkRmluaXNoTG9h
ZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyKQotewotICAgIEFTU0VSVF9V
TlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotICAgIEFTU0VSVChtX3N0cmVhbVN0
YXRlID09IFN0cmVhbVN0YXJ0ZWQpOwotCi0gICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0
IGluIG91ciBiZWluZyBkZWxldGVkCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0
aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7Ci0KLSAgICBtX2xvYWRlciA9
IDA7Ci19Ci0KLWJvb2wgUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0cmVhbXMoKSBjb25zdAotewot
ICAgIGlmICghbV9wbHVnaW5GdW5jcy0+Z2V0dmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAgaWYgKG1fcGx1Z2luRnVuY3MtPmdldHZhbHVl
KG1faW5zdGFuY2UsIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmcmVzdWx0KSAh
PSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJl
c3VsdCAhPSAwOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwMzJjNGMxOTA0NTEyMmY1NmFjZWY2MzJlNTc4
MThhMTVhOWJjZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5TdHJlYW1faAotI2RlZmluZSBQbHVn
aW5TdHJlYW1faAotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlVSTC5oIgot
I2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
UXVpcmtTZXQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVf
aW50ZXJuYWwuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFt
ZTsKLSAgICBjbGFzcyBQbHVnaW5TdHJlYW07Ci0KLSAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRl
IHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3RyZWFtU3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9Owot
Ci0gICAgY2xhc3MgUGx1Z2luU3RyZWFtQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZp
cnR1YWwgflBsdWdpblN0cmVhbUNsaWVudCgpIHt9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKFBsdWdpblN0cmVhbSopIHt9Ci0gICAgfTsKLQotICAgIGNsYXNz
IFBsdWdpblN0cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblN0cmVhbT4sIHByaXZhdGUg
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luU3RyZWFtPiBjcmVhdGUoUGx1Z2luU3RyZWFtQ2xpZW50
KiBjbGllbnQsIEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBi
b29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVu
Y3MqIGZ1bmN0aW9ucywgTlBQIGluc3RhbmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtz
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpblN0cmVh
bShjbGllbnQsIGZyYW1lLCByZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBm
dW5jdGlvbnMsIGluc3RhbmNlLCBxdWlya3MpKTsKLSAgICAgICAgfQotICAgICAgICB2aXJ0dWFs
IH5QbHVnaW5TdHJlYW0oKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgc3RhcnQoKTsKLSAgICAg
ICAgdm9pZCBzdG9wKCk7Ci0KLSAgICAgICAgdm9pZCBzdGFydFN0cmVhbSgpOwotCi0gICAgICAg
IHZvaWQgc2V0TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1hbnVhbGx5KSB7IG1fbG9hZE1hbnVhbGx5
ID0gbG9hZE1hbnVhbGx5OyB9Ci0KLSAgICAgICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShj
b25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdURjo6Q1N0cmluZyYgcmVzdWx0U3RyaW5nKTsK
LSAgICAgICAgdm9pZCBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKLQotICAgICAg
ICBzdGF0aWMgTlBQIG93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKik7Ci0KLSAgICAgICAgLy8gTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VF
cnJvciYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciopOwotICAgICAgICB2aXJ0dWFsIGJvb2wgd2FudHNBbGxTdHJlYW1z
KCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBQbHVnaW5TdHJlYW0oUGx1Z2luU3Ry
ZWFtQ2xpZW50KiwgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqLCBOUFAgaW5z
dGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0Jik7Ci0KLSAgICAgICAgdm9pZCBkZWxpdmVyRGF0
YSgpOwotICAgICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOwotICAgICAgICB2b2lk
IGRlc3Ryb3lTdHJlYW0oKTsKLQotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJl
cXVlc3Q7Ci0gICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNvdXJjZVJlc3BvbnNlOwotCi0g
ICAgICAgIFBsdWdpblN0cmVhbUNsaWVudCogbV9jbGllbnQ7Ci0gICAgICAgIEZyYW1lKiBtX2Zy
YW1lOwotICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVy
OwotICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7Ci0gICAgICAgIGJvb2wgbV9zZW5kTm90aWZp
Y2F0aW9uOwotICAgICAgICBQbHVnaW5TdHJlYW1TdGF0ZSBtX3N0cmVhbVN0YXRlOwotICAgICAg
ICBib29sIG1fbG9hZE1hbnVhbGx5OwotCi0gICAgICAgIFRpbWVyIG1fZGVsYXlEZWxpdmVyeVRp
bWVyOwotICAgICAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKCk7Ci0KLSAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxjaGFyPj4gbV9kZWxpdmVyeURhdGE7Ci0KLSAgICAgICAg
UGxhdGZvcm1GaWxlSGFuZGxlIG1fdGVtcEZpbGVIYW5kbGU7Ci0KLSAgICAgICAgY29uc3QgTlBQ
bHVnaW5GdW5jcyogbV9wbHVnaW5GdW5jczsKLSAgICAgICAgTlBQIG1faW5zdGFuY2U7Ci0gICAg
ICAgIHVpbnQxNl90IG1fdHJhbnNmZXJNb2RlOwotICAgICAgICBpbnQzMl90IG1fb2Zmc2V0Owot
ICAgICAgICBDU3RyaW5nIG1faGVhZGVyczsKLSAgICAgICAgU3RyaW5nIG1fcGF0aDsKLSAgICAg
ICAgTlBSZWFzb24gbV9yZWFzb247Ci0gICAgICAgIE5QU3RyZWFtIG1fc3RyZWFtOwotICAgICAg
ICBQbHVnaW5RdWlya1NldCBtX3F1aXJrczsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjIyNWMwNGNjMWVlNDFkNTYyZWRiZDkyMGM5ZDI5NzU4
ZWU0ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0
ODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+Ci0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5j
bHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIK
LSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIK
LSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiUHJveHlTZXJ2
ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
LSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9y
LmgiCi0jaW5jbHVkZSAiV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNp
bmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2lu
Y2x1ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1Zh
bHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgT1MoV0lORE9X
UykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbi5oIgotI2VuZGlmCi0KLXVzaW5nIEpTQzo6RXhlY1N0YXRlOwotdXNpbmcg
SlNDOjpKU0xvY2s7Ci11c2luZyBKU0M6OkpTT2JqZWN0OwotdXNpbmcgSlNDOjpKU1ZhbHVlOwot
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLXVzaW5nIHN0ZDo6bWluOwotCi11
c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBpbnQgc19jYWxsaW5nUGx1Z2luOwotCi10eXBlZGVm
IEhhc2hNYXA8TlBQLCBQbHVnaW5WaWV3Kj4gSW5zdGFuY2VNYXA7Ci0KLXN0YXRpYyBJbnN0YW5j
ZU1hcCYgaW5zdGFuY2VNYXAoKQotewotICAgIHN0YXRpYyBJbnN0YW5jZU1hcCYgbWFwID0gKm5l
dyBJbnN0YW5jZU1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgU3RyaW5nIHNjcmlw
dFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBVUkwmIHVybCkKLXsKLSAgICBpZiAoIXByb3Rv
Y29sSXNKYXZhU2NyaXB0KHVybCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8v
IFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCi0gICAgcmV0dXJuIGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDExKSk7Ci19Ci0KLVBsdWdpblZp
ZXcqIFBsdWdpblZpZXc6OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOwotCi12b2lkIFBsdWdpblZp
ZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpCi17Ci0gICAgcG9wUG9wdXBzRW5hYmxlZFN0
YXRlKCk7Ci19Ci0KLUludFJlY3QgUGx1Z2luVmlldzo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAot
ewotICAgIC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCi0gICAgSW50UmVjdCBj
bGlwUmVjdChtX3dpbmRvd1JlY3QpOwotICAgIAotICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5k
IGdldCB0aGUgY2xpcCByZWN0IGZyb20gdGhlIGVuY2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmll
dy4KLSAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkudmll
dygpOwotICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZv
ckZyYW1lT3duZXIobV9lbGVtZW50LCB0cnVlKSk7Ci0KLSAgICByZXR1cm4gY2xpcFJlY3Q7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS5wcmludGluZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAocmVjdCAhPSBmcmFtZVJlY3QoKSkKLSAgICAgICAgV2lkZ2V0OjpzZXRG
cmFtZVJlY3QocmVjdCk7Ci0KLSAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLQotI2lmIE9TKFdJ
TkRPV1MpCi0gICAgLy8gT24gV2luZG93cyBhbHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdl
b21ldHJ5LgotICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKLSNlbGlmIGRlZmluZWQoWFBfVU5J
WCkKLSAgICAvLyBPbiBVbml4LCBtdWx0aXBsZSBjYWxscyB0byBzZXROUFdpbmRvdygpIGluIHdp
bmRvd2VkIG1vZGUgY2F1c2VzIEZsYXNoIHRvIGNyYXNoCi0gICAgaWYgKG1fbW9kZSA9PSBOUF9G
VUxMIHx8ICFtX2lzV2luZG93ZWQpCi0gICAgICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKLSNl
bmRpZgotfQotCi12b2lkIFBsdWdpblZpZXc6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKLXsKLSAgICB1
cGRhdGVQbHVnaW5XaWRnZXQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5n
ZWQoKQotewotICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNX
aW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgcGx1Zy1pbiBm
cm9tIGRlbGV0aW9uIHdoaWxlIGRpc3BhdGNoaW5nIHRoZSBldmVudC4KLSAgICBSZWZQdHI8UGx1
Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkp
Ci0gICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50
KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQotICAgICAgICBoYW5k
bGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOwotI2lm
IGRlZmluZWQoWFBfTUFDT1NYKQotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3
aGVlbEV2ZW50KQotICAgICAgICBoYW5kbGVXaGVlbEV2ZW50KHN0YXRpY19jYXN0PFdoZWVsRXZl
bnQqPihldmVudCkpOwotI2VuZGlmCi0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7IC8vIFdlIGRvbid0IGtub3cgaWYgdGhlIHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vk
b3duIGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBjb250ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQg
V2ViS2l0IHRvIHNob3cgYSBkZWZhdWx0IG9uZS4KLSNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmZvY3Vzb3V0RXZlbnQpCi0gICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQo
KTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5mb2N1c2luRXZl
bnQpCi0gICAgICAgIGhhbmRsZUZvY3VzSW5FdmVudCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6aW5pdCgpCi17Ci0gICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fcGx1
Z2luKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5k
UGx1Z2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIExPRyhQbHVnaW5zLCAiUGx1
Z2luVmlldzo6aW5pdCgpOiBJbml0aWFsaXppbmcgcGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgewotICAg
ICAgICBtX3BsdWdpbiA9IDA7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghc3RhcnRPckFk
ZFRvVW5zdGFydGVkTGlzdCgpKSB7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2Fu
Tm90TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RhdHVzID0g
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OwotfQotCi1ib29sIFBsdWdpblZpZXc6OnN0
YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKQotewotICAgIGlmICghbV9wYXJlbnRGcmFtZS0+cGFn
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBvbmx5IGRlbGF5IHN0YXJ0
aW5nIHRoZSBwbHVnLWluIGlmIHdlJ3JlIGdvaW5nIHRvIGtpY2sgb2ZmIHRoZSBsb2FkCi0gICAg
Ly8gb3Vyc2VsdmVzLiBPdGhlcndpc2UsIHRoZSBsb2FkZXIgd2lsbCB0cnkgdG8gZGVsaXZlciBk
YXRhIGJlZm9yZSB3ZSd2ZQotICAgIC8vIHN0YXJ0ZWQgdGhlIHBsdWctaW4uCi0gICAgaWYgKCFt
X2xvYWRNYW51YWxseSAmJiAhbV9wYXJlbnRGcmFtZS0+cGFnZSgpLT5jYW5TdGFydE1lZGlhKCkp
IHsKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExp
c3RlbmVyKHRoaXMpOwotICAgICAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSB0cnVlOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhcnQoKTsKLX0KLQotYm9vbCBQ
bHVnaW5WaWV3OjpzdGFydCgpCi17Ci0gICAgaWYgKG1faXNTdGFydGVkKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSBmYWxzZTsKLQotICAgIFBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnJlZ2lzdGVyUGx1Z2luKG1faW5zdGFu
Y2UpOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLSAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPm5ld3ApOwotCi0gICAgTlBFcnJvciBucEVycjsKLSAgICB7Ci0gICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAgICBucEVyciA9IG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUudXRmOCgpLmRh
dGEoKSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3BhcmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9w
YXJhbVZhbHVlcywgTlVMTCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAg
ICAgICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOwotICAgIH0KLQotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikg
ewotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47Ci0gICAg
ICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnVucmVnaXN0ZXJQbHVn
aW4obV9pbnN0YW5jZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2lz
U3RhcnRlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFu
dWFsbHkpIHsKLSAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFy
ZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOwotICAgICAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOwotICAgICAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtX3VybCk7Ci0gICAg
ICAgIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOwotICAgIH0KLQotICAgIG1fc3Rh
dHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OwotCi0gICAgaWYgKCFwbGF0Zm9y
bVN0YXJ0KCkpCi0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdp
bjsKLQotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBs
dWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQoKQotewotICAgIEFTU0VSVCghbV9pc1N0YXJ0ZWQpOwot
ICAgIGlmICghc3RhcnQoKSkKLSAgICAgICAgcGFyZW50RnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50
KCkuZGlzcGF0Y2hEaWRGYWlsVG9TdGFydFBsdWdpbih0aGlzKTsKLX0KLQotUGx1Z2luVmlldzo6
flBsdWdpblZpZXcoKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6flBsdWdpblZp
ZXcoKSIpOwotCi0gICAgQVNTRVJUKCFtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7Ci0K
LSAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZmluZCB0aGUgcGx1Zy1pbiwgd2UnbGwgcmV0dXJuIGVh
cmx5IGluIG91ciBjb25zdHJ1Y3RvciwgYW5kCi0gICAgLy8gbV9pbnN0YW5jZSB3aWxsIGJlIDAu
Ci0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAgIGluc3RhbmNlTWFwKCkucmVtb3ZlKG1faW5z
dGFuY2UpOwotCi0gICAgaWYgKG1faXNXYWl0aW5nVG9TdGFydCkKLSAgICAgICAgbV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwotCi0g
ICAgc3RvcCgpOwotCi0gICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNv
dW50KTsKLSAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsK
LQotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotCi0gICAgbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCku
Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7Ci0KLSAgICBpZiAobV9wbHVnaW4g
JiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1
Z2luKSkpCi0gICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpzdG9wKCkKLXsKLSAgICBpZiAoIW1faXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnN0b3AoKTogU3RvcHBpbmcgcGx1Zy1pbiAnJXMn
IiwgbV9wbHVnaW4tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIEhhc2hTZXQ8UmVmUHRy
PFBsdWdpblN0cmVhbT4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOwotICAgIEhhc2hTZXQ8UmVmUHRy
PFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKLSAgICBmb3Ig
KEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAoKml0KS0+c3RvcCgpOwotICAgICAg
ICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9z
dHJlYW1zLmlzRW1wdHkoKSk7Ci0KLSAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOwotCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2lmIGRlZmluZWQo
WFBfV0lOKSAmJiAhUExBVEZPUk0oR1RLKQotICAgIC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdwot
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9
IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9X
TkRQUk9DKTsKLQotICAgICAgICBpZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFBy
b2MpCi0gICAgICAgICAgICBTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTFBfV05EUFJPQywgKExPTkdfUFRSKW1fcGx1Z2luV25kUHJvYyk7Ci0gICAgfQotI2VuZGlm
IC8vICFkZWZpbmVkKFhQX1dJTikgfHwgUExBVEZPUk0oR1RLKQotI2VuZGlmIC8vIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaWYgIWRlZmluZWQoWFBfTUFDT1NYKQotICAgIC8vIENs
ZWFyIHRoZSB3aW5kb3cKLSAgICBtX25wV2luZG93LndpbmRvdyA9IDA7Ci0KLSAgICBpZiAobV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyAmJiAhbV9wbHVnaW4tPnF1aXJrcygpLmNv
bnRhaW5zKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpKSB7Ci0g
ICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKLSAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDAp
OwotICAgIH0KLQotI2lmZGVmIFhQX1VOSVgKLSAgICBkZWxldGUgc3RhdGljX2Nhc3Q8TlBTZXRX
aW5kb3dDYWxsYmFja1N0cnVjdCo+KG1fbnBXaW5kb3cud3NfaW5mbyk7Ci0gICAgbV9ucFdpbmRv
dy53c19pbmZvID0gMDsKLSNlbmRpZgotCi0jZW5kaWYgLy8gIWRlZmluZWQoWFBfTUFDT1NYKQot
Ci0gICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBs
dWdpbihtX2luc3RhbmNlKTsKLQotICAgIE5QU2F2ZWREYXRhKiBzYXZlZERhdGEgPSAwOwotICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7Ci0gICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5kZXN0cm95KG1faW5zdGFuY2UsICZzYXZlZERhdGEpOwotICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldygwKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IGlmIChzYXZlZERhdGEpIHsKLSAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgc2F2ZSB0aGlzIGRh
dGEgaW5zdGVhZCBvZiBqdXN0IGRpc2NhcmRpbmcgaXQKLSAgICAgICAgaWYgKHNhdmVkRGF0YS0+
YnVmKQotICAgICAgICAgICAgTlBOX01lbUZyZWUoc2F2ZWREYXRhLT5idWYpOwotICAgICAgICBO
UE5fTWVtRnJlZShzYXZlZERhdGEpOwotICAgIH0KLSNlbmRpZgotCi0gICAgbV9pbnN0YW5jZS0+
cGRhdGEgPSAwOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBs
dWdpblZpZXcqIHBsdWdpblZpZXcpCi17Ci0gICAgc19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdp
blZpZXc7Ci19Ci0KLVBsdWdpblZpZXcqIFBsdWdpblZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCkK
LXsKLSAgICByZXR1cm4gc19jdXJyZW50UGx1Z2luVmlldzsKLX0KLQotc3RhdGljIGNoYXIqIGNy
ZWF0ZVVURjhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCi17Ci0gICAgQ1N0cmluZyBjc3RyID0g
c3RyLnV0ZjgoKTsKLSAgICBjb25zdCBzaXplX3QgY3N0ckxlbmd0aCA9IGNzdHIubGVuZ3RoKCk7
Ci0gICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhj
c3RyTGVuZ3RoICsgMSkpOwotCi0gICAgbWVtY3B5KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHJM
ZW5ndGgpOwotICAgIHJlc3VsdFtjc3RyTGVuZ3RoXSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3Qq
IHJlcXVlc3QpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25n
ZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCi0gICAgLy8gZGlzcGxheWVkIHVu
bGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCi0gICAg
Y29uc3QgU3RyaW5nJiB0YXJnZXRGcmFtZU5hbWUgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0
KCkuZnJhbWVOYW1lKCk7Ci0gICAgaWYgKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50
TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIo
KSAmJiAodGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS5m
aW5kKHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJlbnRGcmFtZSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFVSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291
cmNlUmVxdWVzdCgpLnVybCgpOwotICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lm
SmF2YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKLQotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdl
c3R1cmVJbmRpY2F0b3IocmVxdWVzdC0+c2hvdWxkQWxsb3dQb3B1cHMoKSA/IERlZmluaXRlbHlQ
cm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0K
LSAgICBpZiAoanNTdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gaWYgdGhpcyBpcyBub3Qg
YSB0YXJnZXRlZCByZXF1ZXN0LCBjcmVhdGUgYSBzdHJlYW0gZm9yIGl0LiBvdGhlcndpc2UsCi0g
ICAgICAgIC8vIGp1c3QgcGFzcyBpdCBvZmYgdG8gdGhlIGxvYWRlcgotICAgICAgICBpZiAodGFy
Z2V0RnJhbWVOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVh
bT4gc3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQo
KSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0
LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBs
dWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7Ci0gICAgICAgICAg
ICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGZyYW1lIGlzIG91
ciBmcmFtZSwgd2UgY291bGQgZGVzdHJveSB0aGUKLSAgICAgICAgICAgIC8vIFBsdWdpblZpZXcs
IHNvIHdlIHByb3RlY3QgaXQuIDxyZGFyOi8vcHJvYmxlbS82OTkxMjUxPgotICAgICAgICAgICAg
UmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAgICAgICAgIEZyYW1lTG9h
ZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1l
TG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSk7Ci0gICAgICAgICAgICBmcmFtZVJlcXVl
c3Quc2V0RnJhbWVOYW1lKHRhcmdldEZyYW1lTmFtZSk7Ci0gICAgICAgICAgICBmcmFtZVJlcXVl
c3Quc2V0U2hvdWxkQ2hlY2tOZXdXaW5kb3dQb2xpY3kodHJ1ZSk7Ci0gICAgICAgICAgICBtX3Bh
cmVudEZyYW1lLT5sb2FkZXIoKS5sb2FkKGZyYW1lUmVxdWVzdCk7Ci0KLSAgICAgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVu
IHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZwotICAgICAgICAgICAgaWYgKHJlcXVl
c3QtPnNlbmROb3RpZmljYXRpb24oKSkgewotICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0g
ICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgp
KTsKLSAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGFyZ2V0ZWQgSmF2
YVNjcmlwdCByZXF1ZXN0cyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRh
aW5zIHRoZSBKYXZhU2NyaXB0IHBsdWdpbgotICAgIC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUg
c3VyZSBpbiA6OmxvYWQuCi0gICAgQVNTRVJUKHRhcmdldEZyYW1lTmFtZS5pc0VtcHR5KCkgfHwg
bV9wYXJlbnRGcmFtZS0+dHJlZSgpLmZpbmQodGFyZ2V0RnJhbWVOYW1lKSA9PSBtX3BhcmVudEZy
YW1lKTsKLSAgICAKLSAgICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVn
aW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gaXQuCi0g
ICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3Rvcih0aGlzKTsKLSAgICBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSByZXN1bHQgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5leGVjdXRlU2NyaXB0
KGpzU3RyaW5nLCByZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpKTsKLQotICAgIGlmICh0YXJn
ZXRGcmFtZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKLQot
ICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX3BhcmVudEZyYW1lLT5zY3Jp
cHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAg
Q1N0cmluZyBjc3RyOwotICAgICAgICBpZiAocmVzdWx0LmdldFN0cmluZyhzY3JpcHRTdGF0ZSwg
cmVzdWx0U3RyaW5nKSkKLSAgICAgICAgICAgIGNzdHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOwot
Ci0gICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3Jl
YXRlKHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3Qo
KS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0
LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3Bs
dWdpbi0+cXVpcmtzKCkpOwotICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgICAg
IHN0cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0ocmVxdWVzdFVSTCwgY3N0cik7Ci0gICAgfQot
fQotCi12b2lkIFBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQo
IW1fcmVxdWVzdHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1faXNKYXZhU2NyaXB0UGF1c2Vk
KTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0ID0gV1RGOjpt
b3ZlKG1fcmVxdWVzdHNbMF0pOwotICAgIG1fcmVxdWVzdHMucmVtb3ZlKDApOwotICAgIAotICAg
IC8vIFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVmb3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qg
c2luY2UgdGhlIGNhbGwgdG8KLSAgICAvLyBwZXJmb3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBs
dWdpbiB2aWV3IHRvIGJlIGRlbGV0ZWQuCi0gICAgaWYgKCFtX3JlcXVlc3RzLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOwotCi0gICAgcGVyZm9ybVJl
cXVlc3QocmVxdWVzdC5nZXQoKSk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2NoZWR1bGVSZXF1
ZXN0KHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0KQotewotICAgIG1fcmVx
dWVzdHMuYXBwZW5kKFdURjo6bW92ZShyZXF1ZXN0KSk7Ci0KLSAgICBpZiAoIW1faXNKYXZhU2Ny
aXB0UGF1c2VkKQotICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0K
LU5QRXJyb3IgUGx1Z2luVmlldzo6bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxv
YWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCi17Ci0g
ICAgQVNTRVJUKGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgp
ID09ICJHRVQiIHx8IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhv
ZCgpID09ICJQT1NUIik7Ci0KLSAgICBVUkwgdXJsID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS51cmwoKTsKLSAgICAKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgcmVxdWVzdHMg
dG8gYmUgbWFkZSB3aGVuIHRoZSBkb2N1bWVudCBsb2FkZXIgaXMgc3RvcHBpbmcgYWxsIGxvYWRl
cnMuCi0gICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigp
LmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIgfHwgbG9hZGVyLT5pc1N0b3BwaW5n
KCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgY29uc3QgU3Ry
aW5nJiB0YXJnZXRGcmFtZU5hbWUgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgpOwotICAg
IFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwpOwotCi0g
ICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSkgewotICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4K
LSAgICAgICAgaWYgKCFtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhO
b3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKLQotICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBhbGxvdyBK
UyByZXF1ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVn
LWluLgotICAgICAgICBpZiAoIXRhcmdldEZyYW1lTmFtZS5pc051bGwoKSAmJiBtX3BhcmVudEZy
YW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUpICE9IG1fcGFyZW50RnJhbWUpCi0gICAg
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICB9IGVsc2UgaWYgKCFtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNwbGF5KHVybCkp
Ci0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgc2NoZWR1bGVSZXF1
ZXN0KHN0ZDo6bWFrZV91bmlxdWU8UGx1Z2luUmVxdWVzdD4oZnJhbWVMb2FkUmVxdWVzdCwgc2Vu
ZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwgYXJlUG9wdXBzQWxsb3dlZCgpKSk7Ci0KLSAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBVUkwgbWFrZVVSTChjb25zdCBVUkwm
IGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMU3RyaW5nKQotewotICAgIFN0cmluZyB1
cmxTdHJpbmcgPSByZWxhdGl2ZVVSTFN0cmluZzsKLQotICAgIC8vIFN0cmlwIHJldHVybiBjaGFy
YWN0ZXJzLgotICAgIHVybFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJ1xuJywgIiIpOwotICAg
IHVybFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJ1xyJywgIiIpOwotCi0gICAgcmV0dXJuIFVS
TChiYXNlVVJMLCB1cmxTdHJpbmcpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFVSTE5v
dGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0
YSkKLXsKLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0KLSAgICBmcmFtZUxvYWRSZXF1ZXN0
LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNl
VVJMKCksIHVybCkpOwotCi0gICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwg
bm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQotewotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVM
b2FkUmVxdWVzdChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsK
LQotICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7Ci0gICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLSAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKSk7Ci0KLSAgICByZXR1cm4gbG9hZChm
cmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6cG9z
dFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3Qg
bGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewot
ICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5
RGF0YSwgdHJ1ZSwgdHJ1ZSk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6cG9zdFVSTChjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFy
KiBidWYsIE5QQm9vbCBmaWxlKQotewotICAgIC8vIEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cg
aGVhZGVycyB0byBiZSBzcGVjaWZpZWQgdmlhIE5QUF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxl
LgotICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwg
ZmFsc2UsIGZpbGUpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6Om5ld1N0cmVhbShOUE1JTUVU
eXBlLCBjb25zdCBjaGFyKiAvKiB0YXJnZXQgKi8sIE5QU3RyZWFtKiopCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICAvLyBVbnN1cHBvcnRlZAotICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOwotfQotCi1pbnQzMl90IFBsdWdpblZpZXc6OndyaXRlKE5QU3RyZWFtKiwgaW50MzJf
dCAvKiBsZW4gKi8sIHZvaWQqIC8qIGJ1ZmZlciAqLykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIC8vIFVuc3VwcG9ydGVkCi0gICAgcmV0dXJuIC0xOwotfQotCi1OUEVycm9yIFBsdWdp
blZpZXc6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQot
ewotICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0cmVhbTo6b3duZXJGb3JTdHJlYW0oc3RyZWFt
KSAhPSBtX2luc3RhbmNlKQotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9F
UlJPUjsKLQotICAgIFBsdWdpblN0cmVhbSogYnJvd3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBs
dWdpblN0cmVhbSo+KHN0cmVhbS0+bmRhdGEpOwotICAgIGJyb3dzZXJTdHJlYW0tPmNhbmNlbEFu
ZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0K
LQotdm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y2hy
b21lKCkuc2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLmdldCgpLCBTdHJpbmc6OmZyb21V
VEY4KG1lc3NhZ2UpKTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZShOUFBWYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5W
aWV3OjpzZXRWYWx1ZSglcyk6ICIsIHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSh2YXJpYWJsZSwg
dmFsdWUpLmRhdGEoKSk7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUFBW
cGx1Z2luV2luZG93Qm9vbDoKLSAgICAgICAgbV9pc1dpbmRvd2VkID0gdmFsdWU7Ci0gICAgICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJv
b2w6Ci0gICAgICAgIG1faXNUcmFuc3BhcmVudCA9IHZhbHVlOwotICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Ci0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgY2FzZSBOUFBWcGx1Z2lu
RHJhd2luZ01vZGVsOiB7Ci0gICAgICAgIC8vIENhbiBvbmx5IHNldCBkcmF3aW5nIG1vZGVsIGlu
c2lkZSBOUFBfTmV3KCkKLSAgICAgICAgaWYgKHRoaXMgIT0gY3VycmVudFBsdWdpblZpZXcoKSkK
LSAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICAgICAgTlBEcmF3
aW5nTW9kZWwgbmV3RHJhd2luZ01vZGVsID0gTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVl
KSk7Ci0gICAgICAgIHN3aXRjaCAobmV3RHJhd2luZ01vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBE
cmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uOgotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW4gYXNrZWQgZm9yIHVuc3Vw
cG9ydGVkIGRyYXdpbmcgbW9kZWw6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgcHJldHR5TmFt
ZUZvckRyYXdpbmdNb2RlbChuZXdEcmF3aW5nTW9kZWwpKTsKLSAgICAgICAgICAgIHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBOUFBWcGx1
Z2luRXZlbnRNb2RlbDogewotICAgICAgICAvLyBDYW4gb25seSBzZXQgZXZlbnQgbW9kZWwgaW5z
aWRlIE5QUF9OZXcoKQotICAgICAgICBpZiAodGhpcyAhPSBjdXJyZW50UGx1Z2luVmlldygpKQot
ICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICBOUEV2ZW50
TW9kZWwgbmV3RXZlbnRNb2RlbCA9IE5QRXZlbnRNb2RlbCh1aW50cHRyX3QodmFsdWUpKTsKLSAg
ICAgICAgc3dpdGNoIChuZXdFdmVudE1vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVs
Q29jb2E6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBhc2tlZCBmb3IgdW5zdXBwb3J0
ZWQgZXZlbnQgbW9kZWw6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgcHJldHR5TmFtZUZvckV2
ZW50TW9kZWwobmV3RXZlbnRNb2RlbCkpOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gZGVmaW5lZChYUF9NQUNPU1gp
Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52
YWxpZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lu
dmFsaWRSZWN0cy5zaXplKCk7IGkrKykKLSAgICAgICAgaW52YWxpZGF0ZVJlY3QobV9pbnZhbGlk
UmVjdHNbaV0pOwotICAgIG1faW52YWxpZFJlY3RzLmNsZWFyKCk7Ci19Ci0KLQotdm9pZCBQbHVn
aW5WaWV3OjpwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGJvb2wgc3RhdGUpCi17Ci0gICAgbV9wb3B1
cFN0YXRlU3RhY2suYXBwZW5kKHN0YXRlKTsKLX0KLSAKLXZvaWQgUGx1Z2luVmlldzo6cG9wUG9w
dXBzRW5hYmxlZFN0YXRlKCkKLXsKLSAgICBtX3BvcHVwU3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7
Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6YXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3BvcHVwU3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3BvcHVw
U3RhdGVTdGFjay5sYXN0KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2V0SmF2YVNjcmlwdFBhdXNlZChib29sIHBhdXNlZCkKLXsKLSAgICBpZiAobV9pc0ph
dmFTY3JpcHRQYXVzZWQgPT0gcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pc0phdmFT
Y3JpcHRQYXVzZWQgPSBwYXVzZWQ7Ci0KLSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0g
ICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0b3AoKTsKLSAgICBlbHNlIGlmICghbV9yZXF1ZXN0cy5p
c0VtcHR5KCkpCi0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotTlBPYmplY3QqIFBsdWdpblZpZXc6Om5w
T2JqZWN0KCkKLXsKLSAgICBOUE9iamVjdCogb2JqZWN0ID0gMDsKLQotICAgIGlmICghbV9pc1N0
YXJ0ZWQgfHwgIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gT24gV2luZG93cywgY2FsbGluZyBKYXZhJ3Mg
TlBOX0dldFZhbHVlIGNhbiBhbGxvdyB0aGUgbWVzc2FnZSBsb29wIHRvCi0gICAgLy8gcnVuLCBh
bGxvd2luZyBsb2FkaW5nIHRvIHRha2UgcGxhY2Ugb3IgSmF2YVNjcmlwdCB0byBydW4uIFByb3Rl
Y3QgdGhlCi0gICAgLy8gUGx1Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uLiA8cmRhcjovL3Byb2Js
ZW0vNjk3ODgwND4KLSAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAg
IE5QRXJyb3IgbnBFcnI7Ci0gICAgewotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsKLSAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0
dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7
Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgICAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJf
Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLSNl
bmRpZgotCi1QYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBQbHVnaW5WaWV3Ojpi
aW5kaW5nSW5zdGFuY2UoKQotewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IE5QT2JqZWN0KiBvYmplY3QgPSBucE9iamVjdCgpOwotICAgIGlmICghb2JqZWN0KQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGlmIChoYXNPbmVSZWYoKSkgewotICAgICAgICAvLyBUaGUgcmVu
ZGVyZXIgZm9yIHRoZSBQbHVnaW5WaWV3IHdhcyBkZXN0cm95ZWQgZHVyaW5nIHRoZSBhYm92ZSBj
YWxsLCBhbmQKLSAgICAgICAgLy8gdGhlIFBsdWdpblZpZXcgd2lsbCBiZSBkZXN0cm95ZWQgd2hl
biB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHNvIHdlCi0gICAgICAgIC8vIHJldHVybiBudWxsLgot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9v
dE9iamVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNyZWF0ZVJvb3RPYmplY3Qo
dGhpcyk7Ci0gICAgUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBpbnN0YW5jZSA9IEpT
Qzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRlKG9iamVjdCwgcm9vdC5yZWxlYXNlKCkpOwot
Ci0gICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2Uu
cmVsZWFzZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdp
blZpZXc6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKiBzdHJlYW0pCi17Ci0gICAgQVNT
RVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0pKTsKLQotICAgIG1fc3RyZWFtcy5yZW1vdmUo
c3RyZWFtKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMp
Ci17Ci0gICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7
Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gcGFyYW1OYW1lcy5zaXplKCk7Ci0gICAgdW5zaWduZWQg
cGFyYW1Db3VudCA9IDA7Ci0KLSAgICBtX3BhcmFtTmFtZXMgPSByZWludGVycHJldF9jYXN0PGNo
YXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOwotICAgIG1fcGFyYW1WYWx1
ZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICog
c2l6ZSkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2lu
ZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdub3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3
aW5kb3dsZXNzdmlkZW8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChw
YXJhbU5hbWVzW2ldID09ICJwbHVnaW5zcGFnZSIpCi0gICAgICAgICAgICBtX3BsdWdpbnNQYWdl
ID0gcGFyYW1WYWx1ZXNbaV07Ci0KLSAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0g
Y3JlYXRlVVRGOFN0cmluZyhwYXJhbU5hbWVzW2ldKTsKLSAgICAgICAgbV9wYXJhbVZhbHVlc1tw
YXJhbUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOwotCi0gICAgICAg
IHBhcmFtQ291bnQrKzsKLSAgICB9Ci0KLSAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50Owot
fQotCi1QbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luLCBIVE1MUGx1Z0luRWxlbWVudCogZWxl
bWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGJvb2wgbG9hZE1hbnVhbGx5KQotICAgIDogbV9wYXJlbnRGcmFtZShwYXJlbnRGcmFtZSkKLSAg
ICAsIG1fcGx1Z2luKHBsdWdpbikKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9p
c1N0YXJ0ZWQoZmFsc2UpCi0gICAgLCBtX3VybCh1cmwpCi0gICAgLCBtX3N0YXR1cyhQbHVnaW5T
dGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgLCBtX3JlcXVlc3RUaW1lcigqdGhpcywgJlBs
dWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKQotICAgICwgbV9pbnZhbGlkYXRlVGltZXIoKnRo
aXMsICZQbHVnaW5WaWV3OjppbnZhbGlkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fcG9wUG9wdXBz
U3RhdGVUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCkK
LSAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0
VGltZXJGaXJlZCkKLSAgICAsIG1fbW9kZShsb2FkTWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1C
RUQpCi0gICAgLCBtX3BhcmFtTmFtZXMoMCkKLSAgICAsIG1fcGFyYW1WYWx1ZXMoMCkKLSAgICAs
IG1fbWltZVR5cGUobWltZVR5cGUpCi0gICAgLCBtX2luc3RhbmNlKDApCi0jaWYgZGVmaW5lZChY
UF9NQUNPU1gpCi0gICAgLCBtX2lzV2luZG93ZWQoZmFsc2UpCi0gICAgLCBtX3VwZGF0ZWRDb2Nv
YVRleHRJbnB1dFJlcXVlc3RlZChmYWxzZSkKLSAgICAsIG1fa2V5RG93blNlbnQoZmFsc2UpCi0g
ICAgLCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcigwKQotI2Vsc2UKLSAgICAsIG1faXNXaW5kb3dl
ZCh0cnVlKQotI2VuZGlmCi0gICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCi0gICAgLCBtX2hh
dmVJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1faXNXYWl0aW5nVG9TdGFydChmYWxzZSkKLSNp
ZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQotI2VuZGlmCi0j
aWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLCBtX3Bs
dWdpblduZFByb2MoMCkKLSAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKLSAgICAsIG1faXNDYWxsaW5n
UGx1Z2luV25kUHJvYyhmYWxzZSkKLSAgICAsIG1fd21QcmludEhEQygwKQotICAgICwgbV9oYXZl
VXBkYXRlZFBsdWdpbldpZGdldChmYWxzZSkKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEVGTCkKLSAg
ICAsIG1fd2luZG93KDApCi0jZW5kaWYKLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICAsIG1f
Y29udGV4dFJlZigwKQotI2VuZGlmCi0jaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlKHRydWUp
Ci0gICAgLCBtX2RyYXdhYmxlKDApCi0gICAgLCBtX3Zpc3VhbCgwKQotICAgICwgbV9jb2xvcm1h
cCgwKQotICAgICwgbV9wbHVnaW5EaXNwbGF5KDApCi0jZW5kaWYKLSAgICAsIG1fbG9hZE1hbnVh
bGx5KGxvYWRNYW51YWxseSkKLSAgICAsIG1fbWFudWFsU3RyZWFtKDApCi0gICAgLCBtX2lzSmF2
YVNjcmlwdFBhdXNlZChmYWxzZSkKLSAgICAsIG1faGF2ZUNhbGxlZFNldFdpbmRvdyhmYWxzZSkK
LXsKLSAgICBpZiAoIW1fcGx1Z2luKSB7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVz
Q2FuTm90RmluZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1faW5zdGFu
Y2UgPSAmbV9pbnN0YW5jZVN0cnVjdDsKLSAgICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7Ci0g
ICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOwotCi0gICAgaW5zdGFuY2VNYXAoKS5hZGQobV9pbnN0
YW5jZSwgdGhpcyk7Ci0KLSAgICBzZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVz
KTsKLQotICAgIG1lbXNldCgmbV9ucFdpbmRvdywgMCwgc2l6ZW9mKG1fbnBXaW5kb3cpKTsKLSNp
ZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICBtZW1zZXQoJm1fbnBDZ0NvbnRleHQsIDAsIHNpemVv
ZihtX25wQ2dDb250ZXh0KSk7Ci0jZW5kaWYKLQotICAgIHJlc2l6ZShzaXplKTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3Ojpmb2N1c1BsdWdpbkVsZW1lbnQoKQotewotICAgIGlmIChQYWdlKiBwYWdl
ID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS5zZXRGb2N1c2VkRWxlbWVudChtX2VsZW1lbnQsIG1fcGFyZW50RnJhbWUpOwotICAgIGVsc2UK
LSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobV9l
bGVtZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdp
blN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KG1fbG9hZE1hbnVhbGx5KTsKLSAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1f
bWFudWFsU3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5n
ZXQoKSwgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVx
dWVzdCgpLCBmYWxzZSwgMCwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1f
cGx1Z2luLT5xdWlya3MoKSk7Ci0gICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0
cnVlKTsKLQotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9u
c2UpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVh
bGx5KTsKLSAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOwotICAgIAotICAgIG1fbWFudWFsU3Ry
ZWFtLT5kaWRSZWNlaXZlRGF0YSgwLCBkYXRhLCBsZW5ndGgpOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OmRpZEZpbmlzaExvYWRpbmcoKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xv
YWRNYW51YWxseSk7Ci0gICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFs
U3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZh
aWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBs
dWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICAKLSAgICBpZiAobV9tYW51YWxTdHJlYW0pCi0gICAg
ICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGYWlsKDAsIGVycm9yKTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpzZXRDYWxsaW5nUGx1Z2luKGJvb2wgYikgY29uc3QKLXsKLSAgICBpZiAoIW1fcGx1Z2lu
LT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoYikKLSAgICAgICAgKytzX2NhbGxpbmdQbHVnaW47Ci0g
ICAgZWxzZQotICAgICAgICAtLXNfY2FsbGluZ1BsdWdpbjsKLQotICAgIEFTU0VSVChzX2NhbGxp
bmdQbHVnaW4gPj0gMCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkK
LXsKLSAgICByZXR1cm4gc19jYWxsaW5nUGx1Z2luID4gMDsKLX0KLQotUGFzc1JlZlB0cjxQbHVn
aW5WaWV3PiBQbHVnaW5WaWV3OjpjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRT
aXplJiBzaXplLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotewot
ICAgIC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZp
bmRQbHVnaW4gd2lsbCBzZWFyY2ggZm9yCi0gICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0
ZW5zaW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5n
Ci0gICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2Uq
IHBsdWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4o
dXJsLCBtaW1lVHlwZUNvcHkpOwotCi0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJl
ZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICBpZiAoIXBsdWdp
biAmJiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCkpIHsKLSAg
ICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7Ci0gICAgICAgIHBsdWdpbiA9IFBsdWdpbkRh
dGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkp
OwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luVmlldyhwYXJlbnRGcmFt
ZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBt
aW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmZyZWVT
dHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFz
dHJpbmdBcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykKLSAgICAgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOwotCi0gICAgZmFz
dEZyZWUoc3RyaW5nQXJyYXkpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJs
YW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gYnVmZmVy
LnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50
IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikK
LXsKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGggLSA0OyBpKyspIHsKLSAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2Vu
ZHMgIlxuXG4iLgotICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0g
PT0gJ1xuJykKLSAgICAgICAgICAgIHJldHVybiBpICsgMjsKLSAgICAgICAgCi0gICAgICAgIC8v
IFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0
aGUgZmlyc3QgbGluZS4KLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSAr
IDFdID09ICdcbicpIHsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGlmIChpID09
IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICBlbHNlIGlmIChieXRl
c1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJ
dCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAx
OwotICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0g
PT0gJ1xuJykKLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMg
IlxyXG5cclxuIiAoMzc1ODExMykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0
IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBh
cwotICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1
c2UgTEYKLSAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBh
IGNvbWJpbmF0aW9uCi0gICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5Piks
IHNvIGZpbmRFT0wgbmVlZHMKLSAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBu
b3cgYWNjZXB0IENSTEYsIExGIG9yCi0gICAgLy8gQ1IuCi0gICAgLy8KLSAgICAvLyBJdCByZXR1
cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4KLSAgICAvLyBh
IHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09
ICdcbicpCi0gICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOwotICAgICAgICBpZiAoYnl0ZXNb
aV0gPT0gJ1xyJykgewotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1
ZmZlciBib3VuZHMKLSAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNv
LCB3YWl0IGZvcgotICAgICAgICAgICAgLy8gbmV4dCByZWFkLgotICAgICAgICAgICAgaWYgKGkg
KyAxID09IGxlbmd0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgcmV0
dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1z
dGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0
IFN0cmluZyYgbmFtZSkKLXsKLSAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwot
ICAgIFN0cmluZyByZXN1bHQ7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5s
ZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIFVDaGFyIGM7Ci0KLSAgICAgICAgaWYgKGNhcGl0YWxp
emVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCi0gICAgICAg
ICAgICBjID0gdG9BU0NJSVVwcGVyKG5hbWVbaV0pOwotICAgICAgICBlbHNlIGlmICghY2FwaXRh
bGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykKLSAgICAg
ICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFtZVtpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGMgPSBuYW1lW2ldOwotCi0gICAgICAgIGlmIChuYW1lW2ldID09ICctJykKLSAgICAgICAg
ICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChj
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEhUVFBI
ZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5k
YXRhKCk7Ci0gICAgY29uc3QgY2hhciogZW9sOwotICAgIFN0cmluZyBsYXN0S2V5OwotICAgIEhU
VFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwotCi0gICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGls
IHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2Yt
bGluZXMKLSAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKLSAgICAgICAgaW50IGxpbmVMZW5ndGggPSBl
b2wgLSBieXRlczsKLSAgICAgICAgCi0gICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJh
Y3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBieSBmaW5kRU9MLgotICAgICAg
ICBieXRlcyA9IGVvbCArIDE7Ci0gICAgICAgIGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVz
ID09ICdcbicpKQotICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdv
bid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCi0KLSAgICAgICAgbGVuZ3RoIC09IChieXRlcyAt
IGxpbmUpOwotICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQotICAgICAgICAgICAgLy8gQmxh
bmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKLSAg
ICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAg
ICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1l
ZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNv
bnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAgICAgICAgICAgU3RyaW5n
IGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAg
aGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVh
ZGVyCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xvbjsKLSAgICAgICAgICAgIGZvciAoY29s
b24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29sb24rKykgewotICAg
ICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChjb2xvbiA9PSBlb2wpIAotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGln
bm9yZSBpdCBhbmQgY29udGludWUKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVh
ZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xvbiAtIGxpbmUpKTsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9
IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAm
JiAqY29sb24gIT0gJ1x0JykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKQotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9ICIiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24sIGVvbCAtIGNvbG9uKTsKLQotICAgICAgICAg
ICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBvbGRWYWx1ZSArICIsICIgKyB2YWx1ZTsKLQotICAgICAgICAgICAgICAgIGhlYWRl
ckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGhlYWRlckZpZWxkczsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3
OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJf
dCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29s
IHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQotewotICAgIGlmICghdXJsIHx8
ICFsZW4gfHwgIWJ1ZikKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0KLSAg
ICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0KLSAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxk
czsKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwotICAgIAotICAgIGlmIChmaWxlKSB7Ci0gICAg
ICAgIE5QRXJyb3IgcmVhZFJlc3VsdCA9IGhhbmRsZVBvc3RSZWFkRmlsZShidWZmZXIsIGxlbiwg
YnVmKTsKLSAgICAgICAgaWYocmVhZFJlc3VsdCAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAg
ICAgIHJldHVybiByZWFkUmVzdWx0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNp
emUobGVuKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKLSAgICB9
Ci0KLSAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgaW50IHBv
c3REYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKLQotICAgIGlmIChhbGxvd0hlYWRlcnMpIHsK
LSAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgewotICAgICAgICAgICAg
cG9zdERhdGErKzsKLSAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xp
bmUoYnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgewotICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9m
IHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKLSAgICAgICAgICAg
ICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0
aW9uKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUo
KSAtIGxvY2F0aW9uOwotCi0gICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlr
ZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKLSAgICAg
ICAgICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdl
IHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0
cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KLSAgICAgICAgICAgICAg
ICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoSFRUUEhlYWRlck5hbWU6
OkNvbnRlbnRMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlz
TnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5n
dGgudG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBoZWFkZXJGaWVs
ZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoKTsKLQotICAgICAgICAgICAg
ICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOwotICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3Ro
ID0gZGF0YUxlbmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOwot
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9w
YXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKLSAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGOjptb3ZlKGhl
YWRlckZpZWxkcykpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0
SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShwb3N0RGF0YSwgcG9zdERhdGFMZW5ndGgpKTsKLSAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotCi0gICAgcmV0dXJuIGxv
YWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Ci19Ci0K
LXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFpc1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmICghbV9lbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm47Ci0g
ICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCptX2VsZW1lbnQtPnJlbmRl
cmVyKCkpOwotICAgIAotICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKLSAgICBkaXJ0eVJl
Y3QubW92ZShyZW5kZXJlci5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci5wYWRkaW5nTGVmdCgpLCBy
ZW5kZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKSk7Ci0gICAgcmVuZGVy
ZXIucmVwYWludFJlY3RhbmdsZShkaXJ0eVJlY3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBh
aW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IG51bGxQbHVnaW5JbWFnZTsK
LSAgICBpZiAoIW51bGxQbHVnaW5JbWFnZSkKLSAgICAgICAgbnVsbFBsdWdpbkltYWdlID0gSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJudWxsUGx1Z2luIik7Ci0KLSAgICBJbnRSZWN0IGlt
YWdlUmVjdChmcmFtZVJlY3QoKS54KCksIGZyYW1lUmVjdCgpLnkoKSwgbnVsbFBsdWdpbkltYWdl
LT53aWR0aCgpLCBudWxsUGx1Z2luSW1hZ2UtPmhlaWdodCgpKTsKLQotICAgIGludCB4T2Zmc2V0
ID0gKGZyYW1lUmVjdCgpLndpZHRoKCkgLSBpbWFnZVJlY3Qud2lkdGgoKSkgLyAyOwotICAgIGlu
dCB5T2Zmc2V0ID0gKGZyYW1lUmVjdCgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAv
IDI7Ci0KLSAgICBpbWFnZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKLQotICAgIGlmICgh
cmVjdC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnRl
eHQtPnNhdmUoKTsKLSAgICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0KCkpOwotICAgIGNv
bnRleHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0K
LXN0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wICgiCi0j
aWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgICAgICJNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBP
UyBYOyIKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQotICAgICAgICAiV2luZG93czsgVTsgV2luZG93
cyBOVCA1LjE7IgotI2VsaWYgZGVmaW5lZChYUF9VTklYKQotLy8gVGhlIEd0ayBwb3J0IHVzZXMg
WDExIHBsdWdpbnMgaW4gTWFjLgotI2lmIE9TKERBUldJTikgJiYgUExBVEZPUk0oR1RLKQotICAg
ICJYMTE7IFU7IEludGVsIE1hYyBPUyBYOyIKLSNlbHNlCi0gICAgIlgxMTsgVTsgTGludXggaTY4
NjsiCi0jZW5kaWYKLSNlbmRpZgotICAgICAgICAiIGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAw
NjEwMTAgRmlyZWZveC8yLjAiOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ2hyb21lVXNl
ckFnZW50ID0gIk1vemlsbGEvNS4wICgiCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgIk1h
Y2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7IgotI2VsaWYgZGVmaW5lZChYUF9XSU4pCi0gICAg
IldpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyIKLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAg
ICAvLyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEgcGx1Z2lucyBpbiBNYWMuCi0jaWYgT1MoREFSV0lO
KSAmJiBQTEFURk9STShHVEspCi0gICAgIlgxMTsgVTsgSW50ZWwgTWFjIE9TIFg7IgotI2Vsc2UK
LSAgICAiWDExOyBVOyBMaW51eCBpNjg2OyIKLSNlbmRpZgotI2VuZGlmCi0gICAgIiBBcHBsZVdl
YktpdC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTkuMC4xMDU1LjEgU2FmYXJp
LzUzNC4zNCI7Ci0KLWNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCi17Ci0gICAg
aWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVz
ZXJBZ2VudCkpCi0gICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OwotICAgIGVsc2UgaWYg
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzQ2hyb21lVXNlckFn
ZW50KSkKLSAgICAgICAgcmV0dXJuIENocm9tZVVzZXJBZ2VudDsKLSAgICBpZiAobV91c2VyQWdl
bnQuaXNOdWxsKCkpCi0gICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVy
KCkudXNlckFnZW50KG1fdXJsKS51dGY4KCk7Ci0KLSAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0
YSgpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1jb25zdCBjaGFyKiBQ
bHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKQotewotICAgIHJldHVybiBNb3ppbGxhVXNlckFn
ZW50OwotfQotI2VuZGlmCi0KLQotdm9pZCBQbHVnaW5WaWV3OjpsaWZlU3VwcG9ydFRpbWVyRmly
ZWQoKQotewotICAgIGRlcmVmKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKCkK
LXsKLSAgICBpZiAobV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHJlZigpOwotICAgIG1fbGlmZVN1cHBvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXZvaWQgUGx1Z2luVmlldzo6
a2VlcEFsaXZlKE5QUCBpbnN0YW5jZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gaW5zdGFu
Y2VNYXAoKS5nZXQoaW5zdGFuY2UpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdmlldy0+a2VlcEFsaXZlKCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFs
dWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQotewotICAgIExPRyhQ
bHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoJXMpIiwgcHJldHR5TmFtZUZvck5Q
TlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotCi0gICAgTlBFcnJvciByZXN1bHQ7Ci0gICAg
aWYgKHBsYXRmb3JtR2V0VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
fQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkKiB2YWx1ZSkKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OmdldFZhbHVlKCVz
KSIsIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5Q
RXJyb3IgcmVzdWx0OwotICAgIGlmIChwbGF0Zm9ybUdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSwg
JnJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAocGxhdGZvcm1HZXRW
YWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUsICZyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBOVldpbmRvd05QT2Jq
ZWN0OiB7Ci0gICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKLSAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3Jp
cHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS53aW5kb3dTY3JpcHROUE9iamVjdCgp
OwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwg
YXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdp
bi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKLSAgICAg
ICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAg
dm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVj
dDsKLQotICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQotCi0gICAgY2FzZSBO
UE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7Ci0gICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBh
dXNlZCkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgICAg
IE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOwotCi0gICAgICAgIGlmIChtX2VsZW1l
bnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRU
YWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgcGx1
Z2luU2NyaXB0T2JqZWN0ID0gbV9lbGVtZW50LT5nZXROUE9iamVjdCgpOwotCi0gICAgICAgIC8v
IFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhl
cmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRt
bD4KLSAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0
YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgdm9pZCoqIHYgPSAodm9p
ZCoqKXZhbHVlOwotICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKLQotICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WcHJpdmF0ZU1vZGVC
b29sOiB7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCk7Ci0gICAg
ICAgIGlmICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
ICAgICAgICAqKChOUEJvb2wqKXZhbHVlKSA9IHBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCk7
Ci0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICB9Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBG
cmFtZSogZ2V0RnJhbWUoRnJhbWUqIHBhcmVudEZyYW1lLCBFbGVtZW50KiBlbGVtZW50KQotewot
ICAgIGlmIChwYXJlbnRGcmFtZSkKLSAgICAgICAgcmV0dXJuIHBhcmVudEZyYW1lOwotICAgIAot
ICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLU5QRXJyb3IgUGx1
Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNo
YXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKQotewotICAgIExPRyhQbHVnaW5z
LCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwoJXMpIiwgcHJldHR5TmFtZUZvck5QTlVSTFZh
cmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotCi0gICAgTlBFcnJvciByZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKLQotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlVSTFZDb29r
aWU6IHsKLSAgICAgICAgVVJMIHUobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgp
LCB1cmwpOwotICAgICAgICBpZiAodS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBm
cmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBp
ZiAoZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNv
b2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHUpLnV0ZjgoKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWNvb2tpZVN0ci5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6
ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCp2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCp2YWx1ZSwg
MCwgc2l6ZSsxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIGNvb2tp
ZVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpsZW4gPSBzaXplOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX09VVF9P
Rl9NRU1PUllfRVJST1I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBOUE5VUkxWUHJveHk6IHsKLSAgICAgICAgVVJMIHUo
bV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOwotICAgICAgICBpZiAo
dS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVu
dEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBjb25zdCBGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXIgPSBmcmFtZSA/ICZmcmFtZS0+bG9hZGVyKCkgOiAwOwotICAgICAgICAgICAgY29u
c3QgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBmcmFtZUxvYWRlciA/IGZyYW1lTG9hZGVy
LT5uZXR3b3JraW5nQ29udGV4dCgpIDogMDsKLSAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgcHJv
eHlTdHIgPSB0b1N0cmluZyhwcm94eVNlcnZlcnNGb3JVUkwodSwgY29udGV4dCkpLnV0ZjgoKTsK
LSAgICAgICAgICAgIGlmICghcHJveHlTdHIuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBpbnQgc2l6ZSA9IHByb3h5U3RyLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICp2YWx1
ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCp2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAw
LCBzaXplKzEpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKnZhbHVlLCBwcm94eVN0ci5k
YXRhKCksIHNpemUrMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZW4pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAqbGVuID0gc2l6ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZB
TElEX1VSTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
c3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6Z2V0VmFsdWVGb3JVUkw6ICVzIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZh
cmlhYmxlKS5kYXRhKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi0KLU5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFy
aWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQz
Ml90IGxlbikKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJM
KCVzKSIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQot
ICAgIE5QRXJyb3IgcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0KLSAgICBzd2l0Y2ggKHZhcmlh
YmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxWQ29va2llOiB7Ci0gICAgICAgIFVSTCB1KG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKTsKLSAgICAgICAgaWYgKHUuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSwgbGVuKTsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBh
cmVudEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tp
ZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1l
bnQoKSwgdSwgY29va2llU3RyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQg
PSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTlBO
VVJMVlByb3h5OgotICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9y
VVJMKCVzKTogUGx1Z2lucyBhcmUgTk9UIGFsbG93ZWQgdG8gc2V0IHByb3h5IGluZm9ybWF0aW9u
LiIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLSAgICAg
ICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTDog
JXMiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0gICAg
ICAgIHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0QXV0aGVu
dGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQz
Ml90IHBvcnQsIGNvbnN0IGNoYXIqIC8qIHNjaGVtZSAqLywgY29uc3QgY2hhciogLyogcmVhbG0g
Ki8sIGNoYXIqKiAgLyogdXNlcm5hbWUgKi8sIHVpbnQzMl90KiAvKiB1bGVuICovLCBjaGFyKiog
LyogcGFzc3dvcmQgKi8sIHVpbnQzMl90KiAvKiBwbGVuICovKQotewotI2lmIExPR19ESVNBQkxF
RAotICAgIFVOVVNFRF9QQVJBTShwcm90b2NvbCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhvc3QpOwot
ICAgIFVOVVNFRF9QQVJBTShwb3J0KTsKLSNlbmRpZgotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvOiBwcm90b2NvbD0lcywgaG9zdD0lcywgcG9ydD0l
ZCIsIHByb3RvY29sLCBob3N0LCBwb3J0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotI2VuZGlmCi0KLXZvaWQgUGx1Z2luVmlldzo6
cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkK
LXsKLSAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNldFZhbHVlID0gbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPnNldHZhbHVlOwotICAgIGlmICghc2V0VmFsdWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICBOUEJvb2wgdmFsdWUgPSBwcml2
YXRlQnJvd3NpbmdFbmFibGVkOwotICAgIHNldFZhbHVlKG1faW5zdGFuY2UsIE5QTlZwcml2YXRl
TW9kZUJvb2wsICZ2YWx1ZSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg2YmI5
ZDI4MTE0YWRkODY5NGQ1Y2QxMTdhMDNkNjYwZGRmYzAzNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlz
aEBmb3J3YXJkYmlhcy5pbj4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgUGx1Z2luVmlld19oCi0jZGVmaW5lIFBsdWdpblZpZXdfaAotCi0jaW5j
bHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgot
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1
Z2luU3RyZWFtLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0jZW5kaWYKLQot
I2lmIE9TKFdJTkRPV1MpICYmIFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgc3RydWN0IEhXTkRfXyog
SFdORDsKLXR5cGVkZWYgSFdORCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKLSNlbHNlCi10eXBlZGVm
IFBsYXRmb3JtV2lkZ2V0IFBsYXRmb3JtUGx1Z2luV2lkZ2V0OwotI2VuZGlmCi0jaWYgUExBVEZP
Uk0oR1RLKQotdHlwZWRlZiBzdHJ1Y3QgX0d0a1NvY2tldCBHdGtTb2NrZXQ7Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKFgxMSkKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7Ci10eXBlZGVm
IHN0cnVjdCBfWERpc3BsYXkgRGlzcGxheTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLSAg
ICBuYW1lc3BhY2UgQmluZGluZ3MgewotICAgICAgICBjbGFzcyBJbnN0YW5jZTsKLSAgICB9Ci19
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBGcmFt
ZVZpZXc7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAgY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7Ci0g
ICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKLSAgICBjbGFzcyBNb3VzZUV2ZW50OwotICAgIGNsYXNz
IFVSTDsKLSNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOwotI2VuZGlmCi0gICAgY2xhc3MgUGx1
Z2luUGFja2FnZTsKLSAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0OwotICAgIGNsYXNzIFBsdWdpblN0
cmVhbTsKLSAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwotICAgIGNsYXNzIFJlc291cmNlUmVzcG9u
c2U7Ci0gICAgY2xhc3MgV2hlZWxFdmVudDsKLQotICAgIGVudW0gUGx1Z2luU3RhdHVzIHsKLSAg
ICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbiwKLSAgICAgICAgUGx1Z2luU3RhdHVz
Q2FuTm90TG9hZFBsdWdpbiwKLSAgICAgICAgUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5
Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblJlcXVlc3QgewotICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQbHVnaW5SZXF1ZXN0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
cHVibGljOgotICAgICAgICBQbHVnaW5SZXF1ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZy
YW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSwg
Ym9vbCBzaG91bGRBbGxvd1BvcHVwcykKLSAgICAgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0
KGZyYW1lTG9hZFJlcXVlc3QpCi0gICAgICAgICAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRh
KQotICAgICAgICAgICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKLSAg
ICAgICAgICAgICwgbV9zaG91bGRBbGxvd1BvcHVwcyhzaG91bGRBbGxvd1BvcHVwcykgeyB9Ci0g
ICAgcHVibGljOgotICAgICAgICBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1
ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUxvYWRSZXF1ZXN0OyB9Ci0gICAgICAgIHZvaWQq
IG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBtX25vdGlmeURhdGE7IH0KLSAgICAgICAgYm9v
bCBzZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9
Ci0gICAgICAgIGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZEFsbG93UG9wdXBzOyB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBt
X2ZyYW1lTG9hZFJlcXVlc3Q7Ci0gICAgICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsKLSAgICAgICAg
Ym9vbCBtX3NlbmROb3RpZmljYXRpb247Ci0gICAgICAgIGJvb2wgbV9zaG91bGRBbGxvd1BvcHVw
czsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2luTWFudWFsTG9hZGVyIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpbk1hbnVhbExvYWRlcigpIHt9Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpID0gMDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKSA9IDA7Ci0gICAgfTsK
LQotICAgIGNsYXNzIFBsdWdpblZpZXcgOiBwdWJsaWMgUGx1Z2luVmlld0Jhc2UKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgICAgICAgICAgICAgICwgcHJpdmF0ZSBQ
bHVnaW5TdHJlYW1DbGllbnQKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMg
UGx1Z2luTWFudWFsTG9hZGVyCi0gICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUgTWVkaWFD
YW5TdGFydExpc3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBsdWdpblZpZXc+IGNyZWF0ZShGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBI
VE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKLSAgICAgICAgdmlydHVhbCB+UGx1Z2luVmll
dygpOwotCi0gICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
cGx1Z2luLmdldCgpOyB9Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAg
IE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KLSNlbmRpZgotCi0g
ICAgICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3Rh
dGljIFBsdWdpblZpZXcqIGN1cnJlbnRQbHVnaW5WaWV3KCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0KCk7Ci0jZW5kaWYKLSAg
ICAgICAgUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gYmluZGluZ0luc3RhbmNl
KCk7Ci0KLSAgICAgICAgUGx1Z2luU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dHVzOyB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgLy8gTlBO
IGZ1bmN0aW9ucwotICAgICAgICBOUEVycm9yIGdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3Ig
Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KTsKLSAgICAgICAgTlBF
cnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1
aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEpOwotICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSk7Ci0g
ICAgICAgIE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFy
Z2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7Ci0gICAgICAgIGludDMyX3Qgd3JpdGUoTlBTdHJlYW0q
IHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7Ci0gICAgICAgIE5QRXJyb3IgZGVz
dHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwotI2VuZGlmCi0g
ICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCgpOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogdXNlckFnZW50U3RhdGljKCk7Ci0j
ZW5kaWYKLSAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7Ci0gICAgICAg
IAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUEVycm9yIGdldFZh
bHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7Ci0gICAgICAgIHN0YXRpYyBO
UEVycm9yIGdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7
Ci0gICAgICAgIE5QRXJyb3Igc2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlKTsKLSAgICAgICAgTlBFcnJvciBnZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJp
YWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pOwotICAg
ICAgICBOUEVycm9yIHNldFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzJfdCBsZW4pOwotICAgICAgICBO
UEVycm9yIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3Qg
Y2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIq
IHJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQzMl90KiB1bGVuLCBjaGFyKiogcGFzc3dvcmQs
IHVpbnQzMl90KiBwbGVuKTsKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChOUFJlY3QqKTsK
LSAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKTsKLSNlbmRpZgotICAgICAg
ICB2b2lkIGZvcmNlUmVkcmF3KCk7Ci0gICAgICAgIHZvaWQgcHVzaFBvcHVwc0VuYWJsZWRTdGF0
ZShib29sIHN0YXRlKTsKLSAgICAgICAgdm9pZCBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0g
ICAgICAgIGJvb2wgYXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0
SmF2YVNjcmlwdFBhdXNlZChib29sKTsKLQotICAgICAgICB2b2lkIHByaXZhdGVCcm93c2luZ1N0
YXRlQ2hhbmdlZChib29sKTsKLQotICAgICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2lu
U3RyZWFtKik7Ci0gICAgICAgIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyhQbHVnaW5TdHJl
YW0qIHN0cmVhbSkgeyBkaXNjb25uZWN0U3RyZWFtKHN0cmVhbSk7IH0KLQotICAgICAgICAvLyBX
aWRnZXQgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3Qg
SW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVSZWN0c0NoYW5nZWQoKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
c2hvdygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgY2xpcFJlY3RDaGFuZ2VkKCkgb3ZlcnJpZGU7Ci0KLSAgICAgICAgLy8gVGhpcyBt
ZXRob2QgaXMgdXNlZCBieSBwbHVnaW5zIG9uIGFsbCBwbGF0Zm9ybXMgdG8gb2J0YWluIGEgY2xp
cCByZWN0IHRoYXQgaW5jbHVkZXMgY2xpcHMgc2V0IGJ5IFdlYkNvcmUsCi0gICAgICAgIC8vIGUu
Zy4sIGluIG92ZXJmbG93OmF1dG8gc2VjdGlvbnMuICBUaGUgY2xpcCByZWN0cyBjb29yZGluYXRl
cyBhcmUgaW4gdGhlIGNvbnRhaW5pbmcgd2luZG93J3MgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAg
ICAgLy8gVGhpcyBjbGlwIGluY2x1ZGVzIGFueSBjbGlwcyB0aGF0IHRoZSB3aWRnZXQgaXRzZWxm
IHNldHMgdXAgZm9yIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgSW50UmVjdCB3aW5kb3dDbGlwUmVj
dCgpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCopOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudFZpc2libGUoYm9vbCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29s
IGlzUGx1Z2luVmlldygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAg
ICBGcmFtZSogcGFyZW50RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudEZyYW1lLmdldCgp
OyB9Ci0KLSAgICAgICAgdm9pZCBmb2N1c1BsdWdpbkVsZW1lbnQoKTsKLQotICAgICAgICBjb25z
dCBTdHJpbmcmIHBsdWdpbnNQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5zUGFnZTsgfQot
ICAgICAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlw
ZTsgfQotICAgICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0K
LSNpZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgICAgIGJvb2wgcG9wVXBDb250ZXh0TWVudShOUE1lbnUqKTsKLSNlbmRpZgotCi0jaWYgT1Mo
V0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIHN0YXRpYyBM
UkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXdXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBB
UkFNKTsKLSAgICAgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBX
UEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKLSAgICAgICAgV05EUFJPQyBwbHVnaW5XbmRQ
cm9jKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5XbmRQcm9jOyB9Ci0jZW5kaWYKLQotICAgICAg
ICAvLyBVc2VkIGZvciBtYW51YWwgbG9hZGluZwotICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZURh
dGEoY29uc3QgY2hhciosIGludCk7Ci0gICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOwot
ICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotCi0gICAgICAgIHN0
YXRpYyBib29sIGlzQ2FsbGluZ1BsdWdpbigpOwotCi0gICAgICAgIGJvb2wgc3RhcnQoKTsKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0aWMgdm9pZCBrZWVw
QWxpdmUoTlBQKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGtlZXBBbGl2ZSgpOwotCi0jaWYgUExB
VEZPUk0oWDExKQotICAgICAgICBzdGF0aWMgRGlzcGxheSogZ2V0UGx1Z2luRGlzcGxheShGcmFt
ZSopOwotICAgICAgICBzdGF0aWMgV2luZG93IGdldFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZy
YW1lKTsKLSNlbmRpZgotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luVmlldyhGcmFtZSog
cGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBQbHVnaW5QYWNrYWdlKiwgSFRNTFBsdWdJbkVs
ZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIGxvYWRNYW51YWxseSk7Ci0KLSAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMpOwotICAgICAgICBib29sIHN0YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKTsKLSAgICAgICAg
dm9pZCBpbml0KCk7Ci0gICAgICAgIGJvb2wgcGxhdGZvcm1TdGFydCgpOwotICAgICAgICB2b2lk
IHN0b3AoKTsKLSAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlldyopOwotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVx
dWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAg
IE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0
YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7Ci0gICAgICAgIE5Q
RXJyb3IgaGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBs
ZW4sIGNvbnN0IGNoYXIqIGJ1Zik7Ci0jZW5kaWYKLSAgICAgICAgc3RhdGljIHZvaWQgZnJlZVN0
cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCk7Ci0gICAgICAgIHZvaWQg
c2V0Q2FsbGluZ1BsdWdpbihib29sKSBjb25zdDsKLQotICAgICAgICB2b2lkIGludmFsaWRhdGVX
aW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIG1lZGlhQ2FuU3RhcnQoKTsKLQotI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotICAgICAgICB2b2lkIHBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyBIREMg
V0lOQVBJIGhvb2tlZEJlZ2luUGFpbnQoSFdORCwgUEFJTlRTVFJVQ1QqKTsKLSAgICAgICAgc3Rh
dGljIEJPT0wgV0lOQVBJIGhvb2tlZEVuZFBhaW50KEhXTkQsIGNvbnN0IFBBSU5UU1RSVUNUKik7
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0
aWMgYm9vbCBwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSAgICAgICAgYm9vbCBwbGF0Zm9ybUdldFZhbHVl
KE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSNl
bmRpZgotCi0gICAgICAgIFJlZlB0cjxGcmFtZT4gbV9wYXJlbnRGcmFtZTsKLSAgICAgICAgUmVm
UHRyPFBsdWdpblBhY2thZ2U+IG1fcGx1Z2luOwotICAgICAgICBIVE1MUGx1Z0luRWxlbWVudCog
bV9lbGVtZW50OwotICAgICAgICBib29sIG1faXNTdGFydGVkOwotICAgICAgICBVUkwgbV91cmw7
Ci0gICAgICAgIFBsdWdpblN0YXR1cyBtX3N0YXR1czsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+
IG1faW52YWxpZFJlY3RzOwotCi0gICAgICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVx
dWVzdCopOwotICAgICAgICB2b2lkIHNjaGVkdWxlUmVxdWVzdChzdGQ6OnVuaXF1ZV9wdHI8UGx1
Z2luUmVxdWVzdD4pOwotICAgICAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKCk7Ci0gICAgICAg
IHZvaWQgaW52YWxpZGF0ZVRpbWVyRmlyZWQoKTsKLSAgICAgICAgVGltZXIgbV9yZXF1ZXN0VGlt
ZXI7Ci0gICAgICAgIFRpbWVyIG1faW52YWxpZGF0ZVRpbWVyOwotCi0gICAgICAgIHZvaWQgcG9w
UG9wdXBzU3RhdGVUaW1lckZpcmVkKCk7Ci0gICAgICAgIFRpbWVyIG1fcG9wUG9wdXBzU3RhdGVU
aW1lcjsKLQotICAgICAgICB2b2lkIGxpZmVTdXBwb3J0VGltZXJGaXJlZCgpOwotICAgICAgICBU
aW1lciBtX2xpZmVTdXBwb3J0VGltZXI7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICAgICAgYm9vbCBkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYpOwotI2VuZGlmCi0jaWYg
ZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAg
ICBpbnQxNl90IGRpc3BhdGNoTlBDb2NvYUV2ZW50KE5QQ29jb2FFdmVudCYpOwotICAgICAgICBi
b29sIG1fdXBkYXRlZENvY29hVGV4dElucHV0UmVxdWVzdGVkOwotICAgICAgICBib29sIG1fa2V5
RG93blNlbnQ7Ci0gICAgICAgIHVpbnQxNl90IG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyOwotI2Vu
ZGlmCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICAgICAgdm9pZCBoYW5kbGVXaGVlbEV2
ZW50KFdoZWVsRXZlbnQqKTsKLSNlbmRpZgotICAgICAgICB2b2lkIHVwZGF0ZVBsdWdpbldpZGdl
dCgpOwotICAgICAgICB2b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50Kik7Ci0gICAgICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50
Kik7Ci0jaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICAgICAgdm9pZCBoYW5kbGVGb2N1c0luRXZlbnQoKTsKLSAgICAgICAgdm9pZCBoYW5kbGVG
b2N1c091dEV2ZW50KCk7Ci0jZW5kaWYKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIHZvaWQg
cGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KEhEQyk7Ci0gICAgICAgIFBhc3NSZWZQdHI8SW1h
Z2U+IHNuYXBzaG90KCk7Ci0jZW5kaWYKLQotICAgICAgICBpbnQgbV9tb2RlOwotICAgICAgICBp
bnQgbV9wYXJhbUNvdW50OwotICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOwotICAgICAgICBj
aGFyKiogbV9wYXJhbVZhbHVlczsKLSAgICAgICAgU3RyaW5nIG1fcGx1Z2luc1BhZ2U7Ci0KLSAg
ICAgICAgU3RyaW5nIG1fbWltZVR5cGU7Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX3VzZXJBZ2Vu
dDsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUFAgbV9pbnN0
YW5jZTsKLSAgICAgICAgTlBQX3QgbV9pbnN0YW5jZVN0cnVjdDsKLSAgICAgICAgTlBXaW5kb3cg
bV9ucFdpbmRvdzsKLSNlbmRpZgotCi0gICAgICAgIFZlY3Rvcjxib29sLCA0PiBtX3BvcHVwU3Rh
dGVTdGFjazsKLQotICAgICAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gbV9zdHJl
YW1zOwotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+PiBtX3Jl
cXVlc3RzOwotCi0gICAgICAgIGJvb2wgbV9pc1dpbmRvd2VkOwotICAgICAgICBib29sIG1faXNU
cmFuc3BhcmVudDsKLSAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsKLSAgICAgICAgYm9v
bCBtX2lzV2FpdGluZ1RvU3RhcnQ7Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIGJv
b2wgbV9uZWVkc1hFbWJlZDsKLSNlbmRpZgotCi0jaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7Ci0gICAgICAgIFdORFBST0MgbV9wbHVnaW5XbmRQcm9j
OwotICAgICAgICB1bnNpZ25lZCBtX2xhc3RNZXNzYWdlOwotICAgICAgICBib29sIG1faXNDYWxs
aW5nUGx1Z2luV25kUHJvYzsKLSAgICAgICAgSERDIG1fd21QcmludEhEQzsKLSAgICAgICAgYm9v
bCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0OwotI2VuZGlmCi0KLSNpZiAoUExBVEZPUk0oR1RL
KSAmJiBPUyhXSU5ET1dTKSkgfHwgUExBVEZPUk0oRUZMKQotICAgICAgICAvLyBPbiBNYWMgT1NY
IGFuZCBRdC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3
aWRnZXQsCi0gICAgICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMg
aXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcuCi0gICAgICAgIFBsYXRmb3Jt
UGx1Z2luV2lkZ2V0IG1fd2luZG93OwotcHVibGljOgotICAgICAgICBQbGF0Zm9ybVBsdWdpbldp
ZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93OyB9Ci0g
ICAgICAgIHZvaWQgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQoUGxhdGZvcm1QbHVnaW5XaWRnZXQg
d2lkZ2V0KSB7IG1fd2luZG93ID0gd2lkZ2V0OyB9Ci0jZWxzZQotcHVibGljOgotICAgICAgICB2
b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHdpZGdldCkg
eyBzZXRQbGF0Zm9ybVdpZGdldCh3aWRnZXQpOyB9Ci0gICAgICAgIFBsYXRmb3JtUGx1Z2luV2lk
Z2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gcGxhdGZvcm1XaWRnZXQo
KTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8IFBMQVRG
T1JNKEdUSykKLSAgICAgICAgdm9pZCBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci0jZWxpZiBkZWZp
bmVkKFhQX01BQ09TWCkKLSAgICAgICAgTlBfQ0dDb250ZXh0IG1fbnBDZ0NvbnRleHQ7Ci0gICAg
ICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHRSZWY7Ci0KLSAgICAgICAgdm9pZCBzZXROUFdpbmRv
d0lmTmVlZGVkKCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFu
Z2U7Ci0gICAgICAgIFBpeG1hcCBtX2RyYXdhYmxlOwotICAgICAgICBWaXN1YWwqIG1fdmlzdWFs
OwotICAgICAgICBDb2xvcm1hcCBtX2NvbG9ybWFwOwotICAgICAgICBEaXNwbGF5KiBtX3BsdWdp
bkRpc3BsYXk7Ci0KLSAgICAgICAgdm9pZCBpbml0WEV2ZW50KFhFdmVudCogZXZlbnQpOwotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgIHN0YXRpYyBnYm9vbGVhbiBwbHVnUmVt
b3ZlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdpblZpZXcqKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgcGx1Z0FkZGVkQ2FsbGJhY2soR3RrU29ja2V0KiwgUGx1Z2luVmlldyopOwotICAgICAgICB2
b2lkIHVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKCk7Ci0gICAgICAgIGJvb2wgbV9wbHVn
QWRkZWQ7Ci0gICAgICAgIEludFJlY3QgbV9kZWxheWVkQWxsb2NhdGlvbjsKLSNlbmRpZgotCi0g
ICAgICAgIEludFJlY3QgbV9jbGlwUmVjdDsgLy8gVGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBh
IHdpbmRvd2VkIHBsdWctaW4KLSAgICAgICAgSW50UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3
aW5kb3cgcmVjdC4KLQotICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5OwotICAgICAgICBSZWZQ
dHI8UGx1Z2luU3RyZWFtPiBtX21hbnVhbFN0cmVhbTsKLQotICAgICAgICBib29sIG1faXNKYXZh
U2NyaXB0UGF1c2VkOwotCi0gICAgICAgIGJvb2wgbV9oYXZlQ2FsbGVkU2V0V2luZG93OwotCi0g
ICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBzX2N1cnJlbnRQbHVnaW5WaWV3OwotICAgIH07Ci0K
LWlubGluZSBQbHVnaW5WaWV3KiB0b1BsdWdpblZpZXcoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAg
QVNTRVJUKCF3aWRnZXQgfHwgd2lkZ2V0LT5pc1BsdWdpblZpZXcoKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQpOwotfQotCi1pbmxpbmUgY29uc3QgUGx1Z2lu
VmlldyogdG9QbHVnaW5WaWV3KGNvbnN0IFdpZGdldCogd2lkZ2V0KQotewotICAgIEFTU0VSVCgh
d2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBQbHVnaW5WaWV3Kj4od2lkZ2V0KTsKLX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFu
eW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1BsdWdpblZpZXcoY29uc3Qg
UGx1Z2luVmlldyopOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL25wYXBpLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRkOTBhNTJi
N2ExZTdjOTZlOGRmNGQ4OTliY2Y4MDE5NDhlZmZkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgotI2lu
Y2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMg
dGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxs
IGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCi0vLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4g
VG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUg
YSBjYWxsIHRvIGEgcGx1Zy1pbi4KLS8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2
aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXc6OnN0YXJ0LgotLy8g
VGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4g
d2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0
YW5jZS4KLXN0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3Rh
bmNlKQotewotICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICByZXR1
cm4gUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZpZXcoKTsKLX0KLQotdm9pZCogTlBOX01lbUFs
bG9jKHVpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9p
ZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi11aW50MzJf
dCBOUE5fTWVtRmx1c2godWludDMyX3QpCi17Ci0gICAgLy8gRG8gbm90aGluZwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxvYWRQYWdlcykKLXsK
LSAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7Ci19Ci0KLU5QRXJyb3IgTlBO
X1JlcXVlc3RSZWFkKE5QU3RyZWFtKiwgTlBCeXRlUmFuZ2UqKQotewotICAgIHJldHVybiBOUEVS
Ul9TVFJFQU1fTk9UX1NFRUtBQkxFOwotfQotCi1OUEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQ
IGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90
aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3RpZnlEYXRhKTsKLX0KLQotTlBFcnJvciBOUE5f
R2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQp
Ci17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1
cmwsIHRhcmdldCk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNl
LCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25z
dCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFy
Z2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RV
UkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWlu
dDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQotewotICAgIHJldHVybiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwgdGFyZ2V0LCBsZW4s
IGJ1ZiwgZmlsZSk7Ci19Ci0KLU5QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5Q
TUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKLXsK
LSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+bmV3U3RyZWFtKHR5
cGUsIHRhcmdldCwgc3RyZWFtKTsKLX0KLQotaW50MzJfdCBOUE5fV3JpdGUoTlBQIGluc3RhbmNl
LCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKQotewotICAgIHJl
dHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53cml0ZShzdHJlYW0sIGxlbiwg
YnVmZmVyKTsKLX0KLQotTlBFcnJvciBOUE5fRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5Q
U3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7Ci19
Ci0KLWNvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKQotewotICAgIFBsdWdp
blZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOwotCi0gICAgIGlm
ICghdmlldykKLSAgICAgICAgIHJldHVybiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKTsK
LSAKLSAgICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Ci19Ci0KLXZvaWQgTlBOX1N0YXR1cyhO
UFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOwotfQotCi12b2lkIE5QTl9JbnZhbGlk
YXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCi17Ci0gICAgUGx1Z2lu
VmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7Ci0jaWYgZGVmaW5l
ZChYUF9VTklYKQotICAgIC8vIE5TUGx1Z2luV3JhcHBlciwgYSBwbHVnaW4gd3JhcHBlciBiaW5h
cnkgdGhhdCBhbGxvd3MgcnVubmluZyAzMi1iaXQgcGx1Z2lucwotICAgIC8vIG9uIDY0LWJpdCBh
cmNoaXRlY3R1cmVzIHR5cGljYWxseSB1c2VkIGluIFgxMSwgd2lsbCBzb21ldGltZXMgZ2l2ZSB1
cyBhIG51bGwgTlBQIGhlcmUuCi0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0jZW5k
aWYKLSAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVjdCk7Ci19Ci0KLXZvaWQgTlBO
X0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQot
ewotICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWdpb24o
aW52YWxpZFJlZ2lvbik7Ci19Ci0KLXZvaWQgTlBOX0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkK
LXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5mb3JjZVJlZHJhdygpOwot
fQotCi1OUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKTsKLQotICAgICBpZiAoIXZpZXcpCi0gICAgICAgICByZXR1cm4g
UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlKTsKLQotICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFs
dWUpOwotfQotCi1OUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOwotfQotCi12b2lkKiBOUE5f
R2V0SmF2YUVudigpCi17Ci0gICAgLy8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCogTlBOX0dldEphdmFQZWVyKE5QUCkKLXsKLSAgICAvLyBVbnN1cHBvcnRlZAotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5j
ZSwgTlBCb29sIGVuYWJsZWQpCi17Ci0gICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+cHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShlbmFibGVkKTsKLX0KLQotdm9pZCBOUE5fUG9wUG9w
dXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkKLXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5wb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLX0KLQotZXh0ZXJuICJDIiB0
eXBlZGVmIHZvaWQgUGx1Z2luVGhyZWFkQXN5bmNDYWxsRnVuY3Rpb24odm9pZCopOwotdm9pZCBO
UE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsKE5QUCBpbnN0YW5jZSwgUGx1Z2luVGhyZWFkQXN5bmND
YWxsRnVuY3Rpb24gZnVuYywgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgLy8gQ2FsbGJhY2sgZnVu
Y3Rpb24gdHlwZSBvbmx5IGRpZmZlcnMgZnJvbSBNYWluVGhyZWFkRnVuY3Rpb24gYnkgYmVpbmcg
ZXh0ZXJuICJDIiwgd2hpY2ggZG9lc24ndCBhZmZlY3QgY2FsbGluZyBjb252ZW50aW9uIG9uIGFu
eSBjb21waWxlcnMgd2UgdXNlLgotICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVk
dWxlcigpLnNjaGVkdWxlQ2FsbChpbnN0YW5jZSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyOjpNYWluVGhyZWFkRnVuY3Rpb24qPihmdW5jKSwgdXNlckRhdGEpOwot
fQotCi1OUEVycm9yIE5QTl9HZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlh
YmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxl
bikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFs
dWVGb3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUsIGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX1Nl
dFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikKLXsKLSAgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c2V0VmFsdWVGb3JVUkwodmFyaWFi
bGUsIHVybCwgdmFsdWUsIGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX0dldEF1dGhlbnRpY2F0aW9u
SW5mbyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0
LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hhciogcmVhbG0sIGNo
YXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29yZCwgdWludDMyX3Qq
IHBsZW4pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdl
dEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90b2NvbCwgaG9zdCwgcG9ydCwgc2NoZW1lLCByZWFsbSwg
dXNlcm5hbWUsIHVsZW4sIHBhc3N3b3JkLCBwbGVuKTsKLX0KLQotTlBFcnJvciBOUE5fUG9wVXBD
b250ZXh0TWVudShOUFAgaW5zdGFuY2UsIE5QTWVudSogbWVudSkKLXsKLSAgICBVTlVTRURfUEFS
QU0oaW5zdGFuY2UpOwotICAgIFVOVVNFRF9QQVJBTShtZW51KTsKLSAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QYWlu
dEhvb2tzLmFzbSBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BhaW50SG9va3MuYXNtCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTA4ODEzNTZhMGRkY2Q3ODMwNzI4MTFlOWYx
NWExMTU5NGIxODVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BhaW50SG9va3MuYXNtCisrKyAvZGV2L251
bGwKQEAgLTEsNTAgKzAsMCBAQAotOy8qCi07ICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLTsKLTsgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotOyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotOyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLTsgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotOwotOyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLTsgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LTsgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLTsgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi07Ci07ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLTsgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LTsgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLTsgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi07Ki8K
LQotO0hEQyBfX3N0ZGNhbGwgX0hCZWdpblBhaW50KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVDVCBs
cFBhaW50KTsKLQotUFVCTElDICBfSEJlZ2luUGFpbnQKLQotX1RFWFQgICBTRUdNRU5UCi0KLV9I
QmVnaW5QYWludCBQUk9DCi0gICAgIG1vdiAgcjEwLHJjeAotICAgICBtb3YgIGVheCwxMDE3aAot
ICAgICBzeXNjYWxsCi0gICAgIHJldAotX0hCZWdpblBhaW50IEVORFAKLQotX1RFWFQgICBFTkRT
Ci0KLTtCT09MIF9fc3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJV
Q1QqIGxwUGFpbnQpOwotCi1QVUJMSUMgIF9IRW5kUGFpbnQKLQotX1RFWFQgICBTRUdNRU5UCi0K
LV9IRW5kUGFpbnQgUFJPQwotICAgIG1vdiAgcjEwLHJjeAotICAgIG1vdiAgZWF4LDEwMTloCi0g
ICAgc3lzY2FsbAotICAgIHJldAotX0hFbmRQYWludCBFTkRQCi0KLV9URVhUICAgRU5EUwotCi1F
TkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNl
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RjNmNmMzQ5OWZjMjlkZTZhYzVhZWFk
YjM5MjQwNDI3MWFhMGUxOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgotCi0jaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVk
ZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
aW5saW5lIHZvaWQgYWRkUGx1Z2luUGF0aHNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBIYXNo
U2V0PFN0cmluZz4mIHBhdGhzKQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0
ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAs
IEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBFUlJP
Ul9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3Y2hhcl90IG5hbWVbMTI4XTsKLSAg
ICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAg
IGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgIERXT1JEIG5hbWVMZW4gPSBXVEZfQVJS
QVlfTEVOR1RIKG5hbWUpOwotICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwg
bmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChy
ZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFdD
SEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXpl
b2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAgcmVzdWx0ID0gZ2V0
UmVnaXN0cnlWYWx1ZShrZXksIG5hbWUsIEwiUGF0aCIsICZ0eXBlLCBwYXRoU3RyLCAmcGF0aFN0
clNpemUpOwotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAhPSBS
RUdfU1opCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBwYXRocy5hZGQoU3RyaW5n
KHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLSAgICB9Ci0KLSAg
ICBSZWdDbG9zZUtleShrZXkpOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5Q
YXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KLSAgICBIYXNo
U2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwotCi0gICAgSEFORExFIGhGaW5kID0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUU7Ci0gICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7Ci0KLSAg
ICBTdHJpbmcgb2xkV01QUGx1Z2luUGF0aDsKLSAgICBTdHJpbmcgbmV3V01QUGx1Z2luUGF0aDsK
LQotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbkRpcmVj
dG9yaWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwqIjsKLQotICAgICAgICBoRmluZCA9IEZpbmRG
aXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCks
ICZmaW5kRmlsZURhdGEpOwotCi0gICAgICAgIGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9W
QUxVRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAg
IGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVD
VE9SWSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZp
bGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURh
dGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJu
cCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKLSAgICAg
ICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8
ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBm
aWxlbmFtZTsKLSAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCku
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgcGF0
aHMuYWRkKGZ1bGxQYXRoKTsKLQotICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZp
bGVuYW1lLCAibnBkc3BsYXkuZGxsIikpCi0gICAgICAgICAgICAgICAgb2xkV01QUGx1Z2luUGF0
aCA9IGZ1bGxQYXRoOwotICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmls
ZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKLSAgICAgICAgICAgICAgICBuZXdXTVBQbHVnaW5QYXRo
ID0gZnVsbFBhdGg7Ci0KLSAgICAgICAgfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZp
bmRGaWxlRGF0YSkgIT0gMCk7Ci0KLSAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKLSAgICB9Ci0K
LSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBhdGhz
KTsKLSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGF0
aHMpOwotCi0gICAgLy8gSWYgYm90aCB0aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJl
c2VudCBpbiB0aGUgcGx1Z2lucyBzZXQsIAotICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBz
byB3ZSBkb24ndCBlbmQgdXAgY2hvb3NpbmcgdGhlIG9sZCBvbmUuCi0gICAgaWYgKCFvbGRXTVBQ
bHVnaW5QYXRoLmlzRW1wdHkoKSAmJiAhbmV3V01QUGx1Z2luUGF0aC5pc0VtcHR5KCkpCi0gICAg
ICAgIHBhdGhzLnJlbW92ZShvbGRXTVBQbHVnaW5QYXRoKTsKLX0KLQotc3RhdGljIGlubGluZSBW
ZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5n
KQotewotICAgIFZlY3RvcjxpbnQ+IHZlcnNpb247Ci0KLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9
IDA7Ci0gICAgdW5zaWduZWQgZW5kUG9zOwotICAgIAotICAgIHdoaWxlIChzdGFydFBvcyA8IHZl
cnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKLSAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsg
ZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKTsgKytlbmRQb3MpCi0gICAgICAgICAgICBp
ZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10g
PT0gJ18nKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGludCB2ZXJzaW9uQ29t
cG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0
UG9zKS50b0ludCgpOwotICAgICAgICB2ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsK
LQotICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZl
cnNpb247Ci19Ci0KLS8vIFRoaXMgcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0
aGFuIHZlcnNpb25CCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZl
Y3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQotewotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgewotICAgICAg
ICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltpXSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBlbHNlIGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwg
dGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJh
IGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmlu
Zz4mIGRpcmVjdG9yaWVzKQotewotICAgIC8vIEVudW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4g
ZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lzdHJ5Ci0gICAgSEtFWSBrZXk7Ci0gICAgTE9ORyByZXN1
bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwg
VEVYVCgiU29mdHdhcmVcXE1vemlsbGEiKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChy
ZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAg
ICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5
cwotICAgICAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAgICAgICAgRFdPUkQgbmFt
ZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7Ci0gICAgICAgICAgICByZXN1bHQg
PSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9k
aWZpZWQpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9
IFN0cmluZyhuYW1lLCBuYW1lTGVuKSArICJcXEV4dGVuc2lvbnMiOwotICAgICAgICAgICAgSEtF
WSBleHRlbnNpb25zS2V5OwotCi0gICAgICAgICAgICAvLyBUcnkgb3BlbmluZyB0aGUga2V5Ci0g
ICAgICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoa2V5LCBleHRlbnNpb25zUGF0aC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgS0VZX1JFQUQsICZleHRlbnNp
b25zS2V5KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gTm93IGdldCB0aGUgcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAg
ICAgICAgICBXQ0hBUiBwbHVnaW5zRGlyZWN0b3J5U3RyW19NQVhfUEFUSF07Ci0gICAgICAgICAg
ICAgICAgRFdPUkQgcGx1Z2luc0RpcmVjdG9yeVNpemUgPSBzaXplb2YocGx1Z2luc0RpcmVjdG9y
eVN0cik7Ci0gICAgICAgICAgICAgICAgRFdPUkQgdHlwZTsKLQotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQbHVnaW5zIiksIDAs
ICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5zRGlyZWN0b3J5U3RyLCAmcGx1Z2luc0RpcmVjdG9yeVNp
emUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5
cGUgPT0gUkVHX1NaKQotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3Ry
aW5nKHBsdWdpbnNEaXJlY3RvcnlTdHIsIHBsdWdpbnNEaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdD
SEFSKSAtIDEpKTsKLQotICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZWdDbG9zZUtl
eShrZXkpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBs
YXllclBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAg
Ly8gVGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1
Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCi0gICAgV0NIQVIgcGx1
Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOwotICAgIERXT1JEIHBsdWdpbkRpcmVjdG9y
eVNpemUgPSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxc
UEZpbGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChw
bHVnaW5EaXJlY3RvcnlTdHIpKTsKLQotICAgIGlmIChwbHVnaW5EaXJlY3RvcnlTaXplID4gMCAm
JiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IFdURl9BUlJBWV9MRU5HVEgocGx1Z2luRGlyZWN0b3J5
U3RyKSkKLSAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlT
dHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7Ci0KLSAgICBEV09SRCB0eXBlOwotICAgIFdD
SEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3Rh
bGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJ
TkUsIEwiU29mdHdhcmVcXE1pY3Jvc29mdFxcTWVkaWFQbGF5ZXIiLCBMIkluc3RhbGxhdGlvbiBE
aXJlY3RvcnkiLCAmdHlwZSwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlv
bkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5
cGUgPT0gUkVHX1NaKQotICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKGluc3RhbGxh
dGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hB
UikgLSAxKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9iZUFjcm9iYXRQbHVnaW5E
aXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIEhLRVkga2V5Owot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVY
VCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7
Ci0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgVmVj
dG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247Ci0gICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRW
ZXJzaW9uU3RyaW5nOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBp
ID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6
ZW9mKFdDSEFSKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUs
ICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0
ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBWZWN0b3I8
aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFt
ZUxlbikpOwotICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRl
c3RBY3JvYmF0VmVyc2lvbikpIHsKLSAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0g
YWNyb2JhdFZlcnNpb247Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9
IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbGF0
ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgRFdPUkQgdHlwZTsK
LSAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAg
IERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRo
U3RyKTsKLQotICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVc
XEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsg
IlxcSW5zdGFsbFBhdGgiOwotICAgICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlf
TE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCksIDAsICZ0eXBlLCBhY3JvYmF0SW5zdGFsbFBhdGhTdHIsICZhY3Jv
YmF0SW5zdGFsbFBhdGhTaXplKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NF
U1MpIHsKLSAgICAgICAgICAgIFN0cmluZyBhY3JvYmF0UGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5n
KGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihX
Q0hBUikgLSAxKSArICJcXGJyb3dzZXIiOwotICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5k
KGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xv
c2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZEphdmFQbHVnaW5EaXJlY3Rv
cnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIEhLRVkga2V5OwotICAgIEhS
RVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29m
dHdhcmVcXEphdmFTb2Z0XFxKYXZhIFBsdWctaW4iKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAg
IGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0NI
QVIgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgIFZlY3Rvcjxp
bnQ+IGxhdGVzdEphdmFWZXJzaW9uOwotICAgIFN0cmluZyBsYXRlc3RKYXZhVmVyc2lvblN0cmlu
ZzsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKysp
IHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7
Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwg
MCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVmVjdG9yPGludD4gamF2YVZl
cnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUsIG5hbWVMZW4pKTsKLSAgICAg
ICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhqYXZhVmVyc2lvbiwgbGF0ZXN0SmF2YVZlcnNpb24pKSB7
Ci0gICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lvbiA9IGphdmFWZXJzaW9uOwotICAgICAgICAg
ICAgbGF0ZXN0SmF2YVZlcnNpb25TdHJpbmcgPSBTdHJpbmcobmFtZSwgbmFtZUxlbik7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWxhdGVzdEphdmFWZXJzaW9uU3RyaW5nLmlzRW1wdHko
KSkgewotICAgICAgICBEV09SRCB0eXBlOwotICAgICAgICBXQ0hBUiBqYXZhSW5zdGFsbFBhdGhT
dHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgamF2YUluc3RhbGxQYXRoU2l6ZSA9IHNpemVv
ZihqYXZhSW5zdGFsbFBhdGhTdHIpOwotICAgICAgICBEV09SRCB1c2VOZXdQbHVnaW5WYWx1ZTsK
LSAgICAgICAgRFdPUkQgdXNlTmV3UGx1Z2luU2l6ZTsKLQotICAgICAgICBTdHJpbmcgamF2YVBs
dWdpbktleVBhdGggPSAiU29mdHdhcmVcXEphdmFTb2Z0XFxKYXZhIFBsdWctaW5cXCIgKyBsYXRl
c3RKYXZhVmVyc2lvblN0cmluZzsKLSAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShI
S0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpLCBMIlVzZU5ld0phdmFQbHVnaW4iLCAmdHlwZSwgJnVzZU5ld1Bs
dWdpblZhbHVlLCAmdXNlTmV3UGx1Z2luU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBF
UlJPUl9TVUNDRVNTICYmIHVzZU5ld1BsdWdpblZhbHVlID09IDEpIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBqYXZhUGx1Z2luS2V5
UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgTCJKYXZhSG9tZSIs
ICZ0eXBlLCBqYXZhSW5zdGFsbFBhdGhTdHIsICZqYXZhSW5zdGFsbFBhdGhTaXplKTsKLSAgICAg
ICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIFN0
cmluZyBqYXZhUGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5nKGphdmFJbnN0YWxsUGF0aFN0ciwgamF2
YUluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJpblxcbmV3X3BsdWdp
biI7Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKGphdmFQbHVnaW5EaXJlY3Rv
cnkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXko
a2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgp
Ci17Ci0gICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVTdHJbX01BWF9QQVRIXTsKLSAgICBzdGF0aWMg
U3RyaW5nIHBsdWdpbnNEaXJlY3Rvcnk7Ci0gICAgc3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luRGly
ZWN0b3J5ID0gZmFsc2U7Ci0KLSAgICBpZiAoIWNhY2hlZFBsdWdpbkRpcmVjdG9yeSkgewotICAg
ICAgICBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSB0cnVlOwotCi0gICAgICAgIGludCBtb2R1bGVG
aWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAsIG1vZHVsZUZpbGVOYW1lU3RyLCBfTUFY
X1BBVEgpOwotCi0gICAgICAgIGlmICghbW9kdWxlRmlsZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5h
bWVMZW4gPT0gX01BWF9QQVRIKQotICAgICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAgIGlm
ICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVOYW1lU3RyKSkKLSAgICAgICAgICAgIGdv
dG8gZXhpdDsKLQotICAgICAgICBwbHVnaW5zRGlyZWN0b3J5ID0gU3RyaW5nKG1vZHVsZUZpbGVO
YW1lU3RyKSArICJcXFBsdWdpbnMiOwotICAgIH0KLWV4aXQ6Ci0gICAgcmV0dXJuIHBsdWdpbnNE
aXJlY3Rvcnk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luRGly
ZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIFdDSEFSIHN5c3Rl
bURpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0KLSAgICBpZiAoIUdldFN5c3RlbURpcmVjdG9yeShz
eXN0ZW1EaXJlY3RvcnlTdHIsIFdURl9BUlJBWV9MRU5HVEgoc3lzdGVtRGlyZWN0b3J5U3RyKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFY
X1BBVEhdOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVt
RGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7Ci0gICAgZGlyZWN0b3JpZXMu
YXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9t
ZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hv
Y2t3YXZlIDEwIikpOwotICAgIGRpcmVjdG9yaWVzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5
U3RyKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5E
aXJlY3RvcmllcygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gZGlyZWN0b3JpZXM7Ci0gICAgU3Ry
aW5nIG91ckRpcmVjdG9yeSA9IHNhZmFyaVBsdWdpbnNEaXJlY3RvcnkoKTsKLQotICAgIGlmICgh
b3VyRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQob3VyRGly
ZWN0b3J5KTsKLSAgICBhZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkoZGlyZWN0b3JpZXMp
OwotICAgIGFkZE1vemlsbGFQbHVnaW5EaXJlY3RvcmllcyhkaXJlY3Rvcmllcyk7Ci0gICAgYWRk
V2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KGRpcmVjdG9yaWVzKTsKLSAgICBhZGRN
YWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMpOwotCi0gICAgcmV0dXJuIGRp
cmVjdG9yaWVzOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRp
cmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKLXsKLSAgICBTdHJpbmcgb3VyRGlyZWN0
b3J5ID0gc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgpOwotCi0gICAgaWYgKCFvdXJEaXJlY3Rvcnku
aXNOdWxsKCkgJiYgIWRpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG91ckRpcmVj
dG9yeSA9PSBkaXJlY3Rvcnk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1M2MzMTVjMjAxODQzOTRmM2I0
MDY0YTNmNTQ0NzU3M2VkMmNmMDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0KLSNp
bmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0vLyBTZXQgYSB0aW1lciB0byBtYWtlIHN1cmUgd2UgcHJvY2VzcyBh
bnkgcXVldWVkIG1lc3NhZ2VzIGF0IGxlYXN0IGV2ZXJ5IDE2bXMuCi0vLyBUaGlzIHZhbHVlIGFs
bG93cyBGbGFzaCA2MCBtZXNzYWdlcy9zZWNvbmQsIHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggZm9y
IHZpZGVvCi0vLyBwbGF5YmFjaywgYW5kIGFsc28gZ2V0cyB1cyBvdmVyIHRoZSBsaW1pdCBmb3Ig
a2lja2luZyBpbnRvIGhpZ2gtcmVzb2x1dGlvbgotLy8gdGltZXIgbW9kZSAoc2VlIFNoYXJlZFRp
bWVyV2luLmNwcCkuCi1zdGF0aWMgY29uc3QgZG91YmxlIE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRl
cnZhbCA9IDAuMDE2OwotCi0vLyBEdXJpbmcgYSBjb250aW51b3VzIHN0cmVhbSBvZiBtZXNzYWdl
cywgcHJvY2VzcyBvbmUgZXZlcnkgNW1zLgotc3RhdGljIGNvbnN0IGRvdWJsZSBNZXNzYWdlRGly
ZWN0UHJvY2Vzc2luZ0ludGVydmFsID0gMC4wMDU7Ci0KLVBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW46OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oUGx1Z2luVmlldyogcGx1Z2luVmlldykKLSAg
ICA6IG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3KQotICAgICwgbV9iYWNrKDApCi0gICAgLCBtX2Zy
b250KDApCi0gICAgLCBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyKCp0aGlzLCAmUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCkKLSAgICAsIG1fbGFzdE1l
c3NhZ2VUaW1lKDApCi17Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJlZSBsaXN0IHdpdGggb3Vy
IGlubGluZSBtZXNzYWdlcwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1JbmxpbmVN
ZXNzYWdlcyAtIDE7IGkrKykKLSAgICAgICAgbV9pbmxpbmVNZXNzYWdlc1tpXS5uZXh0ID0gJm1f
aW5saW5lTWVzc2FnZXNbaSArIDFdOwotICAgIG1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVz
c2FnZXMgLSAxXS5uZXh0ID0gMDsKLSAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9ICZtX2lubGlu
ZU1lc3NhZ2VzWzBdOwotfQotCi1QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjp+UGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbigpCi17Ci0gICAgUGx1Z2luTWVzc2FnZSogbmV4dDsKLQotICAgIGZv
ciAoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBu
ZXh0KSB7Ci0gICAgICAgIG5leHQgPSBtZXNzYWdlLT5uZXh0OwotICAgICAgICBmcmVlTWVzc2Fn
ZShtZXNzYWdlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
YXBwZW5kTWVzc2FnZShIV05EIGhXbmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQotewotICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBhbGxvY2F0ZU1lc3NhZ2Uo
KTsKLQotICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25kOwotICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsK
LSAgICBtZXNzYWdlLT53UGFyYW0gPSB3UGFyYW07Ci0gICAgbWVzc2FnZS0+bFBhcmFtID0gbFBh
cmFtOwotICAgIG1lc3NhZ2UtPm5leHQgPSAwOwotCi0gICAgaWYgKG1fYmFjaykKLSAgICAgICAg
bV9iYWNrLT5uZXh0ID0gbWVzc2FnZTsKLSAgICBtX2JhY2sgPSBtZXNzYWdlOwotICAgIGlmICgh
bV9mcm9udCkKLSAgICAgICAgbV9mcm9udCA9IG1lc3NhZ2U7Ci0KLSAgICAvLyBJZiBpdCBoYXMg
YmVlbiBtb3JlIHRoYW4gTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCBiZXR3ZWVuIHRo
cm90dGxlZCBtZXNzYWdlcywKLSAgICAvLyBnbyBhaGVhZCBhbmQgcHJvY2VzcyBhIG1lc3NhZ2Ug
ZGlyZWN0bHkuCi0gICAgZG91YmxlIGN1cnJlbnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCk7Ci0gICAgaWYgKGN1cnJlbnRUaW1lIC0gbV9sYXN0TWVzc2FnZVRpbWUgPiBNZXNz
YWdlRGlyZWN0UHJvY2Vzc2luZ0ludGVydmFsKSB7Ci0gICAgICAgIHByb2Nlc3NRdWV1ZWRNZXNz
YWdlKCk7Ci0gICAgICAgIG1fbGFzdE1lc3NhZ2VUaW1lID0gY3VycmVudFRpbWU7Ci0gICAgICAg
IGlmICghbV9mcm9udCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
bWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9tZXNzYWdlVGhyb3R0
bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsKLX0KLQot
dm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjpwcm9jZXNzUXVldWVkTWVzc2FnZSgpCi17
Ci0gICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7Ci0gICAgbV9mcm9udCA9IG1f
ZnJvbnQtPm5leHQ7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbV9iYWNrKQotICAgICAgICBtX2JhY2sg
PSAwOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgUGx1Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uIHdo
aWxlIGNhbGxpbmcgaXRzIHdpbmRvdyBwcm9jLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82OTMw
MjgwPgotICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KG1fcGx1Z2luVmlldyk7Ci0gICAg
OjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblZpZXctPnBsdWdpblduZFByb2MoKSwgbWVzc2FnZS0+
aFduZCwgbWVzc2FnZS0+bXNnLCBtZXNzYWdlLT53UGFyYW0sIG1lc3NhZ2UtPmxQYXJhbSk7Ci0K
LSAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luOjptZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKCkKLXsKLSAgICBwcm9jZXNzUXVldWVk
TWVzc2FnZSgpOwotCi0gICAgaWYgKG1fZnJvbnQpCi0gICAgICAgIG1fbWVzc2FnZVRocm90dGxl
VGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7Ci19Ci0KLVBs
dWdpbk1lc3NhZ2UqIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFsbG9jYXRlTWVzc2FnZSgp
Ci17Ci0gICAgUGx1Z2luTWVzc2FnZSAqbWVzc2FnZTsKLQotICAgIGlmIChtX2ZyZWVJbmxpbmVN
ZXNzYWdlcykgewotICAgICAgICBtZXNzYWdlID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7Ci0gICAg
ICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZS0+bmV4dDsKLSAgICB9IGVsc2UKLSAg
ICAgICAgbWVzc2FnZSA9IG5ldyBQbHVnaW5NZXNzYWdlOwotCi0gICAgcmV0dXJuIG1lc3NhZ2U7
Ci19Ci0KLWJvb2wgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKFBs
dWdpbk1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIG1lc3NhZ2UgPj0gJm1faW5saW5l
TWVzc2FnZXNbMF0gJiYgbWVzc2FnZSA8PSAmbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNz
YWdlcyAtIDFdOwotfQotCi12b2lkIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNz
YWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKGlzSW5saW5lTWVzc2FnZSht
ZXNzYWdlKSkgewotICAgICAgICBtZXNzYWdlLT5uZXh0ID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7
Ci0gICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgZGVsZXRlIG1lc3NhZ2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1MTAzMDgzNmQzYTNlOTI3N2E2
MGQ1N2FkNjM3YzVhZmYxZGFjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKLSNkZWZpbmUgUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bl9oCi0KLSNpbmNsdWRlICJUaW1lci5oIgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgUGx1Z2luVmlldzsKLQotICAgIHN0cnVjdCBQbHVn
aW5NZXNzYWdlIHsKLSAgICAgICAgSFdORCBoV25kOwotICAgICAgICBVSU5UIG1zZzsKLSAgICAg
ICAgV1BBUkFNIHdQYXJhbTsKLSAgICAgICAgTFBBUkFNIGxQYXJhbTsKLQotICAgICAgICBzdHJ1
Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbiB7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luKFBsdWdpblZpZXcqKTsKLSAgICAgICAgflBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4o
KTsKLQotICAgICAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoSFdORCwgVUlOVCBtc2csIFdQQVJBTSwg
TFBBUkFNKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgcHJvY2Vzc1F1ZXVlZE1lc3Nh
Z2UoKTsKLSAgICAgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKCk7Ci0gICAgICAg
IFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2FnZSgpOwotICAgICAgICBib29sIGlzSW5saW5l
TWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKLSAgICAgICAgdm9pZCBmcmVlTWVzc2Fn
ZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKLQotICAgICAgICBQbHVnaW5WaWV3KiBtX3BsdWdp
blZpZXc7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKLSAgICAgICAgUGx1Z2luTWVz
c2FnZSogbV9mcm9udDsKLQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IE51bUlubGluZU1lc3Nh
Z2VzID0gNDsKLSAgICAgICAgUGx1Z2luTWVzc2FnZSBtX2lubGluZU1lc3NhZ2VzW051bUlubGlu
ZU1lc3NhZ2VzXTsKLSAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcmVlSW5saW5lTWVzc2FnZXM7
Ci0KLSAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcjsKLSAgICAgICAgZG91Ymxl
IG1fbGFzdE1lc3NhZ2VUaW1lOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTg1MjU3ZDYyMjkyNzIwOTE4YTUxYTM2ZDgyN2Q4Y2NkMmQ0MTljMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFj
a2FnZS5oIgotCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJUaW1lci5o
IgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFN0
cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBMUFZPSUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBT
dHJpbmcmIGluZm8pCi17Ci0gICAgTFBWT0lEIGJ1ZmZlcjsKLSAgICBVSU5UIGJ1ZmZlckxlbmd0
aDsKLSAgICBTdHJpbmcgc3ViSW5mbyA9ICJcXFN0cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiAr
IGluZm87Ci0gICAgYm9vbCByZXR2YWwgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEs
Ci0gICAgICAgIGNvbnN0X2Nhc3Q8VUNoYXIqPihzdWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpKSwKLSAgICAgICAgJmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7Ci0g
ICAgaWYgKCFyZXR2YWwgfHwgYnVmZmVyTGVuZ3RoID09IDApCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIC8vIFN1YnRyYWN0IDEgZnJvbSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50
IHRoZSB0cmFpbGluZyBudWxsIGNoYXJhY3Rlci4KLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBidWZmZXJMZW5ndGggLSAxKTsKLX0KLQotYm9vbCBQ
bHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkKLXsKLSAgICBpZiAobmFtZSgpID09
ICJDaXRyaXggSUNBIENsaWVudCIpIHsKLSAgICAgICAgLy8gVGhlIENpdHJpeCBJQ0EgQ2xpZW50
IHBsdWctaW4gcmVxdWlyZXMgYSBNb3ppbGxhLWJhc2VkIGJyb3dzZXI7IHNlZSA8cmRhcjovLzY0
MTg2ODE+LgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSgpID09
ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewotICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRh
cjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQu
Y29tLgotICAgICAgICAvLyB0aGUgbGF0ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRv
ZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNoLCBzbyBhbGxvdyBpdAotICAgICAgICAvLyBhbmQg
YW55IG5ld2VyIHZlcnNpb25zCi0gICAgICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZl
cnNpb24gc2xQbHVnaW5NaW5SZXF1aXJlZCgweDUxQkUwMDAwLCAweDAwMDEwMDAwKTsKLQotICAg
ICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKHNsUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
ZmlsZU5hbWUoKSwgIm5wbW96YXguZGxsIikpIHsKLSAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3pp
bGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRs
bAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGZpbGVOYW1lKCksICJucHdwZi5kbGwiKSkgewotICAgICAgICAvLyBCdWcgNTcxMTk6IE1pY3Jv
c29mdCBXaW5kb3dzIFByZXNlbnRhdGlvbiBGb3VuZGF0aW9uIChXUEYpIHBsdWctaW4gY29tcGxh
aW5zIGFib3V0IG1pc3NpbmcgeHBjb20uZGxsCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0g
ZWxzZSBpZiAobmFtZSgpID09ICJZYWhvbyBBcHBsaWNhdGlvbiBTdGF0ZSBQbHVnaW4iKSB7Ci0g
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg2MAot
ICAgICAgICAvLyBCdWcgaW4gWWFob28gQXBwbGljYXRpb24gU3RhdGUgcGx1Zy1pbiBlYXJsaWVy
IHRoYW4gMS4wLjAuNiBsZWFkcyB0byBoZWFwIGNvcnJ1cHRpb24uIAotICAgICAgICBzdGF0aWMg
Y29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHlhaG9vQXBwU3RhdGVQbHVnaW5NaW5SZXF1aXJl
ZCgweDAwMDAwMDA2LCAweDAwMDEwMDAwKTsKLSAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lv
bih5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5QYWNr
YWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAo
bWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotICAgICAgICBz
dGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGZsYXNoVGVuVmVyc2lvbigweDAwMDAw
MDAwLCAweDAwMGEwMDAwKTsKLQotICAgICAgICAvLyBQcmUgMTAgRmxhc2ggb25seSByZXF1ZXN0
cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50Ci0g
ICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oZmxhc2hUZW5WZXJzaW9uKSA8IDApCi0gICAg
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOwot
Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0g
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3Nh
Z2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcp
OwotICAgIH0KLQotICAgIGlmIChuYW1lKCkuY29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG5hbWUo
KS5jb250YWlucygiV2luZG93cyBNZWRpYSIpKSB7Ci0gICAgICAgIC8vIFRoZSBXTVAgcGx1Z2lu
IHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIg
dXBkYXRlcyBpdHMgc2l6ZSwgc28KLSAgICAgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUg
cGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVn
aW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKLQotICAgICAgICAvLyBXaW5kb3dsZXNz
IG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJl
bW92ZSB0aGF0IHBhcmFtZXRlciAKLSAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhl
IHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xl
c3NWaWRlb1BhcmFtKTsKLQotICAgICAgICAvLyBXTVAgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29w
IHRoYXQgaXQgZW50ZXJzIHdoZW5ldmVyIHdlIGNhbGwgaXQgb3IKLSAgICAgICAgLy8gYXNrIGl0
IHRvIHBhaW50LiBUaGlzIG1vZGFsIGxvb3AgY2FuIGRlbGl2ZXIgbWVzc2FnZXMgdG8gb3RoZXIK
LSAgICAgICAgLy8gd2luZG93cyBpbiBXZWJLaXQgYXQgdGltZXMgd2hlbiB0aGV5IGFyZSBub3Qg
ZXhwZWN0aW5nIHRoZW0gKGZvcgotICAgICAgICAvLyBleGFtcGxlLCBkZWxpdmVyaW5nIGEgV01f
UEFJTlQgbWVzc2FnZSBkdXJpbmcgYSBsYXlvdXQpLCBhbmQgdGhlc2UKLSAgICAgICAgLy8gY2Fu
IGNhdXNlIGNyYXNoZXMuCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0hhc01vZGFs
TWVzc2FnZUxvb3ApOwotICAgIH0KLQotICAgIGlmIChuYW1lKCkgPT0gIlZMQyBNdWx0aW1lZGlh
IFBsdWdpbiIgfHwgbmFtZSgpID09ICJWTEMgTXVsdGltZWRpYSBQbHVnLWluIikgewotICAgICAg
ICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rlc3Ryb3kgaWYgd2UgY2FsbCBOUFBfU2V0V2luZG93IHdp
dGggYSBudWxsIHdpbmRvdyBoYW5kbGUKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
RG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpOwotCi0gICAgICAgIC8vIFZMQyAwLjgu
NmQgYW5kIDAuOC42ZSBjcmFzaCBpZiBtdWx0aXBsZSBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuCi0g
ICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NzczMDcwPiB0cmFja3MgYWxsb3dpbmcgbXVsdGlw
bGUgaW5zdGFuY2VzIHdoZW4gdGhpcwotICAgICAgICAvLyBidWcgaXMgZml4ZWQuCi0gICAgICAg
IG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAg
ICB9Ci0KLSAgICAvLyBUaGUgRGl2WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3Qg
TlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbwotICAgIC8v
IGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQot
ICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8vZGl2eCIpCi0gICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKLQotICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7
IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCi0gICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0
byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRo
YXQgTlBPYmplY3QgYmVsb25ncyB0by4KLSAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQg
dGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5j
ZSBnb2VzIGF3YXkuCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KLSAgICBp
ZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQiKQotICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKLQotICAgIGlmIChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkpIHsKLSAgICAgICAgLy8g
QmVjYXVzZSBhIHNpbmdsZSBwcm9jZXNzIGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQg
d2UgY2Fubm90IHJlbGlhYmx5IHVubG9hZCBhCi0gICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5v
dCB1bmxvYWQgdGhlIEphdmEgcGx1Z2luLCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIg
b25seSBWTQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2lu
KTsKLQotICAgICAgICAvLyBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJl
Z2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyByZXBhaW50IHByb2JsZW1zCi0gICAgICAgIC8vIHdp
dGggdGhlIEphdmEgcGx1Zy1pbi4KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9u
dENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7Ci0gICAgfQotCi0gICAgaWYgKG1pbWVUeXBl
ID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKSB7Ci0gICAgICAgIC8vIFByZXZlbnQg
dGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHks
IGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KTsKLQotICAg
ICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGxhc3RLbm93blVubG9hZGFi
bGVSZWFsUGxheWVyVmVyc2lvbigweDAwMEIwQjI0LCAweDAwMDYwMDAwKTsKLQotICAgICAgICAv
LyBVbmxvYWRpbmcgUmVhbFBsYXllciB2ZXJzaW9ucyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNl
IGEgaGFuZzsgc2VlIHJkYXI6Ly81NjY5MzE3LgotICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVu
bG9hZGluZyB3aGVuIHRoaXMgYnVnIGluIHRoZSBSZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQg
KHJkYXI6Ly81NzEzMTQ3KQotICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKGxhc3RLbm93
blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbikgPiAwKQotICAgICAgICAgICAgbV9xdWlya3Mu
YWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0gICAgfQotfQotCi1ib29sIFBsdWdp
blBhY2thZ2U6OmZldGNoSW5mbygpCi17Ci0gICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJv
SGFuZGxlOwotICAgIHZlcnNpb25JbmZvU2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKGNv
bnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCkpLCAmemVyb0hhbmRsZSk7Ci0gICAgaWYgKHZlcnNpb25JbmZvU2l6ZSA9PSAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHZlcnNpb25JbmZvRGF0YSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Y2hhcltdPih2ZXJzaW9uSW5mb1NpemUpOwotCi0gICAgaWYgKCFHZXRGaWxlVmVy
c2lvbkluZm9XKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCkpLAotICAgICAgICAgICAgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJz
aW9uSW5mb0RhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX25hbWUg
PSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJQcm9kdWN0TmFtZSIpOwot
ICAgIG1fZGVzY3JpcHRpb24gPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCks
ICJGaWxlRGVzY3JpcHRpb24iKTsKLSAgICBpZiAobV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3Jp
cHRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZTX0ZJWEVERklM
RUlORk8qIGluZm87Ci0gICAgVUlOVCBpbmZvU2l6ZTsKLSAgICBpZiAoIVZlclF1ZXJ5VmFsdWVX
KHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgTCJcXCIsIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXpl
KSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19GSVhFREZJTEVJTkZPKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNp
b25MUzsKLSAgICBtX21vZHVsZVZlcnNpb24ubW9zdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25N
UzsKLQotICAgIGlmIChpc1BsdWdpbkJsYWNrbGlzdGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgIGdldFZlcnNpb25JbmZvKHZlcnNp
b25JbmZvRGF0YS5nZXQoKSwgIk1JTUVUeXBlIikuc3BsaXQoJ3wnLCB0eXBlcyk7Ci0gICAgVmVj
dG9yPFN0cmluZz4gZXh0ZW5zaW9uTGlzdHM7Ci0gICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbklu
Zm9EYXRhLmdldCgpLCAiRmlsZUV4dGVudHMiKS5zcGxpdCgnfCcsIGV4dGVuc2lvbkxpc3RzKTsK
LSAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlwdGlvbnM7Ci0gICAgZ2V0VmVyc2lvbkluZm8odmVy
c2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZU9wZW5OYW1lIikuc3BsaXQoJ3wnLCBkZXNjcmlwdGlv
bnMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdHlwZXNbaV0ubG93ZXIoKTsKLSAgICAgICAgU3RyaW5n
IGRlc2NyaXB0aW9uID0gaSA8IGRlc2NyaXB0aW9ucy5zaXplKCkgPyBkZXNjcmlwdGlvbnNbaV0g
OiAiIjsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbkxpc3QgPSBpIDwgZXh0ZW5zaW9uTGlzdHMu
c2l6ZSgpID8gZXh0ZW5zaW9uTGlzdHNbaV0gOiAiIjsKLQotICAgICAgICBWZWN0b3I8U3RyaW5n
PiBleHRlbnNpb25zVmVjdG9yOwotICAgICAgICBleHRlbnNpb25MaXN0LnNwbGl0KCcsJywgZXh0
ZW5zaW9uc1ZlY3Rvcik7Ci0KLSAgICAgICAgLy8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxp
c3QgdGhhdCBtYXkgYmUgYXQgdGhlIGVuZCBvZiB0aGUgZGVzY3JpcHRpb24gc3RyaW5nLgotICAg
ICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmluZCgiKCoiKTsKLSAgICAgICAgaWYgKHBvcyAh
PSAtMSkgewotICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5l
ZWQgdG8gZ2V0IHJpZCBvZi4KLSAgICAgICAgICAgIGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9u
W3BvcyAtIDFdID09ICcgJykKLSAgICAgICAgICAgICAgICBwb3MtLTsKLSAgICAgICAgICAgIGRl
c2NyaXB0aW9uID0gZGVzY3JpcHRpb24ubGVmdChwb3MpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBxdWlya3MgZm9yIHRoZSBNSU1FIHR5cGVzIHRoaXMgcGx1Zy1pbiBz
dXBwb3J0cwotICAgICAgICBkZXRlcm1pbmVRdWlya3ModHlwZSk7Ci0KLSAgICAgICAgbV9taW1l
VG9FeHRlbnNpb25zLmFkZCh0eXBlLCBleHRlbnNpb25zVmVjdG9yKTsKLSAgICAgICAgbV9taW1l
VG9EZXNjcmlwdGlvbnMuYWRkKHR5cGUsIGRlc2NyaXB0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKLXsKLSAgICBpZiAobV9m
cmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsK
LSAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0b3AoKTsKLSAgICB9IGVsc2UgaWYgKG1faXNM
b2FkZWQpIHsKLSAgICAgICAgaWYgKG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFs
bG93TXVsdGlwbGVJbnN0YW5jZXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBtX2xvYWRDb3VudCsrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhfUEFUSF07Ci0KLSAgICAgICAgaWYgKCE6OkdldEN1
cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCBjdXJyZW50UGF0aCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgU3RyaW5nIHBhdGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1f
cGF0aC5yZXZlcnNlRmluZCgnXFwnKSk7Ci0KLSAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJl
Y3RvcnlXKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIExvYWQgdGhlIGxpYnJhcnkKLSAg
ICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgp
OwotCi0gICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsK
LSAgICAgICAgICAgIGlmIChtX21vZHVsZSkKLSAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5
KG1fbW9kdWxlKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICghbV9tb2R1bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faXNM
b2FkZWQgPSB0cnVlOwotCi0gICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5
UG9pbnRzID0gMDsKLSAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsK
LSAgICBOUEVycm9yIG5wRXJyOwotCi0gICAgTlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXpl
RnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiKTsKLSAgICBO
UF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJl
c3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50cyIpOwotICAgIG1fTlBQX1NodXRkb3duID0g
KE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93
biIpOwotCi0gICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAh
bV9OUFBfU2h1dGRvd24pCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBtZW1zZXQoJm1fcGx1
Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7Ci0gICAgbV9wbHVnaW5GdW5jcy5z
aXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOwotCi0gICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBv
aW50cygmbV9wbHVnaW5GdW5jcyk7Ci0gICAgTE9HX05QRVJST1IobnBFcnIpOwotICAgIGlmIChu
cEVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIGluaXRp
YWxpemVCcm93c2VyRnVuY3MoKTsKLQotICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93
c2VyRnVuY3MpOwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLQotICAgIGlmIChucEVyciAhPSBO
UEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIG1fbG9hZENvdW50Kys7
Ci0gICAgcmV0dXJuIHRydWU7Ci0KLWFib3J0OgotICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgp
IGNvbnN0Ci17IAotICAgIGNvbnN0IHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICBt
X25hbWUuaW1wbCgpLT5oYXNoKCksCi0gICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNo
KCksCi0gICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5zaXplKCkKLSAgICB9OwotCi0gICAgcmV0
dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVz
KTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBh
LCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQotewotICAgIGlmIChhLm1fbmFtZSAhPSBiLm1fbmFt
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEubV9kZXNjcmlwdGlvbiAhPSBi
Lm1fZGVzY3JpcHRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLm1fbWlt
ZVRvRXh0ZW5zaW9ucy5zaXplKCkgIT0gYi5tX21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVy
YXRvcjo6S2V5cyBlbmQgPSBhLm1fbWltZVRvRXh0ZW5zaW9ucy5lbmQoKS5rZXlzKCk7Ci0gICAg
Zm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IGEubV9t
aW1lVG9FeHRlbnNpb25zLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKCFiLm1fbWltZVRvRXh0ZW5zaW9ucy5jb250YWlucygqaXQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi11aW50MTZfdCBQ
bHVnaW5QYWNrYWdlOjpOUFZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBOUF9WRVJTSU9O
X01JTk9SOwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luVmlld1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2lu
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyMTJiYTI0OWY0NzdlMDM2OTE4
ZWMyNjEzMjhlNzZmN2RmOWY4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUgIkJyaWRnZUpT
Qy5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRl
ICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVz
dC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0j
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKLSNpbmNsdWRlICJMb2NhbFdpbmRvd3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJh
c2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0j
aW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCi0j
aW5jbHVkZSAiY19pbnN0YW5jZS5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5j
bHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+Ci0KLSNpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKLSNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEsp
Ci0jaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2VuZGlm
Ci0KLXN0YXRpYyBpbmxpbmUgSFdORCB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KFBsYXRmb3Jt
UGFnZUNsaWVudCBjbGllbnQpCi17Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGlmICghY2xpZW50
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lk
Z2V0X2dldF93aW5kb3coY2xpZW50KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhXTkQ+
KEdES19XSU5ET1dfSFdORCh3aW5kb3cpKTsKLSAgICByZXR1cm4gMDsKLSNlbHNlCi0gICAgcmV0
dXJuIGNsaWVudDsKLSNlbmRpZgotfQotCi11c2luZyBKU0M6OkV4ZWNTdGF0ZTsKLXVzaW5nIEpT
Qzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVjdDsKLQotdXNpbmcgc3RkOjptaW47Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKLQotY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFt
ZSA9IEwiV2ViUGx1Z2luVmlldyI7Ci1jb25zdCBMUENXU1RSIGtXZWJQbHVnaW5WaWV3UHJvcGVy
dHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7Ci0KLS8vIFRoZSBjb2RlIHVzZWQgdG8gaG9v
ayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdpbmFsbHkgY2FtZSBmcm9tCi0vLyA8aHR0cDovL3d3
dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+LgotLy8gQ29weXJpZ2h0IChDKSAy
MDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5dWFuLmNvbSkuCi0KLXN0YXRpYyB1bnNpZ25lZCBi
ZWdpblBhaW50U3lzQ2FsbDsKLXN0YXRpYyBCWVRFKiBiZWdpblBhaW50OwotCi1zdGF0aWMgdW5z
aWduZWQgZW5kUGFpbnRTeXNDYWxsOwotc3RhdGljIEJZVEUqIGVuZFBhaW50OwotCi10eXBlZGVm
IEhEQyAoV0lOQVBJICpQdHJCZWdpblBhaW50KShIV05ELCBQQUlOVFNUUlVDVCopOwotdHlwZWRl
ZiBCT09MIChXSU5BUEkgKlB0ckVuZFBhaW50KShIV05ELCBjb25zdCBQQUlOVFNUUlVDVCopOwot
Ci0jaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkgJiYgQ09NUElMRVIoTVNWQykKLWV4dGVy
biAiQyIgSERDIF9fc3RkY2FsbCBfSEJlZ2luUGFpbnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNU
IGxwUGFpbnQpOwotZXh0ZXJuICJDIiBCT09MIF9fc3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFdu
ZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpOwotI2VuZGlmCi0KLUhEQyBXSU5BUEkgUGx1
Z2luVmlldzo6aG9va2VkQmVnaW5QYWludChIV05EIGhXbmQsIFBBSU5UU1RSVUNUKiBscFBhaW50
KQotewotICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdp
blZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKLSAgICBpZiAo
cGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5tX3dtUHJpbnRIREMpIHsKLSAgICAgICAgLy8gV2Un
cmUgc2VjcmV0bHkgaGFuZGxpbmcgV01fUFJJTlRDTElFTlQsIHNvIHNldCB1cCB0aGUgUEFJTlRT
VFJVQ1Qgc28KLSAgICAgICAgLy8gdGhhdCB0aGUgcGx1Z2luIHdpbGwgcGFpbnQgaW50byB0aGUg
SERDIHdlIHByb3ZpZGUuCi0gICAgICAgIG1lbXNldChscFBhaW50LCAwLCBzaXplb2YoUEFJTlRT
VFJVQ1QpKTsKLSAgICAgICAgbHBQYWludC0+aGRjID0gcGx1Z2luVmlldy0+bV93bVByaW50SERD
OwotICAgICAgICBHZXRDbGllbnRSZWN0KGhXbmQsICZscFBhaW50LT5yY1BhaW50KTsKLSAgICAg
ICAgcmV0dXJuIHBsdWdpblZpZXctPm1fd21QcmludEhEQzsKLSAgICB9Ci0KLSNpZiBDT01QSUxF
UihHQ0MpCi0gICAgSERDIHJlc3VsdDsKLSAgICBhc20gKCJwdXNoICAgICUyXG4iCi0gICAgICAg
ICAicHVzaCAgICAlM1xuIgotICAgICAgICAgImNhbGwgICAgKiU0XG4iCi0gICAgICAgICA6ICI9
YSIgKHJlc3VsdCkKLSAgICAgICAgIDogImEiIChiZWdpblBhaW50U3lzQ2FsbCksICJnIiAobHBQ
YWludCksICJnIiAoaFduZCksICJtIiAoYmVnaW5QYWludCkKLSAgICAgICAgIDogIm1lbW9yeSIK
LSAgICAgICAgKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2VsaWYgZGVmaW5lZChfTV9JWDg2KQot
ICAgIC8vIENhbGwgdGhyb3VnaCB0byB0aGUgb3JpZ2luYWwgQmVnaW5QYWludC4KLSAgICBfX2Fz
bSAgIG1vdiAgICAgZWF4LCBiZWdpblBhaW50U3lzQ2FsbAotICAgIF9fYXNtICAgcHVzaCAgICBs
cFBhaW50Ci0gICAgX19hc20gICBwdXNoICAgIGhXbmQKLSAgICBfX2FzbSAgIGNhbGwgICAgYmVn
aW5QYWludAotI2Vsc2UKLSAgICByZXR1cm4gX0hCZWdpblBhaW50KGhXbmQsIGxwUGFpbnQpOwot
I2VuZGlmCi19Ci0KLUJPT0wgV0lOQVBJIFBsdWdpblZpZXc6Omhvb2tlZEVuZFBhaW50KEhXTkQg
aFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpCi17Ci0gICAgUGx1Z2luVmlldyogcGx1
Z2luVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dl
YlBsdWdpblZpZXdQcm9wZXJ0eSkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXct
Pm1fd21QcmludEhEQykgewotICAgICAgICAvLyBXZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9Q
UklOVENMSUVOVCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkKLSAgICAgICAgLy8gY2xlYW51
cC4KLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0jaWYgQ09NUElMRVIoR0NDKQotICAg
IEJPT0wgcmVzdWx0OwotICAgIGFzbSAoInB1c2ggICAlMlxuIgotICAgICAgICAgInB1c2ggICAl
M1xuIgotICAgICAgICAgImNhbGwgICAqJTRcbiIKLSAgICAgICAgIDogIj1hIiAocmVzdWx0KQot
ICAgICAgICAgOiAiYSIgKGVuZFBhaW50U3lzQ2FsbCksICJnIiAobHBQYWludCksICJnIiAoaFdu
ZCksICJtIiAoZW5kUGFpbnQpCi0gICAgICAgICk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbGlm
IGRlZmluZWQgKF9NX0lYODYpCi0gICAgLy8gQ2FsbCB0aHJvdWdoIHRvIHRoZSBvcmlnaW5hbCBF
bmRQYWludC4KLSAgICBfX2FzbSAgIG1vdiAgICAgZWF4LCBlbmRQYWludFN5c0NhbGwKLSAgICBf
X2FzbSAgIHB1c2ggICAgbHBQYWludAotICAgIF9fYXNtICAgcHVzaCAgICBoV25kCi0gICAgX19h
c20gICBjYWxsICAgIGVuZFBhaW50Ci0jZWxzZQotICAgIHJldHVybiBfSEVuZFBhaW50KGhXbmQs
IGxwUGFpbnQpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGhvb2soY29uc3QgY2hhciogbW9k
dWxlLCBjb25zdCBjaGFyKiBwcm9jLCB1bnNpZ25lZCYgc3lzQ2FsbElELCBCWVRFKiYgcFByb2Ms
IGNvbnN0IHZvaWQqIHBOZXdQcm9jKQotewotICAgIC8vIFNlZSA8aHR0cDovL3d3dy5mZW5neXVh
bi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+IGZvciBhbiBleHBsYW5hdGlvbiBvZgotICAgIC8v
IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLgotCi0gICAgSElOU1RBTkNFIGhNb2QgPSBHZXRNb2R1
bGVIYW5kbGVBKG1vZHVsZSk7Ci0KLSAgICBwUHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+
KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihHZXRQcm9jQWRkcmVzcyhoTW9kLCBwcm9jKSkp
OwotCi0jaWYgQ09NUElMRVIoR0NDKSB8fCBkZWZpbmVkKF9NX0lYODYpCi0gICAgaWYgKHBQcm9j
WzBdICE9IDB4QjgpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
YmUgcmVhZGluZyB0aGUgYnl0ZXMgb25lLWJ5LW9uZSBpbnN0ZWFkIG9mIGRvaW5nIGFuCi0gICAg
Ly8gdW5hbGlnbmVkIHJlYWQ/Ci0gICAgc3lzQ2FsbElEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihwUHJvYyArIDEpOwotCi0gICAgRFdPUkQgZmxPbGRQcm90ZWN0OwotICAgIGlmICgh
VmlydHVhbFByb3RlY3QocFByb2MsIDUsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUsICZmbE9sZFBy
b3RlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwUHJvY1swXSA9IDB4RTk7Ci0gICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4ocE5ld1Byb2MpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocFByb2MgKyA1
KTsKLQotICAgIHBQcm9jICs9IDU7Ci0jZWxzZQotICAgIC8qIERpc2Fzc2VtYmx5IG9mIEJlZ2lu
UGFpbnQoKQotICAgIDAwMDAwMDAwNzc5RkM1QjAgNEMgOEIgRDEgICAgICAgICBtb3YgICAgICAg
ICByMTAscmN4Ci0gICAgMDAwMDAwMDA3NzlGQzVCMyBCOCAxNyAxMCAwMCAwMCAgIG1vdiAgICAg
ICAgIGVheCwxMDE3aAotICAgIDAwMDAwMDAwNzc5RkM1QjggMEYgMDUgICAgICAgICAgICBzeXNj
YWxsCi0gICAgMDAwMDAwMDA3NzlGQzVCQSBDMyAgICAgICAgICAgICAgIHJldAotICAgIDAwMDAw
MDAwNzc5RkM1QkIgOTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUJDIDkw
ICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVCRCA5MCAgICAgICAgICAgICAg
IG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QkUgOTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAw
MDAwMDc3OUZDNUJGIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVDMCA5
MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QzEgOTAgICAgICAgICAgICAg
ICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUMyIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAw
MDAwMDA3NzlGQzVDMyA5MCAgICAgICAgICAgICAgIG5vcAotICAgICovCi0gICAgLy8gQ2hlY2sg
Zm9yIHRoZSBzaWduYXR1cmUgYXMgaW4gdGhlIGFib3ZlIGRpc2Fzc2VtYmx5Ci0gICAgRFdPUkQg
Z3VhcmQgPSAweEI4RDE4QjRDOwotICAgIGlmICgqcmVpbnRlcnByZXRfY2FzdDxEV09SRCo+KHBQ
cm9jKSAhPSBndWFyZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRFdPUkQgZmxPbGRQcm90ZWN0
OwotICAgIFZpcnR1YWxQcm90ZWN0KHBQcm9jLCAxMiwgUEFHRV9FWEVDVVRFX1JFQURXUklURSwg
JiBmbE9sZFByb3RlY3QpOwotICAgIHBQcm9jWzBdID0gMHg0ODsgICAgLy8gbW92IHJheCwgdGhp
cwotICAgIHBQcm9jWzFdID0gMHhiODsKLSAgICAqKF9faW50NjQqKShwUHJvYysyKSA9IChfX2lu
dDY0KXBOZXdQcm9jOwotICAgIHBQcm9jWzEwXSA9IDB4ZmY7ICAgLy8gam1wIHJheAotICAgIHBQ
cm9jWzExXSA9IDB4ZTA7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5Q
YWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU5UU1RS
VUNUKiksIEJPT0wgKFdJTkFQSSpob29rZWRFbmRQYWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJV
Q1QqKSkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlSG9va2VkID0gZmFsc2U7Ci0gICAgaWYgKGhh
dmVIb29rZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBoYXZlSG9va2VkID0gdHJ1ZTsKLQotICAg
IC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3Qgc2VlbSB0byByZXNwb25kIHRv
IFdNX1BSSU5UQ0xJRU5ULCBzbwotICAgIC8vIHdlIGhvb2sgaW50byBCZWdpblBhaW50L0VuZFBh
aW50IHRvIGFsbG93IHRoZWlyIG5vcm1hbCBXTV9QQUlOVCBoYW5kbGluZwotICAgIC8vIHRvIGRy
YXcgaW50byBhIGdpdmVuIEhEQy4gTm90ZSB0aGF0IHRoaXMgaG9va2luZyBhZmZlY3RzIHRoZSBl
bnRpcmUKLSAgICAvLyBwcm9jZXNzLgotICAgIGhvb2soInVzZXIzMi5kbGwiLCAiQmVnaW5QYWlu
dCIsIGJlZ2luUGFpbnRTeXNDYWxsLCBiZWdpblBhaW50LCByZWludGVycHJldF9jYXN0PGNvbnN0
IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGhvb2tlZEJlZ2luUGFpbnQpKSk7
Ci0gICAgaG9vaygidXNlcjMyLmRsbCIsICJFbmRQYWludCIsIGVuZFBhaW50U3lzQ2FsbCwgZW5k
UGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0
cmRpZmZfdD4oaG9va2VkRW5kUGFpbnQpKSk7Ci0KLX0KLQotc3RhdGljIGJvb2wgcmVnaXN0ZXJQ
bHVnaW5WaWV3KCkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNz
ID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7Ci0KLSNp
ZiBQTEFURk9STShHVEspCi0gICAgV2ViQ29yZTo6c2V0SW5zdGFuY2VIYW5kbGUoKEhJTlNUQU5D
RSkoR2V0TW9kdWxlSGFuZGxlKDApKSk7Ci0jZW5kaWYKLQotICAgIEFTU0VSVChXZWJDb3JlOjpp
bnN0YW5jZUhhbmRsZSgpKTsKLQotICAgIFdORENMQVNTRVggd2NleDsKLSAgICB3Y2V4LmNiU2l6
ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKLSAg
ICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfREJMQ0xLUzsKLSAgICB3Y2V4LmxwZm5XbmRQcm9j
ICAgID0gRGVmV2luZG93UHJvYzsKLSAgICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKLSAgICB3
Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gV2ViQ29y
ZTo6aW5zdGFuY2VIYW5kbGUoKTsKLSAgICB3Y2V4LmhJY29uICAgICAgICAgID0gMDsKLSAgICB3
Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdjZXgu
aGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNPTE9SX1dJTkRPVzsKLSAgICB3Y2V4Lmxwc3pNZW51
TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dD
bGFzc05hbWU7Ci0KLSAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzRXgoJndjZXgpOwotfQotCi1M
UkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFBsdWdp
blZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9w
KGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3
LT53bmRQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQotc3RhdGljIGJv
b2wgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKFVJTlQgbWVzc2FnZSkKLXsKLSAgICBzd2l0
Y2ggKG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgICAgIGNhc2Ug
V01fTUJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05VUDoKLSAgICAgICAgY2FzZSBX
TV9LRVlVUDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBJbnRQb2lu
dCBjb250ZW50c1RvTmF0aXZlV2luZG93KEZyYW1lVmlldyogdmlldywgY29uc3QgSW50UG9pbnQm
IHBvaW50KQotewotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHBvaW50KTsKLX0K
LQotc3RhdGljIGlubGluZSBJbnRSZWN0IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coRnJhbWVWaWV3
KiB2aWV3LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiB2aWV3LT5jb250ZW50
c1RvV2luZG93KHJlY3QpOwotfQotCi1MUkVTVUxUCi1QbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAg
IC8vIDxyZGFyOi8vNTcxMTEzNj4gU29tZXRpbWVzIEZsYXNoIHdpbGwgY2FsbCBTZXRDYXB0dXJl
IGJlZm9yZSBjcmVhdGluZwotICAgIC8vIGEgZnVsbC1zY3JlZW4gd2luZG93IGFuZCB3aWxsIG5v
dCByZWxlYXNlIGl0LCB3aGljaCBjYXVzZXMgdGhlCi0gICAgLy8gZnVsbC1zY3JlZW4gd2luZG93
IHRvIG5ldmVyIHJlY2VpdmUgbW91c2UgZXZlbnRzLiBXZSBzZXQvcmVsZWFzZSBjYXB0dXJlCi0g
ICAgLy8gb24gbW91c2UgZG93bi91cCBiZWZvcmUgc2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIHBs
dWctaW4gdG8gcHJldmVudCB0aGF0LgotICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgICAgICBj
YXNlIFdNX0xCVVRUT05ET1dOOgotICAgICAgICBjYXNlIFdNX01CVVRUT05ET1dOOgotICAgICAg
ICBjYXNlIFdNX1JCVVRUT05ET1dOOgotICAgICAgICAgICAgOjpTZXRDYXB0dXJlKGhXbmQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fTEJVVFRPTlVQOgotICAgICAgICBj
YXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAg
ICA6OlJlbGVhc2VDYXB0dXJlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBp
ZiAobWVzc2FnZSA9PSBtX2xhc3RNZXNzYWdlICYmCi0gICAgICAgIG1fcGx1Z2luLT5xdWlya3Mo
KS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJz
aXZlbHkpICYmIAotICAgICAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MpCi0gICAgICAgIHJl
dHVybiAxOwotCi0gICAgaWYgKG1lc3NhZ2UgPT0gV01fVVNFUiArIDEgJiYKLSAgICAgICAgbV9w
bHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25l
TWVzc2FnZXMpKSB7Ci0gICAgICAgIGlmICghbV9tZXNzYWdlVGhyb3R0bGVyKQotICAgICAgICAg
ICAgbV9tZXNzYWdlVGhyb3R0bGVyID0gYWRvcHRQdHIobmV3IFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW4odGhpcykpOwotCi0gICAgICAgIG1fbWVzc2FnZVRocm90dGxlci0+YXBwZW5kTWVzc2Fn
ZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIG1fbGFzdE1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIG1faXNDYWxsaW5nUGx1Z2lu
V25kUHJvYyA9IHRydWU7Ci0KLSAgICAvLyBJZiB0aGUgcGx1Zy1pbiBkb2Vzbid0IGV4cGxpY2l0
bHkgc3VwcG9ydCBjaGFuZ2luZyB0aGUgcG9wLXVwIHN0YXRlLCB3ZSBlbmFibGUKLSAgICAvLyBw
b3B1cHMgZm9yIGFsbCB1c2VyIGdlc3R1cmVzLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRv
IHBvcCB0aGUgc3RhdGUgaW4gYSB0aW1lciwgYmVjYXVzZSB0aGUgRmxhc2ggcGx1Zy1pbiAKLSAg
ICAvLyBwb3BzIHVwIHdpbmRvd3MgaW4gcmVzcG9uc2UgdG8gYSBwb3N0ZWQgbWVzc2FnZS4KLSAg
ICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQ
U19FTkFCTEVEX1NUQVRFICYmCi0gICAgICAgIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZSht
ZXNzYWdlKSAmJiAhbV9wb3BQb3B1cHNTdGF0ZVRpbWVyLmlzQWN0aXZlKCkpIHsKLQotICAgICAg
ICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRydWUpOwotCi0gICAgICAgIG1fcG9wUG9wdXBzU3Rh
dGVUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2UgPT0gV01f
UFJJTlRDTElFTlQpIHsKLSAgICAgICAgLy8gTW9zdCAoYWxsPykgd2luZG93ZWQgcGx1Z2lucyBk
b24ndCByZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5ULCBzbyB3ZQotICAgICAgICAvLyBjaGFuZ2Ug
dGhlIG1lc3NhZ2UgdG8gV01fUEFJTlQgYW5kIHJlbHkgb24gb3VyIGhvb2tlZCB2ZXJzaW9ucyBv
ZgotICAgICAgICAvLyBCZWdpblBhaW50L0VuZFBhaW50IHRvIG1ha2UgdGhlIHBsdWdpbiBkcmF3
IGludG8gdGhlIGdpdmVuIEhEQy4KLSAgICAgICAgbWVzc2FnZSA9IFdNX1BBSU5UOwotICAgICAg
ICBtX3dtUHJpbnRIREMgPSByZWludGVycHJldF9jYXN0PEhEQz4od1BhcmFtKTsKLSAgICB9Ci0K
LSAgICAvLyBDYWxsIHRoZSBwbHVnLWluJ3Mgd2luZG93IHByb2MuCi0gICAgTFJFU1VMVCByZXN1
bHQgPSA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luV25kUHJvYywgaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0pOwotCi0gICAgbV93bVByaW50SERDID0gMDsKLQotICAgIG1faXNDYWxsaW5n
UGx1Z2luV25kUHJvYyA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBQ
bHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQotewotICAgIGlmICghcGFyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gZG93bmNhc3Q8RnJh
bWVWaWV3PigqcGFyZW50KCkpOwotCi0gICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5k
b3dSZWN0OwotICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OwotCi0gICAgbV93
aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXcuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3Qo
KS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX2NsaXBSZWN0ID0gd2lu
ZG93Q2xpcFJlY3QoKTsKLSAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1t
X3dpbmRvd1JlY3QueSgpKTsKLQotICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmICgh
bV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCB8fCBtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVj
dCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkgewotCi0gICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7Ci0KLSAgICAgICAgLy8gVG8gcHJldmVudCBmbGFzaGVzIHdoaWxlIHNjcm9s
bGluZywgd2UgZGlzYWJsZSBkcmF3aW5nIGR1cmluZyB0aGUgd2luZG93Ci0gICAgICAgIC8vIHVw
ZGF0ZSBwcm9jZXNzIGJ5IGNsaXBwaW5nIHRoZSB3aW5kb3cgdG8gdGhlIHplcm8gcmVjdC4KLQot
ICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0ID0gIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOwotCi0gICAgICAg
IGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwotICAgICAgICAgICAgOjpTZXRXaW5k
b3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWsoKSwgRkFMU0UpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgo
KSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCksIFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0IHx8IG1fd2luZG93UmVjdCAhPSBvbGRX
aW5kb3dSZWN0KQotICAgICAgICAgICAgOjpNb3ZlV2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0
aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksIFRSVUUpOwotCi0gICAgICAgIGlmIChjbGlwVG9a
ZXJvUmVjdCkgewotICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgo
KSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCksIFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0KLSAgICAgICAgbV9oYXZlVXBkYXRlZFBsdWdp
bldpZGdldCA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJv
b2wgZm9jdXNlZCkKLXsKLSAgICBpZiAoZm9jdXNlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KQotICAgICAgICBTZXRGb2N1cyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLQotICAgIFdpZGdl
dDo6c2V0Rm9jdXMoZm9jdXNlZCk7Ci0KLSAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBFdmVudCBucEV2ZW50OwotCi0gICAgbnBFdmVu
dC5ldmVudCA9IGZvY3VzZWQgPyBXTV9TRVRGT0NVUyA6IFdNX0tJTExGT0NVUzsKLSAgICBucEV2
ZW50LndQYXJhbSA9IDA7Ci0gICAgbnBFdmVudC5sUGFyYW0gPSAwOwotCi0gICAgZGlzcGF0Y2hO
UEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNob3coKQotewotICAgIHNl
dFNlbGZWaXNpYmxlKHRydWUpOwotCi0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpCi0gICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSwgU1dfU0hPV05BKTsKLQotICAgIFdpZGdldDo6c2hvdygpOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OmhpZGUoKQotewotICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsKLQotICAgIGlmIChp
c1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICBTaG93
V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJREUpOwotCi0gICAgV2lkZ2V0Ojpo
aWRlKCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIG5w
RXZlbnQpCi17Ci0gICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgYm9vbCBzaG91bGRQb3AgPSBmYWxzZTsKLQotICAgIGlm
IChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dmVyc2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VO
QUJMRURfU1RBVEUgJiYgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKG5wRXZlbnQuZXZlbnQp
KSB7Ci0gICAgICAgIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUodHJ1ZSk7Ci0gICAgICAgIHNob3Vs
ZFBvcCA9IHRydWU7Ci0gICAgfQotCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwotICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKLQotICAgIGlmIChzaG91bGRQb3ApIAotICAgICAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUo
KTsKLQotICAgIHJldHVybiBhY2NlcHRlZDsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQoSERDIGhkYykKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7
Ci0gICAgICAgIFNlbmRNZXNzYWdlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJ
RU5ULCByZWludGVycHJldF9jYXN0PFdQQVJBTT4oaGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElM
RFJFTiB8IFBSRl9PV05FRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25wV2lu
ZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKLSAgICBtX25wV2luZG93LndpbmRvdyA9
IGhkYzsKLQotICAgIFdJTkRPV1BPUyB3aW5kb3dwb3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAg
fTsKLQotICAgIEludFJlY3QgciA9IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8RnJh
bWVWaWV3PihwYXJlbnQoKSksIGZyYW1lUmVjdCgpKTsKLQotICAgIHdpbmRvd3Bvcy54ID0gci54
KCk7Ci0gICAgd2luZG93cG9zLnkgPSByLnkoKTsKLSAgICB3aW5kb3dwb3MuY3ggPSByLndpZHRo
KCk7Ci0gICAgd2luZG93cG9zLmN5ID0gci5oZWlnaHQoKTsKLQotICAgIE5QRXZlbnQgbnBFdmVu
dDsKLSAgICBucEV2ZW50LmV2ZW50ID0gV01fV0lORE9XUE9TQ0hBTkdFRDsKLSAgICBucEV2ZW50
LmxQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pigmd2luZG93cG9zKTsKLSAgICBu
cEV2ZW50LndQYXJhbSA9IDA7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci0KLSAg
ICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOwotCi0gICAgbnBFdmVudC5ldmVudCA9IFdN
X1BBSU5UOwotICAgIG5wRXZlbnQud1BhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGhkYyk7Ci0KLSAgICAvLyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGEgcG9pbnRlciB0byB0aGUg
ZGlydHkgcmVjdCwgYnV0IGl0IHNlZW1zIHRoYXQgdGhlIEZsYXNoIHBsdWdpbgotICAgIC8vIGln
bm9yZXMgaXQgc28gd2UganVzdCBwYXNzIG51bGwuCi0gICAgbnBFdmVudC5sUGFyYW0gPSAwOwot
Ci0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBh
aW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgIVVTRShXSU5HREkpCi0gICAgQVNTRVJUKG1faXNX
aW5kb3dlZCk7Ci0gICAgQVNTRVJUKGNvbnRleHQtPnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3Mo
KSk7Ci0KLSAgICBJbnRQb2ludCBsb2NhdGlvbkluV2luZG93ID0gZG93bmNhc3Q8RnJhbWVWaWV3
PigqcGFyZW50KCkpLmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVSZWN0KCkubG9jYXRp
b24oKSk7Ci0KLSAgICBMb2NhbFdpbmRvd3NDb250ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQs
IGZyYW1lUmVjdCgpLCBmYWxzZSk7Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgLy8gTXVzdCBmbHVz
aCBkcmF3aW5ncyB1cCB0byB0aGlzIHBvaW50IHRvIHRoZSBiYWNraW5nIG1ldGFmaWxlLCBvdGhl
cndpc2UgdGhlCi0gICAgLy8gcGx1Z2luIHJlZ2lvbiB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGgg
YW55IGNsZWFyIHJlZ2lvbnMgc3BlY2lmaWVkIGluIHRoZQotICAgIC8vIGNhaXJvLWNvbnRyb2xs
ZWQgcG9ydGlvbnMgb2YgdGhlIHJlbmRlcmluZy4KLSAgICBjYWlyb19zaG93X3BhZ2UoY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwotI2VuZGlmCi0KLSAgICBIREMgaGRjID0gd2lu
ZG93c0NvbnRleHQuaGRjKCk7Ci0gICAgWEZPUk0gb3JpZ2luYWxUcmFuc2Zvcm07Ci0gICAgR2V0
V29ybGRUcmFuc2Zvcm0oaGRjLCAmb3JpZ2luYWxUcmFuc2Zvcm0pOwotCi0gICAgLy8gVGhlIHBs
dWdpbiBleHBlY3RzIHRoZSBEQyB0byBiZSBpbiBjbGllbnQgY29vcmRpbmF0ZXMsIHNvIHdlIHRy
YW5zbGF0ZQotICAgIC8vIHRoZSBEQyB0byBtYWtlIHRoYXQgc28uCi0gICAgQWZmaW5lVHJhbnNm
b3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwotICAgIGN0bS50cmFuc2xhdGUobG9jYXRpb25J
bldpbmRvdy54KCksIGxvY2F0aW9uSW5XaW5kb3cueSgpKTsKLSAgICBYRk9STSB0cmFuc2Zvcm0g
PSBzdGF0aWNfY2FzdDxYRk9STT4oY3RtLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0KLSAg
ICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ0cmFuc2Zvcm0pOwotCi0gICAgcGFpbnRJbnRvVHJh
bnNmb3JtZWRDb250ZXh0KGhkYyk7Ci0KLSAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmln
aW5hbFRyYW5zZm9ybSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFt
X2lzU3RhcnRlZCkgewotICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdl
Ci0gICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGNhbGxlZCBTZXRX
aW5kb3cgYmVmb3JlIHdlIHRyeSB0byBwYWludC4KLSAgICBpZiAoIW1faGF2ZUNhbGxlZFNldFdp
bmRvdykKLSAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKLQotICAgIGlmICht
X2lzV2luZG93ZWQpIHsKLSNpZiAhVVNFKFdJTkdESSkKLSAgICAgICAgaWYgKGNvbnRleHQtPnNo
b3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSkKLSAgICAgICAgICAgIHBhaW50V2luZG93ZWRQbHVn
aW5JbnRvQ29udGV4dChjb250ZXh0LCByZWN0KTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gSW4gdGhlIEdUSyBhbmQgUXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZz
Y3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2luZG93Ci0gICAgLy8gY29v
cmRpbmF0ZXMuCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIEludFJlY3QgcmVjdEluV2luZG93KHJl
Y3QpOwotICAgIHJlY3RJbldpbmRvdy5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOwotI2Vsc2UKLSAg
ICBJbnRSZWN0IHJlY3RJbldpbmRvdyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5j
b250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKTsKLSNlbmRpZgotICAgIExvY2FsV2luZG93c0Nv
bnRleHQgd2luZG93c0NvbnRleHQoY29udGV4dCwgcmVjdEluV2luZG93LCBtX2lzVHJhbnNwYXJl
bnQpOwotCi0gICAgLy8gT24gU2FmYXJpL1dpbmRvd3Mgd2l0aG91dCB0cmFuc3BhcmVuY3kgbGF5
ZXJzIHRoZSBHcmFwaGljc0NvbnRleHQgcmV0dXJucyB0aGUgSERDCi0gICAgLy8gb2YgdGhlIHdp
bmRvdyBhbmQgdGhlIHBsdWdpbiBleHBlY3RzIHRoYXQgdGhlIHBhc3NlZCBpbiBEQyBoYXMgd2lu
ZG93IGNvb3JkaW5hdGVzLgotICAgIC8vIEluIHRoZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGFsd2F5
cyBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIHRoZXJlZm9yZSBuZWVkCi0gICAgLy8g
dG8gcHJlc2VydmUgdGhlIHRyYW5zbGF0aW9uIHNldCBpbiBnZXRXaW5kb3dzQ29udGV4dC4KLSNp
ZiAhUExBVEZPUk0oR1RLKQotICAgIGlmICghY29udGV4dC0+aXNJblRyYW5zcGFyZW5jeUxheWVy
KCkpIHsKLSAgICAgICAgWEZPUk0gdHJhbnNmb3JtOwotICAgICAgICBHZXRXb3JsZFRyYW5zZm9y
bSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRyYW5zZm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybS5l
RHggPSAwOwotICAgICAgICB0cmFuc2Zvcm0uZUR5ID0gMDsKLSAgICAgICAgU2V0V29ybGRUcmFu
c2Zvcm0od2luZG93c0NvbnRleHQuaGRjKCksICZ0cmFuc2Zvcm0pOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KHdpbmRvd3NDb250ZXh0LmhkYygpKTsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQq
IGV2ZW50KQotewotICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKLQotICAg
IE5QRXZlbnQgbnBFdmVudDsKLQotICAgIG5wRXZlbnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUo
KTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQp
IHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWURPV047Ci0gICAgICAgIG5wRXZlbnQu
bFBhcmFtID0gMDsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleXByZXNzRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0NIQVI7Ci0gICAg
ICAgIG5wRXZlbnQubFBhcmFtID0gMDsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tF
WVVQOwotICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotZXh0ZXJu
IGJvb2wgaWdub3JlTmV4dFNldEN1cnNvcjsKLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3Vz
ZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9p
c1dpbmRvd2VkKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLQotICAgIEludFBvaW50IHAgPSBj
b250ZW50c1RvTmF0aXZlV2luZG93KGRvd25jYXN0PEZyYW1lVmlldz4ocGFyZW50KCkpLCBJbnRQ
b2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKLQotICAgIG5wRXZlbnQubFBh
cmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkpOwotICAgIG5wRXZlbnQud1BhcmFtID0gMDsK
LQotICAgIGlmIChldmVudC0+Y3RybEtleSgpKQotICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBN
S19DT05UUk9MOwotICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKLSAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfU0hJRlQ7Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vtb3ZlRXZlbnQgfHwKLSAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2VvdXRFdmVudCB8fCAKLSAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9W
RTsKLSAgICAgICAgaWYgKGV2ZW50LT5idXR0b25Eb3duKCkpCi0gICAgICAgICAgICBzd2l0Y2gg
KGV2ZW50LT5idXR0b24oKSkgewotICAgICAgICAgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKLSAg
ICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTEJVVFRPTjsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246Ci0g
ICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX01CVVRUT047Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246Ci0g
ICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1JCVVRUT047Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7Ci0gICAgICAgIGZvY3Vz
UGx1Z2luRWxlbWVudCgpOwotICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewotICAg
ICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVU
VE9ORE9XTjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMToKLSAg
ICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTkRPV047Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgbnBFdmVu
dC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQpIHsKLSAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgMDoKLSAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9OVVA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdN
X1JCVVRUT05VUDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxz
ZQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgIC8vIEZJWE1FOiBDb25z
aWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUu
Ci0gICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci0KLSNpZiAhUExBVEZPUk0oR1RLKQotICAgIC8vIEN1cnJlbnRseSwg
V2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGlu
IEV2ZW50SGFuZGxlci5jcHAKLSAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdl
IHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCi0g
ICAgaWdub3JlTmV4dFNldEN1cnNvciA9IHRydWU7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3Bh
cmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNldExh
c3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKTsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCi17Ci0gICAgV2lkZ2V0OjpzZXRQYXJl
bnQocGFyZW50KTsKLQotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIGluaXQoKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIC8vIElmIHRoZSBwbHVnLWluIHdpbmRvdyBvciBvbmUgb2YgaXRzIGNo
aWxkcmVuIGhhdmUgdGhlIGZvY3VzLCB3ZSBuZWVkIHRvIAotICAgICAgICAvLyBjbGVhciBpdCB0
byBwcmV2ZW50IHRoZSB3ZWIgdmlldyB3aW5kb3cgZnJvbSBiZWluZyBmb2N1c2VkIGJlY2F1c2Ug
dGhhdCBjYW4KLSAgICAgICAgLy8gdHJpZ2dlciBhIGxheW91dCB3aGlsZSB0aGUgcGx1Z2luIGVs
ZW1lbnQgaXMgYmVpbmcgZGV0YWNoZWQuCi0gICAgICAgIEhXTkQgZm9jdXNlZFdpbmRvdyA9IDo6
R2V0Rm9jdXMoKTsKLSAgICAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNl
ZFdpbmRvdyB8fCA6OklzQ2hpbGQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRv
dykpCi0gICAgICAgICAgICA6OlNldEZvY3VzKDApOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAoaXNQYXJlbnRW
aXNpYmxlKCkgPT0gdmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2lkZ2V0OjpzZXRQ
YXJlbnRWaXNpYmxlKHZpc2libGUpOwotCi0gICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKSB7Ci0gICAgICAgIGlmICh2aXNpYmxlKQotICAgICAgICAgICAg
U2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19TSE9XTkEpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJ
REUpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1faXNTdGFydGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBJbiB0aGUgR1RLIHBvcnQgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVy
IGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2luZG93Ci0gICAgLy8gY29vcmRpbmF0ZXMuCi0j
IGlmIFBMQVRGT1JNKEdUSykKLSAgICBJbnRQb2ludCBwID0gcmVjdC5sb2NhdGlvbigpOwotIyBl
bHNlCi0gICAgSW50UG9pbnQgcCA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250
ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7Ci0jIGVuZGlmCi0gICAgbV9ucFdpbmRvdy54
ID0gcC54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0gcC55KCk7Ci0KLSAgICBtX25wV2luZG93Lndp
ZHRoID0gcmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQo
KTsKLQotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7Ci0gICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOwotICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QubGVmdCA9IDA7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwot
Ci0gICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKLSAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7
Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotCi0gICAgICAgIG1faGF2ZUNhbGxl
ZFNldFdpbmRvdyA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwot
Ci0gICAgICAgIFdORFBST0MgY3VycmVudFduZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25n
UHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQyk7Ci0gICAgICAgIGlmIChj
dXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3V25kUHJvYykKLSAgICAgICAgICAgIG1fcGx1Z2lu
V25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpUGx1Z2luVmlld1duZFByb2MpOwotICAgIH0KLX0K
LQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBi
dWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQotewotICAgIFN0cmluZyBmaWxl
bmFtZShidWYsIGxlbik7Ci0KLSAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8i
KSkKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7Ci0KLSAgICAvLyBH
ZXQgZmlsZSBpbmZvCi0gICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyczsKLSAgICBp
ZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeFcoZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWlu
YXRpb24oKS5kYXRhKCksIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJzKSA9PSAwKQotICAg
ICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBpZiAoYXR0cnMuZHdGaWxl
QXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgcmV0dXJuIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgSEFORExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxl
VyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgRklMRV9S
RUFEX0RBVEEsIEZJTEVfU0hBUkVfUkVBRCwgMCwgT1BFTl9FWElTVElORywgMCwgMCk7Ci0gICAg
Ci0gICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgIHJl
dHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIGJ1ZmZlci5yZXNpemUoYXR0cnMubkZp
bGVTaXplTG93KTsKLQotICAgIERXT1JEIGJ5dGVzUmVhZDsKLSAgICBpbnQgcmV0dmFsID0gUmVh
ZEZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYXR0cnMubkZpbGVTaXplTG93LCAmYnl0
ZXNSZWFkLCAwKTsKLQotICAgIENsb3NlSGFuZGxlKGZpbGVIYW5kbGUpOwotCi0gICAgaWYgKHJl
dHZhbCA9PSAwIHx8IGJ5dGVzUmVhZCAhPSBhdHRycy5uRmlsZVNpemVMb3cpCi0gICAgICAgIHJl
dHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
LX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxl
LCB2b2lkKiwgTlBFcnJvciopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBsdWdp
blZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVl
LCBOUEVycm9yKiByZXN1bHQpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgICAgICBj
YXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAgICAgICAgICAgSFdORCogdyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SFdORCo+KHZhbHVlKTsKLSAgICAgICAgICAgICp3ID0gd2luZG93SGFuZGxlRm9y
UGFnZUNsaWVudChwYXJlbnQoKSA/IHBhcmVudCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFn
ZUNsaWVudCgpIDogMCk7Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlN1
cHBvcnRzV2luZG93bGVzczogewotICAgICAgICAgICAgTlBCb29sKiBmbGFnID0gcmVpbnRlcnBy
ZXRfY2FzdDxOUEJvb2wqPih2YWx1ZSk7Ci0gICAgICAgICAgICAqZmxhZyA9IFRSVUU7Ci0gICAg
ICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgUkVDVCBpbnZhbGlkUmVj
dCA9IHsgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgfTsKLSAg
ICAgICAgOjpJbnZhbGlkYXRlUmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmaW52YWxpZFJl
Y3QsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludmFsaWRhdGVXaW5k
b3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdChOUFJlY3QqIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0KSB7Ci0gICAgICAgIGludmFsaWRh
dGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEludFJlY3QgcihyZWN0LT5sZWZ0
LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVj
dC0+dG9wKTsKLQotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgUkVDVCBpbnZhbGlk
UmVjdCA9IHsgci54KCksIHIueSgpLCByLm1heFgoKSwgci5tYXhZKCkgfTsKLSAgICAgICAgSW52
YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRSZWN0LCBGQUxTRSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkpIHsKLSAgICAgICAgICAgIG1faW52YWxpZFJl
Y3RzLmFwcGVuZChyKTsKLSAgICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3Rp
dmUoKSkKLSAgICAgICAgICAgICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4w
MDEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGludmFsaWRhdGVSZWN0KHIpOwotICAg
IH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lv
bikKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSRUNU
IHI7Ci0KLSAgICBpZiAoR2V0UmduQm94KHJlZ2lvbiwgJnIpID09IDApIHsKLSAgICAgICAgaW52
YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50UmVjdCByZWN0KElu
dFBvaW50KHIubGVmdCwgci50b3ApLCBJbnRTaXplKHIucmlnaHQtci5sZWZ0LCByLmJvdHRvbS1y
LnRvcCkpOwotICAgIGludmFsaWRhdGVSZWN0KHJlY3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OmZvcmNlUmVkcmF3KCkKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKQotICAgICAgICA6OlVwZGF0
ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIDo6VXBk
YXRlV2luZG93KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQocGFyZW50KCkgPyBwYXJlbnQoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSA6IDApKTsKLX0KLQotYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAg
IEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOwotCi0g
ICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICByZWdpc3RlclBsdWdpblZpZXcoKTsKLSAg
ICAgICAgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKGhvb2tlZEJlZ2luUGFpbnQsIGhvb2tl
ZEVuZFBhaW50KTsKLQotICAgICAgICBEV09SRCBmbGFncyA9IFdTX0NISUxEOwotICAgICAgICBp
ZiAoaXNTZWxmVmlzaWJsZSgpKQotICAgICAgICAgICAgZmxhZ3MgfD0gV1NfVklTSUJMRTsKLQot
ICAgICAgICBIV05EIHBhcmVudFdpbmRvd0hhbmRsZSA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGll
bnQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKTsKLSAgICAgICAgSFdORCB3aW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVn
aW5WaWV3ZG93Q2xhc3NOYW1lLCAwLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIDAsIDAsIHBhcmVudFdpbmRvd0hhbmRsZSwgMCwgV2ViQ29yZTo6
aW5zdGFuY2VIYW5kbGUoKSwgMCk7Ci0KLSNpZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEsp
Ci0gICAgICAgIG1fd2luZG93ID0gd2luZG93OwotI2Vsc2UKLSAgICAgICAgc2V0UGxhdGZvcm1X
aWRnZXQod2luZG93KTsKLSNlbmRpZgotCi0gICAgICAgIC8vIENhbGxpbmcgU2V0V2luZG93TG9u
Z1B0ckEgaGVyZSBtYWtlcyB0aGUgd2luZG93IHByb2MgQVNDSUksIHdoaWNoIGlzIHJlcXVpcmVk
IGJ5IGF0IGxlYXN0Ci0gICAgICAgIC8vIHRoZSBTaG9ja3dhdmUgRGlyZWN0b3IgcGx1Zy1pbi4K
LSNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAgICA6OlNldFdpbmRvd0xvbmdQ
dHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRSKURlZldp
bmRvd1Byb2NBKTsKLSNlbHNlCi0gICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MsIChMT05HKURlZldpbmRvd1Byb2NBKTsKLSNlbmRp
ZgotICAgICAgICBTZXRQcm9wKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIGtXZWJQbHVnaW5WaWV3
UHJvcGVydHksIHRoaXMpOwotCi0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlw
ZVdpbmRvdzsKLSAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlw
ZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7Ci0gICAgfQotCi0gICAg
dXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci0KLSAgICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkKLSAgICAgICAgc2V0TlBX
aW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEZXN0cm95V2luZG93KHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpOwotICAgIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KDApOwotfQotCi1QYXNz
UmVmUHRyPEltYWdlPiBQbHVnaW5WaWV3OjpzbmFwc2hvdCgpCi17Ci0jaWYgIVBMQVRGT1JNKEdU
SykgJiYgIVVTRShXSU5HREkpCi0gICAgYXV0byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZUNvbXBhdGlibGVEQygwKSk7Ci0KLSAgICBpZiAoIW1faXNXaW5kb3dlZCkgewotICAgICAgICAv
LyBFbmFibGUgd29ybGQgdHJhbnNmb3Jtcy4KLSAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYy5n
ZXQoKSwgR01fQURWQU5DRUQpOwotCi0gICAgICAgIFhGT1JNIHRyYW5zZm9ybTsKLSAgICAgICAg
R2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgpLCAmdHJhbnNmb3JtKTsKLQotICAgICAgICAvLyBX
aW5kb3dsZXNzIHBsdWctaW5zIGFzc3VtZSB0aGF0IHRoZXkncmUgZHJhd2luZyBvbnRvIHRoZSB2
aWV3J3MgREMuCi0gICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBw
bHVnLWluIGRyYXdzIGF0ICgwLCAwKS4KLSAgICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBkb3du
Y2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSku
bG9jYXRpb24oKTsKLSAgICAgICAgdHJhbnNmb3JtLmVEeCA9IC1wb3NpdGlvbi54KCk7Ci0gICAg
ICAgIHRyYW5zZm9ybS5lRHkgPSAtcG9zaXRpb24ueSgpOwotICAgICAgICBTZXRXb3JsZFRyYW5z
Zm9ybShoZGMuZ2V0KCksICZ0cmFuc2Zvcm0pOwotICAgIH0KLQotICAgIHZvaWQqIGJpdHM7Ci0g
ICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChmcmFtZVJlY3Qo
KS5zaXplKCkpOwotICAgIGF1dG8gaGJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2Vj
dGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9SUywgJmJpdHMsIDAsIDApKTsKLQotICAgIEhCSVRN
QVAgaGJtcE9sZCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KFNlbGVjdE9iamVjdChoZGMuZ2V0KCks
IGhibXAuZ2V0KCkpKTsKLQotICAgIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChoZGMuZ2V0
KCkpOwotCi0gICAgU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICByZXR1
cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShoYm1wLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7
Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2ogYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvagppbmRleCBmZjc1MGJjM2Ez
YTI5MjUwNTFmMTg0NjU1OGMxMDhmNmEzYzA4ZGY4Li5iMDI4MDUwNTlmODQ4ZDgxYzcwMTU0YWE1
ODNlNTIxODhjZWJiMzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L1dlYktpdC9XZWJLaXQudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L1dlYktpdC9XZWJLaXQudmN4cHJvagpAQCAtMjk0LDYgKzI5NCwxNiBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxXZWJEYXRhYmFzZVByb3ZpZGVyLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGNmXFdlYkNvcmVT
dXBwb3J0XFdlYkluc3BlY3RvckNsaWVudENGLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXG5wYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRlYnVnLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFt
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdp
blZpZXcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNc
UGx1Z2luRGF0YWJhc2VXaW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c
d2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlV2luLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXdXaW4u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVCYXNl
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9j
dW1lbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2li
bGVJbWFnZS5jcHAiIC8+CkBAIC00MzYsNiArNDQ2LDE0IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYkRhdGFiYXNlUHJvdmlkZXIuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQ
bHVnaW5EYXRhYmFzZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBs
dWdpbnNcUGx1Z2luRGVidWcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdp
blxQbHVnaW5zXFBsdWdpblBhY2thZ2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XC4uXHdpblxQbHVnaW5zXFBsdWdpblF1aXJrU2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5TdHJhdGVneS5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFtLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5WaWV3LmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJs
ZUJhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxl
RG9jdW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3Np
YmxlSW1hZ2UuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ov
V2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hw
cm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzCmluZGV4IDA5NGY2MGE5YjE5MTE3ZTNk
MThmZTVlN2I5Yzk1MDY3OGUyOGM0MzQuLmVkMzE4ZGJiOTZjMGNlNjVlMWJlMjEwOTc2NWMxNjMx
YjdkMjZiOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0
L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJv
ai9XZWJLaXQvV2ViS2l0LnZjeHByb2ouZmlsdGVycwpAQCAtMjE3LDYgKzIxNywzNiBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFdlYlNlcmlhbGl6ZWRKU1ZhbHVlLmNwcCI+
CiAgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXG5wYXBpLmNwcCI+CisgICAgICA8
RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmNwcCI+CisgICAgICA8
RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRlYnVnLmNwcCI+CisgICAgICA8Rmls
dGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIj4KKyAgICAgIDxGaWx0
ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFtLmNwcCI+CisgICAgICA8RmlsdGVy
PlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXcuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291
cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJhc2VXaW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+
U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAiPgorICAg
ICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlV2luLmNwcCI+Cisg
ICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXdXaW4uY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlQXJlYUltcGwuY3BwIj4KICAgICAg
IDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNTU4LDYgKzU4
OCwyNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFdlYkNvcmVTdXBwb3J0
XEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgiPgogICAgICAgPEZpbHRlcj5XZWJDb3Jl
U3VwcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuaCI+CisgICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGVidWcuaCI+CisgICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luUGFja2FnZS5oIj4KKyAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5RdWlya1NldC5oIj4KKyAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5TdHJlYW0uaCI+CisgICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luVmlldy5oIj4KKyAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgi
PgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZUFyZWFJbXBsLmgi
PgogICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BhaW50SG9va3MuYXNtIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTA4ODEzNTZh
MGRkY2Q3ODMwNzI4MTFlOWYxNWExMTU5NGIxODVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQpAQCAtMCwwICsxLDUwIEBACis7LyoK
KzsgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorOworOyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCis7ICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorOyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCis7Cis7ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorOyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworOyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorOyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsqLworCis7SERDIF9fc3RkY2FsbCBfSEJlZ2lu
UGFpbnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNUIGxwUGFpbnQpOworCitQVUJMSUMgIF9IQmVn
aW5QYWludAorCitfVEVYVCAgIFNFR01FTlQKKworX0hCZWdpblBhaW50IFBST0MKKyAgICAgbW92
ICByMTAscmN4CisgICAgIG1vdiAgZWF4LDEwMTdoCisgICAgIHN5c2NhbGwKKyAgICAgcmV0Citf
SEJlZ2luUGFpbnQgRU5EUAorCitfVEVYVCAgIEVORFMKKworO0JPT0wgX19zdGRjYWxsIF9IRW5k
UGFpbnQoSFdORCBoV25kLCBjb25zdCBQQUlOVFNUUlVDVCogbHBQYWludCk7CisKK1BVQkxJQyAg
X0hFbmRQYWludAorCitfVEVYVCAgIFNFR01FTlQKKworX0hFbmRQYWludCBQUk9DCisgICAgbW92
ICByMTAscmN4CisgICAgbW92ICBlYXgsMTAxOWgKKyAgICBzeXNjYWxsCisgICAgcmV0CitfSEVu
ZFBhaW50IEVORFAKKworX1RFWFQgICBFTkRTCisKK0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYmEyY2VlMmRhNzJjYWYxNGI3
NWNmMzZmYWFkMTRiNzVlNTc0ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDsKKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCitzdGF0aWMgY29uc3Qgc2l6
ZV90IG1heGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVNpemUgPSAzMjc2ODsKKwor
c3RhdGljIGJvb2wgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOworCitT
dHJpbmcmIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpCit7CisgICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY2FjaGVQYXRoLCAoKSk7CisgICAgcmV0
dXJuIGNhY2hlUGF0aDsKK30KKyNlbmRpZgorCitQbHVnaW5EYXRhYmFzZTo6UGx1Z2luRGF0YWJh
c2UoKQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgOiBt
X3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQoZmFsc2UpCisjZW5kaWYKK3sKK30KKwor
UGx1Z2luRGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKGJvb2wgcG9w
dWxhdGUpCit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBwbHVnaW5zID0gMDsKKworICAg
IGlmICghcGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlOwor
CisgICAgICAgIGlmIChwb3B1bGF0ZSkgeworICAgICAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2lu
RGlyZWN0b3JpZXMoUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpKTsK
KyAgICAgICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBwbHVnaW5zOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc01JTUVUeXBlUmVn
aXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlw
ZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBObyBw
bHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGlu
ZyBhZ2FpbgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5j
b250YWlucyhtaW1lVHlwZSkpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBs
dWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKK3sKKyAgICBtX3BsdWdpbkRp
cmVjdG9yaWVzLmFwcGVuZChkaXJlY3RvcnkpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQ
bHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKKyAgICBpZiAoIW1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRl
ZCkKKyAgICAgICAgbG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKyAgICBi
b29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIGlmICghbV9wbHVnaW5zLmlzRW1w
dHkoKSkgeworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkOworICAgICAgICBnZXRE
ZWxldGVkUGx1Z2lucyhwbHVnaW5zVG9VbmxvYWQpOworCisgICAgICAgIC8vIFVubG9hZCBwbHVn
aW5zCisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGx1Z2luc1RvVW5s
b2FkLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
bHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgcmVt
b3ZlKGl0LT5nZXQoKSk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9V
bmxvYWQuaXNFbXB0eSgpOworICAgIH0KKworICAgIEhhc2hTZXQ8U3RyaW5nPiBwYXRoczsKKyAg
ICBnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMocGF0aHMpOworCisgICAgSGFzaE1hcDxTdHJp
bmcsIHRpbWVfdD4gcGF0aHNXaXRoVGltZXM7CisKKyAgICAvLyBXZSBzaG91bGQgb25seSBza2lw
IHVuY2hhbmdlZCBmaWxlcyBpZiB3ZSBkaWRuJ3QgcmVtb3ZlIGFueSBwbHVnaW5zIGFib3ZlLiBJ
ZiB3ZSBkaWQgcmVtb3ZlCisgICAgLy8gYW55IHBsdWdpbnMsIHdlIG5lZWQgdG8gbG9vayBhdCBl
dmVyeSBwbHVnaW4gZmlsZSBzbyB0aGF0LCBlLmcuLCBpZiB0aGUgdXNlciBoYXMgdHdvIHZlcnNp
b25zCisgICAgLy8gb2YgUmVhbFBsYXllciBpbnN0YWxsZWQgYW5kIGp1c3QgcmVtb3ZlZCB0aGUg
bmV3ZXIgb25lLCB3ZSdsbCBwaWNrIHVwIHRoZSBvbGRlciBvbmUuCisgICAgYm9vbCBzaG91bGRT
a2lwVW5jaGFuZ2VkRmlsZXMgPSAhcGx1Z2luU2V0Q2hhbmdlZDsKKworICAgIEhhc2hTZXQ8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgcGF0aHNFbmQgPSBwYXRocy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBpdCAhPSBw
YXRoc0VuZDsgKytpdCkgeworICAgICAgICB0aW1lX3QgbGFzdE1vZGlmaWVkOworICAgICAgICBp
ZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKCppdCwgbGFzdE1vZGlmaWVkKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIHBhdGhzV2l0aFRpbWVzLmFkZCgqaXQsIGxhc3RNb2Rp
ZmllZCk7CisKKyAgICAgICAgLy8gSWYgdGhlIHBhdGgncyB0aW1lc3RhbXAgaGFzbid0IGNoYW5n
ZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSByYW4gcmVmcmVzaCgpLCB3ZSBkb24ndCBoYXZlIHRv
IGRvIGFueXRoaW5nLgorICAgICAgICBpZiAoc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzICYmIG1f
cGx1Z2luUGF0aHNXaXRoVGltZXMuZ2V0KCppdCkgPT0gbGFzdE1vZGlmaWVkKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBvbGRQYWNr
YWdlID0gbV9wbHVnaW5zQnlQYXRoLmdldCgqaXQpKSB7CisgICAgICAgICAgICBBU1NFUlQoIXNo
b3VsZFNraXBVbmNoYW5nZWRGaWxlcyB8fCBvbGRQYWNrYWdlLT5sYXN0TW9kaWZpZWQoKSAhPSBs
YXN0TW9kaWZpZWQpOworICAgICAgICAgICAgcmVtb3ZlKG9sZFBhY2thZ2UuZ2V0KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKCppdCwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgaWYgKHBh
Y2thZ2UgJiYgYWRkKHBhY2thZ2UucmVsZWFzZSgpKSkKKyAgICAgICAgICAgIHBsdWdpblNldENo
YW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIENhY2hlIGFsbCB0aGUgcGF0aHMgd2UgZm91
bmQgd2l0aCB0aGVpciB0aW1lc3RhbXBzIGZvciBuZXh0IHRpbWUuCisgICAgcGF0aHNXaXRoVGlt
ZXMuc3dhcChtX3BsdWdpblBhdGhzV2l0aFRpbWVzKTsKKworICAgIGlmICghcGx1Z2luU2V0Q2hh
bmdlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9NRVRBREFUQV9DQUNIRSkKKyAgICB1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOwor
I2VuZGlmCisKKyAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKKworICAgIC8vIFJl
Z2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8g
R2V0IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKKyAgICAg
ICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCkt
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1h
cF9lbmQ7ICsrbWFwX2l0KQorICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZCht
YXBfaXQtPmtleSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZlY3RvcjxQbHVn
aW5QYWNrYWdlKj4gUGx1Z2luRGF0YWJhc2U6OnBsdWdpbnMoKSBjb25zdAoreworICAgIFZlY3Rv
cjxQbHVnaW5QYWNrYWdlKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQg
UGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUoY29uc3Qgdm9pZCogYSwgY29u
c3Qgdm9pZCogYikKK3sKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5BID0gKnN0YXRpY19jYXN0
PFBsdWdpblBhY2thZ2UqIGNvbnN0Kj4oYSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luQiA9
ICpzdGF0aWNfY2FzdDxQbHVnaW5QYWNrYWdlKiBjb25zdCo+KGIpOworCisgICAgcmV0dXJuIHBs
dWdpbkEtPmNvbXBhcmUoKnBsdWdpbkIpOworfQorCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRh
YmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBp
ZiAobWltZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBr
ZXkgPSBtaW1lVHlwZS5sb3dlcigpOworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOworICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9
IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQoa2V5KTsKKyAgICBpZiAocHJlZmVycmVkUGx1Z2luCisg
ICAgICAgICYmIHByZWZlcnJlZFBsdWdpbi0+aXNFbmFibGVkKCkKKyAgICAgICAgJiYgcHJlZmVy
cmVkUGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisgICAgICAg
IHJldHVybiBwcmVmZXJyZWRQbHVnaW47CisgICAgfQorCisgICAgVmVjdG9yPFBsdWdpblBhY2th
Z2UqLCAyPiBwbHVnaW5DaG9pY2VzOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBQ
bHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKworICAgICAgICBpZiAoIXBsdWdp
bi0+aXNFbmFibGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocGx1
Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgICAgIGlmICghcGx1Z2luLT5l
bnN1cmVQbHVnaW5Mb2FkZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgor
ICAgICAgICAgICAgcGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1Z2luKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBxc29ydChwbHVnaW5DaG9pY2VzLmRhdGEoKSwgcGx1Z2luQ2hvaWNlcy5zaXplKCks
IHNpemVvZihQbHVnaW5QYWNrYWdlKiksIFBsdWdpbkRhdGFiYXNlOjpwcmVmZXJyZWRQbHVnaW5D
b21wYXJlKTsKKworICAgIHJldHVybiBwbHVnaW5DaG9pY2VzWzBdOworfQorCitTdHJpbmcgUGx1
Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9u
KSBjb25zdAoreworICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKKyAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2Uq
LCAyPiBwbHVnaW5DaG9pY2VzOworICAgIEhhc2hNYXA8UGx1Z2luUGFja2FnZSosIFN0cmluZz4g
bWltZVR5cGVGb3JQbHVnaW47CisKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgh
KCppdCktPmlzRW5hYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRv
RXh0ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4o
KTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBtaW1lVHlw
ZSA9IG1pbWVfaXQtPmtleTsKKyAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBs
dWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWltZVR5cGUpOworICAgICAgICAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsKKyAgICAgICAg
ICAgIGJvb2wgZm91bmRNYXBwaW5nID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CisgICAgICAg
ICAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9ICgqaXQpLmdldCgpOworCisgICAg
ICAgICAgICAgICAgICAgIGlmIChwcmVmZXJyZWRQbHVnaW4gJiYgUGx1Z2luUGFja2FnZTo6ZXF1
YWwoKnBsdWdpbiwgKnByZWZlcnJlZFBsdWdpbikpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWltZVR5cGU7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NB
Q0hFKQorICAgICAgICAgICAgICAgICAgICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2luTG9hZGVk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5DaG9pY2VzLmFwcGVuZChwbHVnaW4pOworICAgICAgICAgICAgICAg
ICAgICBtaW1lVHlwZUZvclBsdWdpbi5hZGQocGx1Z2luLCBtaW1lVHlwZSk7CisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kTWFwcGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmb3Vu
ZE1hcHBpbmcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAocGx1Z2luQ2hvaWNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KworICAgIHFzb3J0KHBsdWdpbkNob2ljZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUoKSwg
c2l6ZW9mKFBsdWdpblBhY2thZ2UqKSwgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNv
bXBhcmUpOworCisgICAgcmV0dXJuIG1pbWVUeXBlRm9yUGx1Z2luLmdldChwbHVnaW5DaG9pY2Vz
WzBdKTsKK30KKworUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29u
c3QgVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKCFtaW1lVHlwZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAg
CisgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CisgICAgaWYg
KGZpbGVuYW1lLmVuZHNXaXRoKCcvJykpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlu
dCBleHRlbnNpb25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGlmIChleHRl
bnNpb25Qb3MgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFN0cmluZyBtaW1l
VHlwZUZvckV4dGVuc2lvbiA9IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVuYW1lLnN1YnN0cmlu
ZyhleHRlbnNpb25Qb3MgKyAxKSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2lu
Rm9yTUlNRVR5cGUobWltZVR5cGVGb3JFeHRlbnNpb24pOworICAgIGlmICghcGx1Z2luKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRv
d3MgZm9yIHRoZSBtaW1lIHR5cGUKKyAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0
ZW5zaW9uLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgbWltZVR5cGUgPSBt
aW1lVHlwZUZvckV4dGVuc2lvbjsKKyAgICByZXR1cm4gcGx1Z2luOworfQorCit2b2lkIFBsdWdp
bkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4pCit7CisgICAgaWYgKCFwbHVnaW4gfHwgcGx1
Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICBtX3By
ZWZlcnJlZFBsdWdpbnMuc2V0KG1pbWVUeXBlLmxvd2VyKCksIHBsdWdpbik7Cit9CisKK2Jvb2wg
UGx1Z2luRGF0YWJhc2U6OmZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYg
ZmlsZVBhdGgpIGNvbnN0Cit7CisgICAgLy8gU2tpcCBwbHVnaW4gZmlsZXMgdGhhdCBhcmUgZGlz
YWJsZWQgYnkgZmlsZW5hbWUuCisgICAgaWYgKG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5jb250YWlu
cyhwYXRoR2V0RmlsZU5hbWUoZmlsZVBhdGgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIGZpbGVFeGlzdHMoZmlsZVBhdGgpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNl
OjpnZXREZWxldGVkUGx1Z2lucyhQbHVnaW5TZXQmIHBsdWdpbnMpIGNvbnN0Cit7CisgICAgUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBpZiAoIWZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKCgqaXQp
LT5wYXRoKCkpKQorICAgICAgICAgICAgcGx1Z2lucy5hZGQoKml0KTsKKyAgICB9Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmFkZChQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBycFBhY2th
Z2UpCit7CisgICAgQVNTRVJUX0FSRyhwcnBQYWNrYWdlLCBwcnBQYWNrYWdlKTsKKworICAgIFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gcHJwUGFja2FnZTsKKworICAgIGlmICghbV9w
bHVnaW5zLmFkZChwYWNrYWdlKS5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtX3BsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNr
YWdlKiBwYWNrYWdlKQoreworICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CisgICAgTUlNRVRvRXh0
ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9u
cygpLmVuZCgpOworICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFBsdWdp
blBhY2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1
Z2lucy5maW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJlZmVy
cmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2UpCisgICAg
ICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7CisgICAgfQor
CisgICAgbV9wbHVnaW5zLnJlbW92ZShwYWNrYWdlKTsKKyAgICBtX3BsdWdpbnNCeVBhdGgucmVt
b3ZlKHBhY2thZ2UtPnBhdGgoKSk7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmNsZWFyKCkK
K3sKKyAgICBtX3BsdWdpbnMuY2xlYXIoKTsKKyAgICBtX3BsdWdpbnNCeVBhdGguY2xlYXIoKTsK
KyAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLmNsZWFyKCk7CisgICAgbV9yZWdpc3RlcmVkTUlN
RVR5cGVzLmNsZWFyKCk7CisgICAgbV9wcmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7CisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICBtX3BlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlSXNMb2FkZWQgPSBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFBsdWdpbkRhdGFi
YXNlOjpyZW1vdmVEaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sK
KyAgICByZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLnJlbW92ZShmaWxlTmFtZSk7Cit9CisK
K2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmFkZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKQoreworICAgIHJldHVybiBtX2Rpc2FibGVkUGx1Z2luRmlsZXMuYWRkKGZpbGVO
YW1lKS5pc05ld0VudHJ5OworfQorCisjaWYgKCFPUyhXSU5ET1dTKSB8fCAhRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpKQorLy8gRm9yIFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZAorLy8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQg
aWYgd2UgY2FuIHVzZSBXZWJDb3JlIGNvbnN0cnVjdHMKKy8vIGZvciB0aGUgbG9naWMgd2Ugc2hv
dWxkIHBlcmhhcHMgbW92ZSBpdCBoZXJlIHVuZGVyIFhQX1dJTj8KKworVmVjdG9yPFN0cmluZz4g
UGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCit7CisgICAgVmVjdG9y
PFN0cmluZz4gcGF0aHM7CisKKyAgICAvLyBBZGQgcGF0aHMgc3BlY2lmaWMgdG8gZWFjaCBwbGF0
Zm9ybQorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGggPSBo
b21lRGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmcoIi8u
bW96aWxsYS9wbHVnaW5zIikpOworICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7CisK
KyAgICB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisgICAgdXNlclBsdWdp
blBhdGguYXBwZW5kKFN0cmluZygiLy5uZXRzY2FwZS9wbHVnaW5zIikpOworICAgIHBhdGhzLmFw
cGVuZCh1c2VyUGx1Z2luUGF0aCk7CisKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dz
ZXIvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9saWIvbW96aWxsYS9w
bHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9maXJlZm94L3BsdWdpbnMiKTsK
KyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvYnJvd3Nlci1wbHVnaW5zIik7CisgICAgcGF0
aHMuYXBwZW5kKCIvdXNyL2xpYi9icm93c2VyLXBsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQo
Ii91c3IvbGliL21vemlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2Nh
bC9uZXRzY2FwZS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvb3B0L21vemlsbGEvcGx1
Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL29wdC9tb3ppbGxhL2xpYi9wbHVnaW5zIik7Cisg
ICAgcGF0aHMuYXBwZW5kKCIvb3B0L25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBl
bmQoIi9vcHQvbmV0c2NhcGUvY29tbXVuaWNhdG9yL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBl
bmQoIi91c3IvbGliL25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3Iv
bGliL25ldHNjYXBlL3BsdWdpbnMtbGliYzUiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGli
L25ldHNjYXBlL3BsdWdpbnMtbGliYzYiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQv
bmV0c2NhcGUvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9tb3ppbGxh
L3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25zYnJvd3Nlci9wbHVnaW5z
Iik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L25zYnJvd3Nlci9wbHVnaW5zIik7CisK
KyAgICBTdHJpbmcgbW96SG9tZShnZXRlbnYoIk1PWklMTEFfSE9NRSIpKTsKKyAgICBtb3pIb21l
LmFwcGVuZCgiL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQobW96SG9tZSk7CisKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtb3pQYXRoczsKKyAgICBTdHJpbmcgbW96UGF0aChnZXRlbnYoIk1PWl9Q
TFVHSU5fUEFUSCIpKTsKKyAgICBtb3pQYXRoLnNwbGl0KFVDaGFyKCc6JyksIC8qIGFsbG93RW1w
dHlFbnRyaWVzICovIGZhbHNlLCBtb3pQYXRocyk7CisgICAgcGF0aHMuYXBwZW5kVmVjdG9yKG1v
elBhdGhzKTsKKyNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIFN0cmluZyB1c2VyUGx1Z2lu
UGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisgICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0
cmluZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7CisgICAgcGF0aHMuYXBwZW5kKHVz
ZXJQbHVnaW5QYXRoKTsKKyAgICBwYXRocy5hcHBlbmQoIi9MaWJyYXJ5L0ludGVybmV0IFBsdWct
SW5zIik7CisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGgg
PSBob21lRGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmco
IlxcQXBwbGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lucyIpKTsKKyAgICBwYXRocy5hcHBl
bmQodXNlclBsdWdpblBhdGgpOworI2VuZGlmCisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICBTdHJpbmcgcHJlZmVycmVkUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRo
KCk7CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3Ry
aW5nKCIvLm1vemlsbGEvcGx1Z2lucyIpKTsKKyNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQorICAg
IHByZWZlcnJlZFBhdGguYXBwZW5kKFN0cmluZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMi
KSk7CisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJp
bmcoIlxcQXBwbGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lucyIpKTsKKyNlbmRpZgorCisg
ICAgLy8gVE9ETzogV2Ugc2hvdWxkIG5vcm1hbGl6ZSB0aGUgcGF0aCBiZWZvcmUgZG9pbmcgYSBj
b21wYXJpc29uLgorICAgIHJldHVybiBwYXRoID09IHByZWZlcnJlZFBhdGg7Cit9CisKK3ZvaWQg
UGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmlu
Zz4mIHBhdGhzKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2Ug
aW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgU3RyaW5nIGZpbGVOYW1lRmlsdGVyKCIqLnNvIik7
CisjZWxzZQorICAgIFN0cmluZyBmaWxlTmFtZUZpbHRlcigiIik7CisjZW5kaWYKKworICAgIFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkaXJzRW5kID0gbV9wbHVnaW5EaXJlY3Rvcmll
cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkSXQgPSBt
X3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2luKCk7IGRJdCAhPSBkaXJzRW5kOyArK2RJdCkgeworICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBwbHVnaW5QYXRocyA9IGxpc3REaXJlY3RvcnkoKmRJdCwgZmls
ZU5hbWVGaWx0ZXIpOworICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGx1
Z2luc0VuZCA9IHBsdWdpblBhdGhzLmVuZCgpOworICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBwSXQgPSBwbHVnaW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1Z2lu
c0VuZDsgKytwSXQpIHsKKyAgICAgICAgICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJs
ZWQoKnBJdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHBhdGhz
LmFkZCgqcEl0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2VuZGlmIC8vICFPUyhXSU5ET1dT
KQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKworc3RhdGlj
IHZvaWQgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgZmls
ZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAwOwor
ICAgIHNpemVfdCBidWZmZXJDYXBhY2l0eSA9IDEwMjQ7CisgICAgYnVmZmVyLnJlc2l6ZShidWZm
ZXJDYXBhY2l0eSk7CisKKyAgICBkbyB7CisgICAgICAgIGJ1ZmZlclNpemUgKz0gcmVhZEZyb21G
aWxlKGZpbGUsIGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJTaXplLCBidWZmZXJDYXBhY2l0eSAtIGJ1
ZmZlclNpemUpOworICAgICAgICBpZiAoYnVmZmVyU2l6ZSA9PSBidWZmZXJDYXBhY2l0eSkgewor
ICAgICAgICAgICAgaWYgKGJ1ZmZlckNhcGFjaXR5IDwgbWF4aW11bVBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlU2l6ZSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlckNhcGFjaXR5ICo9IDI7
CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVhcigpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICAgIGJ1ZmZlci5zaHJpbmsoYnVmZmVy
U2l6ZSk7Cit9CisKK3N0YXRpYyBib29sIHJlYWRVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0U3Ry
aW5nLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKK3sKKyAgICBpZiAoc3RhcnQgPj0g
ZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgbGVuID0gc3RybGVuKHN0YXJ0
KTsKKyAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXJ0LCBsZW4pOworICAg
IHN0YXJ0ICs9IGxlbiArIDE7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
cmVhZFRpbWUodGltZV90JiByZXN1bHRUaW1lLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVu
ZCkKK3sKKyAgICBpZiAoc3RhcnQgKyBzaXplb2YodGltZV90KSA+PSBlbmQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBzdHJlYW0gaXMgbm90IG5lY2Vzc2FyeSBhbGlnbmVk
LgorICAgIG1lbWNweSgmcmVzdWx0VGltZSwgc3RhcnQsIHNpemVvZih0aW1lX3QpKTsKKyAgICBz
dGFydCArPSBzaXplb2YodGltZV90KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Y29uc3QgY2hhciBzY2hlbWFWZXJzaW9uID0gJzEnOworc3RhdGljIGNvbnN0IGNoYXIgcGVyc2lz
dGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZVtdID0gIlBsdWdpbk1ldGFkYXRhQ2FjaGUu
YmluIjsKKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hl
KCkKK3sKKyAgICBpZiAoIWlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkgfHwgcGVy
c2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKKyAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBh
dGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRo
KCksIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmlsZW5hbWUpOworICAgIGZpbGUgPSBv
cGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwgT3BlbkZvclJlYWQpOworCisgICAgaWYgKCFpc0hh
bmRsZVZhbGlkKGZpbGUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXJrIGNhY2hlIGFz
IGxvYWRlZCByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gSWYKKyAgICAvLyB0aGVy
ZSdzIGVycm9yIGluIHRoZSBjYWNoZSwgd2Ugd29uJ3QgdHJ5IHRvIGxvYWQgaXQgYW55bW9yZS4K
KyAgICBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQgPSB0cnVlOworCisgICAgVmVj
dG9yPGNoYXI+IGZpbGVDb250ZW50czsKKyAgICBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxl
KGZpbGUsIGZpbGVDb250ZW50cyk7CisgICAgY2xvc2VGaWxlKGZpbGUpOworCisgICAgaWYgKGZp
bGVDb250ZW50cy5zaXplKCkgPCAyIHx8IGZpbGVDb250ZW50cy5maXJzdCgpICE9IHNjaGVtYVZl
cnNpb24gfHwgZmlsZUNvbnRlbnRzLmxhc3QoKSAhPSAnXDAnKSB7CisgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IHNjaGVtYSIp
OworICAgICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNoYXIqIGJ1ZmZlclBvcyA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyAx
OworICAgIGNoYXIqIGVuZCA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyBmaWxlQ29udGVudHMuc2l6
ZSgpOworCisgICAgUGx1Z2luU2V0IGNhY2hlZFBsdWdpbnM7CisgICAgSGFzaE1hcDxTdHJpbmcs
IHRpbWVfdD4gY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXM7CisgICAgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IGNhY2hlZFBsdWdpbnNCeVBhdGg7CisKKyAgICB3aGls
ZSAoYnVmZmVyUG9zIDwgZW5kKSB7CisgICAgICAgIFN0cmluZyBwYXRoOworICAgICAgICB0aW1l
X3QgbGFzdE1vZGlmaWVkOworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIGRl
c2M7CisgICAgICAgIFN0cmluZyBtaW1lRGVzYzsKKyAgICAgICAgaWYgKCEocmVhZFVURjhTdHJp
bmcocGF0aCwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRUaW1lKGxhc3RN
b2RpZmllZCwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5n
KG5hbWUsIGJ1ZmZlclBvcywgZW5kKQorICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhk
ZXNjLCBidWZmZXJQb3MsIGVuZCkKKyAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcobWlt
ZURlc2MsIGJ1ZmZlclBvcywgZW5kKSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IGRhdGEiKTsKKyAgICAgICAg
ICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gU2tpcCBtZXRhZGF0YSB0aGF0IHBvaW50cyB0byBwbHVn
aW5zIGZyb20gZGlyZWN0b3JpZXMgdGhhdAorICAgICAgICAvLyBhcmUgbm90IHBhcnQgb2YgcGx1
Z2luIGRpcmVjdG9yeSBsaXN0IGFueW1vcmUuCisgICAgICAgIFN0cmluZyBwbHVnaW5EaXJlY3Rv
cnlOYW1lID0gZGlyZWN0b3J5TmFtZShwYXRoKTsKKyAgICAgICAgaWYgKG1fcGx1Z2luRGlyZWN0
b3JpZXMuZmluZChwbHVnaW5EaXJlY3RvcnlOYW1lKSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2Ug
PSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKHBhdGgsIGxhc3RNb2RpZmll
ZCwgbmFtZSwgZGVzYywgbWltZURlc2MpOworCisgICAgICAgIGlmIChwYWNrYWdlICYmIGNhY2hl
ZFBsdWdpbnMuYWRkKHBhY2thZ2UpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIGNhY2hlZFBs
dWdpblBhdGhzV2l0aFRpbWVzLmFkZChwYWNrYWdlLT5wYXRoKCksIHBhY2thZ2UtPmxhc3RNb2Rp
ZmllZCgpKTsKKyAgICAgICAgICAgIGNhY2hlZFBsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBh
dGgoKSwgcGFja2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3BsdWdpbnMuc3dhcChj
YWNoZWRQbHVnaW5zKTsKKyAgICBtX3BsdWdpbnNCeVBhdGguc3dhcChjYWNoZWRQbHVnaW5zQnlQ
YXRoKTsKKyAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLnN3YXAoY2FjaGVkUGx1Z2luUGF0aHNX
aXRoVGltZXMpOworfQorCitzdGF0aWMgYm9vbCB3cml0ZVVURjhTdHJpbmcoUGxhdGZvcm1GaWxl
SGFuZGxlIGZpbGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIENTdHJpbmcgdXRmOFN0
cmluZyA9IHN0cmluZy51dGY4KCk7CisgICAgaW50IGxlbmd0aCA9IHV0ZjhTdHJpbmcubGVuZ3Ro
KCkgKyAxOworICAgIHJldHVybiB3cml0ZVRvRmlsZShmaWxlLCB1dGY4U3RyaW5nLmRhdGEoKSwg
bGVuZ3RoKSA9PSBsZW5ndGg7Cit9CisKK3N0YXRpYyBib29sIHdyaXRlVGltZShQbGF0Zm9ybUZp
bGVIYW5kbGUgZmlsZSwgY29uc3QgdGltZV90JiB0aW1lKQoreworICAgIHJldHVybiB3cml0ZVRv
RmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmdGltZSksIHNpemVvZih0
aW1lX3QpKSA9PSBzaXplb2YodGltZV90KTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6dXBk
YXRlUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKQoreworICAgIGlmICghaXNQZXJzaXN0ZW50TWV0
YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VBbGxEaXJlY3RvcmllcyhwZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSk7CisgICAgU3RyaW5nIGFic29sdXRlQ2FjaGVQYXRoID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLCBw
ZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lKTsKKyAgICBkZWxldGVGaWxlKGFi
c29sdXRlQ2FjaGVQYXRoKTsKKworICAgIGlmIChtX3BsdWdpbnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKKyAgICBmaWxlID0gb3Bl
bkZpbGUoYWJzb2x1dGVDYWNoZVBhdGgsIE9wZW5Gb3JXcml0ZSk7CisKKyAgICBpZiAoIWlzSGFu
ZGxlVmFsaWQoZmlsZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBwbHVn
aW4gbWV0YWRhdGEgY2FjaGUgZm9yIHNhdmluZyIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2hhciBsb2NhbFNjaGVtYVZlcnNpb24gPSBzY2hlbWFWZXJzaW9uOworICAgIGlmICh3
cml0ZVRvRmlsZShmaWxlLCAmbG9jYWxTY2hlbWFWZXJzaW9uLCAxKSAhPSAxKSB7CisgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBtZXRhZGF0YSBjYWNoZSBzY2hlbWEi
KTsKKyAgICAgICAgY2xvc2VGaWxlKGZpbGUpOworICAgICAgICBkZWxldGVGaWxlKGFic29sdXRl
Q2FjaGVQYXRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgaWYgKCEod3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5wYXRoKCkpCisgICAg
ICAgICAgICAgICYmIHdyaXRlVGltZShmaWxlLCAoKml0KS0+bGFzdE1vZGlmaWVkKCkpCisgICAg
ICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+bmFtZSgpKQorICAgICAg
ICAgICAgICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPmRlc2NyaXB0aW9uKCkpCisg
ICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+ZnVsbE1JTUVEZXNj
cmlwdGlvbigpKSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBs
dWdpbiBtZXRhZGF0YSB0byBjYWNoZSIpOworICAgICAgICAgICAgY2xvc2VGaWxlKGZpbGUpOwor
ICAgICAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbG9zZUZpbGUoZmlsZSk7Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkKK3sK
KyAgICByZXR1cm4gZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOworfQor
Cit2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQo
Ym9vbCBpc0VuYWJsZWQpCit7CisgICAgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNF
bmFibGVkID0gaXNFbmFibGVkOworfQorCitTdHJpbmcgUGx1Z2luRGF0YWJhc2U6OnBlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlUGF0aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBlcnNpc3RlbnRQ
bHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQ
ZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZVBhdGgpCit7CisgICAgV2ViQ29yZTo6cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2Fj
aGVQYXRoKCkgPSBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGg7Cit9CisjZW5kaWYKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmM0
OGVjZGZmNmNmMjI0MzU1OTRmOGFlODUyMzAxYTYyNjNjZjg2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCkBAIC0wLDAgKzEsMTE4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsdWdpbkRhdGFiYXNlX2gKKyNkZWZpbmUgUGx1Z2lu
RGF0YWJhc2VfaAorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xh
c3MgSW50U2l6ZTsKKyAgICBjbGFzcyBVUkw7CisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VDbGll
bnQ7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQ
dHI8UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2thZ2VIYXNoLCBQbHVnaW5QYWNrYWdlSGFzaFRy
YWl0cz4gUGx1Z2luU2V0OworCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2UgeworICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQbHVnaW5EYXRhYmFzZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luRGF0YWJhc2UoKTsKKworICAgICAgICAv
LyBUaGUgZmlyc3QgY2FsbCB0byBpbnN0YWxsZWRQbHVnaW5zIGNyZWF0ZXMgdGhlIHBsdWdpbiBk
YXRhYmFzZQorICAgICAgICAvLyBhbmQgYnkgZGVmYXVsdCBwb3B1bGF0ZXMgaXQgd2l0aCB0aGUg
cGx1Z2lucyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4KKyAgICAgICAgLy8gRm9yIHRlc3Rpbmcg
cHVycG9zZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG5vdCBwb3B1bGF0ZSB0aGUgZGF0YWJhc2UKKyAg
ICAgICAgLy8gYXV0b21hdGljYWxseSwgYXMgdGhlIHBsdWdpbnMgbWlnaHQgYWZmZWN0IHRoZSBE
UlQgcmVzdWx0cyBieQorICAgICAgICAvLyB3cml0aW5nIHRvIGEuby4gc3RkZXJyLgorICAgICAg
ICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIGluc3RhbGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSA9
IHRydWUpOworCisgICAgICAgIGJvb2wgcmVmcmVzaCgpOworICAgICAgICB2b2lkIGNsZWFyKCk7
CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAg
ICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAg
ICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworCisgICAg
ICAgIHN0YXRpYyBib29sIGlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5KTsKKyAgICAgICAgc3RhdGljIGludCBwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNv
bnN0IHZvaWQqLCBjb25zdCB2b2lkKik7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBs
dWdpbihjb25zdCBVUkwmLCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2Fn
ZSogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZv
aWQgc2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
UGx1Z2luUGFja2FnZSogcGx1Z2luKTsKKworICAgICAgICB2b2lkIHNldFBsdWdpbkRpcmVjdG9y
aWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKKyAgICAgICAgeworICAgICAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMgPSBkaXJlY3Rv
cmllczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxl
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgICAgICBib29sIGFkZERpc2FibGVkUGx1Z2lu
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IGRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBw
bHVnaW5EaXJlY3RvcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luRGlyZWN0b3JpZXM7IH0K
KworICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRl
bnNpb24pIGNvbnN0OworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUp
CisgICAgICAgIHN0YXRpYyBib29sIGlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCk7
CisgICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChi
b29sIGlzRW5hYmxlZCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcGVyc2lzdGVudE1ldGFkYXRh
Q2FjaGVQYXRoKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCk7CisjZW5k
aWYKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9y
aWVzKEhhc2hTZXQ8U3RyaW5nPiYpIGNvbnN0OworICAgICAgICB2b2lkIGdldERlbGV0ZWRQbHVn
aW5zKFBsdWdpblNldCYpIGNvbnN0OworICAgICAgICBib29sIGZpbGVFeGlzdHNBbmRJc05vdERp
c2FibGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgICAgIC8vIFJldHVybnMgd2hldGhl
ciB0aGUgcGx1Z2luIHdhcyBhY3R1YWxseSBhZGRlZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVk
IGlmIGl0J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhpc3RpbmcgcGx1Z2luKS4KKyAgICAgICAgYm9v
bCBhZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPik7CisgICAgICAgIHZvaWQgcmVtb3ZlKFBs
dWdpblBhY2thZ2UqKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hF
KQorICAgICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworICAgICAgICB2
b2lkIHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKworICAgICAgICBI
YXNoU2V0PFN0cmluZz4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzOworICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBtX3BsdWdpbkRpcmVjdG9yaWVzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdp
c3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAgICAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOwor
ICAgICAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOwor
ICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJy
ZWRQbHVnaW5zOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisg
ICAgICAgIGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkOworI2VuZGlmCisg
ICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwIGIvU291cmNlL1dl
YktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RjNmNm
MzQ5OWZjMjlkZTZhYzVhZWFkYjM5MjQwNDI3MWFhMGUxOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwCkBAIC0wLDAgKzEs
Mzg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlIDx3dGYvV2luZG93c0V4dHJhcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5QYXRo
c0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpCit7Cisg
ICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXks
IEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywg
JmtleSk7CisKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVy
bjsKKworICAgIHdjaGFyX3QgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsK
KworICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsK
KyAgICAgICAgRFdPUkQgbmFtZUxlbiA9IFdURl9BUlJBWV9MRU5HVEgobmFtZSk7CisgICAgICAg
IHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwg
Jmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgV0NIQVIgcGF0aFN0cltfTUFYX1BBVEhdOwor
ICAgICAgICBEV09SRCBwYXRoU3RyU2l6ZSA9IHNpemVvZihwYXRoU3RyKTsKKyAgICAgICAgRFdP
UkQgdHlwZTsKKworICAgICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKGtleSwgbmFtZSwg
TCJQYXRoIiwgJnR5cGUsIHBhdGhTdHIsICZwYXRoU3RyU2l6ZSk7CisgICAgICAgIGlmIChyZXN1
bHQgIT0gRVJST1JfU1VDQ0VTUyB8fCB0eXBlICE9IFJFR19TWikKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIHBhdGhzLmFkZChTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBz
aXplb2YoV0NIQVIpIC0gMSkpOworICAgIH0KKworICAgIFJlZ0Nsb3NlS2V5KGtleSk7Cit9CisK
K3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0
PFN0cmluZz4mIHBhdGhzKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBh
IGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFt
ZXM7CisKKyAgICBIQU5ETEUgaEZpbmQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICBXSU4z
Ml9GSU5EX0RBVEFXIGZpbmRGaWxlRGF0YTsKKworICAgIFN0cmluZyBvbGRXTVBQbHVnaW5QYXRo
OworICAgIFN0cmluZyBuZXdXTVBQbHVnaW5QYXRoOworCisgICAgVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7CisgICAgZm9yIChW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICppdCAr
ICJcXCoiOworCisgICAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5jaGFyYWN0
ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgJmZpbmRGaWxlRGF0YSk7CisKKyAgICAg
ICAgaWYgKGhGaW5kID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGZpbmRGaWxlRGF0YS5kd0ZpbGVB
dHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBTdHJpbmcoZmluZEZpbGVE
YXRhLmNGaWxlTmFtZSwgd2NzbGVuKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUpKTsKKyAgICAgICAg
ICAgIGlmICgoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoIm5wIiwgZmFsc2UpIHx8ICFmaWxlbmFtZS5l
bmRzV2l0aCgiZGxsIiwgZmFsc2UpKSAmJgorICAgICAgICAgICAgICAgICghZXF1YWxJZ25vcmlu
Z0Nhc2UoZmlsZW5hbWUsICJQbHVnaW4uZGxsIikgfHwgIWl0LT5lbmRzV2l0aCgiU2hvY2t3YXZl
IDEwIiwgZmFsc2UpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
U3RyaW5nIGZ1bGxQYXRoID0gKml0ICsgIlxcIiArIGZpbGVuYW1lOworICAgICAgICAgICAgaWYg
KCF1bmlxdWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRoKS5pc05ld0VudHJ5KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBwYXRocy5hZGQoZnVsbFBhdGgpOworCisgICAg
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkK
KyAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7CisgICAgICAgICAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21wLmRsbCIpKQor
ICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdpblBhdGggPSBmdWxsUGF0aDsKKworICAgICAgICB9
IHdoaWxlIChGaW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVEYXRhKSAhPSAwKTsKKworICAg
ICAgICBGaW5kQ2xvc2UoaEZpbmQpOworICAgIH0KKworICAgIGFkZFBsdWdpblBhdGhzRnJvbVJl
Z2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElORSwgcGF0aHMpOworICAgIGFkZFBsdWdpblBhdGhzRnJv
bVJlZ2lzdHJ5KEhLRVlfQ1VSUkVOVF9VU0VSLCBwYXRocyk7CisKKyAgICAvLyBJZiBib3RoIHRo
ZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwg
CisgICAgLy8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2lu
ZyB0aGUgb2xkIG9uZS4KKyAgICBpZiAoIW9sZFdNUFBsdWdpblBhdGguaXNFbXB0eSgpICYmICFu
ZXdXTVBQbHVnaW5QYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcGF0aHMucmVtb3ZlKG9sZFdNUFBs
dWdpblBhdGgpOworfQorCitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0
cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAgVmVjdG9yPGludD4gdmVy
c2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7
CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgewor
ICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxl
bmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10g
PT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1
YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZl
cnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisgICAgICAgIHN0YXJ0UG9zID0gZW5k
UG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1
cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxp
bmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25z
dCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+
IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYg
KHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0
aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBm
YWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemls
bGFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCit7CisgICAg
Ly8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0
cnkKKyAgICBIS0VZIGtleTsKKyAgICBMT05HIHJlc3VsdDsKKyAgICAKKyAgICByZXN1bHQgPSBS
ZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIp
LCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7
CisgICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVk
OworCisgICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgICAgIGZvciAoaW50IGkgPSAw
OzsgaSsrKSB7CisgICAgICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6
ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBu
YW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsg
IlxcRXh0ZW5zaW9ucyI7CisgICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7CisKKyAgICAg
ICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09w
ZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkuZGF0YSgpLCAwLCBLRVlfUkVBRCwgJmV4dGVuc2lvbnNLZXkpOworCisgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0
IHRoZSBwbHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNEaXJl
Y3RvcnlTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgICAgICAgICBEV09SRCBwbHVnaW5zRGlyZWN0
b3J5U2l6ZSA9IHNpemVvZihwbHVnaW5zRGlyZWN0b3J5U3RyKTsKKyAgICAgICAgICAgICAgICBE
V09SRCB0eXBlOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4
dGVuc2lvbnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNE
aXJlY3RvcnlTdHIsICZwbHVnaW5zRGlyZWN0b3J5U2l6ZSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgICAg
ICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcocGx1Z2luc0RpcmVjdG9yeVN0ciwg
cGx1Z2luc0RpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOworCisgICAgICAgICAg
ICAgICAgUmVnQ2xvc2VLZXkoZXh0ZW5zaW9uc0tleSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7CisgICAgfQorfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KFZlY3Rv
cjxTdHJpbmc+JiBkaXJlY3RvcmllcykKK3sKKyAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBs
dWdpbiBpcyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55
IEZpcmVmb3ggaW5zdGFsbHMKKyAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRI
ICsgMV07CisgICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1l
bnRTdHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2lu
RGlyZWN0b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVjdG9yeVN0cikpOworCisg
ICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0g
V1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKQorICAgICAgICBkaXJlY3Rvcmll
cy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAt
IDEpKTsKKworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U3RyW19NQVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNp
emVvZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBn
ZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgTCJTb2Z0d2FyZVxcTWljcm9zb2Z0
XFxNZWRpYVBsYXllciIsIEwiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIsICZ0eXBlLCAmaW5zdGFs
bGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7CisKKyAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgIGRp
cmVjdG9yaWVzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxs
YXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYg
ZGlyZWN0b3JpZXMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdP
cGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9i
YXQgUmVhZGVyIiksIDAsIEtFWV9SRUFELCAma2V5KTsKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9S
X1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICBG
SUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICBWZWN0b3I8aW50PiBsYXRlc3RBY3JvYmF0VmVy
c2lvbjsKKyAgICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmc7CisKKyAgICAvLyBF
bnVtZXJhdGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERX
T1JEIG5hbWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAgICByZXN1
bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0
TW9kaWZpZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9iYXRWZXJzaW9uID0gcGFy
c2VWZXJzaW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7CisgICAgICAgIGlmIChjb21w
YXJlVmVyc2lvbnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRWZXJzaW9uKSkgeworICAg
ICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVyc2lvbjsKKyAgICAgICAg
ICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZy5p
c051bGwoKSkgeworICAgICAgICBEV09SRCB0eXBlOworICAgICAgICBXQ0hBUiBhY3JvYmF0SW5z
dGFsbFBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgYWNyb2JhdEluc3RhbGxQYXRo
U2l6ZSA9IHNpemVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOworCisgICAgICAgIFN0cmluZyBh
Y3JvYmF0UGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVyXFwi
ICsgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxsUGF0aCI7CisgICAgICAg
IHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1
Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgJnR5
cGUsIGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9iYXRJbnN0YWxsUGF0aFNpemUpOworCisg
ICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAgU3RyaW5n
IGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkgPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBh
Y3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7
CisgICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoYWNyb2JhdFBsdWdpbkRpcmVjdG9yeSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgYWRkSmF2YVBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0
b3JpZXMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5
RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcSmF2YVNvZnRcXEphdmEgUGx1
Zy1pbiIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUND
RVNTKQorICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklMRVRJ
TUUgbGFzdE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0SmF2YVZlcnNpb247Cisg
ICAgU3RyaW5nIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51bWVyYXRlIHN1
YmtleXMKKyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVu
ID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51
bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsK
KworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBWZWN0b3I8aW50PiBqYXZhVmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmlu
ZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGph
dmFWZXJzaW9uLCBsYXRlc3RKYXZhVmVyc2lvbikpIHsKKyAgICAgICAgICAgIGxhdGVzdEphdmFW
ZXJzaW9uID0gamF2YVZlcnNpb247CisgICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lvblN0cmlu
ZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh
bGF0ZXN0SmF2YVZlcnNpb25TdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIERXT1JEIHR5cGU7
CisgICAgICAgIFdDSEFSIGphdmFJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOworICAgICAgICBE
V09SRCBqYXZhSW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGphdmFJbnN0YWxsUGF0aFN0cik7Cisg
ICAgICAgIERXT1JEIHVzZU5ld1BsdWdpblZhbHVlOworICAgICAgICBEV09SRCB1c2VOZXdQbHVn
aW5TaXplOworCisgICAgICAgIFN0cmluZyBqYXZhUGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxc
SmF2YVNvZnRcXEphdmEgUGx1Zy1pblxcIiArIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nOworICAg
ICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgamF2YVBs
dWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEwiVXNl
TmV3SmF2YVBsdWdpbiIsICZ0eXBlLCAmdXNlTmV3UGx1Z2luVmFsdWUsICZ1c2VOZXdQbHVnaW5T
aXplKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdXNlTmV3UGx1
Z2luVmFsdWUgPT0gMSkgeworICAgICAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShI
S0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpLCBMIkphdmFIb21lIiwgJnR5cGUsIGphdmFJbnN0YWxsUGF0aFN0
ciwgJmphdmFJbnN0YWxsUGF0aFNpemUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJP
Ul9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGphdmFQbHVnaW5EaXJlY3Rvcnkg
PSBTdHJpbmcoamF2YUluc3RhbGxQYXRoU3RyLCBqYXZhSW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9m
KFdDSEFSKSAtIDEpICsgIlxcYmluXFxuZXdfcGx1Z2luIjsKKyAgICAgICAgICAgICAgICBkaXJl
Y3Rvcmllcy5hcHBlbmQoamF2YVBsdWdpbkRpcmVjdG9yeSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMgaW5saW5l
IFN0cmluZyBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCkKK3sKKyAgICBXQ0hBUiBtb2R1bGVGaWxl
TmFtZVN0cltfTUFYX1BBVEhdOworICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc0RpcmVjdG9yeTsK
KyAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSBmYWxzZTsKKworICAgIGlm
ICghY2FjaGVkUGx1Z2luRGlyZWN0b3J5KSB7CisgICAgICAgIGNhY2hlZFBsdWdpbkRpcmVjdG9y
eSA9IHRydWU7CisKKyAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmls
ZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7CisKKyAgICAgICAgaWYgKCFt
b2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgpCisgICAg
ICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9k
dWxlRmlsZU5hbWVTdHIpKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIHBsdWdp
bnNEaXJlY3RvcnkgPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIpICsgIlxcUGx1Z2lucyI7Cisg
ICAgfQorZXhpdDoKKyAgICByZXR1cm4gcGx1Z2luc0RpcmVjdG9yeTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYg
ZGlyZWN0b3JpZXMpCit7CisgICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsK
KworICAgIGlmICghR2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgV1RGX0FS
UkFZX0xFTkdUSChzeXN0ZW1EaXJlY3RvcnlTdHIpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V0NIQVIgbWFjcm9tZWRpYURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBQYXRoQ29tYmlu
ZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3Jv
bWVkXFxGbGFzaCIpKTsKKyAgICBkaXJlY3Rvcmllcy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9y
eVN0cik7CisKKyAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1E
aXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7CisgICAgZGlyZWN0
b3JpZXMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOworfQorCitWZWN0b3I8U3RyaW5n
PiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKK3sKKyAgICBWZWN0
b3I8U3RyaW5nPiBkaXJlY3RvcmllczsKKyAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJp
UGx1Z2luc0RpcmVjdG9yeSgpOworCisgICAgaWYgKCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkpCisg
ICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChvdXJEaXJlY3RvcnkpOworICAgIGFkZEFkb2JlQWNy
b2JhdFBsdWdpbkRpcmVjdG9yeShkaXJlY3Rvcmllcyk7CisgICAgYWRkTW96aWxsYVBsdWdpbkRp
cmVjdG9yaWVzKGRpcmVjdG9yaWVzKTsKKyAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5E
aXJlY3RvcnkoZGlyZWN0b3JpZXMpOworICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmll
cyhkaXJlY3Rvcmllcyk7CisKKyAgICByZXR1cm4gZGlyZWN0b3JpZXM7Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGly
ZWN0b3J5KQoreworICAgIFN0cmluZyBvdXJEaXJlY3RvcnkgPSBzYWZhcmlQbHVnaW5zRGlyZWN0
b3J5KCk7CisKKyAgICBpZiAoIW91ckRpcmVjdG9yeS5pc051bGwoKSAmJiAhZGlyZWN0b3J5Lmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gb3VyRGlyZWN0b3J5ID09IGRpcmVjdG9yeTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5EZWJ1Zy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRl
YnVnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42NmQyM2FlNjcxMzhhY2FiYzY1YjRlMzAwY2YyY2UxNzk4MTQw
NTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5E
ZWJ1Zy5jcHAKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworI2lmICFMT0dfRElTQUJMRUQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZXJyb3JTdHJpbmdzW10gPSB7CisgICAgIk5vIGVycm9ycyBvY2N1
cnJlZC4iLCAvKiBOUEVSUl9OT19FUlJPUiAqLworICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmlj
IGVycm9yIGNvZGUgb2NjdXJyZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLworICAgICJJ
bnZhbGlkIGluc3RhbmNlIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElE
X0lOU1RBTkNFX0VSUk9SICovCisgICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBF
UlJfSU5WQUxJRF9GVU5DVEFCTEVfRVJST1IgKi8KKyAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZh
aWxlZC4iLCAvKiBOUEVSUl9NT0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KKyAgICAiTWVtb3J5
IGFsbG9jYXRpb24gZmFpbGVkLiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KKyAg
ICAiUGx1Zy1pbiBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5f
RVJST1IgKi8KKyAgICAiUGx1Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8q
IE5QRVJSX0lOVkFMSURfUExVR0lOX0RJUl9FUlJPUiAqLworICAgICJWZXJzaW9ucyBvZiBwbHVn
LWluIGFuZCBDb21tdW5pY2F0b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJM
RV9WRVJTSU9OX0VSUk9SICovCisgICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwg
LyogTlBFUlJfSU5WQUxJRF9QQVJBTSAqLworICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIs
IC8qIE5QRVJSX0lOVkFMSURfVVJMICovCisgICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIs
IC8qIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EICovCisgICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRh
LiIsIC8qIE5QRVJSX05PX0RBVEEgKi8KKyAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIs
IC8qIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FCTEUgKi8KKyAgICAiVW5rbm93biBlcnJvciBjb2Rl
IgorfTsKKworI2lmZGVmIFhQX01BQ09TWAorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRyYXdp
bmdNb2RlbHNbXSA9IHsKKyAgICAiTlBEcmF3aW5nTW9kZWxRdWlja0RyYXciLAorICAgICJOUERy
YXdpbmdNb2RlbENvcmVHcmFwaGljcyIsCisgICAgIk5QRHJhd2luZ01vZGVsT3BlbkdMIiwKKyAg
ICAiTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGV2ZW50TW9kZWxzW10gPSB7CisgICAgIk5QRXZlbnRNb2RlbENhcmJvbiIsCisgICAg
Ik5QRXZlbnRNb2RlbENvY29hIgorfTsKKyNlbmRpZiAvL1hQX01BQ09TWAorCitjb25zdCBjaGFy
KiBwcmV0dHlOYW1lRm9yTlBFcnJvcihOUEVycm9yIGVycm9yKQoreworICAgIHJldHVybiBlcnJv
clN0cmluZ3NbZXJyb3JdOworfQorCisjaWZkZWYgWFBfTUFDT1NYCitjb25zdCBjaGFyKiBwcmV0
dHlOYW1lRm9yRHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCkKK3sKKyAg
ICByZXR1cm4gZHJhd2luZ01vZGVsc1tkcmF3aW5nTW9kZWxdOworfQorCitjb25zdCBjaGFyKiBw
cmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCkKK3sKKyAgICBy
ZXR1cm4gZXZlbnRNb2RlbHNbZXZlbnRNb2RlbF07Cit9CisjZW5kaWYgLy9YUF9NQUNPU1gKKwor
Q1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpCit7
CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVnhEaXNwbGF5OiByZXR1cm4g
Ik5QTlZ4RGlzcGxheSI7CisgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiByZXR1cm4gIk5QTlZ4
dEFwcENvbnRleHQiOworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiByZXR1cm4gIk5QTlZu
ZXRzY2FwZVdpbmRvdyI7CisgICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOiByZXR1
cm4gIk5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2wiOworICAgIGNhc2UgTlBOVmFzZEVuYWJsZWRC
b29sOiByZXR1cm4gIk5QTlZhc2RFbmFibGVkQm9vbCI7CisgICAgY2FzZSBOUE5WaXNPZmZsaW5l
Qm9vbDogcmV0dXJuICJOUE5WaXNPZmZsaW5lQm9vbCI7CisKKyAgICBjYXNlIE5QTlZzZXJ2aWNl
TWFuYWdlcjogcmV0dXJuICJOUE5Wc2VydmljZU1hbmFnZXIgKG5vdCBzdXBwb3J0ZWQpIjsKKyAg
ICBjYXNlIE5QTlZET01FbGVtZW50OiByZXR1cm4gIk5QTlZET01FbGVtZW50IChub3Qgc3VwcG9y
dGVkKSI7CisgICAgY2FzZSBOUE5WRE9NV2luZG93OiByZXR1cm4gIk5QTlZET01XaW5kb3cgKG5v
dCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QTlZUb29sa2l0OiByZXR1cm4gIk5QTlZUb29sa2l0
IChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiByZXR1
cm4gIk5QTlZTdXBwb3J0c1hFbWJlZEJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKKworICAgIGNhc2Ug
TlBOVldpbmRvd05QT2JqZWN0OiByZXR1cm4gIk5QTlZXaW5kb3dOUE9iamVjdCI7CisgICAgY2Fz
ZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiByZXR1cm4gIk5QTlZQbHVnaW5FbGVtZW50TlBP
YmplY3QiOworICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczogcmV0dXJuICJOUE5WU3Vw
cG9ydHNXaW5kb3dsZXNzIjsKKyAgICBjYXNlIE5QTlZwcml2YXRlTW9kZUJvb2w6IHJldHVybiAi
TlBOVnByaXZhdGVNb2RlQm9vbCI7CisKKyNpZmRlZiBYUF9NQUNPU1gKKyAgICBjYXNlIE5QTlZw
bHVnaW5EcmF3aW5nTW9kZWw6IHJldHVybiAiTlBOVnBsdWdpbkRyYXdpbmdNb2RlbCI7CisjaWZu
ZGVmIE5QX05PX1FVSUNLRFJBVworICAgIGNhc2UgTlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbDog
cmV0dXJuICJOUE5Wc3VwcG9ydHNRdWlja0RyYXdCb29sIjsKKyNlbmRpZgorICAgIGNhc2UgTlBO
VnN1cHBvcnRzQ29yZUdyYXBoaWNzQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb3JlR3JhcGhp
Y3NCb29sIjsKKyAgICBjYXNlIE5QTlZzdXBwb3J0c09wZW5HTEJvb2w6IHJldHVybiAiTlBOVnN1
cHBvcnRzT3BlbkdMQm9vbCI7CisgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9v
bDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbCI7CisjaWZuZGVmIE5QX05P
X0NBUkJPTgorICAgIGNhc2UgTlBOVnN1cHBvcnRzQ2FyYm9uQm9vbDogcmV0dXJuICJOUE5Wc3Vw
cG9ydHNDYXJib25Cb29sIjsKKyNlbmRpZgorICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29jb2FCb29s
OiByZXR1cm4gIk5QTlZzdXBwb3J0c0NvY29hQm9vbCI7CisjZW5kaWYKKworICAgIGRlZmF1bHQ6
IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7CisgICAgfQorfQorCitDU3RyaW5nIHByZXR0eU5h
bWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7Cisg
ICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBQVnBsdWdpbk5hbWVTdHJpbmc6IHJl
dHVybiAiTlBQVnBsdWdpbk5hbWVTdHJpbmciOworICAgIGNhc2UgTlBQVnBsdWdpbkRlc2NyaXB0
aW9uU3RyaW5nOiByZXR1cm4gIk5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZyI7CisgICAgY2Fz
ZSBOUFBWcGx1Z2luV2luZG93Qm9vbDogcmV0dXJuICJOUFBWcGx1Z2luV2luZG93Qm9vbCI7Cisg
ICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5UcmFu
c3BhcmVudEJvb2wiOworCisgICAgY2FzZSBOUFBWamF2YUNsYXNzOiByZXR1cm4gIk5QUFZqYXZh
Q2xhc3MgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dTaXplOiBy
ZXR1cm4gIk5QUFZwbHVnaW5XaW5kb3dTaXplIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBO
UFBWcGx1Z2luVGltZXJJbnRlcnZhbDogcmV0dXJuICJOUFBWcGx1Z2luVGltZXJJbnRlcnZhbCAo
bm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVJbnN0YW5jZTog
cmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlIChub3Qgc3VwcG9ydGVkKSI7Cisg
ICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZUlJRDogcmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0
YWJsZUlJRCAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVmphdmFzY3JpcHRQdXNoQ2Fs
bGVyQm9vbDogcmV0dXJuICJOUFBWamF2YXNjcmlwdFB1c2hDYWxsZXJCb29sIChub3Qgc3VwcG9y
dGVkKSI7CisgICAgY2FzZSBOUFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeTogcmV0dXJuICJO
UFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeSAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2Ug
TlBQVnBsdWdpbk5lZWRzWEVtYmVkOiByZXR1cm4gIk5QUFZwbHVnaW5OZWVkc1hFbWJlZCAobm90
IHN1cHBvcnRlZCkiOworCisgICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0OiBy
ZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QiOworCisgICAgY2FzZSBOUFBWZm9y
bVZhbHVlOiByZXR1cm4gIk5QUFZmb3JtVmFsdWUgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNl
IE5QUFZwbHVnaW5VcmxSZXF1ZXN0c0Rpc3BsYXllZEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblVy
bFJlcXVlc3RzRGlzcGxheWVkQm9vbCAobm90IHN1cHBvcnRlZCkiOworCisgICAgY2FzZSBOUFBW
cGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtczogcmV0dXJuICJOUFBWcGx1Z2luV2FudHNBbGxO
ZXR3b3JrU3RyZWFtcyI7CisgICAgY2FzZSBOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtOiByZXR1
cm4gIk5QUFZwbHVnaW5DYW5jZWxTcmNTdHJlYW0iOworCisjaWZkZWYgWFBfTUFDT1NYCisgICAg
Y2FzZSBOUFBWcGx1Z2luRHJhd2luZ01vZGVsOiB7CisgICAgICAgIFN0cmluZyByZXN1bHQoIk5Q
UFZwbHVnaW5EcmF3aW5nTW9kZWwsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKHByZXR0eU5h
bWVGb3JEcmF3aW5nTW9kZWwoTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVlKSkpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5sYXRpbjEoKTsKKyAgICB9CisgICAgY2FzZSBOUFBWcGx1Z2lu
RXZlbnRNb2RlbDogeworICAgICAgICBTdHJpbmcgcmVzdWx0KCJOUFBWcGx1Z2luRXZlbnRNb2Rl
bCwgIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocHJldHR5TmFtZUZvckV2ZW50TW9kZWwoTlBF
dmVudE1vZGVsKHVpbnRwdHJfdCh2YWx1ZSkpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQubGF0
aW4xKCk7CisgICAgfQorICAgIGNhc2UgTlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllcjogcmV0
dXJuICJOUFBWcGx1Z2luQ29yZUFuaW1hdGlvbkxheWVyIjsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyNlbmRpZgorCisgICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlh
YmxlIjsKKyAgICB9Cit9CisKK0NTdHJpbmcgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5Q
TlVSTFZhcmlhYmxlIHZhcmlhYmxlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBj
YXNlIE5QTlVSTFZDb29raWU6IHJldHVybiAiTlBOVVJMVkNvb2tpZSI7CisgICAgY2FzZSBOUE5V
UkxWUHJveHk6IHJldHVybiAiTlBOVVJMVlByb3h5IjsKKyAgICBkZWZhdWx0OiByZXR1cm4gIlVu
a25vd24gdmFyaWFibGUiOworICAgIH0KK30KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdp
bnMvUGx1Z2luRGVidWcuaCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGVidWcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42Njc0ODVlOTA5MjhhMDVmY2JkYTgyOTQwYTczOTY3MDk4NzFkYjYxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5o
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luRGVidWdfaAorI2RlZmluZSBQbHVnaW5EZWJ1
Z19oCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFs
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjZGVmaW5lIExPR19OUEVSUk9S
KGVycikgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lucywgIiVz
XG4iLCBwcmV0dHlOYW1lRm9yTlBFcnJvcihlcnIpKQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9F
UlJPUigpIExPR19WRVJCT1NFKFBsdWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVt
cyB3aXRoIG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxl
bXMuXG4iKQorCisjaWYgIUxPR19ESVNBQkxFRAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Nv
bnN0IGNoYXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOworCitDU3RyaW5n
IHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7CitDU3RyaW5n
IHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUpOworQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUg
dmFyaWFibGUpOworCisjaWZkZWYgWFBfTUFDT1NYCitjb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9y
RHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCk7Citjb25zdCBjaGFyKiBw
cmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCk7CisjZW5kaWYK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRAorCisj
ZW5kaWYgLy8gUGx1Z2luRGVidWdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUzYzMxNWMy
MDE4NDM5NGYzYjQwNjRhM2Y1NDQ3NTczZWQyY2YwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKQEAgLTAs
MCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUg
PHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU2V0IGEgdGltZXIg
dG8gbWFrZSBzdXJlIHdlIHByb2Nlc3MgYW55IHF1ZXVlZCBtZXNzYWdlcyBhdCBsZWFzdCBldmVy
eSAxNm1zLgorLy8gVGhpcyB2YWx1ZSBhbGxvd3MgRmxhc2ggNjAgbWVzc2FnZXMvc2Vjb25kLCB3
aGljaCBzaG91bGQgYmUgZW5vdWdoIGZvciB2aWRlbworLy8gcGxheWJhY2ssIGFuZCBhbHNvIGdl
dHMgdXMgb3ZlciB0aGUgbGltaXQgZm9yIGtpY2tpbmcgaW50byBoaWdoLXJlc29sdXRpb24KKy8v
IHRpbWVyIG1vZGUgKHNlZSBTaGFyZWRUaW1lcldpbi5jcHApLgorc3RhdGljIGNvbnN0IGRvdWJs
ZSBNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwgPSAwLjAxNjsKKworLy8gRHVyaW5nIGEgY29u
dGludW91cyBzdHJlYW0gb2YgbWVzc2FnZXMsIHByb2Nlc3Mgb25lIGV2ZXJ5IDVtcy4KK3N0YXRp
YyBjb25zdCBkb3VibGUgTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCA9IDAuMDA1Owor
CitQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBs
dWdpblZpZXcqIHBsdWdpblZpZXcpCisgICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAg
ICAsIG1fYmFjaygwKQorICAgICwgbV9mcm9udCgwKQorICAgICwgbV9tZXNzYWdlVGhyb3R0bGVU
aW1lcigqdGhpcywgJlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46Om1lc3NhZ2VUaHJvdHRsZVRp
bWVyRmlyZWQpCisgICAgLCBtX2xhc3RNZXNzYWdlVGltZSgwKQoreworICAgIC8vIEluaXRpYWxp
emUgdGhlIGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUgbWVzc2FnZXMKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgTnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgIG1faW5s
aW5lTWVzc2FnZXNbaV0ubmV4dCA9ICZtX2lubGluZU1lc3NhZ2VzW2kgKyAxXTsKKyAgICBtX2lu
bGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV0ubmV4dCA9IDA7CisgICAgbV9mcmVl
SW5saW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKK30KKworUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbjo6flBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oKQoreworICAgIFBsdWdp
bk1lc3NhZ2UqIG5leHQ7CisKKyAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zy
b250OyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gbWVzc2FnZS0+
bmV4dDsKKyAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgfQorfQorCit2b2lkIFBs
dWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UoSFdORCBoV25kLCBVSU5UIG1z
ZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBQbHVnaW5NZXNzYWdlKiBt
ZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICBtZXNzYWdlLT5oV25kID0gaFduZDsK
KyAgICBtZXNzYWdlLT5tc2cgPSBtc2c7CisgICAgbWVzc2FnZS0+d1BhcmFtID0gd1BhcmFtOwor
ICAgIG1lc3NhZ2UtPmxQYXJhbSA9IGxQYXJhbTsKKyAgICBtZXNzYWdlLT5uZXh0ID0gMDsKKwor
ICAgIGlmIChtX2JhY2spCisgICAgICAgIG1fYmFjay0+bmV4dCA9IG1lc3NhZ2U7CisgICAgbV9i
YWNrID0gbWVzc2FnZTsKKyAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgIG1fZnJvbnQgPSBtZXNz
YWdlOworCisgICAgLy8gSWYgaXQgaGFzIGJlZW4gbW9yZSB0aGFuIE1lc3NhZ2VEaXJlY3RQcm9j
ZXNzaW5nSW50ZXJ2YWwgYmV0d2VlbiB0aHJvdHRsZWQgbWVzc2FnZXMsCisgICAgLy8gZ28gYWhl
YWQgYW5kIHByb2Nlc3MgYSBtZXNzYWdlIGRpcmVjdGx5LgorICAgIGRvdWJsZSBjdXJyZW50VGlt
ZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIGlmIChjdXJyZW50VGltZSAt
IG1fbGFzdE1lc3NhZ2VUaW1lID4gTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCkgewor
ICAgICAgICBwcm9jZXNzUXVldWVkTWVzc2FnZSgpOworICAgICAgICBtX2xhc3RNZXNzYWdlVGlt
ZSA9IGN1cnJlbnRUaW1lOworICAgICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJv
dHRsZVRpbWVJbnRlcnZhbCk7Cit9CisKK3ZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
cHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKQoreworICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBt
X2Zyb250OworICAgIG1fZnJvbnQgPSBtX2Zyb250LT5uZXh0OworICAgIGlmIChtZXNzYWdlID09
IG1fYmFjaykKKyAgICAgICAgbV9iYWNrID0gMDsKKworICAgIC8vIFByb3RlY3QgdGhlIFBsdWdp
blZpZXcgZnJvbSBkZXN0cnVjdGlvbiB3aGlsZSBjYWxsaW5nIGl0cyB3aW5kb3cgcHJvYy4KKyAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vNjkzMDI4MD4KKyAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJv
dGVjdChtX3BsdWdpblZpZXcpOworICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5w
bHVnaW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1Bh
cmFtLCBtZXNzYWdlLT5sUGFyYW0pOworCisgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7Cit9CisK
K3ZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJl
ZCgpCit7CisgICAgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKKworICAgIGlmIChtX2Zyb250KQor
ICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0
bGVUaW1lSW50ZXJ2YWwpOworfQorCitQbHVnaW5NZXNzYWdlKiBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UoKQoreworICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7
CisKKyAgICBpZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKKyAgICAgICAgbWVzc2FnZSA9IG1f
ZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3Nh
Z2UtPm5leHQ7CisgICAgfSBlbHNlCisgICAgICAgIG1lc3NhZ2UgPSBuZXcgUGx1Z2luTWVzc2Fn
ZTsKKworICAgIHJldHVybiBtZXNzYWdlOworfQorCitib29sIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW46OmlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQoreworICAgIHJl
dHVybiBtZXNzYWdlID49ICZtX2lubGluZU1lc3NhZ2VzWzBdICYmIG1lc3NhZ2UgPD0gJm1faW5s
aW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXTsKK30KKwordm9pZCBQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjpmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQorewor
ICAgIGlmIChpc0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKKyAgICAgICAgbWVzc2FnZS0+bmV4
dCA9IG1fZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9
IG1lc3NhZ2U7CisgICAgfSBlbHNlCisgICAgICAgIGRlbGV0ZSBtZXNzYWdlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5z
L1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjNTEwMzA4MzZkM2EzZTky
NzdhNjBkNTdhZDYzN2M1YWZmMWRhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9QbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKKyNkZWZpbmUgUGx1Z2lu
TWVzc2FnZVRocm90dGxlcldpbl9oCisKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8
d2luZG93cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgUGx1Z2luVmlldzsK
KworICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsKKyAgICAgICAgSFdORCBoV25kOworICAgICAg
ICBVSU5UIG1zZzsKKyAgICAgICAgV1BBUkFNIHdQYXJhbTsKKyAgICAgICAgTFBBUkFNIGxQYXJh
bTsKKworICAgICAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICB9OworCisgICAg
Y2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbiB7CisgICAgcHVibGljOgorICAgICAgICBQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZpZXcqKTsKKyAgICAgICAgflBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW4oKTsKKworICAgICAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoSFdORCwg
VUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQg
cHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKKyAgICAgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1l
ckZpcmVkKCk7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2FnZSgpOworICAg
ICAgICBib29sIGlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKKyAgICAg
ICAgdm9pZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKKworICAgICAgICBQ
bHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsK
KyAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcm9udDsKKworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IE51bUlubGluZU1lc3NhZ2VzID0gNDsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSBtX2lubGlu
ZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzXTsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9m
cmVlSW5saW5lTWVzc2FnZXM7CisKKyAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhyb3R0bGVUaW1l
cjsKKyAgICAgICAgZG91YmxlIG1fbGFzdE1lc3NhZ2VUaW1lOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2UwOTk4ODA0OTcxY2FlNWFiYTYzY2Q2Y2RjMTM0NWZlN2MyNDBlNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKQEAgLTAsMCAr
MSw0NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNs
dWRlICJjX3V0aWxpdHkuaCIKKyNpbmNsdWRlICJJZGVudGlmaWVyUmVwLmgiCisjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5QX2pzb2JqZWN0LmgiCisjaW5jbHVkZSAi
UGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvQ29tcGxldGlvbi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTR2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpblBhY2thZ2U6On5QbHVnaW5QYWNrYWdlKCkKK3sK
KyAgICAvLyBUaGlzIGRlc3RydWN0b3IgZ2V0cyBjYWxsZWQgZHVyaW5nIHJlZnJlc2goKSBpZiBQ
bHVnaW5EYXRhYmFzZSdzCisgICAgLy8gUGx1Z2luU2V0IGhhc2ggaXMgYWxyZWFkeSBwb3B1bGF0
ZWQsIGFzIGl0IHJlbW92ZXMgaXRlbXMgZnJvbQorICAgIC8vIHRoZSBoYXNoIHRhYmxlLiBDYWxs
aW5nIHRoZSBkZXN0cnVjdG9yIG9uIGEgbG9hZGVkIHBsdWctaW4gb2YKKyAgICAvLyBjb3Vyc2Ug
d291bGQgY2F1c2UgYSBjcmFzaCwgc28gd2UgY2hlY2sgdG8gY2FsbCB1bmxvYWQgYmVmb3JlIHdl
CisgICAgLy8gQVNTRVJULgorICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRl
ciB3YXkgdG8gZml4IHRoaXMuCisgICAgaWYgKCFtX2xvYWRDb3VudCkKKyAgICAgICAgdW5sb2Fk
V2l0aG91dFNodXRkb3duKCk7CisgICAgZWxzZQorICAgICAgICB1bmxvYWQoKTsKKworICAgIEFT
U0VSVCghbV9pc0xvYWRlZCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlT
b29uKCkKK3sKKyAgICBBU1NFUlQoIW1fZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKTsKKyAg
ICBBU1NFUlQobV9tb2R1bGUpOworICAgIEFTU0VSVCghbV9sb2FkQ291bnQpOworCisgICAgbV9m
cmVlTGlicmFyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdl
OjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoKQoreworICAgIEFTU0VSVChtX21vZHVsZSk7CisgICAg
Ly8gRG8gbm90aGluZyBpZiB0aGUgbW9kdWxlIGdvdCBsb2FkZWQgYWdhaW4gbWVhbndoaWxlCisg
ICAgaWYgKCFtX2xvYWRDb3VudCkgeworICAgICAgICB1bmxvYWRNb2R1bGUobV9tb2R1bGUpOwor
ICAgICAgICBtX21vZHVsZSA9IDA7CisgICAgfQorfQorCisKK2ludCBQbHVnaW5QYWNrYWdlOjpj
b21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmIGNvbXBhcmVUbykgY29uc3QKK3sKKyAgICAvLyBT
b3J0IHBsdWctaW5zIHRoYXQgYWxsb3cgbXVsdGlwbGUgaW5zdGFuY2VzIGZpcnN0LgorICAgIGJv
b2wgQWFsbG93c011bHRpcGxlSW5zdGFuY2VzID0gIXF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1
aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIGJvb2wgQmFsbG93c011bHRpcGxl
SW5zdGFuY2VzID0gIWNvbXBhcmVUby5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRB
bGxvd011bHRpcGxlSW5zdGFuY2VzKTsKKyAgICBpZiAoQWFsbG93c011bHRpcGxlSW5zdGFuY2Vz
ICE9IEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcykKKyAgICAgICAgcmV0dXJuIEFhbGxvd3NNdWx0
aXBsZUluc3RhbmNlcyA/IC0xIDogMTsKKworICAgIC8vIFNvcnQgcGx1Zy1pbnMgaW4gYSBwcmVm
ZXJyZWQgcGF0aCBmaXJzdC4KKyAgICBib29sIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ID0gUGx1
Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KHBhcmVudERpcmVjdG9yeSgp
KTsKKyAgICBib29sIEJpc0luUHJlZmVycmVkRGlyZWN0b3J5ID0gUGx1Z2luRGF0YWJhc2U6Omlz
UHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKSk7Cisg
ICAgaWYgKEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ICE9IEJpc0luUHJlZmVycmVkRGlyZWN0b3J5
KQorICAgICAgICByZXR1cm4gQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPyAtMSA6IDE7CisKKyAg
ICBpbnQgZGlmZiA9IHN0cmNtcChuYW1lKCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLm5hbWUo
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoZGlmZikKKyAgICAgICAgcmV0dXJuIGRpZmY7CisK
KyAgICBkaWZmID0gY29tcGFyZUZpbGVWZXJzaW9uKGNvbXBhcmVUby52ZXJzaW9uKCkpOworICAg
IGlmIChkaWZmKQorICAgICAgICByZXR1cm4gZGlmZjsKKworICAgIHJldHVybiBzdHJjbXAocGFy
ZW50RGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgp
LnV0ZjgoKS5kYXRhKCkpOworfQorCitQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCisgICAgOiBtX2lzRW5h
YmxlZCh0cnVlKQorICAgICwgbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1fbG9hZENvdW50KDAp
CisgICAgLCBtX3BhdGgocGF0aCkKKyAgICAsIG1fbW9kdWxlVmVyc2lvbigwKQorICAgICwgbV9t
b2R1bGUoMCkKKyAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKKyAgICAsIG1fZnJl
ZUxpYnJhcnlUaW1lcigqdGhpcywgJlBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5VGltZXJGaXJl
ZCkKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICwgbV9p
bmZvSXNGcm9tQ2FjaGUodHJ1ZSkKKyNlbmRpZgoreworICAgIG1fZmlsZU5hbWUgPSBwYXRoR2V0
RmlsZU5hbWUobV9wYXRoKTsKKyAgICBtX3BhcmVudERpcmVjdG9yeSA9IG1fcGF0aC5sZWZ0KG1f
cGF0aC5sZW5ndGgoKSAtIG1fZmlsZU5hbWUubGVuZ3RoKCkgLSAxKTsKK30KKwordm9pZCBQbHVn
aW5QYWNrYWdlOjp1bmxvYWQoKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAgICByZXR1cm47CisKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBtX05QUF9TaHV0ZG93bigpOworI2Vu
ZGlmCisKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKK30KKwordm9pZCBQbHVnaW5QYWNr
YWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24oKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFtX2xvYWRDb3VudCk7CisgICAgQVNTRVJUKG1f
bW9kdWxlKTsKKworICAgIC8vIDxyZGFyOi8vNTUzMDUxOT46IENyYXNoIHdoZW4gY2xvc2luZyB0
YWIgd2l0aCBwZGYgZmlsZSAoUmVhZGVyIDcgb25seSkKKyAgICAvLyBJZiB0aGUgcGx1Z2luIGhh
cyBzdWJjbGFzc2VkIGl0cyBwYXJlbnQgd2luZG93LCBhcyB3aXRoIFJlYWRlciA3LCB3ZSBtYXkg
aGF2ZQorICAgIC8vIGdvdHRlbiBoZXJlIGJ5IHdheSBvZiB0aGUgcGx1Z2luJ3MgaW50ZXJuYWwg
d2luZG93IHByb2MgZm9yd2FyZGluZyBhIG1lc3NhZ2UgdG8gb3VyCisgICAgLy8gb3JpZ2luYWwg
d2luZG93IHByb2MuIElmIHdlIGZyZWUgdGhlIHBsdWdpbiBsaWJyYXJ5IGZyb20gaGVyZSwgd2Ug
d2lsbCBqdW1wIGJhY2sKKyAgICAvLyB0byBjb2RlIHdlIGp1c3QgZnJlZWQgd2hlbiB3ZSByZXR1
cm4sIHNvIGRlbGF5IGNhbGxpbmcgRnJlZUxpYnJhcnkgYXQgbGVhc3QgdW50aWwKKyAgICAvLyB0
aGUgbmV4dCBtZXNzYWdlIGxvb3AKKyAgICBmcmVlTGlicmFyeVNvb24oKTsKKworICAgIG1faXNM
b2FkZWQgPSBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjpzZXRFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKK3sKKyAgICBtX2lzRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKK1Bhc3NSZWZQdHI8
UGx1Z2luUGFja2FnZT4gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQoreworICAgIFJlZlB0cjxQbHVnaW5Q
YWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYobmV3IFBsdWdpblBhY2thZ2UocGF0aCwgbGFzdE1v
ZGlmaWVkKSk7CisKKyAgICBpZiAoIXBhY2thZ2UtPmZldGNoSW5mbygpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBwYWNrYWdlLnJlbGVhc2UoKTsKK30KKworI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCitQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+
IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbikKK3sKKyAg
ICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IGFkb3B0UmVmKG5ldyBQbHVnaW5QYWNr
YWdlKHBhdGgsIGxhc3RNb2RpZmllZCkpOworICAgIHBhY2thZ2UtPm1fbmFtZSA9IG5hbWU7Cisg
ICAgcGFja2FnZS0+bV9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIHBhY2thZ2UtPmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKKyAgICBwYWNrYWdlLT5zZXRN
SU1FRGVzY3JpcHRpb24obWltZURlc2NyaXB0aW9uKTsKKyAgICBwYWNrYWdlLT5tX2luZm9Jc0Zy
b21DYWNoZSA9IHRydWU7CisgICAgcmV0dXJuIHBhY2thZ2UucmVsZWFzZSgpOworfQorI2VuZGlm
CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCit2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZVF1
aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBh
IHNpbmdsZSBwcm9jZXNzIGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fubm90
IHJlbGlhYmx5IHVubG9hZCBhCisgICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxvYWQg
dGhlIEphdmEgcGx1Z2luLCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBWTQor
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKKworICAg
ICAgICAvLyBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVz
ZXMgYmFkIHNjcm9sbGluZyByZXBhaW50IHByb2JsZW1zCisgICAgICAgIC8vIHdpdGggdGhlIEph
dmEgcGx1Zy1pbi4KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBUb1pl
cm9SZWN0V2hlblNjcm9sbGluZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICBz
dGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGZsYXNoVGVuVmVyc2lvbigweDBhMDAw
MDAwKTsKKworICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKGZsYXNoVGVuVmVyc2lvbikg
Pj0gMCkgeworICAgICAgICAgICAgLy8gRmxhc2ggMTAuMCBiMjE4IGRvZXNuJ3QgbGlrZSBoYXZp
bmcgYSBOVUxMIHdpbmRvdyBoYW5kbGUKKyAgICAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya0RvbnRTZXROdWxsV2luZG93SGFuZGxlT25EZXN0cm95KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIEZsYXNoIDkgYW5kIG9sZGVyIHJlcXVlc3RzIHdpbmRvd2xlc3MgcGx1
Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAgICAgICAgICAgIG1fcXVp
cmtzLmFkZChQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCk7CisgICAgICAgIH0KKwor
I2lmIENQVShYODZfNjQpCisgICAgICAgIC8vIDY0LWJpdCBGbGFzaCBmcmVlemVzIGlmIHJpZ2h0
LWNsaWNrIGlzIHNlbnQgaW4gd2luZG93bGVzcyBtb2RlCisgICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya0lnbm9yZVJpZ2h0Q2xpY2tJbldpbmRvd2xlc3NNb2RlKTsKKyNlbmRpZgorCisg
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNjcmVlbkRlcHRo
KTsKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlKTsK
KyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVz
c2FnZXMpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1
Zyk7CisgICAgfQorfQorI2VuZGlmCisKKyNpZiAhT1MoV0lORE9XUykKK3ZvaWQgUGx1Z2luUGFj
a2FnZTo6ZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpCit7CisgICAgLy8g
SXQncyBhIGJpdCBsYW1lIHRvIGRldGVjdCB0aGUgcGx1Z2luIHZlcnNpb24gYnkgcGFyc2luZyBp
dAorICAgIC8vIGZyb20gdGhlIHBsdWdpbiBkZXNjcmlwdGlvbiBzdHJpbmcsIGJ1dCBpdCBkb2Vz
bid0IHNlZW0gdGhhdAorICAgIC8vIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGlu
IGFueSBzdGFuZGFyZGl6ZWQgd2F5IGF0CisgICAgLy8gdGhlIG1vZHVsZSBsZXZlbCwgbGlrZSBp
biBXaW5kb3dzCisKKyAgICBpZiAobV9kZXNjcmlwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2Rlc2NyaXB0aW9uLnN0YXJ0c1dpdGgoIlNob2Nrd2F2ZSBGbGFz
aCIpICYmIG1fZGVzY3JpcHRpb24ubGVuZ3RoKCkgPj0gMTkpIHsKKyAgICAgICAgLy8gVGhlIGZs
YXNoIHZlcnNpb24gYXMgYSBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gZGlmZmVycyBvbiBVbml4IGZy
b20gV2luZG93cworICAgICAgICAvLyBzaW5jZSB0aGUgcmV2aXNpb24gY2FuIGJlIGxhcmdlciB0
aGFuIGEgOCBiaXRzLCBzbyB3ZSBhbGxvdyBpdCAxNiBoZXJlIGFuZAorICAgICAgICAvLyBwdXNo
IHRoZSBtYWpvci9taW5vciB1cCA4IGJpdHMuIFRodXMgb24gVW5peCwgRmxhc2gncyB2ZXJzaW9u
IG1heSBiZQorICAgICAgICAvLyAweDBhMDAwMDAwIGluc3RlYWQgb2YgMHgwMDBhMDAwMC4KKwor
ICAgICAgICBWZWN0b3I8U3RyaW5nPiB2ZXJzaW9uUGFydHM7CisgICAgICAgIG1fZGVzY3JpcHRp
b24uc3Vic3RyaW5nKDE2KS5zcGxpdCgnICcsIC8qYWxsb3dFbXB0eUVudHJpZXMgPSovIGZhbHNl
LCB2ZXJzaW9uUGFydHMpOworICAgICAgICBpZiAodmVyc2lvblBhcnRzLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodmVyc2lvblBhcnRzLnNpemUoKSA+PSAx
KSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBtYWpvck1pbm9yUGFydHM7CisgICAgICAg
ICAgICB2ZXJzaW9uUGFydHNbMF0uc3BsaXQoJy4nLCBtYWpvck1pbm9yUGFydHMpOworICAgICAg
ICAgICAgaWYgKG1ham9yTWlub3JQYXJ0cy5zaXplKCkgPj0gMSkgeworICAgICAgICAgICAgICAg
IGJvb2wgY29udmVydGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWFqb3Ig
PSBtYWpvck1pbm9yUGFydHNbMF0udG9VSW50KCZjb252ZXJ0ZWQpOworICAgICAgICAgICAgICAg
IGlmIChjb252ZXJ0ZWQpCisgICAgICAgICAgICAgICAgICAgIG1fbW9kdWxlVmVyc2lvbiA9ICht
YWpvciAmIDB4ZmYpIDw8IDI0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1ham9y
TWlub3JQYXJ0cy5zaXplKCkgPT0gMikgeworICAgICAgICAgICAgICAgIGJvb2wgY29udmVydGVk
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWlub3IgPSBtYWpvck1pbm9yUGFy
dHNbMV0udG9VSW50KCZjb252ZXJ0ZWQpOworICAgICAgICAgICAgICAgIGlmIChjb252ZXJ0ZWQp
CisgICAgICAgICAgICAgICAgICAgIG1fbW9kdWxlVmVyc2lvbiB8PSAobWlub3IgJiAweGZmKSA8
PCAxNjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJzaW9uUGFy
dHMuc2l6ZSgpID49IDIpIHsKKyAgICAgICAgICAgIFN0cmluZyByZXZpc2lvbiA9IHZlcnNpb25Q
YXJ0c1sxXTsKKyAgICAgICAgICAgIGlmIChyZXZpc2lvbi5sZW5ndGgoKSA+IDEgJiYgKHJldmlz
aW9uWzBdID09ICdyJyB8fCByZXZpc2lvblswXSA9PSAnYicpKSB7CisgICAgICAgICAgICAgICAg
cmV2aXNpb24ucmVtb3ZlKDAsIDEpOworICAgICAgICAgICAgICAgIG1fbW9kdWxlVmVyc2lvbiB8
PSByZXZpc2lvbi50b0ludCgpICYgMHhmZmZmOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3N0YXRp
YyB2b2lkIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IE5QVmFyaWFudCogYXJncywgdW5zaWduZWQgYXJnQ291bnQsIEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3QqIHJvb3RPYmplY3QsIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXImIGFMaXN0KQorewor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQorICAgICAgICBhTGlz
dC5hcHBlbmQoSlNDOjpCaW5kaW5nczo6Y29udmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgJmFy
Z3NbaV0sIHJvb3RPYmplY3QpKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OlNvdXJjZUNvZGUg
bWFrZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB1cmwgPSBTdHJp
bmcoKSwgY29uc3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjpt
aW5pbXVtUG9zaXRpb24oKSkKK3sKKyAgICByZXR1cm4gSlNDOjpTb3VyY2VDb2RlKEpTQzo6U3Ry
aW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShzb3VyY2UsIHVybCwgc3RhcnRQb3NpdGlvbiksIHN0
YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCksIHN0YXJ0UG9zaXRpb24ubV9jb2x1bW4u
b25lQmFzZWRJbnQoKSk7Cit9CisKK3N0YXRpYyBib29sIE5QTl9FdmFsdWF0ZShOUFAgaW5zdGFu
Y2UsIE5QT2JqZWN0KiBvLCBOUFN0cmluZyogcywgTlBWYXJpYW50KiB2YXJpYW50KQoreworICAg
IGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgeworICAgICAgICBKYXZhU2Ny
aXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsK
KworICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5y
b290T2JqZWN0OworICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBUaGVyZSBpcyBh
IGNyYXNoIGluIEZsYXNoIHdoZW4gZXZhbHVhdGluZyBhIHNjcmlwdCB0aGF0IGRlc3Ryb3lzIHRo
ZQorICAgICAgICAvLyBQbHVnaW5WaWV3LCBzbyB3ZSBkZXN0cm95IGl0IGFzeW5jaHJvbm91c2x5
LgorICAgICAgICBQbHVnaW5WaWV3OjprZWVwQWxpdmUoaW5zdGFuY2UpOworCisgICAgICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgU3Ry
aW5nIHNjcmlwdFN0cmluZyA9IEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFN0cmluZ1RvVVRGMTYo
cyk7CisKKyAgICAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNjcmlw
dFN0cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKKworICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252
ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXR1cm5WYWx1ZSwgdmFyaWFudCk7CisgICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIFZPSURfVE9fTlBWQVJJQU5UKCp2YXJpYW50KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3N0YXRpYyBib29sIE5QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG8sIE5QSWRlbnRpZmll
ciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBO
UFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0
Q2xhc3MpIHsKKyAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2Fz
dDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7CisKKyAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0
YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihtZXRob2ROYW1lKTsKKyAgICAgICAgaWYgKCFpLT5p
c1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFNwZWNp
YWwgY2FzZSB0aGUgImV2YWwiIG1ldGhvZC4KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT0gX05Q
Tl9HZXRTdHJpbmdJZGVudGlmaWVyKCJldmFsIikpIHsKKyAgICAgICAgICAgIGlmIChhcmdDb3Vu
dCAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChh
cmdzWzBdLnR5cGUgIT0gTlBWYXJpYW50VHlwZV9TdHJpbmcpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZShucHAs
IG8sIGNvbnN0X2Nhc3Q8TlBTdHJpbmcqPigmYXJnc1swXS52YWx1ZS5zdHJpbmdWYWx1ZSksIHJl
c3VsdCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBMb29rIHVwIHRoZSBmdW5jdGlvbiBvYmpl
Y3QuCisgICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmot
PnJvb3RPYmplY3Q7CisgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNW
YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAg
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSBm
dW5jdGlvbiA9IG9iai0+aW1wLT5nZXQoZXhlYywgSlNDOjpCaW5kaW5nczo6aWRlbnRpZmllckZy
b21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKKyAgICAgICAgSlNDOjpDYWxsRGF0
YSBjYWxsRGF0YTsKKyAgICAgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxU
eXBlTm9uZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBDYWxsIHRo
ZSBmdW5jdGlvbiBvYmplY3QuCisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
TGlzdDsKKyAgICAgICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdzLCBhcmdDb3Vu
dCwgcm9vdE9iamVjdCwgYXJnTGlzdCk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHRWID0g
SlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iai0+aW1wLCBh
cmdMaXN0KTsKKworICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0
aGUgZnVuY3Rpb24gY2FsbC4KKyAgICAgICAgSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9O
UFZhcmlhbnQoZXhlYywgcmVzdWx0ViwgcmVzdWx0KTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG8tPl9jbGFz
cy0+aW52b2tlKQorICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5pbnZva2UobywgbWV0aG9kTmFt
ZSwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisKKyAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVz
dWx0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjppbml0aWFs
aXplQnJvd3NlckZ1bmNzKCkKK3sKKyAgICBtZW1zZXQoJm1fYnJvd3NlckZ1bmNzLCAwLCBzaXpl
b2YobV9icm93c2VyRnVuY3MpKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6ZW9mKG1f
YnJvd3NlckZ1bmNzKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBWZXJzaW9uKCk7
CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3Nl
ckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0
cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBO
UE5fTmV3U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAg
IG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVh
Z2VudCA9IE5QTl9Vc2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5f
TWVtQWxsb2M7CisgICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAg
IG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1
bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBv
c3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2
YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9T
ZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlk
YXRlUmVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFs
aWRhdGVSZWdpb247CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VS
ZWRyYXc7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52Owor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1f
YnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJs
ZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5f
UG9wUG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBsdWdpbnRocmVhZGFz
eW5jY2FsbCA9IE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGw7CisKKyAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1f
YnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0
cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBf
TlBOX0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3Ry
aW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZy
b21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVu
Y3MuaW50ZnJvbWlkZW50aWZpZXIgPSBfTlBOX0ludEZyb21JZGVudGlmaWVyOworICAgIG1fYnJv
d3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0OworICAgIG1fYnJvd3Nl
ckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OworICAgIG1fYnJvd3NlckZ1
bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7CisgICAgbV9icm93c2VyRnVu
Y3MuaW52b2tlID0gV2ViQ29yZTo6TlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZv
a2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1
YXRlID0gV2ViQ29yZTo6TlBOX0V2YWx1YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3Bl
cnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9
IF9OUE5fU2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBf
TlBOX1JlbW92ZVByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05Q
Tl9IYXNQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc01l
dGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlv
bjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5jb25zdHJ1Y3QgPSBfTlBOX0NvbnN0cnVjdDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5nZXR2YWx1ZWZvcnVybCA9IE5QTl9HZXRWYWx1ZUZvclVSTDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5zZXR2YWx1ZWZvcnVybCA9IE5QTl9TZXRWYWx1ZUZvclVSTDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5nZXRhdXRoZW50aWNhdGlvbmluZm8gPSBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvOwor
CisgICAgbV9icm93c2VyRnVuY3MucG9wdXBjb250ZXh0bWVudSA9IE5QTl9Qb3BVcENvbnRleHRN
ZW51OworfQorI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorCisjaWYgRU5B
QkxFKFBMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIKQordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6
aGFzaCgpIGNvbnN0Cit7CisgICAgc3RydWN0IEhhc2hDb2RlcyB7CisgICAgICAgIHVuc2lnbmVk
IGhhc2g7CisgICAgICAgIHRpbWVfdCBtb2RpZmllZERhdGU7CisgICAgfSBoYXNoQ29kZXM7CisK
KyAgICBoYXNoQ29kZXMuaGFzaCA9IG1fcGF0aC5pbXBsKCktPmhhc2goKTsKKyAgICBoYXNoQ29k
ZXMubW9kaWZpZWREYXRlID0gbV9sYXN0TW9kaWZpZWQ7CisKKyAgICByZXR1cm4gU3RyaW5nSGFz
aGVyOjpoYXNoTWVtb3J5PHNpemVvZihoYXNoQ29kZXMpPigmaGFzaENvZGVzKTsKK30KKworYm9v
bCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVn
aW5QYWNrYWdlJiBiKQoreworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2Ny
aXB0aW9uOworfQorI2VuZGlmCisKK2ludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNp
b24oY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJiBjb21wYXJlVmVyc2lvbikgY29uc3QKK3sK
KyAgICAvLyByZXR1cm4gLTEsIDAsIG9yIDEgaWYgcGx1Zy1pbiB2ZXJzaW9uIGlzIGxlc3MgdGhh
biwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbgorICAgIC8vIHRoZSBwYXNzZWQgdmVyc2lvbgor
CisjaWYgT1MoV0lORE9XUykKKyAgICBpZiAobV9tb2R1bGVWZXJzaW9uLm1vc3RTaWcgIT0gY29t
cGFyZVZlcnNpb24ubW9zdFNpZykKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbi5tb3N0
U2lnID4gY29tcGFyZVZlcnNpb24ubW9zdFNpZyA/IDEgOiAtMTsKKyAgICBpZiAobV9tb2R1bGVW
ZXJzaW9uLmxlYXN0U2lnICE9IGNvbXBhcmVWZXJzaW9uLmxlYXN0U2lnKQorICAgICAgICByZXR1
cm4gbV9tb2R1bGVWZXJzaW9uLmxlYXN0U2lnID4gY29tcGFyZVZlcnNpb24ubGVhc3RTaWcgPyAx
IDogLTE7CisjZWxzZSAgICAKKyAgICBpZiAobV9tb2R1bGVWZXJzaW9uICE9IGNvbXBhcmVWZXJz
aW9uKQorICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uID4gY29tcGFyZVZlcnNpb24gPyAx
IDogLTE7CisjZW5kaWYKKworICAgIHJldHVybiAwOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2lu
TG9hZGVkKCkKK3sKKyAgICBpZiAoIW1faW5mb0lzRnJvbUNhY2hlKQorICAgICAgICByZXR1cm4g
bV9pc0xvYWRlZDsKKworICAgIG1fcXVpcmtzID0gUGx1Z2luUXVpcmtTZXQoKTsKKyAgICBtX25h
bWUgPSBTdHJpbmcoKTsKKyAgICBtX2Rlc2NyaXB0aW9uID0gU3RyaW5nKCk7CisgICAgbV9mdWxs
TUlNRURlc2NyaXB0aW9uID0gU3RyaW5nKCk7CisgICAgbV9tb2R1bGVWZXJzaW9uID0gMDsKKwor
ICAgIHJldHVybiBmZXRjaEluZm8oKTsKK30KKyNlbmRpZgorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuaCBiL1NvdXJjZS9XZWJLaXQvd2lu
L1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4MzQwNTc2Nzk3YWE2YmM4MzE3
NzJiYzNiNGY5Y2NmOGNjOGJhNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuaApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbHVn
aW5QYWNrYWdlX2gKKyNkZWZpbmUgUGx1Z2luUGFja2FnZV9oCisKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisjaW5jbHVkZSAiUGx1Z2luUXVpcmtTZXQuaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRl
cm5hbC5oIgorI2VuZGlmCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01h
cDsKKworICAgIGNsYXNzIFBsdWdpblBhY2thZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5Q
YWNrYWdlPiB7CisgICAgcHVibGljOgorICAgICAgICB+UGx1Z2luUGFja2FnZSgpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBs
dWdpblBhY2thZ2U+IGNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbik7CisjZW5kaWYK
KworICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
KyAgICAgICAgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
Y3JpcHRpb247IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9wYXRoOyB9CisgICAgICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVOYW1lOyB9CisgICAgICAgIGNvbnN0IFN0cmluZyYgcGFyZW50RGlyZWN0b3J5KCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJlbnREaXJlY3Rvcnk7IH0KKyAgICAgICAgUGxhdGZvcm1Nb2R1
bGUgbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGU7IH0KKyAgICAgICAgdWludDE2X3Qg
TlBWZXJzaW9uKCkgY29uc3Q7CisgICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RNb2RpZmllZDsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0
aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNj
cmlwdGlvbnM7IH0KKyAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0
ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
UGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYik7CisKKyAgICAgICAgYm9v
bCBsb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkV2l0
aG91dFNodXRkb3duKCk7CisKKyAgICAgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX2lzRW5hYmxlZDsgfQorICAgICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisKKyNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyog
cGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorI2VuZGlmCisg
ICAgICAgIGludCBjb21wYXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9u
JikgY29uc3Q7CisgICAgICAgIGludCBjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmKSBjb25z
dDsKKyAgICAgICAgUGx1Z2luUXVpcmtTZXQgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV9xdWly
a3M7IH0KKyAgICAgICAgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJiB2ZXJzaW9uKCkgY29u
c3QgeyByZXR1cm4gbV9tb2R1bGVWZXJzaW9uOyB9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICAgICBib29sIGVuc3VyZVBsdWdpbkxvYWRlZCgpOwor
ICAgICAgICB2b2lkIHNldE1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlw
dGlvbik7CisgICAgICAgIFN0cmluZyBmdWxsTUlNRURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9mdWxsTUlNRURlc2NyaXB0aW9uO30KKyNlbmRpZgorICAgIHByaXZhdGU6CisgICAgICAg
IFBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2Rp
ZmllZCk7CisKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKKyAgICAgICAgYm9vbCBpc1BsdWdp
bkJsYWNrbGlzdGVkKCk7CisgICAgICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOworCisgICAgICAgIHZvaWQgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21E
ZXNjcmlwdGlvbigpOworICAgICAgICB2b2lkIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKKwor
ICAgICAgICBib29sIG1faXNFbmFibGVkOworICAgICAgICBib29sIG1faXNMb2FkZWQ7CisgICAg
ICAgIGludCBtX2xvYWRDb3VudDsKKworICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKKyAg
ICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisgICAgICAg
IFN0cmluZyBtX25hbWU7CisgICAgICAgIFN0cmluZyBtX3BhcmVudERpcmVjdG9yeTsKKworICAg
ICAgICBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gbV9tb2R1bGVWZXJzaW9uOworCisgICAgICAgIE1J
TUVUb0Rlc2NyaXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlNRVRv
RXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4dGVuc2lvbnM7CisKKyAgICAgICAgUGxhdGZvcm1Nb2R1
bGUgbV9tb2R1bGU7CisgICAgICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZDsKKworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQ
X1NodXRkb3duOworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAgICAg
IE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKyNlbmRpZgorCisgICAgICAgIHZvaWQg
ZnJlZUxpYnJhcnlTb29uKCk7CisgICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKCk7
CisgICAgICAgIFRpbWVyIG1fZnJlZUxpYnJhcnlUaW1lcjsKKworICAgICAgICBQbHVnaW5RdWly
a1NldCBtX3F1aXJrczsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hF
KQorICAgICAgICBTdHJpbmcgbV9mdWxsTUlNRURlc2NyaXB0aW9uOworICAgICAgICBib29sIG1f
aW5mb0lzRnJvbUNhY2hlOworI2VuZGlmCisgICAgfTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGEgd29ya2Fyb3VuZCBiZWNhdXNlIFBsdWdpblBhY2thZ2VIYXNoIGlzIGJyb2tlbiBhbmQgbWF5
IGNvbnNpZGVyIGtleXMgd2l0aCBkaWZmZXJlbnQgaGFzaGVzIGFzIGVxdWFsLgorICAgIHN0cnVj
dCBQbHVnaW5QYWNrYWdlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8UmVmUHRyPFBsdWdpblBhY2th
Z2U+ID4geworICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSA2NDsK
KyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VIYXNoIHsKKyAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgdWludHB0cl90IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxQbHVnaW5QYWNrYWdlKj4oa2V5KS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYga2V5KSB7IHJldHVybiBrZXkt
Pmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHVpbnRwdHJfdCBh
LCBjb25zdCB1aW50cHRyX3QgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVn
aW5QYWNrYWdlKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGIpKTsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGEs
IGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZTo6
ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5QYWNrYWdlV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODUyNTdkNjIyOTI3MjA5MThhNTFhMzZk
ODI3ZDhjY2QyZDQxOWMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNwcApAQCAtMCwwICsxLDMzNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1
ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJucHJ1bnRp
bWVfaW1wbC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8c2hsd2FwaS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcgZ2V0VmVyc2lvbkluZm8o
Y29uc3QgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5nJiBpbmZvKQoreworICAg
IExQVk9JRCBidWZmZXI7CisgICAgVUlOVCBidWZmZXJMZW5ndGg7CisgICAgU3RyaW5nIHN1Yklu
Zm8gPSAiXFxTdHJpbmdmaWxlSW5mb1xcMDQwOTA0RTRcXCIgKyBpbmZvOworICAgIGJvb2wgcmV0
dmFsID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbkluZm9EYXRhLAorICAgICAgICBjb25zdF9jYXN0
PFVDaGFyKj4oc3ViSW5mby5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSks
CisgICAgICAgICZidWZmZXIsICZidWZmZXJMZW5ndGgpOworICAgIGlmICghcmV0dmFsIHx8IGJ1
ZmZlckxlbmd0aCA9PSAwKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBTdWJ0
cmFjdCAxIGZyb20gdGhlIGxlbmd0aDsgd2UgZG9uJ3Qgd2FudCB0aGUgdHJhaWxpbmcgbnVsbCBj
aGFyYWN0ZXIuCisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4oYnVm
ZmVyKSwgYnVmZmVyTGVuZ3RoIC0gMSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6aXNQbHVn
aW5CbGFja2xpc3RlZCgpCit7CisgICAgaWYgKG5hbWUoKSA9PSAiQ2l0cml4IElDQSBDbGllbnQi
KSB7CisgICAgICAgIC8vIFRoZSBDaXRyaXggSUNBIENsaWVudCBwbHVnLWluIHJlcXVpcmVzIGEg
TW96aWxsYS1iYXNlZCBicm93c2VyOyBzZWUgPHJkYXI6Ly82NDE4NjgxPi4KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG5hbWUoKSA9PSAiU2lsdmVybGlnaHQgUGx1Zy1J
biIpIHsKKyAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly81NTU3Mzc5PiBDcmFzaCBp
biBTaWx2ZXJsaWdodCB3aGVuIG9wZW5pbmcgbWljcm9zb2Z0LmNvbS4KKyAgICAgICAgLy8gdGhl
IGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBTaWx2ZXJsaWdodCBkb2VzIG5vdCByZXByb2R1Y2UgdGhp
cyBjcmFzaCwgc28gYWxsb3cgaXQKKyAgICAgICAgLy8gYW5kIGFueSBuZXdlciB2ZXJzaW9ucwor
ICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHNsUGx1Z2luTWluUmVx
dWlyZWQoMHg1MUJFMDAwMCwgMHgwMDAxMDAwMCk7CisKKyAgICAgICAgaWYgKGNvbXBhcmVGaWxl
VmVyc2lvbihzbFBsdWdpbk1pblJlcXVpcmVkKSA8IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVOYW1lKCksICJucG1vemF4
LmRsbCIpKSB7CisgICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxsYSBBY3RpdmVYIGNvbnRyb2wg
Y29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5kbGwKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlTmFtZSgpLCAibnB3cGYu
ZGxsIikpIHsKKyAgICAgICAgLy8gQnVnIDU3MTE5OiBNaWNyb3NvZnQgV2luZG93cyBQcmVzZW50
YXRpb24gRm91bmRhdGlvbiAoV1BGKSBwbHVnLWluIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHhw
Y29tLmRsbAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKG5hbWUoKSA9PSAi
WWFob28gQXBwbGljYXRpb24gU3RhdGUgUGx1Z2luIikgeworICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY4NjAKKyAgICAgICAgLy8gQnVnIGluIFlh
aG9vIEFwcGxpY2F0aW9uIFN0YXRlIHBsdWctaW4gZWFybGllciB0aGFuIDEuMC4wLjYgbGVhZHMg
dG8gaGVhcCBjb3JydXB0aW9uLiAKKyAgICAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxl
VmVyc2lvbiB5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVxdWlyZWQoMHgwMDAwMDAwNiwgMHgwMDAx
MDAwMCk7CisgICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oeWFob29BcHBTdGF0ZVBsdWdp
bk1pblJlcXVpcmVkKSA8IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtz
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNh
dGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3Jt
TW9kdWxlVmVyc2lvbiBmbGFzaFRlblZlcnNpb24oMHgwMDAwMDAwMCwgMHgwMDBhMDAwMCk7CisK
KyAgICAgICAgLy8gUHJlIDEwIEZsYXNoIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5z
IGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgICAgICBpZiAoY29tcGFyZUZp
bGVWZXJzaW9uKGZsYXNoVGVuVmVyc2lvbikgPCAwKQorICAgICAgICAgICAgbV9xdWlya3MuYWRk
KFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKKworICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOworICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyk7CisgICAgICAgIG1fcXVp
cmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsKKyAgICB9CisKKyAgICBpZiAo
bmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBuYW1lKCkuY29udGFpbnMoIldpbmRvd3Mg
TWVkaWEiKSkgeworICAgICAgICAvLyBUaGUgV01QIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRo
ZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNv
CisgICAgICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNv
cnJlY3Qgc2l6ZQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0
V2luZG93Q2FsbCk7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRvZXMgbm90IHdvcmsg
YXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhhdCBwYXJhbWV0ZXIg
CisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWluLgorICAgICAgICBt
X3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSk7CisKKyAg
ICAgICAgLy8gV01QIGhhcyBhIG1vZGFsIG1lc3NhZ2UgbG9vcCB0aGF0IGl0IGVudGVycyB3aGVu
ZXZlciB3ZSBjYWxsIGl0IG9yCisgICAgICAgIC8vIGFzayBpdCB0byBwYWludC4gVGhpcyBtb2Rh
bCBsb29wIGNhbiBkZWxpdmVyIG1lc3NhZ2VzIHRvIG90aGVyCisgICAgICAgIC8vIHdpbmRvd3Mg
aW4gV2ViS2l0IGF0IHRpbWVzIHdoZW4gdGhleSBhcmUgbm90IGV4cGVjdGluZyB0aGVtIChmb3IK
KyAgICAgICAgLy8gZXhhbXBsZSwgZGVsaXZlcmluZyBhIFdNX1BBSU5UIG1lc3NhZ2UgZHVyaW5n
IGEgbGF5b3V0KSwgYW5kIHRoZXNlCisgICAgICAgIC8vIGNhbiBjYXVzZSBjcmFzaGVzLgorICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3NhZ2VMb29wKTsKKyAgICB9
CisKKyAgICBpZiAobmFtZSgpID09ICJWTEMgTXVsdGltZWRpYSBQbHVnaW4iIHx8IG5hbWUoKSA9
PSAiVkxDIE11bHRpbWVkaWEgUGx1Zy1pbiIpIHsKKyAgICAgICAgLy8gVkxDIGhhbmdzIG9uIE5Q
UF9EZXN0cm95IGlmIHdlIGNhbGwgTlBQX1NldFdpbmRvdyB3aXRoIGEgbnVsbCB3aW5kb3cgaGFu
ZGxlCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRTZXROdWxsV2luZG93SGFu
ZGxlT25EZXN0cm95KTsKKworICAgICAgICAvLyBWTEMgMC44LjZkIGFuZCAwLjguNmUgY3Jhc2gg
aWYgbXVsdGlwbGUgaW5zdGFuY2VzIGFyZSBjcmVhdGVkLgorICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNTc3MzA3MD4gdHJhY2tzIGFsbG93aW5nIG11bHRpcGxlIGluc3RhbmNlcyB3aGVuIHRo
aXMKKyAgICAgICAgLy8gYnVnIGlzIGZpeGVkLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgfQorCisgICAgLy8gVGhlIERp
dlggcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBh
bmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVu
IHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobWltZVR5cGUgPT0g
InZpZGVvL2RpdngiKQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0
U2V0V2luZG93Q2FsbCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9y
IGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJpbmRpbmdzOyBpZiBhIHBsdWctaW4gY3JlYXRl
cyBhbgorICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNzZXMgaXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5v
dCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9iamVjdCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3Mg
dG8uCisgICAgLy8gVGh1cywgd2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJl
IGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4gaW5zdGFuY2UgZ29lcyBhd2F5LgorICAgIC8v
IFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4uCisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBs
aWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
RG9udFVubG9hZFBsdWdpbik7CisKKyAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBw
bGV0TUlNRVR5cGUobWltZVR5cGUpKSB7CisgICAgICAgIC8vIEJlY2F1c2UgYSBzaW5nbGUgcHJv
Y2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCByZWxpYWJseSB1
bmxvYWQgYQorICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRoZSBKYXZhIHBs
dWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KKyAgICAgICAgbV9x
dWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisKKyAgICAgICAgLy8gU2V0
dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1c2VzIGJhZCBzY3Jv
bGxpbmcgcmVwYWludCBwcm9ibGVtcworICAgICAgICAvLyB3aXRoIHRoZSBKYXZhIHBsdWctaW4u
CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5T
Y3JvbGxpbmcpOworICAgIH0KKworICAgIGlmIChtaW1lVHlwZSA9PSAiYXVkaW8veC1wbi1yZWFs
YXVkaW8tcGx1Z2luIikgeworICAgICAgICAvLyBQcmV2ZW50IHRoZSBSZWFsIHBsdWdpbiBmcm9t
IGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5LCBjYXVzaW5nIHRoZSBzdGFjayB0
byBvdmVyZmxvdy4KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENhbGxXbmRQ
cm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiBsYXN0S25vd25VbmxvYWRhYmxlUmVhbFBsYXllclZlcnNpb24o
MHgwMDBCMEIyNCwgMHgwMDA2MDAwMCk7CisKKyAgICAgICAgLy8gVW5sb2FkaW5nIFJlYWxQbGF5
ZXIgdmVyc2lvbnMgbmV3ZXIgdGhhbiAxMC41IGNhbiBjYXVzZSBhIGhhbmc7IHNlZSByZGFyOi8v
NTY2OTMxNy4KKyAgICAgICAgLy8gRklYTUU6IFJlc3VtZSB1bmxvYWRpbmcgd2hlbiB0aGlzIGJ1
ZyBpbiB0aGUgUmVhbFBsYXllciBQbHVnLUluIGlzIGZpeGVkIChyZGFyOi8vNTcxMzE0NykKKyAg
ICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihsYXN0S25vd25VbmxvYWRhYmxlUmVhbFBsYXll
clZlcnNpb24pID4gMCkKKyAgICAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRV
bmxvYWRQbHVnaW4pOworICAgIH0KK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8o
KQoreworICAgIERXT1JEIHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKKyAgICB2ZXJzaW9u
SW5mb1NpemUgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhjb25zdF9jYXN0PFVDaGFyKj4obV9w
YXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwgJnplcm9IYW5kbGUp
OworICAgIGlmICh2ZXJzaW9uSW5mb1NpemUgPT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byB2ZXJzaW9uSW5mb0RhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPGNoYXJbXT4odmVy
c2lvbkluZm9TaXplKTsKKworICAgIGlmICghR2V0RmlsZVZlcnNpb25JbmZvVyhjb25zdF9jYXN0
PFVDaGFyKj4obV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwK
KyAgICAgICAgICAgIDAsIHZlcnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhLmdldCgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9uYW1lID0gZ2V0VmVyc2lvbkluZm8odmVy
c2lvbkluZm9EYXRhLmdldCgpLCAiUHJvZHVjdE5hbWUiKTsKKyAgICBtX2Rlc2NyaXB0aW9uID0g
Z2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZURlc2NyaXB0aW9uIik7
CisgICAgaWYgKG1fbmFtZS5pc051bGwoKSB8fCBtX2Rlc2NyaXB0aW9uLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWU19GSVhFREZJTEVJTkZPKiBpbmZvOworICAgIFVJ
TlQgaW5mb1NpemU7CisgICAgaWYgKCFWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEuZ2V0
KCksIEwiXFwiLCAoTFBWT0lEKikgJmluZm8sICZpbmZvU2l6ZSkgfHwgaW5mb1NpemUgPCBzaXpl
b2YoVlNfRklYRURGSUxFSU5GTykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX21vZHVs
ZVZlcnNpb24ubGVhc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTFM7CisgICAgbV9tb2R1bGVW
ZXJzaW9uLm1vc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTVM7CisKKyAgICBpZiAoaXNQbHVn
aW5CbGFja2xpc3RlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8U3Ry
aW5nPiB0eXBlczsKKyAgICBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJN
SU1FVHlwZSIpLnNwbGl0KCd8JywgdHlwZXMpOworICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lv
bkxpc3RzOworICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIkZpbGVF
eHRlbnRzIikuc3BsaXQoJ3wnLCBleHRlbnNpb25MaXN0cyk7CisgICAgVmVjdG9yPFN0cmluZz4g
ZGVzY3JpcHRpb25zOworICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwg
IkZpbGVPcGVuTmFtZSIpLnNwbGl0KCd8JywgZGVzY3JpcHRpb25zKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7IGkrKykgeworICAgICAgICBTdHJpbmcgdHlw
ZSA9IHR5cGVzW2ldLmxvd2VyKCk7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGkgPCBk
ZXNjcmlwdGlvbnMuc2l6ZSgpID8gZGVzY3JpcHRpb25zW2ldIDogIiI7CisgICAgICAgIFN0cmlu
ZyBleHRlbnNpb25MaXN0ID0gaSA8IGV4dGVuc2lvbkxpc3RzLnNpemUoKSA/IGV4dGVuc2lvbkxp
c3RzW2ldIDogIiI7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9uc1ZlY3RvcjsK
KyAgICAgICAgZXh0ZW5zaW9uTGlzdC5zcGxpdCgnLCcsIGV4dGVuc2lvbnNWZWN0b3IpOworCisg
ICAgICAgIC8vIEdldCByaWQgb2YgdGhlIGV4dGVuc2lvbiBsaXN0IHRoYXQgbWF5IGJlIGF0IHRo
ZSBlbmQgb2YgdGhlIGRlc2NyaXB0aW9uIHN0cmluZy4KKyAgICAgICAgaW50IHBvcyA9IGRlc2Ny
aXB0aW9uLmZpbmQoIigqIik7CisgICAgICAgIGlmIChwb3MgIT0gLTEpIHsKKyAgICAgICAgICAg
IC8vIFRoZXJlIG1pZ2h0IGJlIGEgc3BhY2UgdGhhdCB3ZSBuZWVkIHRvIGdldCByaWQgb2YuCisg
ICAgICAgICAgICBpZiAocG9zID4gMSAmJiBkZXNjcmlwdGlvbltwb3MgLSAxXSA9PSAnICcpCisg
ICAgICAgICAgICAgICAgcG9zLS07CisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0
aW9uLmxlZnQocG9zKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERldGVybWluZSB0aGUgcXVp
cmtzIGZvciB0aGUgTUlNRSB0eXBlcyB0aGlzIHBsdWctaW4gc3VwcG9ydHMKKyAgICAgICAgZGV0
ZXJtaW5lUXVpcmtzKHR5cGUpOworCisgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQodHlw
ZSwgZXh0ZW5zaW9uc1ZlY3Rvcik7CisgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZCh0
eXBlLCBkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UGx1Z2luUGFja2FnZTo6bG9hZCgpCit7CisgICAgaWYgKG1fZnJlZUxpYnJhcnlUaW1lci5pc0Fj
dGl2ZSgpKSB7CisgICAgICAgIEFTU0VSVChtX21vZHVsZSk7CisgICAgICAgIG1fZnJlZUxpYnJh
cnlUaW1lci5zdG9wKCk7CisgICAgfSBlbHNlIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIGlm
IChtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2Vz
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV0NIQVIgY3VycmVudFBh
dGhbTUFYX1BBVEhdOworCisgICAgICAgIGlmICghOjpHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhf
UEFUSCwgY3VycmVudFBhdGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IFN0cmluZyBwYXRoID0gbV9wYXRoLnN1YnN0cmluZygwLCBtX3BhdGgucmV2ZXJzZUZpbmQoJ1xc
JykpOworCisgICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoLmNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAvLyBMb2FkIHRoZSBsaWJyYXJ5CisgICAgICAgIG1fbW9kdWxlID0gOjpM
b2FkTGlicmFyeUV4VyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRh
KCksIDAsIExPQURfV0lUSF9BTFRFUkVEX1NFQVJDSF9QQVRIKTsKKworICAgICAgICBpZiAoITo6
U2V0Q3VycmVudERpcmVjdG9yeVcoY3VycmVudFBhdGgpKSB7CisgICAgICAgICAgICBpZiAobV9t
b2R1bGUpCisgICAgICAgICAgICAgICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fbW9kdWxl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAg
IE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0ciBOUF9HZXRFbnRyeVBvaW50cyA9IDA7CisgICAgTlBf
SW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7CisgICAgTlBFcnJvciBucEVycjsK
KworICAgIE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJl
c3MobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7CisgICAgTlBfR2V0RW50cnlQb2ludHMgPSAo
TlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfR2V0
RW50cnlQb2ludHMiKTsKKyAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRy
KUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKworICAgIGlmICghTlBf
SW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIW1fTlBQX1NodXRkb3duKQorICAg
ICAgICBnb3RvIGFib3J0OworCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2Yo
bV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdp
bkZ1bmNzKTsKKworICAgIG5wRXJyID0gTlBfR2V0RW50cnlQb2ludHMoJm1fcGx1Z2luRnVuY3Mp
OworICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJS
T1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBpbml0aWFsaXplQnJvd3NlckZ1bmNzKCk7
CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsKKyAgICBMT0df
TlBFUlJPUihucEVycik7CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAg
ICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOwor
CithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAoreyAKKyAgICBjb25z
dCB1bnNpZ25lZCBoYXNoQ29kZXNbXSA9IHsKKyAgICAgICAgbV9uYW1lLmltcGwoKS0+aGFzaCgp
LAorICAgICAgICBtX2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLAorICAgICAgICBtX21pbWVU
b0V4dGVuc2lvbnMuc2l6ZSgpCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhh
c2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7Cit9CisKK2Jvb2wgUGx1Z2lu
UGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2Fn
ZSYgYikKK3sKKyAgICBpZiAoYS5tX25hbWUgIT0gYi5tX25hbWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChhLm1fZGVzY3JpcHRpb24gIT0gYi5tX2Rlc2NyaXB0aW9uKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYS5tX21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgp
ICE9IGIubV9taW1lVG9FeHRlbnNpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0gYS5t
X21pbWVUb0V4dGVuc2lvbnMuZW5kKCkua2V5cygpOworICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBhLm1fbWltZVRvRXh0ZW5zaW9ucy5iZWdp
bigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICghYi5tX21pbWVUb0V4
dGVuc2lvbnMuY29udGFpbnMoKml0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordWludDE2X3QgUGx1Z2luUGFja2FnZTo6TlBWZXJz
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTlBfVkVSU0lPTl9NSU5PUjsKK30KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaCBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OWEzMzgz
ZGJiNDQ2OTA5OTQwN2Q2YmRhMTIzZDEwMWRjYjVkMzg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBQbHVnaW5RdWlya1NldF9oCisjZGVmaW5lIFBsdWdpblF1aXJrU2V0X2gKKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyAgICBlbnVtIFBsdWdpblF1aXJrIHsKKyAgICAgICAgUGx1Z2luUXVp
cmtXYW50c01vemlsbGFVc2VyQWdlbnQgPSAxIDw8IDAsCisgICAgICAgIFBsdWdpblF1aXJrRGVm
ZXJGaXJzdFNldFdpbmRvd0NhbGwgPSAxIDw8IDEsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0
bGVJbnZhbGlkYXRlID0gMSA8PCAyLCAKKyAgICAgICAgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3ds
ZXNzVmlkZW9QYXJhbSA9IDEgPDwgMywKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNl
clBsdXNPbmVNZXNzYWdlcyA9IDEgPDwgNCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250VW5sb2Fk
UGx1Z2luID0gMSA8PCA1LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNh
bWVNZXNzYWdlUmVjdXJzaXZlbHkgPSAxIDw8IDYsCisgICAgICAgIFBsdWdpblF1aXJrSGFzTW9k
YWxNZXNzYWdlTG9vcCA9IDEgPDwgNywKKyAgICAgICAgUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlm
eUJ1ZyA9IDEgPDwgOCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVu
U2Nyb2xsaW5nID0gMSA8PCA5LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRTZXROdWxsV2luZG93
SGFuZGxlT25EZXN0cm95ID0gMSA8PCAxMCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250QWxsb3dN
dWx0aXBsZUluc3RhbmNlcyA9IDEgPDwgMTEsCisgICAgICAgIFBsdWdpblF1aXJrUmVxdWlyZXNH
dGtUb29sS2l0ID0gMSA8PCAxMiwKKyAgICAgICAgUGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRT
Y3JlZW5EZXB0aCA9IDEgPDwgMTMsCisgICAgICAgIFBsdWdpblF1aXJrRG9udENhbGxTZXRXaW5k
b3dNb3JlVGhhbk9uY2UgPSAxIDw8IDE0LAorICAgICAgICBQbHVnaW5RdWlya0lnbm9yZVJpZ2h0
Q2xpY2tJbldpbmRvd2xlc3NNb2RlID0gMSA8PCAxNSwKKyAgICAgICAgUGx1Z2luUXVpcmtXYW50
c0Nocm9tZVVzZXJBZ2VudCA9IDEgPDwgMTYKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luUXVp
cmtTZXQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBQbHVnaW5RdWlya1NldCgpIDog
bV9xdWlya3MoMCkgeyB9CisgICAgICAgICAgICB2b2lkIGFkZChQbHVnaW5RdWlyayBxdWlyaykg
eyBtX3F1aXJrcyB8PSBxdWlyazsgfQorICAgICAgICAgICAgYm9vbCBjb250YWlucyhQbHVnaW5R
dWlyayBxdWlyaykgY29uc3QgeyByZXR1cm4gbV9xdWlya3MgJiBxdWlyazsgfQorICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgdW5zaWduZWQgbV9xdWlya3M7CisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUGx1Z2luUXVpcmtTZXRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIGIvU291cmNlL1dl
YktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5YjliMTIwZjFm
NDIwYzZiNGE3YzZiZmYwMDc2MzMwMGI1NTgyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKQEAgLTAsMCArMSw0ODIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblN0cmVhbS5oIgorCisjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCisjaW5jbHVkZSAiUGx1
Z2luRGVidWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCisvLyBXZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBsaWtl
IHRvIHJldHVybiAtMSB0byBpbmRpY2F0ZSBlcnJvcgorLy8gYW5kIHRoaXMgd2F5IHdlIHdvbid0
IGNsYXNoIHdpdGggdGhlbS4KK3N0YXRpYyBjb25zdCBpbnQgV2ViUmVhc29uTm9uZSA9IC0yOwor
Cit1c2luZyBzdGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3R5cGVkZWYgSGFzaE1hcDxOUFN0cmVhbSosIE5QUD4gU3RyZWFtTWFwOworc3RhdGljIFN0
cmVhbU1hcCYgc3RyZWFtcygpCit7CisgICAgc3RhdGljIFN0cmVhbU1hcCBzdGF0aWNTdHJlYW1z
OworICAgIHJldHVybiBzdGF0aWNTdHJlYW1zOworfQorCitQbHVnaW5TdHJlYW06OlBsdWdpblN0
cmVhbShQbHVnaW5TdHJlYW1DbGllbnQqIGNsaWVudCwgRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lk
KiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcywgTlBQIGluc3Rh
bmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtzKQorICAgIDogbV9yZXNvdXJjZVJlcXVl
c3QocmVzb3VyY2VSZXF1ZXN0KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9mcmFt
ZShmcmFtZSkKKyAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQorICAgICwgbV9zZW5kTm90
aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pCisgICAgLCBtX3N0cmVhbVN0YXRlKFN0cmVhbUJl
Zm9yZVN0YXJ0ZWQpCisgICAgLCBtX2xvYWRNYW51YWxseShmYWxzZSkKKyAgICAsIG1fZGVsYXlE
ZWxpdmVyeVRpbWVyKCp0aGlzLCAmUGx1Z2luU3RyZWFtOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJl
ZCkKKyAgICAsIG1fdGVtcEZpbGVIYW5kbGUoaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKKyAg
ICAsIG1fcGx1Z2luRnVuY3MocGx1Z2luRnVuY3MpCisgICAgLCBtX2luc3RhbmNlKGluc3RhbmNl
KQorICAgICwgbV9xdWlya3MocXVpcmtzKQoreworICAgIEFTU0VSVChtX2luc3RhbmNlKTsKKwor
ICAgIG1fc3RyZWFtLnVybCA9IDA7CisgICAgbV9zdHJlYW0ubmRhdGEgPSAwOworICAgIG1fc3Ry
ZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5lbmQgPSAwOworICAgIG1fc3RyZWFtLm5vdGlm
eURhdGEgPSAwOworICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IDA7CisgICAgbV9zdHJlYW0u
aGVhZGVycyA9IDA7CisKKyAgICBzdHJlYW1zKCkuYWRkKCZtX3N0cmVhbSwgbV9pbnN0YW5jZSk7
Cit9CisKK1BsdWdpblN0cmVhbTo6flBsdWdpblN0cmVhbSgpCit7CisgICAgQVNTRVJUKG1fc3Ry
ZWFtU3RhdGUgIT0gU3RyZWFtU3RhcnRlZCk7CisgICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAg
ICBmYXN0RnJlZSgoY2hhciopbV9zdHJlYW0udXJsKTsKKworICAgIHN0cmVhbXMoKS5yZW1vdmUo
Jm1fc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0KCkKK3sKKyAgICBBU1NF
UlQoIW1fbG9hZE1hbnVhbGx5KTsKKyAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxl
cigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQobV9mcmFtZSwgdGhpcywgbV9yZXNvdXJjZVJl
cXVlc3QpOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6c3RvcCgpCit7CisgICAgbV9zdHJlYW1T
dGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICBpZiAobV9sb2FkTWFudWFsbHkpIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKTsKKyAgICAg
ICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyKTsKKworICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXIt
PmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKQorICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmNh
bmNlbE1haW5SZXNvdXJjZUxvYWQobV9mcmFtZS0+bG9hZGVyKCkuY2FuY2VsbGVkRXJyb3IobV9y
ZXNvdXJjZVJlcXVlc3QpKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
bG9hZGVyKSB7CisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICAgICAgbV9sb2FkZXIg
PSAwOworICAgIH0KKworICAgIG1fY2xpZW50ID0gMDsKK30KKworc3RhdGljIHVpbnQzMl90IGxh
c3RNb2RpZmllZERhdGUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAg
ZG91YmxlIGxhc3RNb2RpZmllZCA9IHJlc3BvbnNlLmxhc3RNb2RpZmllZCgpOworICAgIGlmICgh
c3RkOjppc2Zpbml0ZShsYXN0TW9kaWZpZWQpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBsYXN0TW9kaWZpZWQgKiAxMDAwOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6c3RhcnRT
dHJlYW0oKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0
ZWQpOworCisgICAgY29uc3QgVVJMJiByZXNwb25zZVVSTCA9IG1fcmVzb3VyY2VSZXNwb25zZS51
cmwoKTsKKworICAgIC8vIFNvbWUgcGx1Z2lucyAoRmxhc2gpIGV4cGVjdCB0aGF0IGphdmFzY3Jp
cHQgVVJMcyBhcmUgcGFzc2VkIGJhY2sgZGVjb2RlZCBhcyB0aGlzIGlzIHRoZQorICAgIC8vIGZv
cm1hdCB1c2VkIHdoZW4gcmVxdWVzdGluZyB0aGUgVVJMLgorICAgIGlmIChwcm90b2NvbElzSmF2
YVNjcmlwdChyZXNwb25zZVVSTCkpCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGZhc3RTdHJEdXAo
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHJlc3BvbnNlVVJMLnN0cmluZygpKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGZhc3RTdHJEdXAocmVzcG9u
c2VVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBDU3RyaW5nIG1pbWVUeXBlU3Ry
ID0gbV9yZXNvdXJjZVJlc3BvbnNlLm1pbWVUeXBlKCkudXRmOCgpOworCisgICAgbG9uZyBsb25n
IGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25zZS5leHBlY3RlZENvbnRl
bnRMZW5ndGgoKTsKKworICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2UuaXNIVFRQKCkpIHsKKyAg
ICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICBTdHJpbmcgc2VwYXJh
dG9yID0gQVNDSUlMaXRlcmFsKCI6ICIpOworCisgICAgICAgIFN0cmluZyBzdGF0dXNMaW5lID0g
IkhUVFAgIiArIFN0cmluZzo6bnVtYmVyKG1fcmVzb3VyY2VSZXNwb25zZS5odHRwU3RhdHVzQ29k
ZSgpKSArICIgT0tcbiI7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0YXR1c0xpbmUp
OworCisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3Vy
Y2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChzZXBhcmF0b3IpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVl
KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICB9CisK
KyAgICAgICAgbV9oZWFkZXJzID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKwor
ICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxpa2VseSBjb21wcmVz
c2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdpbiwKKyAgICAgICAg
Ly8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90IHll
dCBrbm93biBhdCB0aGUgbW9tZW50LgorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDQ3MDU5
OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3BvbnNlIGV4cGVjdGVkQ29udGVudExl
bmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KKyAgICAgICAgU3RyaW5nIGNvbnRlbnRF
bmNvZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRFbmNvZGluZyk7CisgICAgICAgIGlmICghY29udGVudEVuY29kaW5nLmlzTnVs
bCgpICYmIGNvbnRlbnRFbmNvZGluZyAhPSAiaWRlbnRpdHkiKQorICAgICAgICAgICAgZXhwZWN0
ZWRDb250ZW50TGVuZ3RoID0gLTE7CisgICAgfQorCisgICAgbV9zdHJlYW0uaGVhZGVycyA9IG1f
aGVhZGVycy5kYXRhKCk7CisgICAgbV9zdHJlYW0ucGRhdGEgPSAwOworICAgIG1fc3RyZWFtLm5k
YXRhID0gdGhpczsKKyAgICBtX3N0cmVhbS5lbmQgPSBtYXgoZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
LCAwTEwpOworICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IGxhc3RNb2RpZmllZERhdGUobV9y
ZXNvdXJjZVJlc3BvbnNlKTsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRh
OworCisgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7CisgICAgbV9vZmZzZXQgPSAwOwor
ICAgIG1fcmVhc29uID0gV2ViUmVhc29uTm9uZTsKKworICAgIC8vIFByb3RlY3QgdGhlIHN0cmVh
bSBpZiBkZXN0cm95c3RyZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgbmV3c3RyZWFtIGhh
bmRsZXIKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOworCisgICAgLy8g
Y2FsbGluZyBpbnRvIGEgcGx1Zy1pbiBjb3VsZCByZXN1bHQgaW4gcmUtZW50cmFuY2UgaWYgdGhl
IHBsdWctaW4geWllbGRzCisgICAgLy8gY29udHJvbCB0byB0aGUgc3lzdGVtIChyZGFyOi8vNTc0
NDg5OSkuIHByZXZlbnQgdGhpcyBieSBkZWZlcnJpbmcgZnVydGhlcgorICAgIC8vIGxvYWRpbmcg
d2hpbGUgY2FsbGluZyBpbnRvIHRoZSBwbHVnLWluLgorICAgIGlmIChtX2xvYWRlcikKKyAgICAg
ICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgTlBFcnJvciBucEVyciA9
IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbShtX2luc3RhbmNlLCAoTlBNSU1FVHlwZSltaW1lVHlw
ZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVyTW9kZSk7CisgICAgaWYg
KG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Cisg
ICAgCisgICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVzdHJveWVkIGluIHRoZSBjYWxsIHRvIG5l
d3N0cmVhbSB3ZSByZXR1cm4KKyAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1Ip
IHsKKyAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShucEVycik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RhcnRlZDsKKworICAgIGlm
IChtX3RyYW5zZmVyTW9kZSA9PSBOUF9OT1JNQUwpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cGF0aCA9IG9wZW5UZW1wb3JhcnlGaWxlKCJXS1AiLCBtX3RlbXBGaWxlSGFuZGxlKTsKKworICAg
IC8vIFNvbWV0aGluZyB3ZW50IHdyb25nLCBjYW5jZWwgbG9hZGluZyB0aGUgc3RyZWFtCisgICAg
aWYgKCFpc0hhbmRsZVZhbGlkKG1fdGVtcEZpbGVIYW5kbGUpKQorICAgICAgICBjYW5jZWxBbmRE
ZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKK30KKworTlBQIFBsdWdpblN0cmVhbTo6
b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gc3RyZWFtcygp
LmdldChzdHJlYW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6Y2FuY2VsQW5kRGVzdHJveVN0
cmVhbShOUFJlYXNvbiByZWFzb24pCit7CisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVj
dCh0aGlzKTsKKworICAgIGRlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAgICBzdG9wKCk7Cit9CisK
K3ZvaWQgUGx1Z2luU3RyZWFtOjpkZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKK3sKKyAg
ICBtX3JlYXNvbiA9IHJlYXNvbjsKKyAgICBpZiAobV9yZWFzb24gIT0gTlBSRVNfRE9ORSkgewor
ICAgICAgICAvLyBTdG9wIGFueSBwZW5kaW5nIGRhdGEgZnJvbSBiZWluZyBzdHJlYW1lZAorICAg
ICAgICBpZiAobV9kZWxpdmVyeURhdGEpCisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVz
aXplKDApOworICAgIH0gZWxzZSBpZiAobV9kZWxpdmVyeURhdGEgJiYgbV9kZWxpdmVyeURhdGEt
PnNpemUoKSA+IDApIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbW9yZSBkYXRhIHRvIGJlIHN0cmVh
bWVkLCBkb24ndCBkZXN0cm95IHRoZSBzdHJlYW0gbm93LgorICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGRlc3Ryb3lTdHJlYW0oKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmRlc3Ryb3lT
dHJlYW0oKQoreworICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKTsKKyAg
ICBBU1NFUlQoIW1fZGVsaXZlcnlEYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCk7
CisKKyAgICBjbG9zZUZpbGUobV90ZW1wRmlsZUhhbmRsZSk7CisKKyAgICBib29sIG5ld1N0cmVh
bUNhbGxlZCA9IG1fc3RyZWFtLm5kYXRhOworCisgICAgLy8gUHJvdGVjdCBmcm9tIGRlc3RydWN0
aW9uIGlmOgorICAgIC8vICBOUE5fRGVzdHJveVN0cmVhbSBpcyBjYWxsZWQgZnJvbSBOUFBfTmV3
U3RyZWFtIG9yCisgICAgLy8gIFBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFtRGlkRmluaXNoTG9h
ZGluZygpIHJlbW92ZXMgdGhlIGxhc3QgcmVmZXJlbmNlCisgICAgUmVmUHRyPFBsdWdpblN0cmVh
bT4gcHJvdGVjdCh0aGlzKTsKKworICAgIGlmIChuZXdTdHJlYW1DYWxsZWQpIHsKKyAgICAgICAg
aWYgKG1fcmVhc29uID09IE5QUkVTX0RPTkUgJiYgKG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklM
RSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSkgeworICAgICAgICAgICAgQVNT
RVJUKCFtX3BhdGguaXNOdWxsKCkpOworCisgICAgICAgICAgICBpZiAobV9sb2FkZXIpCisgICAg
ICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgICAgICAg
ICBtX3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX3BhdGgudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICAgICAg
bV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCkgeworICAgICAgICAgICAg
aWYgKG1fbG9hZGVyKQorICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5n
KHRydWUpOworCisgICAgICAgICAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+ZGVz
dHJveXN0cmVhbShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKKworICAgICAgICAg
ICAgaWYgKG1fbG9hZGVyKQorICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2Fk
aW5nKGZhbHNlKTsKKworICAgICAgICAgICAgTE9HX05QRVJST1IobnBFcnIpOworICAgICAgICB9
CisKKyAgICAgICAgbV9zdHJlYW0ubmRhdGEgPSAwOworICAgIH0KKworICAgIGlmIChtX3NlbmRO
b3RpZmljYXRpb24pIHsKKyAgICAgICAgLy8gRmxhc2ggOSBjYW4gZGVyZWZlcmVuY2UgbnVsbCBp
ZiB3ZSBjYWxsIE5QUF9VUkxOb3RpZnkgd2l0aG91dCBmaXJzdCBjYWxsaW5nIE5QUF9OZXdTdHJl
YW0KKyAgICAgICAgLy8gZm9yIHJlcXVlc3RzIG1hZGUgd2l0aCBOUE5fUG9zdFVSTE5vdGlmeTsg
c2VlIDxyZGFyOi8vNTU4ODgwNz4KKyAgICAgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICAgICAg
bV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgICAgIGlmICghbmV3U3RyZWFt
Q2FsbGVkICYmIG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcp
ICYmCisgICAgICAgICAgICBlcXVhbElnbm9yaW5nQ2FzZShtX3Jlc291cmNlUmVxdWVzdC5odHRw
TWV0aG9kKCksICJQT1NUIikpIHsKKyAgICAgICAgICAgIG1fdHJhbnNmZXJNb2RlID0gTlBfTk9S
TUFMOworICAgICAgICAgICAgbV9zdHJlYW0udXJsID0gIiI7CisgICAgICAgICAgICBtX3N0cmVh
bS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRhOworCisgICAgICAgICAgICBzdGF0aWMgY2hhciBl
bXB0eU1pbWVUeXBlW10gPSAiIjsKKyAgICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVh
bShtX2luc3RhbmNlLCBlbXB0eU1pbWVUeXBlLCAmbV9zdHJlYW0sIGZhbHNlLCAmbV90cmFuc2Zl
ck1vZGUpOworICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+ZGVzdHJveXN0cmVhbShtX2luc3Rh
bmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKKworICAgICAgICAgICAgLy8gaW4gc3VjY2Vzc2Z1
bCByZXF1ZXN0cywgdGhlIFVSTCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIGZyZWVkIGlu
IG91cgorICAgICAgICAgICAgLy8gZGVzdHJ1Y3Rvciwgc28gcmVzZXQgaXQgdG8gMAorICAgICAg
ICAgICAgbV9zdHJlYW0udXJsID0gMDsKKyAgICAgICAgfQorICAgICAgICBtX3BsdWdpbkZ1bmNz
LT51cmxub3RpZnkobV9pbnN0YW5jZSwgbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgbV9yZWFzb24sIG1fbm90aWZ5RGF0YSk7CisgICAgICAgIGlmIChtX2xv
YWRlcikKKyAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAg
ICB9CisKKyAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RvcHBlZDsKKworICAgIGlmICghbV9s
b2FkTWFudWFsbHkgJiYgbV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zdHJlYW1EaWRGaW5p
c2hMb2FkaW5nKHRoaXMpOworCisgICAgaWYgKCFtX3BhdGguaXNOdWxsKCkpCisgICAgICAgIGRl
bGV0ZUZpbGUobV9wYXRoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlU
aW1lckZpcmVkKCkKK3sKKyAgICBkZWxpdmVyRGF0YSgpOworfQorCit2b2lkIFBsdWdpblN0cmVh
bTo6ZGVsaXZlckRhdGEoKQoreworICAgIEFTU0VSVChtX2RlbGl2ZXJ5RGF0YSk7CisgICAgCisg
ICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBjYW5jZWwgb3VyIGpvYiBpbiB0aGUgU3VicmVzb3VyY2VMb2FkZXIgb24gZXJy
b3Igc28gd2UgZG9uJ3QgcmVhY2ggdGhpcyBjYXNlCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgaWYgKCFt
X3N0cmVhbS5uZGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIGludDMyX3QgdG90YWxCeXRlcyA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7
CisgICAgaW50MzJfdCB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKworICAgIGlmIChtX2xvYWRl
cikKKyAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgd2hpbGUg
KHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAgICAgIGludDMyX3QgZGVs
aXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlcmVhZHkobV9pbnN0YW5jZSwgJm1fc3Ry
ZWFtKTsKKworICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8PSAwKSB7CisgICAgICAgICAgICBt
X2RlbGF5RGVsaXZlcnlUaW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZl
cnlCeXRlcywgdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWQpOworICAgICAgICAgICAg
aW50MzJfdCBkYXRhTGVuZ3RoID0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIGNoYXIqIGRh
dGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKKworICAg
ICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBt
X3BsdWdpbkZ1bmNzLT53cml0ZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fb2Zmc2V0LCBkYXRh
TGVuZ3RoLCAodm9pZCopZGF0YSk7CisgICAgICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8IDAp
IHsKKyAgICAgICAgICAgICAgICBMT0dfUExVR0lOX05FVF9FUlJPUigpOworICAgICAgICAgICAg
ICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVy
c0xvYWRpbmcoZmFsc2UpOworICAgICAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0o
TlBSRVNfTkVUV09SS19FUlIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgZGF0YUxl
bmd0aCk7CisgICAgICAgICAgICBtX29mZnNldCArPSBkZWxpdmVyeUJ5dGVzOworICAgICAgICAg
ICAgdG90YWxCeXRlc0RlbGl2ZXJlZCArPSBkZWxpdmVyeUJ5dGVzOworICAgICAgICB9CisgICAg
fQorICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmco
ZmFsc2UpOworCisgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPiAwKSB7CisgICAgICAgIGlm
ICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICAgICAgaW50IHJl
bWFpbmluZ0J5dGVzID0gdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7CisgICAgICAg
ICAgICBtZW1tb3ZlKG1fZGVsaXZlcnlEYXRhLT5kYXRhKCksIG1fZGVsaXZlcnlEYXRhLT5kYXRh
KCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkLCByZW1haW5pbmdCeXRlcyk7CisgICAgICAgICAgICBt
X2RlbGl2ZXJ5RGF0YS0+cmVzaXplKHJlbWFpbmluZ0J5dGVzKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7CisgICAgICAgICAgICBpZiAo
bV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKKyAgICAgICAgICAgICAgICBkZXN0cm95U3RyZWFt
KCk7CisgICAgICAgIH0KKyAgICB9IAorfQorCit2b2lkIFBsdWdpblN0cmVhbTo6c2VuZEphdmFT
Y3JpcHRTdHJlYW0oY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiByZXN1bHRT
dHJpbmcpCit7CisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIFJlc291cmNlUmVzcG9uc2UocmVx
dWVzdFVSTCwgInRleHQvcGxhaW4iLCByZXN1bHRTdHJpbmcubGVuZ3RoKCksICIiKSk7CisKKyAg
ICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIXJlc3VsdFN0cmluZy5pc051bGwoKSkgeworICAgICAgICBkaWRSZWNlaXZlRGF0
YSgwLCByZXN1bHRTdHJpbmcuZGF0YSgpLCByZXN1bHRTdHJpbmcubGVuZ3RoKCkpOworICAgICAg
ICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fbG9hZGVyID0gMDsKKworICAgIGRlc3Ryb3lTdHJlYW0ocmVzdWx0
U3RyaW5nLmlzTnVsbCgpID8gTlBSRVNfTkVUV09SS19FUlIgOiBOUFJFU19ET05FKTsKK30KKwor
dm9pZCBQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAg
ICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQo
bV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIG1fcmVzb3VyY2VS
ZXNwb25zZSA9IHJlc3BvbnNlOworCisgICAgc3RhcnRTdHJlYW0oKTsKK30KKwordm9pZCBQbHVn
aW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUX1VOVVNFRChs
b2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0g
U3RyZWFtU3RhcnRlZCk7CisKKyAgICAvLyBJZiB0aGUgcGx1Zy1pbiBjYW5jZWxzIHRoZSBzdHJl
YW0gaW4gZGVsaXZlckRhdGEgaXQgY291bGQgYmUgZGVsZXRlZCwgCisgICAgLy8gc28gcHJvdGVj
dCBpdCBoZXJlLgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7CisKKyAg
ICBpZiAobV90cmFuc2Zlck1vZGUgIT0gTlBfQVNGSUxFT05MWSkgeworICAgICAgICBpZiAoIW1f
ZGVsaXZlcnlEYXRhKQorICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEgPSBzdGQ6Om1ha2VfdW5p
cXVlPFZlY3RvcjxjaGFyPj4oKTsKKworICAgICAgICBpbnQgb2xkU2l6ZSA9IG1fZGVsaXZlcnlE
YXRhLT5zaXplKCk7CisgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUob2xkU2l6ZSArIGxl
bmd0aCk7CisgICAgICAgIG1lbWNweShtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgb2xkU2l6ZSwg
ZGF0YSwgbGVuZ3RoKTsKKworICAgICAgICBkZWxpdmVyRGF0YSgpOworICAgIH0KKworICAgIGlm
IChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0b3BwZWQgJiYgaXNIYW5kbGVWYWxpZChtX3RlbXBG
aWxlSGFuZGxlKSkgeworICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gd3JpdGVUb0ZpbGUobV90
ZW1wRmlsZUhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiAh
PSBsZW5ndGgpCisgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdP
UktfRVJSKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpkaWRGYWlsKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAg
IEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworCisgICAgTE9HX1BM
VUdJTl9ORVRfRVJST1IoKTsKKworICAgIC8vIGRlc3Ryb3lTdHJlYW0gY2FuIHJlc3VsdCBpbiBv
dXIgYmVpbmcgZGVsZXRlZAorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7
CisKKyAgICBkZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKKworICAgIG1fbG9hZGVy
ID0gMDsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlcikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwg
bG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1T
dGFydGVkKTsKKworICAgIC8vIGRlc3Ryb3lTdHJlYW0gY2FuIHJlc3VsdCBpbiBvdXIgYmVpbmcg
ZGVsZXRlZAorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7CisKKyAgICBk
ZXN0cm95U3RyZWFtKE5QUkVTX0RPTkUpOworCisgICAgbV9sb2FkZXIgPSAwOworfQorCitib29s
IFBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJlYW1zKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGx1
Z2luRnVuY3MtPmdldHZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2b2lkKiBy
ZXN1bHQgPSAwOworICAgIGlmIChtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBO
UFBWcGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtcywgJnJlc3VsdCkgIT0gTlBFUlJfTk9fRVJS
T1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiByZXN1bHQgIT0gMDsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0u
aCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjAwMzJjNGMxOTA0NTEyMmY1NmFjZWY2MzJlNTc4MThhMTVhOWJjZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmgKQEAgLTAsMCArMSwx
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5TdHJlYW1faAorI2RlZmluZSBQbHVnaW5TdHJlYW1f
aAorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUg
Ik5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luUXVpcmtTZXQu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBj
bGFzcyBQbHVnaW5TdHJlYW07CisKKyAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRlIHsgU3RyZWFt
QmVmb3JlU3RhcnRlZCwgU3RyZWFtU3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9OworCisgICAgY2xh
c3MgUGx1Z2luU3RyZWFtQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgflBs
dWdpblN0cmVhbUNsaWVudCgpIHt9CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5p
c2hMb2FkaW5nKFBsdWdpblN0cmVhbSopIHt9CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpblN0
cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblN0cmVhbT4sIHByaXZhdGUgTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGx1Z2luU3RyZWFtPiBjcmVhdGUoUGx1Z2luU3RyZWFtQ2xpZW50KiBjbGllbnQs
IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNlbmRO
b3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqIGZ1bmN0
aW9ucywgTlBQIGluc3RhbmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtzKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpblN0cmVhbShjbGllbnQs
IGZyYW1lLCByZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBmdW5jdGlvbnMs
IGluc3RhbmNlLCBxdWlya3MpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIH5QbHVnaW5T
dHJlYW0oKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBz
dG9wKCk7CisKKyAgICAgICAgdm9pZCBzdGFydFN0cmVhbSgpOworCisgICAgICAgIHZvaWQgc2V0
TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1hbnVhbGx5KSB7IG1fbG9hZE1hbnVhbGx5ID0gbG9hZE1h
bnVhbGx5OyB9CisKKyAgICAgICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBVUkwm
IHJlcXVlc3RVUkwsIGNvbnN0IFdURjo6Q1N0cmluZyYgcmVzdWx0U3RyaW5nKTsKKyAgICAgICAg
dm9pZCBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKKworICAgICAgICBzdGF0aWMg
TlBQIG93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKik7CisKKyAgICAgICAgLy8gTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXJDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNw
b25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlciopOworICAgICAgICB2aXJ0dWFsIGJvb2wgd2FudHNBbGxTdHJlYW1zKCkgY29uc3Q7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5TdHJlYW0oUGx1Z2luU3RyZWFtQ2xpZW50
KiwgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24s
IHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqLCBOUFAgaW5zdGFuY2UsIGNv
bnN0IFBsdWdpblF1aXJrU2V0Jik7CisKKyAgICAgICAgdm9pZCBkZWxpdmVyRGF0YSgpOworICAg
ICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOworICAgICAgICB2b2lkIGRlc3Ryb3lT
dHJlYW0oKTsKKworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVlc3Q7Cisg
ICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNvdXJjZVJlc3BvbnNlOworCisgICAgICAgIFBs
dWdpblN0cmVhbUNsaWVudCogbV9jbGllbnQ7CisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAg
ICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVyOworICAgICAg
ICB2b2lkKiBtX25vdGlmeURhdGE7CisgICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOwor
ICAgICAgICBQbHVnaW5TdHJlYW1TdGF0ZSBtX3N0cmVhbVN0YXRlOworICAgICAgICBib29sIG1f
bG9hZE1hbnVhbGx5OworCisgICAgICAgIFRpbWVyIG1fZGVsYXlEZWxpdmVyeVRpbWVyOworICAg
ICAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKCk7CisKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFZlY3RvcjxjaGFyPj4gbV9kZWxpdmVyeURhdGE7CisKKyAgICAgICAgUGxhdGZvcm1G
aWxlSGFuZGxlIG1fdGVtcEZpbGVIYW5kbGU7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5j
cyogbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIHVpbnQx
Nl90IG1fdHJhbnNmZXJNb2RlOworICAgICAgICBpbnQzMl90IG1fb2Zmc2V0OworICAgICAgICBD
U3RyaW5nIG1faGVhZGVyczsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgTlBSZWFz
b24gbV9yZWFzb247CisgICAgICAgIE5QU3RyZWFtIG1fc3RyZWFtOworICAgICAgICBQbHVnaW5R
dWlya1NldCBtX3F1aXJrczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGViMjI1YzA0Y2MxZWU0MWQ1NjJlZGJkOTIwYzlkMjk3NThlZTRlNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTAsMCArMSwx
NDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRlICJCcmlkZ2VKU0MuaCIKKyNpbmNsdWRl
ICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUVFBI
ZWFkZXJOYW1lcy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxl
ci5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJQcm94eVNlcnZlci5o
IgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2lu
Y2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIK
KyNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiY19pbnN0YW5jZS5oIgorI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVk
ZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBPUyhXSU5ET1dTKSAm
JiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhy
b3R0bGVyV2luLmgiCisjZW5kaWYKKwordXNpbmcgSlNDOjpFeGVjU3RhdGU7Cit1c2luZyBKU0M6
OkpTTG9jazsKK3VzaW5nIEpTQzo6SlNPYmplY3Q7Cit1c2luZyBKU0M6OkpTVmFsdWU7CisKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKKworc3RhdGljIGludCBzX2NhbGxpbmdQbHVnaW47CisKK3R5cGVkZWYgSGFz
aE1hcDxOUFAsIFBsdWdpblZpZXcqPiBJbnN0YW5jZU1hcDsKKworc3RhdGljIEluc3RhbmNlTWFw
JiBpbnN0YW5jZU1hcCgpCit7CisgICAgc3RhdGljIEluc3RhbmNlTWFwJiBtYXAgPSAqbmV3IElu
c3RhbmNlTWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBTdHJpbmcgc2NyaXB0U3Ry
aW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IFVSTCYgdXJsKQoreworICAgIGlmICghcHJvdG9jb2xJ
c0phdmFTY3JpcHQodXJsKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gVGhp
cyByZXR1cm5zIGFuIHVuZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoMTEpKTsKK30KKworUGx1Z2luVmlldyog
UGx1Z2luVmlldzo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CisKK3ZvaWQgUGx1Z2luVmlldzo6
cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKCkKK3sKKyAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUo
KTsKK30KKworSW50UmVjdCBQbHVnaW5WaWV3Ojp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Cit7Cisg
ICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KKyAgICBJbnRSZWN0IGNsaXBS
ZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBvdXIgZWxlbWVudCBhbmQgZ2V0
IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBmcmFtZSB2aWV3Lgor
ICAgIEZyYW1lVmlldyogcGFyZW50VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS52aWV3KCk7
CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHBhcmVudFZpZXctPndpbmRvd0NsaXBSZWN0Rm9yRnJh
bWVPd25lcihtX2VsZW1lbnQsIHRydWUpKTsKKworICAgIHJldHVybiBjbGlwUmVjdDsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLnByaW50aW5nKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChyZWN0ICE9IGZyYW1lUmVjdCgpKQorICAgICAgICBXaWRnZXQ6OnNldEZyYW1l
UmVjdChyZWN0KTsKKworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOworCisjaWYgT1MoV0lORE9X
UykKKyAgICAvLyBPbiBXaW5kb3dzIGFsd2F5cyBjYWxsIHBsdWdpbiB0byBjaGFuZ2UgZ2VvbWV0
cnkuCisgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOworI2VsaWYgZGVmaW5lZChYUF9VTklYKQor
ICAgIC8vIE9uIFVuaXgsIG11bHRpcGxlIGNhbGxzIHRvIHNldE5QV2luZG93KCkgaW4gd2luZG93
ZWQgbW9kZSBjYXVzZXMgRmxhc2ggdG8gY3Jhc2gKKyAgICBpZiAobV9tb2RlID09IE5QX0ZVTEwg
fHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOworI2VuZGlm
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZnJhbWVSZWN0c0NoYW5nZWQoKQoreworICAgIHVwZGF0
ZVBsdWdpbldpZGdldCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmNsaXBSZWN0Q2hhbmdlZCgp
Cit7CisgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4gfHwgbV9pc1dpbmRv
d2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQcm90ZWN0IHRoZSBwbHVnLWluIGZyb20g
ZGVsZXRpb24gd2hpbGUgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50LgorICAgIFJlZlB0cjxQbHVnaW5W
aWV3PiBwcm90ZWN0KHRoaXMpOworCisgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAg
ICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsK
KyAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgIGhhbmRsZUtl
eWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7CisjaWYgZGVm
aW5lZChYUF9NQUNPU1gpCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkud2hlZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVs
RXZlbnQpCisgICAgICAgIGhhbmRsZVdoZWVsRXZlbnQoc3RhdGljX2Nhc3Q8V2hlZWxFdmVudCo+
KGV2ZW50KSk7CisjZW5kaWYKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5jb250ZXh0bWVudUV2ZW50KQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aGUgcGx1Zy1pbiBoYXMgaGFuZGxlZCBtb3VzZWRvd24g
ZXZlbnQgYnkgZGlzcGxheWluZyBhIGNvbnRleHQgbWVudSwgc28gd2UgbmV2ZXIgd2FudCBXZWJL
aXQgdG8gc2hvdyBhIGRlZmF1bHQgb25lLgorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuZm9jdXNvdXRFdmVudCkKKyAgICAgICAgaGFuZGxlRm9jdXNPdXRFdmVudCgpOwor
ICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZvY3VzaW5FdmVudCkK
KyAgICAgICAgaGFuZGxlRm9jdXNJbkV2ZW50KCk7CisjZW5kaWYKK30KKwordm9pZCBQbHVnaW5W
aWV3Ojppbml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9wbHVnaW4p
IHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVn
aW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5W
aWV3Ojppbml0KCk6IEluaXRpYWxpemluZyBwbHVnLWluICclcyciLCBtX3BsdWdpbi0+bmFtZSgp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgpKSB7CisgICAgICAg
IG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2Fk
UGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdGFydE9yQWRkVG9V
bnN0YXJ0ZWRMaXN0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RM
b2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6c3RhcnRP
ckFkZFRvVW5zdGFydGVkTGlzdCgpCit7CisgICAgaWYgKCFtX3BhcmVudEZyYW1lLT5wYWdlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIG9ubHkgZGVsYXkgc3RhcnRpbmcg
dGhlIHBsdWctaW4gaWYgd2UncmUgZ29pbmcgdG8ga2ljayBvZmYgdGhlIGxvYWQKKyAgICAvLyBv
dXJzZWx2ZXMuIE90aGVyd2lzZSwgdGhlIGxvYWRlciB3aWxsIHRyeSB0byBkZWxpdmVyIGRhdGEg
YmVmb3JlIHdlJ3ZlCisgICAgLy8gc3RhcnRlZCB0aGUgcGx1Zy1pbi4KKyAgICBpZiAoIW1fbG9h
ZE1hbnVhbGx5ICYmICFtX3BhcmVudEZyYW1lLT5wYWdlKCktPmNhblN0YXJ0TWVkaWEoKSkgewor
ICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIodGhpcyk7CisgICAgICAgIG1faXNXYWl0aW5nVG9TdGFydCA9IHRydWU7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBzdGFydCgpOworfQorCitib29sIFBsdWdp
blZpZXc6OnN0YXJ0KCkKK3sKKyAgICBpZiAobV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG1faXNXYWl0aW5nVG9TdGFydCA9IGZhbHNlOworCisgICAgUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkucmVnaXN0ZXJQbHVnaW4obV9pbnN0YW5jZSk7
CisKKyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVChtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIHsKKyAgICAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Cisg
ICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS51dGY4KCkuZGF0YSgp
LCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFt
VmFsdWVzLCBOVUxMKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAg
IExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcoMCk7CisgICAgfQorCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKSB7Cisg
ICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAg
UGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBsdWdpbiht
X2luc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faXNTdGFy
dGVkID0gdHJ1ZTsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgpICYmICFtX2xvYWRNYW51YWxs
eSkgeworICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1fdXJsKTsKKyAgICAgICAg
bG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7CisgICAgfQorCisgICAgbV9zdGF0dXMg
PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7CisKKyAgICBpZiAoIXBsYXRmb3JtU3Rh
cnQoKSkKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwor
CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6bWVkaWFDYW5TdGFydCgpCit7CisgICAgQVNTRVJUKCFtX2lzU3RhcnRlZCk7CisgICAg
aWYgKCFzdGFydCgpKQorICAgICAgICBwYXJlbnRGcmFtZSgpLT5sb2FkZXIoKS5jbGllbnQoKS5k
aXNwYXRjaERpZEZhaWxUb1N0YXJ0UGx1Z2luKHRoaXMpOworfQorCitQbHVnaW5WaWV3Ojp+UGx1
Z2luVmlldygpCit7CisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygp
Iik7CisKKyAgICBBU1NFUlQoIW1fbGlmZVN1cHBvcnRUaW1lci5pc0FjdGl2ZSgpKTsKKworICAg
IC8vIElmIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBwbHVnLWluLCB3ZSdsbCByZXR1cm4gZWFybHkg
aW4gb3VyIGNvbnN0cnVjdG9yLCBhbmQKKyAgICAvLyBtX2luc3RhbmNlIHdpbGwgYmUgMC4KKyAg
ICBpZiAobV9pbnN0YW5jZSkKKyAgICAgICAgaW5zdGFuY2VNYXAoKS5yZW1vdmUobV9pbnN0YW5j
ZSk7CisKKyAgICBpZiAobV9pc1dhaXRpbmdUb1N0YXJ0KQorICAgICAgICBtX3BhcmVudEZyYW1l
LT5kb2N1bWVudCgpLT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisKKyAgICBz
dG9wKCk7CisKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbU5hbWVzLCBtX3BhcmFtQ291bnQp
OworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtVmFsdWVzLCBtX3BhcmFtQ291bnQpOworCisg
ICAgcGxhdGZvcm1EZXN0cm95KCk7CisKKyAgICBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5jbGVh
bnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAgIGlmIChtX3BsdWdpbiAmJiAh
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4p
KSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnN0
b3AoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIExP
RyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c3RvcCgpOiBTdG9wcGluZyBwbHVnLWluICclcyciLCBt
X3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgSGFzaFNldDxSZWZQdHI8UGx1
Z2luU3RyZWFtPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7CisgICAgSGFzaFNldDxSZWZQdHI8UGx1
Z2luU3RyZWFtPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1zLmVuZCgpOworICAgIGZvciAoSGFz
aFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBpdCA9IHN0cmVhbXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5zdG9wKCk7CisgICAgICAgIGRp
c2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VSVChtX3N0cmVh
bXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVkID0gZmFsc2U7CisKKyAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZN
KCkpOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaWYgZGVmaW5lZChYUF9X
SU4pICYmICFQTEFURk9STShHVEspCisgICAgLy8gVW5zdWJjbGFzcyB0aGUgd2luZG93CisgICAg
aWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdO
RFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBS
T0MpOworCisgICAgICAgIGlmIChjdXJyZW50V25kUHJvYyA9PSBQbHVnaW5WaWV3V25kUHJvYykK
KyAgICAgICAgICAgIFNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dM
UF9XTkRQUk9DLCAoTE9OR19QVFIpbV9wbHVnaW5XbmRQcm9jKTsKKyAgICB9CisjZW5kaWYgLy8g
IWRlZmluZWQoWFBfV0lOKSB8fCBQTEFURk9STShHVEspCisjZW5kaWYgLy8gRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisKKyNpZiAhZGVmaW5lZChYUF9NQUNPU1gpCisgICAgLy8gQ2xlYXIg
dGhlIHdpbmRvdworICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKworICAgIGlmIChtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93ICYmICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSkpIHsKKyAgICAg
ICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3
aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Cisg
ICAgfQorCisjaWZkZWYgWFBfVU5JWAorICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxOUFNldFdpbmRv
d0NhbGxiYWNrU3RydWN0Kj4obV9ucFdpbmRvdy53c19pbmZvKTsKKyAgICBtX25wV2luZG93Lndz
X2luZm8gPSAwOworI2VuZGlmCisKKyNlbmRpZiAvLyAhZGVmaW5lZChYUF9NQUNPU1gpCisKKyAg
ICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS51bnJlZ2lzdGVyUGx1Z2lu
KG1faW5zdGFuY2UpOworCisgICAgTlBTYXZlZERhdGEqIHNhdmVkRGF0YSA9IDA7CisgICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKKyAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRl
c3Ryb3kobV9pbnN0YW5jZSwgJnNhdmVkRGF0YSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7CisgICAgTE9HX05QRVJST1IobnBFcnIpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgaWYg
KHNhdmVkRGF0YSkgeworICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBzYXZlIHRoaXMgZGF0YSBp
bnN0ZWFkIG9mIGp1c3QgZGlzY2FyZGluZyBpdAorICAgICAgICBpZiAoc2F2ZWREYXRhLT5idWYp
CisgICAgICAgICAgICBOUE5fTWVtRnJlZShzYXZlZERhdGEtPmJ1Zik7CisgICAgICAgIE5QTl9N
ZW1GcmVlKHNhdmVkRGF0YSk7CisgICAgfQorI2VuZGlmCisKKyAgICBtX2luc3RhbmNlLT5wZGF0
YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2lu
VmlldyogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0gcGx1Z2luVmll
dzsKK30KKworUGx1Z2luVmlldyogUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZpZXcoKQorewor
ICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMgY2hhciogY3JlYXRl
VVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5nIGNzdHIgPSBzdHIu
dXRmOCgpOworICAgIGNvbnN0IHNpemVfdCBjc3RyTGVuZ3RoID0gY3N0ci5sZW5ndGgoKTsKKyAg
ICBjaGFyKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYXN0TWFsbG9jKGNzdHJM
ZW5ndGggKyAxKSk7CisKKyAgICBtZW1jcHkocmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ckxlbmd0
aCk7CisgICAgcmVzdWx0W2NzdHJMZW5ndGhdID0gJ1wwJzsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBkb24ndCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlzIG5vIGxvbmdlciBw
YXJ0IG9mIGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKKyAgICAvLyBkaXNwbGF5ZWQgdW5sZXNz
IHRoZSBsb2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4KKyAgICBjb25z
dCBTdHJpbmcmIHRhcmdldEZyYW1lTmFtZSA9IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5m
cmFtZU5hbWUoKTsKKyAgICBpZiAobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2Fk
ZXIoKSAhPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpICYm
ICh0YXJnZXRGcmFtZU5hbWUuaXNOdWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLmZpbmQo
dGFyZ2V0RnJhbWVOYW1lKSAhPSBtX3BhcmVudEZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VS
ZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZh
U2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVy
ZUluZGljYXRvcihyZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpID8gRGVmaW5pdGVseVByb2Nl
c3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKworICAg
IGlmIChqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICAvLyBpZiB0aGlzIGlzIG5vdCBhIHRh
cmdldGVkIHJlcXVlc3QsIGNyZWF0ZSBhIHN0cmVhbSBmb3IgaXQuIG90aGVyd2lzZSwKKyAgICAg
ICAgLy8ganVzdCBwYXNzIGl0IG9mZiB0byB0aGUgbG9hZGVyCisgICAgICAgIGlmICh0YXJnZXRG
cmFtZU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBz
dHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBtX3BhcmVudEZyYW1lLmdldCgpLCBy
ZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNl
bmROb3RpZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpLCBwbHVnaW4oKS0+cGx1Z2lu
RnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9wbHVnaW4tPnF1aXJrcygpKTsKKyAgICAgICAgICAgIG1f
c3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgICAgIHN0cmVhbS0+c3RhcnQoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgZnJhbWUgaXMgb3VyIGZy
YW1lLCB3ZSBjb3VsZCBkZXN0cm95IHRoZQorICAgICAgICAgICAgLy8gUGx1Z2luVmlldywgc28g
d2UgcHJvdGVjdCBpdC4gPHJkYXI6Ly9wcm9ibGVtLzY5OTEyNTE+CisgICAgICAgICAgICBSZWZQ
dHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICAgICAgRnJhbWVMb2FkUmVx
dWVzdCBmcmFtZVJlcXVlc3QobV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVzdC0+ZnJhbWVMb2Fk
UmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpKTsKKyAgICAgICAgICAgIGZyYW1lUmVxdWVzdC5z
ZXRGcmFtZU5hbWUodGFyZ2V0RnJhbWVOYW1lKTsKKyAgICAgICAgICAgIGZyYW1lUmVxdWVzdC5z
ZXRTaG91bGRDaGVja05ld1dpbmRvd1BvbGljeSh0cnVlKTsKKyAgICAgICAgICAgIG1fcGFyZW50
RnJhbWUtPmxvYWRlcigpLmxvYWQoZnJhbWVSZXF1ZXN0KTsKKworICAgICAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBzZW50IHdoZW4gdGhl
IGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgICAgICBpZiAocmVxdWVzdC0+
c2VuZE5vdGlmaWNhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3Vy
cmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAg
ICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICAgICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOwor
ICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgICAgICAgICAgICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJnZXRlZCBKYXZhU2Ny
aXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMg
dGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBzdXJl
IGluIDo6bG9hZC4KKyAgICBBU1NFUlQodGFyZ2V0RnJhbWVOYW1lLmlzRW1wdHkoKSB8fCBtX3Bh
cmVudEZyYW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUpID09IG1fcGFyZW50RnJhbWUp
OworICAgIAorICAgIC8vIEV4ZWN1dGluZyBhIHNjcmlwdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2
aWV3IHRvIGJlIGRlc3Ryb3llZCwgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0byBpdC4KKyAgICBS
ZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdG9yKHRoaXMpOworICAgIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlIHJlc3VsdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmV4ZWN1dGVTY3JpcHQoanNT
dHJpbmcsIHJlcXVlc3QtPnNob3VsZEFsbG93UG9wdXBzKCkpOworCisgICAgaWYgKHRhcmdldEZy
YW1lTmFtZS5pc051bGwoKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOworCisgICAg
ICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBDU3Ry
aW5nIGNzdHI7CisgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RyaW5nKHNjcmlwdFN0YXRlLCByZXN1
bHRTdHJpbmcpKQorICAgICAgICAgICAgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7CisKKyAg
ICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gc3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVhdGUo
dGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJl
c291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5v
dGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2lu
LT5xdWlya3MoKSk7CisgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgc3Ry
ZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXF1ZXN0VVJMLCBjc3RyKTsKKyAgICB9Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQoKQoreworICAgIEFTU0VSVCghbV9y
ZXF1ZXN0cy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9pc0phdmFTY3JpcHRQYXVzZWQpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+IHJlcXVlc3QgPSBXVEY6Om1vdmUo
bV9yZXF1ZXN0c1swXSk7CisgICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7CisgICAgCisgICAgLy8g
U2NoZWR1bGUgYSBuZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBzaW5j
ZSB0aGUgY2FsbCB0bworICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBjYXVzZSB0aGUgcGx1Z2lu
IHZpZXcgdG8gYmUgZGVsZXRlZC4KKyAgICBpZiAoIW1fcmVxdWVzdHMuaXNFbXB0eSgpKQorICAg
ICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBwZXJmb3JtUmVxdWVz
dChyZXF1ZXN0LmdldCgpKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzY2hlZHVsZVJlcXVlc3Qo
c3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+IHJlcXVlc3QpCit7CisgICAgbV9yZXF1ZXN0
cy5hcHBlbmQoV1RGOjptb3ZlKHJlcXVlc3QpKTsKKworICAgIGlmICghbV9pc0phdmFTY3JpcHRQ
YXVzZWQpCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworTlBF
cnJvciBQbHVnaW5WaWV3Ojpsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJl
cXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICBB
U1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0g
IkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkg
PT0gIlBPU1QiKTsKKworICAgIFVSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnVybCgpOworICAgIAorICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gTlBFUlJfSU5WQUxJRF9VUkw7CisKKyAgICAvLyBEb24ndCBhbGxvdyByZXF1ZXN0cyB0byBi
ZSBtYWRlIHdoZW4gdGhlIGRvY3VtZW50IGxvYWRlciBpcyBzdG9wcGluZyBhbGwgbG9hZGVycy4K
KyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuZG9j
dW1lbnRMb2FkZXIoKTsKKyAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPmlzU3RvcHBpbmcoKSkK
KyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBjb25zdCBTdHJpbmcm
IHRhcmdldEZyYW1lTmFtZSA9IGZyYW1lTG9hZFJlcXVlc3QuZnJhbWVOYW1lKCk7CisgICAgU3Ry
aW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVybCk7CisKKyAgICBp
ZiAoIWpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgorICAg
ICAgICBpZiAoIW1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFi
b3V0VG9FeGVjdXRlU2NyaXB0KSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOworCisgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJl
cXVlc3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4u
CisgICAgICAgIGlmICghdGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpICYmIG1fcGFyZW50RnJhbWUt
PnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJlbnRGcmFtZSkKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgIH0gZWxzZSBpZiAoIW1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkRpc3BsYXkodXJsKSkKKyAg
ICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBzY2hlZHVsZVJlcXVlc3Qo
c3RkOjptYWtlX3VuaXF1ZTxQbHVnaW5SZXF1ZXN0PihmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90
aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBhcmVQb3B1cHNBbGxvd2VkKCkpKTsKKworICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKK30KKworc3RhdGljIFVSTCBtYWtlVVJMKGNvbnN0IFVSTCYgYmFz
ZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7CisgICAgU3RyaW5nIHVybFN0
cmluZyA9IHJlbGF0aXZlVVJMU3RyaW5nOworCisgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3Rl
cnMuCisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXG4nLCAiIik7CisgICAgdXJs
U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXHInLCAiIik7CisKKyAgICByZXR1cm4gVVJMKGJh
c2VVUkwsIHVybFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJMTm90aWZ5
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQor
eworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3BhcmVudEZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0
RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwo
KSwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVlLCBub3Rp
ZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRVUkwoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRS
ZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworCisg
ICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1l
TG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpwb3N0VVJM
Tm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4s
IGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAg
cmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRh
LCB0cnVlLCB0cnVlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpwb3N0VVJMKGNvbnN0IGNo
YXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1
ZiwgTlBCb29sIGZpbGUpCit7CisgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFk
ZXJzIHRvIGJlIHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCisg
ICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAwLCBmYWxz
ZSwgZmlsZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6bmV3U3RyZWFtKE5QTUlNRVR5cGUs
IGNvbnN0IGNoYXIqIC8qIHRhcmdldCAqLywgTlBTdHJlYW0qKikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7Cit9CisKK2ludDMyX3QgUGx1Z2luVmlldzo6d3JpdGUoTlBTdHJlYW0qLCBpbnQzMl90IC8q
IGxlbiAqLywgdm9pZCogLyogYnVmZmVyICovKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJyb3IgUGx1Z2luVmll
dzo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7Cisg
ICAgaWYgKCFzdHJlYW0gfHwgUGx1Z2luU3RyZWFtOjpvd25lckZvclN0cmVhbShzdHJlYW0pICE9
IG1faW5zdGFuY2UpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9S
OworCisgICAgUGx1Z2luU3RyZWFtKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8UGx1Z2lu
U3RyZWFtKj4oc3RyZWFtLT5uZGF0YSk7CisgICAgYnJvd3NlclN0cmVhbS0+Y2FuY2VsQW5kRGVz
dHJveVN0cmVhbShyZWFzb24pOworCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCit2
b2lkIFBsdWdpblZpZXc6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIGlmIChQ
YWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUo
KS5zZXRTdGF0dXNiYXJUZXh0KG1fcGFyZW50RnJhbWUuZ2V0KCksIFN0cmluZzo6ZnJvbVVURjgo
bWVzc2FnZSkpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlKE5QUFZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6
OnNldFZhbHVlKCVzKTogIiwgcHJldHR5TmFtZUZvck5QUFZhcmlhYmxlKHZhcmlhYmxlLCB2YWx1
ZSkuZGF0YSgpKTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QUFZwbHVn
aW5XaW5kb3dCb29sOgorICAgICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsKKyAgICAgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOworICAgIGNhc2UgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbDoK
KyAgICAgICAgbV9pc1RyYW5zcGFyZW50ID0gdmFsdWU7CisgICAgICAgIHJldHVybiBOUEVSUl9O
T19FUlJPUjsKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICBjYXNlIE5QUFZwbHVnaW5EcmF3
aW5nTW9kZWw6IHsKKyAgICAgICAgLy8gQ2FuIG9ubHkgc2V0IGRyYXdpbmcgbW9kZWwgaW5zaWRl
IE5QUF9OZXcoKQorICAgICAgICBpZiAodGhpcyAhPSBjdXJyZW50UGx1Z2luVmlldygpKQorICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICBOUERyYXdpbmdN
b2RlbCBuZXdEcmF3aW5nTW9kZWwgPSBOUERyYXdpbmdNb2RlbCh1aW50cHRyX3QodmFsdWUpKTsK
KyAgICAgICAgc3dpdGNoIChuZXdEcmF3aW5nTW9kZWwpIHsKKyAgICAgICAgY2FzZSBOUERyYXdp
bmdNb2RlbENvcmVHcmFwaGljczoKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb246CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBhc2tlZCBmb3IgdW5zdXBwb3J0
ZWQgZHJhd2luZyBtb2RlbDogJXMiLAorICAgICAgICAgICAgICAgICAgICBwcmV0dHlOYW1lRm9y
RHJhd2luZ01vZGVsKG5ld0RyYXdpbmdNb2RlbCkpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYXNlIE5QUFZwbHVnaW5F
dmVudE1vZGVsOiB7CisgICAgICAgIC8vIENhbiBvbmx5IHNldCBldmVudCBtb2RlbCBpbnNpZGUg
TlBQX05ldygpCisgICAgICAgIGlmICh0aGlzICE9IGN1cnJlbnRQbHVnaW5WaWV3KCkpCisgICAg
ICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgIE5QRXZlbnRNb2Rl
bCBuZXdFdmVudE1vZGVsID0gTlBFdmVudE1vZGVsKHVpbnRwdHJfdCh2YWx1ZSkpOworICAgICAg
ICBzd2l0Y2ggKG5ld0V2ZW50TW9kZWwpIHsKKyAgICAgICAgY2FzZSBOUEV2ZW50TW9kZWxDb2Nv
YToKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luIGFza2VkIGZvciB1bnN1cHBvcnRlZCBl
dmVudCBtb2RlbDogJXMiLAorICAgICAgICAgICAgICAgICAgICBwcmV0dHlOYW1lRm9yRXZlbnRN
b2RlbChuZXdFdmVudE1vZGVsKSk7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBkZWZpbmVkKFhQX01BQ09TWCkKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlk
YXRlVGltZXJGaXJlZCgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW52YWxp
ZFJlY3RzLnNpemUoKTsgaSsrKQorICAgICAgICBpbnZhbGlkYXRlUmVjdChtX2ludmFsaWRSZWN0
c1tpXSk7CisgICAgbV9pbnZhbGlkUmVjdHMuY2xlYXIoKTsKK30KKworCit2b2lkIFBsdWdpblZp
ZXc6OnB1c2hQb3B1cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0ZSkKK3sKKyAgICBtX3BvcHVwU3Rh
dGVTdGFjay5hcHBlbmQoc3RhdGUpOworfQorIAordm9pZCBQbHVnaW5WaWV3Ojpwb3BQb3B1cHNF
bmFibGVkU3RhdGUoKQoreworICAgIG1fcG9wdXBTdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKK30K
KworYm9vbCBQbHVnaW5WaWV3OjphcmVQb3B1cHNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcG9wdXBTdGF0ZVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1fcG9wdXBTdGF0
ZVN0YWNrLmxhc3QoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpzZXRKYXZhU2NyaXB0UGF1c2VkKGJvb2wgcGF1c2VkKQoreworICAgIGlmIChtX2lzSmF2YVNj
cmlwdFBhdXNlZCA9PSBwYXVzZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzSmF2YVNjcmlw
dFBhdXNlZCA9IHBhdXNlZDsKKworICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKyAgICAg
ICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAgIGVsc2UgaWYgKCFtX3JlcXVlc3RzLmlzRW1w
dHkoKSkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitOUE9iamVjdCogUGx1Z2luVmlldzo6bnBPYmpl
Y3QoKQoreworICAgIE5QT2JqZWN0KiBvYmplY3QgPSAwOworCisgICAgaWYgKCFtX2lzU3RhcnRl
ZCB8fCAhbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBPbiBXaW5kb3dzLCBjYWxsaW5nIEphdmEncyBOUE5f
R2V0VmFsdWUgY2FuIGFsbG93IHRoZSBtZXNzYWdlIGxvb3AgdG8KKyAgICAvLyBydW4sIGFsbG93
aW5nIGxvYWRpbmcgdG8gdGFrZSBwbGFjZSBvciBKYXZhU2NyaXB0IHRvIHJ1bi4gUHJvdGVjdCB0
aGUKKyAgICAvLyBQbHVnaW5WaWV3IGZyb20gZGVzdHJ1Y3Rpb24uIDxyZGFyOi8vcHJvYmxlbS82
OTc4ODA0PgorICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KHRoaXMpOworCisgICAgTlBF
cnJvciBucEVycjsKKyAgICB7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1
ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKKyAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19F
UlJPUikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorI2VuZGlm
CisKK1Bhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IFBsdWdpblZpZXc6OmJpbmRp
bmdJbnN0YW5jZSgpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlBP
YmplY3QqIG9iamVjdCA9IG5wT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKGhhc09uZVJlZigpKSB7CisgICAgICAgIC8vIFRoZSByZW5kZXJl
ciBmb3IgdGhlIFBsdWdpblZpZXcgd2FzIGRlc3Ryb3llZCBkdXJpbmcgdGhlIGFib3ZlIGNhbGws
IGFuZAorICAgICAgICAvLyB0aGUgUGx1Z2luVmlldyB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuIHRo
aXMgZnVuY3Rpb24gcmV0dXJucywgc28gd2UKKyAgICAgICAgLy8gcmV0dXJuIG51bGwuCisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0PiByb290ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY3JlYXRlUm9vdE9iamVjdCh0aGlz
KTsKKyAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGluc3RhbmNlID0gSlNDOjpC
aW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUob2JqZWN0LCByb290LnJlbGVhc2UoKSk7CisKKyAg
ICBfTlBOX1JlbGVhc2VPYmplY3Qob2JqZWN0KTsKKworICAgIHJldHVybiBpbnN0YW5jZS5yZWxl
YXNlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6ZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW0qIHN0cmVhbSkKK3sKKyAgICBBU1NFUlQo
bV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbSkpOworCisgICAgbV9zdHJlYW1zLnJlbW92ZShzdHJl
YW0pOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sK
KyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKwor
ICAgIHVuc2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBwYXJh
bUNvdW50ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioq
PihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJhbVZhbHVlcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXpl
KSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
IGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3ds
ZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UocGFyYW1OYW1lc1tpXSwgIndpbmRv
d2xlc3N2aWRlbyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHBhcmFt
TmFtZXNbaV0gPT0gInBsdWdpbnNwYWdlIikKKyAgICAgICAgICAgIG1fcGx1Z2luc1BhZ2UgPSBw
YXJhbVZhbHVlc1tpXTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1Db3VudF0gPSBjcmVh
dGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFtVmFsdWVzW3BhcmFt
Q291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisKKyAgICAgICAgcGFy
YW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291bnQ7Cit9CisK
K1BsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4sIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50
LCBjb25zdCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BhcmVudEZyYW1lKHBhcmVudEZyYW1lKQorICAgICwg
bV9wbHVnaW4ocGx1Z2luKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX2lzU3Rh
cnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1
c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmUGx1Z2lu
Vmlldzo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAgLCBtX2ludmFsaWRhdGVUaW1lcigqdGhpcywg
JlBsdWdpblZpZXc6OmludmFsaWRhdGVUaW1lckZpcmVkKQorICAgICwgbV9wb3BQb3B1cHNTdGF0
ZVRpbWVyKCp0aGlzLCAmUGx1Z2luVmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKQorICAg
ICwgbV9saWZlU3VwcG9ydFRpbWVyKCp0aGlzLCAmUGx1Z2luVmlldzo6bGlmZVN1cHBvcnRUaW1l
ckZpcmVkKQorICAgICwgbV9tb2RlKGxvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBOUF9FTUJFRCkK
KyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZhbHVlcygwKQorICAgICwgbV9t
aW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIG1faW5zdGFuY2UoMCkKKyNpZiBkZWZpbmVkKFhQX01B
Q09TWCkKKyAgICAsIG1faXNXaW5kb3dlZChmYWxzZSkKKyAgICAsIG1fdXBkYXRlZENvY29hVGV4
dElucHV0UmVxdWVzdGVkKGZhbHNlKQorICAgICwgbV9rZXlEb3duU2VudChmYWxzZSkKKyAgICAs
IG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyKDApCisjZWxzZQorICAgICwgbV9pc1dpbmRvd2VkKHRy
dWUpCisjZW5kaWYKKyAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKKyAgICAsIG1faGF2ZUlu
aXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9pc1dhaXRpbmdUb1N0YXJ0KGZhbHNlKQorI2lmIGRl
ZmluZWQoWFBfVU5JWCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFsc2UpCisjZW5kaWYKKyNpZiBP
UyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAsIG1fcGx1Z2lu
V25kUHJvYygwKQorICAgICwgbV9sYXN0TWVzc2FnZSgwKQorICAgICwgbV9pc0NhbGxpbmdQbHVn
aW5XbmRQcm9jKGZhbHNlKQorICAgICwgbV93bVByaW50SERDKDApCisgICAgLCBtX2hhdmVVcGRh
dGVkUGx1Z2luV2lkZ2V0KGZhbHNlKQorI2VuZGlmCisjaWYgUExBVEZPUk0oRUZMKQorICAgICwg
bV93aW5kb3coMCkKKyNlbmRpZgorI2lmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgICwgbV9jb250
ZXh0UmVmKDApCisjZW5kaWYKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UodHJ1ZSkKKyAg
ICAsIG1fZHJhd2FibGUoMCkKKyAgICAsIG1fdmlzdWFsKDApCisgICAgLCBtX2NvbG9ybWFwKDAp
CisgICAgLCBtX3BsdWdpbkRpc3BsYXkoMCkKKyNlbmRpZgorICAgICwgbV9sb2FkTWFudWFsbHko
bG9hZE1hbnVhbGx5KQorICAgICwgbV9tYW51YWxTdHJlYW0oMCkKKyAgICAsIG1faXNKYXZhU2Ny
aXB0UGF1c2VkKGZhbHNlKQorICAgICwgbV9oYXZlQ2FsbGVkU2V0V2luZG93KGZhbHNlKQorewor
ICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5O
b3RGaW5kUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9pbnN0YW5jZSA9
ICZtX2luc3RhbmNlU3RydWN0OworICAgIG1faW5zdGFuY2UtPm5kYXRhID0gdGhpczsKKyAgICBt
X2luc3RhbmNlLT5wZGF0YSA9IDA7CisKKyAgICBpbnN0YW5jZU1hcCgpLmFkZChtX2luc3RhbmNl
LCB0aGlzKTsKKworICAgIHNldFBhcmFtZXRlcnMocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwor
CisgICAgbWVtc2V0KCZtX25wV2luZG93LCAwLCBzaXplb2YobV9ucFdpbmRvdykpOworI2lmIGRl
ZmluZWQoWFBfTUFDT1NYKQorICAgIG1lbXNldCgmbV9ucENnQ29udGV4dCwgMCwgc2l6ZW9mKG1f
bnBDZ0NvbnRleHQpKTsKKyNlbmRpZgorCisgICAgcmVzaXplKHNpemUpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OmZvY3VzUGx1Z2luRWxlbWVudCgpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBt
X3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLnNl
dEZvY3VzZWRFbGVtZW50KG1fZWxlbWVudCwgbV9wYXJlbnRGcmFtZSk7CisgICAgZWxzZQorICAg
ICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkRWxlbWVudChtX2VsZW1l
bnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9s
b2FkTWFudWFsbHkpOworICAgIEFTU0VSVCghbV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51
YWxTdHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBtX3BhcmVudEZyYW1lLmdldCgp
LCBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0
KCksIGZhbHNlLCAwLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9wbHVn
aW4tPnF1aXJrcygpKTsKKyAgICBtX21hbnVhbFN0cmVhbS0+c2V0TG9hZE1hbnVhbGx5KHRydWUp
OworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVSZXNwb25zZSgwLCByZXNwb25zZSk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKK3sKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3Vj
Y2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9sb2FkTWFudWFsbHkp
OworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisgICAgCisgICAgbV9tYW51YWxTdHJlYW0t
PmRpZFJlY2VpdmVEYXRhKDAsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xv
YWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZE1h
bnVhbGx5KTsKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJl
YW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZGlkRmFpbChj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
bV9sb2FkTWFudWFsbHkpOworICAgIAorICAgIGlmIChtX21hbnVhbFN0cmVhbSkKKyAgICAgICAg
bV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOworfQorCit2b2lkIFBsdWdpblZpZXc6
OnNldENhbGxpbmdQbHVnaW4oYm9vbCBiKSBjb25zdAoreworICAgIGlmICghbV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrSGFzTW9kYWxNZXNzYWdlTG9vcCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChiKQorICAgICAgICArK3NfY2FsbGluZ1BsdWdpbjsKKyAgICBl
bHNlCisgICAgICAgIC0tc19jYWxsaW5nUGx1Z2luOworCisgICAgQVNTRVJUKHNfY2FsbGluZ1Bs
dWdpbiA+PSAwKTsKK30KKworYm9vbCBQbHVnaW5WaWV3Ojppc0NhbGxpbmdQbHVnaW4oKQorewor
ICAgIHJldHVybiBzX2NhbGxpbmdQbHVnaW4gPiAwOworfQorCitQYXNzUmVmUHRyPFBsdWdpblZp
ZXc+IFBsdWdpblZpZXc6OmNyZWF0ZShGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUm
IHNpemUsIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZh
bHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCit7CisgICAg
Ly8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZvciB0aGlzIE1JTUUgdHlwZSwgZmluZFBs
dWdpbiB3aWxsIHNlYXJjaCBmb3IKKyAgICAvLyBhIHBsdWdpbiBieSB0aGUgZmlsZSBleHRlbnNp
b24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBwYXNzIGEgbXV0YWJsZSBTdHJpbmcKKyAg
ICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAgUGx1Z2luUGFja2FnZSogcGx1
Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmws
IG1pbWVUeXBlQ29weSk7CisKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVz
aGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIGlmICghcGx1Z2luICYm
IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKSkgeworICAgICAg
ICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICAgICAgcGx1Z2luID0gUGx1Z2luRGF0YWJh
c2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5WaWV3KHBhcmVudEZyYW1lLCBz
aXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVU
eXBlQ29weSwgbG9hZE1hbnVhbGx5KSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZnJlZVN0cmlu
Z0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmlu
Z0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJl
ZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtM
aW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBidWZmZXIuc2l6
ZSgpID4gMCAmJiBidWZmZXJbMF0gPT0gJ1xuJzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9j
YXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQorewor
ICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBsZW5n
dGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aCAtIDQ7IGkrKykgeworICAgICAgICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0LiBJdCBzZW5kcyAi
XG5cbiIuCisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVzW2kgKyAxXSA9PSAn
XG4nKQorICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICAKKyAgICAgICAgLy8gUmV0
dXJucyB0aGUgcG9zaXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlmIGl0IGlzIHRoZSBm
aXJzdCBsaW5lLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0g
PT0gJ1xuJykgeworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgaWYgKGkgPT0gMikK
KyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ld
ID09ICdcbicpCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRGlyZWN0b3IuIEl0IHNl
bmRzICJcclxuXG4iICgzODgwMzg3KS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7Cisg
ICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAn
XG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIEZsYXNoLiBJdCBzZW5kcyAiXHJc
blxyXG4iICgzNzU4MTEzKS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hh
ciogZmluZEVPTChjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8v
IEFjY29yZGluZyB0byB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uIEVPTCBpcyBkZWZpbmVkIGFzCisg
ICAgLy8gYSBDUkxGIHBhaXIuIFVuZm9ydHVuYXRlbHksIHNvbWUgc2VydmVycyB3aWxsIHVzZSBM
RgorICAgIC8vIGluc3RlYWQuIFdvcnNlIHlldCwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIGEgY29t
YmluYXRpb24KKyAgICAvLyBvZiBib3RoIChlLmcuIDxoZWFkZXI+Q1JMRkxGPGJvZHk+KSwgc28g
ZmluZEVPTCBuZWVkcworICAgIC8vIHRvIGJlIG1vcmUgZm9yZ2l2aW5nLiBJdCB3aWxsIG5vdyBh
Y2NlcHQgQ1JMRiwgTEYgb3IKKyAgICAvLyBDUi4KKyAgICAvLworICAgIC8vIEl0IHJldHVybnMg
TlVMTCBpZiBFT0xGIGlzIG5vdCBmb3VuZCBvciBpdCB3aWxsIHJldHVybgorICAgIC8vIGEgcG9p
bnRlciB0byB0aGUgZmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVyLgorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xu
JykKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIGlmIChieXRlc1tpXSA9
PSAnXHInKSB7CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgc3Bhbm5pbmcgYnVmZmVy
IGJvdW5kcworICAgICAgICAgICAgLy8gKENSTEYgaXMgYWNyb3NzIHJlYWRzKS4gSWYgc28sIHdh
aXQgZm9yCisgICAgICAgICAgICAvLyBuZXh0IHJlYWQuCisgICAgICAgICAgICBpZiAoaSArIDEg
PT0gbGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByZXR1cm4g
Ynl0ZXMgKyBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBpbmxpbmUgU3RyaW5nIGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAg
U3RyaW5nIHJlc3VsdDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0
aCgpOyBpKyspIHsKKyAgICAgICAgVUNoYXIgYzsKKworICAgICAgICBpZiAoY2FwaXRhbGl6ZUNo
YXJhY3RlciAmJiBuYW1lW2ldID49ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykKKyAgICAgICAgICAg
IGMgPSB0b0FTQ0lJVXBwZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXpl
Q2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAg
ICAgYyA9IHRvQVNDSUlMb3dlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YyA9IG5hbWVbaV07CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAgICAg
Y2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNh
cGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMpOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhlYWRl
ck1hcCBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEo
KTsKKyAgICBjb25zdCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRUUEhl
YWRlck1hcCBoZWFkZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2Un
cmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5l
cworICAgIHdoaWxlICgoZW9sID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogbGluZSA9IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAt
IGJ5dGVzOworICAgICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVy
IGFmdGVyIHRoZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAgIGJ5
dGVzID0gZW9sICsgMTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0g
J1xuJykpCisgICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3Qg
cmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGlu
ZSk7CisgICAgICAgIGlmIChsaW5lTGVuZ3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFuayBs
aW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBlbHNlIGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAgICAg
ICAgICAgLy8gQ29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAg
IGlmIChsYXN0S2V5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhl
YWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGlu
dWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3Vy
cmVudFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBT
dHJpbmcgbmV3VmFsdWUobGluZSwgbGluZUxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBoZWFk
ZXJGaWVsZHMuc2V0KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJyYW5kIG5ldyBoZWFkZXIK
KyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAgICAgICAgZm9yIChjb2xvbiA9
IGxpbmU7ICpjb2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAg
ICAgICAgICAgLy8gZW1wdHkgbG9vcAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNv
bG9uID09IGVvbCkgCisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3Jl
IGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0YWxpemVSRkM4MjJIZWFkZXJG
aWVsZE5hbWUoU3RyaW5nKGxpbmUsIGNvbG9uIC0gbGluZSkpOworICAgICAgICAgICAgICAgIFN0
cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoY29sb24rKzsgY29sb24gIT0gZW9s
OyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqY29sb24gIT0gJyAnICYmICpj
b2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpCisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IFN0cmluZyhjb2xvbiwgZW9sIC0gY29sb24pOworCisgICAgICAgICAgICAg
ICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IG9sZFZhbHVlICsgIiwgIiArIHZhbHVlOworCisgICAgICAgICAgICAgICAgaGVhZGVyRmll
bGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6Omhh
bmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxl
biwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2Vu
ZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpCit7CisgICAgaWYgKCF1cmwgfHwgIWxl
biB8fCAhYnVmKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKworICAgIEZy
YW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwor
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYgKGZpbGUpIHsKKyAgICAgICAg
TlBFcnJvciByZWFkUmVzdWx0ID0gaGFuZGxlUG9zdFJlYWRGaWxlKGJ1ZmZlciwgbGVuLCBidWYp
OworICAgICAgICBpZihyZWFkUmVzdWx0ICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICAgICAg
cmV0dXJuIHJlYWRSZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShs
ZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOworICAgIH0KKwor
ICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9zdERh
dGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFsbG93SGVhZGVycykgeworICAg
ICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAgICAgICBwb3N0
RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShi
dWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhl
IGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAg
IGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRpb24p
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpIC0g
bG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRv
IHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAorICAgICAgICAg
ICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2ls
bCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRydW5j
YXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAgICAgICAgIFN0
cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldChIVFRQSGVhZGVyTmFtZTo6Q29u
dGVudExlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNOdWxs
KCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29udGVudExlbmd0aC50
b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5y
ZW1vdmUoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpOworCisgICAgICAgICAgICAgICAg
cG9zdERhdGEgKz0gbG9jYXRpb247CisgICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBk
YXRhTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX3BhcmVu
dEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOworICAgIGZyYW1lTG9hZFJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEhlYWRlckZpZWxkcyhXVEY6Om1vdmUoaGVhZGVy
RmllbGRzKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQ
Qm9keShGb3JtRGF0YTo6Y3JlYXRlKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0aCkpOworICAgIGZy
YW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisKKyAgICByZXR1cm4gbG9hZChm
cmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBpZiAoIWlzVmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKCFtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBh
dXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKm1fZWxlbWVudC0+cmVuZGVyZXIo
KSk7CisgICAgCisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OworICAgIGRpcnR5UmVjdC5t
b3ZlKHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBhZGRpbmdMZWZ0KCksIHJlbmRl
cmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGluZ1RvcCgpKTsKKyAgICByZW5kZXJlci5y
ZXBhaW50UmVjdGFuZ2xlKGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnRN
aXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gbnVsbFBsdWdpbkltYWdlOworICAg
IGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxsUGx1Z2luSW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKKworICAgIEludFJlY3QgaW1hZ2VS
ZWN0KGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpLCBudWxsUGx1Z2luSW1hZ2UtPndp
ZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0KCkpOworCisgICAgaW50IHhPZmZzZXQgPSAo
ZnJhbWVSZWN0KCkud2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAvIDI7CisgICAgaW50IHlP
ZmZzZXQgPSAoZnJhbWVSZWN0KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8gMjsK
KworICAgIGltYWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisgICAgaWYgKCFyZWN0
LmludGVyc2VjdHMoaW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+
c2F2ZSgpOworICAgIGNvbnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7CisgICAgY29udGV4
dC0+ZHJhd0ltYWdlKG51bGxQbHVnaW5JbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
aW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKK30KKworc3Rh
dGljIGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKCIKKyNpZiBk
ZWZpbmVkKFhQX01BQ09TWCkKKyAgICAgICAgIk1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7
IgorI2VsaWYgZGVmaW5lZChYUF9XSU4pCisgICAgICAgICJXaW5kb3dzOyBVOyBXaW5kb3dzIE5U
IDUuMTsiCisjZWxpZiBkZWZpbmVkKFhQX1VOSVgpCisvLyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEg
cGx1Z2lucyBpbiBNYWMuCisjaWYgT1MoREFSV0lOKSAmJiBQTEFURk9STShHVEspCisgICAgIlgx
MTsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2Vsc2UKKyAgICAiWDExOyBVOyBMaW51eCBpNjg2OyIK
KyNlbmRpZgorI2VuZGlmCisgICAgICAgICIgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAx
MCBGaXJlZm94LzIuMCI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDaHJvbWVVc2VyQWdl
bnQgPSAiTW96aWxsYS81LjAgKCIKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAiTWFjaW50
b3NoOyBVOyBJbnRlbCBNYWMgT1MgWDsiCisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICAiV2lu
ZG93czsgVTsgV2luZG93cyBOVCA1LjE7IgorI2VsaWYgZGVmaW5lZChYUF9VTklYKQorICAgIC8v
IFRoZSBHdGsgcG9ydCB1c2VzIFgxMSBwbHVnaW5zIGluIE1hYy4KKyNpZiBPUyhEQVJXSU4pICYm
IFBMQVRGT1JNKEdUSykKKyAgICAiWDExOyBVOyBJbnRlbCBNYWMgT1MgWDsiCisjZWxzZQorICAg
ICJYMTE7IFU7IExpbnV4IGk2ODY7IgorI2VuZGlmCisjZW5kaWYKKyAgICAiIEFwcGxlV2ViS2l0
LzUzNC4zNCAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xOS4wLjEwNTUuMSBTYWZhcmkvNTM0
LjM0IjsKKworY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkKK3sKKyAgICBpZiAo
bV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFn
ZW50KSkKKyAgICAgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7CisgICAgZWxzZSBpZiAobV9w
bHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNDaHJvbWVVc2VyQWdlbnQp
KQorICAgICAgICByZXR1cm4gQ2hyb21lVXNlckFnZW50OworICAgIGlmIChtX3VzZXJBZ2VudC5p
c051bGwoKSkKKyAgICAgICAgbV91c2VyQWdlbnQgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS51
c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7
Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK2NvbnN0IGNoYXIqIFBsdWdp
blZpZXc6OnVzZXJBZ2VudFN0YXRpYygpCit7CisgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7
Cit9CisjZW5kaWYKKworCit2b2lkIFBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJlZCgp
Cit7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjprZWVwQWxpdmUoKQorewor
ICAgIGlmIChtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcmVmKCk7CisgICAgbV9saWZlU3VwcG9ydFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30K
KworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQordm9pZCBQbHVnaW5WaWV3OjprZWVw
QWxpdmUoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBpbnN0YW5jZU1h
cCgpLmdldChpbnN0YW5jZSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisKKyAg
ICB2aWV3LT5rZWVwQWxpdmUoKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0
YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgTE9HKFBsdWdp
bnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyglcykiLCBwcmV0dHlOYW1lRm9yTlBOVmFy
aWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBOUEVycm9yIHJlc3VsdDsKKyAgICBpZiAo
cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUsICZyZXN1bHQpKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisK
K05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQq
IHZhbHVlKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWUoJXMpIiwg
cHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOworCisgICAgTlBFcnJv
ciByZXN1bHQ7CisgICAgaWYgKHBsYXRmb3JtR2V0VmFsdWUodmFyaWFibGUsIHZhbHVlLCAmcmVz
dWx0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChwbGF0Zm9ybUdldFZhbHVl
U3RhdGljKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6
IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9i
amVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisK
KyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBk
ZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25w
cnVudGltZS5odG1sPgorICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAg
ICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lk
KiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0Owor
CisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZQ
bHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2Vk
KQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBP
YmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgaWYgKG1fZWxlbWVudC0+
aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykg
fHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICBwbHVnaW5T
Y3JpcHRPYmplY3QgPSBtX2VsZW1lbnQtPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0
dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTog
PGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgor
ICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5P
YmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiop
dmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZwcml2YXRlTW9kZUJvb2w6
IHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKTsKKyAgICAgICAg
aWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAg
ICAgICooKE5QQm9vbCopdmFsdWUpID0gcGFnZS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKTsKKyAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKworc3RhdGljIEZyYW1l
KiBnZXRGcmFtZShGcmFtZSogcGFyZW50RnJhbWUsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAg
aWYgKHBhcmVudEZyYW1lKQorICAgICAgICByZXR1cm4gcGFyZW50RnJhbWU7CisgICAgCisgICAg
cmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKK30KKworTlBFcnJvciBQbHVnaW5W
aWV3OjpnZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciog
dXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCit7CisgICAgTE9HKFBsdWdpbnMsICJQ
bHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCglcykiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFi
bGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBOUEVycm9yIHJlc3VsdCA9IE5QRVJSX05PX0VS
Uk9SOworCisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVVJMVkNvb2tpZTog
eworICAgICAgICBVUkwgdShtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVy
bCk7CisgICAgICAgIGlmICh1LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgRnJhbWUqIGZyYW1l
ID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChm
cmFtZSkgeworICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0gY29va2ll
cyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSkudXRmOCgpOworICAgICAgICAgICAgICAgIGlmICghY29v
a2llU3RyLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBzaXplID0g
Y29va2llU3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNf
Y2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHNpemUrMSkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoKnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAwLCBz
aXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCp2YWx1ZSwgY29va2llU3Ry
LmRhdGEoKSwgc2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKmxlbiA9IHNpemU7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfT1VUX09GX01F
TU9SWV9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfSU5WQUxJRF9VUkw7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIE5QTlVSTFZQcm94eTogeworICAgICAgICBVUkwgdShtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCk7CisgICAgICAgIGlmICh1Lmlz
VmFsaWQoKSkgeworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50RnJh
bWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEZyYW1lTG9hZGVyKiBmcmFtZUxv
YWRlciA9IGZyYW1lID8gJmZyYW1lLT5sb2FkZXIoKSA6IDA7CisgICAgICAgICAgICBjb25zdCBO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IGZyYW1lTG9hZGVyID8gZnJhbWVMb2FkZXItPm5l
dHdvcmtpbmdDb250ZXh0KCkgOiAwOworICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBwcm94eVN0
ciA9IHRvU3RyaW5nKHByb3h5U2VydmVyc0ZvclVSTCh1LCBjb250ZXh0KSkudXRmOCgpOworICAg
ICAgICAgICAgaWYgKCFwcm94eVN0ci5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0
IGludCBzaXplID0gcHJveHlTdHIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgKnZhbHVlID0g
c3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoKnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldCgqdmFsdWUsIDAsIHNp
emUrMSk7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIHByb3h5U3RyLmRhdGEo
KSwgc2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICpsZW4gPSBzaXplOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9SOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURf
VVJMOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmVzdWx0
ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3
OjpnZXRWYWx1ZUZvclVSTDogJXMiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFi
bGUpLmRhdGEoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKKworTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJs
ZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3Qg
bGVuKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoJXMp
IiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOworCisgICAg
TlBFcnJvciByZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKworICAgIHN3aXRjaCAodmFyaWFibGUp
IHsKKyAgICBjYXNlIE5QTlVSTFZDb29raWU6IHsKKyAgICAgICAgVVJMIHUobV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOworICAgICAgICBpZiAodS5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIgPSBTdHJpbmc6OmZyb21VVEY4
KHZhbHVlLCBsZW4pOworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50
RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChmcmFtZSAmJiAhY29va2llU3Ry
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzZXRDb29raWVzKGZyYW1lLT5kb2N1bWVudCgp
LCB1LCBjb29raWVTdHIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IE5Q
RVJSX0lOVkFMSURfVVJMOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOUE5VUkxW
UHJveHk6CisgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwo
JXMpOiBQbHVnaW5zIGFyZSBOT1QgYWxsb3dlZCB0byBzZXQgcHJveHkgaW5mb3JtYXRpb24uIiwg
cHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOworICAgICAgICBy
ZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMOiAlcyIs
IHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKKyAgICAgICAg
cmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRBdXRoZW50aWNh
dGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3Qg
cG9ydCwgY29uc3QgY2hhciogLyogc2NoZW1lICovLCBjb25zdCBjaGFyKiAvKiByZWFsbSAqLywg
Y2hhcioqICAvKiB1c2VybmFtZSAqLywgdWludDMyX3QqIC8qIHVsZW4gKi8sIGNoYXIqKiAvKiBw
YXNzd29yZCAqLywgdWludDMyX3QqIC8qIHBsZW4gKi8pCit7CisjaWYgTE9HX0RJU0FCTEVECisg
ICAgVU5VU0VEX1BBUkFNKHByb3RvY29sKTsKKyAgICBVTlVTRURfUEFSQU0oaG9zdCk7CisgICAg
VU5VU0VEX1BBUkFNKHBvcnQpOworI2VuZGlmCisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3
OjpnZXRBdXRoZW50aWNhdGlvbkluZm86IHByb3RvY29sPSVzLCBob3N0PSVzLCBwb3J0PSVkIiwg
cHJvdG9jb2wsIGhvc3QsIHBvcnQpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3Ojpwcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQorewor
ICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0VmFsdWUgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+c2V0dmFsdWU7CisgICAgaWYgKCFzZXRWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
KyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgIE5QQm9vbCB2YWx1ZSA9IHByaXZhdGVC
cm93c2luZ0VuYWJsZWQ7CisgICAgc2V0VmFsdWUobV9pbnN0YW5jZSwgTlBOVnByaXZhdGVNb2Rl
Qm9vbCwgJnZhbHVlKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvd2lu
L1BsdWdpbnMvUGx1Z2luVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4NmJiOWQyODExNGFkZDg2OTRkNWNk
MTE3YTAzZDY2MGRkZmMwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpblZpZXcuaApAQCAtMCwwICsxLDQ0MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJp
c2hAZm9yd2FyZGJpYXMuaW4+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdfaAorI2RlZmluZSBQbHVnaW5WaWV3X2gKKworI2lu
Y2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2luY2x1ZGUgIlBs
dWdpblN0cmVhbS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorI2VuZGlmCisK
KyNpZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCit0eXBlZGVmIHN0cnVjdCBIV05EX18q
IEhXTkQ7Cit0eXBlZGVmIEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CisjZWxzZQordHlwZWRl
ZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HdGtTb2NrZXQgR3RrU29ja2V0OworI2VuZGlmCisK
KyNpZiBQTEFURk9STShYMTEpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93OwordHlwZWRl
ZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7Cisg
ICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFuY2U7CisgICAgfQor
fQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgRnJh
bWVWaWV3OworICAgIGNsYXNzIEltYWdlOworICAgIGNsYXNzIEhUTUxQbHVnSW5FbGVtZW50Owor
ICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgTW91c2VFdmVudDsKKyAgICBjbGFz
cyBVUkw7CisjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisg
ICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjsKKyNlbmRpZgorICAgIGNsYXNzIFBs
dWdpblBhY2thZ2U7CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdDsKKyAgICBjbGFzcyBQbHVnaW5T
dHJlYW07CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOworICAgIGNsYXNzIFdoZWVsRXZlbnQ7CisKKyAgICBlbnVtIFBsdWdpblN0YXR1cyB7Cisg
ICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCisgICAgICAgIFBsdWdpblN0YXR1
c0Nhbk5vdExvYWRQbHVnaW4sCisgICAgICAgIFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxs
eQorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0IHsKKyAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUGx1Z2luUmVxdWVzdCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
IHB1YmxpYzoKKyAgICAgICAgUGx1Z2luUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBm
cmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEs
IGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMpCisgICAgICAgICAgICA6IG1fZnJhbWVMb2FkUmVxdWVz
dChmcmFtZUxvYWRSZXF1ZXN0KQorICAgICAgICAgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0
YSkKKyAgICAgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pCisg
ICAgICAgICAgICAsIG1fc2hvdWxkQWxsb3dQb3B1cHMoc2hvdWxkQWxsb3dQb3B1cHMpIHsgfQor
ICAgIHB1YmxpYzoKKyAgICAgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVx
dWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQorICAgICAgICB2b2lk
KiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9CisgICAgICAgIGJv
b2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZE5vdGlmaWNhdGlvbjsg
fQorICAgICAgICBib29sIHNob3VsZEFsbG93UG9wdXBzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRBbGxvd1BvcHVwczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1lTG9hZFJlcXVlc3Qg
bV9mcmFtZUxvYWRSZXF1ZXN0OworICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7CisgICAgICAg
IGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgICAgICBib29sIG1fc2hvdWxkQWxsb3dQb3B1
cHM7CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpbk1hbnVhbExvYWRlciB7CisgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIH5QbHVnaW5NYW51YWxMb2FkZXIoKSB7fQorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KSA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgPSAwOworICAgIH07
CisKKyAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFBsdWdpblZpZXdCYXNlCisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUg
UGx1Z2luU3RyZWFtQ2xpZW50CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IFBsdWdpbk1hbnVhbExvYWRlcgorICAgICAgICAgICAgICAgICAgICAgLCBwcml2YXRlIE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lciB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQbHVnaW5WaWV3PiBjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwg
SFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHZpcnR1YWwgflBsdWdpblZp
ZXcoKTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBt
X3BsdWdpbi5nZXQoKTsgfQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAg
ICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CisjZW5kaWYKKwor
ICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHN0
YXRpYyBQbHVnaW5WaWV3KiBjdXJyZW50UGx1Z2luVmlldygpOworCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCgpOworI2VuZGlmCisg
ICAgICAgIFBhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGJpbmRpbmdJbnN0YW5j
ZSgpOworCisgICAgICAgIFBsdWdpblN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0
YXR1czsgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIC8vIE5Q
TiBmdW5jdGlvbnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9y
IGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7CisgICAgICAgIE5Q
RXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlE
YXRhKTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOwor
ICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRh
cmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQzMl90IHdyaXRlKE5QU3RyZWFt
KiBzdHJlYW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOworICAgICAgICBOUEVycm9yIGRl
c3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKKyNlbmRpZgor
ICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZXJBZ2VudFN0YXRpYygpOwor
I2VuZGlmCisgICAgICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgICAg
ICAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBFcnJvciBnZXRW
YWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAgICAgICBzdGF0aWMg
TlBFcnJvciBnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
OworICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFy
aWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKTsKKyAg
ICAgICAgTlBFcnJvciBzZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3QgbGVuKTsKKyAgICAgICAg
TlBFcnJvciBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0
IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25zdCBjaGFy
KiByZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hhcioqIHBhc3N3b3Jk
LCB1aW50MzJfdCogcGxlbik7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7
CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7CisjZW5kaWYKKyAgICAg
ICAgdm9pZCBmb3JjZVJlZHJhdygpOworICAgICAgICB2b2lkIHB1c2hQb3B1cHNFbmFibGVkU3Rh
dGUoYm9vbCBzdGF0ZSk7CisgICAgICAgIHZvaWQgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKKwor
ICAgICAgICBib29sIGFyZVBvcHVwc0FsbG93ZWQoKSBjb25zdDsKKworICAgICAgICB2b2lkIHNl
dEphdmFTY3JpcHRQYXVzZWQoYm9vbCk7CisKKyAgICAgICAgdm9pZCBwcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWQoYm9vbCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdp
blN0cmVhbSopOworICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcoUGx1Z2luU3Ry
ZWFtKiBzdHJlYW0pIHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9CisKKyAgICAgICAgLy8g
V2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHNob3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGNsaXBSZWN0Q2hhbmdlZCgpIG92ZXJyaWRlOworCisgICAgICAgIC8vIFRoaXMg
bWV0aG9kIGlzIHVzZWQgYnkgcGx1Z2lucyBvbiBhbGwgcGxhdGZvcm1zIHRvIG9idGFpbiBhIGNs
aXAgcmVjdCB0aGF0IGluY2x1ZGVzIGNsaXBzIHNldCBieSBXZWJDb3JlLAorICAgICAgICAvLyBl
LmcuLCBpbiBvdmVyZmxvdzphdXRvIHNlY3Rpb25zLiAgVGhlIGNsaXAgcmVjdHMgY29vcmRpbmF0
ZXMgYXJlIGluIHRoZSBjb250YWluaW5nIHdpbmRvdydzIGNvb3JkaW5hdGUgc3BhY2UuCisgICAg
ICAgIC8vIFRoaXMgY2xpcCBpbmNsdWRlcyBhbnkgY2xpcHMgdGhhdCB0aGUgd2lkZ2V0IGl0c2Vs
ZiBzZXRzIHVwIGZvciBpdHMgY2hpbGRyZW4uCisgICAgICAgIEludFJlY3Qgd2luZG93Q2xpcFJl
Y3QoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRQYXJlbnRWaXNpYmxlKGJvb2wpOworCisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1BsdWdpblZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAg
ICAgRnJhbWUqIHBhcmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRGcmFtZS5nZXQo
KTsgfQorCisgICAgICAgIHZvaWQgZm9jdXNQbHVnaW5FbGVtZW50KCk7CisKKyAgICAgICAgY29u
c3QgU3RyaW5nJiBwbHVnaW5zUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luc1BhZ2U7IH0K
KyAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5
cGU7IH0KKyAgICAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQor
CisjaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
ICAgICAgICBib29sIHBvcFVwQ29udGV4dE1lbnUoTlBNZW51Kik7CisjZW5kaWYKKworI2lmIE9T
KFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBzdGF0aWMg
TFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQ
QVJBTSk7CisgICAgICAgIExSRVNVTFQgd25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwg
V1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CisgICAgICAgIFdORFBST0MgcGx1Z2luV25k
UHJvYygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luV25kUHJvYzsgfQorI2VuZGlmCisKKyAgICAg
ICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsK
KyAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworICAgICAgICBz
dGF0aWMgYm9vbCBpc0NhbGxpbmdQbHVnaW4oKTsKKworICAgICAgICBib29sIHN0YXJ0KCk7CisK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3RhdGljIHZvaWQga2Vl
cEFsaXZlKE5QUCk7CisjZW5kaWYKKyAgICAgICAgdm9pZCBrZWVwQWxpdmUoKTsKKworI2lmIFBM
QVRGT1JNKFgxMSkKKyAgICAgICAgc3RhdGljIERpc3BsYXkqIGdldFBsdWdpbkRpc3BsYXkoRnJh
bWUqKTsKKyAgICAgICAgc3RhdGljIFdpbmRvdyBnZXRSb290V2luZG93KEZyYW1lKiBwYXJlbnRG
cmFtZSk7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdpblZpZXcoRnJhbWUq
IHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZSosIEhUTUxQbHVnSW5F
bGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Ym9vbCBsb2FkTWFudWFsbHkpOworCisgICAgICAgIHZvaWQgc2V0UGFyYW1ldGVycyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFs
dWVzKTsKKyAgICAgICAgYm9vbCBzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCk7CisgICAgICAg
IHZvaWQgaW5pdCgpOworICAgICAgICBib29sIHBsYXRmb3JtU3RhcnQoKTsKKyAgICAgICAgdm9p
ZCBzdG9wKCk7CisgICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisgICAgICAgIHN0YXRp
YyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJl
cXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAg
ICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOworICAgICAgICBO
UEVycm9yIGhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3Qg
bGVuLCBjb25zdCBjaGFyKiBidWYpOworI2VuZGlmCisgICAgICAgIHN0YXRpYyB2b2lkIGZyZWVT
dHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpOworICAgICAgICB2b2lk
IHNldENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRl
V2luZG93bGVzc1BsdWdpblJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwg
dm9pZCBtZWRpYUNhblN0YXJ0KCk7CisKKyNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKyAgICAgICAgdm9pZCBwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICBzdGF0aWMgSERD
IFdJTkFQSSBob29rZWRCZWdpblBhaW50KEhXTkQsIFBBSU5UU1RSVUNUKik7CisgICAgICAgIHN0
YXRpYyBCT09MIFdJTkFQSSBob29rZWRFbmRQYWludChIV05ELCBjb25zdCBQQUlOVFNUUlVDVCop
OworI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3Rh
dGljIGJvb2wgcGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7CisgICAgICAgIGJvb2wgcGxhdGZvcm1HZXRWYWx1
ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7Cisj
ZW5kaWYKKworICAgICAgICBSZWZQdHI8RnJhbWU+IG1fcGFyZW50RnJhbWU7CisgICAgICAgIFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiBtX3BsdWdpbjsKKyAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQq
IG1fZWxlbWVudDsKKyAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAgICAgICAgVVJMIG1fdXJs
OworICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0
PiBtX2ludmFsaWRSZWN0czsKKworICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJl
cXVlc3QqKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3Qoc3RkOjp1bmlxdWVfcHRyPFBs
dWdpblJlcXVlc3Q+KTsKKyAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZCgpOworICAgICAg
ICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKCk7CisgICAgICAgIFRpbWVyIG1fcmVxdWVzdFRp
bWVyOworICAgICAgICBUaW1lciBtX2ludmFsaWRhdGVUaW1lcjsKKworICAgICAgICB2b2lkIHBv
cFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpOworICAgICAgICBUaW1lciBtX3BvcFBvcHVwc1N0YXRl
VGltZXI7CisKKyAgICAgICAgdm9pZCBsaWZlU3VwcG9ydFRpbWVyRmlyZWQoKTsKKyAgICAgICAg
VGltZXIgbV9saWZlU3VwcG9ydFRpbWVyOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgICAgIGJvb2wgZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmKTsKKyNlbmRpZgorI2lm
IGRlZmluZWQoWFBfTUFDT1NYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAg
ICAgaW50MTZfdCBkaXNwYXRjaE5QQ29jb2FFdmVudChOUENvY29hRXZlbnQmKTsKKyAgICAgICAg
Ym9vbCBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZDsKKyAgICAgICAgYm9vbCBtX2tl
eURvd25TZW50OworICAgICAgICB1aW50MTZfdCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcjsKKyNl
bmRpZgorCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgICAgIHZvaWQgaGFuZGxlV2hlZWxF
dmVudChXaGVlbEV2ZW50Kik7CisjZW5kaWYKKyAgICAgICAgdm9pZCB1cGRhdGVQbHVnaW5XaWRn
ZXQoKTsKKyAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCopOworICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVu
dCopOworI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisgICAgICAgIHZvaWQgaGFuZGxlRm9jdXNJbkV2ZW50KCk7CisgICAgICAgIHZvaWQgaGFuZGxl
Rm9jdXNPdXRFdmVudCgpOworI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgICAgICB2b2lk
IHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMpOworICAgICAgICBQYXNzUmVmUHRyPElt
YWdlPiBzbmFwc2hvdCgpOworI2VuZGlmCisKKyAgICAgICAgaW50IG1fbW9kZTsKKyAgICAgICAg
aW50IG1fcGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1OYW1lczsKKyAgICAgICAg
Y2hhcioqIG1fcGFyYW1WYWx1ZXM7CisgICAgICAgIFN0cmluZyBtX3BsdWdpbnNQYWdlOworCisg
ICAgICAgIFN0cmluZyBtX21pbWVUeXBlOworICAgICAgICBXVEY6OkNTdHJpbmcgbV91c2VyQWdl
bnQ7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBQIG1faW5z
dGFuY2U7CisgICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2luZG93
IG1fbnBXaW5kb3c7CisjZW5kaWYKKworICAgICAgICBWZWN0b3I8Ym9vbCwgND4gbV9wb3B1cFN0
YXRlU3RhY2s7CisKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IG1fc3Ry
ZWFtczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0Pj4gbV9y
ZXF1ZXN0czsKKworICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKKyAgICAgICAgYm9vbCBtX2lz
VHJhbnNwYXJlbnQ7CisgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7CisgICAgICAgIGJv
b2wgbV9pc1dhaXRpbmdUb1N0YXJ0OworCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgICAgICBi
b29sIG1fbmVlZHNYRW1iZWQ7CisjZW5kaWYKKworI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxl
cldpbj4gbV9tZXNzYWdlVGhyb3R0bGVyOworICAgICAgICBXTkRQUk9DIG1fcGx1Z2luV25kUHJv
YzsKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKKyAgICAgICAgYm9vbCBtX2lzQ2Fs
bGluZ1BsdWdpblduZFByb2M7CisgICAgICAgIEhEQyBtX3dtUHJpbnRIREM7CisgICAgICAgIGJv
b2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKKyNlbmRpZgorCisjaWYgKFBMQVRGT1JNKEdU
SykgJiYgT1MoV0lORE9XUykpIHx8IFBMQVRGT1JNKEVGTCkKKyAgICAgICAgLy8gT24gTWFjIE9T
WCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhhdmUgaXRzIG93biBuYXRpdmUg
d2lkZ2V0LAorICAgICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNvbnRhaW5pbmcgd2luZG93IGFz
IGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5nLgorICAgICAgICBQbGF0Zm9y
bVBsdWdpbldpZGdldCBtX3dpbmRvdzsKK3B1YmxpYzoKKyAgICAgICAgUGxhdGZvcm1QbHVnaW5X
aWRnZXQgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdzsgfQor
ICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3JtUGx1Z2luV2lkZ2V0
IHdpZGdldCkgeyBtX3dpbmRvdyA9IHdpZGdldDsgfQorI2Vsc2UKK3B1YmxpYzoKKyAgICAgICAg
dm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBsdWdpbldpZGdldCB3aWRnZXQp
IHsgc2V0UGxhdGZvcm1XaWRnZXQod2lkZ2V0KTsgfQorICAgICAgICBQbGF0Zm9ybVBsdWdpbldp
ZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtV2lkZ2V0
KCk7IH0KKyNlbmRpZgorCitwcml2YXRlOgorCisjaWYgZGVmaW5lZChYUF9VTklYKSB8fCBQTEFU
Rk9STShHVEspCisgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworI2VsaWYgZGVm
aW5lZChYUF9NQUNPU1gpCisgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0OworICAg
ICAgICBDR0NvbnRleHRSZWYgbV9jb250ZXh0UmVmOworCisgICAgICAgIHZvaWQgc2V0TlBXaW5k
b3dJZk5lZWRlZCgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hh
bmdlOworICAgICAgICBQaXhtYXAgbV9kcmF3YWJsZTsKKyAgICAgICAgVmlzdWFsKiBtX3Zpc3Vh
bDsKKyAgICAgICAgQ29sb3JtYXAgbV9jb2xvcm1hcDsKKyAgICAgICAgRGlzcGxheSogbV9wbHVn
aW5EaXNwbGF5OworCisgICAgICAgIHZvaWQgaW5pdFhFdmVudChYRXZlbnQqIGV2ZW50KTsKKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gcGx1Z1Jl
bW92ZWRDYWxsYmFjayhHdGtTb2NrZXQqLCBQbHVnaW5WaWV3Kik7CisgICAgICAgIHN0YXRpYyB2
b2lkIHBsdWdBZGRlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdpblZpZXcqKTsKKyAgICAgICAg
dm9pZCB1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOworICAgICAgICBib29sIG1fcGx1
Z0FkZGVkOworICAgICAgICBJbnRSZWN0IG1fZGVsYXllZEFsbG9jYXRpb247CisjZW5kaWYKKwor
ICAgICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8g
YSB3aW5kb3dlZCBwbHVnLWluCisgICAgICAgIEludFJlY3QgbV93aW5kb3dSZWN0OyAvLyBPdXIg
d2luZG93IHJlY3QuCisKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKKyAgICAgICAgUmVm
UHRyPFBsdWdpblN0cmVhbT4gbV9tYW51YWxTdHJlYW07CisKKyAgICAgICAgYm9vbCBtX2lzSmF2
YVNjcmlwdFBhdXNlZDsKKworICAgICAgICBib29sIG1faGF2ZUNhbGxlZFNldFdpbmRvdzsKKwor
ICAgICAgICBzdGF0aWMgUGx1Z2luVmlldyogc19jdXJyZW50UGx1Z2luVmlldzsKKyAgICB9Owor
CitpbmxpbmUgUGx1Z2luVmlldyogdG9QbHVnaW5WaWV3KFdpZGdldCogd2lkZ2V0KQoreworICAg
IEFTU0VSVCghd2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3KCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KTsKK30KKworaW5saW5lIGNvbnN0IFBsdWdp
blZpZXcqIHRvUGx1Z2luVmlldyhjb25zdCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBBU1NFUlQo
IXdpZGdldCB8fCB3aWRnZXQtPmlzUGx1Z2luVmlldygpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgUGx1Z2luVmlldyo+KHdpZGdldCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBh
bnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9QbHVnaW5WaWV3KGNvbnN0
IFBsdWdpblZpZXcqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5MjEy
YmEyNDlmNDc3ZTAzNjkxOGVjMjYxMzI4ZTc2ZjdkZjlmODYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCkBAIC0wLDAgKzEsMTAx
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQml0
bWFwSW5mby5oIgorI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgor
I2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJMb2NhbFdpbmRv
d3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2
ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgor
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVk
ZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiY19pbnN0YW5jZS5oIgorI2lu
Y2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5j
bHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4K
KyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CisKKyNpZiBVU0UoQ0FJUk8pCisj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby13aW4zMi5o
PgorI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgSFdORCB3aW5k
b3dIYW5kbGVGb3JQYWdlQ2xpZW50KFBsYXRmb3JtUGFnZUNsaWVudCBjbGllbnQpCit7CisjaWYg
UExBVEZPUk0oR1RLKQorICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAoR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coY2xpZW50KSkKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhXTkQ+KEdES19XSU5ET1dfSFdORCh3aW5kb3cpKTsK
KyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgcmV0dXJuIGNsaWVudDsKKyNlbmRpZgorfQorCit1
c2luZyBKU0M6OkV4ZWNTdGF0ZTsKK3VzaW5nIEpTQzo6SlNMb2NrOwordXNpbmcgSlNDOjpKU09i
amVjdDsKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworY29uc3QgTFBD
V1NUUiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZSA9IEwiV2ViUGx1Z2luVmlldyI7Citjb25z
dCBMUENXU1RSIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0
eSI7CisKKy8vIFRoZSBjb2RlIHVzZWQgdG8gaG9vayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdp
bmFsbHkgY2FtZSBmcm9tCisvLyA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXBy
aW50Lmh0bWw+LgorLy8gQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5
dWFuLmNvbSkuCisKK3N0YXRpYyB1bnNpZ25lZCBiZWdpblBhaW50U3lzQ2FsbDsKK3N0YXRpYyBC
WVRFKiBiZWdpblBhaW50OworCitzdGF0aWMgdW5zaWduZWQgZW5kUGFpbnRTeXNDYWxsOworc3Rh
dGljIEJZVEUqIGVuZFBhaW50OworCit0eXBlZGVmIEhEQyAoV0lOQVBJICpQdHJCZWdpblBhaW50
KShIV05ELCBQQUlOVFNUUlVDVCopOwordHlwZWRlZiBCT09MIChXSU5BUEkgKlB0ckVuZFBhaW50
KShIV05ELCBjb25zdCBQQUlOVFNUUlVDVCopOworCisjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4
Nl82NCkgJiYgQ09NUElMRVIoTVNWQykKK2V4dGVybiAiQyIgSERDIF9fc3RkY2FsbCBfSEJlZ2lu
UGFpbnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNUIGxwUGFpbnQpOworZXh0ZXJuICJDIiBCT09M
IF9fc3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFp
bnQpOworI2VuZGlmCisKK0hEQyBXSU5BUEkgUGx1Z2luVmlldzo6aG9va2VkQmVnaW5QYWludChI
V05EIGhXbmQsIFBBSU5UU1RSVUNUKiBscFBhaW50KQoreworICAgIFBsdWdpblZpZXcqIHBsdWdp
blZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQ
bHVnaW5WaWV3UHJvcGVydHkpKTsKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5t
X3dtUHJpbnRIREMpIHsKKyAgICAgICAgLy8gV2UncmUgc2VjcmV0bHkgaGFuZGxpbmcgV01fUFJJ
TlRDTElFTlQsIHNvIHNldCB1cCB0aGUgUEFJTlRTVFJVQ1Qgc28KKyAgICAgICAgLy8gdGhhdCB0
aGUgcGx1Z2luIHdpbGwgcGFpbnQgaW50byB0aGUgSERDIHdlIHByb3ZpZGUuCisgICAgICAgIG1l
bXNldChscFBhaW50LCAwLCBzaXplb2YoUEFJTlRTVFJVQ1QpKTsKKyAgICAgICAgbHBQYWludC0+
aGRjID0gcGx1Z2luVmlldy0+bV93bVByaW50SERDOworICAgICAgICBHZXRDbGllbnRSZWN0KGhX
bmQsICZscFBhaW50LT5yY1BhaW50KTsKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXctPm1fd21Q
cmludEhEQzsKKyAgICB9CisKKyNpZiBDT01QSUxFUihHQ0MpCisgICAgSERDIHJlc3VsdDsKKyAg
ICBhc20gKCJwdXNoICAgICUyXG4iCisgICAgICAgICAicHVzaCAgICAlM1xuIgorICAgICAgICAg
ImNhbGwgICAgKiU0XG4iCisgICAgICAgICA6ICI9YSIgKHJlc3VsdCkKKyAgICAgICAgIDogImEi
IChiZWdpblBhaW50U3lzQ2FsbCksICJnIiAobHBQYWludCksICJnIiAoaFduZCksICJtIiAoYmVn
aW5QYWludCkKKyAgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAgKTsKKyAgICByZXR1cm4gcmVz
dWx0OworI2VsaWYgZGVmaW5lZChfTV9JWDg2KQorICAgIC8vIENhbGwgdGhyb3VnaCB0byB0aGUg
b3JpZ2luYWwgQmVnaW5QYWludC4KKyAgICBfX2FzbSAgIG1vdiAgICAgZWF4LCBiZWdpblBhaW50
U3lzQ2FsbAorICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50CisgICAgX19hc20gICBwdXNoICAg
IGhXbmQKKyAgICBfX2FzbSAgIGNhbGwgICAgYmVnaW5QYWludAorI2Vsc2UKKyAgICByZXR1cm4g
X0hCZWdpblBhaW50KGhXbmQsIGxwUGFpbnQpOworI2VuZGlmCit9CisKK0JPT0wgV0lOQVBJIFBs
dWdpblZpZXc6Omhvb2tlZEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxw
UGFpbnQpCit7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSkpOworICAg
IGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPm1fd21QcmludEhEQykgeworICAgICAgICAv
LyBXZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9QUklOVENMSUVOVCwgc28gd2UgZG9uJ3QgaGF2
ZSB0byBkbyBhbnkKKyAgICAgICAgLy8gY2xlYW51cC4KKyAgICAgICAgcmV0dXJuIFRSVUU7Cisg
ICAgfQorCisjaWYgQ09NUElMRVIoR0NDKQorICAgIEJPT0wgcmVzdWx0OworICAgIGFzbSAoInB1
c2ggICAlMlxuIgorICAgICAgICAgInB1c2ggICAlM1xuIgorICAgICAgICAgImNhbGwgICAqJTRc
biIKKyAgICAgICAgIDogIj1hIiAocmVzdWx0KQorICAgICAgICAgOiAiYSIgKGVuZFBhaW50U3lz
Q2FsbCksICJnIiAobHBQYWludCksICJnIiAoaFduZCksICJtIiAoZW5kUGFpbnQpCisgICAgICAg
ICk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbGlmIGRlZmluZWQgKF9NX0lYODYpCisgICAgLy8g
Q2FsbCB0aHJvdWdoIHRvIHRoZSBvcmlnaW5hbCBFbmRQYWludC4KKyAgICBfX2FzbSAgIG1vdiAg
ICAgZWF4LCBlbmRQYWludFN5c0NhbGwKKyAgICBfX2FzbSAgIHB1c2ggICAgbHBQYWludAorICAg
IF9fYXNtICAgcHVzaCAgICBoV25kCisgICAgX19hc20gICBjYWxsICAgIGVuZFBhaW50CisjZWxz
ZQorICAgIHJldHVybiBfSEVuZFBhaW50KGhXbmQsIGxwUGFpbnQpOworI2VuZGlmCit9CisKK3N0
YXRpYyB2b2lkIGhvb2soY29uc3QgY2hhciogbW9kdWxlLCBjb25zdCBjaGFyKiBwcm9jLCB1bnNp
Z25lZCYgc3lzQ2FsbElELCBCWVRFKiYgcFByb2MsIGNvbnN0IHZvaWQqIHBOZXdQcm9jKQorewor
ICAgIC8vIFNlZSA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+
IGZvciBhbiBleHBsYW5hdGlvbiBvZgorICAgIC8vIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLgor
CisgICAgSElOU1RBTkNFIGhNb2QgPSBHZXRNb2R1bGVIYW5kbGVBKG1vZHVsZSk7CisKKyAgICBw
UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90
PihHZXRQcm9jQWRkcmVzcyhoTW9kLCBwcm9jKSkpOworCisjaWYgQ09NUElMRVIoR0NDKSB8fCBk
ZWZpbmVkKF9NX0lYODYpCisgICAgaWYgKHBQcm9jWzBdICE9IDB4QjgpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYmUgcmVhZGluZyB0aGUgYnl0ZXMgb25lLWJ5
LW9uZSBpbnN0ZWFkIG9mIGRvaW5nIGFuCisgICAgLy8gdW5hbGlnbmVkIHJlYWQ/CisgICAgc3lz
Q2FsbElEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpOworCisgICAg
RFdPUkQgZmxPbGRQcm90ZWN0OworICAgIGlmICghVmlydHVhbFByb3RlY3QocFByb2MsIDUsIFBB
R0VfRVhFQ1VURV9SRUFEV1JJVEUsICZmbE9sZFByb3RlY3QpKQorICAgICAgICByZXR1cm47CisK
KyAgICBwUHJvY1swXSA9IDB4RTk7CisgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihw
UHJvYyArIDEpID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocE5ld1Byb2MpIC0gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4ocFByb2MgKyA1KTsKKworICAgIHBQcm9jICs9IDU7CisjZWxz
ZQorICAgIC8qIERpc2Fzc2VtYmx5IG9mIEJlZ2luUGFpbnQoKQorICAgIDAwMDAwMDAwNzc5RkM1
QjAgNEMgOEIgRDEgICAgICAgICBtb3YgICAgICAgICByMTAscmN4CisgICAgMDAwMDAwMDA3NzlG
QzVCMyBCOCAxNyAxMCAwMCAwMCAgIG1vdiAgICAgICAgIGVheCwxMDE3aAorICAgIDAwMDAwMDAw
Nzc5RkM1QjggMEYgMDUgICAgICAgICAgICBzeXNjYWxsCisgICAgMDAwMDAwMDA3NzlGQzVCQSBD
MyAgICAgICAgICAgICAgIHJldAorICAgIDAwMDAwMDAwNzc5RkM1QkIgOTAgICAgICAgICAgICAg
ICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUJDIDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAw
MDAwMDA3NzlGQzVCRCA5MCAgICAgICAgICAgICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QkUg
OTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUJGIDkwICAgICAgICAgICAg
ICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVDMCA5MCAgICAgICAgICAgICAgIG5vcAorICAgIDAw
MDAwMDAwNzc5RkM1QzEgOTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUMy
IDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVDMyA5MCAgICAgICAgICAg
ICAgIG5vcAorICAgICovCisgICAgLy8gQ2hlY2sgZm9yIHRoZSBzaWduYXR1cmUgYXMgaW4gdGhl
IGFib3ZlIGRpc2Fzc2VtYmx5CisgICAgRFdPUkQgZ3VhcmQgPSAweEI4RDE4QjRDOworICAgIGlm
ICgqcmVpbnRlcnByZXRfY2FzdDxEV09SRCo+KHBQcm9jKSAhPSBndWFyZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRFdPUkQgZmxPbGRQcm90ZWN0OworICAgIFZpcnR1YWxQcm90ZWN0KHBQcm9j
LCAxMiwgUEFHRV9FWEVDVVRFX1JFQURXUklURSwgJiBmbE9sZFByb3RlY3QpOworICAgIHBQcm9j
WzBdID0gMHg0ODsgICAgLy8gbW92IHJheCwgdGhpcworICAgIHBQcm9jWzFdID0gMHhiODsKKyAg
ICAqKF9faW50NjQqKShwUHJvYysyKSA9IChfX2ludDY0KXBOZXdQcm9jOworICAgIHBQcm9jWzEw
XSA9IDB4ZmY7ICAgLy8gam1wIHJheAorICAgIHBQcm9jWzExXSA9IDB4ZTA7CisjZW5kaWYKK30K
Kworc3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhv
b2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU5UU1RSVUNUKiksIEJPT0wgKFdJTkFQSSpob29rZWRF
bmRQYWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJVQ1QqKSkKK3sKKyAgICBzdGF0aWMgYm9vbCBo
YXZlSG9va2VkID0gZmFsc2U7CisgICAgaWYgKGhhdmVIb29rZWQpCisgICAgICAgIHJldHVybjsK
KyAgICBoYXZlSG9va2VkID0gdHJ1ZTsKKworICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBs
dWdpbnMgZG9uJ3Qgc2VlbSB0byByZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5ULCBzbworICAgIC8v
IHdlIGhvb2sgaW50byBCZWdpblBhaW50L0VuZFBhaW50IHRvIGFsbG93IHRoZWlyIG5vcm1hbCBX
TV9QQUlOVCBoYW5kbGluZworICAgIC8vIHRvIGRyYXcgaW50byBhIGdpdmVuIEhEQy4gTm90ZSB0
aGF0IHRoaXMgaG9va2luZyBhZmZlY3RzIHRoZSBlbnRpcmUKKyAgICAvLyBwcm9jZXNzLgorICAg
IGhvb2soInVzZXIzMi5kbGwiLCAiQmVnaW5QYWludCIsIGJlZ2luUGFpbnRTeXNDYWxsLCBiZWdp
blBhaW50LCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxw
dHJkaWZmX3Q+KGhvb2tlZEJlZ2luUGFpbnQpKSk7CisgICAgaG9vaygidXNlcjMyLmRsbCIsICJF
bmRQYWludCIsIGVuZFBhaW50U3lzQ2FsbCwgZW5kUGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3Qgdm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oaG9va2VkRW5kUGFpbnQpKSk7
CisKK30KKworc3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3KCkKK3sKKyAgICBzdGF0aWMg
Ym9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisgICAgaWYgKGhhdmVSZWdp
c3RlcmVkV2luZG93Q2xhc3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaGF2ZVJlZ2lz
dGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgV2ViQ29y
ZTo6c2V0SW5zdGFuY2VIYW5kbGUoKEhJTlNUQU5DRSkoR2V0TW9kdWxlSGFuZGxlKDApKSk7Cisj
ZW5kaWYKKworICAgIEFTU0VSVChXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpKTsKKworICAgIFdO
RENMQVNTRVggd2NleDsKKyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAg
ICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKKyAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1Nf
REJMQ0xLUzsKKyAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gRGVmV2luZG93UHJvYzsKKyAgICB3
Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKKyAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKKyAg
ICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKTsKKyAgICB3
Y2V4LmhJY29uICAgICAgICAgID0gMDsKKyAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1
cnNvcigwLCBJRENfQVJST1cpOworICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNP
TE9SX1dJTkRPVzsKKyAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKKyAgICB3Y2V4Lmxwc3pD
bGFzc05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWU7CisKKyAgICByZXR1cm4gISFS
ZWdpc3RlckNsYXNzRXgoJndjZXgpOworfQorCitMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6
OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFt
LCBMUEFSQU0gbFBhcmFtKQoreworICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSByZWludGVy
cHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVy
dHkpKTsKKworICAgIHJldHVybiBwbHVnaW5WaWV3LT53bmRQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQ
YXJhbSwgbFBhcmFtKTsKK30KKworc3RhdGljIGJvb2wgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0
dXJlKFVJTlQgbWVzc2FnZSkKK3sKKyAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICAgICAgY2Fz
ZSBXTV9MQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01fTUJVVFRPTlVQOgorICAgICAgICBjYXNl
IFdNX1JCVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9LRVlVUDoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBjb250ZW50c1RvTmF0aXZlV2luZG93KEZy
YW1lVmlldyogdmlldywgY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiB2aWV3
LT5jb250ZW50c1RvV2luZG93KHBvaW50KTsKK30KKworc3RhdGljIGlubGluZSBJbnRSZWN0IGNv
bnRlbnRzVG9OYXRpdmVXaW5kb3coRnJhbWVWaWV3KiB2aWV3LCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHJlY3QpOworfQorCitMUkVT
VUxUCitQbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIC8vIDxyZGFyOi8vNTcxMTEzNj4gU29tZXRp
bWVzIEZsYXNoIHdpbGwgY2FsbCBTZXRDYXB0dXJlIGJlZm9yZSBjcmVhdGluZworICAgIC8vIGEg
ZnVsbC1zY3JlZW4gd2luZG93IGFuZCB3aWxsIG5vdCByZWxlYXNlIGl0LCB3aGljaCBjYXVzZXMg
dGhlCisgICAgLy8gZnVsbC1zY3JlZW4gd2luZG93IHRvIG5ldmVyIHJlY2VpdmUgbW91c2UgZXZl
bnRzLiBXZSBzZXQvcmVsZWFzZSBjYXB0dXJlCisgICAgLy8gb24gbW91c2UgZG93bi91cCBiZWZv
cmUgc2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIHBsdWctaW4gdG8gcHJldmVudCB0aGF0LgorICAg
IHN3aXRjaCAobWVzc2FnZSkgeworICAgICAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgorICAgICAg
ICBjYXNlIFdNX01CVVRUT05ET1dOOgorICAgICAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgorICAg
ICAgICAgICAgOjpTZXRDYXB0dXJlKGhXbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV01fTEJVVFRPTlVQOgorICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKKyAgICAgICAg
Y2FzZSBXTV9SQlVUVE9OVVA6CisgICAgICAgICAgICA6OlJlbGVhc2VDYXB0dXJlKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSA9PSBtX2xhc3RNZXNzYWdl
ICYmCisgICAgICAgIG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRD
YWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHkpICYmIAorICAgICAgICBtX2lzQ2Fs
bGluZ1BsdWdpblduZFByb2MpCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKG1lc3NhZ2Ug
PT0gV01fVVNFUiArIDEgJiYKKyAgICAgICAgbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBs
dWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMpKSB7CisgICAgICAgIGlmICgh
bV9tZXNzYWdlVGhyb3R0bGVyKQorICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVyID0gYWRv
cHRQdHIobmV3IFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4odGhpcykpOworCisgICAgICAgIG1f
bWVzc2FnZVRocm90dGxlci0+YXBwZW5kTWVzc2FnZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG1fbGFzdE1lc3NhZ2UgPSBt
ZXNzYWdlOworICAgIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyA9IHRydWU7CisKKyAgICAvLyBJ
ZiB0aGUgcGx1Zy1pbiBkb2Vzbid0IGV4cGxpY2l0bHkgc3VwcG9ydCBjaGFuZ2luZyB0aGUgcG9w
LXVwIHN0YXRlLCB3ZSBlbmFibGUKKyAgICAvLyBwb3B1cHMgZm9yIGFsbCB1c2VyIGdlc3R1cmVz
LgorICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHBvcCB0aGUgc3RhdGUgaW4gYSB0aW1lciwg
YmVjYXVzZSB0aGUgRmxhc2ggcGx1Zy1pbiAKKyAgICAvLyBwb3BzIHVwIHdpbmRvd3MgaW4gcmVz
cG9uc2UgdG8gYSBwb3N0ZWQgbWVzc2FnZS4KKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQU19FTkFCTEVEX1NUQVRFICYmCisgICAgICAg
IGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShtZXNzYWdlKSAmJiAhbV9wb3BQb3B1cHNTdGF0
ZVRpbWVyLmlzQWN0aXZlKCkpIHsKKworICAgICAgICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRy
dWUpOworCisgICAgICAgIG1fcG9wUG9wdXBzU3RhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7Cisg
ICAgfQorCisgICAgaWYgKG1lc3NhZ2UgPT0gV01fUFJJTlRDTElFTlQpIHsKKyAgICAgICAgLy8g
TW9zdCAoYWxsPykgd2luZG93ZWQgcGx1Z2lucyBkb24ndCByZXNwb25kIHRvIFdNX1BSSU5UQ0xJ
RU5ULCBzbyB3ZQorICAgICAgICAvLyBjaGFuZ2UgdGhlIG1lc3NhZ2UgdG8gV01fUEFJTlQgYW5k
IHJlbHkgb24gb3VyIGhvb2tlZCB2ZXJzaW9ucyBvZgorICAgICAgICAvLyBCZWdpblBhaW50L0Vu
ZFBhaW50IHRvIG1ha2UgdGhlIHBsdWdpbiBkcmF3IGludG8gdGhlIGdpdmVuIEhEQy4KKyAgICAg
ICAgbWVzc2FnZSA9IFdNX1BBSU5UOworICAgICAgICBtX3dtUHJpbnRIREMgPSByZWludGVycHJl
dF9jYXN0PEhEQz4od1BhcmFtKTsKKyAgICB9CisKKyAgICAvLyBDYWxsIHRoZSBwbHVnLWluJ3Mg
d2luZG93IHByb2MuCisgICAgTFJFU1VMVCByZXN1bHQgPSA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1
Z2luV25kUHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworCisgICAgbV93bVBy
aW50SERDID0gMDsKKworICAgIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyA9IGZhbHNlOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRn
ZXQoKQoreworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1l
VmlldyYgZnJhbWVWaWV3ID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpOworCisgICAg
SW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xp
cFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZp
ZXcuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCku
c2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBS
ZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAgIGlm
IChwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmICghbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCB8
fCBtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBS
ZWN0KSkgeworCisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisKKyAgICAgICAgLy8g
VG8gcHJldmVudCBmbGFzaGVzIHdoaWxlIHNjcm9sbGluZywgd2UgZGlzYWJsZSBkcmF3aW5nIGR1
cmluZyB0aGUgd2luZG93CisgICAgICAgIC8vIHVwZGF0ZSBwcm9jZXNzIGJ5IGNsaXBwaW5nIHRo
ZSB3aW5kb3cgdG8gdGhlIHplcm8gcmVjdC4KKworICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0
ID0gIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJv
UmVjdFdoZW5TY3JvbGxpbmcpOworCisgICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgeworICAg
ICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwg
MCwgMCkpOworICAgICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSwgcmduLmxlYWsoKSwgRkFMU0UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0
byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1f
Y2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKKyAg
ICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFr
KCksIFRSVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX2hhdmVVcGRhdGVkUGx1Z2lu
V2lkZ2V0IHx8IG1fd2luZG93UmVjdCAhPSBvbGRXaW5kb3dSZWN0KQorICAgICAgICAgICAgOjpN
b3ZlV2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1fd2luZG93UmVjdC54KCksIG1fd2lu
ZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCks
IFRSVUUpOworCisgICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgeworICAgICAgICAgICAgYXV0
byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1f
Y2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKKyAg
ICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFr
KCksIFRSVUUpOworICAgICAgICB9CisKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CisKKyAgICAgICAgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCA9IHRydWU7CisgICAgfQorfQor
Cit2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKK3sKKyAgICBpZiAoZm9j
dXNlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBTZXRGb2N1cyhwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7CisKKyAg
ICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
TlBFdmVudCBucEV2ZW50OworCisgICAgbnBFdmVudC5ldmVudCA9IGZvY3VzZWQgPyBXTV9TRVRG
T0NVUyA6IFdNX0tJTExGT0NVUzsKKyAgICBucEV2ZW50LndQYXJhbSA9IDA7CisgICAgbnBFdmVu
dC5sUGFyYW0gPSAwOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OnNob3coKQoreworICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAg
aWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAg
IFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1dfU0hPV05BKTsKKworICAgIFdp
ZGdldDo6c2hvdygpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQoreworICAgIHNldFNl
bGZWaXNpYmxlKGZhbHNlKTsKKworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKQorICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCksIFNXX0hJREUpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK2Jvb2wgUGx1Z2luVmll
dzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIG5wRXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYm9v
bCBzaG91bGRQb3AgPSBmYWxzZTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
dmVyc2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgJiYgaXNXaW5kb3dzTWVz
c2FnZVVzZXJHZXN0dXJlKG5wRXZlbnQuZXZlbnQpKSB7CisgICAgICAgIHB1c2hQb3B1cHNFbmFi
bGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIHNob3VsZFBvcCA9IHRydWU7CisgICAgfQorCisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgIGJvb2wgYWNjZXB0
ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50
KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKworICAgIGlmIChzaG91bGRQb3ApIAor
ICAgICAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKKworICAgIHJldHVybiBhY2NlcHRlZDsK
K30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoSERDIGhk
YykKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIFNlbmRNZXNzYWdlKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJRU5ULCByZWludGVycHJldF9jYXN0PFdQQVJB
TT4oaGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElMRFJFTiB8IFBSRl9PV05FRCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3
YWJsZTsKKyAgICBtX25wV2luZG93LndpbmRvdyA9IGhkYzsKKworICAgIFdJTkRPV1BPUyB3aW5k
b3dwb3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICAgIEludFJlY3QgciA9IGNvbnRl
bnRzVG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8RnJhbWVWaWV3PihwYXJlbnQoKSksIGZyYW1lUmVj
dCgpKTsKKworICAgIHdpbmRvd3Bvcy54ID0gci54KCk7CisgICAgd2luZG93cG9zLnkgPSByLnko
KTsKKyAgICB3aW5kb3dwb3MuY3ggPSByLndpZHRoKCk7CisgICAgd2luZG93cG9zLmN5ID0gci5o
ZWlnaHQoKTsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICBucEV2ZW50LmV2ZW50ID0gV01f
V0lORE9XUE9TQ0hBTkdFRDsKKyAgICBucEV2ZW50LmxQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pigmd2luZG93cG9zKTsKKyAgICBucEV2ZW50LndQYXJhbSA9IDA7CisKKyAgICBk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCk7CisKKyAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0
KCkpOworCisgICAgbnBFdmVudC5ldmVudCA9IFdNX1BBSU5UOworICAgIG5wRXZlbnQud1BhcmFt
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhkYyk7CisKKyAgICAvLyBUaGlzIGlzIHN1
cHBvc2VkIHRvIGJlIGEgcG9pbnRlciB0byB0aGUgZGlydHkgcmVjdCwgYnV0IGl0IHNlZW1zIHRo
YXQgdGhlIEZsYXNoIHBsdWdpbgorICAgIC8vIGlnbm9yZXMgaXQgc28gd2UganVzdCBwYXNzIG51
bGwuCisgICAgbnBFdmVudC5sUGFyYW0gPSAwOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZl
bnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisjaWYg
IVVTRShXSU5HREkpCisgICAgQVNTRVJUKG1faXNXaW5kb3dlZCk7CisgICAgQVNTRVJUKGNvbnRl
eHQtPnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSk7CisKKyAgICBJbnRQb2ludCBsb2NhdGlv
bkluV2luZG93ID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNvbnZlcnRUb0NvbnRh
aW5pbmdXaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7CisKKyAgICBMb2NhbFdpbmRvd3ND
b250ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQsIGZyYW1lUmVjdCgpLCBmYWxzZSk7CisKKyNp
ZiBVU0UoQ0FJUk8pCisgICAgLy8gTXVzdCBmbHVzaCBkcmF3aW5ncyB1cCB0byB0aGlzIHBvaW50
IHRvIHRoZSBiYWNraW5nIG1ldGFmaWxlLCBvdGhlcndpc2UgdGhlCisgICAgLy8gcGx1Z2luIHJl
Z2lvbiB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggYW55IGNsZWFyIHJlZ2lvbnMgc3BlY2lmaWVk
IGluIHRoZQorICAgIC8vIGNhaXJvLWNvbnRyb2xsZWQgcG9ydGlvbnMgb2YgdGhlIHJlbmRlcmlu
Zy4KKyAgICBjYWlyb19zaG93X3BhZ2UoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkp
OworI2VuZGlmCisKKyAgICBIREMgaGRjID0gd2luZG93c0NvbnRleHQuaGRjKCk7CisgICAgWEZP
Uk0gb3JpZ2luYWxUcmFuc2Zvcm07CisgICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmb3JpZ2lu
YWxUcmFuc2Zvcm0pOworCisgICAgLy8gVGhlIHBsdWdpbiBleHBlY3RzIHRoZSBEQyB0byBiZSBp
biBjbGllbnQgY29vcmRpbmF0ZXMsIHNvIHdlIHRyYW5zbGF0ZQorICAgIC8vIHRoZSBEQyB0byBt
YWtlIHRoYXQgc28uCisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgp
OworICAgIGN0bS50cmFuc2xhdGUobG9jYXRpb25JbldpbmRvdy54KCksIGxvY2F0aW9uSW5XaW5k
b3cueSgpKTsKKyAgICBYRk9STSB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxYRk9STT4oY3RtLnRv
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisKKyAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ0
cmFuc2Zvcm0pOworCisgICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KGhkYyk7CisKKyAg
ICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmlnaW5hbFRyYW5zZm9ybSk7CisjZW5kaWYKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkgeworICAgICAgICAvLyBE
cmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdp
bkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBF
bnN1cmUgdGhhdCB3ZSBoYXZlIGNhbGxlZCBTZXRXaW5kb3cgYmVmb3JlIHdlIHRyeSB0byBwYWlu
dC4KKyAgICBpZiAoIW1faGF2ZUNhbGxlZFNldFdpbmRvdykKKyAgICAgICAgc2V0TlBXaW5kb3dS
ZWN0KGZyYW1lUmVjdCgpKTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyNpZiAhVVNFKFdJ
TkdESSkKKyAgICAgICAgaWYgKGNvbnRleHQtPnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSkK
KyAgICAgICAgICAgIHBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChjb250ZXh0LCByZWN0
KTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSW4gdGhlIEdUSyBh
bmQgUXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50
IHRvIHVzZSB0aGUgd2luZG93CisgICAgLy8gY29vcmRpbmF0ZXMuCisjaWYgUExBVEZPUk0oR1RL
KQorICAgIEludFJlY3QgcmVjdEluV2luZG93KHJlY3QpOworICAgIHJlY3RJbldpbmRvdy5pbnRl
cnNlY3QoZnJhbWVSZWN0KCkpOworI2Vsc2UKKyAgICBJbnRSZWN0IHJlY3RJbldpbmRvdyA9IGRv
d25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgp
KTsKKyNlbmRpZgorICAgIExvY2FsV2luZG93c0NvbnRleHQgd2luZG93c0NvbnRleHQoY29udGV4
dCwgcmVjdEluV2luZG93LCBtX2lzVHJhbnNwYXJlbnQpOworCisgICAgLy8gT24gU2FmYXJpL1dp
bmRvd3Mgd2l0aG91dCB0cmFuc3BhcmVuY3kgbGF5ZXJzIHRoZSBHcmFwaGljc0NvbnRleHQgcmV0
dXJucyB0aGUgSERDCisgICAgLy8gb2YgdGhlIHdpbmRvdyBhbmQgdGhlIHBsdWdpbiBleHBlY3Rz
IHRoYXQgdGhlIHBhc3NlZCBpbiBEQyBoYXMgd2luZG93IGNvb3JkaW5hdGVzLgorICAgIC8vIElu
IHRoZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGFsd2F5cyBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZm
ZXIgYW5kIHRoZXJlZm9yZSBuZWVkCisgICAgLy8gdG8gcHJlc2VydmUgdGhlIHRyYW5zbGF0aW9u
IHNldCBpbiBnZXRXaW5kb3dzQ29udGV4dC4KKyNpZiAhUExBVEZPUk0oR1RLKQorICAgIGlmICgh
Y29udGV4dC0+aXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKKyAgICAgICAgWEZPUk0gdHJhbnNm
b3JtOworICAgICAgICBHZXRXb3JsZFRyYW5zZm9ybSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRy
YW5zZm9ybSk7CisgICAgICAgIHRyYW5zZm9ybS5lRHggPSAwOworICAgICAgICB0cmFuc2Zvcm0u
ZUR5ID0gMDsKKyAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0od2luZG93c0NvbnRleHQuaGRjKCks
ICZ0cmFuc2Zvcm0pOworICAgIH0KKyNlbmRpZgorCisgICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRD
b250ZXh0KHdpbmRvd3NDb250ZXh0LmhkYygpKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChtX3Bs
dWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKworICAgIG5w
RXZlbnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUoKTsKKworICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9
IFdNX0tFWURPV047CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsKKyAgICB9IGVsc2UgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKKyAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX0NIQVI7CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsKKyAg
ICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsK
KyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWVVQOworICAgICAgICBucEV2ZW50LmxQYXJh
bSA9IDB4ODAwMDsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKKyAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKK30KKworZXh0ZXJuIGJvb2wgaWdub3JlTmV4dFNldEN1cnNvcjsK
Kwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQor
eworICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKKworICAgIE5QRXZlbnQg
bnBFdmVudDsKKworICAgIEludFBvaW50IHAgPSBjb250ZW50c1RvTmF0aXZlV2luZG93KGRvd25j
YXN0PEZyYW1lVmlldz4ocGFyZW50KCkpLCBJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQt
PnBhZ2VZKCkpKTsKKworICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55
KCkpOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKworICAgIGlmIChldmVudC0+Y3RybEtleSgp
KQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19DT05UUk9MOworICAgIGlmIChldmVudC0+
c2hpZnRLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfU0hJRlQ7CisKKyAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgfHwKKyAgICAg
ICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCAKKyAgICAg
ICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKKyAgICAg
ICAgbnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9WRTsKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0
b25Eb3duKCkpCisgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfTEJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQu
d1BhcmFtIHw9IE1LX01CVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQu
d1BhcmFtIHw9IE1LX1JCVVRUT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgfQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50KSB7CisgICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOworICAgICAgICBz
d2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAg
ICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50
ID0gV01fTUJVVFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChl
dmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBu
cEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVU
VE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAg
ICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vblZNKCkpOworICAgIC8vIEZJWE1FOiBDb25zaWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6
Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUuCisgICAgaWYgKGRpc3BhdGNoTlBFdmVudChu
cEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyNpZiAhUExB
VEZPUk0oR1RLKQorICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlz
IGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAKKyAgICAvLyBh
bmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRv
IHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCisgICAgaWdub3JlTmV4dFNldEN1cnNvciA9IHRy
dWU7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAg
IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3Io
KTsKKyNlbmRpZgorfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBw
YXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlmIChwYXJl
bnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElmIHRoZSBw
bHVnLWluIHdpbmRvdyBvciBvbmUgb2YgaXRzIGNoaWxkcmVuIGhhdmUgdGhlIGZvY3VzLCB3ZSBu
ZWVkIHRvIAorICAgICAgICAvLyBjbGVhciBpdCB0byBwcmV2ZW50IHRoZSB3ZWIgdmlldyB3aW5k
b3cgZnJvbSBiZWluZyBmb2N1c2VkIGJlY2F1c2UgdGhhdCBjYW4KKyAgICAgICAgLy8gdHJpZ2dl
ciBhIGxheW91dCB3aGlsZSB0aGUgcGx1Z2luIGVsZW1lbnQgaXMgYmVpbmcgZGV0YWNoZWQuCisg
ICAgICAgIEhXTkQgZm9jdXNlZFdpbmRvdyA9IDo6R2V0Rm9jdXMoKTsKKyAgICAgICAgaWYgKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNlZFdpbmRvdyB8fCA6OklzQ2hpbGQocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRvdykpCisgICAgICAgICAgICA6OlNldEZvY3Vz
KDApOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wg
dmlzaWJsZSkKK3sKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOworCisg
ICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSB7CisgICAg
ICAgIGlmICh2aXNpYmxlKQorICAgICAgICAgICAgU2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCBTV19TSE9XTkEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBTaG93V2luZG93
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJREUpOworICAgIH0KK30KKwordm9pZCBQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
IW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJbiB0aGUgR1RLIHBvcnQg
d2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUg
d2luZG93CisgICAgLy8gY29vcmRpbmF0ZXMuCisjIGlmIFBMQVRGT1JNKEdUSykKKyAgICBJbnRQ
b2ludCBwID0gcmVjdC5sb2NhdGlvbigpOworIyBlbHNlCisgICAgSW50UG9pbnQgcCA9IGRvd25j
YXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24o
KSk7CisjIGVuZGlmCisgICAgbV9ucFdpbmRvdy54ID0gcC54KCk7CisgICAgbV9ucFdpbmRvdy55
ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIG1f
bnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIG1fbnBXaW5kb3cuY2xpcFJl
Y3QucmlnaHQgPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20g
PSByZWN0LmhlaWdodCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdp
bmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOworCisgICAgICAgIG1faGF2ZUNhbGxlZFNldFdpbmRvdyA9IHRydWU7CisKKyAgICAg
ICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNT
RVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworCisgICAgICAgIFdORFBST0MgY3VycmVudFdu
ZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTFBfV05EUFJPQyk7CisgICAgICAgIGlmIChjdXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3
V25kUHJvYykKKyAgICAgICAgICAgIG1fcGx1Z2luV25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRv
d0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIp
UGx1Z2luVmlld1duZFByb2MpOworICAgIH0KK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5k
bGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnVmKQoreworICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICBpZiAo
ZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxl
bmFtZS5zdWJzdHJpbmcoOCk7CisKKyAgICAvLyBHZXQgZmlsZSBpbmZvCisgICAgV0lOMzJfRklM
RV9BVFRSSUJVVEVfREFUQSBhdHRyczsKKyAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeFcoZmls
ZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEdldEZpbGVFeElu
Zm9TdGFuZGFyZCwgJmF0dHJzKSA9PSAwKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1Rf
Rk9VTkQ7CisKKyAgICBpZiAoYXR0cnMuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRF
X0RJUkVDVE9SWSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAg
SEFORExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlVyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgRklMRV9SRUFEX0RBVEEsIEZJTEVfU0hBUkVfUkVBRCwg
MCwgT1BFTl9FWElTVElORywgMCwgMCk7CisgICAgCisgICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5W
QUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsK
KworICAgIGJ1ZmZlci5yZXNpemUoYXR0cnMubkZpbGVTaXplTG93KTsKKworICAgIERXT1JEIGJ5
dGVzUmVhZDsKKyAgICBpbnQgcmV0dmFsID0gUmVhZEZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRh
dGEoKSwgYXR0cnMubkZpbGVTaXplTG93LCAmYnl0ZXNSZWFkLCAwKTsKKworICAgIENsb3NlSGFu
ZGxlKGZpbGVIYW5kbGUpOworCisgICAgaWYgKHJldHZhbCA9PSAwIHx8IGJ5dGVzUmVhZCAhPSBh
dHRycy5uRmlsZVNpemVMb3cpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsK
KworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0
Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlLCB2b2lkKiwgTlBFcnJvciopCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBO
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCit7CisgICAg
c3dpdGNoICh2YXJpYWJsZSkgeworICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewor
ICAgICAgICAgICAgSFdORCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SFdORCo+KHZhbHVlKTsKKyAg
ICAgICAgICAgICp3ID0gd2luZG93SGFuZGxlRm9yUGFnZUNsaWVudChwYXJlbnQoKSA/IHBhcmVu
dCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpIDogMCk7CisgICAgICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczogeworICAgICAg
ICAgICAgTlBCb29sKiBmbGFnID0gcmVpbnRlcnByZXRfY2FzdDxOUEJvb2wqPih2YWx1ZSk7Cisg
ICAgICAgICAgICAqZmxhZyA9IFRSVUU7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9f
RVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3Ojpp
bnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChtX2lzV2luZG93
ZWQpIHsKKyAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsgcmVjdC54KCksIHJlY3QueSgpLCBy
ZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgfTsKKyAgICAgICAgOjpJbnZhbGlkYXRlUmVjdChwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLCAmaW52YWxpZFJlY3QsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAg
aWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0g
cmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKworICAgIGlmIChtX2lzV2lu
ZG93ZWQpIHsKKyAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsgci54KCksIHIueSgpLCByLm1h
eFgoKSwgci5tYXhZKCkgfTsKKyAgICAgICAgSW52YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgJmludmFsaWRSZWN0LCBGQUxTRSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0
ZSkpIHsKKyAgICAgICAgICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChyKTsKKyAgICAgICAgICAg
IGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICBtX2lu
dmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGludmFsaWRhdGVSZWN0KHIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3Ojpp
bnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3sKKyAgICBpZiAobV9pc1dpbmRvd2Vk
KQorICAgICAgICByZXR1cm47CisKKyAgICBSRUNUIHI7CisKKyAgICBpZiAoR2V0UmduQm94KHJl
Z2lvbiwgJnIpID09IDApIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgSW50UmVjdCByZWN0KEludFBvaW50KHIubGVmdCwgci50b3ApLCBJbnRT
aXplKHIucmlnaHQtci5sZWZ0LCByLmJvdHRvbS1yLnRvcCkpOworICAgIGludmFsaWRhdGVSZWN0
KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBpZiAo
bV9pc1dpbmRvd2VkKQorICAgICAgICA6OlVwZGF0ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKTsKKyAgICBlbHNlCisgICAgICAgIDo6VXBkYXRlV2luZG93KHdpbmRvd0hhbmRsZUZvclBh
Z2VDbGllbnQocGFyZW50KCkgPyBwYXJlbnQoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKSA6IDApKTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKK3sK
KyAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOworICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5T
dGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAg
ICAgICByZWdpc3RlclBsdWdpblZpZXcoKTsKKyAgICAgICAgc2V0VXBPZmZzY3JlZW5QYWludGlu
Z0hvb2tzKGhvb2tlZEJlZ2luUGFpbnQsIGhvb2tlZEVuZFBhaW50KTsKKworICAgICAgICBEV09S
RCBmbGFncyA9IFdTX0NISUxEOworICAgICAgICBpZiAoaXNTZWxmVmlzaWJsZSgpKQorICAgICAg
ICAgICAgZmxhZ3MgfD0gV1NfVklTSUJMRTsKKworICAgICAgICBIV05EIHBhcmVudFdpbmRvd0hh
bmRsZSA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5o
b3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKKyAgICAgICAgSFdORCB3aW5kb3cg
PSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lLCAwLCBmbGFn
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIHBh
cmVudFdpbmRvd0hhbmRsZSwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7CisKKyNp
ZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCisgICAgICAgIG1fd2luZG93ID0gd2luZG93
OworI2Vsc2UKKyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQod2luZG93KTsKKyNlbmRpZgorCisg
ICAgICAgIC8vIENhbGxpbmcgU2V0V2luZG93TG9uZ1B0ckEgaGVyZSBtYWtlcyB0aGUgd2luZG93
IHByb2MgQVNDSUksIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGF0IGxlYXN0CisgICAgICAgIC8vIHRo
ZSBTaG9ja3dhdmUgRGlyZWN0b3IgcGx1Zy1pbi4KKyNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2
XzY0KQorICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTFBfV05EUFJPQywgKExPTkdfUFRSKURlZldpbmRvd1Byb2NBKTsKKyNlbHNlCisgICAgICAg
IDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0Ms
IChMT05HKURlZldpbmRvd1Byb2NBKTsKKyNlbmRpZgorICAgICAgICBTZXRQcm9wKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCksIGtXZWJQbHVnaW5WaWV3UHJvcGVydHksIHRoaXMpOworCisgICAgICAg
IG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKyAgICAgICAgbV9ucFdpbmRv
dy53aW5kb3cgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2lu
ZG93LndpbmRvdyA9IDA7CisgICAgfQorCisgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7CisKKyAg
ICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RT
ZXRXaW5kb3dDYWxsKSkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgp
Cit7CisgICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBEZXN0cm95V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgIHNldFBsYXRm
b3JtUGx1Z2luV2lkZ2V0KDApOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBQbHVnaW5WaWV3Ojpz
bmFwc2hvdCgpCit7CisjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVVTRShXSU5HREkpCisgICAgYXV0
byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7CisKKyAgICBp
ZiAoIW1faXNXaW5kb3dlZCkgeworICAgICAgICAvLyBFbmFibGUgd29ybGQgdHJhbnNmb3Jtcy4K
KyAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYy5nZXQoKSwgR01fQURWQU5DRUQpOworCisgICAg
ICAgIFhGT1JNIHRyYW5zZm9ybTsKKyAgICAgICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgp
LCAmdHJhbnNmb3JtKTsKKworICAgICAgICAvLyBXaW5kb3dsZXNzIHBsdWctaW5zIGFzc3VtZSB0
aGF0IHRoZXkncmUgZHJhd2luZyBvbnRvIHRoZSB2aWV3J3MgREMuCisgICAgICAgIC8vIFRyYW5z
bGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBwbHVnLWluIGRyYXdzIGF0ICgwLCAwKS4KKyAg
ICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSku
Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSkubG9jYXRpb24oKTsKKyAgICAgICAgdHJhbnNm
b3JtLmVEeCA9IC1wb3NpdGlvbi54KCk7CisgICAgICAgIHRyYW5zZm9ybS5lRHkgPSAtcG9zaXRp
b24ueSgpOworICAgICAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMuZ2V0KCksICZ0cmFuc2Zvcm0p
OworICAgIH0KKworICAgIHZvaWQqIGJpdHM7CisgICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJ
bmZvOjpjcmVhdGVCb3R0b21VcChmcmFtZVJlY3QoKS5zaXplKCkpOworICAgIGF1dG8gaGJtcCA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9S
UywgJmJpdHMsIDAsIDApKTsKKworICAgIEhCSVRNQVAgaGJtcE9sZCA9IHN0YXRpY19jYXN0PEhC
SVRNQVA+KFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXAuZ2V0KCkpKTsKKworICAgIHBhaW50
SW50b1RyYW5zZm9ybWVkQ29udGV4dChoZGMuZ2V0KCkpOworCisgICAgU2VsZWN0T2JqZWN0KGhk
Yy5nZXQoKSwgaGJtcE9sZCk7CisKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShoYm1w
LmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9ucGFwaS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL25wYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQ5
MGE1MmI3YTFlN2M5NmU4ZGY0ZDg5OWJjZjgwMTk0OGVmZmQwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9ucGFwaS5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgIm5w
cnVudGltZV9pbnRlcm5hbC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gVGhl
IHBsdWdpbiB2aWV3IGlzIGFsd2F5cyB0aGUgbmRhdGEgb2YgdGhlIGluc3RhbmNlLC4gU29tZXRp
bWVzLCBwbHVnLWlucyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Utc3BlY2lmaWMgZnVuY3Rpb24KKy8v
IHdpdGggYSBOVUxMIGluc3RhbmNlLiBUbyB3b3JrYXJvdW5kIHRoaXMsIGNhbGwgdGhlIGxhc3Qg
cGx1Zy1pbiB2aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBwbHVnLWluLgorLy8gQ3VycmVudGx5
LCB0aGUgY3VycmVudCBwbHVnLWluIHZpZXcgaXMgb25seSBzZXQgYmVmb3JlIE5QUF9OZXcgaW4g
UGx1Z2luVmlldzo6c3RhcnQuCisvLyBUaGlzIHNwZWNpZmljYWxseSB3b3JrcyBhcm91bmQgRmxh
c2ggYW5kIFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5QUF9OZXcsIHRoZXkgY2FsbCBOUE5fVXNl
cmFnZW50IHdpdGggYSBOVUxMIGluc3RhbmNlLgorc3RhdGljIFBsdWdpblZpZXcqIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShOUFAgaW5zdGFuY2UpCit7CisgICAgaWYgKGluc3RhbmNlICYmIGluc3Rh
bmNlLT5uZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0
YW5jZS0+bmRhdGEpOworICAgIHJldHVybiBQbHVnaW5WaWV3OjpjdXJyZW50UGx1Z2luVmlldygp
OworfQorCit2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4g
bWFsbG9jKHNpemUpOworfQorCit2b2lkIE5QTl9NZW1GcmVlKHZvaWQqIHB0cikKK3sKKyAgICBm
cmVlKHB0cik7Cit9CisKK3VpbnQzMl90IE5QTl9NZW1GbHVzaCh1aW50MzJfdCkKK3sKKyAgICAv
LyBEbyBub3RoaW5nCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1JlbG9hZFBsdWdpbnMo
TlBCb29sIHJlbG9hZFBhZ2VzKQoreworICAgIFBhZ2U6OnJlZnJlc2hQbHVnaW5zKHJlbG9hZFBh
Z2VzKTsKK30KKworTlBFcnJvciBOUE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qLCBOUEJ5dGVSYW5n
ZSopCit7CisgICAgcmV0dXJuIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FCTEU7Cit9CisKK05QRXJy
b3IgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkxOb3RpZnkodXJsLCB0YXJnZXQsIG5vdGlmeURh
dGEpOworfQorCitOUEVycm9yIE5QTl9HZXRVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKS0+Z2V0VVJMKHVybCwgdGFyZ2V0KTsKK30KKworTlBFcnJvciBOUE5fUG9z
dFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFy
Z2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5v
dGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PnBvc3RVUkxOb3RpZnkodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhKTsK
K30KKworTlBFcnJvciBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29s
IGZpbGUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBv
c3RVUkwodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlKTsKK30KKworTlBFcnJvciBOUE5fTmV3
U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQs
IE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpLT5uZXdTdHJlYW0odHlwZSwgdGFyZ2V0LCBzdHJlYW0pOworfQorCitpbnQzMl90
IE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLCB2
b2lkKiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSktPndyaXRlKHN0cmVhbSwgbGVuLCBidWZmZXIpOworfQorCitOUEVycm9yIE5QTl9EZXN0cm95
U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQor
eworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5kZXN0cm95U3Ry
ZWFtKHN0cmVhbSwgcmVhc29uKTsKK30KKworY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAg
aW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5j
ZShpbnN0YW5jZSk7CisKKyAgICAgaWYgKCF2aWV3KQorICAgICAgICAgcmV0dXJuIFBsdWdpblZp
ZXc6OnVzZXJBZ2VudFN0YXRpYygpOworIAorICAgIHJldHVybiB2aWV3LT51c2VyQWdlbnQoKTsK
K30KKwordm9pZCBOUE5fU3RhdHVzKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSkK
K3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zdGF0dXMobWVzc2FnZSk7
Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWN0KE5QUCBpbnN0YW5jZSwgTlBSZWN0KiBpbnZh
bGlkUmVjdCkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKTsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgLy8gTlNQbHVnaW5XcmFwcGVy
LCBhIHBsdWdpbiB3cmFwcGVyIGJpbmFyeSB0aGF0IGFsbG93cyBydW5uaW5nIDMyLWJpdCBwbHVn
aW5zCisgICAgLy8gb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgdHlwaWNhbGx5IHVzZWQgaW4gWDEx
LCB3aWxsIHNvbWV0aW1lcyBnaXZlIHVzIGEgbnVsbCBOUFAgaGVyZS4KKyAgICBpZiAoIXZpZXcp
CisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIHZpZXctPmludmFsaWRhdGVSZWN0KGludmFs
aWRSZWN0KTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lvbihOUFAgaW5zdGFuY2UsIE5Q
UmVnaW9uIGludmFsaWRSZWdpb24pCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+aW52YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVnaW9uKTsKK30KKwordm9pZCBOUE5fRm9y
Y2VSZWRyYXcoTlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSktPmZvcmNlUmVkcmF3KCk7Cit9CisKK05QRXJyb3IgTlBOX0dldFZhbHVlKE5QUCBpbnN0
YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIFBsdWdpblZp
ZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOworCisgICAgIGlmICgh
dmlldykKKyAgICAgICAgIHJldHVybiBQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyh2YXJpYWJs
ZSwgdmFsdWUpOworCisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK05QRXJyb3IgTlBOX1NldFZhbHVlKE5Q
UCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgcmV0
dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVlKHZhcmlhYmxlLCB2
YWx1ZSk7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhRW52KCkKK3sKKyAgICAvLyBVbnN1cHBvcnRl
ZAorICAgIHJldHVybiAwOworfQorCit2b2lkKiBOUE5fR2V0SmF2YVBlZXIoTlBQKQoreworICAg
IC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1B1c2hQb3B1cHNF
bmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCkKK3sKKyAgICBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGVuYWJsZWQp
OworfQorCit2b2lkIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlKQorewor
ICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvcFBvcHVwc0VuYWJsZWRTdGF0
ZSgpOworfQorCitleHRlcm4gIkMiIHR5cGVkZWYgdm9pZCBQbHVnaW5UaHJlYWRBc3luY0NhbGxG
dW5jdGlvbih2b2lkKik7Cit2b2lkIE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwoTlBQIGluc3Rh
bmNlLCBQbHVnaW5UaHJlYWRBc3luY0NhbGxGdW5jdGlvbiBmdW5jLCB2b2lkKiB1c2VyRGF0YSkK
K3sKKyAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiB0eXBlIG9ubHkgZGlmZmVycyBmcm9tIE1haW5U
aHJlYWRGdW5jdGlvbiBieSBiZWluZyBleHRlcm4gIkMiLCB3aGljaCBkb2Vzbid0IGFmZmVjdCBj
YWxsaW5nIGNvbnZlbnRpb24gb24gYW55IGNvbXBpbGVycyB3ZSB1c2UuCisgICAgUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkuc2NoZWR1bGVDYWxsKGluc3RhbmNlLCByZWlu
dGVycHJldF9jYXN0PFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6Ok1haW5UaHJlYWRGdW5jdGlv
bio+KGZ1bmMpLCB1c2VyRGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX0dldFZhbHVlRm9yVVJMKE5Q
UCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hh
cioqIHZhbHVlLCB1aW50MzJfdCogbGVuKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZUZvclVSTCh2YXJpYWJsZSwgdXJsLCB2YWx1ZSwgbGVu
KTsKK30KKworTlBFcnJvciBOUE5fU2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxW
YXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWlu
dDMyX3QgbGVuKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5zZXRWYWx1ZUZvclVSTCh2YXJpYWJsZSwgdXJsLCB2YWx1ZSwgbGVuKTsKK30KKworTlBFcnJv
ciBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogcHJv
dG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1l
LCBjb25zdCBjaGFyKiByZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hh
cioqIHBhc3N3b3JkLCB1aW50MzJfdCogcGxlbikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0QXV0aGVudGljYXRpb25JbmZvKHByb3RvY29sLCBob3N0
LCBwb3J0LCBzY2hlbWUsIHJlYWxtLCB1c2VybmFtZSwgdWxlbiwgcGFzc3dvcmQsIHBsZW4pOwor
fQorCitOUEVycm9yIE5QTl9Qb3BVcENvbnRleHRNZW51KE5QUCBpbnN0YW5jZSwgTlBNZW51KiBt
ZW51KQoreworICAgIFVOVVNFRF9QQVJBTShpbnN0YW5jZSk7CisgICAgVU5VU0VEX1BBUkFNKG1l
bnUpOworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244098</attachid>
            <date>2015-01-06 14:52:53 -0800</date>
            <delta_ts>2015-01-07 12:01:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140133-20150106145257.patch</filename>
            <type>text/plain</type>
            <size>490262</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVlNTJkZmMxNjVjZmM2
NzM5MWM3MzVjZmU0MWU5ODlmNmNhYjdhYy4uZjAzYzVjMjdhZDM5ZGM1YjU0Y2FhMzQ0MzNlZDJh
NTlhZTkwNDgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0aGUgV2lu
ZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
OgorCisyMDE1LTAxLTA2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisK
ICAgICAgICAgVHJ5IHRvIGZpeCB0aGUgV2luZG93cyBidWlsZC4KIAogICAgICAgICAqIFdlYkNv
cmUudmN4cHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5MDg5NTNj
YWYyZTQzN2Q4NjI4OTNjNjQ4NTQ5MGYzODMyNTQ3MWZmLi4zYmFiZTM0MmE0MjVmNDMxNjgyY2Yy
ZGJhYzVhMTE5MWJhOWQyOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0
aGUgV2luZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvajoKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0
LnZjeHByb2ouZmlsdGVyczoKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlkZXIK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEyNgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKaW5kZXggNjNhNWNjNjg5NGY4NmU0N2YxYmU4YjhiOWJjMGM4NjgwMTli
NjdhZS4uNzAyMjc4YWI2NmRlYmMzOTU4ZWU5ODBjZjg3ZTI1NDE0YjAzZDgyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwpAQCAtMSw1ICsxLDMxMCBAQAogMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCisgICAgICAgIE1vdmUgdGhlIFdpbmRvd3Mgb25seSBwbHVn
LWluIGNvZGUgdG8gV2ViS2l0L3dpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQwMTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbHVnaW5zL1BhaW50SG9va3MuYXNtOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGFpbnRIb29rcy5hc20uCisgICAgICAgICogUGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6UGx1
Z2luRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVz
aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZURp
c2FibGVkUGx1Z2luRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6YWRk
RGlzYWJsZWRQbHVnaW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpk
ZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFk
VVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlVVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnNldFBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjphZGRQbHVnaW5Q
YXRoc0Zyb21SZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6Z2V0
UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVmVyc2lv
blN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlVmVyc2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6YWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3Jl
OjphZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6YWRk
SmF2YVBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpzYWZhcmlQbHVnaW5zRGly
ZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmll
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVj
dG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXR0
eU5hbWVGb3JEcmF3aW5nTW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvckV2
ZW50TW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUpOgorICAgICAgICAqIFBsdWdpbnMv
UGx1Z2luRGVidWcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGVidWcuaC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW46On5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vzc1F1ZXVl
ZE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNzYWdlKToKKyAgICAgICAgKiBQ
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaC4KKyAgICAgICAg
KiBQbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2th
Z2U6On5QbHVnaW5QYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZy
ZWVMaWJyYXJ5U29vbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmcmVlTGli
cmFyeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6Y29tcGFy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnVubG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZTo6ZGV0ZXJtaW5lUXVpcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0TGlzdEZyb21WYXJpYW50QXJncyk6CisgICAgICAgIChXZWJDb3JlOjptYWtlU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOUE5f
SW52b2tlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2luTG9hZGVkKToKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdp
blBhY2thZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5oLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnBhcmVudERpcmVj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjptb2R1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblBhY2thZ2U6Om1pbWVUb0Rlc2NyaXB0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjptaW1lVG9FeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
OjpwbHVnaW5GdW5jcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpxdWlya3Mp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6dmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmdWxsTUlNRURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blBhY2thZ2VIYXNoOjplcXVhbCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2lu
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmVyc2lvbkluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2U6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24pOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luUXVp
cmtTZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtT
ZXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblF1aXJrU2V0OjpQbHVnaW5RdWlya1NldCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5RdWlya1NldDo6YWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblF1aXJrU2V0Ojpjb250YWlucyk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6c3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5TdHJlYW06OlBsdWdpblN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJl
YW06On5QbHVnaW5TdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6bGFzdE1vZGlmaWVkRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OnN0YXJ0U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6b3duZXJGb3JT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblN0cmVhbTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjp3YW50
c0FsbFN0cmVhbXMpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luU3RyZWFtLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luU3RyZWFtQ2xpZW50Ojp+UGx1Z2luU3RyZWFtQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5TdHJlYW06OnNldExvYWRNYW51YWxseSk6CisgICAgICAgICogUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
dy5jcHAuCisgICAgICAgIChXZWJDb3JlOjppbnN0YW5jZU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNl
dEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpmcmFtZVJlY3RzQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
dGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjdXJy
ZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVVVEY4U3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNjaGVkdWxlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6Z2V0VVJMTm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpwb3N0VVJMTm90aWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBvc3RVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6bmV3U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRlc3Ryb3lTdHJlYW0p
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmludmFsaWRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnB1
c2hQb3B1cHNFbmFibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmFyZVBv
cHVwc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0SmF2YVNjcmlw
dFBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OlBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9jdXNQbHVnaW5F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0Q2FsbGluZ1BsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppc0Nh
bGxpbmdQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydHNXaXRoQmxhbmtMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2F0aW9u
QWZ0ZXJGaXJzdEJsYW5rTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRU9MKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlUG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZh
bGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50U3Rh
dGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjprZWVwQWxpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5WaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblJlcXVlc3Q6OlBsdWdpblJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUmVxdWVzdDo6ZnJhbWVMb2FkUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5SZXF1ZXN0Ojpub3RpZnlEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblJlcXVlc3Q6OnNlbmROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luUmVxdWVzdDo6c2hvdWxkQWxsb3dQb3B1cHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWFudWFsTG9hZGVyOjp+UGx1Z2luTWFudWFsTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdGF0dXMpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwYXJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbHVnaW5zUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjptaW1l
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cmwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cGx1Z2luV25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXRQbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjp0b1BsdWdp
blZpZXcpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcC4KKyAgICAgICAg
KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aG9va2VkQmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpob29r
ZWRFbmRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpob29rKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3Rl
clBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlld1du
ZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6aXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRlbnRzVG9OYXRpdmVXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFp
bnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnNuYXBzaG90KToKKyAgICAgICAgKiBQbHVnaW5zL25wYXBpLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwLgorICAgICAgICAocGx1Z2luVmlld0Zvcklu
c3RhbmNlKToKKyAgICAgICAgKE5QTl9NZW1BbGxvYyk6CisgICAgICAgIChOUE5fTWVtRnJlZSk6
CisgICAgICAgIChOUE5fTWVtRmx1c2gpOgorICAgICAgICAoTlBOX1JlbG9hZFBsdWdpbnMpOgor
ICAgICAgICAoTlBOX1JlcXVlc3RSZWFkKToKKyAgICAgICAgKE5QTl9HZXRVUkxOb3RpZnkpOgor
ICAgICAgICAoTlBOX0dldFVSTCk6CisgICAgICAgIChOUE5fUG9zdFVSTE5vdGlmeSk6CisgICAg
ICAgIChOUE5fUG9zdFVSTCk6CisgICAgICAgIChOUE5fTmV3U3RyZWFtKToKKyAgICAgICAgKE5Q
Tl9Xcml0ZSk6CisgICAgICAgIChOUE5fRGVzdHJveVN0cmVhbSk6CisgICAgICAgIChOUE5fVXNl
ckFnZW50KToKKyAgICAgICAgKE5QTl9TdGF0dXMpOgorICAgICAgICAoTlBOX0ludmFsaWRhdGVS
ZWN0KToKKyAgICAgICAgKE5QTl9JbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKE5QTl9Gb3Jj
ZVJlZHJhdyk6CisgICAgICAgIChOUE5fR2V0VmFsdWUpOgorICAgICAgICAoTlBOX1NldFZhbHVl
KToKKyAgICAgICAgKE5QTl9HZXRKYXZhRW52KToKKyAgICAgICAgKE5QTl9HZXRKYXZhUGVlcik6
CisgICAgICAgIChOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSk6CisgICAgICAgIChOUE5fUG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwp
OgorICAgICAgICAoTlBOX0dldFZhbHVlRm9yVVJMKToKKyAgICAgICAgKE5QTl9TZXRWYWx1ZUZv
clVSTCk6CisgICAgICAgIChOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKE5Q
Tl9Qb3BVcENvbnRleHRNZW51KToKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlk
ZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEy
NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc3MzBlOWE3NDI4YjM4ZjU2YjJmNjJlYjIxZWQ5
MGMxM2IyZWUzMzYuLmUxZDY0YmRhNjU2NTYyOGQ0ZGJmN2MyZjcyODlkOGUzMDQxOTJmMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjQyLDkgKzIyNDIsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGx1Z2lucy9ET01QbHVnaW4uY3BwCiAgICAgcGx1Z2lucy9ET01QbHVnaW5BcnJh
eS5jcHAKICAgICBwbHVnaW5zL1BsdWdpbkRhdGEuY3BwCi0gICAgcGx1Z2lucy9QbHVnaW5EZWJ1
Zy5jcHAKICAgICBwbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCi0gICAgcGx1
Z2lucy9QbHVnaW5TdHJlYW0uY3BwCiAKICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNw
cAogICAgIHJlbmRlcmluZy9CaWRpUnVuLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggNGY3NjY5MzY0MjBlZTBjMDM1ZGVhMTk4M2Ex
NDc3NzMwOThhYWEwOS4uNWZhN2IzZGI4NjQyOWZjOGE1NTQyYmJhZGY3YTkxZmE3NTdjODU4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBA
IC0xNzc1NCwxOCArMTc3NTQsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1xET01NaW1lVHlwZUFycmF5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcRE9NUGx1Z2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcRE9NUGx1Z2luQXJyYXkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1
Z2luc1xucGFwaS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRhdGEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVn
aW5EYXRhYmFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRlYnVnLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5TdHJlYW0uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5WaWV3LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsdWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2luLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luUGFja2FnZVdpbi5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5WaWV3
V2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbGxJbk9uZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdmdcU1ZHRm9udEZhY2VFbGVtZW50
LmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgpAQCAtMjEwMzEsMTUgKzIxMDIxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcbnBmdW5jdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcbnBydW50aW1lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRhdGEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGF0YWJhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGVidWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1xQbHVnaW5QYWNrYWdlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblF1aXJrU2V0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblN0cmF0ZWd5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblN0cmVhbS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQ
bHVnaW5WaWV3LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzdmdcQ29sb3JEaXN0YW5jZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Zn
XFNWR0FFbGVtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZjk1OWI2MzRlM2UxNjFhZGY3
MDZhNGYwMzA3Y2YxMzYzNTQ3Mzk4Mi4uMjIzMDg0NjM2NWJjNDdjOWIzY2E2OGFlZWM4MTIxZDVh
ZmY1MGVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNDU2OSw0MiArNDU2OSwxMiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xET01QbHVnaW5BcnJheS5jcHAiPgogICAgICAgPEZp
bHRlcj5wbHVnaW5zPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbHVnaW5zXG5wYXBpLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luRGF0YS5jcHAiPgogICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpbkRh
dGFiYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGVidWcuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5jcHAiPgot
ICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblN0cmVhbS5jcHAiPgotICAgICAgPEZp
bHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2lu
czwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGx1Z2luc1x3aW5cUGx1Z2luRGF0YWJhc2VXaW4uY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2lu
c1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIj4KLSAgICAgIDxG
aWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblBhY2thZ2VXaW4uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblZpZXdXaW4uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbGxJbk9uZS5jcHAiPgogICAgICAgPEZpbHRlcj5y
ZW5kZXJpbmdcc3ZnPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xMTYxMywzMyArMTE1
ODMsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YS5o
Ij4KICAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1
Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiPgogICAgICAgPEZpbHRlcj5w
bHVnaW5zPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luUXVpcmtTZXQuaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
U3RyYXRlZ3kuaCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyZWFtLmgi
PgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuaCI+Ci0gICAgICA8Rmls
dGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCI+Ci0gICAg
ICA8RmlsdGVyPnBsdWdpbnNcd2luPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcQ29sb3JEaXN0YW5jZS5oIj4KICAgICAgIDxGaWx0ZXI+
cmVuZGVyaW5nXHN2ZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNjZiMGMzNDM4NTc3ODViYjY4MzQxMjA4YTA3MzY0M2U1
ZjIwMzEwYS4uMDExOGM1MDMxMzk2MGE0ZjU2MmRiMjE4ZGZlOGE5Mzk0YmZkODdmMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC05MSw3ICs5MSw2IEBACiAjaW5jbHVk
ZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5o
IgogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgog
I2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgog
I2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAppbmRleCBkMjcyNDU4Y2EwM2ZiZWM1NzE2
MjNlZTRhYTFiMjNkYmVjMzNiNzA1Li4xOTkzOGQyMzE1ZGFiYzg4OGY5NDFmOGM5MWMwYjBlZjI3
ODBmYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
UGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYTJjZWUyZGE3MmNhZjE0Yjc1Y2YzNmZh
YWQxNGI3NWU1NzQ4NTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlLmgiCi0KLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlVSTC5oIgot
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01F
VEFEQVRBX0NBQ0hFKQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNlbmRpZgotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4g
PiBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKLXN0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bVBlcnNpc3RlbnRQbHVn
aW5NZXRhZGF0YUNhY2hlU2l6ZSA9IDMyNzY4OwotCi1zdGF0aWMgYm9vbCBnUGVyc2lzdGVudFBs
dWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7Ci0KLVN0cmluZyYgcGVyc2lzdGVudFBsdWdpbk1l
dGFkYXRhQ2FjaGVQYXRoKCkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBjYWNoZVBhdGgsICgpKTsKLSAgICByZXR1cm4gY2FjaGVQYXRoOwotfQotI2VuZGlm
Ci0KLVBsdWdpbkRhdGFiYXNlOjpQbHVnaW5EYXRhYmFzZSgpCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICA6IG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJ
c0xvYWRlZChmYWxzZSkKLSNlbmRpZgotewotfQotCi1QbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0
YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSkKLXsKLSAgICBzdGF0aWMgUGx1
Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAwOwotCi0gICAgaWYgKCFwbHVnaW5zKSB7Ci0gICAgICAg
IHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2U7Ci0KLSAgICAgICAgaWYgKHBvcHVsYXRlKSB7
Ci0gICAgICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5EaXJlY3RvcmllcyhQbHVnaW5EYXRhYmFz
ZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkpOwotICAgICAgICAgICAgcGx1Z2lucy0+cmVm
cmVzaCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpbnM7Ci19Ci0KLWJv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZy
ZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgcmV0dXJuIChyZWZy
ZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7Ci19Ci0K
LXZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5KQotewotICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9y
eSk7Ci0gICAgcmVmcmVzaCgpOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkK
LXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIGlmICgh
bV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkKQotICAgICAgICBsb2FkUGVyc2lzdGVu
dE1ldGFkYXRhQ2FjaGUoKTsKLSNlbmRpZgotICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZh
bHNlOwotCi0gICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBsdWdpblNl
dCBwbHVnaW5zVG9VbmxvYWQ7Ci0gICAgICAgIGdldERlbGV0ZWRQbHVnaW5zKHBsdWdpbnNUb1Vu
bG9hZCk7Ci0KLSAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKLSAgICAgICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBwbHVnaW5zVG9VbmxvYWQuZW5kKCk7Ci0gICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICByZW1vdmUoaXQtPmdldCgpKTsKLQotICAgICAg
ICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCk7Ci0gICAgfQot
Ci0gICAgSGFzaFNldDxTdHJpbmc+IHBhdGhzOwotICAgIGdldFBsdWdpblBhdGhzSW5EaXJlY3Rv
cmllcyhwYXRocyk7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBwYXRoc1dpdGhUaW1l
czsKLQotICAgIC8vIFdlIHNob3VsZCBvbmx5IHNraXAgdW5jaGFuZ2VkIGZpbGVzIGlmIHdlIGRp
ZG4ndCByZW1vdmUgYW55IHBsdWdpbnMgYWJvdmUuIElmIHdlIGRpZCByZW1vdmUKLSAgICAvLyBh
bnkgcGx1Z2lucywgd2UgbmVlZCB0byBsb29rIGF0IGV2ZXJ5IHBsdWdpbiBmaWxlIHNvIHRoYXQs
IGUuZy4sIGlmIHRoZSB1c2VyIGhhcyB0d28gdmVyc2lvbnMKLSAgICAvLyBvZiBSZWFsUGxheWVy
IGluc3RhbGxlZCBhbmQganVzdCByZW1vdmVkIHRoZSBuZXdlciBvbmUsIHdlJ2xsIHBpY2sgdXAg
dGhlIG9sZGVyIG9uZS4KLSAgICBib29sIHNob3VsZFNraXBVbmNoYW5nZWRGaWxlcyA9ICFwbHVn
aW5TZXRDaGFuZ2VkOwotCi0gICAgSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXRo
c0VuZCA9IHBhdGhzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHBhdGhzLmJlZ2luKCk7IGl0ICE9IHBhdGhzRW5kOyArK2l0KSB7Ci0gICAgICAg
IHRpbWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRp
bWUoKml0LCBsYXN0TW9kaWZpZWQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
cGF0aHNXaXRoVGltZXMuYWRkKCppdCwgbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICAvLyBJZiB0
aGUgcGF0aCdzIHRpbWVzdGFtcCBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdl
IHJhbiByZWZyZXNoKCksIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCi0gICAgICAgIGlm
IChzaG91bGRTa2lwVW5jaGFuZ2VkRmlsZXMgJiYgbV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5nZXQo
Kml0KSA9PSBsYXN0TW9kaWZpZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBp
ZiAoUmVmUHRyPFBsdWdpblBhY2thZ2U+IG9sZFBhY2thZ2UgPSBtX3BsdWdpbnNCeVBhdGguZ2V0
KCppdCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzIHx8
IG9sZFBhY2thZ2UtPmxhc3RNb2RpZmllZCgpICE9IGxhc3RNb2RpZmllZCk7Ci0gICAgICAgICAg
ICByZW1vdmUob2xkUGFja2FnZS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8
UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoKml0
LCBsYXN0TW9kaWZpZWQpOwotICAgICAgICBpZiAocGFja2FnZSAmJiBhZGQocGFja2FnZS5yZWxl
YXNlKCkpKQotICAgICAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgLy8gQ2FjaGUgYWxsIHRoZSBwYXRocyB3ZSBmb3VuZCB3aXRoIHRoZWlyIHRpbWVzdGFtcHMg
Zm9yIG5leHQgdGltZS4KLSAgICBwYXRoc1dpdGhUaW1lcy5zd2FwKG1fcGx1Z2luUGF0aHNXaXRo
VGltZXMpOwotCi0gICAgaWYgKCFwbHVnaW5TZXRDaGFuZ2VkKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIHVw
ZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7Ci0jZW5kaWYKLQotICAgIG1fcmVnaXN0ZXJl
ZE1JTUVUeXBlcy5jbGVhcigpOwotCi0gICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVz
Ci0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0g
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcwotICAgICAgICBN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1l
VG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwotICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5k
KCk7Ci0gICAgICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAg
ICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+a2V5KTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBQbHVnaW5EYXRhYmFz
ZTo6cGx1Z2lucygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7
Ci0KLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsK
LSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVk
UGx1Z2luQ29tcGFyZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQotewotICAgIFBsdWdp
blBhY2thZ2UqIHBsdWdpbkEgPSAqc3RhdGljX2Nhc3Q8UGx1Z2luUGFja2FnZSogY29uc3QqPihh
KTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5CID0gKnN0YXRpY19jYXN0PFBsdWdpblBhY2th
Z2UqIGNvbnN0Kj4oYik7Ci0KLSAgICByZXR1cm4gcGx1Z2luQS0+Y29tcGFyZSgqcGx1Z2luQik7
Ci19Ci0KLVBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7Ci0g
ICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAg
UGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChr
ZXkpOwotICAgIGlmIChwcmVmZXJyZWRQbHVnaW4KLSAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2lu
LT5pc0VuYWJsZWQoKQotICAgICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPm1pbWVUb0Rlc2NyaXB0
aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKLSAgICAgICAgcmV0dXJuIHByZWZlcnJlZFBsdWdpbjsK
LSAgICB9Ci0KLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0K
LSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9ICgq
aXQpLmdldCgpOwotCi0gICAgICAgIGlmICghcGx1Z2luLT5pc0VuYWJsZWQoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChwbHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9ucygp
LmNvbnRhaW5zKGtleSkpIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NB
Q0hFKQotICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBsdWdpbkxvYWRlZCgpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgICAgICBwbHVnaW5DaG9pY2Vz
LmFwcGVuZChwbHVnaW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHBsdWdpbkNob2lj
ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHFzb3J0KHBsdWdpbkNob2lj
ZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUoKSwgc2l6ZW9mKFBsdWdpblBhY2thZ2UqKSwg
UGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUpOwotCi0gICAgcmV0dXJuIHBs
dWdpbkNob2ljZXNbMF07Ci19Ci0KLVN0cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGV4dGVu
c2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIFN0cmluZyBtaW1l
VHlwZTsKLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0gICAg
SGFzaE1hcDxQbHVnaW5QYWNrYWdlKiwgU3RyaW5nPiBtaW1lVHlwZUZvclBsdWdpbjsKLQotICAg
IGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoKml0KS0+aXNFbmFibGVkKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7Ci0KLSAg
ICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0g
KCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyAr
K21pbWVfaXQpIHsKLSAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+a2V5OwotICAgICAg
ICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5z
LmdldChtaW1lVHlwZSk7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5z
aW9ucyA9IG1pbWVfaXQtPnZhbHVlOwotICAgICAgICAgICAgYm9vbCBmb3VuZE1hcHBpbmcgPSBm
YWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVu
c2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgUGx1Z2luUGFja2Fn
ZSogcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZl
cnJlZFBsdWdpbiAmJiBQbHVnaW5QYWNrYWdlOjplcXVhbCgqcGx1Z2luLCAqcHJlZmVycmVkUGx1
Z2luKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtaW1lVHlwZTsKLQotI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgICAgICAgICAgICAg
IGlmICghcGx1Z2luLT5lbnN1cmVQbHVnaW5Mb2FkZWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIHBsdWdpbkNob2ljZXMu
YXBwZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlRm9yUGx1Z2luLmFk
ZChwbHVnaW4sIG1pbWVUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRNYXBwaW5nID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZvdW5kTWFwcGluZykKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcXNvcnQocGx1Z2luQ2hvaWNl
cy5kYXRhKCksIHBsdWdpbkNob2ljZXMuc2l6ZSgpLCBzaXplb2YoUGx1Z2luUGFja2FnZSopLCBQ
bHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk7Ci0KLSAgICByZXR1cm4gbWlt
ZVR5cGVGb3JQbHVnaW4uZ2V0KHBsdWdpbkNob2ljZXNbMF0pOwotfQotCi1QbHVnaW5QYWNrYWdl
KiBQbHVnaW5EYXRhYmFzZTo6ZmluZFBsdWdpbihjb25zdCBVUkwmIHVybCwgU3RyaW5nJiBtaW1l
VHlwZSkKLXsKLSAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBs
dWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICAKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSB1
cmwubGFzdFBhdGhDb21wb25lbnQoKTsKLSAgICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy8nKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1l
LnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYgKGV4dGVuc2lvblBvcyA9PSAtMSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCi0gICAgU3RyaW5nIG1pbWVUeXBlRm9yRXh0ZW5zaW9uID0gTUlNRVR5
cGVGb3JFeHRlbnNpb24oZmlsZW5hbWUuc3Vic3RyaW5nKGV4dGVuc2lvblBvcyArIDEpKTsKLSAg
ICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZUZvckV4
dGVuc2lvbik7Ci0gICAgaWYgKCFwbHVnaW4pIHsKLSAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBs
dWdpbiBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgV2luZG93cyBmb3IgdGhlIG1pbWUgdHlwZQotICAg
ICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCi0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICAKLSAgICBtaW1lVHlwZSA9IG1pbWVUeXBlRm9yRXh0ZW5zaW9uOwotICAg
IHJldHVybiBwbHVnaW47Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNldFByZWZlcnJlZFBs
dWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBsdWdpblBhY2thZ2UqIHBs
dWdpbikKLXsKLSAgICBpZiAoIXBsdWdpbiB8fCBwbHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5j
b250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIG1fcHJlZmVycmVkUGx1Z2lucy5zZXQobWltZVR5
cGUubG93ZXIoKSwgcGx1Z2luKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0
c0FuZElzTm90RGlzYWJsZWQoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkgY29uc3QKLXsKLSAgICAv
LyBTa2lwIHBsdWdpbiBmaWxlcyB0aGF0IGFyZSBkaXNhYmxlZCBieSBmaWxlbmFtZS4KLSAgICBp
ZiAobV9kaXNhYmxlZFBsdWdpbkZpbGVzLmNvbnRhaW5zKHBhdGhHZXRGaWxlTmFtZShmaWxlUGF0
aCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZmlsZUV4aXN0cyhmaWxl
UGF0aCk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKFBsdWdp
blNldCYgcGx1Z2lucykgY29uc3QKLXsKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgh
ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKCppdCktPnBhdGgoKSkpCi0gICAgICAgICAgICBw
bHVnaW5zLmFkZCgqaXQpOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6YWRkKFBh
c3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gcHJwUGFja2FnZSkKLXsKLSAgICBBU1NFUlRfQVJHKHBy
cFBhY2thZ2UsIHBycFBhY2thZ2UpOwotCi0gICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2th
Z2UgPSBwcnBQYWNrYWdlOwotCi0gICAgaWYgKCFtX3BsdWdpbnMuYWRkKHBhY2thZ2UpLmlzTmV3
RW50cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcGx1Z2luc0J5UGF0aC5hZGQo
cGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQ
bHVnaW5EYXRhYmFzZTo6cmVtb3ZlKFBsdWdpblBhY2thZ2UqIHBhY2thZ2UpCi17Ci0gICAgTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWNrYWdlLT5taW1lVG9FeHRl
bnNpb25zKCkuYmVnaW4oKTsKLSAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7Ci0gICAgZm9yICggOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0
b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVnaW5zLmZpbmQoaXQtPmtleSk7Ci0gICAg
ICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJyZWRQbHVnaW5zLmVuZCgpICYmIHBhY2th
Z2VJbk1hcC0+dmFsdWUgPT0gcGFja2FnZSkKLSAgICAgICAgICAgIG1fcHJlZmVycmVkUGx1Z2lu
cy5yZW1vdmUocGFja2FnZUluTWFwKTsKLSAgICB9Ci0KLSAgICBtX3BsdWdpbnMucmVtb3ZlKHBh
Y2thZ2UpOwotICAgIG1fcGx1Z2luc0J5UGF0aC5yZW1vdmUocGFja2FnZS0+cGF0aCgpKTsKLX0K
LQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Y2xlYXIoKQotewotICAgIG1fcGx1Z2lucy5jbGVhcigp
OwotICAgIG1fcGx1Z2luc0J5UGF0aC5jbGVhcigpOwotICAgIG1fcGx1Z2luUGF0aHNXaXRoVGlt
ZXMuY2xlYXIoKTsKLSAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKLSAgICBtX3By
ZWZlcnJlZFBsdWdpbnMuY2xlYXIoKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFE
QVRBX0NBQ0hFKQotICAgIG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCA9IGZhbHNl
OwotI2VuZGlmCi19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZURpc2FibGVkUGx1Z2lu
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQotewotICAgIHJldHVybiBtX2Rpc2FibGVkUGx1
Z2luRmlsZXMucmVtb3ZlKGZpbGVOYW1lKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6YWRk
RGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCi17Ci0gICAgcmV0dXJu
IG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5hZGQoZmlsZU5hbWUpLmlzTmV3RW50cnk7Ci19Ci0KLSNp
ZiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkpCi0vLyBGb3Ig
U2FmYXJpL1dpbiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkCi0v
LyBpbiBQbHVnaW5EYXRhYmFzZVdpbi5jcHAsIGJ1dCBpZiB3ZSBjYW4gdXNlIFdlYkNvcmUgY29u
c3RydWN0cwotLy8gZm9yIHRoZSBsb2dpYyB3ZSBzaG91bGQgcGVyaGFwcyBtb3ZlIGl0IGhlcmUg
dW5kZXIgWFBfV0lOPwotCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBs
dWdpbkRpcmVjdG9yaWVzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLQotICAgIC8v
IEFkZCBwYXRocyBzcGVjaWZpYyB0byBlYWNoIHBsYXRmb3JtCi0jaWYgZGVmaW5lZChYUF9VTklY
KQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0gICAg
dXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiLy5tb3ppbGxhL3BsdWdpbnMiKSk7Ci0gICAg
cGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKLQotICAgIHVzZXJQbHVnaW5QYXRoID0gaG9t
ZURpcmVjdG9yeVBhdGgoKTsKLSAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCIvLm5l
dHNjYXBlL3BsdWdpbnMiKSk7Ci0gICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKLQot
ICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvYnJvd3Nlci9wbHVnaW5zIik7Ci0gICAgcGF0aHMu
YXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxhL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBl
bmQoIi91c3IvbGliL2ZpcmVmb3gvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9s
aWI2NC9icm93c2VyLXBsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dz
ZXItcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbW96aWxsYS9wbHVnaW5z
Iik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL25ldHNjYXBlL3BsdWdpbnMiKTsKLSAg
ICBwYXRocy5hcHBlbmQoIi9vcHQvbW96aWxsYS9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5k
KCIvb3B0L21vemlsbGEvbGliL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi9vcHQvbmV0
c2NhcGUvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL29wdC9uZXRzY2FwZS9jb21tdW5p
Y2F0b3IvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1
Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1Z2lucy1saWJj
NSIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1Z2lucy1saWJjNiIp
OwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9uZXRzY2FwZS9wbHVnaW5zIik7Ci0gICAg
cGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L21vemlsbGEvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFw
cGVuZCgiL3Vzci9saWIvbnNicm93c2VyL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91
c3IvbGliNjQvbnNicm93c2VyL3BsdWdpbnMiKTsKLQotICAgIFN0cmluZyBtb3pIb21lKGdldGVu
digiTU9aSUxMQV9IT01FIikpOwotICAgIG1vekhvbWUuYXBwZW5kKCIvcGx1Z2lucyIpOwotICAg
IHBhdGhzLmFwcGVuZChtb3pIb21lKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IG1velBhdGhzOwot
ICAgIFN0cmluZyBtb3pQYXRoKGdldGVudigiTU9aX1BMVUdJTl9QQVRIIikpOwotICAgIG1velBh
dGguc3BsaXQoVUNoYXIoJzonKSwgLyogYWxsb3dFbXB0eUVudHJpZXMgKi8gZmFsc2UsIG1velBh
dGhzKTsKLSAgICBwYXRocy5hcHBlbmRWZWN0b3IobW96UGF0aHMpOwotI2VsaWYgZGVmaW5lZChY
UF9NQUNPU1gpCi0gICAgU3RyaW5nIHVzZXJQbHVnaW5QYXRoID0gaG9tZURpcmVjdG9yeVBhdGgo
KTsKLSAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCIvTGlicmFyeS9JbnRlcm5ldCBQ
bHVnLUlucyIpKTsKLSAgICBwYXRocy5hcHBlbmQodXNlclBsdWdpblBhdGgpOwotICAgIHBhdGhz
LmFwcGVuZCgiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKTsKLSNlbGlmIGRlZmluZWQoWFBf
V0lOKQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0g
ICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiXFxBcHBsaWNhdGlvbiBEYXRhXFxNb3pp
bGxhXFxwbHVnaW5zIikpOwotICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7Ci0jZW5k
aWYKLQotICAgIHJldHVybiBwYXRoczsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVm
ZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBw
cmVmZXJyZWRQYXRoID0gaG9tZURpcmVjdG9yeVBhdGgoKTsKLQotI2lmIGRlZmluZWQoWFBfVU5J
WCkKLSAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJpbmcoIi8ubW96aWxsYS9wbHVnaW5zIikp
OwotI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3Ry
aW5nKCIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlucyIpKTsKLSNlbGlmIGRlZmluZWQoWFBfV0lO
KQotICAgIHByZWZlcnJlZFBhdGguYXBwZW5kKFN0cmluZygiXFxBcHBsaWNhdGlvbiBEYXRhXFxN
b3ppbGxhXFxwbHVnaW5zIikpOwotI2VuZGlmCi0KLSAgICAvLyBUT0RPOiBXZSBzaG91bGQgbm9y
bWFsaXplIHRoZSBwYXRoIGJlZm9yZSBkb2luZyBhIGNvbXBhcmlzb24uCi0gICAgcmV0dXJuIHBh
dGggPT0gcHJlZmVycmVkUGF0aDsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2lu
UGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCi0gICAgSGFz
aFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAg
ICBTdHJpbmcgZmlsZU5hbWVGaWx0ZXIoIiouc28iKTsKLSNlbHNlCi0gICAgU3RyaW5nIGZpbGVO
YW1lRmlsdGVyKCIiKTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGRpcnNFbmQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9y
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRJdCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuYmVnaW4o
KTsgZEl0ICE9IGRpcnNFbmQ7ICsrZEl0KSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdp
blBhdGhzID0gbGlzdERpcmVjdG9yeSgqZEl0LCBmaWxlTmFtZUZpbHRlcik7Ci0gICAgICAgIFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwbHVnaW5zRW5kID0gcGx1Z2luUGF0aHMuZW5k
KCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBJdCA9IHBs
dWdpblBhdGhzLmJlZ2luKCk7IHBJdCAhPSBwbHVnaW5zRW5kOyArK3BJdCkgewotICAgICAgICAg
ICAgaWYgKCFmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZCgqcEl0KSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgcGF0aHMuYWRkKCpwSXQpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi0jZW5kaWYgLy8gIU9TKFdJTkRPV1MpCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX01FVEFEQVRBX0NBQ0hFKQotCi1zdGF0aWMgdm9pZCBmaWxsQnVmZmVyV2l0aENvbnRl
bnRzT2ZGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikK
LXsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDA7Ci0gICAgc2l6ZV90IGJ1ZmZlckNhcGFjaXR5
ID0gMTAyNDsKLSAgICBidWZmZXIucmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKLQotICAgIGRvIHsK
LSAgICAgICAgYnVmZmVyU2l6ZSArPSByZWFkRnJvbUZpbGUoZmlsZSwgYnVmZmVyLmRhdGEoKSAr
IGJ1ZmZlclNpemUsIGJ1ZmZlckNhcGFjaXR5IC0gYnVmZmVyU2l6ZSk7Ci0gICAgICAgIGlmIChi
dWZmZXJTaXplID09IGJ1ZmZlckNhcGFjaXR5KSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyQ2Fw
YWNpdHkgPCBtYXhpbXVtUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVTaXplKSB7Ci0gICAg
ICAgICAgICAgICAgYnVmZmVyQ2FwYWNpdHkgKj0gMjsKLSAgICAgICAgICAgICAgICBidWZmZXIu
cmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0gd2hpbGUgKHRy
dWUpOwotCi0gICAgYnVmZmVyLnNocmluayhidWZmZXJTaXplKTsKLX0KLQotc3RhdGljIGJvb2wg
cmVhZFVURjhTdHJpbmcoU3RyaW5nJiByZXN1bHRTdHJpbmcsIGNoYXIqJiBzdGFydCwgY29uc3Qg
Y2hhciogZW5kKQotewotICAgIGlmIChzdGFydCA+PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGludCBsZW4gPSBzdHJsZW4oc3RhcnQpOwotICAgIHJlc3VsdFN0cmluZyA9IFN0
cmluZzo6ZnJvbVVURjgoc3RhcnQsIGxlbik7Ci0gICAgc3RhcnQgKz0gbGVuICsgMTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCByZWFkVGltZSh0aW1lX3QmIHJlc3VsdFRp
bWUsIGNoYXIqJiBzdGFydCwgY29uc3QgY2hhciogZW5kKQotewotICAgIGlmIChzdGFydCArIHNp
emVvZih0aW1lX3QpID49IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhl
IHN0cmVhbSBpcyBub3QgbmVjZXNzYXJ5IGFsaWduZWQuCi0gICAgbWVtY3B5KCZyZXN1bHRUaW1l
LCBzdGFydCwgc2l6ZW9mKHRpbWVfdCkpOwotICAgIHN0YXJ0ICs9IHNpemVvZih0aW1lX3QpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHNjaGVtYVZlcnNpb24g
PSAnMSc7Ci1zdGF0aWMgY29uc3QgY2hhciBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZp
bGVuYW1lW10gPSAiUGx1Z2luTWV0YWRhdGFDYWNoZS5iaW4iOwotCi12b2lkIFBsdWdpbkRhdGFi
YXNlOjpsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKQotewotICAgIGlmICghaXNQZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgo
KS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBm
aWxlOwotICAgIFN0cmluZyBhYnNvbHV0ZUNhY2hlUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSwgcGVyc2lzdGVudFBsdWdpbk1ldGFk
YXRhQ2FjaGVGaWxlbmFtZSk7Ci0gICAgZmlsZSA9IG9wZW5GaWxlKGFic29sdXRlQ2FjaGVQYXRo
LCBPcGVuRm9yUmVhZCk7Ci0KLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoZmlsZSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIE1hcmsgY2FjaGUgYXMgbG9hZGVkIHJlZ2FyZGxlc3Mgb2Ygc3Vj
Y2VzcyBvciBmYWlsdXJlLiBJZgotICAgIC8vIHRoZXJlJ3MgZXJyb3IgaW4gdGhlIGNhY2hlLCB3
ZSB3b24ndCB0cnkgdG8gbG9hZCBpdCBhbnltb3JlLgotICAgIG1fcGVyc2lzdGVudE1ldGFkYXRh
Q2FjaGVJc0xvYWRlZCA9IHRydWU7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZmlsZUNvbnRlbnRzOwot
ICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZSwgZmlsZUNvbnRlbnRzKTsKLSAg
ICBjbG9zZUZpbGUoZmlsZSk7Ci0KLSAgICBpZiAoZmlsZUNvbnRlbnRzLnNpemUoKSA8IDIgfHwg
ZmlsZUNvbnRlbnRzLmZpcnN0KCkgIT0gc2NoZW1hVmVyc2lvbiB8fCBmaWxlQ29udGVudHMubGFz
dCgpICE9ICdcMCcpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmVhZCBwbHVnaW4g
bWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgc2NoZW1hIik7Ci0gICAgICAgIGRlbGV0ZUZpbGUoYWJz
b2x1dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciogYnVm
ZmVyUG9zID0gZmlsZUNvbnRlbnRzLmRhdGEoKSArIDE7Ci0gICAgY2hhciogZW5kID0gZmlsZUNv
bnRlbnRzLmRhdGEoKSArIGZpbGVDb250ZW50cy5zaXplKCk7Ci0KLSAgICBQbHVnaW5TZXQgY2Fj
aGVkUGx1Z2luczsKLSAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBjYWNoZWRQbHVnaW5QYXRo
c1dpdGhUaW1lczsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4g
Y2FjaGVkUGx1Z2luc0J5UGF0aDsKLQotICAgIHdoaWxlIChidWZmZXJQb3MgPCBlbmQpIHsKLSAg
ICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAg
IFN0cmluZyBuYW1lOwotICAgICAgICBTdHJpbmcgZGVzYzsKLSAgICAgICAgU3RyaW5nIG1pbWVE
ZXNjOwotICAgICAgICBpZiAoIShyZWFkVVRGOFN0cmluZyhwYXRoLCBidWZmZXJQb3MsIGVuZCkK
LSAgICAgICAgICAgICAgJiYgcmVhZFRpbWUobGFzdE1vZGlmaWVkLCBidWZmZXJQb3MsIGVuZCkK
LSAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcobmFtZSwgYnVmZmVyUG9zLCBlbmQpCi0g
ICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5nKGRlc2MsIGJ1ZmZlclBvcywgZW5kKQotICAg
ICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhtaW1lRGVzYywgYnVmZmVyUG9zLCBlbmQpKSkg
ewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEg
Y2FjaGU6IGNvcnJ1cHQgZGF0YSIpOwotICAgICAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNh
Y2hlUGF0aCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBT
a2lwIG1ldGFkYXRhIHRoYXQgcG9pbnRzIHRvIHBsdWdpbnMgZnJvbSBkaXJlY3RvcmllcyB0aGF0
Ci0gICAgICAgIC8vIGFyZSBub3QgcGFydCBvZiBwbHVnaW4gZGlyZWN0b3J5IGxpc3QgYW55bW9y
ZS4KLSAgICAgICAgU3RyaW5nIHBsdWdpbkRpcmVjdG9yeU5hbWUgPSBkaXJlY3RvcnlOYW1lKHBh
dGgpOwotICAgICAgICBpZiAobV9wbHVnaW5EaXJlY3Rvcmllcy5maW5kKHBsdWdpbkRpcmVjdG9y
eU5hbWUpID09IFdURjo6bm90Rm91bmQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBh
Y2thZ2VGcm9tQ2FjaGUocGF0aCwgbGFzdE1vZGlmaWVkLCBuYW1lLCBkZXNjLCBtaW1lRGVzYyk7
Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UgJiYgY2FjaGVkUGx1Z2lucy5hZGQocGFja2FnZSkuaXNO
ZXdFbnRyeSkgewotICAgICAgICAgICAgY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXMuYWRkKHBh
Y2thZ2UtPnBhdGgoKSwgcGFja2FnZS0+bGFzdE1vZGlmaWVkKCkpOwotICAgICAgICAgICAgY2Fj
aGVkUGx1Z2luc0J5UGF0aC5hZGQocGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIG1fcGx1Z2lucy5zd2FwKGNhY2hlZFBsdWdpbnMpOwotICAgIG1fcGx1
Z2luc0J5UGF0aC5zd2FwKGNhY2hlZFBsdWdpbnNCeVBhdGgpOwotICAgIG1fcGx1Z2luUGF0aHNX
aXRoVGltZXMuc3dhcChjYWNoZWRQbHVnaW5QYXRoc1dpdGhUaW1lcyk7Ci19Ci0KLXN0YXRpYyBi
b29sIHdyaXRlVVRGOFN0cmluZyhQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgY29uc3QgU3RyaW5n
JiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAg
ICBpbnQgbGVuZ3RoID0gdXRmOFN0cmluZy5sZW5ndGgoKSArIDE7Ci0gICAgcmV0dXJuIHdyaXRl
VG9GaWxlKGZpbGUsIHV0ZjhTdHJpbmcuZGF0YSgpLCBsZW5ndGgpID09IGxlbmd0aDsKLX0KLQot
c3RhdGljIGJvb2wgd3JpdGVUaW1lKFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBjb25zdCB0aW1l
X3QmIHRpbWUpCi17Ci0gICAgcmV0dXJuIHdyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KCZ0aW1lKSwgc2l6ZW9mKHRpbWVfdCkpID09IHNpemVvZih0aW1lX3Qp
OwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjp1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNo
ZSgpCi17Ci0gICAgaWYgKCFpc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpIHx8IHBl
cnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbWFrZUFsbERpcmVjdG9yaWVzKHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpKTsK
LSAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
cGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCksIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNh
Y2hlRmlsZW5hbWUpOwotICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwotCi0gICAg
aWYgKG1fcGx1Z2lucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRmb3Jt
RmlsZUhhbmRsZSBmaWxlOwotICAgIGZpbGUgPSBvcGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwg
T3BlbkZvcldyaXRlKTsKLQotICAgIGlmICghaXNIYW5kbGVWYWxpZChmaWxlKSkgewotICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIHBsdWdpbiBtZXRhZGF0YSBjYWNoZSBmb3Igc2F2
aW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjaGFyIGxvY2FsU2NoZW1hVmVy
c2lvbiA9IHNjaGVtYVZlcnNpb247Ci0gICAgaWYgKHdyaXRlVG9GaWxlKGZpbGUsICZsb2NhbFNj
aGVtYVZlcnNpb24sIDEpICE9IDEpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3Jp
dGUgcGx1Z2luIG1ldGFkYXRhIGNhY2hlIHNjaGVtYSIpOwotICAgICAgICBjbG9zZUZpbGUoZmls
ZSk7Ci0gICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdp
bnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVn
aW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoISh3cml0ZVVURjhT
dHJpbmcoZmlsZSwgKCppdCktPnBhdGgoKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVUaW1lKGZp
bGUsICgqaXQpLT5sYXN0TW9kaWZpZWQoKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVVVEY4U3Ry
aW5nKGZpbGUsICgqaXQpLT5uYW1lKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmlu
ZyhmaWxlLCAoKml0KS0+ZGVzY3JpcHRpb24oKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVVVEY4
U3RyaW5nKGZpbGUsICgqaXQpLT5mdWxsTUlNRURlc2NyaXB0aW9uKCkpKSkgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3JpdGUgcGx1Z2luIG1ldGFkYXRhIHRvIGNhY2hlIik7
Ci0gICAgICAgICAgICBjbG9zZUZpbGUoZmlsZSk7Ci0gICAgICAgICAgICBkZWxldGVGaWxlKGFi
c29sdXRlQ2FjaGVQYXRoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNsb3NlRmlsZShmaWxlKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQZXJz
aXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKQotewotICAgIHJldHVybiBnUGVyc2lzdGVudFBs
dWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNl
dFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChib29sIGlzRW5hYmxlZCkKLXsKLSAgICBn
UGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQgPSBpc0VuYWJsZWQ7Ci19Ci0K
LVN0cmluZyBQbHVnaW5EYXRhYmFzZTo6cGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkKLXsK
LSAgICByZXR1cm4gV2ViQ29yZTo6cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCk7
Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCkKLXsKLSAgICBXZWJD
b3JlOjpwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVBhdGgoKSA9IHBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlUGF0aDsKLX0KLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhYmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmM0OGVjZGZmNmNmMjI0
MzU1OTRmOGFlODUyMzAxYTYyNjNjZjg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAor
KysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdp
bkRhdGFiYXNlX2gKLSNkZWZpbmUgUGx1Z2luRGF0YWJhc2VfaAotCi0jaW5jbHVkZSAiUGx1Z2lu
UGFja2FnZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEVsZW1lbnQ7
Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgSW50U2l6ZTsKLSAgICBjbGFzcyBVUkw7Ci0g
ICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VDbGllbnQ7Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZTsK
LQotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2th
Z2VIYXNoLCBQbHVnaW5QYWNrYWdlSGFzaFRyYWl0cz4gUGx1Z2luU2V0OwotCi0gICAgY2xhc3Mg
UGx1Z2luRGF0YWJhc2UgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbHVnaW5EYXRh
YmFzZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1
Z2luRGF0YWJhc2UoKTsKLQotICAgICAgICAvLyBUaGUgZmlyc3QgY2FsbCB0byBpbnN0YWxsZWRQ
bHVnaW5zIGNyZWF0ZXMgdGhlIHBsdWdpbiBkYXRhYmFzZQotICAgICAgICAvLyBhbmQgYnkgZGVm
YXVsdCBwb3B1bGF0ZXMgaXQgd2l0aCB0aGUgcGx1Z2lucyBpbnN0YWxsZWQgb24gdGhlIHN5c3Rl
bS4KLSAgICAgICAgLy8gRm9yIHRlc3RpbmcgcHVycG9zZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG5v
dCBwb3B1bGF0ZSB0aGUgZGF0YWJhc2UKLSAgICAgICAgLy8gYXV0b21hdGljYWxseSwgYXMgdGhl
IHBsdWdpbnMgbWlnaHQgYWZmZWN0IHRoZSBEUlQgcmVzdWx0cyBieQotICAgICAgICAvLyB3cml0
aW5nIHRvIGEuby4gc3RkZXJyLgotICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIGluc3Rh
bGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSA9IHRydWUpOwotCi0gICAgICAgIGJvb2wgcmVmcmVz
aCgpOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdl
Kj4gcGx1Z2lucygpIGNvbnN0OwotICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgICAgIHN0YXRpYyBib29sIGlzUHJlZmVycmVkUGx1
Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KTsKLSAgICAgICAgc3RhdGljIGlu
dCBwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKik7Ci0KLSAg
ICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBsdWdpbihjb25zdCBVUkwmLCBTdHJpbmcmIG1pbWVU
eXBlKTsKLSAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIHZvaWQgc2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luKTsKLQotICAg
ICAgICB2b2lkIHNldFBsdWdpbkRpcmVjdG9yaWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJl
Y3RvcmllcykKLSAgICAgICAgewotICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgICAgIG1f
cGx1Z2luRGlyZWN0b3JpZXMgPSBkaXJlY3RvcmllczsKLSAgICAgICAgfQotCi0gICAgICAgIGJv
b2wgcmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwotICAg
ICAgICBib29sIGFkZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsK
LSAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5EaXJlY3Rvcmllcygp
OwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVnaW5EaXJlY3RvcmllcygpIGNvbnN0IHsgcmV0
dXJuIG1fcGx1Z2luRGlyZWN0b3JpZXM7IH0KLQotICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0OwotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIHN0YXRpYyBib29sIGlzUGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChib29sIGlzRW5hYmxlZCk7Ci0gICAgICAgIHN0YXRp
YyBTdHJpbmcgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCk7Ci0gICAgICAgIHN0YXRpYyB2
b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlUGF0aCk7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYpIGNvbnN0Owot
ICAgICAgICB2b2lkIGdldERlbGV0ZWRQbHVnaW5zKFBsdWdpblNldCYpIGNvbnN0OwotICAgICAg
ICBib29sIGZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0Owot
Ci0gICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgcGx1Z2luIHdhcyBhY3R1YWxseSBhZGRl
ZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVkIGlmIGl0J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhp
c3RpbmcgcGx1Z2luKS4KLSAgICAgICAgYm9vbCBhZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdl
Pik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFBsdWdpblBhY2thZ2UqKTsKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50
TWV0YWRhdGFDYWNoZSgpOwotICAgICAgICB2b2lkIHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlKCk7Ci0jZW5kaWYKLQotICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9kaXNhYmxlZFBsdWdp
bkZpbGVzOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpbkRpcmVjdG9yaWVzOwotICAg
ICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOwotICAgICAgICBQbHVn
aW5TZXQgbV9wbHVnaW5zOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBh
Y2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgdGltZV90
PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJyZWRQbHVnaW5zOwotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZUlzTG9hZGVkOwotI2VuZGlmCi0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVi
dWcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZDIzYWU2NzEzOGFjYWJjNjViNGUzMDBjZjJjZTE3OTgx
NDA1MzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
RGVidWcuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgIUxPR19E
SVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBlcnJvclN0cmluZ3NbXSA9IHsKLSAgICAiTm8gZXJyb3JzIG9jY3VycmVkLiIsIC8qIE5QRVJS
X05PX0VSUk9SICovCi0gICAgIkVycm9yIHdpdGggbm8gc3BlY2lmaWMgZXJyb3IgY29kZSBvY2N1
cnJlZC4iLCAvKiBOUEVSUl9HRU5FUklDX0VSUk9SICovCi0gICAgIkludmFsaWQgaW5zdGFuY2Ug
cGFzc2VkIHRvIHRoZSBwbHVnLWluLiIsIC8qIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1Ig
Ki8KLSAgICAiRnVuY3Rpb24gdGFibGUgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX0ZVTkNU
QUJMRV9FUlJPUiAqLwotICAgICJMb2FkaW5nIG9mIHBsdWctaW4gZmFpbGVkLiIsIC8qIE5QRVJS
X01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAqLwotICAgICJNZW1vcnkgYWxsb2NhdGlvbiBmYWls
ZWQuIiwgLyogTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUiAqLwotICAgICJQbHVnLWluIG1pc3Np
bmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BMVUdJTl9FUlJPUiAqLwotICAgICJQ
bHVnLWluIGRpcmVjdG9yeSBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9Q
TFVHSU5fRElSX0VSUk9SICovCi0gICAgIlZlcnNpb25zIG9mIHBsdWctaW4gYW5kIENvbW11bmlj
YXRvciBkbyBub3QgbWF0Y2guIiwgLyogTlBFUlJfSU5DT01QQVRJQkxFX1ZFUlNJT05fRVJST1Ig
Ki8KLSAgICAiUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElE
X1BBUkFNICovCi0gICAgIlVSTCBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJ
RF9VUkwgKi8KLSAgICAiRmlsZSBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfRklMRV9O
T1RfRk9VTkQgKi8KLSAgICAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIiwgLyogTlBFUlJfTk9f
REFUQSAqLwotICAgICJTZWVrYWJsZSBzdHJlYW0gZXhwZWN0ZWQuIiwgLyogTlBFUlJfU1RSRUFN
X05PVF9TRUVLQUJMRSAqLwotICAgICJVbmtub3duIGVycm9yIGNvZGUiCi19OwotCi0jaWZkZWYg
WFBfTUFDT1NYCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHJhd2luZ01vZGVsc1tdID0gewot
ICAgICJOUERyYXdpbmdNb2RlbFF1aWNrRHJhdyIsCi0gICAgIk5QRHJhd2luZ01vZGVsQ29yZUdy
YXBoaWNzIiwKLSAgICAiTlBEcmF3aW5nTW9kZWxPcGVuR0wiLAotICAgICJOUERyYXdpbmdNb2Rl
bENvcmVBbmltYXRpb24iCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXZlbnRNb2Rl
bHNbXSA9IHsKLSAgICAiTlBFdmVudE1vZGVsQ2FyYm9uIiwKLSAgICAiTlBFdmVudE1vZGVsQ29j
b2EiCi19OwotI2VuZGlmIC8vWFBfTUFDT1NYCi0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JO
UEVycm9yKE5QRXJyb3IgZXJyb3IpCi17Ci0gICAgcmV0dXJuIGVycm9yU3RyaW5nc1tlcnJvcl07
Ci19Ci0KLSNpZmRlZiBYUF9NQUNPU1gKLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JEcmF3aW5n
TW9kZWwoTlBEcmF3aW5nTW9kZWwgZHJhd2luZ01vZGVsKQotewotICAgIHJldHVybiBkcmF3aW5n
TW9kZWxzW2RyYXdpbmdNb2RlbF07Ci19Ci0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JFdmVu
dE1vZGVsKE5QRXZlbnRNb2RlbCBldmVudE1vZGVsKQotewotICAgIHJldHVybiBldmVudE1vZGVs
c1tldmVudE1vZGVsXTsKLX0KLSNlbmRpZiAvL1hQX01BQ09TWAotCi1DU3RyaW5nIHByZXR0eU5h
bWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSkKLXsKLSAgICBzd2l0Y2ggKHZh
cmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WeERpc3BsYXk6IHJldHVybiAiTlBOVnhEaXNwbGF5IjsK
LSAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHJldHVybiAiTlBOVnh0QXBwQ29udGV4dCI7Ci0g
ICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHJldHVybiAiTlBOVm5ldHNjYXBlV2luZG93IjsK
LSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6IHJldHVybiAiTlBOVmphdmFzY3Jp
cHRFbmFibGVkQm9vbCI7Ci0gICAgY2FzZSBOUE5WYXNkRW5hYmxlZEJvb2w6IHJldHVybiAiTlBO
VmFzZEVuYWJsZWRCb29sIjsKLSAgICBjYXNlIE5QTlZpc09mZmxpbmVCb29sOiByZXR1cm4gIk5Q
TlZpc09mZmxpbmVCb29sIjsKLQotICAgIGNhc2UgTlBOVnNlcnZpY2VNYW5hZ2VyOiByZXR1cm4g
Ik5QTlZzZXJ2aWNlTWFuYWdlciAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBOVkRPTUVs
ZW1lbnQ6IHJldHVybiAiTlBOVkRPTUVsZW1lbnQgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNl
IE5QTlZET01XaW5kb3c6IHJldHVybiAiTlBOVkRPTVdpbmRvdyAobm90IHN1cHBvcnRlZCkiOwot
ICAgIGNhc2UgTlBOVlRvb2xraXQ6IHJldHVybiAiTlBOVlRvb2xraXQgKG5vdCBzdXBwb3J0ZWQp
IjsKLSAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHJldHVybiAiTlBOVlN1cHBvcnRz
WEVtYmVkQm9vbCAobm90IHN1cHBvcnRlZCkiOwotCi0gICAgY2FzZSBOUE5WV2luZG93TlBPYmpl
Y3Q6IHJldHVybiAiTlBOVldpbmRvd05QT2JqZWN0IjsKLSAgICBjYXNlIE5QTlZQbHVnaW5FbGVt
ZW50TlBPYmplY3Q6IHJldHVybiAiTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdCI7Ci0gICAgY2Fz
ZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOiByZXR1cm4gIk5QTlZTdXBwb3J0c1dpbmRvd2xlc3Mi
OwotICAgIGNhc2UgTlBOVnByaXZhdGVNb2RlQm9vbDogcmV0dXJuICJOUE5WcHJpdmF0ZU1vZGVC
b29sIjsKLQotI2lmZGVmIFhQX01BQ09TWAotICAgIGNhc2UgTlBOVnBsdWdpbkRyYXdpbmdNb2Rl
bDogcmV0dXJuICJOUE5WcGx1Z2luRHJhd2luZ01vZGVsIjsKLSNpZm5kZWYgTlBfTk9fUVVJQ0tE
UkFXCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNRdWlja0RyYXdCb29sOiByZXR1cm4gIk5QTlZzdXBw
b3J0c1F1aWNrRHJhd0Jvb2wiOwotI2VuZGlmCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlR3Jh
cGhpY3NCb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c0NvcmVHcmFwaGljc0Jvb2wiOwotICAgIGNh
c2UgTlBOVnN1cHBvcnRzT3BlbkdMQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNPcGVuR0xCb29s
IjsKLSAgICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVBbmltYXRpb25Cb29sOiByZXR1cm4gIk5QTlZz
dXBwb3J0c0NvcmVBbmltYXRpb25Cb29sIjsKLSNpZm5kZWYgTlBfTk9fQ0FSQk9OCi0gICAgY2Fz
ZSBOUE5Wc3VwcG9ydHNDYXJib25Cb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c0NhcmJvbkJvb2wi
OwotI2VuZGlmCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNDb2NvYUJvb2w6IHJldHVybiAiTlBOVnN1
cHBvcnRzQ29jb2FCb29sIjsKLSNlbmRpZgotCi0gICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3du
IHZhcmlhYmxlIjsKLSAgICB9Ci19Ci0KLUNTdHJpbmcgcHJldHR5TmFtZUZvck5QUFZhcmlhYmxl
KE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHZhcmlh
YmxlKSB7Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmFtZVN0cmluZzogcmV0dXJuICJOUFBWcGx1Z2lu
TmFtZVN0cmluZyI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmc6IHJldHVy
biAiTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5XaW5k
b3dCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5XaW5kb3dCb29sIjsKLSAgICBjYXNlIE5QUFZwbHVn
aW5UcmFuc3BhcmVudEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbCI7Ci0K
LSAgICBjYXNlIE5QUFZqYXZhQ2xhc3M6IHJldHVybiAiTlBQVmphdmFDbGFzcyAobm90IHN1cHBv
cnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd1NpemU6IHJldHVybiAiTlBQVnBsdWdp
bldpbmRvd1NpemUgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5UaW1lcklu
dGVydmFsOiByZXR1cm4gIk5QUFZwbHVnaW5UaW1lckludGVydmFsIChub3Qgc3VwcG9ydGVkKSI7
Ci0gICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlOiByZXR1cm4gIk5QUFZwbHVn
aW5TY3JpcHRhYmxlSW5zdGFuY2UgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVn
aW5TY3JpcHRhYmxlSUlEOiByZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRhYmxlSUlEIChub3Qgc3Vw
cG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWamF2YXNjcmlwdFB1c2hDYWxsZXJCb29sOiByZXR1cm4g
Ik5QUFZqYXZhc2NyaXB0UHVzaENhbGxlckJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNl
IE5QUFZwbHVnaW5LZWVwTGlicmFyeUluTWVtb3J5OiByZXR1cm4gIk5QUFZwbHVnaW5LZWVwTGli
cmFyeUluTWVtb3J5IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmVlZHNY
RW1iZWQ6IHJldHVybiAiTlBQVnBsdWdpbk5lZWRzWEVtYmVkIChub3Qgc3VwcG9ydGVkKSI7Ci0K
LSAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3Q6IHJldHVybiAiTlBQVnBsdWdp
blNjcmlwdGFibGVOUE9iamVjdCI7Ci0KLSAgICBjYXNlIE5QUFZmb3JtVmFsdWU6IHJldHVybiAi
TlBQVmZvcm1WYWx1ZSAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpblVybFJl
cXVlc3RzRGlzcGxheWVkQm9vbDogcmV0dXJuICJOUFBWcGx1Z2luVXJsUmVxdWVzdHNEaXNwbGF5
ZWRCb29sIChub3Qgc3VwcG9ydGVkKSI7Ci0KLSAgICBjYXNlIE5QUFZwbHVnaW5XYW50c0FsbE5l
dHdvcmtTdHJlYW1zOiByZXR1cm4gIk5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zIjsK
LSAgICBjYXNlIE5QUFZwbHVnaW5DYW5jZWxTcmNTdHJlYW06IHJldHVybiAiTlBQVnBsdWdpbkNh
bmNlbFNyY1N0cmVhbSI7Ci0KLSNpZmRlZiBYUF9NQUNPU1gKLSAgICBjYXNlIE5QUFZwbHVnaW5E
cmF3aW5nTW9kZWw6IHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCgiTlBQVnBsdWdpbkRyYXdpbmdN
b2RlbCwgIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocHJldHR5TmFtZUZvckRyYXdpbmdNb2Rl
bChOUERyYXdpbmdNb2RlbCh1aW50cHRyX3QodmFsdWUpKSkpOwotICAgICAgICByZXR1cm4gcmVz
dWx0LmxhdGluMSgpOwotICAgIH0KLSAgICBjYXNlIE5QUFZwbHVnaW5FdmVudE1vZGVsOiB7Ci0g
ICAgICAgIFN0cmluZyByZXN1bHQoIk5QUFZwbHVnaW5FdmVudE1vZGVsLCAiKTsKLSAgICAgICAg
cmVzdWx0LmFwcGVuZChwcmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwodWludHB0
cl90KHZhbHVlKSkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5sYXRpbjEoKTsKLSAgICB9Ci0g
ICAgY2FzZSBOUFBWcGx1Z2luQ29yZUFuaW1hdGlvbkxheWVyOiByZXR1cm4gIk5QUFZwbHVnaW5D
b3JlQW5pbWF0aW9uTGF5ZXIiOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2Vu
ZGlmCi0KLSAgICBkZWZhdWx0OiByZXR1cm4gIlVua25vd24gdmFyaWFibGUiOwotICAgIH0KLX0K
LQotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFy
aWFibGUpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBOVVJMVkNvb2tp
ZTogcmV0dXJuICJOUE5VUkxWQ29va2llIjsKLSAgICBjYXNlIE5QTlVSTFZQcm94eTogcmV0dXJu
ICJOUE5VUkxWUHJveHkiOwotICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7
Ci0gICAgfQotfQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNB
QkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5oIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2Njc0ODVlOTA5MjhhMDVmY2JkYTgyOTQwYTczOTY3MDk4NzFkYjYxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgUGx1Z2luRGVidWdfaAotI2RlZmluZSBQbHVnaW5EZWJ1Z19oCi0KLSNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIExPR19OUEVSUk9SKGVycikgaWYgKGVyciAhPSBOUEVS
Ul9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lucywgIiVzXG4iLCBwcmV0dHlOYW1lRm9yTlBF
cnJvcihlcnIpKQotI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigpIExPR19WRVJCT1NFKFBs
dWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVtcyB3aXRoIG5ldHdvcmssIGRpc2sg
SS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxlbXMuXG4iKQotCi0jaWYgIUxPR19E
SVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVG
b3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOwotCi1DU3RyaW5nIHByZXR0eU5hbWVGb3JOUE5WYXJp
YWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7Ci1DU3RyaW5nIHByZXR0eU5hbWVGb3JOUFBWYXJp
YWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwotQ1N0cmluZyBwcmV0dHlO
YW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUpOwotCi0jaWZkZWYg
WFBfTUFDT1NYCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRHJhd2luZ01vZGVsKE5QRHJhd2lu
Z01vZGVsIGRyYXdpbmdNb2RlbCk7Ci1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRXZlbnRNb2Rl
bChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCk7Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxFRAotCi0jZW5kaWYgLy8gUGx1Z2luRGVidWdf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDdlMDk5ODgwNDk3MWNhZTVhYmE2M2NkNmNkYzEzNDVmZTdjMjQwZTQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotCi0jaW5jbHVk
ZSAiY191dGlsaXR5LmgiCi0jaW5jbHVkZSAiSWRlbnRpZmllclJlcC5oIgotI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOUF9qc29iamVjdC5oIgotI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIK
LSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCi17Ci0g
ICAgLy8gVGhpcyBkZXN0cnVjdG9yIGdldHMgY2FsbGVkIGR1cmluZyByZWZyZXNoKCkgaWYgUGx1
Z2luRGF0YWJhc2UncwotICAgIC8vIFBsdWdpblNldCBoYXNoIGlzIGFscmVhZHkgcG9wdWxhdGVk
LCBhcyBpdCByZW1vdmVzIGl0ZW1zIGZyb20KLSAgICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2FsbGlu
ZyB0aGUgZGVzdHJ1Y3RvciBvbiBhIGxvYWRlZCBwbHVnLWluIG9mCi0gICAgLy8gY291cnNlIHdv
dWxkIGNhdXNlIGEgY3Jhc2gsIHNvIHdlIGNoZWNrIHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3ZQot
ICAgIC8vIEFTU0VSVC4KLSAgICAvLyBGSVhNRTogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIg
d2F5IHRvIGZpeCB0aGlzLgotICAgIGlmICghbV9sb2FkQ291bnQpCi0gICAgICAgIHVubG9hZFdp
dGhvdXRTaHV0ZG93bigpOwotICAgIGVsc2UKLSAgICAgICAgdW5sb2FkKCk7Ci0KLSAgICBBU1NF
UlQoIW1faXNMb2FkZWQpOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5U29v
bigpCi17Ci0gICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAg
QVNTRVJUKG1fbW9kdWxlKTsKLSAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKLQotICAgIG1fZnJl
ZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6
ZnJlZUxpYnJhcnlUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgIC8v
IERvIG5vdGhpbmcgaWYgdGhlIG1vZHVsZSBnb3QgbG9hZGVkIGFnYWluIG1lYW53aGlsZQotICAg
IGlmICghbV9sb2FkQ291bnQpIHsKLSAgICAgICAgdW5sb2FkTW9kdWxlKG1fbW9kdWxlKTsKLSAg
ICAgICAgbV9tb2R1bGUgPSAwOwotICAgIH0KLX0KLQotCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29t
cGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Ci17Ci0gICAgLy8gU29y
dCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4KLSAgICBib29s
IEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAgICBib29sIEJhbGxvd3NNdWx0aXBsZUlu
c3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxs
b3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgaWYgKEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyAh
PSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCi0gICAgICAgIHJldHVybiBBYWxsb3dzTXVsdGlw
bGVJbnN0YW5jZXMgPyAtMSA6IDE7Ci0KLSAgICAvLyBTb3J0IHBsdWctaW5zIGluIGEgcHJlZmVy
cmVkIHBhdGggZmlyc3QuCi0gICAgYm9vbCBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdp
bkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShwYXJlbnREaXJlY3RvcnkoKSk7
Ci0gICAgYm9vbCBCaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFiYXNlOjppc1By
ZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkpOwotICAg
IGlmIChBaXNJblByZWZlcnJlZERpcmVjdG9yeSAhPSBCaXNJblByZWZlcnJlZERpcmVjdG9yeSkK
LSAgICAgICAgcmV0dXJuIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ID8gLTEgOiAxOwotCi0gICAg
aW50IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5uYW1lKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKGRpZmYpCi0gICAgICAgIHJldHVybiBkaWZmOwotCi0g
ICAgZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKTsKLSAgICBp
ZiAoZGlmZikKLSAgICAgICAgcmV0dXJuIGRpZmY7Ci0KLSAgICByZXR1cm4gc3RyY21wKHBhcmVu
dERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51
dGY4KCkuZGF0YSgpKTsKLX0KLQotUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQotICAgIDogbV9pc0VuYWJs
ZWQodHJ1ZSkKLSAgICAsIG1faXNMb2FkZWQoZmFsc2UpCi0gICAgLCBtX2xvYWRDb3VudCgwKQot
ICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX21vZHVsZVZlcnNpb24oMCkKLSAgICAsIG1fbW9k
dWxlKDApCi0gICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCi0gICAgLCBtX2ZyZWVM
aWJyYXJ5VGltZXIoKnRoaXMsICZQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQp
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAsIG1faW5m
b0lzRnJvbUNhY2hlKHRydWUpCi0jZW5kaWYKLXsKLSAgICBtX2ZpbGVOYW1lID0gcGF0aEdldEZp
bGVOYW1lKG1fcGF0aCk7Ci0gICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3Bh
dGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7Ci19Ci0KLXZvaWQgUGx1Z2lu
UGFja2FnZTo6dW5sb2FkKCkKLXsKLSAgICBpZiAoIW1faXNMb2FkZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9OUFBfU2h1dGRvd24oKTsKLSNlbmRp
ZgotCi0gICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2Fn
ZTo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKLXsKLSAgICBpZiAoIW1faXNMb2FkZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9sb2FkQ291bnQpOwotICAgIEFTU0VSVChtX21v
ZHVsZSk7Ci0KLSAgICAvLyA8cmRhcjovLzU1MzA1MTk+OiBDcmFzaCB3aGVuIGNsb3NpbmcgdGFi
IHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkpCi0gICAgLy8gSWYgdGhlIHBsdWdpbiBoYXMg
c3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywgYXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5IGhh
dmUKLSAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkgb2YgdGhlIHBsdWdpbidzIGludGVybmFsIHdp
bmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdlIHRvIG91cgotICAgIC8vIG9yaWdpbmFsIHdp
bmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVnaW4gbGlicmFyeSBmcm9tIGhlcmUsIHdlIHdp
bGwganVtcCBiYWNrCi0gICAgLy8gdG8gY29kZSB3ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0dXJu
LCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5IGF0IGxlYXN0IHVudGlsCi0gICAgLy8gdGhl
IG5leHQgbWVzc2FnZSBsb29wCi0gICAgZnJlZUxpYnJhcnlTb29uKCk7Ci0KLSAgICBtX2lzTG9h
ZGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZChib29sIGVu
YWJsZWQpCi17Ci0gICAgbV9pc0VuYWJsZWQgPSBlbmFibGVkOwotfQotCi1QYXNzUmVmUHRyPFBs
dWdpblBhY2thZ2U+IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKLXsKLSAgICBSZWZQdHI8UGx1Z2luUGFj
a2FnZT4gcGFja2FnZSA9IGFkb3B0UmVmKG5ldyBQbHVnaW5QYWNrYWdlKHBhdGgsIGxhc3RNb2Rp
ZmllZCkpOwotCi0gICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBQ
bHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pCi17Ci0gICAg
UmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2Fn
ZShwYXRoLCBsYXN0TW9kaWZpZWQpKTsKLSAgICBwYWNrYWdlLT5tX25hbWUgPSBuYW1lOwotICAg
IHBhY2thZ2UtPm1fZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICBwYWNrYWdlLT5kZXRl
cm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCk7Ci0gICAgcGFja2FnZS0+c2V0TUlN
RURlc2NyaXB0aW9uKG1pbWVEZXNjcmlwdGlvbik7Ci0gICAgcGFja2FnZS0+bV9pbmZvSXNGcm9t
Q2FjaGUgPSB0cnVlOwotICAgIHJldHVybiBwYWNrYWdlLnJlbGVhc2UoKTsKLX0KLSNlbmRpZgot
Ci0jaWYgZGVmaW5lZChYUF9VTklYKQotdm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWly
a3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6
aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7Ci0gICAgICAgIC8vIEJlY2F1c2UgYSBz
aW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCBy
ZWxpYWJseSB1bmxvYWQgYQotICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRo
ZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KLSAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICAg
ICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1c2Vz
IGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcwotICAgICAgICAvLyB3aXRoIHRoZSBKYXZh
IHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJv
UmVjdFdoZW5TY3JvbGxpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1p
bWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBmbGFzaFRlblZlcnNpb24oMHgwYTAwMDAw
MCk7Ci0KLSAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihmbGFzaFRlblZlcnNpb24pID49
IDApIHsKLSAgICAgICAgICAgIC8vIEZsYXNoIDEwLjAgYjIxOCBkb2Vzbid0IGxpa2UgaGF2aW5n
IGEgTlVMTCB3aW5kb3cgaGFuZGxlCi0gICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVp
cmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBGbGFzaCA5IGFuZCBvbGRlciByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdp
bnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50Ci0gICAgICAgICAgICBtX3F1aXJr
cy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOwotICAgICAgICB9Ci0KLSNp
ZiBDUFUoWDg2XzY0KQotICAgICAgICAvLyA2NC1iaXQgRmxhc2ggZnJlZXplcyBpZiByaWdodC1j
bGljayBpcyBzZW50IGluIHdpbmRvd2xlc3MgbW9kZQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSk7Ci0jZW5kaWYKLQotICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCk7
Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0g
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3Nh
Z2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcp
OwotICAgIH0KLX0KLSNlbmRpZgotCi0jaWYgIU9TKFdJTkRPV1MpCi12b2lkIFBsdWdpblBhY2th
Z2U6OmRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKQotewotICAgIC8vIEl0
J3MgYSBiaXQgbGFtZSB0byBkZXRlY3QgdGhlIHBsdWdpbiB2ZXJzaW9uIGJ5IHBhcnNpbmcgaXQK
LSAgICAvLyBmcm9tIHRoZSBwbHVnaW4gZGVzY3JpcHRpb24gc3RyaW5nLCBidXQgaXQgZG9lc24n
dCBzZWVtIHRoYXQKLSAgICAvLyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBh
bnkgc3RhbmRhcmRpemVkIHdheSBhdAotICAgIC8vIHRoZSBtb2R1bGUgbGV2ZWwsIGxpa2UgaW4g
V2luZG93cwotCi0gICAgaWYgKG1fZGVzY3JpcHRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9kZXNjcmlwdGlvbi5zdGFydHNXaXRoKCJTaG9ja3dhdmUgRmxhc2gi
KSAmJiBtX2Rlc2NyaXB0aW9uLmxlbmd0aCgpID49IDE5KSB7Ci0gICAgICAgIC8vIFRoZSBmbGFz
aCB2ZXJzaW9uIGFzIGEgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGRpZmZlcnMgb24gVW5peCBmcm9t
IFdpbmRvd3MKLSAgICAgICAgLy8gc2luY2UgdGhlIHJldmlzaW9uIGNhbiBiZSBsYXJnZXIgdGhh
biBhIDggYml0cywgc28gd2UgYWxsb3cgaXQgMTYgaGVyZSBhbmQKLSAgICAgICAgLy8gcHVzaCB0
aGUgbWFqb3IvbWlub3IgdXAgOCBiaXRzLiBUaHVzIG9uIFVuaXgsIEZsYXNoJ3MgdmVyc2lvbiBt
YXkgYmUKLSAgICAgICAgLy8gMHgwYTAwMDAwMCBpbnN0ZWFkIG9mIDB4MDAwYTAwMDAuCi0KLSAg
ICAgICAgVmVjdG9yPFN0cmluZz4gdmVyc2lvblBhcnRzOwotICAgICAgICBtX2Rlc2NyaXB0aW9u
LnN1YnN0cmluZygxNikuc3BsaXQoJyAnLCAvKmFsbG93RW1wdHlFbnRyaWVzID0qLyBmYWxzZSwg
dmVyc2lvblBhcnRzKTsKLSAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5zaXplKCkgPj0gMSkg
ewotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gbWFqb3JNaW5vclBhcnRzOwotICAgICAgICAg
ICAgdmVyc2lvblBhcnRzWzBdLnNwbGl0KCcuJywgbWFqb3JNaW5vclBhcnRzKTsKLSAgICAgICAg
ICAgIGlmIChtYWpvck1pbm9yUGFydHMuc2l6ZSgpID49IDEpIHsKLSAgICAgICAgICAgICAgICBi
b29sIGNvbnZlcnRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1ham9yID0g
bWFqb3JNaW5vclBhcnRzWzBdLnRvVUludCgmY29udmVydGVkKTsKLSAgICAgICAgICAgICAgICBp
ZiAoY29udmVydGVkKQotICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gPSAobWFq
b3IgJiAweGZmKSA8PCAyNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtYWpvck1p
bm9yUGFydHMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAgICAgICAgICBib29sIGNvbnZlcnRlZCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbm9yID0gbWFqb3JNaW5vclBhcnRz
WzFdLnRvVUludCgmY29udmVydGVkKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udmVydGVkKQot
ICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0gKG1pbm9yICYgMHhmZikgPDwg
MTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmVyc2lvblBhcnRz
LnNpemUoKSA+PSAyKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcmV2aXNpb24gPSB2ZXJzaW9uUGFy
dHNbMV07Ci0gICAgICAgICAgICBpZiAocmV2aXNpb24ubGVuZ3RoKCkgPiAxICYmIChyZXZpc2lv
blswXSA9PSAncicgfHwgcmV2aXNpb25bMF0gPT0gJ2InKSkgewotICAgICAgICAgICAgICAgIHJl
dmlzaW9uLnJlbW92ZSgwLCAxKTsKLSAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0g
cmV2aXNpb24udG9JbnQoKSAmIDB4ZmZmZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1zdGF0aWMg
dm9pZCBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBO
UFZhcmlhbnQqIGFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0KiByb290T2JqZWN0LCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhTGlzdCkKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKLSAgICAgICAgYUxpc3Qu
YXBwZW5kKEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZhcmdz
W2ldLCByb290T2JqZWN0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNDOjpTb3VyY2VDb2RlIG1h
a2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsID0gU3RyaW5n
KCksIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6bWlu
aW11bVBvc2l0aW9uKCkpCi17Ci0gICAgcmV0dXJuIEpTQzo6U291cmNlQ29kZShKU0M6OlN0cmlu
Z1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1cmwsIHN0YXJ0UG9zaXRpb24pLCBzdGFy
dFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9u
ZUJhc2VkSW50KCkpOwotfQotCi1zdGF0aWMgYm9vbCBOUE5fRXZhbHVhdGUoTlBQIGluc3RhbmNl
LCBOUE9iamVjdCogbywgTlBTdHJpbmcqIHMsIE5QVmFyaWFudCogdmFyaWFudCkKLXsKLSAgICBp
ZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlw
dE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7Ci0K
LSAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9v
dE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gVGhlcmUgaXMgYSBj
cmFzaCBpbiBGbGFzaCB3aGVuIGV2YWx1YXRpbmcgYSBzY3JpcHQgdGhhdCBkZXN0cm95cyB0aGUK
LSAgICAgICAgLy8gUGx1Z2luVmlldywgc28gd2UgZGVzdHJveSBpdCBhc3luY2hyb25vdXNseS4K
LSAgICAgICAgUGx1Z2luVmlldzo6a2VlcEFsaXZlKGluc3RhbmNlKTsKLQotICAgICAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgICAgIFN0cmlu
ZyBzY3JpcHRTdHJpbmcgPSBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMp
OwotCi0gICAgICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShzY3JpcHRT
dHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7Ci0KLSAgICAgICAgSlNDOjpCaW5kaW5nczo6Y29udmVy
dFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmV0dXJuVmFsdWUsIHZhcmlhbnQpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBWT0lEX1RPX05QVkFSSUFOVCgqdmFyaWFudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1z
dGF0aWMgYm9vbCBOUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIg
bWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENs
YXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SmF2YVNjcmlwdE9iamVjdCo+KG8pOwotCi0gICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0
aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4obWV0aG9kTmFtZSk7Ci0gICAgICAgIGlmICghaS0+aXNT
dHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBTcGVjaWFs
IGNhc2UgdGhlICJldmFsIiBtZXRob2QuCi0gICAgICAgIGlmIChtZXRob2ROYW1lID09IF9OUE5f
R2V0U3RyaW5nSWRlbnRpZmllcigiZXZhbCIpKSB7Ci0gICAgICAgICAgICBpZiAoYXJnQ291bnQg
IT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYXJn
c1swXS50eXBlICE9IE5QVmFyaWFudFR5cGVfU3RyaW5nKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpOUE5fRXZhbHVhdGUobnBwLCBv
LCBjb25zdF9jYXN0PE5QU3RyaW5nKj4oJmFyZ3NbMF0udmFsdWUuc3RyaW5nVmFsdWUpLCByZXN1
bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0
LgotICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5y
b290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgICAgICBKU0M6OkpTVmFsdWUgZnVu
Y3Rpb24gPSBvYmotPmltcC0+Z2V0KGV4ZWMsIEpTQzo6QmluZGluZ3M6OmlkZW50aWZpZXJGcm9t
TlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7Ci0gICAgICAgIEpTQzo6Q2FsbERhdGEg
Y2FsbERhdGE7Ci0gICAgICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShm
dW5jdGlvbiwgY2FsbERhdGEpOwotICAgICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlw
ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gQ2FsbCB0aGUg
ZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xp
c3Q7Ci0gICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoZXhlYywgYXJncywgYXJnQ291bnQs
IHJvb3RPYmplY3QsIGFyZ0xpc3QpOwotICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ViA9IEpT
Qzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmotPmltcCwgYXJn
TGlzdCk7Ci0KLSAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhl
IGZ1bmN0aW9uIGNhbGwuCi0gICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBW
YXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChvLT5fY2xhc3Mt
Pmludm9rZSkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+aW52b2tlKG8sIG1ldGhvZE5hbWUs
IGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOwotCi0gICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6aW5pdGlhbGl6
ZUJyb3dzZXJGdW5jcygpCi17Ci0gICAgbWVtc2V0KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6ZW9m
KG1fYnJvd3NlckZ1bmNzKSk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZihtX2Jy
b3dzZXJGdW5jcyk7Ci0gICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QVmVyc2lvbigpOwot
Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7Ci0gICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJl
YWQgPSBOUE5fUmVxdWVzdFJlYWQ7Ci0gICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBO
X05ld1N0cmVhbTsKLSAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07Ci0gICAgbV9i
cm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKLSAgICBtX2Jyb3dzZXJGdW5jcy51YWdl
bnQgPSBOUE5fVXNlckFnZW50OwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01l
bUFsbG9jOwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7Ci0gICAgbV9icm93c2VyRnVuY3Mu
Z2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0
dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dmFs
dWUgPSBOUE5fR2V0VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0
VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0
ZVJlY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlk
YXRlUmVnaW9uOwotICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVk
cmF3OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVk
U3RhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1Bv
cFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wbHVnaW50aHJlYWRhc3lu
Y2NhbGwgPSBOUE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsOwotCi0gICAgbV9icm93c2VyRnVuY3Mu
cmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVy
OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyczsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05Q
Tl9HZXRJbnRJZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmlu
ZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOwotICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9t
aWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNz
LmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRpZmllcjsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OwotICAgIG1fYnJvd3NlckZ1bmNz
Lmludm9rZSA9IFdlYkNvcmU6Ok5QTl9JbnZva2U7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52b2tl
RGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0
ZSA9IFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0
eSA9IF9OUE5fR2V0UHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBf
TlBOX1NldFByb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05Q
Tl9SZW1vdmVQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5f
SGFzUHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNNZXRo
b2Q7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247
Ci0gICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7Ci0gICAgbV9i
cm93c2VyRnVuY3MuY29uc3RydWN0ID0gX05QTl9Db25zdHJ1Y3Q7Ci0gICAgbV9icm93c2VyRnVu
Y3MuZ2V0dmFsdWVmb3J1cmwgPSBOUE5fR2V0VmFsdWVGb3JVUkw7Ci0gICAgbV9icm93c2VyRnVu
Y3Muc2V0dmFsdWVmb3J1cmwgPSBOUE5fU2V0VmFsdWVGb3JVUkw7Ci0gICAgbV9icm93c2VyRnVu
Y3MuZ2V0YXV0aGVudGljYXRpb25pbmZvID0gTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mbzsKLQot
ICAgIG1fYnJvd3NlckZ1bmNzLnBvcHVwY29udGV4dG1lbnUgPSBOUE5fUG9wVXBDb250ZXh0TWVu
dTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2lmIEVOQUJM
RShQTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCkKLXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhh
c2goKSBjb25zdAotewotICAgIHN0cnVjdCBIYXNoQ29kZXMgewotICAgICAgICB1bnNpZ25lZCBo
YXNoOwotICAgICAgICB0aW1lX3QgbW9kaWZpZWREYXRlOwotICAgIH0gaGFzaENvZGVzOwotCi0g
ICAgaGFzaENvZGVzLmhhc2ggPSBtX3BhdGguaW1wbCgpLT5oYXNoKCk7Ci0gICAgaGFzaENvZGVz
Lm1vZGlmaWVkRGF0ZSA9IG1fbGFzdE1vZGlmaWVkOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oJmhhc2hDb2Rlcyk7Ci19Ci0KLWJvb2wg
UGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2lu
UGFja2FnZSYgYikKLXsKLSAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlw
dGlvbjsKLX0KLSNlbmRpZgotCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9u
KGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0Ci17Ci0g
ICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4s
IGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KLSAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KLQot
I2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5tb3N0U2lnICE9IGNvbXBh
cmVWZXJzaW9uLm1vc3RTaWcpCi0gICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24ubW9zdFNp
ZyA+IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcgPyAxIDogLTE7Ci0gICAgaWYgKG1fbW9kdWxlVmVy
c2lvbi5sZWFzdFNpZyAhPSBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZykKLSAgICAgICAgcmV0dXJu
IG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA+IGNvbXBhcmVWZXJzaW9uLmxlYXN0U2lnID8gMSA6
IC0xOwotI2Vsc2UgICAgCi0gICAgaWYgKG1fbW9kdWxlVmVyc2lvbiAhPSBjb21wYXJlVmVyc2lv
bikKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbiA+IGNvbXBhcmVWZXJzaW9uID8gMSA6
IC0xOwotI2VuZGlmCi0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fTUVUQURBVEFfQ0FDSEUpCi1ib29sIFBsdWdpblBhY2thZ2U6OmVuc3VyZVBsdWdpbkxv
YWRlZCgpCi17Ci0gICAgaWYgKCFtX2luZm9Jc0Zyb21DYWNoZSkKLSAgICAgICAgcmV0dXJuIG1f
aXNMb2FkZWQ7Ci0KLSAgICBtX3F1aXJrcyA9IFBsdWdpblF1aXJrU2V0KCk7Ci0gICAgbV9uYW1l
ID0gU3RyaW5nKCk7Ci0gICAgbV9kZXNjcmlwdGlvbiA9IFN0cmluZygpOwotICAgIG1fZnVsbE1J
TUVEZXNjcmlwdGlvbiA9IFN0cmluZygpOwotICAgIG1fbW9kdWxlVmVyc2lvbiA9IDA7Ci0KLSAg
ICByZXR1cm4gZmV0Y2hJbmZvKCk7Ci19Ci0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblBhY2thZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgzNDA1NzY3
OTdhYTZiYzgzMTc3MmJjM2I0ZjljY2Y4Y2M4YmE2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2th
Z2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpblBhY2th
Z2VfaAotI2RlZmluZSBQbHVnaW5QYWNrYWdlX2gKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
LSNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgi
Ci0jZW5kaWYKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOwotCi0g
ICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5QbHVnaW5QYWNrYWdlKCk7Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUGFj
a2FnZT4gY3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRp
bWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsKLSNlbmRpZgotCi0gICAg
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgICAg
ICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlv
bjsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7
IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBwYXJlbnREaXJlY3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudERpcmVjdG9yeTsgfQotICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtb2R1
bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZTsgfQotICAgICAgICB1aW50MTZfdCBOUFZlcnNp
b24oKSBjb25zdDsKLSAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFzdE1vZGlmaWVkOyB9Ci0KLSAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFw
JiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9u
czsgfQotICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9Ci0KLSAgICAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5Q
YWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKTsKLQotICAgICAgICBib29sIGxvYWQo
KTsKLSAgICAgICAgdm9pZCB1bmxvYWQoKTsKLSAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1
dGRvd24oKTsKLQotICAgICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNF
bmFibGVkOyB9Ci0gICAgICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5G
dW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9Ci0jZW5kaWYKLSAgICAgICAg
aW50IGNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25z
dDsKLSAgICAgICAgaW50IGNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0OwotICAg
ICAgICBQbHVnaW5RdWlya1NldCBxdWlya3MoKSBjb25zdCB7IHJldHVybiBtX3F1aXJrczsgfQot
ICAgICAgICBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIHZlcnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX21vZHVsZVZlcnNpb247IH0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVU
QURBVEFfQ0FDSEUpCi0gICAgICAgIGJvb2wgZW5zdXJlUGx1Z2luTG9hZGVkKCk7Ci0gICAgICAg
IHZvaWQgc2V0TUlNRURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsK
LSAgICAgICAgU3RyaW5nIGZ1bGxNSU1FRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1
bGxNSU1FRGVzY3JpcHRpb247fQotI2VuZGlmCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2lu
UGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsK
LQotICAgICAgICBib29sIGZldGNoSW5mbygpOwotICAgICAgICBib29sIGlzUGx1Z2luQmxhY2ts
aXN0ZWQoKTsKLSAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSk7Ci0KLSAgICAgICAgdm9pZCBkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0
aW9uKCk7Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOwotCi0gICAgICAg
IGJvb2wgbV9pc0VuYWJsZWQ7Ci0gICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKLSAgICAgICAgaW50
IG1fbG9hZENvdW50OwotCi0gICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOwotICAgICAgICBT
dHJpbmcgbV9wYXRoOwotICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKLSAgICAgICAgU3RyaW5n
IG1fbmFtZTsKLSAgICAgICAgU3RyaW5nIG1fcGFyZW50RGlyZWN0b3J5OwotCi0gICAgICAgIFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiBtX21vZHVsZVZlcnNpb247Ci0KLSAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOwotICAgICAgICBNSU1FVG9FeHRlbnNp
b25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKLQotICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtX21v
ZHVsZTsKLSAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOwotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRv
d247Ci0gICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKLSAgICAgICAgTlBOZXRz
Y2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOwotI2VuZGlmCi0KLSAgICAgICAgdm9pZCBmcmVlTGli
cmFyeVNvb24oKTsKLSAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoKTsKLSAgICAg
ICAgVGltZXIgbV9mcmVlTGlicmFyeVRpbWVyOwotCi0gICAgICAgIFBsdWdpblF1aXJrU2V0IG1f
cXVpcmtzOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAg
ICAgIFN0cmluZyBtX2Z1bGxNSU1FRGVzY3JpcHRpb247Ci0gICAgICAgIGJvb2wgbV9pbmZvSXNG
cm9tQ2FjaGU7Ci0jZW5kaWYKLSAgICB9OwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3Jr
YXJvdW5kIGJlY2F1c2UgUGx1Z2luUGFja2FnZUhhc2ggaXMgYnJva2VuIGFuZCBtYXkgY29uc2lk
ZXIga2V5cyB3aXRoIGRpZmZlcmVudCBoYXNoZXMgYXMgZXF1YWwuCi0gICAgc3RydWN0IFBsdWdp
blBhY2thZ2VIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IDY0OwotICAgIH07
Ci0KLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2ggewotICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCB1aW50cHRyX3Qga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBs
dWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgp
OyB9Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgdWludHB0cl90IGEsIGNvbnN0
IHVpbnRwdHJfdCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2th
Z2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYikpOyB9Ci0gICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYgYSwgY29uc3Qg
UmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlOjplcXVhbCgq
YS5nZXQoKSwgKmIuZ2V0KCkpOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luUXVpcmtTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhMzM4M2RiYjQ0NjkwOTk0MDdkNmJkYTEy
M2QxMDFkY2I1ZDM4NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luUXVpcmtTZXRfaAotI2RlZmluZSBQbHVnaW5RdWly
a1NldF9oCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgZW51bSBQbHVnaW5RdWlyayB7
Ci0gICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50ID0gMSA8PCAwLAotICAg
ICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0gMSA8PCAxLAotICAgICAg
ICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwgCi0gICAgICAgIFBsdWdp
blF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMsCi0gICAgICAgIFBsdWdp
blF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8IDQsCi0gICAgICAgIFBs
dWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEgPDwgNSwKLSAgICAgICAgUGx1Z2luUXVpcmtE
b250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0gMSA8PCA2LAotICAgICAg
ICBQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3AgPSAxIDw8IDcsCi0gICAgICAgIFBsdWdp
blF1aXJrRmxhc2hVUkxOb3RpZnlCdWcgPSAxIDw8IDgsCi0gICAgICAgIFBsdWdpblF1aXJrRG9u
dENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyA9IDEgPDwgOSwKLSAgICAgICAgUGx1Z2luUXVp
cmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSA9IDEgPDwgMTAsCi0gICAgICAgIFBs
dWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMgPSAxIDw8IDExLAotICAgICAgICBQ
bHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCA9IDEgPDwgMTIsCi0gICAgICAgIFBsdWdpblF1
aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGggPSAxIDw8IDEzLAotICAgICAgICBQbHVnaW5R
dWlya0RvbnRDYWxsU2V0V2luZG93TW9yZVRoYW5PbmNlID0gMSA8PCAxNCwKLSAgICAgICAgUGx1
Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSA9IDEgPDwgMTUsCi0gICAg
ICAgIFBsdWdpblF1aXJrV2FudHNDaHJvbWVVc2VyQWdlbnQgPSAxIDw8IDE2Ci0gICAgfTsKLQot
ICAgIGNsYXNzIFBsdWdpblF1aXJrU2V0IHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAg
UGx1Z2luUXVpcmtTZXQoKSA6IG1fcXVpcmtzKDApIHsgfQotICAgICAgICAgICAgdm9pZCBhZGQo
UGx1Z2luUXVpcmsgcXVpcmspIHsgbV9xdWlya3MgfD0gcXVpcms7IH0KLSAgICAgICAgICAgIGJv
b2wgY29udGFpbnMoUGx1Z2luUXVpcmsgcXVpcmspIGNvbnN0IHsgcmV0dXJuIG1fcXVpcmtzICYg
cXVpcms7IH0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIG1fcXVpcmtz
OwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsdWdpblF1
aXJrU2V0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzliOWIxMjBmMWY0MjBjNmI0YTdjNmJmZjAwNzYzMzAwYjU1
ODI0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
ODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
LCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luU3Ry
ZWFtLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIK
LSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxl
ci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9h
ZGVyLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLS8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29t
ZSBwbHVnaW5zIGxpa2UgdG8gcmV0dXJuIC0xIHRvIGluZGljYXRlIGVycm9yCi0vLyBhbmQgdGhp
cyB3YXkgd2Ugd29uJ3QgY2xhc2ggd2l0aCB0aGVtLgotc3RhdGljIGNvbnN0IGludCBXZWJSZWFz
b25Ob25lID0gLTI7Ci0KLXVzaW5nIHN0ZDo6bWF4OwotdXNpbmcgc3RkOjptaW47Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNoTWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1N
YXA7Ci1zdGF0aWMgU3RyZWFtTWFwJiBzdHJlYW1zKCkKLXsKLSAgICBzdGF0aWMgU3RyZWFtTWFw
IHN0YXRpY1N0cmVhbXM7Ci0gICAgcmV0dXJuIHN0YXRpY1N0cmVhbXM7Ci19Ci0KLVBsdWdpblN0
cmVhbTo6UGx1Z2luU3RyZWFtKFBsdWdpblN0cmVhbUNsaWVudCogY2xpZW50LCBGcmFtZSogZnJh
bWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1
bmNzLCBOUFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0JiBxdWlya3MpCi0gICAgOiBt
X3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpCi0gICAgLCBtX2NsaWVudChjbGllbnQp
Ci0gICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCi0g
ICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKLSAgICAsIG1fc3RyZWFt
U3RhdGUoU3RyZWFtQmVmb3JlU3RhcnRlZCkKLSAgICAsIG1fbG9hZE1hbnVhbGx5KGZhbHNlKQot
ICAgICwgbV9kZWxheURlbGl2ZXJ5VGltZXIoKnRoaXMsICZQbHVnaW5TdHJlYW06OmRlbGF5RGVs
aXZlcnlUaW1lckZpcmVkKQotICAgICwgbV90ZW1wRmlsZUhhbmRsZShpbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlKQotICAgICwgbV9wbHVnaW5GdW5jcyhwbHVnaW5GdW5jcykKLSAgICAsIG1faW5z
dGFuY2UoaW5zdGFuY2UpCi0gICAgLCBtX3F1aXJrcyhxdWlya3MpCi17Ci0gICAgQVNTRVJUKG1f
aW5zdGFuY2UpOwotCi0gICAgbV9zdHJlYW0udXJsID0gMDsKLSAgICBtX3N0cmVhbS5uZGF0YSA9
IDA7Ci0gICAgbV9zdHJlYW0ucGRhdGEgPSAwOwotICAgIG1fc3RyZWFtLmVuZCA9IDA7Ci0gICAg
bV9zdHJlYW0ubm90aWZ5RGF0YSA9IDA7Ci0gICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsK
LSAgICBtX3N0cmVhbS5oZWFkZXJzID0gMDsKLQotICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFt
LCBtX2luc3RhbmNlKTsKLX0KLQotUGx1Z2luU3RyZWFtOjp+UGx1Z2luU3RyZWFtKCkKLXsKLSAg
ICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1TdGFydGVkKTsKLSAgICBBU1NFUlQoIW1f
bG9hZGVyKTsKLQotICAgIGZhc3RGcmVlKChjaGFyKiltX3N0cmVhbS51cmwpOwotCi0gICAgc3Ry
ZWFtcygpLnJlbW92ZSgmbV9zdHJlYW0pOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6c3RhcnQo
KQotewotICAgIEFTU0VSVCghbV9sb2FkTWFudWFsbHkpOwotICAgIG1fbG9hZGVyID0gcmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChtX2ZyYW1lLCB0aGlz
LCBtX3Jlc291cmNlUmVxdWVzdCk7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpzdG9wKCkKLXsK
LSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RvcHBlZDsKLQotICAgIGlmIChtX2xvYWRNYW51
YWxseSkgewotICAgICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKLQotICAgICAgICBEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExv
YWRlcigpOwotICAgICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOwotCi0gICAgICAgIGlmIChk
b2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFpblJlc291cmNlKCkpCi0gICAgICAgICAgICBkb2N1
bWVudExvYWRlci0+Y2FuY2VsTWFpblJlc291cmNlTG9hZChtX2ZyYW1lLT5sb2FkZXIoKS5jYW5j
ZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAobV9sb2FkZXIpIHsKLSAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwotICAg
ICAgICBtX2xvYWRlciA9IDA7Ci0gICAgfQotCi0gICAgbV9jbGllbnQgPSAwOwotfQotCi1zdGF0
aWMgdWludDMyX3QgbGFzdE1vZGlmaWVkRGF0ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKLXsKLSAgICBkb3VibGUgbGFzdE1vZGlmaWVkID0gcmVzcG9uc2UubGFzdE1vZGlmaWVk
KCk7Ci0gICAgaWYgKCFzdGQ6OmlzZmluaXRlKGxhc3RNb2RpZmllZCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIGxhc3RNb2RpZmllZCAqIDEwMDA7Ci19Ci0KLXZvaWQgUGx1Z2lu
U3RyZWFtOjpzdGFydFN0cmVhbSgpCi17Ci0gICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3Ry
ZWFtQmVmb3JlU3RhcnRlZCk7Ci0KLSAgICBjb25zdCBVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNv
dXJjZVJlc3BvbnNlLnVybCgpOwotCi0gICAgLy8gU29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0
IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBwYXNzZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMg
dGhlCi0gICAgLy8gZm9ybWF0IHVzZWQgd2hlbiByZXF1ZXN0aW5nIHRoZSBVUkwuCi0gICAgaWYg
KHByb3RvY29sSXNKYXZhU2NyaXB0KHJlc3BvbnNlVVJMKSkKLSAgICAgICAgbV9zdHJlYW0udXJs
ID0gZmFzdFN0ckR1cChkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMocmVzcG9uc2VVUkwuc3RyaW5n
KCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9zdHJlYW0udXJsID0gZmFz
dFN0ckR1cChyZXNwb25zZVVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIENTdHJp
bmcgbWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7Ci0K
LSAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNl
LmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotCi0gICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5p
c0hUVFAoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAg
IFN0cmluZyBzZXBhcmF0b3IgPSBBU0NJSUxpdGVyYWwoIjogIik7Ci0KLSAgICAgICAgU3RyaW5n
IHN0YXR1c0xpbmUgPSAiSFRUUCAiICsgU3RyaW5nOjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCkpICsgIiBPS1xuIjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoc3RhdHVzTGluZSk7Ci0KLSAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKLSAgICAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNw
b25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChpdC0+dmFsdWUpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtX2hlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkudXRmOCgpOwotCi0gICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3Qg
bGlrZWx5IGNvbXByZXNzZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1
Z2luLAotICAgICAgICAvLyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQg
bGVuZ3RoLCBub3QgeWV0IGtub3duIGF0IHRoZSBtb21lbnQuCi0gICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS80NDcwNTk5PiB0cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoXSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgotICAgICAgICBT
dHJpbmcgY29udGVudEVuY29kaW5nID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudEVuY29kaW5nKTsKLSAgICAgICAgaWYgKCFjb250ZW50
RW5jb2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCi0gICAg
ICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggPSAtMTsKLSAgICB9Ci0KLSAgICBtX3N0cmVh
bS5oZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsKLSAgICBtX3N0cmVhbS5wZGF0YSA9IDA7Ci0g
ICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOwotICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3Rl
ZENvbnRlbnRMZW5ndGgsIDBMTCk7Ci0gICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbGFzdE1v
ZGlmaWVkRGF0ZShtX3Jlc291cmNlUmVzcG9uc2UpOwotICAgIG1fc3RyZWFtLm5vdGlmeURhdGEg
PSBtX25vdGlmeURhdGE7Ci0KLSAgICBtX3RyYW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKLSAgICBt
X29mZnNldCA9IDA7Ci0gICAgbV9yZWFzb24gPSBXZWJSZWFzb25Ob25lOwotCi0gICAgLy8gUHJv
dGVjdCB0aGUgc3RyZWFtIGlmIGRlc3Ryb3lzdHJlYW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRo
ZSBuZXdzdHJlYW0gaGFuZGxlcgotICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhp
cyk7Ci0KLSAgICAvLyBjYWxsaW5nIGludG8gYSBwbHVnLWluIGNvdWxkIHJlc3VsdCBpbiByZS1l
bnRyYW5jZSBpZiB0aGUgcGx1Zy1pbiB5aWVsZHMKLSAgICAvLyBjb250cm9sIHRvIHRoZSBzeXN0
ZW0gKHJkYXI6Ly81NzQ0ODk5KS4gcHJldmVudCB0aGlzIGJ5IGRlZmVycmluZyBmdXJ0aGVyCi0g
ICAgLy8gbG9hZGluZyB3aGlsZSBjYWxsaW5nIGludG8gdGhlIHBsdWctaW4uCi0gICAgaWYgKG1f
bG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICBO
UEVycm9yIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1J
TUVUeXBlKW1pbWVUeXBlU3RyLmRhdGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJN
b2RlKTsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2Fk
aW5nKGZhbHNlKTsKLSAgICAKLSAgICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4g
dGhlIGNhbGwgdG8gbmV3c3RyZWFtIHdlIHJldHVybgotICAgIGlmIChtX3JlYXNvbiAhPSBXZWJS
ZWFzb25Ob25lKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGlmIChucEVyciAhPSBO
UEVSUl9OT19FUlJPUikgewotICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKG5wRXJyKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFy
dGVkOwotCi0gICAgaWYgKG1fdHJhbnNmZXJNb2RlID09IE5QX05PUk1BTCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9wYXRoID0gb3BlblRlbXBvcmFyeUZpbGUoIldLUCIsIG1fdGVtcEZpbGVI
YW5kbGUpOwotCi0gICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRo
ZSBzdHJlYW0KLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQobV90ZW1wRmlsZUhhbmRsZSkpCi0gICAg
ICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwotfQotCi1OUFAg
UGx1Z2luU3RyZWFtOjpvd25lckZvclN0cmVhbShOUFN0cmVhbSogc3RyZWFtKQotewotICAgIHJl
dHVybiBzdHJlYW1zKCkuZ2V0KHN0cmVhbSk7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpjYW5j
ZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICBSZWZQdHI8UGx1Z2lu
U3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZGVzdHJveVN0cmVhbShyZWFzb24pOwotICAg
IHN0b3AoKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24g
cmVhc29uKQotewotICAgIG1fcmVhc29uID0gcmVhc29uOwotICAgIGlmIChtX3JlYXNvbiAhPSBO
UFJFU19ET05FKSB7Ci0gICAgICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5n
IHN0cmVhbWVkCi0gICAgICAgIGlmIChtX2RlbGl2ZXJ5RGF0YSkKLSAgICAgICAgICAgIG1fZGVs
aXZlcnlEYXRhLT5yZXNpemUoMCk7Ci0gICAgfSBlbHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBt
X2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgewotICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRh
dGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ryb3kgdGhlIHN0cmVhbSBub3cuCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgZGVzdHJveVN0cmVhbSgpOwotfQotCi12b2lkIFBsdWdpblN0
cmVhbTo6ZGVzdHJveVN0cmVhbSgpCi17Ci0gICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFt
U3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fcmVhc29uICE9IFdlYlJl
YXNvbk5vbmUpOwotICAgIEFTU0VSVCghbV9kZWxpdmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEt
PnNpemUoKSA9PSAwKTsKLQotICAgIGNsb3NlRmlsZShtX3RlbXBGaWxlSGFuZGxlKTsKLQotICAg
IGJvb2wgbmV3U3RyZWFtQ2FsbGVkID0gbV9zdHJlYW0ubmRhdGE7Ci0KLSAgICAvLyBQcm90ZWN0
IGZyb20gZGVzdHJ1Y3Rpb24gaWY6Ci0gICAgLy8gIE5QTl9EZXN0cm95U3RyZWFtIGlzIGNhbGxl
ZCBmcm9tIE5QUF9OZXdTdHJlYW0gb3IKLSAgICAvLyAgUGx1Z2luU3RyZWFtQ2xpZW50OjpzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKCkgcmVtb3ZlcyB0aGUgbGFzdCByZWZlcmVuY2UKLSAgICBSZWZQ
dHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgaWYgKG5ld1N0cmVhbUNhbGxl
ZCkgewotICAgICAgICBpZiAobV9yZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90cmFuc2Zlck1v
ZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIW1fcGF0aC5pc051bGwoKSk7Ci0KLSAgICAgICAgICAgIGlmICht
X2xvYWRlcikKLSAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVl
KTsKLSAgICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJl
YW0sIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChtX2xvYWRlcikKLSAg
ICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKSB7
Ci0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICAgICAgbV9sb2FkZXItPnNl
dERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0KLSAgICAgICAgICAgIE5QRXJyb3IgbnBFcnIgPSBtX3Bs
dWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24p
OwotCi0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICAgICAgbV9sb2FkZXIt
PnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCi0gICAgICAgICAgICBMT0dfTlBFUlJPUihucEVy
cik7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0cmVhbS5uZGF0YSA9IDA7Ci0gICAgfQotCi0g
ICAgaWYgKG1fc2VuZE5vdGlmaWNhdGlvbikgewotICAgICAgICAvLyBGbGFzaCA5IGNhbiBkZXJl
ZmVyZW5jZSBudWxsIGlmIHdlIGNhbGwgTlBQX1VSTE5vdGlmeSB3aXRob3V0IGZpcnN0IGNhbGxp
bmcgTlBQX05ld1N0cmVhbQotICAgICAgICAvLyBmb3IgcmVxdWVzdHMgbWFkZSB3aXRoIE5QTl9Q
b3N0VVJMTm90aWZ5OyBzZWUgPHJkYXI6Ly81NTg4ODA3PgotICAgICAgICBpZiAobV9sb2FkZXIp
Ci0gICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICAgICAg
aWYgKCFuZXdTdHJlYW1DYWxsZWQgJiYgbV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtGbGFz
aFVSTE5vdGlmeUJ1ZykgJiYKLSAgICAgICAgICAgIGVxdWFsSWdub3JpbmdDYXNlKG1fcmVzb3Vy
Y2VSZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIlBPU1QiKSkgewotICAgICAgICAgICAgbV90cmFuc2Zl
ck1vZGUgPSBOUF9OT1JNQUw7Ci0gICAgICAgICAgICBtX3N0cmVhbS51cmwgPSAiIjsKLSAgICAg
ICAgICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7Ci0KLSAgICAgICAgICAg
IHN0YXRpYyBjaGFyIGVtcHR5TWltZVR5cGVbXSA9ICIiOwotICAgICAgICAgICAgbV9wbHVnaW5G
dW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIGVtcHR5TWltZVR5cGUsICZtX3N0cmVhbSwgZmFs
c2UsICZtX3RyYW5zZmVyTW9kZSk7Ci0gICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95
c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOwotCi0gICAgICAgICAgICAv
LyBpbiBzdWNjZXNzZnVsIHJlcXVlc3RzLCB0aGUgVVJMIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRl
ZCBhbmQgZnJlZWQgaW4gb3VyCi0gICAgICAgICAgICAvLyBkZXN0cnVjdG9yLCBzbyByZXNldCBp
dCB0byAwCi0gICAgICAgICAgICBtX3N0cmVhbS51cmwgPSAwOwotICAgICAgICB9Ci0gICAgICAg
IG1fcGx1Z2luRnVuY3MtPnVybG5vdGlmeShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKLSAg
ICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOwotICAgIH0KLQotICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOwot
Ci0gICAgaWYgKCFtX2xvYWRNYW51YWxseSAmJiBtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQt
PnN0cmVhbURpZEZpbmlzaExvYWRpbmcodGhpcyk7Ci0KLSAgICBpZiAoIW1fcGF0aC5pc051bGwo
KSkKLSAgICAgICAgZGVsZXRlRmlsZShtX3BhdGgpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6
ZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoKQotewotICAgIGRlbGl2ZXJEYXRhKCk7Ci19Ci0KLXZv
aWQgUGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YSgpCi17Ci0gICAgQVNTRVJUKG1fZGVsaXZlcnlE
YXRhKTsKLSAgICAKLSAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNhbmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJj
ZUxvYWRlciBvbiBlcnJvciBzbyB3ZSBkb24ndCByZWFjaCB0aGlzIGNhc2UKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7
Ci0KLSAgICBpZiAoIW1fc3RyZWFtLm5kYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50MzJfdCB0b3RhbEJ5dGVzID0gbV9kZWxpdmVy
eURhdGEtPnNpemUoKTsKLSAgICBpbnQzMl90IHRvdGFsQnl0ZXNEZWxpdmVyZWQgPSAwOwotCi0g
ICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVl
KTsKLSAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKLSAgICAg
ICAgaW50MzJfdCBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2lu
c3RhbmNlLCAmbV9zdHJlYW0pOwotCi0gICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsK
LSAgICAgICAgICAgIG1fZGVsYXlEZWxpdmVyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsaXZlcnlCeXRl
cyA9IG1pbihkZWxpdmVyeUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7
Ci0gICAgICAgICAgICBpbnQzMl90IGRhdGFMZW5ndGggPSBkZWxpdmVyeUJ5dGVzOwotICAgICAg
ICAgICAgY2hhciogZGF0YSA9IG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVs
aXZlcmVkOwotCi0gICAgICAgICAgICAvLyBXcml0ZSB0aGUgZGF0YQotICAgICAgICAgICAgZGVs
aXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwg
bV9vZmZzZXQsIGRhdGFMZW5ndGgsICh2b2lkKilkYXRhKTsKLSAgICAgICAgICAgIGlmIChkZWxp
dmVyeUJ5dGVzIDwgMCkgewotICAgICAgICAgICAgICAgIExPR19QTFVHSU5fTkVUX0VSUk9SKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgICAgICAgICBtX2xv
YWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0gICAgICAgICAgICAgICAgY2FuY2VsQW5k
RGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVy
eUJ5dGVzLCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0
ZXM7Ci0gICAgICAgICAgICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0
RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0KLSAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDAp
IHsKLSAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7Ci0gICAg
ICAgICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2
ZXJlZDsKLSAgICAgICAgICAgIG1lbW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxp
dmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsK
LSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKLSAg
ICAgICAgICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQotICAgICAgICAgICAgICAg
IGRlc3Ryb3lTdHJlYW0oKTsKLSAgICAgICAgfQotICAgIH0gCi19Ci0KLXZvaWQgUGx1Z2luU3Ry
ZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENT
dHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3Vy
Y2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9wbGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgo
KSwgIiIpKTsKLQotICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0U3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAg
IGRpZFJlY2VpdmVEYXRhKDAsIHJlc3VsdFN0cmluZy5kYXRhKCksIHJlc3VsdFN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9sb2FkZXIgPSAwOwotCi0gICAgZGVzdHJv
eVN0cmVhbShyZXN1bHRTdHJpbmcuaXNOdWxsKCkgPyBOUFJFU19ORVRXT1JLX0VSUiA6IE5QUkVT
X0RPTkUpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQotewotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIp
OwotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOwotCi0g
ICAgbV9yZXNvdXJjZVJlc3BvbnNlID0gcmVzcG9uc2U7Ci0KLSAgICBzdGFydFN0cmVhbSgpOwot
fQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBB
U1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9z
dHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKLQotICAgIC8vIElmIHRoZSBwbHVnLWluIGNh
bmNlbHMgdGhlIHN0cmVhbSBpbiBkZWxpdmVyRGF0YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKLSAg
ICAvLyBzbyBwcm90ZWN0IGl0IGhlcmUuCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVj
dCh0aGlzKTsKLQotICAgIGlmIChtX3RyYW5zZmVyTW9kZSAhPSBOUF9BU0ZJTEVPTkxZKSB7Ci0g
ICAgICAgIGlmICghbV9kZWxpdmVyeURhdGEpCi0gICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPGNoYXI+PigpOwotCi0gICAgICAgIGludCBvbGRTaXpl
ID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKLSAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6
ZShvbGRTaXplICsgbGVuZ3RoKTsKLSAgICAgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRh
KCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgpOwotCi0gICAgICAgIGRlbGl2ZXJEYXRhKCk7Ci0g
ICAgfQotCi0gICAgaWYgKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RvcHBlZCAmJiBpc0hhbmRs
ZVZhbGlkKG1fdGVtcEZpbGVIYW5kbGUpKSB7Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSB3
cml0ZVRvRmlsZShtX3RlbXBGaWxlSGFuZGxlLCBkYXRhLCBsZW5ndGgpOwotICAgICAgICBpZiAo
Ynl0ZXNXcml0dGVuICE9IGxlbmd0aCkKLSAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJl
YW0oTlBSRVNfTkVUV09SS19FUlIpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRp
ZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VF
cnJvciYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7
Ci0KLSAgICBMT0dfUExVR0lOX05FVF9FUlJPUigpOwotCi0gICAgLy8gZGVzdHJveVN0cmVhbSBj
YW4gcmVzdWx0IGluIG91ciBiZWluZyBkZWxldGVkCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4g
cHJvdGVjdCh0aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwot
Ci0gICAgbV9sb2FkZXIgPSAwOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkRmluaXNoTG9h
ZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyKQotewotICAgIEFTU0VSVF9V
TlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotICAgIEFTU0VSVChtX3N0cmVhbVN0
YXRlID09IFN0cmVhbVN0YXJ0ZWQpOwotCi0gICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0
IGluIG91ciBiZWluZyBkZWxldGVkCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0
aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7Ci0KLSAgICBtX2xvYWRlciA9
IDA7Ci19Ci0KLWJvb2wgUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0cmVhbXMoKSBjb25zdAotewot
ICAgIGlmICghbV9wbHVnaW5GdW5jcy0+Z2V0dmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAgaWYgKG1fcGx1Z2luRnVuY3MtPmdldHZhbHVl
KG1faW5zdGFuY2UsIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmcmVzdWx0KSAh
PSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJl
c3VsdCAhPSAwOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwMzJjNGMxOTA0NTEyMmY1NmFjZWY2MzJlNTc4
MThhMTVhOWJjZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5TdHJlYW1faAotI2RlZmluZSBQbHVn
aW5TdHJlYW1faAotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlVSTC5oIgot
I2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
UXVpcmtTZXQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVf
aW50ZXJuYWwuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFt
ZTsKLSAgICBjbGFzcyBQbHVnaW5TdHJlYW07Ci0KLSAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRl
IHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3RyZWFtU3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9Owot
Ci0gICAgY2xhc3MgUGx1Z2luU3RyZWFtQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZp
cnR1YWwgflBsdWdpblN0cmVhbUNsaWVudCgpIHt9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKFBsdWdpblN0cmVhbSopIHt9Ci0gICAgfTsKLQotICAgIGNsYXNz
IFBsdWdpblN0cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblN0cmVhbT4sIHByaXZhdGUg
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luU3RyZWFtPiBjcmVhdGUoUGx1Z2luU3RyZWFtQ2xpZW50
KiBjbGllbnQsIEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBi
b29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVu
Y3MqIGZ1bmN0aW9ucywgTlBQIGluc3RhbmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtz
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpblN0cmVh
bShjbGllbnQsIGZyYW1lLCByZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBm
dW5jdGlvbnMsIGluc3RhbmNlLCBxdWlya3MpKTsKLSAgICAgICAgfQotICAgICAgICB2aXJ0dWFs
IH5QbHVnaW5TdHJlYW0oKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgc3RhcnQoKTsKLSAgICAg
ICAgdm9pZCBzdG9wKCk7Ci0KLSAgICAgICAgdm9pZCBzdGFydFN0cmVhbSgpOwotCi0gICAgICAg
IHZvaWQgc2V0TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1hbnVhbGx5KSB7IG1fbG9hZE1hbnVhbGx5
ID0gbG9hZE1hbnVhbGx5OyB9Ci0KLSAgICAgICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShj
b25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdURjo6Q1N0cmluZyYgcmVzdWx0U3RyaW5nKTsK
LSAgICAgICAgdm9pZCBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKLQotICAgICAg
ICBzdGF0aWMgTlBQIG93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKik7Ci0KLSAgICAgICAgLy8gTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VF
cnJvciYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciopOwotICAgICAgICB2aXJ0dWFsIGJvb2wgd2FudHNBbGxTdHJlYW1z
KCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBQbHVnaW5TdHJlYW0oUGx1Z2luU3Ry
ZWFtQ2xpZW50KiwgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqLCBOUFAgaW5z
dGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0Jik7Ci0KLSAgICAgICAgdm9pZCBkZWxpdmVyRGF0
YSgpOwotICAgICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOwotICAgICAgICB2b2lk
IGRlc3Ryb3lTdHJlYW0oKTsKLQotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJl
cXVlc3Q7Ci0gICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNvdXJjZVJlc3BvbnNlOwotCi0g
ICAgICAgIFBsdWdpblN0cmVhbUNsaWVudCogbV9jbGllbnQ7Ci0gICAgICAgIEZyYW1lKiBtX2Zy
YW1lOwotICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVy
OwotICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7Ci0gICAgICAgIGJvb2wgbV9zZW5kTm90aWZp
Y2F0aW9uOwotICAgICAgICBQbHVnaW5TdHJlYW1TdGF0ZSBtX3N0cmVhbVN0YXRlOwotICAgICAg
ICBib29sIG1fbG9hZE1hbnVhbGx5OwotCi0gICAgICAgIFRpbWVyIG1fZGVsYXlEZWxpdmVyeVRp
bWVyOwotICAgICAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKCk7Ci0KLSAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxjaGFyPj4gbV9kZWxpdmVyeURhdGE7Ci0KLSAgICAgICAg
UGxhdGZvcm1GaWxlSGFuZGxlIG1fdGVtcEZpbGVIYW5kbGU7Ci0KLSAgICAgICAgY29uc3QgTlBQ
bHVnaW5GdW5jcyogbV9wbHVnaW5GdW5jczsKLSAgICAgICAgTlBQIG1faW5zdGFuY2U7Ci0gICAg
ICAgIHVpbnQxNl90IG1fdHJhbnNmZXJNb2RlOwotICAgICAgICBpbnQzMl90IG1fb2Zmc2V0Owot
ICAgICAgICBDU3RyaW5nIG1faGVhZGVyczsKLSAgICAgICAgU3RyaW5nIG1fcGF0aDsKLSAgICAg
ICAgTlBSZWFzb24gbV9yZWFzb247Ci0gICAgICAgIE5QU3RyZWFtIG1fc3RyZWFtOwotICAgICAg
ICBQbHVnaW5RdWlya1NldCBtX3F1aXJrczsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjIyNWMwNGNjMWVlNDFkNTYyZWRiZDkyMGM5ZDI5NzU4
ZWU0ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0
ODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+Ci0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5j
bHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIK
LSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIK
LSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiUHJveHlTZXJ2
ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
LSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9y
LmgiCi0jaW5jbHVkZSAiV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNp
bmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2lu
Y2x1ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1Zh
bHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgT1MoV0lORE9X
UykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbi5oIgotI2VuZGlmCi0KLXVzaW5nIEpTQzo6RXhlY1N0YXRlOwotdXNpbmcg
SlNDOjpKU0xvY2s7Ci11c2luZyBKU0M6OkpTT2JqZWN0OwotdXNpbmcgSlNDOjpKU1ZhbHVlOwot
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLXVzaW5nIHN0ZDo6bWluOwotCi11
c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBpbnQgc19jYWxsaW5nUGx1Z2luOwotCi10eXBlZGVm
IEhhc2hNYXA8TlBQLCBQbHVnaW5WaWV3Kj4gSW5zdGFuY2VNYXA7Ci0KLXN0YXRpYyBJbnN0YW5j
ZU1hcCYgaW5zdGFuY2VNYXAoKQotewotICAgIHN0YXRpYyBJbnN0YW5jZU1hcCYgbWFwID0gKm5l
dyBJbnN0YW5jZU1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgU3RyaW5nIHNjcmlw
dFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBVUkwmIHVybCkKLXsKLSAgICBpZiAoIXByb3Rv
Y29sSXNKYXZhU2NyaXB0KHVybCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8v
IFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCi0gICAgcmV0dXJuIGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDExKSk7Ci19Ci0KLVBsdWdpblZp
ZXcqIFBsdWdpblZpZXc6OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOwotCi12b2lkIFBsdWdpblZp
ZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpCi17Ci0gICAgcG9wUG9wdXBzRW5hYmxlZFN0
YXRlKCk7Ci19Ci0KLUludFJlY3QgUGx1Z2luVmlldzo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAot
ewotICAgIC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCi0gICAgSW50UmVjdCBj
bGlwUmVjdChtX3dpbmRvd1JlY3QpOwotICAgIAotICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5k
IGdldCB0aGUgY2xpcCByZWN0IGZyb20gdGhlIGVuY2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmll
dy4KLSAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkudmll
dygpOwotICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZv
ckZyYW1lT3duZXIobV9lbGVtZW50LCB0cnVlKSk7Ci0KLSAgICByZXR1cm4gY2xpcFJlY3Q7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS5wcmludGluZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAocmVjdCAhPSBmcmFtZVJlY3QoKSkKLSAgICAgICAgV2lkZ2V0OjpzZXRG
cmFtZVJlY3QocmVjdCk7Ci0KLSAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLQotI2lmIE9TKFdJ
TkRPV1MpCi0gICAgLy8gT24gV2luZG93cyBhbHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdl
b21ldHJ5LgotICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKLSNlbGlmIGRlZmluZWQoWFBfVU5J
WCkKLSAgICAvLyBPbiBVbml4LCBtdWx0aXBsZSBjYWxscyB0byBzZXROUFdpbmRvdygpIGluIHdp
bmRvd2VkIG1vZGUgY2F1c2VzIEZsYXNoIHRvIGNyYXNoCi0gICAgaWYgKG1fbW9kZSA9PSBOUF9G
VUxMIHx8ICFtX2lzV2luZG93ZWQpCi0gICAgICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKLSNl
bmRpZgotfQotCi12b2lkIFBsdWdpblZpZXc6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKLXsKLSAgICB1
cGRhdGVQbHVnaW5XaWRnZXQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5n
ZWQoKQotewotICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNX
aW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgcGx1Zy1pbiBm
cm9tIGRlbGV0aW9uIHdoaWxlIGRpc3BhdGNoaW5nIHRoZSBldmVudC4KLSAgICBSZWZQdHI8UGx1
Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkp
Ci0gICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50
KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQotICAgICAgICBoYW5k
bGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOwotI2lm
IGRlZmluZWQoWFBfTUFDT1NYKQotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3
aGVlbEV2ZW50KQotICAgICAgICBoYW5kbGVXaGVlbEV2ZW50KHN0YXRpY19jYXN0PFdoZWVsRXZl
bnQqPihldmVudCkpOwotI2VuZGlmCi0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7IC8vIFdlIGRvbid0IGtub3cgaWYgdGhlIHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vk
b3duIGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBjb250ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQg
V2ViS2l0IHRvIHNob3cgYSBkZWZhdWx0IG9uZS4KLSNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmZvY3Vzb3V0RXZlbnQpCi0gICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQo
KTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5mb2N1c2luRXZl
bnQpCi0gICAgICAgIGhhbmRsZUZvY3VzSW5FdmVudCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6aW5pdCgpCi17Ci0gICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fcGx1
Z2luKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5k
UGx1Z2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIExPRyhQbHVnaW5zLCAiUGx1
Z2luVmlldzo6aW5pdCgpOiBJbml0aWFsaXppbmcgcGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgewotICAg
ICAgICBtX3BsdWdpbiA9IDA7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghc3RhcnRPckFk
ZFRvVW5zdGFydGVkTGlzdCgpKSB7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2Fu
Tm90TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RhdHVzID0g
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OwotfQotCi1ib29sIFBsdWdpblZpZXc6OnN0
YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKQotewotICAgIGlmICghbV9wYXJlbnRGcmFtZS0+cGFn
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBvbmx5IGRlbGF5IHN0YXJ0
aW5nIHRoZSBwbHVnLWluIGlmIHdlJ3JlIGdvaW5nIHRvIGtpY2sgb2ZmIHRoZSBsb2FkCi0gICAg
Ly8gb3Vyc2VsdmVzLiBPdGhlcndpc2UsIHRoZSBsb2FkZXIgd2lsbCB0cnkgdG8gZGVsaXZlciBk
YXRhIGJlZm9yZSB3ZSd2ZQotICAgIC8vIHN0YXJ0ZWQgdGhlIHBsdWctaW4uCi0gICAgaWYgKCFt
X2xvYWRNYW51YWxseSAmJiAhbV9wYXJlbnRGcmFtZS0+cGFnZSgpLT5jYW5TdGFydE1lZGlhKCkp
IHsKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExp
c3RlbmVyKHRoaXMpOwotICAgICAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSB0cnVlOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhcnQoKTsKLX0KLQotYm9vbCBQ
bHVnaW5WaWV3OjpzdGFydCgpCi17Ci0gICAgaWYgKG1faXNTdGFydGVkKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSBmYWxzZTsKLQotICAgIFBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnJlZ2lzdGVyUGx1Z2luKG1faW5zdGFu
Y2UpOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLSAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPm5ld3ApOwotCi0gICAgTlBFcnJvciBucEVycjsKLSAgICB7Ci0gICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAgICBucEVyciA9IG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUudXRmOCgpLmRh
dGEoKSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3BhcmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9w
YXJhbVZhbHVlcywgTlVMTCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAg
ICAgICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOwotICAgIH0KLQotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikg
ewotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47Ci0gICAg
ICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnVucmVnaXN0ZXJQbHVn
aW4obV9pbnN0YW5jZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2lz
U3RhcnRlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFu
dWFsbHkpIHsKLSAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFy
ZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOwotICAgICAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOwotICAgICAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtX3VybCk7Ci0gICAg
ICAgIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOwotICAgIH0KLQotICAgIG1fc3Rh
dHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OwotCi0gICAgaWYgKCFwbGF0Zm9y
bVN0YXJ0KCkpCi0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdp
bjsKLQotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBs
dWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQoKQotewotICAgIEFTU0VSVCghbV9pc1N0YXJ0ZWQpOwot
ICAgIGlmICghc3RhcnQoKSkKLSAgICAgICAgcGFyZW50RnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50
KCkuZGlzcGF0Y2hEaWRGYWlsVG9TdGFydFBsdWdpbih0aGlzKTsKLX0KLQotUGx1Z2luVmlldzo6
flBsdWdpblZpZXcoKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6flBsdWdpblZp
ZXcoKSIpOwotCi0gICAgQVNTRVJUKCFtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7Ci0K
LSAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZmluZCB0aGUgcGx1Zy1pbiwgd2UnbGwgcmV0dXJuIGVh
cmx5IGluIG91ciBjb25zdHJ1Y3RvciwgYW5kCi0gICAgLy8gbV9pbnN0YW5jZSB3aWxsIGJlIDAu
Ci0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAgIGluc3RhbmNlTWFwKCkucmVtb3ZlKG1faW5z
dGFuY2UpOwotCi0gICAgaWYgKG1faXNXYWl0aW5nVG9TdGFydCkKLSAgICAgICAgbV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwotCi0g
ICAgc3RvcCgpOwotCi0gICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNv
dW50KTsKLSAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsK
LQotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotCi0gICAgbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCku
Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7Ci0KLSAgICBpZiAobV9wbHVnaW4g
JiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1
Z2luKSkpCi0gICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpzdG9wKCkKLXsKLSAgICBpZiAoIW1faXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnN0b3AoKTogU3RvcHBpbmcgcGx1Zy1pbiAnJXMn
IiwgbV9wbHVnaW4tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIEhhc2hTZXQ8UmVmUHRy
PFBsdWdpblN0cmVhbT4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOwotICAgIEhhc2hTZXQ8UmVmUHRy
PFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKLSAgICBmb3Ig
KEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAoKml0KS0+c3RvcCgpOwotICAgICAg
ICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9z
dHJlYW1zLmlzRW1wdHkoKSk7Ci0KLSAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOwotCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2lmIGRlZmluZWQo
WFBfV0lOKSAmJiAhUExBVEZPUk0oR1RLKQotICAgIC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdwot
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9
IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9X
TkRQUk9DKTsKLQotICAgICAgICBpZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFBy
b2MpCi0gICAgICAgICAgICBTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTFBfV05EUFJPQywgKExPTkdfUFRSKW1fcGx1Z2luV25kUHJvYyk7Ci0gICAgfQotI2VuZGlm
IC8vICFkZWZpbmVkKFhQX1dJTikgfHwgUExBVEZPUk0oR1RLKQotI2VuZGlmIC8vIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaWYgIWRlZmluZWQoWFBfTUFDT1NYKQotICAgIC8vIENs
ZWFyIHRoZSB3aW5kb3cKLSAgICBtX25wV2luZG93LndpbmRvdyA9IDA7Ci0KLSAgICBpZiAobV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyAmJiAhbV9wbHVnaW4tPnF1aXJrcygpLmNv
bnRhaW5zKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpKSB7Ci0g
ICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKLSAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDAp
OwotICAgIH0KLQotI2lmZGVmIFhQX1VOSVgKLSAgICBkZWxldGUgc3RhdGljX2Nhc3Q8TlBTZXRX
aW5kb3dDYWxsYmFja1N0cnVjdCo+KG1fbnBXaW5kb3cud3NfaW5mbyk7Ci0gICAgbV9ucFdpbmRv
dy53c19pbmZvID0gMDsKLSNlbmRpZgotCi0jZW5kaWYgLy8gIWRlZmluZWQoWFBfTUFDT1NYKQot
Ci0gICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBs
dWdpbihtX2luc3RhbmNlKTsKLQotICAgIE5QU2F2ZWREYXRhKiBzYXZlZERhdGEgPSAwOwotICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7Ci0gICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5kZXN0cm95KG1faW5zdGFuY2UsICZzYXZlZERhdGEpOwotICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldygwKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IGlmIChzYXZlZERhdGEpIHsKLSAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgc2F2ZSB0aGlzIGRh
dGEgaW5zdGVhZCBvZiBqdXN0IGRpc2NhcmRpbmcgaXQKLSAgICAgICAgaWYgKHNhdmVkRGF0YS0+
YnVmKQotICAgICAgICAgICAgTlBOX01lbUZyZWUoc2F2ZWREYXRhLT5idWYpOwotICAgICAgICBO
UE5fTWVtRnJlZShzYXZlZERhdGEpOwotICAgIH0KLSNlbmRpZgotCi0gICAgbV9pbnN0YW5jZS0+
cGRhdGEgPSAwOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBs
dWdpblZpZXcqIHBsdWdpblZpZXcpCi17Ci0gICAgc19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdp
blZpZXc7Ci19Ci0KLVBsdWdpblZpZXcqIFBsdWdpblZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCkK
LXsKLSAgICByZXR1cm4gc19jdXJyZW50UGx1Z2luVmlldzsKLX0KLQotc3RhdGljIGNoYXIqIGNy
ZWF0ZVVURjhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCi17Ci0gICAgQ1N0cmluZyBjc3RyID0g
c3RyLnV0ZjgoKTsKLSAgICBjb25zdCBzaXplX3QgY3N0ckxlbmd0aCA9IGNzdHIubGVuZ3RoKCk7
Ci0gICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhj
c3RyTGVuZ3RoICsgMSkpOwotCi0gICAgbWVtY3B5KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHJM
ZW5ndGgpOwotICAgIHJlc3VsdFtjc3RyTGVuZ3RoXSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3Qq
IHJlcXVlc3QpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25n
ZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCi0gICAgLy8gZGlzcGxheWVkIHVu
bGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCi0gICAg
Y29uc3QgU3RyaW5nJiB0YXJnZXRGcmFtZU5hbWUgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0
KCkuZnJhbWVOYW1lKCk7Ci0gICAgaWYgKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50
TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIo
KSAmJiAodGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS5m
aW5kKHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJlbnRGcmFtZSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFVSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291
cmNlUmVxdWVzdCgpLnVybCgpOwotICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lm
SmF2YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKLQotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdl
c3R1cmVJbmRpY2F0b3IocmVxdWVzdC0+c2hvdWxkQWxsb3dQb3B1cHMoKSA/IERlZmluaXRlbHlQ
cm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0K
LSAgICBpZiAoanNTdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gaWYgdGhpcyBpcyBub3Qg
YSB0YXJnZXRlZCByZXF1ZXN0LCBjcmVhdGUgYSBzdHJlYW0gZm9yIGl0LiBvdGhlcndpc2UsCi0g
ICAgICAgIC8vIGp1c3QgcGFzcyBpdCBvZmYgdG8gdGhlIGxvYWRlcgotICAgICAgICBpZiAodGFy
Z2V0RnJhbWVOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVh
bT4gc3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQo
KSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0
LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBs
dWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7Ci0gICAgICAgICAg
ICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGZyYW1lIGlzIG91
ciBmcmFtZSwgd2UgY291bGQgZGVzdHJveSB0aGUKLSAgICAgICAgICAgIC8vIFBsdWdpblZpZXcs
IHNvIHdlIHByb3RlY3QgaXQuIDxyZGFyOi8vcHJvYmxlbS82OTkxMjUxPgotICAgICAgICAgICAg
UmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAgICAgICAgIEZyYW1lTG9h
ZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1l
TG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSk7Ci0gICAgICAgICAgICBmcmFtZVJlcXVl
c3Quc2V0RnJhbWVOYW1lKHRhcmdldEZyYW1lTmFtZSk7Ci0gICAgICAgICAgICBmcmFtZVJlcXVl
c3Quc2V0U2hvdWxkQ2hlY2tOZXdXaW5kb3dQb2xpY3kodHJ1ZSk7Ci0gICAgICAgICAgICBtX3Bh
cmVudEZyYW1lLT5sb2FkZXIoKS5sb2FkKGZyYW1lUmVxdWVzdCk7Ci0KLSAgICAgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVu
IHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZwotICAgICAgICAgICAgaWYgKHJlcXVl
c3QtPnNlbmROb3RpZmljYXRpb24oKSkgewotICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0g
ICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgp
KTsKLSAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGFyZ2V0ZWQgSmF2
YVNjcmlwdCByZXF1ZXN0cyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRh
aW5zIHRoZSBKYXZhU2NyaXB0IHBsdWdpbgotICAgIC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUg
c3VyZSBpbiA6OmxvYWQuCi0gICAgQVNTRVJUKHRhcmdldEZyYW1lTmFtZS5pc0VtcHR5KCkgfHwg
bV9wYXJlbnRGcmFtZS0+dHJlZSgpLmZpbmQodGFyZ2V0RnJhbWVOYW1lKSA9PSBtX3BhcmVudEZy
YW1lKTsKLSAgICAKLSAgICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVn
aW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gaXQuCi0g
ICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3Rvcih0aGlzKTsKLSAgICBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSByZXN1bHQgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5leGVjdXRlU2NyaXB0
KGpzU3RyaW5nLCByZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpKTsKLQotICAgIGlmICh0YXJn
ZXRGcmFtZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKLQot
ICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX3BhcmVudEZyYW1lLT5zY3Jp
cHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAg
Q1N0cmluZyBjc3RyOwotICAgICAgICBpZiAocmVzdWx0LmdldFN0cmluZyhzY3JpcHRTdGF0ZSwg
cmVzdWx0U3RyaW5nKSkKLSAgICAgICAgICAgIGNzdHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOwot
Ci0gICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3Jl
YXRlKHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3Qo
KS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0
LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3Bs
dWdpbi0+cXVpcmtzKCkpOwotICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgICAg
IHN0cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0ocmVxdWVzdFVSTCwgY3N0cik7Ci0gICAgfQot
fQotCi12b2lkIFBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQo
IW1fcmVxdWVzdHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1faXNKYXZhU2NyaXB0UGF1c2Vk
KTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0ID0gV1RGOjpt
b3ZlKG1fcmVxdWVzdHNbMF0pOwotICAgIG1fcmVxdWVzdHMucmVtb3ZlKDApOwotICAgIAotICAg
IC8vIFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVmb3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qg
c2luY2UgdGhlIGNhbGwgdG8KLSAgICAvLyBwZXJmb3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBs
dWdpbiB2aWV3IHRvIGJlIGRlbGV0ZWQuCi0gICAgaWYgKCFtX3JlcXVlc3RzLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOwotCi0gICAgcGVyZm9ybVJl
cXVlc3QocmVxdWVzdC5nZXQoKSk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2NoZWR1bGVSZXF1
ZXN0KHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0KQotewotICAgIG1fcmVx
dWVzdHMuYXBwZW5kKFdURjo6bW92ZShyZXF1ZXN0KSk7Ci0KLSAgICBpZiAoIW1faXNKYXZhU2Ny
aXB0UGF1c2VkKQotICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0K
LU5QRXJyb3IgUGx1Z2luVmlldzo6bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxv
YWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCi17Ci0g
ICAgQVNTRVJUKGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgp
ID09ICJHRVQiIHx8IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhv
ZCgpID09ICJQT1NUIik7Ci0KLSAgICBVUkwgdXJsID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS51cmwoKTsKLSAgICAKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgcmVxdWVzdHMg
dG8gYmUgbWFkZSB3aGVuIHRoZSBkb2N1bWVudCBsb2FkZXIgaXMgc3RvcHBpbmcgYWxsIGxvYWRl
cnMuCi0gICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigp
LmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIgfHwgbG9hZGVyLT5pc1N0b3BwaW5n
KCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgY29uc3QgU3Ry
aW5nJiB0YXJnZXRGcmFtZU5hbWUgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgpOwotICAg
IFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwpOwotCi0g
ICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSkgewotICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4K
LSAgICAgICAgaWYgKCFtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhO
b3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKLQotICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBhbGxvdyBK
UyByZXF1ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVn
LWluLgotICAgICAgICBpZiAoIXRhcmdldEZyYW1lTmFtZS5pc051bGwoKSAmJiBtX3BhcmVudEZy
YW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUpICE9IG1fcGFyZW50RnJhbWUpCi0gICAg
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICB9IGVsc2UgaWYgKCFtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNwbGF5KHVybCkp
Ci0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgc2NoZWR1bGVSZXF1
ZXN0KHN0ZDo6bWFrZV91bmlxdWU8UGx1Z2luUmVxdWVzdD4oZnJhbWVMb2FkUmVxdWVzdCwgc2Vu
ZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwgYXJlUG9wdXBzQWxsb3dlZCgpKSk7Ci0KLSAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBVUkwgbWFrZVVSTChjb25zdCBVUkwm
IGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMU3RyaW5nKQotewotICAgIFN0cmluZyB1
cmxTdHJpbmcgPSByZWxhdGl2ZVVSTFN0cmluZzsKLQotICAgIC8vIFN0cmlwIHJldHVybiBjaGFy
YWN0ZXJzLgotICAgIHVybFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJ1xuJywgIiIpOwotICAg
IHVybFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJ1xyJywgIiIpOwotCi0gICAgcmV0dXJuIFVS
TChiYXNlVVJMLCB1cmxTdHJpbmcpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFVSTE5v
dGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0
YSkKLXsKLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0KLSAgICBmcmFtZUxvYWRSZXF1ZXN0
LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNl
VVJMKCksIHVybCkpOwotCi0gICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwg
bm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQotewotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVM
b2FkUmVxdWVzdChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsK
LQotICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7Ci0gICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLSAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKSk7Ci0KLSAgICByZXR1cm4gbG9hZChm
cmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6cG9z
dFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3Qg
bGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewot
ICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5
RGF0YSwgdHJ1ZSwgdHJ1ZSk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6cG9zdFVSTChjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFy
KiBidWYsIE5QQm9vbCBmaWxlKQotewotICAgIC8vIEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cg
aGVhZGVycyB0byBiZSBzcGVjaWZpZWQgdmlhIE5QUF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxl
LgotICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwg
ZmFsc2UsIGZpbGUpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6Om5ld1N0cmVhbShOUE1JTUVU
eXBlLCBjb25zdCBjaGFyKiAvKiB0YXJnZXQgKi8sIE5QU3RyZWFtKiopCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICAvLyBVbnN1cHBvcnRlZAotICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOwotfQotCi1pbnQzMl90IFBsdWdpblZpZXc6OndyaXRlKE5QU3RyZWFtKiwgaW50MzJf
dCAvKiBsZW4gKi8sIHZvaWQqIC8qIGJ1ZmZlciAqLykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIC8vIFVuc3VwcG9ydGVkCi0gICAgcmV0dXJuIC0xOwotfQotCi1OUEVycm9yIFBsdWdp
blZpZXc6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQot
ewotICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0cmVhbTo6b3duZXJGb3JTdHJlYW0oc3RyZWFt
KSAhPSBtX2luc3RhbmNlKQotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9F
UlJPUjsKLQotICAgIFBsdWdpblN0cmVhbSogYnJvd3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBs
dWdpblN0cmVhbSo+KHN0cmVhbS0+bmRhdGEpOwotICAgIGJyb3dzZXJTdHJlYW0tPmNhbmNlbEFu
ZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0K
LQotdm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y2hy
b21lKCkuc2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLmdldCgpLCBTdHJpbmc6OmZyb21V
VEY4KG1lc3NhZ2UpKTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZShOUFBWYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5W
aWV3OjpzZXRWYWx1ZSglcyk6ICIsIHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSh2YXJpYWJsZSwg
dmFsdWUpLmRhdGEoKSk7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUFBW
cGx1Z2luV2luZG93Qm9vbDoKLSAgICAgICAgbV9pc1dpbmRvd2VkID0gdmFsdWU7Ci0gICAgICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJv
b2w6Ci0gICAgICAgIG1faXNUcmFuc3BhcmVudCA9IHZhbHVlOwotICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Ci0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgY2FzZSBOUFBWcGx1Z2lu
RHJhd2luZ01vZGVsOiB7Ci0gICAgICAgIC8vIENhbiBvbmx5IHNldCBkcmF3aW5nIG1vZGVsIGlu
c2lkZSBOUFBfTmV3KCkKLSAgICAgICAgaWYgKHRoaXMgIT0gY3VycmVudFBsdWdpblZpZXcoKSkK
LSAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICAgICAgTlBEcmF3
aW5nTW9kZWwgbmV3RHJhd2luZ01vZGVsID0gTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVl
KSk7Ci0gICAgICAgIHN3aXRjaCAobmV3RHJhd2luZ01vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBE
cmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uOgotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW4gYXNrZWQgZm9yIHVuc3Vw
cG9ydGVkIGRyYXdpbmcgbW9kZWw6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgcHJldHR5TmFt
ZUZvckRyYXdpbmdNb2RlbChuZXdEcmF3aW5nTW9kZWwpKTsKLSAgICAgICAgICAgIHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBOUFBWcGx1
Z2luRXZlbnRNb2RlbDogewotICAgICAgICAvLyBDYW4gb25seSBzZXQgZXZlbnQgbW9kZWwgaW5z
aWRlIE5QUF9OZXcoKQotICAgICAgICBpZiAodGhpcyAhPSBjdXJyZW50UGx1Z2luVmlldygpKQot
ICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICBOUEV2ZW50
TW9kZWwgbmV3RXZlbnRNb2RlbCA9IE5QRXZlbnRNb2RlbCh1aW50cHRyX3QodmFsdWUpKTsKLSAg
ICAgICAgc3dpdGNoIChuZXdFdmVudE1vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVs
Q29jb2E6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBhc2tlZCBmb3IgdW5zdXBwb3J0
ZWQgZXZlbnQgbW9kZWw6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgcHJldHR5TmFtZUZvckV2
ZW50TW9kZWwobmV3RXZlbnRNb2RlbCkpOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gZGVmaW5lZChYUF9NQUNPU1gp
Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52
YWxpZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lu
dmFsaWRSZWN0cy5zaXplKCk7IGkrKykKLSAgICAgICAgaW52YWxpZGF0ZVJlY3QobV9pbnZhbGlk
UmVjdHNbaV0pOwotICAgIG1faW52YWxpZFJlY3RzLmNsZWFyKCk7Ci19Ci0KLQotdm9pZCBQbHVn
aW5WaWV3OjpwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGJvb2wgc3RhdGUpCi17Ci0gICAgbV9wb3B1
cFN0YXRlU3RhY2suYXBwZW5kKHN0YXRlKTsKLX0KLSAKLXZvaWQgUGx1Z2luVmlldzo6cG9wUG9w
dXBzRW5hYmxlZFN0YXRlKCkKLXsKLSAgICBtX3BvcHVwU3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7
Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6YXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3BvcHVwU3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3BvcHVw
U3RhdGVTdGFjay5sYXN0KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2V0SmF2YVNjcmlwdFBhdXNlZChib29sIHBhdXNlZCkKLXsKLSAgICBpZiAobV9pc0ph
dmFTY3JpcHRQYXVzZWQgPT0gcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pc0phdmFT
Y3JpcHRQYXVzZWQgPSBwYXVzZWQ7Ci0KLSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0g
ICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0b3AoKTsKLSAgICBlbHNlIGlmICghbV9yZXF1ZXN0cy5p
c0VtcHR5KCkpCi0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotTlBPYmplY3QqIFBsdWdpblZpZXc6Om5w
T2JqZWN0KCkKLXsKLSAgICBOUE9iamVjdCogb2JqZWN0ID0gMDsKLQotICAgIGlmICghbV9pc1N0
YXJ0ZWQgfHwgIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gT24gV2luZG93cywgY2FsbGluZyBKYXZhJ3Mg
TlBOX0dldFZhbHVlIGNhbiBhbGxvdyB0aGUgbWVzc2FnZSBsb29wIHRvCi0gICAgLy8gcnVuLCBh
bGxvd2luZyBsb2FkaW5nIHRvIHRha2UgcGxhY2Ugb3IgSmF2YVNjcmlwdCB0byBydW4uIFByb3Rl
Y3QgdGhlCi0gICAgLy8gUGx1Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uLiA8cmRhcjovL3Byb2Js
ZW0vNjk3ODgwND4KLSAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAg
IE5QRXJyb3IgbnBFcnI7Ci0gICAgewotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsKLSAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0
dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7
Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgICAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJf
Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLSNl
bmRpZgotCi1QYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBQbHVnaW5WaWV3Ojpi
aW5kaW5nSW5zdGFuY2UoKQotewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IE5QT2JqZWN0KiBvYmplY3QgPSBucE9iamVjdCgpOwotICAgIGlmICghb2JqZWN0KQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGlmIChoYXNPbmVSZWYoKSkgewotICAgICAgICAvLyBUaGUgcmVu
ZGVyZXIgZm9yIHRoZSBQbHVnaW5WaWV3IHdhcyBkZXN0cm95ZWQgZHVyaW5nIHRoZSBhYm92ZSBj
YWxsLCBhbmQKLSAgICAgICAgLy8gdGhlIFBsdWdpblZpZXcgd2lsbCBiZSBkZXN0cm95ZWQgd2hl
biB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHNvIHdlCi0gICAgICAgIC8vIHJldHVybiBudWxsLgot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9v
dE9iamVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNyZWF0ZVJvb3RPYmplY3Qo
dGhpcyk7Ci0gICAgUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBpbnN0YW5jZSA9IEpT
Qzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRlKG9iamVjdCwgcm9vdC5yZWxlYXNlKCkpOwot
Ci0gICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2Uu
cmVsZWFzZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdp
blZpZXc6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKiBzdHJlYW0pCi17Ci0gICAgQVNT
RVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0pKTsKLQotICAgIG1fc3RyZWFtcy5yZW1vdmUo
c3RyZWFtKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMp
Ci17Ci0gICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7
Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gcGFyYW1OYW1lcy5zaXplKCk7Ci0gICAgdW5zaWduZWQg
cGFyYW1Db3VudCA9IDA7Ci0KLSAgICBtX3BhcmFtTmFtZXMgPSByZWludGVycHJldF9jYXN0PGNo
YXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOwotICAgIG1fcGFyYW1WYWx1
ZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICog
c2l6ZSkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2lu
ZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdub3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3
aW5kb3dsZXNzdmlkZW8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChw
YXJhbU5hbWVzW2ldID09ICJwbHVnaW5zcGFnZSIpCi0gICAgICAgICAgICBtX3BsdWdpbnNQYWdl
ID0gcGFyYW1WYWx1ZXNbaV07Ci0KLSAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0g
Y3JlYXRlVVRGOFN0cmluZyhwYXJhbU5hbWVzW2ldKTsKLSAgICAgICAgbV9wYXJhbVZhbHVlc1tw
YXJhbUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOwotCi0gICAgICAg
IHBhcmFtQ291bnQrKzsKLSAgICB9Ci0KLSAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50Owot
fQotCi1QbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luLCBIVE1MUGx1Z0luRWxlbWVudCogZWxl
bWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGJvb2wgbG9hZE1hbnVhbGx5KQotICAgIDogbV9wYXJlbnRGcmFtZShwYXJlbnRGcmFtZSkKLSAg
ICAsIG1fcGx1Z2luKHBsdWdpbikKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9p
c1N0YXJ0ZWQoZmFsc2UpCi0gICAgLCBtX3VybCh1cmwpCi0gICAgLCBtX3N0YXR1cyhQbHVnaW5T
dGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgLCBtX3JlcXVlc3RUaW1lcigqdGhpcywgJlBs
dWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKQotICAgICwgbV9pbnZhbGlkYXRlVGltZXIoKnRo
aXMsICZQbHVnaW5WaWV3OjppbnZhbGlkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fcG9wUG9wdXBz
U3RhdGVUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCkK
LSAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0
VGltZXJGaXJlZCkKLSAgICAsIG1fbW9kZShsb2FkTWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1C
RUQpCi0gICAgLCBtX3BhcmFtTmFtZXMoMCkKLSAgICAsIG1fcGFyYW1WYWx1ZXMoMCkKLSAgICAs
IG1fbWltZVR5cGUobWltZVR5cGUpCi0gICAgLCBtX2luc3RhbmNlKDApCi0jaWYgZGVmaW5lZChY
UF9NQUNPU1gpCi0gICAgLCBtX2lzV2luZG93ZWQoZmFsc2UpCi0gICAgLCBtX3VwZGF0ZWRDb2Nv
YVRleHRJbnB1dFJlcXVlc3RlZChmYWxzZSkKLSAgICAsIG1fa2V5RG93blNlbnQoZmFsc2UpCi0g
ICAgLCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcigwKQotI2Vsc2UKLSAgICAsIG1faXNXaW5kb3dl
ZCh0cnVlKQotI2VuZGlmCi0gICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCi0gICAgLCBtX2hh
dmVJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1faXNXYWl0aW5nVG9TdGFydChmYWxzZSkKLSNp
ZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQotI2VuZGlmCi0j
aWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLCBtX3Bs
dWdpblduZFByb2MoMCkKLSAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKLSAgICAsIG1faXNDYWxsaW5n
UGx1Z2luV25kUHJvYyhmYWxzZSkKLSAgICAsIG1fd21QcmludEhEQygwKQotICAgICwgbV9oYXZl
VXBkYXRlZFBsdWdpbldpZGdldChmYWxzZSkKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEVGTCkKLSAg
ICAsIG1fd2luZG93KDApCi0jZW5kaWYKLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICAsIG1f
Y29udGV4dFJlZigwKQotI2VuZGlmCi0jaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlKHRydWUp
Ci0gICAgLCBtX2RyYXdhYmxlKDApCi0gICAgLCBtX3Zpc3VhbCgwKQotICAgICwgbV9jb2xvcm1h
cCgwKQotICAgICwgbV9wbHVnaW5EaXNwbGF5KDApCi0jZW5kaWYKLSAgICAsIG1fbG9hZE1hbnVh
bGx5KGxvYWRNYW51YWxseSkKLSAgICAsIG1fbWFudWFsU3RyZWFtKDApCi0gICAgLCBtX2lzSmF2
YVNjcmlwdFBhdXNlZChmYWxzZSkKLSAgICAsIG1faGF2ZUNhbGxlZFNldFdpbmRvdyhmYWxzZSkK
LXsKLSAgICBpZiAoIW1fcGx1Z2luKSB7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVz
Q2FuTm90RmluZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1faW5zdGFu
Y2UgPSAmbV9pbnN0YW5jZVN0cnVjdDsKLSAgICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7Ci0g
ICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOwotCi0gICAgaW5zdGFuY2VNYXAoKS5hZGQobV9pbnN0
YW5jZSwgdGhpcyk7Ci0KLSAgICBzZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVz
KTsKLQotICAgIG1lbXNldCgmbV9ucFdpbmRvdywgMCwgc2l6ZW9mKG1fbnBXaW5kb3cpKTsKLSNp
ZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICBtZW1zZXQoJm1fbnBDZ0NvbnRleHQsIDAsIHNpemVv
ZihtX25wQ2dDb250ZXh0KSk7Ci0jZW5kaWYKLQotICAgIHJlc2l6ZShzaXplKTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3Ojpmb2N1c1BsdWdpbkVsZW1lbnQoKQotewotICAgIGlmIChQYWdlKiBwYWdl
ID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS5zZXRGb2N1c2VkRWxlbWVudChtX2VsZW1lbnQsIG1fcGFyZW50RnJhbWUpOwotICAgIGVsc2UK
LSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobV9l
bGVtZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdp
blN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KG1fbG9hZE1hbnVhbGx5KTsKLSAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1f
bWFudWFsU3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5n
ZXQoKSwgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVx
dWVzdCgpLCBmYWxzZSwgMCwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1f
cGx1Z2luLT5xdWlya3MoKSk7Ci0gICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0
cnVlKTsKLQotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9u
c2UpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVh
bGx5KTsKLSAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOwotICAgIAotICAgIG1fbWFudWFsU3Ry
ZWFtLT5kaWRSZWNlaXZlRGF0YSgwLCBkYXRhLCBsZW5ndGgpOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OmRpZEZpbmlzaExvYWRpbmcoKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xv
YWRNYW51YWxseSk7Ci0gICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFs
U3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZh
aWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBs
dWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICAKLSAgICBpZiAobV9tYW51YWxTdHJlYW0pCi0gICAg
ICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGYWlsKDAsIGVycm9yKTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpzZXRDYWxsaW5nUGx1Z2luKGJvb2wgYikgY29uc3QKLXsKLSAgICBpZiAoIW1fcGx1Z2lu
LT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoYikKLSAgICAgICAgKytzX2NhbGxpbmdQbHVnaW47Ci0g
ICAgZWxzZQotICAgICAgICAtLXNfY2FsbGluZ1BsdWdpbjsKLQotICAgIEFTU0VSVChzX2NhbGxp
bmdQbHVnaW4gPj0gMCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkK
LXsKLSAgICByZXR1cm4gc19jYWxsaW5nUGx1Z2luID4gMDsKLX0KLQotUGFzc1JlZlB0cjxQbHVn
aW5WaWV3PiBQbHVnaW5WaWV3OjpjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRT
aXplJiBzaXplLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotewot
ICAgIC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZp
bmRQbHVnaW4gd2lsbCBzZWFyY2ggZm9yCi0gICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0
ZW5zaW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5n
Ci0gICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2Uq
IHBsdWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4o
dXJsLCBtaW1lVHlwZUNvcHkpOwotCi0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJl
ZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICBpZiAoIXBsdWdp
biAmJiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCkpIHsKLSAg
ICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7Ci0gICAgICAgIHBsdWdpbiA9IFBsdWdpbkRh
dGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkp
OwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luVmlldyhwYXJlbnRGcmFt
ZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBt
aW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmZyZWVT
dHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFz
dHJpbmdBcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykKLSAgICAgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOwotCi0gICAgZmFz
dEZyZWUoc3RyaW5nQXJyYXkpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJs
YW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gYnVmZmVy
LnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50
IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikK
LXsKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGggLSA0OyBpKyspIHsKLSAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2Vu
ZHMgIlxuXG4iLgotICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0g
PT0gJ1xuJykKLSAgICAgICAgICAgIHJldHVybiBpICsgMjsKLSAgICAgICAgCi0gICAgICAgIC8v
IFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0
aGUgZmlyc3QgbGluZS4KLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSAr
IDFdID09ICdcbicpIHsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGlmIChpID09
IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICBlbHNlIGlmIChieXRl
c1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJ
dCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAx
OwotICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0g
PT0gJ1xuJykKLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMg
IlxyXG5cclxuIiAoMzc1ODExMykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0
IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBh
cwotICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1
c2UgTEYKLSAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBh
IGNvbWJpbmF0aW9uCi0gICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5Piks
IHNvIGZpbmRFT0wgbmVlZHMKLSAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBu
b3cgYWNjZXB0IENSTEYsIExGIG9yCi0gICAgLy8gQ1IuCi0gICAgLy8KLSAgICAvLyBJdCByZXR1
cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4KLSAgICAvLyBh
IHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09
ICdcbicpCi0gICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOwotICAgICAgICBpZiAoYnl0ZXNb
aV0gPT0gJ1xyJykgewotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1
ZmZlciBib3VuZHMKLSAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNv
LCB3YWl0IGZvcgotICAgICAgICAgICAgLy8gbmV4dCByZWFkLgotICAgICAgICAgICAgaWYgKGkg
KyAxID09IGxlbmd0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgcmV0
dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1z
dGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0
IFN0cmluZyYgbmFtZSkKLXsKLSAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwot
ICAgIFN0cmluZyByZXN1bHQ7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5s
ZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIFVDaGFyIGM7Ci0KLSAgICAgICAgaWYgKGNhcGl0YWxp
emVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCi0gICAgICAg
ICAgICBjID0gdG9BU0NJSVVwcGVyKG5hbWVbaV0pOwotICAgICAgICBlbHNlIGlmICghY2FwaXRh
bGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykKLSAgICAg
ICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFtZVtpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGMgPSBuYW1lW2ldOwotCi0gICAgICAgIGlmIChuYW1lW2ldID09ICctJykKLSAgICAgICAg
ICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChj
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEhUVFBI
ZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5k
YXRhKCk7Ci0gICAgY29uc3QgY2hhciogZW9sOwotICAgIFN0cmluZyBsYXN0S2V5OwotICAgIEhU
VFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwotCi0gICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGls
IHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2Yt
bGluZXMKLSAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKLSAgICAgICAgaW50IGxpbmVMZW5ndGggPSBl
b2wgLSBieXRlczsKLSAgICAgICAgCi0gICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJh
Y3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBieSBmaW5kRU9MLgotICAgICAg
ICBieXRlcyA9IGVvbCArIDE7Ci0gICAgICAgIGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVz
ID09ICdcbicpKQotICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdv
bid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCi0KLSAgICAgICAgbGVuZ3RoIC09IChieXRlcyAt
IGxpbmUpOwotICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQotICAgICAgICAgICAgLy8gQmxh
bmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKLSAg
ICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAg
ICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1l
ZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNv
bnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAgICAgICAgICAgU3RyaW5n
IGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAg
aGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVh
ZGVyCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xvbjsKLSAgICAgICAgICAgIGZvciAoY29s
b24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29sb24rKykgewotICAg
ICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChjb2xvbiA9PSBlb2wpIAotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGln
bm9yZSBpdCBhbmQgY29udGludWUKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVh
ZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xvbiAtIGxpbmUpKTsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9
IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAm
JiAqY29sb24gIT0gJ1x0JykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKQotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9ICIiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24sIGVvbCAtIGNvbG9uKTsKLQotICAgICAgICAg
ICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBvbGRWYWx1ZSArICIsICIgKyB2YWx1ZTsKLQotICAgICAgICAgICAgICAgIGhlYWRl
ckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGhlYWRlckZpZWxkczsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3
OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJf
dCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29s
IHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQotewotICAgIGlmICghdXJsIHx8
ICFsZW4gfHwgIWJ1ZikKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0KLSAg
ICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0KLSAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxk
czsKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwotICAgIAotICAgIGlmIChmaWxlKSB7Ci0gICAg
ICAgIE5QRXJyb3IgcmVhZFJlc3VsdCA9IGhhbmRsZVBvc3RSZWFkRmlsZShidWZmZXIsIGxlbiwg
YnVmKTsKLSAgICAgICAgaWYocmVhZFJlc3VsdCAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAg
ICAgIHJldHVybiByZWFkUmVzdWx0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNp
emUobGVuKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKLSAgICB9
Ci0KLSAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgaW50IHBv
c3REYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKLQotICAgIGlmIChhbGxvd0hlYWRlcnMpIHsK
LSAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgewotICAgICAgICAgICAg
cG9zdERhdGErKzsKLSAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xp
bmUoYnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgewotICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9m
IHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKLSAgICAgICAgICAg
ICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0
aW9uKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUo
KSAtIGxvY2F0aW9uOwotCi0gICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlr
ZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKLSAgICAg
ICAgICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdl
IHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0
cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KLSAgICAgICAgICAgICAg
ICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoSFRUUEhlYWRlck5hbWU6
OkNvbnRlbnRMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlz
TnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5n
dGgudG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBoZWFkZXJGaWVs
ZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoKTsKLQotICAgICAgICAgICAg
ICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOwotICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3Ro
ID0gZGF0YUxlbmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOwot
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9w
YXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKLSAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGOjptb3ZlKGhl
YWRlckZpZWxkcykpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0
SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShwb3N0RGF0YSwgcG9zdERhdGFMZW5ndGgpKTsKLSAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotCi0gICAgcmV0dXJuIGxv
YWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Ci19Ci0K
LXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFpc1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmICghbV9lbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm47Ci0g
ICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCptX2VsZW1lbnQtPnJlbmRl
cmVyKCkpOwotICAgIAotICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKLSAgICBkaXJ0eVJl
Y3QubW92ZShyZW5kZXJlci5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci5wYWRkaW5nTGVmdCgpLCBy
ZW5kZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKSk7Ci0gICAgcmVuZGVy
ZXIucmVwYWludFJlY3RhbmdsZShkaXJ0eVJlY3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBh
aW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IG51bGxQbHVnaW5JbWFnZTsK
LSAgICBpZiAoIW51bGxQbHVnaW5JbWFnZSkKLSAgICAgICAgbnVsbFBsdWdpbkltYWdlID0gSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJudWxsUGx1Z2luIik7Ci0KLSAgICBJbnRSZWN0IGlt
YWdlUmVjdChmcmFtZVJlY3QoKS54KCksIGZyYW1lUmVjdCgpLnkoKSwgbnVsbFBsdWdpbkltYWdl
LT53aWR0aCgpLCBudWxsUGx1Z2luSW1hZ2UtPmhlaWdodCgpKTsKLQotICAgIGludCB4T2Zmc2V0
ID0gKGZyYW1lUmVjdCgpLndpZHRoKCkgLSBpbWFnZVJlY3Qud2lkdGgoKSkgLyAyOwotICAgIGlu
dCB5T2Zmc2V0ID0gKGZyYW1lUmVjdCgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAv
IDI7Ci0KLSAgICBpbWFnZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKLQotICAgIGlmICgh
cmVjdC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnRl
eHQtPnNhdmUoKTsKLSAgICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0KCkpOwotICAgIGNv
bnRleHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0K
LXN0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wICgiCi0j
aWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgICAgICJNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBP
UyBYOyIKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQotICAgICAgICAiV2luZG93czsgVTsgV2luZG93
cyBOVCA1LjE7IgotI2VsaWYgZGVmaW5lZChYUF9VTklYKQotLy8gVGhlIEd0ayBwb3J0IHVzZXMg
WDExIHBsdWdpbnMgaW4gTWFjLgotI2lmIE9TKERBUldJTikgJiYgUExBVEZPUk0oR1RLKQotICAg
ICJYMTE7IFU7IEludGVsIE1hYyBPUyBYOyIKLSNlbHNlCi0gICAgIlgxMTsgVTsgTGludXggaTY4
NjsiCi0jZW5kaWYKLSNlbmRpZgotICAgICAgICAiIGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAw
NjEwMTAgRmlyZWZveC8yLjAiOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ2hyb21lVXNl
ckFnZW50ID0gIk1vemlsbGEvNS4wICgiCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgIk1h
Y2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7IgotI2VsaWYgZGVmaW5lZChYUF9XSU4pCi0gICAg
IldpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyIKLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAg
ICAvLyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEgcGx1Z2lucyBpbiBNYWMuCi0jaWYgT1MoREFSV0lO
KSAmJiBQTEFURk9STShHVEspCi0gICAgIlgxMTsgVTsgSW50ZWwgTWFjIE9TIFg7IgotI2Vsc2UK
LSAgICAiWDExOyBVOyBMaW51eCBpNjg2OyIKLSNlbmRpZgotI2VuZGlmCi0gICAgIiBBcHBsZVdl
YktpdC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTkuMC4xMDU1LjEgU2FmYXJp
LzUzNC4zNCI7Ci0KLWNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCi17Ci0gICAg
aWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVz
ZXJBZ2VudCkpCi0gICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OwotICAgIGVsc2UgaWYg
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzQ2hyb21lVXNlckFn
ZW50KSkKLSAgICAgICAgcmV0dXJuIENocm9tZVVzZXJBZ2VudDsKLSAgICBpZiAobV91c2VyQWdl
bnQuaXNOdWxsKCkpCi0gICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVy
KCkudXNlckFnZW50KG1fdXJsKS51dGY4KCk7Ci0KLSAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0
YSgpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1jb25zdCBjaGFyKiBQ
bHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKQotewotICAgIHJldHVybiBNb3ppbGxhVXNlckFn
ZW50OwotfQotI2VuZGlmCi0KLQotdm9pZCBQbHVnaW5WaWV3OjpsaWZlU3VwcG9ydFRpbWVyRmly
ZWQoKQotewotICAgIGRlcmVmKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKCkK
LXsKLSAgICBpZiAobV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHJlZigpOwotICAgIG1fbGlmZVN1cHBvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXZvaWQgUGx1Z2luVmlldzo6
a2VlcEFsaXZlKE5QUCBpbnN0YW5jZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gaW5zdGFu
Y2VNYXAoKS5nZXQoaW5zdGFuY2UpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdmlldy0+a2VlcEFsaXZlKCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFs
dWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQotewotICAgIExPRyhQ
bHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoJXMpIiwgcHJldHR5TmFtZUZvck5Q
TlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotCi0gICAgTlBFcnJvciByZXN1bHQ7Ci0gICAg
aWYgKHBsYXRmb3JtR2V0VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
fQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkKiB2YWx1ZSkKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OmdldFZhbHVlKCVz
KSIsIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5Q
RXJyb3IgcmVzdWx0OwotICAgIGlmIChwbGF0Zm9ybUdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSwg
JnJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAocGxhdGZvcm1HZXRW
YWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUsICZyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBOVldpbmRvd05QT2Jq
ZWN0OiB7Ci0gICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKLSAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3Jp
cHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS53aW5kb3dTY3JpcHROUE9iamVjdCgp
OwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwg
YXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdp
bi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKLSAgICAg
ICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAg
dm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVj
dDsKLQotICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQotCi0gICAgY2FzZSBO
UE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7Ci0gICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBh
dXNlZCkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgICAg
IE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOwotCi0gICAgICAgIGlmIChtX2VsZW1l
bnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRU
YWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgcGx1
Z2luU2NyaXB0T2JqZWN0ID0gbV9lbGVtZW50LT5nZXROUE9iamVjdCgpOwotCi0gICAgICAgIC8v
IFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhl
cmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRt
bD4KLSAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0
YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgdm9pZCoqIHYgPSAodm9p
ZCoqKXZhbHVlOwotICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKLQotICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WcHJpdmF0ZU1vZGVC
b29sOiB7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCk7Ci0gICAg
ICAgIGlmICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
ICAgICAgICAqKChOUEJvb2wqKXZhbHVlKSA9IHBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCk7
Ci0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICB9Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBG
cmFtZSogZ2V0RnJhbWUoRnJhbWUqIHBhcmVudEZyYW1lLCBFbGVtZW50KiBlbGVtZW50KQotewot
ICAgIGlmIChwYXJlbnRGcmFtZSkKLSAgICAgICAgcmV0dXJuIHBhcmVudEZyYW1lOwotICAgIAot
ICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLU5QRXJyb3IgUGx1
Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNo
YXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKQotewotICAgIExPRyhQbHVnaW5z
LCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwoJXMpIiwgcHJldHR5TmFtZUZvck5QTlVSTFZh
cmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotCi0gICAgTlBFcnJvciByZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKLQotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlVSTFZDb29r
aWU6IHsKLSAgICAgICAgVVJMIHUobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgp
LCB1cmwpOwotICAgICAgICBpZiAodS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBm
cmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBp
ZiAoZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNv
b2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHUpLnV0ZjgoKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWNvb2tpZVN0ci5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6
ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCp2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCp2YWx1ZSwg
MCwgc2l6ZSsxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIGNvb2tp
ZVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpsZW4gPSBzaXplOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX09VVF9P
Rl9NRU1PUllfRVJST1I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBOUE5VUkxWUHJveHk6IHsKLSAgICAgICAgVVJMIHUo
bV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOwotICAgICAgICBpZiAo
dS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVu
dEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBjb25zdCBGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXIgPSBmcmFtZSA/ICZmcmFtZS0+bG9hZGVyKCkgOiAwOwotICAgICAgICAgICAgY29u
c3QgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBmcmFtZUxvYWRlciA/IGZyYW1lTG9hZGVy
LT5uZXR3b3JraW5nQ29udGV4dCgpIDogMDsKLSAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgcHJv
eHlTdHIgPSB0b1N0cmluZyhwcm94eVNlcnZlcnNGb3JVUkwodSwgY29udGV4dCkpLnV0ZjgoKTsK
LSAgICAgICAgICAgIGlmICghcHJveHlTdHIuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBpbnQgc2l6ZSA9IHByb3h5U3RyLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICp2YWx1
ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCp2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAw
LCBzaXplKzEpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKnZhbHVlLCBwcm94eVN0ci5k
YXRhKCksIHNpemUrMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZW4pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAqbGVuID0gc2l6ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZB
TElEX1VSTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
c3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6Z2V0VmFsdWVGb3JVUkw6ICVzIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZh
cmlhYmxlKS5kYXRhKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi0KLU5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFy
aWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQz
Ml90IGxlbikKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJM
KCVzKSIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQot
ICAgIE5QRXJyb3IgcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0KLSAgICBzd2l0Y2ggKHZhcmlh
YmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxWQ29va2llOiB7Ci0gICAgICAgIFVSTCB1KG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKTsKLSAgICAgICAgaWYgKHUuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSwgbGVuKTsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBh
cmVudEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tp
ZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1l
bnQoKSwgdSwgY29va2llU3RyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQg
PSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTlBO
VVJMVlByb3h5OgotICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9y
VVJMKCVzKTogUGx1Z2lucyBhcmUgTk9UIGFsbG93ZWQgdG8gc2V0IHByb3h5IGluZm9ybWF0aW9u
LiIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLSAgICAg
ICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTDog
JXMiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0gICAg
ICAgIHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0QXV0aGVu
dGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQz
Ml90IHBvcnQsIGNvbnN0IGNoYXIqIC8qIHNjaGVtZSAqLywgY29uc3QgY2hhciogLyogcmVhbG0g
Ki8sIGNoYXIqKiAgLyogdXNlcm5hbWUgKi8sIHVpbnQzMl90KiAvKiB1bGVuICovLCBjaGFyKiog
LyogcGFzc3dvcmQgKi8sIHVpbnQzMl90KiAvKiBwbGVuICovKQotewotI2lmIExPR19ESVNBQkxF
RAotICAgIFVOVVNFRF9QQVJBTShwcm90b2NvbCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhvc3QpOwot
ICAgIFVOVVNFRF9QQVJBTShwb3J0KTsKLSNlbmRpZgotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvOiBwcm90b2NvbD0lcywgaG9zdD0lcywgcG9ydD0l
ZCIsIHByb3RvY29sLCBob3N0LCBwb3J0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotI2VuZGlmCi0KLXZvaWQgUGx1Z2luVmlldzo6
cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkK
LXsKLSAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNldFZhbHVlID0gbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPnNldHZhbHVlOwotICAgIGlmICghc2V0VmFsdWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICBOUEJvb2wgdmFsdWUgPSBwcml2
YXRlQnJvd3NpbmdFbmFibGVkOwotICAgIHNldFZhbHVlKG1faW5zdGFuY2UsIE5QTlZwcml2YXRl
TW9kZUJvb2wsICZ2YWx1ZSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg2YmI5
ZDI4MTE0YWRkODY5NGQ1Y2QxMTdhMDNkNjYwZGRmYzAzNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlz
aEBmb3J3YXJkYmlhcy5pbj4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgUGx1Z2luVmlld19oCi0jZGVmaW5lIFBsdWdpblZpZXdfaAotCi0jaW5j
bHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgot
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1
Z2luU3RyZWFtLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0jZW5kaWYKLQot
I2lmIE9TKFdJTkRPV1MpICYmIFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgc3RydWN0IEhXTkRfXyog
SFdORDsKLXR5cGVkZWYgSFdORCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKLSNlbHNlCi10eXBlZGVm
IFBsYXRmb3JtV2lkZ2V0IFBsYXRmb3JtUGx1Z2luV2lkZ2V0OwotI2VuZGlmCi0jaWYgUExBVEZP
Uk0oR1RLKQotdHlwZWRlZiBzdHJ1Y3QgX0d0a1NvY2tldCBHdGtTb2NrZXQ7Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKFgxMSkKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7Ci10eXBlZGVm
IHN0cnVjdCBfWERpc3BsYXkgRGlzcGxheTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLSAg
ICBuYW1lc3BhY2UgQmluZGluZ3MgewotICAgICAgICBjbGFzcyBJbnN0YW5jZTsKLSAgICB9Ci19
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBGcmFt
ZVZpZXc7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAgY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7Ci0g
ICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKLSAgICBjbGFzcyBNb3VzZUV2ZW50OwotICAgIGNsYXNz
IFVSTDsKLSNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOwotI2VuZGlmCi0gICAgY2xhc3MgUGx1
Z2luUGFja2FnZTsKLSAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0OwotICAgIGNsYXNzIFBsdWdpblN0
cmVhbTsKLSAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwotICAgIGNsYXNzIFJlc291cmNlUmVzcG9u
c2U7Ci0gICAgY2xhc3MgV2hlZWxFdmVudDsKLQotICAgIGVudW0gUGx1Z2luU3RhdHVzIHsKLSAg
ICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbiwKLSAgICAgICAgUGx1Z2luU3RhdHVz
Q2FuTm90TG9hZFBsdWdpbiwKLSAgICAgICAgUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5
Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblJlcXVlc3QgewotICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQbHVnaW5SZXF1ZXN0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
cHVibGljOgotICAgICAgICBQbHVnaW5SZXF1ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZy
YW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSwg
Ym9vbCBzaG91bGRBbGxvd1BvcHVwcykKLSAgICAgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0
KGZyYW1lTG9hZFJlcXVlc3QpCi0gICAgICAgICAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRh
KQotICAgICAgICAgICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKLSAg
ICAgICAgICAgICwgbV9zaG91bGRBbGxvd1BvcHVwcyhzaG91bGRBbGxvd1BvcHVwcykgeyB9Ci0g
ICAgcHVibGljOgotICAgICAgICBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1
ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUxvYWRSZXF1ZXN0OyB9Ci0gICAgICAgIHZvaWQq
IG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBtX25vdGlmeURhdGE7IH0KLSAgICAgICAgYm9v
bCBzZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9
Ci0gICAgICAgIGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZEFsbG93UG9wdXBzOyB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBt
X2ZyYW1lTG9hZFJlcXVlc3Q7Ci0gICAgICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsKLSAgICAgICAg
Ym9vbCBtX3NlbmROb3RpZmljYXRpb247Ci0gICAgICAgIGJvb2wgbV9zaG91bGRBbGxvd1BvcHVw
czsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2luTWFudWFsTG9hZGVyIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpbk1hbnVhbExvYWRlcigpIHt9Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpID0gMDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKSA9IDA7Ci0gICAgfTsK
LQotICAgIGNsYXNzIFBsdWdpblZpZXcgOiBwdWJsaWMgUGx1Z2luVmlld0Jhc2UKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgICAgICAgICAgICAgICwgcHJpdmF0ZSBQ
bHVnaW5TdHJlYW1DbGllbnQKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMg
UGx1Z2luTWFudWFsTG9hZGVyCi0gICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUgTWVkaWFD
YW5TdGFydExpc3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBsdWdpblZpZXc+IGNyZWF0ZShGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBI
VE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKLSAgICAgICAgdmlydHVhbCB+UGx1Z2luVmll
dygpOwotCi0gICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
cGx1Z2luLmdldCgpOyB9Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAg
IE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KLSNlbmRpZgotCi0g
ICAgICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3Rh
dGljIFBsdWdpblZpZXcqIGN1cnJlbnRQbHVnaW5WaWV3KCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0KCk7Ci0jZW5kaWYKLSAg
ICAgICAgUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gYmluZGluZ0luc3RhbmNl
KCk7Ci0KLSAgICAgICAgUGx1Z2luU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dHVzOyB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgLy8gTlBO
IGZ1bmN0aW9ucwotICAgICAgICBOUEVycm9yIGdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3Ig
Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KTsKLSAgICAgICAgTlBF
cnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1
aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEpOwotICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSk7Ci0g
ICAgICAgIE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFy
Z2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7Ci0gICAgICAgIGludDMyX3Qgd3JpdGUoTlBTdHJlYW0q
IHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7Ci0gICAgICAgIE5QRXJyb3IgZGVz
dHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwotI2VuZGlmCi0g
ICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCgpOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogdXNlckFnZW50U3RhdGljKCk7Ci0j
ZW5kaWYKLSAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7Ci0gICAgICAg
IAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUEVycm9yIGdldFZh
bHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7Ci0gICAgICAgIHN0YXRpYyBO
UEVycm9yIGdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7
Ci0gICAgICAgIE5QRXJyb3Igc2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlKTsKLSAgICAgICAgTlBFcnJvciBnZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJp
YWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pOwotICAg
ICAgICBOUEVycm9yIHNldFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzJfdCBsZW4pOwotICAgICAgICBO
UEVycm9yIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3Qg
Y2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIq
IHJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQzMl90KiB1bGVuLCBjaGFyKiogcGFzc3dvcmQs
IHVpbnQzMl90KiBwbGVuKTsKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChOUFJlY3QqKTsK
LSAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKTsKLSNlbmRpZgotICAgICAg
ICB2b2lkIGZvcmNlUmVkcmF3KCk7Ci0gICAgICAgIHZvaWQgcHVzaFBvcHVwc0VuYWJsZWRTdGF0
ZShib29sIHN0YXRlKTsKLSAgICAgICAgdm9pZCBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0g
ICAgICAgIGJvb2wgYXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0
SmF2YVNjcmlwdFBhdXNlZChib29sKTsKLQotICAgICAgICB2b2lkIHByaXZhdGVCcm93c2luZ1N0
YXRlQ2hhbmdlZChib29sKTsKLQotICAgICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2lu
U3RyZWFtKik7Ci0gICAgICAgIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyhQbHVnaW5TdHJl
YW0qIHN0cmVhbSkgeyBkaXNjb25uZWN0U3RyZWFtKHN0cmVhbSk7IH0KLQotICAgICAgICAvLyBX
aWRnZXQgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3Qg
SW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVSZWN0c0NoYW5nZWQoKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
c2hvdygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgY2xpcFJlY3RDaGFuZ2VkKCkgb3ZlcnJpZGU7Ci0KLSAgICAgICAgLy8gVGhpcyBt
ZXRob2QgaXMgdXNlZCBieSBwbHVnaW5zIG9uIGFsbCBwbGF0Zm9ybXMgdG8gb2J0YWluIGEgY2xp
cCByZWN0IHRoYXQgaW5jbHVkZXMgY2xpcHMgc2V0IGJ5IFdlYkNvcmUsCi0gICAgICAgIC8vIGUu
Zy4sIGluIG92ZXJmbG93OmF1dG8gc2VjdGlvbnMuICBUaGUgY2xpcCByZWN0cyBjb29yZGluYXRl
cyBhcmUgaW4gdGhlIGNvbnRhaW5pbmcgd2luZG93J3MgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAg
ICAgLy8gVGhpcyBjbGlwIGluY2x1ZGVzIGFueSBjbGlwcyB0aGF0IHRoZSB3aWRnZXQgaXRzZWxm
IHNldHMgdXAgZm9yIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgSW50UmVjdCB3aW5kb3dDbGlwUmVj
dCgpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCopOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudFZpc2libGUoYm9vbCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29s
IGlzUGx1Z2luVmlldygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAg
ICBGcmFtZSogcGFyZW50RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudEZyYW1lLmdldCgp
OyB9Ci0KLSAgICAgICAgdm9pZCBmb2N1c1BsdWdpbkVsZW1lbnQoKTsKLQotICAgICAgICBjb25z
dCBTdHJpbmcmIHBsdWdpbnNQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5zUGFnZTsgfQot
ICAgICAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlw
ZTsgfQotICAgICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0K
LSNpZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgICAgIGJvb2wgcG9wVXBDb250ZXh0TWVudShOUE1lbnUqKTsKLSNlbmRpZgotCi0jaWYgT1Mo
V0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIHN0YXRpYyBM
UkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXdXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBB
UkFNKTsKLSAgICAgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBX
UEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKLSAgICAgICAgV05EUFJPQyBwbHVnaW5XbmRQ
cm9jKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5XbmRQcm9jOyB9Ci0jZW5kaWYKLQotICAgICAg
ICAvLyBVc2VkIGZvciBtYW51YWwgbG9hZGluZwotICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZURh
dGEoY29uc3QgY2hhciosIGludCk7Ci0gICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOwot
ICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotCi0gICAgICAgIHN0
YXRpYyBib29sIGlzQ2FsbGluZ1BsdWdpbigpOwotCi0gICAgICAgIGJvb2wgc3RhcnQoKTsKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0aWMgdm9pZCBrZWVw
QWxpdmUoTlBQKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGtlZXBBbGl2ZSgpOwotCi0jaWYgUExB
VEZPUk0oWDExKQotICAgICAgICBzdGF0aWMgRGlzcGxheSogZ2V0UGx1Z2luRGlzcGxheShGcmFt
ZSopOwotICAgICAgICBzdGF0aWMgV2luZG93IGdldFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZy
YW1lKTsKLSNlbmRpZgotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luVmlldyhGcmFtZSog
cGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBQbHVnaW5QYWNrYWdlKiwgSFRNTFBsdWdJbkVs
ZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIGxvYWRNYW51YWxseSk7Ci0KLSAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMpOwotICAgICAgICBib29sIHN0YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKTsKLSAgICAgICAg
dm9pZCBpbml0KCk7Ci0gICAgICAgIGJvb2wgcGxhdGZvcm1TdGFydCgpOwotICAgICAgICB2b2lk
IHN0b3AoKTsKLSAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlldyopOwotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVx
dWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAg
IE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0
YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7Ci0gICAgICAgIE5Q
RXJyb3IgaGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBs
ZW4sIGNvbnN0IGNoYXIqIGJ1Zik7Ci0jZW5kaWYKLSAgICAgICAgc3RhdGljIHZvaWQgZnJlZVN0
cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCk7Ci0gICAgICAgIHZvaWQg
c2V0Q2FsbGluZ1BsdWdpbihib29sKSBjb25zdDsKLQotICAgICAgICB2b2lkIGludmFsaWRhdGVX
aW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIG1lZGlhQ2FuU3RhcnQoKTsKLQotI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotICAgICAgICB2b2lkIHBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyBIREMg
V0lOQVBJIGhvb2tlZEJlZ2luUGFpbnQoSFdORCwgUEFJTlRTVFJVQ1QqKTsKLSAgICAgICAgc3Rh
dGljIEJPT0wgV0lOQVBJIGhvb2tlZEVuZFBhaW50KEhXTkQsIGNvbnN0IFBBSU5UU1RSVUNUKik7
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0
aWMgYm9vbCBwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSAgICAgICAgYm9vbCBwbGF0Zm9ybUdldFZhbHVl
KE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSNl
bmRpZgotCi0gICAgICAgIFJlZlB0cjxGcmFtZT4gbV9wYXJlbnRGcmFtZTsKLSAgICAgICAgUmVm
UHRyPFBsdWdpblBhY2thZ2U+IG1fcGx1Z2luOwotICAgICAgICBIVE1MUGx1Z0luRWxlbWVudCog
bV9lbGVtZW50OwotICAgICAgICBib29sIG1faXNTdGFydGVkOwotICAgICAgICBVUkwgbV91cmw7
Ci0gICAgICAgIFBsdWdpblN0YXR1cyBtX3N0YXR1czsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+
IG1faW52YWxpZFJlY3RzOwotCi0gICAgICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVx
dWVzdCopOwotICAgICAgICB2b2lkIHNjaGVkdWxlUmVxdWVzdChzdGQ6OnVuaXF1ZV9wdHI8UGx1
Z2luUmVxdWVzdD4pOwotICAgICAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKCk7Ci0gICAgICAg
IHZvaWQgaW52YWxpZGF0ZVRpbWVyRmlyZWQoKTsKLSAgICAgICAgVGltZXIgbV9yZXF1ZXN0VGlt
ZXI7Ci0gICAgICAgIFRpbWVyIG1faW52YWxpZGF0ZVRpbWVyOwotCi0gICAgICAgIHZvaWQgcG9w
UG9wdXBzU3RhdGVUaW1lckZpcmVkKCk7Ci0gICAgICAgIFRpbWVyIG1fcG9wUG9wdXBzU3RhdGVU
aW1lcjsKLQotICAgICAgICB2b2lkIGxpZmVTdXBwb3J0VGltZXJGaXJlZCgpOwotICAgICAgICBU
aW1lciBtX2xpZmVTdXBwb3J0VGltZXI7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICAgICAgYm9vbCBkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYpOwotI2VuZGlmCi0jaWYg
ZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAg
ICBpbnQxNl90IGRpc3BhdGNoTlBDb2NvYUV2ZW50KE5QQ29jb2FFdmVudCYpOwotICAgICAgICBi
b29sIG1fdXBkYXRlZENvY29hVGV4dElucHV0UmVxdWVzdGVkOwotICAgICAgICBib29sIG1fa2V5
RG93blNlbnQ7Ci0gICAgICAgIHVpbnQxNl90IG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyOwotI2Vu
ZGlmCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICAgICAgdm9pZCBoYW5kbGVXaGVlbEV2
ZW50KFdoZWVsRXZlbnQqKTsKLSNlbmRpZgotICAgICAgICB2b2lkIHVwZGF0ZVBsdWdpbldpZGdl
dCgpOwotICAgICAgICB2b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50Kik7Ci0gICAgICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50
Kik7Ci0jaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICAgICAgdm9pZCBoYW5kbGVGb2N1c0luRXZlbnQoKTsKLSAgICAgICAgdm9pZCBoYW5kbGVG
b2N1c091dEV2ZW50KCk7Ci0jZW5kaWYKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIHZvaWQg
cGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KEhEQyk7Ci0gICAgICAgIFBhc3NSZWZQdHI8SW1h
Z2U+IHNuYXBzaG90KCk7Ci0jZW5kaWYKLQotICAgICAgICBpbnQgbV9tb2RlOwotICAgICAgICBp
bnQgbV9wYXJhbUNvdW50OwotICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOwotICAgICAgICBj
aGFyKiogbV9wYXJhbVZhbHVlczsKLSAgICAgICAgU3RyaW5nIG1fcGx1Z2luc1BhZ2U7Ci0KLSAg
ICAgICAgU3RyaW5nIG1fbWltZVR5cGU7Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX3VzZXJBZ2Vu
dDsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUFAgbV9pbnN0
YW5jZTsKLSAgICAgICAgTlBQX3QgbV9pbnN0YW5jZVN0cnVjdDsKLSAgICAgICAgTlBXaW5kb3cg
bV9ucFdpbmRvdzsKLSNlbmRpZgotCi0gICAgICAgIFZlY3Rvcjxib29sLCA0PiBtX3BvcHVwU3Rh
dGVTdGFjazsKLQotICAgICAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gbV9zdHJl
YW1zOwotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+PiBtX3Jl
cXVlc3RzOwotCi0gICAgICAgIGJvb2wgbV9pc1dpbmRvd2VkOwotICAgICAgICBib29sIG1faXNU
cmFuc3BhcmVudDsKLSAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsKLSAgICAgICAgYm9v
bCBtX2lzV2FpdGluZ1RvU3RhcnQ7Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIGJv
b2wgbV9uZWVkc1hFbWJlZDsKLSNlbmRpZgotCi0jaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7Ci0gICAgICAgIFdORFBST0MgbV9wbHVnaW5XbmRQcm9j
OwotICAgICAgICB1bnNpZ25lZCBtX2xhc3RNZXNzYWdlOwotICAgICAgICBib29sIG1faXNDYWxs
aW5nUGx1Z2luV25kUHJvYzsKLSAgICAgICAgSERDIG1fd21QcmludEhEQzsKLSAgICAgICAgYm9v
bCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0OwotI2VuZGlmCi0KLSNpZiAoUExBVEZPUk0oR1RL
KSAmJiBPUyhXSU5ET1dTKSkgfHwgUExBVEZPUk0oRUZMKQotICAgICAgICAvLyBPbiBNYWMgT1NY
IGFuZCBRdC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3
aWRnZXQsCi0gICAgICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMg
aXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcuCi0gICAgICAgIFBsYXRmb3Jt
UGx1Z2luV2lkZ2V0IG1fd2luZG93OwotcHVibGljOgotICAgICAgICBQbGF0Zm9ybVBsdWdpbldp
ZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93OyB9Ci0g
ICAgICAgIHZvaWQgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQoUGxhdGZvcm1QbHVnaW5XaWRnZXQg
d2lkZ2V0KSB7IG1fd2luZG93ID0gd2lkZ2V0OyB9Ci0jZWxzZQotcHVibGljOgotICAgICAgICB2
b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHdpZGdldCkg
eyBzZXRQbGF0Zm9ybVdpZGdldCh3aWRnZXQpOyB9Ci0gICAgICAgIFBsYXRmb3JtUGx1Z2luV2lk
Z2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gcGxhdGZvcm1XaWRnZXQo
KTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8IFBMQVRG
T1JNKEdUSykKLSAgICAgICAgdm9pZCBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci0jZWxpZiBkZWZp
bmVkKFhQX01BQ09TWCkKLSAgICAgICAgTlBfQ0dDb250ZXh0IG1fbnBDZ0NvbnRleHQ7Ci0gICAg
ICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHRSZWY7Ci0KLSAgICAgICAgdm9pZCBzZXROUFdpbmRv
d0lmTmVlZGVkKCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFu
Z2U7Ci0gICAgICAgIFBpeG1hcCBtX2RyYXdhYmxlOwotICAgICAgICBWaXN1YWwqIG1fdmlzdWFs
OwotICAgICAgICBDb2xvcm1hcCBtX2NvbG9ybWFwOwotICAgICAgICBEaXNwbGF5KiBtX3BsdWdp
bkRpc3BsYXk7Ci0KLSAgICAgICAgdm9pZCBpbml0WEV2ZW50KFhFdmVudCogZXZlbnQpOwotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgIHN0YXRpYyBnYm9vbGVhbiBwbHVnUmVt
b3ZlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdpblZpZXcqKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgcGx1Z0FkZGVkQ2FsbGJhY2soR3RrU29ja2V0KiwgUGx1Z2luVmlldyopOwotICAgICAgICB2
b2lkIHVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKCk7Ci0gICAgICAgIGJvb2wgbV9wbHVn
QWRkZWQ7Ci0gICAgICAgIEludFJlY3QgbV9kZWxheWVkQWxsb2NhdGlvbjsKLSNlbmRpZgotCi0g
ICAgICAgIEludFJlY3QgbV9jbGlwUmVjdDsgLy8gVGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBh
IHdpbmRvd2VkIHBsdWctaW4KLSAgICAgICAgSW50UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3
aW5kb3cgcmVjdC4KLQotICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5OwotICAgICAgICBSZWZQ
dHI8UGx1Z2luU3RyZWFtPiBtX21hbnVhbFN0cmVhbTsKLQotICAgICAgICBib29sIG1faXNKYXZh
U2NyaXB0UGF1c2VkOwotCi0gICAgICAgIGJvb2wgbV9oYXZlQ2FsbGVkU2V0V2luZG93OwotCi0g
ICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBzX2N1cnJlbnRQbHVnaW5WaWV3OwotICAgIH07Ci0K
LWlubGluZSBQbHVnaW5WaWV3KiB0b1BsdWdpblZpZXcoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAg
QVNTRVJUKCF3aWRnZXQgfHwgd2lkZ2V0LT5pc1BsdWdpblZpZXcoKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQpOwotfQotCi1pbmxpbmUgY29uc3QgUGx1Z2lu
VmlldyogdG9QbHVnaW5WaWV3KGNvbnN0IFdpZGdldCogd2lkZ2V0KQotewotICAgIEFTU0VSVCgh
d2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBQbHVnaW5WaWV3Kj4od2lkZ2V0KTsKLX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFu
eW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1BsdWdpblZpZXcoY29uc3Qg
UGx1Z2luVmlldyopOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL25wYXBpLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRkOTBhNTJi
N2ExZTdjOTZlOGRmNGQ4OTliY2Y4MDE5NDhlZmZkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgotI2lu
Y2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMg
dGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxs
IGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCi0vLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4g
VG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUg
YSBjYWxsIHRvIGEgcGx1Zy1pbi4KLS8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2
aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXc6OnN0YXJ0LgotLy8g
VGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4g
d2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0
YW5jZS4KLXN0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3Rh
bmNlKQotewotICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICByZXR1
cm4gUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZpZXcoKTsKLX0KLQotdm9pZCogTlBOX01lbUFs
bG9jKHVpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9p
ZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi11aW50MzJf
dCBOUE5fTWVtRmx1c2godWludDMyX3QpCi17Ci0gICAgLy8gRG8gbm90aGluZwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxvYWRQYWdlcykKLXsK
LSAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7Ci19Ci0KLU5QRXJyb3IgTlBO
X1JlcXVlc3RSZWFkKE5QU3RyZWFtKiwgTlBCeXRlUmFuZ2UqKQotewotICAgIHJldHVybiBOUEVS
Ul9TVFJFQU1fTk9UX1NFRUtBQkxFOwotfQotCi1OUEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQ
IGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90
aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3RpZnlEYXRhKTsKLX0KLQotTlBFcnJvciBOUE5f
R2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQp
Ci17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1
cmwsIHRhcmdldCk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNl
LCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25z
dCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFy
Z2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RV
UkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWlu
dDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQotewotICAgIHJldHVybiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwgdGFyZ2V0LCBsZW4s
IGJ1ZiwgZmlsZSk7Ci19Ci0KLU5QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5Q
TUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKLXsK
LSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+bmV3U3RyZWFtKHR5
cGUsIHRhcmdldCwgc3RyZWFtKTsKLX0KLQotaW50MzJfdCBOUE5fV3JpdGUoTlBQIGluc3RhbmNl
LCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKQotewotICAgIHJl
dHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53cml0ZShzdHJlYW0sIGxlbiwg
YnVmZmVyKTsKLX0KLQotTlBFcnJvciBOUE5fRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5Q
U3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7Ci19
Ci0KLWNvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKQotewotICAgIFBsdWdp
blZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOwotCi0gICAgIGlm
ICghdmlldykKLSAgICAgICAgIHJldHVybiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKTsK
LSAKLSAgICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Ci19Ci0KLXZvaWQgTlBOX1N0YXR1cyhO
UFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOwotfQotCi12b2lkIE5QTl9JbnZhbGlk
YXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCi17Ci0gICAgUGx1Z2lu
VmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7Ci0jaWYgZGVmaW5l
ZChYUF9VTklYKQotICAgIC8vIE5TUGx1Z2luV3JhcHBlciwgYSBwbHVnaW4gd3JhcHBlciBiaW5h
cnkgdGhhdCBhbGxvd3MgcnVubmluZyAzMi1iaXQgcGx1Z2lucwotICAgIC8vIG9uIDY0LWJpdCBh
cmNoaXRlY3R1cmVzIHR5cGljYWxseSB1c2VkIGluIFgxMSwgd2lsbCBzb21ldGltZXMgZ2l2ZSB1
cyBhIG51bGwgTlBQIGhlcmUuCi0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0jZW5k
aWYKLSAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVjdCk7Ci19Ci0KLXZvaWQgTlBO
X0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQot
ewotICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWdpb24o
aW52YWxpZFJlZ2lvbik7Ci19Ci0KLXZvaWQgTlBOX0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkK
LXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5mb3JjZVJlZHJhdygpOwot
fQotCi1OUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKTsKLQotICAgICBpZiAoIXZpZXcpCi0gICAgICAgICByZXR1cm4g
UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlKTsKLQotICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFs
dWUpOwotfQotCi1OUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOwotfQotCi12b2lkKiBOUE5f
R2V0SmF2YUVudigpCi17Ci0gICAgLy8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCogTlBOX0dldEphdmFQZWVyKE5QUCkKLXsKLSAgICAvLyBVbnN1cHBvcnRlZAotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5j
ZSwgTlBCb29sIGVuYWJsZWQpCi17Ci0gICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+cHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShlbmFibGVkKTsKLX0KLQotdm9pZCBOUE5fUG9wUG9w
dXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkKLXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5wb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLX0KLQotZXh0ZXJuICJDIiB0
eXBlZGVmIHZvaWQgUGx1Z2luVGhyZWFkQXN5bmNDYWxsRnVuY3Rpb24odm9pZCopOwotdm9pZCBO
UE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsKE5QUCBpbnN0YW5jZSwgUGx1Z2luVGhyZWFkQXN5bmND
YWxsRnVuY3Rpb24gZnVuYywgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgLy8gQ2FsbGJhY2sgZnVu
Y3Rpb24gdHlwZSBvbmx5IGRpZmZlcnMgZnJvbSBNYWluVGhyZWFkRnVuY3Rpb24gYnkgYmVpbmcg
ZXh0ZXJuICJDIiwgd2hpY2ggZG9lc24ndCBhZmZlY3QgY2FsbGluZyBjb252ZW50aW9uIG9uIGFu
eSBjb21waWxlcnMgd2UgdXNlLgotICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVk
dWxlcigpLnNjaGVkdWxlQ2FsbChpbnN0YW5jZSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyOjpNYWluVGhyZWFkRnVuY3Rpb24qPihmdW5jKSwgdXNlckRhdGEpOwot
fQotCi1OUEVycm9yIE5QTl9HZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlh
YmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxl
bikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFs
dWVGb3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUsIGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX1Nl
dFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikKLXsKLSAgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c2V0VmFsdWVGb3JVUkwodmFyaWFi
bGUsIHVybCwgdmFsdWUsIGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX0dldEF1dGhlbnRpY2F0aW9u
SW5mbyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0
LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hhciogcmVhbG0sIGNo
YXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29yZCwgdWludDMyX3Qq
IHBsZW4pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdl
dEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90b2NvbCwgaG9zdCwgcG9ydCwgc2NoZW1lLCByZWFsbSwg
dXNlcm5hbWUsIHVsZW4sIHBhc3N3b3JkLCBwbGVuKTsKLX0KLQotTlBFcnJvciBOUE5fUG9wVXBD
b250ZXh0TWVudShOUFAgaW5zdGFuY2UsIE5QTWVudSogbWVudSkKLXsKLSAgICBVTlVTRURfUEFS
QU0oaW5zdGFuY2UpOwotICAgIFVOVVNFRF9QQVJBTShtZW51KTsKLSAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QYWlu
dEhvb2tzLmFzbSBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BhaW50SG9va3MuYXNtCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTA4ODEzNTZhMGRkY2Q3ODMwNzI4MTFlOWYx
NWExMTU5NGIxODVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BhaW50SG9va3MuYXNtCisrKyAvZGV2L251
bGwKQEAgLTEsNTAgKzAsMCBAQAotOy8qCi07ICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLTsKLTsgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotOyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotOyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLTsgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotOwotOyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLTsgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LTsgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLTsgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi07Ci07ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLTsgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LTsgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLTsgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi07Ki8K
LQotO0hEQyBfX3N0ZGNhbGwgX0hCZWdpblBhaW50KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVDVCBs
cFBhaW50KTsKLQotUFVCTElDICBfSEJlZ2luUGFpbnQKLQotX1RFWFQgICBTRUdNRU5UCi0KLV9I
QmVnaW5QYWludCBQUk9DCi0gICAgIG1vdiAgcjEwLHJjeAotICAgICBtb3YgIGVheCwxMDE3aAot
ICAgICBzeXNjYWxsCi0gICAgIHJldAotX0hCZWdpblBhaW50IEVORFAKLQotX1RFWFQgICBFTkRT
Ci0KLTtCT09MIF9fc3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJV
Q1QqIGxwUGFpbnQpOwotCi1QVUJMSUMgIF9IRW5kUGFpbnQKLQotX1RFWFQgICBTRUdNRU5UCi0K
LV9IRW5kUGFpbnQgUFJPQwotICAgIG1vdiAgcjEwLHJjeAotICAgIG1vdiAgZWF4LDEwMTloCi0g
ICAgc3lzY2FsbAotICAgIHJldAotX0hFbmRQYWludCBFTkRQCi0KLV9URVhUICAgRU5EUwotCi1F
TkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNl
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RjNmNmMzQ5OWZjMjlkZTZhYzVhZWFk
YjM5MjQwNDI3MWFhMGUxOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgotCi0jaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVk
ZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
aW5saW5lIHZvaWQgYWRkUGx1Z2luUGF0aHNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBIYXNo
U2V0PFN0cmluZz4mIHBhdGhzKQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0
ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAs
IEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBFUlJP
Ul9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3Y2hhcl90IG5hbWVbMTI4XTsKLSAg
ICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAg
IGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgIERXT1JEIG5hbWVMZW4gPSBXVEZfQVJS
QVlfTEVOR1RIKG5hbWUpOwotICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwg
bmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChy
ZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFdD
SEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXpl
b2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAgcmVzdWx0ID0gZ2V0
UmVnaXN0cnlWYWx1ZShrZXksIG5hbWUsIEwiUGF0aCIsICZ0eXBlLCBwYXRoU3RyLCAmcGF0aFN0
clNpemUpOwotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAhPSBS
RUdfU1opCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBwYXRocy5hZGQoU3RyaW5n
KHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLSAgICB9Ci0KLSAg
ICBSZWdDbG9zZUtleShrZXkpOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5Q
YXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KLSAgICBIYXNo
U2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwotCi0gICAgSEFORExFIGhGaW5kID0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUU7Ci0gICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7Ci0KLSAg
ICBTdHJpbmcgb2xkV01QUGx1Z2luUGF0aDsKLSAgICBTdHJpbmcgbmV3V01QUGx1Z2luUGF0aDsK
LQotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbkRpcmVj
dG9yaWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwqIjsKLQotICAgICAgICBoRmluZCA9IEZpbmRG
aXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCks
ICZmaW5kRmlsZURhdGEpOwotCi0gICAgICAgIGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9W
QUxVRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAg
IGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVD
VE9SWSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZp
bGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURh
dGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJu
cCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKLSAgICAg
ICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8
ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBm
aWxlbmFtZTsKLSAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCku
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgcGF0
aHMuYWRkKGZ1bGxQYXRoKTsKLQotICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZp
bGVuYW1lLCAibnBkc3BsYXkuZGxsIikpCi0gICAgICAgICAgICAgICAgb2xkV01QUGx1Z2luUGF0
aCA9IGZ1bGxQYXRoOwotICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmls
ZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKLSAgICAgICAgICAgICAgICBuZXdXTVBQbHVnaW5QYXRo
ID0gZnVsbFBhdGg7Ci0KLSAgICAgICAgfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZp
bmRGaWxlRGF0YSkgIT0gMCk7Ci0KLSAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKLSAgICB9Ci0K
LSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBhdGhz
KTsKLSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGF0
aHMpOwotCi0gICAgLy8gSWYgYm90aCB0aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJl
c2VudCBpbiB0aGUgcGx1Z2lucyBzZXQsIAotICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBz
byB3ZSBkb24ndCBlbmQgdXAgY2hvb3NpbmcgdGhlIG9sZCBvbmUuCi0gICAgaWYgKCFvbGRXTVBQ
bHVnaW5QYXRoLmlzRW1wdHkoKSAmJiAhbmV3V01QUGx1Z2luUGF0aC5pc0VtcHR5KCkpCi0gICAg
ICAgIHBhdGhzLnJlbW92ZShvbGRXTVBQbHVnaW5QYXRoKTsKLX0KLQotc3RhdGljIGlubGluZSBW
ZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5n
KQotewotICAgIFZlY3RvcjxpbnQ+IHZlcnNpb247Ci0KLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9
IDA7Ci0gICAgdW5zaWduZWQgZW5kUG9zOwotICAgIAotICAgIHdoaWxlIChzdGFydFBvcyA8IHZl
cnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKLSAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsg
ZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKTsgKytlbmRQb3MpCi0gICAgICAgICAgICBp
ZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10g
PT0gJ18nKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGludCB2ZXJzaW9uQ29t
cG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0
UG9zKS50b0ludCgpOwotICAgICAgICB2ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsK
LQotICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZl
cnNpb247Ci19Ci0KLS8vIFRoaXMgcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0
aGFuIHZlcnNpb25CCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZl
Y3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQotewotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgewotICAgICAg
ICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltpXSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBlbHNlIGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwg
dGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJh
IGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmlu
Zz4mIGRpcmVjdG9yaWVzKQotewotICAgIC8vIEVudW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4g
ZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lzdHJ5Ci0gICAgSEtFWSBrZXk7Ci0gICAgTE9ORyByZXN1
bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwg
VEVYVCgiU29mdHdhcmVcXE1vemlsbGEiKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChy
ZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAg
ICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5
cwotICAgICAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAgICAgICAgRFdPUkQgbmFt
ZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7Ci0gICAgICAgICAgICByZXN1bHQg
PSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9k
aWZpZWQpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9
IFN0cmluZyhuYW1lLCBuYW1lTGVuKSArICJcXEV4dGVuc2lvbnMiOwotICAgICAgICAgICAgSEtF
WSBleHRlbnNpb25zS2V5OwotCi0gICAgICAgICAgICAvLyBUcnkgb3BlbmluZyB0aGUga2V5Ci0g
ICAgICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoa2V5LCBleHRlbnNpb25zUGF0aC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgS0VZX1JFQUQsICZleHRlbnNp
b25zS2V5KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gTm93IGdldCB0aGUgcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAg
ICAgICAgICBXQ0hBUiBwbHVnaW5zRGlyZWN0b3J5U3RyW19NQVhfUEFUSF07Ci0gICAgICAgICAg
ICAgICAgRFdPUkQgcGx1Z2luc0RpcmVjdG9yeVNpemUgPSBzaXplb2YocGx1Z2luc0RpcmVjdG9y
eVN0cik7Ci0gICAgICAgICAgICAgICAgRFdPUkQgdHlwZTsKLQotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQbHVnaW5zIiksIDAs
ICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5zRGlyZWN0b3J5U3RyLCAmcGx1Z2luc0RpcmVjdG9yeVNp
emUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5
cGUgPT0gUkVHX1NaKQotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3Ry
aW5nKHBsdWdpbnNEaXJlY3RvcnlTdHIsIHBsdWdpbnNEaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdD
SEFSKSAtIDEpKTsKLQotICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZWdDbG9zZUtl
eShrZXkpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBs
YXllclBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAg
Ly8gVGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1
Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCi0gICAgV0NIQVIgcGx1
Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOwotICAgIERXT1JEIHBsdWdpbkRpcmVjdG9y
eVNpemUgPSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxc
UEZpbGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChw
bHVnaW5EaXJlY3RvcnlTdHIpKTsKLQotICAgIGlmIChwbHVnaW5EaXJlY3RvcnlTaXplID4gMCAm
JiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IFdURl9BUlJBWV9MRU5HVEgocGx1Z2luRGlyZWN0b3J5
U3RyKSkKLSAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlT
dHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7Ci0KLSAgICBEV09SRCB0eXBlOwotICAgIFdD
SEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3Rh
bGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJ
TkUsIEwiU29mdHdhcmVcXE1pY3Jvc29mdFxcTWVkaWFQbGF5ZXIiLCBMIkluc3RhbGxhdGlvbiBE
aXJlY3RvcnkiLCAmdHlwZSwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlv
bkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5
cGUgPT0gUkVHX1NaKQotICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKGluc3RhbGxh
dGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hB
UikgLSAxKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9iZUFjcm9iYXRQbHVnaW5E
aXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIEhLRVkga2V5Owot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVY
VCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7
Ci0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgVmVj
dG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247Ci0gICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRW
ZXJzaW9uU3RyaW5nOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBp
ID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6
ZW9mKFdDSEFSKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUs
ICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0
ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBWZWN0b3I8
aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFt
ZUxlbikpOwotICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRl
c3RBY3JvYmF0VmVyc2lvbikpIHsKLSAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0g
YWNyb2JhdFZlcnNpb247Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9
IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbGF0
ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgRFdPUkQgdHlwZTsK
LSAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAg
IERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRo
U3RyKTsKLQotICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVc
XEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsg
IlxcSW5zdGFsbFBhdGgiOwotICAgICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlf
TE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCksIDAsICZ0eXBlLCBhY3JvYmF0SW5zdGFsbFBhdGhTdHIsICZhY3Jv
YmF0SW5zdGFsbFBhdGhTaXplKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NF
U1MpIHsKLSAgICAgICAgICAgIFN0cmluZyBhY3JvYmF0UGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5n
KGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihX
Q0hBUikgLSAxKSArICJcXGJyb3dzZXIiOwotICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5k
KGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xv
c2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZEphdmFQbHVnaW5EaXJlY3Rv
cnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIEhLRVkga2V5OwotICAgIEhS
RVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29m
dHdhcmVcXEphdmFTb2Z0XFxKYXZhIFBsdWctaW4iKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAg
IGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0NI
QVIgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgIFZlY3Rvcjxp
bnQ+IGxhdGVzdEphdmFWZXJzaW9uOwotICAgIFN0cmluZyBsYXRlc3RKYXZhVmVyc2lvblN0cmlu
ZzsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKysp
IHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7
Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwg
MCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVmVjdG9yPGludD4gamF2YVZl
cnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUsIG5hbWVMZW4pKTsKLSAgICAg
ICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhqYXZhVmVyc2lvbiwgbGF0ZXN0SmF2YVZlcnNpb24pKSB7
Ci0gICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lvbiA9IGphdmFWZXJzaW9uOwotICAgICAgICAg
ICAgbGF0ZXN0SmF2YVZlcnNpb25TdHJpbmcgPSBTdHJpbmcobmFtZSwgbmFtZUxlbik7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWxhdGVzdEphdmFWZXJzaW9uU3RyaW5nLmlzRW1wdHko
KSkgewotICAgICAgICBEV09SRCB0eXBlOwotICAgICAgICBXQ0hBUiBqYXZhSW5zdGFsbFBhdGhT
dHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgamF2YUluc3RhbGxQYXRoU2l6ZSA9IHNpemVv
ZihqYXZhSW5zdGFsbFBhdGhTdHIpOwotICAgICAgICBEV09SRCB1c2VOZXdQbHVnaW5WYWx1ZTsK
LSAgICAgICAgRFdPUkQgdXNlTmV3UGx1Z2luU2l6ZTsKLQotICAgICAgICBTdHJpbmcgamF2YVBs
dWdpbktleVBhdGggPSAiU29mdHdhcmVcXEphdmFTb2Z0XFxKYXZhIFBsdWctaW5cXCIgKyBsYXRl
c3RKYXZhVmVyc2lvblN0cmluZzsKLSAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShI
S0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpLCBMIlVzZU5ld0phdmFQbHVnaW4iLCAmdHlwZSwgJnVzZU5ld1Bs
dWdpblZhbHVlLCAmdXNlTmV3UGx1Z2luU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBF
UlJPUl9TVUNDRVNTICYmIHVzZU5ld1BsdWdpblZhbHVlID09IDEpIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBqYXZhUGx1Z2luS2V5
UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgTCJKYXZhSG9tZSIs
ICZ0eXBlLCBqYXZhSW5zdGFsbFBhdGhTdHIsICZqYXZhSW5zdGFsbFBhdGhTaXplKTsKLSAgICAg
ICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIFN0
cmluZyBqYXZhUGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5nKGphdmFJbnN0YWxsUGF0aFN0ciwgamF2
YUluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJpblxcbmV3X3BsdWdp
biI7Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKGphdmFQbHVnaW5EaXJlY3Rv
cnkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXko
a2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgp
Ci17Ci0gICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVTdHJbX01BWF9QQVRIXTsKLSAgICBzdGF0aWMg
U3RyaW5nIHBsdWdpbnNEaXJlY3Rvcnk7Ci0gICAgc3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luRGly
ZWN0b3J5ID0gZmFsc2U7Ci0KLSAgICBpZiAoIWNhY2hlZFBsdWdpbkRpcmVjdG9yeSkgewotICAg
ICAgICBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSB0cnVlOwotCi0gICAgICAgIGludCBtb2R1bGVG
aWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAsIG1vZHVsZUZpbGVOYW1lU3RyLCBfTUFY
X1BBVEgpOwotCi0gICAgICAgIGlmICghbW9kdWxlRmlsZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5h
bWVMZW4gPT0gX01BWF9QQVRIKQotICAgICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAgIGlm
ICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVOYW1lU3RyKSkKLSAgICAgICAgICAgIGdv
dG8gZXhpdDsKLQotICAgICAgICBwbHVnaW5zRGlyZWN0b3J5ID0gU3RyaW5nKG1vZHVsZUZpbGVO
YW1lU3RyKSArICJcXFBsdWdpbnMiOwotICAgIH0KLWV4aXQ6Ci0gICAgcmV0dXJuIHBsdWdpbnNE
aXJlY3Rvcnk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luRGly
ZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIFdDSEFSIHN5c3Rl
bURpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0KLSAgICBpZiAoIUdldFN5c3RlbURpcmVjdG9yeShz
eXN0ZW1EaXJlY3RvcnlTdHIsIFdURl9BUlJBWV9MRU5HVEgoc3lzdGVtRGlyZWN0b3J5U3RyKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFY
X1BBVEhdOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVt
RGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7Ci0gICAgZGlyZWN0b3JpZXMu
YXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9t
ZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hv
Y2t3YXZlIDEwIikpOwotICAgIGRpcmVjdG9yaWVzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5
U3RyKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5E
aXJlY3RvcmllcygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gZGlyZWN0b3JpZXM7Ci0gICAgU3Ry
aW5nIG91ckRpcmVjdG9yeSA9IHNhZmFyaVBsdWdpbnNEaXJlY3RvcnkoKTsKLQotICAgIGlmICgh
b3VyRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQob3VyRGly
ZWN0b3J5KTsKLSAgICBhZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkoZGlyZWN0b3JpZXMp
OwotICAgIGFkZE1vemlsbGFQbHVnaW5EaXJlY3RvcmllcyhkaXJlY3Rvcmllcyk7Ci0gICAgYWRk
V2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KGRpcmVjdG9yaWVzKTsKLSAgICBhZGRN
YWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMpOwotCi0gICAgcmV0dXJuIGRp
cmVjdG9yaWVzOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRp
cmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKLXsKLSAgICBTdHJpbmcgb3VyRGlyZWN0
b3J5ID0gc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgpOwotCi0gICAgaWYgKCFvdXJEaXJlY3Rvcnku
aXNOdWxsKCkgJiYgIWRpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG91ckRpcmVj
dG9yeSA9PSBkaXJlY3Rvcnk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1M2MzMTVjMjAxODQzOTRmM2I0
MDY0YTNmNTQ0NzU3M2VkMmNmMDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0KLSNp
bmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0vLyBTZXQgYSB0aW1lciB0byBtYWtlIHN1cmUgd2UgcHJvY2VzcyBh
bnkgcXVldWVkIG1lc3NhZ2VzIGF0IGxlYXN0IGV2ZXJ5IDE2bXMuCi0vLyBUaGlzIHZhbHVlIGFs
bG93cyBGbGFzaCA2MCBtZXNzYWdlcy9zZWNvbmQsIHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggZm9y
IHZpZGVvCi0vLyBwbGF5YmFjaywgYW5kIGFsc28gZ2V0cyB1cyBvdmVyIHRoZSBsaW1pdCBmb3Ig
a2lja2luZyBpbnRvIGhpZ2gtcmVzb2x1dGlvbgotLy8gdGltZXIgbW9kZSAoc2VlIFNoYXJlZFRp
bWVyV2luLmNwcCkuCi1zdGF0aWMgY29uc3QgZG91YmxlIE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRl
cnZhbCA9IDAuMDE2OwotCi0vLyBEdXJpbmcgYSBjb250aW51b3VzIHN0cmVhbSBvZiBtZXNzYWdl
cywgcHJvY2VzcyBvbmUgZXZlcnkgNW1zLgotc3RhdGljIGNvbnN0IGRvdWJsZSBNZXNzYWdlRGly
ZWN0UHJvY2Vzc2luZ0ludGVydmFsID0gMC4wMDU7Ci0KLVBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW46OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oUGx1Z2luVmlldyogcGx1Z2luVmlldykKLSAg
ICA6IG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3KQotICAgICwgbV9iYWNrKDApCi0gICAgLCBtX2Zy
b250KDApCi0gICAgLCBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyKCp0aGlzLCAmUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCkKLSAgICAsIG1fbGFzdE1l
c3NhZ2VUaW1lKDApCi17Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJlZSBsaXN0IHdpdGggb3Vy
IGlubGluZSBtZXNzYWdlcwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1JbmxpbmVN
ZXNzYWdlcyAtIDE7IGkrKykKLSAgICAgICAgbV9pbmxpbmVNZXNzYWdlc1tpXS5uZXh0ID0gJm1f
aW5saW5lTWVzc2FnZXNbaSArIDFdOwotICAgIG1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVz
c2FnZXMgLSAxXS5uZXh0ID0gMDsKLSAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9ICZtX2lubGlu
ZU1lc3NhZ2VzWzBdOwotfQotCi1QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjp+UGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbigpCi17Ci0gICAgUGx1Z2luTWVzc2FnZSogbmV4dDsKLQotICAgIGZv
ciAoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBu
ZXh0KSB7Ci0gICAgICAgIG5leHQgPSBtZXNzYWdlLT5uZXh0OwotICAgICAgICBmcmVlTWVzc2Fn
ZShtZXNzYWdlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
YXBwZW5kTWVzc2FnZShIV05EIGhXbmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQotewotICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBhbGxvY2F0ZU1lc3NhZ2Uo
KTsKLQotICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25kOwotICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsK
LSAgICBtZXNzYWdlLT53UGFyYW0gPSB3UGFyYW07Ci0gICAgbWVzc2FnZS0+bFBhcmFtID0gbFBh
cmFtOwotICAgIG1lc3NhZ2UtPm5leHQgPSAwOwotCi0gICAgaWYgKG1fYmFjaykKLSAgICAgICAg
bV9iYWNrLT5uZXh0ID0gbWVzc2FnZTsKLSAgICBtX2JhY2sgPSBtZXNzYWdlOwotICAgIGlmICgh
bV9mcm9udCkKLSAgICAgICAgbV9mcm9udCA9IG1lc3NhZ2U7Ci0KLSAgICAvLyBJZiBpdCBoYXMg
YmVlbiBtb3JlIHRoYW4gTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCBiZXR3ZWVuIHRo
cm90dGxlZCBtZXNzYWdlcywKLSAgICAvLyBnbyBhaGVhZCBhbmQgcHJvY2VzcyBhIG1lc3NhZ2Ug
ZGlyZWN0bHkuCi0gICAgZG91YmxlIGN1cnJlbnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCk7Ci0gICAgaWYgKGN1cnJlbnRUaW1lIC0gbV9sYXN0TWVzc2FnZVRpbWUgPiBNZXNz
YWdlRGlyZWN0UHJvY2Vzc2luZ0ludGVydmFsKSB7Ci0gICAgICAgIHByb2Nlc3NRdWV1ZWRNZXNz
YWdlKCk7Ci0gICAgICAgIG1fbGFzdE1lc3NhZ2VUaW1lID0gY3VycmVudFRpbWU7Ci0gICAgICAg
IGlmICghbV9mcm9udCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
bWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9tZXNzYWdlVGhyb3R0
bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsKLX0KLQot
dm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjpwcm9jZXNzUXVldWVkTWVzc2FnZSgpCi17
Ci0gICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7Ci0gICAgbV9mcm9udCA9IG1f
ZnJvbnQtPm5leHQ7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbV9iYWNrKQotICAgICAgICBtX2JhY2sg
PSAwOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgUGx1Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uIHdo
aWxlIGNhbGxpbmcgaXRzIHdpbmRvdyBwcm9jLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82OTMw
MjgwPgotICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KG1fcGx1Z2luVmlldyk7Ci0gICAg
OjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblZpZXctPnBsdWdpblduZFByb2MoKSwgbWVzc2FnZS0+
aFduZCwgbWVzc2FnZS0+bXNnLCBtZXNzYWdlLT53UGFyYW0sIG1lc3NhZ2UtPmxQYXJhbSk7Ci0K
LSAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luOjptZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKCkKLXsKLSAgICBwcm9jZXNzUXVldWVk
TWVzc2FnZSgpOwotCi0gICAgaWYgKG1fZnJvbnQpCi0gICAgICAgIG1fbWVzc2FnZVRocm90dGxl
VGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7Ci19Ci0KLVBs
dWdpbk1lc3NhZ2UqIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFsbG9jYXRlTWVzc2FnZSgp
Ci17Ci0gICAgUGx1Z2luTWVzc2FnZSAqbWVzc2FnZTsKLQotICAgIGlmIChtX2ZyZWVJbmxpbmVN
ZXNzYWdlcykgewotICAgICAgICBtZXNzYWdlID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7Ci0gICAg
ICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZS0+bmV4dDsKLSAgICB9IGVsc2UKLSAg
ICAgICAgbWVzc2FnZSA9IG5ldyBQbHVnaW5NZXNzYWdlOwotCi0gICAgcmV0dXJuIG1lc3NhZ2U7
Ci19Ci0KLWJvb2wgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKFBs
dWdpbk1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIG1lc3NhZ2UgPj0gJm1faW5saW5l
TWVzc2FnZXNbMF0gJiYgbWVzc2FnZSA8PSAmbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNz
YWdlcyAtIDFdOwotfQotCi12b2lkIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNz
YWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKGlzSW5saW5lTWVzc2FnZSht
ZXNzYWdlKSkgewotICAgICAgICBtZXNzYWdlLT5uZXh0ID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7
Ci0gICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgZGVsZXRlIG1lc3NhZ2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1MTAzMDgzNmQzYTNlOTI3N2E2
MGQ1N2FkNjM3YzVhZmYxZGFjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKLSNkZWZpbmUgUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bl9oCi0KLSNpbmNsdWRlICJUaW1lci5oIgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgUGx1Z2luVmlldzsKLQotICAgIHN0cnVjdCBQbHVn
aW5NZXNzYWdlIHsKLSAgICAgICAgSFdORCBoV25kOwotICAgICAgICBVSU5UIG1zZzsKLSAgICAg
ICAgV1BBUkFNIHdQYXJhbTsKLSAgICAgICAgTFBBUkFNIGxQYXJhbTsKLQotICAgICAgICBzdHJ1
Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbiB7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luKFBsdWdpblZpZXcqKTsKLSAgICAgICAgflBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4o
KTsKLQotICAgICAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoSFdORCwgVUlOVCBtc2csIFdQQVJBTSwg
TFBBUkFNKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgcHJvY2Vzc1F1ZXVlZE1lc3Nh
Z2UoKTsKLSAgICAgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKCk7Ci0gICAgICAg
IFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2FnZSgpOwotICAgICAgICBib29sIGlzSW5saW5l
TWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKLSAgICAgICAgdm9pZCBmcmVlTWVzc2Fn
ZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKLQotICAgICAgICBQbHVnaW5WaWV3KiBtX3BsdWdp
blZpZXc7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKLSAgICAgICAgUGx1Z2luTWVz
c2FnZSogbV9mcm9udDsKLQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IE51bUlubGluZU1lc3Nh
Z2VzID0gNDsKLSAgICAgICAgUGx1Z2luTWVzc2FnZSBtX2lubGluZU1lc3NhZ2VzW051bUlubGlu
ZU1lc3NhZ2VzXTsKLSAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcmVlSW5saW5lTWVzc2FnZXM7
Ci0KLSAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcjsKLSAgICAgICAgZG91Ymxl
IG1fbGFzdE1lc3NhZ2VUaW1lOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTg1MjU3ZDYyMjkyNzIwOTE4YTUxYTM2ZDgyN2Q4Y2NkMmQ0MTljMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFj
a2FnZS5oIgotCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJUaW1lci5o
IgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFN0
cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBMUFZPSUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBT
dHJpbmcmIGluZm8pCi17Ci0gICAgTFBWT0lEIGJ1ZmZlcjsKLSAgICBVSU5UIGJ1ZmZlckxlbmd0
aDsKLSAgICBTdHJpbmcgc3ViSW5mbyA9ICJcXFN0cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiAr
IGluZm87Ci0gICAgYm9vbCByZXR2YWwgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEs
Ci0gICAgICAgIGNvbnN0X2Nhc3Q8VUNoYXIqPihzdWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpKSwKLSAgICAgICAgJmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7Ci0g
ICAgaWYgKCFyZXR2YWwgfHwgYnVmZmVyTGVuZ3RoID09IDApCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIC8vIFN1YnRyYWN0IDEgZnJvbSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50
IHRoZSB0cmFpbGluZyBudWxsIGNoYXJhY3Rlci4KLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBidWZmZXJMZW5ndGggLSAxKTsKLX0KLQotYm9vbCBQ
bHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkKLXsKLSAgICBpZiAobmFtZSgpID09
ICJDaXRyaXggSUNBIENsaWVudCIpIHsKLSAgICAgICAgLy8gVGhlIENpdHJpeCBJQ0EgQ2xpZW50
IHBsdWctaW4gcmVxdWlyZXMgYSBNb3ppbGxhLWJhc2VkIGJyb3dzZXI7IHNlZSA8cmRhcjovLzY0
MTg2ODE+LgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSgpID09
ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewotICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRh
cjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQu
Y29tLgotICAgICAgICAvLyB0aGUgbGF0ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRv
ZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNoLCBzbyBhbGxvdyBpdAotICAgICAgICAvLyBhbmQg
YW55IG5ld2VyIHZlcnNpb25zCi0gICAgICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZl
cnNpb24gc2xQbHVnaW5NaW5SZXF1aXJlZCgweDUxQkUwMDAwLCAweDAwMDEwMDAwKTsKLQotICAg
ICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKHNsUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
ZmlsZU5hbWUoKSwgIm5wbW96YXguZGxsIikpIHsKLSAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3pp
bGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRs
bAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGZpbGVOYW1lKCksICJucHdwZi5kbGwiKSkgewotICAgICAgICAvLyBCdWcgNTcxMTk6IE1pY3Jv
c29mdCBXaW5kb3dzIFByZXNlbnRhdGlvbiBGb3VuZGF0aW9uIChXUEYpIHBsdWctaW4gY29tcGxh
aW5zIGFib3V0IG1pc3NpbmcgeHBjb20uZGxsCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0g
ZWxzZSBpZiAobmFtZSgpID09ICJZYWhvbyBBcHBsaWNhdGlvbiBTdGF0ZSBQbHVnaW4iKSB7Ci0g
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg2MAot
ICAgICAgICAvLyBCdWcgaW4gWWFob28gQXBwbGljYXRpb24gU3RhdGUgcGx1Zy1pbiBlYXJsaWVy
IHRoYW4gMS4wLjAuNiBsZWFkcyB0byBoZWFwIGNvcnJ1cHRpb24uIAotICAgICAgICBzdGF0aWMg
Y29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHlhaG9vQXBwU3RhdGVQbHVnaW5NaW5SZXF1aXJl
ZCgweDAwMDAwMDA2LCAweDAwMDEwMDAwKTsKLSAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lv
bih5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5QYWNr
YWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAo
bWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotICAgICAgICBz
dGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGZsYXNoVGVuVmVyc2lvbigweDAwMDAw
MDAwLCAweDAwMGEwMDAwKTsKLQotICAgICAgICAvLyBQcmUgMTAgRmxhc2ggb25seSByZXF1ZXN0
cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50Ci0g
ICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oZmxhc2hUZW5WZXJzaW9uKSA8IDApCi0gICAg
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOwot
Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0g
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3Nh
Z2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcp
OwotICAgIH0KLQotICAgIGlmIChuYW1lKCkuY29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG5hbWUo
KS5jb250YWlucygiV2luZG93cyBNZWRpYSIpKSB7Ci0gICAgICAgIC8vIFRoZSBXTVAgcGx1Z2lu
IHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIg
dXBkYXRlcyBpdHMgc2l6ZSwgc28KLSAgICAgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUg
cGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVn
aW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKLQotICAgICAgICAvLyBXaW5kb3dsZXNz
IG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJl
bW92ZSB0aGF0IHBhcmFtZXRlciAKLSAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhl
IHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xl
c3NWaWRlb1BhcmFtKTsKLQotICAgICAgICAvLyBXTVAgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29w
IHRoYXQgaXQgZW50ZXJzIHdoZW5ldmVyIHdlIGNhbGwgaXQgb3IKLSAgICAgICAgLy8gYXNrIGl0
IHRvIHBhaW50LiBUaGlzIG1vZGFsIGxvb3AgY2FuIGRlbGl2ZXIgbWVzc2FnZXMgdG8gb3RoZXIK
LSAgICAgICAgLy8gd2luZG93cyBpbiBXZWJLaXQgYXQgdGltZXMgd2hlbiB0aGV5IGFyZSBub3Qg
ZXhwZWN0aW5nIHRoZW0gKGZvcgotICAgICAgICAvLyBleGFtcGxlLCBkZWxpdmVyaW5nIGEgV01f
UEFJTlQgbWVzc2FnZSBkdXJpbmcgYSBsYXlvdXQpLCBhbmQgdGhlc2UKLSAgICAgICAgLy8gY2Fu
IGNhdXNlIGNyYXNoZXMuCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0hhc01vZGFs
TWVzc2FnZUxvb3ApOwotICAgIH0KLQotICAgIGlmIChuYW1lKCkgPT0gIlZMQyBNdWx0aW1lZGlh
IFBsdWdpbiIgfHwgbmFtZSgpID09ICJWTEMgTXVsdGltZWRpYSBQbHVnLWluIikgewotICAgICAg
ICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rlc3Ryb3kgaWYgd2UgY2FsbCBOUFBfU2V0V2luZG93IHdp
dGggYSBudWxsIHdpbmRvdyBoYW5kbGUKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
RG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpOwotCi0gICAgICAgIC8vIFZMQyAwLjgu
NmQgYW5kIDAuOC42ZSBjcmFzaCBpZiBtdWx0aXBsZSBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuCi0g
ICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NzczMDcwPiB0cmFja3MgYWxsb3dpbmcgbXVsdGlw
bGUgaW5zdGFuY2VzIHdoZW4gdGhpcwotICAgICAgICAvLyBidWcgaXMgZml4ZWQuCi0gICAgICAg
IG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAg
ICB9Ci0KLSAgICAvLyBUaGUgRGl2WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3Qg
TlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbwotICAgIC8v
IGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQot
ICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8vZGl2eCIpCi0gICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKLQotICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7
IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCi0gICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0
byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRo
YXQgTlBPYmplY3QgYmVsb25ncyB0by4KLSAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQg
dGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5j
ZSBnb2VzIGF3YXkuCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KLSAgICBp
ZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQiKQotICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKLQotICAgIGlmIChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkpIHsKLSAgICAgICAgLy8g
QmVjYXVzZSBhIHNpbmdsZSBwcm9jZXNzIGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQg
d2UgY2Fubm90IHJlbGlhYmx5IHVubG9hZCBhCi0gICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5v
dCB1bmxvYWQgdGhlIEphdmEgcGx1Z2luLCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIg
b25seSBWTQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2lu
KTsKLQotICAgICAgICAvLyBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJl
Z2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyByZXBhaW50IHByb2JsZW1zCi0gICAgICAgIC8vIHdp
dGggdGhlIEphdmEgcGx1Zy1pbi4KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9u
dENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7Ci0gICAgfQotCi0gICAgaWYgKG1pbWVUeXBl
ID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKSB7Ci0gICAgICAgIC8vIFByZXZlbnQg
dGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHks
IGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KTsKLQotICAg
ICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGxhc3RLbm93blVubG9hZGFi
bGVSZWFsUGxheWVyVmVyc2lvbigweDAwMEIwQjI0LCAweDAwMDYwMDAwKTsKLQotICAgICAgICAv
LyBVbmxvYWRpbmcgUmVhbFBsYXllciB2ZXJzaW9ucyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNl
IGEgaGFuZzsgc2VlIHJkYXI6Ly81NjY5MzE3LgotICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVu
bG9hZGluZyB3aGVuIHRoaXMgYnVnIGluIHRoZSBSZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQg
KHJkYXI6Ly81NzEzMTQ3KQotICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKGxhc3RLbm93
blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbikgPiAwKQotICAgICAgICAgICAgbV9xdWlya3Mu
YWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0gICAgfQotfQotCi1ib29sIFBsdWdp
blBhY2thZ2U6OmZldGNoSW5mbygpCi17Ci0gICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJv
SGFuZGxlOwotICAgIHZlcnNpb25JbmZvU2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKGNv
bnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCkpLCAmemVyb0hhbmRsZSk7Ci0gICAgaWYgKHZlcnNpb25JbmZvU2l6ZSA9PSAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHZlcnNpb25JbmZvRGF0YSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Y2hhcltdPih2ZXJzaW9uSW5mb1NpemUpOwotCi0gICAgaWYgKCFHZXRGaWxlVmVy
c2lvbkluZm9XKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCkpLAotICAgICAgICAgICAgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJz
aW9uSW5mb0RhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX25hbWUg
PSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJQcm9kdWN0TmFtZSIpOwot
ICAgIG1fZGVzY3JpcHRpb24gPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCks
ICJGaWxlRGVzY3JpcHRpb24iKTsKLSAgICBpZiAobV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3Jp
cHRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZTX0ZJWEVERklM
RUlORk8qIGluZm87Ci0gICAgVUlOVCBpbmZvU2l6ZTsKLSAgICBpZiAoIVZlclF1ZXJ5VmFsdWVX
KHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgTCJcXCIsIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXpl
KSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19GSVhFREZJTEVJTkZPKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNp
b25MUzsKLSAgICBtX21vZHVsZVZlcnNpb24ubW9zdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25N
UzsKLQotICAgIGlmIChpc1BsdWdpbkJsYWNrbGlzdGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgIGdldFZlcnNpb25JbmZvKHZlcnNp
b25JbmZvRGF0YS5nZXQoKSwgIk1JTUVUeXBlIikuc3BsaXQoJ3wnLCB0eXBlcyk7Ci0gICAgVmVj
dG9yPFN0cmluZz4gZXh0ZW5zaW9uTGlzdHM7Ci0gICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbklu
Zm9EYXRhLmdldCgpLCAiRmlsZUV4dGVudHMiKS5zcGxpdCgnfCcsIGV4dGVuc2lvbkxpc3RzKTsK
LSAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlwdGlvbnM7Ci0gICAgZ2V0VmVyc2lvbkluZm8odmVy
c2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZU9wZW5OYW1lIikuc3BsaXQoJ3wnLCBkZXNjcmlwdGlv
bnMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdHlwZXNbaV0ubG93ZXIoKTsKLSAgICAgICAgU3RyaW5n
IGRlc2NyaXB0aW9uID0gaSA8IGRlc2NyaXB0aW9ucy5zaXplKCkgPyBkZXNjcmlwdGlvbnNbaV0g
OiAiIjsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbkxpc3QgPSBpIDwgZXh0ZW5zaW9uTGlzdHMu
c2l6ZSgpID8gZXh0ZW5zaW9uTGlzdHNbaV0gOiAiIjsKLQotICAgICAgICBWZWN0b3I8U3RyaW5n
PiBleHRlbnNpb25zVmVjdG9yOwotICAgICAgICBleHRlbnNpb25MaXN0LnNwbGl0KCcsJywgZXh0
ZW5zaW9uc1ZlY3Rvcik7Ci0KLSAgICAgICAgLy8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxp
c3QgdGhhdCBtYXkgYmUgYXQgdGhlIGVuZCBvZiB0aGUgZGVzY3JpcHRpb24gc3RyaW5nLgotICAg
ICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmluZCgiKCoiKTsKLSAgICAgICAgaWYgKHBvcyAh
PSAtMSkgewotICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5l
ZWQgdG8gZ2V0IHJpZCBvZi4KLSAgICAgICAgICAgIGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9u
W3BvcyAtIDFdID09ICcgJykKLSAgICAgICAgICAgICAgICBwb3MtLTsKLSAgICAgICAgICAgIGRl
c2NyaXB0aW9uID0gZGVzY3JpcHRpb24ubGVmdChwb3MpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBxdWlya3MgZm9yIHRoZSBNSU1FIHR5cGVzIHRoaXMgcGx1Zy1pbiBz
dXBwb3J0cwotICAgICAgICBkZXRlcm1pbmVRdWlya3ModHlwZSk7Ci0KLSAgICAgICAgbV9taW1l
VG9FeHRlbnNpb25zLmFkZCh0eXBlLCBleHRlbnNpb25zVmVjdG9yKTsKLSAgICAgICAgbV9taW1l
VG9EZXNjcmlwdGlvbnMuYWRkKHR5cGUsIGRlc2NyaXB0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKLXsKLSAgICBpZiAobV9m
cmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsK
LSAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0b3AoKTsKLSAgICB9IGVsc2UgaWYgKG1faXNM
b2FkZWQpIHsKLSAgICAgICAgaWYgKG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFs
bG93TXVsdGlwbGVJbnN0YW5jZXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBtX2xvYWRDb3VudCsrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhfUEFUSF07Ci0KLSAgICAgICAgaWYgKCE6OkdldEN1
cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCBjdXJyZW50UGF0aCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgU3RyaW5nIHBhdGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1f
cGF0aC5yZXZlcnNlRmluZCgnXFwnKSk7Ci0KLSAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJl
Y3RvcnlXKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIExvYWQgdGhlIGxpYnJhcnkKLSAg
ICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgp
OwotCi0gICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsK
LSAgICAgICAgICAgIGlmIChtX21vZHVsZSkKLSAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5
KG1fbW9kdWxlKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICghbV9tb2R1bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faXNM
b2FkZWQgPSB0cnVlOwotCi0gICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5
UG9pbnRzID0gMDsKLSAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsK
LSAgICBOUEVycm9yIG5wRXJyOwotCi0gICAgTlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXpl
RnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiKTsKLSAgICBO
UF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJl
c3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50cyIpOwotICAgIG1fTlBQX1NodXRkb3duID0g
KE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93
biIpOwotCi0gICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAh
bV9OUFBfU2h1dGRvd24pCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBtZW1zZXQoJm1fcGx1
Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7Ci0gICAgbV9wbHVnaW5GdW5jcy5z
aXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOwotCi0gICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBv
aW50cygmbV9wbHVnaW5GdW5jcyk7Ci0gICAgTE9HX05QRVJST1IobnBFcnIpOwotICAgIGlmIChu
cEVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIGluaXRp
YWxpemVCcm93c2VyRnVuY3MoKTsKLQotICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93
c2VyRnVuY3MpOwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLQotICAgIGlmIChucEVyciAhPSBO
UEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIG1fbG9hZENvdW50Kys7
Ci0gICAgcmV0dXJuIHRydWU7Ci0KLWFib3J0OgotICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgp
IGNvbnN0Ci17IAotICAgIGNvbnN0IHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICBt
X25hbWUuaW1wbCgpLT5oYXNoKCksCi0gICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNo
KCksCi0gICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5zaXplKCkKLSAgICB9OwotCi0gICAgcmV0
dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVz
KTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBh
LCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQotewotICAgIGlmIChhLm1fbmFtZSAhPSBiLm1fbmFt
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEubV9kZXNjcmlwdGlvbiAhPSBi
Lm1fZGVzY3JpcHRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLm1fbWlt
ZVRvRXh0ZW5zaW9ucy5zaXplKCkgIT0gYi5tX21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVy
YXRvcjo6S2V5cyBlbmQgPSBhLm1fbWltZVRvRXh0ZW5zaW9ucy5lbmQoKS5rZXlzKCk7Ci0gICAg
Zm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IGEubV9t
aW1lVG9FeHRlbnNpb25zLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKCFiLm1fbWltZVRvRXh0ZW5zaW9ucy5jb250YWlucygqaXQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi11aW50MTZfdCBQ
bHVnaW5QYWNrYWdlOjpOUFZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBOUF9WRVJTSU9O
X01JTk9SOwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luVmlld1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2lu
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyMTJiYTI0OWY0NzdlMDM2OTE4
ZWMyNjEzMjhlNzZmN2RmOWY4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUgIkJyaWRnZUpT
Qy5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRl
ICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVz
dC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0j
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKLSNpbmNsdWRlICJMb2NhbFdpbmRvd3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJh
c2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0j
aW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCi0j
aW5jbHVkZSAiY19pbnN0YW5jZS5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5j
bHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+Ci0KLSNpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKLSNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEsp
Ci0jaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2VuZGlm
Ci0KLXN0YXRpYyBpbmxpbmUgSFdORCB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KFBsYXRmb3Jt
UGFnZUNsaWVudCBjbGllbnQpCi17Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGlmICghY2xpZW50
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lk
Z2V0X2dldF93aW5kb3coY2xpZW50KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhXTkQ+
KEdES19XSU5ET1dfSFdORCh3aW5kb3cpKTsKLSAgICByZXR1cm4gMDsKLSNlbHNlCi0gICAgcmV0
dXJuIGNsaWVudDsKLSNlbmRpZgotfQotCi11c2luZyBKU0M6OkV4ZWNTdGF0ZTsKLXVzaW5nIEpT
Qzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVjdDsKLQotdXNpbmcgc3RkOjptaW47Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKLQotY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFt
ZSA9IEwiV2ViUGx1Z2luVmlldyI7Ci1jb25zdCBMUENXU1RSIGtXZWJQbHVnaW5WaWV3UHJvcGVy
dHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7Ci0KLS8vIFRoZSBjb2RlIHVzZWQgdG8gaG9v
ayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdpbmFsbHkgY2FtZSBmcm9tCi0vLyA8aHR0cDovL3d3
dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+LgotLy8gQ29weXJpZ2h0IChDKSAy
MDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5dWFuLmNvbSkuCi0KLXN0YXRpYyB1bnNpZ25lZCBi
ZWdpblBhaW50U3lzQ2FsbDsKLXN0YXRpYyBCWVRFKiBiZWdpblBhaW50OwotCi1zdGF0aWMgdW5z
aWduZWQgZW5kUGFpbnRTeXNDYWxsOwotc3RhdGljIEJZVEUqIGVuZFBhaW50OwotCi10eXBlZGVm
IEhEQyAoV0lOQVBJICpQdHJCZWdpblBhaW50KShIV05ELCBQQUlOVFNUUlVDVCopOwotdHlwZWRl
ZiBCT09MIChXSU5BUEkgKlB0ckVuZFBhaW50KShIV05ELCBjb25zdCBQQUlOVFNUUlVDVCopOwot
Ci0jaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkgJiYgQ09NUElMRVIoTVNWQykKLWV4dGVy
biAiQyIgSERDIF9fc3RkY2FsbCBfSEJlZ2luUGFpbnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNU
IGxwUGFpbnQpOwotZXh0ZXJuICJDIiBCT09MIF9fc3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFdu
ZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpOwotI2VuZGlmCi0KLUhEQyBXSU5BUEkgUGx1
Z2luVmlldzo6aG9va2VkQmVnaW5QYWludChIV05EIGhXbmQsIFBBSU5UU1RSVUNUKiBscFBhaW50
KQotewotICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdp
blZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKLSAgICBpZiAo
cGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5tX3dtUHJpbnRIREMpIHsKLSAgICAgICAgLy8gV2Un
cmUgc2VjcmV0bHkgaGFuZGxpbmcgV01fUFJJTlRDTElFTlQsIHNvIHNldCB1cCB0aGUgUEFJTlRT
VFJVQ1Qgc28KLSAgICAgICAgLy8gdGhhdCB0aGUgcGx1Z2luIHdpbGwgcGFpbnQgaW50byB0aGUg
SERDIHdlIHByb3ZpZGUuCi0gICAgICAgIG1lbXNldChscFBhaW50LCAwLCBzaXplb2YoUEFJTlRT
VFJVQ1QpKTsKLSAgICAgICAgbHBQYWludC0+aGRjID0gcGx1Z2luVmlldy0+bV93bVByaW50SERD
OwotICAgICAgICBHZXRDbGllbnRSZWN0KGhXbmQsICZscFBhaW50LT5yY1BhaW50KTsKLSAgICAg
ICAgcmV0dXJuIHBsdWdpblZpZXctPm1fd21QcmludEhEQzsKLSAgICB9Ci0KLSNpZiBDT01QSUxF
UihHQ0MpCi0gICAgSERDIHJlc3VsdDsKLSAgICBhc20gKCJwdXNoICAgICUyXG4iCi0gICAgICAg
ICAicHVzaCAgICAlM1xuIgotICAgICAgICAgImNhbGwgICAgKiU0XG4iCi0gICAgICAgICA6ICI9
YSIgKHJlc3VsdCkKLSAgICAgICAgIDogImEiIChiZWdpblBhaW50U3lzQ2FsbCksICJnIiAobHBQ
YWludCksICJnIiAoaFduZCksICJtIiAoYmVnaW5QYWludCkKLSAgICAgICAgIDogIm1lbW9yeSIK
LSAgICAgICAgKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2VsaWYgZGVmaW5lZChfTV9JWDg2KQot
ICAgIC8vIENhbGwgdGhyb3VnaCB0byB0aGUgb3JpZ2luYWwgQmVnaW5QYWludC4KLSAgICBfX2Fz
bSAgIG1vdiAgICAgZWF4LCBiZWdpblBhaW50U3lzQ2FsbAotICAgIF9fYXNtICAgcHVzaCAgICBs
cFBhaW50Ci0gICAgX19hc20gICBwdXNoICAgIGhXbmQKLSAgICBfX2FzbSAgIGNhbGwgICAgYmVn
aW5QYWludAotI2Vsc2UKLSAgICByZXR1cm4gX0hCZWdpblBhaW50KGhXbmQsIGxwUGFpbnQpOwot
I2VuZGlmCi19Ci0KLUJPT0wgV0lOQVBJIFBsdWdpblZpZXc6Omhvb2tlZEVuZFBhaW50KEhXTkQg
aFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpCi17Ci0gICAgUGx1Z2luVmlldyogcGx1
Z2luVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dl
YlBsdWdpblZpZXdQcm9wZXJ0eSkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXct
Pm1fd21QcmludEhEQykgewotICAgICAgICAvLyBXZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9Q
UklOVENMSUVOVCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkKLSAgICAgICAgLy8gY2xlYW51
cC4KLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0jaWYgQ09NUElMRVIoR0NDKQotICAg
IEJPT0wgcmVzdWx0OwotICAgIGFzbSAoInB1c2ggICAlMlxuIgotICAgICAgICAgInB1c2ggICAl
M1xuIgotICAgICAgICAgImNhbGwgICAqJTRcbiIKLSAgICAgICAgIDogIj1hIiAocmVzdWx0KQot
ICAgICAgICAgOiAiYSIgKGVuZFBhaW50U3lzQ2FsbCksICJnIiAobHBQYWludCksICJnIiAoaFdu
ZCksICJtIiAoZW5kUGFpbnQpCi0gICAgICAgICk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbGlm
IGRlZmluZWQgKF9NX0lYODYpCi0gICAgLy8gQ2FsbCB0aHJvdWdoIHRvIHRoZSBvcmlnaW5hbCBF
bmRQYWludC4KLSAgICBfX2FzbSAgIG1vdiAgICAgZWF4LCBlbmRQYWludFN5c0NhbGwKLSAgICBf
X2FzbSAgIHB1c2ggICAgbHBQYWludAotICAgIF9fYXNtICAgcHVzaCAgICBoV25kCi0gICAgX19h
c20gICBjYWxsICAgIGVuZFBhaW50Ci0jZWxzZQotICAgIHJldHVybiBfSEVuZFBhaW50KGhXbmQs
IGxwUGFpbnQpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGhvb2soY29uc3QgY2hhciogbW9k
dWxlLCBjb25zdCBjaGFyKiBwcm9jLCB1bnNpZ25lZCYgc3lzQ2FsbElELCBCWVRFKiYgcFByb2Ms
IGNvbnN0IHZvaWQqIHBOZXdQcm9jKQotewotICAgIC8vIFNlZSA8aHR0cDovL3d3dy5mZW5neXVh
bi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+IGZvciBhbiBleHBsYW5hdGlvbiBvZgotICAgIC8v
IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLgotCi0gICAgSElOU1RBTkNFIGhNb2QgPSBHZXRNb2R1
bGVIYW5kbGVBKG1vZHVsZSk7Ci0KLSAgICBwUHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+
KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihHZXRQcm9jQWRkcmVzcyhoTW9kLCBwcm9jKSkp
OwotCi0jaWYgQ09NUElMRVIoR0NDKSB8fCBkZWZpbmVkKF9NX0lYODYpCi0gICAgaWYgKHBQcm9j
WzBdICE9IDB4QjgpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
YmUgcmVhZGluZyB0aGUgYnl0ZXMgb25lLWJ5LW9uZSBpbnN0ZWFkIG9mIGRvaW5nIGFuCi0gICAg
Ly8gdW5hbGlnbmVkIHJlYWQ/Ci0gICAgc3lzQ2FsbElEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihwUHJvYyArIDEpOwotCi0gICAgRFdPUkQgZmxPbGRQcm90ZWN0OwotICAgIGlmICgh
VmlydHVhbFByb3RlY3QocFByb2MsIDUsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUsICZmbE9sZFBy
b3RlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwUHJvY1swXSA9IDB4RTk7Ci0gICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4ocE5ld1Byb2MpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocFByb2MgKyA1
KTsKLQotICAgIHBQcm9jICs9IDU7Ci0jZWxzZQotICAgIC8qIERpc2Fzc2VtYmx5IG9mIEJlZ2lu
UGFpbnQoKQotICAgIDAwMDAwMDAwNzc5RkM1QjAgNEMgOEIgRDEgICAgICAgICBtb3YgICAgICAg
ICByMTAscmN4Ci0gICAgMDAwMDAwMDA3NzlGQzVCMyBCOCAxNyAxMCAwMCAwMCAgIG1vdiAgICAg
ICAgIGVheCwxMDE3aAotICAgIDAwMDAwMDAwNzc5RkM1QjggMEYgMDUgICAgICAgICAgICBzeXNj
YWxsCi0gICAgMDAwMDAwMDA3NzlGQzVCQSBDMyAgICAgICAgICAgICAgIHJldAotICAgIDAwMDAw
MDAwNzc5RkM1QkIgOTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUJDIDkw
ICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVCRCA5MCAgICAgICAgICAgICAg
IG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QkUgOTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAw
MDAwMDc3OUZDNUJGIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVDMCA5
MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QzEgOTAgICAgICAgICAgICAg
ICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUMyIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAw
MDAwMDA3NzlGQzVDMyA5MCAgICAgICAgICAgICAgIG5vcAotICAgICovCi0gICAgLy8gQ2hlY2sg
Zm9yIHRoZSBzaWduYXR1cmUgYXMgaW4gdGhlIGFib3ZlIGRpc2Fzc2VtYmx5Ci0gICAgRFdPUkQg
Z3VhcmQgPSAweEI4RDE4QjRDOwotICAgIGlmICgqcmVpbnRlcnByZXRfY2FzdDxEV09SRCo+KHBQ
cm9jKSAhPSBndWFyZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRFdPUkQgZmxPbGRQcm90ZWN0
OwotICAgIFZpcnR1YWxQcm90ZWN0KHBQcm9jLCAxMiwgUEFHRV9FWEVDVVRFX1JFQURXUklURSwg
JiBmbE9sZFByb3RlY3QpOwotICAgIHBQcm9jWzBdID0gMHg0ODsgICAgLy8gbW92IHJheCwgdGhp
cwotICAgIHBQcm9jWzFdID0gMHhiODsKLSAgICAqKF9faW50NjQqKShwUHJvYysyKSA9IChfX2lu
dDY0KXBOZXdQcm9jOwotICAgIHBQcm9jWzEwXSA9IDB4ZmY7ICAgLy8gam1wIHJheAotICAgIHBQ
cm9jWzExXSA9IDB4ZTA7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5Q
YWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU5UU1RS
VUNUKiksIEJPT0wgKFdJTkFQSSpob29rZWRFbmRQYWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJV
Q1QqKSkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlSG9va2VkID0gZmFsc2U7Ci0gICAgaWYgKGhh
dmVIb29rZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBoYXZlSG9va2VkID0gdHJ1ZTsKLQotICAg
IC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3Qgc2VlbSB0byByZXNwb25kIHRv
IFdNX1BSSU5UQ0xJRU5ULCBzbwotICAgIC8vIHdlIGhvb2sgaW50byBCZWdpblBhaW50L0VuZFBh
aW50IHRvIGFsbG93IHRoZWlyIG5vcm1hbCBXTV9QQUlOVCBoYW5kbGluZwotICAgIC8vIHRvIGRy
YXcgaW50byBhIGdpdmVuIEhEQy4gTm90ZSB0aGF0IHRoaXMgaG9va2luZyBhZmZlY3RzIHRoZSBl
bnRpcmUKLSAgICAvLyBwcm9jZXNzLgotICAgIGhvb2soInVzZXIzMi5kbGwiLCAiQmVnaW5QYWlu
dCIsIGJlZ2luUGFpbnRTeXNDYWxsLCBiZWdpblBhaW50LCByZWludGVycHJldF9jYXN0PGNvbnN0
IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGhvb2tlZEJlZ2luUGFpbnQpKSk7
Ci0gICAgaG9vaygidXNlcjMyLmRsbCIsICJFbmRQYWludCIsIGVuZFBhaW50U3lzQ2FsbCwgZW5k
UGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0
cmRpZmZfdD4oaG9va2VkRW5kUGFpbnQpKSk7Ci0KLX0KLQotc3RhdGljIGJvb2wgcmVnaXN0ZXJQ
bHVnaW5WaWV3KCkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNz
ID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7Ci0KLSNp
ZiBQTEFURk9STShHVEspCi0gICAgV2ViQ29yZTo6c2V0SW5zdGFuY2VIYW5kbGUoKEhJTlNUQU5D
RSkoR2V0TW9kdWxlSGFuZGxlKDApKSk7Ci0jZW5kaWYKLQotICAgIEFTU0VSVChXZWJDb3JlOjpp
bnN0YW5jZUhhbmRsZSgpKTsKLQotICAgIFdORENMQVNTRVggd2NleDsKLSAgICB3Y2V4LmNiU2l6
ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKLSAg
ICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfREJMQ0xLUzsKLSAgICB3Y2V4LmxwZm5XbmRQcm9j
ICAgID0gRGVmV2luZG93UHJvYzsKLSAgICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKLSAgICB3
Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gV2ViQ29y
ZTo6aW5zdGFuY2VIYW5kbGUoKTsKLSAgICB3Y2V4LmhJY29uICAgICAgICAgID0gMDsKLSAgICB3
Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdjZXgu
aGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNPTE9SX1dJTkRPVzsKLSAgICB3Y2V4Lmxwc3pNZW51
TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dD
bGFzc05hbWU7Ci0KLSAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzRXgoJndjZXgpOwotfQotCi1M
UkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFBsdWdp
blZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9w
KGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3
LT53bmRQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQotc3RhdGljIGJv
b2wgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKFVJTlQgbWVzc2FnZSkKLXsKLSAgICBzd2l0
Y2ggKG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgICAgIGNhc2Ug
V01fTUJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05VUDoKLSAgICAgICAgY2FzZSBX
TV9LRVlVUDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBJbnRQb2lu
dCBjb250ZW50c1RvTmF0aXZlV2luZG93KEZyYW1lVmlldyogdmlldywgY29uc3QgSW50UG9pbnQm
IHBvaW50KQotewotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHBvaW50KTsKLX0K
LQotc3RhdGljIGlubGluZSBJbnRSZWN0IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coRnJhbWVWaWV3
KiB2aWV3LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiB2aWV3LT5jb250ZW50
c1RvV2luZG93KHJlY3QpOwotfQotCi1MUkVTVUxUCi1QbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAg
IC8vIDxyZGFyOi8vNTcxMTEzNj4gU29tZXRpbWVzIEZsYXNoIHdpbGwgY2FsbCBTZXRDYXB0dXJl
IGJlZm9yZSBjcmVhdGluZwotICAgIC8vIGEgZnVsbC1zY3JlZW4gd2luZG93IGFuZCB3aWxsIG5v
dCByZWxlYXNlIGl0LCB3aGljaCBjYXVzZXMgdGhlCi0gICAgLy8gZnVsbC1zY3JlZW4gd2luZG93
IHRvIG5ldmVyIHJlY2VpdmUgbW91c2UgZXZlbnRzLiBXZSBzZXQvcmVsZWFzZSBjYXB0dXJlCi0g
ICAgLy8gb24gbW91c2UgZG93bi91cCBiZWZvcmUgc2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIHBs
dWctaW4gdG8gcHJldmVudCB0aGF0LgotICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgICAgICBj
YXNlIFdNX0xCVVRUT05ET1dOOgotICAgICAgICBjYXNlIFdNX01CVVRUT05ET1dOOgotICAgICAg
ICBjYXNlIFdNX1JCVVRUT05ET1dOOgotICAgICAgICAgICAgOjpTZXRDYXB0dXJlKGhXbmQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fTEJVVFRPTlVQOgotICAgICAgICBj
YXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAg
ICA6OlJlbGVhc2VDYXB0dXJlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBp
ZiAobWVzc2FnZSA9PSBtX2xhc3RNZXNzYWdlICYmCi0gICAgICAgIG1fcGx1Z2luLT5xdWlya3Mo
KS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJz
aXZlbHkpICYmIAotICAgICAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MpCi0gICAgICAgIHJl
dHVybiAxOwotCi0gICAgaWYgKG1lc3NhZ2UgPT0gV01fVVNFUiArIDEgJiYKLSAgICAgICAgbV9w
bHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25l
TWVzc2FnZXMpKSB7Ci0gICAgICAgIGlmICghbV9tZXNzYWdlVGhyb3R0bGVyKQotICAgICAgICAg
ICAgbV9tZXNzYWdlVGhyb3R0bGVyID0gYWRvcHRQdHIobmV3IFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW4odGhpcykpOwotCi0gICAgICAgIG1fbWVzc2FnZVRocm90dGxlci0+YXBwZW5kTWVzc2Fn
ZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIG1fbGFzdE1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIG1faXNDYWxsaW5nUGx1Z2lu
V25kUHJvYyA9IHRydWU7Ci0KLSAgICAvLyBJZiB0aGUgcGx1Zy1pbiBkb2Vzbid0IGV4cGxpY2l0
bHkgc3VwcG9ydCBjaGFuZ2luZyB0aGUgcG9wLXVwIHN0YXRlLCB3ZSBlbmFibGUKLSAgICAvLyBw
b3B1cHMgZm9yIGFsbCB1c2VyIGdlc3R1cmVzLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRv
IHBvcCB0aGUgc3RhdGUgaW4gYSB0aW1lciwgYmVjYXVzZSB0aGUgRmxhc2ggcGx1Zy1pbiAKLSAg
ICAvLyBwb3BzIHVwIHdpbmRvd3MgaW4gcmVzcG9uc2UgdG8gYSBwb3N0ZWQgbWVzc2FnZS4KLSAg
ICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQ
U19FTkFCTEVEX1NUQVRFICYmCi0gICAgICAgIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZSht
ZXNzYWdlKSAmJiAhbV9wb3BQb3B1cHNTdGF0ZVRpbWVyLmlzQWN0aXZlKCkpIHsKLQotICAgICAg
ICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRydWUpOwotCi0gICAgICAgIG1fcG9wUG9wdXBzU3Rh
dGVUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2UgPT0gV01f
UFJJTlRDTElFTlQpIHsKLSAgICAgICAgLy8gTW9zdCAoYWxsPykgd2luZG93ZWQgcGx1Z2lucyBk
b24ndCByZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5ULCBzbyB3ZQotICAgICAgICAvLyBjaGFuZ2Ug
dGhlIG1lc3NhZ2UgdG8gV01fUEFJTlQgYW5kIHJlbHkgb24gb3VyIGhvb2tlZCB2ZXJzaW9ucyBv
ZgotICAgICAgICAvLyBCZWdpblBhaW50L0VuZFBhaW50IHRvIG1ha2UgdGhlIHBsdWdpbiBkcmF3
IGludG8gdGhlIGdpdmVuIEhEQy4KLSAgICAgICAgbWVzc2FnZSA9IFdNX1BBSU5UOwotICAgICAg
ICBtX3dtUHJpbnRIREMgPSByZWludGVycHJldF9jYXN0PEhEQz4od1BhcmFtKTsKLSAgICB9Ci0K
LSAgICAvLyBDYWxsIHRoZSBwbHVnLWluJ3Mgd2luZG93IHByb2MuCi0gICAgTFJFU1VMVCByZXN1
bHQgPSA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luV25kUHJvYywgaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0pOwotCi0gICAgbV93bVByaW50SERDID0gMDsKLQotICAgIG1faXNDYWxsaW5n
UGx1Z2luV25kUHJvYyA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBQ
bHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQotewotICAgIGlmICghcGFyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gZG93bmNhc3Q8RnJh
bWVWaWV3PigqcGFyZW50KCkpOwotCi0gICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5k
b3dSZWN0OwotICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OwotCi0gICAgbV93
aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXcuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3Qo
KS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX2NsaXBSZWN0ID0gd2lu
ZG93Q2xpcFJlY3QoKTsKLSAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1t
X3dpbmRvd1JlY3QueSgpKTsKLQotICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmICgh
bV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCB8fCBtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVj
dCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkgewotCi0gICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7Ci0KLSAgICAgICAgLy8gVG8gcHJldmVudCBmbGFzaGVzIHdoaWxlIHNjcm9s
bGluZywgd2UgZGlzYWJsZSBkcmF3aW5nIGR1cmluZyB0aGUgd2luZG93Ci0gICAgICAgIC8vIHVw
ZGF0ZSBwcm9jZXNzIGJ5IGNsaXBwaW5nIHRoZSB3aW5kb3cgdG8gdGhlIHplcm8gcmVjdC4KLQot
ICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0ID0gIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOwotCi0gICAgICAg
IGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwotICAgICAgICAgICAgOjpTZXRXaW5k
b3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWsoKSwgRkFMU0UpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgo
KSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCksIFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0IHx8IG1fd2luZG93UmVjdCAhPSBvbGRX
aW5kb3dSZWN0KQotICAgICAgICAgICAgOjpNb3ZlV2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0
aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksIFRSVUUpOwotCi0gICAgICAgIGlmIChjbGlwVG9a
ZXJvUmVjdCkgewotICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgo
KSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCksIFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0KLSAgICAgICAgbV9oYXZlVXBkYXRlZFBsdWdp
bldpZGdldCA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJv
b2wgZm9jdXNlZCkKLXsKLSAgICBpZiAoZm9jdXNlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KQotICAgICAgICBTZXRGb2N1cyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLQotICAgIFdpZGdl
dDo6c2V0Rm9jdXMoZm9jdXNlZCk7Ci0KLSAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBFdmVudCBucEV2ZW50OwotCi0gICAgbnBFdmVu
dC5ldmVudCA9IGZvY3VzZWQgPyBXTV9TRVRGT0NVUyA6IFdNX0tJTExGT0NVUzsKLSAgICBucEV2
ZW50LndQYXJhbSA9IDA7Ci0gICAgbnBFdmVudC5sUGFyYW0gPSAwOwotCi0gICAgZGlzcGF0Y2hO
UEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNob3coKQotewotICAgIHNl
dFNlbGZWaXNpYmxlKHRydWUpOwotCi0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpCi0gICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSwgU1dfU0hPV05BKTsKLQotICAgIFdpZGdldDo6c2hvdygpOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OmhpZGUoKQotewotICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsKLQotICAgIGlmIChp
c1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICBTaG93
V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJREUpOwotCi0gICAgV2lkZ2V0Ojpo
aWRlKCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIG5w
RXZlbnQpCi17Ci0gICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgYm9vbCBzaG91bGRQb3AgPSBmYWxzZTsKLQotICAgIGlm
IChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dmVyc2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VO
QUJMRURfU1RBVEUgJiYgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKG5wRXZlbnQuZXZlbnQp
KSB7Ci0gICAgICAgIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUodHJ1ZSk7Ci0gICAgICAgIHNob3Vs
ZFBvcCA9IHRydWU7Ci0gICAgfQotCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwotICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKLQotICAgIGlmIChzaG91bGRQb3ApIAotICAgICAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUo
KTsKLQotICAgIHJldHVybiBhY2NlcHRlZDsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQoSERDIGhkYykKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7
Ci0gICAgICAgIFNlbmRNZXNzYWdlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJ
RU5ULCByZWludGVycHJldF9jYXN0PFdQQVJBTT4oaGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElM
RFJFTiB8IFBSRl9PV05FRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25wV2lu
ZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKLSAgICBtX25wV2luZG93LndpbmRvdyA9
IGhkYzsKLQotICAgIFdJTkRPV1BPUyB3aW5kb3dwb3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAg
fTsKLQotICAgIEludFJlY3QgciA9IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8RnJh
bWVWaWV3PihwYXJlbnQoKSksIGZyYW1lUmVjdCgpKTsKLQotICAgIHdpbmRvd3Bvcy54ID0gci54
KCk7Ci0gICAgd2luZG93cG9zLnkgPSByLnkoKTsKLSAgICB3aW5kb3dwb3MuY3ggPSByLndpZHRo
KCk7Ci0gICAgd2luZG93cG9zLmN5ID0gci5oZWlnaHQoKTsKLQotICAgIE5QRXZlbnQgbnBFdmVu
dDsKLSAgICBucEV2ZW50LmV2ZW50ID0gV01fV0lORE9XUE9TQ0hBTkdFRDsKLSAgICBucEV2ZW50
LmxQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pigmd2luZG93cG9zKTsKLSAgICBu
cEV2ZW50LndQYXJhbSA9IDA7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci0KLSAg
ICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOwotCi0gICAgbnBFdmVudC5ldmVudCA9IFdN
X1BBSU5UOwotICAgIG5wRXZlbnQud1BhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGhkYyk7Ci0KLSAgICAvLyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGEgcG9pbnRlciB0byB0aGUg
ZGlydHkgcmVjdCwgYnV0IGl0IHNlZW1zIHRoYXQgdGhlIEZsYXNoIHBsdWdpbgotICAgIC8vIGln
bm9yZXMgaXQgc28gd2UganVzdCBwYXNzIG51bGwuCi0gICAgbnBFdmVudC5sUGFyYW0gPSAwOwot
Ci0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBh
aW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgIVVTRShXSU5HREkpCi0gICAgQVNTRVJUKG1faXNX
aW5kb3dlZCk7Ci0gICAgQVNTRVJUKGNvbnRleHQtPnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3Mo
KSk7Ci0KLSAgICBJbnRQb2ludCBsb2NhdGlvbkluV2luZG93ID0gZG93bmNhc3Q8RnJhbWVWaWV3
PigqcGFyZW50KCkpLmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVSZWN0KCkubG9jYXRp
b24oKSk7Ci0KLSAgICBMb2NhbFdpbmRvd3NDb250ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQs
IGZyYW1lUmVjdCgpLCBmYWxzZSk7Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgLy8gTXVzdCBmbHVz
aCBkcmF3aW5ncyB1cCB0byB0aGlzIHBvaW50IHRvIHRoZSBiYWNraW5nIG1ldGFmaWxlLCBvdGhl
cndpc2UgdGhlCi0gICAgLy8gcGx1Z2luIHJlZ2lvbiB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGgg
YW55IGNsZWFyIHJlZ2lvbnMgc3BlY2lmaWVkIGluIHRoZQotICAgIC8vIGNhaXJvLWNvbnRyb2xs
ZWQgcG9ydGlvbnMgb2YgdGhlIHJlbmRlcmluZy4KLSAgICBjYWlyb19zaG93X3BhZ2UoY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwotI2VuZGlmCi0KLSAgICBIREMgaGRjID0gd2lu
ZG93c0NvbnRleHQuaGRjKCk7Ci0gICAgWEZPUk0gb3JpZ2luYWxUcmFuc2Zvcm07Ci0gICAgR2V0
V29ybGRUcmFuc2Zvcm0oaGRjLCAmb3JpZ2luYWxUcmFuc2Zvcm0pOwotCi0gICAgLy8gVGhlIHBs
dWdpbiBleHBlY3RzIHRoZSBEQyB0byBiZSBpbiBjbGllbnQgY29vcmRpbmF0ZXMsIHNvIHdlIHRy
YW5zbGF0ZQotICAgIC8vIHRoZSBEQyB0byBtYWtlIHRoYXQgc28uCi0gICAgQWZmaW5lVHJhbnNm
b3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwotICAgIGN0bS50cmFuc2xhdGUobG9jYXRpb25J
bldpbmRvdy54KCksIGxvY2F0aW9uSW5XaW5kb3cueSgpKTsKLSAgICBYRk9STSB0cmFuc2Zvcm0g
PSBzdGF0aWNfY2FzdDxYRk9STT4oY3RtLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0KLSAg
ICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ0cmFuc2Zvcm0pOwotCi0gICAgcGFpbnRJbnRvVHJh
bnNmb3JtZWRDb250ZXh0KGhkYyk7Ci0KLSAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmln
aW5hbFRyYW5zZm9ybSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFt
X2lzU3RhcnRlZCkgewotICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdl
Ci0gICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGNhbGxlZCBTZXRX
aW5kb3cgYmVmb3JlIHdlIHRyeSB0byBwYWludC4KLSAgICBpZiAoIW1faGF2ZUNhbGxlZFNldFdp
bmRvdykKLSAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKLQotICAgIGlmICht
X2lzV2luZG93ZWQpIHsKLSNpZiAhVVNFKFdJTkdESSkKLSAgICAgICAgaWYgKGNvbnRleHQtPnNo
b3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSkKLSAgICAgICAgICAgIHBhaW50V2luZG93ZWRQbHVn
aW5JbnRvQ29udGV4dChjb250ZXh0LCByZWN0KTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gSW4gdGhlIEdUSyBhbmQgUXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZz
Y3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2luZG93Ci0gICAgLy8gY29v
cmRpbmF0ZXMuCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIEludFJlY3QgcmVjdEluV2luZG93KHJl
Y3QpOwotICAgIHJlY3RJbldpbmRvdy5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOwotI2Vsc2UKLSAg
ICBJbnRSZWN0IHJlY3RJbldpbmRvdyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5j
b250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKTsKLSNlbmRpZgotICAgIExvY2FsV2luZG93c0Nv
bnRleHQgd2luZG93c0NvbnRleHQoY29udGV4dCwgcmVjdEluV2luZG93LCBtX2lzVHJhbnNwYXJl
bnQpOwotCi0gICAgLy8gT24gU2FmYXJpL1dpbmRvd3Mgd2l0aG91dCB0cmFuc3BhcmVuY3kgbGF5
ZXJzIHRoZSBHcmFwaGljc0NvbnRleHQgcmV0dXJucyB0aGUgSERDCi0gICAgLy8gb2YgdGhlIHdp
bmRvdyBhbmQgdGhlIHBsdWdpbiBleHBlY3RzIHRoYXQgdGhlIHBhc3NlZCBpbiBEQyBoYXMgd2lu
ZG93IGNvb3JkaW5hdGVzLgotICAgIC8vIEluIHRoZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGFsd2F5
cyBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIHRoZXJlZm9yZSBuZWVkCi0gICAgLy8g
dG8gcHJlc2VydmUgdGhlIHRyYW5zbGF0aW9uIHNldCBpbiBnZXRXaW5kb3dzQ29udGV4dC4KLSNp
ZiAhUExBVEZPUk0oR1RLKQotICAgIGlmICghY29udGV4dC0+aXNJblRyYW5zcGFyZW5jeUxheWVy
KCkpIHsKLSAgICAgICAgWEZPUk0gdHJhbnNmb3JtOwotICAgICAgICBHZXRXb3JsZFRyYW5zZm9y
bSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRyYW5zZm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybS5l
RHggPSAwOwotICAgICAgICB0cmFuc2Zvcm0uZUR5ID0gMDsKLSAgICAgICAgU2V0V29ybGRUcmFu
c2Zvcm0od2luZG93c0NvbnRleHQuaGRjKCksICZ0cmFuc2Zvcm0pOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KHdpbmRvd3NDb250ZXh0LmhkYygpKTsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQq
IGV2ZW50KQotewotICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKLQotICAg
IE5QRXZlbnQgbnBFdmVudDsKLQotICAgIG5wRXZlbnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUo
KTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQp
IHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWURPV047Ci0gICAgICAgIG5wRXZlbnQu
bFBhcmFtID0gMDsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleXByZXNzRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0NIQVI7Ci0gICAg
ICAgIG5wRXZlbnQubFBhcmFtID0gMDsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tF
WVVQOwotICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotZXh0ZXJu
IGJvb2wgaWdub3JlTmV4dFNldEN1cnNvcjsKLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3Vz
ZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9p
c1dpbmRvd2VkKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLQotICAgIEludFBvaW50IHAgPSBj
b250ZW50c1RvTmF0aXZlV2luZG93KGRvd25jYXN0PEZyYW1lVmlldz4ocGFyZW50KCkpLCBJbnRQ
b2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKLQotICAgIG5wRXZlbnQubFBh
cmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkpOwotICAgIG5wRXZlbnQud1BhcmFtID0gMDsK
LQotICAgIGlmIChldmVudC0+Y3RybEtleSgpKQotICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBN
S19DT05UUk9MOwotICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKLSAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfU0hJRlQ7Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vtb3ZlRXZlbnQgfHwKLSAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2VvdXRFdmVudCB8fCAKLSAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9W
RTsKLSAgICAgICAgaWYgKGV2ZW50LT5idXR0b25Eb3duKCkpCi0gICAgICAgICAgICBzd2l0Y2gg
KGV2ZW50LT5idXR0b24oKSkgewotICAgICAgICAgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKLSAg
ICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTEJVVFRPTjsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246Ci0g
ICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX01CVVRUT047Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246Ci0g
ICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1JCVVRUT047Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7Ci0gICAgICAgIGZvY3Vz
UGx1Z2luRWxlbWVudCgpOwotICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewotICAg
ICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVU
VE9ORE9XTjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMToKLSAg
ICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTkRPV047Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgbnBFdmVu
dC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQpIHsKLSAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgMDoKLSAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9OVVA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdN
X1JCVVRUT05VUDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxz
ZQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgIC8vIEZJWE1FOiBDb25z
aWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUu
Ci0gICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci0KLSNpZiAhUExBVEZPUk0oR1RLKQotICAgIC8vIEN1cnJlbnRseSwg
V2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGlu
IEV2ZW50SGFuZGxlci5jcHAKLSAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdl
IHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCi0g
ICAgaWdub3JlTmV4dFNldEN1cnNvciA9IHRydWU7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3Bh
cmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNldExh
c3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKTsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCi17Ci0gICAgV2lkZ2V0OjpzZXRQYXJl
bnQocGFyZW50KTsKLQotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIGluaXQoKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIC8vIElmIHRoZSBwbHVnLWluIHdpbmRvdyBvciBvbmUgb2YgaXRzIGNo
aWxkcmVuIGhhdmUgdGhlIGZvY3VzLCB3ZSBuZWVkIHRvIAotICAgICAgICAvLyBjbGVhciBpdCB0
byBwcmV2ZW50IHRoZSB3ZWIgdmlldyB3aW5kb3cgZnJvbSBiZWluZyBmb2N1c2VkIGJlY2F1c2Ug
dGhhdCBjYW4KLSAgICAgICAgLy8gdHJpZ2dlciBhIGxheW91dCB3aGlsZSB0aGUgcGx1Z2luIGVs
ZW1lbnQgaXMgYmVpbmcgZGV0YWNoZWQuCi0gICAgICAgIEhXTkQgZm9jdXNlZFdpbmRvdyA9IDo6
R2V0Rm9jdXMoKTsKLSAgICAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNl
ZFdpbmRvdyB8fCA6OklzQ2hpbGQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRv
dykpCi0gICAgICAgICAgICA6OlNldEZvY3VzKDApOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAoaXNQYXJlbnRW
aXNpYmxlKCkgPT0gdmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2lkZ2V0OjpzZXRQ
YXJlbnRWaXNpYmxlKHZpc2libGUpOwotCi0gICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKSB7Ci0gICAgICAgIGlmICh2aXNpYmxlKQotICAgICAgICAgICAg
U2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19TSE9XTkEpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJ
REUpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1faXNTdGFydGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBJbiB0aGUgR1RLIHBvcnQgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVy
IGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2luZG93Ci0gICAgLy8gY29vcmRpbmF0ZXMuCi0j
IGlmIFBMQVRGT1JNKEdUSykKLSAgICBJbnRQb2ludCBwID0gcmVjdC5sb2NhdGlvbigpOwotIyBl
bHNlCi0gICAgSW50UG9pbnQgcCA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250
ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7Ci0jIGVuZGlmCi0gICAgbV9ucFdpbmRvdy54
ID0gcC54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0gcC55KCk7Ci0KLSAgICBtX25wV2luZG93Lndp
ZHRoID0gcmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQo
KTsKLQotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7Ci0gICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOwotICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QubGVmdCA9IDA7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwot
Ci0gICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKLSAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7
Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotCi0gICAgICAgIG1faGF2ZUNhbGxl
ZFNldFdpbmRvdyA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwot
Ci0gICAgICAgIFdORFBST0MgY3VycmVudFduZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25n
UHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQyk7Ci0gICAgICAgIGlmIChj
dXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3V25kUHJvYykKLSAgICAgICAgICAgIG1fcGx1Z2lu
V25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpUGx1Z2luVmlld1duZFByb2MpOwotICAgIH0KLX0K
LQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBi
dWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQotewotICAgIFN0cmluZyBmaWxl
bmFtZShidWYsIGxlbik7Ci0KLSAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8i
KSkKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7Ci0KLSAgICAvLyBH
ZXQgZmlsZSBpbmZvCi0gICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyczsKLSAgICBp
ZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeFcoZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWlu
YXRpb24oKS5kYXRhKCksIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJzKSA9PSAwKQotICAg
ICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBpZiAoYXR0cnMuZHdGaWxl
QXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgcmV0dXJuIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgSEFORExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxl
VyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgRklMRV9S
RUFEX0RBVEEsIEZJTEVfU0hBUkVfUkVBRCwgMCwgT1BFTl9FWElTVElORywgMCwgMCk7Ci0gICAg
Ci0gICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgIHJl
dHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIGJ1ZmZlci5yZXNpemUoYXR0cnMubkZp
bGVTaXplTG93KTsKLQotICAgIERXT1JEIGJ5dGVzUmVhZDsKLSAgICBpbnQgcmV0dmFsID0gUmVh
ZEZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYXR0cnMubkZpbGVTaXplTG93LCAmYnl0
ZXNSZWFkLCAwKTsKLQotICAgIENsb3NlSGFuZGxlKGZpbGVIYW5kbGUpOwotCi0gICAgaWYgKHJl
dHZhbCA9PSAwIHx8IGJ5dGVzUmVhZCAhPSBhdHRycy5uRmlsZVNpemVMb3cpCi0gICAgICAgIHJl
dHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
LX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxl
LCB2b2lkKiwgTlBFcnJvciopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBsdWdp
blZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVl
LCBOUEVycm9yKiByZXN1bHQpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgICAgICBj
YXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAgICAgICAgICAgSFdORCogdyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SFdORCo+KHZhbHVlKTsKLSAgICAgICAgICAgICp3ID0gd2luZG93SGFuZGxlRm9y
UGFnZUNsaWVudChwYXJlbnQoKSA/IHBhcmVudCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFn
ZUNsaWVudCgpIDogMCk7Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlN1
cHBvcnRzV2luZG93bGVzczogewotICAgICAgICAgICAgTlBCb29sKiBmbGFnID0gcmVpbnRlcnBy
ZXRfY2FzdDxOUEJvb2wqPih2YWx1ZSk7Ci0gICAgICAgICAgICAqZmxhZyA9IFRSVUU7Ci0gICAg
ICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgUkVDVCBpbnZhbGlkUmVj
dCA9IHsgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgfTsKLSAg
ICAgICAgOjpJbnZhbGlkYXRlUmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmaW52YWxpZFJl
Y3QsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludmFsaWRhdGVXaW5k
b3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdChOUFJlY3QqIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0KSB7Ci0gICAgICAgIGludmFsaWRh
dGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEludFJlY3QgcihyZWN0LT5sZWZ0
LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVj
dC0+dG9wKTsKLQotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgUkVDVCBpbnZhbGlk
UmVjdCA9IHsgci54KCksIHIueSgpLCByLm1heFgoKSwgci5tYXhZKCkgfTsKLSAgICAgICAgSW52
YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRSZWN0LCBGQUxTRSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkpIHsKLSAgICAgICAgICAgIG1faW52YWxpZFJl
Y3RzLmFwcGVuZChyKTsKLSAgICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3Rp
dmUoKSkKLSAgICAgICAgICAgICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4w
MDEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGludmFsaWRhdGVSZWN0KHIpOwotICAg
IH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lv
bikKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSRUNU
IHI7Ci0KLSAgICBpZiAoR2V0UmduQm94KHJlZ2lvbiwgJnIpID09IDApIHsKLSAgICAgICAgaW52
YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50UmVjdCByZWN0KElu
dFBvaW50KHIubGVmdCwgci50b3ApLCBJbnRTaXplKHIucmlnaHQtci5sZWZ0LCByLmJvdHRvbS1y
LnRvcCkpOwotICAgIGludmFsaWRhdGVSZWN0KHJlY3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OmZvcmNlUmVkcmF3KCkKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKQotICAgICAgICA6OlVwZGF0
ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIDo6VXBk
YXRlV2luZG93KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQocGFyZW50KCkgPyBwYXJlbnQoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSA6IDApKTsKLX0KLQotYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAg
IEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOwotCi0g
ICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICByZWdpc3RlclBsdWdpblZpZXcoKTsKLSAg
ICAgICAgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKGhvb2tlZEJlZ2luUGFpbnQsIGhvb2tl
ZEVuZFBhaW50KTsKLQotICAgICAgICBEV09SRCBmbGFncyA9IFdTX0NISUxEOwotICAgICAgICBp
ZiAoaXNTZWxmVmlzaWJsZSgpKQotICAgICAgICAgICAgZmxhZ3MgfD0gV1NfVklTSUJMRTsKLQot
ICAgICAgICBIV05EIHBhcmVudFdpbmRvd0hhbmRsZSA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGll
bnQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKTsKLSAgICAgICAgSFdORCB3aW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVn
aW5WaWV3ZG93Q2xhc3NOYW1lLCAwLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIDAsIDAsIHBhcmVudFdpbmRvd0hhbmRsZSwgMCwgV2ViQ29yZTo6
aW5zdGFuY2VIYW5kbGUoKSwgMCk7Ci0KLSNpZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEsp
Ci0gICAgICAgIG1fd2luZG93ID0gd2luZG93OwotI2Vsc2UKLSAgICAgICAgc2V0UGxhdGZvcm1X
aWRnZXQod2luZG93KTsKLSNlbmRpZgotCi0gICAgICAgIC8vIENhbGxpbmcgU2V0V2luZG93TG9u
Z1B0ckEgaGVyZSBtYWtlcyB0aGUgd2luZG93IHByb2MgQVNDSUksIHdoaWNoIGlzIHJlcXVpcmVk
IGJ5IGF0IGxlYXN0Ci0gICAgICAgIC8vIHRoZSBTaG9ja3dhdmUgRGlyZWN0b3IgcGx1Zy1pbi4K
LSNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAgICA6OlNldFdpbmRvd0xvbmdQ
dHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRSKURlZldp
bmRvd1Byb2NBKTsKLSNlbHNlCi0gICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MsIChMT05HKURlZldpbmRvd1Byb2NBKTsKLSNlbmRp
ZgotICAgICAgICBTZXRQcm9wKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIGtXZWJQbHVnaW5WaWV3
UHJvcGVydHksIHRoaXMpOwotCi0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlw
ZVdpbmRvdzsKLSAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlw
ZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7Ci0gICAgfQotCi0gICAg
dXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci0KLSAgICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkKLSAgICAgICAgc2V0TlBX
aW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEZXN0cm95V2luZG93KHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpOwotICAgIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KDApOwotfQotCi1QYXNz
UmVmUHRyPEltYWdlPiBQbHVnaW5WaWV3OjpzbmFwc2hvdCgpCi17Ci0jaWYgIVBMQVRGT1JNKEdU
SykgJiYgIVVTRShXSU5HREkpCi0gICAgYXV0byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZUNvbXBhdGlibGVEQygwKSk7Ci0KLSAgICBpZiAoIW1faXNXaW5kb3dlZCkgewotICAgICAgICAv
LyBFbmFibGUgd29ybGQgdHJhbnNmb3Jtcy4KLSAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYy5n
ZXQoKSwgR01fQURWQU5DRUQpOwotCi0gICAgICAgIFhGT1JNIHRyYW5zZm9ybTsKLSAgICAgICAg
R2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgpLCAmdHJhbnNmb3JtKTsKLQotICAgICAgICAvLyBX
aW5kb3dsZXNzIHBsdWctaW5zIGFzc3VtZSB0aGF0IHRoZXkncmUgZHJhd2luZyBvbnRvIHRoZSB2
aWV3J3MgREMuCi0gICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBw
bHVnLWluIGRyYXdzIGF0ICgwLCAwKS4KLSAgICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBkb3du
Y2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSku
bG9jYXRpb24oKTsKLSAgICAgICAgdHJhbnNmb3JtLmVEeCA9IC1wb3NpdGlvbi54KCk7Ci0gICAg
ICAgIHRyYW5zZm9ybS5lRHkgPSAtcG9zaXRpb24ueSgpOwotICAgICAgICBTZXRXb3JsZFRyYW5z
Zm9ybShoZGMuZ2V0KCksICZ0cmFuc2Zvcm0pOwotICAgIH0KLQotICAgIHZvaWQqIGJpdHM7Ci0g
ICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChmcmFtZVJlY3Qo
KS5zaXplKCkpOwotICAgIGF1dG8gaGJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2Vj
dGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9SUywgJmJpdHMsIDAsIDApKTsKLQotICAgIEhCSVRN
QVAgaGJtcE9sZCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KFNlbGVjdE9iamVjdChoZGMuZ2V0KCks
IGhibXAuZ2V0KCkpKTsKLQotICAgIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChoZGMuZ2V0
KCkpOwotCi0gICAgU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICByZXR1
cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShoYm1wLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7
Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2ogYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvagppbmRleCBmZjc1MGJjM2Ez
YTI5MjUwNTFmMTg0NjU1OGMxMDhmNmEzYzA4ZGY4Li5iMDI4MDUwNTlmODQ4ZDgxYzcwMTU0YWE1
ODNlNTIxODhjZWJiMzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L1dlYktpdC9XZWJLaXQudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L1dlYktpdC9XZWJLaXQudmN4cHJvagpAQCAtMjk0LDYgKzI5NCwxNiBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxXZWJEYXRhYmFzZVByb3ZpZGVyLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGNmXFdlYkNvcmVT
dXBwb3J0XFdlYkluc3BlY3RvckNsaWVudENGLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXG5wYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRlYnVnLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFt
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdp
blZpZXcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNc
UGx1Z2luRGF0YWJhc2VXaW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c
d2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlV2luLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXdXaW4u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVCYXNl
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9j
dW1lbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2li
bGVJbWFnZS5jcHAiIC8+CkBAIC00MzYsNiArNDQ2LDE0IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYkRhdGFiYXNlUHJvdmlkZXIuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQ
bHVnaW5EYXRhYmFzZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBs
dWdpbnNcUGx1Z2luRGVidWcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdp
blxQbHVnaW5zXFBsdWdpblBhY2thZ2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XC4uXHdpblxQbHVnaW5zXFBsdWdpblF1aXJrU2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5TdHJhdGVneS5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFtLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5WaWV3LmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJs
ZUJhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxl
RG9jdW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3Np
YmxlSW1hZ2UuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ov
V2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hw
cm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzCmluZGV4IDA5NGY2MGE5YjE5MTE3ZTNk
MThmZTVlN2I5Yzk1MDY3OGUyOGM0MzQuLmVkMzE4ZGJiOTZjMGNlNjVlMWJlMjEwOTc2NWMxNjMx
YjdkMjZiOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0
L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJv
ai9XZWJLaXQvV2ViS2l0LnZjeHByb2ouZmlsdGVycwpAQCAtMjE3LDYgKzIxNywzNiBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFdlYlNlcmlhbGl6ZWRKU1ZhbHVlLmNwcCI+
CiAgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXG5wYXBpLmNwcCI+CisgICAgICA8
RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmNwcCI+CisgICAgICA8
RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRlYnVnLmNwcCI+CisgICAgICA8Rmls
dGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIj4KKyAgICAgIDxGaWx0
ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFtLmNwcCI+CisgICAgICA8RmlsdGVy
PlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXcuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291
cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJhc2VXaW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+
U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAiPgorICAg
ICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlV2luLmNwcCI+Cisg
ICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXdXaW4uY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlQXJlYUltcGwuY3BwIj4KICAgICAg
IDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNTU4LDYgKzU4
OCwyNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFdlYkNvcmVTdXBwb3J0
XEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgiPgogICAgICAgPEZpbHRlcj5XZWJDb3Jl
U3VwcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuaCI+CisgICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGVidWcuaCI+CisgICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luUGFja2FnZS5oIj4KKyAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5RdWlya1NldC5oIj4KKyAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5TdHJlYW0uaCI+CisgICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luVmlldy5oIj4KKyAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgi
PgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZUFyZWFJbXBsLmgi
PgogICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BhaW50SG9va3MuYXNtIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTA4ODEzNTZh
MGRkY2Q3ODMwNzI4MTFlOWYxNWExMTU5NGIxODVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQpAQCAtMCwwICsxLDUwIEBACis7LyoK
KzsgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorOworOyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCis7ICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorOyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCis7Cis7ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorOyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworOyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorOyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsqLworCis7SERDIF9fc3RkY2FsbCBfSEJlZ2lu
UGFpbnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNUIGxwUGFpbnQpOworCitQVUJMSUMgIF9IQmVn
aW5QYWludAorCitfVEVYVCAgIFNFR01FTlQKKworX0hCZWdpblBhaW50IFBST0MKKyAgICAgbW92
ICByMTAscmN4CisgICAgIG1vdiAgZWF4LDEwMTdoCisgICAgIHN5c2NhbGwKKyAgICAgcmV0Citf
SEJlZ2luUGFpbnQgRU5EUAorCitfVEVYVCAgIEVORFMKKworO0JPT0wgX19zdGRjYWxsIF9IRW5k
UGFpbnQoSFdORCBoV25kLCBjb25zdCBQQUlOVFNUUlVDVCogbHBQYWludCk7CisKK1BVQkxJQyAg
X0hFbmRQYWludAorCitfVEVYVCAgIFNFR01FTlQKKworX0hFbmRQYWludCBQUk9DCisgICAgbW92
ICByMTAscmN4CisgICAgbW92ICBlYXgsMTAxOWgKKyAgICBzeXNjYWxsCisgICAgcmV0CitfSEVu
ZFBhaW50IEVORFAKKworX1RFWFQgICBFTkRTCisKK0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYmEyY2VlMmRhNzJjYWYxNGI3
NWNmMzZmYWFkMTRiNzVlNTc0ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDsKKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCitzdGF0aWMgY29uc3Qgc2l6
ZV90IG1heGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVNpemUgPSAzMjc2ODsKKwor
c3RhdGljIGJvb2wgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOworCitT
dHJpbmcmIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpCit7CisgICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY2FjaGVQYXRoLCAoKSk7CisgICAgcmV0
dXJuIGNhY2hlUGF0aDsKK30KKyNlbmRpZgorCitQbHVnaW5EYXRhYmFzZTo6UGx1Z2luRGF0YWJh
c2UoKQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgOiBt
X3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQoZmFsc2UpCisjZW5kaWYKK3sKK30KKwor
UGx1Z2luRGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKGJvb2wgcG9w
dWxhdGUpCit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBwbHVnaW5zID0gMDsKKworICAg
IGlmICghcGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlOwor
CisgICAgICAgIGlmIChwb3B1bGF0ZSkgeworICAgICAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2lu
RGlyZWN0b3JpZXMoUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpKTsK
KyAgICAgICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBwbHVnaW5zOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc01JTUVUeXBlUmVn
aXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlw
ZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBObyBw
bHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGlu
ZyBhZ2FpbgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5j
b250YWlucyhtaW1lVHlwZSkpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBs
dWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKK3sKKyAgICBtX3BsdWdpbkRp
cmVjdG9yaWVzLmFwcGVuZChkaXJlY3RvcnkpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQ
bHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKKyAgICBpZiAoIW1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRl
ZCkKKyAgICAgICAgbG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKyAgICBi
b29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIGlmICghbV9wbHVnaW5zLmlzRW1w
dHkoKSkgeworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkOworICAgICAgICBnZXRE
ZWxldGVkUGx1Z2lucyhwbHVnaW5zVG9VbmxvYWQpOworCisgICAgICAgIC8vIFVubG9hZCBwbHVn
aW5zCisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGx1Z2luc1RvVW5s
b2FkLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
bHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgcmVt
b3ZlKGl0LT5nZXQoKSk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9V
bmxvYWQuaXNFbXB0eSgpOworICAgIH0KKworICAgIEhhc2hTZXQ8U3RyaW5nPiBwYXRoczsKKyAg
ICBnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMocGF0aHMpOworCisgICAgSGFzaE1hcDxTdHJp
bmcsIHRpbWVfdD4gcGF0aHNXaXRoVGltZXM7CisKKyAgICAvLyBXZSBzaG91bGQgb25seSBza2lw
IHVuY2hhbmdlZCBmaWxlcyBpZiB3ZSBkaWRuJ3QgcmVtb3ZlIGFueSBwbHVnaW5zIGFib3ZlLiBJ
ZiB3ZSBkaWQgcmVtb3ZlCisgICAgLy8gYW55IHBsdWdpbnMsIHdlIG5lZWQgdG8gbG9vayBhdCBl
dmVyeSBwbHVnaW4gZmlsZSBzbyB0aGF0LCBlLmcuLCBpZiB0aGUgdXNlciBoYXMgdHdvIHZlcnNp
b25zCisgICAgLy8gb2YgUmVhbFBsYXllciBpbnN0YWxsZWQgYW5kIGp1c3QgcmVtb3ZlZCB0aGUg
bmV3ZXIgb25lLCB3ZSdsbCBwaWNrIHVwIHRoZSBvbGRlciBvbmUuCisgICAgYm9vbCBzaG91bGRT
a2lwVW5jaGFuZ2VkRmlsZXMgPSAhcGx1Z2luU2V0Q2hhbmdlZDsKKworICAgIEhhc2hTZXQ8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgcGF0aHNFbmQgPSBwYXRocy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBpdCAhPSBw
YXRoc0VuZDsgKytpdCkgeworICAgICAgICB0aW1lX3QgbGFzdE1vZGlmaWVkOworICAgICAgICBp
ZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKCppdCwgbGFzdE1vZGlmaWVkKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIHBhdGhzV2l0aFRpbWVzLmFkZCgqaXQsIGxhc3RNb2Rp
ZmllZCk7CisKKyAgICAgICAgLy8gSWYgdGhlIHBhdGgncyB0aW1lc3RhbXAgaGFzbid0IGNoYW5n
ZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSByYW4gcmVmcmVzaCgpLCB3ZSBkb24ndCBoYXZlIHRv
IGRvIGFueXRoaW5nLgorICAgICAgICBpZiAoc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzICYmIG1f
cGx1Z2luUGF0aHNXaXRoVGltZXMuZ2V0KCppdCkgPT0gbGFzdE1vZGlmaWVkKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBvbGRQYWNr
YWdlID0gbV9wbHVnaW5zQnlQYXRoLmdldCgqaXQpKSB7CisgICAgICAgICAgICBBU1NFUlQoIXNo
b3VsZFNraXBVbmNoYW5nZWRGaWxlcyB8fCBvbGRQYWNrYWdlLT5sYXN0TW9kaWZpZWQoKSAhPSBs
YXN0TW9kaWZpZWQpOworICAgICAgICAgICAgcmVtb3ZlKG9sZFBhY2thZ2UuZ2V0KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKCppdCwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgaWYgKHBh
Y2thZ2UgJiYgYWRkKHBhY2thZ2UucmVsZWFzZSgpKSkKKyAgICAgICAgICAgIHBsdWdpblNldENo
YW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIENhY2hlIGFsbCB0aGUgcGF0aHMgd2UgZm91
bmQgd2l0aCB0aGVpciB0aW1lc3RhbXBzIGZvciBuZXh0IHRpbWUuCisgICAgcGF0aHNXaXRoVGlt
ZXMuc3dhcChtX3BsdWdpblBhdGhzV2l0aFRpbWVzKTsKKworICAgIGlmICghcGx1Z2luU2V0Q2hh
bmdlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9NRVRBREFUQV9DQUNIRSkKKyAgICB1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOwor
I2VuZGlmCisKKyAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKKworICAgIC8vIFJl
Z2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8g
R2V0IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKKyAgICAg
ICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCkt
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1h
cF9lbmQ7ICsrbWFwX2l0KQorICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZCht
YXBfaXQtPmtleSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZlY3RvcjxQbHVn
aW5QYWNrYWdlKj4gUGx1Z2luRGF0YWJhc2U6OnBsdWdpbnMoKSBjb25zdAoreworICAgIFZlY3Rv
cjxQbHVnaW5QYWNrYWdlKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQg
UGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUoY29uc3Qgdm9pZCogYSwgY29u
c3Qgdm9pZCogYikKK3sKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5BID0gKnN0YXRpY19jYXN0
PFBsdWdpblBhY2thZ2UqIGNvbnN0Kj4oYSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luQiA9
ICpzdGF0aWNfY2FzdDxQbHVnaW5QYWNrYWdlKiBjb25zdCo+KGIpOworCisgICAgcmV0dXJuIHBs
dWdpbkEtPmNvbXBhcmUoKnBsdWdpbkIpOworfQorCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRh
YmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBp
ZiAobWltZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBr
ZXkgPSBtaW1lVHlwZS5sb3dlcigpOworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOworICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9
IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQoa2V5KTsKKyAgICBpZiAocHJlZmVycmVkUGx1Z2luCisg
ICAgICAgICYmIHByZWZlcnJlZFBsdWdpbi0+aXNFbmFibGVkKCkKKyAgICAgICAgJiYgcHJlZmVy
cmVkUGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisgICAgICAg
IHJldHVybiBwcmVmZXJyZWRQbHVnaW47CisgICAgfQorCisgICAgVmVjdG9yPFBsdWdpblBhY2th
Z2UqLCAyPiBwbHVnaW5DaG9pY2VzOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBQ
bHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKworICAgICAgICBpZiAoIXBsdWdp
bi0+aXNFbmFibGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocGx1
Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgICAgIGlmICghcGx1Z2luLT5l
bnN1cmVQbHVnaW5Mb2FkZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgor
ICAgICAgICAgICAgcGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1Z2luKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBxc29ydChwbHVnaW5DaG9pY2VzLmRhdGEoKSwgcGx1Z2luQ2hvaWNlcy5zaXplKCks
IHNpemVvZihQbHVnaW5QYWNrYWdlKiksIFBsdWdpbkRhdGFiYXNlOjpwcmVmZXJyZWRQbHVnaW5D
b21wYXJlKTsKKworICAgIHJldHVybiBwbHVnaW5DaG9pY2VzWzBdOworfQorCitTdHJpbmcgUGx1
Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9u
KSBjb25zdAoreworICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKKyAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2Uq
LCAyPiBwbHVnaW5DaG9pY2VzOworICAgIEhhc2hNYXA8UGx1Z2luUGFja2FnZSosIFN0cmluZz4g
bWltZVR5cGVGb3JQbHVnaW47CisKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgh
KCppdCktPmlzRW5hYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRv
RXh0ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4o
KTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBtaW1lVHlw
ZSA9IG1pbWVfaXQtPmtleTsKKyAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBs
dWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWltZVR5cGUpOworICAgICAgICAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsKKyAgICAgICAg
ICAgIGJvb2wgZm91bmRNYXBwaW5nID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CisgICAgICAg
ICAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9ICgqaXQpLmdldCgpOworCisgICAg
ICAgICAgICAgICAgICAgIGlmIChwcmVmZXJyZWRQbHVnaW4gJiYgUGx1Z2luUGFja2FnZTo6ZXF1
YWwoKnBsdWdpbiwgKnByZWZlcnJlZFBsdWdpbikpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWltZVR5cGU7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NB
Q0hFKQorICAgICAgICAgICAgICAgICAgICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2luTG9hZGVk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5DaG9pY2VzLmFwcGVuZChwbHVnaW4pOworICAgICAgICAgICAgICAg
ICAgICBtaW1lVHlwZUZvclBsdWdpbi5hZGQocGx1Z2luLCBtaW1lVHlwZSk7CisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kTWFwcGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmb3Vu
ZE1hcHBpbmcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAocGx1Z2luQ2hvaWNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KworICAgIHFzb3J0KHBsdWdpbkNob2ljZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUoKSwg
c2l6ZW9mKFBsdWdpblBhY2thZ2UqKSwgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNv
bXBhcmUpOworCisgICAgcmV0dXJuIG1pbWVUeXBlRm9yUGx1Z2luLmdldChwbHVnaW5DaG9pY2Vz
WzBdKTsKK30KKworUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29u
c3QgVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKCFtaW1lVHlwZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAg
CisgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CisgICAgaWYg
KGZpbGVuYW1lLmVuZHNXaXRoKCcvJykpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlu
dCBleHRlbnNpb25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGlmIChleHRl
bnNpb25Qb3MgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFN0cmluZyBtaW1l
VHlwZUZvckV4dGVuc2lvbiA9IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVuYW1lLnN1YnN0cmlu
ZyhleHRlbnNpb25Qb3MgKyAxKSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2lu
Rm9yTUlNRVR5cGUobWltZVR5cGVGb3JFeHRlbnNpb24pOworICAgIGlmICghcGx1Z2luKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRv
d3MgZm9yIHRoZSBtaW1lIHR5cGUKKyAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0
ZW5zaW9uLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgbWltZVR5cGUgPSBt
aW1lVHlwZUZvckV4dGVuc2lvbjsKKyAgICByZXR1cm4gcGx1Z2luOworfQorCit2b2lkIFBsdWdp
bkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4pCit7CisgICAgaWYgKCFwbHVnaW4gfHwgcGx1
Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICBtX3By
ZWZlcnJlZFBsdWdpbnMuc2V0KG1pbWVUeXBlLmxvd2VyKCksIHBsdWdpbik7Cit9CisKK2Jvb2wg
UGx1Z2luRGF0YWJhc2U6OmZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYg
ZmlsZVBhdGgpIGNvbnN0Cit7CisgICAgLy8gU2tpcCBwbHVnaW4gZmlsZXMgdGhhdCBhcmUgZGlz
YWJsZWQgYnkgZmlsZW5hbWUuCisgICAgaWYgKG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5jb250YWlu
cyhwYXRoR2V0RmlsZU5hbWUoZmlsZVBhdGgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIGZpbGVFeGlzdHMoZmlsZVBhdGgpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNl
OjpnZXREZWxldGVkUGx1Z2lucyhQbHVnaW5TZXQmIHBsdWdpbnMpIGNvbnN0Cit7CisgICAgUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBpZiAoIWZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKCgqaXQp
LT5wYXRoKCkpKQorICAgICAgICAgICAgcGx1Z2lucy5hZGQoKml0KTsKKyAgICB9Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmFkZChQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBycFBhY2th
Z2UpCit7CisgICAgQVNTRVJUX0FSRyhwcnBQYWNrYWdlLCBwcnBQYWNrYWdlKTsKKworICAgIFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gcHJwUGFja2FnZTsKKworICAgIGlmICghbV9w
bHVnaW5zLmFkZChwYWNrYWdlKS5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtX3BsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNr
YWdlKiBwYWNrYWdlKQoreworICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CisgICAgTUlNRVRvRXh0
ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9u
cygpLmVuZCgpOworICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFBsdWdp
blBhY2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1
Z2lucy5maW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJlZmVy
cmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2UpCisgICAg
ICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7CisgICAgfQor
CisgICAgbV9wbHVnaW5zLnJlbW92ZShwYWNrYWdlKTsKKyAgICBtX3BsdWdpbnNCeVBhdGgucmVt
b3ZlKHBhY2thZ2UtPnBhdGgoKSk7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmNsZWFyKCkK
K3sKKyAgICBtX3BsdWdpbnMuY2xlYXIoKTsKKyAgICBtX3BsdWdpbnNCeVBhdGguY2xlYXIoKTsK
KyAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLmNsZWFyKCk7CisgICAgbV9yZWdpc3RlcmVkTUlN
RVR5cGVzLmNsZWFyKCk7CisgICAgbV9wcmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7CisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICBtX3BlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlSXNMb2FkZWQgPSBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFBsdWdpbkRhdGFi
YXNlOjpyZW1vdmVEaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sK
KyAgICByZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLnJlbW92ZShmaWxlTmFtZSk7Cit9CisK
K2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmFkZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKQoreworICAgIHJldHVybiBtX2Rpc2FibGVkUGx1Z2luRmlsZXMuYWRkKGZpbGVO
YW1lKS5pc05ld0VudHJ5OworfQorCisjaWYgKCFPUyhXSU5ET1dTKSB8fCAhRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpKQorLy8gRm9yIFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZAorLy8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQg
aWYgd2UgY2FuIHVzZSBXZWJDb3JlIGNvbnN0cnVjdHMKKy8vIGZvciB0aGUgbG9naWMgd2Ugc2hv
dWxkIHBlcmhhcHMgbW92ZSBpdCBoZXJlIHVuZGVyIFhQX1dJTj8KKworVmVjdG9yPFN0cmluZz4g
UGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCit7CisgICAgVmVjdG9y
PFN0cmluZz4gcGF0aHM7CisKKyAgICAvLyBBZGQgcGF0aHMgc3BlY2lmaWMgdG8gZWFjaCBwbGF0
Zm9ybQorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGggPSBo
b21lRGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmcoIi8u
bW96aWxsYS9wbHVnaW5zIikpOworICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7CisK
KyAgICB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisgICAgdXNlclBsdWdp
blBhdGguYXBwZW5kKFN0cmluZygiLy5uZXRzY2FwZS9wbHVnaW5zIikpOworICAgIHBhdGhzLmFw
cGVuZCh1c2VyUGx1Z2luUGF0aCk7CisKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dz
ZXIvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9saWIvbW96aWxsYS9w
bHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9maXJlZm94L3BsdWdpbnMiKTsK
KyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvYnJvd3Nlci1wbHVnaW5zIik7CisgICAgcGF0
aHMuYXBwZW5kKCIvdXNyL2xpYi9icm93c2VyLXBsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQo
Ii91c3IvbGliL21vemlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2Nh
bC9uZXRzY2FwZS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvb3B0L21vemlsbGEvcGx1
Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL29wdC9tb3ppbGxhL2xpYi9wbHVnaW5zIik7Cisg
ICAgcGF0aHMuYXBwZW5kKCIvb3B0L25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBl
bmQoIi9vcHQvbmV0c2NhcGUvY29tbXVuaWNhdG9yL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBl
bmQoIi91c3IvbGliL25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3Iv
bGliL25ldHNjYXBlL3BsdWdpbnMtbGliYzUiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGli
L25ldHNjYXBlL3BsdWdpbnMtbGliYzYiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQv
bmV0c2NhcGUvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9tb3ppbGxh
L3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25zYnJvd3Nlci9wbHVnaW5z
Iik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L25zYnJvd3Nlci9wbHVnaW5zIik7CisK
KyAgICBTdHJpbmcgbW96SG9tZShnZXRlbnYoIk1PWklMTEFfSE9NRSIpKTsKKyAgICBtb3pIb21l
LmFwcGVuZCgiL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQobW96SG9tZSk7CisKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtb3pQYXRoczsKKyAgICBTdHJpbmcgbW96UGF0aChnZXRlbnYoIk1PWl9Q
TFVHSU5fUEFUSCIpKTsKKyAgICBtb3pQYXRoLnNwbGl0KFVDaGFyKCc6JyksIC8qIGFsbG93RW1w
dHlFbnRyaWVzICovIGZhbHNlLCBtb3pQYXRocyk7CisgICAgcGF0aHMuYXBwZW5kVmVjdG9yKG1v
elBhdGhzKTsKKyNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIFN0cmluZyB1c2VyUGx1Z2lu
UGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisgICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0
cmluZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7CisgICAgcGF0aHMuYXBwZW5kKHVz
ZXJQbHVnaW5QYXRoKTsKKyAgICBwYXRocy5hcHBlbmQoIi9MaWJyYXJ5L0ludGVybmV0IFBsdWct
SW5zIik7CisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGgg
PSBob21lRGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmco
IlxcQXBwbGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lucyIpKTsKKyAgICBwYXRocy5hcHBl
bmQodXNlclBsdWdpblBhdGgpOworI2VuZGlmCisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICBTdHJpbmcgcHJlZmVycmVkUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRo
KCk7CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3Ry
aW5nKCIvLm1vemlsbGEvcGx1Z2lucyIpKTsKKyNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQorICAg
IHByZWZlcnJlZFBhdGguYXBwZW5kKFN0cmluZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMi
KSk7CisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJp
bmcoIlxcQXBwbGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lucyIpKTsKKyNlbmRpZgorCisg
ICAgLy8gVE9ETzogV2Ugc2hvdWxkIG5vcm1hbGl6ZSB0aGUgcGF0aCBiZWZvcmUgZG9pbmcgYSBj
b21wYXJpc29uLgorICAgIHJldHVybiBwYXRoID09IHByZWZlcnJlZFBhdGg7Cit9CisKK3ZvaWQg
UGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmlu
Zz4mIHBhdGhzKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2Ug
aW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgU3RyaW5nIGZpbGVOYW1lRmlsdGVyKCIqLnNvIik7
CisjZWxzZQorICAgIFN0cmluZyBmaWxlTmFtZUZpbHRlcigiIik7CisjZW5kaWYKKworICAgIFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkaXJzRW5kID0gbV9wbHVnaW5EaXJlY3Rvcmll
cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkSXQgPSBt
X3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2luKCk7IGRJdCAhPSBkaXJzRW5kOyArK2RJdCkgeworICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBwbHVnaW5QYXRocyA9IGxpc3REaXJlY3RvcnkoKmRJdCwgZmls
ZU5hbWVGaWx0ZXIpOworICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGx1
Z2luc0VuZCA9IHBsdWdpblBhdGhzLmVuZCgpOworICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBwSXQgPSBwbHVnaW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1Z2lu
c0VuZDsgKytwSXQpIHsKKyAgICAgICAgICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJs
ZWQoKnBJdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHBhdGhz
LmFkZCgqcEl0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2VuZGlmIC8vICFPUyhXSU5ET1dT
KQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKworc3RhdGlj
IHZvaWQgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgZmls
ZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAwOwor
ICAgIHNpemVfdCBidWZmZXJDYXBhY2l0eSA9IDEwMjQ7CisgICAgYnVmZmVyLnJlc2l6ZShidWZm
ZXJDYXBhY2l0eSk7CisKKyAgICBkbyB7CisgICAgICAgIGJ1ZmZlclNpemUgKz0gcmVhZEZyb21G
aWxlKGZpbGUsIGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJTaXplLCBidWZmZXJDYXBhY2l0eSAtIGJ1
ZmZlclNpemUpOworICAgICAgICBpZiAoYnVmZmVyU2l6ZSA9PSBidWZmZXJDYXBhY2l0eSkgewor
ICAgICAgICAgICAgaWYgKGJ1ZmZlckNhcGFjaXR5IDwgbWF4aW11bVBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlU2l6ZSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlckNhcGFjaXR5ICo9IDI7
CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVhcigpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICAgIGJ1ZmZlci5zaHJpbmsoYnVmZmVy
U2l6ZSk7Cit9CisKK3N0YXRpYyBib29sIHJlYWRVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0U3Ry
aW5nLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKK3sKKyAgICBpZiAoc3RhcnQgPj0g
ZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgbGVuID0gc3RybGVuKHN0YXJ0
KTsKKyAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXJ0LCBsZW4pOworICAg
IHN0YXJ0ICs9IGxlbiArIDE7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
cmVhZFRpbWUodGltZV90JiByZXN1bHRUaW1lLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVu
ZCkKK3sKKyAgICBpZiAoc3RhcnQgKyBzaXplb2YodGltZV90KSA+PSBlbmQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBzdHJlYW0gaXMgbm90IG5lY2Vzc2FyeSBhbGlnbmVk
LgorICAgIG1lbWNweSgmcmVzdWx0VGltZSwgc3RhcnQsIHNpemVvZih0aW1lX3QpKTsKKyAgICBz
dGFydCArPSBzaXplb2YodGltZV90KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Y29uc3QgY2hhciBzY2hlbWFWZXJzaW9uID0gJzEnOworc3RhdGljIGNvbnN0IGNoYXIgcGVyc2lz
dGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZVtdID0gIlBsdWdpbk1ldGFkYXRhQ2FjaGUu
YmluIjsKKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hl
KCkKK3sKKyAgICBpZiAoIWlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkgfHwgcGVy
c2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKKyAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBh
dGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRo
KCksIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmlsZW5hbWUpOworICAgIGZpbGUgPSBv
cGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwgT3BlbkZvclJlYWQpOworCisgICAgaWYgKCFpc0hh
bmRsZVZhbGlkKGZpbGUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXJrIGNhY2hlIGFz
IGxvYWRlZCByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gSWYKKyAgICAvLyB0aGVy
ZSdzIGVycm9yIGluIHRoZSBjYWNoZSwgd2Ugd29uJ3QgdHJ5IHRvIGxvYWQgaXQgYW55bW9yZS4K
KyAgICBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQgPSB0cnVlOworCisgICAgVmVj
dG9yPGNoYXI+IGZpbGVDb250ZW50czsKKyAgICBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxl
KGZpbGUsIGZpbGVDb250ZW50cyk7CisgICAgY2xvc2VGaWxlKGZpbGUpOworCisgICAgaWYgKGZp
bGVDb250ZW50cy5zaXplKCkgPCAyIHx8IGZpbGVDb250ZW50cy5maXJzdCgpICE9IHNjaGVtYVZl
cnNpb24gfHwgZmlsZUNvbnRlbnRzLmxhc3QoKSAhPSAnXDAnKSB7CisgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IHNjaGVtYSIp
OworICAgICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNoYXIqIGJ1ZmZlclBvcyA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyAx
OworICAgIGNoYXIqIGVuZCA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyBmaWxlQ29udGVudHMuc2l6
ZSgpOworCisgICAgUGx1Z2luU2V0IGNhY2hlZFBsdWdpbnM7CisgICAgSGFzaE1hcDxTdHJpbmcs
IHRpbWVfdD4gY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXM7CisgICAgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IGNhY2hlZFBsdWdpbnNCeVBhdGg7CisKKyAgICB3aGls
ZSAoYnVmZmVyUG9zIDwgZW5kKSB7CisgICAgICAgIFN0cmluZyBwYXRoOworICAgICAgICB0aW1l
X3QgbGFzdE1vZGlmaWVkOworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIGRl
c2M7CisgICAgICAgIFN0cmluZyBtaW1lRGVzYzsKKyAgICAgICAgaWYgKCEocmVhZFVURjhTdHJp
bmcocGF0aCwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRUaW1lKGxhc3RN
b2RpZmllZCwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5n
KG5hbWUsIGJ1ZmZlclBvcywgZW5kKQorICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhk
ZXNjLCBidWZmZXJQb3MsIGVuZCkKKyAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcobWlt
ZURlc2MsIGJ1ZmZlclBvcywgZW5kKSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IGRhdGEiKTsKKyAgICAgICAg
ICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gU2tpcCBtZXRhZGF0YSB0aGF0IHBvaW50cyB0byBwbHVn
aW5zIGZyb20gZGlyZWN0b3JpZXMgdGhhdAorICAgICAgICAvLyBhcmUgbm90IHBhcnQgb2YgcGx1
Z2luIGRpcmVjdG9yeSBsaXN0IGFueW1vcmUuCisgICAgICAgIFN0cmluZyBwbHVnaW5EaXJlY3Rv
cnlOYW1lID0gZGlyZWN0b3J5TmFtZShwYXRoKTsKKyAgICAgICAgaWYgKG1fcGx1Z2luRGlyZWN0
b3JpZXMuZmluZChwbHVnaW5EaXJlY3RvcnlOYW1lKSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2Ug
PSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKHBhdGgsIGxhc3RNb2RpZmll
ZCwgbmFtZSwgZGVzYywgbWltZURlc2MpOworCisgICAgICAgIGlmIChwYWNrYWdlICYmIGNhY2hl
ZFBsdWdpbnMuYWRkKHBhY2thZ2UpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIGNhY2hlZFBs
dWdpblBhdGhzV2l0aFRpbWVzLmFkZChwYWNrYWdlLT5wYXRoKCksIHBhY2thZ2UtPmxhc3RNb2Rp
ZmllZCgpKTsKKyAgICAgICAgICAgIGNhY2hlZFBsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBh
dGgoKSwgcGFja2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3BsdWdpbnMuc3dhcChj
YWNoZWRQbHVnaW5zKTsKKyAgICBtX3BsdWdpbnNCeVBhdGguc3dhcChjYWNoZWRQbHVnaW5zQnlQ
YXRoKTsKKyAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLnN3YXAoY2FjaGVkUGx1Z2luUGF0aHNX
aXRoVGltZXMpOworfQorCitzdGF0aWMgYm9vbCB3cml0ZVVURjhTdHJpbmcoUGxhdGZvcm1GaWxl
SGFuZGxlIGZpbGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIENTdHJpbmcgdXRmOFN0
cmluZyA9IHN0cmluZy51dGY4KCk7CisgICAgaW50IGxlbmd0aCA9IHV0ZjhTdHJpbmcubGVuZ3Ro
KCkgKyAxOworICAgIHJldHVybiB3cml0ZVRvRmlsZShmaWxlLCB1dGY4U3RyaW5nLmRhdGEoKSwg
bGVuZ3RoKSA9PSBsZW5ndGg7Cit9CisKK3N0YXRpYyBib29sIHdyaXRlVGltZShQbGF0Zm9ybUZp
bGVIYW5kbGUgZmlsZSwgY29uc3QgdGltZV90JiB0aW1lKQoreworICAgIHJldHVybiB3cml0ZVRv
RmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmdGltZSksIHNpemVvZih0
aW1lX3QpKSA9PSBzaXplb2YodGltZV90KTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6dXBk
YXRlUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKQoreworICAgIGlmICghaXNQZXJzaXN0ZW50TWV0
YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VBbGxEaXJlY3RvcmllcyhwZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSk7CisgICAgU3RyaW5nIGFic29sdXRlQ2FjaGVQYXRoID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLCBw
ZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lKTsKKyAgICBkZWxldGVGaWxlKGFi
c29sdXRlQ2FjaGVQYXRoKTsKKworICAgIGlmIChtX3BsdWdpbnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKKyAgICBmaWxlID0gb3Bl
bkZpbGUoYWJzb2x1dGVDYWNoZVBhdGgsIE9wZW5Gb3JXcml0ZSk7CisKKyAgICBpZiAoIWlzSGFu
ZGxlVmFsaWQoZmlsZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBwbHVn
aW4gbWV0YWRhdGEgY2FjaGUgZm9yIHNhdmluZyIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2hhciBsb2NhbFNjaGVtYVZlcnNpb24gPSBzY2hlbWFWZXJzaW9uOworICAgIGlmICh3
cml0ZVRvRmlsZShmaWxlLCAmbG9jYWxTY2hlbWFWZXJzaW9uLCAxKSAhPSAxKSB7CisgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBtZXRhZGF0YSBjYWNoZSBzY2hlbWEi
KTsKKyAgICAgICAgY2xvc2VGaWxlKGZpbGUpOworICAgICAgICBkZWxldGVGaWxlKGFic29sdXRl
Q2FjaGVQYXRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgaWYgKCEod3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5wYXRoKCkpCisgICAg
ICAgICAgICAgICYmIHdyaXRlVGltZShmaWxlLCAoKml0KS0+bGFzdE1vZGlmaWVkKCkpCisgICAg
ICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+bmFtZSgpKQorICAgICAg
ICAgICAgICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPmRlc2NyaXB0aW9uKCkpCisg
ICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+ZnVsbE1JTUVEZXNj
cmlwdGlvbigpKSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBs
dWdpbiBtZXRhZGF0YSB0byBjYWNoZSIpOworICAgICAgICAgICAgY2xvc2VGaWxlKGZpbGUpOwor
ICAgICAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbG9zZUZpbGUoZmlsZSk7Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkKK3sK
KyAgICByZXR1cm4gZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOworfQor
Cit2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQo
Ym9vbCBpc0VuYWJsZWQpCit7CisgICAgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNF
bmFibGVkID0gaXNFbmFibGVkOworfQorCitTdHJpbmcgUGx1Z2luRGF0YWJhc2U6OnBlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlUGF0aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBlcnNpc3RlbnRQ
bHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQ
ZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZVBhdGgpCit7CisgICAgV2ViQ29yZTo6cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2Fj
aGVQYXRoKCkgPSBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGg7Cit9CisjZW5kaWYKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmM0
OGVjZGZmNmNmMjI0MzU1OTRmOGFlODUyMzAxYTYyNjNjZjg2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCkBAIC0wLDAgKzEsMTE4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsdWdpbkRhdGFiYXNlX2gKKyNkZWZpbmUgUGx1Z2lu
RGF0YWJhc2VfaAorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xh
c3MgSW50U2l6ZTsKKyAgICBjbGFzcyBVUkw7CisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VDbGll
bnQ7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQ
dHI8UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2thZ2VIYXNoLCBQbHVnaW5QYWNrYWdlSGFzaFRy
YWl0cz4gUGx1Z2luU2V0OworCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2UgeworICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQbHVnaW5EYXRhYmFzZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luRGF0YWJhc2UoKTsKKworICAgICAgICAv
LyBUaGUgZmlyc3QgY2FsbCB0byBpbnN0YWxsZWRQbHVnaW5zIGNyZWF0ZXMgdGhlIHBsdWdpbiBk
YXRhYmFzZQorICAgICAgICAvLyBhbmQgYnkgZGVmYXVsdCBwb3B1bGF0ZXMgaXQgd2l0aCB0aGUg
cGx1Z2lucyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4KKyAgICAgICAgLy8gRm9yIHRlc3Rpbmcg
cHVycG9zZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG5vdCBwb3B1bGF0ZSB0aGUgZGF0YWJhc2UKKyAg
ICAgICAgLy8gYXV0b21hdGljYWxseSwgYXMgdGhlIHBsdWdpbnMgbWlnaHQgYWZmZWN0IHRoZSBE
UlQgcmVzdWx0cyBieQorICAgICAgICAvLyB3cml0aW5nIHRvIGEuby4gc3RkZXJyLgorICAgICAg
ICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIGluc3RhbGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSA9
IHRydWUpOworCisgICAgICAgIGJvb2wgcmVmcmVzaCgpOworICAgICAgICB2b2lkIGNsZWFyKCk7
CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAg
ICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAg
ICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworCisgICAg
ICAgIHN0YXRpYyBib29sIGlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5KTsKKyAgICAgICAgc3RhdGljIGludCBwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNv
bnN0IHZvaWQqLCBjb25zdCB2b2lkKik7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBs
dWdpbihjb25zdCBVUkwmLCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2Fn
ZSogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZv
aWQgc2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
UGx1Z2luUGFja2FnZSogcGx1Z2luKTsKKworICAgICAgICB2b2lkIHNldFBsdWdpbkRpcmVjdG9y
aWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKKyAgICAgICAgeworICAgICAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMgPSBkaXJlY3Rv
cmllczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxl
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgICAgICBib29sIGFkZERpc2FibGVkUGx1Z2lu
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IGRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBw
bHVnaW5EaXJlY3RvcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luRGlyZWN0b3JpZXM7IH0K
KworICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRl
bnNpb24pIGNvbnN0OworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUp
CisgICAgICAgIHN0YXRpYyBib29sIGlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCk7
CisgICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChi
b29sIGlzRW5hYmxlZCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcGVyc2lzdGVudE1ldGFkYXRh
Q2FjaGVQYXRoKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCk7CisjZW5k
aWYKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9y
aWVzKEhhc2hTZXQ8U3RyaW5nPiYpIGNvbnN0OworICAgICAgICB2b2lkIGdldERlbGV0ZWRQbHVn
aW5zKFBsdWdpblNldCYpIGNvbnN0OworICAgICAgICBib29sIGZpbGVFeGlzdHNBbmRJc05vdERp
c2FibGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgICAgIC8vIFJldHVybnMgd2hldGhl
ciB0aGUgcGx1Z2luIHdhcyBhY3R1YWxseSBhZGRlZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVk
IGlmIGl0J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhpc3RpbmcgcGx1Z2luKS4KKyAgICAgICAgYm9v
bCBhZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPik7CisgICAgICAgIHZvaWQgcmVtb3ZlKFBs
dWdpblBhY2thZ2UqKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hF
KQorICAgICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworICAgICAgICB2
b2lkIHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKworICAgICAgICBI
YXNoU2V0PFN0cmluZz4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzOworICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBtX3BsdWdpbkRpcmVjdG9yaWVzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdp
c3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAgICAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOwor
ICAgICAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOwor
ICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJy
ZWRQbHVnaW5zOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisg
ICAgICAgIGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkOworI2VuZGlmCisg
ICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwIGIvU291cmNlL1dl
YktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RjNmNm
MzQ5OWZjMjlkZTZhYzVhZWFkYjM5MjQwNDI3MWFhMGUxOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwCkBAIC0wLDAgKzEs
Mzg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlIDx3dGYvV2luZG93c0V4dHJhcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5QYXRo
c0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpCit7Cisg
ICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXks
IEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywg
JmtleSk7CisKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVy
bjsKKworICAgIHdjaGFyX3QgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsK
KworICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsK
KyAgICAgICAgRFdPUkQgbmFtZUxlbiA9IFdURl9BUlJBWV9MRU5HVEgobmFtZSk7CisgICAgICAg
IHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwg
Jmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgV0NIQVIgcGF0aFN0cltfTUFYX1BBVEhdOwor
ICAgICAgICBEV09SRCBwYXRoU3RyU2l6ZSA9IHNpemVvZihwYXRoU3RyKTsKKyAgICAgICAgRFdP
UkQgdHlwZTsKKworICAgICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKGtleSwgbmFtZSwg
TCJQYXRoIiwgJnR5cGUsIHBhdGhTdHIsICZwYXRoU3RyU2l6ZSk7CisgICAgICAgIGlmIChyZXN1
bHQgIT0gRVJST1JfU1VDQ0VTUyB8fCB0eXBlICE9IFJFR19TWikKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIHBhdGhzLmFkZChTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBz
aXplb2YoV0NIQVIpIC0gMSkpOworICAgIH0KKworICAgIFJlZ0Nsb3NlS2V5KGtleSk7Cit9CisK
K3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0
PFN0cmluZz4mIHBhdGhzKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBh
IGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFt
ZXM7CisKKyAgICBIQU5ETEUgaEZpbmQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICBXSU4z
Ml9GSU5EX0RBVEFXIGZpbmRGaWxlRGF0YTsKKworICAgIFN0cmluZyBvbGRXTVBQbHVnaW5QYXRo
OworICAgIFN0cmluZyBuZXdXTVBQbHVnaW5QYXRoOworCisgICAgVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7CisgICAgZm9yIChW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICppdCAr
ICJcXCoiOworCisgICAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5jaGFyYWN0
ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgJmZpbmRGaWxlRGF0YSk7CisKKyAgICAg
ICAgaWYgKGhGaW5kID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGZpbmRGaWxlRGF0YS5kd0ZpbGVB
dHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBTdHJpbmcoZmluZEZpbGVE
YXRhLmNGaWxlTmFtZSwgd2NzbGVuKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUpKTsKKyAgICAgICAg
ICAgIGlmICgoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoIm5wIiwgZmFsc2UpIHx8ICFmaWxlbmFtZS5l
bmRzV2l0aCgiZGxsIiwgZmFsc2UpKSAmJgorICAgICAgICAgICAgICAgICghZXF1YWxJZ25vcmlu
Z0Nhc2UoZmlsZW5hbWUsICJQbHVnaW4uZGxsIikgfHwgIWl0LT5lbmRzV2l0aCgiU2hvY2t3YXZl
IDEwIiwgZmFsc2UpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
U3RyaW5nIGZ1bGxQYXRoID0gKml0ICsgIlxcIiArIGZpbGVuYW1lOworICAgICAgICAgICAgaWYg
KCF1bmlxdWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRoKS5pc05ld0VudHJ5KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBwYXRocy5hZGQoZnVsbFBhdGgpOworCisgICAg
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkK
KyAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7CisgICAgICAgICAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21wLmRsbCIpKQor
ICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdpblBhdGggPSBmdWxsUGF0aDsKKworICAgICAgICB9
IHdoaWxlIChGaW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVEYXRhKSAhPSAwKTsKKworICAg
ICAgICBGaW5kQ2xvc2UoaEZpbmQpOworICAgIH0KKworICAgIGFkZFBsdWdpblBhdGhzRnJvbVJl
Z2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElORSwgcGF0aHMpOworICAgIGFkZFBsdWdpblBhdGhzRnJv
bVJlZ2lzdHJ5KEhLRVlfQ1VSUkVOVF9VU0VSLCBwYXRocyk7CisKKyAgICAvLyBJZiBib3RoIHRo
ZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwg
CisgICAgLy8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2lu
ZyB0aGUgb2xkIG9uZS4KKyAgICBpZiAoIW9sZFdNUFBsdWdpblBhdGguaXNFbXB0eSgpICYmICFu
ZXdXTVBQbHVnaW5QYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcGF0aHMucmVtb3ZlKG9sZFdNUFBs
dWdpblBhdGgpOworfQorCitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0
cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAgVmVjdG9yPGludD4gdmVy
c2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7
CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgewor
ICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxl
bmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10g
PT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1
YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZl
cnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisgICAgICAgIHN0YXJ0UG9zID0gZW5k
UG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1
cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxp
bmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25z
dCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+
IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYg
KHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0
aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBm
YWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemls
bGFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCit7CisgICAg
Ly8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0
cnkKKyAgICBIS0VZIGtleTsKKyAgICBMT05HIHJlc3VsdDsKKyAgICAKKyAgICByZXN1bHQgPSBS
ZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIp
LCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7
CisgICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVk
OworCisgICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgICAgIGZvciAoaW50IGkgPSAw
OzsgaSsrKSB7CisgICAgICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6
ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBu
YW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsg
IlxcRXh0ZW5zaW9ucyI7CisgICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7CisKKyAgICAg
ICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09w
ZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkuZGF0YSgpLCAwLCBLRVlfUkVBRCwgJmV4dGVuc2lvbnNLZXkpOworCisgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0
IHRoZSBwbHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNEaXJl
Y3RvcnlTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgICAgICAgICBEV09SRCBwbHVnaW5zRGlyZWN0
b3J5U2l6ZSA9IHNpemVvZihwbHVnaW5zRGlyZWN0b3J5U3RyKTsKKyAgICAgICAgICAgICAgICBE
V09SRCB0eXBlOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4
dGVuc2lvbnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNE
aXJlY3RvcnlTdHIsICZwbHVnaW5zRGlyZWN0b3J5U2l6ZSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgICAg
ICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcocGx1Z2luc0RpcmVjdG9yeVN0ciwg
cGx1Z2luc0RpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOworCisgICAgICAgICAg
ICAgICAgUmVnQ2xvc2VLZXkoZXh0ZW5zaW9uc0tleSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7CisgICAgfQorfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KFZlY3Rv
cjxTdHJpbmc+JiBkaXJlY3RvcmllcykKK3sKKyAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBs
dWdpbiBpcyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55
IEZpcmVmb3ggaW5zdGFsbHMKKyAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRI
ICsgMV07CisgICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1l
bnRTdHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2lu
RGlyZWN0b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVjdG9yeVN0cikpOworCisg
ICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0g
V1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKQorICAgICAgICBkaXJlY3Rvcmll
cy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAt
IDEpKTsKKworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U3RyW19NQVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNp
emVvZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBn
ZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgTCJTb2Z0d2FyZVxcTWljcm9zb2Z0
XFxNZWRpYVBsYXllciIsIEwiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIsICZ0eXBlLCAmaW5zdGFs
bGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7CisKKyAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgIGRp
cmVjdG9yaWVzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxs
YXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYg
ZGlyZWN0b3JpZXMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdP
cGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9i
YXQgUmVhZGVyIiksIDAsIEtFWV9SRUFELCAma2V5KTsKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9S
X1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICBG
SUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICBWZWN0b3I8aW50PiBsYXRlc3RBY3JvYmF0VmVy
c2lvbjsKKyAgICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmc7CisKKyAgICAvLyBF
bnVtZXJhdGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERX
T1JEIG5hbWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAgICByZXN1
bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0
TW9kaWZpZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9iYXRWZXJzaW9uID0gcGFy
c2VWZXJzaW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7CisgICAgICAgIGlmIChjb21w
YXJlVmVyc2lvbnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRWZXJzaW9uKSkgeworICAg
ICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVyc2lvbjsKKyAgICAgICAg
ICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZy5p
c051bGwoKSkgeworICAgICAgICBEV09SRCB0eXBlOworICAgICAgICBXQ0hBUiBhY3JvYmF0SW5z
dGFsbFBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgYWNyb2JhdEluc3RhbGxQYXRo
U2l6ZSA9IHNpemVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOworCisgICAgICAgIFN0cmluZyBh
Y3JvYmF0UGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVyXFwi
ICsgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxsUGF0aCI7CisgICAgICAg
IHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1
Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgJnR5
cGUsIGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9iYXRJbnN0YWxsUGF0aFNpemUpOworCisg
ICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAgU3RyaW5n
IGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkgPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBh
Y3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7
CisgICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoYWNyb2JhdFBsdWdpbkRpcmVjdG9yeSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgYWRkSmF2YVBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0
b3JpZXMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5
RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcSmF2YVNvZnRcXEphdmEgUGx1
Zy1pbiIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUND
RVNTKQorICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklMRVRJ
TUUgbGFzdE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0SmF2YVZlcnNpb247Cisg
ICAgU3RyaW5nIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51bWVyYXRlIHN1
YmtleXMKKyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVu
ID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51
bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsK
KworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBWZWN0b3I8aW50PiBqYXZhVmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmlu
ZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGph
dmFWZXJzaW9uLCBsYXRlc3RKYXZhVmVyc2lvbikpIHsKKyAgICAgICAgICAgIGxhdGVzdEphdmFW
ZXJzaW9uID0gamF2YVZlcnNpb247CisgICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lvblN0cmlu
ZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh
bGF0ZXN0SmF2YVZlcnNpb25TdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIERXT1JEIHR5cGU7
CisgICAgICAgIFdDSEFSIGphdmFJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOworICAgICAgICBE
V09SRCBqYXZhSW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGphdmFJbnN0YWxsUGF0aFN0cik7Cisg
ICAgICAgIERXT1JEIHVzZU5ld1BsdWdpblZhbHVlOworICAgICAgICBEV09SRCB1c2VOZXdQbHVn
aW5TaXplOworCisgICAgICAgIFN0cmluZyBqYXZhUGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxc
SmF2YVNvZnRcXEphdmEgUGx1Zy1pblxcIiArIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nOworICAg
ICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgamF2YVBs
dWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEwiVXNl
TmV3SmF2YVBsdWdpbiIsICZ0eXBlLCAmdXNlTmV3UGx1Z2luVmFsdWUsICZ1c2VOZXdQbHVnaW5T
aXplKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdXNlTmV3UGx1
Z2luVmFsdWUgPT0gMSkgeworICAgICAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShI
S0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpLCBMIkphdmFIb21lIiwgJnR5cGUsIGphdmFJbnN0YWxsUGF0aFN0
ciwgJmphdmFJbnN0YWxsUGF0aFNpemUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJP
Ul9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGphdmFQbHVnaW5EaXJlY3Rvcnkg
PSBTdHJpbmcoamF2YUluc3RhbGxQYXRoU3RyLCBqYXZhSW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9m
KFdDSEFSKSAtIDEpICsgIlxcYmluXFxuZXdfcGx1Z2luIjsKKyAgICAgICAgICAgICAgICBkaXJl
Y3Rvcmllcy5hcHBlbmQoamF2YVBsdWdpbkRpcmVjdG9yeSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMgaW5saW5l
IFN0cmluZyBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCkKK3sKKyAgICBXQ0hBUiBtb2R1bGVGaWxl
TmFtZVN0cltfTUFYX1BBVEhdOworICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc0RpcmVjdG9yeTsK
KyAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSBmYWxzZTsKKworICAgIGlm
ICghY2FjaGVkUGx1Z2luRGlyZWN0b3J5KSB7CisgICAgICAgIGNhY2hlZFBsdWdpbkRpcmVjdG9y
eSA9IHRydWU7CisKKyAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmls
ZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7CisKKyAgICAgICAgaWYgKCFt
b2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgpCisgICAg
ICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9k
dWxlRmlsZU5hbWVTdHIpKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIHBsdWdp
bnNEaXJlY3RvcnkgPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIpICsgIlxcUGx1Z2lucyI7Cisg
ICAgfQorZXhpdDoKKyAgICByZXR1cm4gcGx1Z2luc0RpcmVjdG9yeTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYg
ZGlyZWN0b3JpZXMpCit7CisgICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsK
KworICAgIGlmICghR2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgV1RGX0FS
UkFZX0xFTkdUSChzeXN0ZW1EaXJlY3RvcnlTdHIpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V0NIQVIgbWFjcm9tZWRpYURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBQYXRoQ29tYmlu
ZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3Jv
bWVkXFxGbGFzaCIpKTsKKyAgICBkaXJlY3Rvcmllcy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9y
eVN0cik7CisKKyAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1E
aXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7CisgICAgZGlyZWN0
b3JpZXMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOworfQorCitWZWN0b3I8U3RyaW5n
PiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKK3sKKyAgICBWZWN0
b3I8U3RyaW5nPiBkaXJlY3RvcmllczsKKyAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJp
UGx1Z2luc0RpcmVjdG9yeSgpOworCisgICAgaWYgKCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkpCisg
ICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChvdXJEaXJlY3RvcnkpOworICAgIGFkZEFkb2JlQWNy
b2JhdFBsdWdpbkRpcmVjdG9yeShkaXJlY3Rvcmllcyk7CisgICAgYWRkTW96aWxsYVBsdWdpbkRp
cmVjdG9yaWVzKGRpcmVjdG9yaWVzKTsKKyAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5E
aXJlY3RvcnkoZGlyZWN0b3JpZXMpOworICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmll
cyhkaXJlY3Rvcmllcyk7CisKKyAgICByZXR1cm4gZGlyZWN0b3JpZXM7Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGly
ZWN0b3J5KQoreworICAgIFN0cmluZyBvdXJEaXJlY3RvcnkgPSBzYWZhcmlQbHVnaW5zRGlyZWN0
b3J5KCk7CisKKyAgICBpZiAoIW91ckRpcmVjdG9yeS5pc051bGwoKSAmJiAhZGlyZWN0b3J5Lmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gb3VyRGlyZWN0b3J5ID09IGRpcmVjdG9yeTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5EZWJ1Zy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRl
YnVnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42NmQyM2FlNjcxMzhhY2FiYzY1YjRlMzAwY2YyY2UxNzk4MTQw
NTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5E
ZWJ1Zy5jcHAKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworI2lmICFMT0dfRElTQUJMRUQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZXJyb3JTdHJpbmdzW10gPSB7CisgICAgIk5vIGVycm9ycyBvY2N1
cnJlZC4iLCAvKiBOUEVSUl9OT19FUlJPUiAqLworICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmlj
IGVycm9yIGNvZGUgb2NjdXJyZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLworICAgICJJ
bnZhbGlkIGluc3RhbmNlIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElE
X0lOU1RBTkNFX0VSUk9SICovCisgICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBF
UlJfSU5WQUxJRF9GVU5DVEFCTEVfRVJST1IgKi8KKyAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZh
aWxlZC4iLCAvKiBOUEVSUl9NT0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KKyAgICAiTWVtb3J5
IGFsbG9jYXRpb24gZmFpbGVkLiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KKyAg
ICAiUGx1Zy1pbiBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5f
RVJST1IgKi8KKyAgICAiUGx1Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8q
IE5QRVJSX0lOVkFMSURfUExVR0lOX0RJUl9FUlJPUiAqLworICAgICJWZXJzaW9ucyBvZiBwbHVn
LWluIGFuZCBDb21tdW5pY2F0b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJM
RV9WRVJTSU9OX0VSUk9SICovCisgICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwg
LyogTlBFUlJfSU5WQUxJRF9QQVJBTSAqLworICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIs
IC8qIE5QRVJSX0lOVkFMSURfVVJMICovCisgICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIs
IC8qIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EICovCisgICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRh
LiIsIC8qIE5QRVJSX05PX0RBVEEgKi8KKyAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIs
IC8qIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FCTEUgKi8KKyAgICAiVW5rbm93biBlcnJvciBjb2Rl
IgorfTsKKworI2lmZGVmIFhQX01BQ09TWAorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRyYXdp
bmdNb2RlbHNbXSA9IHsKKyAgICAiTlBEcmF3aW5nTW9kZWxRdWlja0RyYXciLAorICAgICJOUERy
YXdpbmdNb2RlbENvcmVHcmFwaGljcyIsCisgICAgIk5QRHJhd2luZ01vZGVsT3BlbkdMIiwKKyAg
ICAiTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGV2ZW50TW9kZWxzW10gPSB7CisgICAgIk5QRXZlbnRNb2RlbENhcmJvbiIsCisgICAg
Ik5QRXZlbnRNb2RlbENvY29hIgorfTsKKyNlbmRpZiAvL1hQX01BQ09TWAorCitjb25zdCBjaGFy
KiBwcmV0dHlOYW1lRm9yTlBFcnJvcihOUEVycm9yIGVycm9yKQoreworICAgIHJldHVybiBlcnJv
clN0cmluZ3NbZXJyb3JdOworfQorCisjaWZkZWYgWFBfTUFDT1NYCitjb25zdCBjaGFyKiBwcmV0
dHlOYW1lRm9yRHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCkKK3sKKyAg
ICByZXR1cm4gZHJhd2luZ01vZGVsc1tkcmF3aW5nTW9kZWxdOworfQorCitjb25zdCBjaGFyKiBw
cmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCkKK3sKKyAgICBy
ZXR1cm4gZXZlbnRNb2RlbHNbZXZlbnRNb2RlbF07Cit9CisjZW5kaWYgLy9YUF9NQUNPU1gKKwor
Q1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpCit7
CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVnhEaXNwbGF5OiByZXR1cm4g
Ik5QTlZ4RGlzcGxheSI7CisgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiByZXR1cm4gIk5QTlZ4
dEFwcENvbnRleHQiOworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiByZXR1cm4gIk5QTlZu
ZXRzY2FwZVdpbmRvdyI7CisgICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOiByZXR1
cm4gIk5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2wiOworICAgIGNhc2UgTlBOVmFzZEVuYWJsZWRC
b29sOiByZXR1cm4gIk5QTlZhc2RFbmFibGVkQm9vbCI7CisgICAgY2FzZSBOUE5WaXNPZmZsaW5l
Qm9vbDogcmV0dXJuICJOUE5WaXNPZmZsaW5lQm9vbCI7CisKKyAgICBjYXNlIE5QTlZzZXJ2aWNl
TWFuYWdlcjogcmV0dXJuICJOUE5Wc2VydmljZU1hbmFnZXIgKG5vdCBzdXBwb3J0ZWQpIjsKKyAg
ICBjYXNlIE5QTlZET01FbGVtZW50OiByZXR1cm4gIk5QTlZET01FbGVtZW50IChub3Qgc3VwcG9y
dGVkKSI7CisgICAgY2FzZSBOUE5WRE9NV2luZG93OiByZXR1cm4gIk5QTlZET01XaW5kb3cgKG5v
dCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QTlZUb29sa2l0OiByZXR1cm4gIk5QTlZUb29sa2l0
IChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiByZXR1
cm4gIk5QTlZTdXBwb3J0c1hFbWJlZEJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKKworICAgIGNhc2Ug
TlBOVldpbmRvd05QT2JqZWN0OiByZXR1cm4gIk5QTlZXaW5kb3dOUE9iamVjdCI7CisgICAgY2Fz
ZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiByZXR1cm4gIk5QTlZQbHVnaW5FbGVtZW50TlBP
YmplY3QiOworICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczogcmV0dXJuICJOUE5WU3Vw
cG9ydHNXaW5kb3dsZXNzIjsKKyAgICBjYXNlIE5QTlZwcml2YXRlTW9kZUJvb2w6IHJldHVybiAi
TlBOVnByaXZhdGVNb2RlQm9vbCI7CisKKyNpZmRlZiBYUF9NQUNPU1gKKyAgICBjYXNlIE5QTlZw
bHVnaW5EcmF3aW5nTW9kZWw6IHJldHVybiAiTlBOVnBsdWdpbkRyYXdpbmdNb2RlbCI7CisjaWZu
ZGVmIE5QX05PX1FVSUNLRFJBVworICAgIGNhc2UgTlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbDog
cmV0dXJuICJOUE5Wc3VwcG9ydHNRdWlja0RyYXdCb29sIjsKKyNlbmRpZgorICAgIGNhc2UgTlBO
VnN1cHBvcnRzQ29yZUdyYXBoaWNzQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb3JlR3JhcGhp
Y3NCb29sIjsKKyAgICBjYXNlIE5QTlZzdXBwb3J0c09wZW5HTEJvb2w6IHJldHVybiAiTlBOVnN1
cHBvcnRzT3BlbkdMQm9vbCI7CisgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9v
bDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbCI7CisjaWZuZGVmIE5QX05P
X0NBUkJPTgorICAgIGNhc2UgTlBOVnN1cHBvcnRzQ2FyYm9uQm9vbDogcmV0dXJuICJOUE5Wc3Vw
cG9ydHNDYXJib25Cb29sIjsKKyNlbmRpZgorICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29jb2FCb29s
OiByZXR1cm4gIk5QTlZzdXBwb3J0c0NvY29hQm9vbCI7CisjZW5kaWYKKworICAgIGRlZmF1bHQ6
IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7CisgICAgfQorfQorCitDU3RyaW5nIHByZXR0eU5h
bWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7Cisg
ICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBQVnBsdWdpbk5hbWVTdHJpbmc6IHJl
dHVybiAiTlBQVnBsdWdpbk5hbWVTdHJpbmciOworICAgIGNhc2UgTlBQVnBsdWdpbkRlc2NyaXB0
aW9uU3RyaW5nOiByZXR1cm4gIk5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZyI7CisgICAgY2Fz
ZSBOUFBWcGx1Z2luV2luZG93Qm9vbDogcmV0dXJuICJOUFBWcGx1Z2luV2luZG93Qm9vbCI7Cisg
ICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5UcmFu
c3BhcmVudEJvb2wiOworCisgICAgY2FzZSBOUFBWamF2YUNsYXNzOiByZXR1cm4gIk5QUFZqYXZh
Q2xhc3MgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dTaXplOiBy
ZXR1cm4gIk5QUFZwbHVnaW5XaW5kb3dTaXplIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBO
UFBWcGx1Z2luVGltZXJJbnRlcnZhbDogcmV0dXJuICJOUFBWcGx1Z2luVGltZXJJbnRlcnZhbCAo
bm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVJbnN0YW5jZTog
cmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlIChub3Qgc3VwcG9ydGVkKSI7Cisg
ICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZUlJRDogcmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0
YWJsZUlJRCAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVmphdmFzY3JpcHRQdXNoQ2Fs
bGVyQm9vbDogcmV0dXJuICJOUFBWamF2YXNjcmlwdFB1c2hDYWxsZXJCb29sIChub3Qgc3VwcG9y
dGVkKSI7CisgICAgY2FzZSBOUFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeTogcmV0dXJuICJO
UFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeSAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2Ug
TlBQVnBsdWdpbk5lZWRzWEVtYmVkOiByZXR1cm4gIk5QUFZwbHVnaW5OZWVkc1hFbWJlZCAobm90
IHN1cHBvcnRlZCkiOworCisgICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0OiBy
ZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QiOworCisgICAgY2FzZSBOUFBWZm9y
bVZhbHVlOiByZXR1cm4gIk5QUFZmb3JtVmFsdWUgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNl
IE5QUFZwbHVnaW5VcmxSZXF1ZXN0c0Rpc3BsYXllZEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblVy
bFJlcXVlc3RzRGlzcGxheWVkQm9vbCAobm90IHN1cHBvcnRlZCkiOworCisgICAgY2FzZSBOUFBW
cGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtczogcmV0dXJuICJOUFBWcGx1Z2luV2FudHNBbGxO
ZXR3b3JrU3RyZWFtcyI7CisgICAgY2FzZSBOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtOiByZXR1
cm4gIk5QUFZwbHVnaW5DYW5jZWxTcmNTdHJlYW0iOworCisjaWZkZWYgWFBfTUFDT1NYCisgICAg
Y2FzZSBOUFBWcGx1Z2luRHJhd2luZ01vZGVsOiB7CisgICAgICAgIFN0cmluZyByZXN1bHQoIk5Q
UFZwbHVnaW5EcmF3aW5nTW9kZWwsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKHByZXR0eU5h
bWVGb3JEcmF3aW5nTW9kZWwoTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVlKSkpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5sYXRpbjEoKTsKKyAgICB9CisgICAgY2FzZSBOUFBWcGx1Z2lu
RXZlbnRNb2RlbDogeworICAgICAgICBTdHJpbmcgcmVzdWx0KCJOUFBWcGx1Z2luRXZlbnRNb2Rl
bCwgIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocHJldHR5TmFtZUZvckV2ZW50TW9kZWwoTlBF
dmVudE1vZGVsKHVpbnRwdHJfdCh2YWx1ZSkpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQubGF0
aW4xKCk7CisgICAgfQorICAgIGNhc2UgTlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllcjogcmV0
dXJuICJOUFBWcGx1Z2luQ29yZUFuaW1hdGlvbkxheWVyIjsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyNlbmRpZgorCisgICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlh
YmxlIjsKKyAgICB9Cit9CisKK0NTdHJpbmcgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5Q
TlVSTFZhcmlhYmxlIHZhcmlhYmxlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBj
YXNlIE5QTlVSTFZDb29raWU6IHJldHVybiAiTlBOVVJMVkNvb2tpZSI7CisgICAgY2FzZSBOUE5V
UkxWUHJveHk6IHJldHVybiAiTlBOVVJMVlByb3h5IjsKKyAgICBkZWZhdWx0OiByZXR1cm4gIlVu
a25vd24gdmFyaWFibGUiOworICAgIH0KK30KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdp
bnMvUGx1Z2luRGVidWcuaCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGVidWcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42Njc0ODVlOTA5MjhhMDVmY2JkYTgyOTQwYTczOTY3MDk4NzFkYjYxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5o
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luRGVidWdfaAorI2RlZmluZSBQbHVnaW5EZWJ1
Z19oCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFs
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjZGVmaW5lIExPR19OUEVSUk9S
KGVycikgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lucywgIiVz
XG4iLCBwcmV0dHlOYW1lRm9yTlBFcnJvcihlcnIpKQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9F
UlJPUigpIExPR19WRVJCT1NFKFBsdWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVt
cyB3aXRoIG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxl
bXMuXG4iKQorCisjaWYgIUxPR19ESVNBQkxFRAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Nv
bnN0IGNoYXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOworCitDU3RyaW5n
IHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7CitDU3RyaW5n
IHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUpOworQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUg
dmFyaWFibGUpOworCisjaWZkZWYgWFBfTUFDT1NYCitjb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9y
RHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCk7Citjb25zdCBjaGFyKiBw
cmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCk7CisjZW5kaWYK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRAorCisj
ZW5kaWYgLy8gUGx1Z2luRGVidWdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUzYzMxNWMy
MDE4NDM5NGYzYjQwNjRhM2Y1NDQ3NTczZWQyY2YwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKQEAgLTAs
MCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUg
PHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU2V0IGEgdGltZXIg
dG8gbWFrZSBzdXJlIHdlIHByb2Nlc3MgYW55IHF1ZXVlZCBtZXNzYWdlcyBhdCBsZWFzdCBldmVy
eSAxNm1zLgorLy8gVGhpcyB2YWx1ZSBhbGxvd3MgRmxhc2ggNjAgbWVzc2FnZXMvc2Vjb25kLCB3
aGljaCBzaG91bGQgYmUgZW5vdWdoIGZvciB2aWRlbworLy8gcGxheWJhY2ssIGFuZCBhbHNvIGdl
dHMgdXMgb3ZlciB0aGUgbGltaXQgZm9yIGtpY2tpbmcgaW50byBoaWdoLXJlc29sdXRpb24KKy8v
IHRpbWVyIG1vZGUgKHNlZSBTaGFyZWRUaW1lcldpbi5jcHApLgorc3RhdGljIGNvbnN0IGRvdWJs
ZSBNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwgPSAwLjAxNjsKKworLy8gRHVyaW5nIGEgY29u
dGludW91cyBzdHJlYW0gb2YgbWVzc2FnZXMsIHByb2Nlc3Mgb25lIGV2ZXJ5IDVtcy4KK3N0YXRp
YyBjb25zdCBkb3VibGUgTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCA9IDAuMDA1Owor
CitQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBs
dWdpblZpZXcqIHBsdWdpblZpZXcpCisgICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAg
ICAsIG1fYmFjaygwKQorICAgICwgbV9mcm9udCgwKQorICAgICwgbV9tZXNzYWdlVGhyb3R0bGVU
aW1lcigqdGhpcywgJlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46Om1lc3NhZ2VUaHJvdHRsZVRp
bWVyRmlyZWQpCisgICAgLCBtX2xhc3RNZXNzYWdlVGltZSgwKQoreworICAgIC8vIEluaXRpYWxp
emUgdGhlIGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUgbWVzc2FnZXMKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgTnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgIG1faW5s
aW5lTWVzc2FnZXNbaV0ubmV4dCA9ICZtX2lubGluZU1lc3NhZ2VzW2kgKyAxXTsKKyAgICBtX2lu
bGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV0ubmV4dCA9IDA7CisgICAgbV9mcmVl
SW5saW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKK30KKworUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbjo6flBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oKQoreworICAgIFBsdWdp
bk1lc3NhZ2UqIG5leHQ7CisKKyAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zy
b250OyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gbWVzc2FnZS0+
bmV4dDsKKyAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgfQorfQorCit2b2lkIFBs
dWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UoSFdORCBoV25kLCBVSU5UIG1z
ZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBQbHVnaW5NZXNzYWdlKiBt
ZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICBtZXNzYWdlLT5oV25kID0gaFduZDsK
KyAgICBtZXNzYWdlLT5tc2cgPSBtc2c7CisgICAgbWVzc2FnZS0+d1BhcmFtID0gd1BhcmFtOwor
ICAgIG1lc3NhZ2UtPmxQYXJhbSA9IGxQYXJhbTsKKyAgICBtZXNzYWdlLT5uZXh0ID0gMDsKKwor
ICAgIGlmIChtX2JhY2spCisgICAgICAgIG1fYmFjay0+bmV4dCA9IG1lc3NhZ2U7CisgICAgbV9i
YWNrID0gbWVzc2FnZTsKKyAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgIG1fZnJvbnQgPSBtZXNz
YWdlOworCisgICAgLy8gSWYgaXQgaGFzIGJlZW4gbW9yZSB0aGFuIE1lc3NhZ2VEaXJlY3RQcm9j
ZXNzaW5nSW50ZXJ2YWwgYmV0d2VlbiB0aHJvdHRsZWQgbWVzc2FnZXMsCisgICAgLy8gZ28gYWhl
YWQgYW5kIHByb2Nlc3MgYSBtZXNzYWdlIGRpcmVjdGx5LgorICAgIGRvdWJsZSBjdXJyZW50VGlt
ZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIGlmIChjdXJyZW50VGltZSAt
IG1fbGFzdE1lc3NhZ2VUaW1lID4gTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCkgewor
ICAgICAgICBwcm9jZXNzUXVldWVkTWVzc2FnZSgpOworICAgICAgICBtX2xhc3RNZXNzYWdlVGlt
ZSA9IGN1cnJlbnRUaW1lOworICAgICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJv
dHRsZVRpbWVJbnRlcnZhbCk7Cit9CisKK3ZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
cHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKQoreworICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBt
X2Zyb250OworICAgIG1fZnJvbnQgPSBtX2Zyb250LT5uZXh0OworICAgIGlmIChtZXNzYWdlID09
IG1fYmFjaykKKyAgICAgICAgbV9iYWNrID0gMDsKKworICAgIC8vIFByb3RlY3QgdGhlIFBsdWdp
blZpZXcgZnJvbSBkZXN0cnVjdGlvbiB3aGlsZSBjYWxsaW5nIGl0cyB3aW5kb3cgcHJvYy4KKyAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vNjkzMDI4MD4KKyAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJv
dGVjdChtX3BsdWdpblZpZXcpOworICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5w
bHVnaW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1Bh
cmFtLCBtZXNzYWdlLT5sUGFyYW0pOworCisgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7Cit9CisK
K3ZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJl
ZCgpCit7CisgICAgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKKworICAgIGlmIChtX2Zyb250KQor
ICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0
bGVUaW1lSW50ZXJ2YWwpOworfQorCitQbHVnaW5NZXNzYWdlKiBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UoKQoreworICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7
CisKKyAgICBpZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKKyAgICAgICAgbWVzc2FnZSA9IG1f
ZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3Nh
Z2UtPm5leHQ7CisgICAgfSBlbHNlCisgICAgICAgIG1lc3NhZ2UgPSBuZXcgUGx1Z2luTWVzc2Fn
ZTsKKworICAgIHJldHVybiBtZXNzYWdlOworfQorCitib29sIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW46OmlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQoreworICAgIHJl
dHVybiBtZXNzYWdlID49ICZtX2lubGluZU1lc3NhZ2VzWzBdICYmIG1lc3NhZ2UgPD0gJm1faW5s
aW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXTsKK30KKwordm9pZCBQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjpmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQorewor
ICAgIGlmIChpc0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKKyAgICAgICAgbWVzc2FnZS0+bmV4
dCA9IG1fZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9
IG1lc3NhZ2U7CisgICAgfSBlbHNlCisgICAgICAgIGRlbGV0ZSBtZXNzYWdlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5z
L1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjNTEwMzA4MzZkM2EzZTky
NzdhNjBkNTdhZDYzN2M1YWZmMWRhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9QbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKKyNkZWZpbmUgUGx1Z2lu
TWVzc2FnZVRocm90dGxlcldpbl9oCisKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8
d2luZG93cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgUGx1Z2luVmlldzsK
KworICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsKKyAgICAgICAgSFdORCBoV25kOworICAgICAg
ICBVSU5UIG1zZzsKKyAgICAgICAgV1BBUkFNIHdQYXJhbTsKKyAgICAgICAgTFBBUkFNIGxQYXJh
bTsKKworICAgICAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICB9OworCisgICAg
Y2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbiB7CisgICAgcHVibGljOgorICAgICAgICBQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZpZXcqKTsKKyAgICAgICAgflBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW4oKTsKKworICAgICAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoSFdORCwg
VUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQg
cHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKKyAgICAgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1l
ckZpcmVkKCk7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2FnZSgpOworICAg
ICAgICBib29sIGlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKKyAgICAg
ICAgdm9pZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKKworICAgICAgICBQ
bHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsK
KyAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcm9udDsKKworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IE51bUlubGluZU1lc3NhZ2VzID0gNDsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSBtX2lubGlu
ZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzXTsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9m
cmVlSW5saW5lTWVzc2FnZXM7CisKKyAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhyb3R0bGVUaW1l
cjsKKyAgICAgICAgZG91YmxlIG1fbGFzdE1lc3NhZ2VUaW1lOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2UwOTk4ODA0OTcxY2FlNWFiYTYzY2Q2Y2RjMTM0NWZlN2MyNDBlNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKQEAgLTAsMCAr
MSw0NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNs
dWRlICJjX3V0aWxpdHkuaCIKKyNpbmNsdWRlICJJZGVudGlmaWVyUmVwLmgiCisjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5QX2pzb2JqZWN0LmgiCisjaW5jbHVkZSAi
UGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvQ29tcGxldGlvbi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTR2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpblBhY2thZ2U6On5QbHVnaW5QYWNrYWdlKCkKK3sK
KyAgICAvLyBUaGlzIGRlc3RydWN0b3IgZ2V0cyBjYWxsZWQgZHVyaW5nIHJlZnJlc2goKSBpZiBQ
bHVnaW5EYXRhYmFzZSdzCisgICAgLy8gUGx1Z2luU2V0IGhhc2ggaXMgYWxyZWFkeSBwb3B1bGF0
ZWQsIGFzIGl0IHJlbW92ZXMgaXRlbXMgZnJvbQorICAgIC8vIHRoZSBoYXNoIHRhYmxlLiBDYWxs
aW5nIHRoZSBkZXN0cnVjdG9yIG9uIGEgbG9hZGVkIHBsdWctaW4gb2YKKyAgICAvLyBjb3Vyc2Ug
d291bGQgY2F1c2UgYSBjcmFzaCwgc28gd2UgY2hlY2sgdG8gY2FsbCB1bmxvYWQgYmVmb3JlIHdl
CisgICAgLy8gQVNTRVJULgorICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRl
ciB3YXkgdG8gZml4IHRoaXMuCisgICAgaWYgKCFtX2xvYWRDb3VudCkKKyAgICAgICAgdW5sb2Fk
V2l0aG91dFNodXRkb3duKCk7CisgICAgZWxzZQorICAgICAgICB1bmxvYWQoKTsKKworICAgIEFT
U0VSVCghbV9pc0xvYWRlZCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlT
b29uKCkKK3sKKyAgICBBU1NFUlQoIW1fZnJlZUxpYnJhcnlUaW1lci5pc0FjdGl2ZSgpKTsKKyAg
ICBBU1NFUlQobV9tb2R1bGUpOworICAgIEFTU0VSVCghbV9sb2FkQ291bnQpOworCisgICAgbV9m
cmVlTGlicmFyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdl
OjpmcmVlTGlicmFyeVRpbWVyRmlyZWQoKQoreworICAgIEFTU0VSVChtX21vZHVsZSk7CisgICAg
Ly8gRG8gbm90aGluZyBpZiB0aGUgbW9kdWxlIGdvdCBsb2FkZWQgYWdhaW4gbWVhbndoaWxlCisg
ICAgaWYgKCFtX2xvYWRDb3VudCkgeworICAgICAgICB1bmxvYWRNb2R1bGUobV9tb2R1bGUpOwor
ICAgICAgICBtX21vZHVsZSA9IDA7CisgICAgfQorfQorCisKK2ludCBQbHVnaW5QYWNrYWdlOjpj
b21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmIGNvbXBhcmVUbykgY29uc3QKK3sKKyAgICAvLyBT
b3J0IHBsdWctaW5zIHRoYXQgYWxsb3cgbXVsdGlwbGUgaW5zdGFuY2VzIGZpcnN0LgorICAgIGJv
b2wgQWFsbG93c011bHRpcGxlSW5zdGFuY2VzID0gIXF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1
aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIGJvb2wgQmFsbG93c011bHRpcGxl
SW5zdGFuY2VzID0gIWNvbXBhcmVUby5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRB
bGxvd011bHRpcGxlSW5zdGFuY2VzKTsKKyAgICBpZiAoQWFsbG93c011bHRpcGxlSW5zdGFuY2Vz
ICE9IEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcykKKyAgICAgICAgcmV0dXJuIEFhbGxvd3NNdWx0
aXBsZUluc3RhbmNlcyA/IC0xIDogMTsKKworICAgIC8vIFNvcnQgcGx1Zy1pbnMgaW4gYSBwcmVm
ZXJyZWQgcGF0aCBmaXJzdC4KKyAgICBib29sIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ID0gUGx1
Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KHBhcmVudERpcmVjdG9yeSgp
KTsKKyAgICBib29sIEJpc0luUHJlZmVycmVkRGlyZWN0b3J5ID0gUGx1Z2luRGF0YWJhc2U6Omlz
UHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKSk7Cisg
ICAgaWYgKEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ICE9IEJpc0luUHJlZmVycmVkRGlyZWN0b3J5
KQorICAgICAgICByZXR1cm4gQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPyAtMSA6IDE7CisKKyAg
ICBpbnQgZGlmZiA9IHN0cmNtcChuYW1lKCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLm5hbWUo
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoZGlmZikKKyAgICAgICAgcmV0dXJuIGRpZmY7CisK
KyAgICBkaWZmID0gY29tcGFyZUZpbGVWZXJzaW9uKGNvbXBhcmVUby52ZXJzaW9uKCkpOworICAg
IGlmIChkaWZmKQorICAgICAgICByZXR1cm4gZGlmZjsKKworICAgIHJldHVybiBzdHJjbXAocGFy
ZW50RGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgp
LnV0ZjgoKS5kYXRhKCkpOworfQorCitQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCisgICAgOiBtX2lzRW5h
YmxlZCh0cnVlKQorICAgICwgbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1fbG9hZENvdW50KDAp
CisgICAgLCBtX3BhdGgocGF0aCkKKyAgICAsIG1fbW9kdWxlVmVyc2lvbigwKQorICAgICwgbV9t
b2R1bGUoMCkKKyAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKKyAgICAsIG1fZnJl
ZUxpYnJhcnlUaW1lcigqdGhpcywgJlBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5VGltZXJGaXJl
ZCkKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICwgbV9p
bmZvSXNGcm9tQ2FjaGUodHJ1ZSkKKyNlbmRpZgoreworICAgIG1fZmlsZU5hbWUgPSBwYXRoR2V0
RmlsZU5hbWUobV9wYXRoKTsKKyAgICBtX3BhcmVudERpcmVjdG9yeSA9IG1fcGF0aC5sZWZ0KG1f
cGF0aC5sZW5ndGgoKSAtIG1fZmlsZU5hbWUubGVuZ3RoKCkgLSAxKTsKK30KKwordm9pZCBQbHVn
aW5QYWNrYWdlOjp1bmxvYWQoKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAgICByZXR1cm47CisKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBtX05QUF9TaHV0ZG93bigpOworI2Vu
ZGlmCisKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKK30KKwordm9pZCBQbHVnaW5QYWNr
YWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24oKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFtX2xvYWRDb3VudCk7CisgICAgQVNTRVJUKG1f
bW9kdWxlKTsKKworICAgIC8vIDxyZGFyOi8vNTUzMDUxOT46IENyYXNoIHdoZW4gY2xvc2luZyB0
YWIgd2l0aCBwZGYgZmlsZSAoUmVhZGVyIDcgb25seSkKKyAgICAvLyBJZiB0aGUgcGx1Z2luIGhh
cyBzdWJjbGFzc2VkIGl0cyBwYXJlbnQgd2luZG93LCBhcyB3aXRoIFJlYWRlciA3LCB3ZSBtYXkg
aGF2ZQorICAgIC8vIGdvdHRlbiBoZXJlIGJ5IHdheSBvZiB0aGUgcGx1Z2luJ3MgaW50ZXJuYWwg
d2luZG93IHByb2MgZm9yd2FyZGluZyBhIG1lc3NhZ2UgdG8gb3VyCisgICAgLy8gb3JpZ2luYWwg
d2luZG93IHByb2MuIElmIHdlIGZyZWUgdGhlIHBsdWdpbiBsaWJyYXJ5IGZyb20gaGVyZSwgd2Ug
d2lsbCBqdW1wIGJhY2sKKyAgICAvLyB0byBjb2RlIHdlIGp1c3QgZnJlZWQgd2hlbiB3ZSByZXR1
cm4sIHNvIGRlbGF5IGNhbGxpbmcgRnJlZUxpYnJhcnkgYXQgbGVhc3QgdW50aWwKKyAgICAvLyB0
aGUgbmV4dCBtZXNzYWdlIGxvb3AKKyAgICBmcmVlTGlicmFyeVNvb24oKTsKKworICAgIG1faXNM
b2FkZWQgPSBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjpzZXRFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKK3sKKyAgICBtX2lzRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKK1Bhc3NSZWZQdHI8
UGx1Z2luUGFja2FnZT4gUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQoreworICAgIFJlZlB0cjxQbHVnaW5Q
YWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYobmV3IFBsdWdpblBhY2thZ2UocGF0aCwgbGFzdE1v
ZGlmaWVkKSk7CisKKyAgICBpZiAoIXBhY2thZ2UtPmZldGNoSW5mbygpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBwYWNrYWdlLnJlbGVhc2UoKTsKK30KKworI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCitQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+
IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbikKK3sKKyAg
ICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IGFkb3B0UmVmKG5ldyBQbHVnaW5QYWNr
YWdlKHBhdGgsIGxhc3RNb2RpZmllZCkpOworICAgIHBhY2thZ2UtPm1fbmFtZSA9IG5hbWU7Cisg
ICAgcGFja2FnZS0+bV9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIHBhY2thZ2UtPmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKTsKKyAgICBwYWNrYWdlLT5zZXRN
SU1FRGVzY3JpcHRpb24obWltZURlc2NyaXB0aW9uKTsKKyAgICBwYWNrYWdlLT5tX2luZm9Jc0Zy
b21DYWNoZSA9IHRydWU7CisgICAgcmV0dXJuIHBhY2thZ2UucmVsZWFzZSgpOworfQorI2VuZGlm
CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCit2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZVF1
aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBh
IHNpbmdsZSBwcm9jZXNzIGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fubm90
IHJlbGlhYmx5IHVubG9hZCBhCisgICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxvYWQg
dGhlIEphdmEgcGx1Z2luLCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBWTQor
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKKworICAg
ICAgICAvLyBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVz
ZXMgYmFkIHNjcm9sbGluZyByZXBhaW50IHByb2JsZW1zCisgICAgICAgIC8vIHdpdGggdGhlIEph
dmEgcGx1Zy1pbi4KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBUb1pl
cm9SZWN0V2hlblNjcm9sbGluZyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICBz
dGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGZsYXNoVGVuVmVyc2lvbigweDBhMDAw
MDAwKTsKKworICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKGZsYXNoVGVuVmVyc2lvbikg
Pj0gMCkgeworICAgICAgICAgICAgLy8gRmxhc2ggMTAuMCBiMjE4IGRvZXNuJ3QgbGlrZSBoYXZp
bmcgYSBOVUxMIHdpbmRvdyBoYW5kbGUKKyAgICAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya0RvbnRTZXROdWxsV2luZG93SGFuZGxlT25EZXN0cm95KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIEZsYXNoIDkgYW5kIG9sZGVyIHJlcXVlc3RzIHdpbmRvd2xlc3MgcGx1
Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAgICAgICAgICAgIG1fcXVp
cmtzLmFkZChQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCk7CisgICAgICAgIH0KKwor
I2lmIENQVShYODZfNjQpCisgICAgICAgIC8vIDY0LWJpdCBGbGFzaCBmcmVlemVzIGlmIHJpZ2h0
LWNsaWNrIGlzIHNlbnQgaW4gd2luZG93bGVzcyBtb2RlCisgICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya0lnbm9yZVJpZ2h0Q2xpY2tJbldpbmRvd2xlc3NNb2RlKTsKKyNlbmRpZgorCisg
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNjcmVlbkRlcHRo
KTsKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlKTsK
KyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVz
c2FnZXMpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1
Zyk7CisgICAgfQorfQorI2VuZGlmCisKKyNpZiAhT1MoV0lORE9XUykKK3ZvaWQgUGx1Z2luUGFj
a2FnZTo6ZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpCit7CisgICAgLy8g
SXQncyBhIGJpdCBsYW1lIHRvIGRldGVjdCB0aGUgcGx1Z2luIHZlcnNpb24gYnkgcGFyc2luZyBp
dAorICAgIC8vIGZyb20gdGhlIHBsdWdpbiBkZXNjcmlwdGlvbiBzdHJpbmcsIGJ1dCBpdCBkb2Vz
bid0IHNlZW0gdGhhdAorICAgIC8vIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGlu
IGFueSBzdGFuZGFyZGl6ZWQgd2F5IGF0CisgICAgLy8gdGhlIG1vZHVsZSBsZXZlbCwgbGlrZSBp
biBXaW5kb3dzCisKKyAgICBpZiAobV9kZXNjcmlwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2Rlc2NyaXB0aW9uLnN0YXJ0c1dpdGgoIlNob2Nrd2F2ZSBGbGFz
aCIpICYmIG1fZGVzY3JpcHRpb24ubGVuZ3RoKCkgPj0gMTkpIHsKKyAgICAgICAgLy8gVGhlIGZs
YXNoIHZlcnNpb24gYXMgYSBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gZGlmZmVycyBvbiBVbml4IGZy
b20gV2luZG93cworICAgICAgICAvLyBzaW5jZSB0aGUgcmV2aXNpb24gY2FuIGJlIGxhcmdlciB0
aGFuIGEgOCBiaXRzLCBzbyB3ZSBhbGxvdyBpdCAxNiBoZXJlIGFuZAorICAgICAgICAvLyBwdXNo
IHRoZSBtYWpvci9taW5vciB1cCA4IGJpdHMuIFRodXMgb24gVW5peCwgRmxhc2gncyB2ZXJzaW9u
IG1heSBiZQorICAgICAgICAvLyAweDBhMDAwMDAwIGluc3RlYWQgb2YgMHgwMDBhMDAwMC4KKwor
ICAgICAgICBWZWN0b3I8U3RyaW5nPiB2ZXJzaW9uUGFydHM7CisgICAgICAgIG1fZGVzY3JpcHRp
b24uc3Vic3RyaW5nKDE2KS5zcGxpdCgnICcsIC8qYWxsb3dFbXB0eUVudHJpZXMgPSovIGZhbHNl
LCB2ZXJzaW9uUGFydHMpOworICAgICAgICBpZiAodmVyc2lvblBhcnRzLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodmVyc2lvblBhcnRzLnNpemUoKSA+PSAx
KSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBtYWpvck1pbm9yUGFydHM7CisgICAgICAg
ICAgICB2ZXJzaW9uUGFydHNbMF0uc3BsaXQoJy4nLCBtYWpvck1pbm9yUGFydHMpOworICAgICAg
ICAgICAgaWYgKG1ham9yTWlub3JQYXJ0cy5zaXplKCkgPj0gMSkgeworICAgICAgICAgICAgICAg
IGJvb2wgY29udmVydGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWFqb3Ig
PSBtYWpvck1pbm9yUGFydHNbMF0udG9VSW50KCZjb252ZXJ0ZWQpOworICAgICAgICAgICAgICAg
IGlmIChjb252ZXJ0ZWQpCisgICAgICAgICAgICAgICAgICAgIG1fbW9kdWxlVmVyc2lvbiA9ICht
YWpvciAmIDB4ZmYpIDw8IDI0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1ham9y
TWlub3JQYXJ0cy5zaXplKCkgPT0gMikgeworICAgICAgICAgICAgICAgIGJvb2wgY29udmVydGVk
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWlub3IgPSBtYWpvck1pbm9yUGFy
dHNbMV0udG9VSW50KCZjb252ZXJ0ZWQpOworICAgICAgICAgICAgICAgIGlmIChjb252ZXJ0ZWQp
CisgICAgICAgICAgICAgICAgICAgIG1fbW9kdWxlVmVyc2lvbiB8PSAobWlub3IgJiAweGZmKSA8
PCAxNjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJzaW9uUGFy
dHMuc2l6ZSgpID49IDIpIHsKKyAgICAgICAgICAgIFN0cmluZyByZXZpc2lvbiA9IHZlcnNpb25Q
YXJ0c1sxXTsKKyAgICAgICAgICAgIGlmIChyZXZpc2lvbi5sZW5ndGgoKSA+IDEgJiYgKHJldmlz
aW9uWzBdID09ICdyJyB8fCByZXZpc2lvblswXSA9PSAnYicpKSB7CisgICAgICAgICAgICAgICAg
cmV2aXNpb24ucmVtb3ZlKDAsIDEpOworICAgICAgICAgICAgICAgIG1fbW9kdWxlVmVyc2lvbiB8
PSByZXZpc2lvbi50b0ludCgpICYgMHhmZmZmOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3N0YXRp
YyB2b2lkIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IE5QVmFyaWFudCogYXJncywgdW5zaWduZWQgYXJnQ291bnQsIEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3QqIHJvb3RPYmplY3QsIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXImIGFMaXN0KQorewor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQorICAgICAgICBhTGlz
dC5hcHBlbmQoSlNDOjpCaW5kaW5nczo6Y29udmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgJmFy
Z3NbaV0sIHJvb3RPYmplY3QpKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OlNvdXJjZUNvZGUg
bWFrZVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB1cmwgPSBTdHJp
bmcoKSwgY29uc3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjpt
aW5pbXVtUG9zaXRpb24oKSkKK3sKKyAgICByZXR1cm4gSlNDOjpTb3VyY2VDb2RlKEpTQzo6U3Ry
aW5nU291cmNlUHJvdmlkZXI6OmNyZWF0ZShzb3VyY2UsIHVybCwgc3RhcnRQb3NpdGlvbiksIHN0
YXJ0UG9zaXRpb24ubV9saW5lLm9uZUJhc2VkSW50KCksIHN0YXJ0UG9zaXRpb24ubV9jb2x1bW4u
b25lQmFzZWRJbnQoKSk7Cit9CisKK3N0YXRpYyBib29sIE5QTl9FdmFsdWF0ZShOUFAgaW5zdGFu
Y2UsIE5QT2JqZWN0KiBvLCBOUFN0cmluZyogcywgTlBWYXJpYW50KiB2YXJpYW50KQoreworICAg
IGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykgeworICAgICAgICBKYXZhU2Ny
aXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihvKTsK
KworICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5y
b290T2JqZWN0OworICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBUaGVyZSBpcyBh
IGNyYXNoIGluIEZsYXNoIHdoZW4gZXZhbHVhdGluZyBhIHNjcmlwdCB0aGF0IGRlc3Ryb3lzIHRo
ZQorICAgICAgICAvLyBQbHVnaW5WaWV3LCBzbyB3ZSBkZXN0cm95IGl0IGFzeW5jaHJvbm91c2x5
LgorICAgICAgICBQbHVnaW5WaWV3OjprZWVwQWxpdmUoaW5zdGFuY2UpOworCisgICAgICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgU3Ry
aW5nIHNjcmlwdFN0cmluZyA9IEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFN0cmluZ1RvVVRGMTYo
cyk7CisKKyAgICAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNjcmlw
dFN0cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKKworICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252
ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXR1cm5WYWx1ZSwgdmFyaWFudCk7CisgICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIFZPSURfVE9fTlBWQVJJQU5UKCp2YXJpYW50KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3N0YXRpYyBib29sIE5QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG8sIE5QSWRlbnRpZmll
ciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBO
UFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0
Q2xhc3MpIHsKKyAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2Fz
dDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7CisKKyAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0
YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihtZXRob2ROYW1lKTsKKyAgICAgICAgaWYgKCFpLT5p
c1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFNwZWNp
YWwgY2FzZSB0aGUgImV2YWwiIG1ldGhvZC4KKyAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT0gX05Q
Tl9HZXRTdHJpbmdJZGVudGlmaWVyKCJldmFsIikpIHsKKyAgICAgICAgICAgIGlmIChhcmdDb3Vu
dCAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChh
cmdzWzBdLnR5cGUgIT0gTlBWYXJpYW50VHlwZV9TdHJpbmcpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZShucHAs
IG8sIGNvbnN0X2Nhc3Q8TlBTdHJpbmcqPigmYXJnc1swXS52YWx1ZS5zdHJpbmdWYWx1ZSksIHJl
c3VsdCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBMb29rIHVwIHRoZSBmdW5jdGlvbiBvYmpl
Y3QuCisgICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmot
PnJvb3RPYmplY3Q7CisgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNW
YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAg
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSBm
dW5jdGlvbiA9IG9iai0+aW1wLT5nZXQoZXhlYywgSlNDOjpCaW5kaW5nczo6aWRlbnRpZmllckZy
b21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKKyAgICAgICAgSlNDOjpDYWxsRGF0
YSBjYWxsRGF0YTsKKyAgICAgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KGZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxU
eXBlTm9uZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBDYWxsIHRo
ZSBmdW5jdGlvbiBvYmplY3QuCisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
TGlzdDsKKyAgICAgICAgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhleGVjLCBhcmdzLCBhcmdDb3Vu
dCwgcm9vdE9iamVjdCwgYXJnTGlzdCk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHRWID0g
SlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iai0+aW1wLCBh
cmdMaXN0KTsKKworICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0
aGUgZnVuY3Rpb24gY2FsbC4KKyAgICAgICAgSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9O
UFZhcmlhbnQoZXhlYywgcmVzdWx0ViwgcmVzdWx0KTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG8tPl9jbGFz
cy0+aW52b2tlKQorICAgICAgICByZXR1cm4gby0+X2NsYXNzLT5pbnZva2UobywgbWV0aG9kTmFt
ZSwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisKKyAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVz
dWx0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjppbml0aWFs
aXplQnJvd3NlckZ1bmNzKCkKK3sKKyAgICBtZW1zZXQoJm1fYnJvd3NlckZ1bmNzLCAwLCBzaXpl
b2YobV9icm93c2VyRnVuY3MpKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6ZW9mKG1f
YnJvd3NlckZ1bmNzKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBWZXJzaW9uKCk7
CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3Nl
ckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0
cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBO
UE5fTmV3U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAg
IG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVh
Z2VudCA9IE5QTl9Vc2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5f
TWVtQWxsb2M7CisgICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAg
IG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1
bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBv
c3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2
YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9T
ZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlk
YXRlUmVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFs
aWRhdGVSZWdpb247CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VS
ZWRyYXc7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52Owor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1f
YnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJs
ZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5f
UG9wUG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBsdWdpbnRocmVhZGFz
eW5jY2FsbCA9IE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGw7CisKKyAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1f
YnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0
cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBf
TlBOX0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3Ry
aW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZy
b21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVu
Y3MuaW50ZnJvbWlkZW50aWZpZXIgPSBfTlBOX0ludEZyb21JZGVudGlmaWVyOworICAgIG1fYnJv
d3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0OworICAgIG1fYnJvd3Nl
ckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OworICAgIG1fYnJvd3NlckZ1
bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7CisgICAgbV9icm93c2VyRnVu
Y3MuaW52b2tlID0gV2ViQ29yZTo6TlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZv
a2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1
YXRlID0gV2ViQ29yZTo6TlBOX0V2YWx1YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3Bl
cnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9
IF9OUE5fU2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBf
TlBOX1JlbW92ZVByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05Q
Tl9IYXNQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc01l
dGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlv
bjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5jb25zdHJ1Y3QgPSBfTlBOX0NvbnN0cnVjdDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5nZXR2YWx1ZWZvcnVybCA9IE5QTl9HZXRWYWx1ZUZvclVSTDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5zZXR2YWx1ZWZvcnVybCA9IE5QTl9TZXRWYWx1ZUZvclVSTDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5nZXRhdXRoZW50aWNhdGlvbmluZm8gPSBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvOwor
CisgICAgbV9icm93c2VyRnVuY3MucG9wdXBjb250ZXh0bWVudSA9IE5QTl9Qb3BVcENvbnRleHRN
ZW51OworfQorI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorCisjaWYgRU5B
QkxFKFBMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIKQordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6
aGFzaCgpIGNvbnN0Cit7CisgICAgc3RydWN0IEhhc2hDb2RlcyB7CisgICAgICAgIHVuc2lnbmVk
IGhhc2g7CisgICAgICAgIHRpbWVfdCBtb2RpZmllZERhdGU7CisgICAgfSBoYXNoQ29kZXM7CisK
KyAgICBoYXNoQ29kZXMuaGFzaCA9IG1fcGF0aC5pbXBsKCktPmhhc2goKTsKKyAgICBoYXNoQ29k
ZXMubW9kaWZpZWREYXRlID0gbV9sYXN0TW9kaWZpZWQ7CisKKyAgICByZXR1cm4gU3RyaW5nSGFz
aGVyOjpoYXNoTWVtb3J5PHNpemVvZihoYXNoQ29kZXMpPigmaGFzaENvZGVzKTsKK30KKworYm9v
bCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVn
aW5QYWNrYWdlJiBiKQoreworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2Ny
aXB0aW9uOworfQorI2VuZGlmCisKK2ludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNp
b24oY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJiBjb21wYXJlVmVyc2lvbikgY29uc3QKK3sK
KyAgICAvLyByZXR1cm4gLTEsIDAsIG9yIDEgaWYgcGx1Zy1pbiB2ZXJzaW9uIGlzIGxlc3MgdGhh
biwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbgorICAgIC8vIHRoZSBwYXNzZWQgdmVyc2lvbgor
CisjaWYgT1MoV0lORE9XUykKKyAgICBpZiAobV9tb2R1bGVWZXJzaW9uLm1vc3RTaWcgIT0gY29t
cGFyZVZlcnNpb24ubW9zdFNpZykKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbi5tb3N0
U2lnID4gY29tcGFyZVZlcnNpb24ubW9zdFNpZyA/IDEgOiAtMTsKKyAgICBpZiAobV9tb2R1bGVW
ZXJzaW9uLmxlYXN0U2lnICE9IGNvbXBhcmVWZXJzaW9uLmxlYXN0U2lnKQorICAgICAgICByZXR1
cm4gbV9tb2R1bGVWZXJzaW9uLmxlYXN0U2lnID4gY29tcGFyZVZlcnNpb24ubGVhc3RTaWcgPyAx
IDogLTE7CisjZWxzZSAgICAKKyAgICBpZiAobV9tb2R1bGVWZXJzaW9uICE9IGNvbXBhcmVWZXJz
aW9uKQorICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uID4gY29tcGFyZVZlcnNpb24gPyAx
IDogLTE7CisjZW5kaWYKKworICAgIHJldHVybiAwOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2lu
TG9hZGVkKCkKK3sKKyAgICBpZiAoIW1faW5mb0lzRnJvbUNhY2hlKQorICAgICAgICByZXR1cm4g
bV9pc0xvYWRlZDsKKworICAgIG1fcXVpcmtzID0gUGx1Z2luUXVpcmtTZXQoKTsKKyAgICBtX25h
bWUgPSBTdHJpbmcoKTsKKyAgICBtX2Rlc2NyaXB0aW9uID0gU3RyaW5nKCk7CisgICAgbV9mdWxs
TUlNRURlc2NyaXB0aW9uID0gU3RyaW5nKCk7CisgICAgbV9tb2R1bGVWZXJzaW9uID0gMDsKKwor
ICAgIHJldHVybiBmZXRjaEluZm8oKTsKK30KKyNlbmRpZgorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuaCBiL1NvdXJjZS9XZWJLaXQvd2lu
L1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4MzQwNTc2Nzk3YWE2YmM4MzE3
NzJiYzNiNGY5Y2NmOGNjOGJhNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuaApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbHVn
aW5QYWNrYWdlX2gKKyNkZWZpbmUgUGx1Z2luUGFja2FnZV9oCisKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisjaW5jbHVkZSAiUGx1Z2luUXVpcmtTZXQuaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRl
cm5hbC5oIgorI2VuZGlmCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01h
cDsKKworICAgIGNsYXNzIFBsdWdpblBhY2thZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5Q
YWNrYWdlPiB7CisgICAgcHVibGljOgorICAgICAgICB+UGx1Z2luUGFja2FnZSgpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBs
dWdpblBhY2thZ2U+IGNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlwdGlvbik7CisjZW5kaWYK
KworICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
KyAgICAgICAgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
Y3JpcHRpb247IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9wYXRoOyB9CisgICAgICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVOYW1lOyB9CisgICAgICAgIGNvbnN0IFN0cmluZyYgcGFyZW50RGlyZWN0b3J5KCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJlbnREaXJlY3Rvcnk7IH0KKyAgICAgICAgUGxhdGZvcm1Nb2R1
bGUgbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGU7IH0KKyAgICAgICAgdWludDE2X3Qg
TlBWZXJzaW9uKCkgY29uc3Q7CisgICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RNb2RpZmllZDsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0
aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNj
cmlwdGlvbnM7IH0KKyAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0
ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
UGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYik7CisKKyAgICAgICAgYm9v
bCBsb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkV2l0
aG91dFNodXRkb3duKCk7CisKKyAgICAgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX2lzRW5hYmxlZDsgfQorICAgICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisKKyNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyog
cGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorI2VuZGlmCisg
ICAgICAgIGludCBjb21wYXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9u
JikgY29uc3Q7CisgICAgICAgIGludCBjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmKSBjb25z
dDsKKyAgICAgICAgUGx1Z2luUXVpcmtTZXQgcXVpcmtzKCkgY29uc3QgeyByZXR1cm4gbV9xdWly
a3M7IH0KKyAgICAgICAgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJiB2ZXJzaW9uKCkgY29u
c3QgeyByZXR1cm4gbV9tb2R1bGVWZXJzaW9uOyB9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX01FVEFEQVRBX0NBQ0hFKQorICAgICAgICBib29sIGVuc3VyZVBsdWdpbkxvYWRlZCgpOwor
ICAgICAgICB2b2lkIHNldE1JTUVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIG1pbWVEZXNjcmlw
dGlvbik7CisgICAgICAgIFN0cmluZyBmdWxsTUlNRURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9mdWxsTUlNRURlc2NyaXB0aW9uO30KKyNlbmRpZgorICAgIHByaXZhdGU6CisgICAgICAg
IFBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2Rp
ZmllZCk7CisKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKKyAgICAgICAgYm9vbCBpc1BsdWdp
bkJsYWNrbGlzdGVkKCk7CisgICAgICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOworCisgICAgICAgIHZvaWQgZGV0ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21E
ZXNjcmlwdGlvbigpOworICAgICAgICB2b2lkIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKKwor
ICAgICAgICBib29sIG1faXNFbmFibGVkOworICAgICAgICBib29sIG1faXNMb2FkZWQ7CisgICAg
ICAgIGludCBtX2xvYWRDb3VudDsKKworICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKKyAg
ICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisgICAgICAg
IFN0cmluZyBtX25hbWU7CisgICAgICAgIFN0cmluZyBtX3BhcmVudERpcmVjdG9yeTsKKworICAg
ICAgICBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gbV9tb2R1bGVWZXJzaW9uOworCisgICAgICAgIE1J
TUVUb0Rlc2NyaXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlNRVRv
RXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4dGVuc2lvbnM7CisKKyAgICAgICAgUGxhdGZvcm1Nb2R1
bGUgbV9tb2R1bGU7CisgICAgICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZDsKKworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQ
X1NodXRkb3duOworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAgICAg
IE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKyNlbmRpZgorCisgICAgICAgIHZvaWQg
ZnJlZUxpYnJhcnlTb29uKCk7CisgICAgICAgIHZvaWQgZnJlZUxpYnJhcnlUaW1lckZpcmVkKCk7
CisgICAgICAgIFRpbWVyIG1fZnJlZUxpYnJhcnlUaW1lcjsKKworICAgICAgICBQbHVnaW5RdWly
a1NldCBtX3F1aXJrczsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hF
KQorICAgICAgICBTdHJpbmcgbV9mdWxsTUlNRURlc2NyaXB0aW9uOworICAgICAgICBib29sIG1f
aW5mb0lzRnJvbUNhY2hlOworI2VuZGlmCisgICAgfTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGEgd29ya2Fyb3VuZCBiZWNhdXNlIFBsdWdpblBhY2thZ2VIYXNoIGlzIGJyb2tlbiBhbmQgbWF5
IGNvbnNpZGVyIGtleXMgd2l0aCBkaWZmZXJlbnQgaGFzaGVzIGFzIGVxdWFsLgorICAgIHN0cnVj
dCBQbHVnaW5QYWNrYWdlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8UmVmUHRyPFBsdWdpblBhY2th
Z2U+ID4geworICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSA2NDsK
KyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VIYXNoIHsKKyAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgdWludHB0cl90IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxQbHVnaW5QYWNrYWdlKj4oa2V5KS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYga2V5KSB7IHJldHVybiBrZXkt
Pmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IHVpbnRwdHJfdCBh
LCBjb25zdCB1aW50cHRyX3QgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVn
aW5QYWNrYWdlKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGIpKTsgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGEs
IGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZTo6
ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5QYWNrYWdlV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODUyNTdkNjIyOTI3MjA5MThhNTFhMzZk
ODI3ZDhjY2QyZDQxOWMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5QYWNrYWdlV2luLmNwcApAQCAtMCwwICsxLDMzNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1
ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJucHJ1bnRp
bWVfaW1wbC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8c2hsd2FwaS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcgZ2V0VmVyc2lvbkluZm8o
Y29uc3QgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5nJiBpbmZvKQoreworICAg
IExQVk9JRCBidWZmZXI7CisgICAgVUlOVCBidWZmZXJMZW5ndGg7CisgICAgU3RyaW5nIHN1Yklu
Zm8gPSAiXFxTdHJpbmdmaWxlSW5mb1xcMDQwOTA0RTRcXCIgKyBpbmZvOworICAgIGJvb2wgcmV0
dmFsID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbkluZm9EYXRhLAorICAgICAgICBjb25zdF9jYXN0
PFVDaGFyKj4oc3ViSW5mby5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSks
CisgICAgICAgICZidWZmZXIsICZidWZmZXJMZW5ndGgpOworICAgIGlmICghcmV0dmFsIHx8IGJ1
ZmZlckxlbmd0aCA9PSAwKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBTdWJ0
cmFjdCAxIGZyb20gdGhlIGxlbmd0aDsgd2UgZG9uJ3Qgd2FudCB0aGUgdHJhaWxpbmcgbnVsbCBj
aGFyYWN0ZXIuCisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PFVDaGFyKj4oYnVm
ZmVyKSwgYnVmZmVyTGVuZ3RoIC0gMSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6aXNQbHVn
aW5CbGFja2xpc3RlZCgpCit7CisgICAgaWYgKG5hbWUoKSA9PSAiQ2l0cml4IElDQSBDbGllbnQi
KSB7CisgICAgICAgIC8vIFRoZSBDaXRyaXggSUNBIENsaWVudCBwbHVnLWluIHJlcXVpcmVzIGEg
TW96aWxsYS1iYXNlZCBicm93c2VyOyBzZWUgPHJkYXI6Ly82NDE4NjgxPi4KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKG5hbWUoKSA9PSAiU2lsdmVybGlnaHQgUGx1Zy1J
biIpIHsKKyAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly81NTU3Mzc5PiBDcmFzaCBp
biBTaWx2ZXJsaWdodCB3aGVuIG9wZW5pbmcgbWljcm9zb2Z0LmNvbS4KKyAgICAgICAgLy8gdGhl
IGxhdGVzdCAxLjAgdmVyc2lvbiBvZiBTaWx2ZXJsaWdodCBkb2VzIG5vdCByZXByb2R1Y2UgdGhp
cyBjcmFzaCwgc28gYWxsb3cgaXQKKyAgICAgICAgLy8gYW5kIGFueSBuZXdlciB2ZXJzaW9ucwor
ICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHNsUGx1Z2luTWluUmVx
dWlyZWQoMHg1MUJFMDAwMCwgMHgwMDAxMDAwMCk7CisKKyAgICAgICAgaWYgKGNvbXBhcmVGaWxl
VmVyc2lvbihzbFBsdWdpbk1pblJlcXVpcmVkKSA8IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVOYW1lKCksICJucG1vemF4
LmRsbCIpKSB7CisgICAgICAgIC8vIEJ1ZyAxNTIxNzogTW96aWxsYSBBY3RpdmVYIGNvbnRyb2wg
Y29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb21fY29yZS5kbGwKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlTmFtZSgpLCAibnB3cGYu
ZGxsIikpIHsKKyAgICAgICAgLy8gQnVnIDU3MTE5OiBNaWNyb3NvZnQgV2luZG93cyBQcmVzZW50
YXRpb24gRm91bmRhdGlvbiAoV1BGKSBwbHVnLWluIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHhw
Y29tLmRsbAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKG5hbWUoKSA9PSAi
WWFob28gQXBwbGljYXRpb24gU3RhdGUgUGx1Z2luIikgeworICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY4NjAKKyAgICAgICAgLy8gQnVnIGluIFlh
aG9vIEFwcGxpY2F0aW9uIFN0YXRlIHBsdWctaW4gZWFybGllciB0aGFuIDEuMC4wLjYgbGVhZHMg
dG8gaGVhcCBjb3JydXB0aW9uLiAKKyAgICAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxl
VmVyc2lvbiB5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVxdWlyZWQoMHgwMDAwMDAwNiwgMHgwMDAx
MDAwMCk7CisgICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oeWFob29BcHBTdGF0ZVBsdWdp
bk1pblJlcXVpcmVkKSA8IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtz
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNh
dGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3Jt
TW9kdWxlVmVyc2lvbiBmbGFzaFRlblZlcnNpb24oMHgwMDAwMDAwMCwgMHgwMDBhMDAwMCk7CisK
KyAgICAgICAgLy8gUHJlIDEwIEZsYXNoIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5z
IGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgICAgICBpZiAoY29tcGFyZUZp
bGVWZXJzaW9uKGZsYXNoVGVuVmVyc2lvbikgPCAwKQorICAgICAgICAgICAgbV9xdWlya3MuYWRk
KFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKKworICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOworICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyk7CisgICAgICAgIG1fcXVp
cmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsKKyAgICB9CisKKyAgICBpZiAo
bmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBuYW1lKCkuY29udGFpbnMoIldpbmRvd3Mg
TWVkaWEiKSkgeworICAgICAgICAvLyBUaGUgV01QIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRo
ZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNv
CisgICAgICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNv
cnJlY3Qgc2l6ZQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0
V2luZG93Q2FsbCk7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRvZXMgbm90IHdvcmsg
YXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhhdCBwYXJhbWV0ZXIg
CisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWluLgorICAgICAgICBt
X3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSk7CisKKyAg
ICAgICAgLy8gV01QIGhhcyBhIG1vZGFsIG1lc3NhZ2UgbG9vcCB0aGF0IGl0IGVudGVycyB3aGVu
ZXZlciB3ZSBjYWxsIGl0IG9yCisgICAgICAgIC8vIGFzayBpdCB0byBwYWludC4gVGhpcyBtb2Rh
bCBsb29wIGNhbiBkZWxpdmVyIG1lc3NhZ2VzIHRvIG90aGVyCisgICAgICAgIC8vIHdpbmRvd3Mg
aW4gV2ViS2l0IGF0IHRpbWVzIHdoZW4gdGhleSBhcmUgbm90IGV4cGVjdGluZyB0aGVtIChmb3IK
KyAgICAgICAgLy8gZXhhbXBsZSwgZGVsaXZlcmluZyBhIFdNX1BBSU5UIG1lc3NhZ2UgZHVyaW5n
IGEgbGF5b3V0KSwgYW5kIHRoZXNlCisgICAgICAgIC8vIGNhbiBjYXVzZSBjcmFzaGVzLgorICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3NhZ2VMb29wKTsKKyAgICB9
CisKKyAgICBpZiAobmFtZSgpID09ICJWTEMgTXVsdGltZWRpYSBQbHVnaW4iIHx8IG5hbWUoKSA9
PSAiVkxDIE11bHRpbWVkaWEgUGx1Zy1pbiIpIHsKKyAgICAgICAgLy8gVkxDIGhhbmdzIG9uIE5Q
UF9EZXN0cm95IGlmIHdlIGNhbGwgTlBQX1NldFdpbmRvdyB3aXRoIGEgbnVsbCB3aW5kb3cgaGFu
ZGxlCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRTZXROdWxsV2luZG93SGFu
ZGxlT25EZXN0cm95KTsKKworICAgICAgICAvLyBWTEMgMC44LjZkIGFuZCAwLjguNmUgY3Jhc2gg
aWYgbXVsdGlwbGUgaW5zdGFuY2VzIGFyZSBjcmVhdGVkLgorICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNTc3MzA3MD4gdHJhY2tzIGFsbG93aW5nIG11bHRpcGxlIGluc3RhbmNlcyB3aGVuIHRo
aXMKKyAgICAgICAgLy8gYnVnIGlzIGZpeGVkLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgfQorCisgICAgLy8gVGhlIERp
dlggcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBh
bmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVu
IHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobWltZVR5cGUgPT0g
InZpZGVvL2RpdngiKQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0
U2V0V2luZG93Q2FsbCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9y
IGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJpbmRpbmdzOyBpZiBhIHBsdWctaW4gY3JlYXRl
cyBhbgorICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNzZXMgaXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5v
dCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9iamVjdCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3Mg
dG8uCisgICAgLy8gVGh1cywgd2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJl
IGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4gaW5zdGFuY2UgZ29lcyBhd2F5LgorICAgIC8v
IFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4uCisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBs
aWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
RG9udFVubG9hZFBsdWdpbik7CisKKyAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBw
bGV0TUlNRVR5cGUobWltZVR5cGUpKSB7CisgICAgICAgIC8vIEJlY2F1c2UgYSBzaW5nbGUgcHJv
Y2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCByZWxpYWJseSB1
bmxvYWQgYQorICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRoZSBKYXZhIHBs
dWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KKyAgICAgICAgbV9x
dWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisKKyAgICAgICAgLy8gU2V0
dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1c2VzIGJhZCBzY3Jv
bGxpbmcgcmVwYWludCBwcm9ibGVtcworICAgICAgICAvLyB3aXRoIHRoZSBKYXZhIHBsdWctaW4u
CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5T
Y3JvbGxpbmcpOworICAgIH0KKworICAgIGlmIChtaW1lVHlwZSA9PSAiYXVkaW8veC1wbi1yZWFs
YXVkaW8tcGx1Z2luIikgeworICAgICAgICAvLyBQcmV2ZW50IHRoZSBSZWFsIHBsdWdpbiBmcm9t
IGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5LCBjYXVzaW5nIHRoZSBzdGFjayB0
byBvdmVyZmxvdy4KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENhbGxXbmRQ
cm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiBsYXN0S25vd25VbmxvYWRhYmxlUmVhbFBsYXllclZlcnNpb24o
MHgwMDBCMEIyNCwgMHgwMDA2MDAwMCk7CisKKyAgICAgICAgLy8gVW5sb2FkaW5nIFJlYWxQbGF5
ZXIgdmVyc2lvbnMgbmV3ZXIgdGhhbiAxMC41IGNhbiBjYXVzZSBhIGhhbmc7IHNlZSByZGFyOi8v
NTY2OTMxNy4KKyAgICAgICAgLy8gRklYTUU6IFJlc3VtZSB1bmxvYWRpbmcgd2hlbiB0aGlzIGJ1
ZyBpbiB0aGUgUmVhbFBsYXllciBQbHVnLUluIGlzIGZpeGVkIChyZGFyOi8vNTcxMzE0NykKKyAg
ICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihsYXN0S25vd25VbmxvYWRhYmxlUmVhbFBsYXll
clZlcnNpb24pID4gMCkKKyAgICAgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRV
bmxvYWRQbHVnaW4pOworICAgIH0KK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8o
KQoreworICAgIERXT1JEIHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKKyAgICB2ZXJzaW9u
SW5mb1NpemUgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhjb25zdF9jYXN0PFVDaGFyKj4obV9w
YXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwgJnplcm9IYW5kbGUp
OworICAgIGlmICh2ZXJzaW9uSW5mb1NpemUgPT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byB2ZXJzaW9uSW5mb0RhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPGNoYXJbXT4odmVy
c2lvbkluZm9TaXplKTsKKworICAgIGlmICghR2V0RmlsZVZlcnNpb25JbmZvVyhjb25zdF9jYXN0
PFVDaGFyKj4obV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwK
KyAgICAgICAgICAgIDAsIHZlcnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhLmdldCgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9uYW1lID0gZ2V0VmVyc2lvbkluZm8odmVy
c2lvbkluZm9EYXRhLmdldCgpLCAiUHJvZHVjdE5hbWUiKTsKKyAgICBtX2Rlc2NyaXB0aW9uID0g
Z2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZURlc2NyaXB0aW9uIik7
CisgICAgaWYgKG1fbmFtZS5pc051bGwoKSB8fCBtX2Rlc2NyaXB0aW9uLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWU19GSVhFREZJTEVJTkZPKiBpbmZvOworICAgIFVJ
TlQgaW5mb1NpemU7CisgICAgaWYgKCFWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEuZ2V0
KCksIEwiXFwiLCAoTFBWT0lEKikgJmluZm8sICZpbmZvU2l6ZSkgfHwgaW5mb1NpemUgPCBzaXpl
b2YoVlNfRklYRURGSUxFSU5GTykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX21vZHVs
ZVZlcnNpb24ubGVhc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTFM7CisgICAgbV9tb2R1bGVW
ZXJzaW9uLm1vc3RTaWcgPSBpbmZvLT5kd0ZpbGVWZXJzaW9uTVM7CisKKyAgICBpZiAoaXNQbHVn
aW5CbGFja2xpc3RlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8U3Ry
aW5nPiB0eXBlczsKKyAgICBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJN
SU1FVHlwZSIpLnNwbGl0KCd8JywgdHlwZXMpOworICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lv
bkxpc3RzOworICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIkZpbGVF
eHRlbnRzIikuc3BsaXQoJ3wnLCBleHRlbnNpb25MaXN0cyk7CisgICAgVmVjdG9yPFN0cmluZz4g
ZGVzY3JpcHRpb25zOworICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwg
IkZpbGVPcGVuTmFtZSIpLnNwbGl0KCd8JywgZGVzY3JpcHRpb25zKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7IGkrKykgeworICAgICAgICBTdHJpbmcgdHlw
ZSA9IHR5cGVzW2ldLmxvd2VyKCk7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IGkgPCBk
ZXNjcmlwdGlvbnMuc2l6ZSgpID8gZGVzY3JpcHRpb25zW2ldIDogIiI7CisgICAgICAgIFN0cmlu
ZyBleHRlbnNpb25MaXN0ID0gaSA8IGV4dGVuc2lvbkxpc3RzLnNpemUoKSA/IGV4dGVuc2lvbkxp
c3RzW2ldIDogIiI7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9uc1ZlY3RvcjsK
KyAgICAgICAgZXh0ZW5zaW9uTGlzdC5zcGxpdCgnLCcsIGV4dGVuc2lvbnNWZWN0b3IpOworCisg
ICAgICAgIC8vIEdldCByaWQgb2YgdGhlIGV4dGVuc2lvbiBsaXN0IHRoYXQgbWF5IGJlIGF0IHRo
ZSBlbmQgb2YgdGhlIGRlc2NyaXB0aW9uIHN0cmluZy4KKyAgICAgICAgaW50IHBvcyA9IGRlc2Ny
aXB0aW9uLmZpbmQoIigqIik7CisgICAgICAgIGlmIChwb3MgIT0gLTEpIHsKKyAgICAgICAgICAg
IC8vIFRoZXJlIG1pZ2h0IGJlIGEgc3BhY2UgdGhhdCB3ZSBuZWVkIHRvIGdldCByaWQgb2YuCisg
ICAgICAgICAgICBpZiAocG9zID4gMSAmJiBkZXNjcmlwdGlvbltwb3MgLSAxXSA9PSAnICcpCisg
ICAgICAgICAgICAgICAgcG9zLS07CisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0
aW9uLmxlZnQocG9zKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERldGVybWluZSB0aGUgcXVp
cmtzIGZvciB0aGUgTUlNRSB0eXBlcyB0aGlzIHBsdWctaW4gc3VwcG9ydHMKKyAgICAgICAgZGV0
ZXJtaW5lUXVpcmtzKHR5cGUpOworCisgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQodHlw
ZSwgZXh0ZW5zaW9uc1ZlY3Rvcik7CisgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZCh0
eXBlLCBkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
UGx1Z2luUGFja2FnZTo6bG9hZCgpCit7CisgICAgaWYgKG1fZnJlZUxpYnJhcnlUaW1lci5pc0Fj
dGl2ZSgpKSB7CisgICAgICAgIEFTU0VSVChtX21vZHVsZSk7CisgICAgICAgIG1fZnJlZUxpYnJh
cnlUaW1lci5zdG9wKCk7CisgICAgfSBlbHNlIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIGlm
IChtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2Vz
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV0NIQVIgY3VycmVudFBh
dGhbTUFYX1BBVEhdOworCisgICAgICAgIGlmICghOjpHZXRDdXJyZW50RGlyZWN0b3J5VyhNQVhf
UEFUSCwgY3VycmVudFBhdGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IFN0cmluZyBwYXRoID0gbV9wYXRoLnN1YnN0cmluZygwLCBtX3BhdGgucmV2ZXJzZUZpbmQoJ1xc
JykpOworCisgICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoLmNoYXJhY3Rl
cnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAvLyBMb2FkIHRoZSBsaWJyYXJ5CisgICAgICAgIG1fbW9kdWxlID0gOjpM
b2FkTGlicmFyeUV4VyhtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRh
KCksIDAsIExPQURfV0lUSF9BTFRFUkVEX1NFQVJDSF9QQVRIKTsKKworICAgICAgICBpZiAoITo6
U2V0Q3VycmVudERpcmVjdG9yeVcoY3VycmVudFBhdGgpKSB7CisgICAgICAgICAgICBpZiAobV9t
b2R1bGUpCisgICAgICAgICAgICAgICAgOjpGcmVlTGlicmFyeShtX21vZHVsZSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fbW9kdWxl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAg
IE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0ciBOUF9HZXRFbnRyeVBvaW50cyA9IDA7CisgICAgTlBf
SW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZSA9IDA7CisgICAgTlBFcnJvciBucEVycjsK
KworICAgIE5QX0luaXRpYWxpemUgPSAoTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpR2V0UHJvY0FkZHJl
c3MobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIik7CisgICAgTlBfR2V0RW50cnlQb2ludHMgPSAo
TlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfR2V0
RW50cnlQb2ludHMiKTsKKyAgICBtX05QUF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRy
KUdldFByb2NBZGRyZXNzKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iKTsKKworICAgIGlmICghTlBf
SW5pdGlhbGl6ZSB8fCAhTlBfR2V0RW50cnlQb2ludHMgfHwgIW1fTlBQX1NodXRkb3duKQorICAg
ICAgICBnb3RvIGFib3J0OworCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2Yo
bV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdp
bkZ1bmNzKTsKKworICAgIG5wRXJyID0gTlBfR2V0RW50cnlQb2ludHMoJm1fcGx1Z2luRnVuY3Mp
OworICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJS
T1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBpbml0aWFsaXplQnJvd3NlckZ1bmNzKCk7
CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsKKyAgICBMT0df
TlBFUlJPUihucEVycik7CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAg
ICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOwor
CithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAoreyAKKyAgICBjb25z
dCB1bnNpZ25lZCBoYXNoQ29kZXNbXSA9IHsKKyAgICAgICAgbV9uYW1lLmltcGwoKS0+aGFzaCgp
LAorICAgICAgICBtX2Rlc2NyaXB0aW9uLmltcGwoKS0+aGFzaCgpLAorICAgICAgICBtX21pbWVU
b0V4dGVuc2lvbnMuc2l6ZSgpCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhh
c2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7Cit9CisKK2Jvb2wgUGx1Z2lu
UGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2Fn
ZSYgYikKK3sKKyAgICBpZiAoYS5tX25hbWUgIT0gYi5tX25hbWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChhLm1fZGVzY3JpcHRpb24gIT0gYi5tX2Rlc2NyaXB0aW9uKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYS5tX21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgp
ICE9IGIubV9taW1lVG9FeHRlbnNpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0gYS5t
X21pbWVUb0V4dGVuc2lvbnMuZW5kKCkua2V5cygpOworICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBhLm1fbWltZVRvRXh0ZW5zaW9ucy5iZWdp
bigpLmtleXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICghYi5tX21pbWVUb0V4
dGVuc2lvbnMuY29udGFpbnMoKml0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordWludDE2X3QgUGx1Z2luUGFja2FnZTo6TlBWZXJz
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTlBfVkVSU0lPTl9NSU5PUjsKK30KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaCBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OWEzMzgz
ZGJiNDQ2OTA5OTQwN2Q2YmRhMTIzZDEwMWRjYjVkMzg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBQbHVnaW5RdWlya1NldF9oCisjZGVmaW5lIFBsdWdpblF1aXJrU2V0X2gKKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyAgICBlbnVtIFBsdWdpblF1aXJrIHsKKyAgICAgICAgUGx1Z2luUXVp
cmtXYW50c01vemlsbGFVc2VyQWdlbnQgPSAxIDw8IDAsCisgICAgICAgIFBsdWdpblF1aXJrRGVm
ZXJGaXJzdFNldFdpbmRvd0NhbGwgPSAxIDw8IDEsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0
bGVJbnZhbGlkYXRlID0gMSA8PCAyLCAKKyAgICAgICAgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3ds
ZXNzVmlkZW9QYXJhbSA9IDEgPDwgMywKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNl
clBsdXNPbmVNZXNzYWdlcyA9IDEgPDwgNCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250VW5sb2Fk
UGx1Z2luID0gMSA8PCA1LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNh
bWVNZXNzYWdlUmVjdXJzaXZlbHkgPSAxIDw8IDYsCisgICAgICAgIFBsdWdpblF1aXJrSGFzTW9k
YWxNZXNzYWdlTG9vcCA9IDEgPDwgNywKKyAgICAgICAgUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlm
eUJ1ZyA9IDEgPDwgOCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVu
U2Nyb2xsaW5nID0gMSA8PCA5LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRTZXROdWxsV2luZG93
SGFuZGxlT25EZXN0cm95ID0gMSA8PCAxMCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250QWxsb3dN
dWx0aXBsZUluc3RhbmNlcyA9IDEgPDwgMTEsCisgICAgICAgIFBsdWdpblF1aXJrUmVxdWlyZXNH
dGtUb29sS2l0ID0gMSA8PCAxMiwKKyAgICAgICAgUGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRT
Y3JlZW5EZXB0aCA9IDEgPDwgMTMsCisgICAgICAgIFBsdWdpblF1aXJrRG9udENhbGxTZXRXaW5k
b3dNb3JlVGhhbk9uY2UgPSAxIDw8IDE0LAorICAgICAgICBQbHVnaW5RdWlya0lnbm9yZVJpZ2h0
Q2xpY2tJbldpbmRvd2xlc3NNb2RlID0gMSA8PCAxNSwKKyAgICAgICAgUGx1Z2luUXVpcmtXYW50
c0Nocm9tZVVzZXJBZ2VudCA9IDEgPDwgMTYKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luUXVp
cmtTZXQgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBQbHVnaW5RdWlya1NldCgpIDog
bV9xdWlya3MoMCkgeyB9CisgICAgICAgICAgICB2b2lkIGFkZChQbHVnaW5RdWlyayBxdWlyaykg
eyBtX3F1aXJrcyB8PSBxdWlyazsgfQorICAgICAgICAgICAgYm9vbCBjb250YWlucyhQbHVnaW5R
dWlyayBxdWlyaykgY29uc3QgeyByZXR1cm4gbV9xdWlya3MgJiBxdWlyazsgfQorICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgdW5zaWduZWQgbV9xdWlya3M7CisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUGx1Z2luUXVpcmtTZXRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIGIvU291cmNlL1dl
YktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5YjliMTIwZjFm
NDIwYzZiNGE3YzZiZmYwMDc2MzMwMGI1NTgyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKQEAgLTAsMCArMSw0ODIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblN0cmVhbS5oIgorCisjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCisjaW5jbHVkZSAiUGx1
Z2luRGVidWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCisvLyBXZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBsaWtl
IHRvIHJldHVybiAtMSB0byBpbmRpY2F0ZSBlcnJvcgorLy8gYW5kIHRoaXMgd2F5IHdlIHdvbid0
IGNsYXNoIHdpdGggdGhlbS4KK3N0YXRpYyBjb25zdCBpbnQgV2ViUmVhc29uTm9uZSA9IC0yOwor
Cit1c2luZyBzdGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3R5cGVkZWYgSGFzaE1hcDxOUFN0cmVhbSosIE5QUD4gU3RyZWFtTWFwOworc3RhdGljIFN0
cmVhbU1hcCYgc3RyZWFtcygpCit7CisgICAgc3RhdGljIFN0cmVhbU1hcCBzdGF0aWNTdHJlYW1z
OworICAgIHJldHVybiBzdGF0aWNTdHJlYW1zOworfQorCitQbHVnaW5TdHJlYW06OlBsdWdpblN0
cmVhbShQbHVnaW5TdHJlYW1DbGllbnQqIGNsaWVudCwgRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lk
KiBub3RpZnlEYXRhLCBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcywgTlBQIGluc3Rh
bmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtzKQorICAgIDogbV9yZXNvdXJjZVJlcXVl
c3QocmVzb3VyY2VSZXF1ZXN0KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9mcmFt
ZShmcmFtZSkKKyAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQorICAgICwgbV9zZW5kTm90
aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pCisgICAgLCBtX3N0cmVhbVN0YXRlKFN0cmVhbUJl
Zm9yZVN0YXJ0ZWQpCisgICAgLCBtX2xvYWRNYW51YWxseShmYWxzZSkKKyAgICAsIG1fZGVsYXlE
ZWxpdmVyeVRpbWVyKCp0aGlzLCAmUGx1Z2luU3RyZWFtOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJl
ZCkKKyAgICAsIG1fdGVtcEZpbGVIYW5kbGUoaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkKKyAg
ICAsIG1fcGx1Z2luRnVuY3MocGx1Z2luRnVuY3MpCisgICAgLCBtX2luc3RhbmNlKGluc3RhbmNl
KQorICAgICwgbV9xdWlya3MocXVpcmtzKQoreworICAgIEFTU0VSVChtX2luc3RhbmNlKTsKKwor
ICAgIG1fc3RyZWFtLnVybCA9IDA7CisgICAgbV9zdHJlYW0ubmRhdGEgPSAwOworICAgIG1fc3Ry
ZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5lbmQgPSAwOworICAgIG1fc3RyZWFtLm5vdGlm
eURhdGEgPSAwOworICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IDA7CisgICAgbV9zdHJlYW0u
aGVhZGVycyA9IDA7CisKKyAgICBzdHJlYW1zKCkuYWRkKCZtX3N0cmVhbSwgbV9pbnN0YW5jZSk7
Cit9CisKK1BsdWdpblN0cmVhbTo6flBsdWdpblN0cmVhbSgpCit7CisgICAgQVNTRVJUKG1fc3Ry
ZWFtU3RhdGUgIT0gU3RyZWFtU3RhcnRlZCk7CisgICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAg
ICBmYXN0RnJlZSgoY2hhciopbV9zdHJlYW0udXJsKTsKKworICAgIHN0cmVhbXMoKS5yZW1vdmUo
Jm1fc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OnN0YXJ0KCkKK3sKKyAgICBBU1NF
UlQoIW1fbG9hZE1hbnVhbGx5KTsKKyAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxl
cigpLT5zY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQobV9mcmFtZSwgdGhpcywgbV9yZXNvdXJjZVJl
cXVlc3QpOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6c3RvcCgpCit7CisgICAgbV9zdHJlYW1T
dGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICBpZiAobV9sb2FkTWFudWFsbHkpIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKTsKKyAgICAg
ICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyKTsKKworICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXIt
PmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKQorICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmNh
bmNlbE1haW5SZXNvdXJjZUxvYWQobV9mcmFtZS0+bG9hZGVyKCkuY2FuY2VsbGVkRXJyb3IobV9y
ZXNvdXJjZVJlcXVlc3QpKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
bG9hZGVyKSB7CisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICAgICAgbV9sb2FkZXIg
PSAwOworICAgIH0KKworICAgIG1fY2xpZW50ID0gMDsKK30KKworc3RhdGljIHVpbnQzMl90IGxh
c3RNb2RpZmllZERhdGUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAg
ZG91YmxlIGxhc3RNb2RpZmllZCA9IHJlc3BvbnNlLmxhc3RNb2RpZmllZCgpOworICAgIGlmICgh
c3RkOjppc2Zpbml0ZShsYXN0TW9kaWZpZWQpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBsYXN0TW9kaWZpZWQgKiAxMDAwOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6c3RhcnRT
dHJlYW0oKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0
ZWQpOworCisgICAgY29uc3QgVVJMJiByZXNwb25zZVVSTCA9IG1fcmVzb3VyY2VSZXNwb25zZS51
cmwoKTsKKworICAgIC8vIFNvbWUgcGx1Z2lucyAoRmxhc2gpIGV4cGVjdCB0aGF0IGphdmFzY3Jp
cHQgVVJMcyBhcmUgcGFzc2VkIGJhY2sgZGVjb2RlZCBhcyB0aGlzIGlzIHRoZQorICAgIC8vIGZv
cm1hdCB1c2VkIHdoZW4gcmVxdWVzdGluZyB0aGUgVVJMLgorICAgIGlmIChwcm90b2NvbElzSmF2
YVNjcmlwdChyZXNwb25zZVVSTCkpCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGZhc3RTdHJEdXAo
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHJlc3BvbnNlVVJMLnN0cmluZygpKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGZhc3RTdHJEdXAocmVzcG9u
c2VVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBDU3RyaW5nIG1pbWVUeXBlU3Ry
ID0gbV9yZXNvdXJjZVJlc3BvbnNlLm1pbWVUeXBlKCkudXRmOCgpOworCisgICAgbG9uZyBsb25n
IGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25zZS5leHBlY3RlZENvbnRl
bnRMZW5ndGgoKTsKKworICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2UuaXNIVFRQKCkpIHsKKyAg
ICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgICAgICBTdHJpbmcgc2VwYXJh
dG9yID0gQVNDSUlMaXRlcmFsKCI6ICIpOworCisgICAgICAgIFN0cmluZyBzdGF0dXNMaW5lID0g
IkhUVFAgIiArIFN0cmluZzo6bnVtYmVyKG1fcmVzb3VyY2VSZXNwb25zZS5odHRwU3RhdHVzQ29k
ZSgpKSArICIgT0tcbiI7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0YXR1c0xpbmUp
OworCisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3Vy
Y2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChzZXBhcmF0b3IpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnZhbHVl
KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICB9CisK
KyAgICAgICAgbV9oZWFkZXJzID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKwor
ICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxpa2VseSBjb21wcmVz
c2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdpbiwKKyAgICAgICAg
Ly8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90IHll
dCBrbm93biBhdCB0aGUgbW9tZW50LgorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDQ3MDU5
OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3BvbnNlIGV4cGVjdGVkQ29udGVudExl
bmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KKyAgICAgICAgU3RyaW5nIGNvbnRlbnRF
bmNvZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRFbmNvZGluZyk7CisgICAgICAgIGlmICghY29udGVudEVuY29kaW5nLmlzTnVs
bCgpICYmIGNvbnRlbnRFbmNvZGluZyAhPSAiaWRlbnRpdHkiKQorICAgICAgICAgICAgZXhwZWN0
ZWRDb250ZW50TGVuZ3RoID0gLTE7CisgICAgfQorCisgICAgbV9zdHJlYW0uaGVhZGVycyA9IG1f
aGVhZGVycy5kYXRhKCk7CisgICAgbV9zdHJlYW0ucGRhdGEgPSAwOworICAgIG1fc3RyZWFtLm5k
YXRhID0gdGhpczsKKyAgICBtX3N0cmVhbS5lbmQgPSBtYXgoZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
LCAwTEwpOworICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IGxhc3RNb2RpZmllZERhdGUobV9y
ZXNvdXJjZVJlc3BvbnNlKTsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRh
OworCisgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7CisgICAgbV9vZmZzZXQgPSAwOwor
ICAgIG1fcmVhc29uID0gV2ViUmVhc29uTm9uZTsKKworICAgIC8vIFByb3RlY3QgdGhlIHN0cmVh
bSBpZiBkZXN0cm95c3RyZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgbmV3c3RyZWFtIGhh
bmRsZXIKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOworCisgICAgLy8g
Y2FsbGluZyBpbnRvIGEgcGx1Zy1pbiBjb3VsZCByZXN1bHQgaW4gcmUtZW50cmFuY2UgaWYgdGhl
IHBsdWctaW4geWllbGRzCisgICAgLy8gY29udHJvbCB0byB0aGUgc3lzdGVtIChyZGFyOi8vNTc0
NDg5OSkuIHByZXZlbnQgdGhpcyBieSBkZWZlcnJpbmcgZnVydGhlcgorICAgIC8vIGxvYWRpbmcg
d2hpbGUgY2FsbGluZyBpbnRvIHRoZSBwbHVnLWluLgorICAgIGlmIChtX2xvYWRlcikKKyAgICAg
ICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgTlBFcnJvciBucEVyciA9
IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbShtX2luc3RhbmNlLCAoTlBNSU1FVHlwZSltaW1lVHlw
ZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVyTW9kZSk7CisgICAgaWYg
KG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Cisg
ICAgCisgICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVzdHJveWVkIGluIHRoZSBjYWxsIHRvIG5l
d3N0cmVhbSB3ZSByZXR1cm4KKyAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1Ip
IHsKKyAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShucEVycik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RhcnRlZDsKKworICAgIGlm
IChtX3RyYW5zZmVyTW9kZSA9PSBOUF9OT1JNQUwpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cGF0aCA9IG9wZW5UZW1wb3JhcnlGaWxlKCJXS1AiLCBtX3RlbXBGaWxlSGFuZGxlKTsKKworICAg
IC8vIFNvbWV0aGluZyB3ZW50IHdyb25nLCBjYW5jZWwgbG9hZGluZyB0aGUgc3RyZWFtCisgICAg
aWYgKCFpc0hhbmRsZVZhbGlkKG1fdGVtcEZpbGVIYW5kbGUpKQorICAgICAgICBjYW5jZWxBbmRE
ZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKK30KKworTlBQIFBsdWdpblN0cmVhbTo6
b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gc3RyZWFtcygp
LmdldChzdHJlYW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6Y2FuY2VsQW5kRGVzdHJveVN0
cmVhbShOUFJlYXNvbiByZWFzb24pCit7CisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVj
dCh0aGlzKTsKKworICAgIGRlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAgICBzdG9wKCk7Cit9CisK
K3ZvaWQgUGx1Z2luU3RyZWFtOjpkZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKK3sKKyAg
ICBtX3JlYXNvbiA9IHJlYXNvbjsKKyAgICBpZiAobV9yZWFzb24gIT0gTlBSRVNfRE9ORSkgewor
ICAgICAgICAvLyBTdG9wIGFueSBwZW5kaW5nIGRhdGEgZnJvbSBiZWluZyBzdHJlYW1lZAorICAg
ICAgICBpZiAobV9kZWxpdmVyeURhdGEpCisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVz
aXplKDApOworICAgIH0gZWxzZSBpZiAobV9kZWxpdmVyeURhdGEgJiYgbV9kZWxpdmVyeURhdGEt
PnNpemUoKSA+IDApIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbW9yZSBkYXRhIHRvIGJlIHN0cmVh
bWVkLCBkb24ndCBkZXN0cm95IHRoZSBzdHJlYW0gbm93LgorICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGRlc3Ryb3lTdHJlYW0oKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmRlc3Ryb3lT
dHJlYW0oKQoreworICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKTsKKyAg
ICBBU1NFUlQoIW1fZGVsaXZlcnlEYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCk7
CisKKyAgICBjbG9zZUZpbGUobV90ZW1wRmlsZUhhbmRsZSk7CisKKyAgICBib29sIG5ld1N0cmVh
bUNhbGxlZCA9IG1fc3RyZWFtLm5kYXRhOworCisgICAgLy8gUHJvdGVjdCBmcm9tIGRlc3RydWN0
aW9uIGlmOgorICAgIC8vICBOUE5fRGVzdHJveVN0cmVhbSBpcyBjYWxsZWQgZnJvbSBOUFBfTmV3
U3RyZWFtIG9yCisgICAgLy8gIFBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFtRGlkRmluaXNoTG9h
ZGluZygpIHJlbW92ZXMgdGhlIGxhc3QgcmVmZXJlbmNlCisgICAgUmVmUHRyPFBsdWdpblN0cmVh
bT4gcHJvdGVjdCh0aGlzKTsKKworICAgIGlmIChuZXdTdHJlYW1DYWxsZWQpIHsKKyAgICAgICAg
aWYgKG1fcmVhc29uID09IE5QUkVTX0RPTkUgJiYgKG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklM
RSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSkgeworICAgICAgICAgICAgQVNT
RVJUKCFtX3BhdGguaXNOdWxsKCkpOworCisgICAgICAgICAgICBpZiAobV9sb2FkZXIpCisgICAg
ICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgICAgICAg
ICBtX3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX3BhdGgudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICAgICAg
bV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCkgeworICAgICAgICAgICAg
aWYgKG1fbG9hZGVyKQorICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5n
KHRydWUpOworCisgICAgICAgICAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+ZGVz
dHJveXN0cmVhbShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKKworICAgICAgICAg
ICAgaWYgKG1fbG9hZGVyKQorICAgICAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2Fk
aW5nKGZhbHNlKTsKKworICAgICAgICAgICAgTE9HX05QRVJST1IobnBFcnIpOworICAgICAgICB9
CisKKyAgICAgICAgbV9zdHJlYW0ubmRhdGEgPSAwOworICAgIH0KKworICAgIGlmIChtX3NlbmRO
b3RpZmljYXRpb24pIHsKKyAgICAgICAgLy8gRmxhc2ggOSBjYW4gZGVyZWZlcmVuY2UgbnVsbCBp
ZiB3ZSBjYWxsIE5QUF9VUkxOb3RpZnkgd2l0aG91dCBmaXJzdCBjYWxsaW5nIE5QUF9OZXdTdHJl
YW0KKyAgICAgICAgLy8gZm9yIHJlcXVlc3RzIG1hZGUgd2l0aCBOUE5fUG9zdFVSTE5vdGlmeTsg
c2VlIDxyZGFyOi8vNTU4ODgwNz4KKyAgICAgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICAgICAg
bV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgICAgIGlmICghbmV3U3RyZWFt
Q2FsbGVkICYmIG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcp
ICYmCisgICAgICAgICAgICBlcXVhbElnbm9yaW5nQ2FzZShtX3Jlc291cmNlUmVxdWVzdC5odHRw
TWV0aG9kKCksICJQT1NUIikpIHsKKyAgICAgICAgICAgIG1fdHJhbnNmZXJNb2RlID0gTlBfTk9S
TUFMOworICAgICAgICAgICAgbV9zdHJlYW0udXJsID0gIiI7CisgICAgICAgICAgICBtX3N0cmVh
bS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRhOworCisgICAgICAgICAgICBzdGF0aWMgY2hhciBl
bXB0eU1pbWVUeXBlW10gPSAiIjsKKyAgICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVh
bShtX2luc3RhbmNlLCBlbXB0eU1pbWVUeXBlLCAmbV9zdHJlYW0sIGZhbHNlLCAmbV90cmFuc2Zl
ck1vZGUpOworICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+ZGVzdHJveXN0cmVhbShtX2luc3Rh
bmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKKworICAgICAgICAgICAgLy8gaW4gc3VjY2Vzc2Z1
bCByZXF1ZXN0cywgdGhlIFVSTCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIGZyZWVkIGlu
IG91cgorICAgICAgICAgICAgLy8gZGVzdHJ1Y3Rvciwgc28gcmVzZXQgaXQgdG8gMAorICAgICAg
ICAgICAgbV9zdHJlYW0udXJsID0gMDsKKyAgICAgICAgfQorICAgICAgICBtX3BsdWdpbkZ1bmNz
LT51cmxub3RpZnkobV9pbnN0YW5jZSwgbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgbV9yZWFzb24sIG1fbm90aWZ5RGF0YSk7CisgICAgICAgIGlmIChtX2xv
YWRlcikKKyAgICAgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAg
ICB9CisKKyAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RvcHBlZDsKKworICAgIGlmICghbV9s
b2FkTWFudWFsbHkgJiYgbV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zdHJlYW1EaWRGaW5p
c2hMb2FkaW5nKHRoaXMpOworCisgICAgaWYgKCFtX3BhdGguaXNOdWxsKCkpCisgICAgICAgIGRl
bGV0ZUZpbGUobV9wYXRoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlU
aW1lckZpcmVkKCkKK3sKKyAgICBkZWxpdmVyRGF0YSgpOworfQorCit2b2lkIFBsdWdpblN0cmVh
bTo6ZGVsaXZlckRhdGEoKQoreworICAgIEFTU0VSVChtX2RlbGl2ZXJ5RGF0YSk7CisgICAgCisg
ICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBjYW5jZWwgb3VyIGpvYiBpbiB0aGUgU3VicmVzb3VyY2VMb2FkZXIgb24gZXJy
b3Igc28gd2UgZG9uJ3QgcmVhY2ggdGhpcyBjYXNlCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgaWYgKCFt
X3N0cmVhbS5uZGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIGludDMyX3QgdG90YWxCeXRlcyA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7
CisgICAgaW50MzJfdCB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKworICAgIGlmIChtX2xvYWRl
cikKKyAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgd2hpbGUg
KHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAgICAgIGludDMyX3QgZGVs
aXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlcmVhZHkobV9pbnN0YW5jZSwgJm1fc3Ry
ZWFtKTsKKworICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8PSAwKSB7CisgICAgICAgICAgICBt
X2RlbGF5RGVsaXZlcnlUaW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZl
cnlCeXRlcywgdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWQpOworICAgICAgICAgICAg
aW50MzJfdCBkYXRhTGVuZ3RoID0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIGNoYXIqIGRh
dGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKKworICAg
ICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBt
X3BsdWdpbkZ1bmNzLT53cml0ZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fb2Zmc2V0LCBkYXRh
TGVuZ3RoLCAodm9pZCopZGF0YSk7CisgICAgICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8IDAp
IHsKKyAgICAgICAgICAgICAgICBMT0dfUExVR0lOX05FVF9FUlJPUigpOworICAgICAgICAgICAg
ICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVy
c0xvYWRpbmcoZmFsc2UpOworICAgICAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0o
TlBSRVNfTkVUV09SS19FUlIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgZGF0YUxl
bmd0aCk7CisgICAgICAgICAgICBtX29mZnNldCArPSBkZWxpdmVyeUJ5dGVzOworICAgICAgICAg
ICAgdG90YWxCeXRlc0RlbGl2ZXJlZCArPSBkZWxpdmVyeUJ5dGVzOworICAgICAgICB9CisgICAg
fQorICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmco
ZmFsc2UpOworCisgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPiAwKSB7CisgICAgICAgIGlm
ICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICAgICAgaW50IHJl
bWFpbmluZ0J5dGVzID0gdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7CisgICAgICAg
ICAgICBtZW1tb3ZlKG1fZGVsaXZlcnlEYXRhLT5kYXRhKCksIG1fZGVsaXZlcnlEYXRhLT5kYXRh
KCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkLCByZW1haW5pbmdCeXRlcyk7CisgICAgICAgICAgICBt
X2RlbGl2ZXJ5RGF0YS0+cmVzaXplKHJlbWFpbmluZ0J5dGVzKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7CisgICAgICAgICAgICBpZiAo
bV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKKyAgICAgICAgICAgICAgICBkZXN0cm95U3RyZWFt
KCk7CisgICAgICAgIH0KKyAgICB9IAorfQorCit2b2lkIFBsdWdpblN0cmVhbTo6c2VuZEphdmFT
Y3JpcHRTdHJlYW0oY29uc3QgVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiByZXN1bHRT
dHJpbmcpCit7CisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIFJlc291cmNlUmVzcG9uc2UocmVx
dWVzdFVSTCwgInRleHQvcGxhaW4iLCByZXN1bHRTdHJpbmcubGVuZ3RoKCksICIiKSk7CisKKyAg
ICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIXJlc3VsdFN0cmluZy5pc051bGwoKSkgeworICAgICAgICBkaWRSZWNlaXZlRGF0
YSgwLCByZXN1bHRTdHJpbmcuZGF0YSgpLCByZXN1bHRTdHJpbmcubGVuZ3RoKCkpOworICAgICAg
ICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fbG9hZGVyID0gMDsKKworICAgIGRlc3Ryb3lTdHJlYW0ocmVzdWx0
U3RyaW5nLmlzTnVsbCgpID8gTlBSRVNfTkVUV09SS19FUlIgOiBOUFJFU19ET05FKTsKK30KKwor
dm9pZCBQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAg
ICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQo
bV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIG1fcmVzb3VyY2VS
ZXNwb25zZSA9IHJlc3BvbnNlOworCisgICAgc3RhcnRTdHJlYW0oKTsKK30KKwordm9pZCBQbHVn
aW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUX1VOVVNFRChs
b2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0g
U3RyZWFtU3RhcnRlZCk7CisKKyAgICAvLyBJZiB0aGUgcGx1Zy1pbiBjYW5jZWxzIHRoZSBzdHJl
YW0gaW4gZGVsaXZlckRhdGEgaXQgY291bGQgYmUgZGVsZXRlZCwgCisgICAgLy8gc28gcHJvdGVj
dCBpdCBoZXJlLgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7CisKKyAg
ICBpZiAobV90cmFuc2Zlck1vZGUgIT0gTlBfQVNGSUxFT05MWSkgeworICAgICAgICBpZiAoIW1f
ZGVsaXZlcnlEYXRhKQorICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEgPSBzdGQ6Om1ha2VfdW5p
cXVlPFZlY3RvcjxjaGFyPj4oKTsKKworICAgICAgICBpbnQgb2xkU2l6ZSA9IG1fZGVsaXZlcnlE
YXRhLT5zaXplKCk7CisgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUob2xkU2l6ZSArIGxl
bmd0aCk7CisgICAgICAgIG1lbWNweShtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgb2xkU2l6ZSwg
ZGF0YSwgbGVuZ3RoKTsKKworICAgICAgICBkZWxpdmVyRGF0YSgpOworICAgIH0KKworICAgIGlm
IChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0b3BwZWQgJiYgaXNIYW5kbGVWYWxpZChtX3RlbXBG
aWxlSGFuZGxlKSkgeworICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gd3JpdGVUb0ZpbGUobV90
ZW1wRmlsZUhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiAh
PSBsZW5ndGgpCisgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdP
UktfRVJSKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpkaWRGYWlsKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAg
IEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworCisgICAgTE9HX1BM
VUdJTl9ORVRfRVJST1IoKTsKKworICAgIC8vIGRlc3Ryb3lTdHJlYW0gY2FuIHJlc3VsdCBpbiBv
dXIgYmVpbmcgZGVsZXRlZAorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7
CisKKyAgICBkZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKKworICAgIG1fbG9hZGVy
ID0gMDsKK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlcikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwg
bG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1T
dGFydGVkKTsKKworICAgIC8vIGRlc3Ryb3lTdHJlYW0gY2FuIHJlc3VsdCBpbiBvdXIgYmVpbmcg
ZGVsZXRlZAorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7CisKKyAgICBk
ZXN0cm95U3RyZWFtKE5QUkVTX0RPTkUpOworCisgICAgbV9sb2FkZXIgPSAwOworfQorCitib29s
IFBsdWdpblN0cmVhbTo6d2FudHNBbGxTdHJlYW1zKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGx1
Z2luRnVuY3MtPmdldHZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2b2lkKiBy
ZXN1bHQgPSAwOworICAgIGlmIChtX3BsdWdpbkZ1bmNzLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBO
UFBWcGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtcywgJnJlc3VsdCkgIT0gTlBFUlJfTk9fRVJS
T1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiByZXN1bHQgIT0gMDsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0u
aCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjAwMzJjNGMxOTA0NTEyMmY1NmFjZWY2MzJlNTc4MThhMTVhOWJjZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmgKQEAgLTAsMCArMSwx
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5TdHJlYW1faAorI2RlZmluZSBQbHVnaW5TdHJlYW1f
aAorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUg
Ik5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luUXVpcmtTZXQu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBj
bGFzcyBQbHVnaW5TdHJlYW07CisKKyAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRlIHsgU3RyZWFt
QmVmb3JlU3RhcnRlZCwgU3RyZWFtU3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9OworCisgICAgY2xh
c3MgUGx1Z2luU3RyZWFtQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgflBs
dWdpblN0cmVhbUNsaWVudCgpIHt9CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5p
c2hMb2FkaW5nKFBsdWdpblN0cmVhbSopIHt9CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpblN0
cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblN0cmVhbT4sIHByaXZhdGUgTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGx1Z2luU3RyZWFtPiBjcmVhdGUoUGx1Z2luU3RyZWFtQ2xpZW50KiBjbGllbnQs
IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNlbmRO
b3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqIGZ1bmN0
aW9ucywgTlBQIGluc3RhbmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtzKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpblN0cmVhbShjbGllbnQs
IGZyYW1lLCByZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBmdW5jdGlvbnMs
IGluc3RhbmNlLCBxdWlya3MpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIH5QbHVnaW5T
dHJlYW0oKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBz
dG9wKCk7CisKKyAgICAgICAgdm9pZCBzdGFydFN0cmVhbSgpOworCisgICAgICAgIHZvaWQgc2V0
TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1hbnVhbGx5KSB7IG1fbG9hZE1hbnVhbGx5ID0gbG9hZE1h
bnVhbGx5OyB9CisKKyAgICAgICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBVUkwm
IHJlcXVlc3RVUkwsIGNvbnN0IFdURjo6Q1N0cmluZyYgcmVzdWx0U3RyaW5nKTsKKyAgICAgICAg
dm9pZCBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKKworICAgICAgICBzdGF0aWMg
TlBQIG93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKik7CisKKyAgICAgICAgLy8gTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXJDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNw
b25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlciopOworICAgICAgICB2aXJ0dWFsIGJvb2wgd2FudHNBbGxTdHJlYW1zKCkgY29uc3Q7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5TdHJlYW0oUGx1Z2luU3RyZWFtQ2xpZW50
KiwgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24s
IHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqLCBOUFAgaW5zdGFuY2UsIGNv
bnN0IFBsdWdpblF1aXJrU2V0Jik7CisKKyAgICAgICAgdm9pZCBkZWxpdmVyRGF0YSgpOworICAg
ICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOworICAgICAgICB2b2lkIGRlc3Ryb3lT
dHJlYW0oKTsKKworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVlc3Q7Cisg
ICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNvdXJjZVJlc3BvbnNlOworCisgICAgICAgIFBs
dWdpblN0cmVhbUNsaWVudCogbV9jbGllbnQ7CisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAg
ICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVyOworICAgICAg
ICB2b2lkKiBtX25vdGlmeURhdGE7CisgICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOwor
ICAgICAgICBQbHVnaW5TdHJlYW1TdGF0ZSBtX3N0cmVhbVN0YXRlOworICAgICAgICBib29sIG1f
bG9hZE1hbnVhbGx5OworCisgICAgICAgIFRpbWVyIG1fZGVsYXlEZWxpdmVyeVRpbWVyOworICAg
ICAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKCk7CisKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFZlY3RvcjxjaGFyPj4gbV9kZWxpdmVyeURhdGE7CisKKyAgICAgICAgUGxhdGZvcm1G
aWxlSGFuZGxlIG1fdGVtcEZpbGVIYW5kbGU7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5j
cyogbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIHVpbnQx
Nl90IG1fdHJhbnNmZXJNb2RlOworICAgICAgICBpbnQzMl90IG1fb2Zmc2V0OworICAgICAgICBD
U3RyaW5nIG1faGVhZGVyczsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgTlBSZWFz
b24gbV9yZWFzb247CisgICAgICAgIE5QU3RyZWFtIG1fc3RyZWFtOworICAgICAgICBQbHVnaW5R
dWlya1NldCBtX3F1aXJrczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGViMjI1YzA0Y2MxZWU0MWQ1NjJlZGJkOTIwYzlkMjk3NThlZTRlNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTAsMCArMSwx
NDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRlICJCcmlkZ2VKU0MuaCIKKyNpbmNsdWRl
ICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUVFBI
ZWFkZXJOYW1lcy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50Lmgi
CisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxl
ci5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJQcm94eVNlcnZlci5o
IgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2lu
Y2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIK
KyNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiY19pbnN0YW5jZS5oIgorI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVk
ZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBPUyhXSU5ET1dTKSAm
JiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhy
b3R0bGVyV2luLmgiCisjZW5kaWYKKwordXNpbmcgSlNDOjpFeGVjU3RhdGU7Cit1c2luZyBKU0M6
OkpTTG9jazsKK3VzaW5nIEpTQzo6SlNPYmplY3Q7Cit1c2luZyBKU0M6OkpTVmFsdWU7CisKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKKworc3RhdGljIGludCBzX2NhbGxpbmdQbHVnaW47CisKK3R5cGVkZWYgSGFz
aE1hcDxOUFAsIFBsdWdpblZpZXcqPiBJbnN0YW5jZU1hcDsKKworc3RhdGljIEluc3RhbmNlTWFw
JiBpbnN0YW5jZU1hcCgpCit7CisgICAgc3RhdGljIEluc3RhbmNlTWFwJiBtYXAgPSAqbmV3IElu
c3RhbmNlTWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBTdHJpbmcgc2NyaXB0U3Ry
aW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IFVSTCYgdXJsKQoreworICAgIGlmICghcHJvdG9jb2xJ
c0phdmFTY3JpcHQodXJsKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gVGhp
cyByZXR1cm5zIGFuIHVuZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoMTEpKTsKK30KKworUGx1Z2luVmlldyog
UGx1Z2luVmlldzo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CisKK3ZvaWQgUGx1Z2luVmlldzo6
cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKCkKK3sKKyAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUo
KTsKK30KKworSW50UmVjdCBQbHVnaW5WaWV3Ojp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Cit7Cisg
ICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KKyAgICBJbnRSZWN0IGNsaXBS
ZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBvdXIgZWxlbWVudCBhbmQgZ2V0
IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBmcmFtZSB2aWV3Lgor
ICAgIEZyYW1lVmlldyogcGFyZW50VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS52aWV3KCk7
CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHBhcmVudFZpZXctPndpbmRvd0NsaXBSZWN0Rm9yRnJh
bWVPd25lcihtX2VsZW1lbnQsIHRydWUpKTsKKworICAgIHJldHVybiBjbGlwUmVjdDsKK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLnByaW50aW5nKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChyZWN0ICE9IGZyYW1lUmVjdCgpKQorICAgICAgICBXaWRnZXQ6OnNldEZyYW1l
UmVjdChyZWN0KTsKKworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOworCisjaWYgT1MoV0lORE9X
UykKKyAgICAvLyBPbiBXaW5kb3dzIGFsd2F5cyBjYWxsIHBsdWdpbiB0byBjaGFuZ2UgZ2VvbWV0
cnkuCisgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOworI2VsaWYgZGVmaW5lZChYUF9VTklYKQor
ICAgIC8vIE9uIFVuaXgsIG11bHRpcGxlIGNhbGxzIHRvIHNldE5QV2luZG93KCkgaW4gd2luZG93
ZWQgbW9kZSBjYXVzZXMgRmxhc2ggdG8gY3Jhc2gKKyAgICBpZiAobV9tb2RlID09IE5QX0ZVTEwg
fHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOworI2VuZGlm
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZnJhbWVSZWN0c0NoYW5nZWQoKQoreworICAgIHVwZGF0
ZVBsdWdpbldpZGdldCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmNsaXBSZWN0Q2hhbmdlZCgp
Cit7CisgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4gfHwgbV9pc1dpbmRv
d2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQcm90ZWN0IHRoZSBwbHVnLWluIGZyb20g
ZGVsZXRpb24gd2hpbGUgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50LgorICAgIFJlZlB0cjxQbHVnaW5W
aWV3PiBwcm90ZWN0KHRoaXMpOworCisgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAg
ICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsK
KyAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgIGhhbmRsZUtl
eWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7CisjaWYgZGVm
aW5lZChYUF9NQUNPU1gpCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkud2hlZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVs
RXZlbnQpCisgICAgICAgIGhhbmRsZVdoZWVsRXZlbnQoc3RhdGljX2Nhc3Q8V2hlZWxFdmVudCo+
KGV2ZW50KSk7CisjZW5kaWYKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5jb250ZXh0bWVudUV2ZW50KQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aGUgcGx1Zy1pbiBoYXMgaGFuZGxlZCBtb3VzZWRvd24g
ZXZlbnQgYnkgZGlzcGxheWluZyBhIGNvbnRleHQgbWVudSwgc28gd2UgbmV2ZXIgd2FudCBXZWJL
aXQgdG8gc2hvdyBhIGRlZmF1bHQgb25lLgorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuZm9jdXNvdXRFdmVudCkKKyAgICAgICAgaGFuZGxlRm9jdXNPdXRFdmVudCgpOwor
ICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZvY3VzaW5FdmVudCkK
KyAgICAgICAgaGFuZGxlRm9jdXNJbkV2ZW50KCk7CisjZW5kaWYKK30KKwordm9pZCBQbHVnaW5W
aWV3Ojppbml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9wbHVnaW4p
IHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVn
aW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5W
aWV3Ojppbml0KCk6IEluaXRpYWxpemluZyBwbHVnLWluICclcyciLCBtX3BsdWdpbi0+bmFtZSgp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgpKSB7CisgICAgICAg
IG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2Fk
UGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdGFydE9yQWRkVG9V
bnN0YXJ0ZWRMaXN0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RM
b2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6c3RhcnRP
ckFkZFRvVW5zdGFydGVkTGlzdCgpCit7CisgICAgaWYgKCFtX3BhcmVudEZyYW1lLT5wYWdlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIG9ubHkgZGVsYXkgc3RhcnRpbmcg
dGhlIHBsdWctaW4gaWYgd2UncmUgZ29pbmcgdG8ga2ljayBvZmYgdGhlIGxvYWQKKyAgICAvLyBv
dXJzZWx2ZXMuIE90aGVyd2lzZSwgdGhlIGxvYWRlciB3aWxsIHRyeSB0byBkZWxpdmVyIGRhdGEg
YmVmb3JlIHdlJ3ZlCisgICAgLy8gc3RhcnRlZCB0aGUgcGx1Zy1pbi4KKyAgICBpZiAoIW1fbG9h
ZE1hbnVhbGx5ICYmICFtX3BhcmVudEZyYW1lLT5wYWdlKCktPmNhblN0YXJ0TWVkaWEoKSkgewor
ICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIodGhpcyk7CisgICAgICAgIG1faXNXYWl0aW5nVG9TdGFydCA9IHRydWU7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBzdGFydCgpOworfQorCitib29sIFBsdWdp
blZpZXc6OnN0YXJ0KCkKK3sKKyAgICBpZiAobV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG1faXNXYWl0aW5nVG9TdGFydCA9IGZhbHNlOworCisgICAgUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkucmVnaXN0ZXJQbHVnaW4obV9pbnN0YW5jZSk7
CisKKyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVChtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIHsKKyAgICAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Cisg
ICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS51dGY4KCkuZGF0YSgp
LCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFt
VmFsdWVzLCBOVUxMKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAg
IExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcoMCk7CisgICAgfQorCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKSB7Cisg
ICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAg
UGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBsdWdpbiht
X2luc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faXNTdGFy
dGVkID0gdHJ1ZTsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgpICYmICFtX2xvYWRNYW51YWxs
eSkgeworICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1fdXJsKTsKKyAgICAgICAg
bG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7CisgICAgfQorCisgICAgbV9zdGF0dXMg
PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7CisKKyAgICBpZiAoIXBsYXRmb3JtU3Rh
cnQoKSkKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwor
CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6bWVkaWFDYW5TdGFydCgpCit7CisgICAgQVNTRVJUKCFtX2lzU3RhcnRlZCk7CisgICAg
aWYgKCFzdGFydCgpKQorICAgICAgICBwYXJlbnRGcmFtZSgpLT5sb2FkZXIoKS5jbGllbnQoKS5k
aXNwYXRjaERpZEZhaWxUb1N0YXJ0UGx1Z2luKHRoaXMpOworfQorCitQbHVnaW5WaWV3Ojp+UGx1
Z2luVmlldygpCit7CisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygp
Iik7CisKKyAgICBBU1NFUlQoIW1fbGlmZVN1cHBvcnRUaW1lci5pc0FjdGl2ZSgpKTsKKworICAg
IC8vIElmIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBwbHVnLWluLCB3ZSdsbCByZXR1cm4gZWFybHkg
aW4gb3VyIGNvbnN0cnVjdG9yLCBhbmQKKyAgICAvLyBtX2luc3RhbmNlIHdpbGwgYmUgMC4KKyAg
ICBpZiAobV9pbnN0YW5jZSkKKyAgICAgICAgaW5zdGFuY2VNYXAoKS5yZW1vdmUobV9pbnN0YW5j
ZSk7CisKKyAgICBpZiAobV9pc1dhaXRpbmdUb1N0YXJ0KQorICAgICAgICBtX3BhcmVudEZyYW1l
LT5kb2N1bWVudCgpLT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisKKyAgICBz
dG9wKCk7CisKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbU5hbWVzLCBtX3BhcmFtQ291bnQp
OworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtVmFsdWVzLCBtX3BhcmFtQ291bnQpOworCisg
ICAgcGxhdGZvcm1EZXN0cm95KCk7CisKKyAgICBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5jbGVh
bnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAgIGlmIChtX3BsdWdpbiAmJiAh
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4p
KSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnN0
b3AoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIExP
RyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c3RvcCgpOiBTdG9wcGluZyBwbHVnLWluICclcyciLCBt
X3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgSGFzaFNldDxSZWZQdHI8UGx1
Z2luU3RyZWFtPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7CisgICAgSGFzaFNldDxSZWZQdHI8UGx1
Z2luU3RyZWFtPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1zLmVuZCgpOworICAgIGZvciAoSGFz
aFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBpdCA9IHN0cmVhbXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5zdG9wKCk7CisgICAgICAgIGRp
c2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VSVChtX3N0cmVh
bXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVkID0gZmFsc2U7CisKKyAgICBKU0M6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZN
KCkpOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaWYgZGVmaW5lZChYUF9X
SU4pICYmICFQTEFURk9STShHVEspCisgICAgLy8gVW5zdWJjbGFzcyB0aGUgd2luZG93CisgICAg
aWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBXTkRQUk9DIGN1cnJlbnRXbmRQcm9jID0gKFdO
RFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBS
T0MpOworCisgICAgICAgIGlmIChjdXJyZW50V25kUHJvYyA9PSBQbHVnaW5WaWV3V25kUHJvYykK
KyAgICAgICAgICAgIFNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dM
UF9XTkRQUk9DLCAoTE9OR19QVFIpbV9wbHVnaW5XbmRQcm9jKTsKKyAgICB9CisjZW5kaWYgLy8g
IWRlZmluZWQoWFBfV0lOKSB8fCBQTEFURk9STShHVEspCisjZW5kaWYgLy8gRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisKKyNpZiAhZGVmaW5lZChYUF9NQUNPU1gpCisgICAgLy8gQ2xlYXIg
dGhlIHdpbmRvdworICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKworICAgIGlmIChtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93ICYmICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSkpIHsKKyAgICAg
ICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3
aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Cisg
ICAgfQorCisjaWZkZWYgWFBfVU5JWAorICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxOUFNldFdpbmRv
d0NhbGxiYWNrU3RydWN0Kj4obV9ucFdpbmRvdy53c19pbmZvKTsKKyAgICBtX25wV2luZG93Lndz
X2luZm8gPSAwOworI2VuZGlmCisKKyNlbmRpZiAvLyAhZGVmaW5lZChYUF9NQUNPU1gpCisKKyAg
ICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS51bnJlZ2lzdGVyUGx1Z2lu
KG1faW5zdGFuY2UpOworCisgICAgTlBTYXZlZERhdGEqIHNhdmVkRGF0YSA9IDA7CisgICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKKyAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRl
c3Ryb3kobV9pbnN0YW5jZSwgJnNhdmVkRGF0YSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7CisgICAgTE9HX05QRVJST1IobnBFcnIpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgaWYg
KHNhdmVkRGF0YSkgeworICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBzYXZlIHRoaXMgZGF0YSBp
bnN0ZWFkIG9mIGp1c3QgZGlzY2FyZGluZyBpdAorICAgICAgICBpZiAoc2F2ZWREYXRhLT5idWYp
CisgICAgICAgICAgICBOUE5fTWVtRnJlZShzYXZlZERhdGEtPmJ1Zik7CisgICAgICAgIE5QTl9N
ZW1GcmVlKHNhdmVkRGF0YSk7CisgICAgfQorI2VuZGlmCisKKyAgICBtX2luc3RhbmNlLT5wZGF0
YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2lu
VmlldyogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0gcGx1Z2luVmll
dzsKK30KKworUGx1Z2luVmlldyogUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZpZXcoKQorewor
ICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMgY2hhciogY3JlYXRl
VVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5nIGNzdHIgPSBzdHIu
dXRmOCgpOworICAgIGNvbnN0IHNpemVfdCBjc3RyTGVuZ3RoID0gY3N0ci5sZW5ndGgoKTsKKyAg
ICBjaGFyKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYXN0TWFsbG9jKGNzdHJM
ZW5ndGggKyAxKSk7CisKKyAgICBtZW1jcHkocmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ckxlbmd0
aCk7CisgICAgcmVzdWx0W2NzdHJMZW5ndGhdID0gJ1wwJzsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBkb24ndCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlzIG5vIGxvbmdlciBw
YXJ0IG9mIGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKKyAgICAvLyBkaXNwbGF5ZWQgdW5sZXNz
IHRoZSBsb2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4KKyAgICBjb25z
dCBTdHJpbmcmIHRhcmdldEZyYW1lTmFtZSA9IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5m
cmFtZU5hbWUoKTsKKyAgICBpZiAobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2Fk
ZXIoKSAhPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpICYm
ICh0YXJnZXRGcmFtZU5hbWUuaXNOdWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLmZpbmQo
dGFyZ2V0RnJhbWVOYW1lKSAhPSBtX3BhcmVudEZyYW1lKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VS
ZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZh
U2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVy
ZUluZGljYXRvcihyZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpID8gRGVmaW5pdGVseVByb2Nl
c3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKworICAg
IGlmIChqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICAvLyBpZiB0aGlzIGlzIG5vdCBhIHRh
cmdldGVkIHJlcXVlc3QsIGNyZWF0ZSBhIHN0cmVhbSBmb3IgaXQuIG90aGVyd2lzZSwKKyAgICAg
ICAgLy8ganVzdCBwYXNzIGl0IG9mZiB0byB0aGUgbG9hZGVyCisgICAgICAgIGlmICh0YXJnZXRG
cmFtZU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBz
dHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBtX3BhcmVudEZyYW1lLmdldCgpLCBy
ZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNl
bmROb3RpZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpLCBwbHVnaW4oKS0+cGx1Z2lu
RnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9wbHVnaW4tPnF1aXJrcygpKTsKKyAgICAgICAgICAgIG1f
c3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgICAgIHN0cmVhbS0+c3RhcnQoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgZnJhbWUgaXMgb3VyIGZy
YW1lLCB3ZSBjb3VsZCBkZXN0cm95IHRoZQorICAgICAgICAgICAgLy8gUGx1Z2luVmlldywgc28g
d2UgcHJvdGVjdCBpdC4gPHJkYXI6Ly9wcm9ibGVtLzY5OTEyNTE+CisgICAgICAgICAgICBSZWZQ
dHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICAgICAgRnJhbWVMb2FkUmVx
dWVzdCBmcmFtZVJlcXVlc3QobV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVzdC0+ZnJhbWVMb2Fk
UmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpKTsKKyAgICAgICAgICAgIGZyYW1lUmVxdWVzdC5z
ZXRGcmFtZU5hbWUodGFyZ2V0RnJhbWVOYW1lKTsKKyAgICAgICAgICAgIGZyYW1lUmVxdWVzdC5z
ZXRTaG91bGRDaGVja05ld1dpbmRvd1BvbGljeSh0cnVlKTsKKyAgICAgICAgICAgIG1fcGFyZW50
RnJhbWUtPmxvYWRlcigpLmxvYWQoZnJhbWVSZXF1ZXN0KTsKKworICAgICAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBzZW50IHdoZW4gdGhl
IGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgICAgICBpZiAocmVxdWVzdC0+
c2VuZE5vdGlmaWNhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3Vy
cmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgICAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAg
ICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICAgICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOwor
ICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgICAgICAgICAgICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJnZXRlZCBKYXZhU2Ny
aXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMg
dGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBzdXJl
IGluIDo6bG9hZC4KKyAgICBBU1NFUlQodGFyZ2V0RnJhbWVOYW1lLmlzRW1wdHkoKSB8fCBtX3Bh
cmVudEZyYW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUpID09IG1fcGFyZW50RnJhbWUp
OworICAgIAorICAgIC8vIEV4ZWN1dGluZyBhIHNjcmlwdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2
aWV3IHRvIGJlIGRlc3Ryb3llZCwgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0byBpdC4KKyAgICBS
ZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdG9yKHRoaXMpOworICAgIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlIHJlc3VsdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmV4ZWN1dGVTY3JpcHQoanNT
dHJpbmcsIHJlcXVlc3QtPnNob3VsZEFsbG93UG9wdXBzKCkpOworCisgICAgaWYgKHRhcmdldEZy
YW1lTmFtZS5pc051bGwoKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOworCisgICAg
ICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBDU3Ry
aW5nIGNzdHI7CisgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RyaW5nKHNjcmlwdFN0YXRlLCByZXN1
bHRTdHJpbmcpKQorICAgICAgICAgICAgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7CisKKyAg
ICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gc3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVhdGUo
dGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJl
c291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5v
dGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2lu
LT5xdWlya3MoKSk7CisgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgc3Ry
ZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXF1ZXN0VVJMLCBjc3RyKTsKKyAgICB9Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQoKQoreworICAgIEFTU0VSVCghbV9y
ZXF1ZXN0cy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9pc0phdmFTY3JpcHRQYXVzZWQpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+IHJlcXVlc3QgPSBXVEY6Om1vdmUo
bV9yZXF1ZXN0c1swXSk7CisgICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7CisgICAgCisgICAgLy8g
U2NoZWR1bGUgYSBuZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBzaW5j
ZSB0aGUgY2FsbCB0bworICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBjYXVzZSB0aGUgcGx1Z2lu
IHZpZXcgdG8gYmUgZGVsZXRlZC4KKyAgICBpZiAoIW1fcmVxdWVzdHMuaXNFbXB0eSgpKQorICAg
ICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBwZXJmb3JtUmVxdWVz
dChyZXF1ZXN0LmdldCgpKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzY2hlZHVsZVJlcXVlc3Qo
c3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+IHJlcXVlc3QpCit7CisgICAgbV9yZXF1ZXN0
cy5hcHBlbmQoV1RGOjptb3ZlKHJlcXVlc3QpKTsKKworICAgIGlmICghbV9pc0phdmFTY3JpcHRQ
YXVzZWQpCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworTlBF
cnJvciBQbHVnaW5WaWV3Ojpsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJl
cXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICBB
U1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0g
IkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkg
PT0gIlBPU1QiKTsKKworICAgIFVSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnVybCgpOworICAgIAorICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gTlBFUlJfSU5WQUxJRF9VUkw7CisKKyAgICAvLyBEb24ndCBhbGxvdyByZXF1ZXN0cyB0byBi
ZSBtYWRlIHdoZW4gdGhlIGRvY3VtZW50IGxvYWRlciBpcyBzdG9wcGluZyBhbGwgbG9hZGVycy4K
KyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuZG9j
dW1lbnRMb2FkZXIoKTsKKyAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPmlzU3RvcHBpbmcoKSkK
KyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBjb25zdCBTdHJpbmcm
IHRhcmdldEZyYW1lTmFtZSA9IGZyYW1lTG9hZFJlcXVlc3QuZnJhbWVOYW1lKCk7CisgICAgU3Ry
aW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVybCk7CisKKyAgICBp
ZiAoIWpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgorICAg
ICAgICBpZiAoIW1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFi
b3V0VG9FeGVjdXRlU2NyaXB0KSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOworCisgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJl
cXVlc3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4u
CisgICAgICAgIGlmICghdGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpICYmIG1fcGFyZW50RnJhbWUt
PnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJlbnRGcmFtZSkKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgIH0gZWxzZSBpZiAoIW1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkRpc3BsYXkodXJsKSkKKyAg
ICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBzY2hlZHVsZVJlcXVlc3Qo
c3RkOjptYWtlX3VuaXF1ZTxQbHVnaW5SZXF1ZXN0PihmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90
aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBhcmVQb3B1cHNBbGxvd2VkKCkpKTsKKworICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKK30KKworc3RhdGljIFVSTCBtYWtlVVJMKGNvbnN0IFVSTCYgYmFz
ZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7CisgICAgU3RyaW5nIHVybFN0
cmluZyA9IHJlbGF0aXZlVVJMU3RyaW5nOworCisgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3Rl
cnMuCisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXG4nLCAiIik7CisgICAgdXJs
U3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXHInLCAiIik7CisKKyAgICByZXR1cm4gVVJMKGJh
c2VVUkwsIHVybFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJMTm90aWZ5
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQor
eworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3BhcmVudEZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0
RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwo
KSwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVlLCBub3Rp
ZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRVUkwoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRS
ZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOworCisg
ICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1l
TG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpwb3N0VVJM
Tm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4s
IGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAg
cmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRh
LCB0cnVlLCB0cnVlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpwb3N0VVJMKGNvbnN0IGNo
YXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1
ZiwgTlBCb29sIGZpbGUpCit7CisgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFk
ZXJzIHRvIGJlIHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCisg
ICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAwLCBmYWxz
ZSwgZmlsZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6bmV3U3RyZWFtKE5QTUlNRVR5cGUs
IGNvbnN0IGNoYXIqIC8qIHRhcmdldCAqLywgTlBTdHJlYW0qKikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7Cit9CisKK2ludDMyX3QgUGx1Z2luVmlldzo6d3JpdGUoTlBTdHJlYW0qLCBpbnQzMl90IC8q
IGxlbiAqLywgdm9pZCogLyogYnVmZmVyICovKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJyb3IgUGx1Z2luVmll
dzo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7Cisg
ICAgaWYgKCFzdHJlYW0gfHwgUGx1Z2luU3RyZWFtOjpvd25lckZvclN0cmVhbShzdHJlYW0pICE9
IG1faW5zdGFuY2UpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9S
OworCisgICAgUGx1Z2luU3RyZWFtKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8UGx1Z2lu
U3RyZWFtKj4oc3RyZWFtLT5uZGF0YSk7CisgICAgYnJvd3NlclN0cmVhbS0+Y2FuY2VsQW5kRGVz
dHJveVN0cmVhbShyZWFzb24pOworCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCit2
b2lkIFBsdWdpblZpZXc6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIGlmIChQ
YWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUo
KS5zZXRTdGF0dXNiYXJUZXh0KG1fcGFyZW50RnJhbWUuZ2V0KCksIFN0cmluZzo6ZnJvbVVURjgo
bWVzc2FnZSkpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlKE5QUFZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6
OnNldFZhbHVlKCVzKTogIiwgcHJldHR5TmFtZUZvck5QUFZhcmlhYmxlKHZhcmlhYmxlLCB2YWx1
ZSkuZGF0YSgpKTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QUFZwbHVn
aW5XaW5kb3dCb29sOgorICAgICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsKKyAgICAgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOworICAgIGNhc2UgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbDoK
KyAgICAgICAgbV9pc1RyYW5zcGFyZW50ID0gdmFsdWU7CisgICAgICAgIHJldHVybiBOUEVSUl9O
T19FUlJPUjsKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICBjYXNlIE5QUFZwbHVnaW5EcmF3
aW5nTW9kZWw6IHsKKyAgICAgICAgLy8gQ2FuIG9ubHkgc2V0IGRyYXdpbmcgbW9kZWwgaW5zaWRl
IE5QUF9OZXcoKQorICAgICAgICBpZiAodGhpcyAhPSBjdXJyZW50UGx1Z2luVmlldygpKQorICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICBOUERyYXdpbmdN
b2RlbCBuZXdEcmF3aW5nTW9kZWwgPSBOUERyYXdpbmdNb2RlbCh1aW50cHRyX3QodmFsdWUpKTsK
KyAgICAgICAgc3dpdGNoIChuZXdEcmF3aW5nTW9kZWwpIHsKKyAgICAgICAgY2FzZSBOUERyYXdp
bmdNb2RlbENvcmVHcmFwaGljczoKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb246CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBhc2tlZCBmb3IgdW5zdXBwb3J0
ZWQgZHJhd2luZyBtb2RlbDogJXMiLAorICAgICAgICAgICAgICAgICAgICBwcmV0dHlOYW1lRm9y
RHJhd2luZ01vZGVsKG5ld0RyYXdpbmdNb2RlbCkpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYXNlIE5QUFZwbHVnaW5F
dmVudE1vZGVsOiB7CisgICAgICAgIC8vIENhbiBvbmx5IHNldCBldmVudCBtb2RlbCBpbnNpZGUg
TlBQX05ldygpCisgICAgICAgIGlmICh0aGlzICE9IGN1cnJlbnRQbHVnaW5WaWV3KCkpCisgICAg
ICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgIE5QRXZlbnRNb2Rl
bCBuZXdFdmVudE1vZGVsID0gTlBFdmVudE1vZGVsKHVpbnRwdHJfdCh2YWx1ZSkpOworICAgICAg
ICBzd2l0Y2ggKG5ld0V2ZW50TW9kZWwpIHsKKyAgICAgICAgY2FzZSBOUEV2ZW50TW9kZWxDb2Nv
YToKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luIGFza2VkIGZvciB1bnN1cHBvcnRlZCBl
dmVudCBtb2RlbDogJXMiLAorICAgICAgICAgICAgICAgICAgICBwcmV0dHlOYW1lRm9yRXZlbnRN
b2RlbChuZXdFdmVudE1vZGVsKSk7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBkZWZpbmVkKFhQX01BQ09TWCkKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlk
YXRlVGltZXJGaXJlZCgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW52YWxp
ZFJlY3RzLnNpemUoKTsgaSsrKQorICAgICAgICBpbnZhbGlkYXRlUmVjdChtX2ludmFsaWRSZWN0
c1tpXSk7CisgICAgbV9pbnZhbGlkUmVjdHMuY2xlYXIoKTsKK30KKworCit2b2lkIFBsdWdpblZp
ZXc6OnB1c2hQb3B1cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0ZSkKK3sKKyAgICBtX3BvcHVwU3Rh
dGVTdGFjay5hcHBlbmQoc3RhdGUpOworfQorIAordm9pZCBQbHVnaW5WaWV3Ojpwb3BQb3B1cHNF
bmFibGVkU3RhdGUoKQoreworICAgIG1fcG9wdXBTdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKK30K
KworYm9vbCBQbHVnaW5WaWV3OjphcmVQb3B1cHNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcG9wdXBTdGF0ZVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1fcG9wdXBTdGF0
ZVN0YWNrLmxhc3QoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpzZXRKYXZhU2NyaXB0UGF1c2VkKGJvb2wgcGF1c2VkKQoreworICAgIGlmIChtX2lzSmF2YVNj
cmlwdFBhdXNlZCA9PSBwYXVzZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzSmF2YVNjcmlw
dFBhdXNlZCA9IHBhdXNlZDsKKworICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKyAgICAg
ICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAgIGVsc2UgaWYgKCFtX3JlcXVlc3RzLmlzRW1w
dHkoKSkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitOUE9iamVjdCogUGx1Z2luVmlldzo6bnBPYmpl
Y3QoKQoreworICAgIE5QT2JqZWN0KiBvYmplY3QgPSAwOworCisgICAgaWYgKCFtX2lzU3RhcnRl
ZCB8fCAhbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBPbiBXaW5kb3dzLCBjYWxsaW5nIEphdmEncyBOUE5f
R2V0VmFsdWUgY2FuIGFsbG93IHRoZSBtZXNzYWdlIGxvb3AgdG8KKyAgICAvLyBydW4sIGFsbG93
aW5nIGxvYWRpbmcgdG8gdGFrZSBwbGFjZSBvciBKYXZhU2NyaXB0IHRvIHJ1bi4gUHJvdGVjdCB0
aGUKKyAgICAvLyBQbHVnaW5WaWV3IGZyb20gZGVzdHJ1Y3Rpb24uIDxyZGFyOi8vcHJvYmxlbS82
OTc4ODA0PgorICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KHRoaXMpOworCisgICAgTlBF
cnJvciBucEVycjsKKyAgICB7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
cyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2lu
KHRydWUpOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1
ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKKyAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19F
UlJPUikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorI2VuZGlm
CisKK1Bhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IFBsdWdpblZpZXc6OmJpbmRp
bmdJbnN0YW5jZSgpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlBP
YmplY3QqIG9iamVjdCA9IG5wT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKGhhc09uZVJlZigpKSB7CisgICAgICAgIC8vIFRoZSByZW5kZXJl
ciBmb3IgdGhlIFBsdWdpblZpZXcgd2FzIGRlc3Ryb3llZCBkdXJpbmcgdGhlIGFib3ZlIGNhbGws
IGFuZAorICAgICAgICAvLyB0aGUgUGx1Z2luVmlldyB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuIHRo
aXMgZnVuY3Rpb24gcmV0dXJucywgc28gd2UKKyAgICAgICAgLy8gcmV0dXJuIG51bGwuCisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0PiByb290ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY3JlYXRlUm9vdE9iamVjdCh0aGlz
KTsKKyAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGluc3RhbmNlID0gSlNDOjpC
aW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUob2JqZWN0LCByb290LnJlbGVhc2UoKSk7CisKKyAg
ICBfTlBOX1JlbGVhc2VPYmplY3Qob2JqZWN0KTsKKworICAgIHJldHVybiBpbnN0YW5jZS5yZWxl
YXNlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6ZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW0qIHN0cmVhbSkKK3sKKyAgICBBU1NFUlQo
bV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbSkpOworCisgICAgbV9zdHJlYW1zLnJlbW92ZShzdHJl
YW0pOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sK
KyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKwor
ICAgIHVuc2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBwYXJh
bUNvdW50ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioq
PihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJhbVZhbHVlcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXpl
KSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
IGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3ds
ZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UocGFyYW1OYW1lc1tpXSwgIndpbmRv
d2xlc3N2aWRlbyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHBhcmFt
TmFtZXNbaV0gPT0gInBsdWdpbnNwYWdlIikKKyAgICAgICAgICAgIG1fcGx1Z2luc1BhZ2UgPSBw
YXJhbVZhbHVlc1tpXTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1Db3VudF0gPSBjcmVh
dGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFtVmFsdWVzW3BhcmFt
Q291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisKKyAgICAgICAgcGFy
YW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291bnQ7Cit9CisK
K1BsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4sIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50
LCBjb25zdCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BhcmVudEZyYW1lKHBhcmVudEZyYW1lKQorICAgICwg
bV9wbHVnaW4ocGx1Z2luKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX2lzU3Rh
cnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1
c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKCp0aGlzLCAmUGx1Z2lu
Vmlldzo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAgLCBtX2ludmFsaWRhdGVUaW1lcigqdGhpcywg
JlBsdWdpblZpZXc6OmludmFsaWRhdGVUaW1lckZpcmVkKQorICAgICwgbV9wb3BQb3B1cHNTdGF0
ZVRpbWVyKCp0aGlzLCAmUGx1Z2luVmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKQorICAg
ICwgbV9saWZlU3VwcG9ydFRpbWVyKCp0aGlzLCAmUGx1Z2luVmlldzo6bGlmZVN1cHBvcnRUaW1l
ckZpcmVkKQorICAgICwgbV9tb2RlKGxvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBOUF9FTUJFRCkK
KyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZhbHVlcygwKQorICAgICwgbV9t
aW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIG1faW5zdGFuY2UoMCkKKyNpZiBkZWZpbmVkKFhQX01B
Q09TWCkKKyAgICAsIG1faXNXaW5kb3dlZChmYWxzZSkKKyAgICAsIG1fdXBkYXRlZENvY29hVGV4
dElucHV0UmVxdWVzdGVkKGZhbHNlKQorICAgICwgbV9rZXlEb3duU2VudChmYWxzZSkKKyAgICAs
IG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyKDApCisjZWxzZQorICAgICwgbV9pc1dpbmRvd2VkKHRy
dWUpCisjZW5kaWYKKyAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKKyAgICAsIG1faGF2ZUlu
aXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9pc1dhaXRpbmdUb1N0YXJ0KGZhbHNlKQorI2lmIGRl
ZmluZWQoWFBfVU5JWCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFsc2UpCisjZW5kaWYKKyNpZiBP
UyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAsIG1fcGx1Z2lu
V25kUHJvYygwKQorICAgICwgbV9sYXN0TWVzc2FnZSgwKQorICAgICwgbV9pc0NhbGxpbmdQbHVn
aW5XbmRQcm9jKGZhbHNlKQorICAgICwgbV93bVByaW50SERDKDApCisgICAgLCBtX2hhdmVVcGRh
dGVkUGx1Z2luV2lkZ2V0KGZhbHNlKQorI2VuZGlmCisjaWYgUExBVEZPUk0oRUZMKQorICAgICwg
bV93aW5kb3coMCkKKyNlbmRpZgorI2lmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgICwgbV9jb250
ZXh0UmVmKDApCisjZW5kaWYKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2UodHJ1ZSkKKyAg
ICAsIG1fZHJhd2FibGUoMCkKKyAgICAsIG1fdmlzdWFsKDApCisgICAgLCBtX2NvbG9ybWFwKDAp
CisgICAgLCBtX3BsdWdpbkRpc3BsYXkoMCkKKyNlbmRpZgorICAgICwgbV9sb2FkTWFudWFsbHko
bG9hZE1hbnVhbGx5KQorICAgICwgbV9tYW51YWxTdHJlYW0oMCkKKyAgICAsIG1faXNKYXZhU2Ny
aXB0UGF1c2VkKGZhbHNlKQorICAgICwgbV9oYXZlQ2FsbGVkU2V0V2luZG93KGZhbHNlKQorewor
ICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5O
b3RGaW5kUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9pbnN0YW5jZSA9
ICZtX2luc3RhbmNlU3RydWN0OworICAgIG1faW5zdGFuY2UtPm5kYXRhID0gdGhpczsKKyAgICBt
X2luc3RhbmNlLT5wZGF0YSA9IDA7CisKKyAgICBpbnN0YW5jZU1hcCgpLmFkZChtX2luc3RhbmNl
LCB0aGlzKTsKKworICAgIHNldFBhcmFtZXRlcnMocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwor
CisgICAgbWVtc2V0KCZtX25wV2luZG93LCAwLCBzaXplb2YobV9ucFdpbmRvdykpOworI2lmIGRl
ZmluZWQoWFBfTUFDT1NYKQorICAgIG1lbXNldCgmbV9ucENnQ29udGV4dCwgMCwgc2l6ZW9mKG1f
bnBDZ0NvbnRleHQpKTsKKyNlbmRpZgorCisgICAgcmVzaXplKHNpemUpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OmZvY3VzUGx1Z2luRWxlbWVudCgpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBt
X3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLnNl
dEZvY3VzZWRFbGVtZW50KG1fZWxlbWVudCwgbV9wYXJlbnRGcmFtZSk7CisgICAgZWxzZQorICAg
ICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkRWxlbWVudChtX2VsZW1l
bnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9s
b2FkTWFudWFsbHkpOworICAgIEFTU0VSVCghbV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51
YWxTdHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBtX3BhcmVudEZyYW1lLmdldCgp
LCBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0
KCksIGZhbHNlLCAwLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9wbHVn
aW4tPnF1aXJrcygpKTsKKyAgICBtX21hbnVhbFN0cmVhbS0+c2V0TG9hZE1hbnVhbGx5KHRydWUp
OworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVSZXNwb25zZSgwLCByZXNwb25zZSk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKK3sKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3Vj
Y2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9sb2FkTWFudWFsbHkp
OworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisgICAgCisgICAgbV9tYW51YWxTdHJlYW0t
PmRpZFJlY2VpdmVEYXRhKDAsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xv
YWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZE1h
bnVhbGx5KTsKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJl
YW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZGlkRmFpbChj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
bV9sb2FkTWFudWFsbHkpOworICAgIAorICAgIGlmIChtX21hbnVhbFN0cmVhbSkKKyAgICAgICAg
bV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOworfQorCit2b2lkIFBsdWdpblZpZXc6
OnNldENhbGxpbmdQbHVnaW4oYm9vbCBiKSBjb25zdAoreworICAgIGlmICghbV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrSGFzTW9kYWxNZXNzYWdlTG9vcCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChiKQorICAgICAgICArK3NfY2FsbGluZ1BsdWdpbjsKKyAgICBl
bHNlCisgICAgICAgIC0tc19jYWxsaW5nUGx1Z2luOworCisgICAgQVNTRVJUKHNfY2FsbGluZ1Bs
dWdpbiA+PSAwKTsKK30KKworYm9vbCBQbHVnaW5WaWV3Ojppc0NhbGxpbmdQbHVnaW4oKQorewor
ICAgIHJldHVybiBzX2NhbGxpbmdQbHVnaW4gPiAwOworfQorCitQYXNzUmVmUHRyPFBsdWdpblZp
ZXc+IFBsdWdpblZpZXc6OmNyZWF0ZShGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUm
IHNpemUsIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZh
bHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCit7CisgICAg
Ly8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZvciB0aGlzIE1JTUUgdHlwZSwgZmluZFBs
dWdpbiB3aWxsIHNlYXJjaCBmb3IKKyAgICAvLyBhIHBsdWdpbiBieSB0aGUgZmlsZSBleHRlbnNp
b24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBwYXNzIGEgbXV0YWJsZSBTdHJpbmcKKyAg
ICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAgUGx1Z2luUGFja2FnZSogcGx1
Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmws
IG1pbWVUeXBlQ29weSk7CisKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVz
aGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIGlmICghcGx1Z2luICYm
IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKSkgeworICAgICAg
ICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICAgICAgcGx1Z2luID0gUGx1Z2luRGF0YWJh
c2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5WaWV3KHBhcmVudEZyYW1lLCBz
aXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVU
eXBlQ29weSwgbG9hZE1hbnVhbGx5KSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZnJlZVN0cmlu
Z0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmlu
Z0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJl
ZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtM
aW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBidWZmZXIuc2l6
ZSgpID4gMCAmJiBidWZmZXJbMF0gPT0gJ1xuJzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9j
YXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQorewor
ICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBsZW5n
dGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aCAtIDQ7IGkrKykgeworICAgICAgICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0LiBJdCBzZW5kcyAi
XG5cbiIuCisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVzW2kgKyAxXSA9PSAn
XG4nKQorICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICAKKyAgICAgICAgLy8gUmV0
dXJucyB0aGUgcG9zaXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlmIGl0IGlzIHRoZSBm
aXJzdCBsaW5lLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0g
PT0gJ1xuJykgeworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgaWYgKGkgPT0gMikK
KyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ld
ID09ICdcbicpCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRGlyZWN0b3IuIEl0IHNl
bmRzICJcclxuXG4iICgzODgwMzg3KS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7Cisg
ICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAn
XG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIEZsYXNoLiBJdCBzZW5kcyAiXHJc
blxyXG4iICgzNzU4MTEzKS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hh
ciogZmluZEVPTChjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8v
IEFjY29yZGluZyB0byB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uIEVPTCBpcyBkZWZpbmVkIGFzCisg
ICAgLy8gYSBDUkxGIHBhaXIuIFVuZm9ydHVuYXRlbHksIHNvbWUgc2VydmVycyB3aWxsIHVzZSBM
RgorICAgIC8vIGluc3RlYWQuIFdvcnNlIHlldCwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIGEgY29t
YmluYXRpb24KKyAgICAvLyBvZiBib3RoIChlLmcuIDxoZWFkZXI+Q1JMRkxGPGJvZHk+KSwgc28g
ZmluZEVPTCBuZWVkcworICAgIC8vIHRvIGJlIG1vcmUgZm9yZ2l2aW5nLiBJdCB3aWxsIG5vdyBh
Y2NlcHQgQ1JMRiwgTEYgb3IKKyAgICAvLyBDUi4KKyAgICAvLworICAgIC8vIEl0IHJldHVybnMg
TlVMTCBpZiBFT0xGIGlzIG5vdCBmb3VuZCBvciBpdCB3aWxsIHJldHVybgorICAgIC8vIGEgcG9p
bnRlciB0byB0aGUgZmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVyLgorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xu
JykKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIGlmIChieXRlc1tpXSA9
PSAnXHInKSB7CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgc3Bhbm5pbmcgYnVmZmVy
IGJvdW5kcworICAgICAgICAgICAgLy8gKENSTEYgaXMgYWNyb3NzIHJlYWRzKS4gSWYgc28sIHdh
aXQgZm9yCisgICAgICAgICAgICAvLyBuZXh0IHJlYWQuCisgICAgICAgICAgICBpZiAoaSArIDEg
PT0gbGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByZXR1cm4g
Ynl0ZXMgKyBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBpbmxpbmUgU3RyaW5nIGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAg
U3RyaW5nIHJlc3VsdDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0
aCgpOyBpKyspIHsKKyAgICAgICAgVUNoYXIgYzsKKworICAgICAgICBpZiAoY2FwaXRhbGl6ZUNo
YXJhY3RlciAmJiBuYW1lW2ldID49ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykKKyAgICAgICAgICAg
IGMgPSB0b0FTQ0lJVXBwZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXpl
Q2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAg
ICAgYyA9IHRvQVNDSUlMb3dlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YyA9IG5hbWVbaV07CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAgICAg
Y2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNh
cGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMpOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhlYWRl
ck1hcCBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEo
KTsKKyAgICBjb25zdCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRUUEhl
YWRlck1hcCBoZWFkZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2Un
cmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5l
cworICAgIHdoaWxlICgoZW9sID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogbGluZSA9IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAt
IGJ5dGVzOworICAgICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVy
IGFmdGVyIHRoZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAgIGJ5
dGVzID0gZW9sICsgMTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0g
J1xuJykpCisgICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3Qg
cmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGlu
ZSk7CisgICAgICAgIGlmIChsaW5lTGVuZ3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFuayBs
aW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBlbHNlIGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAgICAg
ICAgICAgLy8gQ29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAg
IGlmIChsYXN0S2V5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhl
YWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGlu
dWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3Vy
cmVudFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBT
dHJpbmcgbmV3VmFsdWUobGluZSwgbGluZUxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBoZWFk
ZXJGaWVsZHMuc2V0KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJyYW5kIG5ldyBoZWFkZXIK
KyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAgICAgICAgZm9yIChjb2xvbiA9
IGxpbmU7ICpjb2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAg
ICAgICAgICAgLy8gZW1wdHkgbG9vcAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNv
bG9uID09IGVvbCkgCisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3Jl
IGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0YWxpemVSRkM4MjJIZWFkZXJG
aWVsZE5hbWUoU3RyaW5nKGxpbmUsIGNvbG9uIC0gbGluZSkpOworICAgICAgICAgICAgICAgIFN0
cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoY29sb24rKzsgY29sb24gIT0gZW9s
OyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqY29sb24gIT0gJyAnICYmICpj
b2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpCisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IFN0cmluZyhjb2xvbiwgZW9sIC0gY29sb24pOworCisgICAgICAgICAgICAg
ICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IG9sZFZhbHVlICsgIiwgIiArIHZhbHVlOworCisgICAgICAgICAgICAgICAgaGVhZGVyRmll
bGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6Omhh
bmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxl
biwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2Vu
ZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpCit7CisgICAgaWYgKCF1cmwgfHwgIWxl
biB8fCAhYnVmKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKworICAgIEZy
YW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwor
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYgKGZpbGUpIHsKKyAgICAgICAg
TlBFcnJvciByZWFkUmVzdWx0ID0gaGFuZGxlUG9zdFJlYWRGaWxlKGJ1ZmZlciwgbGVuLCBidWYp
OworICAgICAgICBpZihyZWFkUmVzdWx0ICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICAgICAg
cmV0dXJuIHJlYWRSZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShs
ZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOworICAgIH0KKwor
ICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9zdERh
dGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFsbG93SGVhZGVycykgeworICAg
ICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAgICAgICBwb3N0
RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShi
dWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhl
IGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAg
IGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRpb24p
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpIC0g
bG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRv
IHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAorICAgICAgICAg
ICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2ls
bCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRydW5j
YXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAgICAgICAgIFN0
cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldChIVFRQSGVhZGVyTmFtZTo6Q29u
dGVudExlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNOdWxs
KCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29udGVudExlbmd0aC50
b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5y
ZW1vdmUoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpOworCisgICAgICAgICAgICAgICAg
cG9zdERhdGEgKz0gbG9jYXRpb247CisgICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBk
YXRhTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX3BhcmVu
dEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOworICAgIGZyYW1lTG9hZFJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEhlYWRlckZpZWxkcyhXVEY6Om1vdmUoaGVhZGVy
RmllbGRzKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQ
Qm9keShGb3JtRGF0YTo6Y3JlYXRlKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0aCkpOworICAgIGZy
YW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisKKyAgICByZXR1cm4gbG9hZChm
cmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBpZiAoIWlzVmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKCFtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICBh
dXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKm1fZWxlbWVudC0+cmVuZGVyZXIo
KSk7CisgICAgCisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OworICAgIGRpcnR5UmVjdC5t
b3ZlKHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBhZGRpbmdMZWZ0KCksIHJlbmRl
cmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGluZ1RvcCgpKTsKKyAgICByZW5kZXJlci5y
ZXBhaW50UmVjdGFuZ2xlKGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnRN
aXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gbnVsbFBsdWdpbkltYWdlOworICAg
IGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxsUGx1Z2luSW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKKworICAgIEludFJlY3QgaW1hZ2VS
ZWN0KGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpLCBudWxsUGx1Z2luSW1hZ2UtPndp
ZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0KCkpOworCisgICAgaW50IHhPZmZzZXQgPSAo
ZnJhbWVSZWN0KCkud2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAvIDI7CisgICAgaW50IHlP
ZmZzZXQgPSAoZnJhbWVSZWN0KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8gMjsK
KworICAgIGltYWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisgICAgaWYgKCFyZWN0
LmludGVyc2VjdHMoaW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+
c2F2ZSgpOworICAgIGNvbnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7CisgICAgY29udGV4
dC0+ZHJhd0ltYWdlKG51bGxQbHVnaW5JbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwg
aW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKK30KKworc3Rh
dGljIGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKCIKKyNpZiBk
ZWZpbmVkKFhQX01BQ09TWCkKKyAgICAgICAgIk1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7
IgorI2VsaWYgZGVmaW5lZChYUF9XSU4pCisgICAgICAgICJXaW5kb3dzOyBVOyBXaW5kb3dzIE5U
IDUuMTsiCisjZWxpZiBkZWZpbmVkKFhQX1VOSVgpCisvLyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEg
cGx1Z2lucyBpbiBNYWMuCisjaWYgT1MoREFSV0lOKSAmJiBQTEFURk9STShHVEspCisgICAgIlgx
MTsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2Vsc2UKKyAgICAiWDExOyBVOyBMaW51eCBpNjg2OyIK
KyNlbmRpZgorI2VuZGlmCisgICAgICAgICIgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAx
MCBGaXJlZm94LzIuMCI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDaHJvbWVVc2VyQWdl
bnQgPSAiTW96aWxsYS81LjAgKCIKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAiTWFjaW50
b3NoOyBVOyBJbnRlbCBNYWMgT1MgWDsiCisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICAiV2lu
ZG93czsgVTsgV2luZG93cyBOVCA1LjE7IgorI2VsaWYgZGVmaW5lZChYUF9VTklYKQorICAgIC8v
IFRoZSBHdGsgcG9ydCB1c2VzIFgxMSBwbHVnaW5zIGluIE1hYy4KKyNpZiBPUyhEQVJXSU4pICYm
IFBMQVRGT1JNKEdUSykKKyAgICAiWDExOyBVOyBJbnRlbCBNYWMgT1MgWDsiCisjZWxzZQorICAg
ICJYMTE7IFU7IExpbnV4IGk2ODY7IgorI2VuZGlmCisjZW5kaWYKKyAgICAiIEFwcGxlV2ViS2l0
LzUzNC4zNCAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xOS4wLjEwNTUuMSBTYWZhcmkvNTM0
LjM0IjsKKworY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkKK3sKKyAgICBpZiAo
bV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFn
ZW50KSkKKyAgICAgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7CisgICAgZWxzZSBpZiAobV9w
bHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNDaHJvbWVVc2VyQWdlbnQp
KQorICAgICAgICByZXR1cm4gQ2hyb21lVXNlckFnZW50OworICAgIGlmIChtX3VzZXJBZ2VudC5p
c051bGwoKSkKKyAgICAgICAgbV91c2VyQWdlbnQgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS51
c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7
Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK2NvbnN0IGNoYXIqIFBsdWdp
blZpZXc6OnVzZXJBZ2VudFN0YXRpYygpCit7CisgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7
Cit9CisjZW5kaWYKKworCit2b2lkIFBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJlZCgp
Cit7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjprZWVwQWxpdmUoKQorewor
ICAgIGlmIChtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcmVmKCk7CisgICAgbV9saWZlU3VwcG9ydFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30K
KworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQordm9pZCBQbHVnaW5WaWV3OjprZWVw
QWxpdmUoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBpbnN0YW5jZU1h
cCgpLmdldChpbnN0YW5jZSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisKKyAg
ICB2aWV3LT5rZWVwQWxpdmUoKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0
YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgTE9HKFBsdWdp
bnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyglcykiLCBwcmV0dHlOYW1lRm9yTlBOVmFy
aWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBOUEVycm9yIHJlc3VsdDsKKyAgICBpZiAo
cGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUsICZyZXN1bHQpKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisK
K05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQq
IHZhbHVlKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWUoJXMpIiwg
cHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOworCisgICAgTlBFcnJv
ciByZXN1bHQ7CisgICAgaWYgKHBsYXRmb3JtR2V0VmFsdWUodmFyaWFibGUsIHZhbHVlLCAmcmVz
dWx0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChwbGF0Zm9ybUdldFZhbHVl
U3RhdGljKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6
IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9i
amVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisK
KyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBk
ZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25w
cnVudGltZS5odG1sPgorICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAg
ICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lk
KiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0Owor
CisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZQ
bHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2Vk
KQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBP
YmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgaWYgKG1fZWxlbWVudC0+
aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykg
fHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICBwbHVnaW5T
Y3JpcHRPYmplY3QgPSBtX2VsZW1lbnQtPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0
dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTog
PGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgor
ICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5P
YmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiop
dmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZwcml2YXRlTW9kZUJvb2w6
IHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKTsKKyAgICAgICAg
aWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAg
ICAgICooKE5QQm9vbCopdmFsdWUpID0gcGFnZS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKTsKKyAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKworc3RhdGljIEZyYW1l
KiBnZXRGcmFtZShGcmFtZSogcGFyZW50RnJhbWUsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAg
aWYgKHBhcmVudEZyYW1lKQorICAgICAgICByZXR1cm4gcGFyZW50RnJhbWU7CisgICAgCisgICAg
cmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKK30KKworTlBFcnJvciBQbHVnaW5W
aWV3OjpnZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciog
dXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCit7CisgICAgTE9HKFBsdWdpbnMsICJQ
bHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCglcykiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFi
bGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBOUEVycm9yIHJlc3VsdCA9IE5QRVJSX05PX0VS
Uk9SOworCisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVVJMVkNvb2tpZTog
eworICAgICAgICBVUkwgdShtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVy
bCk7CisgICAgICAgIGlmICh1LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgRnJhbWUqIGZyYW1l
ID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChm
cmFtZSkgeworICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0gY29va2ll
cyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSkudXRmOCgpOworICAgICAgICAgICAgICAgIGlmICghY29v
a2llU3RyLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBzaXplID0g
Y29va2llU3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNf
Y2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHNpemUrMSkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoKnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAwLCBz
aXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCp2YWx1ZSwgY29va2llU3Ry
LmRhdGEoKSwgc2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKmxlbiA9IHNpemU7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfT1VUX09GX01F
TU9SWV9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfSU5WQUxJRF9VUkw7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIE5QTlVSTFZQcm94eTogeworICAgICAgICBVUkwgdShtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCk7CisgICAgICAgIGlmICh1Lmlz
VmFsaWQoKSkgeworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50RnJh
bWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEZyYW1lTG9hZGVyKiBmcmFtZUxv
YWRlciA9IGZyYW1lID8gJmZyYW1lLT5sb2FkZXIoKSA6IDA7CisgICAgICAgICAgICBjb25zdCBO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IGZyYW1lTG9hZGVyID8gZnJhbWVMb2FkZXItPm5l
dHdvcmtpbmdDb250ZXh0KCkgOiAwOworICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBwcm94eVN0
ciA9IHRvU3RyaW5nKHByb3h5U2VydmVyc0ZvclVSTCh1LCBjb250ZXh0KSkudXRmOCgpOworICAg
ICAgICAgICAgaWYgKCFwcm94eVN0ci5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0
IGludCBzaXplID0gcHJveHlTdHIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgKnZhbHVlID0g
c3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoKnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldCgqdmFsdWUsIDAsIHNp
emUrMSk7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIHByb3h5U3RyLmRhdGEo
KSwgc2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICpsZW4gPSBzaXplOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9SOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURf
VVJMOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmVzdWx0
ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3
OjpnZXRWYWx1ZUZvclVSTDogJXMiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFi
bGUpLmRhdGEoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKKworTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJs
ZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3Qg
bGVuKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoJXMp
IiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOworCisgICAg
TlBFcnJvciByZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKworICAgIHN3aXRjaCAodmFyaWFibGUp
IHsKKyAgICBjYXNlIE5QTlVSTFZDb29raWU6IHsKKyAgICAgICAgVVJMIHUobV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOworICAgICAgICBpZiAodS5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIgPSBTdHJpbmc6OmZyb21VVEY4
KHZhbHVlLCBsZW4pOworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50
RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChmcmFtZSAmJiAhY29va2llU3Ry
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzZXRDb29raWVzKGZyYW1lLT5kb2N1bWVudCgp
LCB1LCBjb29raWVTdHIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IE5Q
RVJSX0lOVkFMSURfVVJMOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOUE5VUkxW
UHJveHk6CisgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwo
JXMpOiBQbHVnaW5zIGFyZSBOT1QgYWxsb3dlZCB0byBzZXQgcHJveHkgaW5mb3JtYXRpb24uIiwg
cHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOworICAgICAgICBy
ZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMOiAlcyIs
IHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKKyAgICAgICAg
cmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRBdXRoZW50aWNh
dGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3Qg
cG9ydCwgY29uc3QgY2hhciogLyogc2NoZW1lICovLCBjb25zdCBjaGFyKiAvKiByZWFsbSAqLywg
Y2hhcioqICAvKiB1c2VybmFtZSAqLywgdWludDMyX3QqIC8qIHVsZW4gKi8sIGNoYXIqKiAvKiBw
YXNzd29yZCAqLywgdWludDMyX3QqIC8qIHBsZW4gKi8pCit7CisjaWYgTE9HX0RJU0FCTEVECisg
ICAgVU5VU0VEX1BBUkFNKHByb3RvY29sKTsKKyAgICBVTlVTRURfUEFSQU0oaG9zdCk7CisgICAg
VU5VU0VEX1BBUkFNKHBvcnQpOworI2VuZGlmCisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3
OjpnZXRBdXRoZW50aWNhdGlvbkluZm86IHByb3RvY29sPSVzLCBob3N0PSVzLCBwb3J0PSVkIiwg
cHJvdG9jb2wsIGhvc3QsIHBvcnQpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisjZW5kaWYKKwordm9pZCBQbHVnaW5WaWV3Ojpwcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKQorewor
ICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0VmFsdWUgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+c2V0dmFsdWU7CisgICAgaWYgKCFzZXRWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
KyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgIE5QQm9vbCB2YWx1ZSA9IHByaXZhdGVC
cm93c2luZ0VuYWJsZWQ7CisgICAgc2V0VmFsdWUobV9pbnN0YW5jZSwgTlBOVnByaXZhdGVNb2Rl
Qm9vbCwgJnZhbHVlKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5W
aWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvd2lu
L1BsdWdpbnMvUGx1Z2luVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4NmJiOWQyODExNGFkZDg2OTRkNWNk
MTE3YTAzZDY2MGRkZmMwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpblZpZXcuaApAQCAtMCwwICsxLDQ0MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJp
c2hAZm9yd2FyZGJpYXMuaW4+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdfaAorI2RlZmluZSBQbHVnaW5WaWV3X2gKKworI2lu
Y2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2luY2x1ZGUgIlBs
dWdpblN0cmVhbS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorI2VuZGlmCisK
KyNpZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCit0eXBlZGVmIHN0cnVjdCBIV05EX18q
IEhXTkQ7Cit0eXBlZGVmIEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7CisjZWxzZQordHlwZWRl
ZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HdGtTb2NrZXQgR3RrU29ja2V0OworI2VuZGlmCisK
KyNpZiBQTEFURk9STShYMTEpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2luZG93OwordHlwZWRl
ZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7Cisg
ICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFuY2U7CisgICAgfQor
fQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgRnJh
bWVWaWV3OworICAgIGNsYXNzIEltYWdlOworICAgIGNsYXNzIEhUTUxQbHVnSW5FbGVtZW50Owor
ICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgTW91c2VFdmVudDsKKyAgICBjbGFz
cyBVUkw7CisjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisg
ICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjsKKyNlbmRpZgorICAgIGNsYXNzIFBs
dWdpblBhY2thZ2U7CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdDsKKyAgICBjbGFzcyBQbHVnaW5T
dHJlYW07CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOworICAgIGNsYXNzIFdoZWVsRXZlbnQ7CisKKyAgICBlbnVtIFBsdWdpblN0YXR1cyB7Cisg
ICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCisgICAgICAgIFBsdWdpblN0YXR1
c0Nhbk5vdExvYWRQbHVnaW4sCisgICAgICAgIFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxs
eQorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0IHsKKyAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUGx1Z2luUmVxdWVzdCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
IHB1YmxpYzoKKyAgICAgICAgUGx1Z2luUmVxdWVzdChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBm
cmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEs
IGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMpCisgICAgICAgICAgICA6IG1fZnJhbWVMb2FkUmVxdWVz
dChmcmFtZUxvYWRSZXF1ZXN0KQorICAgICAgICAgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0
YSkKKyAgICAgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pCisg
ICAgICAgICAgICAsIG1fc2hvdWxkQWxsb3dQb3B1cHMoc2hvdWxkQWxsb3dQb3B1cHMpIHsgfQor
ICAgIHB1YmxpYzoKKyAgICAgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVx
dWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQorICAgICAgICB2b2lk
KiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9CisgICAgICAgIGJv
b2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZE5vdGlmaWNhdGlvbjsg
fQorICAgICAgICBib29sIHNob3VsZEFsbG93UG9wdXBzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRBbGxvd1BvcHVwczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1lTG9hZFJlcXVlc3Qg
bV9mcmFtZUxvYWRSZXF1ZXN0OworICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7CisgICAgICAg
IGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgICAgICBib29sIG1fc2hvdWxkQWxsb3dQb3B1
cHM7CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpbk1hbnVhbExvYWRlciB7CisgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIH5QbHVnaW5NYW51YWxMb2FkZXIoKSB7fQorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KSA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgPSAwOworICAgIH07
CisKKyAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFBsdWdpblZpZXdCYXNlCisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUg
UGx1Z2luU3RyZWFtQ2xpZW50CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IFBsdWdpbk1hbnVhbExvYWRlcgorICAgICAgICAgICAgICAgICAgICAgLCBwcml2YXRlIE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lciB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQbHVnaW5WaWV3PiBjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwg
SFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHZpcnR1YWwgflBsdWdpblZp
ZXcoKTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBt
X3BsdWdpbi5nZXQoKTsgfQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAg
ICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CisjZW5kaWYKKwor
ICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHN0
YXRpYyBQbHVnaW5WaWV3KiBjdXJyZW50UGx1Z2luVmlldygpOworCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCgpOworI2VuZGlmCisg
ICAgICAgIFBhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGJpbmRpbmdJbnN0YW5j
ZSgpOworCisgICAgICAgIFBsdWdpblN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0
YXR1czsgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIC8vIE5Q
TiBmdW5jdGlvbnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9y
IGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7CisgICAgICAgIE5Q
RXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlE
YXRhKTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOwor
ICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRh
cmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQzMl90IHdyaXRlKE5QU3RyZWFt
KiBzdHJlYW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOworICAgICAgICBOUEVycm9yIGRl
c3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKKyNlbmRpZgor
ICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZXJBZ2VudFN0YXRpYygpOwor
I2VuZGlmCisgICAgICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgICAg
ICAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBFcnJvciBnZXRW
YWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAgICAgICBzdGF0aWMg
TlBFcnJvciBnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
OworICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFy
aWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKTsKKyAg
ICAgICAgTlBFcnJvciBzZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3QgbGVuKTsKKyAgICAgICAg
TlBFcnJvciBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0
IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1lLCBjb25zdCBjaGFy
KiByZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hhcioqIHBhc3N3b3Jk
LCB1aW50MzJfdCogcGxlbik7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7
CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7CisjZW5kaWYKKyAgICAg
ICAgdm9pZCBmb3JjZVJlZHJhdygpOworICAgICAgICB2b2lkIHB1c2hQb3B1cHNFbmFibGVkU3Rh
dGUoYm9vbCBzdGF0ZSk7CisgICAgICAgIHZvaWQgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsKKwor
ICAgICAgICBib29sIGFyZVBvcHVwc0FsbG93ZWQoKSBjb25zdDsKKworICAgICAgICB2b2lkIHNl
dEphdmFTY3JpcHRQYXVzZWQoYm9vbCk7CisKKyAgICAgICAgdm9pZCBwcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWQoYm9vbCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdp
blN0cmVhbSopOworICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcoUGx1Z2luU3Ry
ZWFtKiBzdHJlYW0pIHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9CisKKyAgICAgICAgLy8g
V2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHNob3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGNsaXBSZWN0Q2hhbmdlZCgpIG92ZXJyaWRlOworCisgICAgICAgIC8vIFRoaXMg
bWV0aG9kIGlzIHVzZWQgYnkgcGx1Z2lucyBvbiBhbGwgcGxhdGZvcm1zIHRvIG9idGFpbiBhIGNs
aXAgcmVjdCB0aGF0IGluY2x1ZGVzIGNsaXBzIHNldCBieSBXZWJDb3JlLAorICAgICAgICAvLyBl
LmcuLCBpbiBvdmVyZmxvdzphdXRvIHNlY3Rpb25zLiAgVGhlIGNsaXAgcmVjdHMgY29vcmRpbmF0
ZXMgYXJlIGluIHRoZSBjb250YWluaW5nIHdpbmRvdydzIGNvb3JkaW5hdGUgc3BhY2UuCisgICAg
ICAgIC8vIFRoaXMgY2xpcCBpbmNsdWRlcyBhbnkgY2xpcHMgdGhhdCB0aGUgd2lkZ2V0IGl0c2Vs
ZiBzZXRzIHVwIGZvciBpdHMgY2hpbGRyZW4uCisgICAgICAgIEludFJlY3Qgd2luZG93Q2xpcFJl
Y3QoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRQYXJlbnRWaXNpYmxlKGJvb2wpOworCisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1BsdWdpblZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAg
ICAgRnJhbWUqIHBhcmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRGcmFtZS5nZXQo
KTsgfQorCisgICAgICAgIHZvaWQgZm9jdXNQbHVnaW5FbGVtZW50KCk7CisKKyAgICAgICAgY29u
c3QgU3RyaW5nJiBwbHVnaW5zUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luc1BhZ2U7IH0K
KyAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5
cGU7IH0KKyAgICAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQor
CisjaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
ICAgICAgICBib29sIHBvcFVwQ29udGV4dE1lbnUoTlBNZW51Kik7CisjZW5kaWYKKworI2lmIE9T
KFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBzdGF0aWMg
TFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQ
QVJBTSk7CisgICAgICAgIExSRVNVTFQgd25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwg
V1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CisgICAgICAgIFdORFBST0MgcGx1Z2luV25k
UHJvYygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luV25kUHJvYzsgfQorI2VuZGlmCisKKyAgICAg
ICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsK
KyAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworICAgICAgICBz
dGF0aWMgYm9vbCBpc0NhbGxpbmdQbHVnaW4oKTsKKworICAgICAgICBib29sIHN0YXJ0KCk7CisK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3RhdGljIHZvaWQga2Vl
cEFsaXZlKE5QUCk7CisjZW5kaWYKKyAgICAgICAgdm9pZCBrZWVwQWxpdmUoKTsKKworI2lmIFBM
QVRGT1JNKFgxMSkKKyAgICAgICAgc3RhdGljIERpc3BsYXkqIGdldFBsdWdpbkRpc3BsYXkoRnJh
bWUqKTsKKyAgICAgICAgc3RhdGljIFdpbmRvdyBnZXRSb290V2luZG93KEZyYW1lKiBwYXJlbnRG
cmFtZSk7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdpblZpZXcoRnJhbWUq
IHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZSosIEhUTUxQbHVnSW5F
bGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Ym9vbCBsb2FkTWFudWFsbHkpOworCisgICAgICAgIHZvaWQgc2V0UGFyYW1ldGVycyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFs
dWVzKTsKKyAgICAgICAgYm9vbCBzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCk7CisgICAgICAg
IHZvaWQgaW5pdCgpOworICAgICAgICBib29sIHBsYXRmb3JtU3RhcnQoKTsKKyAgICAgICAgdm9p
ZCBzdG9wKCk7CisgICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisgICAgICAgIHN0YXRp
YyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJl
cXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAg
ICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOworICAgICAgICBO
UEVycm9yIGhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3Qg
bGVuLCBjb25zdCBjaGFyKiBidWYpOworI2VuZGlmCisgICAgICAgIHN0YXRpYyB2b2lkIGZyZWVT
dHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpOworICAgICAgICB2b2lk
IHNldENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRl
V2luZG93bGVzc1BsdWdpblJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwg
dm9pZCBtZWRpYUNhblN0YXJ0KCk7CisKKyNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKyAgICAgICAgdm9pZCBwYWludFdpbmRvd2VkUGx1Z2luSW50b0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICBzdGF0aWMgSERD
IFdJTkFQSSBob29rZWRCZWdpblBhaW50KEhXTkQsIFBBSU5UU1RSVUNUKik7CisgICAgICAgIHN0
YXRpYyBCT09MIFdJTkFQSSBob29rZWRFbmRQYWludChIV05ELCBjb25zdCBQQUlOVFNUUlVDVCop
OworI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3Rh
dGljIGJvb2wgcGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7CisgICAgICAgIGJvb2wgcGxhdGZvcm1HZXRWYWx1
ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7Cisj
ZW5kaWYKKworICAgICAgICBSZWZQdHI8RnJhbWU+IG1fcGFyZW50RnJhbWU7CisgICAgICAgIFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiBtX3BsdWdpbjsKKyAgICAgICAgSFRNTFBsdWdJbkVsZW1lbnQq
IG1fZWxlbWVudDsKKyAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAgICAgICAgVVJMIG1fdXJs
OworICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0
PiBtX2ludmFsaWRSZWN0czsKKworICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJl
cXVlc3QqKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3Qoc3RkOjp1bmlxdWVfcHRyPFBs
dWdpblJlcXVlc3Q+KTsKKyAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZCgpOworICAgICAg
ICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKCk7CisgICAgICAgIFRpbWVyIG1fcmVxdWVzdFRp
bWVyOworICAgICAgICBUaW1lciBtX2ludmFsaWRhdGVUaW1lcjsKKworICAgICAgICB2b2lkIHBv
cFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpOworICAgICAgICBUaW1lciBtX3BvcFBvcHVwc1N0YXRl
VGltZXI7CisKKyAgICAgICAgdm9pZCBsaWZlU3VwcG9ydFRpbWVyRmlyZWQoKTsKKyAgICAgICAg
VGltZXIgbV9saWZlU3VwcG9ydFRpbWVyOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgICAgIGJvb2wgZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmKTsKKyNlbmRpZgorI2lm
IGRlZmluZWQoWFBfTUFDT1NYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAg
ICAgaW50MTZfdCBkaXNwYXRjaE5QQ29jb2FFdmVudChOUENvY29hRXZlbnQmKTsKKyAgICAgICAg
Ym9vbCBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZDsKKyAgICAgICAgYm9vbCBtX2tl
eURvd25TZW50OworICAgICAgICB1aW50MTZfdCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcjsKKyNl
bmRpZgorCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgICAgIHZvaWQgaGFuZGxlV2hlZWxF
dmVudChXaGVlbEV2ZW50Kik7CisjZW5kaWYKKyAgICAgICAgdm9pZCB1cGRhdGVQbHVnaW5XaWRn
ZXQoKTsKKyAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCopOworICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVu
dCopOworI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisgICAgICAgIHZvaWQgaGFuZGxlRm9jdXNJbkV2ZW50KCk7CisgICAgICAgIHZvaWQgaGFuZGxl
Rm9jdXNPdXRFdmVudCgpOworI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgICAgICB2b2lk
IHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMpOworICAgICAgICBQYXNzUmVmUHRyPElt
YWdlPiBzbmFwc2hvdCgpOworI2VuZGlmCisKKyAgICAgICAgaW50IG1fbW9kZTsKKyAgICAgICAg
aW50IG1fcGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1OYW1lczsKKyAgICAgICAg
Y2hhcioqIG1fcGFyYW1WYWx1ZXM7CisgICAgICAgIFN0cmluZyBtX3BsdWdpbnNQYWdlOworCisg
ICAgICAgIFN0cmluZyBtX21pbWVUeXBlOworICAgICAgICBXVEY6OkNTdHJpbmcgbV91c2VyQWdl
bnQ7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBQIG1faW5z
dGFuY2U7CisgICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2luZG93
IG1fbnBXaW5kb3c7CisjZW5kaWYKKworICAgICAgICBWZWN0b3I8Ym9vbCwgND4gbV9wb3B1cFN0
YXRlU3RhY2s7CisKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IG1fc3Ry
ZWFtczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0Pj4gbV9y
ZXF1ZXN0czsKKworICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKKyAgICAgICAgYm9vbCBtX2lz
VHJhbnNwYXJlbnQ7CisgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7CisgICAgICAgIGJv
b2wgbV9pc1dhaXRpbmdUb1N0YXJ0OworCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgICAgICBi
b29sIG1fbmVlZHNYRW1iZWQ7CisjZW5kaWYKKworI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxl
cldpbj4gbV9tZXNzYWdlVGhyb3R0bGVyOworICAgICAgICBXTkRQUk9DIG1fcGx1Z2luV25kUHJv
YzsKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKKyAgICAgICAgYm9vbCBtX2lzQ2Fs
bGluZ1BsdWdpblduZFByb2M7CisgICAgICAgIEhEQyBtX3dtUHJpbnRIREM7CisgICAgICAgIGJv
b2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKKyNlbmRpZgorCisjaWYgKFBMQVRGT1JNKEdU
SykgJiYgT1MoV0lORE9XUykpIHx8IFBMQVRGT1JNKEVGTCkKKyAgICAgICAgLy8gT24gTWFjIE9T
WCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhhdmUgaXRzIG93biBuYXRpdmUg
d2lkZ2V0LAorICAgICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNvbnRhaW5pbmcgd2luZG93IGFz
IGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5nLgorICAgICAgICBQbGF0Zm9y
bVBsdWdpbldpZGdldCBtX3dpbmRvdzsKK3B1YmxpYzoKKyAgICAgICAgUGxhdGZvcm1QbHVnaW5X
aWRnZXQgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvdzsgfQor
ICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3JtUGx1Z2luV2lkZ2V0
IHdpZGdldCkgeyBtX3dpbmRvdyA9IHdpZGdldDsgfQorI2Vsc2UKK3B1YmxpYzoKKyAgICAgICAg
dm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBsdWdpbldpZGdldCB3aWRnZXQp
IHsgc2V0UGxhdGZvcm1XaWRnZXQod2lkZ2V0KTsgfQorICAgICAgICBQbGF0Zm9ybVBsdWdpbldp
ZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIHBsYXRmb3JtV2lkZ2V0
KCk7IH0KKyNlbmRpZgorCitwcml2YXRlOgorCisjaWYgZGVmaW5lZChYUF9VTklYKSB8fCBQTEFU
Rk9STShHVEspCisgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworI2VsaWYgZGVm
aW5lZChYUF9NQUNPU1gpCisgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dDb250ZXh0OworICAg
ICAgICBDR0NvbnRleHRSZWYgbV9jb250ZXh0UmVmOworCisgICAgICAgIHZvaWQgc2V0TlBXaW5k
b3dJZk5lZWRlZCgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBib29sIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hh
bmdlOworICAgICAgICBQaXhtYXAgbV9kcmF3YWJsZTsKKyAgICAgICAgVmlzdWFsKiBtX3Zpc3Vh
bDsKKyAgICAgICAgQ29sb3JtYXAgbV9jb2xvcm1hcDsKKyAgICAgICAgRGlzcGxheSogbV9wbHVn
aW5EaXNwbGF5OworCisgICAgICAgIHZvaWQgaW5pdFhFdmVudChYRXZlbnQqIGV2ZW50KTsKKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gcGx1Z1Jl
bW92ZWRDYWxsYmFjayhHdGtTb2NrZXQqLCBQbHVnaW5WaWV3Kik7CisgICAgICAgIHN0YXRpYyB2
b2lkIHBsdWdBZGRlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdpblZpZXcqKTsKKyAgICAgICAg
dm9pZCB1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOworICAgICAgICBib29sIG1fcGx1
Z0FkZGVkOworICAgICAgICBJbnRSZWN0IG1fZGVsYXllZEFsbG9jYXRpb247CisjZW5kaWYKKwor
ICAgICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8g
YSB3aW5kb3dlZCBwbHVnLWluCisgICAgICAgIEludFJlY3QgbV93aW5kb3dSZWN0OyAvLyBPdXIg
d2luZG93IHJlY3QuCisKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKKyAgICAgICAgUmVm
UHRyPFBsdWdpblN0cmVhbT4gbV9tYW51YWxTdHJlYW07CisKKyAgICAgICAgYm9vbCBtX2lzSmF2
YVNjcmlwdFBhdXNlZDsKKworICAgICAgICBib29sIG1faGF2ZUNhbGxlZFNldFdpbmRvdzsKKwor
ICAgICAgICBzdGF0aWMgUGx1Z2luVmlldyogc19jdXJyZW50UGx1Z2luVmlldzsKKyAgICB9Owor
CitpbmxpbmUgUGx1Z2luVmlldyogdG9QbHVnaW5WaWV3KFdpZGdldCogd2lkZ2V0KQoreworICAg
IEFTU0VSVCghd2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3KCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KTsKK30KKworaW5saW5lIGNvbnN0IFBsdWdp
blZpZXcqIHRvUGx1Z2luVmlldyhjb25zdCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBBU1NFUlQo
IXdpZGdldCB8fCB3aWRnZXQtPmlzUGx1Z2luVmlldygpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgUGx1Z2luVmlldyo+KHdpZGdldCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBh
bnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9QbHVnaW5WaWV3KGNvbnN0
IFBsdWdpblZpZXcqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5MjEy
YmEyNDlmNDc3ZTAzNjkxOGVjMjYxMzI4ZTc2ZjdkZjlmODYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCkBAIC0wLDAgKzEsMTAx
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQml0
bWFwSW5mby5oIgorI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgor
I2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJMb2NhbFdpbmRv
d3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2
ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgor
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVk
ZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiY19pbnN0YW5jZS5oIgorI2lu
Y2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5j
bHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4K
KyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CisKKyNpZiBVU0UoQ0FJUk8pCisj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby13aW4zMi5o
PgorI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgSFdORCB3aW5k
b3dIYW5kbGVGb3JQYWdlQ2xpZW50KFBsYXRmb3JtUGFnZUNsaWVudCBjbGllbnQpCit7CisjaWYg
UExBVEZPUk0oR1RLKQorICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBp
ZiAoR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coY2xpZW50KSkKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhXTkQ+KEdES19XSU5ET1dfSFdORCh3aW5kb3cpKTsK
KyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgcmV0dXJuIGNsaWVudDsKKyNlbmRpZgorfQorCit1
c2luZyBKU0M6OkV4ZWNTdGF0ZTsKK3VzaW5nIEpTQzo6SlNMb2NrOwordXNpbmcgSlNDOjpKU09i
amVjdDsKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworY29uc3QgTFBD
V1NUUiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZSA9IEwiV2ViUGx1Z2luVmlldyI7Citjb25z
dCBMUENXU1RSIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0
eSI7CisKKy8vIFRoZSBjb2RlIHVzZWQgdG8gaG9vayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdp
bmFsbHkgY2FtZSBmcm9tCisvLyA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXBy
aW50Lmh0bWw+LgorLy8gQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5
dWFuLmNvbSkuCisKK3N0YXRpYyB1bnNpZ25lZCBiZWdpblBhaW50U3lzQ2FsbDsKK3N0YXRpYyBC
WVRFKiBiZWdpblBhaW50OworCitzdGF0aWMgdW5zaWduZWQgZW5kUGFpbnRTeXNDYWxsOworc3Rh
dGljIEJZVEUqIGVuZFBhaW50OworCit0eXBlZGVmIEhEQyAoV0lOQVBJICpQdHJCZWdpblBhaW50
KShIV05ELCBQQUlOVFNUUlVDVCopOwordHlwZWRlZiBCT09MIChXSU5BUEkgKlB0ckVuZFBhaW50
KShIV05ELCBjb25zdCBQQUlOVFNUUlVDVCopOworCisjaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4
Nl82NCkgJiYgQ09NUElMRVIoTVNWQykKK2V4dGVybiAiQyIgSERDIF9fc3RkY2FsbCBfSEJlZ2lu
UGFpbnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNUIGxwUGFpbnQpOworZXh0ZXJuICJDIiBCT09M
IF9fc3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFp
bnQpOworI2VuZGlmCisKK0hEQyBXSU5BUEkgUGx1Z2luVmlldzo6aG9va2VkQmVnaW5QYWludChI
V05EIGhXbmQsIFBBSU5UU1RSVUNUKiBscFBhaW50KQoreworICAgIFBsdWdpblZpZXcqIHBsdWdp
blZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQ
bHVnaW5WaWV3UHJvcGVydHkpKTsKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5t
X3dtUHJpbnRIREMpIHsKKyAgICAgICAgLy8gV2UncmUgc2VjcmV0bHkgaGFuZGxpbmcgV01fUFJJ
TlRDTElFTlQsIHNvIHNldCB1cCB0aGUgUEFJTlRTVFJVQ1Qgc28KKyAgICAgICAgLy8gdGhhdCB0
aGUgcGx1Z2luIHdpbGwgcGFpbnQgaW50byB0aGUgSERDIHdlIHByb3ZpZGUuCisgICAgICAgIG1l
bXNldChscFBhaW50LCAwLCBzaXplb2YoUEFJTlRTVFJVQ1QpKTsKKyAgICAgICAgbHBQYWludC0+
aGRjID0gcGx1Z2luVmlldy0+bV93bVByaW50SERDOworICAgICAgICBHZXRDbGllbnRSZWN0KGhX
bmQsICZscFBhaW50LT5yY1BhaW50KTsKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXctPm1fd21Q
cmludEhEQzsKKyAgICB9CisKKyNpZiBDT01QSUxFUihHQ0MpCisgICAgSERDIHJlc3VsdDsKKyAg
ICBhc20gKCJwdXNoICAgICUyXG4iCisgICAgICAgICAicHVzaCAgICAlM1xuIgorICAgICAgICAg
ImNhbGwgICAgKiU0XG4iCisgICAgICAgICA6ICI9YSIgKHJlc3VsdCkKKyAgICAgICAgIDogImEi
IChiZWdpblBhaW50U3lzQ2FsbCksICJnIiAobHBQYWludCksICJnIiAoaFduZCksICJtIiAoYmVn
aW5QYWludCkKKyAgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAgKTsKKyAgICByZXR1cm4gcmVz
dWx0OworI2VsaWYgZGVmaW5lZChfTV9JWDg2KQorICAgIC8vIENhbGwgdGhyb3VnaCB0byB0aGUg
b3JpZ2luYWwgQmVnaW5QYWludC4KKyAgICBfX2FzbSAgIG1vdiAgICAgZWF4LCBiZWdpblBhaW50
U3lzQ2FsbAorICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50CisgICAgX19hc20gICBwdXNoICAg
IGhXbmQKKyAgICBfX2FzbSAgIGNhbGwgICAgYmVnaW5QYWludAorI2Vsc2UKKyAgICByZXR1cm4g
X0hCZWdpblBhaW50KGhXbmQsIGxwUGFpbnQpOworI2VuZGlmCit9CisKK0JPT0wgV0lOQVBJIFBs
dWdpblZpZXc6Omhvb2tlZEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxw
UGFpbnQpCit7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSkpOworICAg
IGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPm1fd21QcmludEhEQykgeworICAgICAgICAv
LyBXZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9QUklOVENMSUVOVCwgc28gd2UgZG9uJ3QgaGF2
ZSB0byBkbyBhbnkKKyAgICAgICAgLy8gY2xlYW51cC4KKyAgICAgICAgcmV0dXJuIFRSVUU7Cisg
ICAgfQorCisjaWYgQ09NUElMRVIoR0NDKQorICAgIEJPT0wgcmVzdWx0OworICAgIGFzbSAoInB1
c2ggICAlMlxuIgorICAgICAgICAgInB1c2ggICAlM1xuIgorICAgICAgICAgImNhbGwgICAqJTRc
biIKKyAgICAgICAgIDogIj1hIiAocmVzdWx0KQorICAgICAgICAgOiAiYSIgKGVuZFBhaW50U3lz
Q2FsbCksICJnIiAobHBQYWludCksICJnIiAoaFduZCksICJtIiAoZW5kUGFpbnQpCisgICAgICAg
ICk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbGlmIGRlZmluZWQgKF9NX0lYODYpCisgICAgLy8g
Q2FsbCB0aHJvdWdoIHRvIHRoZSBvcmlnaW5hbCBFbmRQYWludC4KKyAgICBfX2FzbSAgIG1vdiAg
ICAgZWF4LCBlbmRQYWludFN5c0NhbGwKKyAgICBfX2FzbSAgIHB1c2ggICAgbHBQYWludAorICAg
IF9fYXNtICAgcHVzaCAgICBoV25kCisgICAgX19hc20gICBjYWxsICAgIGVuZFBhaW50CisjZWxz
ZQorICAgIHJldHVybiBfSEVuZFBhaW50KGhXbmQsIGxwUGFpbnQpOworI2VuZGlmCit9CisKK3N0
YXRpYyB2b2lkIGhvb2soY29uc3QgY2hhciogbW9kdWxlLCBjb25zdCBjaGFyKiBwcm9jLCB1bnNp
Z25lZCYgc3lzQ2FsbElELCBCWVRFKiYgcFByb2MsIGNvbnN0IHZvaWQqIHBOZXdQcm9jKQorewor
ICAgIC8vIFNlZSA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+
IGZvciBhbiBleHBsYW5hdGlvbiBvZgorICAgIC8vIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLgor
CisgICAgSElOU1RBTkNFIGhNb2QgPSBHZXRNb2R1bGVIYW5kbGVBKG1vZHVsZSk7CisKKyAgICBw
UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90
PihHZXRQcm9jQWRkcmVzcyhoTW9kLCBwcm9jKSkpOworCisjaWYgQ09NUElMRVIoR0NDKSB8fCBk
ZWZpbmVkKF9NX0lYODYpCisgICAgaWYgKHBQcm9jWzBdICE9IDB4QjgpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYmUgcmVhZGluZyB0aGUgYnl0ZXMgb25lLWJ5
LW9uZSBpbnN0ZWFkIG9mIGRvaW5nIGFuCisgICAgLy8gdW5hbGlnbmVkIHJlYWQ/CisgICAgc3lz
Q2FsbElEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpOworCisgICAg
RFdPUkQgZmxPbGRQcm90ZWN0OworICAgIGlmICghVmlydHVhbFByb3RlY3QocFByb2MsIDUsIFBB
R0VfRVhFQ1VURV9SRUFEV1JJVEUsICZmbE9sZFByb3RlY3QpKQorICAgICAgICByZXR1cm47CisK
KyAgICBwUHJvY1swXSA9IDB4RTk7CisgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihw
UHJvYyArIDEpID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocE5ld1Byb2MpIC0gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4ocFByb2MgKyA1KTsKKworICAgIHBQcm9jICs9IDU7CisjZWxz
ZQorICAgIC8qIERpc2Fzc2VtYmx5IG9mIEJlZ2luUGFpbnQoKQorICAgIDAwMDAwMDAwNzc5RkM1
QjAgNEMgOEIgRDEgICAgICAgICBtb3YgICAgICAgICByMTAscmN4CisgICAgMDAwMDAwMDA3NzlG
QzVCMyBCOCAxNyAxMCAwMCAwMCAgIG1vdiAgICAgICAgIGVheCwxMDE3aAorICAgIDAwMDAwMDAw
Nzc5RkM1QjggMEYgMDUgICAgICAgICAgICBzeXNjYWxsCisgICAgMDAwMDAwMDA3NzlGQzVCQSBD
MyAgICAgICAgICAgICAgIHJldAorICAgIDAwMDAwMDAwNzc5RkM1QkIgOTAgICAgICAgICAgICAg
ICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUJDIDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAw
MDAwMDA3NzlGQzVCRCA5MCAgICAgICAgICAgICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QkUg
OTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUJGIDkwICAgICAgICAgICAg
ICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVDMCA5MCAgICAgICAgICAgICAgIG5vcAorICAgIDAw
MDAwMDAwNzc5RkM1QzEgOTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUMy
IDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVDMyA5MCAgICAgICAgICAg
ICAgIG5vcAorICAgICovCisgICAgLy8gQ2hlY2sgZm9yIHRoZSBzaWduYXR1cmUgYXMgaW4gdGhl
IGFib3ZlIGRpc2Fzc2VtYmx5CisgICAgRFdPUkQgZ3VhcmQgPSAweEI4RDE4QjRDOworICAgIGlm
ICgqcmVpbnRlcnByZXRfY2FzdDxEV09SRCo+KHBQcm9jKSAhPSBndWFyZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRFdPUkQgZmxPbGRQcm90ZWN0OworICAgIFZpcnR1YWxQcm90ZWN0KHBQcm9j
LCAxMiwgUEFHRV9FWEVDVVRFX1JFQURXUklURSwgJiBmbE9sZFByb3RlY3QpOworICAgIHBQcm9j
WzBdID0gMHg0ODsgICAgLy8gbW92IHJheCwgdGhpcworICAgIHBQcm9jWzFdID0gMHhiODsKKyAg
ICAqKF9faW50NjQqKShwUHJvYysyKSA9IChfX2ludDY0KXBOZXdQcm9jOworICAgIHBQcm9jWzEw
XSA9IDB4ZmY7ICAgLy8gam1wIHJheAorICAgIHBQcm9jWzExXSA9IDB4ZTA7CisjZW5kaWYKK30K
Kworc3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhv
b2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU5UU1RSVUNUKiksIEJPT0wgKFdJTkFQSSpob29rZWRF
bmRQYWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJVQ1QqKSkKK3sKKyAgICBzdGF0aWMgYm9vbCBo
YXZlSG9va2VkID0gZmFsc2U7CisgICAgaWYgKGhhdmVIb29rZWQpCisgICAgICAgIHJldHVybjsK
KyAgICBoYXZlSG9va2VkID0gdHJ1ZTsKKworICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBs
dWdpbnMgZG9uJ3Qgc2VlbSB0byByZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5ULCBzbworICAgIC8v
IHdlIGhvb2sgaW50byBCZWdpblBhaW50L0VuZFBhaW50IHRvIGFsbG93IHRoZWlyIG5vcm1hbCBX
TV9QQUlOVCBoYW5kbGluZworICAgIC8vIHRvIGRyYXcgaW50byBhIGdpdmVuIEhEQy4gTm90ZSB0
aGF0IHRoaXMgaG9va2luZyBhZmZlY3RzIHRoZSBlbnRpcmUKKyAgICAvLyBwcm9jZXNzLgorICAg
IGhvb2soInVzZXIzMi5kbGwiLCAiQmVnaW5QYWludCIsIGJlZ2luUGFpbnRTeXNDYWxsLCBiZWdp
blBhaW50LCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxw
dHJkaWZmX3Q+KGhvb2tlZEJlZ2luUGFpbnQpKSk7CisgICAgaG9vaygidXNlcjMyLmRsbCIsICJF
bmRQYWludCIsIGVuZFBhaW50U3lzQ2FsbCwgZW5kUGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3Qgdm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oaG9va2VkRW5kUGFpbnQpKSk7
CisKK30KKworc3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3KCkKK3sKKyAgICBzdGF0aWMg
Ym9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7CisgICAgaWYgKGhhdmVSZWdp
c3RlcmVkV2luZG93Q2xhc3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaGF2ZVJlZ2lz
dGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgV2ViQ29y
ZTo6c2V0SW5zdGFuY2VIYW5kbGUoKEhJTlNUQU5DRSkoR2V0TW9kdWxlSGFuZGxlKDApKSk7Cisj
ZW5kaWYKKworICAgIEFTU0VSVChXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpKTsKKworICAgIFdO
RENMQVNTRVggd2NleDsKKyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKKyAg
ICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKKyAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1Nf
REJMQ0xLUzsKKyAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gRGVmV2luZG93UHJvYzsKKyAgICB3
Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKKyAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKKyAg
ICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKTsKKyAgICB3
Y2V4LmhJY29uICAgICAgICAgID0gMDsKKyAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1
cnNvcigwLCBJRENfQVJST1cpOworICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNP
TE9SX1dJTkRPVzsKKyAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKKyAgICB3Y2V4Lmxwc3pD
bGFzc05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWU7CisKKyAgICByZXR1cm4gISFS
ZWdpc3RlckNsYXNzRXgoJndjZXgpOworfQorCitMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6
OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFt
LCBMUEFSQU0gbFBhcmFtKQoreworICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSByZWludGVy
cHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVy
dHkpKTsKKworICAgIHJldHVybiBwbHVnaW5WaWV3LT53bmRQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQ
YXJhbSwgbFBhcmFtKTsKK30KKworc3RhdGljIGJvb2wgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0
dXJlKFVJTlQgbWVzc2FnZSkKK3sKKyAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKKyAgICAgICAgY2Fz
ZSBXTV9MQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01fTUJVVFRPTlVQOgorICAgICAgICBjYXNl
IFdNX1JCVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9LRVlVUDoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBjb250ZW50c1RvTmF0aXZlV2luZG93KEZy
YW1lVmlldyogdmlldywgY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiB2aWV3
LT5jb250ZW50c1RvV2luZG93KHBvaW50KTsKK30KKworc3RhdGljIGlubGluZSBJbnRSZWN0IGNv
bnRlbnRzVG9OYXRpdmVXaW5kb3coRnJhbWVWaWV3KiB2aWV3LCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHJlY3QpOworfQorCitMUkVT
VUxUCitQbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0g
d1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIC8vIDxyZGFyOi8vNTcxMTEzNj4gU29tZXRp
bWVzIEZsYXNoIHdpbGwgY2FsbCBTZXRDYXB0dXJlIGJlZm9yZSBjcmVhdGluZworICAgIC8vIGEg
ZnVsbC1zY3JlZW4gd2luZG93IGFuZCB3aWxsIG5vdCByZWxlYXNlIGl0LCB3aGljaCBjYXVzZXMg
dGhlCisgICAgLy8gZnVsbC1zY3JlZW4gd2luZG93IHRvIG5ldmVyIHJlY2VpdmUgbW91c2UgZXZl
bnRzLiBXZSBzZXQvcmVsZWFzZSBjYXB0dXJlCisgICAgLy8gb24gbW91c2UgZG93bi91cCBiZWZv
cmUgc2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIHBsdWctaW4gdG8gcHJldmVudCB0aGF0LgorICAg
IHN3aXRjaCAobWVzc2FnZSkgeworICAgICAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgorICAgICAg
ICBjYXNlIFdNX01CVVRUT05ET1dOOgorICAgICAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgorICAg
ICAgICAgICAgOjpTZXRDYXB0dXJlKGhXbmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV01fTEJVVFRPTlVQOgorICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKKyAgICAgICAg
Y2FzZSBXTV9SQlVUVE9OVVA6CisgICAgICAgICAgICA6OlJlbGVhc2VDYXB0dXJlKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZSA9PSBtX2xhc3RNZXNzYWdl
ICYmCisgICAgICAgIG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRD
YWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHkpICYmIAorICAgICAgICBtX2lzQ2Fs
bGluZ1BsdWdpblduZFByb2MpCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKG1lc3NhZ2Ug
PT0gV01fVVNFUiArIDEgJiYKKyAgICAgICAgbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBs
dWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMpKSB7CisgICAgICAgIGlmICgh
bV9tZXNzYWdlVGhyb3R0bGVyKQorICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVyID0gYWRv
cHRQdHIobmV3IFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4odGhpcykpOworCisgICAgICAgIG1f
bWVzc2FnZVRocm90dGxlci0+YXBwZW5kTWVzc2FnZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG1fbGFzdE1lc3NhZ2UgPSBt
ZXNzYWdlOworICAgIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyA9IHRydWU7CisKKyAgICAvLyBJ
ZiB0aGUgcGx1Zy1pbiBkb2Vzbid0IGV4cGxpY2l0bHkgc3VwcG9ydCBjaGFuZ2luZyB0aGUgcG9w
LXVwIHN0YXRlLCB3ZSBlbmFibGUKKyAgICAvLyBwb3B1cHMgZm9yIGFsbCB1c2VyIGdlc3R1cmVz
LgorICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHBvcCB0aGUgc3RhdGUgaW4gYSB0aW1lciwg
YmVjYXVzZSB0aGUgRmxhc2ggcGx1Zy1pbiAKKyAgICAvLyBwb3BzIHVwIHdpbmRvd3MgaW4gcmVz
cG9uc2UgdG8gYSBwb3N0ZWQgbWVzc2FnZS4KKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQU19FTkFCTEVEX1NUQVRFICYmCisgICAgICAg
IGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShtZXNzYWdlKSAmJiAhbV9wb3BQb3B1cHNTdGF0
ZVRpbWVyLmlzQWN0aXZlKCkpIHsKKworICAgICAgICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRy
dWUpOworCisgICAgICAgIG1fcG9wUG9wdXBzU3RhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7Cisg
ICAgfQorCisgICAgaWYgKG1lc3NhZ2UgPT0gV01fUFJJTlRDTElFTlQpIHsKKyAgICAgICAgLy8g
TW9zdCAoYWxsPykgd2luZG93ZWQgcGx1Z2lucyBkb24ndCByZXNwb25kIHRvIFdNX1BSSU5UQ0xJ
RU5ULCBzbyB3ZQorICAgICAgICAvLyBjaGFuZ2UgdGhlIG1lc3NhZ2UgdG8gV01fUEFJTlQgYW5k
IHJlbHkgb24gb3VyIGhvb2tlZCB2ZXJzaW9ucyBvZgorICAgICAgICAvLyBCZWdpblBhaW50L0Vu
ZFBhaW50IHRvIG1ha2UgdGhlIHBsdWdpbiBkcmF3IGludG8gdGhlIGdpdmVuIEhEQy4KKyAgICAg
ICAgbWVzc2FnZSA9IFdNX1BBSU5UOworICAgICAgICBtX3dtUHJpbnRIREMgPSByZWludGVycHJl
dF9jYXN0PEhEQz4od1BhcmFtKTsKKyAgICB9CisKKyAgICAvLyBDYWxsIHRoZSBwbHVnLWluJ3Mg
d2luZG93IHByb2MuCisgICAgTFJFU1VMVCByZXN1bHQgPSA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1
Z2luV25kUHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworCisgICAgbV93bVBy
aW50SERDID0gMDsKKworICAgIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyA9IGZhbHNlOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRn
ZXQoKQoreworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1l
VmlldyYgZnJhbWVWaWV3ID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpOworCisgICAg
SW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xp
cFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZp
ZXcuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCku
c2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBS
ZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAgIGlm
IChwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmICghbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCB8
fCBtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBS
ZWN0KSkgeworCisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisKKyAgICAgICAgLy8g
VG8gcHJldmVudCBmbGFzaGVzIHdoaWxlIHNjcm9sbGluZywgd2UgZGlzYWJsZSBkcmF3aW5nIGR1
cmluZyB0aGUgd2luZG93CisgICAgICAgIC8vIHVwZGF0ZSBwcm9jZXNzIGJ5IGNsaXBwaW5nIHRo
ZSB3aW5kb3cgdG8gdGhlIHplcm8gcmVjdC4KKworICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0
ID0gIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJv
UmVjdFdoZW5TY3JvbGxpbmcpOworCisgICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgeworICAg
ICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwg
MCwgMCkpOworICAgICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSwgcmduLmxlYWsoKSwgRkFMU0UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0
byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1f
Y2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKKyAg
ICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFr
KCksIFRSVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX2hhdmVVcGRhdGVkUGx1Z2lu
V2lkZ2V0IHx8IG1fd2luZG93UmVjdCAhPSBvbGRXaW5kb3dSZWN0KQorICAgICAgICAgICAgOjpN
b3ZlV2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1fd2luZG93UmVjdC54KCksIG1fd2lu
ZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCks
IFRSVUUpOworCisgICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgeworICAgICAgICAgICAgYXV0
byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1f
Y2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKKyAg
ICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFr
KCksIFRSVUUpOworICAgICAgICB9CisKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CisKKyAgICAgICAgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCA9IHRydWU7CisgICAgfQorfQor
Cit2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKK3sKKyAgICBpZiAoZm9j
dXNlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBTZXRGb2N1cyhwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7CisKKyAg
ICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
TlBFdmVudCBucEV2ZW50OworCisgICAgbnBFdmVudC5ldmVudCA9IGZvY3VzZWQgPyBXTV9TRVRG
T0NVUyA6IFdNX0tJTExGT0NVUzsKKyAgICBucEV2ZW50LndQYXJhbSA9IDA7CisgICAgbnBFdmVu
dC5sUGFyYW0gPSAwOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OnNob3coKQoreworICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAg
aWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAg
IFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1dfU0hPV05BKTsKKworICAgIFdp
ZGdldDo6c2hvdygpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQoreworICAgIHNldFNl
bGZWaXNpYmxlKGZhbHNlKTsKKworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9y
bVBsdWdpbldpZGdldCgpKQorICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCksIFNXX0hJREUpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK2Jvb2wgUGx1Z2luVmll
dzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIG5wRXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYm9v
bCBzaG91bGRQb3AgPSBmYWxzZTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
dmVyc2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgJiYgaXNXaW5kb3dzTWVz
c2FnZVVzZXJHZXN0dXJlKG5wRXZlbnQuZXZlbnQpKSB7CisgICAgICAgIHB1c2hQb3B1cHNFbmFi
bGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIHNob3VsZFBvcCA9IHRydWU7CisgICAgfQorCisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgIGJvb2wgYWNjZXB0
ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50
KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKworICAgIGlmIChzaG91bGRQb3ApIAor
ICAgICAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKKworICAgIHJldHVybiBhY2NlcHRlZDsK
K30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoSERDIGhk
YykKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIFNlbmRNZXNzYWdlKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJRU5ULCByZWludGVycHJldF9jYXN0PFdQQVJB
TT4oaGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElMRFJFTiB8IFBSRl9PV05FRCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3
YWJsZTsKKyAgICBtX25wV2luZG93LndpbmRvdyA9IGhkYzsKKworICAgIFdJTkRPV1BPUyB3aW5k
b3dwb3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICAgIEludFJlY3QgciA9IGNvbnRl
bnRzVG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8RnJhbWVWaWV3PihwYXJlbnQoKSksIGZyYW1lUmVj
dCgpKTsKKworICAgIHdpbmRvd3Bvcy54ID0gci54KCk7CisgICAgd2luZG93cG9zLnkgPSByLnko
KTsKKyAgICB3aW5kb3dwb3MuY3ggPSByLndpZHRoKCk7CisgICAgd2luZG93cG9zLmN5ID0gci5o
ZWlnaHQoKTsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICBucEV2ZW50LmV2ZW50ID0gV01f
V0lORE9XUE9TQ0hBTkdFRDsKKyAgICBucEV2ZW50LmxQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pigmd2luZG93cG9zKTsKKyAgICBucEV2ZW50LndQYXJhbSA9IDA7CisKKyAgICBk
aXNwYXRjaE5QRXZlbnQobnBFdmVudCk7CisKKyAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0
KCkpOworCisgICAgbnBFdmVudC5ldmVudCA9IFdNX1BBSU5UOworICAgIG5wRXZlbnQud1BhcmFt
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhkYyk7CisKKyAgICAvLyBUaGlzIGlzIHN1
cHBvc2VkIHRvIGJlIGEgcG9pbnRlciB0byB0aGUgZGlydHkgcmVjdCwgYnV0IGl0IHNlZW1zIHRo
YXQgdGhlIEZsYXNoIHBsdWdpbgorICAgIC8vIGlnbm9yZXMgaXQgc28gd2UganVzdCBwYXNzIG51
bGwuCisgICAgbnBFdmVudC5sUGFyYW0gPSAwOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZl
bnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisjaWYg
IVVTRShXSU5HREkpCisgICAgQVNTRVJUKG1faXNXaW5kb3dlZCk7CisgICAgQVNTRVJUKGNvbnRl
eHQtPnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSk7CisKKyAgICBJbnRQb2ludCBsb2NhdGlv
bkluV2luZG93ID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNvbnZlcnRUb0NvbnRh
aW5pbmdXaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7CisKKyAgICBMb2NhbFdpbmRvd3ND
b250ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQsIGZyYW1lUmVjdCgpLCBmYWxzZSk7CisKKyNp
ZiBVU0UoQ0FJUk8pCisgICAgLy8gTXVzdCBmbHVzaCBkcmF3aW5ncyB1cCB0byB0aGlzIHBvaW50
IHRvIHRoZSBiYWNraW5nIG1ldGFmaWxlLCBvdGhlcndpc2UgdGhlCisgICAgLy8gcGx1Z2luIHJl
Z2lvbiB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggYW55IGNsZWFyIHJlZ2lvbnMgc3BlY2lmaWVk
IGluIHRoZQorICAgIC8vIGNhaXJvLWNvbnRyb2xsZWQgcG9ydGlvbnMgb2YgdGhlIHJlbmRlcmlu
Zy4KKyAgICBjYWlyb19zaG93X3BhZ2UoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkp
OworI2VuZGlmCisKKyAgICBIREMgaGRjID0gd2luZG93c0NvbnRleHQuaGRjKCk7CisgICAgWEZP
Uk0gb3JpZ2luYWxUcmFuc2Zvcm07CisgICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmb3JpZ2lu
YWxUcmFuc2Zvcm0pOworCisgICAgLy8gVGhlIHBsdWdpbiBleHBlY3RzIHRoZSBEQyB0byBiZSBp
biBjbGllbnQgY29vcmRpbmF0ZXMsIHNvIHdlIHRyYW5zbGF0ZQorICAgIC8vIHRoZSBEQyB0byBt
YWtlIHRoYXQgc28uCisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgp
OworICAgIGN0bS50cmFuc2xhdGUobG9jYXRpb25JbldpbmRvdy54KCksIGxvY2F0aW9uSW5XaW5k
b3cueSgpKTsKKyAgICBYRk9STSB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxYRk9STT4oY3RtLnRv
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisKKyAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ0
cmFuc2Zvcm0pOworCisgICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KGhkYyk7CisKKyAg
ICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmlnaW5hbFRyYW5zZm9ybSk7CisjZW5kaWYKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkgeworICAgICAgICAvLyBE
cmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdp
bkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBF
bnN1cmUgdGhhdCB3ZSBoYXZlIGNhbGxlZCBTZXRXaW5kb3cgYmVmb3JlIHdlIHRyeSB0byBwYWlu
dC4KKyAgICBpZiAoIW1faGF2ZUNhbGxlZFNldFdpbmRvdykKKyAgICAgICAgc2V0TlBXaW5kb3dS
ZWN0KGZyYW1lUmVjdCgpKTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyNpZiAhVVNFKFdJ
TkdESSkKKyAgICAgICAgaWYgKGNvbnRleHQtPnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSkK
KyAgICAgICAgICAgIHBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChjb250ZXh0LCByZWN0
KTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSW4gdGhlIEdUSyBh
bmQgUXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50
IHRvIHVzZSB0aGUgd2luZG93CisgICAgLy8gY29vcmRpbmF0ZXMuCisjaWYgUExBVEZPUk0oR1RL
KQorICAgIEludFJlY3QgcmVjdEluV2luZG93KHJlY3QpOworICAgIHJlY3RJbldpbmRvdy5pbnRl
cnNlY3QoZnJhbWVSZWN0KCkpOworI2Vsc2UKKyAgICBJbnRSZWN0IHJlY3RJbldpbmRvdyA9IGRv
d25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgp
KTsKKyNlbmRpZgorICAgIExvY2FsV2luZG93c0NvbnRleHQgd2luZG93c0NvbnRleHQoY29udGV4
dCwgcmVjdEluV2luZG93LCBtX2lzVHJhbnNwYXJlbnQpOworCisgICAgLy8gT24gU2FmYXJpL1dp
bmRvd3Mgd2l0aG91dCB0cmFuc3BhcmVuY3kgbGF5ZXJzIHRoZSBHcmFwaGljc0NvbnRleHQgcmV0
dXJucyB0aGUgSERDCisgICAgLy8gb2YgdGhlIHdpbmRvdyBhbmQgdGhlIHBsdWdpbiBleHBlY3Rz
IHRoYXQgdGhlIHBhc3NlZCBpbiBEQyBoYXMgd2luZG93IGNvb3JkaW5hdGVzLgorICAgIC8vIElu
IHRoZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGFsd2F5cyBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZm
ZXIgYW5kIHRoZXJlZm9yZSBuZWVkCisgICAgLy8gdG8gcHJlc2VydmUgdGhlIHRyYW5zbGF0aW9u
IHNldCBpbiBnZXRXaW5kb3dzQ29udGV4dC4KKyNpZiAhUExBVEZPUk0oR1RLKQorICAgIGlmICgh
Y29udGV4dC0+aXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKKyAgICAgICAgWEZPUk0gdHJhbnNm
b3JtOworICAgICAgICBHZXRXb3JsZFRyYW5zZm9ybSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRy
YW5zZm9ybSk7CisgICAgICAgIHRyYW5zZm9ybS5lRHggPSAwOworICAgICAgICB0cmFuc2Zvcm0u
ZUR5ID0gMDsKKyAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0od2luZG93c0NvbnRleHQuaGRjKCks
ICZ0cmFuc2Zvcm0pOworICAgIH0KKyNlbmRpZgorCisgICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRD
b250ZXh0KHdpbmRvd3NDb250ZXh0LmhkYygpKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChtX3Bs
dWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKworICAgIG5w
RXZlbnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUoKTsKKworICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9
IFdNX0tFWURPV047CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsKKyAgICB9IGVsc2UgaWYg
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKKyAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX0NIQVI7CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsKKyAg
ICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsK
KyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWVVQOworICAgICAgICBucEV2ZW50LmxQYXJh
bSA9IDB4ODAwMDsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKKyAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKK30KKworZXh0ZXJuIGJvb2wgaWdub3JlTmV4dFNldEN1cnNvcjsK
Kwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQor
eworICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKKworICAgIE5QRXZlbnQg
bnBFdmVudDsKKworICAgIEludFBvaW50IHAgPSBjb250ZW50c1RvTmF0aXZlV2luZG93KGRvd25j
YXN0PEZyYW1lVmlldz4ocGFyZW50KCkpLCBJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQt
PnBhZ2VZKCkpKTsKKworICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55
KCkpOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKworICAgIGlmIChldmVudC0+Y3RybEtleSgp
KQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19DT05UUk9MOworICAgIGlmIChldmVudC0+
c2hpZnRLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfU0hJRlQ7CisKKyAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgfHwKKyAgICAg
ICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCAKKyAgICAg
ICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKKyAgICAg
ICAgbnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9WRTsKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0
b25Eb3duKCkpCisgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfTEJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQu
d1BhcmFtIHw9IE1LX01CVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQu
d1BhcmFtIHw9IE1LX1JCVVRUT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgfQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50KSB7CisgICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOworICAgICAgICBz
d2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAg
ICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50
ID0gV01fTUJVVFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChl
dmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBu
cEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVU
VE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAg
ICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vblZNKCkpOworICAgIC8vIEZJWE1FOiBDb25zaWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6
Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUuCisgICAgaWYgKGRpc3BhdGNoTlBFdmVudChu
cEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyNpZiAhUExB
VEZPUk0oR1RLKQorICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlz
IGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAKKyAgICAvLyBh
bmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRv
IHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCisgICAgaWdub3JlTmV4dFNldEN1cnNvciA9IHRy
dWU7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAg
IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3Io
KTsKKyNlbmRpZgorfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBw
YXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlmIChwYXJl
bnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElmIHRoZSBw
bHVnLWluIHdpbmRvdyBvciBvbmUgb2YgaXRzIGNoaWxkcmVuIGhhdmUgdGhlIGZvY3VzLCB3ZSBu
ZWVkIHRvIAorICAgICAgICAvLyBjbGVhciBpdCB0byBwcmV2ZW50IHRoZSB3ZWIgdmlldyB3aW5k
b3cgZnJvbSBiZWluZyBmb2N1c2VkIGJlY2F1c2UgdGhhdCBjYW4KKyAgICAgICAgLy8gdHJpZ2dl
ciBhIGxheW91dCB3aGlsZSB0aGUgcGx1Z2luIGVsZW1lbnQgaXMgYmVpbmcgZGV0YWNoZWQuCisg
ICAgICAgIEhXTkQgZm9jdXNlZFdpbmRvdyA9IDo6R2V0Rm9jdXMoKTsKKyAgICAgICAgaWYgKHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNlZFdpbmRvdyB8fCA6OklzQ2hpbGQocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRvdykpCisgICAgICAgICAgICA6OlNldEZvY3Vz
KDApOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wg
dmlzaWJsZSkKK3sKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOworCisg
ICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSB7CisgICAg
ICAgIGlmICh2aXNpYmxlKQorICAgICAgICAgICAgU2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCBTV19TSE9XTkEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBTaG93V2luZG93
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJREUpOworICAgIH0KK30KKwordm9pZCBQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
IW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJbiB0aGUgR1RLIHBvcnQg
d2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUg
d2luZG93CisgICAgLy8gY29vcmRpbmF0ZXMuCisjIGlmIFBMQVRGT1JNKEdUSykKKyAgICBJbnRQ
b2ludCBwID0gcmVjdC5sb2NhdGlvbigpOworIyBlbHNlCisgICAgSW50UG9pbnQgcCA9IGRvd25j
YXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24o
KSk7CisjIGVuZGlmCisgICAgbV9ucFdpbmRvdy54ID0gcC54KCk7CisgICAgbV9ucFdpbmRvdy55
ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIG1f
bnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIG1fbnBXaW5kb3cuY2xpcFJl
Y3QucmlnaHQgPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20g
PSByZWN0LmhlaWdodCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBk
cm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICAgICAgc2V0Q2Fs
bGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdp
bmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOworCisgICAgICAgIG1faGF2ZUNhbGxlZFNldFdpbmRvdyA9IHRydWU7CisKKyAgICAg
ICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNT
RVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworCisgICAgICAgIFdORFBST0MgY3VycmVudFdu
ZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTFBfV05EUFJPQyk7CisgICAgICAgIGlmIChjdXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3
V25kUHJvYykKKyAgICAgICAgICAgIG1fcGx1Z2luV25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRv
d0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIp
UGx1Z2luVmlld1duZFByb2MpOworICAgIH0KK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5k
bGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnVmKQoreworICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICBpZiAo
ZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxl
bmFtZS5zdWJzdHJpbmcoOCk7CisKKyAgICAvLyBHZXQgZmlsZSBpbmZvCisgICAgV0lOMzJfRklM
RV9BVFRSSUJVVEVfREFUQSBhdHRyczsKKyAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeFcoZmls
ZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEdldEZpbGVFeElu
Zm9TdGFuZGFyZCwgJmF0dHJzKSA9PSAwKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1Rf
Rk9VTkQ7CisKKyAgICBpZiAoYXR0cnMuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRF
X0RJUkVDVE9SWSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAg
SEFORExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlVyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgRklMRV9SRUFEX0RBVEEsIEZJTEVfU0hBUkVfUkVBRCwg
MCwgT1BFTl9FWElTVElORywgMCwgMCk7CisgICAgCisgICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5W
QUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsK
KworICAgIGJ1ZmZlci5yZXNpemUoYXR0cnMubkZpbGVTaXplTG93KTsKKworICAgIERXT1JEIGJ5
dGVzUmVhZDsKKyAgICBpbnQgcmV0dmFsID0gUmVhZEZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRh
dGEoKSwgYXR0cnMubkZpbGVTaXplTG93LCAmYnl0ZXNSZWFkLCAwKTsKKworICAgIENsb3NlSGFu
ZGxlKGZpbGVIYW5kbGUpOworCisgICAgaWYgKHJldHZhbCA9PSAwIHx8IGJ5dGVzUmVhZCAhPSBh
dHRycy5uRmlsZVNpemVMb3cpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsK
KworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0
Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlLCB2b2lkKiwgTlBFcnJvciopCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBO
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCit7CisgICAg
c3dpdGNoICh2YXJpYWJsZSkgeworICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewor
ICAgICAgICAgICAgSFdORCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SFdORCo+KHZhbHVlKTsKKyAg
ICAgICAgICAgICp3ID0gd2luZG93SGFuZGxlRm9yUGFnZUNsaWVudChwYXJlbnQoKSA/IHBhcmVu
dCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpIDogMCk7CisgICAgICAgICAg
ICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczogeworICAgICAg
ICAgICAgTlBCb29sKiBmbGFnID0gcmVpbnRlcnByZXRfY2FzdDxOUEJvb2wqPih2YWx1ZSk7Cisg
ICAgICAgICAgICAqZmxhZyA9IFRSVUU7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9f
RVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3Ojpp
bnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChtX2lzV2luZG93
ZWQpIHsKKyAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsgcmVjdC54KCksIHJlY3QueSgpLCBy
ZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgfTsKKyAgICAgICAgOjpJbnZhbGlkYXRlUmVjdChwbGF0
Zm9ybVBsdWdpbldpZGdldCgpLCAmaW52YWxpZFJlY3QsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAg
aWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0g
cmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKworICAgIGlmIChtX2lzV2lu
ZG93ZWQpIHsKKyAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsgci54KCksIHIueSgpLCByLm1h
eFgoKSwgci5tYXhZKCkgfTsKKyAgICAgICAgSW52YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgJmludmFsaWRSZWN0LCBGQUxTRSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0
ZSkpIHsKKyAgICAgICAgICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChyKTsKKyAgICAgICAgICAg
IGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICBtX2lu
dmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGludmFsaWRhdGVSZWN0KHIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3Ojpp
bnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3sKKyAgICBpZiAobV9pc1dpbmRvd2Vk
KQorICAgICAgICByZXR1cm47CisKKyAgICBSRUNUIHI7CisKKyAgICBpZiAoR2V0UmduQm94KHJl
Z2lvbiwgJnIpID09IDApIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgSW50UmVjdCByZWN0KEludFBvaW50KHIubGVmdCwgci50b3ApLCBJbnRT
aXplKHIucmlnaHQtci5sZWZ0LCByLmJvdHRvbS1yLnRvcCkpOworICAgIGludmFsaWRhdGVSZWN0
KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBpZiAo
bV9pc1dpbmRvd2VkKQorICAgICAgICA6OlVwZGF0ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKTsKKyAgICBlbHNlCisgICAgICAgIDo6VXBkYXRlV2luZG93KHdpbmRvd0hhbmRsZUZvclBh
Z2VDbGllbnQocGFyZW50KCkgPyBwYXJlbnQoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKSA6IDApKTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKK3sK
KyAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOworICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5T
dGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAg
ICAgICByZWdpc3RlclBsdWdpblZpZXcoKTsKKyAgICAgICAgc2V0VXBPZmZzY3JlZW5QYWludGlu
Z0hvb2tzKGhvb2tlZEJlZ2luUGFpbnQsIGhvb2tlZEVuZFBhaW50KTsKKworICAgICAgICBEV09S
RCBmbGFncyA9IFdTX0NISUxEOworICAgICAgICBpZiAoaXNTZWxmVmlzaWJsZSgpKQorICAgICAg
ICAgICAgZmxhZ3MgfD0gV1NfVklTSUJMRTsKKworICAgICAgICBIV05EIHBhcmVudFdpbmRvd0hh
bmRsZSA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5o
b3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKKyAgICAgICAgSFdORCB3aW5kb3cg
PSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lLCAwLCBmbGFn
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIHBh
cmVudFdpbmRvd0hhbmRsZSwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7CisKKyNp
ZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCisgICAgICAgIG1fd2luZG93ID0gd2luZG93
OworI2Vsc2UKKyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQod2luZG93KTsKKyNlbmRpZgorCisg
ICAgICAgIC8vIENhbGxpbmcgU2V0V2luZG93TG9uZ1B0ckEgaGVyZSBtYWtlcyB0aGUgd2luZG93
IHByb2MgQVNDSUksIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGF0IGxlYXN0CisgICAgICAgIC8vIHRo
ZSBTaG9ja3dhdmUgRGlyZWN0b3IgcGx1Zy1pbi4KKyNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2
XzY0KQorICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTFBfV05EUFJPQywgKExPTkdfUFRSKURlZldpbmRvd1Byb2NBKTsKKyNlbHNlCisgICAgICAg
IDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0Ms
IChMT05HKURlZldpbmRvd1Byb2NBKTsKKyNlbmRpZgorICAgICAgICBTZXRQcm9wKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCksIGtXZWJQbHVnaW5WaWV3UHJvcGVydHksIHRoaXMpOworCisgICAgICAg
IG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKyAgICAgICAgbV9ucFdpbmRv
dy53aW5kb3cgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2lu
ZG93LndpbmRvdyA9IDA7CisgICAgfQorCisgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7CisKKyAg
ICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RT
ZXRXaW5kb3dDYWxsKSkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgp
Cit7CisgICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBEZXN0cm95V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgIHNldFBsYXRm
b3JtUGx1Z2luV2lkZ2V0KDApOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBQbHVnaW5WaWV3Ojpz
bmFwc2hvdCgpCit7CisjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVVTRShXSU5HREkpCisgICAgYXV0
byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7CisKKyAgICBp
ZiAoIW1faXNXaW5kb3dlZCkgeworICAgICAgICAvLyBFbmFibGUgd29ybGQgdHJhbnNmb3Jtcy4K
KyAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYy5nZXQoKSwgR01fQURWQU5DRUQpOworCisgICAg
ICAgIFhGT1JNIHRyYW5zZm9ybTsKKyAgICAgICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgp
LCAmdHJhbnNmb3JtKTsKKworICAgICAgICAvLyBXaW5kb3dsZXNzIHBsdWctaW5zIGFzc3VtZSB0
aGF0IHRoZXkncmUgZHJhd2luZyBvbnRvIHRoZSB2aWV3J3MgREMuCisgICAgICAgIC8vIFRyYW5z
bGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBwbHVnLWluIGRyYXdzIGF0ICgwLCAwKS4KKyAg
ICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSku
Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSkubG9jYXRpb24oKTsKKyAgICAgICAgdHJhbnNm
b3JtLmVEeCA9IC1wb3NpdGlvbi54KCk7CisgICAgICAgIHRyYW5zZm9ybS5lRHkgPSAtcG9zaXRp
b24ueSgpOworICAgICAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMuZ2V0KCksICZ0cmFuc2Zvcm0p
OworICAgIH0KKworICAgIHZvaWQqIGJpdHM7CisgICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJ
bmZvOjpjcmVhdGVCb3R0b21VcChmcmFtZVJlY3QoKS5zaXplKCkpOworICAgIGF1dG8gaGJtcCA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9S
UywgJmJpdHMsIDAsIDApKTsKKworICAgIEhCSVRNQVAgaGJtcE9sZCA9IHN0YXRpY19jYXN0PEhC
SVRNQVA+KFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXAuZ2V0KCkpKTsKKworICAgIHBhaW50
SW50b1RyYW5zZm9ybWVkQ29udGV4dChoZGMuZ2V0KCkpOworCisgICAgU2VsZWN0T2JqZWN0KGhk
Yy5nZXQoKSwgaGJtcE9sZCk7CisKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShoYm1w
LmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9ucGFwaS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL25wYXBpLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGQ5
MGE1MmI3YTFlN2M5NmU4ZGY0ZDg5OWJjZjgwMTk0OGVmZmQwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9ucGFwaS5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgIm5w
cnVudGltZV9pbnRlcm5hbC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gVGhl
IHBsdWdpbiB2aWV3IGlzIGFsd2F5cyB0aGUgbmRhdGEgb2YgdGhlIGluc3RhbmNlLC4gU29tZXRp
bWVzLCBwbHVnLWlucyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Utc3BlY2lmaWMgZnVuY3Rpb24KKy8v
IHdpdGggYSBOVUxMIGluc3RhbmNlLiBUbyB3b3JrYXJvdW5kIHRoaXMsIGNhbGwgdGhlIGxhc3Qg
cGx1Zy1pbiB2aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBwbHVnLWluLgorLy8gQ3VycmVudGx5
LCB0aGUgY3VycmVudCBwbHVnLWluIHZpZXcgaXMgb25seSBzZXQgYmVmb3JlIE5QUF9OZXcgaW4g
UGx1Z2luVmlldzo6c3RhcnQuCisvLyBUaGlzIHNwZWNpZmljYWxseSB3b3JrcyBhcm91bmQgRmxh
c2ggYW5kIFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5QUF9OZXcsIHRoZXkgY2FsbCBOUE5fVXNl
cmFnZW50IHdpdGggYSBOVUxMIGluc3RhbmNlLgorc3RhdGljIFBsdWdpblZpZXcqIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShOUFAgaW5zdGFuY2UpCit7CisgICAgaWYgKGluc3RhbmNlICYmIGluc3Rh
bmNlLT5uZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihpbnN0
YW5jZS0+bmRhdGEpOworICAgIHJldHVybiBQbHVnaW5WaWV3OjpjdXJyZW50UGx1Z2luVmlldygp
OworfQorCit2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4g
bWFsbG9jKHNpemUpOworfQorCit2b2lkIE5QTl9NZW1GcmVlKHZvaWQqIHB0cikKK3sKKyAgICBm
cmVlKHB0cik7Cit9CisKK3VpbnQzMl90IE5QTl9NZW1GbHVzaCh1aW50MzJfdCkKK3sKKyAgICAv
LyBEbyBub3RoaW5nCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1JlbG9hZFBsdWdpbnMo
TlBCb29sIHJlbG9hZFBhZ2VzKQoreworICAgIFBhZ2U6OnJlZnJlc2hQbHVnaW5zKHJlbG9hZFBh
Z2VzKTsKK30KKworTlBFcnJvciBOUE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qLCBOUEJ5dGVSYW5n
ZSopCit7CisgICAgcmV0dXJuIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FCTEU7Cit9CisKK05QRXJy
b3IgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkxOb3RpZnkodXJsLCB0YXJnZXQsIG5vdGlmeURh
dGEpOworfQorCitOUEVycm9yIE5QTl9HZXRVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKS0+Z2V0VVJMKHVybCwgdGFyZ2V0KTsKK30KKworTlBFcnJvciBOUE5fUG9z
dFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFy
Z2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5v
dGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PnBvc3RVUkxOb3RpZnkodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhKTsK
K30KKworTlBFcnJvciBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29s
IGZpbGUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBv
c3RVUkwodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlKTsKK30KKworTlBFcnJvciBOUE5fTmV3
U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQs
IE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpLT5uZXdTdHJlYW0odHlwZSwgdGFyZ2V0LCBzdHJlYW0pOworfQorCitpbnQzMl90
IE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLCB2
b2lkKiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSktPndyaXRlKHN0cmVhbSwgbGVuLCBidWZmZXIpOworfQorCitOUEVycm9yIE5QTl9EZXN0cm95
U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQor
eworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5kZXN0cm95U3Ry
ZWFtKHN0cmVhbSwgcmVhc29uKTsKK30KKworY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAg
aW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5j
ZShpbnN0YW5jZSk7CisKKyAgICAgaWYgKCF2aWV3KQorICAgICAgICAgcmV0dXJuIFBsdWdpblZp
ZXc6OnVzZXJBZ2VudFN0YXRpYygpOworIAorICAgIHJldHVybiB2aWV3LT51c2VyQWdlbnQoKTsK
K30KKwordm9pZCBOUE5fU3RhdHVzKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSkK
K3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zdGF0dXMobWVzc2FnZSk7
Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWN0KE5QUCBpbnN0YW5jZSwgTlBSZWN0KiBpbnZh
bGlkUmVjdCkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKTsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgLy8gTlNQbHVnaW5XcmFwcGVy
LCBhIHBsdWdpbiB3cmFwcGVyIGJpbmFyeSB0aGF0IGFsbG93cyBydW5uaW5nIDMyLWJpdCBwbHVn
aW5zCisgICAgLy8gb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgdHlwaWNhbGx5IHVzZWQgaW4gWDEx
LCB3aWxsIHNvbWV0aW1lcyBnaXZlIHVzIGEgbnVsbCBOUFAgaGVyZS4KKyAgICBpZiAoIXZpZXcp
CisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIHZpZXctPmludmFsaWRhdGVSZWN0KGludmFs
aWRSZWN0KTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lvbihOUFAgaW5zdGFuY2UsIE5Q
UmVnaW9uIGludmFsaWRSZWdpb24pCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+aW52YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVnaW9uKTsKK30KKwordm9pZCBOUE5fRm9y
Y2VSZWRyYXcoTlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSktPmZvcmNlUmVkcmF3KCk7Cit9CisKK05QRXJyb3IgTlBOX0dldFZhbHVlKE5QUCBpbnN0
YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIFBsdWdpblZp
ZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOworCisgICAgIGlmICgh
dmlldykKKyAgICAgICAgIHJldHVybiBQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyh2YXJpYWJs
ZSwgdmFsdWUpOworCisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK05QRXJyb3IgTlBOX1NldFZhbHVlKE5Q
UCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgcmV0
dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVlKHZhcmlhYmxlLCB2
YWx1ZSk7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhRW52KCkKK3sKKyAgICAvLyBVbnN1cHBvcnRl
ZAorICAgIHJldHVybiAwOworfQorCit2b2lkKiBOUE5fR2V0SmF2YVBlZXIoTlBQKQoreworICAg
IC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1B1c2hQb3B1cHNF
bmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCkKK3sKKyAgICBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGVuYWJsZWQp
OworfQorCit2b2lkIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlKQorewor
ICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvcFBvcHVwc0VuYWJsZWRTdGF0
ZSgpOworfQorCitleHRlcm4gIkMiIHR5cGVkZWYgdm9pZCBQbHVnaW5UaHJlYWRBc3luY0NhbGxG
dW5jdGlvbih2b2lkKik7Cit2b2lkIE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwoTlBQIGluc3Rh
bmNlLCBQbHVnaW5UaHJlYWRBc3luY0NhbGxGdW5jdGlvbiBmdW5jLCB2b2lkKiB1c2VyRGF0YSkK
K3sKKyAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiB0eXBlIG9ubHkgZGlmZmVycyBmcm9tIE1haW5U
aHJlYWRGdW5jdGlvbiBieSBiZWluZyBleHRlcm4gIkMiLCB3aGljaCBkb2Vzbid0IGFmZmVjdCBj
YWxsaW5nIGNvbnZlbnRpb24gb24gYW55IGNvbXBpbGVycyB3ZSB1c2UuCisgICAgUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkuc2NoZWR1bGVDYWxsKGluc3RhbmNlLCByZWlu
dGVycHJldF9jYXN0PFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6Ok1haW5UaHJlYWRGdW5jdGlv
bio+KGZ1bmMpLCB1c2VyRGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX0dldFZhbHVlRm9yVVJMKE5Q
UCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hh
cioqIHZhbHVlLCB1aW50MzJfdCogbGVuKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZUZvclVSTCh2YXJpYWJsZSwgdXJsLCB2YWx1ZSwgbGVu
KTsKK30KKworTlBFcnJvciBOUE5fU2V0VmFsdWVGb3JVUkwoTlBQIGluc3RhbmNlLCBOUE5VUkxW
YXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWlu
dDMyX3QgbGVuKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5zZXRWYWx1ZUZvclVSTCh2YXJpYWJsZSwgdXJsLCB2YWx1ZSwgbGVuKTsKK30KKworTlBFcnJv
ciBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogcHJv
dG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1l
LCBjb25zdCBjaGFyKiByZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hh
cioqIHBhc3N3b3JkLCB1aW50MzJfdCogcGxlbikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0QXV0aGVudGljYXRpb25JbmZvKHByb3RvY29sLCBob3N0
LCBwb3J0LCBzY2hlbWUsIHJlYWxtLCB1c2VybmFtZSwgdWxlbiwgcGFzc3dvcmQsIHBsZW4pOwor
fQorCitOUEVycm9yIE5QTl9Qb3BVcENvbnRleHRNZW51KE5QUCBpbnN0YW5jZSwgTlBNZW51KiBt
ZW51KQoreworICAgIFVOVVNFRF9QQVJBTShpbnN0YW5jZSk7CisgICAgVU5VU0VEX1BBUkFNKG1l
bnUpOworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXgu
Y3BwCmluZGV4IGE5Njg1NjE4ZjQ0NmRlM2E5NTA0N2I3OWFjOTBlZDE1ODNiZmMxMjYuLjVmNTQw
OWZlNGExMWI1OGNhZjBlZjAwZmVjYzhhNGMyMTM4YmQ0NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVV
bml4LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgog
CiAjaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogCiAjaWYgUExBVEZPUk0o
R1RLKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244171</attachid>
            <date>2015-01-07 12:01:14 -0800</date>
            <delta_ts>2015-01-08 08:56:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140133-20150107120118.patch</filename>
            <type>text/plain</type>
            <size>493568</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVlNTJkZmMxNjVjZmM2
NzM5MWM3MzVjZmU0MWU5ODlmNmNhYjdhYy4uZjAzYzVjMjdhZDM5ZGM1YjU0Y2FhMzQ0MzNlZDJh
NTlhZTkwNDgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0aGUgV2lu
ZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
OgorCisyMDE1LTAxLTA2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisK
ICAgICAgICAgVHJ5IHRvIGZpeCB0aGUgV2luZG93cyBidWlsZC4KIAogICAgICAgICAqIFdlYkNv
cmUudmN4cHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5MDg5NTNj
YWYyZTQzN2Q4NjI4OTNjNjQ4NTQ5MGYzODMyNTQ3MWZmLi4zYmFiZTM0MmE0MjVmNDMxNjgyY2Yy
ZGJhYzVhMTE5MWJhOWQyOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0
aGUgV2luZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvajoKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0
LnZjeHByb2ouZmlsdGVyczoKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlkZXIK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEyNgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKaW5kZXggNjNhNWNjNjg5NGY4NmU0N2YxYmU4YjhiOWJjMGM4NjgwMTli
NjdhZS4uNzAyMjc4YWI2NmRlYmMzOTU4ZWU5ODBjZjg3ZTI1NDE0YjAzZDgyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwpAQCAtMSw1ICsxLDMxMCBAQAogMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCisgICAgICAgIE1vdmUgdGhlIFdpbmRvd3Mgb25seSBwbHVn
LWluIGNvZGUgdG8gV2ViS2l0L3dpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQwMTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbHVnaW5zL1BhaW50SG9va3MuYXNtOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGFpbnRIb29rcy5hc20uCisgICAgICAgICogUGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6UGx1
Z2luRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVz
aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZURp
c2FibGVkUGx1Z2luRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6YWRk
RGlzYWJsZWRQbHVnaW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpk
ZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFk
VVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlVVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnNldFBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjphZGRQbHVnaW5Q
YXRoc0Zyb21SZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6Z2V0
UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVmVyc2lv
blN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlVmVyc2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6YWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3Jl
OjphZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6YWRk
SmF2YVBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpzYWZhcmlQbHVnaW5zRGly
ZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmll
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVj
dG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXR0
eU5hbWVGb3JEcmF3aW5nTW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvckV2
ZW50TW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUpOgorICAgICAgICAqIFBsdWdpbnMv
UGx1Z2luRGVidWcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGVidWcuaC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW46On5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vzc1F1ZXVl
ZE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNzYWdlKToKKyAgICAgICAgKiBQ
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaC4KKyAgICAgICAg
KiBQbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2th
Z2U6On5QbHVnaW5QYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZy
ZWVMaWJyYXJ5U29vbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmcmVlTGli
cmFyeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6Y29tcGFy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnVubG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZTo6ZGV0ZXJtaW5lUXVpcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0TGlzdEZyb21WYXJpYW50QXJncyk6CisgICAgICAgIChXZWJDb3JlOjptYWtlU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOUE5f
SW52b2tlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2luTG9hZGVkKToKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdp
blBhY2thZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5oLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnBhcmVudERpcmVj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjptb2R1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblBhY2thZ2U6Om1pbWVUb0Rlc2NyaXB0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjptaW1lVG9FeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
OjpwbHVnaW5GdW5jcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpxdWlya3Mp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6dmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmdWxsTUlNRURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blBhY2thZ2VIYXNoOjplcXVhbCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2lu
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmVyc2lvbkluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2U6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24pOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luUXVp
cmtTZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtT
ZXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblF1aXJrU2V0OjpQbHVnaW5RdWlya1NldCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5RdWlya1NldDo6YWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblF1aXJrU2V0Ojpjb250YWlucyk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6c3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5TdHJlYW06OlBsdWdpblN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJl
YW06On5QbHVnaW5TdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6bGFzdE1vZGlmaWVkRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OnN0YXJ0U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6b3duZXJGb3JT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblN0cmVhbTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjp3YW50
c0FsbFN0cmVhbXMpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luU3RyZWFtLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luU3RyZWFtQ2xpZW50Ojp+UGx1Z2luU3RyZWFtQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5TdHJlYW06OnNldExvYWRNYW51YWxseSk6CisgICAgICAgICogUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
dy5jcHAuCisgICAgICAgIChXZWJDb3JlOjppbnN0YW5jZU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNl
dEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpmcmFtZVJlY3RzQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
dGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjdXJy
ZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVVVEY4U3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNjaGVkdWxlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6Z2V0VVJMTm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpwb3N0VVJMTm90aWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBvc3RVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6bmV3U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRlc3Ryb3lTdHJlYW0p
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmludmFsaWRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnB1
c2hQb3B1cHNFbmFibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmFyZVBv
cHVwc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0SmF2YVNjcmlw
dFBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OlBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9jdXNQbHVnaW5F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0Q2FsbGluZ1BsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppc0Nh
bGxpbmdQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydHNXaXRoQmxhbmtMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2F0aW9u
QWZ0ZXJGaXJzdEJsYW5rTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRU9MKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlUG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZh
bGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50U3Rh
dGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjprZWVwQWxpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5WaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblJlcXVlc3Q6OlBsdWdpblJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUmVxdWVzdDo6ZnJhbWVMb2FkUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5SZXF1ZXN0Ojpub3RpZnlEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblJlcXVlc3Q6OnNlbmROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luUmVxdWVzdDo6c2hvdWxkQWxsb3dQb3B1cHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWFudWFsTG9hZGVyOjp+UGx1Z2luTWFudWFsTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdGF0dXMpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwYXJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbHVnaW5zUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjptaW1l
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cmwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cGx1Z2luV25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXRQbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjp0b1BsdWdp
blZpZXcpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcC4KKyAgICAgICAg
KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aG9va2VkQmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpob29r
ZWRFbmRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpob29rKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3Rl
clBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlld1du
ZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6aXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRlbnRzVG9OYXRpdmVXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFp
bnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnNuYXBzaG90KToKKyAgICAgICAgKiBQbHVnaW5zL25wYXBpLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwLgorICAgICAgICAocGx1Z2luVmlld0Zvcklu
c3RhbmNlKToKKyAgICAgICAgKE5QTl9NZW1BbGxvYyk6CisgICAgICAgIChOUE5fTWVtRnJlZSk6
CisgICAgICAgIChOUE5fTWVtRmx1c2gpOgorICAgICAgICAoTlBOX1JlbG9hZFBsdWdpbnMpOgor
ICAgICAgICAoTlBOX1JlcXVlc3RSZWFkKToKKyAgICAgICAgKE5QTl9HZXRVUkxOb3RpZnkpOgor
ICAgICAgICAoTlBOX0dldFVSTCk6CisgICAgICAgIChOUE5fUG9zdFVSTE5vdGlmeSk6CisgICAg
ICAgIChOUE5fUG9zdFVSTCk6CisgICAgICAgIChOUE5fTmV3U3RyZWFtKToKKyAgICAgICAgKE5Q
Tl9Xcml0ZSk6CisgICAgICAgIChOUE5fRGVzdHJveVN0cmVhbSk6CisgICAgICAgIChOUE5fVXNl
ckFnZW50KToKKyAgICAgICAgKE5QTl9TdGF0dXMpOgorICAgICAgICAoTlBOX0ludmFsaWRhdGVS
ZWN0KToKKyAgICAgICAgKE5QTl9JbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKE5QTl9Gb3Jj
ZVJlZHJhdyk6CisgICAgICAgIChOUE5fR2V0VmFsdWUpOgorICAgICAgICAoTlBOX1NldFZhbHVl
KToKKyAgICAgICAgKE5QTl9HZXRKYXZhRW52KToKKyAgICAgICAgKE5QTl9HZXRKYXZhUGVlcik6
CisgICAgICAgIChOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSk6CisgICAgICAgIChOUE5fUG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwp
OgorICAgICAgICAoTlBOX0dldFZhbHVlRm9yVVJMKToKKyAgICAgICAgKE5QTl9TZXRWYWx1ZUZv
clVSTCk6CisgICAgICAgIChOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKE5Q
Tl9Qb3BVcENvbnRleHRNZW51KToKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlk
ZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEy
NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc3MzBlOWE3NDI4YjM4ZjU2YjJmNjJlYjIxZWQ5
MGMxM2IyZWUzMzYuLmUxZDY0YmRhNjU2NTYyOGQ0ZGJmN2MyZjcyODlkOGUzMDQxOTJmMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjQyLDkgKzIyNDIsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGx1Z2lucy9ET01QbHVnaW4uY3BwCiAgICAgcGx1Z2lucy9ET01QbHVnaW5BcnJh
eS5jcHAKICAgICBwbHVnaW5zL1BsdWdpbkRhdGEuY3BwCi0gICAgcGx1Z2lucy9QbHVnaW5EZWJ1
Zy5jcHAKICAgICBwbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCi0gICAgcGx1
Z2lucy9QbHVnaW5TdHJlYW0uY3BwCiAKICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNw
cAogICAgIHJlbmRlcmluZy9CaWRpUnVuLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggNGY3NjY5MzY0MjBlZTBjMDM1ZGVhMTk4M2Ex
NDc3NzMwOThhYWEwOS4uNWZhN2IzZGI4NjQyOWZjOGE1NTQyYmJhZGY3YTkxZmE3NTdjODU4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBA
IC0xNzc1NCwxOCArMTc3NTQsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1xET01NaW1lVHlwZUFycmF5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcRE9NUGx1Z2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcRE9NUGx1Z2luQXJyYXkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1
Z2luc1xucGFwaS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRhdGEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVn
aW5EYXRhYmFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRlYnVnLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5TdHJlYW0uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5WaWV3LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsdWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2luLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luUGFja2FnZVdpbi5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5WaWV3
V2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbGxJbk9uZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdmdcU1ZHRm9udEZhY2VFbGVtZW50
LmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgpAQCAtMjEwMzEsMTUgKzIxMDIxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcbnBmdW5jdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcbnBydW50aW1lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRhdGEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGF0YWJhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGVidWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1xQbHVnaW5QYWNrYWdlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblF1aXJrU2V0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblN0cmF0ZWd5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblN0cmVhbS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQ
bHVnaW5WaWV3LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzdmdcQ29sb3JEaXN0YW5jZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Zn
XFNWR0FFbGVtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZjk1OWI2MzRlM2UxNjFhZGY3
MDZhNGYwMzA3Y2YxMzYzNTQ3Mzk4Mi4uMjIzMDg0NjM2NWJjNDdjOWIzY2E2OGFlZWM4MTIxZDVh
ZmY1MGVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNDU2OSw0MiArNDU2OSwxMiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xET01QbHVnaW5BcnJheS5jcHAiPgogICAgICAgPEZp
bHRlcj5wbHVnaW5zPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbHVnaW5zXG5wYXBpLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luRGF0YS5jcHAiPgogICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpbkRh
dGFiYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGVidWcuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5jcHAiPgot
ICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblN0cmVhbS5jcHAiPgotICAgICAgPEZp
bHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2lu
czwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGx1Z2luc1x3aW5cUGx1Z2luRGF0YWJhc2VXaW4uY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2lu
c1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIj4KLSAgICAgIDxG
aWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblBhY2thZ2VXaW4uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblZpZXdXaW4uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbGxJbk9uZS5jcHAiPgogICAgICAgPEZpbHRlcj5y
ZW5kZXJpbmdcc3ZnPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xMTYxMywzMyArMTE1
ODMsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YS5o
Ij4KICAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1
Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiPgogICAgICAgPEZpbHRlcj5w
bHVnaW5zPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luUXVpcmtTZXQuaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
U3RyYXRlZ3kuaCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyZWFtLmgi
PgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuaCI+Ci0gICAgICA8Rmls
dGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCI+Ci0gICAg
ICA8RmlsdGVyPnBsdWdpbnNcd2luPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcQ29sb3JEaXN0YW5jZS5oIj4KICAgICAgIDxGaWx0ZXI+
cmVuZGVyaW5nXHN2ZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNjZiMGMzNDM4NTc3ODViYjY4MzQxMjA4YTA3MzY0M2U1
ZjIwMzEwYS4uMDExOGM1MDMxMzk2MGE0ZjU2MmRiMjE4ZGZlOGE5Mzk0YmZkODdmMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC05MSw3ICs5MSw2IEBACiAjaW5jbHVk
ZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5o
IgogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgog
I2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgog
I2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAppbmRleCBkMjcyNDU4Y2EwM2ZiZWM1NzE2
MjNlZTRhYTFiMjNkYmVjMzNiNzA1Li4xOTkzOGQyMzE1ZGFiYzg4OGY5NDFmOGM5MWMwYjBlZjI3
ODBmYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
UGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYTJjZWUyZGE3MmNhZjE0Yjc1Y2YzNmZh
YWQxNGI3NWU1NzQ4NTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2NzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlLmgiCi0KLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIlVSTC5oIgot
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01F
VEFEQVRBX0NBQ0hFKQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNlbmRpZgotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4g
PiBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKLXN0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bVBlcnNpc3RlbnRQbHVn
aW5NZXRhZGF0YUNhY2hlU2l6ZSA9IDMyNzY4OwotCi1zdGF0aWMgYm9vbCBnUGVyc2lzdGVudFBs
dWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7Ci0KLVN0cmluZyYgcGVyc2lzdGVudFBsdWdpbk1l
dGFkYXRhQ2FjaGVQYXRoKCkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBjYWNoZVBhdGgsICgpKTsKLSAgICByZXR1cm4gY2FjaGVQYXRoOwotfQotI2VuZGlm
Ci0KLVBsdWdpbkRhdGFiYXNlOjpQbHVnaW5EYXRhYmFzZSgpCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICA6IG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJ
c0xvYWRlZChmYWxzZSkKLSNlbmRpZgotewotfQotCi1QbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0
YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSkKLXsKLSAgICBzdGF0aWMgUGx1
Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAwOwotCi0gICAgaWYgKCFwbHVnaW5zKSB7Ci0gICAgICAg
IHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2U7Ci0KLSAgICAgICAgaWYgKHBvcHVsYXRlKSB7
Ci0gICAgICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5EaXJlY3RvcmllcyhQbHVnaW5EYXRhYmFz
ZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkpOwotICAgICAgICAgICAgcGx1Z2lucy0+cmVm
cmVzaCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBsdWdpbnM7Ci19Ci0KLWJv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZy
ZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCi0gICAgcmV0dXJuIChyZWZy
ZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlKSk7Ci19Ci0K
LXZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgZGlyZWN0b3J5KQotewotICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9y
eSk7Ci0gICAgcmVmcmVzaCgpOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkK
LXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIGlmICgh
bV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkKQotICAgICAgICBsb2FkUGVyc2lzdGVu
dE1ldGFkYXRhQ2FjaGUoKTsKLSNlbmRpZgotICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZh
bHNlOwotCi0gICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBsdWdpblNl
dCBwbHVnaW5zVG9VbmxvYWQ7Ci0gICAgICAgIGdldERlbGV0ZWRQbHVnaW5zKHBsdWdpbnNUb1Vu
bG9hZCk7Ci0KLSAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKLSAgICAgICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBwbHVnaW5zVG9VbmxvYWQuZW5kKCk7Ci0gICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICByZW1vdmUoaXQtPmdldCgpKTsKLQotICAgICAg
ICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCk7Ci0gICAgfQot
Ci0gICAgSGFzaFNldDxTdHJpbmc+IHBhdGhzOwotICAgIGdldFBsdWdpblBhdGhzSW5EaXJlY3Rv
cmllcyhwYXRocyk7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBwYXRoc1dpdGhUaW1l
czsKLQotICAgIC8vIFdlIHNob3VsZCBvbmx5IHNraXAgdW5jaGFuZ2VkIGZpbGVzIGlmIHdlIGRp
ZG4ndCByZW1vdmUgYW55IHBsdWdpbnMgYWJvdmUuIElmIHdlIGRpZCByZW1vdmUKLSAgICAvLyBh
bnkgcGx1Z2lucywgd2UgbmVlZCB0byBsb29rIGF0IGV2ZXJ5IHBsdWdpbiBmaWxlIHNvIHRoYXQs
IGUuZy4sIGlmIHRoZSB1c2VyIGhhcyB0d28gdmVyc2lvbnMKLSAgICAvLyBvZiBSZWFsUGxheWVy
IGluc3RhbGxlZCBhbmQganVzdCByZW1vdmVkIHRoZSBuZXdlciBvbmUsIHdlJ2xsIHBpY2sgdXAg
dGhlIG9sZGVyIG9uZS4KLSAgICBib29sIHNob3VsZFNraXBVbmNoYW5nZWRGaWxlcyA9ICFwbHVn
aW5TZXRDaGFuZ2VkOwotCi0gICAgSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXRo
c0VuZCA9IHBhdGhzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHBhdGhzLmJlZ2luKCk7IGl0ICE9IHBhdGhzRW5kOyArK2l0KSB7Ci0gICAgICAg
IHRpbWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRp
bWUoKml0LCBsYXN0TW9kaWZpZWQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
cGF0aHNXaXRoVGltZXMuYWRkKCppdCwgbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICAvLyBJZiB0
aGUgcGF0aCdzIHRpbWVzdGFtcCBoYXNuJ3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdl
IHJhbiByZWZyZXNoKCksIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcuCi0gICAgICAgIGlm
IChzaG91bGRTa2lwVW5jaGFuZ2VkRmlsZXMgJiYgbV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5nZXQo
Kml0KSA9PSBsYXN0TW9kaWZpZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBp
ZiAoUmVmUHRyPFBsdWdpblBhY2thZ2U+IG9sZFBhY2thZ2UgPSBtX3BsdWdpbnNCeVBhdGguZ2V0
KCppdCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzIHx8
IG9sZFBhY2thZ2UtPmxhc3RNb2RpZmllZCgpICE9IGxhc3RNb2RpZmllZCk7Ci0gICAgICAgICAg
ICByZW1vdmUob2xkUGFja2FnZS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8
UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoKml0
LCBsYXN0TW9kaWZpZWQpOwotICAgICAgICBpZiAocGFja2FnZSAmJiBhZGQocGFja2FnZS5yZWxl
YXNlKCkpKQotICAgICAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgLy8gQ2FjaGUgYWxsIHRoZSBwYXRocyB3ZSBmb3VuZCB3aXRoIHRoZWlyIHRpbWVzdGFtcHMg
Zm9yIG5leHQgdGltZS4KLSAgICBwYXRoc1dpdGhUaW1lcy5zd2FwKG1fcGx1Z2luUGF0aHNXaXRo
VGltZXMpOwotCi0gICAgaWYgKCFwbHVnaW5TZXRDaGFuZ2VkKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIHVw
ZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7Ci0jZW5kaWYKLQotICAgIG1fcmVnaXN0ZXJl
ZE1JTUVUeXBlcy5jbGVhcigpOwotCi0gICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVz
Ci0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0g
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcwotICAgICAgICBN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1l
VG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwotICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5k
KCk7Ci0gICAgICAgIGZvciAoOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAg
ICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+a2V5KTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotVmVjdG9yPFBsdWdpblBhY2thZ2UqPiBQbHVnaW5EYXRhYmFz
ZTo6cGx1Z2lucygpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7
Ci0KLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsK
LSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVk
UGx1Z2luQ29tcGFyZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQotewotICAgIFBsdWdp
blBhY2thZ2UqIHBsdWdpbkEgPSAqc3RhdGljX2Nhc3Q8UGx1Z2luUGFja2FnZSogY29uc3QqPihh
KTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5CID0gKnN0YXRpY19jYXN0PFBsdWdpblBhY2th
Z2UqIGNvbnN0Kj4oYik7Ci0KLSAgICByZXR1cm4gcGx1Z2luQS0+Y29tcGFyZSgqcGx1Z2luQik7
Ci19Ci0KLVBsdWdpblBhY2thZ2UqIFBsdWdpbkRhdGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7Ci0g
ICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAg
UGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChr
ZXkpOwotICAgIGlmIChwcmVmZXJyZWRQbHVnaW4KLSAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2lu
LT5pc0VuYWJsZWQoKQotICAgICAgICAmJiBwcmVmZXJyZWRQbHVnaW4tPm1pbWVUb0Rlc2NyaXB0
aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKLSAgICAgICAgcmV0dXJuIHByZWZlcnJlZFBsdWdpbjsK
LSAgICB9Ci0KLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0K
LSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9ICgq
aXQpLmdldCgpOwotCi0gICAgICAgIGlmICghcGx1Z2luLT5pc0VuYWJsZWQoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChwbHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9ucygp
LmNvbnRhaW5zKGtleSkpIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NB
Q0hFKQotICAgICAgICAgICAgaWYgKCFwbHVnaW4tPmVuc3VyZVBsdWdpbkxvYWRlZCgpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgICAgICBwbHVnaW5DaG9pY2Vz
LmFwcGVuZChwbHVnaW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHBsdWdpbkNob2lj
ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHFzb3J0KHBsdWdpbkNob2lj
ZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUoKSwgc2l6ZW9mKFBsdWdpblBhY2thZ2UqKSwg
UGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUpOwotCi0gICAgcmV0dXJuIHBs
dWdpbkNob2ljZXNbMF07Ci19Ci0KLVN0cmluZyBQbHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGV4dGVu
c2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwotICAgIFN0cmluZyBtaW1l
VHlwZTsKLSAgICBWZWN0b3I8UGx1Z2luUGFja2FnZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0gICAg
SGFzaE1hcDxQbHVnaW5QYWNrYWdlKiwgU3RyaW5nPiBtaW1lVHlwZUZvclBsdWdpbjsKLQotICAg
IGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoKml0KS0+aXNFbmFibGVkKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7Ci0KLSAg
ICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0g
KCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyAr
K21pbWVfaXQpIHsKLSAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZV9pdC0+a2V5OwotICAgICAg
ICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5z
LmdldChtaW1lVHlwZSk7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5z
aW9ucyA9IG1pbWVfaXQtPnZhbHVlOwotICAgICAgICAgICAgYm9vbCBmb3VuZE1hcHBpbmcgPSBm
YWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVu
c2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgUGx1Z2luUGFja2Fn
ZSogcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZl
cnJlZFBsdWdpbiAmJiBQbHVnaW5QYWNrYWdlOjplcXVhbCgqcGx1Z2luLCAqcHJlZmVycmVkUGx1
Z2luKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtaW1lVHlwZTsKLQotI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgICAgICAgICAgICAg
IGlmICghcGx1Z2luLT5lbnN1cmVQbHVnaW5Mb2FkZWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIHBsdWdpbkNob2ljZXMu
YXBwZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlRm9yUGx1Z2luLmFk
ZChwbHVnaW4sIG1pbWVUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRNYXBwaW5nID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZvdW5kTWFwcGluZykKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcXNvcnQocGx1Z2luQ2hvaWNl
cy5kYXRhKCksIHBsdWdpbkNob2ljZXMuc2l6ZSgpLCBzaXplb2YoUGx1Z2luUGFja2FnZSopLCBQ
bHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk7Ci0KLSAgICByZXR1cm4gbWlt
ZVR5cGVGb3JQbHVnaW4uZ2V0KHBsdWdpbkNob2ljZXNbMF0pOwotfQotCi1QbHVnaW5QYWNrYWdl
KiBQbHVnaW5EYXRhYmFzZTo6ZmluZFBsdWdpbihjb25zdCBVUkwmIHVybCwgU3RyaW5nJiBtaW1l
VHlwZSkKLXsKLSAgICBpZiAoIW1pbWVUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBs
dWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICAKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSB1
cmwubGFzdFBhdGhDb21wb25lbnQoKTsKLSAgICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy8nKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1l
LnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYgKGV4dGVuc2lvblBvcyA9PSAtMSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCi0gICAgU3RyaW5nIG1pbWVUeXBlRm9yRXh0ZW5zaW9uID0gTUlNRVR5
cGVGb3JFeHRlbnNpb24oZmlsZW5hbWUuc3Vic3RyaW5nKGV4dGVuc2lvblBvcyArIDEpKTsKLSAg
ICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZUZvckV4
dGVuc2lvbik7Ci0gICAgaWYgKCFwbHVnaW4pIHsKLSAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBs
dWdpbiBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgV2luZG93cyBmb3IgdGhlIG1pbWUgdHlwZQotICAg
ICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCi0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICAKLSAgICBtaW1lVHlwZSA9IG1pbWVUeXBlRm9yRXh0ZW5zaW9uOwotICAg
IHJldHVybiBwbHVnaW47Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNldFByZWZlcnJlZFBs
dWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBsdWdpblBhY2thZ2UqIHBs
dWdpbikKLXsKLSAgICBpZiAoIXBsdWdpbiB8fCBwbHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5j
b250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIG1fcHJlZmVycmVkUGx1Z2lucy5zZXQobWltZVR5
cGUubG93ZXIoKSwgcGx1Z2luKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0
c0FuZElzTm90RGlzYWJsZWQoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkgY29uc3QKLXsKLSAgICAv
LyBTa2lwIHBsdWdpbiBmaWxlcyB0aGF0IGFyZSBkaXNhYmxlZCBieSBmaWxlbmFtZS4KLSAgICBp
ZiAobV9kaXNhYmxlZFBsdWdpbkZpbGVzLmNvbnRhaW5zKHBhdGhHZXRGaWxlTmFtZShmaWxlUGF0
aCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZmlsZUV4aXN0cyhmaWxl
UGF0aCk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKFBsdWdp
blNldCYgcGx1Z2lucykgY29uc3QKLXsKLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgh
ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKCppdCktPnBhdGgoKSkpCi0gICAgICAgICAgICBw
bHVnaW5zLmFkZCgqaXQpOwotICAgIH0KLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6YWRkKFBh
c3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gcHJwUGFja2FnZSkKLXsKLSAgICBBU1NFUlRfQVJHKHBy
cFBhY2thZ2UsIHBycFBhY2thZ2UpOwotCi0gICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2th
Z2UgPSBwcnBQYWNrYWdlOwotCi0gICAgaWYgKCFtX3BsdWdpbnMuYWRkKHBhY2thZ2UpLmlzTmV3
RW50cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcGx1Z2luc0J5UGF0aC5hZGQo
cGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQ
bHVnaW5EYXRhYmFzZTo6cmVtb3ZlKFBsdWdpblBhY2thZ2UqIHBhY2thZ2UpCi17Ci0gICAgTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWNrYWdlLT5taW1lVG9FeHRl
bnNpb25zKCkuYmVnaW4oKTsKLSAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7Ci0gICAgZm9yICggOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0
b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQbHVnaW5zLmZpbmQoaXQtPmtleSk7Ci0gICAg
ICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVmZXJyZWRQbHVnaW5zLmVuZCgpICYmIHBhY2th
Z2VJbk1hcC0+dmFsdWUgPT0gcGFja2FnZSkKLSAgICAgICAgICAgIG1fcHJlZmVycmVkUGx1Z2lu
cy5yZW1vdmUocGFja2FnZUluTWFwKTsKLSAgICB9Ci0KLSAgICBtX3BsdWdpbnMucmVtb3ZlKHBh
Y2thZ2UpOwotICAgIG1fcGx1Z2luc0J5UGF0aC5yZW1vdmUocGFja2FnZS0+cGF0aCgpKTsKLX0K
LQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Y2xlYXIoKQotewotICAgIG1fcGx1Z2lucy5jbGVhcigp
OwotICAgIG1fcGx1Z2luc0J5UGF0aC5jbGVhcigpOwotICAgIG1fcGx1Z2luUGF0aHNXaXRoVGlt
ZXMuY2xlYXIoKTsKLSAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKLSAgICBtX3By
ZWZlcnJlZFBsdWdpbnMuY2xlYXIoKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFE
QVRBX0NBQ0hFKQotICAgIG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCA9IGZhbHNl
OwotI2VuZGlmCi19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZURpc2FibGVkUGx1Z2lu
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQotewotICAgIHJldHVybiBtX2Rpc2FibGVkUGx1
Z2luRmlsZXMucmVtb3ZlKGZpbGVOYW1lKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6YWRk
RGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCi17Ci0gICAgcmV0dXJu
IG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5hZGQoZmlsZU5hbWUpLmlzTmV3RW50cnk7Ci19Ci0KLSNp
ZiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkpCi0vLyBGb3Ig
U2FmYXJpL1dpbiB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkCi0v
LyBpbiBQbHVnaW5EYXRhYmFzZVdpbi5jcHAsIGJ1dCBpZiB3ZSBjYW4gdXNlIFdlYkNvcmUgY29u
c3RydWN0cwotLy8gZm9yIHRoZSBsb2dpYyB3ZSBzaG91bGQgcGVyaGFwcyBtb3ZlIGl0IGhlcmUg
dW5kZXIgWFBfV0lOPwotCi1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBs
dWdpbkRpcmVjdG9yaWVzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLQotICAgIC8v
IEFkZCBwYXRocyBzcGVjaWZpYyB0byBlYWNoIHBsYXRmb3JtCi0jaWYgZGVmaW5lZChYUF9VTklY
KQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0gICAg
dXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiLy5tb3ppbGxhL3BsdWdpbnMiKSk7Ci0gICAg
cGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKLQotICAgIHVzZXJQbHVnaW5QYXRoID0gaG9t
ZURpcmVjdG9yeVBhdGgoKTsKLSAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCIvLm5l
dHNjYXBlL3BsdWdpbnMiKSk7Ci0gICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKLQot
ICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvYnJvd3Nlci9wbHVnaW5zIik7Ci0gICAgcGF0aHMu
YXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxhL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBl
bmQoIi91c3IvbGliL2ZpcmVmb3gvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9s
aWI2NC9icm93c2VyLXBsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dz
ZXItcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbW96aWxsYS9wbHVnaW5z
Iik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL25ldHNjYXBlL3BsdWdpbnMiKTsKLSAg
ICBwYXRocy5hcHBlbmQoIi9vcHQvbW96aWxsYS9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5k
KCIvb3B0L21vemlsbGEvbGliL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi9vcHQvbmV0
c2NhcGUvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL29wdC9uZXRzY2FwZS9jb21tdW5p
Y2F0b3IvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1
Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1Z2lucy1saWJj
NSIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1Z2lucy1saWJjNiIp
OwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9uZXRzY2FwZS9wbHVnaW5zIik7Ci0gICAg
cGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L21vemlsbGEvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFw
cGVuZCgiL3Vzci9saWIvbnNicm93c2VyL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91
c3IvbGliNjQvbnNicm93c2VyL3BsdWdpbnMiKTsKLQotICAgIFN0cmluZyBtb3pIb21lKGdldGVu
digiTU9aSUxMQV9IT01FIikpOwotICAgIG1vekhvbWUuYXBwZW5kKCIvcGx1Z2lucyIpOwotICAg
IHBhdGhzLmFwcGVuZChtb3pIb21lKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IG1velBhdGhzOwot
ICAgIFN0cmluZyBtb3pQYXRoKGdldGVudigiTU9aX1BMVUdJTl9QQVRIIikpOwotICAgIG1velBh
dGguc3BsaXQoVUNoYXIoJzonKSwgLyogYWxsb3dFbXB0eUVudHJpZXMgKi8gZmFsc2UsIG1velBh
dGhzKTsKLSAgICBwYXRocy5hcHBlbmRWZWN0b3IobW96UGF0aHMpOwotI2VsaWYgZGVmaW5lZChY
UF9NQUNPU1gpCi0gICAgU3RyaW5nIHVzZXJQbHVnaW5QYXRoID0gaG9tZURpcmVjdG9yeVBhdGgo
KTsKLSAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCIvTGlicmFyeS9JbnRlcm5ldCBQ
bHVnLUlucyIpKTsKLSAgICBwYXRocy5hcHBlbmQodXNlclBsdWdpblBhdGgpOwotICAgIHBhdGhz
LmFwcGVuZCgiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKTsKLSNlbGlmIGRlZmluZWQoWFBf
V0lOKQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0g
ICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygiXFxBcHBsaWNhdGlvbiBEYXRhXFxNb3pp
bGxhXFxwbHVnaW5zIikpOwotICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7Ci0jZW5k
aWYKLQotICAgIHJldHVybiBwYXRoczsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVm
ZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIFN0cmluZyBw
cmVmZXJyZWRQYXRoID0gaG9tZURpcmVjdG9yeVBhdGgoKTsKLQotI2lmIGRlZmluZWQoWFBfVU5J
WCkKLSAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJpbmcoIi8ubW96aWxsYS9wbHVnaW5zIikp
OwotI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3Ry
aW5nKCIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlucyIpKTsKLSNlbGlmIGRlZmluZWQoWFBfV0lO
KQotICAgIHByZWZlcnJlZFBhdGguYXBwZW5kKFN0cmluZygiXFxBcHBsaWNhdGlvbiBEYXRhXFxN
b3ppbGxhXFxwbHVnaW5zIikpOwotI2VuZGlmCi0KLSAgICAvLyBUT0RPOiBXZSBzaG91bGQgbm9y
bWFsaXplIHRoZSBwYXRoIGJlZm9yZSBkb2luZyBhIGNvbXBhcmlzb24uCi0gICAgcmV0dXJuIHBh
dGggPT0gcHJlZmVycmVkUGF0aDsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2lu
UGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCi0gICAgSGFz
aFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAg
ICBTdHJpbmcgZmlsZU5hbWVGaWx0ZXIoIiouc28iKTsKLSNlbHNlCi0gICAgU3RyaW5nIGZpbGVO
YW1lRmlsdGVyKCIiKTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGRpcnNFbmQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9y
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRJdCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuYmVnaW4o
KTsgZEl0ICE9IGRpcnNFbmQ7ICsrZEl0KSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdp
blBhdGhzID0gbGlzdERpcmVjdG9yeSgqZEl0LCBmaWxlTmFtZUZpbHRlcik7Ci0gICAgICAgIFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwbHVnaW5zRW5kID0gcGx1Z2luUGF0aHMuZW5k
KCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBJdCA9IHBs
dWdpblBhdGhzLmJlZ2luKCk7IHBJdCAhPSBwbHVnaW5zRW5kOyArK3BJdCkgewotICAgICAgICAg
ICAgaWYgKCFmaWxlRXhpc3RzQW5kSXNOb3REaXNhYmxlZCgqcEl0KSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgcGF0aHMuYWRkKCpwSXQpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi0jZW5kaWYgLy8gIU9TKFdJTkRPV1MpCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX01FVEFEQVRBX0NBQ0hFKQotCi1zdGF0aWMgdm9pZCBmaWxsQnVmZmVyV2l0aENvbnRl
bnRzT2ZGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikK
LXsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDA7Ci0gICAgc2l6ZV90IGJ1ZmZlckNhcGFjaXR5
ID0gMTAyNDsKLSAgICBidWZmZXIucmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKLQotICAgIGRvIHsK
LSAgICAgICAgYnVmZmVyU2l6ZSArPSByZWFkRnJvbUZpbGUoZmlsZSwgYnVmZmVyLmRhdGEoKSAr
IGJ1ZmZlclNpemUsIGJ1ZmZlckNhcGFjaXR5IC0gYnVmZmVyU2l6ZSk7Ci0gICAgICAgIGlmIChi
dWZmZXJTaXplID09IGJ1ZmZlckNhcGFjaXR5KSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyQ2Fw
YWNpdHkgPCBtYXhpbXVtUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVTaXplKSB7Ci0gICAg
ICAgICAgICAgICAgYnVmZmVyQ2FwYWNpdHkgKj0gMjsKLSAgICAgICAgICAgICAgICBidWZmZXIu
cmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0gd2hpbGUgKHRy
dWUpOwotCi0gICAgYnVmZmVyLnNocmluayhidWZmZXJTaXplKTsKLX0KLQotc3RhdGljIGJvb2wg
cmVhZFVURjhTdHJpbmcoU3RyaW5nJiByZXN1bHRTdHJpbmcsIGNoYXIqJiBzdGFydCwgY29uc3Qg
Y2hhciogZW5kKQotewotICAgIGlmIChzdGFydCA+PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGludCBsZW4gPSBzdHJsZW4oc3RhcnQpOwotICAgIHJlc3VsdFN0cmluZyA9IFN0
cmluZzo6ZnJvbVVURjgoc3RhcnQsIGxlbik7Ci0gICAgc3RhcnQgKz0gbGVuICsgMTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCByZWFkVGltZSh0aW1lX3QmIHJlc3VsdFRp
bWUsIGNoYXIqJiBzdGFydCwgY29uc3QgY2hhciogZW5kKQotewotICAgIGlmIChzdGFydCArIHNp
emVvZih0aW1lX3QpID49IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhl
IHN0cmVhbSBpcyBub3QgbmVjZXNzYXJ5IGFsaWduZWQuCi0gICAgbWVtY3B5KCZyZXN1bHRUaW1l
LCBzdGFydCwgc2l6ZW9mKHRpbWVfdCkpOwotICAgIHN0YXJ0ICs9IHNpemVvZih0aW1lX3QpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHNjaGVtYVZlcnNpb24g
PSAnMSc7Ci1zdGF0aWMgY29uc3QgY2hhciBwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZp
bGVuYW1lW10gPSAiUGx1Z2luTWV0YWRhdGFDYWNoZS5iaW4iOwotCi12b2lkIFBsdWdpbkRhdGFi
YXNlOjpsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKQotewotICAgIGlmICghaXNQZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgo
KS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBm
aWxlOwotICAgIFN0cmluZyBhYnNvbHV0ZUNhY2hlUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSwgcGVyc2lzdGVudFBsdWdpbk1ldGFk
YXRhQ2FjaGVGaWxlbmFtZSk7Ci0gICAgZmlsZSA9IG9wZW5GaWxlKGFic29sdXRlQ2FjaGVQYXRo
LCBPcGVuRm9yUmVhZCk7Ci0KLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoZmlsZSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIE1hcmsgY2FjaGUgYXMgbG9hZGVkIHJlZ2FyZGxlc3Mgb2Ygc3Vj
Y2VzcyBvciBmYWlsdXJlLiBJZgotICAgIC8vIHRoZXJlJ3MgZXJyb3IgaW4gdGhlIGNhY2hlLCB3
ZSB3b24ndCB0cnkgdG8gbG9hZCBpdCBhbnltb3JlLgotICAgIG1fcGVyc2lzdGVudE1ldGFkYXRh
Q2FjaGVJc0xvYWRlZCA9IHRydWU7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZmlsZUNvbnRlbnRzOwot
ICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZSwgZmlsZUNvbnRlbnRzKTsKLSAg
ICBjbG9zZUZpbGUoZmlsZSk7Ci0KLSAgICBpZiAoZmlsZUNvbnRlbnRzLnNpemUoKSA8IDIgfHwg
ZmlsZUNvbnRlbnRzLmZpcnN0KCkgIT0gc2NoZW1hVmVyc2lvbiB8fCBmaWxlQ29udGVudHMubGFz
dCgpICE9ICdcMCcpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmVhZCBwbHVnaW4g
bWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgc2NoZW1hIik7Ci0gICAgICAgIGRlbGV0ZUZpbGUoYWJz
b2x1dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2hhciogYnVm
ZmVyUG9zID0gZmlsZUNvbnRlbnRzLmRhdGEoKSArIDE7Ci0gICAgY2hhciogZW5kID0gZmlsZUNv
bnRlbnRzLmRhdGEoKSArIGZpbGVDb250ZW50cy5zaXplKCk7Ci0KLSAgICBQbHVnaW5TZXQgY2Fj
aGVkUGx1Z2luczsKLSAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBjYWNoZWRQbHVnaW5QYXRo
c1dpdGhUaW1lczsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4g
Y2FjaGVkUGx1Z2luc0J5UGF0aDsKLQotICAgIHdoaWxlIChidWZmZXJQb3MgPCBlbmQpIHsKLSAg
ICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAg
IFN0cmluZyBuYW1lOwotICAgICAgICBTdHJpbmcgZGVzYzsKLSAgICAgICAgU3RyaW5nIG1pbWVE
ZXNjOwotICAgICAgICBpZiAoIShyZWFkVVRGOFN0cmluZyhwYXRoLCBidWZmZXJQb3MsIGVuZCkK
LSAgICAgICAgICAgICAgJiYgcmVhZFRpbWUobGFzdE1vZGlmaWVkLCBidWZmZXJQb3MsIGVuZCkK
LSAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcobmFtZSwgYnVmZmVyUG9zLCBlbmQpCi0g
ICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5nKGRlc2MsIGJ1ZmZlclBvcywgZW5kKQotICAg
ICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhtaW1lRGVzYywgYnVmZmVyUG9zLCBlbmQpKSkg
ewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEg
Y2FjaGU6IGNvcnJ1cHQgZGF0YSIpOwotICAgICAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNh
Y2hlUGF0aCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBT
a2lwIG1ldGFkYXRhIHRoYXQgcG9pbnRzIHRvIHBsdWdpbnMgZnJvbSBkaXJlY3RvcmllcyB0aGF0
Ci0gICAgICAgIC8vIGFyZSBub3QgcGFydCBvZiBwbHVnaW4gZGlyZWN0b3J5IGxpc3QgYW55bW9y
ZS4KLSAgICAgICAgU3RyaW5nIHBsdWdpbkRpcmVjdG9yeU5hbWUgPSBkaXJlY3RvcnlOYW1lKHBh
dGgpOwotICAgICAgICBpZiAobV9wbHVnaW5EaXJlY3Rvcmllcy5maW5kKHBsdWdpbkRpcmVjdG9y
eU5hbWUpID09IFdURjo6bm90Rm91bmQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBh
Y2thZ2VGcm9tQ2FjaGUocGF0aCwgbGFzdE1vZGlmaWVkLCBuYW1lLCBkZXNjLCBtaW1lRGVzYyk7
Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UgJiYgY2FjaGVkUGx1Z2lucy5hZGQocGFja2FnZSkuaXNO
ZXdFbnRyeSkgewotICAgICAgICAgICAgY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXMuYWRkKHBh
Y2thZ2UtPnBhdGgoKSwgcGFja2FnZS0+bGFzdE1vZGlmaWVkKCkpOwotICAgICAgICAgICAgY2Fj
aGVkUGx1Z2luc0J5UGF0aC5hZGQocGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIG1fcGx1Z2lucy5zd2FwKGNhY2hlZFBsdWdpbnMpOwotICAgIG1fcGx1
Z2luc0J5UGF0aC5zd2FwKGNhY2hlZFBsdWdpbnNCeVBhdGgpOwotICAgIG1fcGx1Z2luUGF0aHNX
aXRoVGltZXMuc3dhcChjYWNoZWRQbHVnaW5QYXRoc1dpdGhUaW1lcyk7Ci19Ci0KLXN0YXRpYyBi
b29sIHdyaXRlVVRGOFN0cmluZyhQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgY29uc3QgU3RyaW5n
JiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAg
ICBpbnQgbGVuZ3RoID0gdXRmOFN0cmluZy5sZW5ndGgoKSArIDE7Ci0gICAgcmV0dXJuIHdyaXRl
VG9GaWxlKGZpbGUsIHV0ZjhTdHJpbmcuZGF0YSgpLCBsZW5ndGgpID09IGxlbmd0aDsKLX0KLQot
c3RhdGljIGJvb2wgd3JpdGVUaW1lKFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlLCBjb25zdCB0aW1l
X3QmIHRpbWUpCi17Ci0gICAgcmV0dXJuIHdyaXRlVG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KCZ0aW1lKSwgc2l6ZW9mKHRpbWVfdCkpID09IHNpemVvZih0aW1lX3Qp
OwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjp1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNo
ZSgpCi17Ci0gICAgaWYgKCFpc1BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCgpIHx8IHBl
cnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbWFrZUFsbERpcmVjdG9yaWVzKHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpKTsK
LSAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
cGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCksIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNh
Y2hlRmlsZW5hbWUpOwotICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwotCi0gICAg
aWYgKG1fcGx1Z2lucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRmb3Jt
RmlsZUhhbmRsZSBmaWxlOwotICAgIGZpbGUgPSBvcGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwg
T3BlbkZvcldyaXRlKTsKLQotICAgIGlmICghaXNIYW5kbGVWYWxpZChmaWxlKSkgewotICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIHBsdWdpbiBtZXRhZGF0YSBjYWNoZSBmb3Igc2F2
aW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjaGFyIGxvY2FsU2NoZW1hVmVy
c2lvbiA9IHNjaGVtYVZlcnNpb247Ci0gICAgaWYgKHdyaXRlVG9GaWxlKGZpbGUsICZsb2NhbFNj
aGVtYVZlcnNpb24sIDEpICE9IDEpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3Jp
dGUgcGx1Z2luIG1ldGFkYXRhIGNhY2hlIHNjaGVtYSIpOwotICAgICAgICBjbG9zZUZpbGUoZmls
ZSk7Ci0gICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdp
bnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVn
aW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoISh3cml0ZVVURjhT
dHJpbmcoZmlsZSwgKCppdCktPnBhdGgoKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVUaW1lKGZp
bGUsICgqaXQpLT5sYXN0TW9kaWZpZWQoKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVVVEY4U3Ry
aW5nKGZpbGUsICgqaXQpLT5uYW1lKCkpCi0gICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmlu
ZyhmaWxlLCAoKml0KS0+ZGVzY3JpcHRpb24oKSkKLSAgICAgICAgICAgICAgJiYgd3JpdGVVVEY4
U3RyaW5nKGZpbGUsICgqaXQpLT5mdWxsTUlNRURlc2NyaXB0aW9uKCkpKSkgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3JpdGUgcGx1Z2luIG1ldGFkYXRhIHRvIGNhY2hlIik7
Ci0gICAgICAgICAgICBjbG9zZUZpbGUoZmlsZSk7Ci0gICAgICAgICAgICBkZWxldGVGaWxlKGFi
c29sdXRlQ2FjaGVQYXRoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGNsb3NlRmlsZShmaWxlKTsKLX0KLQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQZXJz
aXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKQotewotICAgIHJldHVybiBnUGVyc2lzdGVudFBs
dWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNl
dFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChib29sIGlzRW5hYmxlZCkKLXsKLSAgICBn
UGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQgPSBpc0VuYWJsZWQ7Ci19Ci0K
LVN0cmluZyBQbHVnaW5EYXRhYmFzZTo6cGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkKLXsK
LSAgICByZXR1cm4gV2ViQ29yZTo6cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCk7
Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCkKLXsKLSAgICBXZWJD
b3JlOjpwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVBhdGgoKSA9IHBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlUGF0aDsKLX0KLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhYmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmM0OGVjZGZmNmNmMjI0
MzU1OTRmOGFlODUyMzAxYTYyNjNjZjg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAor
KysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdp
bkRhdGFiYXNlX2gKLSNkZWZpbmUgUGx1Z2luRGF0YWJhc2VfaAotCi0jaW5jbHVkZSAiUGx1Z2lu
UGFja2FnZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEVsZW1lbnQ7
Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgSW50U2l6ZTsKLSAgICBjbGFzcyBVUkw7Ci0g
ICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VDbGllbnQ7Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZTsK
LQotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2th
Z2VIYXNoLCBQbHVnaW5QYWNrYWdlSGFzaFRyYWl0cz4gUGx1Z2luU2V0OwotCi0gICAgY2xhc3Mg
UGx1Z2luRGF0YWJhc2UgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbHVnaW5EYXRh
YmFzZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1
Z2luRGF0YWJhc2UoKTsKLQotICAgICAgICAvLyBUaGUgZmlyc3QgY2FsbCB0byBpbnN0YWxsZWRQ
bHVnaW5zIGNyZWF0ZXMgdGhlIHBsdWdpbiBkYXRhYmFzZQotICAgICAgICAvLyBhbmQgYnkgZGVm
YXVsdCBwb3B1bGF0ZXMgaXQgd2l0aCB0aGUgcGx1Z2lucyBpbnN0YWxsZWQgb24gdGhlIHN5c3Rl
bS4KLSAgICAgICAgLy8gRm9yIHRlc3RpbmcgcHVycG9zZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG5v
dCBwb3B1bGF0ZSB0aGUgZGF0YWJhc2UKLSAgICAgICAgLy8gYXV0b21hdGljYWxseSwgYXMgdGhl
IHBsdWdpbnMgbWlnaHQgYWZmZWN0IHRoZSBEUlQgcmVzdWx0cyBieQotICAgICAgICAvLyB3cml0
aW5nIHRvIGEuby4gc3RkZXJyLgotICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIGluc3Rh
bGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSA9IHRydWUpOwotCi0gICAgICAgIGJvb2wgcmVmcmVz
aCgpOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdl
Kj4gcGx1Z2lucygpIGNvbnN0OwotICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgICAgIHN0YXRpYyBib29sIGlzUHJlZmVycmVkUGx1
Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KTsKLSAgICAgICAgc3RhdGljIGlu
dCBwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKik7Ci0KLSAg
ICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBsdWdpbihjb25zdCBVUkwmLCBTdHJpbmcmIG1pbWVU
eXBlKTsKLSAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIHZvaWQgc2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luKTsKLQotICAg
ICAgICB2b2lkIHNldFBsdWdpbkRpcmVjdG9yaWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJl
Y3RvcmllcykKLSAgICAgICAgewotICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgICAgIG1f
cGx1Z2luRGlyZWN0b3JpZXMgPSBkaXJlY3RvcmllczsKLSAgICAgICAgfQotCi0gICAgICAgIGJv
b2wgcmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOwotICAg
ICAgICBib29sIGFkZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsK
LSAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5EaXJlY3Rvcmllcygp
OwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVnaW5EaXJlY3RvcmllcygpIGNvbnN0IHsgcmV0
dXJuIG1fcGx1Z2luRGlyZWN0b3JpZXM7IH0KLQotICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pIGNvbnN0OwotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIHN0YXRpYyBib29sIGlzUGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChib29sIGlzRW5hYmxlZCk7Ci0gICAgICAgIHN0YXRp
YyBTdHJpbmcgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCk7Ci0gICAgICAgIHN0YXRpYyB2
b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlUGF0aCk7Ci0jZW5kaWYKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZv
aWQgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYpIGNvbnN0Owot
ICAgICAgICB2b2lkIGdldERlbGV0ZWRQbHVnaW5zKFBsdWdpblNldCYpIGNvbnN0OwotICAgICAg
ICBib29sIGZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0Owot
Ci0gICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgcGx1Z2luIHdhcyBhY3R1YWxseSBhZGRl
ZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVkIGlmIGl0J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhp
c3RpbmcgcGx1Z2luKS4KLSAgICAgICAgYm9vbCBhZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdl
Pik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFBsdWdpblBhY2thZ2UqKTsKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50
TWV0YWRhdGFDYWNoZSgpOwotICAgICAgICB2b2lkIHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlKCk7Ci0jZW5kaWYKLQotICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9kaXNhYmxlZFBsdWdp
bkZpbGVzOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpbkRpcmVjdG9yaWVzOwotICAg
ICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOwotICAgICAgICBQbHVn
aW5TZXQgbV9wbHVnaW5zOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBh
Y2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgdGltZV90
PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOwotICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJyZWRQbHVnaW5zOwotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZUlzTG9hZGVkOwotI2VuZGlmCi0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVi
dWcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZDIzYWU2NzEzOGFjYWJjNjViNGUzMDBjZjJjZTE3OTgx
NDA1MzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
NzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
RGVidWcuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgIUxPR19E
SVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBlcnJvclN0cmluZ3NbXSA9IHsKLSAgICAiTm8gZXJyb3JzIG9jY3VycmVkLiIsIC8qIE5QRVJS
X05PX0VSUk9SICovCi0gICAgIkVycm9yIHdpdGggbm8gc3BlY2lmaWMgZXJyb3IgY29kZSBvY2N1
cnJlZC4iLCAvKiBOUEVSUl9HRU5FUklDX0VSUk9SICovCi0gICAgIkludmFsaWQgaW5zdGFuY2Ug
cGFzc2VkIHRvIHRoZSBwbHVnLWluLiIsIC8qIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1Ig
Ki8KLSAgICAiRnVuY3Rpb24gdGFibGUgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX0ZVTkNU
QUJMRV9FUlJPUiAqLwotICAgICJMb2FkaW5nIG9mIHBsdWctaW4gZmFpbGVkLiIsIC8qIE5QRVJS
X01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAqLwotICAgICJNZW1vcnkgYWxsb2NhdGlvbiBmYWls
ZWQuIiwgLyogTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUiAqLwotICAgICJQbHVnLWluIG1pc3Np
bmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BMVUdJTl9FUlJPUiAqLwotICAgICJQ
bHVnLWluIGRpcmVjdG9yeSBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9Q
TFVHSU5fRElSX0VSUk9SICovCi0gICAgIlZlcnNpb25zIG9mIHBsdWctaW4gYW5kIENvbW11bmlj
YXRvciBkbyBub3QgbWF0Y2guIiwgLyogTlBFUlJfSU5DT01QQVRJQkxFX1ZFUlNJT05fRVJST1Ig
Ki8KLSAgICAiUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElE
X1BBUkFNICovCi0gICAgIlVSTCBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJ
RF9VUkwgKi8KLSAgICAiRmlsZSBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfRklMRV9O
T1RfRk9VTkQgKi8KLSAgICAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIiwgLyogTlBFUlJfTk9f
REFUQSAqLwotICAgICJTZWVrYWJsZSBzdHJlYW0gZXhwZWN0ZWQuIiwgLyogTlBFUlJfU1RSRUFN
X05PVF9TRUVLQUJMRSAqLwotICAgICJVbmtub3duIGVycm9yIGNvZGUiCi19OwotCi0jaWZkZWYg
WFBfTUFDT1NYCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHJhd2luZ01vZGVsc1tdID0gewot
ICAgICJOUERyYXdpbmdNb2RlbFF1aWNrRHJhdyIsCi0gICAgIk5QRHJhd2luZ01vZGVsQ29yZUdy
YXBoaWNzIiwKLSAgICAiTlBEcmF3aW5nTW9kZWxPcGVuR0wiLAotICAgICJOUERyYXdpbmdNb2Rl
bENvcmVBbmltYXRpb24iCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZXZlbnRNb2Rl
bHNbXSA9IHsKLSAgICAiTlBFdmVudE1vZGVsQ2FyYm9uIiwKLSAgICAiTlBFdmVudE1vZGVsQ29j
b2EiCi19OwotI2VuZGlmIC8vWFBfTUFDT1NYCi0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JO
UEVycm9yKE5QRXJyb3IgZXJyb3IpCi17Ci0gICAgcmV0dXJuIGVycm9yU3RyaW5nc1tlcnJvcl07
Ci19Ci0KLSNpZmRlZiBYUF9NQUNPU1gKLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JEcmF3aW5n
TW9kZWwoTlBEcmF3aW5nTW9kZWwgZHJhd2luZ01vZGVsKQotewotICAgIHJldHVybiBkcmF3aW5n
TW9kZWxzW2RyYXdpbmdNb2RlbF07Ci19Ci0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JFdmVu
dE1vZGVsKE5QRXZlbnRNb2RlbCBldmVudE1vZGVsKQotewotICAgIHJldHVybiBldmVudE1vZGVs
c1tldmVudE1vZGVsXTsKLX0KLSNlbmRpZiAvL1hQX01BQ09TWAotCi1DU3RyaW5nIHByZXR0eU5h
bWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSkKLXsKLSAgICBzd2l0Y2ggKHZh
cmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WeERpc3BsYXk6IHJldHVybiAiTlBOVnhEaXNwbGF5IjsK
LSAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHJldHVybiAiTlBOVnh0QXBwQ29udGV4dCI7Ci0g
ICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHJldHVybiAiTlBOVm5ldHNjYXBlV2luZG93IjsK
LSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6IHJldHVybiAiTlBOVmphdmFzY3Jp
cHRFbmFibGVkQm9vbCI7Ci0gICAgY2FzZSBOUE5WYXNkRW5hYmxlZEJvb2w6IHJldHVybiAiTlBO
VmFzZEVuYWJsZWRCb29sIjsKLSAgICBjYXNlIE5QTlZpc09mZmxpbmVCb29sOiByZXR1cm4gIk5Q
TlZpc09mZmxpbmVCb29sIjsKLQotICAgIGNhc2UgTlBOVnNlcnZpY2VNYW5hZ2VyOiByZXR1cm4g
Ik5QTlZzZXJ2aWNlTWFuYWdlciAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBOVkRPTUVs
ZW1lbnQ6IHJldHVybiAiTlBOVkRPTUVsZW1lbnQgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNl
IE5QTlZET01XaW5kb3c6IHJldHVybiAiTlBOVkRPTVdpbmRvdyAobm90IHN1cHBvcnRlZCkiOwot
ICAgIGNhc2UgTlBOVlRvb2xraXQ6IHJldHVybiAiTlBOVlRvb2xraXQgKG5vdCBzdXBwb3J0ZWQp
IjsKLSAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHJldHVybiAiTlBOVlN1cHBvcnRz
WEVtYmVkQm9vbCAobm90IHN1cHBvcnRlZCkiOwotCi0gICAgY2FzZSBOUE5WV2luZG93TlBPYmpl
Y3Q6IHJldHVybiAiTlBOVldpbmRvd05QT2JqZWN0IjsKLSAgICBjYXNlIE5QTlZQbHVnaW5FbGVt
ZW50TlBPYmplY3Q6IHJldHVybiAiTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdCI7Ci0gICAgY2Fz
ZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOiByZXR1cm4gIk5QTlZTdXBwb3J0c1dpbmRvd2xlc3Mi
OwotICAgIGNhc2UgTlBOVnByaXZhdGVNb2RlQm9vbDogcmV0dXJuICJOUE5WcHJpdmF0ZU1vZGVC
b29sIjsKLQotI2lmZGVmIFhQX01BQ09TWAotICAgIGNhc2UgTlBOVnBsdWdpbkRyYXdpbmdNb2Rl
bDogcmV0dXJuICJOUE5WcGx1Z2luRHJhd2luZ01vZGVsIjsKLSNpZm5kZWYgTlBfTk9fUVVJQ0tE
UkFXCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNRdWlja0RyYXdCb29sOiByZXR1cm4gIk5QTlZzdXBw
b3J0c1F1aWNrRHJhd0Jvb2wiOwotI2VuZGlmCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlR3Jh
cGhpY3NCb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c0NvcmVHcmFwaGljc0Jvb2wiOwotICAgIGNh
c2UgTlBOVnN1cHBvcnRzT3BlbkdMQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNPcGVuR0xCb29s
IjsKLSAgICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVBbmltYXRpb25Cb29sOiByZXR1cm4gIk5QTlZz
dXBwb3J0c0NvcmVBbmltYXRpb25Cb29sIjsKLSNpZm5kZWYgTlBfTk9fQ0FSQk9OCi0gICAgY2Fz
ZSBOUE5Wc3VwcG9ydHNDYXJib25Cb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c0NhcmJvbkJvb2wi
OwotI2VuZGlmCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNDb2NvYUJvb2w6IHJldHVybiAiTlBOVnN1
cHBvcnRzQ29jb2FCb29sIjsKLSNlbmRpZgotCi0gICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3du
IHZhcmlhYmxlIjsKLSAgICB9Ci19Ci0KLUNTdHJpbmcgcHJldHR5TmFtZUZvck5QUFZhcmlhYmxl
KE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHZhcmlh
YmxlKSB7Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmFtZVN0cmluZzogcmV0dXJuICJOUFBWcGx1Z2lu
TmFtZVN0cmluZyI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmc6IHJldHVy
biAiTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5XaW5k
b3dCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5XaW5kb3dCb29sIjsKLSAgICBjYXNlIE5QUFZwbHVn
aW5UcmFuc3BhcmVudEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbCI7Ci0K
LSAgICBjYXNlIE5QUFZqYXZhQ2xhc3M6IHJldHVybiAiTlBQVmphdmFDbGFzcyAobm90IHN1cHBv
cnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd1NpemU6IHJldHVybiAiTlBQVnBsdWdp
bldpbmRvd1NpemUgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5UaW1lcklu
dGVydmFsOiByZXR1cm4gIk5QUFZwbHVnaW5UaW1lckludGVydmFsIChub3Qgc3VwcG9ydGVkKSI7
Ci0gICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlOiByZXR1cm4gIk5QUFZwbHVn
aW5TY3JpcHRhYmxlSW5zdGFuY2UgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVn
aW5TY3JpcHRhYmxlSUlEOiByZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRhYmxlSUlEIChub3Qgc3Vw
cG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWamF2YXNjcmlwdFB1c2hDYWxsZXJCb29sOiByZXR1cm4g
Ik5QUFZqYXZhc2NyaXB0UHVzaENhbGxlckJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNl
IE5QUFZwbHVnaW5LZWVwTGlicmFyeUluTWVtb3J5OiByZXR1cm4gIk5QUFZwbHVnaW5LZWVwTGli
cmFyeUluTWVtb3J5IChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmVlZHNY
RW1iZWQ6IHJldHVybiAiTlBQVnBsdWdpbk5lZWRzWEVtYmVkIChub3Qgc3VwcG9ydGVkKSI7Ci0K
LSAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3Q6IHJldHVybiAiTlBQVnBsdWdp
blNjcmlwdGFibGVOUE9iamVjdCI7Ci0KLSAgICBjYXNlIE5QUFZmb3JtVmFsdWU6IHJldHVybiAi
TlBQVmZvcm1WYWx1ZSAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpblVybFJl
cXVlc3RzRGlzcGxheWVkQm9vbDogcmV0dXJuICJOUFBWcGx1Z2luVXJsUmVxdWVzdHNEaXNwbGF5
ZWRCb29sIChub3Qgc3VwcG9ydGVkKSI7Ci0KLSAgICBjYXNlIE5QUFZwbHVnaW5XYW50c0FsbE5l
dHdvcmtTdHJlYW1zOiByZXR1cm4gIk5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zIjsK
LSAgICBjYXNlIE5QUFZwbHVnaW5DYW5jZWxTcmNTdHJlYW06IHJldHVybiAiTlBQVnBsdWdpbkNh
bmNlbFNyY1N0cmVhbSI7Ci0KLSNpZmRlZiBYUF9NQUNPU1gKLSAgICBjYXNlIE5QUFZwbHVnaW5E
cmF3aW5nTW9kZWw6IHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCgiTlBQVnBsdWdpbkRyYXdpbmdN
b2RlbCwgIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQocHJldHR5TmFtZUZvckRyYXdpbmdNb2Rl
bChOUERyYXdpbmdNb2RlbCh1aW50cHRyX3QodmFsdWUpKSkpOwotICAgICAgICByZXR1cm4gcmVz
dWx0LmxhdGluMSgpOwotICAgIH0KLSAgICBjYXNlIE5QUFZwbHVnaW5FdmVudE1vZGVsOiB7Ci0g
ICAgICAgIFN0cmluZyByZXN1bHQoIk5QUFZwbHVnaW5FdmVudE1vZGVsLCAiKTsKLSAgICAgICAg
cmVzdWx0LmFwcGVuZChwcmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwodWludHB0
cl90KHZhbHVlKSkpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5sYXRpbjEoKTsKLSAgICB9Ci0g
ICAgY2FzZSBOUFBWcGx1Z2luQ29yZUFuaW1hdGlvbkxheWVyOiByZXR1cm4gIk5QUFZwbHVnaW5D
b3JlQW5pbWF0aW9uTGF5ZXIiOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2Vu
ZGlmCi0KLSAgICBkZWZhdWx0OiByZXR1cm4gIlVua25vd24gdmFyaWFibGUiOwotICAgIH0KLX0K
LQotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFy
aWFibGUpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBOVVJMVkNvb2tp
ZTogcmV0dXJuICJOUE5VUkxWQ29va2llIjsKLSAgICBjYXNlIE5QTlVSTFZQcm94eTogcmV0dXJu
ICJOUE5VUkxWUHJveHkiOwotICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7
Ci0gICAgfQotfQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNB
QkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5oIGIv
U291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2Njc0ODVlOTA5MjhhMDVmY2JkYTgyOTQwYTczOTY3MDk4NzFkYjYxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgUGx1Z2luRGVidWdfaAotI2RlZmluZSBQbHVnaW5EZWJ1Z19oCi0KLSNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIExPR19OUEVSUk9SKGVycikgaWYgKGVyciAhPSBOUEVS
Ul9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lucywgIiVzXG4iLCBwcmV0dHlOYW1lRm9yTlBF
cnJvcihlcnIpKQotI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigpIExPR19WRVJCT1NFKFBs
dWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVtcyB3aXRoIG5ldHdvcmssIGRpc2sg
SS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxlbXMuXG4iKQotCi0jaWYgIUxPR19E
SVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVG
b3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOwotCi1DU3RyaW5nIHByZXR0eU5hbWVGb3JOUE5WYXJp
YWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7Ci1DU3RyaW5nIHByZXR0eU5hbWVGb3JOUFBWYXJp
YWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwotQ1N0cmluZyBwcmV0dHlO
YW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUpOwotCi0jaWZkZWYg
WFBfTUFDT1NYCi1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRHJhd2luZ01vZGVsKE5QRHJhd2lu
Z01vZGVsIGRyYXdpbmdNb2RlbCk7Ci1jb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRXZlbnRNb2Rl
bChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCk7Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxFRAotCi0jZW5kaWYgLy8gUGx1Z2luRGVidWdf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDdlMDk5ODgwNDk3MWNhZTVhYmE2M2NkNmNkYzEzNDVmZTdjMjQwZTQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotCi0jaW5jbHVk
ZSAiY191dGlsaXR5LmgiCi0jaW5jbHVkZSAiSWRlbnRpZmllclJlcC5oIgotI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOUF9qc29iamVjdC5oIgotI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIK
LSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCi17Ci0g
ICAgLy8gVGhpcyBkZXN0cnVjdG9yIGdldHMgY2FsbGVkIGR1cmluZyByZWZyZXNoKCkgaWYgUGx1
Z2luRGF0YWJhc2UncwotICAgIC8vIFBsdWdpblNldCBoYXNoIGlzIGFscmVhZHkgcG9wdWxhdGVk
LCBhcyBpdCByZW1vdmVzIGl0ZW1zIGZyb20KLSAgICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2FsbGlu
ZyB0aGUgZGVzdHJ1Y3RvciBvbiBhIGxvYWRlZCBwbHVnLWluIG9mCi0gICAgLy8gY291cnNlIHdv
dWxkIGNhdXNlIGEgY3Jhc2gsIHNvIHdlIGNoZWNrIHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3ZQot
ICAgIC8vIEFTU0VSVC4KLSAgICAvLyBGSVhNRTogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIg
d2F5IHRvIGZpeCB0aGlzLgotICAgIGlmICghbV9sb2FkQ291bnQpCi0gICAgICAgIHVubG9hZFdp
dGhvdXRTaHV0ZG93bigpOwotICAgIGVsc2UKLSAgICAgICAgdW5sb2FkKCk7Ci0KLSAgICBBU1NF
UlQoIW1faXNMb2FkZWQpOwotfQotCi12b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5U29v
bigpCi17Ci0gICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAg
QVNTRVJUKG1fbW9kdWxlKTsKLSAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKLQotICAgIG1fZnJl
ZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6
ZnJlZUxpYnJhcnlUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQobV9tb2R1bGUpOwotICAgIC8v
IERvIG5vdGhpbmcgaWYgdGhlIG1vZHVsZSBnb3QgbG9hZGVkIGFnYWluIG1lYW53aGlsZQotICAg
IGlmICghbV9sb2FkQ291bnQpIHsKLSAgICAgICAgdW5sb2FkTW9kdWxlKG1fbW9kdWxlKTsKLSAg
ICAgICAgbV9tb2R1bGUgPSAwOwotICAgIH0KLX0KLQotCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29t
cGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Ci17Ci0gICAgLy8gU29y
dCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4KLSAgICBib29s
IEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAgICBib29sIEJhbGxvd3NNdWx0aXBsZUlu
c3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxs
b3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgaWYgKEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyAh
PSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCi0gICAgICAgIHJldHVybiBBYWxsb3dzTXVsdGlw
bGVJbnN0YW5jZXMgPyAtMSA6IDE7Ci0KLSAgICAvLyBTb3J0IHBsdWctaW5zIGluIGEgcHJlZmVy
cmVkIHBhdGggZmlyc3QuCi0gICAgYm9vbCBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdp
bkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShwYXJlbnREaXJlY3RvcnkoKSk7
Ci0gICAgYm9vbCBCaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFiYXNlOjppc1By
ZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkpOwotICAg
IGlmIChBaXNJblByZWZlcnJlZERpcmVjdG9yeSAhPSBCaXNJblByZWZlcnJlZERpcmVjdG9yeSkK
LSAgICAgICAgcmV0dXJuIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ID8gLTEgOiAxOwotCi0gICAg
aW50IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5uYW1lKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKGRpZmYpCi0gICAgICAgIHJldHVybiBkaWZmOwotCi0g
ICAgZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKTsKLSAgICBp
ZiAoZGlmZikKLSAgICAgICAgcmV0dXJuIGRpZmY7Ci0KLSAgICByZXR1cm4gc3RyY21wKHBhcmVu
dERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51
dGY4KCkuZGF0YSgpKTsKLX0KLQotUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQotICAgIDogbV9pc0VuYWJs
ZWQodHJ1ZSkKLSAgICAsIG1faXNMb2FkZWQoZmFsc2UpCi0gICAgLCBtX2xvYWRDb3VudCgwKQot
ICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX21vZHVsZVZlcnNpb24oMCkKLSAgICAsIG1fbW9k
dWxlKDApCi0gICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCi0gICAgLCBtX2ZyZWVM
aWJyYXJ5VGltZXIoKnRoaXMsICZQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQp
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAsIG1faW5m
b0lzRnJvbUNhY2hlKHRydWUpCi0jZW5kaWYKLXsKLSAgICBtX2ZpbGVOYW1lID0gcGF0aEdldEZp
bGVOYW1lKG1fcGF0aCk7Ci0gICAgbV9wYXJlbnREaXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3Bh
dGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0aCgpIC0gMSk7Ci19Ci0KLXZvaWQgUGx1Z2lu
UGFja2FnZTo6dW5sb2FkKCkKLXsKLSAgICBpZiAoIW1faXNMb2FkZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9OUFBfU2h1dGRvd24oKTsKLSNlbmRp
ZgotCi0gICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2Fn
ZTo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKLXsKLSAgICBpZiAoIW1faXNMb2FkZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9sb2FkQ291bnQpOwotICAgIEFTU0VSVChtX21v
ZHVsZSk7Ci0KLSAgICAvLyA8cmRhcjovLzU1MzA1MTk+OiBDcmFzaCB3aGVuIGNsb3NpbmcgdGFi
IHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkpCi0gICAgLy8gSWYgdGhlIHBsdWdpbiBoYXMg
c3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywgYXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5IGhh
dmUKLSAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkgb2YgdGhlIHBsdWdpbidzIGludGVybmFsIHdp
bmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdlIHRvIG91cgotICAgIC8vIG9yaWdpbmFsIHdp
bmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVnaW4gbGlicmFyeSBmcm9tIGhlcmUsIHdlIHdp
bGwganVtcCBiYWNrCi0gICAgLy8gdG8gY29kZSB3ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0dXJu
LCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5IGF0IGxlYXN0IHVudGlsCi0gICAgLy8gdGhl
IG5leHQgbWVzc2FnZSBsb29wCi0gICAgZnJlZUxpYnJhcnlTb29uKCk7Ci0KLSAgICBtX2lzTG9h
ZGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZChib29sIGVu
YWJsZWQpCi17Ci0gICAgbV9pc0VuYWJsZWQgPSBlbmFibGVkOwotfQotCi1QYXNzUmVmUHRyPFBs
dWdpblBhY2thZ2U+IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKLXsKLSAgICBSZWZQdHI8UGx1Z2luUGFj
a2FnZT4gcGFja2FnZSA9IGFkb3B0UmVmKG5ldyBQbHVnaW5QYWNrYWdlKHBhdGgsIGxhc3RNb2Rp
ZmllZCkpOwotCi0gICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBQ
bHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1lRGVzY3JpcHRpb24pCi17Ci0gICAg
UmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2Fn
ZShwYXRoLCBsYXN0TW9kaWZpZWQpKTsKLSAgICBwYWNrYWdlLT5tX25hbWUgPSBuYW1lOwotICAg
IHBhY2thZ2UtPm1fZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgICBwYWNrYWdlLT5kZXRl
cm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCk7Ci0gICAgcGFja2FnZS0+c2V0TUlN
RURlc2NyaXB0aW9uKG1pbWVEZXNjcmlwdGlvbik7Ci0gICAgcGFja2FnZS0+bV9pbmZvSXNGcm9t
Q2FjaGUgPSB0cnVlOwotICAgIHJldHVybiBwYWNrYWdlLnJlbGVhc2UoKTsKLX0KLSNlbmRpZgot
Ci0jaWYgZGVmaW5lZChYUF9VTklYKQotdm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWly
a3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6
aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7Ci0gICAgICAgIC8vIEJlY2F1c2UgYSBz
aW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCBy
ZWxpYWJseSB1bmxvYWQgYQotICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRo
ZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KLSAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICAg
ICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1c2Vz
IGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcwotICAgICAgICAvLyB3aXRoIHRoZSBKYXZh
IHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJv
UmVjdFdoZW5TY3JvbGxpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1p
bWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBmbGFzaFRlblZlcnNpb24oMHgwYTAwMDAw
MCk7Ci0KLSAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbihmbGFzaFRlblZlcnNpb24pID49
IDApIHsKLSAgICAgICAgICAgIC8vIEZsYXNoIDEwLjAgYjIxOCBkb2Vzbid0IGxpa2UgaGF2aW5n
IGEgTlVMTCB3aW5kb3cgaGFuZGxlCi0gICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVp
cmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBGbGFzaCA5IGFuZCBvbGRlciByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdp
bnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50Ci0gICAgICAgICAgICBtX3F1aXJr
cy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOwotICAgICAgICB9Ci0KLSNp
ZiBDUFUoWDg2XzY0KQotICAgICAgICAvLyA2NC1iaXQgRmxhc2ggZnJlZXplcyBpZiByaWdodC1j
bGljayBpcyBzZW50IGluIHdpbmRvd2xlc3MgbW9kZQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSk7Ci0jZW5kaWYKLQotICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCk7
Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0g
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3Nh
Z2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcp
OwotICAgIH0KLX0KLSNlbmRpZgotCi0jaWYgIU9TKFdJTkRPV1MpCi12b2lkIFBsdWdpblBhY2th
Z2U6OmRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24oKQotewotICAgIC8vIEl0
J3MgYSBiaXQgbGFtZSB0byBkZXRlY3QgdGhlIHBsdWdpbiB2ZXJzaW9uIGJ5IHBhcnNpbmcgaXQK
LSAgICAvLyBmcm9tIHRoZSBwbHVnaW4gZGVzY3JpcHRpb24gc3RyaW5nLCBidXQgaXQgZG9lc24n
dCBzZWVtIHRoYXQKLSAgICAvLyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBh
bnkgc3RhbmRhcmRpemVkIHdheSBhdAotICAgIC8vIHRoZSBtb2R1bGUgbGV2ZWwsIGxpa2UgaW4g
V2luZG93cwotCi0gICAgaWYgKG1fZGVzY3JpcHRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9kZXNjcmlwdGlvbi5zdGFydHNXaXRoKCJTaG9ja3dhdmUgRmxhc2gi
KSAmJiBtX2Rlc2NyaXB0aW9uLmxlbmd0aCgpID49IDE5KSB7Ci0gICAgICAgIC8vIFRoZSBmbGFz
aCB2ZXJzaW9uIGFzIGEgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGRpZmZlcnMgb24gVW5peCBmcm9t
IFdpbmRvd3MKLSAgICAgICAgLy8gc2luY2UgdGhlIHJldmlzaW9uIGNhbiBiZSBsYXJnZXIgdGhh
biBhIDggYml0cywgc28gd2UgYWxsb3cgaXQgMTYgaGVyZSBhbmQKLSAgICAgICAgLy8gcHVzaCB0
aGUgbWFqb3IvbWlub3IgdXAgOCBiaXRzLiBUaHVzIG9uIFVuaXgsIEZsYXNoJ3MgdmVyc2lvbiBt
YXkgYmUKLSAgICAgICAgLy8gMHgwYTAwMDAwMCBpbnN0ZWFkIG9mIDB4MDAwYTAwMDAuCi0KLSAg
ICAgICAgVmVjdG9yPFN0cmluZz4gdmVyc2lvblBhcnRzOwotICAgICAgICBtX2Rlc2NyaXB0aW9u
LnN1YnN0cmluZygxNikuc3BsaXQoJyAnLCAvKmFsbG93RW1wdHlFbnRyaWVzID0qLyBmYWxzZSwg
dmVyc2lvblBhcnRzKTsKLSAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5zaXplKCkgPj0gMSkg
ewotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gbWFqb3JNaW5vclBhcnRzOwotICAgICAgICAg
ICAgdmVyc2lvblBhcnRzWzBdLnNwbGl0KCcuJywgbWFqb3JNaW5vclBhcnRzKTsKLSAgICAgICAg
ICAgIGlmIChtYWpvck1pbm9yUGFydHMuc2l6ZSgpID49IDEpIHsKLSAgICAgICAgICAgICAgICBi
b29sIGNvbnZlcnRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1ham9yID0g
bWFqb3JNaW5vclBhcnRzWzBdLnRvVUludCgmY29udmVydGVkKTsKLSAgICAgICAgICAgICAgICBp
ZiAoY29udmVydGVkKQotICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gPSAobWFq
b3IgJiAweGZmKSA8PCAyNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtYWpvck1p
bm9yUGFydHMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAgICAgICAgICBib29sIGNvbnZlcnRlZCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbm9yID0gbWFqb3JNaW5vclBhcnRz
WzFdLnRvVUludCgmY29udmVydGVkKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udmVydGVkKQot
ICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0gKG1pbm9yICYgMHhmZikgPDwg
MTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmVyc2lvblBhcnRz
LnNpemUoKSA+PSAyKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcmV2aXNpb24gPSB2ZXJzaW9uUGFy
dHNbMV07Ci0gICAgICAgICAgICBpZiAocmV2aXNpb24ubGVuZ3RoKCkgPiAxICYmIChyZXZpc2lv
blswXSA9PSAncicgfHwgcmV2aXNpb25bMF0gPT0gJ2InKSkgewotICAgICAgICAgICAgICAgIHJl
dmlzaW9uLnJlbW92ZSgwLCAxKTsKLSAgICAgICAgICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0g
cmV2aXNpb24udG9JbnQoKSAmIDB4ZmZmZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1zdGF0aWMg
dm9pZCBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBO
UFZhcmlhbnQqIGFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0KiByb290T2JqZWN0LCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhTGlzdCkKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKLSAgICAgICAgYUxpc3Qu
YXBwZW5kKEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZhcmdz
W2ldLCByb290T2JqZWN0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNDOjpTb3VyY2VDb2RlIG1h
a2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsID0gU3RyaW5n
KCksIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6bWlu
aW11bVBvc2l0aW9uKCkpCi17Ci0gICAgcmV0dXJuIEpTQzo6U291cmNlQ29kZShKU0M6OlN0cmlu
Z1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNlLCB1cmwsIHN0YXJ0UG9zaXRpb24pLCBzdGFy
dFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgpLCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9u
ZUJhc2VkSW50KCkpOwotfQotCi1zdGF0aWMgYm9vbCBOUE5fRXZhbHVhdGUoTlBQIGluc3RhbmNl
LCBOUE9iamVjdCogbywgTlBTdHJpbmcqIHMsIE5QVmFyaWFudCogdmFyaWFudCkKLXsKLSAgICBp
ZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlw
dE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7Ci0K
LSAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9v
dE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gVGhlcmUgaXMgYSBj
cmFzaCBpbiBGbGFzaCB3aGVuIGV2YWx1YXRpbmcgYSBzY3JpcHQgdGhhdCBkZXN0cm95cyB0aGUK
LSAgICAgICAgLy8gUGx1Z2luVmlldywgc28gd2UgZGVzdHJveSBpdCBhc3luY2hyb25vdXNseS4K
LSAgICAgICAgUGx1Z2luVmlldzo6a2VlcEFsaXZlKGluc3RhbmNlKTsKLQotICAgICAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgICAgIFN0cmlu
ZyBzY3JpcHRTdHJpbmcgPSBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMp
OwotCi0gICAgICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShzY3JpcHRT
dHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7Ci0KLSAgICAgICAgSlNDOjpCaW5kaW5nczo6Y29udmVy
dFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmV0dXJuVmFsdWUsIHZhcmlhbnQpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBWT0lEX1RPX05QVkFSSUFOVCgqdmFyaWFudCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1z
dGF0aWMgYm9vbCBOUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIg
bWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENs
YXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SmF2YVNjcmlwdE9iamVjdCo+KG8pOwotCi0gICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0
aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4obWV0aG9kTmFtZSk7Ci0gICAgICAgIGlmICghaS0+aXNT
dHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBTcGVjaWFs
IGNhc2UgdGhlICJldmFsIiBtZXRob2QuCi0gICAgICAgIGlmIChtZXRob2ROYW1lID09IF9OUE5f
R2V0U3RyaW5nSWRlbnRpZmllcigiZXZhbCIpKSB7Ci0gICAgICAgICAgICBpZiAoYXJnQ291bnQg
IT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYXJn
c1swXS50eXBlICE9IE5QVmFyaWFudFR5cGVfU3RyaW5nKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjpOUE5fRXZhbHVhdGUobnBwLCBv
LCBjb25zdF9jYXN0PE5QU3RyaW5nKj4oJmFyZ3NbMF0udmFsdWUuc3RyaW5nVmFsdWUpLCByZXN1
bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0
LgotICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5y
b290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgICAgICBKU0M6OkpTVmFsdWUgZnVu
Y3Rpb24gPSBvYmotPmltcC0+Z2V0KGV4ZWMsIEpTQzo6QmluZGluZ3M6OmlkZW50aWZpZXJGcm9t
TlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7Ci0gICAgICAgIEpTQzo6Q2FsbERhdGEg
Y2FsbERhdGE7Ci0gICAgICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShm
dW5jdGlvbiwgY2FsbERhdGEpOwotICAgICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlw
ZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gQ2FsbCB0aGUg
ZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xp
c3Q7Ci0gICAgICAgIGdldExpc3RGcm9tVmFyaWFudEFyZ3MoZXhlYywgYXJncywgYXJnQ291bnQs
IHJvb3RPYmplY3QsIGFyZ0xpc3QpOwotICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ViA9IEpT
Qzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmotPmltcCwgYXJn
TGlzdCk7Ci0KLSAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhl
IGZ1bmN0aW9uIGNhbGwuCi0gICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBW
YXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChvLT5fY2xhc3Mt
Pmludm9rZSkKLSAgICAgICAgcmV0dXJuIG8tPl9jbGFzcy0+aW52b2tlKG8sIG1ldGhvZE5hbWUs
IGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOwotCi0gICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6aW5pdGlhbGl6
ZUJyb3dzZXJGdW5jcygpCi17Ci0gICAgbWVtc2V0KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6ZW9m
KG1fYnJvd3NlckZ1bmNzKSk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZihtX2Jy
b3dzZXJGdW5jcyk7Ci0gICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QVmVyc2lvbigpOwot
Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7Ci0gICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJl
YWQgPSBOUE5fUmVxdWVzdFJlYWQ7Ci0gICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBO
X05ld1N0cmVhbTsKLSAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07Ci0gICAgbV9i
cm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKLSAgICBtX2Jyb3dzZXJGdW5jcy51YWdl
bnQgPSBOUE5fVXNlckFnZW50OwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01l
bUFsbG9jOwotICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKLSAgICBt
X2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7Ci0gICAgbV9icm93c2VyRnVuY3Mu
Z2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0
dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dmFs
dWUgPSBOUE5fR2V0VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0
VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0
ZVJlY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlk
YXRlUmVnaW9uOwotICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVk
cmF3OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVk
U3RhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1Bv
cFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wbHVnaW50aHJlYWRhc3lu
Y2NhbGwgPSBOUE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsOwotCi0gICAgbV9icm93c2VyRnVuY3Mu
cmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVy
OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyczsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05Q
Tl9HZXRJbnRJZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmlu
ZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOwotICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9t
aWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNz
LmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRGcm9tSWRlbnRpZmllcjsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKLSAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OwotICAgIG1fYnJvd3NlckZ1bmNz
Lmludm9rZSA9IFdlYkNvcmU6Ok5QTl9JbnZva2U7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52b2tl
RGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0
ZSA9IFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0
eSA9IF9OUE5fR2V0UHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBf
TlBOX1NldFByb3BlcnR5OwotICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05Q
Tl9SZW1vdmVQcm9wZXJ0eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5f
SGFzUHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNNZXRo
b2Q7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247
Ci0gICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7Ci0gICAgbV9i
cm93c2VyRnVuY3MuY29uc3RydWN0ID0gX05QTl9Db25zdHJ1Y3Q7Ci0gICAgbV9icm93c2VyRnVu
Y3MuZ2V0dmFsdWVmb3J1cmwgPSBOUE5fR2V0VmFsdWVGb3JVUkw7Ci0gICAgbV9icm93c2VyRnVu
Y3Muc2V0dmFsdWVmb3J1cmwgPSBOUE5fU2V0VmFsdWVGb3JVUkw7Ci0gICAgbV9icm93c2VyRnVu
Y3MuZ2V0YXV0aGVudGljYXRpb25pbmZvID0gTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mbzsKLQot
ICAgIG1fYnJvd3NlckZ1bmNzLnBvcHVwY29udGV4dG1lbnUgPSBOUE5fUG9wVXBDb250ZXh0TWVu
dTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotI2lmIEVOQUJM
RShQTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCkKLXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhh
c2goKSBjb25zdAotewotICAgIHN0cnVjdCBIYXNoQ29kZXMgewotICAgICAgICB1bnNpZ25lZCBo
YXNoOwotICAgICAgICB0aW1lX3QgbW9kaWZpZWREYXRlOwotICAgIH0gaGFzaENvZGVzOwotCi0g
ICAgaGFzaENvZGVzLmhhc2ggPSBtX3BhdGguaW1wbCgpLT5oYXNoKCk7Ci0gICAgaGFzaENvZGVz
Lm1vZGlmaWVkRGF0ZSA9IG1fbGFzdE1vZGlmaWVkOwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hl
cjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oJmhhc2hDb2Rlcyk7Ci19Ci0KLWJvb2wg
UGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2lu
UGFja2FnZSYgYikKLXsKLSAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlw
dGlvbjsKLX0KLSNlbmRpZgotCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9u
KGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0Ci17Ci0g
ICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4s
IGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KLSAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KLQot
I2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5tb3N0U2lnICE9IGNvbXBh
cmVWZXJzaW9uLm1vc3RTaWcpCi0gICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24ubW9zdFNp
ZyA+IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcgPyAxIDogLTE7Ci0gICAgaWYgKG1fbW9kdWxlVmVy
c2lvbi5sZWFzdFNpZyAhPSBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZykKLSAgICAgICAgcmV0dXJu
IG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA+IGNvbXBhcmVWZXJzaW9uLmxlYXN0U2lnID8gMSA6
IC0xOwotI2Vsc2UgICAgCi0gICAgaWYgKG1fbW9kdWxlVmVyc2lvbiAhPSBjb21wYXJlVmVyc2lv
bikKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbiA+IGNvbXBhcmVWZXJzaW9uID8gMSA6
IC0xOwotI2VuZGlmCi0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fTUVUQURBVEFfQ0FDSEUpCi1ib29sIFBsdWdpblBhY2thZ2U6OmVuc3VyZVBsdWdpbkxv
YWRlZCgpCi17Ci0gICAgaWYgKCFtX2luZm9Jc0Zyb21DYWNoZSkKLSAgICAgICAgcmV0dXJuIG1f
aXNMb2FkZWQ7Ci0KLSAgICBtX3F1aXJrcyA9IFBsdWdpblF1aXJrU2V0KCk7Ci0gICAgbV9uYW1l
ID0gU3RyaW5nKCk7Ci0gICAgbV9kZXNjcmlwdGlvbiA9IFN0cmluZygpOwotICAgIG1fZnVsbE1J
TUVEZXNjcmlwdGlvbiA9IFN0cmluZygpOwotICAgIG1fbW9kdWxlVmVyc2lvbiA9IDA7Ci0KLSAg
ICByZXR1cm4gZmV0Y2hJbmZvKCk7Ci19Ci0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblBhY2thZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgzNDA1NzY3
OTdhYTZiYzgzMTc3MmJjM2I0ZjljY2Y4Y2M4YmE2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2th
Z2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpblBhY2th
Z2VfaAotI2RlZmluZSBQbHVnaW5QYWNrYWdlX2gKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
LSNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgi
Ci0jZW5kaWYKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOwotCi0g
ICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5QbHVnaW5QYWNrYWdlKCk7Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUGFj
a2FnZT4gY3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRp
bWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsKLSNlbmRpZgotCi0gICAg
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgICAg
ICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlv
bjsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7
IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBwYXJlbnREaXJlY3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudERpcmVjdG9yeTsgfQotICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtb2R1
bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZTsgfQotICAgICAgICB1aW50MTZfdCBOUFZlcnNp
b24oKSBjb25zdDsKLSAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFzdE1vZGlmaWVkOyB9Ci0KLSAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFw
JiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9u
czsgfQotICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9Ci0KLSAgICAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5Q
YWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKTsKLQotICAgICAgICBib29sIGxvYWQo
KTsKLSAgICAgICAgdm9pZCB1bmxvYWQoKTsKLSAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1
dGRvd24oKTsKLQotICAgICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNF
bmFibGVkOyB9Ci0gICAgICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5G
dW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9Ci0jZW5kaWYKLSAgICAgICAg
aW50IGNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25z
dDsKLSAgICAgICAgaW50IGNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0OwotICAg
ICAgICBQbHVnaW5RdWlya1NldCBxdWlya3MoKSBjb25zdCB7IHJldHVybiBtX3F1aXJrczsgfQot
ICAgICAgICBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIHZlcnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX21vZHVsZVZlcnNpb247IH0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVU
QURBVEFfQ0FDSEUpCi0gICAgICAgIGJvb2wgZW5zdXJlUGx1Z2luTG9hZGVkKCk7Ci0gICAgICAg
IHZvaWQgc2V0TUlNRURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsK
LSAgICAgICAgU3RyaW5nIGZ1bGxNSU1FRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1
bGxNSU1FRGVzY3JpcHRpb247fQotI2VuZGlmCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2lu
UGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsK
LQotICAgICAgICBib29sIGZldGNoSW5mbygpOwotICAgICAgICBib29sIGlzUGx1Z2luQmxhY2ts
aXN0ZWQoKTsKLSAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSk7Ci0KLSAgICAgICAgdm9pZCBkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0
aW9uKCk7Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOwotCi0gICAgICAg
IGJvb2wgbV9pc0VuYWJsZWQ7Ci0gICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKLSAgICAgICAgaW50
IG1fbG9hZENvdW50OwotCi0gICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOwotICAgICAgICBT
dHJpbmcgbV9wYXRoOwotICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKLSAgICAgICAgU3RyaW5n
IG1fbmFtZTsKLSAgICAgICAgU3RyaW5nIG1fcGFyZW50RGlyZWN0b3J5OwotCi0gICAgICAgIFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiBtX21vZHVsZVZlcnNpb247Ci0KLSAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOwotICAgICAgICBNSU1FVG9FeHRlbnNp
b25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKLQotICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtX21v
ZHVsZTsKLSAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOwotCi0jaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRv
d247Ci0gICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKLSAgICAgICAgTlBOZXRz
Y2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOwotI2VuZGlmCi0KLSAgICAgICAgdm9pZCBmcmVlTGli
cmFyeVNvb24oKTsKLSAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoKTsKLSAgICAg
ICAgVGltZXIgbV9mcmVlTGlicmFyeVRpbWVyOwotCi0gICAgICAgIFBsdWdpblF1aXJrU2V0IG1f
cXVpcmtzOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAg
ICAgIFN0cmluZyBtX2Z1bGxNSU1FRGVzY3JpcHRpb247Ci0gICAgICAgIGJvb2wgbV9pbmZvSXNG
cm9tQ2FjaGU7Ci0jZW5kaWYKLSAgICB9OwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3Jr
YXJvdW5kIGJlY2F1c2UgUGx1Z2luUGFja2FnZUhhc2ggaXMgYnJva2VuIGFuZCBtYXkgY29uc2lk
ZXIga2V5cyB3aXRoIGRpZmZlcmVudCBoYXNoZXMgYXMgZXF1YWwuCi0gICAgc3RydWN0IFBsdWdp
blBhY2thZ2VIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IDY0OwotICAgIH07
Ci0KLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2ggewotICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCB1aW50cHRyX3Qga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBs
dWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgp
OyB9Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgdWludHB0cl90IGEsIGNvbnN0
IHVpbnRwdHJfdCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2th
Z2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYikpOyB9Ci0gICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYgYSwgY29uc3Qg
UmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlOjplcXVhbCgq
YS5nZXQoKSwgKmIuZ2V0KCkpOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luUXVpcmtTZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhMzM4M2RiYjQ0NjkwOTk0MDdkNmJkYTEy
M2QxMDFkY2I1ZDM4NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luUXVpcmtTZXRfaAotI2RlZmluZSBQbHVnaW5RdWly
a1NldF9oCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgZW51bSBQbHVnaW5RdWlyayB7
Ci0gICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50ID0gMSA8PCAwLAotICAg
ICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0gMSA8PCAxLAotICAgICAg
ICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwgCi0gICAgICAgIFBsdWdp
blF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMsCi0gICAgICAgIFBsdWdp
blF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8IDQsCi0gICAgICAgIFBs
dWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEgPDwgNSwKLSAgICAgICAgUGx1Z2luUXVpcmtE
b250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0gMSA8PCA2LAotICAgICAg
ICBQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3AgPSAxIDw8IDcsCi0gICAgICAgIFBsdWdp
blF1aXJrRmxhc2hVUkxOb3RpZnlCdWcgPSAxIDw8IDgsCi0gICAgICAgIFBsdWdpblF1aXJrRG9u
dENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyA9IDEgPDwgOSwKLSAgICAgICAgUGx1Z2luUXVp
cmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJveSA9IDEgPDwgMTAsCi0gICAgICAgIFBs
dWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMgPSAxIDw8IDExLAotICAgICAgICBQ
bHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCA9IDEgPDwgMTIsCi0gICAgICAgIFBsdWdpblF1
aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGggPSAxIDw8IDEzLAotICAgICAgICBQbHVnaW5R
dWlya0RvbnRDYWxsU2V0V2luZG93TW9yZVRoYW5PbmNlID0gMSA8PCAxNCwKLSAgICAgICAgUGx1
Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5kb3dsZXNzTW9kZSA9IDEgPDwgMTUsCi0gICAg
ICAgIFBsdWdpblF1aXJrV2FudHNDaHJvbWVVc2VyQWdlbnQgPSAxIDw8IDE2Ci0gICAgfTsKLQot
ICAgIGNsYXNzIFBsdWdpblF1aXJrU2V0IHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAg
UGx1Z2luUXVpcmtTZXQoKSA6IG1fcXVpcmtzKDApIHsgfQotICAgICAgICAgICAgdm9pZCBhZGQo
UGx1Z2luUXVpcmsgcXVpcmspIHsgbV9xdWlya3MgfD0gcXVpcms7IH0KLSAgICAgICAgICAgIGJv
b2wgY29udGFpbnMoUGx1Z2luUXVpcmsgcXVpcmspIGNvbnN0IHsgcmV0dXJuIG1fcXVpcmtzICYg
cXVpcms7IH0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIG1fcXVpcmtz
OwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsdWdpblF1
aXJrU2V0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzliOWIxMjBmMWY0MjBjNmI0YTdjNmJmZjAwNzYzMzAwYjU1
ODI0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
ODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
LCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luU3Ry
ZWFtLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIK
LSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxl
ci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9h
ZGVyLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLS8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29t
ZSBwbHVnaW5zIGxpa2UgdG8gcmV0dXJuIC0xIHRvIGluZGljYXRlIGVycm9yCi0vLyBhbmQgdGhp
cyB3YXkgd2Ugd29uJ3QgY2xhc2ggd2l0aCB0aGVtLgotc3RhdGljIGNvbnN0IGludCBXZWJSZWFz
b25Ob25lID0gLTI7Ci0KLXVzaW5nIHN0ZDo6bWF4OwotdXNpbmcgc3RkOjptaW47Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNoTWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1N
YXA7Ci1zdGF0aWMgU3RyZWFtTWFwJiBzdHJlYW1zKCkKLXsKLSAgICBzdGF0aWMgU3RyZWFtTWFw
IHN0YXRpY1N0cmVhbXM7Ci0gICAgcmV0dXJuIHN0YXRpY1N0cmVhbXM7Ci19Ci0KLVBsdWdpblN0
cmVhbTo6UGx1Z2luU3RyZWFtKFBsdWdpblN0cmVhbUNsaWVudCogY2xpZW50LCBGcmFtZSogZnJh
bWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1
bmNzLCBOUFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0JiBxdWlya3MpCi0gICAgOiBt
X3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpCi0gICAgLCBtX2NsaWVudChjbGllbnQp
Ci0gICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCi0g
ICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKLSAgICAsIG1fc3RyZWFt
U3RhdGUoU3RyZWFtQmVmb3JlU3RhcnRlZCkKLSAgICAsIG1fbG9hZE1hbnVhbGx5KGZhbHNlKQot
ICAgICwgbV9kZWxheURlbGl2ZXJ5VGltZXIoKnRoaXMsICZQbHVnaW5TdHJlYW06OmRlbGF5RGVs
aXZlcnlUaW1lckZpcmVkKQotICAgICwgbV90ZW1wRmlsZUhhbmRsZShpbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlKQotICAgICwgbV9wbHVnaW5GdW5jcyhwbHVnaW5GdW5jcykKLSAgICAsIG1faW5z
dGFuY2UoaW5zdGFuY2UpCi0gICAgLCBtX3F1aXJrcyhxdWlya3MpCi17Ci0gICAgQVNTRVJUKG1f
aW5zdGFuY2UpOwotCi0gICAgbV9zdHJlYW0udXJsID0gMDsKLSAgICBtX3N0cmVhbS5uZGF0YSA9
IDA7Ci0gICAgbV9zdHJlYW0ucGRhdGEgPSAwOwotICAgIG1fc3RyZWFtLmVuZCA9IDA7Ci0gICAg
bV9zdHJlYW0ubm90aWZ5RGF0YSA9IDA7Ci0gICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsK
LSAgICBtX3N0cmVhbS5oZWFkZXJzID0gMDsKLQotICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFt
LCBtX2luc3RhbmNlKTsKLX0KLQotUGx1Z2luU3RyZWFtOjp+UGx1Z2luU3RyZWFtKCkKLXsKLSAg
ICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1TdGFydGVkKTsKLSAgICBBU1NFUlQoIW1f
bG9hZGVyKTsKLQotICAgIGZhc3RGcmVlKChjaGFyKiltX3N0cmVhbS51cmwpOwotCi0gICAgc3Ry
ZWFtcygpLnJlbW92ZSgmbV9zdHJlYW0pOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6c3RhcnQo
KQotewotICAgIEFTU0VSVCghbV9sb2FkTWFudWFsbHkpOwotICAgIG1fbG9hZGVyID0gcmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChtX2ZyYW1lLCB0aGlz
LCBtX3Jlc291cmNlUmVxdWVzdCk7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpzdG9wKCkKLXsK
LSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RvcHBlZDsKLQotICAgIGlmIChtX2xvYWRNYW51
YWxseSkgewotICAgICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKLQotICAgICAgICBEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExv
YWRlcigpOwotICAgICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOwotCi0gICAgICAgIGlmIChk
b2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFpblJlc291cmNlKCkpCi0gICAgICAgICAgICBkb2N1
bWVudExvYWRlci0+Y2FuY2VsTWFpblJlc291cmNlTG9hZChtX2ZyYW1lLT5sb2FkZXIoKS5jYW5j
ZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAobV9sb2FkZXIpIHsKLSAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwotICAg
ICAgICBtX2xvYWRlciA9IDA7Ci0gICAgfQotCi0gICAgbV9jbGllbnQgPSAwOwotfQotCi1zdGF0
aWMgdWludDMyX3QgbGFzdE1vZGlmaWVkRGF0ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKLXsKLSAgICBkb3VibGUgbGFzdE1vZGlmaWVkID0gcmVzcG9uc2UubGFzdE1vZGlmaWVk
KCk7Ci0gICAgaWYgKCFzdGQ6OmlzZmluaXRlKGxhc3RNb2RpZmllZCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIGxhc3RNb2RpZmllZCAqIDEwMDA7Ci19Ci0KLXZvaWQgUGx1Z2lu
U3RyZWFtOjpzdGFydFN0cmVhbSgpCi17Ci0gICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3Ry
ZWFtQmVmb3JlU3RhcnRlZCk7Ci0KLSAgICBjb25zdCBVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNv
dXJjZVJlc3BvbnNlLnVybCgpOwotCi0gICAgLy8gU29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0
IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBwYXNzZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMg
dGhlCi0gICAgLy8gZm9ybWF0IHVzZWQgd2hlbiByZXF1ZXN0aW5nIHRoZSBVUkwuCi0gICAgaWYg
KHByb3RvY29sSXNKYXZhU2NyaXB0KHJlc3BvbnNlVVJMKSkKLSAgICAgICAgbV9zdHJlYW0udXJs
ID0gZmFzdFN0ckR1cChkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMocmVzcG9uc2VVUkwuc3RyaW5n
KCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9zdHJlYW0udXJsID0gZmFz
dFN0ckR1cChyZXNwb25zZVVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIENTdHJp
bmcgbWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7Ci0K
LSAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNl
LmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotCi0gICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5p
c0hUVFAoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAg
IFN0cmluZyBzZXBhcmF0b3IgPSBBU0NJSUxpdGVyYWwoIjogIik7Ci0KLSAgICAgICAgU3RyaW5n
IHN0YXR1c0xpbmUgPSAiSFRUUCAiICsgU3RyaW5nOjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCkpICsgIiBPS1xuIjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoc3RhdHVzTGluZSk7Ci0KLSAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKLSAgICAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNw
b25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChpdC0+dmFsdWUpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBtX2hlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkudXRmOCgpOwotCi0gICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3Qg
bGlrZWx5IGNvbXByZXNzZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1
Z2luLAotICAgICAgICAvLyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQg
bGVuZ3RoLCBub3QgeWV0IGtub3duIGF0IHRoZSBtb21lbnQuCi0gICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS80NDcwNTk5PiB0cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoXSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgotICAgICAgICBT
dHJpbmcgY29udGVudEVuY29kaW5nID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudEVuY29kaW5nKTsKLSAgICAgICAgaWYgKCFjb250ZW50
RW5jb2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCi0gICAg
ICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggPSAtMTsKLSAgICB9Ci0KLSAgICBtX3N0cmVh
bS5oZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsKLSAgICBtX3N0cmVhbS5wZGF0YSA9IDA7Ci0g
ICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOwotICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3Rl
ZENvbnRlbnRMZW5ndGgsIDBMTCk7Ci0gICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbGFzdE1v
ZGlmaWVkRGF0ZShtX3Jlc291cmNlUmVzcG9uc2UpOwotICAgIG1fc3RyZWFtLm5vdGlmeURhdGEg
PSBtX25vdGlmeURhdGE7Ci0KLSAgICBtX3RyYW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKLSAgICBt
X29mZnNldCA9IDA7Ci0gICAgbV9yZWFzb24gPSBXZWJSZWFzb25Ob25lOwotCi0gICAgLy8gUHJv
dGVjdCB0aGUgc3RyZWFtIGlmIGRlc3Ryb3lzdHJlYW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRo
ZSBuZXdzdHJlYW0gaGFuZGxlcgotICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhp
cyk7Ci0KLSAgICAvLyBjYWxsaW5nIGludG8gYSBwbHVnLWluIGNvdWxkIHJlc3VsdCBpbiByZS1l
bnRyYW5jZSBpZiB0aGUgcGx1Zy1pbiB5aWVsZHMKLSAgICAvLyBjb250cm9sIHRvIHRoZSBzeXN0
ZW0gKHJkYXI6Ly81NzQ0ODk5KS4gcHJldmVudCB0aGlzIGJ5IGRlZmVycmluZyBmdXJ0aGVyCi0g
ICAgLy8gbG9hZGluZyB3aGlsZSBjYWxsaW5nIGludG8gdGhlIHBsdWctaW4uCi0gICAgaWYgKG1f
bG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICBO
UEVycm9yIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1J
TUVUeXBlKW1pbWVUeXBlU3RyLmRhdGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJN
b2RlKTsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2Fk
aW5nKGZhbHNlKTsKLSAgICAKLSAgICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4g
dGhlIGNhbGwgdG8gbmV3c3RyZWFtIHdlIHJldHVybgotICAgIGlmIChtX3JlYXNvbiAhPSBXZWJS
ZWFzb25Ob25lKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGlmIChucEVyciAhPSBO
UEVSUl9OT19FUlJPUikgewotICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKG5wRXJyKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFy
dGVkOwotCi0gICAgaWYgKG1fdHJhbnNmZXJNb2RlID09IE5QX05PUk1BTCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9wYXRoID0gb3BlblRlbXBvcmFyeUZpbGUoIldLUCIsIG1fdGVtcEZpbGVI
YW5kbGUpOwotCi0gICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRo
ZSBzdHJlYW0KLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQobV90ZW1wRmlsZUhhbmRsZSkpCi0gICAg
ICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwotfQotCi1OUFAg
UGx1Z2luU3RyZWFtOjpvd25lckZvclN0cmVhbShOUFN0cmVhbSogc3RyZWFtKQotewotICAgIHJl
dHVybiBzdHJlYW1zKCkuZ2V0KHN0cmVhbSk7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpjYW5j
ZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICBSZWZQdHI8UGx1Z2lu
U3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgZGVzdHJveVN0cmVhbShyZWFzb24pOwotICAg
IHN0b3AoKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24g
cmVhc29uKQotewotICAgIG1fcmVhc29uID0gcmVhc29uOwotICAgIGlmIChtX3JlYXNvbiAhPSBO
UFJFU19ET05FKSB7Ci0gICAgICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5n
IHN0cmVhbWVkCi0gICAgICAgIGlmIChtX2RlbGl2ZXJ5RGF0YSkKLSAgICAgICAgICAgIG1fZGVs
aXZlcnlEYXRhLT5yZXNpemUoMCk7Ci0gICAgfSBlbHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBt
X2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgewotICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRh
dGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ryb3kgdGhlIHN0cmVhbSBub3cuCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgZGVzdHJveVN0cmVhbSgpOwotfQotCi12b2lkIFBsdWdpblN0
cmVhbTo6ZGVzdHJveVN0cmVhbSgpCi17Ci0gICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFt
U3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fcmVhc29uICE9IFdlYlJl
YXNvbk5vbmUpOwotICAgIEFTU0VSVCghbV9kZWxpdmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEt
PnNpemUoKSA9PSAwKTsKLQotICAgIGNsb3NlRmlsZShtX3RlbXBGaWxlSGFuZGxlKTsKLQotICAg
IGJvb2wgbmV3U3RyZWFtQ2FsbGVkID0gbV9zdHJlYW0ubmRhdGE7Ci0KLSAgICAvLyBQcm90ZWN0
IGZyb20gZGVzdHJ1Y3Rpb24gaWY6Ci0gICAgLy8gIE5QTl9EZXN0cm95U3RyZWFtIGlzIGNhbGxl
ZCBmcm9tIE5QUF9OZXdTdHJlYW0gb3IKLSAgICAvLyAgUGx1Z2luU3RyZWFtQ2xpZW50OjpzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKCkgcmVtb3ZlcyB0aGUgbGFzdCByZWZlcmVuY2UKLSAgICBSZWZQ
dHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgaWYgKG5ld1N0cmVhbUNhbGxl
ZCkgewotICAgICAgICBpZiAobV9yZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90cmFuc2Zlck1v
ZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIW1fcGF0aC5pc051bGwoKSk7Ci0KLSAgICAgICAgICAgIGlmICht
X2xvYWRlcikKLSAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVl
KTsKLSAgICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJl
YW0sIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGlmIChtX2xvYWRlcikKLSAg
ICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKSB7
Ci0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICAgICAgbV9sb2FkZXItPnNl
dERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0KLSAgICAgICAgICAgIE5QRXJyb3IgbnBFcnIgPSBtX3Bs
dWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24p
OwotCi0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICAgICAgbV9sb2FkZXIt
PnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCi0gICAgICAgICAgICBMT0dfTlBFUlJPUihucEVy
cik7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0cmVhbS5uZGF0YSA9IDA7Ci0gICAgfQotCi0g
ICAgaWYgKG1fc2VuZE5vdGlmaWNhdGlvbikgewotICAgICAgICAvLyBGbGFzaCA5IGNhbiBkZXJl
ZmVyZW5jZSBudWxsIGlmIHdlIGNhbGwgTlBQX1VSTE5vdGlmeSB3aXRob3V0IGZpcnN0IGNhbGxp
bmcgTlBQX05ld1N0cmVhbQotICAgICAgICAvLyBmb3IgcmVxdWVzdHMgbWFkZSB3aXRoIE5QTl9Q
b3N0VVJMTm90aWZ5OyBzZWUgPHJkYXI6Ly81NTg4ODA3PgotICAgICAgICBpZiAobV9sb2FkZXIp
Ci0gICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICAgICAg
aWYgKCFuZXdTdHJlYW1DYWxsZWQgJiYgbV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtGbGFz
aFVSTE5vdGlmeUJ1ZykgJiYKLSAgICAgICAgICAgIGVxdWFsSWdub3JpbmdDYXNlKG1fcmVzb3Vy
Y2VSZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIlBPU1QiKSkgewotICAgICAgICAgICAgbV90cmFuc2Zl
ck1vZGUgPSBOUF9OT1JNQUw7Ci0gICAgICAgICAgICBtX3N0cmVhbS51cmwgPSAiIjsKLSAgICAg
ICAgICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7Ci0KLSAgICAgICAgICAg
IHN0YXRpYyBjaGFyIGVtcHR5TWltZVR5cGVbXSA9ICIiOwotICAgICAgICAgICAgbV9wbHVnaW5G
dW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIGVtcHR5TWltZVR5cGUsICZtX3N0cmVhbSwgZmFs
c2UsICZtX3RyYW5zZmVyTW9kZSk7Ci0gICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95
c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOwotCi0gICAgICAgICAgICAv
LyBpbiBzdWNjZXNzZnVsIHJlcXVlc3RzLCB0aGUgVVJMIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRl
ZCBhbmQgZnJlZWQgaW4gb3VyCi0gICAgICAgICAgICAvLyBkZXN0cnVjdG9yLCBzbyByZXNldCBp
dCB0byAwCi0gICAgICAgICAgICBtX3N0cmVhbS51cmwgPSAwOwotICAgICAgICB9Ci0gICAgICAg
IG1fcGx1Z2luRnVuY3MtPnVybG5vdGlmeShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKLSAg
ICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOwotICAgIH0KLQotICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOwot
Ci0gICAgaWYgKCFtX2xvYWRNYW51YWxseSAmJiBtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQt
PnN0cmVhbURpZEZpbmlzaExvYWRpbmcodGhpcyk7Ci0KLSAgICBpZiAoIW1fcGF0aC5pc051bGwo
KSkKLSAgICAgICAgZGVsZXRlRmlsZShtX3BhdGgpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6
ZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoKQotewotICAgIGRlbGl2ZXJEYXRhKCk7Ci19Ci0KLXZv
aWQgUGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YSgpCi17Ci0gICAgQVNTRVJUKG1fZGVsaXZlcnlE
YXRhKTsKLSAgICAKLSAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNhbmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJj
ZUxvYWRlciBvbiBlcnJvciBzbyB3ZSBkb24ndCByZWFjaCB0aGlzIGNhc2UKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7
Ci0KLSAgICBpZiAoIW1fc3RyZWFtLm5kYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50MzJfdCB0b3RhbEJ5dGVzID0gbV9kZWxpdmVy
eURhdGEtPnNpemUoKTsKLSAgICBpbnQzMl90IHRvdGFsQnl0ZXNEZWxpdmVyZWQgPSAwOwotCi0g
ICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVl
KTsKLSAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKLSAgICAg
ICAgaW50MzJfdCBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2lu
c3RhbmNlLCAmbV9zdHJlYW0pOwotCi0gICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsK
LSAgICAgICAgICAgIG1fZGVsYXlEZWxpdmVyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVsaXZlcnlCeXRl
cyA9IG1pbihkZWxpdmVyeUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7
Ci0gICAgICAgICAgICBpbnQzMl90IGRhdGFMZW5ndGggPSBkZWxpdmVyeUJ5dGVzOwotICAgICAg
ICAgICAgY2hhciogZGF0YSA9IG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVs
aXZlcmVkOwotCi0gICAgICAgICAgICAvLyBXcml0ZSB0aGUgZGF0YQotICAgICAgICAgICAgZGVs
aXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwg
bV9vZmZzZXQsIGRhdGFMZW5ndGgsICh2b2lkKilkYXRhKTsKLSAgICAgICAgICAgIGlmIChkZWxp
dmVyeUJ5dGVzIDwgMCkgewotICAgICAgICAgICAgICAgIExPR19QTFVHSU5fTkVUX0VSUk9SKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAgICAgICAgICAgICBtX2xv
YWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0gICAgICAgICAgICAgICAgY2FuY2VsQW5k
RGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVy
eUJ5dGVzLCBkYXRhTGVuZ3RoKTsKLSAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0
ZXM7Ci0gICAgICAgICAgICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0
RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0KLSAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDAp
IHsKLSAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7Ci0gICAg
ICAgICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2
ZXJlZDsKLSAgICAgICAgICAgIG1lbW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxp
dmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsK
LSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKLSAg
ICAgICAgICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQotICAgICAgICAgICAgICAg
IGRlc3Ryb3lTdHJlYW0oKTsKLSAgICAgICAgfQotICAgIH0gCi19Ci0KLXZvaWQgUGx1Z2luU3Ry
ZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENT
dHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3Vy
Y2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9wbGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgo
KSwgIiIpKTsKLQotICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0U3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAg
IGRpZFJlY2VpdmVEYXRhKDAsIHJlc3VsdFN0cmluZy5kYXRhKCksIHJlc3VsdFN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9sb2FkZXIgPSAwOwotCi0gICAgZGVzdHJv
eVN0cmVhbShyZXN1bHRTdHJpbmcuaXNOdWxsKCkgPyBOUFJFU19ORVRXT1JLX0VSUiA6IE5QUkVT
X0RPTkUpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQotewotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIp
OwotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOwotCi0g
ICAgbV9yZXNvdXJjZVJlc3BvbnNlID0gcmVzcG9uc2U7Ci0KLSAgICBzdGFydFN0cmVhbSgpOwot
fQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBB
U1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9z
dHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKLQotICAgIC8vIElmIHRoZSBwbHVnLWluIGNh
bmNlbHMgdGhlIHN0cmVhbSBpbiBkZWxpdmVyRGF0YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKLSAg
ICAvLyBzbyBwcm90ZWN0IGl0IGhlcmUuCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVj
dCh0aGlzKTsKLQotICAgIGlmIChtX3RyYW5zZmVyTW9kZSAhPSBOUF9BU0ZJTEVPTkxZKSB7Ci0g
ICAgICAgIGlmICghbV9kZWxpdmVyeURhdGEpCi0gICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPGNoYXI+PigpOwotCi0gICAgICAgIGludCBvbGRTaXpl
ID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKLSAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6
ZShvbGRTaXplICsgbGVuZ3RoKTsKLSAgICAgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRh
KCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgpOwotCi0gICAgICAgIGRlbGl2ZXJEYXRhKCk7Ci0g
ICAgfQotCi0gICAgaWYgKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RvcHBlZCAmJiBpc0hhbmRs
ZVZhbGlkKG1fdGVtcEZpbGVIYW5kbGUpKSB7Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSB3
cml0ZVRvRmlsZShtX3RlbXBGaWxlSGFuZGxlLCBkYXRhLCBsZW5ndGgpOwotICAgICAgICBpZiAo
Ynl0ZXNXcml0dGVuICE9IGxlbmd0aCkKLSAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJl
YW0oTlBSRVNfTkVUV09SS19FUlIpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRp
ZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VF
cnJvciYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7
Ci0KLSAgICBMT0dfUExVR0lOX05FVF9FUlJPUigpOwotCi0gICAgLy8gZGVzdHJveVN0cmVhbSBj
YW4gcmVzdWx0IGluIG91ciBiZWluZyBkZWxldGVkCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4g
cHJvdGVjdCh0aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwot
Ci0gICAgbV9sb2FkZXIgPSAwOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkRmluaXNoTG9h
ZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyKQotewotICAgIEFTU0VSVF9V
TlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotICAgIEFTU0VSVChtX3N0cmVhbVN0
YXRlID09IFN0cmVhbVN0YXJ0ZWQpOwotCi0gICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0
IGluIG91ciBiZWluZyBkZWxldGVkCi0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0
aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7Ci0KLSAgICBtX2xvYWRlciA9
IDA7Ci19Ci0KLWJvb2wgUGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0cmVhbXMoKSBjb25zdAotewot
ICAgIGlmICghbV9wbHVnaW5GdW5jcy0+Z2V0dmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAgaWYgKG1fcGx1Z2luRnVuY3MtPmdldHZhbHVl
KG1faW5zdGFuY2UsIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmcmVzdWx0KSAh
PSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJl
c3VsdCAhPSAwOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwMzJjNGMxOTA0NTEyMmY1NmFjZWY2MzJlNTc4
MThhMTVhOWJjZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5TdHJlYW1faAotI2RlZmluZSBQbHVn
aW5TdHJlYW1faAotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIlVSTC5oIgot
I2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
UXVpcmtTZXQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVf
aW50ZXJuYWwuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFt
ZTsKLSAgICBjbGFzcyBQbHVnaW5TdHJlYW07Ci0KLSAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRl
IHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3RyZWFtU3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9Owot
Ci0gICAgY2xhc3MgUGx1Z2luU3RyZWFtQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZp
cnR1YWwgflBsdWdpblN0cmVhbUNsaWVudCgpIHt9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKFBsdWdpblN0cmVhbSopIHt9Ci0gICAgfTsKLQotICAgIGNsYXNz
IFBsdWdpblN0cmVhbSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblN0cmVhbT4sIHByaXZhdGUg
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luU3RyZWFtPiBjcmVhdGUoUGx1Z2luU3RyZWFtQ2xpZW50
KiBjbGllbnQsIEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBi
b29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVu
Y3MqIGZ1bmN0aW9ucywgTlBQIGluc3RhbmNlLCBjb25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtz
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpblN0cmVh
bShjbGllbnQsIGZyYW1lLCByZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBm
dW5jdGlvbnMsIGluc3RhbmNlLCBxdWlya3MpKTsKLSAgICAgICAgfQotICAgICAgICB2aXJ0dWFs
IH5QbHVnaW5TdHJlYW0oKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgc3RhcnQoKTsKLSAgICAg
ICAgdm9pZCBzdG9wKCk7Ci0KLSAgICAgICAgdm9pZCBzdGFydFN0cmVhbSgpOwotCi0gICAgICAg
IHZvaWQgc2V0TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1hbnVhbGx5KSB7IG1fbG9hZE1hbnVhbGx5
ID0gbG9hZE1hbnVhbGx5OyB9Ci0KLSAgICAgICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShj
b25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdURjo6Q1N0cmluZyYgcmVzdWx0U3RyaW5nKTsK
LSAgICAgICAgdm9pZCBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKLQotICAgICAg
ICBzdGF0aWMgTlBQIG93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKik7Ci0KLSAgICAgICAgLy8gTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VF
cnJvciYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciopOwotICAgICAgICB2aXJ0dWFsIGJvb2wgd2FudHNBbGxTdHJlYW1z
KCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBQbHVnaW5TdHJlYW0oUGx1Z2luU3Ry
ZWFtQ2xpZW50KiwgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqLCBOUFAgaW5z
dGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0Jik7Ci0KLSAgICAgICAgdm9pZCBkZWxpdmVyRGF0
YSgpOwotICAgICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOwotICAgICAgICB2b2lk
IGRlc3Ryb3lTdHJlYW0oKTsKLQotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJl
cXVlc3Q7Ci0gICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNvdXJjZVJlc3BvbnNlOwotCi0g
ICAgICAgIFBsdWdpblN0cmVhbUNsaWVudCogbV9jbGllbnQ7Ci0gICAgICAgIEZyYW1lKiBtX2Zy
YW1lOwotICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVy
OwotICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7Ci0gICAgICAgIGJvb2wgbV9zZW5kTm90aWZp
Y2F0aW9uOwotICAgICAgICBQbHVnaW5TdHJlYW1TdGF0ZSBtX3N0cmVhbVN0YXRlOwotICAgICAg
ICBib29sIG1fbG9hZE1hbnVhbGx5OwotCi0gICAgICAgIFRpbWVyIG1fZGVsYXlEZWxpdmVyeVRp
bWVyOwotICAgICAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKCk7Ci0KLSAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxjaGFyPj4gbV9kZWxpdmVyeURhdGE7Ci0KLSAgICAgICAg
UGxhdGZvcm1GaWxlSGFuZGxlIG1fdGVtcEZpbGVIYW5kbGU7Ci0KLSAgICAgICAgY29uc3QgTlBQ
bHVnaW5GdW5jcyogbV9wbHVnaW5GdW5jczsKLSAgICAgICAgTlBQIG1faW5zdGFuY2U7Ci0gICAg
ICAgIHVpbnQxNl90IG1fdHJhbnNmZXJNb2RlOwotICAgICAgICBpbnQzMl90IG1fb2Zmc2V0Owot
ICAgICAgICBDU3RyaW5nIG1faGVhZGVyczsKLSAgICAgICAgU3RyaW5nIG1fcGF0aDsKLSAgICAg
ICAgTlBSZWFzb24gbV9yZWFzb247Ci0gICAgICAgIE5QU3RyZWFtIG1fc3RyZWFtOwotICAgICAg
ICBQbHVnaW5RdWlya1NldCBtX3F1aXJrczsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjIyNWMwNGNjMWVlNDFkNTYyZWRiZDkyMGM5ZDI5NzU4
ZWU0ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0
ODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+Ci0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0jaW5jbHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5j
bHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIK
LSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIK
LSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hl
ZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiUHJveHlTZXJ2
ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
LSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9y
LmgiCi0jaW5jbHVkZSAiV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNp
bmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2lu
Y2x1ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1Zh
bHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgT1MoV0lORE9X
UykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbi5oIgotI2VuZGlmCi0KLXVzaW5nIEpTQzo6RXhlY1N0YXRlOwotdXNpbmcg
SlNDOjpKU0xvY2s7Ci11c2luZyBKU0M6OkpTT2JqZWN0OwotdXNpbmcgSlNDOjpKU1ZhbHVlOwot
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0KLXVzaW5nIHN0ZDo6bWluOwotCi11
c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBpbnQgc19jYWxsaW5nUGx1Z2luOwotCi10eXBlZGVm
IEhhc2hNYXA8TlBQLCBQbHVnaW5WaWV3Kj4gSW5zdGFuY2VNYXA7Ci0KLXN0YXRpYyBJbnN0YW5j
ZU1hcCYgaW5zdGFuY2VNYXAoKQotewotICAgIHN0YXRpYyBJbnN0YW5jZU1hcCYgbWFwID0gKm5l
dyBJbnN0YW5jZU1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1zdGF0aWMgU3RyaW5nIHNjcmlw
dFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBVUkwmIHVybCkKLXsKLSAgICBpZiAoIXByb3Rv
Y29sSXNKYXZhU2NyaXB0KHVybCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8v
IFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCi0gICAgcmV0dXJuIGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKDExKSk7Ci19Ci0KLVBsdWdpblZp
ZXcqIFBsdWdpblZpZXc6OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOwotCi12b2lkIFBsdWdpblZp
ZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpCi17Ci0gICAgcG9wUG9wdXBzRW5hYmxlZFN0
YXRlKCk7Ci19Ci0KLUludFJlY3QgUGx1Z2luVmlldzo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAot
ewotICAgIC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCi0gICAgSW50UmVjdCBj
bGlwUmVjdChtX3dpbmRvd1JlY3QpOwotICAgIAotICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5k
IGdldCB0aGUgY2xpcCByZWN0IGZyb20gdGhlIGVuY2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmll
dy4KLSAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkudmll
dygpOwotICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZv
ckZyYW1lT3duZXIobV9lbGVtZW50LCB0cnVlKSk7Ci0KLSAgICByZXR1cm4gY2xpcFJlY3Q7Ci19
Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS5wcmludGluZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAocmVjdCAhPSBmcmFtZVJlY3QoKSkKLSAgICAgICAgV2lkZ2V0OjpzZXRG
cmFtZVJlY3QocmVjdCk7Ci0KLSAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLQotI2lmIE9TKFdJ
TkRPV1MpCi0gICAgLy8gT24gV2luZG93cyBhbHdheXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdl
b21ldHJ5LgotICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKLSNlbGlmIGRlZmluZWQoWFBfVU5J
WCkKLSAgICAvLyBPbiBVbml4LCBtdWx0aXBsZSBjYWxscyB0byBzZXROUFdpbmRvdygpIGluIHdp
bmRvd2VkIG1vZGUgY2F1c2VzIEZsYXNoIHRvIGNyYXNoCi0gICAgaWYgKG1fbW9kZSA9PSBOUF9G
VUxMIHx8ICFtX2lzV2luZG93ZWQpCi0gICAgICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKLSNl
bmRpZgotfQotCi12b2lkIFBsdWdpblZpZXc6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKLXsKLSAgICB1
cGRhdGVQbHVnaW5XaWRnZXQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5n
ZWQoKQotewotICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNX
aW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgcGx1Zy1pbiBm
cm9tIGRlbGV0aW9uIHdoaWxlIGRpc3BhdGNoaW5nIHRoZSBldmVudC4KLSAgICBSZWZQdHI8UGx1
Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkp
Ci0gICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50
KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQotICAgICAgICBoYW5k
bGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOwotI2lm
IGRlZmluZWQoWFBfTUFDT1NYKQotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3
aGVlbEV2ZW50KQotICAgICAgICBoYW5kbGVXaGVlbEV2ZW50KHN0YXRpY19jYXN0PFdoZWVsRXZl
bnQqPihldmVudCkpOwotI2VuZGlmCi0gICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7IC8vIFdlIGRvbid0IGtub3cgaWYgdGhlIHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vk
b3duIGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBjb250ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQg
V2ViS2l0IHRvIHNob3cgYSBkZWZhdWx0IG9uZS4KLSNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmZvY3Vzb3V0RXZlbnQpCi0gICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQo
KTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5mb2N1c2luRXZl
bnQpCi0gICAgICAgIGhhbmRsZUZvY3VzSW5FdmVudCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1
Z2luVmlldzo6aW5pdCgpCi17Ci0gICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fcGx1
Z2luKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5k
UGx1Z2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIExPRyhQbHVnaW5zLCAiUGx1
Z2luVmlldzo6aW5pdCgpOiBJbml0aWFsaXppbmcgcGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgewotICAg
ICAgICBtX3BsdWdpbiA9IDA7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghc3RhcnRPckFk
ZFRvVW5zdGFydGVkTGlzdCgpKSB7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2Fu
Tm90TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RhdHVzID0g
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OwotfQotCi1ib29sIFBsdWdpblZpZXc6OnN0
YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKQotewotICAgIGlmICghbV9wYXJlbnRGcmFtZS0+cGFn
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBvbmx5IGRlbGF5IHN0YXJ0
aW5nIHRoZSBwbHVnLWluIGlmIHdlJ3JlIGdvaW5nIHRvIGtpY2sgb2ZmIHRoZSBsb2FkCi0gICAg
Ly8gb3Vyc2VsdmVzLiBPdGhlcndpc2UsIHRoZSBsb2FkZXIgd2lsbCB0cnkgdG8gZGVsaXZlciBk
YXRhIGJlZm9yZSB3ZSd2ZQotICAgIC8vIHN0YXJ0ZWQgdGhlIHBsdWctaW4uCi0gICAgaWYgKCFt
X2xvYWRNYW51YWxseSAmJiAhbV9wYXJlbnRGcmFtZS0+cGFnZSgpLT5jYW5TdGFydE1lZGlhKCkp
IHsKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExp
c3RlbmVyKHRoaXMpOwotICAgICAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSB0cnVlOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhcnQoKTsKLX0KLQotYm9vbCBQ
bHVnaW5WaWV3OjpzdGFydCgpCi17Ci0gICAgaWYgKG1faXNTdGFydGVkKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBtX2lzV2FpdGluZ1RvU3RhcnQgPSBmYWxzZTsKLQotICAgIFBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnJlZ2lzdGVyUGx1Z2luKG1faW5zdGFu
Y2UpOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luKTsKLSAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPm5ld3ApOwotCi0gICAgTlBFcnJvciBucEVycjsKLSAgICB7Ci0gICAgICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAgICBucEVyciA9IG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUudXRmOCgpLmRh
dGEoKSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3BhcmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9w
YXJhbVZhbHVlcywgTlVMTCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAg
ICAgICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOwotICAgIH0KLQotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikg
ewotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47Ci0gICAg
ICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnVucmVnaXN0ZXJQbHVn
aW4obV9pbnN0YW5jZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2lz
U3RhcnRlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFu
dWFsbHkpIHsKLSAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFy
ZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOwotICAgICAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOwotICAgICAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtX3VybCk7Ci0gICAg
ICAgIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOwotICAgIH0KLQotICAgIG1fc3Rh
dHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OwotCi0gICAgaWYgKCFwbGF0Zm9y
bVN0YXJ0KCkpCi0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdp
bjsKLQotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBs
dWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQoKQotewotICAgIEFTU0VSVCghbV9pc1N0YXJ0ZWQpOwot
ICAgIGlmICghc3RhcnQoKSkKLSAgICAgICAgcGFyZW50RnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50
KCkuZGlzcGF0Y2hEaWRGYWlsVG9TdGFydFBsdWdpbih0aGlzKTsKLX0KLQotUGx1Z2luVmlldzo6
flBsdWdpblZpZXcoKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6flBsdWdpblZp
ZXcoKSIpOwotCi0gICAgQVNTRVJUKCFtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7Ci0K
LSAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZmluZCB0aGUgcGx1Zy1pbiwgd2UnbGwgcmV0dXJuIGVh
cmx5IGluIG91ciBjb25zdHJ1Y3RvciwgYW5kCi0gICAgLy8gbV9pbnN0YW5jZSB3aWxsIGJlIDAu
Ci0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAgIGluc3RhbmNlTWFwKCkucmVtb3ZlKG1faW5z
dGFuY2UpOwotCi0gICAgaWYgKG1faXNXYWl0aW5nVG9TdGFydCkKLSAgICAgICAgbV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwotCi0g
ICAgc3RvcCgpOwotCi0gICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNv
dW50KTsKLSAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsK
LQotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotCi0gICAgbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCku
Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7Ci0KLSAgICBpZiAobV9wbHVnaW4g
JiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1
Z2luKSkpCi0gICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpzdG9wKCkKLXsKLSAgICBpZiAoIW1faXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnN0b3AoKTogU3RvcHBpbmcgcGx1Zy1pbiAnJXMn
IiwgbV9wbHVnaW4tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIEhhc2hTZXQ8UmVmUHRy
PFBsdWdpblN0cmVhbT4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOwotICAgIEhhc2hTZXQ8UmVmUHRy
PFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKLSAgICBmb3Ig
KEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAoKml0KS0+c3RvcCgpOwotICAgICAg
ICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9z
dHJlYW1zLmlzRW1wdHkoKSk7Ci0KLSAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOwotCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotI2lmIGRlZmluZWQo
WFBfV0lOKSAmJiAhUExBVEZPUk0oR1RLKQotICAgIC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdwot
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9
IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9X
TkRQUk9DKTsKLQotICAgICAgICBpZiAoY3VycmVudFduZFByb2MgPT0gUGx1Z2luVmlld1duZFBy
b2MpCi0gICAgICAgICAgICBTZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IEdXTFBfV05EUFJPQywgKExPTkdfUFRSKW1fcGx1Z2luV25kUHJvYyk7Ci0gICAgfQotI2VuZGlm
IC8vICFkZWZpbmVkKFhQX1dJTikgfHwgUExBVEZPUk0oR1RLKQotI2VuZGlmIC8vIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaWYgIWRlZmluZWQoWFBfTUFDT1NYKQotICAgIC8vIENs
ZWFyIHRoZSB3aW5kb3cKLSAgICBtX25wV2luZG93LndpbmRvdyA9IDA7Ci0KLSAgICBpZiAobV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyAmJiAhbV9wbHVnaW4tPnF1aXJrcygpLmNv
bnRhaW5zKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpKSB7Ci0g
ICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKLSAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDAp
OwotICAgIH0KLQotI2lmZGVmIFhQX1VOSVgKLSAgICBkZWxldGUgc3RhdGljX2Nhc3Q8TlBTZXRX
aW5kb3dDYWxsYmFja1N0cnVjdCo+KG1fbnBXaW5kb3cud3NfaW5mbyk7Ci0gICAgbV9ucFdpbmRv
dy53c19pbmZvID0gMDsKLSNlbmRpZgotCi0jZW5kaWYgLy8gIWRlZmluZWQoWFBfTUFDT1NYKQot
Ci0gICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBs
dWdpbihtX2luc3RhbmNlKTsKLQotICAgIE5QU2F2ZWREYXRhKiBzYXZlZERhdGEgPSAwOwotICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7Ci0gICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5kZXN0cm95KG1faW5zdGFuY2UsICZzYXZlZERhdGEpOwotICAgIHNldENhbGxpbmdQbHVnaW4o
ZmFsc2UpOwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJy
ZW50UGx1Z2luVmlldygwKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IGlmIChzYXZlZERhdGEpIHsKLSAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgc2F2ZSB0aGlzIGRh
dGEgaW5zdGVhZCBvZiBqdXN0IGRpc2NhcmRpbmcgaXQKLSAgICAgICAgaWYgKHNhdmVkRGF0YS0+
YnVmKQotICAgICAgICAgICAgTlBOX01lbUZyZWUoc2F2ZWREYXRhLT5idWYpOwotICAgICAgICBO
UE5fTWVtRnJlZShzYXZlZERhdGEpOwotICAgIH0KLSNlbmRpZgotCi0gICAgbV9pbnN0YW5jZS0+
cGRhdGEgPSAwOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBs
dWdpblZpZXcqIHBsdWdpblZpZXcpCi17Ci0gICAgc19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdp
blZpZXc7Ci19Ci0KLVBsdWdpblZpZXcqIFBsdWdpblZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCkK
LXsKLSAgICByZXR1cm4gc19jdXJyZW50UGx1Z2luVmlldzsKLX0KLQotc3RhdGljIGNoYXIqIGNy
ZWF0ZVVURjhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCi17Ci0gICAgQ1N0cmluZyBjc3RyID0g
c3RyLnV0ZjgoKTsKLSAgICBjb25zdCBzaXplX3QgY3N0ckxlbmd0aCA9IGNzdHIubGVuZ3RoKCk7
Ci0gICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhj
c3RyTGVuZ3RoICsgMSkpOwotCi0gICAgbWVtY3B5KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHJM
ZW5ndGgpOwotICAgIHJlc3VsdFtjc3RyTGVuZ3RoXSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3Qq
IHJlcXVlc3QpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25n
ZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCi0gICAgLy8gZGlzcGxheWVkIHVu
bGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCi0gICAg
Y29uc3QgU3RyaW5nJiB0YXJnZXRGcmFtZU5hbWUgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0
KCkuZnJhbWVOYW1lKCk7Ci0gICAgaWYgKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50
TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIo
KSAmJiAodGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS5m
aW5kKHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJlbnRGcmFtZSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFVSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291
cmNlUmVxdWVzdCgpLnVybCgpOwotICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lm
SmF2YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKLQotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdl
c3R1cmVJbmRpY2F0b3IocmVxdWVzdC0+c2hvdWxkQWxsb3dQb3B1cHMoKSA/IERlZmluaXRlbHlQ
cm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0K
LSAgICBpZiAoanNTdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gaWYgdGhpcyBpcyBub3Qg
YSB0YXJnZXRlZCByZXF1ZXN0LCBjcmVhdGUgYSBzdHJlYW0gZm9yIGl0LiBvdGhlcndpc2UsCi0g
ICAgICAgIC8vIGp1c3QgcGFzcyBpdCBvZmYgdG8gdGhlIGxvYWRlcgotICAgICAgICBpZiAodGFy
Z2V0RnJhbWVOYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVh
bT4gc3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQo
KSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0
LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBs
dWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7Ci0gICAgICAgICAg
ICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGZyYW1lIGlzIG91
ciBmcmFtZSwgd2UgY291bGQgZGVzdHJveSB0aGUKLSAgICAgICAgICAgIC8vIFBsdWdpblZpZXcs
IHNvIHdlIHByb3RlY3QgaXQuIDxyZGFyOi8vcHJvYmxlbS82OTkxMjUxPgotICAgICAgICAgICAg
UmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAgICAgICAgIEZyYW1lTG9h
ZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1l
TG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSk7Ci0gICAgICAgICAgICBmcmFtZVJlcXVl
c3Quc2V0RnJhbWVOYW1lKHRhcmdldEZyYW1lTmFtZSk7Ci0gICAgICAgICAgICBmcmFtZVJlcXVl
c3Quc2V0U2hvdWxkQ2hlY2tOZXdXaW5kb3dQb2xpY3kodHJ1ZSk7Ci0gICAgICAgICAgICBtX3Bh
cmVudEZyYW1lLT5sb2FkZXIoKS5sb2FkKGZyYW1lUmVxdWVzdCk7Ci0KLSAgICAgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVu
IHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZwotICAgICAgICAgICAgaWYgKHJlcXVl
c3QtPnNlbmROb3RpZmljYXRpb24oKSkgewotICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNl
dEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0g
ICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgp
KTsKLSAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGFyZ2V0ZWQgSmF2
YVNjcmlwdCByZXF1ZXN0cyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRh
aW5zIHRoZSBKYXZhU2NyaXB0IHBsdWdpbgotICAgIC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUg
c3VyZSBpbiA6OmxvYWQuCi0gICAgQVNTRVJUKHRhcmdldEZyYW1lTmFtZS5pc0VtcHR5KCkgfHwg
bV9wYXJlbnRGcmFtZS0+dHJlZSgpLmZpbmQodGFyZ2V0RnJhbWVOYW1lKSA9PSBtX3BhcmVudEZy
YW1lKTsKLSAgICAKLSAgICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVn
aW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gaXQuCi0g
ICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3Rvcih0aGlzKTsKLSAgICBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSByZXN1bHQgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5leGVjdXRlU2NyaXB0
KGpzU3RyaW5nLCByZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpKTsKLQotICAgIGlmICh0YXJn
ZXRGcmFtZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKLQot
ICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX3BhcmVudEZyYW1lLT5zY3Jp
cHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAg
Q1N0cmluZyBjc3RyOwotICAgICAgICBpZiAocmVzdWx0LmdldFN0cmluZyhzY3JpcHRTdGF0ZSwg
cmVzdWx0U3RyaW5nKSkKLSAgICAgICAgICAgIGNzdHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOwot
Ci0gICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3Jl
YXRlKHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3Qo
KS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0
LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3Bs
dWdpbi0+cXVpcmtzKCkpOwotICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgICAg
IHN0cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0ocmVxdWVzdFVSTCwgY3N0cik7Ci0gICAgfQot
fQotCi12b2lkIFBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQo
IW1fcmVxdWVzdHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1faXNKYXZhU2NyaXB0UGF1c2Vk
KTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0ID0gV1RGOjpt
b3ZlKG1fcmVxdWVzdHNbMF0pOwotICAgIG1fcmVxdWVzdHMucmVtb3ZlKDApOwotICAgIAotICAg
IC8vIFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVmb3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qg
c2luY2UgdGhlIGNhbGwgdG8KLSAgICAvLyBwZXJmb3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBs
dWdpbiB2aWV3IHRvIGJlIGRlbGV0ZWQuCi0gICAgaWYgKCFtX3JlcXVlc3RzLmlzRW1wdHkoKSkK
LSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOwotCi0gICAgcGVyZm9ybVJl
cXVlc3QocmVxdWVzdC5nZXQoKSk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2NoZWR1bGVSZXF1
ZXN0KHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1ZXN0PiByZXF1ZXN0KQotewotICAgIG1fcmVx
dWVzdHMuYXBwZW5kKFdURjo6bW92ZShyZXF1ZXN0KSk7Ci0KLSAgICBpZiAoIW1faXNKYXZhU2Ny
aXB0UGF1c2VkKQotICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0K
LU5QRXJyb3IgUGx1Z2luVmlldzo6bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxv
YWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCi17Ci0g
ICAgQVNTRVJUKGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgp
ID09ICJHRVQiIHx8IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhv
ZCgpID09ICJQT1NUIik7Ci0KLSAgICBVUkwgdXJsID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS51cmwoKTsKLSAgICAKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgcmVxdWVzdHMg
dG8gYmUgbWFkZSB3aGVuIHRoZSBkb2N1bWVudCBsb2FkZXIgaXMgc3RvcHBpbmcgYWxsIGxvYWRl
cnMuCi0gICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigp
LmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIgfHwgbG9hZGVyLT5pc1N0b3BwaW5n
KCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgY29uc3QgU3Ry
aW5nJiB0YXJnZXRGcmFtZU5hbWUgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgpOwotICAg
IFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwpOwotCi0g
ICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSkgewotICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4K
LSAgICAgICAgaWYgKCFtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhO
b3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKLQotICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBhbGxvdyBK
UyByZXF1ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVn
LWluLgotICAgICAgICBpZiAoIXRhcmdldEZyYW1lTmFtZS5pc051bGwoKSAmJiBtX3BhcmVudEZy
YW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUpICE9IG1fcGFyZW50RnJhbWUpCi0gICAg
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKLSAgICB9IGVsc2UgaWYgKCFtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNwbGF5KHVybCkp
Ci0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgc2NoZWR1bGVSZXF1
ZXN0KHN0ZDo6bWFrZV91bmlxdWU8UGx1Z2luUmVxdWVzdD4oZnJhbWVMb2FkUmVxdWVzdCwgc2Vu
ZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwgYXJlUG9wdXBzQWxsb3dlZCgpKSk7Ci0KLSAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0YXRpYyBVUkwgbWFrZVVSTChjb25zdCBVUkwm
IGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMU3RyaW5nKQotewotICAgIFN0cmluZyB1
cmxTdHJpbmcgPSByZWxhdGl2ZVVSTFN0cmluZzsKLQotICAgIC8vIFN0cmlwIHJldHVybiBjaGFy
YWN0ZXJzLgotICAgIHVybFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJ1xuJywgIiIpOwotICAg
IHVybFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwoJ1xyJywgIiIpOwotCi0gICAgcmV0dXJuIFVS
TChiYXNlVVJMLCB1cmxTdHJpbmcpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFVSTE5v
dGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0
YSkKLXsKLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFt
ZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0KLSAgICBmcmFtZUxvYWRSZXF1ZXN0
LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNl
VVJMKCksIHVybCkpOwotCi0gICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwg
bm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQotewotICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVM
b2FkUmVxdWVzdChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsK
LQotICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7Ci0gICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLSAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKSk7Ci0KLSAgICByZXR1cm4gbG9hZChm
cmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6cG9z
dFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3Qg
bGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewot
ICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5
RGF0YSwgdHJ1ZSwgdHJ1ZSk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6cG9zdFVSTChjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFy
KiBidWYsIE5QQm9vbCBmaWxlKQotewotICAgIC8vIEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cg
aGVhZGVycyB0byBiZSBzcGVjaWZpZWQgdmlhIE5QUF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxl
LgotICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwg
ZmFsc2UsIGZpbGUpOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6Om5ld1N0cmVhbShOUE1JTUVU
eXBlLCBjb25zdCBjaGFyKiAvKiB0YXJnZXQgKi8sIE5QU3RyZWFtKiopCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICAvLyBVbnN1cHBvcnRlZAotICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOwotfQotCi1pbnQzMl90IFBsdWdpblZpZXc6OndyaXRlKE5QU3RyZWFtKiwgaW50MzJf
dCAvKiBsZW4gKi8sIHZvaWQqIC8qIGJ1ZmZlciAqLykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIC8vIFVuc3VwcG9ydGVkCi0gICAgcmV0dXJuIC0xOwotfQotCi1OUEVycm9yIFBsdWdp
blZpZXc6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQot
ewotICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0cmVhbTo6b3duZXJGb3JTdHJlYW0oc3RyZWFt
KSAhPSBtX2luc3RhbmNlKQotICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9F
UlJPUjsKLQotICAgIFBsdWdpblN0cmVhbSogYnJvd3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBs
dWdpblN0cmVhbSo+KHN0cmVhbS0+bmRhdGEpOwotICAgIGJyb3dzZXJTdHJlYW0tPmNhbmNlbEFu
ZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0K
LQotdm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y2hy
b21lKCkuc2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLmdldCgpLCBTdHJpbmc6OmZyb21V
VEY4KG1lc3NhZ2UpKTsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZShOUFBWYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCi17Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5W
aWV3OjpzZXRWYWx1ZSglcyk6ICIsIHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSh2YXJpYWJsZSwg
dmFsdWUpLmRhdGEoKSk7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUFBW
cGx1Z2luV2luZG93Qm9vbDoKLSAgICAgICAgbV9pc1dpbmRvd2VkID0gdmFsdWU7Ci0gICAgICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJv
b2w6Ci0gICAgICAgIG1faXNUcmFuc3BhcmVudCA9IHZhbHVlOwotICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Ci0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgY2FzZSBOUFBWcGx1Z2lu
RHJhd2luZ01vZGVsOiB7Ci0gICAgICAgIC8vIENhbiBvbmx5IHNldCBkcmF3aW5nIG1vZGVsIGlu
c2lkZSBOUFBfTmV3KCkKLSAgICAgICAgaWYgKHRoaXMgIT0gY3VycmVudFBsdWdpblZpZXcoKSkK
LSAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICAgICAgTlBEcmF3
aW5nTW9kZWwgbmV3RHJhd2luZ01vZGVsID0gTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVl
KSk7Ci0gICAgICAgIHN3aXRjaCAobmV3RHJhd2luZ01vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBE
cmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uOgotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW4gYXNrZWQgZm9yIHVuc3Vw
cG9ydGVkIGRyYXdpbmcgbW9kZWw6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgcHJldHR5TmFt
ZUZvckRyYXdpbmdNb2RlbChuZXdEcmF3aW5nTW9kZWwpKTsKLSAgICAgICAgICAgIHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBOUFBWcGx1
Z2luRXZlbnRNb2RlbDogewotICAgICAgICAvLyBDYW4gb25seSBzZXQgZXZlbnQgbW9kZWwgaW5z
aWRlIE5QUF9OZXcoKQotICAgICAgICBpZiAodGhpcyAhPSBjdXJyZW50UGx1Z2luVmlldygpKQot
ICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICBOUEV2ZW50
TW9kZWwgbmV3RXZlbnRNb2RlbCA9IE5QRXZlbnRNb2RlbCh1aW50cHRyX3QodmFsdWUpKTsKLSAg
ICAgICAgc3dpdGNoIChuZXdFdmVudE1vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVs
Q29jb2E6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBhc2tlZCBmb3IgdW5zdXBwb3J0
ZWQgZXZlbnQgbW9kZWw6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgcHJldHR5TmFtZUZvckV2
ZW50TW9kZWwobmV3RXZlbnRNb2RlbCkpOwotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gZGVmaW5lZChYUF9NQUNPU1gp
Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52
YWxpZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lu
dmFsaWRSZWN0cy5zaXplKCk7IGkrKykKLSAgICAgICAgaW52YWxpZGF0ZVJlY3QobV9pbnZhbGlk
UmVjdHNbaV0pOwotICAgIG1faW52YWxpZFJlY3RzLmNsZWFyKCk7Ci19Ci0KLQotdm9pZCBQbHVn
aW5WaWV3OjpwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKGJvb2wgc3RhdGUpCi17Ci0gICAgbV9wb3B1
cFN0YXRlU3RhY2suYXBwZW5kKHN0YXRlKTsKLX0KLSAKLXZvaWQgUGx1Z2luVmlldzo6cG9wUG9w
dXBzRW5hYmxlZFN0YXRlKCkKLXsKLSAgICBtX3BvcHVwU3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7
Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6YXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3BvcHVwU3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3BvcHVw
U3RhdGVTdGFjay5sYXN0KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2V0SmF2YVNjcmlwdFBhdXNlZChib29sIHBhdXNlZCkKLXsKLSAgICBpZiAobV9pc0ph
dmFTY3JpcHRQYXVzZWQgPT0gcGF1c2VkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pc0phdmFT
Y3JpcHRQYXVzZWQgPSBwYXVzZWQ7Ci0KLSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0g
ICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0b3AoKTsKLSAgICBlbHNlIGlmICghbV9yZXF1ZXN0cy5p
c0VtcHR5KCkpCi0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotTlBPYmplY3QqIFBsdWdpblZpZXc6Om5w
T2JqZWN0KCkKLXsKLSAgICBOUE9iamVjdCogb2JqZWN0ID0gMDsKLQotICAgIGlmICghbV9pc1N0
YXJ0ZWQgfHwgIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gT24gV2luZG93cywgY2FsbGluZyBKYXZhJ3Mg
TlBOX0dldFZhbHVlIGNhbiBhbGxvdyB0aGUgbWVzc2FnZSBsb29wIHRvCi0gICAgLy8gcnVuLCBh
bGxvd2luZyBsb2FkaW5nIHRvIHRha2UgcGxhY2Ugb3IgSmF2YVNjcmlwdCB0byBydW4uIFByb3Rl
Y3QgdGhlCi0gICAgLy8gUGx1Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uLiA8cmRhcjovL3Byb2Js
ZW0vNjk3ODgwND4KLSAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAg
IE5QRXJyb3IgbnBFcnI7Ci0gICAgewotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsKLSAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0
dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7
Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgICAgICBQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJf
Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLSNl
bmRpZgotCi1QYXNzUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBQbHVnaW5WaWV3Ojpi
aW5kaW5nSW5zdGFuY2UoKQotewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IE5QT2JqZWN0KiBvYmplY3QgPSBucE9iamVjdCgpOwotICAgIGlmICghb2JqZWN0KQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGlmIChoYXNPbmVSZWYoKSkgewotICAgICAgICAvLyBUaGUgcmVu
ZGVyZXIgZm9yIHRoZSBQbHVnaW5WaWV3IHdhcyBkZXN0cm95ZWQgZHVyaW5nIHRoZSBhYm92ZSBj
YWxsLCBhbmQKLSAgICAgICAgLy8gdGhlIFBsdWdpblZpZXcgd2lsbCBiZSBkZXN0cm95ZWQgd2hl
biB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHNvIHdlCi0gICAgICAgIC8vIHJldHVybiBudWxsLgot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9v
dE9iamVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNyZWF0ZVJvb3RPYmplY3Qo
dGhpcyk7Ci0gICAgUmVmUHRyPEpTQzo6QmluZGluZ3M6Okluc3RhbmNlPiBpbnN0YW5jZSA9IEpT
Qzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRlKG9iamVjdCwgcm9vdC5yZWxlYXNlKCkpOwot
Ci0gICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2Uu
cmVsZWFzZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdp
blZpZXc6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKiBzdHJlYW0pCi17Ci0gICAgQVNT
RVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0pKTsKLQotICAgIG1fc3RyZWFtcy5yZW1vdmUo
c3RyZWFtKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMp
Ci17Ci0gICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7
Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gcGFyYW1OYW1lcy5zaXplKCk7Ci0gICAgdW5zaWduZWQg
cGFyYW1Db3VudCA9IDA7Ci0KLSAgICBtX3BhcmFtTmFtZXMgPSByZWludGVycHJldF9jYXN0PGNo
YXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOwotICAgIG1fcGFyYW1WYWx1
ZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICog
c2l6ZSkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2lu
ZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdub3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3
aW5kb3dsZXNzdmlkZW8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChw
YXJhbU5hbWVzW2ldID09ICJwbHVnaW5zcGFnZSIpCi0gICAgICAgICAgICBtX3BsdWdpbnNQYWdl
ID0gcGFyYW1WYWx1ZXNbaV07Ci0KLSAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0g
Y3JlYXRlVVRGOFN0cmluZyhwYXJhbU5hbWVzW2ldKTsKLSAgICAgICAgbV9wYXJhbVZhbHVlc1tw
YXJhbUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOwotCi0gICAgICAg
IHBhcmFtQ291bnQrKzsKLSAgICB9Ci0KLSAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50Owot
fQotCi1QbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcGx1Z2luLCBIVE1MUGx1Z0luRWxlbWVudCogZWxl
bWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGJvb2wgbG9hZE1hbnVhbGx5KQotICAgIDogbV9wYXJlbnRGcmFtZShwYXJlbnRGcmFtZSkKLSAg
ICAsIG1fcGx1Z2luKHBsdWdpbikKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9p
c1N0YXJ0ZWQoZmFsc2UpCi0gICAgLCBtX3VybCh1cmwpCi0gICAgLCBtX3N0YXR1cyhQbHVnaW5T
dGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgLCBtX3JlcXVlc3RUaW1lcigqdGhpcywgJlBs
dWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKQotICAgICwgbV9pbnZhbGlkYXRlVGltZXIoKnRo
aXMsICZQbHVnaW5WaWV3OjppbnZhbGlkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fcG9wUG9wdXBz
U3RhdGVUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCkK
LSAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0
VGltZXJGaXJlZCkKLSAgICAsIG1fbW9kZShsb2FkTWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1C
RUQpCi0gICAgLCBtX3BhcmFtTmFtZXMoMCkKLSAgICAsIG1fcGFyYW1WYWx1ZXMoMCkKLSAgICAs
IG1fbWltZVR5cGUobWltZVR5cGUpCi0gICAgLCBtX2luc3RhbmNlKDApCi0jaWYgZGVmaW5lZChY
UF9NQUNPU1gpCi0gICAgLCBtX2lzV2luZG93ZWQoZmFsc2UpCi0gICAgLCBtX3VwZGF0ZWRDb2Nv
YVRleHRJbnB1dFJlcXVlc3RlZChmYWxzZSkKLSAgICAsIG1fa2V5RG93blNlbnQoZmFsc2UpCi0g
ICAgLCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcigwKQotI2Vsc2UKLSAgICAsIG1faXNXaW5kb3dl
ZCh0cnVlKQotI2VuZGlmCi0gICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCi0gICAgLCBtX2hh
dmVJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1faXNXYWl0aW5nVG9TdGFydChmYWxzZSkKLSNp
ZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQotI2VuZGlmCi0j
aWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgLCBtX3Bs
dWdpblduZFByb2MoMCkKLSAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKLSAgICAsIG1faXNDYWxsaW5n
UGx1Z2luV25kUHJvYyhmYWxzZSkKLSAgICAsIG1fd21QcmludEhEQygwKQotICAgICwgbV9oYXZl
VXBkYXRlZFBsdWdpbldpZGdldChmYWxzZSkKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEVGTCkKLSAg
ICAsIG1fd2luZG93KDApCi0jZW5kaWYKLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICAsIG1f
Y29udGV4dFJlZigwKQotI2VuZGlmCi0jaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICAsIG1faGFzUGVuZGluZ0dlb21ldHJ5Q2hhbmdlKHRydWUp
Ci0gICAgLCBtX2RyYXdhYmxlKDApCi0gICAgLCBtX3Zpc3VhbCgwKQotICAgICwgbV9jb2xvcm1h
cCgwKQotICAgICwgbV9wbHVnaW5EaXNwbGF5KDApCi0jZW5kaWYKLSAgICAsIG1fbG9hZE1hbnVh
bGx5KGxvYWRNYW51YWxseSkKLSAgICAsIG1fbWFudWFsU3RyZWFtKDApCi0gICAgLCBtX2lzSmF2
YVNjcmlwdFBhdXNlZChmYWxzZSkKLSAgICAsIG1faGF2ZUNhbGxlZFNldFdpbmRvdyhmYWxzZSkK
LXsKLSAgICBpZiAoIW1fcGx1Z2luKSB7Ci0gICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVz
Q2FuTm90RmluZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1faW5zdGFu
Y2UgPSAmbV9pbnN0YW5jZVN0cnVjdDsKLSAgICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7Ci0g
ICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOwotCi0gICAgaW5zdGFuY2VNYXAoKS5hZGQobV9pbnN0
YW5jZSwgdGhpcyk7Ci0KLSAgICBzZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVz
KTsKLQotICAgIG1lbXNldCgmbV9ucFdpbmRvdywgMCwgc2l6ZW9mKG1fbnBXaW5kb3cpKTsKLSNp
ZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICBtZW1zZXQoJm1fbnBDZ0NvbnRleHQsIDAsIHNpemVv
ZihtX25wQ2dDb250ZXh0KSk7Ci0jZW5kaWYKLQotICAgIHJlc2l6ZShzaXplKTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3Ojpmb2N1c1BsdWdpbkVsZW1lbnQoKQotewotICAgIGlmIChQYWdlKiBwYWdl
ID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS5zZXRGb2N1c2VkRWxlbWVudChtX2VsZW1lbnQsIG1fcGFyZW50RnJhbWUpOwotICAgIGVsc2UK
LSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobV9l
bGVtZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdp
blN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KG1fbG9hZE1hbnVhbGx5KTsKLSAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1f
bWFudWFsU3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5n
ZXQoKSwgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVx
dWVzdCgpLCBmYWxzZSwgMCwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1f
cGx1Z2luLT5xdWlya3MoKSk7Ci0gICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0
cnVlKTsKLQotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9u
c2UpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVh
bGx5KTsKLSAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOwotICAgIAotICAgIG1fbWFudWFsU3Ry
ZWFtLT5kaWRSZWNlaXZlRGF0YSgwLCBkYXRhLCBsZW5ndGgpOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OmRpZEZpbmlzaExvYWRpbmcoKQotewotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2xv
YWRNYW51YWxseSk7Ci0gICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFs
U3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZh
aWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBs
dWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICAKLSAgICBpZiAobV9tYW51YWxTdHJlYW0pCi0gICAg
ICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGYWlsKDAsIGVycm9yKTsKLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpzZXRDYWxsaW5nUGx1Z2luKGJvb2wgYikgY29uc3QKLXsKLSAgICBpZiAoIW1fcGx1Z2lu
LT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoYikKLSAgICAgICAgKytzX2NhbGxpbmdQbHVnaW47Ci0g
ICAgZWxzZQotICAgICAgICAtLXNfY2FsbGluZ1BsdWdpbjsKLQotICAgIEFTU0VSVChzX2NhbGxp
bmdQbHVnaW4gPj0gMCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkK
LXsKLSAgICByZXR1cm4gc19jYWxsaW5nUGx1Z2luID4gMDsKLX0KLQotUGFzc1JlZlB0cjxQbHVn
aW5WaWV3PiBQbHVnaW5WaWV3OjpjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRT
aXplJiBzaXplLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotewot
ICAgIC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBsdWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZp
bmRQbHVnaW4gd2lsbCBzZWFyY2ggZm9yCi0gICAgLy8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0
ZW5zaW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlwZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5n
Ci0gICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1pbWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2Uq
IHBsdWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4o
dXJsLCBtaW1lVHlwZUNvcHkpOwotCi0gICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJl
ZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KLSAgICBpZiAoIXBsdWdp
biAmJiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCkpIHsKLSAg
ICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7Ci0gICAgICAgIHBsdWdpbiA9IFBsdWdpbkRh
dGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkp
OwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luVmlldyhwYXJlbnRGcmFt
ZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBt
aW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSkpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmZyZWVT
dHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFz
dHJpbmdBcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykKLSAgICAgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOwotCi0gICAgZmFz
dEZyZWUoc3RyaW5nQXJyYXkpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJs
YW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gYnVmZmVy
LnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50
IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikK
LXsKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGggLSA0OyBpKyspIHsKLSAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2Vu
ZHMgIlxuXG4iLgotICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0g
PT0gJ1xuJykKLSAgICAgICAgICAgIHJldHVybiBpICsgMjsKLSAgICAgICAgCi0gICAgICAgIC8v
IFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0
aGUgZmlyc3QgbGluZS4KLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSAr
IDFdID09ICdcbicpIHsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGlmIChpID09
IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICBlbHNlIGlmIChieXRl
c1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJ
dCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAx
OwotICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0g
PT0gJ1xuJykKLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMg
IlxyXG5cclxuIiAoMzc1ODExMykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0
IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBh
cwotICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1
c2UgTEYKLSAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBh
IGNvbWJpbmF0aW9uCi0gICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5Piks
IHNvIGZpbmRFT0wgbmVlZHMKLSAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBu
b3cgYWNjZXB0IENSTEYsIExGIG9yCi0gICAgLy8gQ1IuCi0gICAgLy8KLSAgICAvLyBJdCByZXR1
cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4KLSAgICAvLyBh
IHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09
ICdcbicpCi0gICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOwotICAgICAgICBpZiAoYnl0ZXNb
aV0gPT0gJ1xyJykgewotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1
ZmZlciBib3VuZHMKLSAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNv
LCB3YWl0IGZvcgotICAgICAgICAgICAgLy8gbmV4dCByZWFkLgotICAgICAgICAgICAgaWYgKGkg
KyAxID09IGxlbmd0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgcmV0
dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1z
dGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0
IFN0cmluZyYgbmFtZSkKLXsKLSAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwot
ICAgIFN0cmluZyByZXN1bHQ7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5s
ZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIFVDaGFyIGM7Ci0KLSAgICAgICAgaWYgKGNhcGl0YWxp
emVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCi0gICAgICAg
ICAgICBjID0gdG9BU0NJSVVwcGVyKG5hbWVbaV0pOwotICAgICAgICBlbHNlIGlmICghY2FwaXRh
bGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykKLSAgICAg
ICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFtZVtpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGMgPSBuYW1lW2ldOwotCi0gICAgICAgIGlmIChuYW1lW2ldID09ICctJykKLSAgICAgICAg
ICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChj
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEhUVFBI
ZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5k
YXRhKCk7Ci0gICAgY29uc3QgY2hhciogZW9sOwotICAgIFN0cmluZyBsYXN0S2V5OwotICAgIEhU
VFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwotCi0gICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGls
IHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2Yt
bGluZXMKLSAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKLSAgICAgICAgaW50IGxpbmVMZW5ndGggPSBl
b2wgLSBieXRlczsKLSAgICAgICAgCi0gICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJh
Y3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBieSBmaW5kRU9MLgotICAgICAg
ICBieXRlcyA9IGVvbCArIDE7Ci0gICAgICAgIGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVz
ID09ICdcbicpKQotICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdv
bid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCi0KLSAgICAgICAgbGVuZ3RoIC09IChieXRlcyAt
IGxpbmUpOwotICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQotICAgICAgICAgICAgLy8gQmxh
bmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKLSAg
ICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAg
ICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1l
ZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNv
bnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAgICAgICAgICAgU3RyaW5n
IGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAg
aGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVh
ZGVyCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xvbjsKLSAgICAgICAgICAgIGZvciAoY29s
b24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29sb24rKykgewotICAg
ICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChjb2xvbiA9PSBlb2wpIAotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGln
bm9yZSBpdCBhbmQgY29udGludWUKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVh
ZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xvbiAtIGxpbmUpKTsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9
IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAm
JiAqY29sb24gIT0gJ1x0JykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKQotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9ICIiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24sIGVvbCAtIGNvbG9uKTsKLQotICAgICAgICAg
ICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBvbGRWYWx1ZSArICIsICIgKyB2YWx1ZTsKLQotICAgICAgICAgICAgICAgIGhlYWRl
ckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGhlYWRlckZpZWxkczsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3
OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJf
dCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29s
IHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQotewotICAgIGlmICghdXJsIHx8
ICFsZW4gfHwgIWJ1ZikKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07Ci0KLSAg
ICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0KLSAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxk
czsKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwotICAgIAotICAgIGlmIChmaWxlKSB7Ci0gICAg
ICAgIE5QRXJyb3IgcmVhZFJlc3VsdCA9IGhhbmRsZVBvc3RSZWFkRmlsZShidWZmZXIsIGxlbiwg
YnVmKTsKLSAgICAgICAgaWYocmVhZFJlc3VsdCAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAg
ICAgIHJldHVybiByZWFkUmVzdWx0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNp
emUobGVuKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKLSAgICB9
Ci0KLSAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgaW50IHBv
c3REYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKLQotICAgIGlmIChhbGxvd0hlYWRlcnMpIHsK
LSAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgewotICAgICAgICAgICAg
cG9zdERhdGErKzsKLSAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xp
bmUoYnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgewotICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9m
IHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKLSAgICAgICAgICAg
ICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0
aW9uKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUo
KSAtIGxvY2F0aW9uOwotCi0gICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlr
ZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKLSAgICAg
ICAgICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdl
IHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0
cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KLSAgICAgICAgICAgICAg
ICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoSFRUUEhlYWRlck5hbWU6
OkNvbnRlbnRMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlz
TnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5n
dGgudG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBoZWFkZXJGaWVs
ZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVuZ3RoKTsKLQotICAgICAgICAgICAg
ICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOwotICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3Ro
ID0gZGF0YUxlbmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOwot
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9w
YXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKLSAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGOjptb3ZlKGhl
YWRlckZpZWxkcykpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0
SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShwb3N0RGF0YSwgcG9zdERhdGFMZW5ndGgpKTsKLSAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotCi0gICAgcmV0dXJuIGxv
YWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Ci19Ci0K
LXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFpc1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGlmICghbV9lbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm47Ci0g
ICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KCptX2VsZW1lbnQtPnJlbmRl
cmVyKCkpOwotICAgIAotICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKLSAgICBkaXJ0eVJl
Y3QubW92ZShyZW5kZXJlci5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci5wYWRkaW5nTGVmdCgpLCBy
ZW5kZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKSk7Ci0gICAgcmVuZGVy
ZXIucmVwYWludFJlY3RhbmdsZShkaXJ0eVJlY3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBh
aW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQotewotICAgIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IG51bGxQbHVnaW5JbWFnZTsK
LSAgICBpZiAoIW51bGxQbHVnaW5JbWFnZSkKLSAgICAgICAgbnVsbFBsdWdpbkltYWdlID0gSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJudWxsUGx1Z2luIik7Ci0KLSAgICBJbnRSZWN0IGlt
YWdlUmVjdChmcmFtZVJlY3QoKS54KCksIGZyYW1lUmVjdCgpLnkoKSwgbnVsbFBsdWdpbkltYWdl
LT53aWR0aCgpLCBudWxsUGx1Z2luSW1hZ2UtPmhlaWdodCgpKTsKLQotICAgIGludCB4T2Zmc2V0
ID0gKGZyYW1lUmVjdCgpLndpZHRoKCkgLSBpbWFnZVJlY3Qud2lkdGgoKSkgLyAyOwotICAgIGlu
dCB5T2Zmc2V0ID0gKGZyYW1lUmVjdCgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAv
IDI7Ci0KLSAgICBpbWFnZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKLQotICAgIGlmICgh
cmVjdC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnRl
eHQtPnNhdmUoKTsKLSAgICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0KCkpOwotICAgIGNv
bnRleHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0K
LXN0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wICgiCi0j
aWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgICAgICJNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBP
UyBYOyIKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQotICAgICAgICAiV2luZG93czsgVTsgV2luZG93
cyBOVCA1LjE7IgotI2VsaWYgZGVmaW5lZChYUF9VTklYKQotLy8gVGhlIEd0ayBwb3J0IHVzZXMg
WDExIHBsdWdpbnMgaW4gTWFjLgotI2lmIE9TKERBUldJTikgJiYgUExBVEZPUk0oR1RLKQotICAg
ICJYMTE7IFU7IEludGVsIE1hYyBPUyBYOyIKLSNlbHNlCi0gICAgIlgxMTsgVTsgTGludXggaTY4
NjsiCi0jZW5kaWYKLSNlbmRpZgotICAgICAgICAiIGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAw
NjEwMTAgRmlyZWZveC8yLjAiOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ2hyb21lVXNl
ckFnZW50ID0gIk1vemlsbGEvNS4wICgiCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgIk1h
Y2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7IgotI2VsaWYgZGVmaW5lZChYUF9XSU4pCi0gICAg
IldpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyIKLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAg
ICAvLyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEgcGx1Z2lucyBpbiBNYWMuCi0jaWYgT1MoREFSV0lO
KSAmJiBQTEFURk9STShHVEspCi0gICAgIlgxMTsgVTsgSW50ZWwgTWFjIE9TIFg7IgotI2Vsc2UK
LSAgICAiWDExOyBVOyBMaW51eCBpNjg2OyIKLSNlbmRpZgotI2VuZGlmCi0gICAgIiBBcHBsZVdl
YktpdC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTkuMC4xMDU1LjEgU2FmYXJp
LzUzNC4zNCI7Ci0KLWNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCi17Ci0gICAg
aWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVz
ZXJBZ2VudCkpCi0gICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OwotICAgIGVsc2UgaWYg
KG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzQ2hyb21lVXNlckFn
ZW50KSkKLSAgICAgICAgcmV0dXJuIENocm9tZVVzZXJBZ2VudDsKLSAgICBpZiAobV91c2VyQWdl
bnQuaXNOdWxsKCkpCi0gICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVy
KCkudXNlckFnZW50KG1fdXJsKS51dGY4KCk7Ci0KLSAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0
YSgpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi1jb25zdCBjaGFyKiBQ
bHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKQotewotICAgIHJldHVybiBNb3ppbGxhVXNlckFn
ZW50OwotfQotI2VuZGlmCi0KLQotdm9pZCBQbHVnaW5WaWV3OjpsaWZlU3VwcG9ydFRpbWVyRmly
ZWQoKQotewotICAgIGRlcmVmKCk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKCkK
LXsKLSAgICBpZiAobV9saWZlU3VwcG9ydFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHJlZigpOwotICAgIG1fbGlmZVN1cHBvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXZvaWQgUGx1Z2luVmlldzo6
a2VlcEFsaXZlKE5QUCBpbnN0YW5jZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gaW5zdGFu
Y2VNYXAoKS5nZXQoaW5zdGFuY2UpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdmlldy0+a2VlcEFsaXZlKCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFs
dWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQotewotICAgIExPRyhQ
bHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoJXMpIiwgcHJldHR5TmFtZUZvck5Q
TlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotCi0gICAgTlBFcnJvciByZXN1bHQ7Ci0gICAg
aWYgKHBsYXRmb3JtR2V0VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
fQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkKiB2YWx1ZSkKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OmdldFZhbHVlKCVz
KSIsIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5Q
RXJyb3IgcmVzdWx0OwotICAgIGlmIChwbGF0Zm9ybUdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSwg
JnJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAocGxhdGZvcm1HZXRW
YWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUsICZyZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgIGNhc2UgTlBOVldpbmRvd05QT2Jq
ZWN0OiB7Ci0gICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKLSAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3Jp
cHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS53aW5kb3dTY3JpcHROUE9iamVjdCgp
OwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwg
YXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdp
bi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKLSAgICAg
ICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAg
dm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVj
dDsKLQotICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQotCi0gICAgY2FzZSBO
UE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7Ci0gICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBh
dXNlZCkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgICAg
IE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOwotCi0gICAgICAgIGlmIChtX2VsZW1l
bnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRU
YWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgcGx1
Z2luU2NyaXB0T2JqZWN0ID0gbV9lbGVtZW50LT5nZXROUE9iamVjdCgpOwotCi0gICAgICAgIC8v
IFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhl
cmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRt
bD4KLSAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0
YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgdm9pZCoqIHYgPSAodm9p
ZCoqKXZhbHVlOwotICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKLQotICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WcHJpdmF0ZU1vZGVC
b29sOiB7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCk7Ci0gICAg
ICAgIGlmICghcGFnZSkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwot
ICAgICAgICAqKChOUEJvb2wqKXZhbHVlKSA9IHBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCk7
Ci0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICB9Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBG
cmFtZSogZ2V0RnJhbWUoRnJhbWUqIHBhcmVudEZyYW1lLCBFbGVtZW50KiBlbGVtZW50KQotewot
ICAgIGlmIChwYXJlbnRGcmFtZSkKLSAgICAgICAgcmV0dXJuIHBhcmVudEZyYW1lOwotICAgIAot
ICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCk7Ci19Ci0KLU5QRXJyb3IgUGx1
Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNo
YXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKQotewotICAgIExPRyhQbHVnaW5z
LCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwoJXMpIiwgcHJldHR5TmFtZUZvck5QTlVSTFZh
cmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotCi0gICAgTlBFcnJvciByZXN1bHQgPSBOUEVSUl9O
T19FUlJPUjsKLQotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSAgICBjYXNlIE5QTlVSTFZDb29r
aWU6IHsKLSAgICAgICAgVVJMIHUobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgp
LCB1cmwpOwotICAgICAgICBpZiAodS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBm
cmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBp
ZiAoZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNv
b2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHUpLnV0ZjgoKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWNvb2tpZVN0ci5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6
ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCp2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCp2YWx1ZSwg
MCwgc2l6ZSsxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIGNvb2tp
ZVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpsZW4gPSBzaXplOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX09VVF9P
Rl9NRU1PUllfRVJST1I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBOUE5VUkxWUHJveHk6IHsKLSAgICAgICAgVVJMIHUo
bV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOwotICAgICAgICBpZiAo
dS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVu
dEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBjb25zdCBGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXIgPSBmcmFtZSA/ICZmcmFtZS0+bG9hZGVyKCkgOiAwOwotICAgICAgICAgICAgY29u
c3QgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBmcmFtZUxvYWRlciA/IGZyYW1lTG9hZGVy
LT5uZXR3b3JraW5nQ29udGV4dCgpIDogMDsKLSAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgcHJv
eHlTdHIgPSB0b1N0cmluZyhwcm94eVNlcnZlcnNGb3JVUkwodSwgY29udGV4dCkpLnV0ZjgoKTsK
LSAgICAgICAgICAgIGlmICghcHJveHlTdHIuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBpbnQgc2l6ZSA9IHByb3h5U3RyLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICp2YWx1
ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCp2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAw
LCBzaXplKzEpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKnZhbHVlLCBwcm94eVN0ci5k
YXRhKCksIHNpemUrMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZW4pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAqbGVuID0gc2l6ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZB
TElEX1VSTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
c3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6Z2V0VmFsdWVGb3JVUkw6ICVzIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZh
cmlhYmxlKS5kYXRhKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi0KLU5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFy
aWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQz
Ml90IGxlbikKLXsKLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJM
KCVzKSIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQot
ICAgIE5QRXJyb3IgcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0KLSAgICBzd2l0Y2ggKHZhcmlh
YmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxWQ29va2llOiB7Ci0gICAgICAgIFVSTCB1KG1fcGFyZW50
RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKTsKLSAgICAgICAgaWYgKHUuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSwgbGVuKTsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBh
cmVudEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tp
ZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1l
bnQoKSwgdSwgY29va2llU3RyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQg
PSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTlBO
VVJMVlByb3h5OgotICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9y
VVJMKCVzKTogUGx1Z2lucyBhcmUgTk9UIGFsbG93ZWQgdG8gc2V0IHByb3h5IGluZm9ybWF0aW9u
LiIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLSAgICAg
ICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTDog
JXMiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7Ci0gICAg
ICAgIHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0QXV0aGVu
dGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQz
Ml90IHBvcnQsIGNvbnN0IGNoYXIqIC8qIHNjaGVtZSAqLywgY29uc3QgY2hhciogLyogcmVhbG0g
Ki8sIGNoYXIqKiAgLyogdXNlcm5hbWUgKi8sIHVpbnQzMl90KiAvKiB1bGVuICovLCBjaGFyKiog
LyogcGFzc3dvcmQgKi8sIHVpbnQzMl90KiAvKiBwbGVuICovKQotewotI2lmIExPR19ESVNBQkxF
RAotICAgIFVOVVNFRF9QQVJBTShwcm90b2NvbCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhvc3QpOwot
ICAgIFVOVVNFRF9QQVJBTShwb3J0KTsKLSNlbmRpZgotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2lu
Vmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvOiBwcm90b2NvbD0lcywgaG9zdD0lcywgcG9ydD0l
ZCIsIHByb3RvY29sLCBob3N0LCBwb3J0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotI2VuZGlmCi0KLXZvaWQgUGx1Z2luVmlldzo6
cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkK
LXsKLSAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNldFZhbHVlID0gbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPnNldHZhbHVlOwotICAgIGlmICghc2V0VmFsdWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0o
KSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICBOUEJvb2wgdmFsdWUgPSBwcml2
YXRlQnJvd3NpbmdFbmFibGVkOwotICAgIHNldFZhbHVlKG1faW5zdGFuY2UsIE5QTlZwcml2YXRl
TW9kZUJvb2wsICZ2YWx1ZSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1
Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg2YmI5
ZDI4MTE0YWRkODY5NGQ1Y2QxMTdhMDNkNjYwZGRmYzAzNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlz
aEBmb3J3YXJkYmlhcy5pbj4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgUGx1Z2luVmlld19oCi0jZGVmaW5lIFBsdWdpblZpZXdfaAotCi0jaW5j
bHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgot
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1
Z2luU3RyZWFtLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0jZW5kaWYKLQot
I2lmIE9TKFdJTkRPV1MpICYmIFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgc3RydWN0IEhXTkRfXyog
SFdORDsKLXR5cGVkZWYgSFdORCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKLSNlbHNlCi10eXBlZGVm
IFBsYXRmb3JtV2lkZ2V0IFBsYXRmb3JtUGx1Z2luV2lkZ2V0OwotI2VuZGlmCi0jaWYgUExBVEZP
Uk0oR1RLKQotdHlwZWRlZiBzdHJ1Y3QgX0d0a1NvY2tldCBHdGtTb2NrZXQ7Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKFgxMSkKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBXaW5kb3c7Ci10eXBlZGVm
IHN0cnVjdCBfWERpc3BsYXkgRGlzcGxheTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLSAg
ICBuYW1lc3BhY2UgQmluZGluZ3MgewotICAgICAgICBjbGFzcyBJbnN0YW5jZTsKLSAgICB9Ci19
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBGcmFt
ZVZpZXc7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAgY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7Ci0g
ICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKLSAgICBjbGFzcyBNb3VzZUV2ZW50OwotICAgIGNsYXNz
IFVSTDsKLSNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOwotI2VuZGlmCi0gICAgY2xhc3MgUGx1
Z2luUGFja2FnZTsKLSAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0OwotICAgIGNsYXNzIFBsdWdpblN0
cmVhbTsKLSAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwotICAgIGNsYXNzIFJlc291cmNlUmVzcG9u
c2U7Ci0gICAgY2xhc3MgV2hlZWxFdmVudDsKLQotICAgIGVudW0gUGx1Z2luU3RhdHVzIHsKLSAg
ICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbiwKLSAgICAgICAgUGx1Z2luU3RhdHVz
Q2FuTm90TG9hZFBsdWdpbiwKLSAgICAgICAgUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5
Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblJlcXVlc3QgewotICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQbHVnaW5SZXF1ZXN0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
cHVibGljOgotICAgICAgICBQbHVnaW5SZXF1ZXN0KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZy
YW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSwg
Ym9vbCBzaG91bGRBbGxvd1BvcHVwcykKLSAgICAgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0
KGZyYW1lTG9hZFJlcXVlc3QpCi0gICAgICAgICAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRh
KQotICAgICAgICAgICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKLSAg
ICAgICAgICAgICwgbV9zaG91bGRBbGxvd1BvcHVwcyhzaG91bGRBbGxvd1BvcHVwcykgeyB9Ci0g
ICAgcHVibGljOgotICAgICAgICBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1
ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUxvYWRSZXF1ZXN0OyB9Ci0gICAgICAgIHZvaWQq
IG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBtX25vdGlmeURhdGE7IH0KLSAgICAgICAgYm9v
bCBzZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9
Ci0gICAgICAgIGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZEFsbG93UG9wdXBzOyB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBt
X2ZyYW1lTG9hZFJlcXVlc3Q7Ci0gICAgICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsKLSAgICAgICAg
Ym9vbCBtX3NlbmROb3RpZmljYXRpb247Ci0gICAgICAgIGJvb2wgbV9zaG91bGRBbGxvd1BvcHVw
czsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2luTWFudWFsTG9hZGVyIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpbk1hbnVhbExvYWRlcigpIHt9Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpID0gMDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKSA9IDA7Ci0gICAgfTsK
LQotICAgIGNsYXNzIFBsdWdpblZpZXcgOiBwdWJsaWMgUGx1Z2luVmlld0Jhc2UKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgICAgICAgICAgICAgICwgcHJpdmF0ZSBQ
bHVnaW5TdHJlYW1DbGllbnQKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMg
UGx1Z2luTWFudWFsTG9hZGVyCi0gICAgICAgICAgICAgICAgICAgICAsIHByaXZhdGUgTWVkaWFD
YW5TdGFydExpc3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBsdWdpblZpZXc+IGNyZWF0ZShGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBI
VE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKLSAgICAgICAgdmlydHVhbCB+UGx1Z2luVmll
dygpOwotCi0gICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
cGx1Z2luLmdldCgpOyB9Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAg
IE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KLSNlbmRpZgotCi0g
ICAgICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3Rh
dGljIFBsdWdpblZpZXcqIGN1cnJlbnRQbHVnaW5WaWV3KCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBPYmplY3QqIG5wT2JqZWN0KCk7Ci0jZW5kaWYKLSAg
ICAgICAgUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5jZT4gYmluZGluZ0luc3RhbmNl
KCk7Ci0KLSAgICAgICAgUGx1Z2luU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dHVzOyB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgLy8gTlBO
IGZ1bmN0aW9ucwotICAgICAgICBOUEVycm9yIGdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3Ig
Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KTsKLSAgICAgICAgTlBF
cnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1
aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEpOwotICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSk7Ci0g
ICAgICAgIE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFy
Z2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7Ci0gICAgICAgIGludDMyX3Qgd3JpdGUoTlBTdHJlYW0q
IHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7Ci0gICAgICAgIE5QRXJyb3IgZGVz
dHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwotI2VuZGlmCi0g
ICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCgpOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogdXNlckFnZW50U3RhdGljKCk7Ci0j
ZW5kaWYKLSAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7Ci0gICAgICAg
IAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUEVycm9yIGdldFZh
bHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7Ci0gICAgICAgIHN0YXRpYyBO
UEVycm9yIGdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7
Ci0gICAgICAgIE5QRXJyb3Igc2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlKTsKLSAgICAgICAgTlBFcnJvciBnZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJp
YWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pOwotICAg
ICAgICBOUEVycm9yIHNldFZhbHVlRm9yVVJMKE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50MzJfdCBsZW4pOwotICAgICAgICBO
UEVycm9yIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3Qg
Y2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIq
IHJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQzMl90KiB1bGVuLCBjaGFyKiogcGFzc3dvcmQs
IHVpbnQzMl90KiBwbGVuKTsKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChOUFJlY3QqKTsK
LSAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKTsKLSNlbmRpZgotICAgICAg
ICB2b2lkIGZvcmNlUmVkcmF3KCk7Ci0gICAgICAgIHZvaWQgcHVzaFBvcHVwc0VuYWJsZWRTdGF0
ZShib29sIHN0YXRlKTsKLSAgICAgICAgdm9pZCBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0g
ICAgICAgIGJvb2wgYXJlUG9wdXBzQWxsb3dlZCgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0
SmF2YVNjcmlwdFBhdXNlZChib29sKTsKLQotICAgICAgICB2b2lkIHByaXZhdGVCcm93c2luZ1N0
YXRlQ2hhbmdlZChib29sKTsKLQotICAgICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2lu
U3RyZWFtKik7Ci0gICAgICAgIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyhQbHVnaW5TdHJl
YW0qIHN0cmVhbSkgeyBkaXNjb25uZWN0U3RyZWFtKHN0cmVhbSk7IH0KLQotICAgICAgICAvLyBX
aWRnZXQgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3Qg
SW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVSZWN0c0NoYW5nZWQoKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
c2hvdygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgY2xpcFJlY3RDaGFuZ2VkKCkgb3ZlcnJpZGU7Ci0KLSAgICAgICAgLy8gVGhpcyBt
ZXRob2QgaXMgdXNlZCBieSBwbHVnaW5zIG9uIGFsbCBwbGF0Zm9ybXMgdG8gb2J0YWluIGEgY2xp
cCByZWN0IHRoYXQgaW5jbHVkZXMgY2xpcHMgc2V0IGJ5IFdlYkNvcmUsCi0gICAgICAgIC8vIGUu
Zy4sIGluIG92ZXJmbG93OmF1dG8gc2VjdGlvbnMuICBUaGUgY2xpcCByZWN0cyBjb29yZGluYXRl
cyBhcmUgaW4gdGhlIGNvbnRhaW5pbmcgd2luZG93J3MgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAg
ICAgLy8gVGhpcyBjbGlwIGluY2x1ZGVzIGFueSBjbGlwcyB0aGF0IHRoZSB3aWRnZXQgaXRzZWxm
IHNldHMgdXAgZm9yIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgSW50UmVjdCB3aW5kb3dDbGlwUmVj
dCgpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCopOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudFZpc2libGUoYm9vbCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29s
IGlzUGx1Z2luVmlldygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAg
ICBGcmFtZSogcGFyZW50RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudEZyYW1lLmdldCgp
OyB9Ci0KLSAgICAgICAgdm9pZCBmb2N1c1BsdWdpbkVsZW1lbnQoKTsKLQotICAgICAgICBjb25z
dCBTdHJpbmcmIHBsdWdpbnNQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5zUGFnZTsgfQot
ICAgICAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlw
ZTsgfQotICAgICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0K
LSNpZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgICAgIGJvb2wgcG9wVXBDb250ZXh0TWVudShOUE1lbnUqKTsKLSNlbmRpZgotCi0jaWYgT1Mo
V0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIHN0YXRpYyBM
UkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXdXbmRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBB
UkFNKTsKLSAgICAgICAgTFJFU1VMVCB3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBX
UEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsKLSAgICAgICAgV05EUFJPQyBwbHVnaW5XbmRQ
cm9jKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5XbmRQcm9jOyB9Ci0jZW5kaWYKLQotICAgICAg
ICAvLyBVc2VkIGZvciBtYW51YWwgbG9hZGluZwotICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZURh
dGEoY29uc3QgY2hhciosIGludCk7Ci0gICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOwot
ICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwotCi0gICAgICAgIHN0
YXRpYyBib29sIGlzQ2FsbGluZ1BsdWdpbigpOwotCi0gICAgICAgIGJvb2wgc3RhcnQoKTsKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0aWMgdm9pZCBrZWVw
QWxpdmUoTlBQKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGtlZXBBbGl2ZSgpOwotCi0jaWYgUExB
VEZPUk0oWDExKQotICAgICAgICBzdGF0aWMgRGlzcGxheSogZ2V0UGx1Z2luRGlzcGxheShGcmFt
ZSopOwotICAgICAgICBzdGF0aWMgV2luZG93IGdldFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZy
YW1lKTsKLSNlbmRpZgotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luVmlldyhGcmFtZSog
cGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBQbHVnaW5QYWNrYWdlKiwgSFRNTFBsdWdJbkVs
ZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIGxvYWRNYW51YWxseSk7Ci0KLSAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMpOwotICAgICAgICBib29sIHN0YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKTsKLSAgICAgICAg
dm9pZCBpbml0KCk7Ci0gICAgICAgIGJvb2wgcGxhdGZvcm1TdGFydCgpOwotICAgICAgICB2b2lk
IHN0b3AoKTsKLSAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlldyopOwotI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVx
dWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAg
IE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0
YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7Ci0gICAgICAgIE5Q
RXJyb3IgaGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBs
ZW4sIGNvbnN0IGNoYXIqIGJ1Zik7Ci0jZW5kaWYKLSAgICAgICAgc3RhdGljIHZvaWQgZnJlZVN0
cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCk7Ci0gICAgICAgIHZvaWQg
c2V0Q2FsbGluZ1BsdWdpbihib29sKSBjb25zdDsKLQotICAgICAgICB2b2lkIGludmFsaWRhdGVX
aW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIG1lZGlhQ2FuU3RhcnQoKTsKLQotI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotICAgICAgICB2b2lkIHBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyBIREMg
V0lOQVBJIGhvb2tlZEJlZ2luUGFpbnQoSFdORCwgUEFJTlRTVFJVQ1QqKTsKLSAgICAgICAgc3Rh
dGljIEJPT0wgV0lOQVBJIGhvb2tlZEVuZFBhaW50KEhXTkQsIGNvbnN0IFBBSU5UU1RSVUNUKik7
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0
aWMgYm9vbCBwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSAgICAgICAgYm9vbCBwbGF0Zm9ybUdldFZhbHVl
KE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSNl
bmRpZgotCi0gICAgICAgIFJlZlB0cjxGcmFtZT4gbV9wYXJlbnRGcmFtZTsKLSAgICAgICAgUmVm
UHRyPFBsdWdpblBhY2thZ2U+IG1fcGx1Z2luOwotICAgICAgICBIVE1MUGx1Z0luRWxlbWVudCog
bV9lbGVtZW50OwotICAgICAgICBib29sIG1faXNTdGFydGVkOwotICAgICAgICBVUkwgbV91cmw7
Ci0gICAgICAgIFBsdWdpblN0YXR1cyBtX3N0YXR1czsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+
IG1faW52YWxpZFJlY3RzOwotCi0gICAgICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVx
dWVzdCopOwotICAgICAgICB2b2lkIHNjaGVkdWxlUmVxdWVzdChzdGQ6OnVuaXF1ZV9wdHI8UGx1
Z2luUmVxdWVzdD4pOwotICAgICAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKCk7Ci0gICAgICAg
IHZvaWQgaW52YWxpZGF0ZVRpbWVyRmlyZWQoKTsKLSAgICAgICAgVGltZXIgbV9yZXF1ZXN0VGlt
ZXI7Ci0gICAgICAgIFRpbWVyIG1faW52YWxpZGF0ZVRpbWVyOwotCi0gICAgICAgIHZvaWQgcG9w
UG9wdXBzU3RhdGVUaW1lckZpcmVkKCk7Ci0gICAgICAgIFRpbWVyIG1fcG9wUG9wdXBzU3RhdGVU
aW1lcjsKLQotICAgICAgICB2b2lkIGxpZmVTdXBwb3J0VGltZXJGaXJlZCgpOwotICAgICAgICBU
aW1lciBtX2xpZmVTdXBwb3J0VGltZXI7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICAgICAgYm9vbCBkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYpOwotI2VuZGlmCi0jaWYg
ZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAg
ICBpbnQxNl90IGRpc3BhdGNoTlBDb2NvYUV2ZW50KE5QQ29jb2FFdmVudCYpOwotICAgICAgICBi
b29sIG1fdXBkYXRlZENvY29hVGV4dElucHV0UmVxdWVzdGVkOwotICAgICAgICBib29sIG1fa2V5
RG93blNlbnQ7Ci0gICAgICAgIHVpbnQxNl90IG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyOwotI2Vu
ZGlmCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICAgICAgdm9pZCBoYW5kbGVXaGVlbEV2
ZW50KFdoZWVsRXZlbnQqKTsKLSNlbmRpZgotICAgICAgICB2b2lkIHVwZGF0ZVBsdWdpbldpZGdl
dCgpOwotICAgICAgICB2b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50Kik7Ci0gICAgICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50
Kik7Ci0jaWYgZGVmaW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICAgICAgdm9pZCBoYW5kbGVGb2N1c0luRXZlbnQoKTsKLSAgICAgICAgdm9pZCBoYW5kbGVG
b2N1c091dEV2ZW50KCk7Ci0jZW5kaWYKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIHZvaWQg
cGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KEhEQyk7Ci0gICAgICAgIFBhc3NSZWZQdHI8SW1h
Z2U+IHNuYXBzaG90KCk7Ci0jZW5kaWYKLQotICAgICAgICBpbnQgbV9tb2RlOwotICAgICAgICBp
bnQgbV9wYXJhbUNvdW50OwotICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOwotICAgICAgICBj
aGFyKiogbV9wYXJhbVZhbHVlczsKLSAgICAgICAgU3RyaW5nIG1fcGx1Z2luc1BhZ2U7Ci0KLSAg
ICAgICAgU3RyaW5nIG1fbWltZVR5cGU7Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX3VzZXJBZ2Vu
dDsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUFAgbV9pbnN0
YW5jZTsKLSAgICAgICAgTlBQX3QgbV9pbnN0YW5jZVN0cnVjdDsKLSAgICAgICAgTlBXaW5kb3cg
bV9ucFdpbmRvdzsKLSNlbmRpZgotCi0gICAgICAgIFZlY3Rvcjxib29sLCA0PiBtX3BvcHVwU3Rh
dGVTdGFjazsKLQotICAgICAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gbV9zdHJl
YW1zOwotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+PiBtX3Jl
cXVlc3RzOwotCi0gICAgICAgIGJvb2wgbV9pc1dpbmRvd2VkOwotICAgICAgICBib29sIG1faXNU
cmFuc3BhcmVudDsKLSAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsKLSAgICAgICAgYm9v
bCBtX2lzV2FpdGluZ1RvU3RhcnQ7Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIGJv
b2wgbV9uZWVkc1hFbWJlZDsKLSNlbmRpZgotCi0jaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7Ci0gICAgICAgIFdORFBST0MgbV9wbHVnaW5XbmRQcm9j
OwotICAgICAgICB1bnNpZ25lZCBtX2xhc3RNZXNzYWdlOwotICAgICAgICBib29sIG1faXNDYWxs
aW5nUGx1Z2luV25kUHJvYzsKLSAgICAgICAgSERDIG1fd21QcmludEhEQzsKLSAgICAgICAgYm9v
bCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0OwotI2VuZGlmCi0KLSNpZiAoUExBVEZPUk0oR1RL
KSAmJiBPUyhXSU5ET1dTKSkgfHwgUExBVEZPUk0oRUZMKQotICAgICAgICAvLyBPbiBNYWMgT1NY
IGFuZCBRdC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3
aWRnZXQsCi0gICAgICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMg
aXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcuCi0gICAgICAgIFBsYXRmb3Jt
UGx1Z2luV2lkZ2V0IG1fd2luZG93OwotcHVibGljOgotICAgICAgICBQbGF0Zm9ybVBsdWdpbldp
ZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93OyB9Ci0g
ICAgICAgIHZvaWQgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQoUGxhdGZvcm1QbHVnaW5XaWRnZXQg
d2lkZ2V0KSB7IG1fd2luZG93ID0gd2lkZ2V0OyB9Ci0jZWxzZQotcHVibGljOgotICAgICAgICB2
b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHdpZGdldCkg
eyBzZXRQbGF0Zm9ybVdpZGdldCh3aWRnZXQpOyB9Ci0gICAgICAgIFBsYXRmb3JtUGx1Z2luV2lk
Z2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gcGxhdGZvcm1XaWRnZXQo
KTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0KLSNpZiBkZWZpbmVkKFhQX1VOSVgpIHx8IFBMQVRG
T1JNKEdUSykKLSAgICAgICAgdm9pZCBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci0jZWxpZiBkZWZp
bmVkKFhQX01BQ09TWCkKLSAgICAgICAgTlBfQ0dDb250ZXh0IG1fbnBDZ0NvbnRleHQ7Ci0gICAg
ICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHRSZWY7Ci0KLSAgICAgICAgdm9pZCBzZXROUFdpbmRv
d0lmTmVlZGVkKCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGJvb2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFu
Z2U7Ci0gICAgICAgIFBpeG1hcCBtX2RyYXdhYmxlOwotICAgICAgICBWaXN1YWwqIG1fdmlzdWFs
OwotICAgICAgICBDb2xvcm1hcCBtX2NvbG9ybWFwOwotICAgICAgICBEaXNwbGF5KiBtX3BsdWdp
bkRpc3BsYXk7Ci0KLSAgICAgICAgdm9pZCBpbml0WEV2ZW50KFhFdmVudCogZXZlbnQpOwotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgIHN0YXRpYyBnYm9vbGVhbiBwbHVnUmVt
b3ZlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdpblZpZXcqKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgcGx1Z0FkZGVkQ2FsbGJhY2soR3RrU29ja2V0KiwgUGx1Z2luVmlldyopOwotICAgICAgICB2
b2lkIHVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRDbGlwKCk7Ci0gICAgICAgIGJvb2wgbV9wbHVn
QWRkZWQ7Ci0gICAgICAgIEludFJlY3QgbV9kZWxheWVkQWxsb2NhdGlvbjsKLSNlbmRpZgotCi0g
ICAgICAgIEludFJlY3QgbV9jbGlwUmVjdDsgLy8gVGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBh
IHdpbmRvd2VkIHBsdWctaW4KLSAgICAgICAgSW50UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3
aW5kb3cgcmVjdC4KLQotICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5OwotICAgICAgICBSZWZQ
dHI8UGx1Z2luU3RyZWFtPiBtX21hbnVhbFN0cmVhbTsKLQotICAgICAgICBib29sIG1faXNKYXZh
U2NyaXB0UGF1c2VkOwotCi0gICAgICAgIGJvb2wgbV9oYXZlQ2FsbGVkU2V0V2luZG93OwotCi0g
ICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBzX2N1cnJlbnRQbHVnaW5WaWV3OwotICAgIH07Ci0K
LWlubGluZSBQbHVnaW5WaWV3KiB0b1BsdWdpblZpZXcoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAg
QVNTRVJUKCF3aWRnZXQgfHwgd2lkZ2V0LT5pc1BsdWdpblZpZXcoKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQpOwotfQotCi1pbmxpbmUgY29uc3QgUGx1Z2lu
VmlldyogdG9QbHVnaW5WaWV3KGNvbnN0IFdpZGdldCogd2lkZ2V0KQotewotICAgIEFTU0VSVCgh
d2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBQbHVnaW5WaWV3Kj4od2lkZ2V0KTsKLX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFu
eW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1BsdWdpblZpZXcoY29uc3Qg
UGx1Z2luVmlldyopOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL25wYXBpLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRkOTBhNTJi
N2ExZTdjOTZlOGRmNGQ4OTliY2Y4MDE5NDhlZmZkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgotI2lu
Y2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMg
dGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxs
IGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCi0vLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4g
VG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUg
YSBjYWxsIHRvIGEgcGx1Zy1pbi4KLS8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2
aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXc6OnN0YXJ0LgotLy8g
VGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4g
d2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0
YW5jZS4KLXN0YXRpYyBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3Rh
bmNlKQotewotICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oaW5zdGFuY2UtPm5kYXRhKTsKLSAgICByZXR1
cm4gUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZpZXcoKTsKLX0KLQotdm9pZCogTlBOX01lbUFs
bG9jKHVpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9p
ZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi11aW50MzJf
dCBOUE5fTWVtRmx1c2godWludDMyX3QpCi17Ci0gICAgLy8gRG8gbm90aGluZwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxvYWRQYWdlcykKLXsK
LSAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7Ci19Ci0KLU5QRXJyb3IgTlBO
X1JlcXVlc3RSZWFkKE5QU3RyZWFtKiwgTlBCeXRlUmFuZ2UqKQotewotICAgIHJldHVybiBOUEVS
Ul9TVFJFQU1fTk9UX1NFRUtBQkxFOwotfQotCi1OUEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQ
IGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90
aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3RpZnlEYXRhKTsKLX0KLQotTlBFcnJvciBOUE5f
R2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQp
Ci17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1
cmwsIHRhcmdldCk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNl
LCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25z
dCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFy
Z2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RV
UkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWlu
dDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQotewotICAgIHJldHVybiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwgdGFyZ2V0LCBsZW4s
IGJ1ZiwgZmlsZSk7Ci19Ci0KLU5QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5Q
TUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKLXsK
LSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+bmV3U3RyZWFtKHR5
cGUsIHRhcmdldCwgc3RyZWFtKTsKLX0KLQotaW50MzJfdCBOUE5fV3JpdGUoTlBQIGluc3RhbmNl
LCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKQotewotICAgIHJl
dHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53cml0ZShzdHJlYW0sIGxlbiwg
YnVmZmVyKTsKLX0KLQotTlBFcnJvciBOUE5fRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5Q
U3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7Ci19
Ci0KLWNvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKQotewotICAgIFBsdWdp
blZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOwotCi0gICAgIGlm
ICghdmlldykKLSAgICAgICAgIHJldHVybiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKTsK
LSAKLSAgICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Ci19Ci0KLXZvaWQgTlBOX1N0YXR1cyhO
UFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOwotfQotCi12b2lkIE5QTl9JbnZhbGlk
YXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCi17Ci0gICAgUGx1Z2lu
VmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7Ci0jaWYgZGVmaW5l
ZChYUF9VTklYKQotICAgIC8vIE5TUGx1Z2luV3JhcHBlciwgYSBwbHVnaW4gd3JhcHBlciBiaW5h
cnkgdGhhdCBhbGxvd3MgcnVubmluZyAzMi1iaXQgcGx1Z2lucwotICAgIC8vIG9uIDY0LWJpdCBh
cmNoaXRlY3R1cmVzIHR5cGljYWxseSB1c2VkIGluIFgxMSwgd2lsbCBzb21ldGltZXMgZ2l2ZSB1
cyBhIG51bGwgTlBQIGhlcmUuCi0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0jZW5k
aWYKLSAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVjdCk7Ci19Ci0KLXZvaWQgTlBO
X0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQot
ewotICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWdpb24o
aW52YWxpZFJlZ2lvbik7Ci19Ci0KLXZvaWQgTlBOX0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkK
LXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5mb3JjZVJlZHJhdygpOwot
fQotCi1OUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBQbHVnaW5WaWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKTsKLQotICAgICBpZiAoIXZpZXcpCi0gICAgICAgICByZXR1cm4g
UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlKTsKLQotICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFs
dWUpOwotfQotCi1OUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOwotfQotCi12b2lkKiBOUE5f
R2V0SmF2YUVudigpCi17Ci0gICAgLy8gVW5zdXBwb3J0ZWQKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCogTlBOX0dldEphdmFQZWVyKE5QUCkKLXsKLSAgICAvLyBVbnN1cHBvcnRlZAotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5j
ZSwgTlBCb29sIGVuYWJsZWQpCi17Ci0gICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+cHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShlbmFibGVkKTsKLX0KLQotdm9pZCBOUE5fUG9wUG9w
dXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkKLXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5wb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLX0KLQotZXh0ZXJuICJDIiB0
eXBlZGVmIHZvaWQgUGx1Z2luVGhyZWFkQXN5bmNDYWxsRnVuY3Rpb24odm9pZCopOwotdm9pZCBO
UE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsKE5QUCBpbnN0YW5jZSwgUGx1Z2luVGhyZWFkQXN5bmND
YWxsRnVuY3Rpb24gZnVuYywgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgLy8gQ2FsbGJhY2sgZnVu
Y3Rpb24gdHlwZSBvbmx5IGRpZmZlcnMgZnJvbSBNYWluVGhyZWFkRnVuY3Rpb24gYnkgYmVpbmcg
ZXh0ZXJuICJDIiwgd2hpY2ggZG9lc24ndCBhZmZlY3QgY2FsbGluZyBjb252ZW50aW9uIG9uIGFu
eSBjb21waWxlcnMgd2UgdXNlLgotICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVk
dWxlcigpLnNjaGVkdWxlQ2FsbChpbnN0YW5jZSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyOjpNYWluVGhyZWFkRnVuY3Rpb24qPihmdW5jKSwgdXNlckRhdGEpOwot
fQotCi1OUEVycm9yIE5QTl9HZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlh
YmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxl
bikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFs
dWVGb3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUsIGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX1Nl
dFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikKLXsKLSAgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c2V0VmFsdWVGb3JVUkwodmFyaWFi
bGUsIHVybCwgdmFsdWUsIGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX0dldEF1dGhlbnRpY2F0aW9u
SW5mbyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0
LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNjaGVtZSwgY29uc3QgY2hhciogcmVhbG0sIGNo
YXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4sIGNoYXIqKiBwYXNzd29yZCwgdWludDMyX3Qq
IHBsZW4pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdl
dEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90b2NvbCwgaG9zdCwgcG9ydCwgc2NoZW1lLCByZWFsbSwg
dXNlcm5hbWUsIHVsZW4sIHBhc3N3b3JkLCBwbGVuKTsKLX0KLQotTlBFcnJvciBOUE5fUG9wVXBD
b250ZXh0TWVudShOUFAgaW5zdGFuY2UsIE5QTWVudSogbWVudSkKLXsKLSAgICBVTlVTRURfUEFS
QU0oaW5zdGFuY2UpOwotICAgIFVOVVNFRF9QQVJBTShtZW51KTsKLSAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QYWlu
dEhvb2tzLmFzbSBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BhaW50SG9va3MuYXNtCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTA4ODEzNTZhMGRkY2Q3ODMwNzI4MTFlOWYx
NWExMTU5NGIxODVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BhaW50SG9va3MuYXNtCisrKyAvZGV2L251
bGwKQEAgLTEsNTAgKzAsMCBAQAotOy8qCi07ICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLTsKLTsgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotOyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotOyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLTsgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotOwotOyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLTsgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LTsgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLTsgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi07Ci07ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLTsgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LTsgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLTsgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi07Ki8K
LQotO0hEQyBfX3N0ZGNhbGwgX0hCZWdpblBhaW50KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVDVCBs
cFBhaW50KTsKLQotUFVCTElDICBfSEJlZ2luUGFpbnQKLQotX1RFWFQgICBTRUdNRU5UCi0KLV9I
QmVnaW5QYWludCBQUk9DCi0gICAgIG1vdiAgcjEwLHJjeAotICAgICBtb3YgIGVheCwxMDE3aAot
ICAgICBzeXNjYWxsCi0gICAgIHJldAotX0hCZWdpblBhaW50IEVORFAKLQotX1RFWFQgICBFTkRT
Ci0KLTtCT09MIF9fc3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJV
Q1QqIGxwUGFpbnQpOwotCi1QVUJMSUMgIF9IRW5kUGFpbnQKLQotX1RFWFQgICBTRUdNRU5UCi0K
LV9IRW5kUGFpbnQgUFJPQwotICAgIG1vdiAgcjEwLHJjeAotICAgIG1vdiAgZWF4LDEwMTloCi0g
ICAgc3lzY2FsbAotICAgIHJldAotX0hFbmRQYWludCBFTkRQCi0KLV9URVhUICAgRU5EUwotCi1F
TkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNl
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RjNmNmMzQ5OWZjMjlkZTZhYzVhZWFk
YjM5MjQwNDI3MWFhMGUxOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgotCi0jaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVk
ZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMg
aW5saW5lIHZvaWQgYWRkUGx1Z2luUGF0aHNGcm9tUmVnaXN0cnkoSEtFWSByb290S2V5LCBIYXNo
U2V0PFN0cmluZz4mIHBhdGhzKQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0
ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNvZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAs
IEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBFUlJP
Ul9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3Y2hhcl90IG5hbWVbMTI4XTsKLSAg
ICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAg
IGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgIERXT1JEIG5hbWVMZW4gPSBXVEZfQVJS
QVlfTEVOR1RIKG5hbWUpOwotICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwg
bmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChy
ZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFdD
SEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXpl
b2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5cGU7Ci0KLSAgICAgICAgcmVzdWx0ID0gZ2V0
UmVnaXN0cnlWYWx1ZShrZXksIG5hbWUsIEwiUGF0aCIsICZ0eXBlLCBwYXRoU3RyLCAmcGF0aFN0
clNpemUpOwotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAhPSBS
RUdfU1opCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBwYXRocy5hZGQoU3RyaW5n
KHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLSAgICB9Ci0KLSAg
ICBSZWdDbG9zZUtleShrZXkpOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5Q
YXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KLSAgICBIYXNo
U2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwotCi0gICAgSEFORExFIGhGaW5kID0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUU7Ci0gICAgV0lOMzJfRklORF9EQVRBVyBmaW5kRmlsZURhdGE7Ci0KLSAg
ICBTdHJpbmcgb2xkV01QUGx1Z2luUGF0aDsKLSAgICBTdHJpbmcgbmV3V01QUGx1Z2luUGF0aDsK
LQotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbkRpcmVj
dG9yaWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwqIjsKLQotICAgICAgICBoRmluZCA9IEZpbmRG
aXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCks
ICZmaW5kRmlsZURhdGEpOwotCi0gICAgICAgIGlmIChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9W
QUxVRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAg
IGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVD
VE9SWSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZp
bGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURh
dGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICBpZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJu
cCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoImRsbCIsIGZhbHNlKSkgJiYKLSAgICAg
ICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8
ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIsIGZhbHNlKSkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBm
aWxlbmFtZTsKLSAgICAgICAgICAgIGlmICghdW5pcXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCku
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgcGF0
aHMuYWRkKGZ1bGxQYXRoKTsKLQotICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZp
bGVuYW1lLCAibnBkc3BsYXkuZGxsIikpCi0gICAgICAgICAgICAgICAgb2xkV01QUGx1Z2luUGF0
aCA9IGZ1bGxQYXRoOwotICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmls
ZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKLSAgICAgICAgICAgICAgICBuZXdXTVBQbHVnaW5QYXRo
ID0gZnVsbFBhdGg7Ci0KLSAgICAgICAgfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZp
bmRGaWxlRGF0YSkgIT0gMCk7Ci0KLSAgICAgICAgRmluZENsb3NlKGhGaW5kKTsKLSAgICB9Ci0K
LSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBhdGhz
KTsKLSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGF0
aHMpOwotCi0gICAgLy8gSWYgYm90aCB0aGUgb2xkIGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJl
c2VudCBpbiB0aGUgcGx1Z2lucyBzZXQsIAotICAgIC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBz
byB3ZSBkb24ndCBlbmQgdXAgY2hvb3NpbmcgdGhlIG9sZCBvbmUuCi0gICAgaWYgKCFvbGRXTVBQ
bHVnaW5QYXRoLmlzRW1wdHkoKSAmJiAhbmV3V01QUGx1Z2luUGF0aC5pc0VtcHR5KCkpCi0gICAg
ICAgIHBhdGhzLnJlbW92ZShvbGRXTVBQbHVnaW5QYXRoKTsKLX0KLQotc3RhdGljIGlubGluZSBW
ZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5n
KQotewotICAgIFZlY3RvcjxpbnQ+IHZlcnNpb247Ci0KLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9
IDA7Ci0gICAgdW5zaWduZWQgZW5kUG9zOwotICAgIAotICAgIHdoaWxlIChzdGFydFBvcyA8IHZl
cnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKLSAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsg
ZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKTsgKytlbmRQb3MpCi0gICAgICAgICAgICBp
ZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10g
PT0gJ18nKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGludCB2ZXJzaW9uQ29t
cG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0
UG9zKS50b0ludCgpOwotICAgICAgICB2ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsK
LQotICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyArIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZl
cnNpb247Ci19Ci0KLS8vIFRoaXMgcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0
aGFuIHZlcnNpb25CCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZl
Y3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQotewotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgewotICAgICAg
ICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltpXSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBlbHNlIGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwg
dGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJh
IGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmlu
Zz4mIGRpcmVjdG9yaWVzKQotewotICAgIC8vIEVudW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4g
ZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lzdHJ5Ci0gICAgSEtFWSBrZXk7Ci0gICAgTE9ORyByZXN1
bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwg
VEVYVCgiU29mdHdhcmVcXE1vemlsbGEiKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChy
ZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAg
ICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5
cwotICAgICAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAgICAgICAgRFdPUkQgbmFt
ZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7Ci0gICAgICAgICAgICByZXN1bHQg
PSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9k
aWZpZWQpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9
IFN0cmluZyhuYW1lLCBuYW1lTGVuKSArICJcXEV4dGVuc2lvbnMiOwotICAgICAgICAgICAgSEtF
WSBleHRlbnNpb25zS2V5OwotCi0gICAgICAgICAgICAvLyBUcnkgb3BlbmluZyB0aGUga2V5Ci0g
ICAgICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoa2V5LCBleHRlbnNpb25zUGF0aC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgS0VZX1JFQUQsICZleHRlbnNp
b25zS2V5KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gTm93IGdldCB0aGUgcGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAg
ICAgICAgICBXQ0hBUiBwbHVnaW5zRGlyZWN0b3J5U3RyW19NQVhfUEFUSF07Ci0gICAgICAgICAg
ICAgICAgRFdPUkQgcGx1Z2luc0RpcmVjdG9yeVNpemUgPSBzaXplb2YocGx1Z2luc0RpcmVjdG9y
eVN0cik7Ci0gICAgICAgICAgICAgICAgRFdPUkQgdHlwZTsKLQotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChleHRlbnNpb25zS2V5LCBURVhUKCJQbHVnaW5zIiksIDAs
ICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5zRGlyZWN0b3J5U3RyLCAmcGx1Z2luc0RpcmVjdG9yeVNp
emUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5
cGUgPT0gUkVHX1NaKQotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3Ry
aW5nKHBsdWdpbnNEaXJlY3RvcnlTdHIsIHBsdWdpbnNEaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdD
SEFSKSAtIDEpKTsKLQotICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZWdDbG9zZUtl
eShrZXkpOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBs
YXllclBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAg
Ly8gVGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4gaXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1
Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJlZm94IGluc3RhbGxzCi0gICAgV0NIQVIgcGx1
Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFdOwotICAgIERXT1JEIHBsdWdpbkRpcmVjdG9y
eVNpemUgPSA6OkV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxc
UEZpbGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChw
bHVnaW5EaXJlY3RvcnlTdHIpKTsKLQotICAgIGlmIChwbHVnaW5EaXJlY3RvcnlTaXplID4gMCAm
JiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IFdURl9BUlJBWV9MRU5HVEgocGx1Z2luRGlyZWN0b3J5
U3RyKSkKLSAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlT
dHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7Ci0KLSAgICBEV09SRCB0eXBlOwotICAgIFdD
SEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3Rh
bGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsK
LQotICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJ
TkUsIEwiU29mdHdhcmVcXE1pY3Jvc29mdFxcTWVkaWFQbGF5ZXIiLCBMIkluc3RhbGxhdGlvbiBE
aXJlY3RvcnkiLCAmdHlwZSwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlv
bkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5
cGUgPT0gUkVHX1NaKQotICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKGluc3RhbGxh
dGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hB
UikgLSAxKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9iZUFjcm9iYXRQbHVnaW5E
aXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIEhLRVkga2V5Owot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVY
VCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7
Ci0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOwotCi0gICAgVmVj
dG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247Ci0gICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRW
ZXJzaW9uU3RyaW5nOwotCi0gICAgLy8gRW51bWVyYXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBp
ID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6
ZW9mKFdDSEFSKTsKLSAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUs
ICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0
ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBWZWN0b3I8
aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFt
ZUxlbikpOwotICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRl
c3RBY3JvYmF0VmVyc2lvbikpIHsKLSAgICAgICAgICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0g
YWNyb2JhdFZlcnNpb247Ci0gICAgICAgICAgICBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9
IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbGF0
ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgRFdPUkQgdHlwZTsK
LSAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQYXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAg
IERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUgPSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRo
U3RyKTsKLQotICAgICAgICBTdHJpbmcgYWNyb2JhdFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVc
XEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsg
IlxcSW5zdGFsbFBhdGgiOwotICAgICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlf
TE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCksIDAsICZ0eXBlLCBhY3JvYmF0SW5zdGFsbFBhdGhTdHIsICZhY3Jv
YmF0SW5zdGFsbFBhdGhTaXplKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NF
U1MpIHsKLSAgICAgICAgICAgIFN0cmluZyBhY3JvYmF0UGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5n
KGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihX
Q0hBUikgLSAxKSArICJcXGJyb3dzZXIiOwotICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5k
KGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xv
c2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkZEphdmFQbHVnaW5EaXJlY3Rv
cnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIEhLRVkga2V5OwotICAgIEhS
RVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29m
dHdhcmVcXEphdmFTb2Z0XFxKYXZhIFBsdWctaW4iKSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAg
IGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV0NI
QVIgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQotICAgIFZlY3Rvcjxp
bnQ+IGxhdGVzdEphdmFWZXJzaW9uOwotICAgIFN0cmluZyBsYXRlc3RKYXZhVmVyc2lvblN0cmlu
ZzsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCi0gICAgZm9yIChpbnQgaSA9IDA7OyBpKysp
IHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7
Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwg
MCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9T
VUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVmVjdG9yPGludD4gamF2YVZl
cnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3RyaW5nKG5hbWUsIG5hbWVMZW4pKTsKLSAgICAg
ICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhqYXZhVmVyc2lvbiwgbGF0ZXN0SmF2YVZlcnNpb24pKSB7
Ci0gICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lvbiA9IGphdmFWZXJzaW9uOwotICAgICAgICAg
ICAgbGF0ZXN0SmF2YVZlcnNpb25TdHJpbmcgPSBTdHJpbmcobmFtZSwgbmFtZUxlbik7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWxhdGVzdEphdmFWZXJzaW9uU3RyaW5nLmlzRW1wdHko
KSkgewotICAgICAgICBEV09SRCB0eXBlOwotICAgICAgICBXQ0hBUiBqYXZhSW5zdGFsbFBhdGhT
dHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQgamF2YUluc3RhbGxQYXRoU2l6ZSA9IHNpemVv
ZihqYXZhSW5zdGFsbFBhdGhTdHIpOwotICAgICAgICBEV09SRCB1c2VOZXdQbHVnaW5WYWx1ZTsK
LSAgICAgICAgRFdPUkQgdXNlTmV3UGx1Z2luU2l6ZTsKLQotICAgICAgICBTdHJpbmcgamF2YVBs
dWdpbktleVBhdGggPSAiU29mdHdhcmVcXEphdmFTb2Z0XFxKYXZhIFBsdWctaW5cXCIgKyBsYXRl
c3RKYXZhVmVyc2lvblN0cmluZzsKLSAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShI
S0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpLCBMIlVzZU5ld0phdmFQbHVnaW4iLCAmdHlwZSwgJnVzZU5ld1Bs
dWdpblZhbHVlLCAmdXNlTmV3UGx1Z2luU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBF
UlJPUl9TVUNDRVNTICYmIHVzZU5ld1BsdWdpblZhbHVlID09IDEpIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBqYXZhUGx1Z2luS2V5
UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgTCJKYXZhSG9tZSIs
ICZ0eXBlLCBqYXZhSW5zdGFsbFBhdGhTdHIsICZqYXZhSW5zdGFsbFBhdGhTaXplKTsKLSAgICAg
ICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIFN0
cmluZyBqYXZhUGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5nKGphdmFJbnN0YWxsUGF0aFN0ciwgamF2
YUluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJpblxcbmV3X3BsdWdp
biI7Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKGphdmFQbHVnaW5EaXJlY3Rv
cnkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXko
a2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgp
Ci17Ci0gICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVTdHJbX01BWF9QQVRIXTsKLSAgICBzdGF0aWMg
U3RyaW5nIHBsdWdpbnNEaXJlY3Rvcnk7Ci0gICAgc3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luRGly
ZWN0b3J5ID0gZmFsc2U7Ci0KLSAgICBpZiAoIWNhY2hlZFBsdWdpbkRpcmVjdG9yeSkgewotICAg
ICAgICBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSB0cnVlOwotCi0gICAgICAgIGludCBtb2R1bGVG
aWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1lKDAsIG1vZHVsZUZpbGVOYW1lU3RyLCBfTUFY
X1BBVEgpOwotCi0gICAgICAgIGlmICghbW9kdWxlRmlsZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5h
bWVMZW4gPT0gX01BWF9QQVRIKQotICAgICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAgIGlm
ICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZpbGVOYW1lU3RyKSkKLSAgICAgICAgICAgIGdv
dG8gZXhpdDsKLQotICAgICAgICBwbHVnaW5zRGlyZWN0b3J5ID0gU3RyaW5nKG1vZHVsZUZpbGVO
YW1lU3RyKSArICJcXFBsdWdpbnMiOwotICAgIH0KLWV4aXQ6Ci0gICAgcmV0dXJuIHBsdWdpbnNE
aXJlY3Rvcnk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luRGly
ZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIFdDSEFSIHN5c3Rl
bURpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0KLSAgICBpZiAoIUdldFN5c3RlbURpcmVjdG9yeShz
eXN0ZW1EaXJlY3RvcnlTdHIsIFdURl9BUlJBWV9MRU5HVEgoc3lzdGVtRGlyZWN0b3J5U3RyKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFSIG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFY
X1BBVEhdOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVt
RGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcRmxhc2giKSk7Ci0gICAgZGlyZWN0b3JpZXMu
YXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9t
ZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hv
Y2t3YXZlIDEwIikpOwotICAgIGRpcmVjdG9yaWVzLmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5
U3RyKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5E
aXJlY3RvcmllcygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gZGlyZWN0b3JpZXM7Ci0gICAgU3Ry
aW5nIG91ckRpcmVjdG9yeSA9IHNhZmFyaVBsdWdpbnNEaXJlY3RvcnkoKTsKLQotICAgIGlmICgh
b3VyRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQob3VyRGly
ZWN0b3J5KTsKLSAgICBhZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkoZGlyZWN0b3JpZXMp
OwotICAgIGFkZE1vemlsbGFQbHVnaW5EaXJlY3RvcmllcyhkaXJlY3Rvcmllcyk7Ci0gICAgYWRk
V2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KGRpcmVjdG9yaWVzKTsKLSAgICBhZGRN
YWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMpOwotCi0gICAgcmV0dXJuIGRp
cmVjdG9yaWVzOwotfQotCi1ib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRp
cmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKLXsKLSAgICBTdHJpbmcgb3VyRGlyZWN0
b3J5ID0gc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgpOwotCi0gICAgaWYgKCFvdXJEaXJlY3Rvcnku
aXNOdWxsKCkgJiYgIWRpcmVjdG9yeS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG91ckRpcmVj
dG9yeSA9PSBkaXJlY3Rvcnk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1M2MzMTVjMjAxODQzOTRmM2I0
MDY0YTNmNTQ0NzU3M2VkMmNmMDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0KLSNp
bmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0vLyBTZXQgYSB0aW1lciB0byBtYWtlIHN1cmUgd2UgcHJvY2VzcyBh
bnkgcXVldWVkIG1lc3NhZ2VzIGF0IGxlYXN0IGV2ZXJ5IDE2bXMuCi0vLyBUaGlzIHZhbHVlIGFs
bG93cyBGbGFzaCA2MCBtZXNzYWdlcy9zZWNvbmQsIHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggZm9y
IHZpZGVvCi0vLyBwbGF5YmFjaywgYW5kIGFsc28gZ2V0cyB1cyBvdmVyIHRoZSBsaW1pdCBmb3Ig
a2lja2luZyBpbnRvIGhpZ2gtcmVzb2x1dGlvbgotLy8gdGltZXIgbW9kZSAoc2VlIFNoYXJlZFRp
bWVyV2luLmNwcCkuCi1zdGF0aWMgY29uc3QgZG91YmxlIE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRl
cnZhbCA9IDAuMDE2OwotCi0vLyBEdXJpbmcgYSBjb250aW51b3VzIHN0cmVhbSBvZiBtZXNzYWdl
cywgcHJvY2VzcyBvbmUgZXZlcnkgNW1zLgotc3RhdGljIGNvbnN0IGRvdWJsZSBNZXNzYWdlRGly
ZWN0UHJvY2Vzc2luZ0ludGVydmFsID0gMC4wMDU7Ci0KLVBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW46OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oUGx1Z2luVmlldyogcGx1Z2luVmlldykKLSAg
ICA6IG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3KQotICAgICwgbV9iYWNrKDApCi0gICAgLCBtX2Zy
b250KDApCi0gICAgLCBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyKCp0aGlzLCAmUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCkKLSAgICAsIG1fbGFzdE1l
c3NhZ2VUaW1lKDApCi17Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJlZSBsaXN0IHdpdGggb3Vy
IGlubGluZSBtZXNzYWdlcwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1JbmxpbmVN
ZXNzYWdlcyAtIDE7IGkrKykKLSAgICAgICAgbV9pbmxpbmVNZXNzYWdlc1tpXS5uZXh0ID0gJm1f
aW5saW5lTWVzc2FnZXNbaSArIDFdOwotICAgIG1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVz
c2FnZXMgLSAxXS5uZXh0ID0gMDsKLSAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9ICZtX2lubGlu
ZU1lc3NhZ2VzWzBdOwotfQotCi1QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjp+UGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbigpCi17Ci0gICAgUGx1Z2luTWVzc2FnZSogbmV4dDsKLQotICAgIGZv
ciAoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBu
ZXh0KSB7Ci0gICAgICAgIG5leHQgPSBtZXNzYWdlLT5uZXh0OwotICAgICAgICBmcmVlTWVzc2Fn
ZShtZXNzYWdlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
YXBwZW5kTWVzc2FnZShIV05EIGhXbmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQotewotICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBhbGxvY2F0ZU1lc3NhZ2Uo
KTsKLQotICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25kOwotICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsK
LSAgICBtZXNzYWdlLT53UGFyYW0gPSB3UGFyYW07Ci0gICAgbWVzc2FnZS0+bFBhcmFtID0gbFBh
cmFtOwotICAgIG1lc3NhZ2UtPm5leHQgPSAwOwotCi0gICAgaWYgKG1fYmFjaykKLSAgICAgICAg
bV9iYWNrLT5uZXh0ID0gbWVzc2FnZTsKLSAgICBtX2JhY2sgPSBtZXNzYWdlOwotICAgIGlmICgh
bV9mcm9udCkKLSAgICAgICAgbV9mcm9udCA9IG1lc3NhZ2U7Ci0KLSAgICAvLyBJZiBpdCBoYXMg
YmVlbiBtb3JlIHRoYW4gTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCBiZXR3ZWVuIHRo
cm90dGxlZCBtZXNzYWdlcywKLSAgICAvLyBnbyBhaGVhZCBhbmQgcHJvY2VzcyBhIG1lc3NhZ2Ug
ZGlyZWN0bHkuCi0gICAgZG91YmxlIGN1cnJlbnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lKCk7Ci0gICAgaWYgKGN1cnJlbnRUaW1lIC0gbV9sYXN0TWVzc2FnZVRpbWUgPiBNZXNz
YWdlRGlyZWN0UHJvY2Vzc2luZ0ludGVydmFsKSB7Ci0gICAgICAgIHByb2Nlc3NRdWV1ZWRNZXNz
YWdlKCk7Ci0gICAgICAgIG1fbGFzdE1lc3NhZ2VUaW1lID0gY3VycmVudFRpbWU7Ci0gICAgICAg
IGlmICghbV9mcm9udCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
bWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9tZXNzYWdlVGhyb3R0
bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsKLX0KLQot
dm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjpwcm9jZXNzUXVldWVkTWVzc2FnZSgpCi17
Ci0gICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7Ci0gICAgbV9mcm9udCA9IG1f
ZnJvbnQtPm5leHQ7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gbV9iYWNrKQotICAgICAgICBtX2JhY2sg
PSAwOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgUGx1Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uIHdo
aWxlIGNhbGxpbmcgaXRzIHdpbmRvdyBwcm9jLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82OTMw
MjgwPgotICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KG1fcGx1Z2luVmlldyk7Ci0gICAg
OjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblZpZXctPnBsdWdpblduZFByb2MoKSwgbWVzc2FnZS0+
aFduZCwgbWVzc2FnZS0+bXNnLCBtZXNzYWdlLT53UGFyYW0sIG1lc3NhZ2UtPmxQYXJhbSk7Ci0K
LSAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luOjptZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKCkKLXsKLSAgICBwcm9jZXNzUXVldWVk
TWVzc2FnZSgpOwotCi0gICAgaWYgKG1fZnJvbnQpCi0gICAgICAgIG1fbWVzc2FnZVRocm90dGxl
VGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7Ci19Ci0KLVBs
dWdpbk1lc3NhZ2UqIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFsbG9jYXRlTWVzc2FnZSgp
Ci17Ci0gICAgUGx1Z2luTWVzc2FnZSAqbWVzc2FnZTsKLQotICAgIGlmIChtX2ZyZWVJbmxpbmVN
ZXNzYWdlcykgewotICAgICAgICBtZXNzYWdlID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7Ci0gICAg
ICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZS0+bmV4dDsKLSAgICB9IGVsc2UKLSAg
ICAgICAgbWVzc2FnZSA9IG5ldyBQbHVnaW5NZXNzYWdlOwotCi0gICAgcmV0dXJuIG1lc3NhZ2U7
Ci19Ci0KLWJvb2wgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKFBs
dWdpbk1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIG1lc3NhZ2UgPj0gJm1faW5saW5l
TWVzc2FnZXNbMF0gJiYgbWVzc2FnZSA8PSAmbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNz
YWdlcyAtIDFdOwotfQotCi12b2lkIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNz
YWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKGlzSW5saW5lTWVzc2FnZSht
ZXNzYWdlKSkgewotICAgICAgICBtZXNzYWdlLT5uZXh0ID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7
Ci0gICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgZGVsZXRlIG1lc3NhZ2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJX
aW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M1MTAzMDgzNmQzYTNlOTI3N2E2
MGQ1N2FkNjM3YzVhZmYxZGFjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKLSNkZWZpbmUgUGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bl9oCi0KLSNpbmNsdWRlICJUaW1lci5oIgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgUGx1Z2luVmlldzsKLQotICAgIHN0cnVjdCBQbHVn
aW5NZXNzYWdlIHsKLSAgICAgICAgSFdORCBoV25kOwotICAgICAgICBVSU5UIG1zZzsKLSAgICAg
ICAgV1BBUkFNIHdQYXJhbTsKLSAgICAgICAgTFBBUkFNIGxQYXJhbTsKLQotICAgICAgICBzdHJ1
Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbiB7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luKFBsdWdpblZpZXcqKTsKLSAgICAgICAgflBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4o
KTsKLQotICAgICAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoSFdORCwgVUlOVCBtc2csIFdQQVJBTSwg
TFBBUkFNKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgcHJvY2Vzc1F1ZXVlZE1lc3Nh
Z2UoKTsKLSAgICAgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKCk7Ci0gICAgICAg
IFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2FnZSgpOwotICAgICAgICBib29sIGlzSW5saW5l
TWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKLSAgICAgICAgdm9pZCBmcmVlTWVzc2Fn
ZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKLQotICAgICAgICBQbHVnaW5WaWV3KiBtX3BsdWdp
blZpZXc7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKLSAgICAgICAgUGx1Z2luTWVz
c2FnZSogbV9mcm9udDsKLQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IE51bUlubGluZU1lc3Nh
Z2VzID0gNDsKLSAgICAgICAgUGx1Z2luTWVzc2FnZSBtX2lubGluZU1lc3NhZ2VzW051bUlubGlu
ZU1lc3NhZ2VzXTsKLSAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcmVlSW5saW5lTWVzc2FnZXM7
Ci0KLSAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcjsKLSAgICAgICAgZG91Ymxl
IG1fbGFzdE1lc3NhZ2VUaW1lOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTg1MjU3ZDYyMjkyNzIwOTE4YTUxYTM2ZDgyN2Q4Y2NkMmQ0MTljMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFj
a2FnZS5oIgotCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLSNpbmNsdWRlICJUaW1lci5o
IgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFN0
cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBMUFZPSUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBT
dHJpbmcmIGluZm8pCi17Ci0gICAgTFBWT0lEIGJ1ZmZlcjsKLSAgICBVSU5UIGJ1ZmZlckxlbmd0
aDsKLSAgICBTdHJpbmcgc3ViSW5mbyA9ICJcXFN0cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiAr
IGluZm87Ci0gICAgYm9vbCByZXR2YWwgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEs
Ci0gICAgICAgIGNvbnN0X2Nhc3Q8VUNoYXIqPihzdWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpKSwKLSAgICAgICAgJmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7Ci0g
ICAgaWYgKCFyZXR2YWwgfHwgYnVmZmVyTGVuZ3RoID09IDApCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIC8vIFN1YnRyYWN0IDEgZnJvbSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50
IHRoZSB0cmFpbGluZyBudWxsIGNoYXJhY3Rlci4KLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBidWZmZXJMZW5ndGggLSAxKTsKLX0KLQotYm9vbCBQ
bHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkKLXsKLSAgICBpZiAobmFtZSgpID09
ICJDaXRyaXggSUNBIENsaWVudCIpIHsKLSAgICAgICAgLy8gVGhlIENpdHJpeCBJQ0EgQ2xpZW50
IHBsdWctaW4gcmVxdWlyZXMgYSBNb3ppbGxhLWJhc2VkIGJyb3dzZXI7IHNlZSA8cmRhcjovLzY0
MTg2ODE+LgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSgpID09
ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewotICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRh
cjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQu
Y29tLgotICAgICAgICAvLyB0aGUgbGF0ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRv
ZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNoLCBzbyBhbGxvdyBpdAotICAgICAgICAvLyBhbmQg
YW55IG5ld2VyIHZlcnNpb25zCi0gICAgICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZl
cnNpb24gc2xQbHVnaW5NaW5SZXF1aXJlZCgweDUxQkUwMDAwLCAweDAwMDEwMDAwKTsKLQotICAg
ICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKHNsUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
ZmlsZU5hbWUoKSwgIm5wbW96YXguZGxsIikpIHsKLSAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3pp
bGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRs
bAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGZpbGVOYW1lKCksICJucHdwZi5kbGwiKSkgewotICAgICAgICAvLyBCdWcgNTcxMTk6IE1pY3Jv
c29mdCBXaW5kb3dzIFByZXNlbnRhdGlvbiBGb3VuZGF0aW9uIChXUEYpIHBsdWctaW4gY29tcGxh
aW5zIGFib3V0IG1pc3NpbmcgeHBjb20uZGxsCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0g
ZWxzZSBpZiAobmFtZSgpID09ICJZYWhvbyBBcHBsaWNhdGlvbiBTdGF0ZSBQbHVnaW4iKSB7Ci0g
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg2MAot
ICAgICAgICAvLyBCdWcgaW4gWWFob28gQXBwbGljYXRpb24gU3RhdGUgcGx1Zy1pbiBlYXJsaWVy
IHRoYW4gMS4wLjAuNiBsZWFkcyB0byBoZWFwIGNvcnJ1cHRpb24uIAotICAgICAgICBzdGF0aWMg
Y29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHlhaG9vQXBwU3RhdGVQbHVnaW5NaW5SZXF1aXJl
ZCgweDAwMDAwMDA2LCAweDAwMDEwMDAwKTsKLSAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lv
bih5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBQbHVnaW5QYWNr
YWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAo
bWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgewotICAgICAgICBz
dGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGZsYXNoVGVuVmVyc2lvbigweDAwMDAw
MDAwLCAweDAwMGEwMDAwKTsKLQotICAgICAgICAvLyBQcmUgMTAgRmxhc2ggb25seSByZXF1ZXN0
cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50Ci0g
ICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oZmxhc2hUZW5WZXJzaW9uKSA8IDApCi0gICAg
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOwot
Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0g
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3Nh
Z2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcp
OwotICAgIH0KLQotICAgIGlmIChuYW1lKCkuY29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG5hbWUo
KS5jb250YWlucygiV2luZG93cyBNZWRpYSIpKSB7Ci0gICAgICAgIC8vIFRoZSBXTVAgcGx1Z2lu
IHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIg
dXBkYXRlcyBpdHMgc2l6ZSwgc28KLSAgICAgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUg
cGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVn
aW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKLQotICAgICAgICAvLyBXaW5kb3dsZXNz
IG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJl
bW92ZSB0aGF0IHBhcmFtZXRlciAKLSAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhl
IHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xl
c3NWaWRlb1BhcmFtKTsKLQotICAgICAgICAvLyBXTVAgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29w
IHRoYXQgaXQgZW50ZXJzIHdoZW5ldmVyIHdlIGNhbGwgaXQgb3IKLSAgICAgICAgLy8gYXNrIGl0
IHRvIHBhaW50LiBUaGlzIG1vZGFsIGxvb3AgY2FuIGRlbGl2ZXIgbWVzc2FnZXMgdG8gb3RoZXIK
LSAgICAgICAgLy8gd2luZG93cyBpbiBXZWJLaXQgYXQgdGltZXMgd2hlbiB0aGV5IGFyZSBub3Qg
ZXhwZWN0aW5nIHRoZW0gKGZvcgotICAgICAgICAvLyBleGFtcGxlLCBkZWxpdmVyaW5nIGEgV01f
UEFJTlQgbWVzc2FnZSBkdXJpbmcgYSBsYXlvdXQpLCBhbmQgdGhlc2UKLSAgICAgICAgLy8gY2Fu
IGNhdXNlIGNyYXNoZXMuCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0hhc01vZGFs
TWVzc2FnZUxvb3ApOwotICAgIH0KLQotICAgIGlmIChuYW1lKCkgPT0gIlZMQyBNdWx0aW1lZGlh
IFBsdWdpbiIgfHwgbmFtZSgpID09ICJWTEMgTXVsdGltZWRpYSBQbHVnLWluIikgewotICAgICAg
ICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rlc3Ryb3kgaWYgd2UgY2FsbCBOUFBfU2V0V2luZG93IHdp
dGggYSBudWxsIHdpbmRvdyBoYW5kbGUKLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
RG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpOwotCi0gICAgICAgIC8vIFZMQyAwLjgu
NmQgYW5kIDAuOC42ZSBjcmFzaCBpZiBtdWx0aXBsZSBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuCi0g
ICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NzczMDcwPiB0cmFja3MgYWxsb3dpbmcgbXVsdGlw
bGUgaW5zdGFuY2VzIHdoZW4gdGhpcwotICAgICAgICAvLyBidWcgaXMgZml4ZWQuCi0gICAgICAg
IG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAg
ICB9Ci0KLSAgICAvLyBUaGUgRGl2WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3Qg
TlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbwotICAgIC8v
IGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQot
ICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8vZGl2eCIpCi0gICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKTsKLQotICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7
IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCi0gICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0
byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRo
YXQgTlBPYmplY3QgYmVsb25ncyB0by4KLSAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQg
dGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5j
ZSBnb2VzIGF3YXkuCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KLSAgICBp
ZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQiKQotICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKLQotICAgIGlmIChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkpIHsKLSAgICAgICAgLy8g
QmVjYXVzZSBhIHNpbmdsZSBwcm9jZXNzIGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQg
d2UgY2Fubm90IHJlbGlhYmx5IHVubG9hZCBhCi0gICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5v
dCB1bmxvYWQgdGhlIEphdmEgcGx1Z2luLCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIg
b25seSBWTQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2lu
KTsKLQotICAgICAgICAvLyBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJl
Z2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyByZXBhaW50IHByb2JsZW1zCi0gICAgICAgIC8vIHdp
dGggdGhlIEphdmEgcGx1Zy1pbi4KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9u
dENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7Ci0gICAgfQotCi0gICAgaWYgKG1pbWVUeXBl
ID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKSB7Ci0gICAgICAgIC8vIFByZXZlbnQg
dGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHks
IGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1
Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KTsKLQotICAg
ICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIGxhc3RLbm93blVubG9hZGFi
bGVSZWFsUGxheWVyVmVyc2lvbigweDAwMEIwQjI0LCAweDAwMDYwMDAwKTsKLQotICAgICAgICAv
LyBVbmxvYWRpbmcgUmVhbFBsYXllciB2ZXJzaW9ucyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNl
IGEgaGFuZzsgc2VlIHJkYXI6Ly81NjY5MzE3LgotICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVu
bG9hZGluZyB3aGVuIHRoaXMgYnVnIGluIHRoZSBSZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQg
KHJkYXI6Ly81NzEzMTQ3KQotICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKGxhc3RLbm93
blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbikgPiAwKQotICAgICAgICAgICAgbV9xdWlya3Mu
YWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7Ci0gICAgfQotfQotCi1ib29sIFBsdWdp
blBhY2thZ2U6OmZldGNoSW5mbygpCi17Ci0gICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJv
SGFuZGxlOwotICAgIHZlcnNpb25JbmZvU2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKGNv
bnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCkpLCAmemVyb0hhbmRsZSk7Ci0gICAgaWYgKHZlcnNpb25JbmZvU2l6ZSA9PSAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHZlcnNpb25JbmZvRGF0YSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Y2hhcltdPih2ZXJzaW9uSW5mb1NpemUpOwotCi0gICAgaWYgKCFHZXRGaWxlVmVy
c2lvbkluZm9XKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCkpLAotICAgICAgICAgICAgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJz
aW9uSW5mb0RhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX25hbWUg
PSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJQcm9kdWN0TmFtZSIpOwot
ICAgIG1fZGVzY3JpcHRpb24gPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCks
ICJGaWxlRGVzY3JpcHRpb24iKTsKLSAgICBpZiAobV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3Jp
cHRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZTX0ZJWEVERklM
RUlORk8qIGluZm87Ci0gICAgVUlOVCBpbmZvU2l6ZTsKLSAgICBpZiAoIVZlclF1ZXJ5VmFsdWVX
KHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgTCJcXCIsIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXpl
KSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19GSVhFREZJTEVJTkZPKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNp
b25MUzsKLSAgICBtX21vZHVsZVZlcnNpb24ubW9zdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25N
UzsKLQotICAgIGlmIChpc1BsdWdpbkJsYWNrbGlzdGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgIGdldFZlcnNpb25JbmZvKHZlcnNp
b25JbmZvRGF0YS5nZXQoKSwgIk1JTUVUeXBlIikuc3BsaXQoJ3wnLCB0eXBlcyk7Ci0gICAgVmVj
dG9yPFN0cmluZz4gZXh0ZW5zaW9uTGlzdHM7Ci0gICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbklu
Zm9EYXRhLmdldCgpLCAiRmlsZUV4dGVudHMiKS5zcGxpdCgnfCcsIGV4dGVuc2lvbkxpc3RzKTsK
LSAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlwdGlvbnM7Ci0gICAgZ2V0VmVyc2lvbkluZm8odmVy
c2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZU9wZW5OYW1lIikuc3BsaXQoJ3wnLCBkZXNjcmlwdGlv
bnMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdHlwZXNbaV0ubG93ZXIoKTsKLSAgICAgICAgU3RyaW5n
IGRlc2NyaXB0aW9uID0gaSA8IGRlc2NyaXB0aW9ucy5zaXplKCkgPyBkZXNjcmlwdGlvbnNbaV0g
OiAiIjsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbkxpc3QgPSBpIDwgZXh0ZW5zaW9uTGlzdHMu
c2l6ZSgpID8gZXh0ZW5zaW9uTGlzdHNbaV0gOiAiIjsKLQotICAgICAgICBWZWN0b3I8U3RyaW5n
PiBleHRlbnNpb25zVmVjdG9yOwotICAgICAgICBleHRlbnNpb25MaXN0LnNwbGl0KCcsJywgZXh0
ZW5zaW9uc1ZlY3Rvcik7Ci0KLSAgICAgICAgLy8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxp
c3QgdGhhdCBtYXkgYmUgYXQgdGhlIGVuZCBvZiB0aGUgZGVzY3JpcHRpb24gc3RyaW5nLgotICAg
ICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmluZCgiKCoiKTsKLSAgICAgICAgaWYgKHBvcyAh
PSAtMSkgewotICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5l
ZWQgdG8gZ2V0IHJpZCBvZi4KLSAgICAgICAgICAgIGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9u
W3BvcyAtIDFdID09ICcgJykKLSAgICAgICAgICAgICAgICBwb3MtLTsKLSAgICAgICAgICAgIGRl
c2NyaXB0aW9uID0gZGVzY3JpcHRpb24ubGVmdChwb3MpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBxdWlya3MgZm9yIHRoZSBNSU1FIHR5cGVzIHRoaXMgcGx1Zy1pbiBz
dXBwb3J0cwotICAgICAgICBkZXRlcm1pbmVRdWlya3ModHlwZSk7Ci0KLSAgICAgICAgbV9taW1l
VG9FeHRlbnNpb25zLmFkZCh0eXBlLCBleHRlbnNpb25zVmVjdG9yKTsKLSAgICAgICAgbV9taW1l
VG9EZXNjcmlwdGlvbnMuYWRkKHR5cGUsIGRlc2NyaXB0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKLXsKLSAgICBpZiAobV9m
cmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsK
LSAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0b3AoKTsKLSAgICB9IGVsc2UgaWYgKG1faXNM
b2FkZWQpIHsKLSAgICAgICAgaWYgKG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFs
bG93TXVsdGlwbGVJbnN0YW5jZXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBtX2xvYWRDb3VudCsrOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhfUEFUSF07Ci0KLSAgICAgICAgaWYgKCE6OkdldEN1
cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCBjdXJyZW50UGF0aCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgU3RyaW5nIHBhdGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1f
cGF0aC5yZXZlcnNlRmluZCgnXFwnKSk7Ci0KLSAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJl
Y3RvcnlXKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIExvYWQgdGhlIGxpYnJhcnkKLSAg
ICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgp
OwotCi0gICAgICAgIGlmICghOjpTZXRDdXJyZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsK
LSAgICAgICAgICAgIGlmIChtX21vZHVsZSkKLSAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5
KG1fbW9kdWxlKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICghbV9tb2R1bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faXNM
b2FkZWQgPSB0cnVlOwotCi0gICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5
UG9pbnRzID0gMDsKLSAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsK
LSAgICBOUEVycm9yIG5wRXJyOwotCi0gICAgTlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXpl
RnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiKTsKLSAgICBO
UF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJl
c3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50cyIpOwotICAgIG1fTlBQX1NodXRkb3duID0g
KE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93
biIpOwotCi0gICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAh
bV9OUFBfU2h1dGRvd24pCi0gICAgICAgIGdvdG8gYWJvcnQ7Ci0KLSAgICBtZW1zZXQoJm1fcGx1
Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7Ci0gICAgbV9wbHVnaW5GdW5jcy5z
aXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOwotCi0gICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBv
aW50cygmbV9wbHVnaW5GdW5jcyk7Ci0gICAgTE9HX05QRVJST1IobnBFcnIpOwotICAgIGlmIChu
cEVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIGluaXRp
YWxpemVCcm93c2VyRnVuY3MoKTsKLQotICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93
c2VyRnVuY3MpOwotICAgIExPR19OUEVSUk9SKG5wRXJyKTsKLQotICAgIGlmIChucEVyciAhPSBO
UEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBhYm9ydDsKLQotICAgIG1fbG9hZENvdW50Kys7
Ci0gICAgcmV0dXJuIHRydWU7Ci0KLWFib3J0OgotICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgp
IGNvbnN0Ci17IAotICAgIGNvbnN0IHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICBt
X25hbWUuaW1wbCgpLT5oYXNoKCksCi0gICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNo
KCksCi0gICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5zaXplKCkKLSAgICB9OwotCi0gICAgcmV0
dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVz
KTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBh
LCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQotewotICAgIGlmIChhLm1fbmFtZSAhPSBiLm1fbmFt
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGEubV9kZXNjcmlwdGlvbiAhPSBi
Lm1fZGVzY3JpcHRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhLm1fbWlt
ZVRvRXh0ZW5zaW9ucy5zaXplKCkgIT0gYi5tX21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVy
YXRvcjo6S2V5cyBlbmQgPSBhLm1fbWltZVRvRXh0ZW5zaW9ucy5lbmQoKS5rZXlzKCk7Ci0gICAg
Zm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IGEubV9t
aW1lVG9FeHRlbnNpb25zLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgaWYgKCFiLm1fbWltZVRvRXh0ZW5zaW9ucy5jb250YWlucygqaXQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi11aW50MTZfdCBQ
bHVnaW5QYWNrYWdlOjpOUFZlcnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBOUF9WRVJTSU9O
X01JTk9SOwotfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luVmlld1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2lu
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyMTJiYTI0OWY0NzdlMDM2OTE4
ZWMyNjEzMjhlNzZmN2RmOWY4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEwMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLQotI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQml0bWFwSW5mby5oIgotI2luY2x1ZGUgIkJyaWRnZUpT
Qy5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRl
ICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVz
dC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0j
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKLSNpbmNsdWRlICJMb2NhbFdpbmRvd3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJh
c2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJl
YWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0j
aW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCi0j
aW5jbHVkZSAiY19pbnN0YW5jZS5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5j
bHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+Ci0KLSNpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKLSNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEsp
Ci0jaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2VuZGlm
Ci0KLXN0YXRpYyBpbmxpbmUgSFdORCB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KFBsYXRmb3Jt
UGFnZUNsaWVudCBjbGllbnQpCi17Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGlmICghY2xpZW50
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lk
Z2V0X2dldF93aW5kb3coY2xpZW50KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhXTkQ+
KEdES19XSU5ET1dfSFdORCh3aW5kb3cpKTsKLSAgICByZXR1cm4gMDsKLSNlbHNlCi0gICAgcmV0
dXJuIGNsaWVudDsKLSNlbmRpZgotfQotCi11c2luZyBKU0M6OkV4ZWNTdGF0ZTsKLXVzaW5nIEpT
Qzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVjdDsKLQotdXNpbmcgc3RkOjptaW47Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKLQotY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFt
ZSA9IEwiV2ViUGx1Z2luVmlldyI7Ci1jb25zdCBMUENXU1RSIGtXZWJQbHVnaW5WaWV3UHJvcGVy
dHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7Ci0KLS8vIFRoZSBjb2RlIHVzZWQgdG8gaG9v
ayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdpbmFsbHkgY2FtZSBmcm9tCi0vLyA8aHR0cDovL3d3
dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+LgotLy8gQ29weXJpZ2h0IChDKSAy
MDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5dWFuLmNvbSkuCi0KLXN0YXRpYyB1bnNpZ25lZCBi
ZWdpblBhaW50U3lzQ2FsbDsKLXN0YXRpYyBCWVRFKiBiZWdpblBhaW50OwotCi1zdGF0aWMgdW5z
aWduZWQgZW5kUGFpbnRTeXNDYWxsOwotc3RhdGljIEJZVEUqIGVuZFBhaW50OwotCi10eXBlZGVm
IEhEQyAoV0lOQVBJICpQdHJCZWdpblBhaW50KShIV05ELCBQQUlOVFNUUlVDVCopOwotdHlwZWRl
ZiBCT09MIChXSU5BUEkgKlB0ckVuZFBhaW50KShIV05ELCBjb25zdCBQQUlOVFNUUlVDVCopOwot
Ci0jaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkgJiYgQ09NUElMRVIoTVNWQykKLWV4dGVy
biAiQyIgSERDIF9fc3RkY2FsbCBfSEJlZ2luUGFpbnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNU
IGxwUGFpbnQpOwotZXh0ZXJuICJDIiBCT09MIF9fc3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFdu
ZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpOwotI2VuZGlmCi0KLUhEQyBXSU5BUEkgUGx1
Z2luVmlldzo6aG9va2VkQmVnaW5QYWludChIV05EIGhXbmQsIFBBSU5UU1RSVUNUKiBscFBhaW50
KQotewotICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdp
blZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKLSAgICBpZiAo
cGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5tX3dtUHJpbnRIREMpIHsKLSAgICAgICAgLy8gV2Un
cmUgc2VjcmV0bHkgaGFuZGxpbmcgV01fUFJJTlRDTElFTlQsIHNvIHNldCB1cCB0aGUgUEFJTlRT
VFJVQ1Qgc28KLSAgICAgICAgLy8gdGhhdCB0aGUgcGx1Z2luIHdpbGwgcGFpbnQgaW50byB0aGUg
SERDIHdlIHByb3ZpZGUuCi0gICAgICAgIG1lbXNldChscFBhaW50LCAwLCBzaXplb2YoUEFJTlRT
VFJVQ1QpKTsKLSAgICAgICAgbHBQYWludC0+aGRjID0gcGx1Z2luVmlldy0+bV93bVByaW50SERD
OwotICAgICAgICBHZXRDbGllbnRSZWN0KGhXbmQsICZscFBhaW50LT5yY1BhaW50KTsKLSAgICAg
ICAgcmV0dXJuIHBsdWdpblZpZXctPm1fd21QcmludEhEQzsKLSAgICB9Ci0KLSNpZiBDT01QSUxF
UihHQ0MpCi0gICAgSERDIHJlc3VsdDsKLSAgICBhc20gKCJwdXNoICAgICUyXG4iCi0gICAgICAg
ICAicHVzaCAgICAlM1xuIgotICAgICAgICAgImNhbGwgICAgKiU0XG4iCi0gICAgICAgICA6ICI9
YSIgKHJlc3VsdCkKLSAgICAgICAgIDogImEiIChiZWdpblBhaW50U3lzQ2FsbCksICJnIiAobHBQ
YWludCksICJnIiAoaFduZCksICJtIiAoYmVnaW5QYWludCkKLSAgICAgICAgIDogIm1lbW9yeSIK
LSAgICAgICAgKTsKLSAgICByZXR1cm4gcmVzdWx0OwotI2VsaWYgZGVmaW5lZChfTV9JWDg2KQot
ICAgIC8vIENhbGwgdGhyb3VnaCB0byB0aGUgb3JpZ2luYWwgQmVnaW5QYWludC4KLSAgICBfX2Fz
bSAgIG1vdiAgICAgZWF4LCBiZWdpblBhaW50U3lzQ2FsbAotICAgIF9fYXNtICAgcHVzaCAgICBs
cFBhaW50Ci0gICAgX19hc20gICBwdXNoICAgIGhXbmQKLSAgICBfX2FzbSAgIGNhbGwgICAgYmVn
aW5QYWludAotI2Vsc2UKLSAgICByZXR1cm4gX0hCZWdpblBhaW50KGhXbmQsIGxwUGFpbnQpOwot
I2VuZGlmCi19Ci0KLUJPT0wgV0lOQVBJIFBsdWdpblZpZXc6Omhvb2tlZEVuZFBhaW50KEhXTkQg
aFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpCi17Ci0gICAgUGx1Z2luVmlldyogcGx1
Z2luVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dl
YlBsdWdpblZpZXdQcm9wZXJ0eSkpOwotICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXct
Pm1fd21QcmludEhEQykgewotICAgICAgICAvLyBXZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9Q
UklOVENMSUVOVCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkKLSAgICAgICAgLy8gY2xlYW51
cC4KLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0jaWYgQ09NUElMRVIoR0NDKQotICAg
IEJPT0wgcmVzdWx0OwotICAgIGFzbSAoInB1c2ggICAlMlxuIgotICAgICAgICAgInB1c2ggICAl
M1xuIgotICAgICAgICAgImNhbGwgICAqJTRcbiIKLSAgICAgICAgIDogIj1hIiAocmVzdWx0KQot
ICAgICAgICAgOiAiYSIgKGVuZFBhaW50U3lzQ2FsbCksICJnIiAobHBQYWludCksICJnIiAoaFdu
ZCksICJtIiAoZW5kUGFpbnQpCi0gICAgICAgICk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbGlm
IGRlZmluZWQgKF9NX0lYODYpCi0gICAgLy8gQ2FsbCB0aHJvdWdoIHRvIHRoZSBvcmlnaW5hbCBF
bmRQYWludC4KLSAgICBfX2FzbSAgIG1vdiAgICAgZWF4LCBlbmRQYWludFN5c0NhbGwKLSAgICBf
X2FzbSAgIHB1c2ggICAgbHBQYWludAotICAgIF9fYXNtICAgcHVzaCAgICBoV25kCi0gICAgX19h
c20gICBjYWxsICAgIGVuZFBhaW50Ci0jZWxzZQotICAgIHJldHVybiBfSEVuZFBhaW50KGhXbmQs
IGxwUGFpbnQpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGhvb2soY29uc3QgY2hhciogbW9k
dWxlLCBjb25zdCBjaGFyKiBwcm9jLCB1bnNpZ25lZCYgc3lzQ2FsbElELCBCWVRFKiYgcFByb2Ms
IGNvbnN0IHZvaWQqIHBOZXdQcm9jKQotewotICAgIC8vIFNlZSA8aHR0cDovL3d3dy5mZW5neXVh
bi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+IGZvciBhbiBleHBsYW5hdGlvbiBvZgotICAgIC8v
IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLgotCi0gICAgSElOU1RBTkNFIGhNb2QgPSBHZXRNb2R1
bGVIYW5kbGVBKG1vZHVsZSk7Ci0KLSAgICBwUHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+
KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihHZXRQcm9jQWRkcmVzcyhoTW9kLCBwcm9jKSkp
OwotCi0jaWYgQ09NUElMRVIoR0NDKSB8fCBkZWZpbmVkKF9NX0lYODYpCi0gICAgaWYgKHBQcm9j
WzBdICE9IDB4QjgpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
YmUgcmVhZGluZyB0aGUgYnl0ZXMgb25lLWJ5LW9uZSBpbnN0ZWFkIG9mIGRvaW5nIGFuCi0gICAg
Ly8gdW5hbGlnbmVkIHJlYWQ/Ci0gICAgc3lzQ2FsbElEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQqPihwUHJvYyArIDEpOwotCi0gICAgRFdPUkQgZmxPbGRQcm90ZWN0OwotICAgIGlmICgh
VmlydHVhbFByb3RlY3QocFByb2MsIDUsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUsICZmbE9sZFBy
b3RlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwUHJvY1swXSA9IDB4RTk7Ci0gICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4ocE5ld1Byb2MpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocFByb2MgKyA1
KTsKLQotICAgIHBQcm9jICs9IDU7Ci0jZWxzZQotICAgIC8qIERpc2Fzc2VtYmx5IG9mIEJlZ2lu
UGFpbnQoKQotICAgIDAwMDAwMDAwNzc5RkM1QjAgNEMgOEIgRDEgICAgICAgICBtb3YgICAgICAg
ICByMTAscmN4Ci0gICAgMDAwMDAwMDA3NzlGQzVCMyBCOCAxNyAxMCAwMCAwMCAgIG1vdiAgICAg
ICAgIGVheCwxMDE3aAotICAgIDAwMDAwMDAwNzc5RkM1QjggMEYgMDUgICAgICAgICAgICBzeXNj
YWxsCi0gICAgMDAwMDAwMDA3NzlGQzVCQSBDMyAgICAgICAgICAgICAgIHJldAotICAgIDAwMDAw
MDAwNzc5RkM1QkIgOTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUJDIDkw
ICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVCRCA5MCAgICAgICAgICAgICAg
IG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QkUgOTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAw
MDAwMDc3OUZDNUJGIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVDMCA5
MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QzEgOTAgICAgICAgICAgICAg
ICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUMyIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAw
MDAwMDA3NzlGQzVDMyA5MCAgICAgICAgICAgICAgIG5vcAotICAgICovCi0gICAgLy8gQ2hlY2sg
Zm9yIHRoZSBzaWduYXR1cmUgYXMgaW4gdGhlIGFib3ZlIGRpc2Fzc2VtYmx5Ci0gICAgRFdPUkQg
Z3VhcmQgPSAweEI4RDE4QjRDOwotICAgIGlmICgqcmVpbnRlcnByZXRfY2FzdDxEV09SRCo+KHBQ
cm9jKSAhPSBndWFyZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRFdPUkQgZmxPbGRQcm90ZWN0
OwotICAgIFZpcnR1YWxQcm90ZWN0KHBQcm9jLCAxMiwgUEFHRV9FWEVDVVRFX1JFQURXUklURSwg
JiBmbE9sZFByb3RlY3QpOwotICAgIHBQcm9jWzBdID0gMHg0ODsgICAgLy8gbW92IHJheCwgdGhp
cwotICAgIHBQcm9jWzFdID0gMHhiODsKLSAgICAqKF9faW50NjQqKShwUHJvYysyKSA9IChfX2lu
dDY0KXBOZXdQcm9jOwotICAgIHBQcm9jWzEwXSA9IDB4ZmY7ICAgLy8gam1wIHJheAotICAgIHBQ
cm9jWzExXSA9IDB4ZTA7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5Q
YWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU5UU1RS
VUNUKiksIEJPT0wgKFdJTkFQSSpob29rZWRFbmRQYWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJV
Q1QqKSkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlSG9va2VkID0gZmFsc2U7Ci0gICAgaWYgKGhh
dmVIb29rZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBoYXZlSG9va2VkID0gdHJ1ZTsKLQotICAg
IC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3Qgc2VlbSB0byByZXNwb25kIHRv
IFdNX1BSSU5UQ0xJRU5ULCBzbwotICAgIC8vIHdlIGhvb2sgaW50byBCZWdpblBhaW50L0VuZFBh
aW50IHRvIGFsbG93IHRoZWlyIG5vcm1hbCBXTV9QQUlOVCBoYW5kbGluZwotICAgIC8vIHRvIGRy
YXcgaW50byBhIGdpdmVuIEhEQy4gTm90ZSB0aGF0IHRoaXMgaG9va2luZyBhZmZlY3RzIHRoZSBl
bnRpcmUKLSAgICAvLyBwcm9jZXNzLgotICAgIGhvb2soInVzZXIzMi5kbGwiLCAiQmVnaW5QYWlu
dCIsIGJlZ2luUGFpbnRTeXNDYWxsLCBiZWdpblBhaW50LCByZWludGVycHJldF9jYXN0PGNvbnN0
IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGhvb2tlZEJlZ2luUGFpbnQpKSk7
Ci0gICAgaG9vaygidXNlcjMyLmRsbCIsICJFbmRQYWludCIsIGVuZFBhaW50U3lzQ2FsbCwgZW5k
UGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0
cmRpZmZfdD4oaG9va2VkRW5kUGFpbnQpKSk7Ci0KLX0KLQotc3RhdGljIGJvb2wgcmVnaXN0ZXJQ
bHVnaW5WaWV3KCkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNz
ID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7Ci0KLSNp
ZiBQTEFURk9STShHVEspCi0gICAgV2ViQ29yZTo6c2V0SW5zdGFuY2VIYW5kbGUoKEhJTlNUQU5D
RSkoR2V0TW9kdWxlSGFuZGxlKDApKSk7Ci0jZW5kaWYKLQotICAgIEFTU0VSVChXZWJDb3JlOjpp
bnN0YW5jZUhhbmRsZSgpKTsKLQotICAgIFdORENMQVNTRVggd2NleDsKLSAgICB3Y2V4LmNiU2l6
ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKLSAg
ICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfREJMQ0xLUzsKLSAgICB3Y2V4LmxwZm5XbmRQcm9j
ICAgID0gRGVmV2luZG93UHJvYzsKLSAgICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKLSAgICB3
Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gV2ViQ29y
ZTo6aW5zdGFuY2VIYW5kbGUoKTsKLSAgICB3Y2V4LmhJY29uICAgICAgICAgID0gMDsKLSAgICB3
Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOwotICAgIHdjZXgu
aGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNPTE9SX1dJTkRPVzsKLSAgICB3Y2V4Lmxwc3pNZW51
TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dD
bGFzc05hbWU7Ci0KLSAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzRXgoJndjZXgpOwotfQotCi1M
UkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFBsdWdp
blZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9w
KGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3
LT53bmRQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQotc3RhdGljIGJv
b2wgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKFVJTlQgbWVzc2FnZSkKLXsKLSAgICBzd2l0
Y2ggKG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgICAgIGNhc2Ug
V01fTUJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05VUDoKLSAgICAgICAgY2FzZSBX
TV9LRVlVUDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBJbnRQb2lu
dCBjb250ZW50c1RvTmF0aXZlV2luZG93KEZyYW1lVmlldyogdmlldywgY29uc3QgSW50UG9pbnQm
IHBvaW50KQotewotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHBvaW50KTsKLX0K
LQotc3RhdGljIGlubGluZSBJbnRSZWN0IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coRnJhbWVWaWV3
KiB2aWV3LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiB2aWV3LT5jb250ZW50
c1RvV2luZG93KHJlY3QpOwotfQotCi1MUkVTVUxUCi1QbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAg
IC8vIDxyZGFyOi8vNTcxMTEzNj4gU29tZXRpbWVzIEZsYXNoIHdpbGwgY2FsbCBTZXRDYXB0dXJl
IGJlZm9yZSBjcmVhdGluZwotICAgIC8vIGEgZnVsbC1zY3JlZW4gd2luZG93IGFuZCB3aWxsIG5v
dCByZWxlYXNlIGl0LCB3aGljaCBjYXVzZXMgdGhlCi0gICAgLy8gZnVsbC1zY3JlZW4gd2luZG93
IHRvIG5ldmVyIHJlY2VpdmUgbW91c2UgZXZlbnRzLiBXZSBzZXQvcmVsZWFzZSBjYXB0dXJlCi0g
ICAgLy8gb24gbW91c2UgZG93bi91cCBiZWZvcmUgc2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIHBs
dWctaW4gdG8gcHJldmVudCB0aGF0LgotICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgICAgICBj
YXNlIFdNX0xCVVRUT05ET1dOOgotICAgICAgICBjYXNlIFdNX01CVVRUT05ET1dOOgotICAgICAg
ICBjYXNlIFdNX1JCVVRUT05ET1dOOgotICAgICAgICAgICAgOjpTZXRDYXB0dXJlKGhXbmQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fTEJVVFRPTlVQOgotICAgICAgICBj
YXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAg
ICA6OlJlbGVhc2VDYXB0dXJlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBp
ZiAobWVzc2FnZSA9PSBtX2xhc3RNZXNzYWdlICYmCi0gICAgICAgIG1fcGx1Z2luLT5xdWlya3Mo
KS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJz
aXZlbHkpICYmIAotICAgICAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MpCi0gICAgICAgIHJl
dHVybiAxOwotCi0gICAgaWYgKG1lc3NhZ2UgPT0gV01fVVNFUiArIDEgJiYKLSAgICAgICAgbV9w
bHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25l
TWVzc2FnZXMpKSB7Ci0gICAgICAgIGlmICghbV9tZXNzYWdlVGhyb3R0bGVyKQotICAgICAgICAg
ICAgbV9tZXNzYWdlVGhyb3R0bGVyID0gYWRvcHRQdHIobmV3IFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW4odGhpcykpOwotCi0gICAgICAgIG1fbWVzc2FnZVRocm90dGxlci0+YXBwZW5kTWVzc2Fn
ZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIG1fbGFzdE1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIG1faXNDYWxsaW5nUGx1Z2lu
V25kUHJvYyA9IHRydWU7Ci0KLSAgICAvLyBJZiB0aGUgcGx1Zy1pbiBkb2Vzbid0IGV4cGxpY2l0
bHkgc3VwcG9ydCBjaGFuZ2luZyB0aGUgcG9wLXVwIHN0YXRlLCB3ZSBlbmFibGUKLSAgICAvLyBw
b3B1cHMgZm9yIGFsbCB1c2VyIGdlc3R1cmVzLgotICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRv
IHBvcCB0aGUgc3RhdGUgaW4gYSB0aW1lciwgYmVjYXVzZSB0aGUgRmxhc2ggcGx1Zy1pbiAKLSAg
ICAvLyBwb3BzIHVwIHdpbmRvd3MgaW4gcmVzcG9uc2UgdG8gYSBwb3N0ZWQgbWVzc2FnZS4KLSAg
ICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQ
U19FTkFCTEVEX1NUQVRFICYmCi0gICAgICAgIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZSht
ZXNzYWdlKSAmJiAhbV9wb3BQb3B1cHNTdGF0ZVRpbWVyLmlzQWN0aXZlKCkpIHsKLQotICAgICAg
ICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRydWUpOwotCi0gICAgICAgIG1fcG9wUG9wdXBzU3Rh
dGVUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2UgPT0gV01f
UFJJTlRDTElFTlQpIHsKLSAgICAgICAgLy8gTW9zdCAoYWxsPykgd2luZG93ZWQgcGx1Z2lucyBk
b24ndCByZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5ULCBzbyB3ZQotICAgICAgICAvLyBjaGFuZ2Ug
dGhlIG1lc3NhZ2UgdG8gV01fUEFJTlQgYW5kIHJlbHkgb24gb3VyIGhvb2tlZCB2ZXJzaW9ucyBv
ZgotICAgICAgICAvLyBCZWdpblBhaW50L0VuZFBhaW50IHRvIG1ha2UgdGhlIHBsdWdpbiBkcmF3
IGludG8gdGhlIGdpdmVuIEhEQy4KLSAgICAgICAgbWVzc2FnZSA9IFdNX1BBSU5UOwotICAgICAg
ICBtX3dtUHJpbnRIREMgPSByZWludGVycHJldF9jYXN0PEhEQz4od1BhcmFtKTsKLSAgICB9Ci0K
LSAgICAvLyBDYWxsIHRoZSBwbHVnLWluJ3Mgd2luZG93IHByb2MuCi0gICAgTFJFU1VMVCByZXN1
bHQgPSA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luV25kUHJvYywgaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0pOwotCi0gICAgbV93bVByaW50SERDID0gMDsKLQotICAgIG1faXNDYWxsaW5n
UGx1Z2luV25kUHJvYyA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBQ
bHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQotewotICAgIGlmICghcGFyZW50KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gZG93bmNhc3Q8RnJh
bWVWaWV3PigqcGFyZW50KCkpOwotCi0gICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5k
b3dSZWN0OwotICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OwotCi0gICAgbV93
aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXcuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3Qo
KS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLSAgICBtX2NsaXBSZWN0ID0gd2lu
ZG93Q2xpcFJlY3QoKTsKLSAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1t
X3dpbmRvd1JlY3QueSgpKTsKLQotICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmICgh
bV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCB8fCBtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVj
dCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkgewotCi0gICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7Ci0KLSAgICAgICAgLy8gVG8gcHJldmVudCBmbGFzaGVzIHdoaWxlIHNjcm9s
bGluZywgd2UgZGlzYWJsZSBkcmF3aW5nIGR1cmluZyB0aGUgd2luZG93Ci0gICAgICAgIC8vIHVw
ZGF0ZSBwcm9jZXNzIGJ5IGNsaXBwaW5nIHRoZSB3aW5kb3cgdG8gdGhlIHplcm8gcmVjdC4KLQot
ICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0ID0gIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOwotCi0gICAgICAg
IGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9i
amVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOwotICAgICAgICAgICAgOjpTZXRXaW5k
b3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWsoKSwgRkFMU0UpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgo
KSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCksIFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0IHx8IG1fd2luZG93UmVjdCAhPSBvbGRX
aW5kb3dSZWN0KQotICAgICAgICAgICAgOjpNb3ZlV2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0
aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksIFRSVUUpOwotCi0gICAgICAgIGlmIChjbGlwVG9a
ZXJvUmVjdCkgewotICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgo
KSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCksIFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0KLSAgICAgICAgbV9oYXZlVXBkYXRlZFBsdWdp
bldpZGdldCA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJv
b2wgZm9jdXNlZCkKLXsKLSAgICBpZiAoZm9jdXNlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KQotICAgICAgICBTZXRGb2N1cyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLQotICAgIFdpZGdl
dDo6c2V0Rm9jdXMoZm9jdXNlZCk7Ci0KLSAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBFdmVudCBucEV2ZW50OwotCi0gICAgbnBFdmVu
dC5ldmVudCA9IGZvY3VzZWQgPyBXTV9TRVRGT0NVUyA6IFdNX0tJTExGT0NVUzsKLSAgICBucEV2
ZW50LndQYXJhbSA9IDA7Ci0gICAgbnBFdmVudC5sUGFyYW0gPSAwOwotCi0gICAgZGlzcGF0Y2hO
UEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnNob3coKQotewotICAgIHNl
dFNlbGZWaXNpYmxlKHRydWUpOwotCi0gICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpCi0gICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSwgU1dfU0hPV05BKTsKLQotICAgIFdpZGdldDo6c2hvdygpOwotfQotCi12b2lkIFBsdWdp
blZpZXc6OmhpZGUoKQotewotICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsKLQotICAgIGlmIChp
c1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICBTaG93
V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJREUpOwotCi0gICAgV2lkZ2V0Ojpo
aWRlKCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIG5w
RXZlbnQpCi17Ci0gICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgYm9vbCBzaG91bGRQb3AgPSBmYWxzZTsKLQotICAgIGlm
IChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dmVyc2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VO
QUJMRURfU1RBVEUgJiYgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKG5wRXZlbnQuZXZlbnQp
KSB7Ci0gICAgICAgIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUodHJ1ZSk7Ci0gICAgICAgIHNob3Vs
ZFBvcCA9IHRydWU7Ci0gICAgfQotCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOwotICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKLQotICAgIGlmIChzaG91bGRQb3ApIAotICAgICAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUo
KTsKLQotICAgIHJldHVybiBhY2NlcHRlZDsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQoSERDIGhkYykKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7
Ci0gICAgICAgIFNlbmRNZXNzYWdlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJ
RU5ULCByZWludGVycHJldF9jYXN0PFdQQVJBTT4oaGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElM
RFJFTiB8IFBSRl9PV05FRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25wV2lu
ZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKLSAgICBtX25wV2luZG93LndpbmRvdyA9
IGhkYzsKLQotICAgIFdJTkRPV1BPUyB3aW5kb3dwb3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAg
fTsKLQotICAgIEludFJlY3QgciA9IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8RnJh
bWVWaWV3PihwYXJlbnQoKSksIGZyYW1lUmVjdCgpKTsKLQotICAgIHdpbmRvd3Bvcy54ID0gci54
KCk7Ci0gICAgd2luZG93cG9zLnkgPSByLnkoKTsKLSAgICB3aW5kb3dwb3MuY3ggPSByLndpZHRo
KCk7Ci0gICAgd2luZG93cG9zLmN5ID0gci5oZWlnaHQoKTsKLQotICAgIE5QRXZlbnQgbnBFdmVu
dDsKLSAgICBucEV2ZW50LmV2ZW50ID0gV01fV0lORE9XUE9TQ0hBTkdFRDsKLSAgICBucEV2ZW50
LmxQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pigmd2luZG93cG9zKTsKLSAgICBu
cEV2ZW50LndQYXJhbSA9IDA7Ci0KLSAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Ci0KLSAg
ICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOwotCi0gICAgbnBFdmVudC5ldmVudCA9IFdN
X1BBSU5UOwotICAgIG5wRXZlbnQud1BhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGhkYyk7Ci0KLSAgICAvLyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGEgcG9pbnRlciB0byB0aGUg
ZGlydHkgcmVjdCwgYnV0IGl0IHNlZW1zIHRoYXQgdGhlIEZsYXNoIHBsdWdpbgotICAgIC8vIGln
bm9yZXMgaXQgc28gd2UganVzdCBwYXNzIG51bGwuCi0gICAgbnBFdmVudC5sUGFyYW0gPSAwOwot
Ci0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBh
aW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgIVVTRShXSU5HREkpCi0gICAgQVNTRVJUKG1faXNX
aW5kb3dlZCk7Ci0gICAgQVNTRVJUKGNvbnRleHQtPnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3Mo
KSk7Ci0KLSAgICBJbnRQb2ludCBsb2NhdGlvbkluV2luZG93ID0gZG93bmNhc3Q8RnJhbWVWaWV3
PigqcGFyZW50KCkpLmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVSZWN0KCkubG9jYXRp
b24oKSk7Ci0KLSAgICBMb2NhbFdpbmRvd3NDb250ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQs
IGZyYW1lUmVjdCgpLCBmYWxzZSk7Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgLy8gTXVzdCBmbHVz
aCBkcmF3aW5ncyB1cCB0byB0aGlzIHBvaW50IHRvIHRoZSBiYWNraW5nIG1ldGFmaWxlLCBvdGhl
cndpc2UgdGhlCi0gICAgLy8gcGx1Z2luIHJlZ2lvbiB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGgg
YW55IGNsZWFyIHJlZ2lvbnMgc3BlY2lmaWVkIGluIHRoZQotICAgIC8vIGNhaXJvLWNvbnRyb2xs
ZWQgcG9ydGlvbnMgb2YgdGhlIHJlbmRlcmluZy4KLSAgICBjYWlyb19zaG93X3BhZ2UoY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwotI2VuZGlmCi0KLSAgICBIREMgaGRjID0gd2lu
ZG93c0NvbnRleHQuaGRjKCk7Ci0gICAgWEZPUk0gb3JpZ2luYWxUcmFuc2Zvcm07Ci0gICAgR2V0
V29ybGRUcmFuc2Zvcm0oaGRjLCAmb3JpZ2luYWxUcmFuc2Zvcm0pOwotCi0gICAgLy8gVGhlIHBs
dWdpbiBleHBlY3RzIHRoZSBEQyB0byBiZSBpbiBjbGllbnQgY29vcmRpbmF0ZXMsIHNvIHdlIHRy
YW5zbGF0ZQotICAgIC8vIHRoZSBEQyB0byBtYWtlIHRoYXQgc28uCi0gICAgQWZmaW5lVHJhbnNm
b3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwotICAgIGN0bS50cmFuc2xhdGUobG9jYXRpb25J
bldpbmRvdy54KCksIGxvY2F0aW9uSW5XaW5kb3cueSgpKTsKLSAgICBYRk9STSB0cmFuc2Zvcm0g
PSBzdGF0aWNfY2FzdDxYRk9STT4oY3RtLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0KLSAg
ICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ0cmFuc2Zvcm0pOwotCi0gICAgcGFpbnRJbnRvVHJh
bnNmb3JtZWRDb250ZXh0KGhkYyk7Ci0KLSAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmln
aW5hbFRyYW5zZm9ybSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFt
X2lzU3RhcnRlZCkgewotICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdl
Ci0gICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGNhbGxlZCBTZXRX
aW5kb3cgYmVmb3JlIHdlIHRyeSB0byBwYWludC4KLSAgICBpZiAoIW1faGF2ZUNhbGxlZFNldFdp
bmRvdykKLSAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKLQotICAgIGlmICht
X2lzV2luZG93ZWQpIHsKLSNpZiAhVVNFKFdJTkdESSkKLSAgICAgICAgaWYgKGNvbnRleHQtPnNo
b3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSkKLSAgICAgICAgICAgIHBhaW50V2luZG93ZWRQbHVn
aW5JbnRvQ29udGV4dChjb250ZXh0LCByZWN0KTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gSW4gdGhlIEdUSyBhbmQgUXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZz
Y3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2luZG93Ci0gICAgLy8gY29v
cmRpbmF0ZXMuCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIEludFJlY3QgcmVjdEluV2luZG93KHJl
Y3QpOwotICAgIHJlY3RJbldpbmRvdy5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOwotI2Vsc2UKLSAg
ICBJbnRSZWN0IHJlY3RJbldpbmRvdyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5j
b250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKTsKLSNlbmRpZgotICAgIExvY2FsV2luZG93c0Nv
bnRleHQgd2luZG93c0NvbnRleHQoY29udGV4dCwgcmVjdEluV2luZG93LCBtX2lzVHJhbnNwYXJl
bnQpOwotCi0gICAgLy8gT24gU2FmYXJpL1dpbmRvd3Mgd2l0aG91dCB0cmFuc3BhcmVuY3kgbGF5
ZXJzIHRoZSBHcmFwaGljc0NvbnRleHQgcmV0dXJucyB0aGUgSERDCi0gICAgLy8gb2YgdGhlIHdp
bmRvdyBhbmQgdGhlIHBsdWdpbiBleHBlY3RzIHRoYXQgdGhlIHBhc3NlZCBpbiBEQyBoYXMgd2lu
ZG93IGNvb3JkaW5hdGVzLgotICAgIC8vIEluIHRoZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGFsd2F5
cyBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIHRoZXJlZm9yZSBuZWVkCi0gICAgLy8g
dG8gcHJlc2VydmUgdGhlIHRyYW5zbGF0aW9uIHNldCBpbiBnZXRXaW5kb3dzQ29udGV4dC4KLSNp
ZiAhUExBVEZPUk0oR1RLKQotICAgIGlmICghY29udGV4dC0+aXNJblRyYW5zcGFyZW5jeUxheWVy
KCkpIHsKLSAgICAgICAgWEZPUk0gdHJhbnNmb3JtOwotICAgICAgICBHZXRXb3JsZFRyYW5zZm9y
bSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRyYW5zZm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybS5l
RHggPSAwOwotICAgICAgICB0cmFuc2Zvcm0uZUR5ID0gMDsKLSAgICAgICAgU2V0V29ybGRUcmFu
c2Zvcm0od2luZG93c0NvbnRleHQuaGRjKCksICZ0cmFuc2Zvcm0pOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KHdpbmRvd3NDb250ZXh0LmhkYygpKTsK
LX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQq
IGV2ZW50KQotewotICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKLQotICAg
IE5QRXZlbnQgbnBFdmVudDsKLQotICAgIG5wRXZlbnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUo
KTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQp
IHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWURPV047Ci0gICAgICAgIG5wRXZlbnQu
bFBhcmFtID0gMDsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmtleXByZXNzRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0NIQVI7Ci0gICAg
ICAgIG5wRXZlbnQubFBhcmFtID0gMDsKLSAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tF
WVVQOwotICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLX0KLQotZXh0ZXJu
IGJvb2wgaWdub3JlTmV4dFNldEN1cnNvcjsKLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3Vz
ZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQotewotICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9p
c1dpbmRvd2VkKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLQotICAgIEludFBvaW50IHAgPSBj
b250ZW50c1RvTmF0aXZlV2luZG93KGRvd25jYXN0PEZyYW1lVmlldz4ocGFyZW50KCkpLCBJbnRQ
b2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKLQotICAgIG5wRXZlbnQubFBh
cmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkpOwotICAgIG5wRXZlbnQud1BhcmFtID0gMDsK
LQotICAgIGlmIChldmVudC0+Y3RybEtleSgpKQotICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBN
S19DT05UUk9MOwotICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKLSAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfU0hJRlQ7Ci0KLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vtb3ZlRXZlbnQgfHwKLSAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2VvdXRFdmVudCB8fCAKLSAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9W
RTsKLSAgICAgICAgaWYgKGV2ZW50LT5idXR0b25Eb3duKCkpCi0gICAgICAgICAgICBzd2l0Y2gg
KGV2ZW50LT5idXR0b24oKSkgewotICAgICAgICAgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKLSAg
ICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTEJVVFRPTjsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246Ci0g
ICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX01CVVRUT047Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246Ci0g
ICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1JCVVRUT047Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7Ci0gICAgICAgIGZvY3Vz
UGx1Z2luRWxlbWVudCgpOwotICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewotICAg
ICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVU
VE9ORE9XTjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMToKLSAg
ICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTkRPV047Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgbnBFdmVu
dC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVw
RXZlbnQpIHsKLSAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgMDoKLSAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9OVVA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdN
X1JCVVRUT05VUDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxz
ZQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgIC8vIEZJWE1FOiBDb25z
aWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUu
Ci0gICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7Ci0KLSNpZiAhUExBVEZPUk0oR1RLKQotICAgIC8vIEN1cnJlbnRseSwg
V2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGlu
IEV2ZW50SGFuZGxlci5jcHAKLSAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdl
IHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCi0g
ICAgaWdub3JlTmV4dFNldEN1cnNvciA9IHRydWU7Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3Bh
cmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNldExh
c3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKTsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCi17Ci0gICAgV2lkZ2V0OjpzZXRQYXJl
bnQocGFyZW50KTsKLQotICAgIGlmIChwYXJlbnQpCi0gICAgICAgIGluaXQoKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIC8vIElmIHRoZSBwbHVnLWluIHdpbmRvdyBvciBvbmUgb2YgaXRzIGNo
aWxkcmVuIGhhdmUgdGhlIGZvY3VzLCB3ZSBuZWVkIHRvIAotICAgICAgICAvLyBjbGVhciBpdCB0
byBwcmV2ZW50IHRoZSB3ZWIgdmlldyB3aW5kb3cgZnJvbSBiZWluZyBmb2N1c2VkIGJlY2F1c2Ug
dGhhdCBjYW4KLSAgICAgICAgLy8gdHJpZ2dlciBhIGxheW91dCB3aGlsZSB0aGUgcGx1Z2luIGVs
ZW1lbnQgaXMgYmVpbmcgZGV0YWNoZWQuCi0gICAgICAgIEhXTkQgZm9jdXNlZFdpbmRvdyA9IDo6
R2V0Rm9jdXMoKTsKLSAgICAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNl
ZFdpbmRvdyB8fCA6OklzQ2hpbGQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRv
dykpCi0gICAgICAgICAgICA6OlNldEZvY3VzKDApOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAoaXNQYXJlbnRW
aXNpYmxlKCkgPT0gdmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2lkZ2V0OjpzZXRQ
YXJlbnRWaXNpYmxlKHZpc2libGUpOwotCi0gICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0
Zm9ybVBsdWdpbldpZGdldCgpKSB7Ci0gICAgICAgIGlmICh2aXNpYmxlKQotICAgICAgICAgICAg
U2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19TSE9XTkEpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJ
REUpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1faXNTdGFydGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBJbiB0aGUgR1RLIHBvcnQgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVy
IGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2luZG93Ci0gICAgLy8gY29vcmRpbmF0ZXMuCi0j
IGlmIFBMQVRGT1JNKEdUSykKLSAgICBJbnRQb2ludCBwID0gcmVjdC5sb2NhdGlvbigpOwotIyBl
bHNlCi0gICAgSW50UG9pbnQgcCA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250
ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7Ci0jIGVuZGlmCi0gICAgbV9ucFdpbmRvdy54
ID0gcC54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0gcC55KCk7Ci0KLSAgICBtX25wV2luZG93Lndp
ZHRoID0gcmVjdC53aWR0aCgpOwotICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQo
KTsKLQotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7Ci0gICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOwotICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QubGVmdCA9IDA7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwot
Ci0gICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKLSAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7
Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotCi0gICAgICAgIG1faGF2ZUNhbGxl
ZFNldFdpbmRvdyA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwot
Ci0gICAgICAgIFdORFBST0MgY3VycmVudFduZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25n
UHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQyk7Ci0gICAgICAgIGlmIChj
dXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3V25kUHJvYykKLSAgICAgICAgICAgIG1fcGx1Z2lu
V25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpUGx1Z2luVmlld1duZFByb2MpOwotICAgIH0KLX0K
LQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBi
dWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQotewotICAgIFN0cmluZyBmaWxl
bmFtZShidWYsIGxlbik7Ci0KLSAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8i
KSkKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7Ci0KLSAgICAvLyBH
ZXQgZmlsZSBpbmZvCi0gICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyczsKLSAgICBp
ZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeFcoZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWlu
YXRpb24oKS5kYXRhKCksIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJzKSA9PSAwKQotICAg
ICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0KLSAgICBpZiAoYXR0cnMuZHdGaWxl
QXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgcmV0dXJuIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgSEFORExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxl
VyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgRklMRV9S
RUFEX0RBVEEsIEZJTEVfU0hBUkVfUkVBRCwgMCwgT1BFTl9FWElTVElORywgMCwgMCk7Ci0gICAg
Ci0gICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgIHJl
dHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIGJ1ZmZlci5yZXNpemUoYXR0cnMubkZp
bGVTaXplTG93KTsKLQotICAgIERXT1JEIGJ5dGVzUmVhZDsKLSAgICBpbnQgcmV0dmFsID0gUmVh
ZEZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYXR0cnMubkZpbGVTaXplTG93LCAmYnl0
ZXNSZWFkLCAwKTsKLQotICAgIENsb3NlSGFuZGxlKGZpbGVIYW5kbGUpOwotCi0gICAgaWYgKHJl
dHZhbCA9PSAwIHx8IGJ5dGVzUmVhZCAhPSBhdHRycy5uRmlsZVNpemVMb3cpCi0gICAgICAgIHJl
dHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQotICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
LX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxl
LCB2b2lkKiwgTlBFcnJvciopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFBsdWdp
blZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVl
LCBOUEVycm9yKiByZXN1bHQpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotICAgICAgICBj
YXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAgICAgICAgICAgSFdORCogdyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SFdORCo+KHZhbHVlKTsKLSAgICAgICAgICAgICp3ID0gd2luZG93SGFuZGxlRm9y
UGFnZUNsaWVudChwYXJlbnQoKSA/IHBhcmVudCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFn
ZUNsaWVudCgpIDogMCk7Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlN1
cHBvcnRzV2luZG93bGVzczogewotICAgICAgICAgICAgTlBCb29sKiBmbGFnID0gcmVpbnRlcnBy
ZXRfY2FzdDxOUEJvb2wqPih2YWx1ZSk7Ci0gICAgICAgICAgICAqZmxhZyA9IFRSVUU7Ci0gICAg
ICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgUkVDVCBpbnZhbGlkUmVj
dCA9IHsgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgfTsKLSAg
ICAgICAgOjpJbnZhbGlkYXRlUmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmaW52YWxpZFJl
Y3QsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludmFsaWRhdGVXaW5k
b3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdChOUFJlY3QqIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0KSB7Ci0gICAgICAgIGludmFsaWRh
dGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEludFJlY3QgcihyZWN0LT5sZWZ0
LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVj
dC0+dG9wKTsKLQotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgUkVDVCBpbnZhbGlk
UmVjdCA9IHsgci54KCksIHIueSgpLCByLm1heFgoKSwgci5tYXhZKCkgfTsKLSAgICAgICAgSW52
YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRSZWN0LCBGQUxTRSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkpIHsKLSAgICAgICAgICAgIG1faW52YWxpZFJl
Y3RzLmFwcGVuZChyKTsKLSAgICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3Rp
dmUoKSkKLSAgICAgICAgICAgICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4w
MDEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGludmFsaWRhdGVSZWN0KHIpOwotICAg
IH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lv
bikKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSRUNU
IHI7Ci0KLSAgICBpZiAoR2V0UmduQm94KHJlZ2lvbiwgJnIpID09IDApIHsKLSAgICAgICAgaW52
YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50UmVjdCByZWN0KElu
dFBvaW50KHIubGVmdCwgci50b3ApLCBJbnRTaXplKHIucmlnaHQtci5sZWZ0LCByLmJvdHRvbS1y
LnRvcCkpOwotICAgIGludmFsaWRhdGVSZWN0KHJlY3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6
OmZvcmNlUmVkcmF3KCkKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKQotICAgICAgICA6OlVwZGF0
ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIDo6VXBk
YXRlV2luZG93KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQocGFyZW50KCkgPyBwYXJlbnQoKS0+
aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSA6IDApKTsKLX0KLQotYm9vbCBQbHVn
aW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKLXsKLSAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAg
IEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOwotCi0g
ICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICByZWdpc3RlclBsdWdpblZpZXcoKTsKLSAg
ICAgICAgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKGhvb2tlZEJlZ2luUGFpbnQsIGhvb2tl
ZEVuZFBhaW50KTsKLQotICAgICAgICBEV09SRCBmbGFncyA9IFdTX0NISUxEOwotICAgICAgICBp
ZiAoaXNTZWxmVmlzaWJsZSgpKQotICAgICAgICAgICAgZmxhZ3MgfD0gV1NfVklTSUJMRTsKLQot
ICAgICAgICBIV05EIHBhcmVudFdpbmRvd0hhbmRsZSA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGll
bnQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVu
dCgpKTsKLSAgICAgICAgSFdORCB3aW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVn
aW5WaWV3ZG93Q2xhc3NOYW1lLCAwLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIDAsIDAsIHBhcmVudFdpbmRvd0hhbmRsZSwgMCwgV2ViQ29yZTo6
aW5zdGFuY2VIYW5kbGUoKSwgMCk7Ci0KLSNpZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEsp
Ci0gICAgICAgIG1fd2luZG93ID0gd2luZG93OwotI2Vsc2UKLSAgICAgICAgc2V0UGxhdGZvcm1X
aWRnZXQod2luZG93KTsKLSNlbmRpZgotCi0gICAgICAgIC8vIENhbGxpbmcgU2V0V2luZG93TG9u
Z1B0ckEgaGVyZSBtYWtlcyB0aGUgd2luZG93IHByb2MgQVNDSUksIHdoaWNoIGlzIHJlcXVpcmVk
IGJ5IGF0IGxlYXN0Ci0gICAgICAgIC8vIHRoZSBTaG9ja3dhdmUgRGlyZWN0b3IgcGx1Zy1pbi4K
LSNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAgICA6OlNldFdpbmRvd0xvbmdQ
dHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRSKURlZldp
bmRvd1Byb2NBKTsKLSNlbHNlCi0gICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MsIChMT05HKURlZldpbmRvd1Byb2NBKTsKLSNlbmRp
ZgotICAgICAgICBTZXRQcm9wKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIGtXZWJQbHVnaW5WaWV3
UHJvcGVydHksIHRoaXMpOwotCi0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlw
ZVdpbmRvdzsKLSAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSBwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlw
ZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7Ci0gICAgfQotCi0gICAg
dXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci0KLSAgICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkKLSAgICAgICAgc2V0TlBX
aW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEZXN0cm95V2luZG93KHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpOwotICAgIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KDApOwotfQotCi1QYXNz
UmVmUHRyPEltYWdlPiBQbHVnaW5WaWV3OjpzbmFwc2hvdCgpCi17Ci0jaWYgIVBMQVRGT1JNKEdU
SykgJiYgIVVTRShXSU5HREkpCi0gICAgYXV0byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0
ZUNvbXBhdGlibGVEQygwKSk7Ci0KLSAgICBpZiAoIW1faXNXaW5kb3dlZCkgewotICAgICAgICAv
LyBFbmFibGUgd29ybGQgdHJhbnNmb3Jtcy4KLSAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYy5n
ZXQoKSwgR01fQURWQU5DRUQpOwotCi0gICAgICAgIFhGT1JNIHRyYW5zZm9ybTsKLSAgICAgICAg
R2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgpLCAmdHJhbnNmb3JtKTsKLQotICAgICAgICAvLyBX
aW5kb3dsZXNzIHBsdWctaW5zIGFzc3VtZSB0aGF0IHRoZXkncmUgZHJhd2luZyBvbnRvIHRoZSB2
aWV3J3MgREMuCi0gICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBw
bHVnLWluIGRyYXdzIGF0ICgwLCAwKS4KLSAgICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBkb3du
Y2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSku
bG9jYXRpb24oKTsKLSAgICAgICAgdHJhbnNmb3JtLmVEeCA9IC1wb3NpdGlvbi54KCk7Ci0gICAg
ICAgIHRyYW5zZm9ybS5lRHkgPSAtcG9zaXRpb24ueSgpOwotICAgICAgICBTZXRXb3JsZFRyYW5z
Zm9ybShoZGMuZ2V0KCksICZ0cmFuc2Zvcm0pOwotICAgIH0KLQotICAgIHZvaWQqIGJpdHM7Ci0g
ICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChmcmFtZVJlY3Qo
KS5zaXplKCkpOwotICAgIGF1dG8gaGJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2Vj
dGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9SUywgJmJpdHMsIDAsIDApKTsKLQotICAgIEhCSVRN
QVAgaGJtcE9sZCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KFNlbGVjdE9iamVjdChoZGMuZ2V0KCks
IGhibXAuZ2V0KCkpKTsKLQotICAgIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChoZGMuZ2V0
KCkpOwotCi0gICAgU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICByZXR1
cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShoYm1wLmdldCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7
Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2ogYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvagppbmRleCBmZjc1MGJjM2Ez
YTI5MjUwNTFmMTg0NjU1OGMxMDhmNmEzYzA4ZGY4Li5iMDI4MDUwNTlmODQ4ZDgxYzcwMTU0YWE1
ODNlNTIxODhjZWJiMzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L1dlYktpdC9XZWJLaXQudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9q
L1dlYktpdC9XZWJLaXQudmN4cHJvagpAQCAtMjk0LDYgKzI5NCwxNiBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxXZWJEYXRhYmFzZVByb3ZpZGVyLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXGNmXFdlYkNvcmVT
dXBwb3J0XFdlYkluc3BlY3RvckNsaWVudENGLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXG5wYXBpLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRlYnVnLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFt
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdp
blZpZXcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNc
UGx1Z2luRGF0YWJhc2VXaW4uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c
d2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlV2luLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXdXaW4u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVCYXNl
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9j
dW1lbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2li
bGVJbWFnZS5jcHAiIC8+CkBAIC00MzYsNiArNDQ2LDE0IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VUcmFja2VyQ2xpZW50LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdlYkRhdGFiYXNlUHJvdmlkZXIuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVBy
b3ZpZGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQ
bHVnaW5EYXRhYmFzZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBs
dWdpbnNcUGx1Z2luRGVidWcuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdp
blxQbHVnaW5zXFBsdWdpblBhY2thZ2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XC4uXHdpblxQbHVnaW5zXFBsdWdpblF1aXJrU2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5TdHJhdGVneS5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFtLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5WaWV3LmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJs
ZUJhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxl
RG9jdW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3Np
YmxlSW1hZ2UuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ov
V2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hw
cm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0ZXJzCmluZGV4IDA5NGY2MGE5YjE5MTE3ZTNk
MThmZTVlN2I5Yzk1MDY3OGUyOGM0MzQuLmVkMzE4ZGJiOTZjMGNlNjVlMWJlMjEwOTc2NWMxNjMx
YjdkMjZiOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0
L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJv
ai9XZWJLaXQvV2ViS2l0LnZjeHByb2ouZmlsdGVycwpAQCAtMjE3LDYgKzIxNywzNiBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFdlYlNlcmlhbGl6ZWRKU1ZhbHVlLmNwcCI+
CiAgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXG5wYXBpLmNwcCI+CisgICAgICA8
RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRhdGFiYXNlLmNwcCI+CisgICAgICA8
RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRlYnVnLmNwcCI+CisgICAgICA8Rmls
dGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIj4KKyAgICAgIDxGaWx0
ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFtLmNwcCI+CisgICAgICA8RmlsdGVy
PlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXcuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291
cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJhc2VXaW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+
U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAiPgorICAg
ICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5QYWNrYWdlV2luLmNwcCI+Cisg
ICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXdXaW4uY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxTdG9yYWdlQXJlYUltcGwuY3BwIj4KICAgICAg
IDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNTU4LDYgKzU4
OCwyNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFdlYkNvcmVTdXBwb3J0
XEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgiPgogICAgICAgPEZpbHRlcj5XZWJDb3Jl
U3VwcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJhc2UuaCI+CisgICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGVidWcuaCI+CisgICAgICA8RmlsdGVyPkhl
YWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luUGFja2FnZS5oIj4KKyAgICAgIDxGaWx0ZXI+
SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5RdWlya1NldC5oIj4KKyAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5TdHJlYW0uaCI+CisgICAgICA8Rmls
dGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luVmlldy5oIj4KKyAgICAgIDxGaWx0
ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgi
PgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0b3JhZ2VcU3RvcmFnZUFyZWFJbXBsLmgi
PgogICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BhaW50SG9va3MuYXNtIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTA4ODEzNTZh
MGRkY2Q3ODMwNzI4MTFlOWYxNWExMTU5NGIxODVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQpAQCAtMCwwICsxLDUwIEBACis7LyoK
KzsgICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorOworOyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCis7ICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorOyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCis7Cis7ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorOyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworOyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorOyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsqLworCis7SERDIF9fc3RkY2FsbCBfSEJlZ2lu
UGFpbnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNUIGxwUGFpbnQpOworCitQVUJMSUMgIF9IQmVn
aW5QYWludAorCitfVEVYVCAgIFNFR01FTlQKKworX0hCZWdpblBhaW50IFBST0MKKyAgICAgbW92
ICByMTAscmN4CisgICAgIG1vdiAgZWF4LDEwMTdoCisgICAgIHN5c2NhbGwKKyAgICAgcmV0Citf
SEJlZ2luUGFpbnQgRU5EUAorCitfVEVYVCAgIEVORFMKKworO0JPT0wgX19zdGRjYWxsIF9IRW5k
UGFpbnQoSFdORCBoV25kLCBjb25zdCBQQUlOVFNUUlVDVCogbHBQYWludCk7CisKK1BVQkxJQyAg
X0hFbmRQYWludAorCitfVEVYVCAgIFNFR01FTlQKKworX0hFbmRQYWludCBQUk9DCisgICAgbW92
ICByMTAscmN4CisgICAgbW92ICBlYXgsMTAxOWgKKyAgICBzeXNjYWxsCisgICAgcmV0CitfSEVu
ZFBhaW50IEVORFAKKworX1RFWFQgICBFTkRTCisKK0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYmEyY2VlMmRhNzJjYWYxNGI3
NWNmMzZmYWFkMTRiNzVlNTc0ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDsKKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCitzdGF0aWMgY29uc3Qgc2l6
ZV90IG1heGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVNpemUgPSAzMjc2ODsKKwor
c3RhdGljIGJvb2wgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOworCitT
dHJpbmcmIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpCit7CisgICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY2FjaGVQYXRoLCAoKSk7CisgICAgcmV0
dXJuIGNhY2hlUGF0aDsKK30KKyNlbmRpZgorCitQbHVnaW5EYXRhYmFzZTo6UGx1Z2luRGF0YWJh
c2UoKQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgOiBt
X3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQoZmFsc2UpCisjZW5kaWYKK3sKK30KKwor
UGx1Z2luRGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKGJvb2wgcG9w
dWxhdGUpCit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBwbHVnaW5zID0gMDsKKworICAg
IGlmICghcGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlOwor
CisgICAgICAgIGlmIChwb3B1bGF0ZSkgeworICAgICAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2lu
RGlyZWN0b3JpZXMoUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpKTsK
KyAgICAgICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBwbHVnaW5zOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc01JTUVUeXBlUmVn
aXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlw
ZXMuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBObyBw
bHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGlu
ZyBhZ2FpbgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5j
b250YWlucyhtaW1lVHlwZSkpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBs
dWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKK3sKKyAgICBtX3BsdWdpbkRp
cmVjdG9yaWVzLmFwcGVuZChkaXJlY3RvcnkpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQ
bHVnaW5EYXRhYmFzZTo6cmVmcmVzaCgpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKKyAgICBpZiAoIW1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRl
ZCkKKyAgICAgICAgbG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKyAgICBi
b29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIGlmICghbV9wbHVnaW5zLmlzRW1w
dHkoKSkgeworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkOworICAgICAgICBnZXRE
ZWxldGVkUGx1Z2lucyhwbHVnaW5zVG9VbmxvYWQpOworCisgICAgICAgIC8vIFVubG9hZCBwbHVn
aW5zCisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGx1Z2luc1RvVW5s
b2FkLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
bHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgcmVt
b3ZlKGl0LT5nZXQoKSk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9V
bmxvYWQuaXNFbXB0eSgpOworICAgIH0KKworICAgIEhhc2hTZXQ8U3RyaW5nPiBwYXRoczsKKyAg
ICBnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMocGF0aHMpOworCisgICAgSGFzaE1hcDxTdHJp
bmcsIHRpbWVfdD4gcGF0aHNXaXRoVGltZXM7CisKKyAgICAvLyBXZSBzaG91bGQgb25seSBza2lw
IHVuY2hhbmdlZCBmaWxlcyBpZiB3ZSBkaWRuJ3QgcmVtb3ZlIGFueSBwbHVnaW5zIGFib3ZlLiBJ
ZiB3ZSBkaWQgcmVtb3ZlCisgICAgLy8gYW55IHBsdWdpbnMsIHdlIG5lZWQgdG8gbG9vayBhdCBl
dmVyeSBwbHVnaW4gZmlsZSBzbyB0aGF0LCBlLmcuLCBpZiB0aGUgdXNlciBoYXMgdHdvIHZlcnNp
b25zCisgICAgLy8gb2YgUmVhbFBsYXllciBpbnN0YWxsZWQgYW5kIGp1c3QgcmVtb3ZlZCB0aGUg
bmV3ZXIgb25lLCB3ZSdsbCBwaWNrIHVwIHRoZSBvbGRlciBvbmUuCisgICAgYm9vbCBzaG91bGRT
a2lwVW5jaGFuZ2VkRmlsZXMgPSAhcGx1Z2luU2V0Q2hhbmdlZDsKKworICAgIEhhc2hTZXQ8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgcGF0aHNFbmQgPSBwYXRocy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBpdCAhPSBw
YXRoc0VuZDsgKytpdCkgeworICAgICAgICB0aW1lX3QgbGFzdE1vZGlmaWVkOworICAgICAgICBp
ZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKCppdCwgbGFzdE1vZGlmaWVkKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIHBhdGhzV2l0aFRpbWVzLmFkZCgqaXQsIGxhc3RNb2Rp
ZmllZCk7CisKKyAgICAgICAgLy8gSWYgdGhlIHBhdGgncyB0aW1lc3RhbXAgaGFzbid0IGNoYW5n
ZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSByYW4gcmVmcmVzaCgpLCB3ZSBkb24ndCBoYXZlIHRv
IGRvIGFueXRoaW5nLgorICAgICAgICBpZiAoc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzICYmIG1f
cGx1Z2luUGF0aHNXaXRoVGltZXMuZ2V0KCppdCkgPT0gbGFzdE1vZGlmaWVkKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBvbGRQYWNr
YWdlID0gbV9wbHVnaW5zQnlQYXRoLmdldCgqaXQpKSB7CisgICAgICAgICAgICBBU1NFUlQoIXNo
b3VsZFNraXBVbmNoYW5nZWRGaWxlcyB8fCBvbGRQYWNrYWdlLT5sYXN0TW9kaWZpZWQoKSAhPSBs
YXN0TW9kaWZpZWQpOworICAgICAgICAgICAgcmVtb3ZlKG9sZFBhY2thZ2UuZ2V0KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKCppdCwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgaWYgKHBh
Y2thZ2UgJiYgYWRkKHBhY2thZ2UucmVsZWFzZSgpKSkKKyAgICAgICAgICAgIHBsdWdpblNldENo
YW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIENhY2hlIGFsbCB0aGUgcGF0aHMgd2UgZm91
bmQgd2l0aCB0aGVpciB0aW1lc3RhbXBzIGZvciBuZXh0IHRpbWUuCisgICAgcGF0aHNXaXRoVGlt
ZXMuc3dhcChtX3BsdWdpblBhdGhzV2l0aFRpbWVzKTsKKworICAgIGlmICghcGx1Z2luU2V0Q2hh
bmdlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9NRVRBREFUQV9DQUNIRSkKKyAgICB1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOwor
I2VuZGlmCisKKyAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKKworICAgIC8vIFJl
Z2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8g
R2V0IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKKyAgICAg
ICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCkt
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1h
cF9lbmQ7ICsrbWFwX2l0KQorICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZCht
YXBfaXQtPmtleSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZlY3RvcjxQbHVn
aW5QYWNrYWdlKj4gUGx1Z2luRGF0YWJhc2U6OnBsdWdpbnMoKSBjb25zdAoreworICAgIFZlY3Rv
cjxQbHVnaW5QYWNrYWdlKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQg
UGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUoY29uc3Qgdm9pZCogYSwgY29u
c3Qgdm9pZCogYikKK3sKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5BID0gKnN0YXRpY19jYXN0
PFBsdWdpblBhY2thZ2UqIGNvbnN0Kj4oYSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luQiA9
ICpzdGF0aWNfY2FzdDxQbHVnaW5QYWNrYWdlKiBjb25zdCo+KGIpOworCisgICAgcmV0dXJuIHBs
dWdpbkEtPmNvbXBhcmUoKnBsdWdpbkIpOworfQorCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRh
YmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBp
ZiAobWltZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBr
ZXkgPSBtaW1lVHlwZS5sb3dlcigpOworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOworICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9
IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQoa2V5KTsKKyAgICBpZiAocHJlZmVycmVkUGx1Z2luCisg
ICAgICAgICYmIHByZWZlcnJlZFBsdWdpbi0+aXNFbmFibGVkKCkKKyAgICAgICAgJiYgcHJlZmVy
cmVkUGx1Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisgICAgICAg
IHJldHVybiBwcmVmZXJyZWRQbHVnaW47CisgICAgfQorCisgICAgVmVjdG9yPFBsdWdpblBhY2th
Z2UqLCAyPiBwbHVnaW5DaG9pY2VzOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBQ
bHVnaW5QYWNrYWdlKiBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKworICAgICAgICBpZiAoIXBsdWdp
bi0+aXNFbmFibGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocGx1
Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgICAgIGlmICghcGx1Z2luLT5l
bnN1cmVQbHVnaW5Mb2FkZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgor
ICAgICAgICAgICAgcGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1Z2luKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBxc29ydChwbHVnaW5DaG9pY2VzLmRhdGEoKSwgcGx1Z2luQ2hvaWNlcy5zaXplKCks
IHNpemVvZihQbHVnaW5QYWNrYWdlKiksIFBsdWdpbkRhdGFiYXNlOjpwcmVmZXJyZWRQbHVnaW5D
b21wYXJlKTsKKworICAgIHJldHVybiBwbHVnaW5DaG9pY2VzWzBdOworfQorCitTdHJpbmcgUGx1
Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9u
KSBjb25zdAoreworICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKKyAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2Uq
LCAyPiBwbHVnaW5DaG9pY2VzOworICAgIEhhc2hNYXA8UGx1Z2luUGFja2FnZSosIFN0cmluZz4g
bWltZVR5cGVGb3JQbHVnaW47CisKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgh
KCppdCktPmlzRW5hYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRv
RXh0ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4o
KTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBtaW1lVHlw
ZSA9IG1pbWVfaXQtPmtleTsKKyAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBs
dWdpbiA9IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWltZVR5cGUpOworICAgICAgICAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsKKyAgICAgICAg
ICAgIGJvb2wgZm91bmRNYXBwaW5nID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CisgICAgICAg
ICAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9ICgqaXQpLmdldCgpOworCisgICAg
ICAgICAgICAgICAgICAgIGlmIChwcmVmZXJyZWRQbHVnaW4gJiYgUGx1Z2luUGFja2FnZTo6ZXF1
YWwoKnBsdWdpbiwgKnByZWZlcnJlZFBsdWdpbikpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWltZVR5cGU7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NB
Q0hFKQorICAgICAgICAgICAgICAgICAgICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2luTG9hZGVk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICAgICBwbHVnaW5DaG9pY2VzLmFwcGVuZChwbHVnaW4pOworICAgICAgICAgICAgICAg
ICAgICBtaW1lVHlwZUZvclBsdWdpbi5hZGQocGx1Z2luLCBtaW1lVHlwZSk7CisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kTWFwcGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmb3Vu
ZE1hcHBpbmcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAocGx1Z2luQ2hvaWNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KworICAgIHFzb3J0KHBsdWdpbkNob2ljZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUoKSwg
c2l6ZW9mKFBsdWdpblBhY2thZ2UqKSwgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNv
bXBhcmUpOworCisgICAgcmV0dXJuIG1pbWVUeXBlRm9yUGx1Z2luLmdldChwbHVnaW5DaG9pY2Vz
WzBdKTsKK30KKworUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29u
c3QgVVJMJiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKCFtaW1lVHlwZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAg
CisgICAgU3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CisgICAgaWYg
KGZpbGVuYW1lLmVuZHNXaXRoKCcvJykpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlu
dCBleHRlbnNpb25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGlmIChleHRl
bnNpb25Qb3MgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFN0cmluZyBtaW1l
VHlwZUZvckV4dGVuc2lvbiA9IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVuYW1lLnN1YnN0cmlu
ZyhleHRlbnNpb25Qb3MgKyAxKSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2lu
Rm9yTUlNRVR5cGUobWltZVR5cGVGb3JFeHRlbnNpb24pOworICAgIGlmICghcGx1Z2luKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRv
d3MgZm9yIHRoZSBtaW1lIHR5cGUKKyAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0
ZW5zaW9uLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgbWltZVR5cGUgPSBt
aW1lVHlwZUZvckV4dGVuc2lvbjsKKyAgICByZXR1cm4gcGx1Z2luOworfQorCit2b2lkIFBsdWdp
bkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4pCit7CisgICAgaWYgKCFwbHVnaW4gfHwgcGx1
Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICBtX3By
ZWZlcnJlZFBsdWdpbnMuc2V0KG1pbWVUeXBlLmxvd2VyKCksIHBsdWdpbik7Cit9CisKK2Jvb2wg
UGx1Z2luRGF0YWJhc2U6OmZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYg
ZmlsZVBhdGgpIGNvbnN0Cit7CisgICAgLy8gU2tpcCBwbHVnaW4gZmlsZXMgdGhhdCBhcmUgZGlz
YWJsZWQgYnkgZmlsZW5hbWUuCisgICAgaWYgKG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5jb250YWlu
cyhwYXRoR2V0RmlsZU5hbWUoZmlsZVBhdGgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIGZpbGVFeGlzdHMoZmlsZVBhdGgpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNl
OjpnZXREZWxldGVkUGx1Z2lucyhQbHVnaW5TZXQmIHBsdWdpbnMpIGNvbnN0Cit7CisgICAgUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBpZiAoIWZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKCgqaXQp
LT5wYXRoKCkpKQorICAgICAgICAgICAgcGx1Z2lucy5hZGQoKml0KTsKKyAgICB9Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmFkZChQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBycFBhY2th
Z2UpCit7CisgICAgQVNTRVJUX0FSRyhwcnBQYWNrYWdlLCBwcnBQYWNrYWdlKTsKKworICAgIFJl
ZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gcHJwUGFja2FnZTsKKworICAgIGlmICghbV9w
bHVnaW5zLmFkZChwYWNrYWdlKS5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBtX3BsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNr
YWdlKiBwYWNrYWdlKQoreworICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CisgICAgTUlNRVRvRXh0
ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9u
cygpLmVuZCgpOworICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFBsdWdp
blBhY2thZ2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1
Z2lucy5maW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJlZmVy
cmVkUGx1Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2UpCisgICAg
ICAgICAgICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7CisgICAgfQor
CisgICAgbV9wbHVnaW5zLnJlbW92ZShwYWNrYWdlKTsKKyAgICBtX3BsdWdpbnNCeVBhdGgucmVt
b3ZlKHBhY2thZ2UtPnBhdGgoKSk7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmNsZWFyKCkK
K3sKKyAgICBtX3BsdWdpbnMuY2xlYXIoKTsKKyAgICBtX3BsdWdpbnNCeVBhdGguY2xlYXIoKTsK
KyAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLmNsZWFyKCk7CisgICAgbV9yZWdpc3RlcmVkTUlN
RVR5cGVzLmNsZWFyKCk7CisgICAgbV9wcmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7CisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICBtX3BlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlSXNMb2FkZWQgPSBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFBsdWdpbkRhdGFi
YXNlOjpyZW1vdmVEaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sK
KyAgICByZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLnJlbW92ZShmaWxlTmFtZSk7Cit9CisK
K2Jvb2wgUGx1Z2luRGF0YWJhc2U6OmFkZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVOYW1lKQoreworICAgIHJldHVybiBtX2Rpc2FibGVkUGx1Z2luRmlsZXMuYWRkKGZpbGVO
YW1lKS5pc05ld0VudHJ5OworfQorCisjaWYgKCFPUyhXSU5ET1dTKSB8fCAhRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpKQorLy8gRm9yIFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZAorLy8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQg
aWYgd2UgY2FuIHVzZSBXZWJDb3JlIGNvbnN0cnVjdHMKKy8vIGZvciB0aGUgbG9naWMgd2Ugc2hv
dWxkIHBlcmhhcHMgbW92ZSBpdCBoZXJlIHVuZGVyIFhQX1dJTj8KKworVmVjdG9yPFN0cmluZz4g
UGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCit7CisgICAgVmVjdG9y
PFN0cmluZz4gcGF0aHM7CisKKyAgICAvLyBBZGQgcGF0aHMgc3BlY2lmaWMgdG8gZWFjaCBwbGF0
Zm9ybQorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGggPSBo
b21lRGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmcoIi8u
bW96aWxsYS9wbHVnaW5zIikpOworICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7CisK
KyAgICB1c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisgICAgdXNlclBsdWdp
blBhdGguYXBwZW5kKFN0cmluZygiLy5uZXRzY2FwZS9wbHVnaW5zIikpOworICAgIHBhdGhzLmFw
cGVuZCh1c2VyUGx1Z2luUGF0aCk7CisKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dz
ZXIvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9saWIvbW96aWxsYS9w
bHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9maXJlZm94L3BsdWdpbnMiKTsK
KyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvYnJvd3Nlci1wbHVnaW5zIik7CisgICAgcGF0
aHMuYXBwZW5kKCIvdXNyL2xpYi9icm93c2VyLXBsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQo
Ii91c3IvbGliL21vemlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2Nh
bC9uZXRzY2FwZS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvb3B0L21vemlsbGEvcGx1
Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL29wdC9tb3ppbGxhL2xpYi9wbHVnaW5zIik7Cisg
ICAgcGF0aHMuYXBwZW5kKCIvb3B0L25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBl
bmQoIi9vcHQvbmV0c2NhcGUvY29tbXVuaWNhdG9yL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBl
bmQoIi91c3IvbGliL25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3Iv
bGliL25ldHNjYXBlL3BsdWdpbnMtbGliYzUiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGli
L25ldHNjYXBlL3BsdWdpbnMtbGliYzYiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQv
bmV0c2NhcGUvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9tb3ppbGxh
L3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25zYnJvd3Nlci9wbHVnaW5z
Iik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L25zYnJvd3Nlci9wbHVnaW5zIik7CisK
KyAgICBTdHJpbmcgbW96SG9tZShnZXRlbnYoIk1PWklMTEFfSE9NRSIpKTsKKyAgICBtb3pIb21l
LmFwcGVuZCgiL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQobW96SG9tZSk7CisKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtb3pQYXRoczsKKyAgICBTdHJpbmcgbW96UGF0aChnZXRlbnYoIk1PWl9Q
TFVHSU5fUEFUSCIpKTsKKyAgICBtb3pQYXRoLnNwbGl0KFVDaGFyKCc6JyksIC8qIGFsbG93RW1w
dHlFbnRyaWVzICovIGZhbHNlLCBtb3pQYXRocyk7CisgICAgcGF0aHMuYXBwZW5kVmVjdG9yKG1v
elBhdGhzKTsKKyNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIFN0cmluZyB1c2VyUGx1Z2lu
UGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisgICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0
cmluZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7CisgICAgcGF0aHMuYXBwZW5kKHVz
ZXJQbHVnaW5QYXRoKTsKKyAgICBwYXRocy5hcHBlbmQoIi9MaWJyYXJ5L0ludGVybmV0IFBsdWct
SW5zIik7CisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGgg
PSBob21lRGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmco
IlxcQXBwbGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lucyIpKTsKKyAgICBwYXRocy5hcHBl
bmQodXNlclBsdWdpblBhdGgpOworI2VuZGlmCisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICBTdHJpbmcgcHJlZmVycmVkUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRo
KCk7CisKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3Ry
aW5nKCIvLm1vemlsbGEvcGx1Z2lucyIpKTsKKyNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQorICAg
IHByZWZlcnJlZFBhdGguYXBwZW5kKFN0cmluZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMi
KSk7CisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJp
bmcoIlxcQXBwbGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lucyIpKTsKKyNlbmRpZgorCisg
ICAgLy8gVE9ETzogV2Ugc2hvdWxkIG5vcm1hbGl6ZSB0aGUgcGF0aCBiZWZvcmUgZG9pbmcgYSBj
b21wYXJpc29uLgorICAgIHJldHVybiBwYXRoID09IHByZWZlcnJlZFBhdGg7Cit9CisKK3ZvaWQg
UGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmlu
Zz4mIHBhdGhzKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2Ug
aW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgU3RyaW5nIGZpbGVOYW1lRmlsdGVyKCIqLnNvIik7
CisjZWxzZQorICAgIFN0cmluZyBmaWxlTmFtZUZpbHRlcigiIik7CisjZW5kaWYKKworICAgIFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkaXJzRW5kID0gbV9wbHVnaW5EaXJlY3Rvcmll
cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkSXQgPSBt
X3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2luKCk7IGRJdCAhPSBkaXJzRW5kOyArK2RJdCkgeworICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBwbHVnaW5QYXRocyA9IGxpc3REaXJlY3RvcnkoKmRJdCwgZmls
ZU5hbWVGaWx0ZXIpOworICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGx1
Z2luc0VuZCA9IHBsdWdpblBhdGhzLmVuZCgpOworICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBwSXQgPSBwbHVnaW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1Z2lu
c0VuZDsgKytwSXQpIHsKKyAgICAgICAgICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJs
ZWQoKnBJdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHBhdGhz
LmFkZCgqcEl0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2VuZGlmIC8vICFPUyhXSU5ET1dT
KQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKworc3RhdGlj
IHZvaWQgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgZmls
ZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAwOwor
ICAgIHNpemVfdCBidWZmZXJDYXBhY2l0eSA9IDEwMjQ7CisgICAgYnVmZmVyLnJlc2l6ZShidWZm
ZXJDYXBhY2l0eSk7CisKKyAgICBkbyB7CisgICAgICAgIGJ1ZmZlclNpemUgKz0gcmVhZEZyb21G
aWxlKGZpbGUsIGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJTaXplLCBidWZmZXJDYXBhY2l0eSAtIGJ1
ZmZlclNpemUpOworICAgICAgICBpZiAoYnVmZmVyU2l6ZSA9PSBidWZmZXJDYXBhY2l0eSkgewor
ICAgICAgICAgICAgaWYgKGJ1ZmZlckNhcGFjaXR5IDwgbWF4aW11bVBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlU2l6ZSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlckNhcGFjaXR5ICo9IDI7
CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVhcigpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICAgIGJ1ZmZlci5zaHJpbmsoYnVmZmVy
U2l6ZSk7Cit9CisKK3N0YXRpYyBib29sIHJlYWRVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0U3Ry
aW5nLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKK3sKKyAgICBpZiAoc3RhcnQgPj0g
ZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgbGVuID0gc3RybGVuKHN0YXJ0
KTsKKyAgICByZXN1bHRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXJ0LCBsZW4pOworICAg
IHN0YXJ0ICs9IGxlbiArIDE7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg
cmVhZFRpbWUodGltZV90JiByZXN1bHRUaW1lLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVu
ZCkKK3sKKyAgICBpZiAoc3RhcnQgKyBzaXplb2YodGltZV90KSA+PSBlbmQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBzdHJlYW0gaXMgbm90IG5lY2Vzc2FyeSBhbGlnbmVk
LgorICAgIG1lbWNweSgmcmVzdWx0VGltZSwgc3RhcnQsIHNpemVvZih0aW1lX3QpKTsKKyAgICBz
dGFydCArPSBzaXplb2YodGltZV90KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Y29uc3QgY2hhciBzY2hlbWFWZXJzaW9uID0gJzEnOworc3RhdGljIGNvbnN0IGNoYXIgcGVyc2lz
dGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZVtdID0gIlBsdWdpbk1ldGFkYXRhQ2FjaGUu
YmluIjsKKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hl
KCkKK3sKKyAgICBpZiAoIWlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkgfHwgcGVy
c2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKKyAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBh
dGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRo
KCksIHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmlsZW5hbWUpOworICAgIGZpbGUgPSBv
cGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwgT3BlbkZvclJlYWQpOworCisgICAgaWYgKCFpc0hh
bmRsZVZhbGlkKGZpbGUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXJrIGNhY2hlIGFz
IGxvYWRlZCByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gSWYKKyAgICAvLyB0aGVy
ZSdzIGVycm9yIGluIHRoZSBjYWNoZSwgd2Ugd29uJ3QgdHJ5IHRvIGxvYWQgaXQgYW55bW9yZS4K
KyAgICBtX3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQgPSB0cnVlOworCisgICAgVmVj
dG9yPGNoYXI+IGZpbGVDb250ZW50czsKKyAgICBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxl
KGZpbGUsIGZpbGVDb250ZW50cyk7CisgICAgY2xvc2VGaWxlKGZpbGUpOworCisgICAgaWYgKGZp
bGVDb250ZW50cy5zaXplKCkgPCAyIHx8IGZpbGVDb250ZW50cy5maXJzdCgpICE9IHNjaGVtYVZl
cnNpb24gfHwgZmlsZUNvbnRlbnRzLmxhc3QoKSAhPSAnXDAnKSB7CisgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IHNjaGVtYSIp
OworICAgICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNoYXIqIGJ1ZmZlclBvcyA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyAx
OworICAgIGNoYXIqIGVuZCA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyBmaWxlQ29udGVudHMuc2l6
ZSgpOworCisgICAgUGx1Z2luU2V0IGNhY2hlZFBsdWdpbnM7CisgICAgSGFzaE1hcDxTdHJpbmcs
IHRpbWVfdD4gY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXM7CisgICAgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiA+IGNhY2hlZFBsdWdpbnNCeVBhdGg7CisKKyAgICB3aGls
ZSAoYnVmZmVyUG9zIDwgZW5kKSB7CisgICAgICAgIFN0cmluZyBwYXRoOworICAgICAgICB0aW1l
X3QgbGFzdE1vZGlmaWVkOworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIGRl
c2M7CisgICAgICAgIFN0cmluZyBtaW1lRGVzYzsKKyAgICAgICAgaWYgKCEocmVhZFVURjhTdHJp
bmcocGF0aCwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRUaW1lKGxhc3RN
b2RpZmllZCwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5n
KG5hbWUsIGJ1ZmZlclBvcywgZW5kKQorICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhk
ZXNjLCBidWZmZXJQb3MsIGVuZCkKKyAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcobWlt
ZURlc2MsIGJ1ZmZlclBvcywgZW5kKSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IGRhdGEiKTsKKyAgICAgICAg
ICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gU2tpcCBtZXRhZGF0YSB0aGF0IHBvaW50cyB0byBwbHVn
aW5zIGZyb20gZGlyZWN0b3JpZXMgdGhhdAorICAgICAgICAvLyBhcmUgbm90IHBhcnQgb2YgcGx1
Z2luIGRpcmVjdG9yeSBsaXN0IGFueW1vcmUuCisgICAgICAgIFN0cmluZyBwbHVnaW5EaXJlY3Rv
cnlOYW1lID0gZGlyZWN0b3J5TmFtZShwYXRoKTsKKyAgICAgICAgaWYgKG1fcGx1Z2luRGlyZWN0
b3JpZXMuZmluZChwbHVnaW5EaXJlY3RvcnlOYW1lKSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2Ug
PSBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKHBhdGgsIGxhc3RNb2RpZmll
ZCwgbmFtZSwgZGVzYywgbWltZURlc2MpOworCisgICAgICAgIGlmIChwYWNrYWdlICYmIGNhY2hl
ZFBsdWdpbnMuYWRkKHBhY2thZ2UpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIGNhY2hlZFBs
dWdpblBhdGhzV2l0aFRpbWVzLmFkZChwYWNrYWdlLT5wYXRoKCksIHBhY2thZ2UtPmxhc3RNb2Rp
ZmllZCgpKTsKKyAgICAgICAgICAgIGNhY2hlZFBsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBh
dGgoKSwgcGFja2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3BsdWdpbnMuc3dhcChj
YWNoZWRQbHVnaW5zKTsKKyAgICBtX3BsdWdpbnNCeVBhdGguc3dhcChjYWNoZWRQbHVnaW5zQnlQ
YXRoKTsKKyAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLnN3YXAoY2FjaGVkUGx1Z2luUGF0aHNX
aXRoVGltZXMpOworfQorCitzdGF0aWMgYm9vbCB3cml0ZVVURjhTdHJpbmcoUGxhdGZvcm1GaWxl
SGFuZGxlIGZpbGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIENTdHJpbmcgdXRmOFN0
cmluZyA9IHN0cmluZy51dGY4KCk7CisgICAgaW50IGxlbmd0aCA9IHV0ZjhTdHJpbmcubGVuZ3Ro
KCkgKyAxOworICAgIHJldHVybiB3cml0ZVRvRmlsZShmaWxlLCB1dGY4U3RyaW5nLmRhdGEoKSwg
bGVuZ3RoKSA9PSBsZW5ndGg7Cit9CisKK3N0YXRpYyBib29sIHdyaXRlVGltZShQbGF0Zm9ybUZp
bGVIYW5kbGUgZmlsZSwgY29uc3QgdGltZV90JiB0aW1lKQoreworICAgIHJldHVybiB3cml0ZVRv
RmlsZShmaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmdGltZSksIHNpemVvZih0
aW1lX3QpKSA9PSBzaXplb2YodGltZV90KTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6dXBk
YXRlUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKQoreworICAgIGlmICghaXNQZXJzaXN0ZW50TWV0
YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VBbGxEaXJlY3RvcmllcyhwZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZVBhdGgoKSk7CisgICAgU3RyaW5nIGFic29sdXRlQ2FjaGVQYXRoID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLCBw
ZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lKTsKKyAgICBkZWxldGVGaWxlKGFi
c29sdXRlQ2FjaGVQYXRoKTsKKworICAgIGlmIChtX3BsdWdpbnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKKyAgICBmaWxlID0gb3Bl
bkZpbGUoYWJzb2x1dGVDYWNoZVBhdGgsIE9wZW5Gb3JXcml0ZSk7CisKKyAgICBpZiAoIWlzSGFu
ZGxlVmFsaWQoZmlsZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBwbHVn
aW4gbWV0YWRhdGEgY2FjaGUgZm9yIHNhdmluZyIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2hhciBsb2NhbFNjaGVtYVZlcnNpb24gPSBzY2hlbWFWZXJzaW9uOworICAgIGlmICh3
cml0ZVRvRmlsZShmaWxlLCAmbG9jYWxTY2hlbWFWZXJzaW9uLCAxKSAhPSAxKSB7CisgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBtZXRhZGF0YSBjYWNoZSBzY2hlbWEi
KTsKKyAgICAgICAgY2xvc2VGaWxlKGZpbGUpOworICAgICAgICBkZWxldGVGaWxlKGFic29sdXRl
Q2FjaGVQYXRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgaWYgKCEod3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5wYXRoKCkpCisgICAg
ICAgICAgICAgICYmIHdyaXRlVGltZShmaWxlLCAoKml0KS0+bGFzdE1vZGlmaWVkKCkpCisgICAg
ICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+bmFtZSgpKQorICAgICAg
ICAgICAgICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPmRlc2NyaXB0aW9uKCkpCisg
ICAgICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+ZnVsbE1JTUVEZXNj
cmlwdGlvbigpKSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBs
dWdpbiBtZXRhZGF0YSB0byBjYWNoZSIpOworICAgICAgICAgICAgY2xvc2VGaWxlKGZpbGUpOwor
ICAgICAgICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbG9zZUZpbGUoZmlsZSk7Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkKK3sK
KyAgICByZXR1cm4gZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOworfQor
Cit2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQo
Ym9vbCBpc0VuYWJsZWQpCit7CisgICAgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNF
bmFibGVkID0gaXNFbmFibGVkOworfQorCitTdHJpbmcgUGx1Z2luRGF0YWJhc2U6OnBlcnNpc3Rl
bnRNZXRhZGF0YUNhY2hlUGF0aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBlcnNpc3RlbnRQ
bHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQ
ZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRh
dGFDYWNoZVBhdGgpCit7CisgICAgV2ViQ29yZTo6cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2Fj
aGVQYXRoKCkgPSBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGg7Cit9CisjZW5kaWYKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmM0
OGVjZGZmNmNmMjI0MzU1OTRmOGFlODUyMzAxYTYyNjNjZjg2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCkBAIC0wLDAgKzEsMTE4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsdWdpbkRhdGFiYXNlX2gKKyNkZWZpbmUgUGx1Z2lu
RGF0YWJhc2VfaAorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xh
c3MgSW50U2l6ZTsKKyAgICBjbGFzcyBVUkw7CisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VDbGll
bnQ7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQ
dHI8UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2thZ2VIYXNoLCBQbHVnaW5QYWNrYWdlSGFzaFRy
YWl0cz4gUGx1Z2luU2V0OworCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2UgeworICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShQbHVnaW5EYXRhYmFzZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luRGF0YWJhc2UoKTsKKworICAgICAgICAv
LyBUaGUgZmlyc3QgY2FsbCB0byBpbnN0YWxsZWRQbHVnaW5zIGNyZWF0ZXMgdGhlIHBsdWdpbiBk
YXRhYmFzZQorICAgICAgICAvLyBhbmQgYnkgZGVmYXVsdCBwb3B1bGF0ZXMgaXQgd2l0aCB0aGUg
cGx1Z2lucyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4KKyAgICAgICAgLy8gRm9yIHRlc3Rpbmcg
cHVycG9zZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG5vdCBwb3B1bGF0ZSB0aGUgZGF0YWJhc2UKKyAg
ICAgICAgLy8gYXV0b21hdGljYWxseSwgYXMgdGhlIHBsdWdpbnMgbWlnaHQgYWZmZWN0IHRoZSBE
UlQgcmVzdWx0cyBieQorICAgICAgICAvLyB3cml0aW5nIHRvIGEuby4gc3RkZXJyLgorICAgICAg
ICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIGluc3RhbGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSA9
IHRydWUpOworCisgICAgICAgIGJvb2wgcmVmcmVzaCgpOworICAgICAgICB2b2lkIGNsZWFyKCk7
CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAg
ICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAg
ICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworCisgICAg
ICAgIHN0YXRpYyBib29sIGlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5KTsKKyAgICAgICAgc3RhdGljIGludCBwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNv
bnN0IHZvaWQqLCBjb25zdCB2b2lkKik7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBs
dWdpbihjb25zdCBVUkwmLCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2Fn
ZSogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZv
aWQgc2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
UGx1Z2luUGFja2FnZSogcGx1Z2luKTsKKworICAgICAgICB2b2lkIHNldFBsdWdpbkRpcmVjdG9y
aWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKKyAgICAgICAgeworICAgICAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMgPSBkaXJlY3Rv
cmllczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxl
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgICAgICBib29sIGFkZERpc2FibGVkUGx1Z2lu
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJp
bmc+IGRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBw
bHVnaW5EaXJlY3RvcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luRGlyZWN0b3JpZXM7IH0K
KworICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRl
bnNpb24pIGNvbnN0OworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUp
CisgICAgICAgIHN0YXRpYyBib29sIGlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCk7
CisgICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChi
b29sIGlzRW5hYmxlZCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcGVyc2lzdGVudE1ldGFkYXRh
Q2FjaGVQYXRoKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCk7CisjZW5k
aWYKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9y
aWVzKEhhc2hTZXQ8U3RyaW5nPiYpIGNvbnN0OworICAgICAgICB2b2lkIGdldERlbGV0ZWRQbHVn
aW5zKFBsdWdpblNldCYpIGNvbnN0OworICAgICAgICBib29sIGZpbGVFeGlzdHNBbmRJc05vdERp
c2FibGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgICAgIC8vIFJldHVybnMgd2hldGhl
ciB0aGUgcGx1Z2luIHdhcyBhY3R1YWxseSBhZGRlZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVk
IGlmIGl0J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhpc3RpbmcgcGx1Z2luKS4KKyAgICAgICAgYm9v
bCBhZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPik7CisgICAgICAgIHZvaWQgcmVtb3ZlKFBs
dWdpblBhY2thZ2UqKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hF
KQorICAgICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworICAgICAgICB2
b2lkIHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKworICAgICAgICBI
YXNoU2V0PFN0cmluZz4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzOworICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBtX3BsdWdpbkRpcmVjdG9yaWVzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdp
c3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAgICAgICBI
YXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOwor
ICAgICAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOwor
ICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJy
ZWRQbHVnaW5zOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisg
ICAgICAgIGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkOworI2VuZGlmCisg
ICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwIGIvU291cmNlL1dl
YktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RjNmNm
MzQ5OWZjMjlkZTZhYzVhZWFkYjM5MjQwNDI3MWFhMGUxOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwCkBAIC0wLDAgKzEs
Mzg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlIDx3dGYvV2luZG93c0V4dHJhcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5QYXRo
c0Zyb21SZWdpc3RyeShIS0VZIHJvb3RLZXksIEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpCit7Cisg
ICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXks
IEwiU29mdHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywg
JmtleSk7CisKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVy
bjsKKworICAgIHdjaGFyX3QgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsK
KworICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsK
KyAgICAgICAgRFdPUkQgbmFtZUxlbiA9IFdURl9BUlJBWV9MRU5HVEgobmFtZSk7CisgICAgICAg
IHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwg
Jmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgV0NIQVIgcGF0aFN0cltfTUFYX1BBVEhdOwor
ICAgICAgICBEV09SRCBwYXRoU3RyU2l6ZSA9IHNpemVvZihwYXRoU3RyKTsKKyAgICAgICAgRFdP
UkQgdHlwZTsKKworICAgICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKGtleSwgbmFtZSwg
TCJQYXRoIiwgJnR5cGUsIHBhdGhTdHIsICZwYXRoU3RyU2l6ZSk7CisgICAgICAgIGlmIChyZXN1
bHQgIT0gRVJST1JfU1VDQ0VTUyB8fCB0eXBlICE9IFJFR19TWikKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIHBhdGhzLmFkZChTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBz
aXplb2YoV0NIQVIpIC0gMSkpOworICAgIH0KKworICAgIFJlZ0Nsb3NlS2V5KGtleSk7Cit9CisK
K3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0
PFN0cmluZz4mIHBhdGhzKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBh
IGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFt
ZXM7CisKKyAgICBIQU5ETEUgaEZpbmQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICBXSU4z
Ml9GSU5EX0RBVEFXIGZpbmRGaWxlRGF0YTsKKworICAgIFN0cmluZyBvbGRXTVBQbHVnaW5QYXRo
OworICAgIFN0cmluZyBuZXdXTVBQbHVnaW5QYXRoOworCisgICAgVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7CisgICAgZm9yIChW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICppdCAr
ICJcXCoiOworCisgICAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5jaGFyYWN0
ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgJmZpbmRGaWxlRGF0YSk7CisKKyAgICAg
ICAgaWYgKGhGaW5kID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGZpbmRGaWxlRGF0YS5kd0ZpbGVB
dHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBTdHJpbmcoZmluZEZpbGVE
YXRhLmNGaWxlTmFtZSwgd2NzbGVuKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUpKTsKKyAgICAgICAg
ICAgIGlmICgoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoIm5wIiwgZmFsc2UpIHx8ICFmaWxlbmFtZS5l
bmRzV2l0aCgiZGxsIiwgZmFsc2UpKSAmJgorICAgICAgICAgICAgICAgICghZXF1YWxJZ25vcmlu
Z0Nhc2UoZmlsZW5hbWUsICJQbHVnaW4uZGxsIikgfHwgIWl0LT5lbmRzV2l0aCgiU2hvY2t3YXZl
IDEwIiwgZmFsc2UpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
U3RyaW5nIGZ1bGxQYXRoID0gKml0ICsgIlxcIiArIGZpbGVuYW1lOworICAgICAgICAgICAgaWYg
KCF1bmlxdWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRoKS5pc05ld0VudHJ5KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBwYXRocy5hZGQoZnVsbFBhdGgpOworCisgICAg
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkK
KyAgICAgICAgICAgICAgICBvbGRXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7CisgICAgICAgICAg
ICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21wLmRsbCIpKQor
ICAgICAgICAgICAgICAgIG5ld1dNUFBsdWdpblBhdGggPSBmdWxsUGF0aDsKKworICAgICAgICB9
IHdoaWxlIChGaW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVEYXRhKSAhPSAwKTsKKworICAg
ICAgICBGaW5kQ2xvc2UoaEZpbmQpOworICAgIH0KKworICAgIGFkZFBsdWdpblBhdGhzRnJvbVJl
Z2lzdHJ5KEhLRVlfTE9DQUxfTUFDSElORSwgcGF0aHMpOworICAgIGFkZFBsdWdpblBhdGhzRnJv
bVJlZ2lzdHJ5KEhLRVlfQ1VSUkVOVF9VU0VSLCBwYXRocyk7CisKKyAgICAvLyBJZiBib3RoIHRo
ZSBvbGQgYW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwg
CisgICAgLy8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2lu
ZyB0aGUgb2xkIG9uZS4KKyAgICBpZiAoIW9sZFdNUFBsdWdpblBhdGguaXNFbXB0eSgpICYmICFu
ZXdXTVBQbHVnaW5QYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcGF0aHMucmVtb3ZlKG9sZFdNUFBs
dWdpblBhdGgpOworfQorCitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0
cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAgVmVjdG9yPGludD4gdmVy
c2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7
CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgewor
ICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxl
bmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10g
PT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1
YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZl
cnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisgICAgICAgIHN0YXJ0UG9zID0gZW5k
UG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1
cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxp
bmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25z
dCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+
IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYg
KHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0
aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBm
YWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemls
bGFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCit7CisgICAg
Ly8gRW51bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0
cnkKKyAgICBIS0VZIGtleTsKKyAgICBMT05HIHJlc3VsdDsKKyAgICAKKyAgICByZXN1bHQgPSBS
ZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIp
LCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7
CisgICAgICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVk
OworCisgICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgICAgIGZvciAoaW50IGkgPSAw
OzsgaSsrKSB7CisgICAgICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6
ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBu
YW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsg
IlxcRXh0ZW5zaW9ucyI7CisgICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7CisKKyAgICAg
ICAgICAgIC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09w
ZW5LZXlFeChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkuZGF0YSgpLCAwLCBLRVlfUkVBRCwgJmV4dGVuc2lvbnNLZXkpOworCisgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0
IHRoZSBwbHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNEaXJl
Y3RvcnlTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgICAgICAgICBEV09SRCBwbHVnaW5zRGlyZWN0
b3J5U2l6ZSA9IHNpemVvZihwbHVnaW5zRGlyZWN0b3J5U3RyKTsKKyAgICAgICAgICAgICAgICBE
V09SRCB0eXBlOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4
dGVuc2lvbnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNE
aXJlY3RvcnlTdHIsICZwbHVnaW5zRGlyZWN0b3J5U2l6ZSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgICAg
ICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcocGx1Z2luc0RpcmVjdG9yeVN0ciwg
cGx1Z2luc0RpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOworCisgICAgICAgICAg
ICAgICAgUmVnQ2xvc2VLZXkoZXh0ZW5zaW9uc0tleSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7CisgICAgfQorfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KFZlY3Rv
cjxTdHJpbmc+JiBkaXJlY3RvcmllcykKK3sKKyAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBs
dWdpbiBpcyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55
IEZpcmVmb3ggaW5zdGFsbHMKKyAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRI
ICsgMV07CisgICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1l
bnRTdHJpbmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2lu
RGlyZWN0b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVjdG9yeVN0cikpOworCisg
ICAgaWYgKHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0g
V1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKQorICAgICAgICBkaXJlY3Rvcmll
cy5hcHBlbmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAt
IDEpKTsKKworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5
U3RyW19NQVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNp
emVvZihpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBn
ZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgTCJTb2Z0d2FyZVxcTWljcm9zb2Z0
XFxNZWRpYVBsYXllciIsIEwiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIsICZ0eXBlLCAmaW5zdGFs
bGF0aW9uRGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7CisKKyAgICBp
ZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgIGRp
cmVjdG9yaWVzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxs
YXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYg
ZGlyZWN0b3JpZXMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdP
cGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9i
YXQgUmVhZGVyIiksIDAsIEtFWV9SRUFELCAma2V5KTsKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9S
X1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICBG
SUxFVElNRSBsYXN0TW9kaWZpZWQ7CisKKyAgICBWZWN0b3I8aW50PiBsYXRlc3RBY3JvYmF0VmVy
c2lvbjsKKyAgICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmc7CisKKyAgICAvLyBF
bnVtZXJhdGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERX
T1JEIG5hbWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAgICByZXN1
bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0
TW9kaWZpZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9iYXRWZXJzaW9uID0gcGFy
c2VWZXJzaW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7CisgICAgICAgIGlmIChjb21w
YXJlVmVyc2lvbnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRWZXJzaW9uKSkgeworICAg
ICAgICAgICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVyc2lvbjsKKyAgICAgICAg
ICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZy5p
c051bGwoKSkgeworICAgICAgICBEV09SRCB0eXBlOworICAgICAgICBXQ0hBUiBhY3JvYmF0SW5z
dGFsbFBhdGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgYWNyb2JhdEluc3RhbGxQYXRo
U2l6ZSA9IHNpemVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOworCisgICAgICAgIFN0cmluZyBh
Y3JvYmF0UGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVyXFwi
ICsgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxsUGF0aCI7CisgICAgICAg
IHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1
Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgJnR5
cGUsIGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9iYXRJbnN0YWxsUGF0aFNpemUpOworCisg
ICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAgU3RyaW5n
IGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkgPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBh
Y3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7
CisgICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoYWNyb2JhdFBsdWdpbkRpcmVjdG9yeSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgYWRkSmF2YVBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0
b3JpZXMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5
RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcSmF2YVNvZnRcXEphdmEgUGx1
Zy1pbiIpLCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUND
RVNTKQorICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklMRVRJ
TUUgbGFzdE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0SmF2YVZlcnNpb247Cisg
ICAgU3RyaW5nIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51bWVyYXRlIHN1
YmtleXMKKyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVu
ID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51
bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsK
KworICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBWZWN0b3I8aW50PiBqYXZhVmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmlu
ZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGph
dmFWZXJzaW9uLCBsYXRlc3RKYXZhVmVyc2lvbikpIHsKKyAgICAgICAgICAgIGxhdGVzdEphdmFW
ZXJzaW9uID0gamF2YVZlcnNpb247CisgICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lvblN0cmlu
ZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh
bGF0ZXN0SmF2YVZlcnNpb25TdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIERXT1JEIHR5cGU7
CisgICAgICAgIFdDSEFSIGphdmFJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOworICAgICAgICBE
V09SRCBqYXZhSW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGphdmFJbnN0YWxsUGF0aFN0cik7Cisg
ICAgICAgIERXT1JEIHVzZU5ld1BsdWdpblZhbHVlOworICAgICAgICBEV09SRCB1c2VOZXdQbHVn
aW5TaXplOworCisgICAgICAgIFN0cmluZyBqYXZhUGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxc
SmF2YVNvZnRcXEphdmEgUGx1Zy1pblxcIiArIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nOworICAg
ICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgamF2YVBs
dWdpbktleVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEwiVXNl
TmV3SmF2YVBsdWdpbiIsICZ0eXBlLCAmdXNlTmV3UGx1Z2luVmFsdWUsICZ1c2VOZXdQbHVnaW5T
aXplKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdXNlTmV3UGx1
Z2luVmFsdWUgPT0gMSkgeworICAgICAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShI
S0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpLCBMIkphdmFIb21lIiwgJnR5cGUsIGphdmFJbnN0YWxsUGF0aFN0
ciwgJmphdmFJbnN0YWxsUGF0aFNpemUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJP
Ul9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGphdmFQbHVnaW5EaXJlY3Rvcnkg
PSBTdHJpbmcoamF2YUluc3RhbGxQYXRoU3RyLCBqYXZhSW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9m
KFdDSEFSKSAtIDEpICsgIlxcYmluXFxuZXdfcGx1Z2luIjsKKyAgICAgICAgICAgICAgICBkaXJl
Y3Rvcmllcy5hcHBlbmQoamF2YVBsdWdpbkRpcmVjdG9yeSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMgaW5saW5l
IFN0cmluZyBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCkKK3sKKyAgICBXQ0hBUiBtb2R1bGVGaWxl
TmFtZVN0cltfTUFYX1BBVEhdOworICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc0RpcmVjdG9yeTsK
KyAgICBzdGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSBmYWxzZTsKKworICAgIGlm
ICghY2FjaGVkUGx1Z2luRGlyZWN0b3J5KSB7CisgICAgICAgIGNhY2hlZFBsdWdpbkRpcmVjdG9y
eSA9IHRydWU7CisKKyAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmls
ZU5hbWUoMCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7CisKKyAgICAgICAgaWYgKCFt
b2R1bGVGaWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgpCisgICAg
ICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9k
dWxlRmlsZU5hbWVTdHIpKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIHBsdWdp
bnNEaXJlY3RvcnkgPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIpICsgIlxcUGx1Z2lucyI7Cisg
ICAgfQorZXhpdDoKKyAgICByZXR1cm4gcGx1Z2luc0RpcmVjdG9yeTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYg
ZGlyZWN0b3JpZXMpCit7CisgICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsK
KworICAgIGlmICghR2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgV1RGX0FS
UkFZX0xFTkdUSChzeXN0ZW1EaXJlY3RvcnlTdHIpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
V0NIQVIgbWFjcm9tZWRpYURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBQYXRoQ29tYmlu
ZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3Jv
bWVkXFxGbGFzaCIpKTsKKyAgICBkaXJlY3Rvcmllcy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9y
eVN0cik7CisKKyAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1E
aXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7CisgICAgZGlyZWN0
b3JpZXMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOworfQorCitWZWN0b3I8U3RyaW5n
PiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKK3sKKyAgICBWZWN0
b3I8U3RyaW5nPiBkaXJlY3RvcmllczsKKyAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJp
UGx1Z2luc0RpcmVjdG9yeSgpOworCisgICAgaWYgKCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkpCisg
ICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChvdXJEaXJlY3RvcnkpOworICAgIGFkZEFkb2JlQWNy
b2JhdFBsdWdpbkRpcmVjdG9yeShkaXJlY3Rvcmllcyk7CisgICAgYWRkTW96aWxsYVBsdWdpbkRp
cmVjdG9yaWVzKGRpcmVjdG9yaWVzKTsKKyAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5E
aXJlY3RvcnkoZGlyZWN0b3JpZXMpOworICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmll
cyhkaXJlY3Rvcmllcyk7CisKKyAgICByZXR1cm4gZGlyZWN0b3JpZXM7Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGly
ZWN0b3J5KQoreworICAgIFN0cmluZyBvdXJEaXJlY3RvcnkgPSBzYWZhcmlQbHVnaW5zRGlyZWN0
b3J5KCk7CisKKyAgICBpZiAoIW91ckRpcmVjdG9yeS5pc051bGwoKSAmJiAhZGlyZWN0b3J5Lmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gb3VyRGlyZWN0b3J5ID09IGRpcmVjdG9yeTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5EZWJ1Zy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRl
YnVnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42NmQyM2FlNjcxMzhhY2FiYzY1YjRlMzAwY2YyY2UxNzk4MTQw
NTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5E
ZWJ1Zy5jcHAKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworI2lmICFMT0dfRElTQUJMRUQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZXJyb3JTdHJpbmdzW10gPSB7CisgICAgIk5vIGVycm9ycyBvY2N1
cnJlZC4iLCAvKiBOUEVSUl9OT19FUlJPUiAqLworICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmlj
IGVycm9yIGNvZGUgb2NjdXJyZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLworICAgICJJ
bnZhbGlkIGluc3RhbmNlIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElE
X0lOU1RBTkNFX0VSUk9SICovCisgICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBF
UlJfSU5WQUxJRF9GVU5DVEFCTEVfRVJST1IgKi8KKyAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZh
aWxlZC4iLCAvKiBOUEVSUl9NT0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KKyAgICAiTWVtb3J5
IGFsbG9jYXRpb24gZmFpbGVkLiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KKyAg
ICAiUGx1Zy1pbiBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5f
RVJST1IgKi8KKyAgICAiUGx1Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8q
IE5QRVJSX0lOVkFMSURfUExVR0lOX0RJUl9FUlJPUiAqLworICAgICJWZXJzaW9ucyBvZiBwbHVn
LWluIGFuZCBDb21tdW5pY2F0b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJM
RV9WRVJTSU9OX0VSUk9SICovCisgICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwg
LyogTlBFUlJfSU5WQUxJRF9QQVJBTSAqLworICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIs
IC8qIE5QRVJSX0lOVkFMSURfVVJMICovCisgICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIs
IC8qIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EICovCisgICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRh
LiIsIC8qIE5QRVJSX05PX0RBVEEgKi8KKyAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIs
IC8qIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FCTEUgKi8KKyAgICAiVW5rbm93biBlcnJvciBjb2Rl
IgorfTsKKworI2lmZGVmIFhQX01BQ09TWAorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRyYXdp
bmdNb2RlbHNbXSA9IHsKKyAgICAiTlBEcmF3aW5nTW9kZWxRdWlja0RyYXciLAorICAgICJOUERy
YXdpbmdNb2RlbENvcmVHcmFwaGljcyIsCisgICAgIk5QRHJhd2luZ01vZGVsT3BlbkdMIiwKKyAg
ICAiTlBEcmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGV2ZW50TW9kZWxzW10gPSB7CisgICAgIk5QRXZlbnRNb2RlbENhcmJvbiIsCisgICAg
Ik5QRXZlbnRNb2RlbENvY29hIgorfTsKKyNlbmRpZiAvL1hQX01BQ09TWAorCitjb25zdCBjaGFy
KiBwcmV0dHlOYW1lRm9yTlBFcnJvcihOUEVycm9yIGVycm9yKQoreworICAgIHJldHVybiBlcnJv
clN0cmluZ3NbZXJyb3JdOworfQorCisjaWZkZWYgWFBfTUFDT1NYCitjb25zdCBjaGFyKiBwcmV0
dHlOYW1lRm9yRHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCkKK3sKKyAg
ICByZXR1cm4gZHJhd2luZ01vZGVsc1tkcmF3aW5nTW9kZWxdOworfQorCitjb25zdCBjaGFyKiBw
cmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCkKK3sKKyAgICBy
ZXR1cm4gZXZlbnRNb2RlbHNbZXZlbnRNb2RlbF07Cit9CisjZW5kaWYgLy9YUF9NQUNPU1gKKwor
Q1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpCit7
CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVnhEaXNwbGF5OiByZXR1cm4g
Ik5QTlZ4RGlzcGxheSI7CisgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiByZXR1cm4gIk5QTlZ4
dEFwcENvbnRleHQiOworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiByZXR1cm4gIk5QTlZu
ZXRzY2FwZVdpbmRvdyI7CisgICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOiByZXR1
cm4gIk5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2wiOworICAgIGNhc2UgTlBOVmFzZEVuYWJsZWRC
b29sOiByZXR1cm4gIk5QTlZhc2RFbmFibGVkQm9vbCI7CisgICAgY2FzZSBOUE5WaXNPZmZsaW5l
Qm9vbDogcmV0dXJuICJOUE5WaXNPZmZsaW5lQm9vbCI7CisKKyAgICBjYXNlIE5QTlZzZXJ2aWNl
TWFuYWdlcjogcmV0dXJuICJOUE5Wc2VydmljZU1hbmFnZXIgKG5vdCBzdXBwb3J0ZWQpIjsKKyAg
ICBjYXNlIE5QTlZET01FbGVtZW50OiByZXR1cm4gIk5QTlZET01FbGVtZW50IChub3Qgc3VwcG9y
dGVkKSI7CisgICAgY2FzZSBOUE5WRE9NV2luZG93OiByZXR1cm4gIk5QTlZET01XaW5kb3cgKG5v
dCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QTlZUb29sa2l0OiByZXR1cm4gIk5QTlZUb29sa2l0
IChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiByZXR1
cm4gIk5QTlZTdXBwb3J0c1hFbWJlZEJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKKworICAgIGNhc2Ug
TlBOVldpbmRvd05QT2JqZWN0OiByZXR1cm4gIk5QTlZXaW5kb3dOUE9iamVjdCI7CisgICAgY2Fz
ZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiByZXR1cm4gIk5QTlZQbHVnaW5FbGVtZW50TlBP
YmplY3QiOworICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczogcmV0dXJuICJOUE5WU3Vw
cG9ydHNXaW5kb3dsZXNzIjsKKyAgICBjYXNlIE5QTlZwcml2YXRlTW9kZUJvb2w6IHJldHVybiAi
TlBOVnByaXZhdGVNb2RlQm9vbCI7CisKKyNpZmRlZiBYUF9NQUNPU1gKKyAgICBjYXNlIE5QTlZw
bHVnaW5EcmF3aW5nTW9kZWw6IHJldHVybiAiTlBOVnBsdWdpbkRyYXdpbmdNb2RlbCI7CisjaWZu
ZGVmIE5QX05PX1FVSUNLRFJBVworICAgIGNhc2UgTlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbDog
cmV0dXJuICJOUE5Wc3VwcG9ydHNRdWlja0RyYXdCb29sIjsKKyNlbmRpZgorICAgIGNhc2UgTlBO
VnN1cHBvcnRzQ29yZUdyYXBoaWNzQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb3JlR3JhcGhp
Y3NCb29sIjsKKyAgICBjYXNlIE5QTlZzdXBwb3J0c09wZW5HTEJvb2w6IHJldHVybiAiTlBOVnN1
cHBvcnRzT3BlbkdMQm9vbCI7CisgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9v
bDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbCI7CisjaWZuZGVmIE5QX05P
X0NBUkJPTgorICAgIGNhc2UgTlBOVnN1cHBvcnRzQ2FyYm9uQm9vbDogcmV0dXJuICJOUE5Wc3Vw
cG9ydHNDYXJib25Cb29sIjsKKyNlbmRpZgorICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29jb2FCb29s
OiByZXR1cm4gIk5QTlZzdXBwb3J0c0NvY29hQm9vbCI7CisjZW5kaWYKKworICAgIGRlZmF1bHQ6
IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7CisgICAgfQorfQorCitDU3RyaW5nIHByZXR0eU5h
bWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7Cisg
ICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBQVnBsdWdpbk5hbWVTdHJpbmc6IHJl
dHVybiAiTlBQVnBsdWdpbk5hbWVTdHJpbmciOworICAgIGNhc2UgTlBQVnBsdWdpbkRlc2NyaXB0
aW9uU3RyaW5nOiByZXR1cm4gIk5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZyI7CisgICAgY2Fz
ZSBOUFBWcGx1Z2luV2luZG93Qm9vbDogcmV0dXJuICJOUFBWcGx1Z2luV2luZG93Qm9vbCI7Cisg
ICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5UcmFu
c3BhcmVudEJvb2wiOworCisgICAgY2FzZSBOUFBWamF2YUNsYXNzOiByZXR1cm4gIk5QUFZqYXZh
Q2xhc3MgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dTaXplOiBy
ZXR1cm4gIk5QUFZwbHVnaW5XaW5kb3dTaXplIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBO
UFBWcGx1Z2luVGltZXJJbnRlcnZhbDogcmV0dXJuICJOUFBWcGx1Z2luVGltZXJJbnRlcnZhbCAo
bm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVJbnN0YW5jZTog
cmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlIChub3Qgc3VwcG9ydGVkKSI7Cisg
ICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZUlJRDogcmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0
YWJsZUlJRCAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVmphdmFzY3JpcHRQdXNoQ2Fs
bGVyQm9vbDogcmV0dXJuICJOUFBWamF2YXNjcmlwdFB1c2hDYWxsZXJCb29sIChub3Qgc3VwcG9y
dGVkKSI7CisgICAgY2FzZSBOUFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeTogcmV0dXJuICJO
UFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeSAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2Ug
TlBQVnBsdWdpbk5lZWRzWEVtYmVkOiByZXR1cm4gIk5QUFZwbHVnaW5OZWVkc1hFbWJlZCAobm90
IHN1cHBvcnRlZCkiOworCisgICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0OiBy
ZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QiOworCisgICAgY2FzZSBOUFBWZm9y
bVZhbHVlOiByZXR1cm4gIk5QUFZmb3JtVmFsdWUgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNl
IE5QUFZwbHVnaW5VcmxSZXF1ZXN0c0Rpc3BsYXllZEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblVy
bFJlcXVlc3RzRGlzcGxheWVkQm9vbCAobm90IHN1cHBvcnRlZCkiOworCisgICAgY2FzZSBOUFBW
cGx1Z2luV2FudHNBbGxOZXR3b3JrU3RyZWFtczogcmV0dXJuICJOUFBWcGx1Z2luV2FudHNBbGxO
ZXR3b3JrU3RyZWFtcyI7CisgICAgY2FzZSBOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtOiByZXR1
cm4gIk5QUFZwbHVnaW5DYW5jZWxTcmNTdHJlYW0iOworCisjaWZkZWYgWFBfTUFDT1NYCisgICAg
Y2FzZSBOUFBWcGx1Z2luRHJhd2luZ01vZGVsOiB7CisgICAgICAgIFN0cmluZyByZXN1bHQoIk5Q
UFZwbHVnaW5EcmF3aW5nTW9kZWwsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKHByZXR0eU5h
bWVGb3JEcmF3aW5nTW9kZWwoTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVlKSkpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5sYXRpbjEoKTsKKyAgICB9CisgICAgY2FzZSBOUFBWcGx1Z2lu
RXZlbnRNb2RlbDogeworICAgICAgICBTdHJpbmcgcmVzdWx0KCJOUFBWcGx1Z2luRXZlbnRNb2Rl
bCwgIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocHJldHR5TmFtZUZvckV2ZW50TW9kZWwoTlBF
dmVudE1vZGVsKHVpbnRwdHJfdCh2YWx1ZSkpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQubGF0
aW4xKCk7CisgICAgfQorICAgIGNhc2UgTlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllcjogcmV0
dXJuICJOUFBWcGx1Z2luQ29yZUFuaW1hdGlvbkxheWVyIjsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyNlbmRpZgorCisgICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlh
YmxlIjsKKyAgICB9Cit9CisKK0NTdHJpbmcgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5Q
TlVSTFZhcmlhYmxlIHZhcmlhYmxlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBj
YXNlIE5QTlVSTFZDb29raWU6IHJldHVybiAiTlBOVVJMVkNvb2tpZSI7CisgICAgY2FzZSBOUE5V
UkxWUHJveHk6IHJldHVybiAiTlBOVVJMVlByb3h5IjsKKyAgICBkZWZhdWx0OiByZXR1cm4gIlVu
a25vd24gdmFyaWFibGUiOworICAgIH0KK30KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdp
bnMvUGx1Z2luRGVidWcuaCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGVidWcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42Njc0ODVlOTA5MjhhMDVmY2JkYTgyOTQwYTczOTY3MDk4NzFkYjYxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5o
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luRGVidWdfaAorI2RlZmluZSBQbHVnaW5EZWJ1
Z19oCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFs
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjZGVmaW5lIExPR19OUEVSUk9S
KGVycikgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lucywgIiVz
XG4iLCBwcmV0dHlOYW1lRm9yTlBFcnJvcihlcnIpKQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9F
UlJPUigpIExPR19WRVJCT1NFKFBsdWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVt
cyB3aXRoIG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxl
bXMuXG4iKQorCisjaWYgIUxPR19ESVNBQkxFRAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Nv
bnN0IGNoYXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOworCitDU3RyaW5n
IHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7CitDU3RyaW5n
IHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUpOworQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUg
dmFyaWFibGUpOworCisjaWZkZWYgWFBfTUFDT1NYCitjb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9y
RHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCk7Citjb25zdCBjaGFyKiBw
cmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCk7CisjZW5kaWYK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRAorCisj
ZW5kaWYgLy8gUGx1Z2luRGVidWdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUzYzMxNWMy
MDE4NDM5NGYzYjQwNjRhM2Y1NDQ3NTczZWQyY2YwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKQEAgLTAs
MCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUg
PHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU2V0IGEgdGltZXIg
dG8gbWFrZSBzdXJlIHdlIHByb2Nlc3MgYW55IHF1ZXVlZCBtZXNzYWdlcyBhdCBsZWFzdCBldmVy
eSAxNm1zLgorLy8gVGhpcyB2YWx1ZSBhbGxvd3MgRmxhc2ggNjAgbWVzc2FnZXMvc2Vjb25kLCB3
aGljaCBzaG91bGQgYmUgZW5vdWdoIGZvciB2aWRlbworLy8gcGxheWJhY2ssIGFuZCBhbHNvIGdl
dHMgdXMgb3ZlciB0aGUgbGltaXQgZm9yIGtpY2tpbmcgaW50byBoaWdoLXJlc29sdXRpb24KKy8v
IHRpbWVyIG1vZGUgKHNlZSBTaGFyZWRUaW1lcldpbi5jcHApLgorc3RhdGljIGNvbnN0IGRvdWJs
ZSBNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwgPSAwLjAxNjsKKworLy8gRHVyaW5nIGEgY29u
dGludW91cyBzdHJlYW0gb2YgbWVzc2FnZXMsIHByb2Nlc3Mgb25lIGV2ZXJ5IDVtcy4KK3N0YXRp
YyBjb25zdCBkb3VibGUgTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCA9IDAuMDA1Owor
CitQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBs
dWdpblZpZXcqIHBsdWdpblZpZXcpCisgICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAg
ICAsIG1fYmFjaygwKQorICAgICwgbV9mcm9udCgwKQorICAgICwgbV9tZXNzYWdlVGhyb3R0bGVU
aW1lcigqdGhpcywgJlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46Om1lc3NhZ2VUaHJvdHRsZVRp
bWVyRmlyZWQpCisgICAgLCBtX2xhc3RNZXNzYWdlVGltZSgwKQoreworICAgIC8vIEluaXRpYWxp
emUgdGhlIGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUgbWVzc2FnZXMKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgTnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgIG1faW5s
aW5lTWVzc2FnZXNbaV0ubmV4dCA9ICZtX2lubGluZU1lc3NhZ2VzW2kgKyAxXTsKKyAgICBtX2lu
bGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV0ubmV4dCA9IDA7CisgICAgbV9mcmVl
SW5saW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKK30KKworUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbjo6flBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oKQoreworICAgIFBsdWdp
bk1lc3NhZ2UqIG5leHQ7CisKKyAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zy
b250OyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gbWVzc2FnZS0+
bmV4dDsKKyAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgfQorfQorCit2b2lkIFBs
dWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UoSFdORCBoV25kLCBVSU5UIG1z
ZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBQbHVnaW5NZXNzYWdlKiBt
ZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICBtZXNzYWdlLT5oV25kID0gaFduZDsK
KyAgICBtZXNzYWdlLT5tc2cgPSBtc2c7CisgICAgbWVzc2FnZS0+d1BhcmFtID0gd1BhcmFtOwor
ICAgIG1lc3NhZ2UtPmxQYXJhbSA9IGxQYXJhbTsKKyAgICBtZXNzYWdlLT5uZXh0ID0gMDsKKwor
ICAgIGlmIChtX2JhY2spCisgICAgICAgIG1fYmFjay0+bmV4dCA9IG1lc3NhZ2U7CisgICAgbV9i
YWNrID0gbWVzc2FnZTsKKyAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgIG1fZnJvbnQgPSBtZXNz
YWdlOworCisgICAgLy8gSWYgaXQgaGFzIGJlZW4gbW9yZSB0aGFuIE1lc3NhZ2VEaXJlY3RQcm9j
ZXNzaW5nSW50ZXJ2YWwgYmV0d2VlbiB0aHJvdHRsZWQgbWVzc2FnZXMsCisgICAgLy8gZ28gYWhl
YWQgYW5kIHByb2Nlc3MgYSBtZXNzYWdlIGRpcmVjdGx5LgorICAgIGRvdWJsZSBjdXJyZW50VGlt
ZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIGlmIChjdXJyZW50VGltZSAt
IG1fbGFzdE1lc3NhZ2VUaW1lID4gTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCkgewor
ICAgICAgICBwcm9jZXNzUXVldWVkTWVzc2FnZSgpOworICAgICAgICBtX2xhc3RNZXNzYWdlVGlt
ZSA9IGN1cnJlbnRUaW1lOworICAgICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJv
dHRsZVRpbWVJbnRlcnZhbCk7Cit9CisKK3ZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
cHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKQoreworICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBt
X2Zyb250OworICAgIG1fZnJvbnQgPSBtX2Zyb250LT5uZXh0OworICAgIGlmIChtZXNzYWdlID09
IG1fYmFjaykKKyAgICAgICAgbV9iYWNrID0gMDsKKworICAgIC8vIFByb3RlY3QgdGhlIFBsdWdp
blZpZXcgZnJvbSBkZXN0cnVjdGlvbiB3aGlsZSBjYWxsaW5nIGl0cyB3aW5kb3cgcHJvYy4KKyAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vNjkzMDI4MD4KKyAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJv
dGVjdChtX3BsdWdpblZpZXcpOworICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5w
bHVnaW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1Bh
cmFtLCBtZXNzYWdlLT5sUGFyYW0pOworCisgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7Cit9CisK
K3ZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJl
ZCgpCit7CisgICAgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKKworICAgIGlmIChtX2Zyb250KQor
ICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0
bGVUaW1lSW50ZXJ2YWwpOworfQorCitQbHVnaW5NZXNzYWdlKiBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UoKQoreworICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7
CisKKyAgICBpZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKKyAgICAgICAgbWVzc2FnZSA9IG1f
ZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3Nh
Z2UtPm5leHQ7CisgICAgfSBlbHNlCisgICAgICAgIG1lc3NhZ2UgPSBuZXcgUGx1Z2luTWVzc2Fn
ZTsKKworICAgIHJldHVybiBtZXNzYWdlOworfQorCitib29sIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW46OmlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQoreworICAgIHJl
dHVybiBtZXNzYWdlID49ICZtX2lubGluZU1lc3NhZ2VzWzBdICYmIG1lc3NhZ2UgPD0gJm1faW5s
aW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXTsKK30KKwordm9pZCBQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjpmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQorewor
ICAgIGlmIChpc0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKKyAgICAgICAgbWVzc2FnZS0+bmV4
dCA9IG1fZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9
IG1lc3NhZ2U7CisgICAgfSBlbHNlCisgICAgICAgIGRlbGV0ZSBtZXNzYWdlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5z
L1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjNTEwMzA4MzZkM2EzZTky
NzdhNjBkNTdhZDYzN2M1YWZmMWRhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9QbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKKyNkZWZpbmUgUGx1Z2lu
TWVzc2FnZVRocm90dGxlcldpbl9oCisKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8
d2luZG93cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgUGx1Z2luVmlldzsK
KworICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsKKyAgICAgICAgSFdORCBoV25kOworICAgICAg
ICBVSU5UIG1zZzsKKyAgICAgICAgV1BBUkFNIHdQYXJhbTsKKyAgICAgICAgTFBBUkFNIGxQYXJh
bTsKKworICAgICAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICB9OworCisgICAg
Y2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbiB7CisgICAgcHVibGljOgorICAgICAgICBQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZpZXcqKTsKKyAgICAgICAgflBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW4oKTsKKworICAgICAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoSFdORCwg
VUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQg
cHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKKyAgICAgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1l
ckZpcmVkKCk7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2FnZSgpOworICAg
ICAgICBib29sIGlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKKyAgICAg
ICAgdm9pZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKKworICAgICAgICBQ
bHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsK
KyAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcm9udDsKKworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IE51bUlubGluZU1lc3NhZ2VzID0gNDsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSBtX2lubGlu
ZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzXTsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9m
cmVlSW5saW5lTWVzc2FnZXM7CisKKyAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhyb3R0bGVUaW1l
cjsKKyAgICAgICAgZG91YmxlIG1fbGFzdE1lc3NhZ2VUaW1lOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2U4NzdjMDE5NzI5ZTgyNWY2Zjc2MjBlNmY1ZjU3ODI5NzRkMDYzOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKQEAgLTAsMCAr
MSw0NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNs
dWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVk
ZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSWRlbnRpZmllclJlcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3Ry
eS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTlBfanNvYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1RpbWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9jX3V0aWxpdHkuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL25wcnVudGltZV9pbXBsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9ydW50aW1lX3Jvb3QuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2thZ2UoKQorewor
ICAgIC8vIFRoaXMgZGVzdHJ1Y3RvciBnZXRzIGNhbGxlZCBkdXJpbmcgcmVmcmVzaCgpIGlmIFBs
dWdpbkRhdGFiYXNlJ3MKKyAgICAvLyBQbHVnaW5TZXQgaGFzaCBpcyBhbHJlYWR5IHBvcHVsYXRl
ZCwgYXMgaXQgcmVtb3ZlcyBpdGVtcyBmcm9tCisgICAgLy8gdGhlIGhhc2ggdGFibGUuIENhbGxp
bmcgdGhlIGRlc3RydWN0b3Igb24gYSBsb2FkZWQgcGx1Zy1pbiBvZgorICAgIC8vIGNvdXJzZSB3
b3VsZCBjYXVzZSBhIGNyYXNoLCBzbyB3ZSBjaGVjayB0byBjYWxsIHVubG9hZCBiZWZvcmUgd2UK
KyAgICAvLyBBU1NFUlQuCisgICAgLy8gRklYTUU6IFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVy
IHdheSB0byBmaXggdGhpcy4KKyAgICBpZiAoIW1fbG9hZENvdW50KQorICAgICAgICB1bmxvYWRX
aXRob3V0U2h1dGRvd24oKTsKKyAgICBlbHNlCisgICAgICAgIHVubG9hZCgpOworCisgICAgQVNT
RVJUKCFtX2lzTG9hZGVkKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVNv
b24oKQoreworICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOworICAg
IEFTU0VSVChtX21vZHVsZSk7CisgICAgQVNTRVJUKCFtX2xvYWRDb3VudCk7CisKKyAgICBtX2Zy
ZWVMaWJyYXJ5VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6
OmZyZWVMaWJyYXJ5VGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICAv
LyBEbyBub3RoaW5nIGlmIHRoZSBtb2R1bGUgZ290IGxvYWRlZCBhZ2FpbiBtZWFud2hpbGUKKyAg
ICBpZiAoIW1fbG9hZENvdW50KSB7CisgICAgICAgIHVubG9hZE1vZHVsZShtX21vZHVsZSk7Cisg
ICAgICAgIG1fbW9kdWxlID0gMDsKKyAgICB9Cit9CisKKworaW50IFBsdWdpblBhY2thZ2U6OmNv
bXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAoreworICAgIC8vIFNv
cnQgcGx1Zy1pbnMgdGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3QuCisgICAgYm9v
bCBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgYm9vbCBCYWxsb3dzTXVsdGlwbGVJ
bnN0YW5jZXMgPSAhY29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFs
bG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMg
IT0gQmFsbG93c011bHRpcGxlSW5zdGFuY2VzKQorICAgICAgICByZXR1cm4gQWFsbG93c011bHRp
cGxlSW5zdGFuY2VzID8gLTEgOiAxOworCisgICAgLy8gU29ydCBwbHVnLWlucyBpbiBhIHByZWZl
cnJlZCBwYXRoIGZpcnN0LgorICAgIGJvb2wgQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVn
aW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkocGFyZW50RGlyZWN0b3J5KCkp
OworICAgIGJvb2wgQmlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRhYmFzZTo6aXNQ
cmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpKTsKKyAg
ICBpZiAoQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgIT0gQmlzSW5QcmVmZXJyZWREaXJlY3Rvcnkp
CisgICAgICAgIHJldHVybiBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA/IC0xIDogMTsKKworICAg
IGludCBkaWZmID0gc3RyY21wKG5hbWUoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ubmFtZSgp
LnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChkaWZmKQorICAgICAgICByZXR1cm4gZGlmZjsKKwor
ICAgIGRpZmYgPSBjb21wYXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZlcnNpb24oKSk7CisgICAg
aWYgKGRpZmYpCisgICAgICAgIHJldHVybiBkaWZmOworCisgICAgcmV0dXJuIHN0cmNtcChwYXJl
bnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCku
dXRmOCgpLmRhdGEoKSk7Cit9CisKK1BsdWdpblBhY2thZ2U6OlBsdWdpblBhY2thZ2UoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNFbmFi
bGVkKHRydWUpCisgICAgLCBtX2lzTG9hZGVkKGZhbHNlKQorICAgICwgbV9sb2FkQ291bnQoMCkK
KyAgICAsIG1fcGF0aChwYXRoKQorICAgICwgbV9tb2R1bGVWZXJzaW9uKDApCisgICAgLCBtX21v
ZHVsZSgwKQorICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQorICAgICwgbV9mcmVl
TGlicmFyeVRpbWVyKCp0aGlzLCAmUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVk
KQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgLCBtX2lu
Zm9Jc0Zyb21DYWNoZSh0cnVlKQorI2VuZGlmCit7CisgICAgbV9maWxlTmFtZSA9IHBhdGhHZXRG
aWxlTmFtZShtX3BhdGgpOworICAgIG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9w
YXRoLmxlbmd0aCgpIC0gbV9maWxlTmFtZS5sZW5ndGgoKSAtIDEpOworfQorCit2b2lkIFBsdWdp
blBhY2thZ2U6OnVubG9hZCgpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoLS1tX2xvYWRDb3VudCA+IDApCisgICAgICAgIHJldHVybjsKKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIG1fTlBQX1NodXRkb3duKCk7CisjZW5k
aWYKKworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworfQorCit2b2lkIFBsdWdpblBhY2th
Z2U6OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKKyAgICBBU1NFUlQobV9t
b2R1bGUpOworCisgICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2ggd2hlbiBjbG9zaW5nIHRh
YiB3aXRoIHBkZiBmaWxlIChSZWFkZXIgNyBvbmx5KQorICAgIC8vIElmIHRoZSBwbHVnaW4gaGFz
IHN1YmNsYXNzZWQgaXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVhZGVyIDcsIHdlIG1heSBo
YXZlCisgICAgLy8gZ290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVnaW4ncyBpbnRlcm5hbCB3
aW5kb3cgcHJvYyBmb3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKKyAgICAvLyBvcmlnaW5hbCB3
aW5kb3cgcHJvYy4gSWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkgZnJvbSBoZXJlLCB3ZSB3
aWxsIGp1bXAgYmFjaworICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVlZCB3aGVuIHdlIHJldHVy
biwgc28gZGVsYXkgY2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1bnRpbAorICAgIC8vIHRo
ZSBuZXh0IG1lc3NhZ2UgbG9vcAorICAgIGZyZWVMaWJyYXJ5U29vbigpOworCisgICAgbV9pc0xv
YWRlZCA9IGZhbHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OnNldEVuYWJsZWQoYm9vbCBl
bmFibGVkKQoreworICAgIG1faXNFbmFibGVkID0gZW5hYmxlZDsKK30KKworUGFzc1JlZlB0cjxQ
bHVnaW5QYWNrYWdlPiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCit7CisgICAgUmVmUHRyPFBsdWdpblBh
Y2thZ2U+IHBhY2thZ2UgPSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBsYXN0TW9k
aWZpZWQpKTsKKworICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIHBhY2thZ2UucmVsZWFzZSgpOworfQorCisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK1Bhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4g
UGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKQoreworICAg
IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYobmV3IFBsdWdpblBhY2th
Z2UocGF0aCwgbGFzdE1vZGlmaWVkKSk7CisgICAgcGFja2FnZS0+bV9uYW1lID0gbmFtZTsKKyAg
ICBwYWNrYWdlLT5tX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgcGFja2FnZS0+ZGV0
ZXJtaW5lTW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOworICAgIHBhY2thZ2UtPnNldE1J
TUVEZXNjcmlwdGlvbihtaW1lRGVzY3JpcHRpb24pOworICAgIHBhY2thZ2UtPm1faW5mb0lzRnJv
bUNhY2hlID0gdHJ1ZTsKKyAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Cit9CisjZW5kaWYK
KworI2lmIGRlZmluZWQoWFBfVU5JWCkKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVp
cmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6
OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNlIGEg
c2luZ2xlIHByb2Nlc3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3Qg
cmVsaWFibHkgdW5sb2FkIGEKKyAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0
aGUgSmF2YSBwbHVnaW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCisg
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAg
ICAgIC8vIFNldHRpbmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNl
cyBiYWQgc2Nyb2xsaW5nIHJlcGFpbnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUgSmF2
YSBwbHVnLWluLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVy
b1JlY3RXaGVuU2Nyb2xsaW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
aW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAgIHN0
YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gZmxhc2hUZW5WZXJzaW9uKDB4MGEwMDAw
MDApOworCisgICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oZmxhc2hUZW5WZXJzaW9uKSA+
PSAwKSB7CisgICAgICAgICAgICAvLyBGbGFzaCAxMC4wIGIyMTggZG9lc24ndCBsaWtlIGhhdmlu
ZyBhIE5VTEwgd2luZG93IGhhbmRsZQorICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1
aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gRmxhc2ggOSBhbmQgb2xkZXIgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVn
aW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgICAgICAgICAgbV9xdWly
a3MuYWRkKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKKyAgICAgICAgfQorCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgLy8gNjQtYml0IEZsYXNoIGZyZWV6ZXMgaWYgcmlnaHQt
Y2xpY2sgaXMgc2VudCBpbiB3aW5kb3dsZXNzIG1vZGUKKyAgICAgICAgbV9xdWlya3MuYWRkKFBs
dWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUpOworI2VuZGlmCisKKyAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgp
OworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOwor
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNz
YWdlcyk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVn
KTsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmICFPUyhXSU5ET1dTKQordm9pZCBQbHVnaW5QYWNr
YWdlOjpkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCkKK3sKKyAgICAvLyBJ
dCdzIGEgYml0IGxhbWUgdG8gZGV0ZWN0IHRoZSBwbHVnaW4gdmVyc2lvbiBieSBwYXJzaW5nIGl0
CisgICAgLy8gZnJvbSB0aGUgcGx1Z2luIGRlc2NyaXB0aW9uIHN0cmluZywgYnV0IGl0IGRvZXNu
J3Qgc2VlbSB0aGF0CisgICAgLy8gdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4g
YW55IHN0YW5kYXJkaXplZCB3YXkgYXQKKyAgICAvLyB0aGUgbW9kdWxlIGxldmVsLCBsaWtlIGlu
IFdpbmRvd3MKKworICAgIGlmIChtX2Rlc2NyaXB0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fZGVzY3JpcHRpb24uc3RhcnRzV2l0aCgiU2hvY2t3YXZlIEZsYXNo
IikgJiYgbV9kZXNjcmlwdGlvbi5sZW5ndGgoKSA+PSAxOSkgeworICAgICAgICAvLyBUaGUgZmxh
c2ggdmVyc2lvbiBhcyBhIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBkaWZmZXJzIG9uIFVuaXggZnJv
bSBXaW5kb3dzCisgICAgICAgIC8vIHNpbmNlIHRoZSByZXZpc2lvbiBjYW4gYmUgbGFyZ2VyIHRo
YW4gYSA4IGJpdHMsIHNvIHdlIGFsbG93IGl0IDE2IGhlcmUgYW5kCisgICAgICAgIC8vIHB1c2gg
dGhlIG1ham9yL21pbm9yIHVwIDggYml0cy4gVGh1cyBvbiBVbml4LCBGbGFzaCdzIHZlcnNpb24g
bWF5IGJlCisgICAgICAgIC8vIDB4MGEwMDAwMDAgaW5zdGVhZCBvZiAweDAwMGEwMDAwLgorCisg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHZlcnNpb25QYXJ0czsKKyAgICAgICAgbV9kZXNjcmlwdGlv
bi5zdWJzdHJpbmcoMTYpLnNwbGl0KCcgJywgLyphbGxvd0VtcHR5RW50cmllcyA9Ki8gZmFsc2Us
IHZlcnNpb25QYXJ0cyk7CisgICAgICAgIGlmICh2ZXJzaW9uUGFydHMuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh2ZXJzaW9uUGFydHMuc2l6ZSgpID49IDEp
IHsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1ham9yTWlub3JQYXJ0czsKKyAgICAgICAg
ICAgIHZlcnNpb25QYXJ0c1swXS5zcGxpdCgnLicsIG1ham9yTWlub3JQYXJ0cyk7CisgICAgICAg
ICAgICBpZiAobWFqb3JNaW5vclBhcnRzLnNpemUoKSA+PSAxKSB7CisgICAgICAgICAgICAgICAg
Ym9vbCBjb252ZXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtYWpvciA9
IG1ham9yTWlub3JQYXJ0c1swXS50b1VJbnQoJmNvbnZlcnRlZCk7CisgICAgICAgICAgICAgICAg
aWYgKGNvbnZlcnRlZCkKKyAgICAgICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uID0gKG1h
am9yICYgMHhmZikgPDwgMjQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWFqb3JN
aW5vclBhcnRzLnNpemUoKSA9PSAyKSB7CisgICAgICAgICAgICAgICAgYm9vbCBjb252ZXJ0ZWQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtaW5vciA9IG1ham9yTWlub3JQYXJ0
c1sxXS50b1VJbnQoJmNvbnZlcnRlZCk7CisgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRlZCkK
KyAgICAgICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uIHw9IChtaW5vciAmIDB4ZmYpIDw8
IDE2OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcnNpb25QYXJ0
cy5zaXplKCkgPj0gMikgeworICAgICAgICAgICAgU3RyaW5nIHJldmlzaW9uID0gdmVyc2lvblBh
cnRzWzFdOworICAgICAgICAgICAgaWYgKHJldmlzaW9uLmxlbmd0aCgpID4gMSAmJiAocmV2aXNp
b25bMF0gPT0gJ3InIHx8IHJldmlzaW9uWzBdID09ICdiJykpIHsKKyAgICAgICAgICAgICAgICBy
ZXZpc2lvbi5yZW1vdmUoMCwgMSk7CisgICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uIHw9
IHJldmlzaW9uLnRvSW50KCkgJiAweGZmZmY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorc3RhdGlj
IHZvaWQgZ2V0TGlzdEZyb21WYXJpYW50QXJncyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
TlBWYXJpYW50KiBhcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgSlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogcm9vdE9iamVjdCwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYUxpc3QpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIGFMaXN0
LmFwcGVuZChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmYXJn
c1tpXSwgcm9vdE9iamVjdCkpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6U291cmNlQ29kZSBt
YWtlU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCA9IFN0cmlu
ZygpLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb246Om1p
bmltdW1Qb3NpdGlvbigpKQoreworICAgIHJldHVybiBKU0M6OlNvdXJjZUNvZGUoSlNDOjpTdHJp
bmdTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9uKSwgc3Rh
cnRQb3NpdGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSwgc3RhcnRQb3NpdGlvbi5tX2NvbHVtbi5v
bmVCYXNlZEludCgpKTsKK30KKworc3RhdGljIGJvb2wgTlBOX0V2YWx1YXRlKE5QUCBpbnN0YW5j
ZSwgTlBPYmplY3QqIG8sIE5QU3RyaW5nKiBzLCBOUFZhcmlhbnQqIHZhcmlhbnQpCit7CisgICAg
aWYgKG8tPl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7CisgICAgICAgIEphdmFTY3Jp
cHRPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOwor
CisgICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmotPnJv
b3RPYmplY3Q7CisgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxp
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFRoZXJlIGlzIGEg
Y3Jhc2ggaW4gRmxhc2ggd2hlbiBldmFsdWF0aW5nIGEgc2NyaXB0IHRoYXQgZGVzdHJveXMgdGhl
CisgICAgICAgIC8vIFBsdWdpblZpZXcsIHNvIHdlIGRlc3Ryb3kgaXQgYXN5bmNocm9ub3VzbHku
CisgICAgICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShpbnN0YW5jZSk7CisKKyAgICAgICAgSlND
OjpFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBTdHJp
bmcgc2NyaXB0U3RyaW5nID0gSlNDOjpCaW5kaW5nczo6Y29udmVydE5QU3RyaW5nVG9VVEYxNihz
KTsKKworICAgICAgICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0
U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkpOworCisgICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZl
cnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJldHVyblZhbHVlLCB2YXJpYW50KTsKKyAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgVk9JRF9UT19OUFZBUklBTlQoKnZhcmlhbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIGJvb2wgTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVy
IG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5Q
VmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RD
bGFzcykgeworICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0
PEphdmFTY3JpcHRPYmplY3QqPihvKTsKKworICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3Rh
dGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KG1ldGhvZE5hbWUpOworICAgICAgICBpZiAoIWktPmlz
U3RyaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU3BlY2lh
bCBjYXNlIHRoZSAiZXZhbCIgbWV0aG9kLgorICAgICAgICBpZiAobWV0aG9kTmFtZSA9PSBfTlBO
X0dldFN0cmluZ0lkZW50aWZpZXIoImV2YWwiKSkgeworICAgICAgICAgICAgaWYgKGFyZ0NvdW50
ICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGFy
Z3NbMF0udHlwZSAhPSBOUFZhcmlhbnRUeXBlX1N0cmluZykKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6TlBOX0V2YWx1YXRlKG5wcCwg
bywgY29uc3RfY2FzdDxOUFN0cmluZyo+KCZhcmdzWzBdLnZhbHVlLnN0cmluZ1ZhbHVlKSwgcmVz
dWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVj
dC4KKyAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+
cm9vdE9iamVjdDsKKyAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1Zh
bGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgSlNDOjpKU1ZhbHVlIGZ1
bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBKU0M6OkJpbmRpbmdzOjppZGVudGlmaWVyRnJv
bU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOworICAgICAgICBKU0M6OkNhbGxEYXRh
IGNhbGxEYXRhOworICAgICAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
ZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5
cGVOb25lKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIENhbGwgdGhl
IGZ1bmN0aW9uIG9iamVjdC4KKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdM
aXN0OworICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50
LCByb290T2JqZWN0LCBhcmdMaXN0KTsKKyAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdFYgPSBK
U0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqLT5pbXAsIGFy
Z0xpc3QpOworCisgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRo
ZSBmdW5jdGlvbiBjYWxsLgorICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05Q
VmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOworICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoby0+X2NsYXNz
LT5pbnZva2UpCisgICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmludm9rZShvLCBtZXRob2ROYW1l
LCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKKworICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1
bHQpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OmluaXRpYWxp
emVCcm93c2VyRnVuY3MoKQoreworICAgIG1lbXNldCgmbV9icm93c2VyRnVuY3MsIDAsIHNpemVv
ZihtX2Jyb3dzZXJGdW5jcykpOworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YobV9i
cm93c2VyRnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUFZlcnNpb24oKTsK
KworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2Vy
RnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3Ry
ZWFkID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5Q
Tl9OZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAg
bV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1f
YnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFn
ZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9N
ZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAg
bV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVu
Y3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNz
LmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9z
dHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZh
bHVlID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1Nl
dFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRh
dGVSZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxp
ZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJl
ZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7Cisg
ICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9i
cm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxl
ZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Q
b3BQb3B1cHNFbmFibGVkU3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucGx1Z2ludGhyZWFkYXN5
bmNjYWxsID0gTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbDsKKworICAgIG1fYnJvd3NlckZ1bmNz
LnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9i
cm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmll
cjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3Ry
aW5nSWRlbnRpZmllcnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9O
UE5fR2V0SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJp
bmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJv
bWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5pbnRmcm9taWRlbnRpZmllciA9IF9OUE5fSW50RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93
c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2Vy
RnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVu
Y3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5pbnZva2UgPSBXZWJDb3JlOjpOUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1bmNzLmludm9r
ZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVh
dGUgPSBXZWJDb3JlOjpOUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVy
dHkgPSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0g
X05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9O
UE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBO
X0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzTWV0
aG9kOworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9u
OworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOworICAgIG1f
YnJvd3NlckZ1bmNzLmNvbnN0cnVjdCA9IF9OUE5fQ29uc3RydWN0OworICAgIG1fYnJvd3NlckZ1
bmNzLmdldHZhbHVlZm9ydXJsID0gTlBOX0dldFZhbHVlRm9yVVJMOworICAgIG1fYnJvd3NlckZ1
bmNzLnNldHZhbHVlZm9ydXJsID0gTlBOX1NldFZhbHVlRm9yVVJMOworICAgIG1fYnJvd3NlckZ1
bmNzLmdldGF1dGhlbnRpY2F0aW9uaW5mbyA9IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm87CisK
KyAgICBtX2Jyb3dzZXJGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0gTlBOX1BvcFVwQ29udGV4dE1l
bnU7Cit9CisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisKKyNpZiBFTkFC
TEUoUExVR0lOX1BBQ0tBR0VfU0lNUExFX0hBU0gpCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpo
YXNoKCkgY29uc3QKK3sKKyAgICBzdHJ1Y3QgSGFzaENvZGVzIHsKKyAgICAgICAgdW5zaWduZWQg
aGFzaDsKKyAgICAgICAgdGltZV90IG1vZGlmaWVkRGF0ZTsKKyAgICB9IGhhc2hDb2RlczsKKwor
ICAgIGhhc2hDb2Rlcy5oYXNoID0gbV9wYXRoLmltcGwoKS0+aGFzaCgpOworICAgIGhhc2hDb2Rl
cy5tb2RpZmllZERhdGUgPSBtX2xhc3RNb2RpZmllZDsKKworICAgIHJldHVybiBTdHJpbmdIYXNo
ZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KCZoYXNoQ29kZXMpOworfQorCitib29s
IFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdp
blBhY2thZ2UmIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3Jp
cHRpb247Cit9CisjZW5kaWYKKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lv
bihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25zdAorewor
ICAgIC8vIHJldHVybiAtMSwgMCwgb3IgMSBpZiBwbHVnLWluIHZlcnNpb24gaXMgbGVzcyB0aGFu
LCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuCisgICAgLy8gdGhlIHBhc3NlZCB2ZXJzaW9uCisK
KyNpZiBPUyhXSU5ET1dTKQorICAgIGlmIChtX21vZHVsZVZlcnNpb24ubW9zdFNpZyAhPSBjb21w
YXJlVmVyc2lvbi5tb3N0U2lnKQorICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uLm1vc3RT
aWcgPiBjb21wYXJlVmVyc2lvbi5tb3N0U2lnID8gMSA6IC0xOworICAgIGlmIChtX21vZHVsZVZl
cnNpb24ubGVhc3RTaWcgIT0gY29tcGFyZVZlcnNpb24ubGVhc3RTaWcpCisgICAgICAgIHJldHVy
biBtX21vZHVsZVZlcnNpb24ubGVhc3RTaWcgPiBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZyA/IDEg
OiAtMTsKKyNlbHNlICAgIAorICAgIGlmIChtX21vZHVsZVZlcnNpb24gIT0gY29tcGFyZVZlcnNp
b24pCisgICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24gPiBjb21wYXJlVmVyc2lvbiA/IDEg
OiAtMTsKKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX01FVEFEQVRBX0NBQ0hFKQorYm9vbCBQbHVnaW5QYWNrYWdlOjplbnN1cmVQbHVnaW5M
b2FkZWQoKQoreworICAgIGlmICghbV9pbmZvSXNGcm9tQ2FjaGUpCisgICAgICAgIHJldHVybiBt
X2lzTG9hZGVkOworCisgICAgbV9xdWlya3MgPSBQbHVnaW5RdWlya1NldCgpOworICAgIG1fbmFt
ZSA9IFN0cmluZygpOworICAgIG1fZGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKKyAgICBtX2Z1bGxN
SU1FRGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKKyAgICBtX21vZHVsZVZlcnNpb24gPSAwOworCisg
ICAgcmV0dXJuIGZldGNoSW5mbygpOworfQorI2VuZGlmCisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oIGIvU291cmNlL1dlYktpdC93aW4v
UGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjgzNDA1NzY3OTdhYTZiYzgzMTc3
MmJjM2I0ZjljY2Y4Y2M4YmE2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2lu
L1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsdWdp
blBhY2thZ2VfaAorI2RlZmluZSBQbHVnaW5QYWNrYWdlX2gKKworI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKKyNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVy
bmFsLmgiCisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFw
OworCisgICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBh
Y2thZ2U+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlKCk7CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IGNyZWF0ZVBhY2thZ2UoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7CisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1
Z2luUGFja2FnZT4gY3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsKKyNlbmRpZgor
CisgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQor
ICAgICAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNj
cmlwdGlvbjsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBt
X3BhdGg7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsZU5hbWU7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBwYXJlbnREaXJlY3RvcnkoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudERpcmVjdG9yeTsgfQorICAgICAgICBQbGF0Zm9ybU1vZHVs
ZSBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZTsgfQorICAgICAgICB1aW50MTZfdCBO
UFZlcnNpb24oKSBjb25zdDsKKyAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdE1vZGlmaWVkOyB9CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRp
b25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2Ny
aXB0aW9uczsgfQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRl
bnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CisKKyAgICAgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQ
bHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKTsKKworICAgICAgICBib29s
IGxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWRXaXRo
b3V0U2h1dGRvd24oKTsKKworICAgICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNFbmFibGVkOyB9CisgICAgICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKworI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBw
bHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CisjZW5kaWYKKyAg
ICAgICAgaW50IGNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24m
KSBjb25zdDsKKyAgICAgICAgaW50IGNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0
OworICAgICAgICBQbHVnaW5RdWlya1NldCBxdWlya3MoKSBjb25zdCB7IHJldHVybiBtX3F1aXJr
czsgfQorICAgICAgICBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIHZlcnNpb24oKSBjb25z
dCB7IHJldHVybiBtX21vZHVsZVZlcnNpb247IH0KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAgIGJvb2wgZW5zdXJlUGx1Z2luTG9hZGVkKCk7Cisg
ICAgICAgIHZvaWQgc2V0TUlNRURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0
aW9uKTsKKyAgICAgICAgU3RyaW5nIGZ1bGxNSU1FRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVy
biBtX2Z1bGxNSU1FRGVzY3JpcHRpb247fQorI2VuZGlmCisgICAgcHJpdmF0ZToKKyAgICAgICAg
UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlm
aWVkKTsKKworICAgICAgICBib29sIGZldGNoSW5mbygpOworICAgICAgICBib29sIGlzUGx1Z2lu
QmxhY2tsaXN0ZWQoKTsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSk7CisKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURl
c2NyaXB0aW9uKCk7CisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOworCisg
ICAgICAgIGJvb2wgbV9pc0VuYWJsZWQ7CisgICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKKyAgICAg
ICAgaW50IG1fbG9hZENvdW50OworCisgICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOworICAg
ICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKKyAgICAgICAg
U3RyaW5nIG1fbmFtZTsKKyAgICAgICAgU3RyaW5nIG1fcGFyZW50RGlyZWN0b3J5OworCisgICAg
ICAgIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBtX21vZHVsZVZlcnNpb247CisKKyAgICAgICAgTUlN
RVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBNSU1FVG9F
eHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBQbGF0Zm9ybU1vZHVs
ZSBtX21vZHVsZTsKKyAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOworCisjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBf
U2h1dGRvd247CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAgICAg
TlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworI2VuZGlmCisKKyAgICAgICAgdm9pZCBm
cmVlTGlicmFyeVNvb24oKTsKKyAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoKTsK
KyAgICAgICAgVGltZXIgbV9mcmVlTGlicmFyeVRpbWVyOworCisgICAgICAgIFBsdWdpblF1aXJr
U2V0IG1fcXVpcmtzOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUp
CisgICAgICAgIFN0cmluZyBtX2Z1bGxNSU1FRGVzY3JpcHRpb247CisgICAgICAgIGJvb2wgbV9p
bmZvSXNGcm9tQ2FjaGU7CisjZW5kaWYKKyAgICB9OworCisgICAgLy8gRklYTUU6IFRoaXMgaXMg
YSB3b3JrYXJvdW5kIGJlY2F1c2UgUGx1Z2luUGFja2FnZUhhc2ggaXMgYnJva2VuIGFuZCBtYXkg
Y29uc2lkZXIga2V5cyB3aXRoIGRpZmZlcmVudCBoYXNoZXMgYXMgZXF1YWwuCisgICAgc3RydWN0
IFBsdWdpblBhY2thZ2VIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxSZWZQdHI8UGx1Z2luUGFja2Fn
ZT4gPiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IDY0Owor
ICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2ggeworICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCB1aW50cHRyX3Qga2V5KSB7IHJldHVybiByZWludGVycHJldF9j
YXN0PFBsdWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBrZXkpIHsgcmV0dXJuIGtleS0+
aGFzaCgpOyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgdWludHB0cl90IGEs
IGNvbnN0IHVpbnRwdHJfdCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdp
blBhY2thZ2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYikpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYgYSwg
Y29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlOjpl
cXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1Bs
dWdpbnMvUGx1Z2luUGFja2FnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1Bs
dWdpblBhY2thZ2VXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4NTI1N2Q2MjI5MjcyMDkxOGE1MWEzNmQ4
MjdkOGNjZDJkNDE5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVn
aW5zL1BsdWdpblBhY2thZ2VXaW4uY3BwCkBAIC0wLDAgKzEsMzM1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wcnVudGlt
ZV9pbXBsLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyBnZXRWZXJzaW9uSW5mbyhj
b25zdCBMUFZPSUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBTdHJpbmcmIGluZm8pCit7CisgICAg
TFBWT0lEIGJ1ZmZlcjsKKyAgICBVSU5UIGJ1ZmZlckxlbmd0aDsKKyAgICBTdHJpbmcgc3ViSW5m
byA9ICJcXFN0cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiArIGluZm87CisgICAgYm9vbCByZXR2
YWwgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEsCisgICAgICAgIGNvbnN0X2Nhc3Q8
VUNoYXIqPihzdWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwK
KyAgICAgICAgJmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7CisgICAgaWYgKCFyZXR2YWwgfHwgYnVm
ZmVyTGVuZ3RoID09IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFN1YnRy
YWN0IDEgZnJvbSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50IHRoZSB0cmFpbGluZyBudWxsIGNo
YXJhY3Rlci4KKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZm
ZXIpLCBidWZmZXJMZW5ndGggLSAxKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdp
bkJsYWNrbGlzdGVkKCkKK3sKKyAgICBpZiAobmFtZSgpID09ICJDaXRyaXggSUNBIENsaWVudCIp
IHsKKyAgICAgICAgLy8gVGhlIENpdHJpeCBJQ0EgQ2xpZW50IHBsdWctaW4gcmVxdWlyZXMgYSBN
b3ppbGxhLWJhc2VkIGJyb3dzZXI7IHNlZSA8cmRhcjovLzY0MTg2ODE+LgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUlu
IikgeworICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGlu
IFNpbHZlcmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgorICAgICAgICAvLyB0aGUg
bGF0ZXN0IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlz
IGNyYXNoLCBzbyBhbGxvdyBpdAorICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCisg
ICAgICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gc2xQbHVnaW5NaW5SZXF1
aXJlZCgweDUxQkUwMDAwLCAweDAwMDEwMDAwKTsKKworICAgICAgICBpZiAoY29tcGFyZUZpbGVW
ZXJzaW9uKHNsUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZU5hbWUoKSwgIm5wbW96YXgu
ZGxsIikpIHsKKyAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJvbCBj
b21wbGFpbnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRsbAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVOYW1lKCksICJucHdwZi5k
bGwiKSkgeworICAgICAgICAvLyBCdWcgNTcxMTk6IE1pY3Jvc29mdCBXaW5kb3dzIFByZXNlbnRh
dGlvbiBGb3VuZGF0aW9uIChXUEYpIHBsdWctaW4gY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBj
b20uZGxsCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAobmFtZSgpID09ICJZ
YWhvbyBBcHBsaWNhdGlvbiBTdGF0ZSBQbHVnaW4iKSB7CisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg2MAorICAgICAgICAvLyBCdWcgaW4gWWFo
b28gQXBwbGljYXRpb24gU3RhdGUgcGx1Zy1pbiBlYXJsaWVyIHRoYW4gMS4wLjAuNiBsZWFkcyB0
byBoZWFwIGNvcnJ1cHRpb24uIAorICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVW
ZXJzaW9uIHlhaG9vQXBwU3RhdGVQbHVnaW5NaW5SZXF1aXJlZCgweDAwMDAwMDA2LCAweDAwMDEw
MDAwKTsKKyAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbih5YWhvb0FwcFN0YXRlUGx1Z2lu
TWluUmVxdWlyZWQpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3Mo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0
aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1N
b2R1bGVWZXJzaW9uIGZsYXNoVGVuVmVyc2lvbigweDAwMDAwMDAwLCAweDAwMGEwMDAwKTsKKwor
ICAgICAgICAvLyBQcmUgMTAgRmxhc2ggb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMg
aWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50CisgICAgICAgIGlmIChjb21wYXJlRmls
ZVZlcnNpb24oZmxhc2hUZW5WZXJzaW9uKSA8IDApCisgICAgICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOworCisgICAgICAgIG1fcXVpcmtzLmFk
ZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKKyAgICAgICAgbV9xdWly
a3MuYWRkKFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOworICAgIH0KKworICAgIGlmIChu
YW1lKCkuY29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG5hbWUoKS5jb250YWlucygiV2luZG93cyBN
ZWRpYSIpKSB7CisgICAgICAgIC8vIFRoZSBXTVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhl
IGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28K
KyAgICAgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29y
cmVjdCBzaXplCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRX
aW5kb3dDYWxsKTsKKworICAgICAgICAvLyBXaW5kb3dsZXNzIG1vZGUgZG9lcyBub3Qgd29yayBh
dCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJlbW92ZSB0aGF0IHBhcmFtZXRlciAK
KyAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhlIHBsdWctaW4uCisgICAgICAgIG1f
cXVpcmtzLmFkZChQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKTsKKworICAg
ICAgICAvLyBXTVAgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29wIHRoYXQgaXQgZW50ZXJzIHdoZW5l
dmVyIHdlIGNhbGwgaXQgb3IKKyAgICAgICAgLy8gYXNrIGl0IHRvIHBhaW50LiBUaGlzIG1vZGFs
IGxvb3AgY2FuIGRlbGl2ZXIgbWVzc2FnZXMgdG8gb3RoZXIKKyAgICAgICAgLy8gd2luZG93cyBp
biBXZWJLaXQgYXQgdGltZXMgd2hlbiB0aGV5IGFyZSBub3QgZXhwZWN0aW5nIHRoZW0gKGZvcgor
ICAgICAgICAvLyBleGFtcGxlLCBkZWxpdmVyaW5nIGEgV01fUEFJTlQgbWVzc2FnZSBkdXJpbmcg
YSBsYXlvdXQpLCBhbmQgdGhlc2UKKyAgICAgICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMuCisgICAg
ICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApOworICAgIH0K
KworICAgIGlmIChuYW1lKCkgPT0gIlZMQyBNdWx0aW1lZGlhIFBsdWdpbiIgfHwgbmFtZSgpID09
ICJWTEMgTXVsdGltZWRpYSBQbHVnLWluIikgeworICAgICAgICAvLyBWTEMgaGFuZ3Mgb24gTlBQ
X0Rlc3Ryb3kgaWYgd2UgY2FsbCBOUFBfU2V0V2luZG93IHdpdGggYSBudWxsIHdpbmRvdyBoYW5k
bGUKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5k
bGVPbkRlc3Ryb3kpOworCisgICAgICAgIC8vIFZMQyAwLjguNmQgYW5kIDAuOC42ZSBjcmFzaCBp
ZiBtdWx0aXBsZSBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS81NzczMDcwPiB0cmFja3MgYWxsb3dpbmcgbXVsdGlwbGUgaW5zdGFuY2VzIHdoZW4gdGhp
cworICAgICAgICAvLyBidWcgaXMgZml4ZWQuCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKKyAgICB9CisKKyAgICAvLyBUaGUgRGl2
WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFu
ZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4g
dGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlmIChtaW1lVHlwZSA9PSAi
dmlkZW8vZGl2eCIpCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RT
ZXRXaW5kb3dDYWxsKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3Ig
YSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVz
IGFuCisgICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90
IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0
by4KKyAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUg
aW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5jZSBnb2VzIGF3YXkuCisgICAgLy8g
U2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxp
Y2F0aW9uL3gtc2lsdmVybGlnaHQiKQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtE
b250VW5sb2FkUGx1Z2luKTsKKworICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBs
ZXRNSU1FVHlwZShtaW1lVHlwZSkpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBhIHNpbmdsZSBwcm9j
ZXNzIGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fubm90IHJlbGlhYmx5IHVu
bG9hZCBhCisgICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxvYWQgdGhlIEphdmEgcGx1
Z2luLCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBWTQorICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKKworICAgICAgICAvLyBTZXR0
aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9s
bGluZyByZXBhaW50IHByb2JsZW1zCisgICAgICAgIC8vIHdpdGggdGhlIEphdmEgcGx1Zy1pbi4K
KyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNj
cm9sbGluZyk7CisgICAgfQorCisgICAgaWYgKG1pbWVUeXBlID09ICJhdWRpby94LXBuLXJlYWxh
dWRpby1wbHVnaW4iKSB7CisgICAgICAgIC8vIFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20g
Y2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRv
IG92ZXJmbG93LgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2FsbFduZFBy
b2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KTsKKworICAgICAgICBzdGF0aWMgY29uc3QgUGxh
dGZvcm1Nb2R1bGVWZXJzaW9uIGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbigw
eDAwMEIwQjI0LCAweDAwMDYwMDAwKTsKKworICAgICAgICAvLyBVbmxvYWRpbmcgUmVhbFBsYXll
ciB2ZXJzaW9ucyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNlIGEgaGFuZzsgc2VlIHJkYXI6Ly81
NjY5MzE3LgorICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVubG9hZGluZyB3aGVuIHRoaXMgYnVn
IGluIHRoZSBSZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQgKHJkYXI6Ly81NzEzMTQ3KQorICAg
ICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVy
VmVyc2lvbikgPiAwKQorICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVu
bG9hZFBsdWdpbik7CisgICAgfQorfQorCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygp
Cit7CisgICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOworICAgIHZlcnNpb25J
bmZvU2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX3Bh
dGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLCAmemVyb0hhbmRsZSk7
CisgICAgaWYgKHZlcnNpb25JbmZvU2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhdXRvIHZlcnNpb25JbmZvRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPih2ZXJz
aW9uSW5mb1NpemUpOworCisgICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKGNvbnN0X2Nhc3Q8
VUNoYXIqPihtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLAor
ICAgICAgICAgICAgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX25hbWUgPSBnZXRWZXJzaW9uSW5mbyh2ZXJz
aW9uSW5mb0RhdGEuZ2V0KCksICJQcm9kdWN0TmFtZSIpOworICAgIG1fZGVzY3JpcHRpb24gPSBn
ZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJGaWxlRGVzY3JpcHRpb24iKTsK
KyAgICBpZiAobV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3JpcHRpb24uaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFZTX0ZJWEVERklMRUlORk8qIGluZm87CisgICAgVUlO
VCBpbmZvU2l6ZTsKKyAgICBpZiAoIVZlclF1ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0YS5nZXQo
KSwgTCJcXCIsIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVv
ZihWU19GSVhFREZJTEVJTkZPKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbW9kdWxl
VmVyc2lvbi5sZWFzdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKKyAgICBtX21vZHVsZVZl
cnNpb24ubW9zdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKKworICAgIGlmIChpc1BsdWdp
bkJsYWNrbGlzdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxTdHJp
bmc+IHR5cGVzOworICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIk1J
TUVUeXBlIikuc3BsaXQoJ3wnLCB0eXBlcyk7CisgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9u
TGlzdHM7CisgICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZUV4
dGVudHMiKS5zcGxpdCgnfCcsIGV4dGVuc2lvbkxpc3RzKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBk
ZXNjcmlwdGlvbnM7CisgICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAi
RmlsZU9wZW5OYW1lIikuc3BsaXQoJ3wnLCBkZXNjcmlwdGlvbnMpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFN0cmluZyB0eXBl
ID0gdHlwZXNbaV0ubG93ZXIoKTsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gaSA8IGRl
c2NyaXB0aW9ucy5zaXplKCkgPyBkZXNjcmlwdGlvbnNbaV0gOiAiIjsKKyAgICAgICAgU3RyaW5n
IGV4dGVuc2lvbkxpc3QgPSBpIDwgZXh0ZW5zaW9uTGlzdHMuc2l6ZSgpID8gZXh0ZW5zaW9uTGlz
dHNbaV0gOiAiIjsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zVmVjdG9yOwor
ICAgICAgICBleHRlbnNpb25MaXN0LnNwbGl0KCcsJywgZXh0ZW5zaW9uc1ZlY3Rvcik7CisKKyAg
ICAgICAgLy8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxpc3QgdGhhdCBtYXkgYmUgYXQgdGhl
IGVuZCBvZiB0aGUgZGVzY3JpcHRpb24gc3RyaW5nLgorICAgICAgICBpbnQgcG9zID0gZGVzY3Jp
cHRpb24uZmluZCgiKCoiKTsKKyAgICAgICAgaWYgKHBvcyAhPSAtMSkgeworICAgICAgICAgICAg
Ly8gVGhlcmUgbWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZi4KKyAg
ICAgICAgICAgIGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9uW3BvcyAtIDFdID09ICcgJykKKyAg
ICAgICAgICAgICAgICBwb3MtLTsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRp
b24ubGVmdChwb3MpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBxdWly
a3MgZm9yIHRoZSBNSU1FIHR5cGVzIHRoaXMgcGx1Zy1pbiBzdXBwb3J0cworICAgICAgICBkZXRl
cm1pbmVRdWlya3ModHlwZSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZCh0eXBl
LCBleHRlbnNpb25zVmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKHR5
cGUsIGRlc2NyaXB0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQ
bHVnaW5QYWNrYWdlOjpsb2FkKCkKK3sKKyAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0
aXZlKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICAgICAgbV9mcmVlTGlicmFy
eVRpbWVyLnN0b3AoKTsKKyAgICB9IGVsc2UgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAgICAgaWYg
KG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2xvYWRDb3VudCsrOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBXQ0hBUiBjdXJyZW50UGF0
aFtNQVhfUEFUSF07CisKKyAgICAgICAgaWYgKCE6OkdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9Q
QVRILCBjdXJyZW50UGF0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
U3RyaW5nIHBhdGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNlRmluZCgnXFwn
KSk7CisKKyAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGguY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIC8vIExvYWQgdGhlIGxpYnJhcnkKKyAgICAgICAgbV9tb2R1bGUgPSA6Okxv
YWRMaWJyYXJ5RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEo
KSwgMCwgTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpOworCisgICAgICAgIGlmICghOjpT
ZXRDdXJyZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsKKyAgICAgICAgICAgIGlmIChtX21v
ZHVsZSkKKyAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9tb2R1bGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAg
TlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKKyAgICBOUF9J
bml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsKKyAgICBOUEVycm9yIG5wRXJyOwor
CisgICAgTlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVz
cyhtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiKTsKKyAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChO
UF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRF
bnRyeVBvaW50cyIpOworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIp
R2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOworCisgICAgaWYgKCFOUF9J
bml0aWFsaXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAg
ICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZiht
X3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2lu
RnVuY3MpOworCisgICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmbV9wbHVnaW5GdW5jcyk7
CisgICAgTE9HX05QRVJST1IobnBFcnIpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJP
UikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsK
KworICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOworICAgIExPR19O
UEVSUk9SKG5wRXJyKTsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAg
ICAgZ290byBhYm9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisK
K2Fib3J0OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0Cit7IAorICAgIGNvbnN0
IHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0geworICAgICAgICBtX25hbWUuaW1wbCgpLT5oYXNoKCks
CisgICAgICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbWltZVRv
RXh0ZW5zaW9ucy5zaXplKCkKKyAgICB9OworCisgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFz
aE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKK30KKworYm9vbCBQbHVnaW5Q
YWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdl
JiBiKQoreworICAgIGlmIChhLm1fbmFtZSAhPSBiLm1fbmFtZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGEubV9kZXNjcmlwdGlvbiAhPSBiLm1fZGVzY3JpcHRpb24pCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhLm1fbWltZVRvRXh0ZW5zaW9ucy5zaXplKCkg
IT0gYi5tX21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBhLm1f
bWltZVRvRXh0ZW5zaW9ucy5lbmQoKS5rZXlzKCk7CisgICAgZm9yIChNSU1FVG9FeHRlbnNpb25z
TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IGEubV9taW1lVG9FeHRlbnNpb25zLmJlZ2lu
KCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCFiLm1fbWltZVRvRXh0
ZW5zaW9ucy5jb250YWlucygqaXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCit1aW50MTZfdCBQbHVnaW5QYWNrYWdlOjpOUFZlcnNp
b24oKSBjb25zdAoreworICAgIHJldHVybiBOUF9WRVJTSU9OX01JTk9SOworfQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5RdWlya1NldC5oIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5YTMzODNk
YmI0NDY5MDk5NDA3ZDZiZGExMjNkMTAxZGNiNWQzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKQEAgLTAsMCArMSw2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFBsdWdpblF1aXJrU2V0X2gKKyNkZWZpbmUgUGx1Z2luUXVpcmtTZXRfaAorCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworICAgIGVudW0gUGx1Z2luUXVpcmsgeworICAgICAgICBQbHVnaW5RdWly
a1dhbnRzTW96aWxsYVVzZXJBZ2VudCA9IDEgPDwgMCwKKyAgICAgICAgUGx1Z2luUXVpcmtEZWZl
ckZpcnN0U2V0V2luZG93Q2FsbCA9IDEgPDwgMSwKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRs
ZUludmFsaWRhdGUgPSAxIDw8IDIsIAorICAgICAgICBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xl
c3NWaWRlb1BhcmFtID0gMSA8PCAzLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlV01Vc2Vy
UGx1c09uZU1lc3NhZ2VzID0gMSA8PCA0LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRVbmxvYWRQ
bHVnaW4gPSAxIDw8IDUsCisgICAgICAgIFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2Ft
ZU1lc3NhZ2VSZWN1cnNpdmVseSA9IDEgPDwgNiwKKyAgICAgICAgUGx1Z2luUXVpcmtIYXNNb2Rh
bE1lc3NhZ2VMb29wID0gMSA8PCA3LAorICAgICAgICBQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5
QnVnID0gMSA8PCA4LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5T
Y3JvbGxpbmcgPSAxIDw8IDksCisgICAgICAgIFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dI
YW5kbGVPbkRlc3Ryb3kgPSAxIDw8IDEwLAorICAgICAgICBQbHVnaW5RdWlya0RvbnRBbGxvd011
bHRpcGxlSW5zdGFuY2VzID0gMSA8PCAxMSwKKyAgICAgICAgUGx1Z2luUXVpcmtSZXF1aXJlc0d0
a1Rvb2xLaXQgPSAxIDw8IDEyLAorICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNj
cmVlbkRlcHRoID0gMSA8PCAxMywKKyAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRv
d01vcmVUaGFuT25jZSA9IDEgPDwgMTQsCisgICAgICAgIFBsdWdpblF1aXJrSWdub3JlUmlnaHRD
bGlja0luV2luZG93bGVzc01vZGUgPSAxIDw8IDE1LAorICAgICAgICBQbHVnaW5RdWlya1dhbnRz
Q2hyb21lVXNlckFnZW50ID0gMSA8PCAxNgorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5RdWly
a1NldCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFBsdWdpblF1aXJrU2V0KCkgOiBt
X3F1aXJrcygwKSB7IH0KKyAgICAgICAgICAgIHZvaWQgYWRkKFBsdWdpblF1aXJrIHF1aXJrKSB7
IG1fcXVpcmtzIHw9IHF1aXJrOyB9CisgICAgICAgICAgICBib29sIGNvbnRhaW5zKFBsdWdpblF1
aXJrIHF1aXJrKSBjb25zdCB7IHJldHVybiBtX3F1aXJrcyAmIHF1aXJrOyB9CisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICB1bnNpZ25lZCBtX3F1aXJrczsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQbHVnaW5RdWlya1NldF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzliOWIxMjBmMWY0
MjBjNmI0YTdjNmJmZjAwNzYzMzAwYjU1ODI0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApAQCAtMCwwICsxLDQ4MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtLmgiCisKKyNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKKyNpbmNsdWRlICJQbHVn
aW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVk
ZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKKy8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2Ug
dG8gcmV0dXJuIC0xIHRvIGluZGljYXRlIGVycm9yCisvLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3Qg
Y2xhc2ggd2l0aCB0aGVtLgorc3RhdGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7CisK
K3VzaW5nIHN0ZDo6bWF4OwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordHlwZWRlZiBIYXNoTWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7CitzdGF0aWMgU3Ry
ZWFtTWFwJiBzdHJlYW1zKCkKK3sKKyAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7
CisgICAgcmV0dXJuIHN0YXRpY1N0cmVhbXM7Cit9CisKK1BsdWdpblN0cmVhbTo6UGx1Z2luU3Ry
ZWFtKFBsdWdpblN0cmVhbUNsaWVudCogY2xpZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQq
IG5vdGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzLCBOUFAgaW5zdGFu
Y2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0JiBxdWlya3MpCisgICAgOiBtX3Jlc291cmNlUmVxdWVz
dChyZXNvdXJjZVJlcXVlc3QpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2ZyYW1l
KGZyYW1lKQorICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAgLCBtX3NlbmROb3Rp
ZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKKyAgICAsIG1fc3RyZWFtU3RhdGUoU3RyZWFtQmVm
b3JlU3RhcnRlZCkKKyAgICAsIG1fbG9hZE1hbnVhbGx5KGZhbHNlKQorICAgICwgbV9kZWxheURl
bGl2ZXJ5VGltZXIoKnRoaXMsICZQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVk
KQorICAgICwgbV90ZW1wRmlsZUhhbmRsZShpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQorICAg
ICwgbV9wbHVnaW5GdW5jcyhwbHVnaW5GdW5jcykKKyAgICAsIG1faW5zdGFuY2UoaW5zdGFuY2Up
CisgICAgLCBtX3F1aXJrcyhxdWlya3MpCit7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworCisg
ICAgbV9zdHJlYW0udXJsID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgbV9zdHJl
YW0ucGRhdGEgPSAwOworICAgIG1fc3RyZWFtLmVuZCA9IDA7CisgICAgbV9zdHJlYW0ubm90aWZ5
RGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKKyAgICBtX3N0cmVhbS5o
ZWFkZXJzID0gMDsKKworICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsK
K30KKworUGx1Z2luU3RyZWFtOjp+UGx1Z2luU3RyZWFtKCkKK3sKKyAgICBBU1NFUlQobV9zdHJl
YW1TdGF0ZSAhPSBTdHJlYW1TdGFydGVkKTsKKyAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAg
IGZhc3RGcmVlKChjaGFyKiltX3N0cmVhbS51cmwpOworCisgICAgc3RyZWFtcygpLnJlbW92ZSgm
bV9zdHJlYW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6c3RhcnQoKQoreworICAgIEFTU0VS
VCghbV9sb2FkTWFudWFsbHkpOworICAgIG1fbG9hZGVyID0gcmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCktPnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZChtX2ZyYW1lLCB0aGlzLCBtX3Jlc291cmNlUmVx
dWVzdCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzdG9wKCkKK3sKKyAgICBtX3N0cmVhbVN0
YXRlID0gU3RyZWFtU3RvcHBlZDsKKworICAgIGlmIChtX2xvYWRNYW51YWxseSkgeworICAgICAg
ICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRM
b2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpOworICAgICAg
ICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOworCisgICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+
aXNMb2FkaW5nTWFpblJlc291cmNlKCkpCisgICAgICAgICAgICBkb2N1bWVudExvYWRlci0+Y2Fu
Y2VsTWFpblJlc291cmNlTG9hZChtX2ZyYW1lLT5sb2FkZXIoKS5jYW5jZWxsZWRFcnJvcihtX3Jl
c291cmNlUmVxdWVzdCkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9s
b2FkZXIpIHsKKyAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOworICAgICAgICBtX2xvYWRlciA9
IDA7CisgICAgfQorCisgICAgbV9jbGllbnQgPSAwOworfQorCitzdGF0aWMgdWludDMyX3QgbGFz
dE1vZGlmaWVkRGF0ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBk
b3VibGUgbGFzdE1vZGlmaWVkID0gcmVzcG9uc2UubGFzdE1vZGlmaWVkKCk7CisgICAgaWYgKCFz
dGQ6OmlzZmluaXRlKGxhc3RNb2RpZmllZCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIGxhc3RNb2RpZmllZCAqIDEwMDA7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0
cmVhbSgpCit7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRl
ZCk7CisKKyAgICBjb25zdCBVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNvdXJjZVJlc3BvbnNlLnVy
bCgpOworCisgICAgLy8gU29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0IHRoYXQgamF2YXNjcmlw
dCBVUkxzIGFyZSBwYXNzZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMgdGhlCisgICAgLy8gZm9y
bWF0IHVzZWQgd2hlbiByZXF1ZXN0aW5nIHRoZSBVUkwuCisgICAgaWYgKHByb3RvY29sSXNKYXZh
U2NyaXB0KHJlc3BvbnNlVVJMKSkKKyAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChk
ZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMocmVzcG9uc2VVUkwuc3RyaW5nKCkpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChyZXNwb25z
ZVVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIENTdHJpbmcgbWltZVR5cGVTdHIg
PSBtX3Jlc291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7CisKKyAgICBsb25nIGxvbmcg
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVu
dExlbmd0aCgpOworCisgICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgeworICAg
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAgIFN0cmluZyBzZXBhcmF0
b3IgPSBBU0NJSUxpdGVyYWwoIjogIik7CisKKyAgICAgICAgU3RyaW5nIHN0YXR1c0xpbmUgPSAi
SFRUUCAiICsgU3RyaW5nOjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2Rl
KCkpICsgIiBPS1xuIjsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RhdHVzTGluZSk7
CisKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJj
ZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVy
RmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHNlcGFyYXRvcik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUp
OworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIH0KKwor
ICAgICAgICBtX2hlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOworCisg
ICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNz
ZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAorICAgICAgICAv
LyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0
IGtub3duIGF0IHRoZSBtb21lbnQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NDcwNTk5
PiB0cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50TGVu
Z3RoXSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgorICAgICAgICBTdHJpbmcgY29udGVudEVu
Y29kaW5nID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6Q29udGVudEVuY29kaW5nKTsKKyAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcuaXNOdWxs
KCkgJiYgY29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCisgICAgICAgICAgICBleHBlY3Rl
ZENvbnRlbnRMZW5ndGggPSAtMTsKKyAgICB9CisKKyAgICBtX3N0cmVhbS5oZWFkZXJzID0gbV9o
ZWFkZXJzLmRhdGEoKTsKKyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubmRh
dGEgPSB0aGlzOworICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3RlZENvbnRlbnRMZW5ndGgs
IDBMTCk7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbGFzdE1vZGlmaWVkRGF0ZShtX3Jl
c291cmNlUmVzcG9uc2UpOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7
CisKKyAgICBtX3RyYW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKKyAgICBtX29mZnNldCA9IDA7Cisg
ICAgbV9yZWFzb24gPSBXZWJSZWFzb25Ob25lOworCisgICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFt
IGlmIGRlc3Ryb3lzdHJlYW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFu
ZGxlcgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7CisKKyAgICAvLyBj
YWxsaW5nIGludG8gYSBwbHVnLWluIGNvdWxkIHJlc3VsdCBpbiByZS1lbnRyYW5jZSBpZiB0aGUg
cGx1Zy1pbiB5aWVsZHMKKyAgICAvLyBjb250cm9sIHRvIHRoZSBzeXN0ZW0gKHJkYXI6Ly81NzQ0
ODk5KS4gcHJldmVudCB0aGlzIGJ5IGRlZmVycmluZyBmdXJ0aGVyCisgICAgLy8gbG9hZGluZyB3
aGlsZSBjYWxsaW5nIGludG8gdGhlIHBsdWctaW4uCisgICAgaWYgKG1fbG9hZGVyKQorICAgICAg
ICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICBOUEVycm9yIG5wRXJyID0g
bV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVUeXBlKW1pbWVUeXBl
U3RyLmRhdGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKKyAgICBpZiAo
bV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAg
ICAKKyAgICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwgdG8gbmV3
c3RyZWFtIHdlIHJldHVybgorICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikg
eworICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKG5wRXJyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFydGVkOworCisgICAgaWYg
KG1fdHJhbnNmZXJNb2RlID09IE5QX05PUk1BTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9w
YXRoID0gb3BlblRlbXBvcmFyeUZpbGUoIldLUCIsIG1fdGVtcEZpbGVIYW5kbGUpOworCisgICAg
Ly8gU29tZXRoaW5nIHdlbnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRoZSBzdHJlYW0KKyAgICBp
ZiAoIWlzSGFuZGxlVmFsaWQobV90ZW1wRmlsZUhhbmRsZSkpCisgICAgICAgIGNhbmNlbEFuZERl
c3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworfQorCitOUFAgUGx1Z2luU3RyZWFtOjpv
d25lckZvclN0cmVhbShOUFN0cmVhbSogc3RyZWFtKQoreworICAgIHJldHVybiBzdHJlYW1zKCku
Z2V0KHN0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95U3Ry
ZWFtKE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0
KHRoaXMpOworCisgICAgZGVzdHJveVN0cmVhbShyZWFzb24pOworICAgIHN0b3AoKTsKK30KKwor
dm9pZCBQbHVnaW5TdHJlYW06OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAg
IG1fcmVhc29uID0gcmVhc29uOworICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05FKSB7Cisg
ICAgICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVkCisgICAg
ICAgIGlmIChtX2RlbGl2ZXJ5RGF0YSkKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNp
emUoMCk7CisgICAgfSBlbHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0YS0+
c2l6ZSgpID4gMCkgeworICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3RyZWFt
ZWQsIGRvbid0IGRlc3Ryb3kgdGhlIHN0cmVhbSBub3cuCisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZGVzdHJveVN0cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGVzdHJveVN0
cmVhbSgpCit7CisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpOworICAg
IEFTU0VSVCghbV9kZWxpdmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKTsK
KworICAgIGNsb3NlRmlsZShtX3RlbXBGaWxlSGFuZGxlKTsKKworICAgIGJvb2wgbmV3U3RyZWFt
Q2FsbGVkID0gbV9zdHJlYW0ubmRhdGE7CisKKyAgICAvLyBQcm90ZWN0IGZyb20gZGVzdHJ1Y3Rp
b24gaWY6CisgICAgLy8gIE5QTl9EZXN0cm95U3RyZWFtIGlzIGNhbGxlZCBmcm9tIE5QUF9OZXdT
dHJlYW0gb3IKKyAgICAvLyAgUGx1Z2luU3RyZWFtQ2xpZW50OjpzdHJlYW1EaWRGaW5pc2hMb2Fk
aW5nKCkgcmVtb3ZlcyB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFt
PiBwcm90ZWN0KHRoaXMpOworCisgICAgaWYgKG5ld1N0cmVhbUNhbGxlZCkgeworICAgICAgICBp
ZiAobV9yZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxF
IHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpKSB7CisgICAgICAgICAgICBBU1NF
UlQoIW1fcGF0aC5pc051bGwoKSk7CisKKyAgICAgICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAg
ICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICAgICAgICAg
IG1fcGx1Z2luRnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcGF0aC51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgICAgICBt
X2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKSB7CisgICAgICAgICAgICBp
ZiAobV9sb2FkZXIpCisgICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmco
dHJ1ZSk7CisKKyAgICAgICAgICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5kZXN0
cm95c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOworCisgICAgICAgICAg
ICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOworCisgICAgICAgICAgICBMT0dfTlBFUlJPUihucEVycik7CisgICAgICAgIH0K
KworICAgICAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fc2VuZE5v
dGlmaWNhdGlvbikgeworICAgICAgICAvLyBGbGFzaCA5IGNhbiBkZXJlZmVyZW5jZSBudWxsIGlm
IHdlIGNhbGwgTlBQX1VSTE5vdGlmeSB3aXRob3V0IGZpcnN0IGNhbGxpbmcgTlBQX05ld1N0cmVh
bQorICAgICAgICAvLyBmb3IgcmVxdWVzdHMgbWFkZSB3aXRoIE5QTl9Qb3N0VVJMTm90aWZ5OyBz
ZWUgPHJkYXI6Ly81NTg4ODA3PgorICAgICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICBt
X2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICAgICAgaWYgKCFuZXdTdHJlYW1D
YWxsZWQgJiYgbV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1Zykg
JiYKKyAgICAgICAgICAgIGVxdWFsSWdub3JpbmdDYXNlKG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBN
ZXRob2QoKSwgIlBPU1QiKSkgeworICAgICAgICAgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JN
QUw7CisgICAgICAgICAgICBtX3N0cmVhbS51cmwgPSAiIjsKKyAgICAgICAgICAgIG1fc3RyZWFt
Lm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7CisKKyAgICAgICAgICAgIHN0YXRpYyBjaGFyIGVt
cHR5TWltZVR5cGVbXSA9ICIiOworICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFt
KG1faW5zdGFuY2UsIGVtcHR5TWltZVR5cGUsICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVy
TW9kZSk7CisgICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFu
Y2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOworCisgICAgICAgICAgICAvLyBpbiBzdWNjZXNzZnVs
IHJlcXVlc3RzLCB0aGUgVVJMIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgZnJlZWQgaW4g
b3VyCisgICAgICAgICAgICAvLyBkZXN0cnVjdG9yLCBzbyByZXNldCBpdCB0byAwCisgICAgICAg
ICAgICBtX3N0cmVhbS51cmwgPSAwOworICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luRnVuY3Mt
PnVybG5vdGlmeShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKKyAgICAgICAgaWYgKG1fbG9h
ZGVyKQorICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOworICAg
IH0KKworICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOworCisgICAgaWYgKCFtX2xv
YWRNYW51YWxseSAmJiBtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnN0cmVhbURpZEZpbmlz
aExvYWRpbmcodGhpcyk7CisKKyAgICBpZiAoIW1fcGF0aC5pc051bGwoKSkKKyAgICAgICAgZGVs
ZXRlRmlsZShtX3BhdGgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGVsYXlEZWxpdmVyeVRp
bWVyRmlyZWQoKQoreworICAgIGRlbGl2ZXJEYXRhKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFt
OjpkZWxpdmVyRGF0YSgpCit7CisgICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRhKTsKKyAgICAKKyAg
ICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGNhbmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJjZUxvYWRlciBvbiBlcnJv
ciBzbyB3ZSBkb24ndCByZWFjaCB0aGlzIGNhc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBpZiAoIW1f
c3RyZWFtLm5kYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW50MzJfdCB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsK
KyAgICBpbnQzMl90IHRvdGFsQnl0ZXNEZWxpdmVyZWQgPSAwOworCisgICAgaWYgKG1fbG9hZGVy
KQorICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICB3aGlsZSAo
dG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgaW50MzJfdCBkZWxp
dmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9zdHJl
YW0pOworCisgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKKyAgICAgICAgICAgIG1f
ZGVsYXlEZWxpdmVyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVy
eUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7CisgICAgICAgICAgICBp
bnQzMl90IGRhdGFMZW5ndGggPSBkZWxpdmVyeUJ5dGVzOworICAgICAgICAgICAgY2hhciogZGF0
YSA9IG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkOworCisgICAg
ICAgICAgICAvLyBXcml0ZSB0aGUgZGF0YQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1f
cGx1Z2luRnVuY3MtPndyaXRlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9vZmZzZXQsIGRhdGFM
ZW5ndGgsICh2b2lkKilkYXRhKTsKKyAgICAgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDwgMCkg
eworICAgICAgICAgICAgICAgIExPR19QTFVHSU5fTkVUX0VSUk9SKCk7CisgICAgICAgICAgICAg
ICAgaWYgKG1fbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJz
TG9hZGluZyhmYWxzZSk7CisgICAgICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShO
UFJFU19ORVRXT1JLX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCBkYXRhTGVu
Z3RoKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgICAg
ICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhm
YWxzZSk7CisKKyAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDApIHsKKyAgICAgICAgaWYg
KHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAgICAgICAgICBpbnQgcmVt
YWluaW5nQnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZDsKKyAgICAgICAg
ICAgIG1lbW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxpdmVyeURhdGEtPmRhdGEo
KSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsKKyAgICAgICAgICAgIG1f
ZGVsaXZlcnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGlmICht
X3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICAgICAgICAgIGRlc3Ryb3lTdHJlYW0o
KTsKKyAgICAgICAgfQorICAgIH0gCit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNj
cmlwdFN0cmVhbShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0
cmluZykKK3sKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1
ZXN0VVJMLCAidGV4dC9wbGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwgIiIpKTsKKworICAg
IGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghcmVzdWx0U3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGRpZFJlY2VpdmVEYXRh
KDAsIHJlc3VsdFN0cmluZy5kYXRhKCksIHJlc3VsdFN0cmluZy5sZW5ndGgoKSk7CisgICAgICAg
IGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9sb2FkZXIgPSAwOworCisgICAgZGVzdHJveVN0cmVhbShyZXN1bHRT
dHJpbmcuaXNOdWxsKCkgPyBOUFJFU19ORVRXT1JLX0VSUiA6IE5QUkVTX0RPTkUpOworfQorCit2
b2lkIFBsdWdpblN0cmVhbTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAg
IEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVCht
X3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgbV9yZXNvdXJjZVJl
c3BvbnNlID0gcmVzcG9uc2U7CisKKyAgICBzdGFydFN0cmVhbSgpOworfQorCit2b2lkIFBsdWdp
blN0cmVhbTo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRl
ciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGxv
YWRlciwgbG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBT
dHJlYW1TdGFydGVkKTsKKworICAgIC8vIElmIHRoZSBwbHVnLWluIGNhbmNlbHMgdGhlIHN0cmVh
bSBpbiBkZWxpdmVyRGF0YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKKyAgICAvLyBzbyBwcm90ZWN0
IGl0IGhlcmUuCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKKworICAg
IGlmIChtX3RyYW5zZmVyTW9kZSAhPSBOUF9BU0ZJTEVPTkxZKSB7CisgICAgICAgIGlmICghbV9k
ZWxpdmVyeURhdGEpCisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YSA9IHN0ZDo6bWFrZV91bmlx
dWU8VmVjdG9yPGNoYXI+PigpOworCisgICAgICAgIGludCBvbGRTaXplID0gbV9kZWxpdmVyeURh
dGEtPnNpemUoKTsKKyAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVu
Z3RoKTsKKyAgICAgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyBvbGRTaXplLCBk
YXRhLCBsZW5ndGgpOworCisgICAgICAgIGRlbGl2ZXJEYXRhKCk7CisgICAgfQorCisgICAgaWYg
KG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RvcHBlZCAmJiBpc0hhbmRsZVZhbGlkKG1fdGVtcEZp
bGVIYW5kbGUpKSB7CisgICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSB3cml0ZVRvRmlsZShtX3Rl
bXBGaWxlSGFuZGxlLCBkYXRhLCBsZW5ndGgpOworICAgICAgICBpZiAoYnl0ZXNXcml0dGVuICE9
IGxlbmd0aCkKKyAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09S
S19FUlIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmRpZEZhaWwoTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAg
QVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisKKyAgICBMT0dfUExV
R0lOX05FVF9FUlJPUigpOworCisgICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0IGluIG91
ciBiZWluZyBkZWxldGVkCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsK
KworICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworCisgICAgbV9sb2FkZXIg
PSAwOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciogbG9hZGVyKQoreworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBs
b2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0
YXJ0ZWQpOworCisgICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0IGluIG91ciBiZWluZyBk
ZWxldGVkCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKKworICAgIGRl
c3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7CisKKyAgICBtX2xvYWRlciA9IDA7Cit9CisKK2Jvb2wg
UGx1Z2luU3RyZWFtOjp3YW50c0FsbFN0cmVhbXMoKSBjb25zdAoreworICAgIGlmICghbV9wbHVn
aW5GdW5jcy0+Z2V0dmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZvaWQqIHJl
c3VsdCA9IDA7CisgICAgaWYgKG1fcGx1Z2luRnVuY3MtPmdldHZhbHVlKG1faW5zdGFuY2UsIE5Q
UFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmcmVzdWx0KSAhPSBOUEVSUl9OT19FUlJP
UikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHJlc3VsdCAhPSAwOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5o
IGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
MDAzMmM0YzE5MDQ1MTIyZjU2YWNlZjYzMmU1NzgxOGExNWE5YmNmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uaApAQCAtMCwwICsxLDEy
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFBsdWdpblN0cmVhbV9oCisjZGVmaW5lIFBsdWdpblN0cmVhbV9o
CisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSAi
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5o
IgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2UuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEZyYW1lOworICAgIGNs
YXNzIFBsdWdpblN0cmVhbTsKKworICAgIGVudW0gUGx1Z2luU3RyZWFtU3RhdGUgeyBTdHJlYW1C
ZWZvcmVTdGFydGVkLCBTdHJlYW1TdGFydGVkLCBTdHJlYW1TdG9wcGVkIH07CisKKyAgICBjbGFz
cyBQbHVnaW5TdHJlYW1DbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+UGx1
Z2luU3RyZWFtQ2xpZW50KCkge30KKyAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZpbmlz
aExvYWRpbmcoUGx1Z2luU3RyZWFtKikge30KKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luU3Ry
ZWFtIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luU3RyZWFtPiwgcHJpdmF0ZSBOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQbHVnaW5TdHJlYW0+IGNyZWF0ZShQbHVnaW5TdHJlYW1DbGllbnQqIGNsaWVudCwg
RnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2VuZE5v
dGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSwgY29uc3QgTlBQbHVnaW5GdW5jcyogZnVuY3Rp
b25zLCBOUFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0JiBxdWlya3MpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luU3RyZWFtKGNsaWVudCwg
ZnJhbWUsIHJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEsIGZ1bmN0aW9ucywg
aW5zdGFuY2UsIHF1aXJrcykpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgflBsdWdpblN0
cmVhbSgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBzdGFydCgpOworICAgICAgICB2b2lkIHN0
b3AoKTsKKworICAgICAgICB2b2lkIHN0YXJ0U3RyZWFtKCk7CisKKyAgICAgICAgdm9pZCBzZXRM
b2FkTWFudWFsbHkoYm9vbCBsb2FkTWFudWFsbHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2FkTWFu
dWFsbHk7IH0KKworICAgICAgICB2b2lkIHNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IFVSTCYg
cmVxdWVzdFVSTCwgY29uc3QgV1RGOjpDU3RyaW5nJiByZXN1bHRTdHJpbmcpOworICAgICAgICB2
b2lkIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOworCisgICAgICAgIHN0YXRpYyBO
UFAgb3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qKTsKKworICAgICAgICAvLyBOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlckNsaWVudAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyKik7CisgICAgICAgIHZpcnR1YWwgYm9vbCB3YW50c0FsbFN0cmVhbXMoKSBjb25zdDsK
KworICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdpblN0cmVhbShQbHVnaW5TdHJlYW1DbGllbnQq
LCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwg
dm9pZCogbm90aWZ5RGF0YSwgY29uc3QgTlBQbHVnaW5GdW5jcyosIE5QUCBpbnN0YW5jZSwgY29u
c3QgUGx1Z2luUXVpcmtTZXQmKTsKKworICAgICAgICB2b2lkIGRlbGl2ZXJEYXRhKCk7CisgICAg
ICAgIHZvaWQgZGVzdHJveVN0cmVhbShOUFJlYXNvbik7CisgICAgICAgIHZvaWQgZGVzdHJveVN0
cmVhbSgpOworCisgICAgICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKKyAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc291cmNlUmVzcG9uc2U7CisKKyAgICAgICAgUGx1
Z2luU3RyZWFtQ2xpZW50KiBtX2NsaWVudDsKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAg
ICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAg
IHZvaWQqIG1fbm90aWZ5RGF0YTsKKyAgICAgICAgYm9vbCBtX3NlbmROb3RpZmljYXRpb247Cisg
ICAgICAgIFBsdWdpblN0cmVhbVN0YXRlIG1fc3RyZWFtU3RhdGU7CisgICAgICAgIGJvb2wgbV9s
b2FkTWFudWFsbHk7CisKKyAgICAgICAgVGltZXIgbV9kZWxheURlbGl2ZXJ5VGltZXI7CisgICAg
ICAgIHZvaWQgZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoKTsKKworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPGNoYXI+PiBtX2RlbGl2ZXJ5RGF0YTsKKworICAgICAgICBQbGF0Zm9ybUZp
bGVIYW5kbGUgbV90ZW1wRmlsZUhhbmRsZTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNz
KiBtX3BsdWdpbkZ1bmNzOworICAgICAgICBOUFAgbV9pbnN0YW5jZTsKKyAgICAgICAgdWludDE2
X3QgbV90cmFuc2Zlck1vZGU7CisgICAgICAgIGludDMyX3QgbV9vZmZzZXQ7CisgICAgICAgIENT
dHJpbmcgbV9oZWFkZXJzOworICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBOUFJlYXNv
biBtX3JlYXNvbjsKKyAgICAgICAgTlBTdHJlYW0gbV9zdHJlYW07CisgICAgICAgIFBsdWdpblF1
aXJrU2V0IG1fcXVpcmtzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
MGYwNDA4ODIzZTAzMzMzZWE5YTQ5ZGE5MmEyOGJlZDM0N2ViNjRkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMCwwICsxLDE0
ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9CcmlkZ2VKU0MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0VsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3Qu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZUxvYWRlckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVUcmVlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVE1MUGx1Z0luRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck5hbWVz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01C
aW5kaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvS2V5Ym9hcmRFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3Ry
eS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlckJveC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyT2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9XaGVlbEV2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9jX2luc3RhbmNlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvcnVudGlt
ZV9yb290Lmg+CisjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1
ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
KyNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRl
ICJQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCisjZW5kaWYKKwordXNpbmcgSlNDOjpFeGVj
U3RhdGU7Cit1c2luZyBKU0M6OkpTTG9jazsKK3VzaW5nIEpTQzo6SlNPYmplY3Q7Cit1c2luZyBK
U0M6OkpTVmFsdWU7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKwordXNpbmcg
c3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworc3RhdGljIGludCBzX2NhbGxpbmdQbHVn
aW47CisKK3R5cGVkZWYgSGFzaE1hcDxOUFAsIFBsdWdpblZpZXcqPiBJbnN0YW5jZU1hcDsKKwor
c3RhdGljIEluc3RhbmNlTWFwJiBpbnN0YW5jZU1hcCgpCit7CisgICAgc3RhdGljIEluc3RhbmNl
TWFwJiBtYXAgPSAqbmV3IEluc3RhbmNlTWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRp
YyBTdHJpbmcgc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIGlmICghcHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworCisgICAgLy8gVGhpcyByZXR1cm5zIGFuIHVuZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1
cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoMTEpKTsK
K30KKworUGx1Z2luVmlldyogUGx1Z2luVmlldzo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CisK
K3ZvaWQgUGx1Z2luVmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKCkKK3sKKyAgICBwb3BQ
b3B1cHNFbmFibGVkU3RhdGUoKTsKK30KKworSW50UmVjdCBQbHVnaW5WaWV3Ojp3aW5kb3dDbGlw
UmVjdCgpIGNvbnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4K
KyAgICBJbnRSZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBv
dXIgZWxlbWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVy
IGFuZCBmcmFtZSB2aWV3LgorICAgIEZyYW1lVmlldyogcGFyZW50VmlldyA9IG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS52aWV3KCk7CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHBhcmVudFZpZXctPndp
bmRvd0NsaXBSZWN0Rm9yRnJhbWVPd25lcihtX2VsZW1lbnQsIHRydWUpKTsKKworICAgIHJldHVy
biBjbGlwUmVjdDsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLnByaW50aW5nKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9IGZyYW1lUmVjdCgpKQorICAgICAg
ICBXaWRnZXQ6OnNldEZyYW1lUmVjdChyZWN0KTsKKworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgp
OworCisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBPbiBXaW5kb3dzIGFsd2F5cyBjYWxsIHBsdWdp
biB0byBjaGFuZ2UgZ2VvbWV0cnkuCisgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOworI2VsaWYg
ZGVmaW5lZChYUF9VTklYKQorICAgIC8vIE9uIFVuaXgsIG11bHRpcGxlIGNhbGxzIHRvIHNldE5Q
V2luZG93KCkgaW4gd2luZG93ZWQgbW9kZSBjYXVzZXMgRmxhc2ggdG8gY3Jhc2gKKyAgICBpZiAo
bV9tb2RlID09IE5QX0ZVTEwgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dS
ZWN0KHJlY3QpOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZnJhbWVSZWN0c0NoYW5n
ZWQoKQoreworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6
OmNsaXBSZWN0Q2hhbmdlZCgpCit7CisgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV9w
bHVnaW4gfHwgbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQcm90ZWN0
IHRoZSBwbHVnLWluIGZyb20gZGVsZXRpb24gd2hpbGUgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50Lgor
ICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KHRoaXMpOworCisgICAgaWYgKGV2ZW50LT5p
c01vdXNlRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkp
CisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+
KGV2ZW50KSk7CisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpCisgICAgICAgIGhhbmRsZVdoZWVsRXZlbnQoc3RhdGlj
X2Nhc3Q8V2hlZWxFdmVudCo+KGV2ZW50KSk7CisjZW5kaWYKKyAgICBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2ZW50KQorICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aGUgcGx1Zy1pbiBoYXMg
aGFuZGxlZCBtb3VzZWRvd24gZXZlbnQgYnkgZGlzcGxheWluZyBhIGNvbnRleHQgbWVudSwgc28g
d2UgbmV2ZXIgd2FudCBXZWJLaXQgdG8gc2hvdyBhIGRlZmF1bHQgb25lLgorI2lmIGRlZmluZWQo
WFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZWxzZSBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNvdXRFdmVudCkKKyAgICAgICAgaGFuZGxl
Rm9jdXNPdXRFdmVudCgpOworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmZvY3VzaW5FdmVudCkKKyAgICAgICAgaGFuZGxlRm9jdXNJbkV2ZW50KCk7CisjZW5kaWYK
K30KKwordm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlhbGl6
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKwor
ICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0
YXR1c0Nhbk5vdEZpbmRQbHVnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9H
KFBsdWdpbnMsICJQbHVnaW5WaWV3Ojppbml0KCk6IEluaXRpYWxpemluZyBwbHVnLWluICclcyci
LCBtX3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFtX3BsdWdpbi0+
bG9hZCgpKSB7CisgICAgICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQ
bHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK2Jvb2wg
UGx1Z2luVmlldzo6c3RhcnRPckFkZFRvVW5zdGFydGVkTGlzdCgpCit7CisgICAgaWYgKCFtX3Bh
cmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIG9u
bHkgZGVsYXkgc3RhcnRpbmcgdGhlIHBsdWctaW4gaWYgd2UncmUgZ29pbmcgdG8ga2ljayBvZmYg
dGhlIGxvYWQKKyAgICAvLyBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgdGhlIGxvYWRlciB3aWxsIHRy
eSB0byBkZWxpdmVyIGRhdGEgYmVmb3JlIHdlJ3ZlCisgICAgLy8gc3RhcnRlZCB0aGUgcGx1Zy1p
bi4KKyAgICBpZiAoIW1fbG9hZE1hbnVhbGx5ICYmICFtX3BhcmVudEZyYW1lLT5wYWdlKCktPmNh
blN0YXJ0TWVkaWEoKSkgeworICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5hZGRN
ZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1faXNXYWl0aW5nVG9TdGFydCA9
IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBzdGFydCgp
OworfQorCitib29sIFBsdWdpblZpZXc6OnN0YXJ0KCkKK3sKKyAgICBpZiAobV9pc1N0YXJ0ZWQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNXYWl0aW5nVG9TdGFydCA9IGZhbHNl
OworCisgICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkucmVnaXN0ZXJQ
bHVnaW4obV9pbnN0YW5jZSk7CisKKyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVCht
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAg
IHsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAg
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFz
ZTo6Y29tbW9uVk0oKSk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAg
IG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1l
VHlwZS51dGY4KCkuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9w
YXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bihmYWxzZSk7CisgICAgICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICAgICAgUGx1Z2luVmll
dzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisgICAgfQorCisgICAgaWYgKG5wRXJyICE9IE5Q
RVJSX05PX0VSUk9SKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9h
ZFBsdWdpbjsKKyAgICAgICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCku
dW5yZWdpc3RlclBsdWdpbihtX2luc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgp
ICYmICFtX2xvYWRNYW51YWxseSkgeworICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9h
ZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Cisg
ICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgi
R0VUIik7CisgICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJM
KG1fdXJsKTsKKyAgICAgICAgbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7CisgICAg
fQorCisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7CisKKyAg
ICBpZiAoIXBsYXRmb3JtU3RhcnQoKSkKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXND
YW5Ob3RMb2FkUGx1Z2luOworCisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6bWVkaWFDYW5TdGFydCgpCit7CisgICAgQVNTRVJUKCFt
X2lzU3RhcnRlZCk7CisgICAgaWYgKCFzdGFydCgpKQorICAgICAgICBwYXJlbnRGcmFtZSgpLT5s
b2FkZXIoKS5jbGllbnQoKS5kaXNwYXRjaERpZEZhaWxUb1N0YXJ0UGx1Z2luKHRoaXMpOworfQor
CitQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpCit7CisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5W
aWV3Ojp+UGx1Z2luVmlldygpIik7CisKKyAgICBBU1NFUlQoIW1fbGlmZVN1cHBvcnRUaW1lci5p
c0FjdGl2ZSgpKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBwbHVnLWluLCB3
ZSdsbCByZXR1cm4gZWFybHkgaW4gb3VyIGNvbnN0cnVjdG9yLCBhbmQKKyAgICAvLyBtX2luc3Rh
bmNlIHdpbGwgYmUgMC4KKyAgICBpZiAobV9pbnN0YW5jZSkKKyAgICAgICAgaW5zdGFuY2VNYXAo
KS5yZW1vdmUobV9pbnN0YW5jZSk7CisKKyAgICBpZiAobV9pc1dhaXRpbmdUb1N0YXJ0KQorICAg
ICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIodGhpcyk7CisKKyAgICBzdG9wKCk7CisKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbU5h
bWVzLCBtX3BhcmFtQ291bnQpOworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtVmFsdWVzLCBt
X3BhcmFtQ291bnQpOworCisgICAgcGxhdGZvcm1EZXN0cm95KCk7CisKKyAgICBtX3BhcmVudEZy
YW1lLT5zY3JpcHQoKS5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAg
IGlmIChtX3BsdWdpbiAmJiAhKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a0RvbnRVbmxvYWRQbHVnaW4pKSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2
b2lkIFBsdWdpblZpZXc6OnN0b3AoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c3RvcCgpOiBTdG9wcGlu
ZyBwbHVnLWluICclcyciLCBtX3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
SGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7CisgICAg
SGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1zLmVu
ZCgpOworICAgIGZvciAoSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBp
dCA9IHN0cmVhbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5z
dG9wKCk7CisgICAgICAgIGRpc2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0KKwor
ICAgIEFTU0VSVChtX3N0cmVhbXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVkID0gZmFs
c2U7CisKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdp
bmRvd0Jhc2U6OmNvbW1vblZNKCkpOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisjaWYgZGVmaW5lZChYUF9XSU4pICYmICFQTEFURk9STShHVEspCisgICAgLy8gVW5zdWJjbGFz
cyB0aGUgd2luZG93CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBXTkRQUk9DIGN1
cnJlbnRXbmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCBHV0xQX1dORFBST0MpOworCisgICAgICAgIGlmIChjdXJyZW50V25kUHJvYyA9PSBQ
bHVnaW5WaWV3V25kUHJvYykKKyAgICAgICAgICAgIFNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpbV9wbHVnaW5XbmRQcm9jKTsK
KyAgICB9CisjZW5kaWYgLy8gIWRlZmluZWQoWFBfV0lOKSB8fCBQTEFURk9STShHVEspCisjZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisKKyNpZiAhZGVmaW5lZChYUF9NQUNP
U1gpCisgICAgLy8gQ2xlYXIgdGhlIHdpbmRvdworICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsK
KworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93ICYmICFtX3BsdWdp
bi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9u
RGVzdHJveSkpIHsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhp
cyk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAg
ICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcoMCk7CisgICAgfQorCisjaWZkZWYgWFBfVU5JWAorICAgIGRlbGV0ZSBzdGF0
aWNfY2FzdDxOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0Kj4obV9ucFdpbmRvdy53c19pbmZvKTsK
KyAgICBtX25wV2luZG93LndzX2luZm8gPSAwOworI2VuZGlmCisKKyNlbmRpZiAvLyAhZGVmaW5l
ZChYUF9NQUNPU1gpCisKKyAgICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIo
KS51bnJlZ2lzdGVyUGx1Z2luKG1faW5zdGFuY2UpOworCisgICAgTlBTYXZlZERhdGEqIHNhdmVk
RGF0YSA9IDA7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Cisg
ICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgJnNhdmVkRGF0YSk7CisgICAgc2V0
Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgTE9HX05QRVJST1IobnBFcnIpOworICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCisgICAgaWYgKHNhdmVkRGF0YSkgeworICAgICAgICAvLyBUT0RPOiBBY3R1YWxs
eSBzYXZlIHRoaXMgZGF0YSBpbnN0ZWFkIG9mIGp1c3QgZGlzY2FyZGluZyBpdAorICAgICAgICBp
ZiAoc2F2ZWREYXRhLT5idWYpCisgICAgICAgICAgICBOUE5fTWVtRnJlZShzYXZlZERhdGEtPmJ1
Zik7CisgICAgICAgIE5QTl9NZW1GcmVlKHNhdmVkRGF0YSk7CisgICAgfQorI2VuZGlmCisKKyAg
ICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcoUGx1Z2luVmlldyogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVn
aW5WaWV3ID0gcGx1Z2luVmlldzsKK30KKworUGx1Z2luVmlldyogUGx1Z2luVmlldzo6Y3VycmVu
dFBsdWdpblZpZXcoKQoreworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitz
dGF0aWMgY2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBD
U3RyaW5nIGNzdHIgPSBzdHIudXRmOCgpOworICAgIGNvbnN0IHNpemVfdCBjc3RyTGVuZ3RoID0g
Y3N0ci5sZW5ndGgoKTsKKyAgICBjaGFyKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGNoYXIq
PihmYXN0TWFsbG9jKGNzdHJMZW5ndGggKyAxKSk7CisKKyAgICBtZW1jcHkocmVzdWx0LCBjc3Ry
LmRhdGEoKSwgY3N0ckxlbmd0aCk7CisgICAgcmVzdWx0W2NzdHJMZW5ndGhdID0gJ1wwJzsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3Qo
UGx1Z2luUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBkb24ndCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlm
IGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9mIGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKKyAgICAv
LyBkaXNwbGF5ZWQgdW5sZXNzIHRoZSBsb2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhl
IHBsdWdpbi4KKyAgICBjb25zdCBTdHJpbmcmIHRhcmdldEZyYW1lTmFtZSA9IHJlcXVlc3QtPmZy
YW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5hbWUoKTsKKyAgICBpZiAobV9wYXJlbnRGcmFtZS0+bG9h
ZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSAhPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVE
b2N1bWVudExvYWRlcigpICYmICh0YXJnZXRGcmFtZU5hbWUuaXNOdWxsKCkgfHwgbV9wYXJlbnRG
cmFtZS0+dHJlZSgpLmZpbmQodGFyZ2V0RnJhbWVOYW1lKSAhPSBtX3BhcmVudEZyYW1lKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRS
ZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0g
c2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihyZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygp
ID8gRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKTsKKworICAgIGlmIChqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICAvLyBp
ZiB0aGlzIGlzIG5vdCBhIHRhcmdldGVkIHJlcXVlc3QsIGNyZWF0ZSBhIHN0cmVhbSBmb3IgaXQu
IG90aGVyd2lzZSwKKyAgICAgICAgLy8ganVzdCBwYXNzIGl0IG9mZiB0byB0aGUgbG9hZGVyCisg
ICAgICAgIGlmICh0YXJnZXRGcmFtZU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQ
dHI8UGx1Z2luU3RyZWFtPiBzdHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBtX3Bh
cmVudEZyYW1lLmdldCgpLCByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1
ZXN0KCksIHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgp
LCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9wbHVnaW4tPnF1aXJrcygp
KTsKKyAgICAgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgICAgIHN0cmVh
bS0+c3RhcnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0YXJn
ZXQgZnJhbWUgaXMgb3VyIGZyYW1lLCB3ZSBjb3VsZCBkZXN0cm95IHRoZQorICAgICAgICAgICAg
Ly8gUGx1Z2luVmlldywgc28gd2UgcHJvdGVjdCBpdC4gPHJkYXI6Ly9wcm9ibGVtLzY5OTEyNTE+
CisgICAgICAgICAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKKworICAgICAg
ICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3QobV9wYXJlbnRGcmFtZS5nZXQoKSwg
cmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpKTsKKyAgICAgICAg
ICAgIGZyYW1lUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0RnJhbWVOYW1lKTsKKyAgICAgICAg
ICAgIGZyYW1lUmVxdWVzdC5zZXRTaG91bGRDaGVja05ld1dpbmRvd1BvbGljeSh0cnVlKTsKKyAg
ICAgICAgICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmxvYWQoZnJhbWVSZXF1ZXN0KTsKKwor
ICAgICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNob3Vs
ZCBiZSBzZW50IHdoZW4gdGhlIGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAg
ICAgICBpZiAocmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpKSB7CisgICAgICAgICAgICAgICAg
UGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgICAgICAgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKKyAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAg
ICAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT51cmxub3RpZnkobV9pbnN0YW5j
ZSwgcmVxdWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBOUFJFU19ET05FLCByZXF1ZXN0
LT5ub3RpZnlEYXRhKCkpOworICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2Up
OworICAgICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBUYXJnZXRlZCBKYXZhU2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZy
YW1lIHRoYXQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMg
aGFzIGJlZW4gbWFkZSBzdXJlIGluIDo6bG9hZC4KKyAgICBBU1NFUlQodGFyZ2V0RnJhbWVOYW1l
LmlzRW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUp
ID09IG1fcGFyZW50RnJhbWUpOworICAgIAorICAgIC8vIEV4ZWN1dGluZyBhIHNjcmlwdCBjYW4g
Y2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlc3Ryb3llZCwgc28gd2Uga2VlcCBhIHJlZmVy
ZW5jZSB0byBpdC4KKyAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdG9yKHRoaXMpOworICAg
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgp
LmV4ZWN1dGVTY3JpcHQoanNTdHJpbmcsIHJlcXVlc3QtPnNob3VsZEFsbG93UG9wdXBzKCkpOwor
CisgICAgaWYgKHRhcmdldEZyYW1lTmFtZS5pc051bGwoKSkgeworICAgICAgICBTdHJpbmcgcmVz
dWx0U3RyaW5nOworCisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1fcGFy
ZW50RnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOworICAgICAgICBDU3RyaW5nIGNzdHI7CisgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RyaW5n
KHNjcmlwdFN0YXRlLCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAgY3N0ciA9IHJlc3VsdFN0
cmluZy51dGY4KCk7CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gc3RyZWFtID0gUGx1
Z2luU3RyZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVzdC0+ZnJh
bWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0
aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGlu
c3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7CisgICAgICAgIG1fc3RyZWFtcy5hZGQoc3Ry
ZWFtKTsKKyAgICAgICAgc3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXF1ZXN0VVJMLCBj
c3RyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQoKQor
eworICAgIEFTU0VSVCghbV9yZXF1ZXN0cy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9pc0ph
dmFTY3JpcHRQYXVzZWQpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+IHJl
cXVlc3QgPSBXVEY6Om1vdmUobV9yZXF1ZXN0c1swXSk7CisgICAgbV9yZXF1ZXN0cy5yZW1vdmUo
MCk7CisgICAgCisgICAgLy8gU2NoZWR1bGUgYSBuZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBw
ZXJmb3JtUmVxdWVzdCBzaW5jZSB0aGUgY2FsbCB0bworICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNh
biBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVsZXRlZC4KKyAgICBpZiAoIW1fcmVxdWVz
dHMuaXNFbXB0eSgpKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CisK
KyAgICBwZXJmb3JtUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpzY2hlZHVsZVJlcXVlc3Qoc3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+IHJlcXVlc3Qp
Cit7CisgICAgbV9yZXF1ZXN0cy5hcHBlbmQoV1RGOjptb3ZlKHJlcXVlc3QpKTsKKworICAgIGlm
ICghbV9pc0phdmFTY3JpcHRQYXVzZWQpCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpsb2FkKGNvbnN0IEZyYW1lTG9hZFJl
cXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90
aWZ5RGF0YSkKK3sKKyAgICBBU1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5odHRwTWV0aG9kKCkgPT0gIkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKTsKKworICAgIFVSTCB1cmwgPSBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIAorICAgIGlmICh1cmwuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9VUkw7CisKKyAgICAvLyBEb24ndCBh
bGxvdyByZXF1ZXN0cyB0byBiZSBtYWRlIHdoZW4gdGhlIGRvY3VtZW50IGxvYWRlciBpcyBzdG9w
cGluZyBhbGwgbG9hZGVycy4KKyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9wYXJlbnRG
cmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBpZiAoIWxvYWRlciB8fCBsb2Fk
ZXItPmlzU3RvcHBpbmcoKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisK
KyAgICBjb25zdCBTdHJpbmcmIHRhcmdldEZyYW1lTmFtZSA9IGZyYW1lTG9hZFJlcXVlc3QuZnJh
bWVOYW1lKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0
VVJMKHVybCk7CisKKyAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIC8vIFJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQg
TW96aWxsYSBkb2VzLgorICAgICAgICBpZiAoIW1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNhbkV4
ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKKyAgICAgICAgICAgIHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25z
LCBvbmx5IGFsbG93IEpTIHJlcXVlc3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29u
dGFpbnMgdGhlIHBsdWctaW4uCisgICAgICAgIGlmICghdGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgp
ICYmIG1fcGFyZW50RnJhbWUtPnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJl
bnRGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgIH0g
ZWxzZSBpZiAoIW1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNh
bkRpc3BsYXkodXJsKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAg
ICBzY2hlZHVsZVJlcXVlc3Qoc3RkOjptYWtlX3VuaXF1ZTxQbHVnaW5SZXF1ZXN0PihmcmFtZUxv
YWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBhcmVQb3B1cHNBbGxvd2Vk
KCkpKTsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworc3RhdGljIFVSTCBtYWtl
VVJMKGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7
CisgICAgU3RyaW5nIHVybFN0cmluZyA9IHJlbGF0aXZlVVJMU3RyaW5nOworCisgICAgLy8gU3Ry
aXAgcmV0dXJuIGNoYXJhY3RlcnMuCisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgn
XG4nLCAiIik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXHInLCAiIik7CisK
KyAgICByZXR1cm4gVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2lu
Vmlldzo6Z2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2
b2lkKiBub3RpZnlEYXRhKQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVz
dChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIGZy
YW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50RnJhbWUtPmRv
Y3VtZW50KCktPmJhc2VVUkwoKSwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRS
ZXF1ZXN0LCB0cnVlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRV
UkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgRnJhbWVMb2Fk
UmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3Vy
aXR5T3JpZ2luKCkpOworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0
KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2Qo
IkdFVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1h
a2VVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKKworICAg
IHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30KKworTlBFcnJvciBQ
bHVnaW5WaWV3Ojpwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFy
Z2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5v
dGlmeURhdGEpCit7CisgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVm
LCBmaWxlLCBub3RpZnlEYXRhLCB0cnVlLCB0cnVlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
Ojpwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBs
ZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7CisgICAgLy8gQXMgZG9jdW1lbnRl
ZCwgb25seSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hl
biB1c2luZyBhIGZpbGUuCisgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwg
YnVmLCBmaWxlLCAwLCBmYWxzZSwgZmlsZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6bmV3
U3RyZWFtKE5QTUlNRVR5cGUsIGNvbnN0IGNoYXIqIC8qIHRhcmdldCAqLywgTlBTdHJlYW0qKikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisKK2ludDMyX3QgUGx1Z2luVmlldzo6d3JpdGUoTlBT
dHJlYW0qLCBpbnQzMl90IC8qIGxlbiAqLywgdm9pZCogLyogYnVmZmVyICovKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9CisK
K05QRXJyb3IgUGx1Z2luVmlldzo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJl
YXNvbiByZWFzb24pCit7CisgICAgaWYgKCFzdHJlYW0gfHwgUGx1Z2luU3RyZWFtOjpvd25lckZv
clN0cmVhbShzdHJlYW0pICE9IG1faW5zdGFuY2UpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZB
TElEX0lOU1RBTkNFX0VSUk9SOworCisgICAgUGx1Z2luU3RyZWFtKiBicm93c2VyU3RyZWFtID0g
c3RhdGljX2Nhc3Q8UGx1Z2luU3RyZWFtKj4oc3RyZWFtLT5uZGF0YSk7CisgICAgYnJvd3NlclN0
cmVhbS0+Y2FuY2VsQW5kRGVzdHJveVN0cmVhbShyZWFzb24pOworCisgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworfQorCit2b2lkIFBsdWdpblZpZXc6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNz
YWdlKQoreworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAg
ICAgICBwYWdlLT5jaHJvbWUoKS5zZXRTdGF0dXNiYXJUZXh0KG1fcGFyZW50RnJhbWUuZ2V0KCks
IFN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSkpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OnNl
dFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBMT0coUGx1
Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVlKCVzKTogIiwgcHJldHR5TmFtZUZvck5QUFZhcmlh
YmxlKHZhcmlhYmxlLCB2YWx1ZSkuZGF0YSgpKTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsK
KyAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dCb29sOgorICAgICAgICBtX2lzV2luZG93ZWQgPSB2
YWx1ZTsKKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgIGNhc2UgTlBQVnBsdWdp
blRyYW5zcGFyZW50Qm9vbDoKKyAgICAgICAgbV9pc1RyYW5zcGFyZW50ID0gdmFsdWU7CisgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICBj
YXNlIE5QUFZwbHVnaW5EcmF3aW5nTW9kZWw6IHsKKyAgICAgICAgLy8gQ2FuIG9ubHkgc2V0IGRy
YXdpbmcgbW9kZWwgaW5zaWRlIE5QUF9OZXcoKQorICAgICAgICBpZiAodGhpcyAhPSBjdXJyZW50
UGx1Z2luVmlldygpKQorICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKwor
ICAgICAgICBOUERyYXdpbmdNb2RlbCBuZXdEcmF3aW5nTW9kZWwgPSBOUERyYXdpbmdNb2RlbCh1
aW50cHRyX3QodmFsdWUpKTsKKyAgICAgICAgc3dpdGNoIChuZXdEcmF3aW5nTW9kZWwpIHsKKyAg
ICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljczoKKyAgICAgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRp
b246CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBh
c2tlZCBmb3IgdW5zdXBwb3J0ZWQgZHJhd2luZyBtb2RlbDogJXMiLAorICAgICAgICAgICAgICAg
ICAgICBwcmV0dHlOYW1lRm9yRHJhd2luZ01vZGVsKG5ld0RyYXdpbmdNb2RlbCkpOworICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjYXNlIE5QUFZwbHVnaW5FdmVudE1vZGVsOiB7CisgICAgICAgIC8vIENhbiBvbmx5IHNldCBl
dmVudCBtb2RlbCBpbnNpZGUgTlBQX05ldygpCisgICAgICAgIGlmICh0aGlzICE9IGN1cnJlbnRQ
bHVnaW5WaWV3KCkpCisgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisg
ICAgICAgIE5QRXZlbnRNb2RlbCBuZXdFdmVudE1vZGVsID0gTlBFdmVudE1vZGVsKHVpbnRwdHJf
dCh2YWx1ZSkpOworICAgICAgICBzd2l0Y2ggKG5ld0V2ZW50TW9kZWwpIHsKKyAgICAgICAgY2Fz
ZSBOUEV2ZW50TW9kZWxDb2NvYToKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luIGFza2Vk
IGZvciB1bnN1cHBvcnRlZCBldmVudCBtb2RlbDogJXMiLAorICAgICAgICAgICAgICAgICAgICBw
cmV0dHlOYW1lRm9yRXZlbnRNb2RlbChuZXdFdmVudE1vZGVsKSk7CisgICAgICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBkZWZp
bmVkKFhQX01BQ09TWCkKKworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQ
bHVnaW5WaWV3OjppbnZhbGlkYXRlVGltZXJGaXJlZCgpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1faW52YWxpZFJlY3RzLnNpemUoKTsgaSsrKQorICAgICAgICBpbnZhbGlkYXRl
UmVjdChtX2ludmFsaWRSZWN0c1tpXSk7CisgICAgbV9pbnZhbGlkUmVjdHMuY2xlYXIoKTsKK30K
KworCit2b2lkIFBsdWdpblZpZXc6OnB1c2hQb3B1cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0ZSkK
K3sKKyAgICBtX3BvcHVwU3RhdGVTdGFjay5hcHBlbmQoc3RhdGUpOworfQorIAordm9pZCBQbHVn
aW5WaWV3Ojpwb3BQb3B1cHNFbmFibGVkU3RhdGUoKQoreworICAgIG1fcG9wdXBTdGF0ZVN0YWNr
LnJlbW92ZUxhc3QoKTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjphcmVQb3B1cHNBbGxvd2VkKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fcG9wdXBTdGF0ZVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG1fcG9wdXBTdGF0ZVN0YWNrLmxhc3QoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpzZXRKYXZhU2NyaXB0UGF1c2VkKGJvb2wgcGF1c2VkKQorewor
ICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCA9PSBwYXVzZWQpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2lzSmF2YVNjcmlwdFBhdXNlZCA9IHBhdXNlZDsKKworICAgIGlmIChtX2lzSmF2YVNj
cmlwdFBhdXNlZCkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAgIGVsc2UgaWYg
KCFtX3JlcXVlc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVT
aG90KDApOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitOUE9iamVjdCog
UGx1Z2luVmlldzo6bnBPYmplY3QoKQoreworICAgIE5QT2JqZWN0KiBvYmplY3QgPSAwOworCisg
ICAgaWYgKCFtX2lzU3RhcnRlZCB8fCAhbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5nZXR2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBPbiBXaW5kb3dzLCBj
YWxsaW5nIEphdmEncyBOUE5fR2V0VmFsdWUgY2FuIGFsbG93IHRoZSBtZXNzYWdlIGxvb3AgdG8K
KyAgICAvLyBydW4sIGFsbG93aW5nIGxvYWRpbmcgdG8gdGFrZSBwbGFjZSBvciBKYXZhU2NyaXB0
IHRvIHJ1bi4gUHJvdGVjdCB0aGUKKyAgICAvLyBQbHVnaW5WaWV3IGZyb20gZGVzdHJ1Y3Rpb24u
IDxyZGFyOi8vcHJvYmxlbS82OTc4ODA0PgorICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0
KHRoaXMpOworCisgICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAg
ICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2Jq
ZWN0LCAmb2JqZWN0KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAg
IFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKworICAgIGlmIChu
cEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
b2JqZWN0OworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+
IFBsdWdpblZpZXc6OmJpbmRpbmdJbnN0YW5jZSgpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCisgICAgTlBPYmplY3QqIG9iamVjdCA9IG5wT2JqZWN0KCk7CisgICAgaWYgKCFv
YmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGhhc09uZVJlZigpKSB7CisgICAg
ICAgIC8vIFRoZSByZW5kZXJlciBmb3IgdGhlIFBsdWdpblZpZXcgd2FzIGRlc3Ryb3llZCBkdXJp
bmcgdGhlIGFib3ZlIGNhbGwsIGFuZAorICAgICAgICAvLyB0aGUgUGx1Z2luVmlldyB3aWxsIGJl
IGRlc3Ryb3llZCB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgc28gd2UKKyAgICAgICAgLy8g
cmV0dXJuIG51bGwuCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxKU0M6
OkJpbmRpbmdzOjpSb290T2JqZWN0PiByb290ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY3Jl
YXRlUm9vdE9iamVjdCh0aGlzKTsKKyAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+
IGluc3RhbmNlID0gSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUob2JqZWN0LCByb290
LnJlbGVhc2UoKSk7CisKKyAgICBfTlBOX1JlbGVhc2VPYmplY3Qob2JqZWN0KTsKKworICAgIHJl
dHVybiBpbnN0YW5jZS5yZWxlYXNlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW0qIHN0cmVh
bSkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbSkpOworCisgICAgbV9z
dHJlYW1zLnJlbW92ZShzdHJlYW0pOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmFtZXRl
cnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcykKK3sKKyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1W
YWx1ZXMuc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsK
KyAgICB1bnNpZ25lZCBwYXJhbUNvdW50ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7Cisg
ICAgbV9wYXJhbVZhbHVlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNp
emVvZihjaGFyKikgKiBzaXplKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CisgICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2lu
UXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UocGFy
YW1OYW1lc1tpXSwgIndpbmRvd2xlc3N2aWRlbyIpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgaWYgKHBhcmFtTmFtZXNbaV0gPT0gInBsdWdpbnNwYWdlIikKKyAgICAgICAgICAg
IG1fcGx1Z2luc1BhZ2UgPSBwYXJhbVZhbHVlc1tpXTsKKworICAgICAgICBtX3BhcmFtTmFtZXNb
cGFyYW1Db3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBt
X3BhcmFtVmFsdWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tp
XSk7CisKKyAgICAgICAgcGFyYW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9
IHBhcmFtQ291bnQ7Cit9CisKK1BsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZy
YW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4sIEhUTUxQbHVn
SW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BhcmVudEZyYW1lKHBh
cmVudEZyYW1lKQorICAgICwgbV9wbHVnaW4ocGx1Z2luKQorICAgICwgbV9lbGVtZW50KGVsZW1l
bnQpCisgICAgLCBtX2lzU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1f
c3RhdHVzKFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAsIG1fcmVxdWVzdFRp
bWVyKCp0aGlzLCAmUGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAgLCBtX2ludmFs
aWRhdGVUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OmludmFsaWRhdGVUaW1lckZpcmVkKQorICAg
ICwgbV9wb3BQb3B1cHNTdGF0ZVRpbWVyKCp0aGlzLCAmUGx1Z2luVmlldzo6cG9wUG9wdXBzU3Rh
dGVUaW1lckZpcmVkKQorICAgICwgbV9saWZlU3VwcG9ydFRpbWVyKCp0aGlzLCAmUGx1Z2luVmll
dzo6bGlmZVN1cHBvcnRUaW1lckZpcmVkKQorICAgICwgbV9tb2RlKGxvYWRNYW51YWxseSA/IE5Q
X0ZVTEwgOiBOUF9FTUJFRCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZh
bHVlcygwKQorICAgICwgbV9taW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIG1faW5zdGFuY2UoMCkK
KyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAsIG1faXNXaW5kb3dlZChmYWxzZSkKKyAgICAs
IG1fdXBkYXRlZENvY29hVGV4dElucHV0UmVxdWVzdGVkKGZhbHNlKQorICAgICwgbV9rZXlEb3du
U2VudChmYWxzZSkKKyAgICAsIG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyKDApCisjZWxzZQorICAg
ICwgbV9pc1dpbmRvd2VkKHRydWUpCisjZW5kaWYKKyAgICAsIG1faXNUcmFuc3BhcmVudChmYWxz
ZSkKKyAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9pc1dhaXRpbmdUb1N0
YXJ0KGZhbHNlKQorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFs
c2UpCisjZW5kaWYKKyNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKKyAgICAsIG1fcGx1Z2luV25kUHJvYygwKQorICAgICwgbV9sYXN0TWVzc2FnZSgwKQorICAg
ICwgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jKGZhbHNlKQorICAgICwgbV93bVByaW50SERDKDAp
CisgICAgLCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0KGZhbHNlKQorI2VuZGlmCisjaWYgUExB
VEZPUk0oRUZMKQorICAgICwgbV93aW5kb3coMCkKKyNlbmRpZgorI2lmIGRlZmluZWQoWFBfTUFD
T1NYKQorICAgICwgbV9jb250ZXh0UmVmKDApCisjZW5kaWYKKyNpZiBkZWZpbmVkKFhQX1VOSVgp
ICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0
cnlDaGFuZ2UodHJ1ZSkKKyAgICAsIG1fZHJhd2FibGUoMCkKKyAgICAsIG1fdmlzdWFsKDApCisg
ICAgLCBtX2NvbG9ybWFwKDApCisgICAgLCBtX3BsdWdpbkRpc3BsYXkoMCkKKyNlbmRpZgorICAg
ICwgbV9sb2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQorICAgICwgbV9tYW51YWxTdHJlYW0oMCkK
KyAgICAsIG1faXNKYXZhU2NyaXB0UGF1c2VkKGZhbHNlKQorICAgICwgbV9oYXZlQ2FsbGVkU2V0
V2luZG93KGZhbHNlKQoreworICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgbV9zdGF0dXMg
PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9pbnN0YW5jZSA9ICZtX2luc3RhbmNlU3RydWN0OworICAgIG1faW5zdGFuY2UtPm5k
YXRhID0gdGhpczsKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7CisKKyAgICBpbnN0YW5jZU1h
cCgpLmFkZChtX2luc3RhbmNlLCB0aGlzKTsKKworICAgIHNldFBhcmFtZXRlcnMocGFyYW1OYW1l
cywgcGFyYW1WYWx1ZXMpOworCisgICAgbWVtc2V0KCZtX25wV2luZG93LCAwLCBzaXplb2YobV9u
cFdpbmRvdykpOworI2lmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIG1lbXNldCgmbV9ucENnQ29u
dGV4dCwgMCwgc2l6ZW9mKG1fbnBDZ0NvbnRleHQpKTsKKyNlbmRpZgorCisgICAgcmVzaXplKHNp
emUpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmZvY3VzUGx1Z2luRWxlbWVudCgpCit7CisgICAg
aWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG1fZWxlbWVudCwgbV9wYXJlbnRGcmFt
ZSk7CisgICAgZWxzZQorICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1
c2VkRWxlbWVudChtX2VsZW1lbnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAobV9z
dGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9sb2FkTWFudWFsbHkpOworICAgIEFTU0VSVCghbV9tYW51YWxTdHJl
YW0pOworCisgICAgbV9tYW51YWxTdHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBt
X3BhcmVudEZyYW1lLmdldCgpLCBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVu
dExvYWRlcigpLT5yZXF1ZXN0KCksIGZhbHNlLCAwLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwg
aW5zdGFuY2UoKSwgbV9wbHVnaW4tPnF1aXJrcygpKTsKKyAgICBtX21hbnVhbFN0cmVhbS0+c2V0
TG9hZE1hbnVhbGx5KHRydWUpOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVSZXNw
b25zZSgwLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZGlkUmVjZWl2ZURhdGEo
Y29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1
Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobV9sb2FkTWFudWFsbHkpOworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisgICAgCisg
ICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVEYXRhKDAsIGRhdGEsIGxlbmd0aCk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgaWYgKG1fc3RhdHVz
ICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOwor
CisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAo
bV9zdGF0dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQobV9sb2FkTWFudWFsbHkpOworICAgIAorICAgIGlmIChtX21hbnVh
bFN0cmVhbSkKKyAgICAgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OnNldENhbGxpbmdQbHVnaW4oYm9vbCBiKSBjb25zdAoreworICAg
IGlmICghbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrSGFzTW9kYWxNZXNz
YWdlTG9vcCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChiKQorICAgICAgICArK3NfY2Fs
bGluZ1BsdWdpbjsKKyAgICBlbHNlCisgICAgICAgIC0tc19jYWxsaW5nUGx1Z2luOworCisgICAg
QVNTRVJUKHNfY2FsbGluZ1BsdWdpbiA+PSAwKTsKK30KKworYm9vbCBQbHVnaW5WaWV3Ojppc0Nh
bGxpbmdQbHVnaW4oKQoreworICAgIHJldHVybiBzX2NhbGxpbmdQbHVnaW4gPiAwOworfQorCitQ
YXNzUmVmUHRyPFBsdWdpblZpZXc+IFBsdWdpblZpZXc6OmNyZWF0ZShGcmFtZSogcGFyZW50RnJh
bWUsIGNvbnN0IEludFNpemUmIHNpemUsIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25z
dCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2Fk
TWFudWFsbHkpCit7CisgICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZvciB0aGlz
IE1JTUUgdHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKKyAgICAvLyBhIHBsdWdpbiBi
eSB0aGUgZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBwYXNzIGEg
bXV0YWJsZSBTdHJpbmcKKyAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAg
UGx1Z2luUGFja2FnZSogcGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMo
KS0+ZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7CisKKyAgICAvLyBObyBwbHVnaW4gd2Fz
IGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2Fpbgor
ICAgIGlmICghcGx1Z2luICYmIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJl
ZnJlc2goKSkgeworICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICAgICAgcGx1
Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmws
IG1pbWVUeXBlQ29weSk7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5W
aWV3KHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1hbnVhbGx5KSk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6ZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkK
K3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtp
XSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzdGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAg
IHJldHVybiBidWZmZXIuc2l6ZSgpID4gMCAmJiBidWZmZXJbMF0gPT0gJ1xuJzsKK30KKworc3Rh
dGljIGlubGluZSBpbnQgbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGNvbnN0IFZlY3Rvcjxj
aGFyPiYgYnVmZmVyKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aCAtIDQ7IGkrKykgeworICAgICAgICAvLyBTdXBwb3J0IGZvciBB
Y3JvYmF0LiBJdCBzZW5kcyAiXG5cbiIuCisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYm
IGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAg
ICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBD
UkxGIGlmIGl0IGlzIHRoZSBmaXJzdCBsaW5lLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xy
JyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgaSArPSAyOworICAgICAg
ICAgICAgaWYgKGkgPT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBm
b3IgRGlyZWN0b3IuIEl0IHNlbmRzICJcclxuXG4iICgzODgwMzg3KS4KKyAgICAgICAgICAgICAg
ICByZXR1cm4gaSArIDE7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXHInICYm
IGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIEZs
YXNoLiBJdCBzZW5kcyAiXHJcblxyXG4iICgzNzU4MTEzKS4KKyAgICAgICAgICAgICAgICByZXR1
cm4gaSArIDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRp
YyBpbmxpbmUgY29uc3QgY2hhciogZmluZEVPTChjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uIEVP
TCBpcyBkZWZpbmVkIGFzCisgICAgLy8gYSBDUkxGIHBhaXIuIFVuZm9ydHVuYXRlbHksIHNvbWUg
c2VydmVycyB3aWxsIHVzZSBMRgorICAgIC8vIGluc3RlYWQuIFdvcnNlIHlldCwgc29tZSBzZXJ2
ZXJzIHdpbGwgdXNlIGEgY29tYmluYXRpb24KKyAgICAvLyBvZiBib3RoIChlLmcuIDxoZWFkZXI+
Q1JMRkxGPGJvZHk+KSwgc28gZmluZEVPTCBuZWVkcworICAgIC8vIHRvIGJlIG1vcmUgZm9yZ2l2
aW5nLiBJdCB3aWxsIG5vdyBhY2NlcHQgQ1JMRiwgTEYgb3IKKyAgICAvLyBDUi4KKyAgICAvLwor
ICAgIC8vIEl0IHJldHVybnMgTlVMTCBpZiBFT0xGIGlzIG5vdCBmb3VuZCBvciBpdCB3aWxsIHJl
dHVybgorICAgIC8vIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVy
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBp
ZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAg
ICAgIGlmIChieXRlc1tpXSA9PSAnXHInKSB7CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUg
aWYgc3Bhbm5pbmcgYnVmZmVyIGJvdW5kcworICAgICAgICAgICAgLy8gKENSTEYgaXMgYWNyb3Nz
IHJlYWRzKS4gSWYgc28sIHdhaXQgZm9yCisgICAgICAgICAgICAvLyBuZXh0IHJlYWQuCisgICAg
ICAgICAgICBpZiAoaSArIDEgPT0gbGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhcGl0YWxpemVSRkM4MjJIZWFkZXJG
aWVsZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJh
Y3RlciA9IHRydWU7CisgICAgU3RyaW5nIHJlc3VsdDsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgVUNoYXIgYzsKKworICAgICAg
ICBpZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdhJyAmJiBuYW1lW2ldIDw9
ICd6JykKKyAgICAgICAgICAgIGMgPSB0b0FTQ0lJVXBwZXIobmFtZVtpXSk7CisgICAgICAgIGVs
c2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0g
PD0gJ1onKQorICAgICAgICAgICAgYyA9IHRvQVNDSUlMb3dlcihuYW1lW2ldKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYyA9IG5hbWVbaV07CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0g
Jy0nKQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICBy
ZXN1bHQuYXBwZW5kKGMpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0
b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5
dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxh
c3RLZXk7CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92
ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFu
eSBtb3JlIGVuZC1vZi1saW5lcworICAgIHdoaWxlICgoZW9sID0gZmluZEVPTChieXRlcywgbGVu
Z3RoKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciogbGluZSA9IGJ5dGVzOworICAgICAgICBpbnQg
bGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOworICAgICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRl
cyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZp
bmRFT0wuCisgICAgICAgIGJ5dGVzID0gZW9sICsgMTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdc
cicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCisgICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNp
bmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5n
dGggLT0gKGJ5dGVzIC0gbGluZSk7CisgICAgICAgIGlmIChsaW5lTGVuZ3RoID09IDApCisgICAg
ICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUg
PT0gJ1x0JykgeworICAgICAgICAgICAgLy8gQ29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBo
ZWFkZXIKKyAgICAgICAgICAgIGlmIChsYXN0S2V5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAg
ICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsK
KyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUobGluZSwgbGluZUxlbmd0aCk7CisKKyAg
ICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5l
d1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IEJyYW5kIG5ldyBoZWFkZXIKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAg
ICAgICAgZm9yIChjb2xvbiA9IGxpbmU7ICpjb2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBj
b2xvbisrKSB7CisgICAgICAgICAgICAgICAgLy8gZW1wdHkgbG9vcAorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkgCisgICAgICAgICAgICAgICAgLy8gbWFsZm9y
bWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0
YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoU3RyaW5nKGxpbmUsIGNvbG9uIC0gbGluZSkpOwor
ICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoY29s
b24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgq
Y29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBl
b2wpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFN0cmluZyhjb2xvbiwgZW9sIC0gY29sb24p
OworCisgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChs
YXN0S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKQorICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSA9IG9sZFZhbHVlICsgIiwgIiArIHZhbHVlOworCisgICAgICAg
ICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVy
cm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5v
dGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpCit7Cisg
ICAgaWYgKCF1cmwgfHwgIWxlbiB8fCAhYnVmKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJ
RF9QQVJBTTsKKworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3BhcmVu
dEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIEhUVFBIZWFkZXJN
YXAgaGVhZGVyRmllbGRzOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYg
KGZpbGUpIHsKKyAgICAgICAgTlBFcnJvciByZWFkUmVzdWx0ID0gaGFuZGxlUG9zdFJlYWRGaWxl
KGJ1ZmZlciwgbGVuLCBidWYpOworICAgICAgICBpZihyZWFkUmVzdWx0ICE9IE5QRVJSX05PX0VS
Uk9SKQorICAgICAgICAgICAgcmV0dXJuIHJlYWRSZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYnVmZmVyLnJlc2l6ZShsZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVm
LCBsZW4pOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEo
KTsKKyAgICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFs
bG93SGVhZGVycykgeworICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7
CisgICAgICAgICAgICBwb3N0RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0
ZXJGaXJzdEJsYW5rTGluZShidWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0x
KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGlu
IHRoZSBtaWRkbGUgb2YgdGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRl
cgorICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRz
KGJ1ZmZlciwgbG9jYXRpb24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGgg
PSBidWZmZXIuc2l6ZSgpIC0gbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGlt
ZXMgcGx1Z2lucyBsaWtlIHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhl
eSBwb3N0LAorICAgICAgICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxp
a2UgdGhhdC4gU28gd2Ugd2lsbCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8v
IGFuZCBpbnN0ZWFkIHRydW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgor
ICAgICAgICAgICAgICAgIFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldChI
VFRQSGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNv
bnRlbnRMZW5ndGguaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBt
aW4oY29udGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOworICAgICAgICAgICAg
ICAgIGhlYWRlckZpZWxkcy5yZW1vdmUoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpOwor
CisgICAgICAgICAgICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247CisgICAgICAgICAgICAgICAg
cG9zdERhdGFMZW5ndGggPSBkYXRhTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0
aG9kKCJQT1NUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRV
UkwobWFrZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOwor
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEhlYWRlckZpZWxk
cyhXVEY6Om1vdmUoaGVhZGVyRmllbGRzKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRlKHBvc3REYXRhLCBwb3N0RGF0
YUxlbmd0aCkpOworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisK
KyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3Rp
ZnlEYXRhKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdp
blJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIWlzVmlzaWJsZSgpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKm1f
ZWxlbWVudC0+cmVuZGVyZXIoKSk7CisgICAgCisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0
OworICAgIGRpcnR5UmVjdC5tb3ZlKHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBh
ZGRpbmdMZWZ0KCksIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGluZ1RvcCgp
KTsKKyAgICByZW5kZXJlci5yZXBhaW50UmVjdGFuZ2xlKGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gbnVs
bFBsdWdpbkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxsUGx1
Z2luSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKKwor
ICAgIEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpLCBu
dWxsUGx1Z2luSW1hZ2UtPndpZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0KCkpOworCisg
ICAgaW50IHhPZmZzZXQgPSAoZnJhbWVSZWN0KCkud2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgp
KSAvIDI7CisgICAgaW50IHlPZmZzZXQgPSAoZnJhbWVSZWN0KCkuaGVpZ2h0KCkgLSBpbWFnZVJl
Y3QuaGVpZ2h0KCkpIC8gMjsKKworICAgIGltYWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQp
OworCisgICAgaWYgKCFyZWN0LmludGVyc2VjdHMoaW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQtPmNsaXAod2luZG93Q2xpcFJl
Y3QoKSk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG51bGxQbHVnaW5JbWFnZS5nZXQoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96
aWxsYS81LjAgKCIKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAgICAgIk1hY2ludG9zaDsg
VTsgSW50ZWwgTWFjIE9TIFg7IgorI2VsaWYgZGVmaW5lZChYUF9XSU4pCisgICAgICAgICJXaW5k
b3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsiCisjZWxpZiBkZWZpbmVkKFhQX1VOSVgpCisvLyBUaGUg
R3RrIHBvcnQgdXNlcyBYMTEgcGx1Z2lucyBpbiBNYWMuCisjaWYgT1MoREFSV0lOKSAmJiBQTEFU
Rk9STShHVEspCisgICAgIlgxMTsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2Vsc2UKKyAgICAiWDEx
OyBVOyBMaW51eCBpNjg2OyIKKyNlbmRpZgorI2VuZGlmCisgICAgICAgICIgZW4tVVM7IHJ2OjEu
OC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBDaHJvbWVVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKCIKKyNpZiBkZWZpbmVkKFhQX01B
Q09TWCkKKyAgICAiTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMgT1MgWDsiCisjZWxpZiBkZWZpbmVk
KFhQX1dJTikKKyAgICAiV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IgorI2VsaWYgZGVmaW5l
ZChYUF9VTklYKQorICAgIC8vIFRoZSBHdGsgcG9ydCB1c2VzIFgxMSBwbHVnaW5zIGluIE1hYy4K
KyNpZiBPUyhEQVJXSU4pICYmIFBMQVRGT1JNKEdUSykKKyAgICAiWDExOyBVOyBJbnRlbCBNYWMg
T1MgWDsiCisjZWxzZQorICAgICJYMTE7IFU7IExpbnV4IGk2ODY7IgorI2VuZGlmCisjZW5kaWYK
KyAgICAiIEFwcGxlV2ViS2l0LzUzNC4zNCAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xOS4w
LjEwNTUuMSBTYWZhcmkvNTM0LjM0IjsKKworY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFn
ZW50KCkKK3sKKyAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJr
V2FudHNNb3ppbGxhVXNlckFnZW50KSkKKyAgICAgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7
CisgICAgZWxzZSBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2Fu
dHNDaHJvbWVVc2VyQWdlbnQpKQorICAgICAgICByZXR1cm4gQ2hyb21lVXNlckFnZW50OworICAg
IGlmIChtX3VzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgbV91c2VyQWdlbnQgPSBtX3BhcmVu
dEZyYW1lLT5sb2FkZXIoKS51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBt
X3VzZXJBZ2VudC5kYXRhKCk7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
K2NvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudFN0YXRpYygpCit7CisgICAgcmV0dXJu
IE1vemlsbGFVc2VyQWdlbnQ7Cit9CisjZW5kaWYKKworCit2b2lkIFBsdWdpblZpZXc6OmxpZmVT
dXBwb3J0VGltZXJGaXJlZCgpCit7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjprZWVwQWxpdmUoKQoreworICAgIGlmIChtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgcmVmKCk7CisgICAgbV9saWZlU3VwcG9ydFRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQordm9p
ZCBQbHVnaW5WaWV3OjprZWVwQWxpdmUoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXcq
IHZpZXcgPSBpbnN0YW5jZU1hcCgpLmdldChpbnN0YW5jZSk7CisgICAgaWYgKCF2aWV3KQorICAg
ICAgICByZXR1cm47CisKKyAgICB2aWV3LT5rZWVwQWxpdmUoKTsKK30KKworTlBFcnJvciBQbHVn
aW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
Cit7CisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyglcykiLCBw
cmV0dHlOYW1lRm9yTlBOVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBOUEVycm9y
IHJlc3VsdDsKKyAgICBpZiAocGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUs
ICZyZXN1bHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1I7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFi
bGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmll
dzo6Z2V0VmFsdWUoJXMpIiwgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRh
KCkpOworCisgICAgTlBFcnJvciByZXN1bHQ7CisgICAgaWYgKHBsYXRmb3JtR2V0VmFsdWUodmFy
aWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlm
IChwbGF0Zm9ybUdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBO
UE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQor
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBPYmpl
Y3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLndpbmRvd1Nj
cmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRv
IGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
cHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAod2luZG93U2NyaXB0
T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0
KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gd2lu
ZG93U2NyaXB0T2JqZWN0OworCisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9
CisKKyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1f
aXNKYXZhU2NyaXB0UGF1c2VkKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7CisKKyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAg
ICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFz
VGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisg
ICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBtX2VsZW1lbnQtPmdldE5QT2JqZWN0KCk7
CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBh
cyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2lu
L25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAg
ICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2
b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0
OworCisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAgICBjYXNlIE5Q
TlZwcml2YXRlTW9kZUJvb2w6IHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUt
PnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1I7CisgICAgICAgICooKE5QQm9vbCopdmFsdWUpID0gcGFnZS0+dXNlc0VwaGVt
ZXJhbFNlc3Npb24oKTsKKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgIH0KKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0K
K30KKworc3RhdGljIEZyYW1lKiBnZXRGcmFtZShGcmFtZSogcGFyZW50RnJhbWUsIEVsZW1lbnQq
IGVsZW1lbnQpCit7CisgICAgaWYgKHBhcmVudEZyYW1lKQorICAgICAgICByZXR1cm4gcGFyZW50
RnJhbWU7CisgICAgCisgICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKK30K
KworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJp
YWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCit7Cisg
ICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCglcykiLCBwcmV0dHlO
YW1lRm9yTlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBOUEVycm9yIHJl
c3VsdCA9IE5QRVJSX05PX0VSUk9SOworCisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNh
c2UgTlBOVVJMVkNvb2tpZTogeworICAgICAgICBVUkwgdShtX3BhcmVudEZyYW1lLT5kb2N1bWVu
dCgpLT5iYXNlVVJMKCksIHVybCk7CisgICAgICAgIGlmICh1LmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsK
KyAgICAgICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcg
Y29va2llU3RyID0gY29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSkudXRmOCgpOworICAgICAg
ICAgICAgICAgIGlmICghY29va2llU3RyLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGludCBzaXplID0gY29va2llU3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAg
ICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHNpemUrMSkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoKnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
ZW1zZXQoKnZhbHVlLCAwLCBzaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5
KCp2YWx1ZSwgY29va2llU3RyLmRhdGEoKSwgc2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxlbiA9IHNpemU7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfSU5WQUxJ
RF9VUkw7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5QTlVSTFZQcm94eTogewor
ICAgICAgICBVUkwgdShtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCk7
CisgICAgICAgIGlmICh1LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0g
Z2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEZy
YW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IGZyYW1lID8gJmZyYW1lLT5sb2FkZXIoKSA6IDA7Cisg
ICAgICAgICAgICBjb25zdCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IGZyYW1lTG9hZGVy
ID8gZnJhbWVMb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCkgOiAwOworICAgICAgICAgICAgY29u
c3QgQ1N0cmluZyBwcm94eVN0ciA9IHRvU3RyaW5nKHByb3h5U2VydmVyc0ZvclVSTCh1LCBjb250
ZXh0KSkudXRmOCgpOworICAgICAgICAgICAgaWYgKCFwcm94eVN0ci5pc051bGwoKSkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IGludCBzaXplID0gcHJveHlTdHIubGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEp
KTsKKyAgICAgICAgICAgICAgICBpZiAoKnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIG1l
bXNldCgqdmFsdWUsIDAsIHNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFs
dWUsIHByb3h5U3RyLmRhdGEoKSwgc2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxl
bikKKyAgICAgICAgICAgICAgICAgICAgICAgICpsZW4gPSBzaXplOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9PVVRfT0ZfTUVNT1JZ
X0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3Vs
dCA9IE5QRVJSX0lOVkFMSURfVVJMOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgTE9HKFBs
dWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTDogJXMiLCBwcmV0dHlOYW1lRm9yTlBO
VVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZUZv
clVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB2YWx1ZSwgdWludDMyX3QgbGVuKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6
c2V0VmFsdWVGb3JVUkwoJXMpIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxl
KS5kYXRhKCkpOworCisgICAgTlBFcnJvciByZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKworICAg
IHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlVSTFZDb29raWU6IHsKKyAgICAgICAg
VVJMIHUobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOworICAgICAg
ICBpZiAodS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIg
PSBTdHJpbmc6OmZyb21VVEY4KHZhbHVlLCBsZW4pOworICAgICAgICAgICAgRnJhbWUqIGZyYW1l
ID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChm
cmFtZSAmJiAhY29va2llU3RyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzZXRDb29raWVz
KGZyYW1lLT5kb2N1bWVudCgpLCB1LCBjb29raWVTdHIpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBOUE5VUkxWUHJveHk6CisgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmll
dzo6c2V0VmFsdWVGb3JVUkwoJXMpOiBQbHVnaW5zIGFyZSBOT1QgYWxsb3dlZCB0byBzZXQgcHJv
eHkgaW5mb3JtYXRpb24uIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5k
YXRhKCkpOworICAgICAgICByZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNl
dFZhbHVlRm9yVVJMOiAlcyIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSku
ZGF0YSgpKTsKKyAgICAgICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTlBFcnJvciBQbHVnaW5W
aWV3OjpnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNo
YXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogLyogc2NoZW1lICovLCBjb25zdCBj
aGFyKiAvKiByZWFsbSAqLywgY2hhcioqICAvKiB1c2VybmFtZSAqLywgdWludDMyX3QqIC8qIHVs
ZW4gKi8sIGNoYXIqKiAvKiBwYXNzd29yZCAqLywgdWludDMyX3QqIC8qIHBsZW4gKi8pCit7Cisj
aWYgTE9HX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKHByb3RvY29sKTsKKyAgICBVTlVTRURf
UEFSQU0oaG9zdCk7CisgICAgVU5VU0VEX1BBUkFNKHBvcnQpOworI2VuZGlmCisgICAgTE9HKFBs
dWdpbnMsICJQbHVnaW5WaWV3OjpnZXRBdXRoZW50aWNhdGlvbkluZm86IHByb3RvY29sPSVzLCBo
b3N0PSVzLCBwb3J0PSVkIiwgcHJvdG9jb2wsIGhvc3QsIHBvcnQpOworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisjZW5kaWYKKwordm9p
ZCBQbHVnaW5WaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCBwcml2YXRlQnJv
d3NpbmdFbmFibGVkKQoreworICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0VmFsdWUgPSBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0dmFsdWU7CisgICAgaWYgKCFzZXRWYWx1ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7
CisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dC
YXNlOjpjb21tb25WTSgpKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgIE5QQm9v
bCB2YWx1ZSA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CisgICAgc2V0VmFsdWUobV9pbnN0YW5j
ZSwgTlBOVnByaXZhdGVNb2RlQm9vbCwgJnZhbHVlKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZh
bHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaCBi
L1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4NmJi
OWQyODExNGFkZDg2OTRkNWNkMTE3YTAzZDY2MGRkZmMwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtMCwwICsxLDQ0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHaXJpc2gg
UmFtYWtyaXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdfaAorI2RlZmluZSBQ
bHVnaW5WaWV3X2gKKworI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCisjaW5jbHVkZSAi
UGx1Z2luVmlld0Jhc2UuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQorI2luY2x1ZGUgIlBsdWdpblN0cmVhbS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRl
cm5hbC5oIgorI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCit0eXBl
ZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7Cit0eXBlZGVmIEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRn
ZXQ7CisjZWxzZQordHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsK
KyNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HdGtTb2NrZXQgR3Rr
U29ja2V0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShYMTEpCit0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgV2luZG93OwordHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CisjZW5kaWYKKwor
bmFtZXNwYWNlIEpTQyB7CisgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3Mg
SW5zdGFuY2U7CisgICAgfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJh
bWU7CisgICAgY2xhc3MgRnJhbWVWaWV3OworICAgIGNsYXNzIEltYWdlOworICAgIGNsYXNzIEhU
TUxQbHVnSW5FbGVtZW50OworICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgTW91
c2VFdmVudDsKKyAgICBjbGFzcyBVUkw7CisjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisgICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjsKKyNl
bmRpZgorICAgIGNsYXNzIFBsdWdpblBhY2thZ2U7CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdDsK
KyAgICBjbGFzcyBQbHVnaW5TdHJlYW07CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBj
bGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFdoZWVsRXZlbnQ7CisKKyAgICBlbnVt
IFBsdWdpblN0YXR1cyB7CisgICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCisg
ICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW4sCisgICAgICAgIFBsdWdpblN0YXR1
c0xvYWRlZFN1Y2Nlc3NmdWxseQorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0IHsK
KyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luUmVxdWVzdCk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luUmVxdWVzdChjb25zdCBG
cmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24s
IHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMpCisgICAgICAgICAgICA6
IG1fZnJhbWVMb2FkUmVxdWVzdChmcmFtZUxvYWRSZXF1ZXN0KQorICAgICAgICAgICAgLCBtX25v
dGlmeURhdGEobm90aWZ5RGF0YSkKKyAgICAgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNl
bmROb3RpZmljYXRpb24pCisgICAgICAgICAgICAsIG1fc2hvdWxkQWxsb3dQb3B1cHMoc2hvdWxk
QWxsb3dQb3B1cHMpIHsgfQorICAgIHB1YmxpYzoKKyAgICAgICAgY29uc3QgRnJhbWVMb2FkUmVx
dWVzdCYgZnJhbWVMb2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVz
dDsgfQorICAgICAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlE
YXRhOyB9CisgICAgICAgIGJvb2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c2VuZE5vdGlmaWNhdGlvbjsgfQorICAgICAgICBib29sIHNob3VsZEFsbG93UG9wdXBzKCkgY29u
c3QgeyByZXR1cm4gbV9zaG91bGRBbGxvd1BvcHVwczsgfQorICAgIHByaXZhdGU6CisgICAgICAg
IEZyYW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OworICAgICAgICB2b2lkKiBtX25v
dGlmeURhdGE7CisgICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgICAgICBib29s
IG1fc2hvdWxkQWxsb3dQb3B1cHM7CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpbk1hbnVhbExv
YWRlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5QbHVnaW5NYW51YWxMb2FkZXIo
KSB7fQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShj
b25zdCBjaGFyKiwgaW50KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJikgPSAwOworICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFBsdWdp
blZpZXdCYXNlCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgICAgICAg
ICAgICAgICAsIHByaXZhdGUgUGx1Z2luU3RyZWFtQ2xpZW50CisjZW5kaWYKKyAgICAgICAgICAg
ICAgICAgICAgICwgcHVibGljIFBsdWdpbk1hbnVhbExvYWRlcgorICAgICAgICAgICAgICAgICAg
ICAgLCBwcml2YXRlIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5WaWV3PiBjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1l
LCBjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFs
dWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAg
IHZpcnR1YWwgflBsdWdpblZpZXcoKTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4o
KSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsgfQorI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQorICAgICAgICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3Rh
bmNlOyB9CisjZW5kaWYKKworICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRS
ZWN0Jik7CisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBjdXJyZW50UGx1Z2luVmlldygpOwor
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QT2JqZWN0KiBucE9i
amVjdCgpOworI2VuZGlmCisgICAgICAgIFBhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFu
Y2U+IGJpbmRpbmdJbnN0YW5jZSgpOworCisgICAgICAgIFBsdWdpblN0YXR1cyBzdGF0dXMoKSBj
b25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgICAgIC8vIE5QTiBmdW5jdGlvbnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3Rp
ZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEp
OworICAgICAgICBOUEVycm9yIGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCk7CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBm
aWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNo
YXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1
dCwgTlBCb29sIGZpbGUpOworICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5
cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQz
Ml90IHdyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwor
ICAgICAgICBOUEVycm9yIGRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24g
cmVhc29uKTsKKyNlbmRpZgorICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKKyNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVz
ZXJBZ2VudFN0YXRpYygpOworI2VuZGlmCisgICAgICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIq
IG1lc3NhZ2UpOworICAgICAgICAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAg
ICAgICAgTlBFcnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
OworICAgICAgICBzdGF0aWMgTlBFcnJvciBnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJp
YWJsZSwgdm9pZCogdmFsdWUpOworICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWVGb3JVUkwo
TlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1
aW50MzJfdCogbGVuKTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJp
YWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMy
X3QgbGVuKTsKKyAgICAgICAgTlBFcnJvciBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hh
ciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciog
c2NoZW1lLCBjb25zdCBjaGFyKiByZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxl
biwgY2hhcioqIHBhc3N3b3JkLCB1aW50MzJfdCogcGxlbik7CisgICAgICAgIHZvaWQgaW52YWxp
ZGF0ZVJlY3QoTlBSZWN0Kik7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lv
bik7CisjZW5kaWYKKyAgICAgICAgdm9pZCBmb3JjZVJlZHJhdygpOworICAgICAgICB2b2lkIHB1
c2hQb3B1cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0ZSk7CisgICAgICAgIHZvaWQgcG9wUG9wdXBz
RW5hYmxlZFN0YXRlKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNv
bnN0IEludFJlY3QmKTsKKworICAgICAgICBib29sIGFyZVBvcHVwc0FsbG93ZWQoKSBjb25zdDsK
KworICAgICAgICB2b2lkIHNldEphdmFTY3JpcHRQYXVzZWQoYm9vbCk7CisKKyAgICAgICAgdm9p
ZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisKKyAgICAgICAgdm9pZCBkaXNj
b25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbSopOworICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlz
aExvYWRpbmcoUGx1Z2luU3RyZWFtKiBzdHJlYW0pIHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0p
OyB9CisKKyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1l
UmVjdHNDaGFuZ2VkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNob3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsaXBSZWN0Q2hhbmdlZCgpIG92ZXJyaWRlOwor
CisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgcGx1Z2lucyBvbiBhbGwgcGxhdGZv
cm1zIHRvIG9idGFpbiBhIGNsaXAgcmVjdCB0aGF0IGluY2x1ZGVzIGNsaXBzIHNldCBieSBXZWJD
b3JlLAorICAgICAgICAvLyBlLmcuLCBpbiBvdmVyZmxvdzphdXRvIHNlY3Rpb25zLiAgVGhlIGNs
aXAgcmVjdHMgY29vcmRpbmF0ZXMgYXJlIGluIHRoZSBjb250YWluaW5nIHdpbmRvdydzIGNvb3Jk
aW5hdGUgc3BhY2UuCisgICAgICAgIC8vIFRoaXMgY2xpcCBpbmNsdWRlcyBhbnkgY2xpcHMgdGhh
dCB0aGUgd2lkZ2V0IGl0c2VsZiBzZXRzIHVwIGZvciBpdHMgY2hpbGRyZW4uCisgICAgICAgIElu
dFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxW
aWV3Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnRWaXNpYmxlKGJvb2wpOworCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1BsdWdpblZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisKKyAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9wYXJlbnRGcmFtZS5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgZm9jdXNQbHVnaW5FbGVtZW50
KCk7CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBwbHVnaW5zUGFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGx1Z2luc1BhZ2U7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWltZVR5cGU7IH0KKyAgICAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7
IHJldHVybiBtX3VybDsgfQorCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBib29sIHBvcFVwQ29udGV4dE1lbnUoTlBNZW51Kik7
CisjZW5kaWYKKworI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorICAgICAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisgICAgICAgIExSRVNVTFQgd25kUHJvYyhIV05EIGhX
bmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CisgICAgICAg
IFdORFBST0MgcGx1Z2luV25kUHJvYygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luV25kUHJvYzsg
fQorI2VuZGlmCisKKyAgICAgICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRpbmcKKyAgICAgICAg
dm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAg
ICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImKTsKKworICAgICAgICBzdGF0aWMgYm9vbCBpc0NhbGxpbmdQbHVnaW4oKTsKKworICAgICAg
ICBib29sIHN0YXJ0KCk7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAg
ICAgc3RhdGljIHZvaWQga2VlcEFsaXZlKE5QUCk7CisjZW5kaWYKKyAgICAgICAgdm9pZCBrZWVw
QWxpdmUoKTsKKworI2lmIFBMQVRGT1JNKFgxMSkKKyAgICAgICAgc3RhdGljIERpc3BsYXkqIGdl
dFBsdWdpbkRpc3BsYXkoRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIFdpbmRvdyBnZXRSb290V2lu
ZG93KEZyYW1lKiBwYXJlbnRGcmFtZSk7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAg
IFBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFj
a2FnZSosIEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworCisgICAgICAgIHZvaWQgc2V0
UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKKyAgICAgICAgYm9vbCBzdGFydE9yQWRkVG9VbnN0YXJ0
ZWRMaXN0KCk7CisgICAgICAgIHZvaWQgaW5pdCgpOworICAgICAgICBib29sIHBsYXRmb3JtU3Rh
cnQoKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisgICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95
KCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcq
KTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBFcnJvciBsb2Fk
KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5v
dGlmeURhdGEpOworICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZp
bGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hl
YWRlcnMpOworICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4m
IGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYpOworI2VuZGlmCisgICAgICAg
IHN0YXRpYyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5n
dGgpOworICAgICAgICB2b2lkIHNldENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7CisKKyAgICAg
ICAgdm9pZCBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QoY29uc3QgSW50UmVjdCYpOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCBtZWRpYUNhblN0YXJ0KCk7CisKKyNpZiBPUyhXSU5ET1dT
KSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgdm9pZCBwYWludFdpbmRv
d2VkUGx1Z2luSW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwor
ICAgICAgICBzdGF0aWMgSERDIFdJTkFQSSBob29rZWRCZWdpblBhaW50KEhXTkQsIFBBSU5UU1RS
VUNUKik7CisgICAgICAgIHN0YXRpYyBCT09MIFdJTkFQSSBob29rZWRFbmRQYWludChIV05ELCBj
b25zdCBQQUlOVFNUUlVDVCopOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKKyAgICAgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7CisgICAgICAgIGJv
b2wgcGxhdGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5Q
RXJyb3IqIHJlc3VsdCk7CisjZW5kaWYKKworICAgICAgICBSZWZQdHI8RnJhbWU+IG1fcGFyZW50
RnJhbWU7CisgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBtX3BsdWdpbjsKKyAgICAgICAg
SFRNTFBsdWdJbkVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsK
KyAgICAgICAgVVJMIG1fdXJsOworICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7CisgICAg
ICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKKworICAgICAgICB2b2lkIHBlcmZv
cm1SZXF1ZXN0KFBsdWdpblJlcXVlc3QqKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3Qo
c3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+KTsKKyAgICAgICAgdm9pZCByZXF1ZXN0VGlt
ZXJGaXJlZCgpOworICAgICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKCk7CisgICAgICAg
IFRpbWVyIG1fcmVxdWVzdFRpbWVyOworICAgICAgICBUaW1lciBtX2ludmFsaWRhdGVUaW1lcjsK
KworICAgICAgICB2b2lkIHBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpOworICAgICAgICBUaW1l
ciBtX3BvcFBvcHVwc1N0YXRlVGltZXI7CisKKyAgICAgICAgdm9pZCBsaWZlU3VwcG9ydFRpbWVy
RmlyZWQoKTsKKyAgICAgICAgVGltZXIgbV9saWZlU3VwcG9ydFRpbWVyOworCisjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGJvb2wgZGlzcGF0Y2hOUEV2ZW50KE5QRXZl
bnQmKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoWFBfTUFDT1NYKSAmJiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKKyAgICAgICAgaW50MTZfdCBkaXNwYXRjaE5QQ29jb2FFdmVudChOUENvY29h
RXZlbnQmKTsKKyAgICAgICAgYm9vbCBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZDsK
KyAgICAgICAgYm9vbCBtX2tleURvd25TZW50OworICAgICAgICB1aW50MTZfdCBtX2Rpc3JlZ2Fy
ZEtleVVwQ291bnRlcjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgICAg
IHZvaWQgaGFuZGxlV2hlZWxFdmVudChXaGVlbEV2ZW50Kik7CisjZW5kaWYKKyAgICAgICAgdm9p
ZCB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKKyAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5J
Y29uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2b2lkIGhh
bmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgICAgICB2b2lkIGhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFdmVudCopOworI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIHZvaWQgaGFuZGxlRm9jdXNJbkV2ZW50KCk7Cisg
ICAgICAgIHZvaWQgaGFuZGxlRm9jdXNPdXRFdmVudCgpOworI2VuZGlmCisKKyNpZiBPUyhXSU5E
T1dTKQorICAgICAgICB2b2lkIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMpOworICAg
ICAgICBQYXNzUmVmUHRyPEltYWdlPiBzbmFwc2hvdCgpOworI2VuZGlmCisKKyAgICAgICAgaW50
IG1fbW9kZTsKKyAgICAgICAgaW50IG1fcGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioqIG1fcGFy
YW1OYW1lczsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1WYWx1ZXM7CisgICAgICAgIFN0cmluZyBt
X3BsdWdpbnNQYWdlOworCisgICAgICAgIFN0cmluZyBtX21pbWVUeXBlOworICAgICAgICBXVEY6
OkNTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7
CisgICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisjZW5kaWYKKworICAgICAgICBWZWN0b3I8
Ym9vbCwgND4gbV9wb3B1cFN0YXRlU3RhY2s7CisKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1
Z2luU3RyZWFtPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxQ
bHVnaW5SZXF1ZXN0Pj4gbV9yZXF1ZXN0czsKKworICAgICAgICBib29sIG1faXNXaW5kb3dlZDsK
KyAgICAgICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7CisgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlh
bGl6ZWQ7CisgICAgICAgIGJvb2wgbV9pc1dhaXRpbmdUb1N0YXJ0OworCisjaWYgZGVmaW5lZChY
UF9VTklYKQorICAgICAgICBib29sIG1fbmVlZHNYRW1iZWQ7CisjZW5kaWYKKworI2lmIE9TKFdJ
TkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBPd25QdHI8UGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbj4gbV9tZXNzYWdlVGhyb3R0bGVyOworICAgICAgICBXTkRQ
Uk9DIG1fcGx1Z2luV25kUHJvYzsKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKKyAg
ICAgICAgYm9vbCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2M7CisgICAgICAgIEhEQyBtX3dtUHJp
bnRIREM7CisgICAgICAgIGJvb2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKKyNlbmRpZgor
CisjaWYgKFBMQVRGT1JNKEdUSykgJiYgT1MoV0lORE9XUykpIHx8IFBMQVRGT1JNKEVGTCkKKyAg
ICAgICAgLy8gT24gTWFjIE9TWCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhh
dmUgaXRzIG93biBuYXRpdmUgd2lkZ2V0LAorICAgICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNv
bnRhaW5pbmcgd2luZG93IGFzIGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5n
LgorICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBtX3dpbmRvdzsKK3B1YmxpYzoKKyAgICAg
ICAgUGxhdGZvcm1QbHVnaW5XaWRnZXQgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSBjb25zdCB7IHJl
dHVybiBtX3dpbmRvdzsgfQorICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBs
YXRmb3JtUGx1Z2luV2lkZ2V0IHdpZGdldCkgeyBtX3dpbmRvdyA9IHdpZGdldDsgfQorI2Vsc2UK
K3B1YmxpYzoKKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBs
dWdpbldpZGdldCB3aWRnZXQpIHsgc2V0UGxhdGZvcm1XaWRnZXQod2lkZ2V0KTsgfQorICAgICAg
ICBQbGF0Zm9ybVBsdWdpbldpZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0
dXJuIHBsYXRmb3JtV2lkZ2V0KCk7IH0KKyNlbmRpZgorCitwcml2YXRlOgorCisjaWYgZGVmaW5l
ZChYUF9VTklYKSB8fCBQTEFURk9STShHVEspCisgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5l
ZWRlZCgpOworI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgICAgIE5QX0NHQ29udGV4dCBt
X25wQ2dDb250ZXh0OworICAgICAgICBDR0NvbnRleHRSZWYgbV9jb250ZXh0UmVmOworCisgICAg
ICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFhQ
X1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBib29sIG1faGFz
UGVuZGluZ0dlb21ldHJ5Q2hhbmdlOworICAgICAgICBQaXhtYXAgbV9kcmF3YWJsZTsKKyAgICAg
ICAgVmlzdWFsKiBtX3Zpc3VhbDsKKyAgICAgICAgQ29sb3JtYXAgbV9jb2xvcm1hcDsKKyAgICAg
ICAgRGlzcGxheSogbV9wbHVnaW5EaXNwbGF5OworCisgICAgICAgIHZvaWQgaW5pdFhFdmVudChY
RXZlbnQqIGV2ZW50KTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBzdGF0
aWMgZ2Jvb2xlYW4gcGx1Z1JlbW92ZWRDYWxsYmFjayhHdGtTb2NrZXQqLCBQbHVnaW5WaWV3Kik7
CisgICAgICAgIHN0YXRpYyB2b2lkIHBsdWdBZGRlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdp
blZpZXcqKTsKKyAgICAgICAgdm9pZCB1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOwor
ICAgICAgICBib29sIG1fcGx1Z0FkZGVkOworICAgICAgICBJbnRSZWN0IG1fZGVsYXllZEFsbG9j
YXRpb247CisjZW5kaWYKKworICAgICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlw
IHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCisgICAgICAgIEludFJlY3QgbV93
aW5kb3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51
YWxseTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gbV9tYW51YWxTdHJlYW07CisKKyAg
ICAgICAgYm9vbCBtX2lzSmF2YVNjcmlwdFBhdXNlZDsKKworICAgICAgICBib29sIG1faGF2ZUNh
bGxlZFNldFdpbmRvdzsKKworICAgICAgICBzdGF0aWMgUGx1Z2luVmlldyogc19jdXJyZW50UGx1
Z2luVmlldzsKKyAgICB9OworCitpbmxpbmUgUGx1Z2luVmlldyogdG9QbHVnaW5WaWV3KFdpZGdl
dCogd2lkZ2V0KQoreworICAgIEFTU0VSVCghd2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KTsKK30KKwor
aW5saW5lIGNvbnN0IFBsdWdpblZpZXcqIHRvUGx1Z2luVmlldyhjb25zdCBXaWRnZXQqIHdpZGdl
dCkKK3sKKyAgICBBU1NFUlQoIXdpZGdldCB8fCB3aWRnZXQtPmlzUGx1Z2luVmlldygpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+KHdpZGdldCk7Cit9CisKKy8v
IFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQg
dG9QbHVnaW5WaWV3KGNvbnN0IFBsdWdpblZpZXcqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2lu
Vmlld1dpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY5MjEyYmEyNDlmNDc3ZTAzNjkxOGVjMjYxMzI4ZTc2ZjdkZjlmODYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4u
Y3BwCkBAIC0wLDAgKzEsMTAxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCisjaW5jbHVkZSAiQml0bWFwSW5mby5oIgorI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgorI2lu
Y2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIb3N0
V2luZG93LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNp
bmNsdWRlICJMb2NhbFdpbmRvd3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNp
bmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVs
ZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCisjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCisjaW5jbHVkZSAi
Y19pbnN0YW5jZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVu
dGltZV9yb290LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CisK
KyNpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNs
dWRlIDxjYWlyby13aW4zMi5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVk
ZSA8Z2RrL2dka3dpbjMyLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2VuZGlmCisKK3N0YXRp
YyBpbmxpbmUgSFdORCB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KFBsYXRmb3JtUGFnZUNsaWVu
dCBjbGllbnQpCit7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmICghY2xpZW50KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoR2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93
aW5kb3coY2xpZW50KSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhXTkQ+KEdES19XSU5E
T1dfSFdORCh3aW5kb3cpKTsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgcmV0dXJuIGNsaWVu
dDsKKyNlbmRpZgorfQorCit1c2luZyBKU0M6OkV4ZWNTdGF0ZTsKK3VzaW5nIEpTQzo6SlNMb2Nr
OwordXNpbmcgSlNDOjpKU09iamVjdDsKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5nIG5hbWVz
cGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKKworY29uc3QgTFBDV1NUUiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZSA9IEwiV2Vi
UGx1Z2luVmlldyI7Citjb25zdCBMUENXU1RSIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkgPSBMIldl
YlBsdWdpblZpZXdQcm9wZXJ0eSI7CisKKy8vIFRoZSBjb2RlIHVzZWQgdG8gaG9vayBCZWdpblBh
aW50L0VuZFBhaW50IG9yaWdpbmFsbHkgY2FtZSBmcm9tCisvLyA8aHR0cDovL3d3dy5mZW5neXVh
bi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+LgorLy8gQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEZl
bmcgWXVhbiAod3d3LmZlbmd5dWFuLmNvbSkuCisKK3N0YXRpYyB1bnNpZ25lZCBiZWdpblBhaW50
U3lzQ2FsbDsKK3N0YXRpYyBCWVRFKiBiZWdpblBhaW50OworCitzdGF0aWMgdW5zaWduZWQgZW5k
UGFpbnRTeXNDYWxsOworc3RhdGljIEJZVEUqIGVuZFBhaW50OworCit0eXBlZGVmIEhEQyAoV0lO
QVBJICpQdHJCZWdpblBhaW50KShIV05ELCBQQUlOVFNUUlVDVCopOwordHlwZWRlZiBCT09MIChX
SU5BUEkgKlB0ckVuZFBhaW50KShIV05ELCBjb25zdCBQQUlOVFNUUlVDVCopOworCisjaWYgT1Mo
V0lORE9XUykgJiYgQ1BVKFg4Nl82NCkgJiYgQ09NUElMRVIoTVNWQykKK2V4dGVybiAiQyIgSERD
IF9fc3RkY2FsbCBfSEJlZ2luUGFpbnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNUIGxwUGFpbnQp
OworZXh0ZXJuICJDIiBCT09MIF9fc3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3Qg
UEFJTlRTVFJVQ1QqIGxwUGFpbnQpOworI2VuZGlmCisKK0hEQyBXSU5BUEkgUGx1Z2luVmlldzo6
aG9va2VkQmVnaW5QYWludChIV05EIGhXbmQsIFBBSU5UU1RSVUNUKiBscFBhaW50KQoreworICAg
IFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihH
ZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKKyAgICBpZiAocGx1Z2luVmll
dyAmJiBwbHVnaW5WaWV3LT5tX3dtUHJpbnRIREMpIHsKKyAgICAgICAgLy8gV2UncmUgc2VjcmV0
bHkgaGFuZGxpbmcgV01fUFJJTlRDTElFTlQsIHNvIHNldCB1cCB0aGUgUEFJTlRTVFJVQ1Qgc28K
KyAgICAgICAgLy8gdGhhdCB0aGUgcGx1Z2luIHdpbGwgcGFpbnQgaW50byB0aGUgSERDIHdlIHBy
b3ZpZGUuCisgICAgICAgIG1lbXNldChscFBhaW50LCAwLCBzaXplb2YoUEFJTlRTVFJVQ1QpKTsK
KyAgICAgICAgbHBQYWludC0+aGRjID0gcGx1Z2luVmlldy0+bV93bVByaW50SERDOworICAgICAg
ICBHZXRDbGllbnRSZWN0KGhXbmQsICZscFBhaW50LT5yY1BhaW50KTsKKyAgICAgICAgcmV0dXJu
IHBsdWdpblZpZXctPm1fd21QcmludEhEQzsKKyAgICB9CisKKyNpZiBDT01QSUxFUihHQ0MpCisg
ICAgSERDIHJlc3VsdDsKKyAgICBhc20gKCJwdXNoICAgICUyXG4iCisgICAgICAgICAicHVzaCAg
ICAlM1xuIgorICAgICAgICAgImNhbGwgICAgKiU0XG4iCisgICAgICAgICA6ICI9YSIgKHJlc3Vs
dCkKKyAgICAgICAgIDogImEiIChiZWdpblBhaW50U3lzQ2FsbCksICJnIiAobHBQYWludCksICJn
IiAoaFduZCksICJtIiAoYmVnaW5QYWludCkKKyAgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAg
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2VsaWYgZGVmaW5lZChfTV9JWDg2KQorICAgIC8vIENh
bGwgdGhyb3VnaCB0byB0aGUgb3JpZ2luYWwgQmVnaW5QYWludC4KKyAgICBfX2FzbSAgIG1vdiAg
ICAgZWF4LCBiZWdpblBhaW50U3lzQ2FsbAorICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50Cisg
ICAgX19hc20gICBwdXNoICAgIGhXbmQKKyAgICBfX2FzbSAgIGNhbGwgICAgYmVnaW5QYWludAor
I2Vsc2UKKyAgICByZXR1cm4gX0hCZWdpblBhaW50KGhXbmQsIGxwUGFpbnQpOworI2VuZGlmCit9
CisKK0JPT0wgV0lOQVBJIFBsdWdpblZpZXc6Omhvb2tlZEVuZFBhaW50KEhXTkQgaFduZCwgY29u
c3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpCit7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBsdWdpblZp
ZXdQcm9wZXJ0eSkpOworICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPm1fd21Qcmlu
dEhEQykgeworICAgICAgICAvLyBXZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9QUklOVENMSUVO
VCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkKKyAgICAgICAgLy8gY2xlYW51cC4KKyAgICAg
ICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisjaWYgQ09NUElMRVIoR0NDKQorICAgIEJPT0wgcmVz
dWx0OworICAgIGFzbSAoInB1c2ggICAlMlxuIgorICAgICAgICAgInB1c2ggICAlM1xuIgorICAg
ICAgICAgImNhbGwgICAqJTRcbiIKKyAgICAgICAgIDogIj1hIiAocmVzdWx0KQorICAgICAgICAg
OiAiYSIgKGVuZFBhaW50U3lzQ2FsbCksICJnIiAobHBQYWludCksICJnIiAoaFduZCksICJtIiAo
ZW5kUGFpbnQpCisgICAgICAgICk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbGlmIGRlZmluZWQg
KF9NX0lYODYpCisgICAgLy8gQ2FsbCB0aHJvdWdoIHRvIHRoZSBvcmlnaW5hbCBFbmRQYWludC4K
KyAgICBfX2FzbSAgIG1vdiAgICAgZWF4LCBlbmRQYWludFN5c0NhbGwKKyAgICBfX2FzbSAgIHB1
c2ggICAgbHBQYWludAorICAgIF9fYXNtICAgcHVzaCAgICBoV25kCisgICAgX19hc20gICBjYWxs
ICAgIGVuZFBhaW50CisjZWxzZQorICAgIHJldHVybiBfSEVuZFBhaW50KGhXbmQsIGxwUGFpbnQp
OworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGhvb2soY29uc3QgY2hhciogbW9kdWxlLCBjb25z
dCBjaGFyKiBwcm9jLCB1bnNpZ25lZCYgc3lzQ2FsbElELCBCWVRFKiYgcFByb2MsIGNvbnN0IHZv
aWQqIHBOZXdQcm9jKQoreworICAgIC8vIFNlZSA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0
aWNsZS93bXByaW50Lmh0bWw+IGZvciBhbiBleHBsYW5hdGlvbiBvZgorICAgIC8vIGhvdyB0aGlz
IGZ1bmN0aW9uIHdvcmtzLgorCisgICAgSElOU1RBTkNFIGhNb2QgPSBHZXRNb2R1bGVIYW5kbGVB
KG1vZHVsZSk7CisKKyAgICBwUHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KHJlaW50ZXJw
cmV0X2Nhc3Q8cHRyZGlmZl90PihHZXRQcm9jQWRkcmVzcyhoTW9kLCBwcm9jKSkpOworCisjaWYg
Q09NUElMRVIoR0NDKSB8fCBkZWZpbmVkKF9NX0lYODYpCisgICAgaWYgKHBQcm9jWzBdICE9IDB4
QjgpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYmUgcmVhZGlu
ZyB0aGUgYnl0ZXMgb25lLWJ5LW9uZSBpbnN0ZWFkIG9mIGRvaW5nIGFuCisgICAgLy8gdW5hbGln
bmVkIHJlYWQ/CisgICAgc3lzQ2FsbElEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihw
UHJvYyArIDEpOworCisgICAgRFdPUkQgZmxPbGRQcm90ZWN0OworICAgIGlmICghVmlydHVhbFBy
b3RlY3QocFByb2MsIDUsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUsICZmbE9sZFByb3RlY3QpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwUHJvY1swXSA9IDB4RTk7CisgICAgKnJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
cE5ld1Byb2MpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocFByb2MgKyA1KTsKKworICAg
IHBQcm9jICs9IDU7CisjZWxzZQorICAgIC8qIERpc2Fzc2VtYmx5IG9mIEJlZ2luUGFpbnQoKQor
ICAgIDAwMDAwMDAwNzc5RkM1QjAgNEMgOEIgRDEgICAgICAgICBtb3YgICAgICAgICByMTAscmN4
CisgICAgMDAwMDAwMDA3NzlGQzVCMyBCOCAxNyAxMCAwMCAwMCAgIG1vdiAgICAgICAgIGVheCwx
MDE3aAorICAgIDAwMDAwMDAwNzc5RkM1QjggMEYgMDUgICAgICAgICAgICBzeXNjYWxsCisgICAg
MDAwMDAwMDA3NzlGQzVCQSBDMyAgICAgICAgICAgICAgIHJldAorICAgIDAwMDAwMDAwNzc5RkM1
QkIgOTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUJDIDkwICAgICAgICAg
ICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVCRCA5MCAgICAgICAgICAgICAgIG5vcAorICAg
IDAwMDAwMDAwNzc5RkM1QkUgOTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZD
NUJGIDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVDMCA5MCAgICAgICAg
ICAgICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QzEgOTAgICAgICAgICAgICAgICBub3AKKyAg
ICAwMDAwMDAwMDc3OUZDNUMyIDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlG
QzVDMyA5MCAgICAgICAgICAgICAgIG5vcAorICAgICovCisgICAgLy8gQ2hlY2sgZm9yIHRoZSBz
aWduYXR1cmUgYXMgaW4gdGhlIGFib3ZlIGRpc2Fzc2VtYmx5CisgICAgRFdPUkQgZ3VhcmQgPSAw
eEI4RDE4QjRDOworICAgIGlmICgqcmVpbnRlcnByZXRfY2FzdDxEV09SRCo+KHBQcm9jKSAhPSBn
dWFyZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRFdPUkQgZmxPbGRQcm90ZWN0OworICAgIFZp
cnR1YWxQcm90ZWN0KHBQcm9jLCAxMiwgUEFHRV9FWEVDVVRFX1JFQURXUklURSwgJiBmbE9sZFBy
b3RlY3QpOworICAgIHBQcm9jWzBdID0gMHg0ODsgICAgLy8gbW92IHJheCwgdGhpcworICAgIHBQ
cm9jWzFdID0gMHhiODsKKyAgICAqKF9faW50NjQqKShwUHJvYysyKSA9IChfX2ludDY0KXBOZXdQ
cm9jOworICAgIHBQcm9jWzEwXSA9IDB4ZmY7ICAgLy8gam1wIHJheAorICAgIHBQcm9jWzExXSA9
IDB4ZTA7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hv
b2tzKEhEQyAoV0lOQVBJKmhvb2tlZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU5UU1RSVUNUKiksIEJP
T0wgKFdJTkFQSSpob29rZWRFbmRQYWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJVQ1QqKSkKK3sK
KyAgICBzdGF0aWMgYm9vbCBoYXZlSG9va2VkID0gZmFsc2U7CisgICAgaWYgKGhhdmVIb29rZWQp
CisgICAgICAgIHJldHVybjsKKyAgICBoYXZlSG9va2VkID0gdHJ1ZTsKKworICAgIC8vIE1vc3Qg
KGFsbD8pIHdpbmRvd2VkIHBsdWdpbnMgZG9uJ3Qgc2VlbSB0byByZXNwb25kIHRvIFdNX1BSSU5U
Q0xJRU5ULCBzbworICAgIC8vIHdlIGhvb2sgaW50byBCZWdpblBhaW50L0VuZFBhaW50IHRvIGFs
bG93IHRoZWlyIG5vcm1hbCBXTV9QQUlOVCBoYW5kbGluZworICAgIC8vIHRvIGRyYXcgaW50byBh
IGdpdmVuIEhEQy4gTm90ZSB0aGF0IHRoaXMgaG9va2luZyBhZmZlY3RzIHRoZSBlbnRpcmUKKyAg
ICAvLyBwcm9jZXNzLgorICAgIGhvb2soInVzZXIzMi5kbGwiLCAiQmVnaW5QYWludCIsIGJlZ2lu
UGFpbnRTeXNDYWxsLCBiZWdpblBhaW50LCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4o
cmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGhvb2tlZEJlZ2luUGFpbnQpKSk7CisgICAgaG9v
aygidXNlcjMyLmRsbCIsICJFbmRQYWludCIsIGVuZFBhaW50U3lzQ2FsbCwgZW5kUGFpbnQsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4o
aG9va2VkRW5kUGFpbnQpKSk7CisKK30KKworc3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3
KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7
CisgICAgaWYgKGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IHRydWU7CisKKyNpZiBQTEFURk9S
TShHVEspCisgICAgV2ViQ29yZTo6c2V0SW5zdGFuY2VIYW5kbGUoKEhJTlNUQU5DRSkoR2V0TW9k
dWxlSGFuZGxlKDApKSk7CisjZW5kaWYKKworICAgIEFTU0VSVChXZWJDb3JlOjppbnN0YW5jZUhh
bmRsZSgpKTsKKworICAgIFdORENMQVNTRVggd2NleDsKKyAgICB3Y2V4LmNiU2l6ZSA9IHNpemVv
ZihXTkRDTEFTU0VYKTsKKyAgICB3Y2V4LmhJY29uU20gICAgICAgID0gMDsKKyAgICB3Y2V4LnN0
eWxlICAgICAgICAgID0gQ1NfREJMQ0xLUzsKKyAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gRGVm
V2luZG93UHJvYzsKKyAgICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKKyAgICB3Y2V4LmNiV25k
RXh0cmEgICAgID0gMDsKKyAgICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gV2ViQ29yZTo6aW5zdGFu
Y2VIYW5kbGUoKTsKKyAgICB3Y2V4LmhJY29uICAgICAgICAgID0gMDsKKyAgICB3Y2V4LmhDdXJz
b3IgICAgICAgID0gTG9hZEN1cnNvcigwLCBJRENfQVJST1cpOworICAgIHdjZXguaGJyQmFja2dy
b3VuZCAgPSAoSEJSVVNIKUNPTE9SX1dJTkRPVzsKKyAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0g
MDsKKyAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWU7
CisKKyAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzRXgoJndjZXgpOworfQorCitMUkVTVUxUIENB
TExCQUNLIFBsdWdpblZpZXc6OlBsdWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNz
YWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFBsdWdpblZpZXcqIHBs
dWdpblZpZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtX
ZWJQbHVnaW5WaWV3UHJvcGVydHkpKTsKKworICAgIHJldHVybiBwbHVnaW5WaWV3LT53bmRQcm9j
KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKK30KKworc3RhdGljIGJvb2wgaXNXaW5k
b3dzTWVzc2FnZVVzZXJHZXN0dXJlKFVJTlQgbWVzc2FnZSkKK3sKKyAgICBzd2l0Y2ggKG1lc3Nh
Z2UpIHsKKyAgICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01fTUJVVFRP
TlVQOgorICAgICAgICBjYXNlIFdNX1JCVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9LRVlVUDoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBjb250ZW50
c1RvTmF0aXZlV2luZG93KEZyYW1lVmlldyogdmlldywgY29uc3QgSW50UG9pbnQmIHBvaW50KQor
eworICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHBvaW50KTsKK30KKworc3RhdGlj
IGlubGluZSBJbnRSZWN0IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coRnJhbWVWaWV3KiB2aWV3LCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93
KHJlY3QpOworfQorCitMUkVTVUxUCitQbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIC8vIDxyZGFy
Oi8vNTcxMTEzNj4gU29tZXRpbWVzIEZsYXNoIHdpbGwgY2FsbCBTZXRDYXB0dXJlIGJlZm9yZSBj
cmVhdGluZworICAgIC8vIGEgZnVsbC1zY3JlZW4gd2luZG93IGFuZCB3aWxsIG5vdCByZWxlYXNl
IGl0LCB3aGljaCBjYXVzZXMgdGhlCisgICAgLy8gZnVsbC1zY3JlZW4gd2luZG93IHRvIG5ldmVy
IHJlY2VpdmUgbW91c2UgZXZlbnRzLiBXZSBzZXQvcmVsZWFzZSBjYXB0dXJlCisgICAgLy8gb24g
bW91c2UgZG93bi91cCBiZWZvcmUgc2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIHBsdWctaW4gdG8g
cHJldmVudCB0aGF0LgorICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgICAgICBjYXNlIFdNX0xC
VVRUT05ET1dOOgorICAgICAgICBjYXNlIFdNX01CVVRUT05ET1dOOgorICAgICAgICBjYXNlIFdN
X1JCVVRUT05ET1dOOgorICAgICAgICAgICAgOjpTZXRDYXB0dXJlKGhXbmQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV01fTEJVVFRPTlVQOgorICAgICAgICBjYXNlIFdNX01C
VVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6CisgICAgICAgICAgICA6OlJlbGVh
c2VDYXB0dXJlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobWVzc2Fn
ZSA9PSBtX2xhc3RNZXNzYWdlICYmCisgICAgICAgIG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHkpICYm
IAorICAgICAgICBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MpCisgICAgICAgIHJldHVybiAxOwor
CisgICAgaWYgKG1lc3NhZ2UgPT0gV01fVVNFUiArIDEgJiYKKyAgICAgICAgbV9wbHVnaW4tPnF1
aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMp
KSB7CisgICAgICAgIGlmICghbV9tZXNzYWdlVGhyb3R0bGVyKQorICAgICAgICAgICAgbV9tZXNz
YWdlVGhyb3R0bGVyID0gYWRvcHRQdHIobmV3IFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4odGhp
cykpOworCisgICAgICAgIG1fbWVzc2FnZVRocm90dGxlci0+YXBwZW5kTWVzc2FnZShoV25kLCBt
ZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IG1fbGFzdE1lc3NhZ2UgPSBtZXNzYWdlOworICAgIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyA9
IHRydWU7CisKKyAgICAvLyBJZiB0aGUgcGx1Zy1pbiBkb2Vzbid0IGV4cGxpY2l0bHkgc3VwcG9y
dCBjaGFuZ2luZyB0aGUgcG9wLXVwIHN0YXRlLCB3ZSBlbmFibGUKKyAgICAvLyBwb3B1cHMgZm9y
IGFsbCB1c2VyIGdlc3R1cmVzLgorICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHBvcCB0aGUg
c3RhdGUgaW4gYSB0aW1lciwgYmVjYXVzZSB0aGUgRmxhc2ggcGx1Zy1pbiAKKyAgICAvLyBwb3Bz
IHVwIHdpbmRvd3MgaW4gcmVzcG9uc2UgdG8gYSBwb3N0ZWQgbWVzc2FnZS4KKyAgICBpZiAobV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQU19FTkFCTEVE
X1NUQVRFICYmCisgICAgICAgIGlzV2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShtZXNzYWdlKSAm
JiAhbV9wb3BQb3B1cHNTdGF0ZVRpbWVyLmlzQWN0aXZlKCkpIHsKKworICAgICAgICBwdXNoUG9w
dXBzRW5hYmxlZFN0YXRlKHRydWUpOworCisgICAgICAgIG1fcG9wUG9wdXBzU3RhdGVUaW1lci5z
dGFydE9uZVNob3QoMCk7CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UgPT0gV01fUFJJTlRDTElF
TlQpIHsKKyAgICAgICAgLy8gTW9zdCAoYWxsPykgd2luZG93ZWQgcGx1Z2lucyBkb24ndCByZXNw
b25kIHRvIFdNX1BSSU5UQ0xJRU5ULCBzbyB3ZQorICAgICAgICAvLyBjaGFuZ2UgdGhlIG1lc3Nh
Z2UgdG8gV01fUEFJTlQgYW5kIHJlbHkgb24gb3VyIGhvb2tlZCB2ZXJzaW9ucyBvZgorICAgICAg
ICAvLyBCZWdpblBhaW50L0VuZFBhaW50IHRvIG1ha2UgdGhlIHBsdWdpbiBkcmF3IGludG8gdGhl
IGdpdmVuIEhEQy4KKyAgICAgICAgbWVzc2FnZSA9IFdNX1BBSU5UOworICAgICAgICBtX3dtUHJp
bnRIREMgPSByZWludGVycHJldF9jYXN0PEhEQz4od1BhcmFtKTsKKyAgICB9CisKKyAgICAvLyBD
YWxsIHRoZSBwbHVnLWluJ3Mgd2luZG93IHByb2MuCisgICAgTFJFU1VMVCByZXN1bHQgPSA6OkNh
bGxXaW5kb3dQcm9jKG1fcGx1Z2luV25kUHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFy
YW0pOworCisgICAgbV93bVByaW50SERDID0gMDsKKworICAgIG1faXNDYWxsaW5nUGx1Z2luV25k
UHJvYyA9IGZhbHNlOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQbHVnaW5WaWV3
Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQoreworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gZG93bmNhc3Q8RnJhbWVWaWV3Pigq
cGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0Owor
ICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0
ID0gSW50UmVjdChmcmFtZVZpZXcuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlv
bigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJl
Y3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1Jl
Y3QueSgpKTsKKworICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpICYmICghbV9oYXZlVXBk
YXRlZFBsdWdpbldpZGdldCB8fCBtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2Ns
aXBSZWN0ICE9IG9sZENsaXBSZWN0KSkgeworCisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1
ZSk7CisKKyAgICAgICAgLy8gVG8gcHJldmVudCBmbGFzaGVzIHdoaWxlIHNjcm9sbGluZywgd2Ug
ZGlzYWJsZSBkcmF3aW5nIGR1cmluZyB0aGUgd2luZG93CisgICAgICAgIC8vIHVwZGF0ZSBwcm9j
ZXNzIGJ5IGNsaXBwaW5nIHRoZSB3aW5kb3cgdG8gdGhlIHplcm8gcmVjdC4KKworICAgICAgICBi
b29sIGNsaXBUb1plcm9SZWN0ID0gIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5R
dWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOworCisgICAgICAgIGlmIChjbGlw
VG9aZXJvUmVjdCkgeworICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNy
ZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCkpOworICAgICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWsoKSwgRkFMU0UpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24o
bV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlw
UmVjdC5tYXhZKCkpKTsKKyAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCksIHJnbi5sZWFrKCksIFRSVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFt
X2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0IHx8IG1fd2luZG93UmVjdCAhPSBvbGRXaW5kb3dSZWN0
KQorICAgICAgICAgICAgOjpNb3ZlV2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1fd2lu
ZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dp
bmRvd1JlY3QuaGVpZ2h0KCksIFRSVUUpOworCisgICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkg
eworICAgICAgICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24o
bV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlw
UmVjdC5tYXhZKCkpKTsKKyAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCksIHJnbi5sZWFrKCksIFRSVUUpOworICAgICAgICB9CisKKyAgICAgICAgc2V0Q2Fs
bGluZ1BsdWdpbihmYWxzZSk7CisKKyAgICAgICAgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCA9
IHRydWU7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNl
ZCkKK3sKKyAgICBpZiAoZm9jdXNlZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAg
ICBTZXRGb2N1cyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKworICAgIFdpZGdldDo6c2V0Rm9j
dXMoZm9jdXNlZCk7CisKKyAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgbnBFdmVudC5ldmVudCA9
IGZvY3VzZWQgPyBXTV9TRVRGT0NVUyA6IFdNX0tJTExGT0NVUzsKKyAgICBucEV2ZW50LndQYXJh
bSA9IDA7CisgICAgbnBFdmVudC5sUGFyYW0gPSAwOworCisgICAgZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQoreworICAgIHNldFNlbGZWaXNp
YmxlKHRydWUpOworCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpCisgICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1df
U0hPV05BKTsKKworICAgIFdpZGdldDo6c2hvdygpOworfQorCit2b2lkIFBsdWdpblZpZXc6Omhp
ZGUoKQoreworICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsKKworICAgIGlmIChpc1BhcmVudFZp
c2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBTaG93V2luZG93KHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJREUpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9
CisKK2Jvb2wgUGx1Z2luVmlldzo6ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIG5wRXZlbnQpCit7
CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgYm9vbCBzaG91bGRQb3AgPSBmYWxzZTsKKworICAgIGlmIChtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+dmVyc2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VOQUJMRURfU1RB
VEUgJiYgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKG5wRXZlbnQuZXZlbnQpKSB7CisgICAg
ICAgIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIHNob3VsZFBvcCA9IHRy
dWU7CisgICAgfQorCisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3Mo
SlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUp
OworICAgIGJvb2wgYWNjZXB0ZWQgPSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1f
aW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKworICAg
IGlmIChzaG91bGRQb3ApIAorICAgICAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKKworICAg
IHJldHVybiBhY2NlcHRlZDsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWludEludG9UcmFuc2Zv
cm1lZENvbnRleHQoSERDIGhkYykKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAg
IFNlbmRNZXNzYWdlKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJRU5ULCByZWlu
dGVycHJldF9jYXN0PFdQQVJBTT4oaGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElMRFJFTiB8IFBS
Rl9PV05FRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX25wV2luZG93LnR5cGUg
PSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICBtX25wV2luZG93LndpbmRvdyA9IGhkYzsKKwor
ICAgIFdJTkRPV1BPUyB3aW5kb3dwb3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICAg
IEludFJlY3QgciA9IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8RnJhbWVWaWV3Pihw
YXJlbnQoKSksIGZyYW1lUmVjdCgpKTsKKworICAgIHdpbmRvd3Bvcy54ID0gci54KCk7CisgICAg
d2luZG93cG9zLnkgPSByLnkoKTsKKyAgICB3aW5kb3dwb3MuY3ggPSByLndpZHRoKCk7CisgICAg
d2luZG93cG9zLmN5ID0gci5oZWlnaHQoKTsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICBu
cEV2ZW50LmV2ZW50ID0gV01fV0lORE9XUE9TQ0hBTkdFRDsKKyAgICBucEV2ZW50LmxQYXJhbSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pigmd2luZG93cG9zKTsKKyAgICBucEV2ZW50LndQ
YXJhbSA9IDA7CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7CisKKyAgICBzZXROUFdp
bmRvd1JlY3QoZnJhbWVSZWN0KCkpOworCisgICAgbnBFdmVudC5ldmVudCA9IFdNX1BBSU5UOwor
ICAgIG5wRXZlbnQud1BhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhkYyk7CisK
KyAgICAvLyBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGEgcG9pbnRlciB0byB0aGUgZGlydHkgcmVj
dCwgYnV0IGl0IHNlZW1zIHRoYXQgdGhlIEZsYXNoIHBsdWdpbgorICAgIC8vIGlnbm9yZXMgaXQg
c28gd2UganVzdCBwYXNzIG51bGwuCisgICAgbnBFdmVudC5sUGFyYW0gPSAwOworCisgICAgZGlz
cGF0Y2hOUEV2ZW50KG5wRXZlbnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50V2luZG93
ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisjaWYgIVVTRShXSU5HREkpCisgICAgQVNTRVJUKG1faXNXaW5kb3dlZCk7
CisgICAgQVNTRVJUKGNvbnRleHQtPnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSk7CisKKyAg
ICBJbnRQb2ludCBsb2NhdGlvbkluV2luZG93ID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50
KCkpLmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7CisK
KyAgICBMb2NhbFdpbmRvd3NDb250ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQsIGZyYW1lUmVj
dCgpLCBmYWxzZSk7CisKKyNpZiBVU0UoQ0FJUk8pCisgICAgLy8gTXVzdCBmbHVzaCBkcmF3aW5n
cyB1cCB0byB0aGlzIHBvaW50IHRvIHRoZSBiYWNraW5nIG1ldGFmaWxlLCBvdGhlcndpc2UgdGhl
CisgICAgLy8gcGx1Z2luIHJlZ2lvbiB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggYW55IGNsZWFy
IHJlZ2lvbnMgc3BlY2lmaWVkIGluIHRoZQorICAgIC8vIGNhaXJvLWNvbnRyb2xsZWQgcG9ydGlv
bnMgb2YgdGhlIHJlbmRlcmluZy4KKyAgICBjYWlyb19zaG93X3BhZ2UoY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNyKCkpOworI2VuZGlmCisKKyAgICBIREMgaGRjID0gd2luZG93c0NvbnRl
eHQuaGRjKCk7CisgICAgWEZPUk0gb3JpZ2luYWxUcmFuc2Zvcm07CisgICAgR2V0V29ybGRUcmFu
c2Zvcm0oaGRjLCAmb3JpZ2luYWxUcmFuc2Zvcm0pOworCisgICAgLy8gVGhlIHBsdWdpbiBleHBl
Y3RzIHRoZSBEQyB0byBiZSBpbiBjbGllbnQgY29vcmRpbmF0ZXMsIHNvIHdlIHRyYW5zbGF0ZQor
ICAgIC8vIHRoZSBEQyB0byBtYWtlIHRoYXQgc28uCisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9
IGNvbnRleHQtPmdldENUTSgpOworICAgIGN0bS50cmFuc2xhdGUobG9jYXRpb25JbldpbmRvdy54
KCksIGxvY2F0aW9uSW5XaW5kb3cueSgpKTsKKyAgICBYRk9STSB0cmFuc2Zvcm0gPSBzdGF0aWNf
Y2FzdDxYRk9STT4oY3RtLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisKKyAgICBTZXRXb3Js
ZFRyYW5zZm9ybShoZGMsICZ0cmFuc2Zvcm0pOworCisgICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRD
b250ZXh0KGhkYyk7CisKKyAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmlnaW5hbFRyYW5z
Zm9ybSk7CisjZW5kaWYKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRl
ZCkgeworICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisgICAgICAg
IHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGNhbGxlZCBTZXRXaW5kb3cgYmVm
b3JlIHdlIHRyeSB0byBwYWludC4KKyAgICBpZiAoIW1faGF2ZUNhbGxlZFNldFdpbmRvdykKKyAg
ICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKKworICAgIGlmIChtX2lzV2luZG93
ZWQpIHsKKyNpZiAhVVNFKFdJTkdESSkKKyAgICAgICAgaWYgKGNvbnRleHQtPnNob3VsZEluY2x1
ZGVDaGlsZFdpbmRvd3MoKSkKKyAgICAgICAgICAgIHBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29u
dGV4dChjb250ZXh0LCByZWN0KTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gSW4gdGhlIEdUSyBhbmQgUXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVm
ZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2luZG93CisgICAgLy8gY29vcmRpbmF0ZXMu
CisjaWYgUExBVEZPUk0oR1RLKQorICAgIEludFJlY3QgcmVjdEluV2luZG93KHJlY3QpOworICAg
IHJlY3RJbldpbmRvdy5pbnRlcnNlY3QoZnJhbWVSZWN0KCkpOworI2Vsc2UKKyAgICBJbnRSZWN0
IHJlY3RJbldpbmRvdyA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1Rv
V2luZG93KGZyYW1lUmVjdCgpKTsKKyNlbmRpZgorICAgIExvY2FsV2luZG93c0NvbnRleHQgd2lu
ZG93c0NvbnRleHQoY29udGV4dCwgcmVjdEluV2luZG93LCBtX2lzVHJhbnNwYXJlbnQpOworCisg
ICAgLy8gT24gU2FmYXJpL1dpbmRvd3Mgd2l0aG91dCB0cmFuc3BhcmVuY3kgbGF5ZXJzIHRoZSBH
cmFwaGljc0NvbnRleHQgcmV0dXJucyB0aGUgSERDCisgICAgLy8gb2YgdGhlIHdpbmRvdyBhbmQg
dGhlIHBsdWdpbiBleHBlY3RzIHRoYXQgdGhlIHBhc3NlZCBpbiBEQyBoYXMgd2luZG93IGNvb3Jk
aW5hdGVzLgorICAgIC8vIEluIHRoZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGFsd2F5cyBkcmF3IGlu
IGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIHRoZXJlZm9yZSBuZWVkCisgICAgLy8gdG8gcHJlc2Vy
dmUgdGhlIHRyYW5zbGF0aW9uIHNldCBpbiBnZXRXaW5kb3dzQ29udGV4dC4KKyNpZiAhUExBVEZP
Uk0oR1RLKQorICAgIGlmICghY29udGV4dC0+aXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKKyAg
ICAgICAgWEZPUk0gdHJhbnNmb3JtOworICAgICAgICBHZXRXb3JsZFRyYW5zZm9ybSh3aW5kb3dz
Q29udGV4dC5oZGMoKSwgJnRyYW5zZm9ybSk7CisgICAgICAgIHRyYW5zZm9ybS5lRHggPSAwOwor
ICAgICAgICB0cmFuc2Zvcm0uZUR5ID0gMDsKKyAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0od2lu
ZG93c0NvbnRleHQuaGRjKCksICZ0cmFuc2Zvcm0pOworICAgIH0KKyNlbmRpZgorCisgICAgcGFp
bnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KHdpbmRvd3NDb250ZXh0LmhkYygpKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQor
eworICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKKworICAgIE5QRXZlbnQg
bnBFdmVudDsKKworICAgIG5wRXZlbnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUoKTsKKworICAg
IGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKKyAgICAg
ICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWURPV047CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0g
MDsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNz
RXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0NIQVI7CisgICAgICAgIG5wRXZl
bnQubFBhcmFtID0gMDsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmtleXVwRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWVVQOworICAg
ICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJu
OworCisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpKTsKKyAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQor
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKworZXh0ZXJuIGJvb2wgaWdu
b3JlTmV4dFNldEN1cnNvcjsKKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1v
dXNlRXZlbnQqIGV2ZW50KQoreworICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2Vk
KTsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKworICAgIEludFBvaW50IHAgPSBjb250ZW50c1Rv
TmF0aXZlV2luZG93KGRvd25jYXN0PEZyYW1lVmlldz4ocGFyZW50KCkpLCBJbnRQb2ludChldmVu
dC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIG5wRXZlbnQubFBhcmFtID0gTUFL
RUxQQVJBTShwLngoKSwgcC55KCkpOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKworICAgIGlm
IChldmVudC0+Y3RybEtleSgpKQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19DT05UUk9M
OworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFyYW0gfD0g
TUtfU0hJRlQ7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vt
b3ZlRXZlbnQgfHwKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vv
dXRFdmVudCB8fCAKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vv
dmVyRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9WRTsKKyAgICAg
ICAgaWYgKGV2ZW50LT5idXR0b25Eb3duKCkpCisgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LT5i
dXR0b24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICAgICAgICAg
ICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTEJVVFRPTjsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgICAg
ICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX01CVVRUT047CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgICAg
ICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1JCVVRUT047CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIGZvY3VzUGx1Z2luRWxl
bWVudCgpOworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAg
Y2FzZSAwOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAg
ICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9
IFdNX1JCVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsK
KyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoK
KyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZl
bnQuZXZlbnQgPSBXTV9NQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05V
UDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAg
ICByZXR1cm47CisKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgIC8vIEZJWE1FOiBDb25zaWRlciBiYWNr
IHBvcnRpbmcgdGhlIGh0dHA6Ly93ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUuCisgICAgaWYg
KGRpc3BhdGNoTlBFdmVudChucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisKKyNpZiAhUExBVEZPUk0oR1RLKQorICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0Ojpz
ZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFu
ZGxlci5jcHAKKyAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25v
cmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCisgICAgaWdub3Jl
TmV4dFNldEN1cnNvciA9IHRydWU7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1l
LT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNldExhc3RTZXRDdXJz
b3JUb0N1cnJlbnRDdXJzb3IoKTsKKyNlbmRpZgorfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBh
cmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50
KTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIC8vIElmIHRoZSBwbHVnLWluIHdpbmRvdyBvciBvbmUgb2YgaXRzIGNoaWxkcmVuIGhh
dmUgdGhlIGZvY3VzLCB3ZSBuZWVkIHRvIAorICAgICAgICAvLyBjbGVhciBpdCB0byBwcmV2ZW50
IHRoZSB3ZWIgdmlldyB3aW5kb3cgZnJvbSBiZWluZyBmb2N1c2VkIGJlY2F1c2UgdGhhdCBjYW4K
KyAgICAgICAgLy8gdHJpZ2dlciBhIGxheW91dCB3aGlsZSB0aGUgcGx1Z2luIGVsZW1lbnQgaXMg
YmVpbmcgZGV0YWNoZWQuCisgICAgICAgIEhXTkQgZm9jdXNlZFdpbmRvdyA9IDo6R2V0Rm9jdXMo
KTsKKyAgICAgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNlZFdpbmRvdyB8
fCA6OklzQ2hpbGQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRvdykpCisgICAg
ICAgICAgICA6OlNldEZvY3VzKDApOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQ
YXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkg
PT0gdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNp
YmxlKHZpc2libGUpOworCisgICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKSB7CisgICAgICAgIGlmICh2aXNpYmxlKQorICAgICAgICAgICAgU2hvd1dpbmRv
dyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19TSE9XTkEpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJREUpOworICAg
IH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBJbiB0aGUgR1RLIHBvcnQgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24n
dCB3YW50IHRvIHVzZSB0aGUgd2luZG93CisgICAgLy8gY29vcmRpbmF0ZXMuCisjIGlmIFBMQVRG
T1JNKEdUSykKKyAgICBJbnRQb2ludCBwID0gcmVjdC5sb2NhdGlvbigpOworIyBlbHNlCisgICAg
SW50UG9pbnQgcCA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2lu
ZG93KHJlY3QubG9jYXRpb24oKSk7CisjIGVuZGlmCisgICAgbV9ucFdpbmRvdy54ID0gcC54KCk7
CisgICAgbV9ucFdpbmRvdy55ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93LndpZHRoID0gcmVj
dC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAg
IG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJl
Y3QubGVmdCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworCisgICAgaWYg
KG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAgSlNDOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgp
KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAgbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CisgICAgICAg
IHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworCisgICAgICAgIG1faGF2ZUNhbGxlZFNldFdpbmRv
dyA9IHRydWU7CisKKyAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgQVNTRVJUKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworCisgICAgICAg
IFdORFBST0MgY3VycmVudFduZFByb2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQyk7CisgICAgICAgIGlmIChjdXJyZW50V25k
UHJvYyAhPSBQbHVnaW5WaWV3V25kUHJvYykKKyAgICAgICAgICAgIG1fcGx1Z2luV25kUHJvYyA9
IChXTkRQUk9DKVNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9X
TkRQUk9DLCAoTE9OR19QVFIpUGx1Z2luVmlld1duZFByb2MpOworICAgIH0KK30KKworTlBFcnJv
ciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVp
bnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmKQoreworICAgIFN0cmluZyBmaWxlbmFtZShidWYs
IGxlbik7CisKKyAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAg
ICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAgICAvLyBHZXQgZmlsZSBp
bmZvCisgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyczsKKyAgICBpZiAoR2V0Rmls
ZUF0dHJpYnV0ZXNFeFcoZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCksIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJzKSA9PSAwKQorICAgICAgICByZXR1
cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBpZiAoYXR0cnMuZHdGaWxlQXR0cmlidXRl
cyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVf
Tk9UX0ZPVU5EOworCisgICAgSEFORExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlVyhmaWxlbmFt
ZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgRklMRV9SRUFEX0RBVEEs
IEZJTEVfU0hBUkVfUkVBRCwgMCwgT1BFTl9FWElTVElORywgMCwgMCk7CisgICAgCisgICAgaWYg
KGZpbGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIHJldHVybiBOUEVS
Ul9GSUxFX05PVF9GT1VORDsKKworICAgIGJ1ZmZlci5yZXNpemUoYXR0cnMubkZpbGVTaXplTG93
KTsKKworICAgIERXT1JEIGJ5dGVzUmVhZDsKKyAgICBpbnQgcmV0dmFsID0gUmVhZEZpbGUoZmls
ZUhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYXR0cnMubkZpbGVTaXplTG93LCAmYnl0ZXNSZWFkLCAw
KTsKKworICAgIENsb3NlSGFuZGxlKGZpbGVIYW5kbGUpOworCisgICAgaWYgKHJldHZhbCA9PSAw
IHx8IGJ5dGVzUmVhZCAhPSBhdHRycy5uRmlsZVNpemVMb3cpCisgICAgICAgIHJldHVybiBOUEVS
Ul9GSUxFX05PVF9GT1VORDsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworYm9v
bCBQbHVnaW5WaWV3OjpwbGF0Zm9ybUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlLCB2b2lkKiwg
TlBFcnJvciopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9y
KiByZXN1bHQpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgICAgICBjYXNlIE5QTlZu
ZXRzY2FwZVdpbmRvdzogeworICAgICAgICAgICAgSFdORCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SFdORCo+KHZhbHVlKTsKKyAgICAgICAgICAgICp3ID0gd2luZG93SGFuZGxlRm9yUGFnZUNsaWVu
dChwYXJlbnQoKSA/IHBhcmVudCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgp
IDogMCk7CisgICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlN1cHBvcnRzV2lu
ZG93bGVzczogeworICAgICAgICAgICAgTlBCb29sKiBmbGFnID0gcmVpbnRlcnByZXRfY2FzdDxO
UEJvb2wqPih2YWx1ZSk7CisgICAgICAgICAgICAqZmxhZyA9IFRSVUU7CisgICAgICAgICAgICAq
cmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
dm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsgcmVj
dC54KCksIHJlY3QueSgpLCByZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgfTsKKyAgICAgICAgOjpJ
bnZhbGlkYXRlUmVjdChwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCAmaW52YWxpZFJlY3QsIGZhbHNl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1
Z2luUmVjdChyZWN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJl
Y3QqIHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50
b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsK
KworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsg
ci54KCksIHIueSgpLCByLm1heFgoKSwgci5tYXhZKCkgfTsKKyAgICAgICAgSW52YWxpZGF0ZVJl
Y3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRSZWN0LCBGQUxTRSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a1Rocm90dGxlSW52YWxpZGF0ZSkpIHsKKyAgICAgICAgICAgIG1faW52YWxpZFJlY3RzLmFwcGVu
ZChyKTsKKyAgICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgICAgICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGludmFsaWRhdGVSZWN0KHIpOworICAgIH0KK30KKwor
dm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3sKKyAg
ICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBSRUNUIHI7CisKKyAg
ICBpZiAoR2V0UmduQm94KHJlZ2lvbiwgJnIpID09IDApIHsKKyAgICAgICAgaW52YWxpZGF0ZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByZWN0KEludFBvaW50KHIu
bGVmdCwgci50b3ApLCBJbnRTaXplKHIucmlnaHQtci5sZWZ0LCByLmJvdHRvbS1yLnRvcCkpOwor
ICAgIGludmFsaWRhdGVSZWN0KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVk
cmF3KCkKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICA6OlVwZGF0ZVdpbmRvdyhw
bGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIDo6VXBkYXRlV2luZG93
KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQocGFyZW50KCkgPyBwYXJlbnQoKS0+aG9zdFdpbmRv
dygpLT5wbGF0Zm9ybVBhZ2VDbGllbnQoKSA6IDApKTsKK30KKworYm9vbCBQbHVnaW5WaWV3Ojpw
bGF0Zm9ybVN0YXJ0KCkKK3sKKyAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOworICAgIEFTU0VSVCht
X3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpOworCisgICAgaWYgKG1f
aXNXaW5kb3dlZCkgeworICAgICAgICByZWdpc3RlclBsdWdpblZpZXcoKTsKKyAgICAgICAgc2V0
VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKGhvb2tlZEJlZ2luUGFpbnQsIGhvb2tlZEVuZFBhaW50
KTsKKworICAgICAgICBEV09SRCBmbGFncyA9IFdTX0NISUxEOworICAgICAgICBpZiAoaXNTZWxm
VmlzaWJsZSgpKQorICAgICAgICAgICAgZmxhZ3MgfD0gV1NfVklTSUJMRTsKKworICAgICAgICBI
V05EIHBhcmVudFdpbmRvd0hhbmRsZSA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQobV9wYXJl
bnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKKyAg
ICAgICAgSFdORCB3aW5kb3cgPSA6OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVnaW5WaWV3ZG93
Q2xhc3NOYW1lLCAwLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIDAsIDAsIDAsIHBhcmVudFdpbmRvd0hhbmRsZSwgMCwgV2ViQ29yZTo6aW5zdGFuY2VI
YW5kbGUoKSwgMCk7CisKKyNpZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCisgICAgICAg
IG1fd2luZG93ID0gd2luZG93OworI2Vsc2UKKyAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQod2lu
ZG93KTsKKyNlbmRpZgorCisgICAgICAgIC8vIENhbGxpbmcgU2V0V2luZG93TG9uZ1B0ckEgaGVy
ZSBtYWtlcyB0aGUgd2luZG93IHByb2MgQVNDSUksIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGF0IGxl
YXN0CisgICAgICAgIC8vIHRoZSBTaG9ja3dhdmUgRGlyZWN0b3IgcGx1Zy1pbi4KKyNpZiBPUyhX
SU5ET1dTKSAmJiBDUFUoWDg2XzY0KQorICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHJBKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRSKURlZldpbmRvd1Byb2NB
KTsKKyNlbHNlCisgICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSwgR1dMX1dORFBST0MsIChMT05HKURlZldpbmRvd1Byb2NBKTsKKyNlbmRpZgorICAgICAg
ICBTZXRQcm9wKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIGtXZWJQbHVnaW5WaWV3UHJvcGVydHks
IHRoaXMpOworCisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsK
KyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxl
OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7CisgICAgfQorCisgICAgdXBkYXRlUGx1
Z2luV2lkZ2V0KCk7CisKKyAgICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0
KGZyYW1lUmVjdCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXc6
OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBEZXN0cm95V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpOworICAgIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KDApOworfQorCitQYXNzUmVmUHRyPElt
YWdlPiBQbHVnaW5WaWV3OjpzbmFwc2hvdCgpCit7CisjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVVT
RShXSU5HREkpCisgICAgYXV0byBoZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGli
bGVEQygwKSk7CisKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkgeworICAgICAgICAvLyBFbmFibGUg
d29ybGQgdHJhbnNmb3Jtcy4KKyAgICAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYy5nZXQoKSwgR01f
QURWQU5DRUQpOworCisgICAgICAgIFhGT1JNIHRyYW5zZm9ybTsKKyAgICAgICAgR2V0V29ybGRU
cmFuc2Zvcm0oaGRjLmdldCgpLCAmdHJhbnNmb3JtKTsKKworICAgICAgICAvLyBXaW5kb3dsZXNz
IHBsdWctaW5zIGFzc3VtZSB0aGF0IHRoZXkncmUgZHJhd2luZyBvbnRvIHRoZSB2aWV3J3MgREMu
CisgICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBwbHVnLWluIGRy
YXdzIGF0ICgwLCAwKS4KKyAgICAgICAgSW50UG9pbnQgcG9zaXRpb24gPSBkb3duY2FzdDxGcmFt
ZVZpZXc+KCpwYXJlbnQoKSkuY29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSkubG9jYXRpb24o
KTsKKyAgICAgICAgdHJhbnNmb3JtLmVEeCA9IC1wb3NpdGlvbi54KCk7CisgICAgICAgIHRyYW5z
Zm9ybS5lRHkgPSAtcG9zaXRpb24ueSgpOworICAgICAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMu
Z2V0KCksICZ0cmFuc2Zvcm0pOworICAgIH0KKworICAgIHZvaWQqIGJpdHM7CisgICAgQml0bWFw
SW5mbyBibXAgPSBCaXRtYXBJbmZvOjpjcmVhdGVCb3R0b21VcChmcmFtZVJlY3QoKS5zaXplKCkp
OworICAgIGF1dG8gaGJtcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAm
Ym1wLCBESUJfUkdCX0NPTE9SUywgJmJpdHMsIDAsIDApKTsKKworICAgIEhCSVRNQVAgaGJtcE9s
ZCA9IHN0YXRpY19jYXN0PEhCSVRNQVA+KFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXAuZ2V0
KCkpKTsKKworICAgIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChoZGMuZ2V0KCkpOworCisg
ICAgU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcE9sZCk7CisKKyAgICByZXR1cm4gQml0bWFw
SW1hZ2U6OmNyZWF0ZShoYm1wLmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9ucGFwaS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL25wYXBpLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42ZGQ5MGE1MmI3YTFlN2M5NmU4ZGY0ZDg5OWJjZjgwMTk0OGVmZmQwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9ucGFwaS5jcHAKQEAg
LTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luVmll
dy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworLy8gVGhlIHBsdWdpbiB2aWV3IGlzIGFsd2F5cyB0aGUgbmRhdGEgb2YgdGhl
IGluc3RhbmNlLC4gU29tZXRpbWVzLCBwbHVnLWlucyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Utc3Bl
Y2lmaWMgZnVuY3Rpb24KKy8vIHdpdGggYSBOVUxMIGluc3RhbmNlLiBUbyB3b3JrYXJvdW5kIHRo
aXMsIGNhbGwgdGhlIGxhc3QgcGx1Zy1pbiB2aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBwbHVn
LWluLgorLy8gQ3VycmVudGx5LCB0aGUgY3VycmVudCBwbHVnLWluIHZpZXcgaXMgb25seSBzZXQg
YmVmb3JlIE5QUF9OZXcgaW4gUGx1Z2luVmlldzo6c3RhcnQuCisvLyBUaGlzIHNwZWNpZmljYWxs
eSB3b3JrcyBhcm91bmQgRmxhc2ggYW5kIFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5QUF9OZXcs
IHRoZXkgY2FsbCBOUE5fVXNlcmFnZW50IHdpdGggYSBOVUxMIGluc3RhbmNlLgorc3RhdGljIFBs
dWdpblZpZXcqIHBsdWdpblZpZXdGb3JJbnN0YW5jZShOUFAgaW5zdGFuY2UpCit7CisgICAgaWYg
KGluc3RhbmNlICYmIGluc3RhbmNlLT5uZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFBsdWdpblZpZXcqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIHJldHVybiBQbHVnaW5WaWV3Ojpj
dXJyZW50UGx1Z2luVmlldygpOworfQorCit2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyX3Qgc2l6
ZSkKK3sKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkIE5QTl9NZW1GcmVlKHZv
aWQqIHB0cikKK3sKKyAgICBmcmVlKHB0cik7Cit9CisKK3VpbnQzMl90IE5QTl9NZW1GbHVzaCh1
aW50MzJfdCkKK3sKKyAgICAvLyBEbyBub3RoaW5nCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
TlBOX1JlbG9hZFBsdWdpbnMoTlBCb29sIHJlbG9hZFBhZ2VzKQoreworICAgIFBhZ2U6OnJlZnJl
c2hQbHVnaW5zKHJlbG9hZFBhZ2VzKTsKK30KKworTlBFcnJvciBOUE5fUmVxdWVzdFJlYWQoTlBT
dHJlYW0qLCBOUEJ5dGVSYW5nZSopCit7CisgICAgcmV0dXJuIE5QRVJSX1NUUkVBTV9OT1RfU0VF
S0FCTEU7Cit9CisKK05QRXJyb3IgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAg
IHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkxOb3RpZnkodXJs
LCB0YXJnZXQsIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIE5QTl9HZXRVUkwoTlBQIGluc3Rh
bmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICByZXR1cm4g
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMKHVybCwgdGFyZ2V0KTsKK30K
KworTlBFcnJvciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBC
b29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPnBvc3RVUkxOb3RpZnkodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBm
aWxlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2Us
IGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0
IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPnBvc3RVUkwodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlKTsKK30K
KworTlBFcnJvciBOUE5fTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBj
b25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIHJldHVybiBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5uZXdTdHJlYW0odHlwZSwgdGFyZ2V0LCBzdHJl
YW0pOworfQorCitpbnQzMl90IE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJl
YW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSktPndyaXRlKHN0cmVhbSwgbGVuLCBidWZmZXIpOworfQorCitO
UEVycm9yIE5QTl9EZXN0cm95U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwg
TlBSZWFzb24gcmVhc29uKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTsKK30KKworY29uc3QgY2hhciog
TlBOX1VzZXJBZ2VudChOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHBs
dWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAgICAgaWYgKCF2aWV3KQorICAgICAg
ICAgcmV0dXJuIFBsdWdpblZpZXc6OnVzZXJBZ2VudFN0YXRpYygpOworIAorICAgIHJldHVybiB2
aWV3LT51c2VyQWdlbnQoKTsKK30KKwordm9pZCBOUE5fU3RhdHVzKE5QUCBpbnN0YW5jZSwgY29u
c3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5zdGF0dXMobWVzc2FnZSk7Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWN0KE5QUCBpbnN0
YW5jZSwgTlBSZWN0KiBpbnZhbGlkUmVjdCkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAg
Ly8gTlNQbHVnaW5XcmFwcGVyLCBhIHBsdWdpbiB3cmFwcGVyIGJpbmFyeSB0aGF0IGFsbG93cyBy
dW5uaW5nIDMyLWJpdCBwbHVnaW5zCisgICAgLy8gb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgdHlw
aWNhbGx5IHVzZWQgaW4gWDExLCB3aWxsIHNvbWV0aW1lcyBnaXZlIHVzIGEgbnVsbCBOUFAgaGVy
ZS4KKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIHZpZXctPmlu
dmFsaWRhdGVSZWN0KGludmFsaWRSZWN0KTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lv
bihOUFAgaW5zdGFuY2UsIE5QUmVnaW9uIGludmFsaWRSZWdpb24pCit7CisgICAgcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+aW52YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVnaW9uKTsK
K30KKwordm9pZCBOUE5fRm9yY2VSZWRyYXcoTlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmZvcmNlUmVkcmF3KCk7Cit9CisKK05QRXJyb3IgTlBO
X0dldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVl
KQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpOworCisgICAgIGlmICghdmlldykKKyAgICAgICAgIHJldHVybiBQbHVnaW5WaWV3OjpnZXRW
YWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUpOworCisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK05QRXJy
b3IgTlBOX1NldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQq
IHZhbHVlKQoreworICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNl
dFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhRW52KCkKK3sK
KyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkKiBOUE5fR2V0SmF2
YVBlZXIoTlBQKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxl
ZCkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wdXNoUG9wdXBzRW5h
YmxlZFN0YXRlKGVuYWJsZWQpOworfQorCit2b2lkIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUo
TlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBv
cFBvcHVwc0VuYWJsZWRTdGF0ZSgpOworfQorCitleHRlcm4gIkMiIHR5cGVkZWYgdm9pZCBQbHVn
aW5UaHJlYWRBc3luY0NhbGxGdW5jdGlvbih2b2lkKik7Cit2b2lkIE5QTl9QbHVnaW5UaHJlYWRB
c3luY0NhbGwoTlBQIGluc3RhbmNlLCBQbHVnaW5UaHJlYWRBc3luY0NhbGxGdW5jdGlvbiBmdW5j
LCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiB0eXBlIG9ubHkg
ZGlmZmVycyBmcm9tIE1haW5UaHJlYWRGdW5jdGlvbiBieSBiZWluZyBleHRlcm4gIkMiLCB3aGlj
aCBkb2Vzbid0IGFmZmVjdCBjYWxsaW5nIGNvbnZlbnRpb24gb24gYW55IGNvbXBpbGVycyB3ZSB1
c2UuCisgICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkuc2NoZWR1bGVD
YWxsKGluc3RhbmNlLCByZWludGVycHJldF9jYXN0PFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6
Ok1haW5UaHJlYWRGdW5jdGlvbio+KGZ1bmMpLCB1c2VyRGF0YSk7Cit9CisKK05QRXJyb3IgTlBO
X0dldFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNv
bnN0IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJfdCogbGVuKQoreworICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZUZvclVSTCh2YXJpYWJs
ZSwgdXJsLCB2YWx1ZSwgbGVuKTsKK30KKworTlBFcnJvciBOUE5fU2V0VmFsdWVGb3JVUkwoTlBQ
IGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiB2YWx1ZSwgdWludDMyX3QgbGVuKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9y
SW5zdGFuY2UoaW5zdGFuY2UpLT5zZXRWYWx1ZUZvclVSTCh2YXJpYWJsZSwgdXJsLCB2YWx1ZSwg
bGVuKTsKK30KKworTlBFcnJvciBOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKE5QUCBpbnN0YW5j
ZSwgY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwg
Y29uc3QgY2hhciogc2NoZW1lLCBjb25zdCBjaGFyKiByZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1
aW50MzJfdCogdWxlbiwgY2hhcioqIHBhc3N3b3JkLCB1aW50MzJfdCogcGxlbikKK3sKKyAgICBy
ZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0QXV0aGVudGljYXRpb25J
bmZvKHByb3RvY29sLCBob3N0LCBwb3J0LCBzY2hlbWUsIHJlYWxtLCB1c2VybmFtZSwgdWxlbiwg
cGFzc3dvcmQsIHBsZW4pOworfQorCitOUEVycm9yIE5QTl9Qb3BVcENvbnRleHRNZW51KE5QUCBp
bnN0YW5jZSwgTlBNZW51KiBtZW51KQoreworICAgIFVOVVNFRF9QQVJBTShpbnN0YW5jZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKG1lbnUpOworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0
LmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9FbWJlZGRlZFdpZGdldC5oCmlu
ZGV4IGE1Mjc2YmY1NzQ4NmZhYzBhMTBlZDBhMjJlZDVmYjA4Y2FiZWZkODUuLmY2NDdiM2UxY2M5
NzcyMzU0Yzg1NjcwNzVkMmI2NzUxMGNmODkzYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvRW1iZWRkZWRXaWRnZXQuaApAQCAtMjYsMTAgKzI2LDEwIEBACiAj
aWZuZGVmIEVtYmVkZGVkV2lkZ2V0X2gKICNkZWZpbmUgRW1iZWRkZWRXaWRnZXRfaAogCisjaW5j
bHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvQ09NUHRyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9QbHVnaW5WaWV3Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxQbHVn
SW5FbGVtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggMWIzNjFiMGE2NmIyOGMxNzUyYTQx
NzlhMGZhZTYwYmE2MGQ1OWQ1MC4uNzZmZGQwOWVkNDZhNDEyNmRiM2Q4YjliYTM3MzU2M2ZlY2Rm
YThkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC0yNiwxMSArMjYsMTEgQEAKICNpbmNsdWRl
ICJXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKIAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisj
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29va2llSmFyLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhYmFzZS5oPgogI2lmIFVTRShDRk5FVFdPUkspCiAjaW5j
bHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKaW5kZXggODE0MDgwYmE0MDgwMTY0ZjZlOTViMTFjN2My
MWMzZjc5OTY5NjBiZC4uOTM3ZTc5M2Y0MWU4YmQwZmYyNjc5YzA3NDcxMTM1YjIxMDhjN2Y1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYkZyYW1lLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkRPTUNv
cmVDbGFzc2VzLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiTWFyc2hhbGxpbmdIZWxwZXJzLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNp
bmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiV2ViQWN0aW9uUHJvcGVydHlCYWcuaCIK
ICNpbmNsdWRlICJXZWJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlLmgi
CkBAIC04NSw4ICs4Nyw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdp
bkRhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGFiYXNlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9QbHVnaW5WaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb2xpY3lDaGVja2VyLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlSGFuZGxlLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCmluZGV4IGE2NzViZmFmM2JlNzYzMDY3
MjE4MDgyZDEwOTFkMjVhOWI1MDY4ZWMuLmYwNmVmNjRiNzJhNTg2YTgyOTdiMmY1ZmExMGNkYTll
MWNhOGI3NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVk
ZSAiRE9NQ29yZUNsYXNzZXMuaCIKICNpbmNsdWRlICJGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiTWFyc2hhbGxpbmdIZWxwZXJzLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKICNpbmNsdWRlICJTdWJmcmFt
ZUxvYWRlci5oIgpAQCAtMTI3LDggKzEyOSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9y
bU1vdXNlRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtV2hlZWxFdmVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2lu
RGF0YWJhc2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpblZpZXcuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1BvcHVwTWVudS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51V2luLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXgu
Y3BwCmluZGV4IGE5Njg1NjE4ZjQ0NmRlM2E5NTA0N2I3OWFjOTBlZDE1ODNiZmMxMjYuLjVmNTQw
OWZlNGExMWI1OGNhZjBlZjAwZmVjYzhhNGMyMTM4YmQ0NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVV
bml4LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgog
CiAjaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogCiAjaWYgUExBVEZPUk0o
R1RLKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244264</attachid>
            <date>2015-01-08 08:56:45 -0800</date>
            <delta_ts>2015-01-09 14:54:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140133-20150108085650.patch</filename>
            <type>text/plain</type>
            <size>497311</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVlNTJkZmMxNjVjZmM2
NzM5MWM3MzVjZmU0MWU5ODlmNmNhYjdhYy4uZjAzYzVjMjdhZDM5ZGM1YjU0Y2FhMzQ0MzNlZDJh
NTlhZTkwNDgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0aGUgV2lu
ZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
OgorCisyMDE1LTAxLTA2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisK
ICAgICAgICAgVHJ5IHRvIGZpeCB0aGUgV2luZG93cyBidWlsZC4KIAogICAgICAgICAqIFdlYkNv
cmUudmN4cHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5MDg5NTNj
YWYyZTQzN2Q4NjI4OTNjNjQ4NTQ5MGYzODMyNTQ3MWZmLi4zYmFiZTM0MmE0MjVmNDMxNjgyY2Yy
ZGJhYzVhMTE5MWJhOWQyOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0
aGUgV2luZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvajoKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0
LnZjeHByb2ouZmlsdGVyczoKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlkZXIK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEyNgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKaW5kZXggNjNhNWNjNjg5NGY4NmU0N2YxYmU4YjhiOWJjMGM4NjgwMTli
NjdhZS4uNzAyMjc4YWI2NmRlYmMzOTU4ZWU5ODBjZjg3ZTI1NDE0YjAzZDgyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwpAQCAtMSw1ICsxLDMxMCBAQAogMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCisgICAgICAgIE1vdmUgdGhlIFdpbmRvd3Mgb25seSBwbHVn
LWluIGNvZGUgdG8gV2ViS2l0L3dpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQwMTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbHVnaW5zL1BhaW50SG9va3MuYXNtOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGFpbnRIb29rcy5hc20uCisgICAgICAgICogUGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6UGx1
Z2luRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVz
aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZURp
c2FibGVkUGx1Z2luRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6YWRk
RGlzYWJsZWRQbHVnaW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpk
ZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFk
VVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlVVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnNldFBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjphZGRQbHVnaW5Q
YXRoc0Zyb21SZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6Z2V0
UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVmVyc2lv
blN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlVmVyc2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6YWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3Jl
OjphZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6YWRk
SmF2YVBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpzYWZhcmlQbHVnaW5zRGly
ZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmll
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVj
dG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXR0
eU5hbWVGb3JEcmF3aW5nTW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvckV2
ZW50TW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUpOgorICAgICAgICAqIFBsdWdpbnMv
UGx1Z2luRGVidWcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGVidWcuaC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW46On5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vzc1F1ZXVl
ZE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNzYWdlKToKKyAgICAgICAgKiBQ
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaC4KKyAgICAgICAg
KiBQbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2th
Z2U6On5QbHVnaW5QYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZy
ZWVMaWJyYXJ5U29vbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmcmVlTGli
cmFyeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6Y29tcGFy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnVubG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZTo6ZGV0ZXJtaW5lUXVpcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0TGlzdEZyb21WYXJpYW50QXJncyk6CisgICAgICAgIChXZWJDb3JlOjptYWtlU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOUE5f
SW52b2tlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2luTG9hZGVkKToKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdp
blBhY2thZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5oLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnBhcmVudERpcmVj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjptb2R1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblBhY2thZ2U6Om1pbWVUb0Rlc2NyaXB0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjptaW1lVG9FeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
OjpwbHVnaW5GdW5jcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpxdWlya3Mp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6dmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmdWxsTUlNRURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blBhY2thZ2VIYXNoOjplcXVhbCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2lu
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmVyc2lvbkluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2U6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24pOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luUXVp
cmtTZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtT
ZXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblF1aXJrU2V0OjpQbHVnaW5RdWlya1NldCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5RdWlya1NldDo6YWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblF1aXJrU2V0Ojpjb250YWlucyk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6c3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5TdHJlYW06OlBsdWdpblN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJl
YW06On5QbHVnaW5TdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6bGFzdE1vZGlmaWVkRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OnN0YXJ0U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6b3duZXJGb3JT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblN0cmVhbTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjp3YW50
c0FsbFN0cmVhbXMpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luU3RyZWFtLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luU3RyZWFtQ2xpZW50Ojp+UGx1Z2luU3RyZWFtQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5TdHJlYW06OnNldExvYWRNYW51YWxseSk6CisgICAgICAgICogUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
dy5jcHAuCisgICAgICAgIChXZWJDb3JlOjppbnN0YW5jZU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNl
dEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpmcmFtZVJlY3RzQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
dGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjdXJy
ZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVVVEY4U3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNjaGVkdWxlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6Z2V0VVJMTm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpwb3N0VVJMTm90aWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBvc3RVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6bmV3U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRlc3Ryb3lTdHJlYW0p
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmludmFsaWRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnB1
c2hQb3B1cHNFbmFibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmFyZVBv
cHVwc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0SmF2YVNjcmlw
dFBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OlBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9jdXNQbHVnaW5F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0Q2FsbGluZ1BsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppc0Nh
bGxpbmdQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydHNXaXRoQmxhbmtMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2F0aW9u
QWZ0ZXJGaXJzdEJsYW5rTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRU9MKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlUG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZh
bGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50U3Rh
dGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjprZWVwQWxpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5WaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblJlcXVlc3Q6OlBsdWdpblJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUmVxdWVzdDo6ZnJhbWVMb2FkUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5SZXF1ZXN0Ojpub3RpZnlEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblJlcXVlc3Q6OnNlbmROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luUmVxdWVzdDo6c2hvdWxkQWxsb3dQb3B1cHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWFudWFsTG9hZGVyOjp+UGx1Z2luTWFudWFsTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdGF0dXMpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwYXJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbHVnaW5zUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjptaW1l
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cmwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cGx1Z2luV25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXRQbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjp0b1BsdWdp
blZpZXcpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcC4KKyAgICAgICAg
KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aG9va2VkQmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpob29r
ZWRFbmRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpob29rKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3Rl
clBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlld1du
ZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6aXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRlbnRzVG9OYXRpdmVXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFp
bnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnNuYXBzaG90KToKKyAgICAgICAgKiBQbHVnaW5zL25wYXBpLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwLgorICAgICAgICAocGx1Z2luVmlld0Zvcklu
c3RhbmNlKToKKyAgICAgICAgKE5QTl9NZW1BbGxvYyk6CisgICAgICAgIChOUE5fTWVtRnJlZSk6
CisgICAgICAgIChOUE5fTWVtRmx1c2gpOgorICAgICAgICAoTlBOX1JlbG9hZFBsdWdpbnMpOgor
ICAgICAgICAoTlBOX1JlcXVlc3RSZWFkKToKKyAgICAgICAgKE5QTl9HZXRVUkxOb3RpZnkpOgor
ICAgICAgICAoTlBOX0dldFVSTCk6CisgICAgICAgIChOUE5fUG9zdFVSTE5vdGlmeSk6CisgICAg
ICAgIChOUE5fUG9zdFVSTCk6CisgICAgICAgIChOUE5fTmV3U3RyZWFtKToKKyAgICAgICAgKE5Q
Tl9Xcml0ZSk6CisgICAgICAgIChOUE5fRGVzdHJveVN0cmVhbSk6CisgICAgICAgIChOUE5fVXNl
ckFnZW50KToKKyAgICAgICAgKE5QTl9TdGF0dXMpOgorICAgICAgICAoTlBOX0ludmFsaWRhdGVS
ZWN0KToKKyAgICAgICAgKE5QTl9JbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKE5QTl9Gb3Jj
ZVJlZHJhdyk6CisgICAgICAgIChOUE5fR2V0VmFsdWUpOgorICAgICAgICAoTlBOX1NldFZhbHVl
KToKKyAgICAgICAgKE5QTl9HZXRKYXZhRW52KToKKyAgICAgICAgKE5QTl9HZXRKYXZhUGVlcik6
CisgICAgICAgIChOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSk6CisgICAgICAgIChOUE5fUG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwp
OgorICAgICAgICAoTlBOX0dldFZhbHVlRm9yVVJMKToKKyAgICAgICAgKE5QTl9TZXRWYWx1ZUZv
clVSTCk6CisgICAgICAgIChOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKE5Q
Tl9Qb3BVcENvbnRleHRNZW51KToKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlk
ZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEy
NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc3MzBlOWE3NDI4YjM4ZjU2YjJmNjJlYjIxZWQ5
MGMxM2IyZWUzMzYuLmUxZDY0YmRhNjU2NTYyOGQ0ZGJmN2MyZjcyODlkOGUzMDQxOTJmMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjQyLDkgKzIyNDIsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGx1Z2lucy9ET01QbHVnaW4uY3BwCiAgICAgcGx1Z2lucy9ET01QbHVnaW5BcnJh
eS5jcHAKICAgICBwbHVnaW5zL1BsdWdpbkRhdGEuY3BwCi0gICAgcGx1Z2lucy9QbHVnaW5EZWJ1
Zy5jcHAKICAgICBwbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCi0gICAgcGx1
Z2lucy9QbHVnaW5TdHJlYW0uY3BwCiAKICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNw
cAogICAgIHJlbmRlcmluZy9CaWRpUnVuLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggNGY3NjY5MzY0MjBlZTBjMDM1ZGVhMTk4M2Ex
NDc3NzMwOThhYWEwOS4uNWZhN2IzZGI4NjQyOWZjOGE1NTQyYmJhZGY3YTkxZmE3NTdjODU4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBA
IC0xNzc1NCwxOCArMTc3NTQsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1xET01NaW1lVHlwZUFycmF5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcRE9NUGx1Z2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcRE9NUGx1Z2luQXJyYXkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1
Z2luc1xucGFwaS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRhdGEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVn
aW5EYXRhYmFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRlYnVnLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5TdHJlYW0uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5WaWV3LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsdWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2luLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luUGFja2FnZVdpbi5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5WaWV3
V2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbGxJbk9uZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdmdcU1ZHRm9udEZhY2VFbGVtZW50
LmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgpAQCAtMjEwMzEsMTUgKzIxMDIxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcbnBmdW5jdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcbnBydW50aW1lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRhdGEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGF0YWJhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGVidWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1xQbHVnaW5QYWNrYWdlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblF1aXJrU2V0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblN0cmF0ZWd5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblN0cmVhbS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQ
bHVnaW5WaWV3LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzdmdcQ29sb3JEaXN0YW5jZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Zn
XFNWR0FFbGVtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZjk1OWI2MzRlM2UxNjFhZGY3
MDZhNGYwMzA3Y2YxMzYzNTQ3Mzk4Mi4uMjIzMDg0NjM2NWJjNDdjOWIzY2E2OGFlZWM4MTIxZDVh
ZmY1MGVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNDU2OSw0MiArNDU2OSwxMiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xET01QbHVnaW5BcnJheS5jcHAiPgogICAgICAgPEZp
bHRlcj5wbHVnaW5zPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbHVnaW5zXG5wYXBpLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luRGF0YS5jcHAiPgogICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpbkRh
dGFiYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGVidWcuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5jcHAiPgot
ICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblN0cmVhbS5jcHAiPgotICAgICAgPEZp
bHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2lu
czwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGx1Z2luc1x3aW5cUGx1Z2luRGF0YWJhc2VXaW4uY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2lu
c1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIj4KLSAgICAgIDxG
aWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblBhY2thZ2VXaW4uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblZpZXdXaW4uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbGxJbk9uZS5jcHAiPgogICAgICAgPEZpbHRlcj5y
ZW5kZXJpbmdcc3ZnPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xMTYxMywzMyArMTE1
ODMsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YS5o
Ij4KICAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1
Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiPgogICAgICAgPEZpbHRlcj5w
bHVnaW5zPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luUXVpcmtTZXQuaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
U3RyYXRlZ3kuaCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyZWFtLmgi
PgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuaCI+Ci0gICAgICA8Rmls
dGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCI+Ci0gICAg
ICA8RmlsdGVyPnBsdWdpbnNcd2luPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcQ29sb3JEaXN0YW5jZS5oIj4KICAgICAgIDxGaWx0ZXI+
cmVuZGVyaW5nXHN2ZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZApp
bmRleCAwOTQ0YmNjZjEyMTI1NzRkOGIzZDdlZjg5MmRkOGYyYzU5NWZiZjZjLi41MjViOTQwYjgz
ZGI0NDEyNjNhZDUxMzI2YzU0NzUyNDI5YzEyYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZApAQCAtNzks
NiArNzksNyBAQCB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5ccGFnZVxzY3JvbGxpbmdcKi5o
IiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZQogeGNvcHkgL3kgL2QgIiVQcm9qZWN0
RGlyJS4uXHBhZ2VcYW5pbWF0aW9uXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1
ZGVcV2ViQ29yZSIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxwYWdlXHdpblwqLmgiICIl
Q09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVBy
b2plY3REaXIlLi5cYnJpZGdlXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVc
V2ViQ29yZSIKK3hjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxicmlkZ2VcY1wqLmgiICIlQ09O
RklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2pl
Y3REaXIlLi5cYnJpZGdlXGpzY1wqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRl
XFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5ccGx1Z2luc1wqLmgiICIlQ09O
RklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2pl
Y3REaXIlLi5ccGx1Z2luc1x3aW5cKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVk
ZVxXZWJDb3JlIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNjZiMGMz
NDM4NTc3ODViYjY4MzQxMjA4YTA3MzY0M2U1ZjIwMzEwYS4uMDExOGM1MDMxMzk2MGE0ZjU2MmRi
MjE4ZGZlOGE5Mzk0YmZkODdmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CkBAIC05MSw3ICs5MSw2IEBACiAjaW5jbHVkZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKLSNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAppbmRleCBkMjcyNDU4Y2EwM2ZiZWM1NzE2MjNlZTRhYTFiMjNkYmVjMzNiNzA1Li4xOTkzOGQy
MzE1ZGFiYzg4OGY5NDFmOGM5MWMwYjBlZjI3ODBmYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtMzYsNyArMzYsNiBA
QAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZiYTJjZWUyZGE3MmNhZjE0Yjc1Y2YzNmZhYWQxNGI3NWU1NzQ4NTYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NzcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0KLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOwotCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLXN0YXRpYyBjb25zdCBz
aXplX3QgbWF4aW11bVBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlU2l6ZSA9IDMyNzY4Owot
Ci1zdGF0aWMgYm9vbCBnUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7Ci0K
LVN0cmluZyYgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCkKLXsKLSAgICBERVBS
RUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBjYWNoZVBhdGgsICgpKTsKLSAgICBy
ZXR1cm4gY2FjaGVQYXRoOwotfQotI2VuZGlmCi0KLVBsdWdpbkRhdGFiYXNlOjpQbHVnaW5EYXRh
YmFzZSgpCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICA6
IG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZChmYWxzZSkKLSNlbmRpZgotewotfQot
Ci1QbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoYm9vbCBw
b3B1bGF0ZSkKLXsKLSAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAwOwotCi0g
ICAgaWYgKCFwbHVnaW5zKSB7Ci0gICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2U7
Ci0KLSAgICAgICAgaWYgKHBvcHVsYXRlKSB7Ci0gICAgICAgICAgICBwbHVnaW5zLT5zZXRQbHVn
aW5EaXJlY3RvcmllcyhQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkp
OwotICAgICAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHBsdWdpbnM7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBlLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVU
eXBlcy5jb250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIE5v
IHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNo
aW5nIGFnYWluCi0gICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVz
LmNvbnRhaW5zKG1pbWVUeXBlKSk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJh
UGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KQotewotICAgIG1fcGx1Z2lu
RGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSk7Ci0gICAgcmVmcmVzaCgpOwotfQotCi1ib29s
IFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKLXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X01FVEFEQVRBX0NBQ0hFKQotICAgIGlmICghbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9h
ZGVkKQotICAgICAgICBsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsKLSNlbmRpZgotICAg
IGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX3BsdWdpbnMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQ7Ci0gICAgICAgIGdl
dERlbGV0ZWRQbHVnaW5zKHBsdWdpbnNUb1VubG9hZCk7Ci0KLSAgICAgICAgLy8gVW5sb2FkIHBs
dWdpbnMKLSAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwbHVnaW5zVG9V
bmxvYWQuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBy
ZW1vdmUoaXQtPmdldCgpKTsKLQotICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNU
b1VubG9hZC5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDxTdHJpbmc+IHBhdGhzOwot
ICAgIGdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhwYXRocyk7Ci0KLSAgICBIYXNoTWFwPFN0
cmluZywgdGltZV90PiBwYXRoc1dpdGhUaW1lczsKLQotICAgIC8vIFdlIHNob3VsZCBvbmx5IHNr
aXAgdW5jaGFuZ2VkIGZpbGVzIGlmIHdlIGRpZG4ndCByZW1vdmUgYW55IHBsdWdpbnMgYWJvdmUu
IElmIHdlIGRpZCByZW1vdmUKLSAgICAvLyBhbnkgcGx1Z2lucywgd2UgbmVlZCB0byBsb29rIGF0
IGV2ZXJ5IHBsdWdpbiBmaWxlIHNvIHRoYXQsIGUuZy4sIGlmIHRoZSB1c2VyIGhhcyB0d28gdmVy
c2lvbnMKLSAgICAvLyBvZiBSZWFsUGxheWVyIGluc3RhbGxlZCBhbmQganVzdCByZW1vdmVkIHRo
ZSBuZXdlciBvbmUsIHdlJ2xsIHBpY2sgdXAgdGhlIG9sZGVyIG9uZS4KLSAgICBib29sIHNob3Vs
ZFNraXBVbmNoYW5nZWRGaWxlcyA9ICFwbHVnaW5TZXRDaGFuZ2VkOwotCi0gICAgSGFzaFNldDxT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXRoc0VuZCA9IHBhdGhzLmVuZCgpOwotICAgIGZvciAo
SGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhdGhzLmJlZ2luKCk7IGl0ICE9
IHBhdGhzRW5kOyArK2l0KSB7Ci0gICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAg
IGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoKml0LCBsYXN0TW9kaWZpZWQpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcGF0aHNXaXRoVGltZXMuYWRkKCppdCwgbGFzdE1v
ZGlmaWVkKTsKLQotICAgICAgICAvLyBJZiB0aGUgcGF0aCdzIHRpbWVzdGFtcCBoYXNuJ3QgY2hh
bmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHJhbiByZWZyZXNoKCksIHdlIGRvbid0IGhhdmUg
dG8gZG8gYW55dGhpbmcuCi0gICAgICAgIGlmIChzaG91bGRTa2lwVW5jaGFuZ2VkRmlsZXMgJiYg
bV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5nZXQoKml0KSA9PSBsYXN0TW9kaWZpZWQpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoUmVmUHRyPFBsdWdpblBhY2thZ2U+IG9sZFBh
Y2thZ2UgPSBtX3BsdWdpbnNCeVBhdGguZ2V0KCppdCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
c2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzIHx8IG9sZFBhY2thZ2UtPmxhc3RNb2RpZmllZCgpICE9
IGxhc3RNb2RpZmllZCk7Ci0gICAgICAgICAgICByZW1vdmUob2xkUGFja2FnZS5nZXQoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IFBsdWdp
blBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoKml0LCBsYXN0TW9kaWZpZWQpOwotICAgICAgICBpZiAo
cGFja2FnZSAmJiBhZGQocGFja2FnZS5yZWxlYXNlKCkpKQotICAgICAgICAgICAgcGx1Z2luU2V0
Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgYWxsIHRoZSBwYXRocyB3ZSBm
b3VuZCB3aXRoIHRoZWlyIHRpbWVzdGFtcHMgZm9yIG5leHQgdGltZS4KLSAgICBwYXRoc1dpdGhU
aW1lcy5zd2FwKG1fcGx1Z2luUGF0aHNXaXRoVGltZXMpOwotCi0gICAgaWYgKCFwbHVnaW5TZXRD
aGFuZ2VkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7
Ci0jZW5kaWYKLQotICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOwotCi0gICAgLy8g
UmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAv
LyBHZXQgTUlNRSB0eXBlcwotICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwotICAg
ICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0
KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7Ci0gICAgICAgIGZvciAoOyBtYXBfaXQgIT0g
bWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRk
KG1hcF9pdC0+a2V5KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVmVjdG9yPFBs
dWdpblBhY2thZ2UqPiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucygpIGNvbnN0Ci17Ci0gICAgVmVj
dG9yPFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7Ci0KLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlu
dCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZShjb25zdCB2b2lkKiBhLCBj
b25zdCB2b2lkKiBiKQotewotICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbkEgPSAqc3RhdGljX2Nh
c3Q8UGx1Z2luUGFja2FnZSogY29uc3QqPihhKTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5C
ID0gKnN0YXRpY19jYXN0PFBsdWdpblBhY2thZ2UqIGNvbnN0Kj4oYik7Ci0KLSAgICByZXR1cm4g
cGx1Z2luQS0+Y29tcGFyZSgqcGx1Z2luQik7Ci19Ci0KLVBsdWdpblBhY2thZ2UqIFBsdWdpbkRh
dGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAg
IGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5n
IGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7Ci0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2lu
ID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChrZXkpOwotICAgIGlmIChwcmVmZXJyZWRQbHVnaW4K
LSAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2luLT5pc0VuYWJsZWQoKQotICAgICAgICAmJiBwcmVm
ZXJyZWRQbHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKLSAgICAg
ICAgcmV0dXJuIHByZWZlcnJlZFBsdWdpbjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8UGx1Z2luUGFj
a2FnZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0KLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9ICgqaXQpLmdldCgpOwotCi0gICAgICAgIGlmICghcGx1
Z2luLT5pc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChw
bHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICAgICAgaWYgKCFwbHVnaW4t
PmVuc3VyZVBsdWdpbkxvYWRlZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlm
Ci0gICAgICAgICAgICBwbHVnaW5DaG9pY2VzLmFwcGVuZChwbHVnaW4pOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHBsdWdpbkNob2ljZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHFzb3J0KHBsdWdpbkNob2ljZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUo
KSwgc2l6ZW9mKFBsdWdpblBhY2thZ2UqKSwgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdp
bkNvbXBhcmUpOwotCi0gICAgcmV0dXJuIHBsdWdpbkNob2ljZXNbMF07Ci19Ci0KLVN0cmluZyBQ
bHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNp
b24pIGNvbnN0Ci17Ci0gICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVn
aW5zLmVuZCgpOwotICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICBWZWN0b3I8UGx1Z2luUGFja2Fn
ZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0gICAgSGFzaE1hcDxQbHVnaW5QYWNrYWdlKiwgU3RyaW5n
PiBtaW1lVHlwZUZvclBsdWdpbjsKLQotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KCEoKml0KS0+aXNFbmFibGVkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBN
SU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1l
VG9FeHRlbnNpb25zKCkuZW5kKCk7Ci0KLSAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdp
bigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKLSAgICAgICAgICAgIG1pbWVU
eXBlID0gbWltZV9pdC0+a2V5OwotICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVk
UGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChtaW1lVHlwZSk7Ci0gICAgICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnZhbHVlOwotICAgICAg
ICAgICAgYm9vbCBmb3VuZE1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHByZWZlcnJlZFBsdWdpbiAmJiBQbHVnaW5QYWNrYWdlOjpl
cXVhbCgqcGx1Z2luLCAqcHJlZmVycmVkUGx1Z2luKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBtaW1lVHlwZTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFf
Q0FDSEUpCi0gICAgICAgICAgICAgICAgICAgIGlmICghcGx1Z2luLT5lbnN1cmVQbHVnaW5Mb2Fk
ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgICAgIHBsdWdpbkNob2ljZXMuYXBwZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICAg
ICAgICAgIG1pbWVUeXBlRm9yUGx1Z2luLmFkZChwbHVnaW4sIG1pbWVUeXBlKTsKLSAgICAgICAg
ICAgICAgICAgICAgZm91bmRNYXBwaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZv
dW5kTWFwcGluZykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCi0gICAgcXNvcnQocGx1Z2luQ2hvaWNlcy5kYXRhKCksIHBsdWdpbkNob2ljZXMuc2l6ZSgp
LCBzaXplb2YoUGx1Z2luUGFja2FnZSopLCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2lu
Q29tcGFyZSk7Ci0KLSAgICByZXR1cm4gbWltZVR5cGVGb3JQbHVnaW4uZ2V0KHBsdWdpbkNob2lj
ZXNbMF0pOwotfQotCi1QbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6ZmluZFBsdWdpbihj
b25zdCBVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAoIW1pbWVUeXBlLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAg
ICAKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwubGFzdFBhdGhDb21wb25lbnQoKTsKLSAgICBp
ZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy8nKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAg
aW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYgKGV4
dGVuc2lvblBvcyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgU3RyaW5nIG1p
bWVUeXBlRm9yRXh0ZW5zaW9uID0gTUlNRVR5cGVGb3JFeHRlbnNpb24oZmlsZW5hbWUuc3Vic3Ry
aW5nKGV4dGVuc2lvblBvcyArIDEpKTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVn
aW5Gb3JNSU1FVHlwZShtaW1lVHlwZUZvckV4dGVuc2lvbik7Ci0gICAgaWYgKCFwbHVnaW4pIHsK
LSAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgV2lu
ZG93cyBmb3IgdGhlIG1pbWUgdHlwZQotICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBl
eHRlbnNpb24uCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBtaW1lVHlwZSA9
IG1pbWVUeXBlRm9yRXh0ZW5zaW9uOwotICAgIHJldHVybiBwbHVnaW47Ci19Ci0KLXZvaWQgUGx1
Z2luRGF0YWJhc2U6OnNldFByZWZlcnJlZFBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIFBsdWdpblBhY2thZ2UqIHBsdWdpbikKLXsKLSAgICBpZiAoIXBsdWdpbiB8fCBw
bHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5jb250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIG1f
cHJlZmVycmVkUGx1Z2lucy5zZXQobWltZVR5cGUubG93ZXIoKSwgcGx1Z2luKTsKLX0KLQotYm9v
bCBQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoY29uc3QgU3RyaW5n
JiBmaWxlUGF0aCkgY29uc3QKLXsKLSAgICAvLyBTa2lwIHBsdWdpbiBmaWxlcyB0aGF0IGFyZSBk
aXNhYmxlZCBieSBmaWxlbmFtZS4KLSAgICBpZiAobV9kaXNhYmxlZFBsdWdpbkZpbGVzLmNvbnRh
aW5zKHBhdGhHZXRGaWxlTmFtZShmaWxlUGF0aCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gZmlsZUV4aXN0cyhmaWxlUGF0aCk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJh
c2U6OmdldERlbGV0ZWRQbHVnaW5zKFBsdWdpblNldCYgcGx1Z2lucykgY29uc3QKLXsKLSAgICBQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3Ig
KFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKCpp
dCktPnBhdGgoKSkpCi0gICAgICAgICAgICBwbHVnaW5zLmFkZCgqaXQpOwotICAgIH0KLX0KLQot
Ym9vbCBQbHVnaW5EYXRhYmFzZTo6YWRkKFBhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gcHJwUGFj
a2FnZSkKLXsKLSAgICBBU1NFUlRfQVJHKHBycFBhY2thZ2UsIHBycFBhY2thZ2UpOwotCi0gICAg
UmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBwcnBQYWNrYWdlOwotCi0gICAgaWYgKCFt
X3BsdWdpbnMuYWRkKHBhY2thZ2UpLmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIG1fcGx1Z2luc0J5UGF0aC5hZGQocGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKFBsdWdpblBh
Y2thZ2UqIHBhY2thZ2UpCi17Ci0gICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsKLSAgICBNSU1FVG9F
eHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNp
b25zKCkuZW5kKCk7Ci0gICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1
Z2luUGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQ
bHVnaW5zLmZpbmQoaXQtPmtleSk7Ci0gICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVm
ZXJyZWRQbHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+dmFsdWUgPT0gcGFja2FnZSkKLSAg
ICAgICAgICAgIG1fcHJlZmVycmVkUGx1Z2lucy5yZW1vdmUocGFja2FnZUluTWFwKTsKLSAgICB9
Ci0KLSAgICBtX3BsdWdpbnMucmVtb3ZlKHBhY2thZ2UpOwotICAgIG1fcGx1Z2luc0J5UGF0aC5y
ZW1vdmUocGFja2FnZS0+cGF0aCgpKTsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Y2xlYXIo
KQotewotICAgIG1fcGx1Z2lucy5jbGVhcigpOwotICAgIG1fcGx1Z2luc0J5UGF0aC5jbGVhcigp
OwotICAgIG1fcGx1Z2luUGF0aHNXaXRoVGltZXMuY2xlYXIoKTsKLSAgICBtX3JlZ2lzdGVyZWRN
SU1FVHlwZXMuY2xlYXIoKTsKLSAgICBtX3ByZWZlcnJlZFBsdWdpbnMuY2xlYXIoKTsKLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIG1fcGVyc2lzdGVudE1l
dGFkYXRhQ2FjaGVJc0xvYWRlZCA9IGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgUGx1Z2luRGF0
YWJhc2U6OnJlbW92ZURpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQot
ewotICAgIHJldHVybiBtX2Rpc2FibGVkUGx1Z2luRmlsZXMucmVtb3ZlKGZpbGVOYW1lKTsKLX0K
LQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6YWRkRGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUpCi17Ci0gICAgcmV0dXJuIG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5hZGQoZmls
ZU5hbWUpLmlzTmV3RW50cnk7Ci19Ci0KLSNpZiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkpCi0vLyBGb3IgU2FmYXJpL1dpbiB0aGUgZm9sbG93aW5nIHRocmVl
IG1ldGhvZHMgYXJlIGltcGxlbWVudGVkCi0vLyBpbiBQbHVnaW5EYXRhYmFzZVdpbi5jcHAsIGJ1
dCBpZiB3ZSBjYW4gdXNlIFdlYkNvcmUgY29uc3RydWN0cwotLy8gZm9yIHRoZSBsb2dpYyB3ZSBz
aG91bGQgcGVyaGFwcyBtb3ZlIGl0IGhlcmUgdW5kZXIgWFBfV0lOPwotCi1WZWN0b3I8U3RyaW5n
PiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKLXsKLSAgICBWZWN0
b3I8U3RyaW5nPiBwYXRoczsKLQotICAgIC8vIEFkZCBwYXRocyBzcGVjaWZpYyB0byBlYWNoIHBs
YXRmb3JtCi0jaWYgZGVmaW5lZChYUF9VTklYKQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9
IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0gICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygi
Ly5tb3ppbGxhL3BsdWdpbnMiKSk7Ci0gICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsK
LQotICAgIHVzZXJQbHVnaW5QYXRoID0gaG9tZURpcmVjdG9yeVBhdGgoKTsKLSAgICB1c2VyUGx1
Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCIvLm5ldHNjYXBlL3BsdWdpbnMiKSk7Ci0gICAgcGF0aHMu
YXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKLQotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvYnJv
d3Nlci9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxh
L3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2ZpcmVmb3gvcGx1Z2lucyIp
OwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9icm93c2VyLXBsdWdpbnMiKTsKLSAgICBw
YXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dzZXItcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVu
ZCgiL3Vzci9saWIvbW96aWxsYS9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xv
Y2FsL25ldHNjYXBlL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi9vcHQvbW96aWxsYS9w
bHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvb3B0L21vemlsbGEvbGliL3BsdWdpbnMiKTsK
LSAgICBwYXRocy5hcHBlbmQoIi9vcHQvbmV0c2NhcGUvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFw
cGVuZCgiL29wdC9uZXRzY2FwZS9jb21tdW5pY2F0b3IvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFw
cGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vz
ci9saWIvbmV0c2NhcGUvcGx1Z2lucy1saWJjNSIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9s
aWIvbmV0c2NhcGUvcGx1Z2lucy1saWJjNiIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2
NC9uZXRzY2FwZS9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L21vemls
bGEvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbnNicm93c2VyL3BsdWdp
bnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvbnNicm93c2VyL3BsdWdpbnMiKTsK
LQotICAgIFN0cmluZyBtb3pIb21lKGdldGVudigiTU9aSUxMQV9IT01FIikpOwotICAgIG1vekhv
bWUuYXBwZW5kKCIvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZChtb3pIb21lKTsKLQotICAg
IFZlY3RvcjxTdHJpbmc+IG1velBhdGhzOwotICAgIFN0cmluZyBtb3pQYXRoKGdldGVudigiTU9a
X1BMVUdJTl9QQVRIIikpOwotICAgIG1velBhdGguc3BsaXQoVUNoYXIoJzonKSwgLyogYWxsb3dF
bXB0eUVudHJpZXMgKi8gZmFsc2UsIG1velBhdGhzKTsKLSAgICBwYXRocy5hcHBlbmRWZWN0b3Io
bW96UGF0aHMpOwotI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgU3RyaW5nIHVzZXJQbHVn
aW5QYXRoID0gaG9tZURpcmVjdG9yeVBhdGgoKTsKLSAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQo
U3RyaW5nKCIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlucyIpKTsKLSAgICBwYXRocy5hcHBlbmQo
dXNlclBsdWdpblBhdGgpOwotICAgIHBhdGhzLmFwcGVuZCgiL0xpYnJhcnkvSW50ZXJuZXQgUGx1
Zy1JbnMiKTsKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0
aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0gICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmlu
ZygiXFxBcHBsaWNhdGlvbiBEYXRhXFxNb3ppbGxhXFxwbHVnaW5zIikpOwotICAgIHBhdGhzLmFw
cGVuZCh1c2VyUGx1Z2luUGF0aCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBwYXRoczsKLX0KLQot
Ym9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJiBwYXRoKQotewotICAgIFN0cmluZyBwcmVmZXJyZWRQYXRoID0gaG9tZURpcmVjdG9yeVBh
dGgoKTsKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChT
dHJpbmcoIi8ubW96aWxsYS9wbHVnaW5zIikpOwotI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0g
ICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3RyaW5nKCIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlu
cyIpKTsKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQotICAgIHByZWZlcnJlZFBhdGguYXBwZW5kKFN0
cmluZygiXFxBcHBsaWNhdGlvbiBEYXRhXFxNb3ppbGxhXFxwbHVnaW5zIikpOwotI2VuZGlmCi0K
LSAgICAvLyBUT0RPOiBXZSBzaG91bGQgbm9ybWFsaXplIHRoZSBwYXRoIGJlZm9yZSBkb2luZyBh
IGNvbXBhcmlzb24uCi0gICAgcmV0dXJuIHBhdGggPT0gcHJlZmVycmVkUGF0aDsKLX0KLQotdm9p
ZCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgcGF0aHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2Fz
ZSBpbnNlbnNpdGl2ZSBzZXQuCi0gICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsK
LQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAgICBTdHJpbmcgZmlsZU5hbWVGaWx0ZXIoIiouc28i
KTsKLSNlbHNlCi0gICAgU3RyaW5nIGZpbGVOYW1lRmlsdGVyKCIiKTsKLSNlbmRpZgotCi0gICAg
VmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRpcnNFbmQgPSBtX3BsdWdpbkRpcmVjdG9y
aWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRJdCA9
IG1fcGx1Z2luRGlyZWN0b3JpZXMuYmVnaW4oKTsgZEl0ICE9IGRpcnNFbmQ7ICsrZEl0KSB7Ci0g
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdpblBhdGhzID0gbGlzdERpcmVjdG9yeSgqZEl0LCBm
aWxlTmFtZUZpbHRlcik7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBw
bHVnaW5zRW5kID0gcGx1Z2luUGF0aHMuZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIHBJdCA9IHBsdWdpblBhdGhzLmJlZ2luKCk7IHBJdCAhPSBwbHVn
aW5zRW5kOyArK3BJdCkgewotICAgICAgICAgICAgaWYgKCFmaWxlRXhpc3RzQW5kSXNOb3REaXNh
YmxlZCgqcEl0KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgcGF0
aHMuYWRkKCpwSXQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gIU9TKFdJTkRP
V1MpCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotCi1zdGF0
aWMgdm9pZCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBm
aWxlLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDA7
Ci0gICAgc2l6ZV90IGJ1ZmZlckNhcGFjaXR5ID0gMTAyNDsKLSAgICBidWZmZXIucmVzaXplKGJ1
ZmZlckNhcGFjaXR5KTsKLQotICAgIGRvIHsKLSAgICAgICAgYnVmZmVyU2l6ZSArPSByZWFkRnJv
bUZpbGUoZmlsZSwgYnVmZmVyLmRhdGEoKSArIGJ1ZmZlclNpemUsIGJ1ZmZlckNhcGFjaXR5IC0g
YnVmZmVyU2l6ZSk7Ci0gICAgICAgIGlmIChidWZmZXJTaXplID09IGJ1ZmZlckNhcGFjaXR5KSB7
Ci0gICAgICAgICAgICBpZiAoYnVmZmVyQ2FwYWNpdHkgPCBtYXhpbXVtUGVyc2lzdGVudFBsdWdp
bk1ldGFkYXRhQ2FjaGVTaXplKSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyQ2FwYWNpdHkgKj0g
MjsKLSAgICAgICAgICAgICAgICBidWZmZXIucmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLmNsZWFyKCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0gd2hpbGUgKHRydWUpOwotCi0gICAgYnVmZmVyLnNocmluayhidWZm
ZXJTaXplKTsKLX0KLQotc3RhdGljIGJvb2wgcmVhZFVURjhTdHJpbmcoU3RyaW5nJiByZXN1bHRT
dHJpbmcsIGNoYXIqJiBzdGFydCwgY29uc3QgY2hhciogZW5kKQotewotICAgIGlmIChzdGFydCA+
PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBsZW4gPSBzdHJsZW4oc3Rh
cnQpOwotICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoc3RhcnQsIGxlbik7Ci0g
ICAgc3RhcnQgKz0gbGVuICsgMTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9v
bCByZWFkVGltZSh0aW1lX3QmIHJlc3VsdFRpbWUsIGNoYXIqJiBzdGFydCwgY29uc3QgY2hhciog
ZW5kKQotewotICAgIGlmIChzdGFydCArIHNpemVvZih0aW1lX3QpID49IGVuZCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIHN0cmVhbSBpcyBub3QgbmVjZXNzYXJ5IGFsaWdu
ZWQuCi0gICAgbWVtY3B5KCZyZXN1bHRUaW1lLCBzdGFydCwgc2l6ZW9mKHRpbWVfdCkpOwotICAg
IHN0YXJ0ICs9IHNpemVvZih0aW1lX3QpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBjb25zdCBjaGFyIHNjaGVtYVZlcnNpb24gPSAnMSc7Ci1zdGF0aWMgY29uc3QgY2hhciBwZXJz
aXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lW10gPSAiUGx1Z2luTWV0YWRhdGFDYWNo
ZS5iaW4iOwotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGUoKQotewotICAgIGlmICghaXNQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBw
ZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlOwotICAgIFN0cmluZyBhYnNvbHV0ZUNhY2hl
UGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBh
dGgoKSwgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZSk7Ci0gICAgZmlsZSA9
IG9wZW5GaWxlKGFic29sdXRlQ2FjaGVQYXRoLCBPcGVuRm9yUmVhZCk7Ci0KLSAgICBpZiAoIWlz
SGFuZGxlVmFsaWQoZmlsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcmsgY2FjaGUg
YXMgbG9hZGVkIHJlZ2FyZGxlc3Mgb2Ygc3VjY2VzcyBvciBmYWlsdXJlLiBJZgotICAgIC8vIHRo
ZXJlJ3MgZXJyb3IgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCB0cnkgdG8gbG9hZCBpdCBhbnltb3Jl
LgotICAgIG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCA9IHRydWU7Ci0KLSAgICBW
ZWN0b3I8Y2hhcj4gZmlsZUNvbnRlbnRzOwotICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZp
bGUoZmlsZSwgZmlsZUNvbnRlbnRzKTsKLSAgICBjbG9zZUZpbGUoZmlsZSk7Ci0KLSAgICBpZiAo
ZmlsZUNvbnRlbnRzLnNpemUoKSA8IDIgfHwgZmlsZUNvbnRlbnRzLmZpcnN0KCkgIT0gc2NoZW1h
VmVyc2lvbiB8fCBmaWxlQ29udGVudHMubGFzdCgpICE9ICdcMCcpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgc2NoZW1h
Iik7Ci0gICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgY2hhciogYnVmZmVyUG9zID0gZmlsZUNvbnRlbnRzLmRhdGEoKSAr
IDE7Ci0gICAgY2hhciogZW5kID0gZmlsZUNvbnRlbnRzLmRhdGEoKSArIGZpbGVDb250ZW50cy5z
aXplKCk7Ci0KLSAgICBQbHVnaW5TZXQgY2FjaGVkUGx1Z2luczsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgdGltZV90PiBjYWNoZWRQbHVnaW5QYXRoc1dpdGhUaW1lczsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gY2FjaGVkUGx1Z2luc0J5UGF0aDsKLQotICAgIHdo
aWxlIChidWZmZXJQb3MgPCBlbmQpIHsKLSAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIHRp
bWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBTdHJpbmcg
ZGVzYzsKLSAgICAgICAgU3RyaW5nIG1pbWVEZXNjOwotICAgICAgICBpZiAoIShyZWFkVVRGOFN0
cmluZyhwYXRoLCBidWZmZXJQb3MsIGVuZCkKLSAgICAgICAgICAgICAgJiYgcmVhZFRpbWUobGFz
dE1vZGlmaWVkLCBidWZmZXJQb3MsIGVuZCkKLSAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJp
bmcobmFtZSwgYnVmZmVyUG9zLCBlbmQpCi0gICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5n
KGRlc2MsIGJ1ZmZlclBvcywgZW5kKQotICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyht
aW1lRGVzYywgYnVmZmVyUG9zLCBlbmQpKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgZGF0YSIpOwotICAgICAg
ICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTa2lwIG1ldGFkYXRhIHRoYXQgcG9pbnRzIHRvIHBs
dWdpbnMgZnJvbSBkaXJlY3RvcmllcyB0aGF0Ci0gICAgICAgIC8vIGFyZSBub3QgcGFydCBvZiBw
bHVnaW4gZGlyZWN0b3J5IGxpc3QgYW55bW9yZS4KLSAgICAgICAgU3RyaW5nIHBsdWdpbkRpcmVj
dG9yeU5hbWUgPSBkaXJlY3RvcnlOYW1lKHBhdGgpOwotICAgICAgICBpZiAobV9wbHVnaW5EaXJl
Y3Rvcmllcy5maW5kKHBsdWdpbkRpcmVjdG9yeU5hbWUpID09IFdURjo6bm90Rm91bmQpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2Fn
ZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUocGF0aCwgbGFzdE1vZGlm
aWVkLCBuYW1lLCBkZXNjLCBtaW1lRGVzYyk7Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UgJiYgY2Fj
aGVkUGx1Z2lucy5hZGQocGFja2FnZSkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgY2FjaGVk
UGx1Z2luUGF0aHNXaXRoVGltZXMuYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZS0+bGFzdE1v
ZGlmaWVkKCkpOwotICAgICAgICAgICAgY2FjaGVkUGx1Z2luc0J5UGF0aC5hZGQocGFja2FnZS0+
cGF0aCgpLCBwYWNrYWdlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcGx1Z2lucy5zd2Fw
KGNhY2hlZFBsdWdpbnMpOwotICAgIG1fcGx1Z2luc0J5UGF0aC5zd2FwKGNhY2hlZFBsdWdpbnNC
eVBhdGgpOwotICAgIG1fcGx1Z2luUGF0aHNXaXRoVGltZXMuc3dhcChjYWNoZWRQbHVnaW5QYXRo
c1dpdGhUaW1lcyk7Ci19Ci0KLXN0YXRpYyBib29sIHdyaXRlVVRGOFN0cmluZyhQbGF0Zm9ybUZp
bGVIYW5kbGUgZmlsZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyB1dGY4
U3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBpbnQgbGVuZ3RoID0gdXRmOFN0cmluZy5sZW5n
dGgoKSArIDE7Ci0gICAgcmV0dXJuIHdyaXRlVG9GaWxlKGZpbGUsIHV0ZjhTdHJpbmcuZGF0YSgp
LCBsZW5ndGgpID09IGxlbmd0aDsKLX0KLQotc3RhdGljIGJvb2wgd3JpdGVUaW1lKFBsYXRmb3Jt
RmlsZUhhbmRsZSBmaWxlLCBjb25zdCB0aW1lX3QmIHRpbWUpCi17Ci0gICAgcmV0dXJuIHdyaXRl
VG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZ0aW1lKSwgc2l6ZW9m
KHRpbWVfdCkpID09IHNpemVvZih0aW1lX3QpOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjp1
cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpCi17Ci0gICAgaWYgKCFpc1BlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlRW5hYmxlZCgpIHx8IHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUFsbERpcmVjdG9yaWVzKHBlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpKTsKLSAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBhdGgg
PSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCks
IHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmlsZW5hbWUpOwotICAgIGRlbGV0ZUZpbGUo
YWJzb2x1dGVDYWNoZVBhdGgpOwotCi0gICAgaWYgKG1fcGx1Z2lucy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlOwotICAgIGZpbGUgPSBv
cGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwgT3BlbkZvcldyaXRlKTsKLQotICAgIGlmICghaXNI
YW5kbGVWYWxpZChmaWxlKSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIHBs
dWdpbiBtZXRhZGF0YSBjYWNoZSBmb3Igc2F2aW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBjaGFyIGxvY2FsU2NoZW1hVmVyc2lvbiA9IHNjaGVtYVZlcnNpb247Ci0gICAgaWYg
KHdyaXRlVG9GaWxlKGZpbGUsICZsb2NhbFNjaGVtYVZlcnNpb24sIDEpICE9IDEpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3JpdGUgcGx1Z2luIG1ldGFkYXRhIGNhY2hlIHNjaGVt
YSIpOwotICAgICAgICBjbG9zZUZpbGUoZmlsZSk7Ci0gICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1
dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoISh3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPnBhdGgoKSkKLSAg
ICAgICAgICAgICAgJiYgd3JpdGVUaW1lKGZpbGUsICgqaXQpLT5sYXN0TW9kaWZpZWQoKSkKLSAg
ICAgICAgICAgICAgJiYgd3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5uYW1lKCkpCi0gICAg
ICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+ZGVzY3JpcHRpb24oKSkK
LSAgICAgICAgICAgICAgJiYgd3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5mdWxsTUlNRURl
c2NyaXB0aW9uKCkpKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3JpdGUg
cGx1Z2luIG1ldGFkYXRhIHRvIGNhY2hlIik7Ci0gICAgICAgICAgICBjbG9zZUZpbGUoZmlsZSk7
Ci0gICAgICAgICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsb3NlRmlsZShmaWxlKTsKLX0KLQot
Ym9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKQot
ewotICAgIHJldHVybiBnUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7Ci19
Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxl
ZChib29sIGlzRW5hYmxlZCkKLXsKLSAgICBnUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVJ
c0VuYWJsZWQgPSBpc0VuYWJsZWQ7Ci19Ci0KLVN0cmluZyBQbHVnaW5EYXRhYmFzZTo6cGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGVyc2lzdGVu
dFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNl
dFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlUGF0aCkKLXsKLSAgICBXZWJDb3JlOjpwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFD
YWNoZVBhdGgoKSA9IHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aDsKLX0KLSNlbmRpZgotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiZmM0OGVjZGZmNmNmMjI0MzU1OTRmOGFlODUyMzAxYTYyNjNjZjg2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpbkRhdGFiYXNlX2gKLSNkZWZpbmUgUGx1Z2luRGF0
YWJhc2VfaAotCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIGNsYXNzIEVsZW1lbnQ7Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3Mg
SW50U2l6ZTsKLSAgICBjbGFzcyBVUkw7Ci0gICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VDbGllbnQ7
Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKLQotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8
UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2thZ2VIYXNoLCBQbHVnaW5QYWNrYWdlSGFzaFRyYWl0
cz4gUGx1Z2luU2V0OwotCi0gICAgY2xhc3MgUGx1Z2luRGF0YWJhc2UgewotICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQbHVnaW5EYXRhYmFzZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luRGF0YWJhc2UoKTsKLQotICAgICAgICAvLyBU
aGUgZmlyc3QgY2FsbCB0byBpbnN0YWxsZWRQbHVnaW5zIGNyZWF0ZXMgdGhlIHBsdWdpbiBkYXRh
YmFzZQotICAgICAgICAvLyBhbmQgYnkgZGVmYXVsdCBwb3B1bGF0ZXMgaXQgd2l0aCB0aGUgcGx1
Z2lucyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4KLSAgICAgICAgLy8gRm9yIHRlc3RpbmcgcHVy
cG9zZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG5vdCBwb3B1bGF0ZSB0aGUgZGF0YWJhc2UKLSAgICAg
ICAgLy8gYXV0b21hdGljYWxseSwgYXMgdGhlIHBsdWdpbnMgbWlnaHQgYWZmZWN0IHRoZSBEUlQg
cmVzdWx0cyBieQotICAgICAgICAvLyB3cml0aW5nIHRvIGEuby4gc3RkZXJyLgotICAgICAgICBz
dGF0aWMgUGx1Z2luRGF0YWJhc2UqIGluc3RhbGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSA9IHRy
dWUpOwotCi0gICAgICAgIGJvb2wgcmVmcmVzaCgpOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0g
ICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcGx1Z2lucygpIGNvbnN0OwotICAgICAgICBi
b29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAg
ICB2b2lkIGFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgICAg
IHN0YXRpYyBib29sIGlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGly
ZWN0b3J5KTsKLSAgICAgICAgc3RhdGljIGludCBwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0
IHZvaWQqLCBjb25zdCB2b2lkKik7Ci0KLSAgICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBsdWdp
bihjb25zdCBVUkwmLCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgUGx1Z2luUGFja2FnZSog
cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIHZvaWQg
c2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1
Z2luUGFja2FnZSogcGx1Z2luKTsKLQotICAgICAgICB2b2lkIHNldFBsdWdpbkRpcmVjdG9yaWVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKLSAgICAgICAgewotICAgICAgICAg
ICAgY2xlYXIoKTsKLSAgICAgICAgICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMgPSBkaXJlY3Rvcmll
czsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgcmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxlKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUpOwotICAgICAgICBib29sIGFkZERpc2FibGVkUGx1Z2luRmls
ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKLSAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+
IGRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVn
aW5EaXJlY3RvcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luRGlyZWN0b3JpZXM7IH0KLQot
ICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNp
b24pIGNvbnN0OwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0g
ICAgICAgIHN0YXRpYyBib29sIGlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCk7Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChib29s
IGlzRW5hYmxlZCk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgcGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGVQYXRoKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hl
UGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCk7Ci0jZW5kaWYK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVz
KEhhc2hTZXQ8U3RyaW5nPiYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldERlbGV0ZWRQbHVnaW5z
KFBsdWdpblNldCYpIGNvbnN0OwotICAgICAgICBib29sIGZpbGVFeGlzdHNBbmRJc05vdERpc2Fi
bGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotCi0gICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0
aGUgcGx1Z2luIHdhcyBhY3R1YWxseSBhZGRlZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVkIGlm
IGl0J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhpc3RpbmcgcGx1Z2luKS4KLSAgICAgICAgYm9vbCBh
ZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFBsdWdp
blBhY2thZ2UqKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQot
ICAgICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOwotICAgICAgICB2b2lk
IHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7Ci0jZW5kaWYKLQotICAgICAgICBIYXNo
U2V0PFN0cmluZz4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzOwotICAgICAgICBWZWN0b3I8U3RyaW5n
PiBtX3BsdWdpbkRpcmVjdG9yaWVzOwotICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3Rl
cmVkTUlNRVR5cGVzOwotICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOwotICAgICAgICBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOwotICAg
ICAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOwotICAg
ICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJyZWRQ
bHVnaW5zOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAg
ICAgIGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkOwotI2VuZGlmCi0gICAg
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5EZWJ1Zy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZDIzYWU2
NzEzOGFjYWJjNjViNGUzMDBjZjJjZTE3OTgxNDA1MzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1
Zy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi0jaWYgIUxPR19ESVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlcnJvclN0cmluZ3NbXSA9IHsKLSAgICAiTm8g
ZXJyb3JzIG9jY3VycmVkLiIsIC8qIE5QRVJSX05PX0VSUk9SICovCi0gICAgIkVycm9yIHdpdGgg
bm8gc3BlY2lmaWMgZXJyb3IgY29kZSBvY2N1cnJlZC4iLCAvKiBOUEVSUl9HRU5FUklDX0VSUk9S
ICovCi0gICAgIkludmFsaWQgaW5zdGFuY2UgcGFzc2VkIHRvIHRoZSBwbHVnLWluLiIsIC8qIE5Q
RVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1IgKi8KLSAgICAiRnVuY3Rpb24gdGFibGUgaW52YWxp
ZC4iLCAvKiBOUEVSUl9JTlZBTElEX0ZVTkNUQUJMRV9FUlJPUiAqLwotICAgICJMb2FkaW5nIG9m
IHBsdWctaW4gZmFpbGVkLiIsIC8qIE5QRVJSX01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAqLwot
ICAgICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIiwgLyogTlBFUlJfT1VUX09GX01FTU9SWV9F
UlJPUiAqLwotICAgICJQbHVnLWluIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZB
TElEX1BMVUdJTl9FUlJPUiAqLwotICAgICJQbHVnLWluIGRpcmVjdG9yeSBtaXNzaW5nIG9yIGlu
dmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRElSX0VSUk9SICovCi0gICAgIlZlcnNp
b25zIG9mIHBsdWctaW4gYW5kIENvbW11bmljYXRvciBkbyBub3QgbWF0Y2guIiwgLyogTlBFUlJf
SU5DT01QQVRJQkxFX1ZFUlNJT05fRVJST1IgKi8KLSAgICAiUGFyYW1ldGVyIG1pc3Npbmcgb3Ig
aW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BBUkFNICovCi0gICAgIlVSTCBtaXNzaW5nIG9y
IGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9VUkwgKi8KLSAgICAiRmlsZSBtaXNzaW5nIG9y
IGludmFsaWQuIiwgLyogTlBFUlJfRklMRV9OT1RfRk9VTkQgKi8KLSAgICAiU3RyZWFtIGNvbnRh
aW5zIG5vIGRhdGEuIiwgLyogTlBFUlJfTk9fREFUQSAqLwotICAgICJTZWVrYWJsZSBzdHJlYW0g
ZXhwZWN0ZWQuIiwgLyogTlBFUlJfU1RSRUFNX05PVF9TRUVLQUJMRSAqLwotICAgICJVbmtub3du
IGVycm9yIGNvZGUiCi19OwotCi0jaWZkZWYgWFBfTUFDT1NYCi1zdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZHJhd2luZ01vZGVsc1tdID0gewotICAgICJOUERyYXdpbmdNb2RlbFF1aWNrRHJhdyIs
Ci0gICAgIk5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzIiwKLSAgICAiTlBEcmF3aW5nTW9kZWxP
cGVuR0wiLAotICAgICJOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb24iCi19OwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZXZlbnRNb2RlbHNbXSA9IHsKLSAgICAiTlBFdmVudE1vZGVsQ2Fy
Ym9uIiwKLSAgICAiTlBFdmVudE1vZGVsQ29jb2EiCi19OwotI2VuZGlmIC8vWFBfTUFDT1NYCi0K
LWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpCi17Ci0gICAg
cmV0dXJuIGVycm9yU3RyaW5nc1tlcnJvcl07Ci19Ci0KLSNpZmRlZiBYUF9NQUNPU1gKLWNvbnN0
IGNoYXIqIHByZXR0eU5hbWVGb3JEcmF3aW5nTW9kZWwoTlBEcmF3aW5nTW9kZWwgZHJhd2luZ01v
ZGVsKQotewotICAgIHJldHVybiBkcmF3aW5nTW9kZWxzW2RyYXdpbmdNb2RlbF07Ci19Ci0KLWNv
bnN0IGNoYXIqIHByZXR0eU5hbWVGb3JFdmVudE1vZGVsKE5QRXZlbnRNb2RlbCBldmVudE1vZGVs
KQotewotICAgIHJldHVybiBldmVudE1vZGVsc1tldmVudE1vZGVsXTsKLX0KLSNlbmRpZiAvL1hQ
X01BQ09TWAotCi1DU3RyaW5nIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2
YXJpYWJsZSkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WeERpc3Bs
YXk6IHJldHVybiAiTlBOVnhEaXNwbGF5IjsKLSAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHJl
dHVybiAiTlBOVnh0QXBwQ29udGV4dCI7Ci0gICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHJl
dHVybiAiTlBOVm5ldHNjYXBlV2luZG93IjsKLSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxl
ZEJvb2w6IHJldHVybiAiTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbCI7Ci0gICAgY2FzZSBOUE5W
YXNkRW5hYmxlZEJvb2w6IHJldHVybiAiTlBOVmFzZEVuYWJsZWRCb29sIjsKLSAgICBjYXNlIE5Q
TlZpc09mZmxpbmVCb29sOiByZXR1cm4gIk5QTlZpc09mZmxpbmVCb29sIjsKLQotICAgIGNhc2Ug
TlBOVnNlcnZpY2VNYW5hZ2VyOiByZXR1cm4gIk5QTlZzZXJ2aWNlTWFuYWdlciAobm90IHN1cHBv
cnRlZCkiOwotICAgIGNhc2UgTlBOVkRPTUVsZW1lbnQ6IHJldHVybiAiTlBOVkRPTUVsZW1lbnQg
KG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QTlZET01XaW5kb3c6IHJldHVybiAiTlBOVkRP
TVdpbmRvdyAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBOVlRvb2xraXQ6IHJldHVybiAi
TlBOVlRvb2xraXQgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJl
ZEJvb2w6IHJldHVybiAiTlBOVlN1cHBvcnRzWEVtYmVkQm9vbCAobm90IHN1cHBvcnRlZCkiOwot
Ci0gICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHJldHVybiAiTlBOVldpbmRvd05QT2JqZWN0
IjsKLSAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHJldHVybiAiTlBOVlBsdWdp
bkVsZW1lbnROUE9iamVjdCI7Ci0gICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOiByZXR1
cm4gIk5QTlZTdXBwb3J0c1dpbmRvd2xlc3MiOwotICAgIGNhc2UgTlBOVnByaXZhdGVNb2RlQm9v
bDogcmV0dXJuICJOUE5WcHJpdmF0ZU1vZGVCb29sIjsKLQotI2lmZGVmIFhQX01BQ09TWAotICAg
IGNhc2UgTlBOVnBsdWdpbkRyYXdpbmdNb2RlbDogcmV0dXJuICJOUE5WcGx1Z2luRHJhd2luZ01v
ZGVsIjsKLSNpZm5kZWYgTlBfTk9fUVVJQ0tEUkFXCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNRdWlj
a0RyYXdCb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c1F1aWNrRHJhd0Jvb2wiOwotI2VuZGlmCi0g
ICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlR3JhcGhpY3NCb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0
c0NvcmVHcmFwaGljc0Jvb2wiOwotICAgIGNhc2UgTlBOVnN1cHBvcnRzT3BlbkdMQm9vbDogcmV0
dXJuICJOUE5Wc3VwcG9ydHNPcGVuR0xCb29sIjsKLSAgICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVB
bmltYXRpb25Cb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c0NvcmVBbmltYXRpb25Cb29sIjsKLSNp
Zm5kZWYgTlBfTk9fQ0FSQk9OCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNDYXJib25Cb29sOiByZXR1
cm4gIk5QTlZzdXBwb3J0c0NhcmJvbkJvb2wiOwotI2VuZGlmCi0gICAgY2FzZSBOUE5Wc3VwcG9y
dHNDb2NvYUJvb2w6IHJldHVybiAiTlBOVnN1cHBvcnRzQ29jb2FCb29sIjsKLSNlbmRpZgotCi0g
ICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlhYmxlIjsKLSAgICB9Ci19Ci0KLUNTdHJp
bmcgcHJldHR5TmFtZUZvck5QUFZhcmlhYmxlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmFt
ZVN0cmluZzogcmV0dXJuICJOUFBWcGx1Z2luTmFtZVN0cmluZyI7Ci0gICAgY2FzZSBOUFBWcGx1
Z2luRGVzY3JpcHRpb25TdHJpbmc6IHJldHVybiAiTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5n
IjsKLSAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5XaW5k
b3dCb29sIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6IHJldHVybiAiTlBQ
VnBsdWdpblRyYW5zcGFyZW50Qm9vbCI7Ci0KLSAgICBjYXNlIE5QUFZqYXZhQ2xhc3M6IHJldHVy
biAiTlBQVmphdmFDbGFzcyAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpbldp
bmRvd1NpemU6IHJldHVybiAiTlBQVnBsdWdpbldpbmRvd1NpemUgKG5vdCBzdXBwb3J0ZWQpIjsK
LSAgICBjYXNlIE5QUFZwbHVnaW5UaW1lckludGVydmFsOiByZXR1cm4gIk5QUFZwbHVnaW5UaW1l
ckludGVydmFsIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJs
ZUluc3RhbmNlOiByZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRhYmxlSW5zdGFuY2UgKG5vdCBzdXBw
b3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxlSUlEOiByZXR1cm4gIk5QUFZw
bHVnaW5TY3JpcHRhYmxlSUlEIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWamF2YXNj
cmlwdFB1c2hDYWxsZXJCb29sOiByZXR1cm4gIk5QUFZqYXZhc2NyaXB0UHVzaENhbGxlckJvb2wg
KG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5LZWVwTGlicmFyeUluTWVtb3J5
OiByZXR1cm4gIk5QUFZwbHVnaW5LZWVwTGlicmFyeUluTWVtb3J5IChub3Qgc3VwcG9ydGVkKSI7
Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmVlZHNYRW1iZWQ6IHJldHVybiAiTlBQVnBsdWdpbk5lZWRz
WEVtYmVkIChub3Qgc3VwcG9ydGVkKSI7Ci0KLSAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxl
TlBPYmplY3Q6IHJldHVybiAiTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCI7Ci0KLSAgICBj
YXNlIE5QUFZmb3JtVmFsdWU6IHJldHVybiAiTlBQVmZvcm1WYWx1ZSAobm90IHN1cHBvcnRlZCki
OwotICAgIGNhc2UgTlBQVnBsdWdpblVybFJlcXVlc3RzRGlzcGxheWVkQm9vbDogcmV0dXJuICJO
UFBWcGx1Z2luVXJsUmVxdWVzdHNEaXNwbGF5ZWRCb29sIChub3Qgc3VwcG9ydGVkKSI7Ci0KLSAg
ICBjYXNlIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zOiByZXR1cm4gIk5QUFZwbHVn
aW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5DYW5jZWxTcmNT
dHJlYW06IHJldHVybiAiTlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVhbSI7Ci0KLSNpZmRlZiBYUF9N
QUNPU1gKLSAgICBjYXNlIE5QUFZwbHVnaW5EcmF3aW5nTW9kZWw6IHsKLSAgICAgICAgU3RyaW5n
IHJlc3VsdCgiTlBQVnBsdWdpbkRyYXdpbmdNb2RlbCwgIik7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQocHJldHR5TmFtZUZvckRyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCh1aW50cHRyX3QodmFs
dWUpKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0LmxhdGluMSgpOwotICAgIH0KLSAgICBjYXNl
IE5QUFZwbHVnaW5FdmVudE1vZGVsOiB7Ci0gICAgICAgIFN0cmluZyByZXN1bHQoIk5QUFZwbHVn
aW5FdmVudE1vZGVsLCAiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwcmV0dHlOYW1lRm9yRXZl
bnRNb2RlbChOUEV2ZW50TW9kZWwodWludHB0cl90KHZhbHVlKSkpKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5sYXRpbjEoKTsKLSAgICB9Ci0gICAgY2FzZSBOUFBWcGx1Z2luQ29yZUFuaW1hdGlv
bkxheWVyOiByZXR1cm4gIk5QUFZwbHVnaW5Db3JlQW5pbWF0aW9uTGF5ZXIiOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmCi0KLSAgICBkZWZhdWx0OiByZXR1cm4gIlVu
a25vd24gdmFyaWFibGUiOwotICAgIH0KLX0KLQotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJM
VmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJs
ZSkgewotICAgIGNhc2UgTlBOVVJMVkNvb2tpZTogcmV0dXJuICJOUE5VUkxWQ29va2llIjsKLSAg
ICBjYXNlIE5QTlVSTFZQcm94eTogcmV0dXJuICJOUE5VUkxWUHJveHkiOwotICAgIGRlZmF1bHQ6
IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7Ci0gICAgfQotfQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
ZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Njc0ODVlOTA5MjhhMDVmY2Jk
YTgyOTQwYTczOTY3MDk4NzFkYjYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUGx1Z2luRGVidWdfaAotI2RlZmluZSBQbHVn
aW5EZWJ1Z19oCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2lu
dGVybmFsLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIExPR19O
UEVSUk9SKGVycikgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lu
cywgIiVzXG4iLCBwcmV0dHlOYW1lRm9yTlBFcnJvcihlcnIpKQotI2RlZmluZSBMT0dfUExVR0lO
X05FVF9FUlJPUigpIExPR19WRVJCT1NFKFBsdWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBw
cm9ibGVtcyB3aXRoIG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIg
cHJvYmxlbXMuXG4iKQotCi0jaWYgIUxPR19ESVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOwotCi1D
U3RyaW5nIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7Ci1D
U3RyaW5nIHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUpOwotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFy
aWFibGUgdmFyaWFibGUpOwotCi0jaWZkZWYgWFBfTUFDT1NYCi1jb25zdCBjaGFyKiBwcmV0dHlO
YW1lRm9yRHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCk7Ci1jb25zdCBj
aGFyKiBwcmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCk7Ci0j
ZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxF
RAotCi0jZW5kaWYgLy8gUGx1Z2luRGVidWdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
UGFja2FnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMDk5ODgwNDk3MWNh
ZTVhYmE2M2NkNmNkYzEzNDVmZTdjMjQwZTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQ3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UGx1Z2luUGFja2FnZS5oIgotCi0jaW5jbHVkZSAiY191dGlsaXR5LmgiCi0jaW5jbHVkZSAiSWRl
bnRpZmllclJlcC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJO
UF9qc29iamVjdC5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1
Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSAicnVudGltZV9y
b290LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgot
I2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24u
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5QYWNr
YWdlOjp+UGx1Z2luUGFja2FnZSgpCi17Ci0gICAgLy8gVGhpcyBkZXN0cnVjdG9yIGdldHMgY2Fs
bGVkIGR1cmluZyByZWZyZXNoKCkgaWYgUGx1Z2luRGF0YWJhc2UncwotICAgIC8vIFBsdWdpblNl
dCBoYXNoIGlzIGFscmVhZHkgcG9wdWxhdGVkLCBhcyBpdCByZW1vdmVzIGl0ZW1zIGZyb20KLSAg
ICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2FsbGluZyB0aGUgZGVzdHJ1Y3RvciBvbiBhIGxvYWRlZCBw
bHVnLWluIG9mCi0gICAgLy8gY291cnNlIHdvdWxkIGNhdXNlIGEgY3Jhc2gsIHNvIHdlIGNoZWNr
IHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3ZQotICAgIC8vIEFTU0VSVC4KLSAgICAvLyBGSVhNRTog
VGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGZpeCB0aGlzLgotICAgIGlmICghbV9s
b2FkQ291bnQpCi0gICAgICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotICAgIGVsc2UKLSAg
ICAgICAgdW5sb2FkKCk7Ci0KLSAgICBBU1NFUlQoIW1faXNMb2FkZWQpOwotfQotCi12b2lkIFBs
dWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5U29vbigpCi17Ci0gICAgQVNTRVJUKCFtX2ZyZWVMaWJy
YXJ5VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICBBU1NFUlQo
IW1fbG9hZENvdW50KTsKLQotICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKCkKLXsKLSAg
ICBBU1NFUlQobV9tb2R1bGUpOwotICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIG1vZHVsZSBnb3Qg
bG9hZGVkIGFnYWluIG1lYW53aGlsZQotICAgIGlmICghbV9sb2FkQ291bnQpIHsKLSAgICAgICAg
dW5sb2FkTW9kdWxlKG1fbW9kdWxlKTsKLSAgICAgICAgbV9tb2R1bGUgPSAwOwotICAgIH0KLX0K
LQotCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21w
YXJlVG8pIGNvbnN0Ci17Ci0gICAgLy8gU29ydCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxl
IGluc3RhbmNlcyBmaXJzdC4KLSAgICBib29sIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFx
dWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsK
LSAgICBib29sIEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCku
Y29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgaWYg
KEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyAhPSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCi0g
ICAgICAgIHJldHVybiBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPyAtMSA6IDE7Ci0KLSAgICAv
LyBTb3J0IHBsdWctaW5zIGluIGEgcHJlZmVycmVkIHBhdGggZmlyc3QuCi0gICAgYm9vbCBBaXNJ
blByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRp
cmVjdG9yeShwYXJlbnREaXJlY3RvcnkoKSk7Ci0gICAgYm9vbCBCaXNJblByZWZlcnJlZERpcmVj
dG9yeSA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb21wYXJl
VG8ucGFyZW50RGlyZWN0b3J5KCkpOwotICAgIGlmIChBaXNJblByZWZlcnJlZERpcmVjdG9yeSAh
PSBCaXNJblByZWZlcnJlZERpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIEFpc0luUHJlZmVycmVk
RGlyZWN0b3J5ID8gLTEgOiAxOwotCi0gICAgaW50IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0Zjgo
KS5kYXRhKCksIGNvbXBhcmVUby5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKGRpZmYp
Ci0gICAgICAgIHJldHVybiBkaWZmOwotCi0gICAgZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihj
b21wYXJlVG8udmVyc2lvbigpKTsKLSAgICBpZiAoZGlmZikKLSAgICAgICAgcmV0dXJuIGRpZmY7
Ci0KLSAgICByZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNv
bXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotUGx1Z2luUGFj
a2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFz
dE1vZGlmaWVkKQotICAgIDogbV9pc0VuYWJsZWQodHJ1ZSkKLSAgICAsIG1faXNMb2FkZWQoZmFs
c2UpCi0gICAgLCBtX2xvYWRDb3VudCgwKQotICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX21v
ZHVsZVZlcnNpb24oMCkKLSAgICAsIG1fbW9kdWxlKDApCi0gICAgLCBtX2xhc3RNb2RpZmllZChs
YXN0TW9kaWZpZWQpCi0gICAgLCBtX2ZyZWVMaWJyYXJ5VGltZXIoKnRoaXMsICZQbHVnaW5QYWNr
YWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKLSAgICAsIG1faW5mb0lzRnJvbUNhY2hlKHRydWUpCi0jZW5kaWYKLXsK
LSAgICBtX2ZpbGVOYW1lID0gcGF0aEdldEZpbGVOYW1lKG1fcGF0aCk7Ci0gICAgbV9wYXJlbnRE
aXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0
aCgpIC0gMSk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkKCkKLXsKLSAgICBpZiAo
IW1faXNMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgtLW1fbG9hZENvdW50ID4g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgbV9OUFBfU2h1dGRvd24oKTsKLSNlbmRpZgotCi0gICAgdW5sb2FkV2l0aG91dFNodXRkb3du
KCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKLXsK
LSAgICBpZiAoIW1faXNMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9s
b2FkQ291bnQpOwotICAgIEFTU0VSVChtX21vZHVsZSk7Ci0KLSAgICAvLyA8cmRhcjovLzU1MzA1
MTk+OiBDcmFzaCB3aGVuIGNsb3NpbmcgdGFiIHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkp
Ci0gICAgLy8gSWYgdGhlIHBsdWdpbiBoYXMgc3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywg
YXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5IGhhdmUKLSAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkg
b2YgdGhlIHBsdWdpbidzIGludGVybmFsIHdpbmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdl
IHRvIG91cgotICAgIC8vIG9yaWdpbmFsIHdpbmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVn
aW4gbGlicmFyeSBmcm9tIGhlcmUsIHdlIHdpbGwganVtcCBiYWNrCi0gICAgLy8gdG8gY29kZSB3
ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0dXJuLCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5
IGF0IGxlYXN0IHVudGlsCi0gICAgLy8gdGhlIG5leHQgbWVzc2FnZSBsb29wCi0gICAgZnJlZUxp
YnJhcnlTb29uKCk7Ci0KLSAgICBtX2lzTG9hZGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2lu
UGFja2FnZTo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9pc0VuYWJsZWQgPSBl
bmFibGVkOwotfQotCi1QYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IFBsdWdpblBhY2thZ2U6OmNy
ZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmll
ZCkKLXsKLSAgICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IGFkb3B0UmVmKG5ldyBQ
bHVnaW5QYWNrYWdlKHBhdGgsIGxhc3RNb2RpZmllZCkpOwotCi0gICAgaWYgKCFwYWNrYWdlLT5m
ZXRjaEluZm8oKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gcGFja2FnZS5yZWxl
YXNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQot
UGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJv
bUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5n
JiBtaW1lRGVzY3JpcHRpb24pCi17Ci0gICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2Ug
PSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBsYXN0TW9kaWZpZWQpKTsKLSAgICBw
YWNrYWdlLT5tX25hbWUgPSBuYW1lOwotICAgIHBhY2thZ2UtPm1fZGVzY3JpcHRpb24gPSBkZXNj
cmlwdGlvbjsKLSAgICBwYWNrYWdlLT5kZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0
aW9uKCk7Ci0gICAgcGFja2FnZS0+c2V0TUlNRURlc2NyaXB0aW9uKG1pbWVEZXNjcmlwdGlvbik7
Ci0gICAgcGFja2FnZS0+bV9pbmZvSXNGcm9tQ2FjaGUgPSB0cnVlOwotICAgIHJldHVybiBwYWNr
YWdlLnJlbGVhc2UoKTsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotdm9pZCBQ
bHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsK
LSAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUp
KSB7Ci0gICAgICAgIC8vIEJlY2F1c2UgYSBzaW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11
bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCByZWxpYWJseSB1bmxvYWQgYQotICAgICAgICAvLyBK
YXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRoZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSBy
ZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
RG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICAgICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lv
biB0byBhbiBlbXB0eSByZWdpb24gY2F1c2VzIGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVt
cwotICAgICAgICAvLyB3aXRoIHRoZSBKYXZhIHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFk
ZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nr
d2F2ZS1mbGFzaCIpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lv
biBmbGFzaFRlblZlcnNpb24oMHgwYTAwMDAwMCk7Ci0KLSAgICAgICAgaWYgKGNvbXBhcmVGaWxl
VmVyc2lvbihmbGFzaFRlblZlcnNpb24pID49IDApIHsKLSAgICAgICAgICAgIC8vIEZsYXNoIDEw
LjAgYjIxOCBkb2Vzbid0IGxpa2UgaGF2aW5nIGEgTlVMTCB3aW5kb3cgaGFuZGxlCi0gICAgICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVz
dHJveSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGbGFzaCA5IGFuZCBvbGRl
ciByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2Vy
IGFnZW50Ci0gICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFV
c2VyQWdlbnQpOwotICAgICAgICB9Ci0KLSNpZiBDUFUoWDg2XzY0KQotICAgICAgICAvLyA2NC1i
aXQgRmxhc2ggZnJlZXplcyBpZiByaWdodC1jbGljayBpcyBzZW50IGluIHdpbmRvd2xlc3MgbW9k
ZQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5k
b3dsZXNzTW9kZSk7Ci0jZW5kaWYKLQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtS
ZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBs
dWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOwotICAgIH0KLX0KLSNlbmRpZgotCi0jaWYgIU9T
KFdJTkRPV1MpCi12b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9t
RGVzY3JpcHRpb24oKQotewotICAgIC8vIEl0J3MgYSBiaXQgbGFtZSB0byBkZXRlY3QgdGhlIHBs
dWdpbiB2ZXJzaW9uIGJ5IHBhcnNpbmcgaXQKLSAgICAvLyBmcm9tIHRoZSBwbHVnaW4gZGVzY3Jp
cHRpb24gc3RyaW5nLCBidXQgaXQgZG9lc24ndCBzZWVtIHRoYXQKLSAgICAvLyB2ZXJzaW9uIGlu
Zm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBhbnkgc3RhbmRhcmRpemVkIHdheSBhdAotICAgIC8v
IHRoZSBtb2R1bGUgbGV2ZWwsIGxpa2UgaW4gV2luZG93cwotCi0gICAgaWYgKG1fZGVzY3JpcHRp
b24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kZXNjcmlwdGlvbi5z
dGFydHNXaXRoKCJTaG9ja3dhdmUgRmxhc2giKSAmJiBtX2Rlc2NyaXB0aW9uLmxlbmd0aCgpID49
IDE5KSB7Ci0gICAgICAgIC8vIFRoZSBmbGFzaCB2ZXJzaW9uIGFzIGEgUGxhdGZvcm1Nb2R1bGVW
ZXJzaW9uIGRpZmZlcnMgb24gVW5peCBmcm9tIFdpbmRvd3MKLSAgICAgICAgLy8gc2luY2UgdGhl
IHJldmlzaW9uIGNhbiBiZSBsYXJnZXIgdGhhbiBhIDggYml0cywgc28gd2UgYWxsb3cgaXQgMTYg
aGVyZSBhbmQKLSAgICAgICAgLy8gcHVzaCB0aGUgbWFqb3IvbWlub3IgdXAgOCBiaXRzLiBUaHVz
IG9uIFVuaXgsIEZsYXNoJ3MgdmVyc2lvbiBtYXkgYmUKLSAgICAgICAgLy8gMHgwYTAwMDAwMCBp
bnN0ZWFkIG9mIDB4MDAwYTAwMDAuCi0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdmVyc2lvblBh
cnRzOwotICAgICAgICBtX2Rlc2NyaXB0aW9uLnN1YnN0cmluZygxNikuc3BsaXQoJyAnLCAvKmFs
bG93RW1wdHlFbnRyaWVzID0qLyBmYWxzZSwgdmVyc2lvblBhcnRzKTsKLSAgICAgICAgaWYgKHZl
cnNpb25QYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KHZlcnNpb25QYXJ0cy5zaXplKCkgPj0gMSkgewotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4g
bWFqb3JNaW5vclBhcnRzOwotICAgICAgICAgICAgdmVyc2lvblBhcnRzWzBdLnNwbGl0KCcuJywg
bWFqb3JNaW5vclBhcnRzKTsKLSAgICAgICAgICAgIGlmIChtYWpvck1pbm9yUGFydHMuc2l6ZSgp
ID49IDEpIHsKLSAgICAgICAgICAgICAgICBib29sIGNvbnZlcnRlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG1ham9yID0gbWFqb3JNaW5vclBhcnRzWzBdLnRvVUludCgmY29u
dmVydGVkKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udmVydGVkKQotICAgICAgICAgICAgICAg
ICAgICBtX21vZHVsZVZlcnNpb24gPSAobWFqb3IgJiAweGZmKSA8PCAyNDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChtYWpvck1pbm9yUGFydHMuc2l6ZSgpID09IDIpIHsKLSAgICAg
ICAgICAgICAgICBib29sIGNvbnZlcnRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG1pbm9yID0gbWFqb3JNaW5vclBhcnRzWzFdLnRvVUludCgmY29udmVydGVkKTsKLSAgICAg
ICAgICAgICAgICBpZiAoY29udmVydGVkKQotICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZl
cnNpb24gfD0gKG1pbm9yICYgMHhmZikgPDwgMTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAodmVyc2lvblBhcnRzLnNpemUoKSA+PSAyKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgcmV2aXNpb24gPSB2ZXJzaW9uUGFydHNbMV07Ci0gICAgICAgICAgICBpZiAocmV2aXNp
b24ubGVuZ3RoKCkgPiAxICYmIChyZXZpc2lvblswXSA9PSAncicgfHwgcmV2aXNpb25bMF0gPT0g
J2InKSkgewotICAgICAgICAgICAgICAgIHJldmlzaW9uLnJlbW92ZSgwLCAxKTsKLSAgICAgICAg
ICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0gcmV2aXNpb24udG9JbnQoKSAmIDB4ZmZmZjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi1zdGF0aWMgdm9pZCBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVuc2lnbmVkIGFyZ0Nv
dW50LCBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0LCBKU0M6Ok1hcmtlZEFy
Z3VtZW50QnVmZmVyJiBhTGlzdCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJn
Q291bnQ7ICsraSkKLSAgICAgICAgYUxpc3QuYXBwZW5kKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRO
UFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZhcmdzW2ldLCByb290T2JqZWN0KSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgSlNDOjpTb3VyY2VDb2RlIG1ha2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2Us
IGNvbnN0IFN0cmluZyYgdXJsID0gU3RyaW5nKCksIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQ
b3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKCkpCi17Ci0gICAgcmV0dXJu
IEpTQzo6U291cmNlQ29kZShKU0M6OlN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNl
LCB1cmwsIHN0YXJ0UG9zaXRpb24pLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgp
LCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpOwotfQotCi1zdGF0aWMgYm9v
bCBOUE5fRXZhbHVhdGUoTlBQIGluc3RhbmNlLCBOUE9iamVjdCogbywgTlBTdHJpbmcqIHMsIE5Q
VmFyaWFudCogdmFyaWFudCkKLXsKLSAgICBpZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0
Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2Fz
dDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7Ci0KLSAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2Jq
ZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgLy8gVGhlcmUgaXMgYSBjcmFzaCBpbiBGbGFzaCB3aGVuIGV2YWx1YXRpbmcg
YSBzY3JpcHQgdGhhdCBkZXN0cm95cyB0aGUKLSAgICAgICAgLy8gUGx1Z2luVmlldywgc28gd2Ug
ZGVzdHJveSBpdCBhc3luY2hyb25vdXNseS4KLSAgICAgICAgUGx1Z2luVmlldzo6a2VlcEFsaXZl
KGluc3RhbmNlKTsKLQotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0gICAgICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBKU0M6OkJpbmRpbmdz
Ojpjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwotCi0gICAgICAgIEpTQzo6SlNWYWx1ZSByZXR1
cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7Ci0KLSAg
ICAgICAgSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmV0dXJu
VmFsdWUsIHZhcmlhbnQpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBWT0lEX1RPX05QVkFSSUFOVCgqdmFyaWFudCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBOUE5fSW52b2tlKE5QUCBucHAs
IE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBh
cmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKG8t
Pl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmpl
Y3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOwotCi0gICAg
ICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4obWV0aG9k
TmFtZSk7Ci0gICAgICAgIGlmICghaS0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlICJldmFsIiBtZXRob2QuCi0gICAg
ICAgIGlmIChtZXRob2ROYW1lID09IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcigiZXZhbCIpKSB7
Ci0gICAgICAgICAgICBpZiAoYXJnQ291bnQgIT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYXJnc1swXS50eXBlICE9IE5QVmFyaWFudFR5cGVfU3Ry
aW5nKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpOUE5fRXZhbHVhdGUobnBwLCBvLCBjb25zdF9jYXN0PE5QU3RyaW5nKj4oJmFyZ3Nb
MF0udmFsdWUuc3RyaW5nVmFsdWUpLCByZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
TG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290
T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RP
YmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwotICAgICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcC0+Z2V0KGV4ZWMsIEpT
Qzo6QmluZGluZ3M6OmlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygp
KSk7Ci0gICAgICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIEpTQzo6Q2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwotICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Ci0gICAgICAgIGdldExpc3RGcm9tVmFyaWFu
dEFyZ3MoZXhlYywgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3QpOwotICAgICAg
ICBKU0M6OkpTVmFsdWUgcmVzdWx0ViA9IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBvYmotPmltcCwgYXJnTGlzdCk7Ci0KLSAgICAgICAgLy8gQ29udmVydCBh
bmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCi0gICAgICAgIEpTQzo6
QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7
Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChvLT5fY2xhc3MtPmludm9rZSkKLSAgICAgICAgcmV0dXJuIG8tPl9j
bGFzcy0+aW52b2tlKG8sIG1ldGhvZE5hbWUsIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOwotCi0g
ICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgUGx1Z2luUGFja2FnZTo6aW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpCi17Ci0gICAgbWVtc2V0
KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6ZW9mKG1fYnJvd3NlckZ1bmNzKSk7Ci0gICAgbV9icm93
c2VyRnVuY3Muc2l6ZSA9IHNpemVvZihtX2Jyb3dzZXJGdW5jcyk7Ci0gICAgbV9icm93c2VyRnVu
Y3MudmVyc2lvbiA9IE5QVmVyc2lvbigpOwotCi0gICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0g
TlBOX0dldFVSTDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7Ci0g
ICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7Ci0gICAgbV9i
cm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKLSAgICBtX2Jyb3dzZXJGdW5j
cy53cml0ZSA9IE5QTl9Xcml0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0g
TlBOX0Rlc3Ryb3lTdHJlYW07Ci0gICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1
czsKLSAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OwotICAgIG1fYnJv
d3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOwotICAgIG1fYnJvd3NlckZ1bmNzLm1l
bWZyZWUgPSBOUE5fTWVtRnJlZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9N
ZW1GbHVzaDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBs
dWdpbnM7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlm
eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7
Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7Ci0gICAgbV9icm93
c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52
YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52
YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9uOwotICAgIG1fYnJvd3NlckZ1bmNz
LmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldEph
dmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9
IE5QTl9HZXRKYXZhUGVlcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0
YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MucG9w
cG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5wbHVnaW50aHJlYWRhc3luY2NhbGwgPSBOUE5fUGx1Z2luVGhyZWFkQXN5bmND
YWxsOwotCi0gICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVs
ZWFzZVZhcmlhbnRWYWx1ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVy
ID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmlu
Z2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOwotICAgIG1fYnJv
d3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOwot
ICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVu
dGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRG
cm9tSWRlbnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0Ny
ZWF0ZU9iamVjdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFp
bk9iamVjdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNl
T2JqZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IFdlYkNvcmU6Ok5QTl9JbnZva2U7
Ci0gICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZTsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7Ci0gICAgbV9i
cm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OwotICAgIG1fYnJvd3Nl
ckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzUHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVu
Y3MuaGFzbWV0aG9kID0gX05QTl9IYXNNZXRob2Q7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0ZXhj
ZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247Ci0gICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRl
ID0gX05QTl9FbnVtZXJhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MuY29uc3RydWN0ID0gX05QTl9D
b25zdHJ1Y3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWVmb3J1cmwgPSBOUE5fR2V0VmFs
dWVGb3JVUkw7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWVmb3J1cmwgPSBOUE5fU2V0VmFs
dWVGb3JVUkw7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0YXV0aGVudGljYXRpb25pbmZvID0gTlBO
X0dldEF1dGhlbnRpY2F0aW9uSW5mbzsKLQotICAgIG1fYnJvd3NlckZ1bmNzLnBvcHVwY29udGV4
dG1lbnUgPSBOUE5fUG9wVXBDb250ZXh0TWVudTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLQotI2lmIEVOQUJMRShQTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCkK
LXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAotewotICAgIHN0cnVjdCBIYXNo
Q29kZXMgewotICAgICAgICB1bnNpZ25lZCBoYXNoOwotICAgICAgICB0aW1lX3QgbW9kaWZpZWRE
YXRlOwotICAgIH0gaGFzaENvZGVzOwotCi0gICAgaGFzaENvZGVzLmhhc2ggPSBtX3BhdGguaW1w
bCgpLT5oYXNoKCk7Ci0gICAgaGFzaENvZGVzLm1vZGlmaWVkRGF0ZSA9IG1fbGFzdE1vZGlmaWVk
OwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVz
KT4oJmhhc2hDb2Rlcyk7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1
Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikKLXsKLSAgICByZXR1cm4gYS5t
X2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKLX0KLSNlbmRpZgotCi1pbnQgUGx1Z2lu
UGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYg
Y29tcGFyZVZlcnNpb24pIGNvbnN0Ci17Ci0gICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBs
dWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KLSAg
ICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKG1fbW9k
dWxlVmVyc2lvbi5tb3N0U2lnICE9IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcpCi0gICAgICAgIHJl
dHVybiBtX21vZHVsZVZlcnNpb24ubW9zdFNpZyA+IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcgPyAx
IDogLTE7Ci0gICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyAhPSBjb21wYXJlVmVyc2lv
bi5sZWFzdFNpZykKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA+IGNv
bXBhcmVWZXJzaW9uLmxlYXN0U2lnID8gMSA6IC0xOwotI2Vsc2UgICAgCi0gICAgaWYgKG1fbW9k
dWxlVmVyc2lvbiAhPSBjb21wYXJlVmVyc2lvbikKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVy
c2lvbiA+IGNvbXBhcmVWZXJzaW9uID8gMSA6IC0xOwotI2VuZGlmCi0KLSAgICByZXR1cm4gMDsK
LX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi1ib29sIFBs
dWdpblBhY2thZ2U6OmVuc3VyZVBsdWdpbkxvYWRlZCgpCi17Ci0gICAgaWYgKCFtX2luZm9Jc0Zy
b21DYWNoZSkKLSAgICAgICAgcmV0dXJuIG1faXNMb2FkZWQ7Ci0KLSAgICBtX3F1aXJrcyA9IFBs
dWdpblF1aXJrU2V0KCk7Ci0gICAgbV9uYW1lID0gU3RyaW5nKCk7Ci0gICAgbV9kZXNjcmlwdGlv
biA9IFN0cmluZygpOwotICAgIG1fZnVsbE1JTUVEZXNjcmlwdGlvbiA9IFN0cmluZygpOwotICAg
IG1fbW9kdWxlVmVyc2lvbiA9IDA7Ci0KLSAgICByZXR1cm4gZmV0Y2hJbmZvKCk7Ci19Ci0jZW5k
aWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjgzNDA1NzY3OTdhYTZiYzgzMTc3MmJjM2I0ZjljY2Y4Y2M4YmE2
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFBsdWdpblBhY2thZ2VfaAotI2RlZmluZSBQbHVnaW5QYWNrYWdlX2gK
LQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgot
I2luY2x1ZGUgIlRpbWVyLmgiCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5j
bHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4g
PiBNSU1FVG9FeHRlbnNpb25zTWFwOwotCi0gICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5QbHVn
aW5QYWNrYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IGNy
ZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmll
ZCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gY3JlYXRlUGFja2FnZUZyb21DYWNoZShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURl
c2NyaXB0aW9uKTsKLSNlbmRpZgotCi0gICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIHBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0KLSAgICAgICAgY29uc3QgU3RyaW5n
JiBwYXJlbnREaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudERpcmVjdG9yeTsgfQot
ICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZTsg
fQotICAgICAgICB1aW50MTZfdCBOUFZlcnNpb24oKSBjb25zdDsKLSAgICAgICAgdGltZV90IGxh
c3RNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE1vZGlmaWVkOyB9Ci0KLSAgICAgICAg
Y29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7
IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsgfQotICAgICAgICBjb25zdCBNSU1FVG9FeHRl
bnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRl
bnNpb25zOyB9Ci0KLSAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdl
JiBiKTsKLQotICAgICAgICBib29sIGxvYWQoKTsKLSAgICAgICAgdm9pZCB1bmxvYWQoKTsKLSAg
ICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLQotICAgICAgICBib29sIGlzRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNFbmFibGVkOyB9Ci0gICAgICAgIHZvaWQgc2V0RW5h
YmxlZChib29sKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBj
b25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdp
bkZ1bmNzOyB9Ci0jZW5kaWYKLSAgICAgICAgaW50IGNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQ
bGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25zdDsKLSAgICAgICAgaW50IGNvbXBhcmUoY29uc3Qg
UGx1Z2luUGFja2FnZSYpIGNvbnN0OwotICAgICAgICBQbHVnaW5RdWlya1NldCBxdWlya3MoKSBj
b25zdCB7IHJldHVybiBtX3F1aXJrczsgfQotICAgICAgICBjb25zdCBQbGF0Zm9ybU1vZHVsZVZl
cnNpb24mIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZVZlcnNpb247IH0KLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIGJvb2wgZW5z
dXJlUGx1Z2luTG9hZGVkKCk7Ci0gICAgICAgIHZvaWQgc2V0TUlNRURlc2NyaXB0aW9uKGNvbnN0
IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsKLSAgICAgICAgU3RyaW5nIGZ1bGxNSU1FRGVzY3Jp
cHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1bGxNSU1FRGVzY3JpcHRpb247fQotI2VuZGlmCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBib29sIGZldGNoSW5mbygpOwot
ICAgICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKLSAgICAgICAgdm9pZCBkZXRlcm1p
bmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0KLSAgICAgICAgdm9pZCBkZXRlcm1p
bmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6
ZUJyb3dzZXJGdW5jcygpOwotCi0gICAgICAgIGJvb2wgbV9pc0VuYWJsZWQ7Ci0gICAgICAgIGJv
b2wgbV9pc0xvYWRlZDsKLSAgICAgICAgaW50IG1fbG9hZENvdW50OwotCi0gICAgICAgIFN0cmlu
ZyBtX2Rlc2NyaXB0aW9uOwotICAgICAgICBTdHJpbmcgbV9wYXRoOwotICAgICAgICBTdHJpbmcg
bV9maWxlTmFtZTsKLSAgICAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgU3RyaW5nIG1fcGFy
ZW50RGlyZWN0b3J5OwotCi0gICAgICAgIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBtX21vZHVsZVZl
cnNpb247Ci0KLSAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRp
b25zOwotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKLQot
ICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtX21vZHVsZTsKLSAgICAgICAgdGltZV90IG1fbGFzdE1v
ZGlmaWVkOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QUF9T
aHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247Ci0gICAgICAgIE5QUGx1Z2luRnVuY3MgbV9w
bHVnaW5GdW5jczsKLSAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOwotI2Vu
ZGlmCi0KLSAgICAgICAgdm9pZCBmcmVlTGlicmFyeVNvb24oKTsKLSAgICAgICAgdm9pZCBmcmVl
TGlicmFyeVRpbWVyRmlyZWQoKTsKLSAgICAgICAgVGltZXIgbV9mcmVlTGlicmFyeVRpbWVyOwot
Ci0gICAgICAgIFBsdWdpblF1aXJrU2V0IG1fcXVpcmtzOwotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIFN0cmluZyBtX2Z1bGxNSU1FRGVzY3JpcHRp
b247Ci0gICAgICAgIGJvb2wgbV9pbmZvSXNGcm9tQ2FjaGU7Ci0jZW5kaWYKLSAgICB9OwotCi0g
ICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGJlY2F1c2UgUGx1Z2luUGFja2FnZUhh
c2ggaXMgYnJva2VuIGFuZCBtYXkgY29uc2lkZXIga2V5cyB3aXRoIGRpZmZlcmVudCBoYXNoZXMg
YXMgZXF1YWwuCi0gICAgc3RydWN0IFBsdWdpblBhY2thZ2VIYXNoVHJhaXRzIDogSGFzaFRyYWl0
czxSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
aW11bVRhYmxlU2l6ZSA9IDY0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhh
c2ggewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCB1aW50cHRyX3Qga2V5KSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0K
LSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+
JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgdWludHB0cl90IGEsIGNvbnN0IHVpbnRwdHJfdCBiKSB7IHJldHVybiBlcXVhbChy
ZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVn
aW5QYWNrYWdlKj4oYikpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0
cjxQbHVnaW5QYWNrYWdlPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJl
dHVybiBQbHVnaW5QYWNrYWdlOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7
Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDlhMzM4M2RiYjQ0NjkwOTk0MDdkNmJkYTEyM2QxMDFkY2I1ZDM4NC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblF1aXJrU2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luUXVp
cmtTZXRfaAotI2RlZmluZSBQbHVnaW5RdWlya1NldF9oCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0gICAgZW51bSBQbHVnaW5RdWlyayB7Ci0gICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3pp
bGxhVXNlckFnZW50ID0gMSA8PCAwLAotICAgICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRX
aW5kb3dDYWxsID0gMSA8PCAxLAotICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0
ZSA9IDEgPDwgMiwgCi0gICAgICAgIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFy
YW0gPSAxIDw8IDMsCi0gICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVz
c2FnZXMgPSAxIDw8IDQsCi0gICAgICAgIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEg
PDwgNSwKLSAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJl
Y3Vyc2l2ZWx5ID0gMSA8PCA2LAotICAgICAgICBQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxv
b3AgPSAxIDw8IDcsCi0gICAgICAgIFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcgPSAxIDw8
IDgsCi0gICAgICAgIFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyA9
IDEgPDwgOSwKLSAgICAgICAgUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVz
dHJveSA9IDEgPDwgMTAsCi0gICAgICAgIFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0
YW5jZXMgPSAxIDw8IDExLAotICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCA9
IDEgPDwgMTIsCi0gICAgICAgIFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgg
PSAxIDw8IDEzLAotICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsU2V0V2luZG93TW9yZVRoYW5P
bmNlID0gMSA8PCAxNCwKLSAgICAgICAgUGx1Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5k
b3dsZXNzTW9kZSA9IDEgPDwgMTUsCi0gICAgICAgIFBsdWdpblF1aXJrV2FudHNDaHJvbWVVc2Vy
QWdlbnQgPSAxIDw8IDE2Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblF1aXJrU2V0IHsKLSAg
ICAgICAgcHVibGljOgotICAgICAgICAgICAgUGx1Z2luUXVpcmtTZXQoKSA6IG1fcXVpcmtzKDAp
IHsgfQotICAgICAgICAgICAgdm9pZCBhZGQoUGx1Z2luUXVpcmsgcXVpcmspIHsgbV9xdWlya3Mg
fD0gcXVpcms7IH0KLSAgICAgICAgICAgIGJvb2wgY29udGFpbnMoUGx1Z2luUXVpcmsgcXVpcmsp
IGNvbnN0IHsgcmV0dXJuIG1fcXVpcmtzICYgcXVpcms7IH0KLSAgICAgICAgcHJpdmF0ZToKLSAg
ICAgICAgICAgIHVuc2lnbmVkIG1fcXVpcmtzOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFBsdWdpblF1aXJrU2V0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luU3RyZWFtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzliOWIxMjBm
MWY0MjBjNmI0YTdjNmJmZjAwNzYzMzAwYjU1ODI0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVh
bS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0ODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luU3RyZWFtLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNp
bmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLS8v
IFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2UgdG8gcmV0dXJuIC0xIHRv
IGluZGljYXRlIGVycm9yCi0vLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3QgY2xhc2ggd2l0aCB0aGVt
Lgotc3RhdGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7Ci0KLXVzaW5nIHN0ZDo6bWF4
OwotdXNpbmcgc3RkOjptaW47Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNo
TWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7Ci1zdGF0aWMgU3RyZWFtTWFwJiBzdHJlYW1z
KCkKLXsKLSAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7Ci0gICAgcmV0dXJuIHN0
YXRpY1N0cmVhbXM7Ci19Ci0KLVBsdWdpblN0cmVhbTo6UGx1Z2luU3RyZWFtKFBsdWdpblN0cmVh
bUNsaWVudCogY2xpZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNv
bnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzLCBOUFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdp
blF1aXJrU2V0JiBxdWlya3MpCi0gICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVl
c3QpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwg
bV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCi0gICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5v
dGlmaWNhdGlvbikKLSAgICAsIG1fc3RyZWFtU3RhdGUoU3RyZWFtQmVmb3JlU3RhcnRlZCkKLSAg
ICAsIG1fbG9hZE1hbnVhbGx5KGZhbHNlKQotICAgICwgbV9kZWxheURlbGl2ZXJ5VGltZXIoKnRo
aXMsICZQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKQotICAgICwgbV90ZW1w
RmlsZUhhbmRsZShpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQotICAgICwgbV9wbHVnaW5GdW5j
cyhwbHVnaW5GdW5jcykKLSAgICAsIG1faW5zdGFuY2UoaW5zdGFuY2UpCi0gICAgLCBtX3F1aXJr
cyhxdWlya3MpCi17Ci0gICAgQVNTRVJUKG1faW5zdGFuY2UpOwotCi0gICAgbV9zdHJlYW0udXJs
ID0gMDsKLSAgICBtX3N0cmVhbS5uZGF0YSA9IDA7Ci0gICAgbV9zdHJlYW0ucGRhdGEgPSAwOwot
ICAgIG1fc3RyZWFtLmVuZCA9IDA7Ci0gICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9IDA7Ci0gICAg
bV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKLSAgICBtX3N0cmVhbS5oZWFkZXJzID0gMDsKLQot
ICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsKLX0KLQotUGx1Z2luU3Ry
ZWFtOjp+UGx1Z2luU3RyZWFtKCkKLXsKLSAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJl
YW1TdGFydGVkKTsKLSAgICBBU1NFUlQoIW1fbG9hZGVyKTsKLQotICAgIGZhc3RGcmVlKChjaGFy
KiltX3N0cmVhbS51cmwpOwotCi0gICAgc3RyZWFtcygpLnJlbW92ZSgmbV9zdHJlYW0pOwotfQot
Ci12b2lkIFBsdWdpblN0cmVhbTo6c3RhcnQoKQotewotICAgIEFTU0VSVCghbV9sb2FkTWFudWFs
bHkpOwotICAgIG1fbG9hZGVyID0gcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlUGx1
Z2luU3RyZWFtTG9hZChtX2ZyYW1lLCB0aGlzLCBtX3Jlc291cmNlUmVxdWVzdCk7Ci19Ci0KLXZv
aWQgUGx1Z2luU3RyZWFtOjpzdG9wKCkKLXsKLSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3Rv
cHBlZDsKLQotICAgIGlmIChtX2xvYWRNYW51YWxseSkgewotICAgICAgICBBU1NFUlQoIW1fbG9h
ZGVyKTsKLQotICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1l
LT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpOwotICAgICAgICBBU1NFUlQoZG9jdW1l
bnRMb2FkZXIpOwotCi0gICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFpblJl
c291cmNlKCkpCi0gICAgICAgICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2VsTWFpblJlc291cmNl
TG9hZChtX2ZyYW1lLT5sb2FkZXIoKS5jYW5jZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkp
OwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9sb2FkZXIpIHsKLSAgICAg
ICAgbV9sb2FkZXItPmNhbmNlbCgpOwotICAgICAgICBtX2xvYWRlciA9IDA7Ci0gICAgfQotCi0g
ICAgbV9jbGllbnQgPSAwOwotfQotCi1zdGF0aWMgdWludDMyX3QgbGFzdE1vZGlmaWVkRGF0ZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBkb3VibGUgbGFzdE1vZGlm
aWVkID0gcmVzcG9uc2UubGFzdE1vZGlmaWVkKCk7Ci0gICAgaWYgKCFzdGQ6OmlzZmluaXRlKGxh
c3RNb2RpZmllZCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGxhc3RNb2RpZmll
ZCAqIDEwMDA7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCi17Ci0gICAg
QVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7Ci0KLSAgICBjb25z
dCBVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNvdXJjZVJlc3BvbnNlLnVybCgpOwotCi0gICAgLy8g
U29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBwYXNz
ZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMgdGhlCi0gICAgLy8gZm9ybWF0IHVzZWQgd2hlbiBy
ZXF1ZXN0aW5nIHRoZSBVUkwuCi0gICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KHJlc3BvbnNl
VVJMKSkKLSAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChkZWNvZGVVUkxFc2NhcGVT
ZXF1ZW5jZXMocmVzcG9uc2VVUkwuc3RyaW5nKCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UK
LSAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChyZXNwb25zZVVSTC5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIENTdHJpbmcgbWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVz
cG9uc2UubWltZVR5cGUoKS51dGY4KCk7Ci0KLSAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50
TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotCi0g
ICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgewotICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIFN0cmluZyBzZXBhcmF0b3IgPSBBU0NJSUxpdGVy
YWwoIjogIik7Ci0KLSAgICAgICAgU3RyaW5nIHN0YXR1c0xpbmUgPSAiSFRUUCAiICsgU3RyaW5n
OjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpICsgIiBPS1xuIjsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RhdHVzTGluZSk7Ci0KLSAgICAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZHMoKS5lbmQoKTsKLSAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+a2V5KTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOwotICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2hlYWRl
cnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOwotCi0gICAgICAgIC8vIElmIHRo
ZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNzZWQpLCB0aGVuIGRvbid0
IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAotICAgICAgICAvLyB3aGljaCBpcyBvbmx5
IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0IGtub3duIGF0IHRoZSBt
b21lbnQuCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NDcwNTk5PiB0cmFja3MgYSByZXF1
ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXSB0byBpbmNvcnBv
cmF0ZSB0aGlzIGxvZ2ljLgotICAgICAgICBTdHJpbmcgY29udGVudEVuY29kaW5nID0gbV9yZXNv
dXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudEVuY29k
aW5nKTsKLSAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVu
Y29kaW5nICE9ICJpZGVudGl0eSIpCi0gICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGgg
PSAtMTsKLSAgICB9Ci0KLSAgICBtX3N0cmVhbS5oZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsK
LSAgICBtX3N0cmVhbS5wZGF0YSA9IDA7Ci0gICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOwotICAg
IG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3RlZENvbnRlbnRMZW5ndGgsIDBMTCk7Ci0gICAgbV9z
dHJlYW0ubGFzdG1vZGlmaWVkID0gbGFzdE1vZGlmaWVkRGF0ZShtX3Jlc291cmNlUmVzcG9uc2Up
OwotICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7Ci0KLSAgICBtX3RyYW5z
ZmVyTW9kZSA9IE5QX05PUk1BTDsKLSAgICBtX29mZnNldCA9IDA7Ci0gICAgbV9yZWFzb24gPSBX
ZWJSZWFzb25Ob25lOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFtIGlmIGRlc3Ryb3lzdHJl
YW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFuZGxlcgotICAgIFJlZlB0
cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAvLyBjYWxsaW5nIGludG8gYSBw
bHVnLWluIGNvdWxkIHJlc3VsdCBpbiByZS1lbnRyYW5jZSBpZiB0aGUgcGx1Zy1pbiB5aWVsZHMK
LSAgICAvLyBjb250cm9sIHRvIHRoZSBzeXN0ZW0gKHJkYXI6Ly81NzQ0ODk5KS4gcHJldmVudCB0
aGlzIGJ5IGRlZmVycmluZyBmdXJ0aGVyCi0gICAgLy8gbG9hZGluZyB3aGlsZSBjYWxsaW5nIGlu
dG8gdGhlIHBsdWctaW4uCi0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0
RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+
bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVUeXBlKW1pbWVUeXBlU3RyLmRhdGEoKSwgJm1f
c3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAg
ICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKLSAgICAKLSAgICAvLyBJZiB0
aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwgdG8gbmV3c3RyZWFtIHdlIHJldHVy
bgotICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQotICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICBjYW5j
ZWxBbmREZXN0cm95U3RyZWFtKG5wRXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFydGVkOwotCi0gICAgaWYgKG1fdHJhbnNmZXJNb2Rl
ID09IE5QX05PUk1BTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXRoID0gb3BlblRlbXBv
cmFyeUZpbGUoIldLUCIsIG1fdGVtcEZpbGVIYW5kbGUpOwotCi0gICAgLy8gU29tZXRoaW5nIHdl
bnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRoZSBzdHJlYW0KLSAgICBpZiAoIWlzSGFuZGxlVmFs
aWQobV90ZW1wRmlsZUhhbmRsZSkpCi0gICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBS
RVNfTkVUV09SS19FUlIpOwotfQotCi1OUFAgUGx1Z2luU3RyZWFtOjpvd25lckZvclN0cmVhbShO
UFN0cmVhbSogc3RyZWFtKQotewotICAgIHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0cmVhbSk7Ci19
Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uIHJl
YXNvbikKLXsKLSAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAg
ZGVzdHJveVN0cmVhbShyZWFzb24pOwotICAgIHN0b3AoKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJl
YW06OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQotewotICAgIG1fcmVhc29uID0gcmVh
c29uOwotICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05FKSB7Ci0gICAgICAgIC8vIFN0b3Ag
YW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVkCi0gICAgICAgIGlmIChtX2RlbGl2
ZXJ5RGF0YSkKLSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7Ci0gICAgfSBl
bHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgewot
ICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ry
b3kgdGhlIHN0cmVhbSBub3cuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZGVzdHJveVN0
cmVhbSgpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSgpCi17Ci0gICAg
aWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpOwotICAgIEFTU0VSVCghbV9kZWxp
dmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKTsKLQotICAgIGNsb3NlRmls
ZShtX3RlbXBGaWxlSGFuZGxlKTsKLQotICAgIGJvb2wgbmV3U3RyZWFtQ2FsbGVkID0gbV9zdHJl
YW0ubmRhdGE7Ci0KLSAgICAvLyBQcm90ZWN0IGZyb20gZGVzdHJ1Y3Rpb24gaWY6Ci0gICAgLy8g
IE5QTl9EZXN0cm95U3RyZWFtIGlzIGNhbGxlZCBmcm9tIE5QUF9OZXdTdHJlYW0gb3IKLSAgICAv
LyAgUGx1Z2luU3RyZWFtQ2xpZW50OjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkgcmVtb3ZlcyB0
aGUgbGFzdCByZWZlcmVuY2UKLSAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMp
OwotCi0gICAgaWYgKG5ld1N0cmVhbUNhbGxlZCkgewotICAgICAgICBpZiAobV9yZWFzb24gPT0g
TlBSRVNfRE9ORSAmJiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJN
b2RlID09IE5QX0FTRklMRU9OTFkpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fcGF0aC5pc051
bGwoKSk7Ci0KLSAgICAgICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgICAgICBtX2xv
YWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICAgICAgICAgIG1fcGx1Z2luRnVuY3Mt
PmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVm
ZXJzTG9hZGluZyhmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9zdHJlYW1TdGF0
ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKSB7Ci0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0g
ICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0KLSAgICAg
ICAgICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5z
dGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOwotCi0gICAgICAgICAgICBpZiAobV9sb2FkZXIp
Ci0gICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCi0g
ICAgICAgICAgICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0
cmVhbS5uZGF0YSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fc2VuZE5vdGlmaWNhdGlvbikgewot
ICAgICAgICAvLyBGbGFzaCA5IGNhbiBkZXJlZmVyZW5jZSBudWxsIGlmIHdlIGNhbGwgTlBQX1VS
TE5vdGlmeSB3aXRob3V0IGZpcnN0IGNhbGxpbmcgTlBQX05ld1N0cmVhbQotICAgICAgICAvLyBm
b3IgcmVxdWVzdHMgbWFkZSB3aXRoIE5QTl9Qb3N0VVJMTm90aWZ5OyBzZWUgPHJkYXI6Ly81NTg4
ODA3PgotICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVm
ZXJzTG9hZGluZyh0cnVlKTsKLSAgICAgICAgaWYgKCFuZXdTdHJlYW1DYWxsZWQgJiYgbV9xdWly
a3MuY29udGFpbnMoUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1ZykgJiYKLSAgICAgICAgICAg
IGVxdWFsSWdub3JpbmdDYXNlKG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIlBPU1Qi
KSkgewotICAgICAgICAgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7Ci0gICAgICAgICAg
ICBtX3N0cmVhbS51cmwgPSAiIjsKLSAgICAgICAgICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBt
X25vdGlmeURhdGE7Ci0KLSAgICAgICAgICAgIHN0YXRpYyBjaGFyIGVtcHR5TWltZVR5cGVbXSA9
ICIiOwotICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIGVt
cHR5TWltZVR5cGUsICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVyTW9kZSk7Ci0gICAgICAg
ICAgICBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwg
bV9yZWFzb24pOwotCi0gICAgICAgICAgICAvLyBpbiBzdWNjZXNzZnVsIHJlcXVlc3RzLCB0aGUg
VVJMIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgZnJlZWQgaW4gb3VyCi0gICAgICAgICAg
ICAvLyBkZXN0cnVjdG9yLCBzbyByZXNldCBpdCB0byAwCi0gICAgICAgICAgICBtX3N0cmVhbS51
cmwgPSAwOwotICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2luRnVuY3MtPnVybG5vdGlmeShtX2lu
c3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBt
X3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKLSAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAg
ICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotICAgIH0KLQotICAgIG1fc3Ry
ZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOwotCi0gICAgaWYgKCFtX2xvYWRNYW51YWxseSAmJiBt
X2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnN0cmVhbURpZEZpbmlzaExvYWRpbmcodGhpcyk7
Ci0KLSAgICBpZiAoIW1fcGF0aC5pc051bGwoKSkKLSAgICAgICAgZGVsZXRlRmlsZShtX3BhdGgp
OwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoKQotewot
ICAgIGRlbGl2ZXJEYXRhKCk7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YSgp
Ci17Ci0gICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRhKTsKLSAgICAKLSAgICBpZiAobV9zdHJlYW1T
dGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNhbmNl
bCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJjZUxvYWRlciBvbiBlcnJvciBzbyB3ZSBkb24ndCBy
ZWFjaCB0aGlzIGNhc2UKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fc3RyZWFtU3Rh
dGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7Ci0KLSAgICBpZiAoIW1fc3RyZWFtLm5kYXRhIHx8
IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50
MzJfdCB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKLSAgICBpbnQzMl90IHRv
dGFsQnl0ZXNEZWxpdmVyZWQgPSAwOwotCi0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xv
YWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2
ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKLSAgICAgICAgaW50MzJfdCBkZWxpdmVyeUJ5dGVzID0gbV9w
bHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9zdHJlYW0pOwotCi0gICAgICAg
IGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKLSAgICAgICAgICAgIG1fZGVsYXlEZWxpdmVyeVRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCB0b3RhbEJ5
dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7Ci0gICAgICAgICAgICBpbnQzMl90IGRhdGFMZW5n
dGggPSBkZWxpdmVyeUJ5dGVzOwotICAgICAgICAgICAgY2hhciogZGF0YSA9IG1fZGVsaXZlcnlE
YXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkOwotCi0gICAgICAgICAgICAvLyBXcml0
ZSB0aGUgZGF0YQotICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndy
aXRlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9vZmZzZXQsIGRhdGFMZW5ndGgsICh2b2lkKilk
YXRhKTsKLSAgICAgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDwgMCkgewotICAgICAgICAgICAg
ICAgIExPR19QTFVHSU5fTkVUX0VSUk9SKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9hZGVy
KQotICAgICAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VS
Uik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCBkYXRhTGVuZ3RoKTsKLSAgICAgICAg
ICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0gICAgICAgICAgICB0b3RhbEJ5dGVzRGVs
aXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fbG9h
ZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0KLSAgICBp
ZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDApIHsKLSAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxp
dmVyZWQgPCB0b3RhbEJ5dGVzKSB7Ci0gICAgICAgICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0
b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZDsKLSAgICAgICAgICAgIG1lbW1vdmUobV9k
ZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNE
ZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsKLSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5y
ZXNpemUocmVtYWluaW5nQnl0ZXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9k
ZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKLSAgICAgICAgICAgIGlmIChtX3JlYXNvbiAhPSBXZWJS
ZWFzb25Ob25lKQotICAgICAgICAgICAgICAgIGRlc3Ryb3lTdHJlYW0oKTsKLSAgICAgICAgfQot
ICAgIH0gCi19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25z
dCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICBk
aWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9w
bGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwgIiIpKTsKLQotICAgIGlmIChtX3N0cmVhbVN0
YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0
U3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIGRpZFJlY2VpdmVEYXRhKDAsIHJlc3VsdFN0cmlu
Zy5kYXRhKCksIHJlc3VsdFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgIGlmIChtX3N0cmVhbVN0
YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9sb2FkZXIgPSAwOwotCi0gICAgZGVzdHJveVN0cmVhbShyZXN1bHRTdHJpbmcuaXNOdWxsKCkg
PyBOUFJFU19ORVRXT1JLX0VSUiA6IE5QUkVTX0RPTkUpOwotfQotCi12b2lkIFBsdWdpblN0cmVh
bTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVF9VTlVTRUQo
bG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09
IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOwotCi0gICAgbV9yZXNvdXJjZVJlc3BvbnNlID0gcmVzcG9u
c2U7Ci0KLSAgICBzdGFydFN0cmVhbSgpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkUmVj
ZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09
IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsK
LQotICAgIC8vIElmIHRoZSBwbHVnLWluIGNhbmNlbHMgdGhlIHN0cmVhbSBpbiBkZWxpdmVyRGF0
YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKLSAgICAvLyBzbyBwcm90ZWN0IGl0IGhlcmUuCi0gICAg
UmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGlmIChtX3RyYW5zZmVy
TW9kZSAhPSBOUF9BU0ZJTEVPTkxZKSB7Ci0gICAgICAgIGlmICghbV9kZWxpdmVyeURhdGEpCi0g
ICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPGNoYXI+
PigpOwotCi0gICAgICAgIGludCBvbGRTaXplID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKLSAg
ICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsKLSAgICAgICAg
bWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgpOwot
Ci0gICAgICAgIGRlbGl2ZXJEYXRhKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fc3RyZWFtU3RhdGUg
IT0gU3RyZWFtU3RvcHBlZCAmJiBpc0hhbmRsZVZhbGlkKG1fdGVtcEZpbGVIYW5kbGUpKSB7Ci0g
ICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSB3cml0ZVRvRmlsZShtX3RlbXBGaWxlSGFuZGxlLCBk
YXRhLCBsZW5ndGgpOwotICAgICAgICBpZiAoYnl0ZXNXcml0dGVuICE9IGxlbmd0aCkKLSAgICAg
ICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwotICAgIH0K
LX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChs
b2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0KLSAgICBMT0dfUExVR0lOX05FVF9FUlJPUigp
OwotCi0gICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0IGluIG91ciBiZWluZyBkZWxldGVk
Ci0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGRlc3Ryb3lT
dHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwotCi0gICAgbV9sb2FkZXIgPSAwOwotfQotCi12b2lk
IFBsdWdpblN0cmVhbTo6ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ciogbG9hZGVyKQotewotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2Fk
ZXIpOwotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0YXJ0ZWQpOwotCi0gICAg
Ly8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0IGluIG91ciBiZWluZyBkZWxldGVkCi0gICAgUmVm
UHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0oTlBS
RVNfRE9ORSk7Ci0KLSAgICBtX2xvYWRlciA9IDA7Ci19Ci0KLWJvb2wgUGx1Z2luU3RyZWFtOjp3
YW50c0FsbFN0cmVhbXMoKSBjb25zdAotewotICAgIGlmICghbV9wbHVnaW5GdW5jcy0+Z2V0dmFs
dWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAg
aWYgKG1fcGx1Z2luRnVuY3MtPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5XYW50c0Fs
bE5ldHdvcmtTdHJlYW1zLCAmcmVzdWx0KSAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc3VsdCAhPSAwOwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5TdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAw
MzJjNGMxOTA0NTEyMmY1NmFjZWY2MzJlNTc4MThhMTVhOWJjZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQ
bHVnaW5TdHJlYW1faAotI2RlZmluZSBQbHVnaW5TdHJlYW1faAotCi0jaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUXVpcmtTZXQuaCIKLSNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBQbHVnaW5TdHJlYW07Ci0K
LSAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRlIHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3RyZWFt
U3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9OwotCi0gICAgY2xhc3MgUGx1Z2luU3RyZWFtQ2xpZW50
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpblN0cmVhbUNsaWVudCgpIHt9
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKFBsdWdpblN0cmVh
bSopIHt9Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblN0cmVhbSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFBsdWdpblN0cmVhbT4sIHByaXZhdGUgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGll
bnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luU3RyZWFt
PiBjcmVhdGUoUGx1Z2luU3RyZWFtQ2xpZW50KiBjbGllbnQsIEZyYW1lKiBmcmFtZSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5v
dGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqIGZ1bmN0aW9ucywgTlBQIGluc3RhbmNlLCBj
b25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBsdWdpblN0cmVhbShjbGllbnQsIGZyYW1lLCByZXF1ZXN0LCBzZW5k
Tm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBmdW5jdGlvbnMsIGluc3RhbmNlLCBxdWlya3MpKTsK
LSAgICAgICAgfQotICAgICAgICB2aXJ0dWFsIH5QbHVnaW5TdHJlYW0oKTsKLSAgICAgICAgCi0g
ICAgICAgIHZvaWQgc3RhcnQoKTsKLSAgICAgICAgdm9pZCBzdG9wKCk7Ci0KLSAgICAgICAgdm9p
ZCBzdGFydFN0cmVhbSgpOwotCi0gICAgICAgIHZvaWQgc2V0TG9hZE1hbnVhbGx5KGJvb2wgbG9h
ZE1hbnVhbGx5KSB7IG1fbG9hZE1hbnVhbGx5ID0gbG9hZE1hbnVhbGx5OyB9Ci0KLSAgICAgICAg
dm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdU
Rjo6Q1N0cmluZyYgcmVzdWx0U3RyaW5nKTsKLSAgICAgICAgdm9pZCBjYW5jZWxBbmREZXN0cm95
U3RyZWFtKE5QUmVhc29uKTsKLQotICAgICAgICBzdGF0aWMgTlBQIG93bmVyRm9yU3RyZWFtKE5Q
U3RyZWFtKik7Ci0KLSAgICAgICAgLy8gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgY2hh
ciosIGludCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciopOwotICAgICAgICB2
aXJ0dWFsIGJvb2wgd2FudHNBbGxTdHJlYW1zKCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBQbHVnaW5TdHJlYW0oUGx1Z2luU3RyZWFtQ2xpZW50KiwgRnJhbWUqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNv
bnN0IE5QUGx1Z2luRnVuY3MqLCBOUFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0Jik7
Ci0KLSAgICAgICAgdm9pZCBkZWxpdmVyRGF0YSgpOwotICAgICAgICB2b2lkIGRlc3Ryb3lTdHJl
YW0oTlBSZWFzb24pOwotICAgICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oKTsKLQotICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVlc3Q7Ci0gICAgICAgIFJlc291cmNlUmVzcG9u
c2UgbV9yZXNvdXJjZVJlc3BvbnNlOwotCi0gICAgICAgIFBsdWdpblN0cmVhbUNsaWVudCogbV9j
bGllbnQ7Ci0gICAgICAgIEZyYW1lKiBtX2ZyYW1lOwotICAgICAgICBSZWZQdHI8TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVyOwotICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7
Ci0gICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOwotICAgICAgICBQbHVnaW5TdHJlYW1T
dGF0ZSBtX3N0cmVhbVN0YXRlOwotICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5OwotCi0gICAg
ICAgIFRpbWVyIG1fZGVsYXlEZWxpdmVyeVRpbWVyOwotICAgICAgICB2b2lkIGRlbGF5RGVsaXZl
cnlUaW1lckZpcmVkKCk7Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxjaGFyPj4g
bV9kZWxpdmVyeURhdGE7Ci0KLSAgICAgICAgUGxhdGZvcm1GaWxlSGFuZGxlIG1fdGVtcEZpbGVI
YW5kbGU7Ci0KLSAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogbV9wbHVnaW5GdW5jczsKLSAg
ICAgICAgTlBQIG1faW5zdGFuY2U7Ci0gICAgICAgIHVpbnQxNl90IG1fdHJhbnNmZXJNb2RlOwot
ICAgICAgICBpbnQzMl90IG1fb2Zmc2V0OwotICAgICAgICBDU3RyaW5nIG1faGVhZGVyczsKLSAg
ICAgICAgU3RyaW5nIG1fcGF0aDsKLSAgICAgICAgTlBSZWFzb24gbV9yZWFzb247Ci0gICAgICAg
IE5QU3RyZWFtIG1fc3RyZWFtOwotICAgICAgICBQbHVnaW5RdWlya1NldCBtX3F1aXJrczsKLSAg
ICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjIyNWMw
NGNjMWVlNDFkNTYyZWRiZDkyMGM5ZDI5NzU4ZWU0ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0ODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJp
c2hAZm9yd2FyZGJpYXMuaW4+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0j
aW5jbHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ29v
a2llSmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5j
bHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBs
dWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJJ
bWFnZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93
LmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0j
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2lu
Y2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlLmgiCi0jaW5jbHVkZSAiUHJveHlTZXJ2ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIK
LSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2lu
Y2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCi0jaW5jbHVkZSAiV2hlZWxFdmVudC5oIgot
I2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xv
Y2suaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0jaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIgotI2VuZGlmCi0KLXVz
aW5nIEpTQzo6RXhlY1N0YXRlOwotdXNpbmcgSlNDOjpKU0xvY2s7Ci11c2luZyBKU0M6OkpTT2Jq
ZWN0OwotdXNpbmcgSlNDOjpKU1ZhbHVlOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0KLXVzaW5nIHN0ZDo6bWluOwotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBpbnQg
c19jYWxsaW5nUGx1Z2luOwotCi10eXBlZGVmIEhhc2hNYXA8TlBQLCBQbHVnaW5WaWV3Kj4gSW5z
dGFuY2VNYXA7Ci0KLXN0YXRpYyBJbnN0YW5jZU1hcCYgaW5zdGFuY2VNYXAoKQotewotICAgIHN0
YXRpYyBJbnN0YW5jZU1hcCYgbWFwID0gKm5ldyBJbnN0YW5jZU1hcDsKLSAgICByZXR1cm4gbWFw
OwotfQotCi1zdGF0aWMgU3RyaW5nIHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBV
UkwmIHVybCkKLXsKLSAgICBpZiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KHVybCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3Ry
aW5nCi0gICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vi
c3RyaW5nKDExKSk7Ci19Ci0KLVBsdWdpblZpZXcqIFBsdWdpblZpZXc6OnNfY3VycmVudFBsdWdp
blZpZXcgPSAwOwotCi12b2lkIFBsdWdpblZpZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgp
Ci17Ci0gICAgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci19Ci0KLUludFJlY3QgUGx1Z2luVmll
dzo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAotewotICAgIC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRv
IG91ciBib3VuZHMuCi0gICAgSW50UmVjdCBjbGlwUmVjdChtX3dpbmRvd1JlY3QpOwotICAgIAot
ICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5kIGdldCB0aGUgY2xpcCByZWN0IGZyb20gdGhlIGVu
Y2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmlldy4KLSAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcg
PSBtX2VsZW1lbnQtPmRvY3VtZW50KCkudmlldygpOwotICAgIGNsaXBSZWN0LmludGVyc2VjdChw
YXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZvckZyYW1lT3duZXIobV9lbGVtZW50LCB0cnVlKSk7
Ci0KLSAgICByZXR1cm4gY2xpcFJlY3Q7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS5wcmludGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocmVjdCAhPSBmcmFtZVJl
Y3QoKSkKLSAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZVJlY3QocmVjdCk7Ci0KLSAgICB1cGRhdGVQ
bHVnaW5XaWRnZXQoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgLy8gT24gV2luZG93cyBhbHdh
eXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdlb21ldHJ5LgotICAgIHNldE5QV2luZG93UmVjdChy
ZWN0KTsKLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAvLyBPbiBVbml4LCBtdWx0aXBsZSBj
YWxscyB0byBzZXROUFdpbmRvdygpIGluIHdpbmRvd2VkIG1vZGUgY2F1c2VzIEZsYXNoIHRvIGNy
YXNoCi0gICAgaWYgKG1fbW9kZSA9PSBOUF9GVUxMIHx8ICFtX2lzV2luZG93ZWQpCi0gICAgICAg
IHNldE5QV2luZG93UmVjdChyZWN0KTsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdpblZpZXc6OmZy
YW1lUmVjdHNDaGFuZ2VkKCkKLXsKLSAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQoKQotewotICAgIHVwZGF0ZVBsdWdpbldpZGdl
dCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKLXsK
LSAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gUHJvdGVjdCB0aGUgcGx1Zy1pbiBmcm9tIGRlbGV0aW9uIHdoaWxlIGRpc3BhdGNoaW5n
IHRoZSBldmVudC4KLSAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAg
IGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCi0gICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3Rh
dGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5
Ym9hcmRFdmVudCgpKQotICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnQqPihldmVudCkpOwotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotICAgIGVsc2Ug
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQotICAgICAgICBoYW5kbGVXaGVl
bEV2ZW50KHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCkpOwotI2VuZGlmCi0gICAgZWxz
ZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCkKLSAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7IC8vIFdlIGRvbid0IGtub3cgaWYgdGhl
IHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vkb3duIGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBjb250
ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQgV2ViS2l0IHRvIHNob3cgYSBkZWZhdWx0IG9uZS4K
LSNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZvY3Vzb3V0RXZlbnQpCi0g
ICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5mb2N1c2luRXZlbnQpCi0gICAgICAgIGhhbmRsZUZvY3VzSW5FdmVu
dCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW5pdCgpCi17Ci0gICAgaWYgKG1f
aGF2ZUluaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hhdmVJbml0aWFsaXpl
ZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fcGx1Z2luKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXR1
cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6aW5pdCgpOiBJbml0aWFsaXppbmcg
cGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlm
ICghbV9wbHVnaW4tPmxvYWQoKSkgewotICAgICAgICBtX3BsdWdpbiA9IDA7Ci0gICAgICAgIG1f
c3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghc3RhcnRPckFkZFRvVW5zdGFydGVkTGlzdCgpKSB7Ci0gICAgICAg
IG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5
OwotfQotCi1ib29sIFBsdWdpblZpZXc6OnN0YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKQotewot
ICAgIGlmICghbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBXZSBvbmx5IGRlbGF5IHN0YXJ0aW5nIHRoZSBwbHVnLWluIGlmIHdlJ3JlIGdvaW5n
IHRvIGtpY2sgb2ZmIHRoZSBsb2FkCi0gICAgLy8gb3Vyc2VsdmVzLiBPdGhlcndpc2UsIHRoZSBs
b2FkZXIgd2lsbCB0cnkgdG8gZGVsaXZlciBkYXRhIGJlZm9yZSB3ZSd2ZQotICAgIC8vIHN0YXJ0
ZWQgdGhlIHBsdWctaW4uCi0gICAgaWYgKCFtX2xvYWRNYW51YWxseSAmJiAhbV9wYXJlbnRGcmFt
ZS0+cGFnZSgpLT5jYW5TdGFydE1lZGlhKCkpIHsKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9j
dW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwotICAgICAgICBtX2lzV2Fp
dGluZ1RvU3RhcnQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gc3RhcnQoKTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpzdGFydCgpCi17Ci0gICAgaWYg
KG1faXNTdGFydGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2lzV2FpdGluZ1Rv
U3RhcnQgPSBmYWxzZTsKLQotICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxl
cigpLnJlZ2lzdGVyUGx1Z2luKG1faW5zdGFuY2UpOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luKTsK
LSAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3ApOwotCi0gICAgTlBFcnJv
ciBucEVycjsKLSAgICB7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwotICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKChOUE1J
TUVUeXBlKW1fbWltZVR5cGUudXRmOCgpLmRhdGEoKSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3Bh
cmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9wYXJhbVZhbHVlcywgTlVMTCk7Ci0gICAgICAgIHNl
dENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgICAgICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAg
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwotICAgIH0KLQotICAgIGlm
IChucEVyciAhPSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0
YXR1c0Nhbk5vdExvYWRQbHVnaW47Ci0gICAgICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6
OnNjaGVkdWxlcigpLnVucmVnaXN0ZXJQbHVnaW4obV9pbnN0YW5jZSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2lzU3RhcnRlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1f
dXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFudWFsbHkpIHsKLSAgICAgICAgRnJhbWVMb2FkUmVx
dWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCkpOwotICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNl
dEhUVFBNZXRob2QoIkdFVCIpOwotICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnNldFVSTChtX3VybCk7Ci0gICAgICAgIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFs
c2UsIDApOwotICAgIH0KLQotICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vz
c2Z1bGx5OwotCi0gICAgaWYgKCFwbGF0Zm9ybVN0YXJ0KCkpCi0gICAgICAgIG1fc3RhdHVzID0g
UGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKLQotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQoKQotewot
ICAgIEFTU0VSVCghbV9pc1N0YXJ0ZWQpOwotICAgIGlmICghc3RhcnQoKSkKLSAgICAgICAgcGFy
ZW50RnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50KCkuZGlzcGF0Y2hEaWRGYWlsVG9TdGFydFBsdWdp
bih0aGlzKTsKLX0KLQotUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQotewotICAgIExPRyhQbHVn
aW5zLCAiUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKSIpOwotCi0gICAgQVNTRVJUKCFtX2xpZmVT
dXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7Ci0KLSAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZmluZCB0
aGUgcGx1Zy1pbiwgd2UnbGwgcmV0dXJuIGVhcmx5IGluIG91ciBjb25zdHJ1Y3RvciwgYW5kCi0g
ICAgLy8gbV9pbnN0YW5jZSB3aWxsIGJlIDAuCi0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAg
IGluc3RhbmNlTWFwKCkucmVtb3ZlKG1faW5zdGFuY2UpOwotCi0gICAgaWYgKG1faXNXYWl0aW5n
VG9TdGFydCkKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOwotCi0gICAgc3RvcCgpOwotCi0gICAgZnJlZVN0cmluZ0Fy
cmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsKLSAgICBmcmVlU3RyaW5nQXJyYXkobV9w
YXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsKLQotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotCi0g
ICAgbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4o
dGhpcyk7Ci0KLSAgICBpZiAobV9wbHVnaW4gJiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkpCi0gICAgICAgIG1fcGx1Z2luLT51bmxv
YWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKLXsKLSAgICBpZiAoIW1faXNTdGFy
dGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnN0
b3AoKTogU3RvcHBpbmcgcGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5hbWUoKS51dGY4KCkuZGF0
YSgpKTsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBzdHJlYW1zID0gbV9z
dHJlYW1zOwotICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgZW5k
ID0gc3RyZWFtcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4g
Pjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAoKml0KS0+c3RvcCgpOwotICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgp
KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7Ci0KLSAgICBtX2lz
U3RhcnRlZCA9IGZhbHNlOwotCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotI2lmIGRlZmluZWQoWFBfV0lOKSAmJiAhUExBVEZPUk0oR1RLKQotICAg
IC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdwotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAg
ICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsKLQotICAgICAgICBpZiAoY3VycmVu
dFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2MpCi0gICAgICAgICAgICBTZXRXaW5kb3dMb25n
UHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRSKW1fcGx1
Z2luV25kUHJvYyk7Ci0gICAgfQotI2VuZGlmIC8vICFkZWZpbmVkKFhQX1dJTikgfHwgUExBVEZP
Uk0oR1RLKQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaWYgIWRl
ZmluZWQoWFBfTUFDT1NYKQotICAgIC8vIENsZWFyIHRoZSB3aW5kb3cKLSAgICBtX25wV2luZG93
LndpbmRvdyA9IDA7Ci0KLSAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dyAmJiAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udFNldE51bGxX
aW5kb3dIYW5kbGVPbkRlc3Ryb3kpKSB7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2lu
ZG93KTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgICAgIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwotICAgIH0KLQotI2lmZGVmIFhQX1VOSVgKLSAg
ICBkZWxldGUgc3RhdGljX2Nhc3Q8TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCo+KG1fbnBXaW5k
b3cud3NfaW5mbyk7Ci0gICAgbV9ucFdpbmRvdy53c19pbmZvID0gMDsKLSNlbmRpZgotCi0jZW5k
aWYgLy8gIWRlZmluZWQoWFBfTUFDT1NYKQotCi0gICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxl
cjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBsdWdpbihtX2luc3RhbmNlKTsKLQotICAgIE5QU2F2
ZWREYXRhKiBzYXZlZERhdGEgPSAwOwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KHRoaXMpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgTlBFcnJvciBucEVy
ciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5kZXN0cm95KG1faW5zdGFuY2UsICZzYXZlZERh
dGEpOwotICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgIExPR19OUEVSUk9SKG5wRXJy
KTsKLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChzYXZlZERhdGEpIHsKLSAgICAgICAgLy8g
VE9ETzogQWN0dWFsbHkgc2F2ZSB0aGlzIGRhdGEgaW5zdGVhZCBvZiBqdXN0IGRpc2NhcmRpbmcg
aXQKLSAgICAgICAgaWYgKHNhdmVkRGF0YS0+YnVmKQotICAgICAgICAgICAgTlBOX01lbUZyZWUo
c2F2ZWREYXRhLT5idWYpOwotICAgICAgICBOUE5fTWVtRnJlZShzYXZlZERhdGEpOwotICAgIH0K
LSNlbmRpZgotCi0gICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqIHBsdWdpblZpZXcpCi17Ci0gICAg
c19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdpblZpZXc7Ci19Ci0KLVBsdWdpblZpZXcqIFBsdWdp
blZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCkKLXsKLSAgICByZXR1cm4gc19jdXJyZW50UGx1Z2lu
VmlldzsKLX0KLQotc3RhdGljIGNoYXIqIGNyZWF0ZVVURjhTdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHIpCi17Ci0gICAgQ1N0cmluZyBjc3RyID0gc3RyLnV0ZjgoKTsKLSAgICBjb25zdCBzaXplX3Qg
Y3N0ckxlbmd0aCA9IGNzdHIubGVuZ3RoKCk7Ci0gICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjc3RyTGVuZ3RoICsgMSkpOwotCi0gICAgbWVtY3B5
KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHJMZW5ndGgpOwotICAgIHJlc3VsdFtjc3RyTGVuZ3Ro
XSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBl
cmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgaWYgKCFtX2lzU3Rh
cnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0
IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMg
YmVpbmcgCi0gICAgLy8gZGlzcGxheWVkIHVubGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1l
IGZyYW1lIGFzIHRoZSBwbHVnaW4uCi0gICAgY29uc3QgU3RyaW5nJiB0YXJnZXRGcmFtZU5hbWUg
PSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCk7Ci0gICAgaWYgKG1fcGFy
ZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+bG9h
ZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJiAodGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgp
IHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJl
bnRGcmFtZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFVSTCByZXF1ZXN0VVJMID0gcmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwotICAgIFN0cmlu
ZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKLQot
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IocmVxdWVzdC0+c2hvdWxk
QWxsb3dQb3B1cHMoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJs
eVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0KLSAgICBpZiAoanNTdHJpbmcuaXNOdWxsKCkpIHsK
LSAgICAgICAgLy8gaWYgdGhpcyBpcyBub3QgYSB0YXJnZXRlZCByZXF1ZXN0LCBjcmVhdGUgYSBz
dHJlYW0gZm9yIGl0LiBvdGhlcndpc2UsCi0gICAgICAgIC8vIGp1c3QgcGFzcyBpdCBvZmYgdG8g
dGhlIGxvYWRlcgotICAgICAgICBpZiAodGFyZ2V0RnJhbWVOYW1lLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gc3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVh
dGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgp
LnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3Qt
Pm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1
Z2luLT5xdWlya3MoKSk7Ci0gICAgICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAg
ICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBJZiB0aGUgdGFyZ2V0IGZyYW1lIGlzIG91ciBmcmFtZSwgd2UgY291bGQgZGVzdHJveSB0aGUK
LSAgICAgICAgICAgIC8vIFBsdWdpblZpZXcsIHNvIHdlIHByb3RlY3QgaXQuIDxyZGFyOi8vcHJv
YmxlbS82OTkxMjUxPgotICAgICAgICAgICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3QodGhp
cyk7Ci0KLSAgICAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KG1fcGFyZW50
RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3Qo
KSk7Ci0gICAgICAgICAgICBmcmFtZVJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldEZyYW1lTmFt
ZSk7Ci0gICAgICAgICAgICBmcmFtZVJlcXVlc3Quc2V0U2hvdWxkQ2hlY2tOZXdXaW5kb3dQb2xp
Y3kodHJ1ZSk7Ci0gICAgICAgICAgICBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5sb2FkKGZyYW1l
UmVxdWVzdCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2
OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVuIHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9h
ZGluZwotICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkgewotICAg
ICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAg
ICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKLSAgICAgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90
aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNf
RE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKLSAgICAgICAgICAgICAgICBzZXRDYWxsaW5n
UGx1Z2luKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldygwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gVGFyZ2V0ZWQgSmF2YVNjcmlwdCByZXF1ZXN0cyBhcmUgb25seSBhbGxv
d2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IHBsdWdpbgotICAg
IC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUgc3VyZSBpbiA6OmxvYWQuCi0gICAgQVNTRVJUKHRh
cmdldEZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLmZpbmQodGFy
Z2V0RnJhbWVOYW1lKSA9PSBtX3BhcmVudEZyYW1lKTsKLSAgICAKLSAgICAvLyBFeGVjdXRpbmcg
YSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdl
IGtlZXAgYSByZWZlcmVuY2UgdG8gaXQuCi0gICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3Rv
cih0aGlzKTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3BhcmVudEZy
YW1lLT5zY3JpcHQoKS5leGVjdXRlU2NyaXB0KGpzU3RyaW5nLCByZXF1ZXN0LT5zaG91bGRBbGxv
d1BvcHVwcygpKTsKLQotICAgIGlmICh0YXJnZXRGcmFtZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAg
ICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKLQotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0
U3RhdGUgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgQ1N0cmluZyBjc3RyOwotICAgICAgICBpZiAocmVz
dWx0LmdldFN0cmluZyhzY3JpcHRTdGF0ZSwgcmVzdWx0U3RyaW5nKSkKLSAgICAgICAgICAgIGNz
dHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOwotCi0gICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+
IHN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0KCks
IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+
c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVn
aW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+cXVpcmtzKCkpOwotICAgICAgICBtX3N0
cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgICAgIHN0cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0o
cmVxdWVzdFVSTCwgY3N0cik7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6OnJlcXVlc3RU
aW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQoIW1fcmVxdWVzdHMuaXNFbXB0eSgpKTsKLSAgICBB
U1NFUlQoIW1faXNKYXZhU2NyaXB0UGF1c2VkKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVn
aW5SZXF1ZXN0PiByZXF1ZXN0ID0gV1RGOjptb3ZlKG1fcmVxdWVzdHNbMF0pOwotICAgIG1fcmVx
dWVzdHMucmVtb3ZlKDApOwotICAgIAotICAgIC8vIFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVm
b3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNhbGwgdG8KLSAgICAvLyBwZXJm
b3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlbGV0ZWQuCi0gICAg
aWYgKCFtX3JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRP
bmVTaG90KDApOwotCi0gICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6c2NoZWR1bGVSZXF1ZXN0KHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1
ZXN0PiByZXF1ZXN0KQotewotICAgIG1fcmVxdWVzdHMuYXBwZW5kKFdURjo6bW92ZShyZXF1ZXN0
KSk7Ci0KLSAgICBpZiAoIW1faXNKYXZhU2NyaXB0UGF1c2VkKQotICAgICAgICBtX3JlcXVlc3RU
aW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6bG9hZChjb25z
dCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRp
b24sIHZvaWQqIG5vdGlmeURhdGEpCi17Ci0gICAgQVNTRVJUKGZyYW1lTG9hZFJlcXVlc3QucmVz
b3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJHRVQiIHx8IGZyYW1lTG9hZFJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7Ci0KLSAgICBVUkwgdXJs
ID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKLSAgICAKLSAgICBp
ZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOwotCi0g
ICAgLy8gRG9uJ3QgYWxsb3cgcmVxdWVzdHMgdG8gYmUgbWFkZSB3aGVuIHRoZSBkb2N1bWVudCBs
b2FkZXIgaXMgc3RvcHBpbmcgYWxsIGxvYWRlcnMuCi0gICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgaWYgKCFs
b2FkZXIgfHwgbG9hZGVyLT5pc1N0b3BwaW5nKCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwotCi0gICAgY29uc3QgU3RyaW5nJiB0YXJnZXRGcmFtZU5hbWUgPSBmcmFtZUxv
YWRSZXF1ZXN0LmZyYW1lTmFtZSgpOwotICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmlu
Z0lmSmF2YVNjcmlwdFVSTCh1cmwpOwotCi0gICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSkgewot
ICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4g
VGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4KLSAgICAgICAgaWYgKCFtX3BhcmVudEZyYW1lLT5z
Y3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICAvLyBGb3Igc2Vj
dXJpdHkgcmVhc29ucywgb25seSBhbGxvdyBKUyByZXF1ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBm
cmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVnLWluLgotICAgICAgICBpZiAoIXRhcmdldEZyYW1l
TmFtZS5pc051bGwoKSAmJiBtX3BhcmVudEZyYW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5h
bWUpICE9IG1fcGFyZW50RnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9Q
QVJBTTsKLSAgICB9IGVsc2UgaWYgKCFtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5jYW5EaXNwbGF5KHVybCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOwotCi0gICAgc2NoZWR1bGVSZXF1ZXN0KHN0ZDo6bWFrZV91bmlxdWU8UGx1Z2luUmVx
dWVzdD4oZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwgYXJl
UG9wdXBzQWxsb3dlZCgpKSk7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0
YXRpYyBVUkwgbWFrZVVSTChjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0aXZl
VVJMU3RyaW5nKQotewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSByZWxhdGl2ZVVSTFN0cmluZzsK
LQotICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgotICAgIHVybFN0cmluZy5yZXBsYWNl
V2l0aExpdGVyYWwoJ1xuJywgIiIpOwotICAgIHVybFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwo
J1xyJywgIiIpOwotCi0gICAgcmV0dXJuIFVSTChiYXNlVVJMLCB1cmxTdHJpbmcpOwotfQotCi1O
UEVycm9yIFBsdWdpblZpZXc6OmdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNo
YXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZy
YW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KSk7Ci0KLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0g
ICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOwotCi0gICAgcmV0dXJuIGxv
YWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwgbm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgUGx1
Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQotewot
ICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3BhcmVudEZyYW1lLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKLQotICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJh
bWVOYW1lKHRhcmdldCk7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5z
ZXRIVFRQTWV0aG9kKCJHRVQiKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVz
dCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwg
dXJsKSk7Ci0KLSAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7Ci19
Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6cG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBm
aWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFy
Z2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSwgdHJ1ZSwgdHJ1ZSk7Ci19Ci0KLU5QRXJy
b3IgUGx1Z2luVmlldzo6cG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdl
dCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQotewotICAgIC8v
IEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cgaGVhZGVycyB0byBiZSBzcGVjaWZpZWQgdmlhIE5Q
UF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxlLgotICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwg
dGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwgZmFsc2UsIGZpbGUpOwotfQotCi1OUEVycm9yIFBs
dWdpblZpZXc6Om5ld1N0cmVhbShOUE1JTUVUeXBlLCBjb25zdCBjaGFyKiAvKiB0YXJnZXQgKi8s
IE5QU3RyZWFtKiopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAvLyBVbnN1cHBvcnRl
ZAotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotCi1pbnQzMl90IFBsdWdpblZp
ZXc6OndyaXRlKE5QU3RyZWFtKiwgaW50MzJfdCAvKiBsZW4gKi8sIHZvaWQqIC8qIGJ1ZmZlciAq
LykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIC8vIFVuc3VwcG9ydGVkCi0gICAgcmV0
dXJuIC0xOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0q
IHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQotewotICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0
cmVhbTo6b3duZXJGb3JTdHJlYW0oc3RyZWFtKSAhPSBtX2luc3RhbmNlKQotICAgICAgICByZXR1
cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUjsKLQotICAgIFBsdWdpblN0cmVhbSogYnJv
d3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBsdWdpblN0cmVhbSo+KHN0cmVhbS0+bmRhdGEpOwot
ICAgIGJyb3dzZXJTdHJlYW0tPmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKLQotICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29u
c3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUt
PnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y2hyb21lKCkuc2V0U3RhdHVzYmFyVGV4dChtX3BhcmVu
dEZyYW1lLmdldCgpLCBTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpKTsKLX0KLQotTlBFcnJvciBQ
bHVnaW5WaWV3OjpzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCi17
Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZSglcyk6ICIsIHByZXR0eU5h
bWVGb3JOUFBWYXJpYWJsZSh2YXJpYWJsZSwgdmFsdWUpLmRhdGEoKSk7Ci0KLSAgICBzd2l0Y2gg
KHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9vbDoKLSAgICAgICAgbV9p
c1dpbmRvd2VkID0gdmFsdWU7Ci0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICBj
YXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6Ci0gICAgICAgIG1faXNUcmFuc3BhcmVudCA9
IHZhbHVlOwotICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0jaWYgZGVmaW5lZChYUF9N
QUNPU1gpCi0gICAgY2FzZSBOUFBWcGx1Z2luRHJhd2luZ01vZGVsOiB7Ci0gICAgICAgIC8vIENh
biBvbmx5IHNldCBkcmF3aW5nIG1vZGVsIGluc2lkZSBOUFBfTmV3KCkKLSAgICAgICAgaWYgKHRo
aXMgIT0gY3VycmVudFBsdWdpblZpZXcoKSkKLSAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7Ci0KLSAgICAgICAgTlBEcmF3aW5nTW9kZWwgbmV3RHJhd2luZ01vZGVsID0gTlBE
cmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVlKSk7Ci0gICAgICAgIHN3aXRjaCAobmV3RHJhd2lu
Z01vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M6Ci0gICAg
ICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9k
ZWxDb3JlQW5pbWF0aW9uOgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgTE9HKFBsdWdp
bnMsICJQbHVnaW4gYXNrZWQgZm9yIHVuc3VwcG9ydGVkIGRyYXdpbmcgbW9kZWw6ICVzIiwKLSAg
ICAgICAgICAgICAgICAgICAgcHJldHR5TmFtZUZvckRyYXdpbmdNb2RlbChuZXdEcmF3aW5nTW9k
ZWwpKTsKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgY2FzZSBOUFBWcGx1Z2luRXZlbnRNb2RlbDogewotICAgICAgICAvLyBD
YW4gb25seSBzZXQgZXZlbnQgbW9kZWwgaW5zaWRlIE5QUF9OZXcoKQotICAgICAgICBpZiAodGhp
cyAhPSBjdXJyZW50UGx1Z2luVmlldygpKQotICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKLQotICAgICAgICBOUEV2ZW50TW9kZWwgbmV3RXZlbnRNb2RlbCA9IE5QRXZlbnRN
b2RlbCh1aW50cHRyX3QodmFsdWUpKTsKLSAgICAgICAgc3dpdGNoIChuZXdFdmVudE1vZGVsKSB7
Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29jb2E6Ci0gICAgICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBMT0coUGx1Z2lucywg
IlBsdWdpbiBhc2tlZCBmb3IgdW5zdXBwb3J0ZWQgZXZlbnQgbW9kZWw6ICVzIiwKLSAgICAgICAg
ICAgICAgICAgICAgcHJldHR5TmFtZUZvckV2ZW50TW9kZWwobmV3RXZlbnRNb2RlbCkpOwotICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0j
ZW5kaWYgLy8gZGVmaW5lZChYUF9NQUNPU1gpCi0KLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0cy5zaXplKCk7IGkrKykKLSAgICAg
ICAgaW52YWxpZGF0ZVJlY3QobV9pbnZhbGlkUmVjdHNbaV0pOwotICAgIG1faW52YWxpZFJlY3Rz
LmNsZWFyKCk7Ci19Ci0KLQotdm9pZCBQbHVnaW5WaWV3OjpwdXNoUG9wdXBzRW5hYmxlZFN0YXRl
KGJvb2wgc3RhdGUpCi17Ci0gICAgbV9wb3B1cFN0YXRlU3RhY2suYXBwZW5kKHN0YXRlKTsKLX0K
LSAKLXZvaWQgUGx1Z2luVmlldzo6cG9wUG9wdXBzRW5hYmxlZFN0YXRlKCkKLXsKLSAgICBtX3Bv
cHVwU3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6YXJlUG9w
dXBzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BvcHVwU3RhdGVTdGFjay5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBtX3BvcHVwU3RhdGVTdGFjay5sYXN0KCk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0SmF2YVNjcmlwdFBhdXNlZChib29s
IHBhdXNlZCkKLXsKLSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQgPT0gcGF1c2VkKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9pc0phdmFTY3JpcHRQYXVzZWQgPSBwYXVzZWQ7Ci0KLSAgICBp
ZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0b3AoKTsK
LSAgICBlbHNlIGlmICghbV9yZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcmVxdWVzdFRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotTlBPYmplY3QqIFBsdWdpblZpZXc6Om5wT2JqZWN0KCkKLXsKLSAgICBOUE9iamVjdCogb2Jq
ZWN0ID0gMDsKLQotICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIW1fcGx1Z2luIHx8ICFtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8g
T24gV2luZG93cywgY2FsbGluZyBKYXZhJ3MgTlBOX0dldFZhbHVlIGNhbiBhbGxvdyB0aGUgbWVz
c2FnZSBsb29wIHRvCi0gICAgLy8gcnVuLCBhbGxvd2luZyBsb2FkaW5nIHRvIHRha2UgcGxhY2Ug
b3IgSmF2YVNjcmlwdCB0byBydW4uIFByb3RlY3QgdGhlCi0gICAgLy8gUGx1Z2luVmlldyBmcm9t
IGRlc3RydWN0aW9uLiA8cmRhcjovL3Byb2JsZW0vNjk3ODgwND4KLSAgICBSZWZQdHI8UGx1Z2lu
Vmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAgIE5QRXJyb3IgbnBFcnI7Ci0gICAgewotICAgICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbnBFcnIgPSBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNj
cmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFs
c2UpOwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9
Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG9iamVjdDsKLX0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPEpTQzo6QmluZGlu
Z3M6Okluc3RhbmNlPiBQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2UoKQotewotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIE5QT2JqZWN0KiBvYmplY3QgPSBucE9iamVjdCgp
OwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChoYXNPbmVS
ZWYoKSkgewotICAgICAgICAvLyBUaGUgcmVuZGVyZXIgZm9yIHRoZSBQbHVnaW5WaWV3IHdhcyBk
ZXN0cm95ZWQgZHVyaW5nIHRoZSBhYm92ZSBjYWxsLCBhbmQKLSAgICAgICAgLy8gdGhlIFBsdWdp
blZpZXcgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHNvIHdl
Ci0gICAgICAgIC8vIHJldHVybiBudWxsLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUt
PnNjcmlwdCgpLmNyZWF0ZVJvb3RPYmplY3QodGhpcyk7Ci0gICAgUmVmUHRyPEpTQzo6QmluZGlu
Z3M6Okluc3RhbmNlPiBpbnN0YW5jZSA9IEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRl
KG9iamVjdCwgcm9vdC5yZWxlYXNlKCkpOwotCi0gICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVj
dCk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2UucmVsZWFzZSgpOwotI2Vsc2UKLSAgICByZXR1cm4g
MDsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2lu
U3RyZWFtKiBzdHJlYW0pCi17Ci0gICAgQVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0p
KTsKLQotICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCi17Ci0gICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6
ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gcGFyYW1O
YW1lcy5zaXplKCk7Ci0gICAgdW5zaWduZWQgcGFyYW1Db3VudCA9IDA7Ci0KLSAgICBtX3BhcmFt
TmFtZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciop
ICogc2l6ZSkpOwotICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4o
ZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNv
bnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdu
b3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3aW5kb3dsZXNzdmlkZW8iKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChwYXJhbU5hbWVzW2ldID09ICJwbHVnaW5zcGFnZSIp
Ci0gICAgICAgICAgICBtX3BsdWdpbnNQYWdlID0gcGFyYW1WYWx1ZXNbaV07Ci0KLSAgICAgICAg
bV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbU5hbWVzW2ld
KTsKLSAgICAgICAgbV9wYXJhbVZhbHVlc1twYXJhbUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmco
cGFyYW1WYWx1ZXNbaV0pOwotCi0gICAgICAgIHBhcmFtQ291bnQrKzsKLSAgICB9Ci0KLSAgICBt
X3BhcmFtQ291bnQgPSBwYXJhbUNvdW50OwotfQotCi1QbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZy
YW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcGx1
Z2luLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotICAgIDogbV9w
YXJlbnRGcmFtZShwYXJlbnRGcmFtZSkKLSAgICAsIG1fcGx1Z2luKHBsdWdpbikKLSAgICAsIG1f
ZWxlbWVudChlbGVtZW50KQotICAgICwgbV9pc1N0YXJ0ZWQoZmFsc2UpCi0gICAgLCBtX3VybCh1
cmwpCi0gICAgLCBtX3N0YXR1cyhQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAg
LCBtX3JlcXVlc3RUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKQot
ICAgICwgbV9pbnZhbGlkYXRlVGltZXIoKnRoaXMsICZQbHVnaW5WaWV3OjppbnZhbGlkYXRlVGlt
ZXJGaXJlZCkKLSAgICAsIG1fcG9wUG9wdXBzU3RhdGVUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6
OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCkKLSAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcigqdGhp
cywgJlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJlZCkKLSAgICAsIG1fbW9kZShsb2Fk
TWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1CRUQpCi0gICAgLCBtX3BhcmFtTmFtZXMoMCkKLSAg
ICAsIG1fcGFyYW1WYWx1ZXMoMCkKLSAgICAsIG1fbWltZVR5cGUobWltZVR5cGUpCi0gICAgLCBt
X2luc3RhbmNlKDApCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgLCBtX2lzV2luZG93ZWQo
ZmFsc2UpCi0gICAgLCBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZChmYWxzZSkKLSAg
ICAsIG1fa2V5RG93blNlbnQoZmFsc2UpCi0gICAgLCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcigw
KQotI2Vsc2UKLSAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQotI2VuZGlmCi0gICAgLCBtX2lzVHJh
bnNwYXJlbnQoZmFsc2UpCi0gICAgLCBtX2hhdmVJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1f
aXNXYWl0aW5nVG9TdGFydChmYWxzZSkKLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgLCBtX25l
ZWRzWEVtYmVkKGZhbHNlKQotI2VuZGlmCi0jaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgLCBtX3BsdWdpblduZFByb2MoMCkKLSAgICAsIG1fbGFzdE1l
c3NhZ2UoMCkKLSAgICAsIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyhmYWxzZSkKLSAgICAsIG1f
d21QcmludEhEQygwKQotICAgICwgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldChmYWxzZSkKLSNl
bmRpZgotI2lmIFBMQVRGT1JNKEVGTCkKLSAgICAsIG1fd2luZG93KDApCi0jZW5kaWYKLSNpZiBk
ZWZpbmVkKFhQX01BQ09TWCkKLSAgICAsIG1fY29udGV4dFJlZigwKQotI2VuZGlmCi0jaWYgZGVm
aW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAsIG1faGFz
UGVuZGluZ0dlb21ldHJ5Q2hhbmdlKHRydWUpCi0gICAgLCBtX2RyYXdhYmxlKDApCi0gICAgLCBt
X3Zpc3VhbCgwKQotICAgICwgbV9jb2xvcm1hcCgwKQotICAgICwgbV9wbHVnaW5EaXNwbGF5KDAp
Ci0jZW5kaWYKLSAgICAsIG1fbG9hZE1hbnVhbGx5KGxvYWRNYW51YWxseSkKLSAgICAsIG1fbWFu
dWFsU3RyZWFtKDApCi0gICAgLCBtX2lzSmF2YVNjcmlwdFBhdXNlZChmYWxzZSkKLSAgICAsIG1f
aGF2ZUNhbGxlZFNldFdpbmRvdyhmYWxzZSkKLXsKLSAgICBpZiAoIW1fcGx1Z2luKSB7Ci0gICAg
ICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1faW5zdGFuY2UgPSAmbV9pbnN0YW5jZVN0cnVjdDsKLSAgICBt
X2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7Ci0gICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOwotCi0g
ICAgaW5zdGFuY2VNYXAoKS5hZGQobV9pbnN0YW5jZSwgdGhpcyk7Ci0KLSAgICBzZXRQYXJhbWV0
ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKLQotICAgIG1lbXNldCgmbV9ucFdpbmRvdywg
MCwgc2l6ZW9mKG1fbnBXaW5kb3cpKTsKLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICBtZW1z
ZXQoJm1fbnBDZ0NvbnRleHQsIDAsIHNpemVvZihtX25wQ2dDb250ZXh0KSk7Ci0jZW5kaWYKLQot
ICAgIHJlc2l6ZShzaXplKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpmb2N1c1BsdWdpbkVsZW1l
bnQoKQotewotICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQotICAg
ICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChtX2VsZW1lbnQs
IG1fcGFyZW50RnJhbWUpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1l
bnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobV9lbGVtZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17
Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICBBU1NFUlQo
IW1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFsU3RyZWFtID0gUGx1Z2luU3RyZWFtOjpj
cmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCku
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCwgcGx1Z2luKCktPnBs
dWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7Ci0gICAgbV9tYW51
YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKLQotICAgIG1fbWFudWFsU3RyZWFtLT5k
aWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRp
ZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKG1f
c3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICBBU1NFUlQobV9tYW51YWxTdHJl
YW0pOwotICAgIAotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0YSgwLCBkYXRhLCBs
ZW5ndGgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZpbmlzaExvYWRpbmcoKQotewotICAg
IGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvYWRNYW51YWxseSk7Ci0gICAgQVNTRVJUKG1fbWFu
dWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOwot
fQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
Ci17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICAKLSAg
ICBpZiAobV9tYW51YWxTdHJlYW0pCi0gICAgICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGYWlsKDAs
IGVycm9yKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRDYWxsaW5nUGx1Z2luKGJvb2wgYikg
Y29uc3QKLXsKLSAgICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a0hhc01vZGFsTWVzc2FnZUxvb3ApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYikKLSAg
ICAgICAgKytzX2NhbGxpbmdQbHVnaW47Ci0gICAgZWxzZQotICAgICAgICAtLXNfY2FsbGluZ1Bs
dWdpbjsKLQotICAgIEFTU0VSVChzX2NhbGxpbmdQbHVnaW4gPj0gMCk7Ci19Ci0KLWJvb2wgUGx1
Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkKLXsKLSAgICByZXR1cm4gc19jYWxsaW5nUGx1Z2lu
ID4gMDsKLX0KLQotUGFzc1JlZlB0cjxQbHVnaW5WaWV3PiBQbHVnaW5WaWV3OjpjcmVhdGUoRnJh
bWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBIVE1MUGx1Z0luRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotewotICAgIC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBs
dWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQbHVnaW4gd2lsbCBzZWFyY2ggZm9yCi0gICAg
Ly8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlw
ZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCi0gICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1p
bWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0
YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwotCi0gICAgLy8g
Tm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFy
Y2hpbmcgYWdhaW4KLSAgICBpZiAoIXBsdWdpbiAmJiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVk
UGx1Z2lucygpLT5yZWZyZXNoKCkpIHsKLSAgICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7
Ci0gICAgICAgIHBsdWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZp
bmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUGx1Z2luVmlldyhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmws
IHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSkpOwot
fQotCi12b2lkIFBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXks
IGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFzdHJpbmdBcnJheSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgZmFzdEZyZWUo
c3RyaW5nQXJyYXlbaV0pOwotCi0gICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOwotfQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1
ZmZlcikKLXsKLSAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdc
bic7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShj
b25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1
ZmZlci5kYXRhKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKLSAgICAgICAgLy8g
U3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgotICAgICAgICBpZiAoYnl0ZXNb
aV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKLSAgICAgICAgICAgIHJldHVybiBp
ICsgMjsKLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIg
Q1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KLSAgICAgICAgaWYgKGJ5
dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsKLSAgICAgICAgICAgIGkg
Kz0gMjsKLSAgICAgICAgICAgIGlmIChpID09IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNb
aV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAvLyBT
dXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGkgKyAyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0x
OwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0
ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3Bl
Y2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcwotICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1
bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKLSAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5
ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCi0gICAgLy8gb2YgYm90aCAo
ZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKLSAgICAvLyB0byBi
ZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCi0gICAgLy8g
Q1IuCi0gICAgLy8KLSAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQg
b3IgaXQgd2lsbCByZXR1cm4KLSAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0
aW5nIGNoYXJhY3Rlci4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCi0gICAgICAgICAgICByZXR1cm4gYnl0
ZXMgKyBpOwotICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgewotICAgICAgICAgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKLSAgICAgICAgICAgIC8vIChD
UkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgotICAgICAgICAgICAgLy8gbmV4
dCByZWFkLgotICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXpl
UkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBib29sIGNh
cGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwotICAgIFN0cmluZyByZXN1bHQ7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIFVDaGFy
IGM7Ci0KLSAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScg
JiYgbmFtZVtpXSA8PSAneicpCi0gICAgICAgICAgICBjID0gdG9BU0NJSVVwcGVyKG5hbWVbaV0p
OwotICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdB
JyAmJiBuYW1lW2ldIDw9ICdaJykKLSAgICAgICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFtZVtp
XSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGMgPSBuYW1lW2ldOwotCi0gICAgICAgIGlm
IChuYW1lW2ldID09ICctJykKLSAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVl
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7
Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1zdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVs
ZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBj
b25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgY29uc3QgY2hhciogZW9sOwot
ICAgIFN0cmluZyBsYXN0S2V5OwotICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwotCi0g
ICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2Ug
Y2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKLSAgICB3aGlsZSAoKGVvbCA9IGZpbmRF
T0woYnl0ZXMsIGxlbmd0aCkpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsK
LSAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKLSAgICAgICAgCi0gICAgICAg
IC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyBy
ZXR1cm5lZCBieSBmaW5kRU9MLgotICAgICAgICBieXRlcyA9IGVvbCArIDE7Ci0gICAgICAgIGlm
ICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQotICAgICAgICAgICAgYnl0ZXMr
KzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCi0K
LSAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOwotICAgICAgICBpZiAobGluZUxlbmd0
aCA9PSAwKQotICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0
aGUgaGVhZGVyCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0g
JyAnIHx8ICpsaW5lID09ICdcdCcpIHsKLSAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0
aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgewot
ICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGlu
dWUKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVh
ZGVyCi0gICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5n
ZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVM
ZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJy
ZW50VmFsdWUgKyBuZXdWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBj
b2xvbjsKLSAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNv
bG9uICE9IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAotICAgICAgICAgICAg
ICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGxh
c3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xv
biAtIGxpbmUpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICAgICAgICAg
ICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoY29sb24gPT0gZW9sKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24s
IGVvbCAtIGNvbG9uKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRl
ckZpZWxkcy5nZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051
bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvbGRWYWx1ZSArICIsICIgKyB2YWx1
ZTsKLQotICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhlYWRlckZpZWxk
czsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBm
aWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dI
ZWFkZXJzKQotewotICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikKLSAgICAgICAgcmV0dXJu
IE5QRVJSX0lOVkFMSURfUEFSQU07Ci0KLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJl
cXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0KLSAg
ICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwot
ICAgIAotICAgIGlmIChmaWxlKSB7Ci0gICAgICAgIE5QRXJyb3IgcmVhZFJlc3VsdCA9IGhhbmRs
ZVBvc3RSZWFkRmlsZShidWZmZXIsIGxlbiwgYnVmKTsKLSAgICAgICAgaWYocmVhZFJlc3VsdCAh
PSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybiByZWFkUmVzdWx0OwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNpemUobGVuKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZl
ci5kYXRhKCksIGJ1ZiwgbGVuKTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9
IGJ1ZmZlci5kYXRhKCk7Ci0gICAgaW50IHBvc3REYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsK
LQotICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKLSAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xp
bmUoYnVmZmVyKSkgewotICAgICAgICAgICAgcG9zdERhdGErKzsKLSAgICAgICAgICAgIHBvc3RE
YXRhTGVuZ3RoLS07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgbG9jYXRpb24g
PSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChs
b2NhdGlvbiAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlz
IHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3Jl
IGlzIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgy
MkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOwotCi0gICAgICAgICAgICAg
ICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNl
bHZlcyB3aGVuIHRoZXkgcG9zdCwKLSAgICAgICAgICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlv
biBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKLSAgICAg
ICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVz
dGVkIGxlbmd0aC4KLSAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRl
ckZpZWxkcy5nZXQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5ndGgudG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsK
LSAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpDb250
ZW50TGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOwotICAg
ICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0
KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVS
TCgpLCB1cmwpKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhU
VFBIZWFkZXJGaWVsZHMoV1RGOjptb3ZlKGhlYWRlckZpZWxkcykpOwotICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShwb3N0
RGF0YSwgcG9zdERhdGFMZW5ndGgpKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFt
ZSh0YXJnZXQpOwotCi0gICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlm
aWNhdGlvbiwgbm90aWZ5RGF0YSk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVdp
bmRvd2xlc3NQbHVnaW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFpc1Zp
c2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbV9lbGVtZW50LT5yZW5k
ZXJlcigpKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KCptX2VsZW1lbnQtPnJlbmRlcmVyKCkpOwotICAgIAotICAgIEludFJlY3QgZGly
dHlSZWN0ID0gcmVjdDsKLSAgICBkaXJ0eVJlY3QubW92ZShyZW5kZXJlci5ib3JkZXJMZWZ0KCkg
KyByZW5kZXJlci5wYWRkaW5nTGVmdCgpLCByZW5kZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVy
LnBhZGRpbmdUb3AoKSk7Ci0gICAgcmVuZGVyZXIucmVwYWludFJlY3RhbmdsZShkaXJ0eVJlY3Qp
OwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHN0YXRpYyBSZWZQ
dHI8SW1hZ2U+IG51bGxQbHVnaW5JbWFnZTsKLSAgICBpZiAoIW51bGxQbHVnaW5JbWFnZSkKLSAg
ICAgICAgbnVsbFBsdWdpbkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJudWxs
UGx1Z2luIik7Ci0KLSAgICBJbnRSZWN0IGltYWdlUmVjdChmcmFtZVJlY3QoKS54KCksIGZyYW1l
UmVjdCgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53aWR0aCgpLCBudWxsUGx1Z2luSW1hZ2UtPmhl
aWdodCgpKTsKLQotICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lUmVjdCgpLndpZHRoKCkgLSBpbWFn
ZVJlY3Qud2lkdGgoKSkgLyAyOwotICAgIGludCB5T2Zmc2V0ID0gKGZyYW1lUmVjdCgpLmhlaWdo
dCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7Ci0KLSAgICBpbWFnZVJlY3QubW92ZSh4T2Zm
c2V0LCB5T2Zmc2V0KTsKLQotICAgIGlmICghcmVjdC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBjb250ZXh0LT5jbGlw
KHdpbmRvd0NsaXBSZWN0KCkpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1h
Z2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKLSAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNl
ckFnZW50ID0gIk1vemlsbGEvNS4wICgiCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgICAg
ICJNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBYOyIKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQot
ICAgICAgICAiV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IgotI2VsaWYgZGVmaW5lZChYUF9V
TklYKQotLy8gVGhlIEd0ayBwb3J0IHVzZXMgWDExIHBsdWdpbnMgaW4gTWFjLgotI2lmIE9TKERB
UldJTikgJiYgUExBVEZPUk0oR1RLKQotICAgICJYMTE7IFU7IEludGVsIE1hYyBPUyBYOyIKLSNl
bHNlCi0gICAgIlgxMTsgVTsgTGludXggaTY4NjsiCi0jZW5kaWYKLSNlbmRpZgotICAgICAgICAi
IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8yLjAiOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgQ2hyb21lVXNlckFnZW50ID0gIk1vemlsbGEvNS4wICgiCi0jaWYg
ZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgIk1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7Igot
I2VsaWYgZGVmaW5lZChYUF9XSU4pCi0gICAgIldpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyIK
LSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAvLyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEgcGx1
Z2lucyBpbiBNYWMuCi0jaWYgT1MoREFSV0lOKSAmJiBQTEFURk9STShHVEspCi0gICAgIlgxMTsg
VTsgSW50ZWwgTWFjIE9TIFg7IgotI2Vsc2UKLSAgICAiWDExOyBVOyBMaW51eCBpNjg2OyIKLSNl
bmRpZgotI2VuZGlmCi0gICAgIiBBcHBsZVdlYktpdC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tv
KSBDaHJvbWUvMTkuMC4xMDU1LjEgU2FmYXJpLzUzNC4zNCI7Ci0KLWNvbnN0IGNoYXIqIFBsdWdp
blZpZXc6OnVzZXJBZ2VudCgpCi17Ci0gICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCi0gICAgICAgIHJldHVybiBNb3pp
bGxhVXNlckFnZW50OwotICAgIGVsc2UgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya1dhbnRzQ2hyb21lVXNlckFnZW50KSkKLSAgICAgICAgcmV0dXJuIENocm9tZVVz
ZXJBZ2VudDsKLSAgICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIG1fdXNlckFn
ZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkudXNlckFnZW50KG1fdXJsKS51dGY4KCk7Ci0K
LSAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi1jb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKQot
ewotICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OwotfQotI2VuZGlmCi0KLQotdm9pZCBQbHVn
aW5WaWV3OjpsaWZlU3VwcG9ydFRpbWVyRmlyZWQoKQotewotICAgIGRlcmVmKCk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKCkKLXsKLSAgICBpZiAobV9saWZlU3VwcG9ydFRpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlZigpOwotICAgIG1fbGlmZVN1
cHBvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLXZvaWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKE5QUCBpbnN0YW5jZSkKLXsKLSAg
ICBQbHVnaW5WaWV3KiB2aWV3ID0gaW5zdGFuY2VNYXAoKS5nZXQoaW5zdGFuY2UpOwotICAgIGlm
ICghdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlldy0+a2VlcEFsaXZlKCk7Ci19Ci0K
LU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVT
dGF0aWMoJXMpIiwgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwot
Ci0gICAgTlBFcnJvciByZXN1bHQ7Ci0gICAgaWYgKHBsYXRmb3JtR2V0VmFsdWVTdGF0aWModmFy
aWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZh
bHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBMT0coUGx1Z2lu
cywgIlBsdWdpblZpZXc6OmdldFZhbHVlKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZSh2
YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0OwotICAgIGlmIChwbGF0Zm9y
bUdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0KLSAgICBpZiAocGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUsICZy
ZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkg
ewotICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7Ci0gICAgICAgIGlmIChtX2lzSmF2YVNj
cmlwdFBhdXNlZCkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0g
ICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3Jp
cHQoKS53aW5kb3dTY3JpcHROUE9iamVjdCgpOwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1ZSBp
cyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3
Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgaWYg
KHdpbmRvd1NjcmlwdE9iamVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRv
d1NjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAg
ICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsKLQotICAgICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7Ci0g
ICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKLSAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9HRU5FUklDX0VSUk9SOwotCi0gICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3Qg
PSAwOwotCi0gICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBt
X2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShv
YmplY3RUYWcpKQotICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gbV9lbGVtZW50LT5n
ZXROUE9iamVjdCgpOwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9i
amVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7
Ci0KLSAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAqdiA9IHBsdWdp
blNjcmlwdE9iamVjdDsKLQotICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQot
Ci0gICAgY2FzZSBOUE5WcHJpdmF0ZU1vZGVCb29sOiB7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBt
X3BhcmVudEZyYW1lLT5wYWdlKCk7Ci0gICAgICAgIGlmICghcGFnZSkKLSAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICAqKChOUEJvb2wqKXZhbHVlKSA9IHBh
Z2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBGcmFtZSogZ2V0RnJhbWUoRnJhbWUqIHBhcmVudEZy
YW1lLCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmIChwYXJlbnRGcmFtZSkKLSAgICAgICAg
cmV0dXJuIHBhcmVudEZyYW1lOwotICAgIAotICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgp
LmZyYW1lKCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwoTlBOVVJM
VmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJf
dCogbGVuKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwo
JXMpIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotCi0g
ICAgTlBFcnJvciByZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLQotICAgIHN3aXRjaCAodmFyaWFi
bGUpIHsKLSAgICBjYXNlIE5QTlVSTFZDb29raWU6IHsKLSAgICAgICAgVVJMIHUobV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOwotICAgICAgICBpZiAodS5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCks
IG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHUpLnV0
ZjgoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvb2tpZVN0ci5pc051bGwoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsKLSAgICAg
ICAgICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhz
aXplKzEpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCp2YWx1ZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbWVtc2V0KCp2YWx1ZSwgMCwgc2l6ZSsxKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1lbWNweSgqdmFsdWUsIGNvb2tpZVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICps
ZW4gPSBzaXplOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1I7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9
IE5QRVJSX0lOVkFMSURfVVJMOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBOUE5V
UkxWUHJveHk6IHsKLSAgICAgICAgVVJMIHUobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFz
ZVVSTCgpLCB1cmwpOwotICAgICAgICBpZiAodS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIEZy
YW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAg
ICAgICBjb25zdCBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBmcmFtZSA/ICZmcmFtZS0+bG9h
ZGVyKCkgOiAwOwotICAgICAgICAgICAgY29uc3QgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQg
PSBmcmFtZUxvYWRlciA/IGZyYW1lTG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpIDogMDsKLSAg
ICAgICAgICAgIGNvbnN0IENTdHJpbmcgcHJveHlTdHIgPSB0b1N0cmluZyhwcm94eVNlcnZlcnNG
b3JVUkwodSwgY29udGV4dCkpLnV0ZjgoKTsKLSAgICAgICAgICAgIGlmICghcHJveHlTdHIuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IHByb3h5U3RyLmxlbmd0
aCgpOwotICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVt
QWxsb2Moc2l6ZSsxKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCp2YWx1ZSkgewotICAgICAgICAg
ICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAwLCBzaXplKzEpOwotICAgICAgICAgICAgICAgICAg
ICBtZW1jcHkoKnZhbHVlLCBwcm94eVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAqbGVuID0gc2l6ZTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJf
T1VUX09GX01FTU9SWV9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0g
ICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkw6ICVzIiwgcHJl
dHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLU5QRXJyb3IgUGx1Z2luVmll
dzo6c2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikKLXsKLSAgICBMT0coUGx1Z2lucywg
IlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJp
YWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0ID0gTlBFUlJfTk9f
RVJST1I7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxWQ29va2ll
OiB7Ci0gICAgICAgIFVSTCB1KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwg
dXJsKTsKLSAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJp
bmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKLSAgICAgICAgICAg
IEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAg
ICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2llU3RyKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTlBOVVJMVlByb3h5OgotICAgICAgICBMT0coUGx1Z2lu
cywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKCVzKTogUGx1Z2lucyBhcmUgTk9UIGFsbG93
ZWQgdG8gc2V0IHByb3h5IGluZm9ybWF0aW9uLiIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJs
ZSh2YXJpYWJsZSkuZGF0YSgpKTsKLSAgICAgICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJP
UjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgTE9HKFBsdWdpbnMsICJQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTDogJXMiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFi
bGUodmFyaWFibGUpLmRhdGEoKSk7Ci0gICAgICAgIHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJS
T1I7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5Q
RXJyb3IgUGx1Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3Rv
Y29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIC8qIHNjaGVt
ZSAqLywgY29uc3QgY2hhciogLyogcmVhbG0gKi8sIGNoYXIqKiAgLyogdXNlcm5hbWUgKi8sIHVp
bnQzMl90KiAvKiB1bGVuICovLCBjaGFyKiogLyogcGFzc3dvcmQgKi8sIHVpbnQzMl90KiAvKiBw
bGVuICovKQotewotI2lmIExPR19ESVNBQkxFRAotICAgIFVOVVNFRF9QQVJBTShwcm90b2NvbCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGhvc3QpOwotICAgIFVOVVNFRF9QQVJBTShwb3J0KTsKLSNlbmRp
ZgotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvOiBw
cm90b2NvbD0lcywgaG9zdD0lcywgcG9ydD0lZCIsIHByb3RvY29sLCBob3N0LCBwb3J0KTsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQot
I2VuZGlmCi0KLXZvaWQgUGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJv
b2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKLXsKLSAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNl
dFZhbHVlID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHZhbHVlOwotICAgIGlmICghc2V0
VmFsdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVl
KTsKLSAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwotICAgIHNldFZh
bHVlKG1faW5zdGFuY2UsIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7Ci0gICAgc2V0Q2Fs
bGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
MCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTg2YmI5ZDI4MTE0YWRkODY5NGQ1Y2QxMTdhMDNkNjYwZGRm
YzAzNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUGx1Z2luVmlld19oCi0j
ZGVmaW5lIFBsdWdpblZpZXdfaAotCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKLSNp
bmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgot
I2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1Z2luU3RyZWFtLmgiCi0jaW5jbHVkZSAibnBydW50
aW1lX2ludGVybmFsLmgiCi0jZW5kaWYKLQotI2lmIE9TKFdJTkRPV1MpICYmIFBMQVRGT1JNKEdU
SykKLXR5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsKLXR5cGVkZWYgSFdORCBQbGF0Zm9ybVBs
dWdpbldpZGdldDsKLSNlbHNlCi10eXBlZGVmIFBsYXRmb3JtV2lkZ2V0IFBsYXRmb3JtUGx1Z2lu
V2lkZ2V0OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotdHlwZWRlZiBzdHJ1Y3QgX0d0a1Nv
Y2tldCBHdGtTb2NrZXQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFgxMSkKLXR5cGVkZWYgdW5z
aWduZWQgbG9uZyBXaW5kb3c7Ci10eXBlZGVmIHN0cnVjdCBfWERpc3BsYXkgRGlzcGxheTsKLSNl
bmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBuYW1lc3BhY2UgQmluZGluZ3MgewotICAgICAg
ICBjbGFzcyBJbnN0YW5jZTsKLSAgICB9Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBj
bGFzcyBGcmFtZTsKLSAgICBjbGFzcyBGcmFtZVZpZXc7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAg
Y2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7Ci0gICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKLSAgICBj
bGFzcyBNb3VzZUV2ZW50OwotICAgIGNsYXNzIFVSTDsKLSNpZiBPUyhXSU5ET1dTKSAmJiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luOwotI2VuZGlmCi0gICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKLSAgICBjbGFzcyBQbHVnaW5S
ZXF1ZXN0OwotICAgIGNsYXNzIFBsdWdpblN0cmVhbTsKLSAgICBjbGFzcyBSZXNvdXJjZUVycm9y
OwotICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci0gICAgY2xhc3MgV2hlZWxFdmVudDsKLQot
ICAgIGVudW0gUGx1Z2luU3RhdHVzIHsKLSAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBs
dWdpbiwKLSAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbiwKLSAgICAgICAgUGx1
Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblJl
cXVlc3QgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbHVnaW5SZXF1ZXN0KTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVnaW5SZXF1ZXN0
KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlm
aWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzaG91bGRBbGxvd1BvcHVwcykKLSAgICAg
ICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCi0gICAgICAgICAg
ICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQotICAgICAgICAgICAgLCBtX3NlbmROb3RpZmlj
YXRpb24oc2VuZE5vdGlmaWNhdGlvbikKLSAgICAgICAgICAgICwgbV9zaG91bGRBbGxvd1BvcHVw
cyhzaG91bGRBbGxvd1BvcHVwcykgeyB9Ci0gICAgcHVibGljOgotICAgICAgICBjb25zdCBGcmFt
ZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUxv
YWRSZXF1ZXN0OyB9Ci0gICAgICAgIHZvaWQqIG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBt
X25vdGlmeURhdGE7IH0KLSAgICAgICAgYm9vbCBzZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9Ci0gICAgICAgIGJvb2wgc2hvdWxkQWxsb3dQb3B1
cHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEFsbG93UG9wdXBzOyB9Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBtX2ZyYW1lTG9hZFJlcXVlc3Q7Ci0gICAgICAgIHZv
aWQqIG1fbm90aWZ5RGF0YTsKLSAgICAgICAgYm9vbCBtX3NlbmROb3RpZmljYXRpb247Ci0gICAg
ICAgIGJvb2wgbV9zaG91bGRBbGxvd1BvcHVwczsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2lu
TWFudWFsTG9hZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpbk1hbnVh
bExvYWRlcigpIHt9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaExvYWRpbmcoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJl
c291cmNlRXJyb3ImKSA9IDA7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblZpZXcgOiBwdWJs
aWMgUGx1Z2luVmlld0Jhc2UKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAg
ICAgICAgICAgICAgICAgICwgcHJpdmF0ZSBQbHVnaW5TdHJlYW1DbGllbnQKLSNlbmRpZgotICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgUGx1Z2luTWFudWFsTG9hZGVyCi0gICAgICAgICAg
ICAgICAgICAgICAsIHByaXZhdGUgTWVkaWFDYW5TdGFydExpc3RlbmVyIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblZpZXc+IGNyZWF0ZShGcmFtZSogcGFy
ZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFVSTCYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsK
LSAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlldygpOwotCi0gICAgICAgIFBsdWdpblBhY2thZ2Uq
IHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9Ci0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdGFuY2U7IH0KLSNlbmRpZgotCi0gICAgICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNv
bnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGljIFBsdWdpblZpZXcqIGN1cnJlbnRQbHVnaW5W
aWV3KCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBPYmpl
Y3QqIG5wT2JqZWN0KCk7Ci0jZW5kaWYKLSAgICAgICAgUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdz
OjpJbnN0YW5jZT4gYmluZGluZ0luc3RhbmNlKCk7Ci0KLSAgICAgICAgUGx1Z2luU3RhdHVzIHN0
YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLSAgICAgICAgLy8gTlBOIGZ1bmN0aW9ucwotICAgICAgICBOUEVycm9yIGdl
dFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90
aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3IgZ2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0KTsKLSAgICAgICAgTlBFcnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwg
TlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOwotICAgICAgICBOUEVycm9yIHBvc3RVUkwo
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnV0LCBOUEJvb2wgZmlsZSk7Ci0gICAgICAgIE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlN
RVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7Ci0gICAg
ICAgIGludDMyX3Qgd3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1
ZmZlcik7Ci0gICAgICAgIE5QRXJyb3IgZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBO
UFJlYXNvbiByZWFzb24pOwotI2VuZGlmCi0gICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCgp
OwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogdXNlckFnZW50U3RhdGljKCk7Ci0jZW5kaWYKLSAgICAgICAgdm9pZCBzdGF0dXMoY29u
c3QgY2hhciogbWVzc2FnZSk7Ci0gICAgICAgIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgICAgICBOUEVycm9yIGdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSk7Ci0gICAgICAgIHN0YXRpYyBOUEVycm9yIGdldFZhbHVlU3RhdGljKE5QTlZhcmlh
YmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7Ci0gICAgICAgIE5QRXJyb3Igc2V0VmFsdWUoTlBQ
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKLSAgICAgICAgTlBFcnJvciBnZXRWYWx1
ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiog
dmFsdWUsIHVpbnQzMl90KiBsZW4pOwotICAgICAgICBOUEVycm9yIHNldFZhbHVlRm9yVVJMKE5Q
TlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVl
LCB1aW50MzJfdCBsZW4pOwotICAgICAgICBOUEVycm9yIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhj
b25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBjb25z
dCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIqIHJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQz
Ml90KiB1bGVuLCBjaGFyKiogcGFzc3dvcmQsIHVpbnQzMl90KiBwbGVuKTsKLSAgICAgICAgdm9p
ZCBpbnZhbGlkYXRlUmVjdChOUFJlY3QqKTsKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9u
KE5QUmVnaW9uKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGZvcmNlUmVkcmF3KCk7Ci0gICAgICAg
IHZvaWQgcHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShib29sIHN0YXRlKTsKLSAgICAgICAgdm9pZCBw
b3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZVJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIGJvb2wgYXJlUG9wdXBzQWxsb3dlZCgp
IGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0SmF2YVNjcmlwdFBhdXNlZChib29sKTsKLQotICAg
ICAgICB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKTsKLQotICAgICAgICB2
b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKik7Ci0gICAgICAgIHZvaWQgc3RyZWFt
RGlkRmluaXNoTG9hZGluZyhQbHVnaW5TdHJlYW0qIHN0cmVhbSkgeyBkaXNjb25uZWN0U3RyZWFt
KHN0cmVhbSk7IH0KLQotICAgICAgICAvLyBXaWRnZXQgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZnJhbWVSZWN0c0NoYW5nZWQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJv
b2wpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
aGlkZSgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xpcFJlY3RDaGFuZ2VkKCkgb3Zl
cnJpZGU7Ci0KLSAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCBieSBwbHVnaW5zIG9uIGFs
bCBwbGF0Zm9ybXMgdG8gb2J0YWluIGEgY2xpcCByZWN0IHRoYXQgaW5jbHVkZXMgY2xpcHMgc2V0
IGJ5IFdlYkNvcmUsCi0gICAgICAgIC8vIGUuZy4sIGluIG92ZXJmbG93OmF1dG8gc2VjdGlvbnMu
ICBUaGUgY2xpcCByZWN0cyBjb29yZGluYXRlcyBhcmUgaW4gdGhlIGNvbnRhaW5pbmcgd2luZG93
J3MgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgLy8gVGhpcyBjbGlwIGluY2x1ZGVzIGFueSBj
bGlwcyB0aGF0IHRoZSB3aWRnZXQgaXRzZWxmIHNldHMgdXAgZm9yIGl0cyBjaGlsZHJlbi4KLSAg
ICAgICAgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFdmVudChFdmVudCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50
KFNjcm9sbFZpZXcqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudFZpc2libGUoYm9v
bCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzUGx1Z2luVmlldygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICBGcmFtZSogcGFyZW50RnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudEZyYW1lLmdldCgpOyB9Ci0KLSAgICAgICAgdm9pZCBmb2N1c1BsdWdp
bkVsZW1lbnQoKTsKLQotICAgICAgICBjb25zdCBTdHJpbmcmIHBsdWdpbnNQYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9wbHVnaW5zUGFnZTsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZTsgfQotICAgICAgICBjb25zdCBVUkwmIHVybCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGJvb2wgcG9wVXBDb250ZXh0TWVudShO
UE1lbnUqKTsKLSNlbmRpZgotCi0jaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0gICAgICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXdXbmRQ
cm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLSAgICAgICAgTFJFU1VMVCB3bmRQcm9j
KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsK
LSAgICAgICAgV05EUFJPQyBwbHVnaW5XbmRQcm9jKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5X
bmRQcm9jOyB9Ci0jZW5kaWYKLQotICAgICAgICAvLyBVc2VkIGZvciBtYW51YWwgbG9hZGluZwot
ICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
Ci0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7Ci0gICAgICAg
IHZvaWQgZGlkRmluaXNoTG9hZGluZygpOwotICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVz
b3VyY2VFcnJvciYpOwotCi0gICAgICAgIHN0YXRpYyBib29sIGlzQ2FsbGluZ1BsdWdpbigpOwot
Ci0gICAgICAgIGJvb2wgc3RhcnQoKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotICAgICAgICBzdGF0aWMgdm9pZCBrZWVwQWxpdmUoTlBQKTsKLSNlbmRpZgotICAgICAgICB2
b2lkIGtlZXBBbGl2ZSgpOwotCi0jaWYgUExBVEZPUk0oWDExKQotICAgICAgICBzdGF0aWMgRGlz
cGxheSogZ2V0UGx1Z2luRGlzcGxheShGcmFtZSopOwotICAgICAgICBzdGF0aWMgV2luZG93IGdl
dFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZyYW1lKTsKLSNlbmRpZgotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBQ
bHVnaW5QYWNrYWdlKiwgSFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVz
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7Ci0KLSAgICAgICAg
dm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwotICAgICAgICBib29sIHN0YXJ0T3JBZGRU
b1Vuc3RhcnRlZExpc3QoKTsKLSAgICAgICAgdm9pZCBpbml0KCk7Ci0gICAgICAgIGJvb2wgcGxh
dGZvcm1TdGFydCgpOwotICAgICAgICB2b2lkIHN0b3AoKTsKLSAgICAgICAgdm9pZCBwbGF0Zm9y
bURlc3Ryb3koKTsKLSAgICAgICAgc3RhdGljIHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1
Z2luVmlldyopOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUEVy
cm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwg
dm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYs
IGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29s
IGFsbG93SGVhZGVycyk7Ci0gICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdFJlYWRGaWxlKFZlY3Rv
cjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1Zik7Ci0jZW5kaWYK
LSAgICAgICAgc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwg
aW50IGxlbmd0aCk7Ci0gICAgICAgIHZvaWQgc2V0Q2FsbGluZ1BsdWdpbihib29sKSBjb25zdDsK
LQotICAgICAgICB2b2lkIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJbnRS
ZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIG1lZGlhQ2FuU3RhcnQoKTsKLQotI2lmIE9T
KFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICB2b2lkIHBh
aW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgICAgIHN0YXRpYyBIREMgV0lOQVBJIGhvb2tlZEJlZ2luUGFpbnQoSFdORCwg
UEFJTlRTVFJVQ1QqKTsKLSAgICAgICAgc3RhdGljIEJPT0wgV0lOQVBJIGhvb2tlZEVuZFBhaW50
KEhXTkQsIGNvbnN0IFBBSU5UU1RSVUNUKik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0aWMgYm9vbCBwbGF0Zm9ybUdldFZhbHVlU3RhdGlj
KE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSAg
ICAgICAgYm9vbCBwbGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSNlbmRpZgotCi0gICAgICAgIFJlZlB0cjxGcmFtZT4g
bV9wYXJlbnRGcmFtZTsKLSAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IG1fcGx1Z2luOwot
ICAgICAgICBIVE1MUGx1Z0luRWxlbWVudCogbV9lbGVtZW50OwotICAgICAgICBib29sIG1faXNT
dGFydGVkOwotICAgICAgICBVUkwgbV91cmw7Ci0gICAgICAgIFBsdWdpblN0YXR1cyBtX3N0YXR1
czsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1faW52YWxpZFJlY3RzOwotCi0gICAgICAgIHZv
aWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdCopOwotICAgICAgICB2b2lkIHNjaGVkdWxl
UmVxdWVzdChzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4pOwotICAgICAgICB2b2lkIHJl
cXVlc3RUaW1lckZpcmVkKCk7Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVRpbWVyRmlyZWQoKTsK
LSAgICAgICAgVGltZXIgbV9yZXF1ZXN0VGltZXI7Ci0gICAgICAgIFRpbWVyIG1faW52YWxpZGF0
ZVRpbWVyOwotCi0gICAgICAgIHZvaWQgcG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKCk7Ci0gICAg
ICAgIFRpbWVyIG1fcG9wUG9wdXBzU3RhdGVUaW1lcjsKLQotICAgICAgICB2b2lkIGxpZmVTdXBw
b3J0VGltZXJGaXJlZCgpOwotICAgICAgICBUaW1lciBtX2xpZmVTdXBwb3J0VGltZXI7Ci0KLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgYm9vbCBkaXNwYXRjaE5QRXZl
bnQoTlBFdmVudCYpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBpbnQxNl90IGRpc3BhdGNoTlBDb2NvYUV2ZW50
KE5QQ29jb2FFdmVudCYpOwotICAgICAgICBib29sIG1fdXBkYXRlZENvY29hVGV4dElucHV0UmVx
dWVzdGVkOwotICAgICAgICBib29sIG1fa2V5RG93blNlbnQ7Ci0gICAgICAgIHVpbnQxNl90IG1f
ZGlzcmVnYXJkS2V5VXBDb3VudGVyOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkK
LSAgICAgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KFdoZWVsRXZlbnQqKTsKLSNlbmRpZgotICAg
ICAgICB2b2lkIHVwZGF0ZVBsdWdpbldpZGdldCgpOwotICAgICAgICB2b2lkIHBhaW50TWlzc2lu
Z1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAg
IHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7Ci0gICAgICAgIHZvaWQg
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50Kik7Ci0jaWYgZGVmaW5lZChYUF9VTklYKSAmJiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgdm9pZCBoYW5kbGVGb2N1c0luRXZl
bnQoKTsKLSAgICAgICAgdm9pZCBoYW5kbGVGb2N1c091dEV2ZW50KCk7Ci0jZW5kaWYKLQotI2lm
IE9TKFdJTkRPV1MpCi0gICAgICAgIHZvaWQgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KEhE
Qyk7Ci0gICAgICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHNuYXBzaG90KCk7Ci0jZW5kaWYKLQotICAg
ICAgICBpbnQgbV9tb2RlOwotICAgICAgICBpbnQgbV9wYXJhbUNvdW50OwotICAgICAgICBjaGFy
KiogbV9wYXJhbU5hbWVzOwotICAgICAgICBjaGFyKiogbV9wYXJhbVZhbHVlczsKLSAgICAgICAg
U3RyaW5nIG1fcGx1Z2luc1BhZ2U7Ci0KLSAgICAgICAgU3RyaW5nIG1fbWltZVR5cGU7Ci0gICAg
ICAgIFdURjo6Q1N0cmluZyBtX3VzZXJBZ2VudDsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgICAgICBOUFAgbV9pbnN0YW5jZTsKLSAgICAgICAgTlBQX3QgbV9pbnN0YW5j
ZVN0cnVjdDsKLSAgICAgICAgTlBXaW5kb3cgbV9ucFdpbmRvdzsKLSNlbmRpZgotCi0gICAgICAg
IFZlY3Rvcjxib29sLCA0PiBtX3BvcHVwU3RhdGVTdGFjazsKLQotICAgICAgICBIYXNoU2V0PFJl
ZlB0cjxQbHVnaW5TdHJlYW0+ID4gbV9zdHJlYW1zOwotICAgICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPFBsdWdpblJlcXVlc3Q+PiBtX3JlcXVlc3RzOwotCi0gICAgICAgIGJvb2wgbV9pc1dp
bmRvd2VkOwotICAgICAgICBib29sIG1faXNUcmFuc3BhcmVudDsKLSAgICAgICAgYm9vbCBtX2hh
dmVJbml0aWFsaXplZDsKLSAgICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7Ci0KLSNpZiBk
ZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIGJvb2wgbV9uZWVkc1hFbWJlZDsKLSNlbmRpZgotCi0j
aWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE93
blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7Ci0gICAg
ICAgIFdORFBST0MgbV9wbHVnaW5XbmRQcm9jOwotICAgICAgICB1bnNpZ25lZCBtX2xhc3RNZXNz
YWdlOwotICAgICAgICBib29sIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYzsKLSAgICAgICAgSERD
IG1fd21QcmludEhEQzsKLSAgICAgICAgYm9vbCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0Owot
I2VuZGlmCi0KLSNpZiAoUExBVEZPUk0oR1RLKSAmJiBPUyhXSU5ET1dTKSkgfHwgUExBVEZPUk0o
RUZMKQotICAgICAgICAvLyBPbiBNYWMgT1NYIGFuZCBRdC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9l
cyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3aWRnZXQsCi0gICAgICAgIC8vIGJ1dCBpcyB1c2lu
ZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMgaXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcv
cGFpbnRpbmcuCi0gICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IG1fd2luZG93OwotcHVibGlj
OgotICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2luZG93OyB9Ci0gICAgICAgIHZvaWQgc2V0UGxhdGZvcm1QbHVnaW5X
aWRnZXQoUGxhdGZvcm1QbHVnaW5XaWRnZXQgd2lkZ2V0KSB7IG1fd2luZG93ID0gd2lkZ2V0OyB9
Ci0jZWxzZQotcHVibGljOgotICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBs
YXRmb3JtUGx1Z2luV2lkZ2V0IHdpZGdldCkgeyBzZXRQbGF0Zm9ybVdpZGdldCh3aWRnZXQpOyB9
Ci0gICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29u
c3QgeyByZXR1cm4gcGxhdGZvcm1XaWRnZXQoKTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0KLSNp
ZiBkZWZpbmVkKFhQX1VOSVgpIHx8IFBMQVRGT1JNKEdUSykKLSAgICAgICAgdm9pZCBzZXROUFdp
bmRvd0lmTmVlZGVkKCk7Ci0jZWxpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICAgICAgTlBfQ0dD
b250ZXh0IG1fbnBDZ0NvbnRleHQ7Ci0gICAgICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHRSZWY7
Ci0KLSAgICAgICAgdm9pZCBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci0jZW5kaWYKLQotI2lmIGRl
ZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGJv
b2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7Ci0gICAgICAgIFBpeG1hcCBtX2RyYXdhYmxl
OwotICAgICAgICBWaXN1YWwqIG1fdmlzdWFsOwotICAgICAgICBDb2xvcm1hcCBtX2NvbG9ybWFw
OwotICAgICAgICBEaXNwbGF5KiBtX3BsdWdpbkRpc3BsYXk7Ci0KLSAgICAgICAgdm9pZCBpbml0
WEV2ZW50KFhFdmVudCogZXZlbnQpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi0gICAg
ICAgIHN0YXRpYyBnYm9vbGVhbiBwbHVnUmVtb3ZlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdp
blZpZXcqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGx1Z0FkZGVkQ2FsbGJhY2soR3RrU29ja2V0
KiwgUGx1Z2luVmlldyopOwotICAgICAgICB2b2lkIHVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRD
bGlwKCk7Ci0gICAgICAgIGJvb2wgbV9wbHVnQWRkZWQ7Ci0gICAgICAgIEludFJlY3QgbV9kZWxh
eWVkQWxsb2NhdGlvbjsKLSNlbmRpZgotCi0gICAgICAgIEludFJlY3QgbV9jbGlwUmVjdDsgLy8g
VGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2VkIHBsdWctaW4KLSAgICAgICAgSW50
UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cgcmVjdC4KLQotICAgICAgICBib29sIG1f
bG9hZE1hbnVhbGx5OwotICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBtX21hbnVhbFN0cmVh
bTsKLQotICAgICAgICBib29sIG1faXNKYXZhU2NyaXB0UGF1c2VkOwotCi0gICAgICAgIGJvb2wg
bV9oYXZlQ2FsbGVkU2V0V2luZG93OwotCi0gICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBzX2N1
cnJlbnRQbHVnaW5WaWV3OwotICAgIH07Ci0KLWlubGluZSBQbHVnaW5WaWV3KiB0b1BsdWdpblZp
ZXcoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgQVNTRVJUKCF3aWRnZXQgfHwgd2lkZ2V0LT5pc1Bs
dWdpblZpZXcoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQp
OwotfQotCi1pbmxpbmUgY29uc3QgUGx1Z2luVmlldyogdG9QbHVnaW5WaWV3KGNvbnN0IFdpZGdl
dCogd2lkZ2V0KQotewotICAgIEFTU0VSVCghd2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3
KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4od2lkZ2V0KTsK
LX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0
Lgotdm9pZCB0b1BsdWdpblZpZXcoY29uc3QgUGx1Z2luVmlldyopOwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9u
cGFwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNmRkOTBhNTJiN2ExZTdjOTZlOGRmNGQ4OTliY2Y4MDE5NDhlZmZk
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
TWFpblRocmVhZFNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRl
ICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8v
IFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNv
bWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxsIGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9u
Ci0vLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBs
YXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4KLS8vIEN1cnJl
bnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3
IGluIFBsdWdpblZpZXc6OnN0YXJ0LgotLy8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5k
IEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBO
X1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0YW5jZS4KLXN0YXRpYyBQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3RhbmNlKQotewotICAgIGlmIChpbnN0YW5jZSAmJiBp
bnN0YW5jZS0+bmRhdGEpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4o
aW5zdGFuY2UtPm5kYXRhKTsKLSAgICByZXR1cm4gUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZp
ZXcoKTsKLX0KLQotdm9pZCogTlBOX01lbUFsbG9jKHVpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0
dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0g
ICAgZnJlZShwdHIpOwotfQotCi11aW50MzJfdCBOUE5fTWVtRmx1c2godWludDMyX3QpCi17Ci0g
ICAgLy8gRG8gbm90aGluZwotICAgIHJldHVybiAwOwotfQotCi12b2lkIE5QTl9SZWxvYWRQbHVn
aW5zKE5QQm9vbCByZWxvYWRQYWdlcykKLXsKLSAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxv
YWRQYWdlcyk7Ci19Ci0KLU5QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiwgTlBCeXRl
UmFuZ2UqKQotewotICAgIHJldHVybiBOUEVSUl9TVFJFQU1fTk9UX1NFRUtBQkxFOwotfQotCi1O
UEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3Rp
ZnlEYXRhKTsKLX0KLQotTlBFcnJvciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1cmwsIHRhcmdldCk7Ci19Ci0KLU5QRXJyb3IgTlBO
X1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIq
IHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lk
KiBub3RpZnlEYXRhKQotewotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0
YSk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5Q
Qm9vbCBmaWxlKQotewotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5wb3N0VVJMKHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSk7Ci19Ci0KLU5QRXJyb3IgTlBO
X05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFy
Z2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKS0+bmV3U3RyZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKLX0KLQotaW50
MzJfdCBOUE5fV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxl
biwgdm9pZCogYnVmZmVyKQotewotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT53cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKLX0KLQotTlBFcnJvciBOUE5fRGVz
dHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNv
bikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJv
eVN0cmVhbShzdHJlYW0sIHJlYXNvbik7Ci19Ci0KLWNvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQo
TlBQIGluc3RhbmNlKQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoaW5zdGFuY2UpOwotCi0gICAgIGlmICghdmlldykKLSAgICAgICAgIHJldHVybiBQbHVn
aW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKTsKLSAKLSAgICByZXR1cm4gdmlldy0+dXNlckFnZW50
KCk7Ci19Ci0KLXZvaWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpCi17Ci0gICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3Nh
Z2UpOwotfQotCi12b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCog
aW52YWxpZFJlY3QpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSk7Ci0jaWYgZGVmaW5lZChYUF9VTklYKQotICAgIC8vIE5TUGx1Z2luV3Jh
cHBlciwgYSBwbHVnaW4gd3JhcHBlciBiaW5hcnkgdGhhdCBhbGxvd3MgcnVubmluZyAzMi1iaXQg
cGx1Z2lucwotICAgIC8vIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIHR5cGljYWxseSB1c2VkIGlu
IFgxMSwgd2lsbCBzb21ldGltZXMgZ2l2ZSB1cyBhIG51bGwgTlBQIGhlcmUuCi0gICAgaWYgKCF2
aWV3KQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChp
bnZhbGlkUmVjdCk7Ci19Ci0KLXZvaWQgTlBOX0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNl
LCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQotewotICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPmludmFsaWRhdGVSZWdpb24oaW52YWxpZFJlZ2lvbik7Ci19Ci0KLXZvaWQgTlBO
X0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkKLXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpLT5mb3JjZVJlZHJhdygpOwotfQotCi1OUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAg
aW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBQbHVn
aW5WaWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKLQotICAgICBp
ZiAoIXZpZXcpCi0gICAgICAgICByZXR1cm4gUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWModmFy
aWFibGUsIHZhbHVlKTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOwotfQotCi1OUEVycm9yIE5QTl9TZXRWYWx1
ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAg
IHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJs
ZSwgdmFsdWUpOwotfQotCi12b2lkKiBOUE5fR2V0SmF2YUVudigpCi17Ci0gICAgLy8gVW5zdXBw
b3J0ZWQKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCogTlBOX0dldEphdmFQZWVyKE5QUCkKLXsK
LSAgICAvLyBVbnN1cHBvcnRlZAotICAgIHJldHVybiAwOwotfQotCi12b2lkIE5QTl9QdXNoUG9w
dXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpCi17Ci0gICAgcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShlbmFi
bGVkKTsKLX0KLQotdm9pZCBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkK
LXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3BQb3B1cHNFbmFibGVk
U3RhdGUoKTsKLX0KLQotZXh0ZXJuICJDIiB0eXBlZGVmIHZvaWQgUGx1Z2luVGhyZWFkQXN5bmND
YWxsRnVuY3Rpb24odm9pZCopOwotdm9pZCBOUE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsKE5QUCBp
bnN0YW5jZSwgUGx1Z2luVGhyZWFkQXN5bmNDYWxsRnVuY3Rpb24gZnVuYywgdm9pZCogdXNlckRh
dGEpCi17Ci0gICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZSBvbmx5IGRpZmZlcnMgZnJvbSBN
YWluVGhyZWFkRnVuY3Rpb24gYnkgYmVpbmcgZXh0ZXJuICJDIiwgd2hpY2ggZG9lc24ndCBhZmZl
Y3QgY2FsbGluZyBjb252ZW50aW9uIG9uIGFueSBjb21waWxlcnMgd2UgdXNlLgotICAgIFBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnNjaGVkdWxlQ2FsbChpbnN0YW5jZSwg
cmVpbnRlcnByZXRfY2FzdDxQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpNYWluVGhyZWFkRnVu
Y3Rpb24qPihmdW5jKSwgdXNlckRhdGEpOwotfQotCi1OUEVycm9yIE5QTl9HZXRWYWx1ZUZvclVS
TChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmws
IGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWVGb3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUs
IGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX1NldFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBO
VVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUs
IHVpbnQzMl90IGxlbikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+c2V0VmFsdWVGb3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUsIGxlbik7Ci19Ci0KLU5Q
RXJyb3IgTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mbyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIq
IHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNj
aGVtZSwgY29uc3QgY2hhciogcmVhbG0sIGNoYXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4s
IGNoYXIqKiBwYXNzd29yZCwgdWludDMyX3QqIHBsZW4pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90b2NvbCwg
aG9zdCwgcG9ydCwgc2NoZW1lLCByZWFsbSwgdXNlcm5hbWUsIHVsZW4sIHBhc3N3b3JkLCBwbGVu
KTsKLX0KLQotTlBFcnJvciBOUE5fUG9wVXBDb250ZXh0TWVudShOUFAgaW5zdGFuY2UsIE5QTWVu
dSogbWVudSkKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5zdGFuY2UpOwotICAgIFVOVVNFRF9QQVJB
TShtZW51KTsKLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QYWludEhvb2tzLmFzbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvd2luL1BhaW50SG9va3MuYXNtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
NTA4ODEzNTZhMGRkY2Q3ODMwNzI4MTFlOWYxNWExMTU5NGIxODVkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BhaW50SG9va3MuYXNtCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotOy8qCi07ICAg
IENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLTsKLTsgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotOyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotOyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLTsgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
OwotOyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLTsgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLTsgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLTsgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi07Ci07ICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLTsgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLTsgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLTsgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi07Ki8KLQotO0hEQyBfX3N0ZGNhbGwgX0hCZWdpblBhaW50
KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVDVCBscFBhaW50KTsKLQotUFVCTElDICBfSEJlZ2luUGFp
bnQKLQotX1RFWFQgICBTRUdNRU5UCi0KLV9IQmVnaW5QYWludCBQUk9DCi0gICAgIG1vdiAgcjEw
LHJjeAotICAgICBtb3YgIGVheCwxMDE3aAotICAgICBzeXNjYWxsCi0gICAgIHJldAotX0hCZWdp
blBhaW50IEVORFAKLQotX1RFWFQgICBFTkRTCi0KLTtCT09MIF9fc3RkY2FsbCBfSEVuZFBhaW50
KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpOwotCi1QVUJMSUMgIF9IRW5k
UGFpbnQKLQotX1RFWFQgICBTRUdNRU5UCi0KLV9IRW5kUGFpbnQgUFJPQwotICAgIG1vdiAgcjEw
LHJjeAotICAgIG1vdiAgZWF4LDEwMTloCi0gICAgc3lzY2FsbAotICAgIHJldAotX0hFbmRQYWlu
dCBFTkRQCi0KLV9URVhUICAgRU5EUwotCi1FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2RjNmNmMzQ5OWZjMjlkZTZhYzVhZWFkYjM5MjQwNDI3MWFhMGUxOC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzODUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luUGF0aHNGcm9t
UmVnaXN0cnkoSEtFWSByb290S2V5LCBIYXNoU2V0PFN0cmluZz4mIHBhdGhzKQotewotICAgIEhL
RVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNv
ZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkp
OwotCi0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB3Y2hhcl90IG5hbWVbMTI4XTsKLSAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAg
ICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAg
ICAgIERXT1JEIG5hbWVMZW4gPSBXVEZfQVJSQVlfTEVOR1RIKG5hbWUpOwotICAgICAgICByZXN1
bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0
TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAg
ICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXplb2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5
cGU7Ci0KLSAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShrZXksIG5hbWUsIEwiUGF0
aCIsICZ0eXBlLCBwYXRoU3RyLCAmcGF0aFN0clNpemUpOwotICAgICAgICBpZiAocmVzdWx0ICE9
IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBwYXRocy5hZGQoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9m
KFdDSEFSKSAtIDEpKTsKLSAgICB9Ci0KLSAgICBSZWdDbG9zZUtleShrZXkpOwotfQotCi12b2lk
IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJp
bmc+JiBwYXRocykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNl
IGluc2Vuc2l0aXZlIHNldC4KLSAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwot
Ci0gICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0gICAgV0lOMzJfRklO
RF9EQVRBVyBmaW5kRmlsZURhdGE7Ci0KLSAgICBTdHJpbmcgb2xkV01QUGx1Z2luUGF0aDsKLSAg
ICBTdHJpbmcgbmV3V01QUGx1Z2luUGF0aDsKLQotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9y
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwq
IjsKLQotICAgICAgICBoRmluZCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksICZmaW5kRmlsZURhdGEpOwotCi0gICAgICAgIGlm
IChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmli
dXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5j
RmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICBp
ZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dp
dGgoImRsbCIsIGZhbHNlKSkgJiYKLSAgICAgICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNl
KGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIs
IGZhbHNlKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmlu
ZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKLSAgICAgICAgICAgIGlmICghdW5p
cXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgcGF0aHMuYWRkKGZ1bGxQYXRoKTsKLQotICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnBkc3BsYXkuZGxsIikpCi0gICAg
ICAgICAgICAgICAgb2xkV01QUGx1Z2luUGF0aCA9IGZ1bGxQYXRoOwotICAgICAgICAgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKLSAgICAg
ICAgICAgICAgICBuZXdXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7Ci0KLSAgICAgICAgfSB3aGls
ZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7Ci0KLSAgICAgICAg
RmluZENsb3NlKGhGaW5kKTsKLSAgICB9Ci0KLSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3Ry
eShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBhdGhzKTsKLSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdp
c3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGF0aHMpOwotCi0gICAgLy8gSWYgYm90aCB0aGUgb2xk
IGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJlc2VudCBpbiB0aGUgcGx1Z2lucyBzZXQsIAotICAg
IC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBzbyB3ZSBkb24ndCBlbmQgdXAgY2hvb3NpbmcgdGhl
IG9sZCBvbmUuCi0gICAgaWYgKCFvbGRXTVBQbHVnaW5QYXRoLmlzRW1wdHkoKSAmJiAhbmV3V01Q
UGx1Z2luUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHBhdGhzLnJlbW92ZShvbGRXTVBQbHVnaW5Q
YXRoKTsKLX0KLQotc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJpbmco
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQotewotICAgIFZlY3RvcjxpbnQ+IHZlcnNpb247
Ci0KLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7Ci0gICAgdW5zaWduZWQgZW5kUG9zOwotICAg
IAotICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKLSAgICAg
ICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgo
KTsgKytlbmRQb3MpCi0gICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICcu
JyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJzdHJp
bmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOwotICAgICAgICB2ZXJzaW9u
LmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKLQotICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyAr
IDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcnNpb247Ci19Ci0KLS8vIFRoaXMgcmV0dXJucyB3
aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCi1zdGF0aWMgaW5saW5lIGJv
b2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVj
dG9yPGludD4mIHZlcnNpb25CKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJz
aW9uQS5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJz
aW9uQltpXSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBlbHNlIGlmICh2ZXJz
aW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhlIHNh
bWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFsc2UK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1
Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIC8vIEVu
dW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lzdHJ5Ci0g
ICAgSEtFWSBrZXk7Ci0gICAgTE9ORyByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gUmVnT3Bl
bktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1vemlsbGEiKSwgMCwg
S0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAg
ICAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQot
ICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgICAgICBmb3IgKGludCBpID0gMDs7IGkr
KykgewotICAgICAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihX
Q0hBUik7Ci0gICAgICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwg
Jm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgICAgICBpZiAocmVz
dWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKSArICJcXEV4
dGVuc2lvbnMiOwotICAgICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5OwotCi0gICAgICAgICAg
ICAvLyBUcnkgb3BlbmluZyB0aGUga2V5Ci0gICAgICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5
RXgoa2V5LCBleHRlbnNpb25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRh
dGEoKSwgMCwgS0VZX1JFQUQsICZleHRlbnNpb25zS2V5KTsKLQotICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm93IGdldCB0aGUg
cGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICBXQ0hBUiBwbHVnaW5zRGlyZWN0b3J5
U3RyW19NQVhfUEFUSF07Ci0gICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc0RpcmVjdG9yeVNp
emUgPSBzaXplb2YocGx1Z2luc0RpcmVjdG9yeVN0cik7Ci0gICAgICAgICAgICAgICAgRFdPUkQg
dHlwZTsKLQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChleHRlbnNp
b25zS2V5LCBURVhUKCJQbHVnaW5zIiksIDAsICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5zRGlyZWN0
b3J5U3RyLCAmcGx1Z2luc0RpcmVjdG9yeVNpemUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAgICAgICAgICAg
ICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBsdWdpbnNEaXJlY3RvcnlTdHIsIHBsdWdp
bnNEaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLQotICAgICAgICAgICAgICAg
IFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBSZWdDbG9zZUtleShrZXkpOwotICAgIH0KLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3Ry
aW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAgLy8gVGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4g
aXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJl
Zm94IGluc3RhbGxzCi0gICAgV0NIQVIgcGx1Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFd
OwotICAgIERXT1JEIHBsdWdpbkRpcmVjdG9yeVNpemUgPSA6OkV4cGFuZEVudmlyb25tZW50U3Ry
aW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxcUEZpbGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVj
dG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKTsKLQotICAgIGlm
IChwbHVnaW5EaXJlY3RvcnlTaXplID4gMCAmJiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IFdURl9B
UlJBWV9MRU5HVEgocGx1Z2luRGlyZWN0b3J5U3RyKSkKLSAgICAgICAgZGlyZWN0b3JpZXMuYXBw
ZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7
Ci0KLSAgICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltf
TUFYX1BBVEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2Yo
aW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0UmVn
aXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIEwiU29mdHdhcmVcXE1pY3Jvc29mdFxcTWVk
aWFQbGF5ZXIiLCBMIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiLCAmdHlwZSwgJmluc3RhbGxhdGlv
bkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJl
c3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAgICBkaXJlY3Rv
cmllcy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9u
RGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBhZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVj
dG9yaWVzKQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3Blbktl
eUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJl
YWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUND
RVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgRklMRVRJ
TUUgbGFzdE1vZGlmaWVkOwotCi0gICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247
Ci0gICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOwotCi0gICAgLy8gRW51bWVy
YXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBu
YW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAgICAgICAgcmVzdWx0ID0g
UmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlm
aWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVy
c2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOwotICAgICAgICBpZiAoY29tcGFyZVZl
cnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKLSAgICAgICAg
ICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247Ci0gICAgICAgICAgICBs
YXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxs
KCkpIHsKLSAgICAgICAgRFdPUkQgdHlwZTsKLSAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQ
YXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUg
PSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKLQotICAgICAgICBTdHJpbmcgYWNyb2Jh
dFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxh
dGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOwotICAgICAgICByZXN1
bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktl
eVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIDAsICZ0eXBlLCBh
Y3JvYmF0SW5zdGFsbFBhdGhTdHIsICZhY3JvYmF0SW5zdGFsbFBhdGhTaXplKTsKLQotICAgICAg
ICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIFN0cmluZyBhY3Jv
YmF0UGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5nKGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgYWNyb2Jh
dEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJyb3dzZXIiOwotICAg
ICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIGFkZEphdmFQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVz
KQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhL
RVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEphdmFTb2Z0XFxKYXZhIFBsdWctaW4i
KSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgV0NIQVIgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxh
c3RNb2RpZmllZDsKLQotICAgIFZlY3RvcjxpbnQ+IGxhdGVzdEphdmFWZXJzaW9uOwotICAgIFN0
cmluZyBsYXRlc3RKYXZhVmVyc2lvblN0cmluZzsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlz
Ci0gICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNp
emVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlF
eFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAg
ICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgVmVjdG9yPGludD4gamF2YVZlcnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3Ry
aW5nKG5hbWUsIG5hbWVMZW4pKTsKLSAgICAgICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhqYXZhVmVy
c2lvbiwgbGF0ZXN0SmF2YVZlcnNpb24pKSB7Ci0gICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lv
biA9IGphdmFWZXJzaW9uOwotICAgICAgICAgICAgbGF0ZXN0SmF2YVZlcnNpb25TdHJpbmcgPSBT
dHJpbmcobmFtZSwgbmFtZUxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWxhdGVz
dEphdmFWZXJzaW9uU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBEV09SRCB0eXBlOwotICAg
ICAgICBXQ0hBUiBqYXZhSW5zdGFsbFBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQg
amF2YUluc3RhbGxQYXRoU2l6ZSA9IHNpemVvZihqYXZhSW5zdGFsbFBhdGhTdHIpOwotICAgICAg
ICBEV09SRCB1c2VOZXdQbHVnaW5WYWx1ZTsKLSAgICAgICAgRFdPUkQgdXNlTmV3UGx1Z2luU2l6
ZTsKLQotICAgICAgICBTdHJpbmcgamF2YVBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEphdmFT
b2Z0XFxKYXZhIFBsdWctaW5cXCIgKyBsYXRlc3RKYXZhVmVyc2lvblN0cmluZzsKLSAgICAgICAg
cmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQbHVnaW5L
ZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBMIlVzZU5ld0ph
dmFQbHVnaW4iLCAmdHlwZSwgJnVzZU5ld1BsdWdpblZhbHVlLCAmdXNlTmV3UGx1Z2luU2l6ZSk7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHVzZU5ld1BsdWdpblZh
bHVlID09IDEpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9M
T0NBTF9NQUNISU5FLCBqYXZhUGx1Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLmRhdGEoKSwgTCJKYXZhSG9tZSIsICZ0eXBlLCBqYXZhSW5zdGFsbFBhdGhTdHIsICZq
YXZhSW5zdGFsbFBhdGhTaXplKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VD
Q0VTUykgewotICAgICAgICAgICAgICAgIFN0cmluZyBqYXZhUGx1Z2luRGlyZWN0b3J5ID0gU3Ry
aW5nKGphdmFJbnN0YWxsUGF0aFN0ciwgamF2YUluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hB
UikgLSAxKSArICJcXGJpblxcbmV3X3BsdWdpbiI7Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3Jp
ZXMuYXBwZW5kKGphdmFQbHVnaW5EaXJlY3RvcnkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJp
bmcgc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgpCi17Ci0gICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVT
dHJbX01BWF9QQVRIXTsKLSAgICBzdGF0aWMgU3RyaW5nIHBsdWdpbnNEaXJlY3Rvcnk7Ci0gICAg
c3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luRGlyZWN0b3J5ID0gZmFsc2U7Ci0KLSAgICBpZiAoIWNh
Y2hlZFBsdWdpbkRpcmVjdG9yeSkgewotICAgICAgICBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSB0
cnVlOwotCi0gICAgICAgIGludCBtb2R1bGVGaWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1l
KDAsIG1vZHVsZUZpbGVOYW1lU3RyLCBfTUFYX1BBVEgpOwotCi0gICAgICAgIGlmICghbW9kdWxl
RmlsZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5hbWVMZW4gPT0gX01BWF9QQVRIKQotICAgICAgICAg
ICAgZ290byBleGl0OwotCi0gICAgICAgIGlmICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZp
bGVOYW1lU3RyKSkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBwbHVnaW5zRGly
ZWN0b3J5ID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOwotICAgIH0K
LWV4aXQ6Ci0gICAgcmV0dXJuIHBsdWdpbnNEaXJlY3Rvcnk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVj
dG9yaWVzKQotewotICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0KLSAg
ICBpZiAoIUdldFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIFdURl9BUlJBWV9M
RU5HVEgoc3lzdGVtRGlyZWN0b3J5U3RyKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFS
IG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwotCi0gICAgUGF0aENvbWJpbmUobWFj
cm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxc
Rmxhc2giKSk7Ci0gICAgZGlyZWN0b3JpZXMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIp
OwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0
b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOwotICAgIGRpcmVjdG9yaWVz
LmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1
Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCi17Ci0gICAgVmVjdG9yPFN0
cmluZz4gZGlyZWN0b3JpZXM7Ci0gICAgU3RyaW5nIG91ckRpcmVjdG9yeSA9IHNhZmFyaVBsdWdp
bnNEaXJlY3RvcnkoKTsKLQotICAgIGlmICghb3VyRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAg
ICBkaXJlY3Rvcmllcy5hcHBlbmQob3VyRGlyZWN0b3J5KTsKLSAgICBhZGRBZG9iZUFjcm9iYXRQ
bHVnaW5EaXJlY3RvcnkoZGlyZWN0b3JpZXMpOwotICAgIGFkZE1vemlsbGFQbHVnaW5EaXJlY3Rv
cmllcyhkaXJlY3Rvcmllcyk7Ci0gICAgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0
b3J5KGRpcmVjdG9yaWVzKTsKLSAgICBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoZGly
ZWN0b3JpZXMpOwotCi0gICAgcmV0dXJuIGRpcmVjdG9yaWVzOwotfQotCi1ib29sIFBsdWdpbkRh
dGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9y
eSkKLXsKLSAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgp
OwotCi0gICAgaWYgKCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkgJiYgIWRpcmVjdG9yeS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIG91ckRpcmVjdG9yeSA9PSBkaXJlY3Rvcnk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGE1M2MzMTVjMjAxODQzOTRmM2I0MDY0YTNmNTQ0NzU3M2VkMmNmMDkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5N
ZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0KLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBTZXQgYSB0aW1l
ciB0byBtYWtlIHN1cmUgd2UgcHJvY2VzcyBhbnkgcXVldWVkIG1lc3NhZ2VzIGF0IGxlYXN0IGV2
ZXJ5IDE2bXMuCi0vLyBUaGlzIHZhbHVlIGFsbG93cyBGbGFzaCA2MCBtZXNzYWdlcy9zZWNvbmQs
IHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggZm9yIHZpZGVvCi0vLyBwbGF5YmFjaywgYW5kIGFsc28g
Z2V0cyB1cyBvdmVyIHRoZSBsaW1pdCBmb3Iga2lja2luZyBpbnRvIGhpZ2gtcmVzb2x1dGlvbgot
Ly8gdGltZXIgbW9kZSAoc2VlIFNoYXJlZFRpbWVyV2luLmNwcCkuCi1zdGF0aWMgY29uc3QgZG91
YmxlIE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCA9IDAuMDE2OwotCi0vLyBEdXJpbmcgYSBj
b250aW51b3VzIHN0cmVhbSBvZiBtZXNzYWdlcywgcHJvY2VzcyBvbmUgZXZlcnkgNW1zLgotc3Rh
dGljIGNvbnN0IGRvdWJsZSBNZXNzYWdlRGlyZWN0UHJvY2Vzc2luZ0ludGVydmFsID0gMC4wMDU7
Ci0KLVBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4o
UGx1Z2luVmlldyogcGx1Z2luVmlldykKLSAgICA6IG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3KQot
ICAgICwgbV9iYWNrKDApCi0gICAgLCBtX2Zyb250KDApCi0gICAgLCBtX21lc3NhZ2VUaHJvdHRs
ZVRpbWVyKCp0aGlzLCAmUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxl
VGltZXJGaXJlZCkKLSAgICAsIG1fbGFzdE1lc3NhZ2VUaW1lKDApCi17Ci0gICAgLy8gSW5pdGlh
bGl6ZSB0aGUgZnJlZSBsaXN0IHdpdGggb3VyIGlubGluZSBtZXNzYWdlcwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBOdW1JbmxpbmVNZXNzYWdlcyAtIDE7IGkrKykKLSAgICAgICAgbV9p
bmxpbmVNZXNzYWdlc1tpXS5uZXh0ID0gJm1faW5saW5lTWVzc2FnZXNbaSArIDFdOwotICAgIG1f
aW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXS5uZXh0ID0gMDsKLSAgICBtX2Zy
ZWVJbmxpbmVNZXNzYWdlcyA9ICZtX2lubGluZU1lc3NhZ2VzWzBdOwotfQotCi1QbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjp+UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbigpCi17Ci0gICAgUGx1
Z2luTWVzc2FnZSogbmV4dDsKLQotICAgIGZvciAoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1f
ZnJvbnQ7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBuZXh0KSB7Ci0gICAgICAgIG5leHQgPSBtZXNzYWdl
LT5uZXh0OwotICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKLSAgICB9Ci19Ci0KLXZvaWQg
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6YXBwZW5kTWVzc2FnZShIV05EIGhXbmQsIFVJTlQg
bXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFBsdWdpbk1lc3NhZ2Uq
IG1lc3NhZ2UgPSBhbGxvY2F0ZU1lc3NhZ2UoKTsKLQotICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25k
OwotICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsKLSAgICBtZXNzYWdlLT53UGFyYW0gPSB3UGFyYW07
Ci0gICAgbWVzc2FnZS0+bFBhcmFtID0gbFBhcmFtOwotICAgIG1lc3NhZ2UtPm5leHQgPSAwOwot
Ci0gICAgaWYgKG1fYmFjaykKLSAgICAgICAgbV9iYWNrLT5uZXh0ID0gbWVzc2FnZTsKLSAgICBt
X2JhY2sgPSBtZXNzYWdlOwotICAgIGlmICghbV9mcm9udCkKLSAgICAgICAgbV9mcm9udCA9IG1l
c3NhZ2U7Ci0KLSAgICAvLyBJZiBpdCBoYXMgYmVlbiBtb3JlIHRoYW4gTWVzc2FnZURpcmVjdFBy
b2Nlc3NpbmdJbnRlcnZhbCBiZXR3ZWVuIHRocm90dGxlZCBtZXNzYWdlcywKLSAgICAvLyBnbyBh
aGVhZCBhbmQgcHJvY2VzcyBhIG1lc3NhZ2UgZGlyZWN0bHkuCi0gICAgZG91YmxlIGN1cnJlbnRU
aW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAgaWYgKGN1cnJlbnRUaW1l
IC0gbV9sYXN0TWVzc2FnZVRpbWUgPiBNZXNzYWdlRGlyZWN0UHJvY2Vzc2luZ0ludGVydmFsKSB7
Ci0gICAgICAgIHByb2Nlc3NRdWV1ZWRNZXNzYWdlKCk7Ci0gICAgICAgIG1fbGFzdE1lc3NhZ2VU
aW1lID0gY3VycmVudFRpbWU7Ci0gICAgICAgIGlmICghbV9mcm9udCkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRo
cm90dGxlVGltZUludGVydmFsKTsKLX0KLQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2lu
Ojpwcm9jZXNzUXVldWVkTWVzc2FnZSgpCi17Ci0gICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9
IG1fZnJvbnQ7Ci0gICAgbV9mcm9udCA9IG1fZnJvbnQtPm5leHQ7Ci0gICAgaWYgKG1lc3NhZ2Ug
PT0gbV9iYWNrKQotICAgICAgICBtX2JhY2sgPSAwOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgUGx1
Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uIHdoaWxlIGNhbGxpbmcgaXRzIHdpbmRvdyBwcm9jLgot
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82OTMwMjgwPgotICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBw
cm90ZWN0KG1fcGx1Z2luVmlldyk7Ci0gICAgOjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblZpZXct
PnBsdWdpblduZFByb2MoKSwgbWVzc2FnZS0+aFduZCwgbWVzc2FnZS0+bXNnLCBtZXNzYWdlLT53
UGFyYW0sIG1lc3NhZ2UtPmxQYXJhbSk7Ci0KLSAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKLX0K
LQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjptZXNzYWdlVGhyb3R0bGVUaW1lckZp
cmVkKCkKLXsKLSAgICBwcm9jZXNzUXVldWVkTWVzc2FnZSgpOwotCi0gICAgaWYgKG1fZnJvbnQp
Ci0gICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJv
dHRsZVRpbWVJbnRlcnZhbCk7Ci19Ci0KLVBsdWdpbk1lc3NhZ2UqIFBsdWdpbk1lc3NhZ2VUaHJv
dHRsZXJXaW46OmFsbG9jYXRlTWVzc2FnZSgpCi17Ci0gICAgUGx1Z2luTWVzc2FnZSAqbWVzc2Fn
ZTsKLQotICAgIGlmIChtX2ZyZWVJbmxpbmVNZXNzYWdlcykgewotICAgICAgICBtZXNzYWdlID0g
bV9mcmVlSW5saW5lTWVzc2FnZXM7Ci0gICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVz
c2FnZS0+bmV4dDsKLSAgICB9IGVsc2UKLSAgICAgICAgbWVzc2FnZSA9IG5ldyBQbHVnaW5NZXNz
YWdlOwotCi0gICAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLWJvb2wgUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0gICAg
cmV0dXJuIG1lc3NhZ2UgPj0gJm1faW5saW5lTWVzc2FnZXNbMF0gJiYgbWVzc2FnZSA8PSAmbV9p
bmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdOwotfQotCi12b2lkIFBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKGlzSW5saW5lTWVzc2FnZShtZXNzYWdlKSkgewotICAgICAgICBtZXNzYWdlLT5u
ZXh0ID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7Ci0gICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2Vz
ID0gbWVzc2FnZTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGVsZXRlIG1lc3NhZ2U7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggN2M1MTAzMDgzNmQzYTNlOTI3N2E2MGQ1N2FkNjM3YzVhZmYxZGFjNi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEs
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKLSNkZWZp
bmUgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbl9oCi0KLSNpbmNsdWRlICJUaW1lci5oIgotCi0j
aW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgUGx1
Z2luVmlldzsKLQotICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsKLSAgICAgICAgSFdORCBoV25k
OwotICAgICAgICBVSU5UIG1zZzsKLSAgICAgICAgV1BBUkFNIHdQYXJhbTsKLSAgICAgICAgTFBB
UkFNIGxQYXJhbTsKLQotICAgICAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKLSAgICB9
OwotCi0gICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbiB7Ci0gICAgcHVibGljOgot
ICAgICAgICBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZpZXcqKTsKLSAgICAgICAg
flBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oKTsKLQotICAgICAgICB2b2lkIGFwcGVuZE1lc3Nh
Z2UoSFdORCwgVUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNKTsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIHZvaWQgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKLSAgICAgICAgdm9pZCBtZXNzYWdlVGhy
b3R0bGVUaW1lckZpcmVkKCk7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2Fn
ZSgpOwotICAgICAgICBib29sIGlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdl
KTsKLSAgICAgICAgdm9pZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKLQot
ICAgICAgICBQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2Uq
IG1fYmFjazsKLSAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcm9udDsKLQotICAgICAgICBzdGF0
aWMgY29uc3QgaW50IE51bUlubGluZU1lc3NhZ2VzID0gNDsKLSAgICAgICAgUGx1Z2luTWVzc2Fn
ZSBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzXTsKLSAgICAgICAgUGx1Z2luTWVz
c2FnZSogbV9mcmVlSW5saW5lTWVzc2FnZXM7Ci0KLSAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhy
b3R0bGVUaW1lcjsKLSAgICAgICAgZG91YmxlIG1fbGFzdE1lc3NhZ2VUaW1lOwotICAgIH07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFj
a2FnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2lu
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg1MjU3ZDYyMjkyNzIwOTE4YTUx
YTM2ZDgyN2Q4Y2NkMmQ0MTljMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotCi0jaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
RGVidWcuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgi
Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFN0cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBMUFZP
SUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBTdHJpbmcmIGluZm8pCi17Ci0gICAgTFBWT0lEIGJ1
ZmZlcjsKLSAgICBVSU5UIGJ1ZmZlckxlbmd0aDsKLSAgICBTdHJpbmcgc3ViSW5mbyA9ICJcXFN0
cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiArIGluZm87Ci0gICAgYm9vbCByZXR2YWwgPSBWZXJR
dWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEsCi0gICAgICAgIGNvbnN0X2Nhc3Q8VUNoYXIqPihz
dWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwKLSAgICAgICAg
JmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7Ci0gICAgaWYgKCFyZXR2YWwgfHwgYnVmZmVyTGVuZ3Ro
ID09IDApCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8vIFN1YnRyYWN0IDEgZnJv
bSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50IHRoZSB0cmFpbGluZyBudWxsIGNoYXJhY3Rlci4K
LSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBidWZm
ZXJMZW5ndGggLSAxKTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlz
dGVkKCkKLXsKLSAgICBpZiAobmFtZSgpID09ICJDaXRyaXggSUNBIENsaWVudCIpIHsKLSAgICAg
ICAgLy8gVGhlIENpdHJpeCBJQ0EgQ2xpZW50IHBsdWctaW4gcmVxdWlyZXMgYSBNb3ppbGxhLWJh
c2VkIGJyb3dzZXI7IHNlZSA8cmRhcjovLzY0MTg2ODE+LgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewotICAg
ICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZlcmxp
Z2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgotICAgICAgICAvLyB0aGUgbGF0ZXN0IDEu
MCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNoLCBz
byBhbGxvdyBpdAotICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCi0gICAgICAgIHN0
YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gc2xQbHVnaW5NaW5SZXF1aXJlZCgweDUx
QkUwMDAwLCAweDAwMDEwMDAwKTsKLQotICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKHNs
UGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZU5hbWUoKSwgIm5wbW96YXguZGxsIikpIHsK
LSAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMg
YWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRsbAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVOYW1lKCksICJucHdwZi5kbGwiKSkgewot
ICAgICAgICAvLyBCdWcgNTcxMTk6IE1pY3Jvc29mdCBXaW5kb3dzIFByZXNlbnRhdGlvbiBGb3Vu
ZGF0aW9uIChXUEYpIHBsdWctaW4gY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb20uZGxsCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAobmFtZSgpID09ICJZYWhvbyBBcHBs
aWNhdGlvbiBTdGF0ZSBQbHVnaW4iKSB7Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg2MAotICAgICAgICAvLyBCdWcgaW4gWWFob28gQXBwbGlj
YXRpb24gU3RhdGUgcGx1Zy1pbiBlYXJsaWVyIHRoYW4gMS4wLjAuNiBsZWFkcyB0byBoZWFwIGNv
cnJ1cHRpb24uIAotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHlh
aG9vQXBwU3RhdGVQbHVnaW5NaW5SZXF1aXJlZCgweDAwMDAwMDA2LCAweDAwMDEwMDAwKTsKLSAg
ICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbih5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVxdWly
ZWQpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hv
Y2t3YXZlLWZsYXNoIikgewotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJz
aW9uIGZsYXNoVGVuVmVyc2lvbigweDAwMDAwMDAwLCAweDAwMGEwMDAwKTsKLQotICAgICAgICAv
LyBQcmUgMTAgRmxhc2ggb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0
dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50Ci0gICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24o
Zmxhc2hUZW5WZXJzaW9uKSA8IDApCi0gICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVp
cmtXYW50c01vemlsbGFVc2VyQWdlbnQpOwotCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBs
dWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOwotICAgIH0KLQotICAgIGlmIChuYW1lKCkuY29u
dGFpbnMoIk1pY3Jvc29mdCIpICYmIG5hbWUoKS5jb250YWlucygiV2luZG93cyBNZWRpYSIpKSB7
Ci0gICAgICAgIC8vIFRoZSBXTVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5Q
UF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KLSAgICAgICAg
Ly8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXpl
Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxs
KTsKLQotICAgICAgICAvLyBXaW5kb3dsZXNzIG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0
aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJlbW92ZSB0aGF0IHBhcmFtZXRlciAKLSAgICAgICAg
Ly8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhlIHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFk
ZChQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKTsKLQotICAgICAgICAvLyBX
TVAgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29wIHRoYXQgaXQgZW50ZXJzIHdoZW5ldmVyIHdlIGNh
bGwgaXQgb3IKLSAgICAgICAgLy8gYXNrIGl0IHRvIHBhaW50LiBUaGlzIG1vZGFsIGxvb3AgY2Fu
IGRlbGl2ZXIgbWVzc2FnZXMgdG8gb3RoZXIKLSAgICAgICAgLy8gd2luZG93cyBpbiBXZWJLaXQg
YXQgdGltZXMgd2hlbiB0aGV5IGFyZSBub3QgZXhwZWN0aW5nIHRoZW0gKGZvcgotICAgICAgICAv
LyBleGFtcGxlLCBkZWxpdmVyaW5nIGEgV01fUEFJTlQgbWVzc2FnZSBkdXJpbmcgYSBsYXlvdXQp
LCBhbmQgdGhlc2UKLSAgICAgICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMuCi0gICAgICAgIG1fcXVp
cmtzLmFkZChQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApOwotICAgIH0KLQotICAgIGlm
IChuYW1lKCkgPT0gIlZMQyBNdWx0aW1lZGlhIFBsdWdpbiIgfHwgbmFtZSgpID09ICJWTEMgTXVs
dGltZWRpYSBQbHVnLWluIikgewotICAgICAgICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rlc3Ryb3kg
aWYgd2UgY2FsbCBOUFBfU2V0V2luZG93IHdpdGggYSBudWxsIHdpbmRvdyBoYW5kbGUKLSAgICAg
ICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ry
b3kpOwotCi0gICAgICAgIC8vIFZMQyAwLjguNmQgYW5kIDAuOC42ZSBjcmFzaCBpZiBtdWx0aXBs
ZSBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Nzcz
MDcwPiB0cmFja3MgYWxsb3dpbmcgbXVsdGlwbGUgaW5zdGFuY2VzIHdoZW4gdGhpcwotICAgICAg
ICAvLyBidWcgaXMgZml4ZWQuCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRB
bGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgRGl2WCBwbHVnaW4g
c2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1
cGRhdGVzIGl0cyBzaXplLCBzbwotICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdp
biB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQotICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8vZGl2
eCIpCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dD
YWxsKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVt
IGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCi0gICAg
Ly8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxl
IHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0by4KLSAgICAv
LyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0
ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5jZSBnb2VzIGF3YXkuCi0gICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS81NDg3NzQyPi4KLSAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gt
c2lsdmVybGlnaHQiKQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2Fk
UGx1Z2luKTsKLQotICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlw
ZShtaW1lVHlwZSkpIHsKLSAgICAgICAgLy8gQmVjYXVzZSBhIHNpbmdsZSBwcm9jZXNzIGNhbm5v
dCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fubm90IHJlbGlhYmx5IHVubG9hZCBhCi0g
ICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxvYWQgdGhlIEphdmEgcGx1Z2luLCBvciB3
ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBWTQotICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKLQotICAgICAgICAvLyBTZXR0aW5nIHRoZSB3
aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyByZXBh
aW50IHByb2JsZW1zCi0gICAgICAgIC8vIHdpdGggdGhlIEphdmEgcGx1Zy1pbi4KLSAgICAgICAg
bV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7
Ci0gICAgfQotCi0gICAgaWYgKG1pbWVUeXBlID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVn
aW4iKSB7Ci0gICAgICAgIC8vIFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0
aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93
LgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1l
TWVzc2FnZVJlY3Vyc2l2ZWx5KTsKLQotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1
bGVWZXJzaW9uIGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbigweDAwMEIwQjI0
LCAweDAwMDYwMDAwKTsKLQotICAgICAgICAvLyBVbmxvYWRpbmcgUmVhbFBsYXllciB2ZXJzaW9u
cyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNlIGEgaGFuZzsgc2VlIHJkYXI6Ly81NjY5MzE3Lgot
ICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVubG9hZGluZyB3aGVuIHRoaXMgYnVnIGluIHRoZSBS
ZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQgKHJkYXI6Ly81NzEzMTQ3KQotICAgICAgICBpZiAo
Y29tcGFyZUZpbGVWZXJzaW9uKGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbikg
PiAwKQotICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdp
bik7Ci0gICAgfQotfQotCi1ib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCi17Ci0gICAg
RFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOwotICAgIHZlcnNpb25JbmZvU2l6ZSA9
IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLCAmemVyb0hhbmRsZSk7Ci0gICAgaWYg
KHZlcnNpb25JbmZvU2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IHZlcnNpb25JbmZvRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPih2ZXJzaW9uSW5mb1Np
emUpOwotCi0gICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKGNvbnN0X2Nhc3Q8VUNoYXIqPiht
X3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLAotICAgICAgICAg
ICAgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBtX25hbWUgPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0Rh
dGEuZ2V0KCksICJQcm9kdWN0TmFtZSIpOwotICAgIG1fZGVzY3JpcHRpb24gPSBnZXRWZXJzaW9u
SW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJGaWxlRGVzY3JpcHRpb24iKTsKLSAgICBpZiAo
bV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3JpcHRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFZTX0ZJWEVERklMRUlORk8qIGluZm87Ci0gICAgVUlOVCBpbmZvU2l6
ZTsKLSAgICBpZiAoIVZlclF1ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgTCJcXCIs
IChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19GSVhF
REZJTEVJTkZPKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9kdWxlVmVyc2lvbi5s
ZWFzdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKLSAgICBtX21vZHVsZVZlcnNpb24ubW9z
dFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKLQotICAgIGlmIChpc1BsdWdpbkJsYWNrbGlz
dGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
OwotICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIk1JTUVUeXBlIiku
c3BsaXQoJ3wnLCB0eXBlcyk7Ci0gICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9uTGlzdHM7Ci0g
ICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZUV4dGVudHMiKS5z
cGxpdCgnfCcsIGV4dGVuc2lvbkxpc3RzKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlwdGlv
bnM7Ci0gICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZU9wZW5O
YW1lIikuc3BsaXQoJ3wnLCBkZXNjcmlwdGlvbnMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdHlwZXNb
aV0ubG93ZXIoKTsKLSAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gaSA8IGRlc2NyaXB0aW9u
cy5zaXplKCkgPyBkZXNjcmlwdGlvbnNbaV0gOiAiIjsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lv
bkxpc3QgPSBpIDwgZXh0ZW5zaW9uTGlzdHMuc2l6ZSgpID8gZXh0ZW5zaW9uTGlzdHNbaV0gOiAi
IjsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zVmVjdG9yOwotICAgICAgICBl
eHRlbnNpb25MaXN0LnNwbGl0KCcsJywgZXh0ZW5zaW9uc1ZlY3Rvcik7Ci0KLSAgICAgICAgLy8g
R2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxpc3QgdGhhdCBtYXkgYmUgYXQgdGhlIGVuZCBvZiB0
aGUgZGVzY3JpcHRpb24gc3RyaW5nLgotICAgICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmlu
ZCgiKCoiKTsKLSAgICAgICAgaWYgKHBvcyAhPSAtMSkgewotICAgICAgICAgICAgLy8gVGhlcmUg
bWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZi4KLSAgICAgICAgICAg
IGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9uW3BvcyAtIDFdID09ICcgJykKLSAgICAgICAgICAg
ICAgICBwb3MtLTsKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24ubGVmdChw
b3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBxdWlya3MgZm9yIHRo
ZSBNSU1FIHR5cGVzIHRoaXMgcGx1Zy1pbiBzdXBwb3J0cwotICAgICAgICBkZXRlcm1pbmVRdWly
a3ModHlwZSk7Ci0KLSAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZCh0eXBlLCBleHRlbnNp
b25zVmVjdG9yKTsKLSAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKHR5cGUsIGRlc2Ny
aXB0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNr
YWdlOjpsb2FkKCkKLXsKLSAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsK
LSAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0
b3AoKTsKLSAgICB9IGVsc2UgaWYgKG1faXNMb2FkZWQpIHsKLSAgICAgICAgaWYgKG1fcXVpcmtz
LmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2xvYWRDb3VudCsrOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhfUEFU
SF07Ci0KLSAgICAgICAgaWYgKCE6OkdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCBjdXJy
ZW50UGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgU3RyaW5nIHBh
dGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNlRmluZCgnXFwnKSk7Ci0KLSAg
ICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIC8vIExvYWQgdGhlIGxpYnJhcnkKLSAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5
RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgTE9B
RF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpOwotCi0gICAgICAgIGlmICghOjpTZXRDdXJyZW50
RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsKLSAgICAgICAgICAgIGlmIChtX21vZHVsZSkKLSAg
ICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV9tb2R1bGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIG1faXNMb2FkZWQgPSB0cnVlOwotCi0gICAgTlBfR2V0RW50
cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKLSAgICBOUF9Jbml0aWFsaXpl
RnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsKLSAgICBOUEVycm9yIG5wRXJyOwotCi0gICAgTlBf
SW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVs
ZSwgIk5QX0luaXRpYWxpemUiKTsKLSAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRy
eVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50
cyIpOwotICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0Fk
ZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOwotCi0gICAgaWYgKCFOUF9Jbml0aWFsaXpl
IHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCi0gICAgICAgIGdvdG8g
YWJvcnQ7Ci0KLSAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1
bmNzKSk7Ci0gICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOwot
Ci0gICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmbV9wbHVnaW5GdW5jcyk7Ci0gICAgTE9H
X05QRVJST1IobnBFcnIpOwotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAg
ICAgZ290byBhYm9ydDsKLQotICAgIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKLQotICAgIG5w
RXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOwotICAgIExPR19OUEVSUk9SKG5w
RXJyKTsKLQotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBh
Ym9ydDsKLQotICAgIG1fbG9hZENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci0KLWFib3J0Ogot
ICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdW5z
aWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0Ci17IAotICAgIGNvbnN0IHVuc2lnbmVk
IGhhc2hDb2Rlc1tdID0gewotICAgICAgICBtX25hbWUuaW1wbCgpLT5oYXNoKCksCi0gICAgICAg
IG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCi0gICAgICAgIG1fbWltZVRvRXh0ZW5zaW9u
cy5zaXplKCkKLSAgICB9OwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxz
aXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpl
cXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQotewot
ICAgIGlmIChhLm1fbmFtZSAhPSBiLm1fbmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKGEubV9kZXNjcmlwdGlvbiAhPSBiLm1fZGVzY3JpcHRpb24pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChhLm1fbWltZVRvRXh0ZW5zaW9ucy5zaXplKCkgIT0gYi5tX21p
bWVUb0V4dGVuc2lvbnMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNSU1F
VG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBhLm1fbWltZVRvRXh0
ZW5zaW9ucy5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25z
dF9pdGVyYXRvcjo6S2V5cyBpdCA9IGEubV9taW1lVG9FeHRlbnNpb25zLmJlZ2luKCkua2V5cygp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFiLm1fbWltZVRvRXh0ZW5zaW9ucy5j
b250YWlucygqaXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi11aW50MTZfdCBQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24oKSBjb25z
dAotewotICAgIHJldHVybiBOUF9WRVJTSU9OX01JTk9SOwotfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjkyMTJiYTI0OWY0NzdlMDM2OTE4ZWMyNjEzMjhlNzZmN2RmOWY4Ni4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQml0bWFw
SW5mby5oIgotI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAi
SFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAi
SW1hZ2UuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRv
dy5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJMb2NhbFdpbmRvd3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk1vdXNl
RXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5o
IgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAi
V2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiY19pbnN0YW5jZS5oIgotI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNp
bmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLSNpZiBVU0UoQ0FJUk8pCi0jaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+Ci0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgSFdORCB3aW5kb3dI
YW5kbGVGb3JQYWdlQ2xpZW50KFBsYXRmb3JtUGFnZUNsaWVudCBjbGllbnQpCi17Ci0jaWYgUExB
VEZPUk0oR1RLKQotICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
R2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coY2xpZW50KSkKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhXTkQ+KEdES19XSU5ET1dfSFdORCh3aW5kb3cpKTsKLSAg
ICByZXR1cm4gMDsKLSNlbHNlCi0gICAgcmV0dXJuIGNsaWVudDsKLSNlbmRpZgotfQotCi11c2lu
ZyBKU0M6OkV4ZWNTdGF0ZTsKLXVzaW5nIEpTQzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVj
dDsKLQotdXNpbmcgc3RkOjptaW47Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotY29uc3QgTFBDV1NU
UiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZSA9IEwiV2ViUGx1Z2luVmlldyI7Ci1jb25zdCBM
UENXU1RSIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7
Ci0KLS8vIFRoZSBjb2RlIHVzZWQgdG8gaG9vayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdpbmFs
bHkgY2FtZSBmcm9tCi0vLyA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50
Lmh0bWw+LgotLy8gQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5dWFu
LmNvbSkuCi0KLXN0YXRpYyB1bnNpZ25lZCBiZWdpblBhaW50U3lzQ2FsbDsKLXN0YXRpYyBCWVRF
KiBiZWdpblBhaW50OwotCi1zdGF0aWMgdW5zaWduZWQgZW5kUGFpbnRTeXNDYWxsOwotc3RhdGlj
IEJZVEUqIGVuZFBhaW50OwotCi10eXBlZGVmIEhEQyAoV0lOQVBJICpQdHJCZWdpblBhaW50KShI
V05ELCBQQUlOVFNUUlVDVCopOwotdHlwZWRlZiBCT09MIChXSU5BUEkgKlB0ckVuZFBhaW50KShI
V05ELCBjb25zdCBQQUlOVFNUUlVDVCopOwotCi0jaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82
NCkgJiYgQ09NUElMRVIoTVNWQykKLWV4dGVybiAiQyIgSERDIF9fc3RkY2FsbCBfSEJlZ2luUGFp
bnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNUIGxwUGFpbnQpOwotZXh0ZXJuICJDIiBCT09MIF9f
c3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQp
OwotI2VuZGlmCi0KLUhEQyBXSU5BUEkgUGx1Z2luVmlldzo6aG9va2VkQmVnaW5QYWludChIV05E
IGhXbmQsIFBBSU5UU1RSVUNUKiBscFBhaW50KQotewotICAgIFBsdWdpblZpZXcqIHBsdWdpblZp
ZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVn
aW5WaWV3UHJvcGVydHkpKTsKLSAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5tX3dt
UHJpbnRIREMpIHsKLSAgICAgICAgLy8gV2UncmUgc2VjcmV0bHkgaGFuZGxpbmcgV01fUFJJTlRD
TElFTlQsIHNvIHNldCB1cCB0aGUgUEFJTlRTVFJVQ1Qgc28KLSAgICAgICAgLy8gdGhhdCB0aGUg
cGx1Z2luIHdpbGwgcGFpbnQgaW50byB0aGUgSERDIHdlIHByb3ZpZGUuCi0gICAgICAgIG1lbXNl
dChscFBhaW50LCAwLCBzaXplb2YoUEFJTlRTVFJVQ1QpKTsKLSAgICAgICAgbHBQYWludC0+aGRj
ID0gcGx1Z2luVmlldy0+bV93bVByaW50SERDOwotICAgICAgICBHZXRDbGllbnRSZWN0KGhXbmQs
ICZscFBhaW50LT5yY1BhaW50KTsKLSAgICAgICAgcmV0dXJuIHBsdWdpblZpZXctPm1fd21Qcmlu
dEhEQzsKLSAgICB9Ci0KLSNpZiBDT01QSUxFUihHQ0MpCi0gICAgSERDIHJlc3VsdDsKLSAgICBh
c20gKCJwdXNoICAgICUyXG4iCi0gICAgICAgICAicHVzaCAgICAlM1xuIgotICAgICAgICAgImNh
bGwgICAgKiU0XG4iCi0gICAgICAgICA6ICI9YSIgKHJlc3VsdCkKLSAgICAgICAgIDogImEiIChi
ZWdpblBhaW50U3lzQ2FsbCksICJnIiAobHBQYWludCksICJnIiAoaFduZCksICJtIiAoYmVnaW5Q
YWludCkKLSAgICAgICAgIDogIm1lbW9yeSIKLSAgICAgICAgKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotI2VsaWYgZGVmaW5lZChfTV9JWDg2KQotICAgIC8vIENhbGwgdGhyb3VnaCB0byB0aGUgb3Jp
Z2luYWwgQmVnaW5QYWludC4KLSAgICBfX2FzbSAgIG1vdiAgICAgZWF4LCBiZWdpblBhaW50U3lz
Q2FsbAotICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50Ci0gICAgX19hc20gICBwdXNoICAgIGhX
bmQKLSAgICBfX2FzbSAgIGNhbGwgICAgYmVnaW5QYWludAotI2Vsc2UKLSAgICByZXR1cm4gX0hC
ZWdpblBhaW50KGhXbmQsIGxwUGFpbnQpOwotI2VuZGlmCi19Ci0KLUJPT0wgV0lOQVBJIFBsdWdp
blZpZXc6Omhvb2tlZEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFp
bnQpCi17Ci0gICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1
Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSkpOwotICAgIGlm
IChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPm1fd21QcmludEhEQykgewotICAgICAgICAvLyBX
ZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9QUklOVENMSUVOVCwgc28gd2UgZG9uJ3QgaGF2ZSB0
byBkbyBhbnkKLSAgICAgICAgLy8gY2xlYW51cC4KLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAg
fQotCi0jaWYgQ09NUElMRVIoR0NDKQotICAgIEJPT0wgcmVzdWx0OwotICAgIGFzbSAoInB1c2gg
ICAlMlxuIgotICAgICAgICAgInB1c2ggICAlM1xuIgotICAgICAgICAgImNhbGwgICAqJTRcbiIK
LSAgICAgICAgIDogIj1hIiAocmVzdWx0KQotICAgICAgICAgOiAiYSIgKGVuZFBhaW50U3lzQ2Fs
bCksICJnIiAobHBQYWludCksICJnIiAoaFduZCksICJtIiAoZW5kUGFpbnQpCi0gICAgICAgICk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbGlmIGRlZmluZWQgKF9NX0lYODYpCi0gICAgLy8gQ2Fs
bCB0aHJvdWdoIHRvIHRoZSBvcmlnaW5hbCBFbmRQYWludC4KLSAgICBfX2FzbSAgIG1vdiAgICAg
ZWF4LCBlbmRQYWludFN5c0NhbGwKLSAgICBfX2FzbSAgIHB1c2ggICAgbHBQYWludAotICAgIF9f
YXNtICAgcHVzaCAgICBoV25kCi0gICAgX19hc20gICBjYWxsICAgIGVuZFBhaW50Ci0jZWxzZQot
ICAgIHJldHVybiBfSEVuZFBhaW50KGhXbmQsIGxwUGFpbnQpOwotI2VuZGlmCi19Ci0KLXN0YXRp
YyB2b2lkIGhvb2soY29uc3QgY2hhciogbW9kdWxlLCBjb25zdCBjaGFyKiBwcm9jLCB1bnNpZ25l
ZCYgc3lzQ2FsbElELCBCWVRFKiYgcFByb2MsIGNvbnN0IHZvaWQqIHBOZXdQcm9jKQotewotICAg
IC8vIFNlZSA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+IGZv
ciBhbiBleHBsYW5hdGlvbiBvZgotICAgIC8vIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLgotCi0g
ICAgSElOU1RBTkNFIGhNb2QgPSBHZXRNb2R1bGVIYW5kbGVBKG1vZHVsZSk7Ci0KLSAgICBwUHJv
YyA9IHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihH
ZXRQcm9jQWRkcmVzcyhoTW9kLCBwcm9jKSkpOwotCi0jaWYgQ09NUElMRVIoR0NDKSB8fCBkZWZp
bmVkKF9NX0lYODYpCi0gICAgaWYgKHBQcm9jWzBdICE9IDB4QjgpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYmUgcmVhZGluZyB0aGUgYnl0ZXMgb25lLWJ5LW9u
ZSBpbnN0ZWFkIG9mIGRvaW5nIGFuCi0gICAgLy8gdW5hbGlnbmVkIHJlYWQ/Ci0gICAgc3lzQ2Fs
bElEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpOwotCi0gICAgRFdP
UkQgZmxPbGRQcm90ZWN0OwotICAgIGlmICghVmlydHVhbFByb3RlY3QocFByb2MsIDUsIFBBR0Vf
RVhFQ1VURV9SRUFEV1JJVEUsICZmbE9sZFByb3RlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBwUHJvY1swXSA9IDB4RTk7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJv
YyArIDEpID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocE5ld1Byb2MpIC0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4ocFByb2MgKyA1KTsKLQotICAgIHBQcm9jICs9IDU7Ci0jZWxzZQot
ICAgIC8qIERpc2Fzc2VtYmx5IG9mIEJlZ2luUGFpbnQoKQotICAgIDAwMDAwMDAwNzc5RkM1QjAg
NEMgOEIgRDEgICAgICAgICBtb3YgICAgICAgICByMTAscmN4Ci0gICAgMDAwMDAwMDA3NzlGQzVC
MyBCOCAxNyAxMCAwMCAwMCAgIG1vdiAgICAgICAgIGVheCwxMDE3aAotICAgIDAwMDAwMDAwNzc5
RkM1QjggMEYgMDUgICAgICAgICAgICBzeXNjYWxsCi0gICAgMDAwMDAwMDA3NzlGQzVCQSBDMyAg
ICAgICAgICAgICAgIHJldAotICAgIDAwMDAwMDAwNzc5RkM1QkIgOTAgICAgICAgICAgICAgICBu
b3AKLSAgICAwMDAwMDAwMDc3OUZDNUJDIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAw
MDA3NzlGQzVCRCA5MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QkUgOTAg
ICAgICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUJGIDkwICAgICAgICAgICAgICAg
bm9wCi0gICAgMDAwMDAwMDA3NzlGQzVDMCA5MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAw
MDAwNzc5RkM1QzEgOTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUMyIDkw
ICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVDMyA5MCAgICAgICAgICAgICAg
IG5vcAotICAgICovCi0gICAgLy8gQ2hlY2sgZm9yIHRoZSBzaWduYXR1cmUgYXMgaW4gdGhlIGFi
b3ZlIGRpc2Fzc2VtYmx5Ci0gICAgRFdPUkQgZ3VhcmQgPSAweEI4RDE4QjRDOwotICAgIGlmICgq
cmVpbnRlcnByZXRfY2FzdDxEV09SRCo+KHBQcm9jKSAhPSBndWFyZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRFdPUkQgZmxPbGRQcm90ZWN0OwotICAgIFZpcnR1YWxQcm90ZWN0KHBQcm9jLCAx
MiwgUEFHRV9FWEVDVVRFX1JFQURXUklURSwgJiBmbE9sZFByb3RlY3QpOwotICAgIHBQcm9jWzBd
ID0gMHg0ODsgICAgLy8gbW92IHJheCwgdGhpcwotICAgIHBQcm9jWzFdID0gMHhiODsKLSAgICAq
KF9faW50NjQqKShwUHJvYysyKSA9IChfX2ludDY0KXBOZXdQcm9jOwotICAgIHBQcm9jWzEwXSA9
IDB4ZmY7ICAgLy8gam1wIHJheAotICAgIHBQcm9jWzExXSA9IDB4ZTA7Ci0jZW5kaWYKLX0KLQot
c3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhvb2tl
ZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU5UU1RSVUNUKiksIEJPT0wgKFdJTkFQSSpob29rZWRFbmRQ
YWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJVQ1QqKSkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZl
SG9va2VkID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVIb29rZWQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBoYXZlSG9va2VkID0gdHJ1ZTsKLQotICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdp
bnMgZG9uJ3Qgc2VlbSB0byByZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5ULCBzbwotICAgIC8vIHdl
IGhvb2sgaW50byBCZWdpblBhaW50L0VuZFBhaW50IHRvIGFsbG93IHRoZWlyIG5vcm1hbCBXTV9Q
QUlOVCBoYW5kbGluZwotICAgIC8vIHRvIGRyYXcgaW50byBhIGdpdmVuIEhEQy4gTm90ZSB0aGF0
IHRoaXMgaG9va2luZyBhZmZlY3RzIHRoZSBlbnRpcmUKLSAgICAvLyBwcm9jZXNzLgotICAgIGhv
b2soInVzZXIzMi5kbGwiLCAiQmVnaW5QYWludCIsIGJlZ2luUGFpbnRTeXNDYWxsLCBiZWdpblBh
aW50LCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJk
aWZmX3Q+KGhvb2tlZEJlZ2luUGFpbnQpKSk7Ci0gICAgaG9vaygidXNlcjMyLmRsbCIsICJFbmRQ
YWludCIsIGVuZFBhaW50U3lzQ2FsbCwgZW5kUGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oaG9va2VkRW5kUGFpbnQpKSk7Ci0K
LX0KLQotc3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3KCkKLXsKLSAgICBzdGF0aWMgYm9v
bCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVSZWdpc3Rl
cmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaGF2ZVJlZ2lzdGVy
ZWRXaW5kb3dDbGFzcyA9IHRydWU7Ci0KLSNpZiBQTEFURk9STShHVEspCi0gICAgV2ViQ29yZTo6
c2V0SW5zdGFuY2VIYW5kbGUoKEhJTlNUQU5DRSkoR2V0TW9kdWxlSGFuZGxlKDApKSk7Ci0jZW5k
aWYKLQotICAgIEFTU0VSVChXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpKTsKLQotICAgIFdORENM
QVNTRVggd2NleDsKLSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3
Y2V4LmhJY29uU20gICAgICAgID0gMDsKLSAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfREJM
Q0xLUzsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gRGVmV2luZG93UHJvYzsKLSAgICB3Y2V4
LmNiQ2xzRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3
Y2V4LmhJbnN0YW5jZSAgICAgID0gV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKTsKLSAgICB3Y2V4
LmhJY29uICAgICAgICAgID0gMDsKLSAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNv
cigwLCBJRENfQVJST1cpOwotICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNPTE9S
X1dJTkRPVzsKLSAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFz
c05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWU7Ci0KLSAgICByZXR1cm4gISFSZWdp
c3RlckNsYXNzRXgoJndjZXgpOwotfQotCi1MUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBs
dWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtKQotewotICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJl
dF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkp
KTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3LT53bmRQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJh
bSwgbFBhcmFtKTsKLX0KLQotc3RhdGljIGJvb2wgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJl
KFVJTlQgbWVzc2FnZSkKLXsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBX
TV9MQlVUVE9OVVA6Ci0gICAgICAgIGNhc2UgV01fTUJVVFRPTlVQOgotICAgICAgICBjYXNlIFdN
X1JCVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9LRVlVUDoKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotc3RhdGljIGlubGluZSBJbnRQb2ludCBjb250ZW50c1RvTmF0aXZlV2luZG93KEZyYW1l
VmlldyogdmlldywgY29uc3QgSW50UG9pbnQmIHBvaW50KQotewotICAgIHJldHVybiB2aWV3LT5j
b250ZW50c1RvV2luZG93KHBvaW50KTsKLX0KLQotc3RhdGljIGlubGluZSBJbnRSZWN0IGNvbnRl
bnRzVG9OYXRpdmVXaW5kb3coRnJhbWVWaWV3KiB2aWV3LCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHJlY3QpOwotfQotCi1MUkVTVUxU
Ci1QbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIC8vIDxyZGFyOi8vNTcxMTEzNj4gU29tZXRpbWVz
IEZsYXNoIHdpbGwgY2FsbCBTZXRDYXB0dXJlIGJlZm9yZSBjcmVhdGluZwotICAgIC8vIGEgZnVs
bC1zY3JlZW4gd2luZG93IGFuZCB3aWxsIG5vdCByZWxlYXNlIGl0LCB3aGljaCBjYXVzZXMgdGhl
Ci0gICAgLy8gZnVsbC1zY3JlZW4gd2luZG93IHRvIG5ldmVyIHJlY2VpdmUgbW91c2UgZXZlbnRz
LiBXZSBzZXQvcmVsZWFzZSBjYXB0dXJlCi0gICAgLy8gb24gbW91c2UgZG93bi91cCBiZWZvcmUg
c2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIHBsdWctaW4gdG8gcHJldmVudCB0aGF0LgotICAgIHN3
aXRjaCAobWVzc2FnZSkgewotICAgICAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgotICAgICAgICBj
YXNlIFdNX01CVVRUT05ET1dOOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgotICAgICAg
ICAgICAgOjpTZXRDYXB0dXJlKGhXbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgV01fTEJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAgY2Fz
ZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAgICA6OlJlbGVhc2VDYXB0dXJlKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZSA9PSBtX2xhc3RNZXNzYWdlICYm
Ci0gICAgICAgIG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDYWxs
V25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHkpICYmIAotICAgICAgICBtX2lzQ2FsbGlu
Z1BsdWdpblduZFByb2MpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgaWYgKG1lc3NhZ2UgPT0g
V01fVVNFUiArIDEgJiYKLSAgICAgICAgbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdp
blF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMpKSB7Ci0gICAgICAgIGlmICghbV9t
ZXNzYWdlVGhyb3R0bGVyKQotICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVyID0gYWRvcHRQ
dHIobmV3IFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4odGhpcykpOwotCi0gICAgICAgIG1fbWVz
c2FnZVRocm90dGxlci0+YXBwZW5kTWVzc2FnZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJh
bSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG1fbGFzdE1lc3NhZ2UgPSBtZXNz
YWdlOwotICAgIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyA9IHRydWU7Ci0KLSAgICAvLyBJZiB0
aGUgcGx1Zy1pbiBkb2Vzbid0IGV4cGxpY2l0bHkgc3VwcG9ydCBjaGFuZ2luZyB0aGUgcG9wLXVw
IHN0YXRlLCB3ZSBlbmFibGUKLSAgICAvLyBwb3B1cHMgZm9yIGFsbCB1c2VyIGdlc3R1cmVzLgot
ICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHBvcCB0aGUgc3RhdGUgaW4gYSB0aW1lciwgYmVj
YXVzZSB0aGUgRmxhc2ggcGx1Zy1pbiAKLSAgICAvLyBwb3BzIHVwIHdpbmRvd3MgaW4gcmVzcG9u
c2UgdG8gYSBwb3N0ZWQgbWVzc2FnZS4KLSAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQU19FTkFCTEVEX1NUQVRFICYmCi0gICAgICAgIGlz
V2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShtZXNzYWdlKSAmJiAhbV9wb3BQb3B1cHNTdGF0ZVRp
bWVyLmlzQWN0aXZlKCkpIHsKLQotICAgICAgICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRydWUp
OwotCi0gICAgICAgIG1fcG9wUG9wdXBzU3RhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAg
fQotCi0gICAgaWYgKG1lc3NhZ2UgPT0gV01fUFJJTlRDTElFTlQpIHsKLSAgICAgICAgLy8gTW9z
dCAoYWxsPykgd2luZG93ZWQgcGx1Z2lucyBkb24ndCByZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5U
LCBzbyB3ZQotICAgICAgICAvLyBjaGFuZ2UgdGhlIG1lc3NhZ2UgdG8gV01fUEFJTlQgYW5kIHJl
bHkgb24gb3VyIGhvb2tlZCB2ZXJzaW9ucyBvZgotICAgICAgICAvLyBCZWdpblBhaW50L0VuZFBh
aW50IHRvIG1ha2UgdGhlIHBsdWdpbiBkcmF3IGludG8gdGhlIGdpdmVuIEhEQy4KLSAgICAgICAg
bWVzc2FnZSA9IFdNX1BBSU5UOwotICAgICAgICBtX3dtUHJpbnRIREMgPSByZWludGVycHJldF9j
YXN0PEhEQz4od1BhcmFtKTsKLSAgICB9Ci0KLSAgICAvLyBDYWxsIHRoZSBwbHVnLWluJ3Mgd2lu
ZG93IHByb2MuCi0gICAgTFJFU1VMVCByZXN1bHQgPSA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2lu
V25kUHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotCi0gICAgbV93bVByaW50
SERDID0gMDsKLQotICAgIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyA9IGZhbHNlOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQo
KQotewotICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmll
dyYgZnJhbWVWaWV3ID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpOwotCi0gICAgSW50
UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OwotICAgIEludFJlY3Qgb2xkQ2xpcFJl
Y3QgPSBtX2NsaXBSZWN0OwotCi0gICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXcu
Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6
ZSgpKTsKLSAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKLSAgICBtX2NsaXBSZWN0
Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKLQotICAgIGlmIChw
bGF0Zm9ybVBsdWdpbldpZGdldCgpICYmICghbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCB8fCBt
X3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0
KSkgewotCi0gICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0KLSAgICAgICAgLy8gVG8g
cHJldmVudCBmbGFzaGVzIHdoaWxlIHNjcm9sbGluZywgd2UgZGlzYWJsZSBkcmF3aW5nIGR1cmlu
ZyB0aGUgd2luZG93Ci0gICAgICAgIC8vIHVwZGF0ZSBwcm9jZXNzIGJ5IGNsaXBwaW5nIHRoZSB3
aW5kb3cgdG8gdGhlIHplcm8gcmVjdC4KLQotICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0ID0g
IW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVj
dFdoZW5TY3JvbGxpbmcpOwotCi0gICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAg
ICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwg
MCkpOwotICAgICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwg
cmduLmxlYWsoKSwgRkFMU0UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byBy
Z24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xp
cFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAg
ICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCks
IFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2hhdmVVcGRhdGVkUGx1Z2luV2lk
Z2V0IHx8IG1fd2luZG93UmVjdCAhPSBvbGRXaW5kb3dSZWN0KQotICAgICAgICAgICAgOjpNb3Zl
V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93
UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksIFRS
VUUpOwotCi0gICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICAgICAgYXV0byBy
Z24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xp
cFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAg
ICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCks
IFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0K
LSAgICAgICAgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCA9IHRydWU7Ci0gICAgfQotfQotCi12
b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKLXsKLSAgICBpZiAoZm9jdXNl
ZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICBTZXRGb2N1cyhwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKTsKLQotICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7Ci0KLSAgICBp
ZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBF
dmVudCBucEV2ZW50OwotCi0gICAgbnBFdmVudC5ldmVudCA9IGZvY3VzZWQgPyBXTV9TRVRGT0NV
UyA6IFdNX0tJTExGT0NVUzsKLSAgICBucEV2ZW50LndQYXJhbSA9IDA7Ci0gICAgbnBFdmVudC5s
UGFyYW0gPSAwOwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OnNob3coKQotewotICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOwotCi0gICAgaWYg
KGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCi0gICAgICAgIFNo
b3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1dfU0hPV05BKTsKLQotICAgIFdpZGdl
dDo6c2hvdygpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhpZGUoKQotewotICAgIHNldFNlbGZW
aXNpYmxlKGZhbHNlKTsKLQotICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKQotICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IFNXX0hJREUpOwotCi0gICAgV2lkZ2V0OjpoaWRlKCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6
ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIG5wRXZlbnQpCi17Ci0gICAgaWYgKCFtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYm9vbCBz
aG91bGRQb3AgPSBmYWxzZTsKLQotICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dmVy
c2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgJiYgaXNXaW5kb3dzTWVzc2Fn
ZVVzZXJHZXN0dXJlKG5wRXZlbnQuZXZlbnQpKSB7Ci0gICAgICAgIHB1c2hQb3B1cHNFbmFibGVk
U3RhdGUodHJ1ZSk7Ci0gICAgICAgIHNob3VsZFBvcCA9IHRydWU7Ci0gICAgfQotCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgIGJvb2wgYWNjZXB0ZWQg
PSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsK
LSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLQotICAgIGlmIChzaG91bGRQb3ApIAotICAg
ICAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLQotICAgIHJldHVybiBhY2NlcHRlZDsKLX0K
LQotdm9pZCBQbHVnaW5WaWV3OjpwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoSERDIGhkYykK
LXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIFNlbmRNZXNzYWdlKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJRU5ULCByZWludGVycHJldF9jYXN0PFdQQVJBTT4o
aGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElMRFJFTiB8IFBSRl9PV05FRCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJs
ZTsKLSAgICBtX25wV2luZG93LndpbmRvdyA9IGhkYzsKLQotICAgIFdJTkRPV1BPUyB3aW5kb3dw
b3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKLQotICAgIEludFJlY3QgciA9IGNvbnRlbnRz
VG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8RnJhbWVWaWV3PihwYXJlbnQoKSksIGZyYW1lUmVjdCgp
KTsKLQotICAgIHdpbmRvd3Bvcy54ID0gci54KCk7Ci0gICAgd2luZG93cG9zLnkgPSByLnkoKTsK
LSAgICB3aW5kb3dwb3MuY3ggPSByLndpZHRoKCk7Ci0gICAgd2luZG93cG9zLmN5ID0gci5oZWln
aHQoKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICBucEV2ZW50LmV2ZW50ID0gV01fV0lO
RE9XUE9TQ0hBTkdFRDsKLSAgICBucEV2ZW50LmxQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pigmd2luZG93cG9zKTsKLSAgICBucEV2ZW50LndQYXJhbSA9IDA7Ci0KLSAgICBkaXNw
YXRjaE5QRXZlbnQobnBFdmVudCk7Ci0KLSAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkp
OwotCi0gICAgbnBFdmVudC5ldmVudCA9IFdNX1BBSU5UOwotICAgIG5wRXZlbnQud1BhcmFtID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhkYyk7Ci0KLSAgICAvLyBUaGlzIGlzIHN1cHBv
c2VkIHRvIGJlIGEgcG9pbnRlciB0byB0aGUgZGlydHkgcmVjdCwgYnV0IGl0IHNlZW1zIHRoYXQg
dGhlIEZsYXNoIHBsdWdpbgotICAgIC8vIGlnbm9yZXMgaXQgc28gd2UganVzdCBwYXNzIG51bGwu
Ci0gICAgbnBFdmVudC5sUGFyYW0gPSAwOwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQp
OwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgIVVT
RShXSU5HREkpCi0gICAgQVNTRVJUKG1faXNXaW5kb3dlZCk7Ci0gICAgQVNTRVJUKGNvbnRleHQt
PnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSk7Ci0KLSAgICBJbnRQb2ludCBsb2NhdGlvbklu
V2luZG93ID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNvbnZlcnRUb0NvbnRhaW5p
bmdXaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7Ci0KLSAgICBMb2NhbFdpbmRvd3NDb250
ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQsIGZyYW1lUmVjdCgpLCBmYWxzZSk7Ci0KLSNpZiBV
U0UoQ0FJUk8pCi0gICAgLy8gTXVzdCBmbHVzaCBkcmF3aW5ncyB1cCB0byB0aGlzIHBvaW50IHRv
IHRoZSBiYWNraW5nIG1ldGFmaWxlLCBvdGhlcndpc2UgdGhlCi0gICAgLy8gcGx1Z2luIHJlZ2lv
biB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggYW55IGNsZWFyIHJlZ2lvbnMgc3BlY2lmaWVkIGlu
IHRoZQotICAgIC8vIGNhaXJvLWNvbnRyb2xsZWQgcG9ydGlvbnMgb2YgdGhlIHJlbmRlcmluZy4K
LSAgICBjYWlyb19zaG93X3BhZ2UoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwot
I2VuZGlmCi0KLSAgICBIREMgaGRjID0gd2luZG93c0NvbnRleHQuaGRjKCk7Ci0gICAgWEZPUk0g
b3JpZ2luYWxUcmFuc2Zvcm07Ci0gICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmb3JpZ2luYWxU
cmFuc2Zvcm0pOwotCi0gICAgLy8gVGhlIHBsdWdpbiBleHBlY3RzIHRoZSBEQyB0byBiZSBpbiBj
bGllbnQgY29vcmRpbmF0ZXMsIHNvIHdlIHRyYW5zbGF0ZQotICAgIC8vIHRoZSBEQyB0byBtYWtl
IHRoYXQgc28uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwot
ICAgIGN0bS50cmFuc2xhdGUobG9jYXRpb25JbldpbmRvdy54KCksIGxvY2F0aW9uSW5XaW5kb3cu
eSgpKTsKLSAgICBYRk9STSB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxYRk9STT4oY3RtLnRvVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0KLSAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ0cmFu
c2Zvcm0pOwotCi0gICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KGhkYyk7Ci0KLSAgICBT
ZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmlnaW5hbFRyYW5zZm9ybSk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkgewotICAgICAgICAvLyBEcmF3
IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCi0gICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbklj
b24oY29udGV4dCwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbnN1
cmUgdGhhdCB3ZSBoYXZlIGNhbGxlZCBTZXRXaW5kb3cgYmVmb3JlIHdlIHRyeSB0byBwYWludC4K
LSAgICBpZiAoIW1faGF2ZUNhbGxlZFNldFdpbmRvdykKLSAgICAgICAgc2V0TlBXaW5kb3dSZWN0
KGZyYW1lUmVjdCgpKTsKLQotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSNpZiAhVVNFKFdJTkdE
SSkKLSAgICAgICAgaWYgKGNvbnRleHQtPnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSkKLSAg
ICAgICAgICAgIHBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChjb250ZXh0LCByZWN0KTsK
LSNlbmRpZgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW4gdGhlIEdUSyBhbmQg
UXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRv
IHVzZSB0aGUgd2luZG93Ci0gICAgLy8gY29vcmRpbmF0ZXMuCi0jaWYgUExBVEZPUk0oR1RLKQot
ICAgIEludFJlY3QgcmVjdEluV2luZG93KHJlY3QpOwotICAgIHJlY3RJbldpbmRvdy5pbnRlcnNl
Y3QoZnJhbWVSZWN0KCkpOwotI2Vsc2UKLSAgICBJbnRSZWN0IHJlY3RJbldpbmRvdyA9IGRvd25j
YXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKTsK
LSNlbmRpZgotICAgIExvY2FsV2luZG93c0NvbnRleHQgd2luZG93c0NvbnRleHQoY29udGV4dCwg
cmVjdEluV2luZG93LCBtX2lzVHJhbnNwYXJlbnQpOwotCi0gICAgLy8gT24gU2FmYXJpL1dpbmRv
d3Mgd2l0aG91dCB0cmFuc3BhcmVuY3kgbGF5ZXJzIHRoZSBHcmFwaGljc0NvbnRleHQgcmV0dXJu
cyB0aGUgSERDCi0gICAgLy8gb2YgdGhlIHdpbmRvdyBhbmQgdGhlIHBsdWdpbiBleHBlY3RzIHRo
YXQgdGhlIHBhc3NlZCBpbiBEQyBoYXMgd2luZG93IGNvb3JkaW5hdGVzLgotICAgIC8vIEluIHRo
ZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGFsd2F5cyBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZmZXIg
YW5kIHRoZXJlZm9yZSBuZWVkCi0gICAgLy8gdG8gcHJlc2VydmUgdGhlIHRyYW5zbGF0aW9uIHNl
dCBpbiBnZXRXaW5kb3dzQ29udGV4dC4KLSNpZiAhUExBVEZPUk0oR1RLKQotICAgIGlmICghY29u
dGV4dC0+aXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKLSAgICAgICAgWEZPUk0gdHJhbnNmb3Jt
OwotICAgICAgICBHZXRXb3JsZFRyYW5zZm9ybSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRyYW5z
Zm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybS5lRHggPSAwOwotICAgICAgICB0cmFuc2Zvcm0uZUR5
ID0gMDsKLSAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0od2luZG93c0NvbnRleHQuaGRjKCksICZ0
cmFuc2Zvcm0pOwotICAgIH0KLSNlbmRpZgotCi0gICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250
ZXh0KHdpbmRvd3NDb250ZXh0LmhkYygpKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVL
ZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewotICAgIEFTU0VSVChtX3BsdWdp
biAmJiAhbV9pc1dpbmRvd2VkKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLQotICAgIG5wRXZl
bnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUoKTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdN
X0tFWURPV047Ci0gICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsKLSAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKLSAgICAgICAgbnBF
dmVudC5ldmVudCA9IFdNX0NIQVI7Ci0gICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsKLSAgICB9
IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsKLSAg
ICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWVVQOwotICAgICAgICBucEV2ZW50LmxQYXJhbSA9
IDB4ODAwMDsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
LSAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKLX0KLQotZXh0ZXJuIGJvb2wgaWdub3JlTmV4dFNldEN1cnNvcjsKLQot
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQotewot
ICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKLQotICAgIE5QRXZlbnQgbnBF
dmVudDsKLQotICAgIEludFBvaW50IHAgPSBjb250ZW50c1RvTmF0aXZlV2luZG93KGRvd25jYXN0
PEZyYW1lVmlldz4ocGFyZW50KCkpLCBJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBh
Z2VZKCkpKTsKLQotICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkp
OwotICAgIG5wRXZlbnQud1BhcmFtID0gMDsKLQotICAgIGlmIChldmVudC0+Y3RybEtleSgpKQot
ICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19DT05UUk9MOwotICAgIGlmIChldmVudC0+c2hp
ZnRLZXkoKSkKLSAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfU0hJRlQ7Ci0KLSAgICBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgfHwKLSAgICAgICAg
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCAKLSAgICAgICAg
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9WRTsKLSAgICAgICAgaWYgKGV2ZW50LT5idXR0b25E
b3duKCkpCi0gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewotICAgICAgICAg
ICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKLSAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFy
YW0gfD0gTUtfTEJVVFRPTjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBNaWRkbGVCdXR0b246Ci0gICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1Bh
cmFtIHw9IE1LX01CVVRUT047Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgUmlnaHRCdXR0b246Ci0gICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1Bh
cmFtIHw9IE1LX1JCVVRUT047Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50KSB7Ci0gICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOwotICAgICAgICBzd2l0
Y2ggKGV2ZW50LT5idXR0b24oKSkgewotICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0g
V01fTUJVVFRPTkRPV047Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IDI6Ci0gICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKLSAgICAgICAgc3dpdGNoIChldmVu
dC0+YnV0dG9uKCkpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBucEV2
ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9O
VVA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAg
ICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCkpOwotICAgIC8vIEZJWE1FOiBDb25zaWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93
ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUuCi0gICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2
ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0KLSNpZiAhUExBVEZP
Uk0oR1RLKQotICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNh
bGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAKLSAgICAvLyBhbmQg
c2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRy
dWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCi0gICAgaWdub3JlTmV4dFNldEN1cnNvciA9IHRydWU7
Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBh
Z2UtPmNocm9tZSgpLmNsaWVudCgpLnNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKTsK
LSNlbmRpZgotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJl
bnQpCi17Ci0gICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKLQotICAgIGlmIChwYXJlbnQp
Ci0gICAgICAgIGluaXQoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRoZSBwbHVn
LWluIHdpbmRvdyBvciBvbmUgb2YgaXRzIGNoaWxkcmVuIGhhdmUgdGhlIGZvY3VzLCB3ZSBuZWVk
IHRvIAotICAgICAgICAvLyBjbGVhciBpdCB0byBwcmV2ZW50IHRoZSB3ZWIgdmlldyB3aW5kb3cg
ZnJvbSBiZWluZyBmb2N1c2VkIGJlY2F1c2UgdGhhdCBjYW4KLSAgICAgICAgLy8gdHJpZ2dlciBh
IGxheW91dCB3aGlsZSB0aGUgcGx1Z2luIGVsZW1lbnQgaXMgYmVpbmcgZGV0YWNoZWQuCi0gICAg
ICAgIEhXTkQgZm9jdXNlZFdpbmRvdyA9IDo6R2V0Rm9jdXMoKTsKLSAgICAgICAgaWYgKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNlZFdpbmRvdyB8fCA6OklzQ2hpbGQocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRvdykpCi0gICAgICAgICAgICA6OlNldEZvY3VzKDAp
OwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlz
aWJsZSkKLXsKLSAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOwotCi0gICAg
aWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSB7Ci0gICAgICAg
IGlmICh2aXNpYmxlKQotICAgICAgICAgICAgU2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCBTV19TSE9XTkEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBTaG93V2luZG93KHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJREUpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1f
aXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJbiB0aGUgR1RLIHBvcnQgd2Ug
ZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2lu
ZG93Ci0gICAgLy8gY29vcmRpbmF0ZXMuCi0jIGlmIFBMQVRGT1JNKEdUSykKLSAgICBJbnRQb2lu
dCBwID0gcmVjdC5sb2NhdGlvbigpOwotIyBlbHNlCi0gICAgSW50UG9pbnQgcCA9IGRvd25jYXN0
PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7
Ci0jIGVuZGlmCi0gICAgbV9ucFdpbmRvdy54ID0gcC54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0g
cC55KCk7Ci0KLSAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0aCgpOwotICAgIG1fbnBX
aW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKLQotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
cmlnaHQgPSByZWN0LndpZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBy
ZWN0LmhlaWdodCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7Ci0gICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwotCi0gICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5zZXR3aW5kb3cpIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFs
c2UpOwotCi0gICAgICAgIG1faGF2ZUNhbGxlZFNldFdpbmRvdyA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQVNTRVJU
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotCi0gICAgICAgIFdORFBST0MgY3VycmVudFduZFBy
b2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdX
TFBfV05EUFJPQyk7Ci0gICAgICAgIGlmIChjdXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3V25k
UHJvYykKLSAgICAgICAgICAgIG1fcGx1Z2luV25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRvd0xv
bmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpUGx1
Z2luVmlld1duZFByb2MpOwotICAgIH0KLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQ
b3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hh
ciogYnVmKQotewotICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7Ci0KLSAgICBpZiAoZmls
ZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFt
ZS5zdWJzdHJpbmcoOCk7Ci0KLSAgICAvLyBHZXQgZmlsZSBpbmZvCi0gICAgV0lOMzJfRklMRV9B
VFRSSUJVVEVfREFUQSBhdHRyczsKLSAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeFcoZmlsZW5h
bWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEdldEZpbGVFeEluZm9T
dGFuZGFyZCwgJmF0dHJzKSA9PSAwKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9V
TkQ7Ci0KLSAgICBpZiAoYXR0cnMuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJ
UkVDVE9SWSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgSEFO
RExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlVyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLmRhdGEoKSwgRklMRV9SRUFEX0RBVEEsIEZJTEVfU0hBUkVfUkVBRCwgMCwg
T1BFTl9FWElTVElORywgMCwgMCk7Ci0gICAgCi0gICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUUpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQot
ICAgIGJ1ZmZlci5yZXNpemUoYXR0cnMubkZpbGVTaXplTG93KTsKLQotICAgIERXT1JEIGJ5dGVz
UmVhZDsKLSAgICBpbnQgcmV0dmFsID0gUmVhZEZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEo
KSwgYXR0cnMubkZpbGVTaXplTG93LCAmYnl0ZXNSZWFkLCAwKTsKLQotICAgIENsb3NlSGFuZGxl
KGZpbGVIYW5kbGUpOwotCi0gICAgaWYgKHJldHZhbCA9PSAwIHx8IGJ5dGVzUmVhZCAhPSBhdHRy
cy5uRmlsZVNpemVMb3cpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQot
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9y
bUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlLCB2b2lkKiwgTlBFcnJvciopCi17Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCi17Ci0gICAgc3dp
dGNoICh2YXJpYWJsZSkgewotICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAg
ICAgICAgICAgSFdORCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SFdORCo+KHZhbHVlKTsKLSAgICAg
ICAgICAgICp3ID0gd2luZG93SGFuZGxlRm9yUGFnZUNsaWVudChwYXJlbnQoKSA/IHBhcmVudCgp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpIDogMCk7Ci0gICAgICAgICAgICAq
cmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczogewotICAgICAgICAg
ICAgTlBCb29sKiBmbGFnID0gcmVpbnRlcnByZXRfY2FzdDxOUEJvb2wqPih2YWx1ZSk7Ci0gICAg
ICAgICAgICAqZmxhZyA9IFRSVUU7Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZh
bGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChtX2lzV2luZG93ZWQp
IHsKLSAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
Lm1heFgoKSwgcmVjdC5tYXhZKCkgfTsKLSAgICAgICAgOjpJbnZhbGlkYXRlUmVjdChwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCAmaW52YWxpZFJlY3QsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCi17Ci0gICAgaWYg
KCFyZWN0KSB7Ci0gICAgICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVj
dC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKLQotICAgIGlmIChtX2lzV2luZG93
ZWQpIHsKLSAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsgci54KCksIHIueSgpLCByLm1heFgo
KSwgci5tYXhZKCkgfTsKLSAgICAgICAgSW52YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSwgJmludmFsaWRSZWN0LCBGQUxTRSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1f
cGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkp
IHsKLSAgICAgICAgICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChyKTsKLSAgICAgICAgICAgIGlm
ICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBtX2ludmFs
aWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGludmFsaWRhdGVSZWN0KHIpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZh
bGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSRUNUIHI7Ci0KLSAgICBpZiAoR2V0UmduQm94KHJlZ2lv
biwgJnIpID09IDApIHsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgSW50UmVjdCByZWN0KEludFBvaW50KHIubGVmdCwgci50b3ApLCBJbnRTaXpl
KHIucmlnaHQtci5sZWZ0LCByLmJvdHRvbS1yLnRvcCkpOwotICAgIGludmFsaWRhdGVSZWN0KHJl
Y3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKLXsKLSAgICBpZiAobV9p
c1dpbmRvd2VkKQotICAgICAgICA6OlVwZGF0ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIDo6VXBkYXRlV2luZG93KHdpbmRvd0hhbmRsZUZvclBhZ2VD
bGllbnQocGFyZW50KCkgPyBwYXJlbnQoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSA6IDApKTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKLXsKLSAg
ICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpOwotCi0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAg
ICByZWdpc3RlclBsdWdpblZpZXcoKTsKLSAgICAgICAgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hv
b2tzKGhvb2tlZEJlZ2luUGFpbnQsIGhvb2tlZEVuZFBhaW50KTsKLQotICAgICAgICBEV09SRCBm
bGFncyA9IFdTX0NISUxEOwotICAgICAgICBpZiAoaXNTZWxmVmlzaWJsZSgpKQotICAgICAgICAg
ICAgZmxhZ3MgfD0gV1NfVklTSUJMRTsKLQotICAgICAgICBIV05EIHBhcmVudFdpbmRvd0hhbmRs
ZSA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0
V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKLSAgICAgICAgSFdORCB3aW5kb3cgPSA6
OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lLCAwLCBmbGFncywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIHBhcmVu
dFdpbmRvd0hhbmRsZSwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7Ci0KLSNpZiBP
UyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCi0gICAgICAgIG1fd2luZG93ID0gd2luZG93Owot
I2Vsc2UKLSAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQod2luZG93KTsKLSNlbmRpZgotCi0gICAg
ICAgIC8vIENhbGxpbmcgU2V0V2luZG93TG9uZ1B0ckEgaGVyZSBtYWtlcyB0aGUgd2luZG93IHBy
b2MgQVNDSUksIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGF0IGxlYXN0Ci0gICAgICAgIC8vIHRoZSBT
aG9ja3dhdmUgRGlyZWN0b3IgcGx1Zy1pbi4KLSNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0
KQotICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdX
TFBfV05EUFJPQywgKExPTkdfUFRSKURlZldpbmRvd1Byb2NBKTsKLSNlbHNlCi0gICAgICAgIDo6
U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MsIChM
T05HKURlZldpbmRvd1Byb2NBKTsKLSNlbmRpZgotICAgICAgICBTZXRQcm9wKHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCksIGtXZWJQbHVnaW5WaWV3UHJvcGVydHksIHRoaXMpOwotCi0gICAgICAgIG1f
bnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKLSAgICAgICAgbV9ucFdpbmRvdy53
aW5kb3cgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1f
bnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93
LndpbmRvdyA9IDA7Ci0gICAgfQotCi0gICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci0KLSAgICBp
ZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRX
aW5kb3dDYWxsKSkKLSAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCi17
Ci0gICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBEZXN0cm95V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgIHNldFBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KDApOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBQbHVnaW5WaWV3OjpzbmFw
c2hvdCgpCi17Ci0jaWYgIVBMQVRGT1JNKEdUSykgJiYgIVVTRShXSU5HREkpCi0gICAgYXV0byBo
ZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0KLSAgICBpZiAo
IW1faXNXaW5kb3dlZCkgewotICAgICAgICAvLyBFbmFibGUgd29ybGQgdHJhbnNmb3Jtcy4KLSAg
ICAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYy5nZXQoKSwgR01fQURWQU5DRUQpOwotCi0gICAgICAg
IFhGT1JNIHRyYW5zZm9ybTsKLSAgICAgICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgpLCAm
dHJhbnNmb3JtKTsKLQotICAgICAgICAvLyBXaW5kb3dsZXNzIHBsdWctaW5zIGFzc3VtZSB0aGF0
IHRoZXkncmUgZHJhd2luZyBvbnRvIHRoZSB2aWV3J3MgREMuCi0gICAgICAgIC8vIFRyYW5zbGF0
ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBwbHVnLWluIGRyYXdzIGF0ICgwLCAwKS4KLSAgICAg
ICAgSW50UG9pbnQgcG9zaXRpb24gPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29u
dGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSkubG9jYXRpb24oKTsKLSAgICAgICAgdHJhbnNmb3Jt
LmVEeCA9IC1wb3NpdGlvbi54KCk7Ci0gICAgICAgIHRyYW5zZm9ybS5lRHkgPSAtcG9zaXRpb24u
eSgpOwotICAgICAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMuZ2V0KCksICZ0cmFuc2Zvcm0pOwot
ICAgIH0KLQotICAgIHZvaWQqIGJpdHM7Ci0gICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZv
OjpjcmVhdGVCb3R0b21VcChmcmFtZVJlY3QoKS5zaXplKCkpOwotICAgIGF1dG8gaGJtcCA9IGFk
b3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9SUywg
JmJpdHMsIDAsIDApKTsKLQotICAgIEhCSVRNQVAgaGJtcE9sZCA9IHN0YXRpY19jYXN0PEhCSVRN
QVA+KFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXAuZ2V0KCkpKTsKLQotICAgIHBhaW50SW50
b1RyYW5zZm9ybWVkQ29udGV4dChoZGMuZ2V0KCkpOwotCi0gICAgU2VsZWN0T2JqZWN0KGhkYy5n
ZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShoYm1wLmdl
dCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQv
V2ViS2l0LnZjeHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJL
aXQudmN4cHJvagppbmRleCBmZjc1MGJjM2EzYTI5MjUwNTFmMTg0NjU1OGMxMDhmNmEzYzA4ZGY4
Li5iMDI4MDUwNTlmODQ4ZDgxYzcwMTU0YWE1ODNlNTIxODhjZWJiMzY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvagorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvagpAQCAtMjk0
LDYgKzI5NCwxNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxXZWJE
YXRhYmFzZVByb3ZpZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0
b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXC4uXGNmXFdlYkNvcmVTdXBwb3J0XFdlYkluc3BlY3RvckNsaWVudENGLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXG5wYXBpLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRh
dGFiYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5z
XFBsdWdpbkRlYnVnLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQ
bHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Li5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFtLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJhc2VXaW4uY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2lu
c1xQbHVnaW5QYWNrYWdlV2luLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u
XHdpblxQbHVnaW5zXFBsdWdpblZpZXdXaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cd2luXEFjY2Vzc2libGVCYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1lbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVJbWFnZS5jcHAiIC8+CkBAIC00MzYsNiArNDQ2
LDE0IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VUcmFj
a2VyQ2xpZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdl
YkRhdGFiYXNlUHJvdmlkZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0
b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGVidWcuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblF1aXJrU2V0
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5T
dHJhdGVneS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNc
UGx1Z2luU3RyZWFtLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1
Z2luc1xQbHVnaW5WaWV3LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5c
UGx1Z2luc1xQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUJhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlSW1hZ2UuaCIgLz4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0
ZXJzCmluZGV4IDA5NGY2MGE5YjE5MTE3ZTNkMThmZTVlN2I5Yzk1MDY3OGUyOGM0MzQuLmVkMzE4
ZGJiOTZjMGNlNjVlMWJlMjEwOTc2NWMxNjMxYjdkMjZiOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMKKysrIGIv
U291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2ouZmlsdGVy
cwpAQCAtMjE3LDYgKzIxNywzNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2lu
XFdlYlNlcmlhbGl6ZWRKU1ZhbHVlLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQ
bHVnaW5zXG5wYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8
L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBs
dWdpbkRhdGFiYXNlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8
L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBs
dWdpbkRlYnVnLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0Ns
Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdp
blBhY2thZ2UuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xD
b21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2lu
U3RyZWFtLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29t
cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZp
ZXcuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxl
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJh
c2VXaW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21w
aWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+Cisg
ICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2lu
c1xQbHVnaW5QYWNrYWdlV2luLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVn
aW5zXFBsdWdpblZpZXdXaW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgor
ICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxT
dG9yYWdlQXJlYUltcGwuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgogICAg
IDwvQ2xDb21waWxlPgpAQCAtNTU4LDYgKzU4OCwyNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFdlYkNvcmVTdXBwb3J0XEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
LmgiPgogICAgICAgPEZpbHRlcj5XZWJDb3JlU3VwcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0
YWJhc2UuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJ
bmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2lu
RGVidWcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJ
bmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2lu
UGFja2FnZS5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9D
bEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVn
aW5RdWlya1NldC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAg
PC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQ
bHVnaW5TdHJlYW0uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAg
IDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNc
UGx1Z2luVmlldy5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAg
PC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XFN0b3JhZ2VcU3RvcmFnZUFyZWFJbXBsLmgiPgogICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52
Y3hwcm9qL1dlYktpdC9XZWJLaXRDb21tb24ucHJvcHMgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52
Y3hwcm9qL1dlYktpdC9XZWJLaXRDb21tb24ucHJvcHMKaW5kZXggZDFjN2E0MWZlZWI1MjExYmMx
MDFkMTc1NGM0NTQ3ZmM4YzAwZDgyMS4uNGU1MjJkNjZiNGZlNGIyZDUwZDdiYjQ5MmNkYTExNTAz
MGQ3MzE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQv
V2ViS2l0Q29tbW9uLnByb3BzCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2Vi
S2l0L1dlYktpdENvbW1vbi5wcm9wcwpAQCAtNSw3ICs1LDcgQEAKICAgPC9Qcm9wZXJ0eUdyb3Vw
PgogICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0
aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpXC4uXC4u
XHdpbjskKFByb2plY3REaXIpXC4uXC4uXHdpblxXZWJDb3JlU3VwcG9ydDskKFByb2plY3REaXIp
XC4uXC4uXFN0b3JhZ2U7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcV2ViS2l0OyQo
Q29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlOyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJ
bmNsdWRlXHByaXZhdGU7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXEluY2x1ZGVcV2ViQ29yZTsk
KENvbmZpZ3VyYXRpb25CdWlsZERpcilcSW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJz
OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlOyQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmU7JChDb25maWd1
cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxEZXJpdmVk
U291cmNlczskKFdlYktpdF9MaWJyYXJpZXMpXEluY2x1ZGU7JChXZWJLaXRfTGlicmFyaWVzKVxJ
bmNsdWRlXHByaXZhdGU7JChXZWJLaXRfTGlicmFyaWVzKVxJbmNsdWRlXFdlYkNvcmU7JChXZWJL
aXRfTGlicmFyaWVzKVxJbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnM7JChXZWJLaXRf
TGlicmFyaWVzKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlOyQoV2ViS2l0X0xpYnJhcmllcylcSW5j
bHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlOyQoSW50RGlyKWluY2x1ZGU7JShBZGRpdGlvbmFs
SW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAg
IDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJvamVjdERpcik7JChQcm9qZWN0RGly
KVwuLlwuLlx3aW47JChQcm9qZWN0RGlyKVwuLlwuLlx3aW5cUGx1Z2luczskKFByb2plY3REaXIp
XC4uXC4uXHdpblxXZWJDb3JlU3VwcG9ydDskKFByb2plY3REaXIpXC4uXC4uXFN0b3JhZ2U7JChD
b25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcV2ViS2l0OyQoQ29uZmlndXJhdGlvbkJ1aWxk
RGlyKVxJbmNsdWRlOyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlXHByaXZhdGU7JChD
b25maWd1cmF0aW9uQnVpbGREaXIpXEluY2x1ZGVcV2ViQ29yZTskKENvbmZpZ3VyYXRpb25CdWls
ZERpcilcSW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzOyQoQ29uZmlndXJhdGlvbkJ1
aWxkRGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlOyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJ
bmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmU7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
aiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxEZXJpdmVkU291cmNlczskKFdlYktpdF9M
aWJyYXJpZXMpXEluY2x1ZGU7JChXZWJLaXRfTGlicmFyaWVzKVxJbmNsdWRlXHByaXZhdGU7JChX
ZWJLaXRfTGlicmFyaWVzKVxJbmNsdWRlXFdlYkNvcmU7JChXZWJLaXRfTGlicmFyaWVzKVxJbmNs
dWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnM7JChXZWJLaXRfTGlicmFyaWVzKVxJbmNsdWRl
XEphdmFTY3JpcHRDb3JlOyQoV2ViS2l0X0xpYnJhcmllcylcSW5jbHVkZVxwcml2YXRlXEphdmFT
Y3JpcHRDb3JlOyQoSW50RGlyKWluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz
KTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KICAgICAgIDxQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz5XRUJLSVRfRVhQT1JUUztGUkFNRVdPUktfTkFNRT1XZWJLaXQ7JShQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgICAgPFByZWNvbXBp
bGVkSGVhZGVyPlVzZTwvUHJlY29tcGlsZWRIZWFkZXI+CiAgICAgICA8UHJlY29tcGlsZWRIZWFk
ZXJGaWxlPldlYktpdFByZWZpeC5oPC9QcmVjb21waWxlZEhlYWRlckZpbGU+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BhaW50SG9va3MuYXNtIGIvU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTA4ODEzNTZhMGRkY2Q3
ODMwNzI4MTFlOWYxNWExMTU5NGIxODVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQpAQCAtMCwwICsxLDUwIEBACis7LyoKKzsgICAg
Q29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorOworOyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCis7ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorOyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7
Cis7ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorOyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorOyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworOyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorOyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsqLworCis7SERDIF9fc3RkY2FsbCBfSEJlZ2luUGFpbnQo
SFdORCBoV25kLCBMUFBBSU5UU1RSVUNUIGxwUGFpbnQpOworCitQVUJMSUMgIF9IQmVnaW5QYWlu
dAorCitfVEVYVCAgIFNFR01FTlQKKworX0hCZWdpblBhaW50IFBST0MKKyAgICAgbW92ICByMTAs
cmN4CisgICAgIG1vdiAgZWF4LDEwMTdoCisgICAgIHN5c2NhbGwKKyAgICAgcmV0CitfSEJlZ2lu
UGFpbnQgRU5EUAorCitfVEVYVCAgIEVORFMKKworO0JPT0wgX19zdGRjYWxsIF9IRW5kUGFpbnQo
SFdORCBoV25kLCBjb25zdCBQQUlOVFNUUlVDVCogbHBQYWludCk7CisKK1BVQkxJQyAgX0hFbmRQ
YWludAorCitfVEVYVCAgIFNFR01FTlQKKworX0hFbmRQYWludCBQUk9DCisgICAgbW92ICByMTAs
cmN4CisgICAgbW92ICBlYXgsMTAxOWgKKyAgICBzeXNjYWxsCisgICAgcmV0CitfSEVuZFBhaW50
IEVORFAKKworX1RFWFQgICBFTkRTCisKK0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYmEyY2VlMmRhNzJjYWYxNGI3NWNmMzZm
YWFkMTRiNzVlNTc0ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPFBsdWdpblBhY2thZ2U+ID4gUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDsKKworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1h
eGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVNpemUgPSAzMjc2ODsKKworc3RhdGlj
IGJvb2wgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOworCitTdHJpbmcm
IHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpCit7CisgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY2FjaGVQYXRoLCAoKSk7CisgICAgcmV0dXJuIGNh
Y2hlUGF0aDsKK30KKyNlbmRpZgorCitQbHVnaW5EYXRhYmFzZTo6UGx1Z2luRGF0YWJhc2UoKQor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgOiBtX3BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQoZmFsc2UpCisjZW5kaWYKK3sKK30KKworUGx1Z2lu
RGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKGJvb2wgcG9wdWxhdGUp
Cit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBwbHVnaW5zID0gMDsKKworICAgIGlmICgh
cGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlOworCisgICAg
ICAgIGlmIChwb3B1bGF0ZSkgeworICAgICAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luRGlyZWN0
b3JpZXMoUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpKTsKKyAgICAg
ICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBwbHVnaW5zOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc01JTUVUeXBlUmVnaXN0ZXJl
ZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29u
dGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBObyBwbHVnaW4g
d2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2Fp
bgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlu
cyhtaW1lVHlwZSkpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBsdWdpbkRp
cmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKK3sKKyAgICBtX3BsdWdpbkRpcmVjdG9y
aWVzLmFwcGVuZChkaXJlY3RvcnkpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQbHVnaW5E
YXRhYmFzZTo6cmVmcmVzaCgpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFU
QV9DQUNIRSkKKyAgICBpZiAoIW1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCkKKyAg
ICAgICAgbG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKyAgICBib29sIHBs
dWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkg
eworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkOworICAgICAgICBnZXREZWxldGVk
UGx1Z2lucyhwbHVnaW5zVG9VbmxvYWQpOworCisgICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCisg
ICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVu
ZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5z
VG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgcmVtb3ZlKGl0
LT5nZXQoKSk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQu
aXNFbXB0eSgpOworICAgIH0KKworICAgIEhhc2hTZXQ8U3RyaW5nPiBwYXRoczsKKyAgICBnZXRQ
bHVnaW5QYXRoc0luRGlyZWN0b3JpZXMocGF0aHMpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHRp
bWVfdD4gcGF0aHNXaXRoVGltZXM7CisKKyAgICAvLyBXZSBzaG91bGQgb25seSBza2lwIHVuY2hh
bmdlZCBmaWxlcyBpZiB3ZSBkaWRuJ3QgcmVtb3ZlIGFueSBwbHVnaW5zIGFib3ZlLiBJZiB3ZSBk
aWQgcmVtb3ZlCisgICAgLy8gYW55IHBsdWdpbnMsIHdlIG5lZWQgdG8gbG9vayBhdCBldmVyeSBw
bHVnaW4gZmlsZSBzbyB0aGF0LCBlLmcuLCBpZiB0aGUgdXNlciBoYXMgdHdvIHZlcnNpb25zCisg
ICAgLy8gb2YgUmVhbFBsYXllciBpbnN0YWxsZWQgYW5kIGp1c3QgcmVtb3ZlZCB0aGUgbmV3ZXIg
b25lLCB3ZSdsbCBwaWNrIHVwIHRoZSBvbGRlciBvbmUuCisgICAgYm9vbCBzaG91bGRTa2lwVW5j
aGFuZ2VkRmlsZXMgPSAhcGx1Z2luU2V0Q2hhbmdlZDsKKworICAgIEhhc2hTZXQ8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgcGF0aHNFbmQgPSBwYXRocy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBpdCAhPSBwYXRoc0Vu
ZDsgKytpdCkgeworICAgICAgICB0aW1lX3QgbGFzdE1vZGlmaWVkOworICAgICAgICBpZiAoIWdl
dEZpbGVNb2RpZmljYXRpb25UaW1lKCppdCwgbGFzdE1vZGlmaWVkKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIHBhdGhzV2l0aFRpbWVzLmFkZCgqaXQsIGxhc3RNb2RpZmllZCk7
CisKKyAgICAgICAgLy8gSWYgdGhlIHBhdGgncyB0aW1lc3RhbXAgaGFzbid0IGNoYW5nZWQgc2lu
Y2UgdGhlIGxhc3QgdGltZSB3ZSByYW4gcmVmcmVzaCgpLCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFu
eXRoaW5nLgorICAgICAgICBpZiAoc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzICYmIG1fcGx1Z2lu
UGF0aHNXaXRoVGltZXMuZ2V0KCppdCkgPT0gbGFzdE1vZGlmaWVkKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgaWYgKFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBvbGRQYWNrYWdlID0g
bV9wbHVnaW5zQnlQYXRoLmdldCgqaXQpKSB7CisgICAgICAgICAgICBBU1NFUlQoIXNob3VsZFNr
aXBVbmNoYW5nZWRGaWxlcyB8fCBvbGRQYWNrYWdlLT5sYXN0TW9kaWZpZWQoKSAhPSBsYXN0TW9k
aWZpZWQpOworICAgICAgICAgICAgcmVtb3ZlKG9sZFBhY2thZ2UuZ2V0KCkpOworICAgICAgICB9
CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdl
OjpjcmVhdGVQYWNrYWdlKCppdCwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgaWYgKHBhY2thZ2Ug
JiYgYWRkKHBhY2thZ2UucmVsZWFzZSgpKSkKKyAgICAgICAgICAgIHBsdWdpblNldENoYW5nZWQg
PSB0cnVlOworICAgIH0KKworICAgIC8vIENhY2hlIGFsbCB0aGUgcGF0aHMgd2UgZm91bmQgd2l0
aCB0aGVpciB0aW1lc3RhbXBzIGZvciBuZXh0IHRpbWUuCisgICAgcGF0aHNXaXRoVGltZXMuc3dh
cChtX3BsdWdpblBhdGhzV2l0aFRpbWVzKTsKKworICAgIGlmICghcGx1Z2luU2V0Q2hhbmdlZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRB
REFUQV9DQUNIRSkKKyAgICB1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworI2VuZGlm
CisKKyAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKKworICAgIC8vIFJlZ2lzdGVy
IHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gR2V0IE1J
TUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBt
YXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKKyAgICAgICAgTUlN
RVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVU
b0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7
ICsrbWFwX2l0KQorICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQt
PmtleSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZlY3RvcjxQbHVnaW5QYWNr
YWdlKj4gUGx1Z2luRGF0YWJhc2U6OnBsdWdpbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxQbHVn
aW5QYWNrYWdlKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQgUGx1Z2lu
RGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9p
ZCogYikKK3sKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5BID0gKnN0YXRpY19jYXN0PFBsdWdp
blBhY2thZ2UqIGNvbnN0Kj4oYSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luQiA9ICpzdGF0
aWNfY2FzdDxQbHVnaW5QYWNrYWdlKiBjb25zdCo+KGIpOworCisgICAgcmV0dXJuIHBsdWdpbkEt
PmNvbXBhcmUoKnBsdWdpbkIpOworfQorCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6
cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWlt
ZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBrZXkgPSBt
aW1lVHlwZS5sb3dlcigpOworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
bHVnaW5zLmVuZCgpOworICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJl
ZmVycmVkUGx1Z2lucy5nZXQoa2V5KTsKKyAgICBpZiAocHJlZmVycmVkUGx1Z2luCisgICAgICAg
ICYmIHByZWZlcnJlZFBsdWdpbi0+aXNFbmFibGVkKCkKKyAgICAgICAgJiYgcHJlZmVycmVkUGx1
Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisgICAgICAgIHJldHVy
biBwcmVmZXJyZWRQbHVnaW47CisgICAgfQorCisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqLCAy
PiBwbHVnaW5DaG9pY2VzOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBQbHVnaW5Q
YWNrYWdlKiBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKworICAgICAgICBpZiAoIXBsdWdpbi0+aXNF
bmFibGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocGx1Z2luLT5t
aW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgICAgIGlmICghcGx1Z2luLT5lbnN1cmVQ
bHVnaW5Mb2FkZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorICAgICAg
ICAgICAgcGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1Z2luKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBxc29ydChwbHVnaW5DaG9pY2VzLmRhdGEoKSwgcGx1Z2luQ2hvaWNlcy5zaXplKCksIHNpemVv
ZihQbHVnaW5QYWNrYWdlKiksIFBsdWdpbkRhdGFiYXNlOjpwcmVmZXJyZWRQbHVnaW5Db21wYXJl
KTsKKworICAgIHJldHVybiBwbHVnaW5DaG9pY2VzWzBdOworfQorCitTdHJpbmcgUGx1Z2luRGF0
YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25z
dAoreworICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQo
KTsKKyAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqLCAyPiBw
bHVnaW5DaG9pY2VzOworICAgIEhhc2hNYXA8UGx1Z2luUGFja2FnZSosIFN0cmluZz4gbWltZVR5
cGVGb3JQbHVnaW47CisKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICghKCppdCkt
PmlzRW5hYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTUlNRVRvRXh0
ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5z
aW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWlt
ZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBtaW1lVHlwZSA9IG1p
bWVfaXQtPmtleTsKKyAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9
IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWltZVR5cGUpOworICAgICAgICAgICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsKKyAgICAgICAgICAgIGJv
b2wgZm91bmRNYXBwaW5nID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CisgICAgICAgICAgICAg
ICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9ICgqaXQpLmdldCgpOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChwcmVmZXJyZWRQbHVnaW4gJiYgUGx1Z2luUGFja2FnZTo6ZXF1YWwoKnBs
dWdpbiwgKnByZWZlcnJlZFBsdWdpbikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWltZVR5cGU7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2luTG9hZGVkKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorICAgICAgICAgICAgICAg
ICAgICBwbHVnaW5DaG9pY2VzLmFwcGVuZChwbHVnaW4pOworICAgICAgICAgICAgICAgICAgICBt
aW1lVHlwZUZvclBsdWdpbi5hZGQocGx1Z2luLCBtaW1lVHlwZSk7CisgICAgICAgICAgICAgICAg
ICAgIGZvdW5kTWFwcGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmb3VuZE1hcHBp
bmcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
cGx1Z2luQ2hvaWNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
IHFzb3J0KHBsdWdpbkNob2ljZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUoKSwgc2l6ZW9m
KFBsdWdpblBhY2thZ2UqKSwgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUp
OworCisgICAgcmV0dXJuIG1pbWVUeXBlRm9yUGx1Z2luLmdldChwbHVnaW5DaG9pY2VzWzBdKTsK
K30KKworUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgVVJM
JiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgCisgICAg
U3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CisgICAgaWYgKGZpbGVu
YW1lLmVuZHNXaXRoKCcvJykpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGludCBleHRl
bnNpb25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGlmIChleHRlbnNpb25Q
b3MgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFN0cmluZyBtaW1lVHlwZUZv
ckV4dGVuc2lvbiA9IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVuYW1lLnN1YnN0cmluZyhleHRl
bnNpb25Qb3MgKyAxKSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2luRm9yTUlN
RVR5cGUobWltZVR5cGVGb3JFeHRlbnNpb24pOworICAgIGlmICghcGx1Z2luKSB7CisgICAgICAg
IC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRvd3MgZm9y
IHRoZSBtaW1lIHR5cGUKKyAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9u
LgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgbWltZVR5cGUgPSBtaW1lVHlw
ZUZvckV4dGVuc2lvbjsKKyAgICByZXR1cm4gcGx1Z2luOworfQorCit2b2lkIFBsdWdpbkRhdGFi
YXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4pCit7CisgICAgaWYgKCFwbHVnaW4gfHwgcGx1Z2luLT5t
aW1lVG9FeHRlbnNpb25zKCkuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICBtX3ByZWZlcnJl
ZFBsdWdpbnMuc2V0KG1pbWVUeXBlLmxvd2VyKCksIHBsdWdpbik7Cit9CisKK2Jvb2wgUGx1Z2lu
RGF0YWJhc2U6OmZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgpIGNvbnN0Cit7CisgICAgLy8gU2tpcCBwbHVnaW4gZmlsZXMgdGhhdCBhcmUgZGlzYWJsZWQg
YnkgZmlsZW5hbWUuCisgICAgaWYgKG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5jb250YWlucyhwYXRo
R2V0RmlsZU5hbWUoZmlsZVBhdGgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIGZpbGVFeGlzdHMoZmlsZVBhdGgpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRE
ZWxldGVkUGx1Z2lucyhQbHVnaW5TZXQmIHBsdWdpbnMpIGNvbnN0Cit7CisgICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBpZiAoIWZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKCgqaXQpLT5wYXRo
KCkpKQorICAgICAgICAgICAgcGx1Z2lucy5hZGQoKml0KTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OmFkZChQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBycFBhY2thZ2UpCit7
CisgICAgQVNTRVJUX0FSRyhwcnBQYWNrYWdlLCBwcnBQYWNrYWdlKTsKKworICAgIFJlZlB0cjxQ
bHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gcHJwUGFja2FnZTsKKworICAgIGlmICghbV9wbHVnaW5z
LmFkZChwYWNrYWdlKS5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBt
X3BsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNrYWdlKiBw
YWNrYWdlKQoreworICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CisgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmVu
ZCgpOworICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFBsdWdpblBhY2th
Z2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lucy5m
aW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJlZmVycmVkUGx1
Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2UpCisgICAgICAgICAg
ICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7CisgICAgfQorCisgICAg
bV9wbHVnaW5zLnJlbW92ZShwYWNrYWdlKTsKKyAgICBtX3BsdWdpbnNCeVBhdGgucmVtb3ZlKHBh
Y2thZ2UtPnBhdGgoKSk7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmNsZWFyKCkKK3sKKyAg
ICBtX3BsdWdpbnMuY2xlYXIoKTsKKyAgICBtX3BsdWdpbnNCeVBhdGguY2xlYXIoKTsKKyAgICBt
X3BsdWdpblBhdGhzV2l0aFRpbWVzLmNsZWFyKCk7CisgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVz
LmNsZWFyKCk7CisgICAgbV9wcmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7CisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICBtX3BlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlSXNMb2FkZWQgPSBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjpy
ZW1vdmVEaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICBy
ZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLnJlbW92ZShmaWxlTmFtZSk7Cit9CisKK2Jvb2wg
UGx1Z2luRGF0YWJhc2U6OmFkZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVO
YW1lKQoreworICAgIHJldHVybiBtX2Rpc2FibGVkUGx1Z2luRmlsZXMuYWRkKGZpbGVOYW1lKS5p
c05ld0VudHJ5OworfQorCisjaWYgKCFPUyhXSU5ET1dTKSB8fCAhRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpKQorLy8gRm9yIFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2Rz
IGFyZSBpbXBsZW1lbnRlZAorLy8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQgaWYgd2Ug
Y2FuIHVzZSBXZWJDb3JlIGNvbnN0cnVjdHMKKy8vIGZvciB0aGUgbG9naWMgd2Ugc2hvdWxkIHBl
cmhhcHMgbW92ZSBpdCBoZXJlIHVuZGVyIFhQX1dJTj8KKworVmVjdG9yPFN0cmluZz4gUGx1Z2lu
RGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCit7CisgICAgVmVjdG9yPFN0cmlu
Zz4gcGF0aHM7CisKKyAgICAvLyBBZGQgcGF0aHMgc3BlY2lmaWMgdG8gZWFjaCBwbGF0Zm9ybQor
I2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGggPSBob21lRGly
ZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmcoIi8ubW96aWxs
YS9wbHVnaW5zIikpOworICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7CisKKyAgICB1
c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisgICAgdXNlclBsdWdpblBhdGgu
YXBwZW5kKFN0cmluZygiLy5uZXRzY2FwZS9wbHVnaW5zIikpOworICAgIHBhdGhzLmFwcGVuZCh1
c2VyUGx1Z2luUGF0aCk7CisKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dzZXIvcGx1
Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9saWIvbW96aWxsYS9wbHVnaW5z
Iik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9maXJlZm94L3BsdWdpbnMiKTsKKyAgICBw
YXRocy5hcHBlbmQoIi91c3IvbGliNjQvYnJvd3Nlci1wbHVnaW5zIik7CisgICAgcGF0aHMuYXBw
ZW5kKCIvdXNyL2xpYi9icm93c2VyLXBsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3Iv
bGliL21vemlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9uZXRz
Y2FwZS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvb3B0L21vemlsbGEvcGx1Z2lucyIp
OworICAgIHBhdGhzLmFwcGVuZCgiL29wdC9tb3ppbGxhL2xpYi9wbHVnaW5zIik7CisgICAgcGF0
aHMuYXBwZW5kKCIvb3B0L25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi9v
cHQvbmV0c2NhcGUvY29tbXVuaWNhdG9yL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91
c3IvbGliL25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25l
dHNjYXBlL3BsdWdpbnMtbGliYzUiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25ldHNj
YXBlL3BsdWdpbnMtbGliYzYiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvbmV0c2Nh
cGUvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9tb3ppbGxhL3BsdWdp
bnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25zYnJvd3Nlci9wbHVnaW5zIik7Cisg
ICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L25zYnJvd3Nlci9wbHVnaW5zIik7CisKKyAgICBT
dHJpbmcgbW96SG9tZShnZXRlbnYoIk1PWklMTEFfSE9NRSIpKTsKKyAgICBtb3pIb21lLmFwcGVu
ZCgiL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQobW96SG9tZSk7CisKKyAgICBWZWN0b3I8
U3RyaW5nPiBtb3pQYXRoczsKKyAgICBTdHJpbmcgbW96UGF0aChnZXRlbnYoIk1PWl9QTFVHSU5f
UEFUSCIpKTsKKyAgICBtb3pQYXRoLnNwbGl0KFVDaGFyKCc6JyksIC8qIGFsbG93RW1wdHlFbnRy
aWVzICovIGZhbHNlLCBtb3pQYXRocyk7CisgICAgcGF0aHMuYXBwZW5kVmVjdG9yKG1velBhdGhz
KTsKKyNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9
IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisgICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygi
L0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7CisgICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVn
aW5QYXRoKTsKKyAgICBwYXRocy5hcHBlbmQoIi9MaWJyYXJ5L0ludGVybmV0IFBsdWctSW5zIik7
CisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGggPSBob21l
RGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmcoIlxcQXBw
bGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lucyIpKTsKKyAgICBwYXRocy5hcHBlbmQodXNl
clBsdWdpblBhdGgpOworI2VuZGlmCisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICBTdHJpbmcgcHJlZmVycmVkUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3RyaW5nKCIv
Lm1vemlsbGEvcGx1Z2lucyIpKTsKKyNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIHByZWZl
cnJlZFBhdGguYXBwZW5kKFN0cmluZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7Cisj
ZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJpbmcoIlxc
QXBwbGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lucyIpKTsKKyNlbmRpZgorCisgICAgLy8g
VE9ETzogV2Ugc2hvdWxkIG5vcm1hbGl6ZSB0aGUgcGF0aCBiZWZvcmUgZG9pbmcgYSBjb21wYXJp
c29uLgorICAgIHJldHVybiBwYXRoID09IHByZWZlcnJlZFBhdGg7Cit9CisKK3ZvaWQgUGx1Z2lu
RGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mIHBh
dGhzKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5z
aXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisKKyNpZiBk
ZWZpbmVkKFhQX1VOSVgpCisgICAgU3RyaW5nIGZpbGVOYW1lRmlsdGVyKCIqLnNvIik7CisjZWxz
ZQorICAgIFN0cmluZyBmaWxlTmFtZUZpbHRlcigiIik7CisjZW5kaWYKKworICAgIFZlY3RvcjxT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkaXJzRW5kID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5lbmQo
KTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkSXQgPSBtX3BsdWdp
bkRpcmVjdG9yaWVzLmJlZ2luKCk7IGRJdCAhPSBkaXJzRW5kOyArK2RJdCkgeworICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBwbHVnaW5QYXRocyA9IGxpc3REaXJlY3RvcnkoKmRJdCwgZmlsZU5hbWVG
aWx0ZXIpOworICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGx1Z2luc0Vu
ZCA9IHBsdWdpblBhdGhzLmVuZCgpOworICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25z
dF9pdGVyYXRvciBwSXQgPSBwbHVnaW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1Z2luc0VuZDsg
KytwSXQpIHsKKyAgICAgICAgICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKnBJ
dCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHBhdGhzLmFkZCgq
cEl0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2VuZGlmIC8vICFPUyhXSU5ET1dTKQorCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKworc3RhdGljIHZvaWQg
ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgVmVj
dG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAwOworICAgIHNp
emVfdCBidWZmZXJDYXBhY2l0eSA9IDEwMjQ7CisgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBh
Y2l0eSk7CisKKyAgICBkbyB7CisgICAgICAgIGJ1ZmZlclNpemUgKz0gcmVhZEZyb21GaWxlKGZp
bGUsIGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJTaXplLCBidWZmZXJDYXBhY2l0eSAtIGJ1ZmZlclNp
emUpOworICAgICAgICBpZiAoYnVmZmVyU2l6ZSA9PSBidWZmZXJDYXBhY2l0eSkgeworICAgICAg
ICAgICAgaWYgKGJ1ZmZlckNhcGFjaXR5IDwgbWF4aW11bVBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0
YUNhY2hlU2l6ZSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlckNhcGFjaXR5ICo9IDI7CisgICAg
ICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVhcigpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBicmVh
azsKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICAgIGJ1ZmZlci5zaHJpbmsoYnVmZmVyU2l6ZSk7
Cit9CisKK3N0YXRpYyBib29sIHJlYWRVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0U3RyaW5nLCBj
aGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKK3sKKyAgICBpZiAoc3RhcnQgPj0gZW5kKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgbGVuID0gc3RybGVuKHN0YXJ0KTsKKyAg
ICByZXN1bHRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXJ0LCBsZW4pOworICAgIHN0YXJ0
ICs9IGxlbiArIDE7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcmVhZFRp
bWUodGltZV90JiByZXN1bHRUaW1lLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKK3sK
KyAgICBpZiAoc3RhcnQgKyBzaXplb2YodGltZV90KSA+PSBlbmQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFRoZSBzdHJlYW0gaXMgbm90IG5lY2Vzc2FyeSBhbGlnbmVkLgorICAg
IG1lbWNweSgmcmVzdWx0VGltZSwgc3RhcnQsIHNpemVvZih0aW1lX3QpKTsKKyAgICBzdGFydCAr
PSBzaXplb2YodGltZV90KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgY29uc3Qg
Y2hhciBzY2hlbWFWZXJzaW9uID0gJzEnOworc3RhdGljIGNvbnN0IGNoYXIgcGVyc2lzdGVudFBs
dWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZVtdID0gIlBsdWdpbk1ldGFkYXRhQ2FjaGUuYmluIjsK
Kwordm9pZCBQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCkKK3sK
KyAgICBpZiAoIWlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkgfHwgcGVyc2lzdGVu
dE1ldGFkYXRhQ2FjaGVQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKKyAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBhdGggPSBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCksIHBl
cnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmlsZW5hbWUpOworICAgIGZpbGUgPSBvcGVuRmls
ZShhYnNvbHV0ZUNhY2hlUGF0aCwgT3BlbkZvclJlYWQpOworCisgICAgaWYgKCFpc0hhbmRsZVZh
bGlkKGZpbGUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXJrIGNhY2hlIGFzIGxvYWRl
ZCByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gSWYKKyAgICAvLyB0aGVyZSdzIGVy
cm9yIGluIHRoZSBjYWNoZSwgd2Ugd29uJ3QgdHJ5IHRvIGxvYWQgaXQgYW55bW9yZS4KKyAgICBt
X3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQgPSB0cnVlOworCisgICAgVmVjdG9yPGNo
YXI+IGZpbGVDb250ZW50czsKKyAgICBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGUs
IGZpbGVDb250ZW50cyk7CisgICAgY2xvc2VGaWxlKGZpbGUpOworCisgICAgaWYgKGZpbGVDb250
ZW50cy5zaXplKCkgPCAyIHx8IGZpbGVDb250ZW50cy5maXJzdCgpICE9IHNjaGVtYVZlcnNpb24g
fHwgZmlsZUNvbnRlbnRzLmxhc3QoKSAhPSAnXDAnKSB7CisgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IHNjaGVtYSIpOworICAg
ICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNoYXIqIGJ1ZmZlclBvcyA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyAxOworICAg
IGNoYXIqIGVuZCA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyBmaWxlQ29udGVudHMuc2l6ZSgpOwor
CisgICAgUGx1Z2luU2V0IGNhY2hlZFBsdWdpbnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVf
dD4gY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxQbHVnaW5QYWNrYWdlPiA+IGNhY2hlZFBsdWdpbnNCeVBhdGg7CisKKyAgICB3aGlsZSAoYnVm
ZmVyUG9zIDwgZW5kKSB7CisgICAgICAgIFN0cmluZyBwYXRoOworICAgICAgICB0aW1lX3QgbGFz
dE1vZGlmaWVkOworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIGRlc2M7Cisg
ICAgICAgIFN0cmluZyBtaW1lRGVzYzsKKyAgICAgICAgaWYgKCEocmVhZFVURjhTdHJpbmcocGF0
aCwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRUaW1lKGxhc3RNb2RpZmll
ZCwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5nKG5hbWUs
IGJ1ZmZlclBvcywgZW5kKQorICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhkZXNjLCBi
dWZmZXJQb3MsIGVuZCkKKyAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcobWltZURlc2Ms
IGJ1ZmZlclBvcywgZW5kKSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJl
YWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IGRhdGEiKTsKKyAgICAgICAgICAgIGRl
bGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU2tpcCBtZXRhZGF0YSB0aGF0IHBvaW50cyB0byBwbHVnaW5zIGZy
b20gZGlyZWN0b3JpZXMgdGhhdAorICAgICAgICAvLyBhcmUgbm90IHBhcnQgb2YgcGx1Z2luIGRp
cmVjdG9yeSBsaXN0IGFueW1vcmUuCisgICAgICAgIFN0cmluZyBwbHVnaW5EaXJlY3RvcnlOYW1l
ID0gZGlyZWN0b3J5TmFtZShwYXRoKTsKKyAgICAgICAgaWYgKG1fcGx1Z2luRGlyZWN0b3JpZXMu
ZmluZChwbHVnaW5EaXJlY3RvcnlOYW1lKSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBQbHVn
aW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKHBhdGgsIGxhc3RNb2RpZmllZCwgbmFt
ZSwgZGVzYywgbWltZURlc2MpOworCisgICAgICAgIGlmIChwYWNrYWdlICYmIGNhY2hlZFBsdWdp
bnMuYWRkKHBhY2thZ2UpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIGNhY2hlZFBsdWdpblBh
dGhzV2l0aFRpbWVzLmFkZChwYWNrYWdlLT5wYXRoKCksIHBhY2thZ2UtPmxhc3RNb2RpZmllZCgp
KTsKKyAgICAgICAgICAgIGNhY2hlZFBsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwg
cGFja2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3BsdWdpbnMuc3dhcChjYWNoZWRQ
bHVnaW5zKTsKKyAgICBtX3BsdWdpbnNCeVBhdGguc3dhcChjYWNoZWRQbHVnaW5zQnlQYXRoKTsK
KyAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLnN3YXAoY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGlt
ZXMpOworfQorCitzdGF0aWMgYm9vbCB3cml0ZVVURjhTdHJpbmcoUGxhdGZvcm1GaWxlSGFuZGxl
IGZpbGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIENTdHJpbmcgdXRmOFN0cmluZyA9
IHN0cmluZy51dGY4KCk7CisgICAgaW50IGxlbmd0aCA9IHV0ZjhTdHJpbmcubGVuZ3RoKCkgKyAx
OworICAgIHJldHVybiB3cml0ZVRvRmlsZShmaWxlLCB1dGY4U3RyaW5nLmRhdGEoKSwgbGVuZ3Ro
KSA9PSBsZW5ndGg7Cit9CisKK3N0YXRpYyBib29sIHdyaXRlVGltZShQbGF0Zm9ybUZpbGVIYW5k
bGUgZmlsZSwgY29uc3QgdGltZV90JiB0aW1lKQoreworICAgIHJldHVybiB3cml0ZVRvRmlsZShm
aWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmdGltZSksIHNpemVvZih0aW1lX3Qp
KSA9PSBzaXplb2YodGltZV90KTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6dXBkYXRlUGVy
c2lzdGVudE1ldGFkYXRhQ2FjaGUoKQoreworICAgIGlmICghaXNQZXJzaXN0ZW50TWV0YWRhdGFD
YWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VBbGxEaXJlY3RvcmllcyhwZXJzaXN0ZW50TWV0
YWRhdGFDYWNoZVBhdGgoKSk7CisgICAgU3RyaW5nIGFic29sdXRlQ2FjaGVQYXRoID0gcGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLCBwZXJzaXN0
ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lKTsKKyAgICBkZWxldGVGaWxlKGFic29sdXRl
Q2FjaGVQYXRoKTsKKworICAgIGlmIChtX3BsdWdpbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKKyAgICBmaWxlID0gb3BlbkZpbGUo
YWJzb2x1dGVDYWNoZVBhdGgsIE9wZW5Gb3JXcml0ZSk7CisKKyAgICBpZiAoIWlzSGFuZGxlVmFs
aWQoZmlsZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBwbHVnaW4gbWV0
YWRhdGEgY2FjaGUgZm9yIHNhdmluZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Y2hhciBsb2NhbFNjaGVtYVZlcnNpb24gPSBzY2hlbWFWZXJzaW9uOworICAgIGlmICh3cml0ZVRv
RmlsZShmaWxlLCAmbG9jYWxTY2hlbWFWZXJzaW9uLCAxKSAhPSAxKSB7CisgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBtZXRhZGF0YSBjYWNoZSBzY2hlbWEiKTsKKyAg
ICAgICAgY2xvc2VGaWxlKGZpbGUpOworICAgICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQ
YXRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgaWYgKCEod3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5wYXRoKCkpCisgICAgICAgICAg
ICAgICYmIHdyaXRlVGltZShmaWxlLCAoKml0KS0+bGFzdE1vZGlmaWVkKCkpCisgICAgICAgICAg
ICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+bmFtZSgpKQorICAgICAgICAgICAg
ICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPmRlc2NyaXB0aW9uKCkpCisgICAgICAg
ICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+ZnVsbE1JTUVEZXNjcmlwdGlv
bigpKSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBt
ZXRhZGF0YSB0byBjYWNoZSIpOworICAgICAgICAgICAgY2xvc2VGaWxlKGZpbGUpOworICAgICAg
ICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbG9zZUZpbGUoZmlsZSk7Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OmlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkKK3sKKyAgICBy
ZXR1cm4gZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOworfQorCit2b2lk
IFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoYm9vbCBp
c0VuYWJsZWQpCit7CisgICAgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVk
ID0gaXNFbmFibGVkOworfQorCitTdHJpbmcgUGx1Z2luRGF0YWJhc2U6OnBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlUGF0aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlUGF0aCgpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRhdGFDYWNo
ZVBhdGgpCit7CisgICAgV2ViQ29yZTo6cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRo
KCkgPSBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGg7Cit9CisjZW5kaWYKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmM0OGVjZGZm
NmNmMjI0MzU1OTRmOGFlODUyMzAxYTYyNjNjZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCkBAIC0wLDAgKzEsMTE4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFBsdWdpbkRhdGFiYXNlX2gKKyNkZWZpbmUgUGx1Z2luRGF0YWJh
c2VfaAorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgSW50
U2l6ZTsKKyAgICBjbGFzcyBVUkw7CisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VDbGllbnQ7Cisg
ICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1
Z2luUGFja2FnZT4sIFBsdWdpblBhY2thZ2VIYXNoLCBQbHVnaW5QYWNrYWdlSGFzaFRyYWl0cz4g
UGx1Z2luU2V0OworCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2UgeworICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQbHVnaW5EYXRhYmFzZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luRGF0YWJhc2UoKTsKKworICAgICAgICAvLyBUaGUg
Zmlyc3QgY2FsbCB0byBpbnN0YWxsZWRQbHVnaW5zIGNyZWF0ZXMgdGhlIHBsdWdpbiBkYXRhYmFz
ZQorICAgICAgICAvLyBhbmQgYnkgZGVmYXVsdCBwb3B1bGF0ZXMgaXQgd2l0aCB0aGUgcGx1Z2lu
cyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4KKyAgICAgICAgLy8gRm9yIHRlc3RpbmcgcHVycG9z
ZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG5vdCBwb3B1bGF0ZSB0aGUgZGF0YWJhc2UKKyAgICAgICAg
Ly8gYXV0b21hdGljYWxseSwgYXMgdGhlIHBsdWdpbnMgbWlnaHQgYWZmZWN0IHRoZSBEUlQgcmVz
dWx0cyBieQorICAgICAgICAvLyB3cml0aW5nIHRvIGEuby4gc3RkZXJyLgorICAgICAgICBzdGF0
aWMgUGx1Z2luRGF0YWJhc2UqIGluc3RhbGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSA9IHRydWUp
OworCisgICAgICAgIGJvb2wgcmVmcmVzaCgpOworICAgICAgICB2b2lkIGNsZWFyKCk7CisgICAg
ICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29s
IGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICB2
b2lkIGFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworCisgICAgICAgIHN0
YXRpYyBib29sIGlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0
b3J5KTsKKyAgICAgICAgc3RhdGljIGludCBwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0IHZv
aWQqLCBjb25zdCB2b2lkKik7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBsdWdpbihj
b25zdCBVUkwmLCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1
Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgc2V0
UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2lu
UGFja2FnZSogcGx1Z2luKTsKKworICAgICAgICB2b2lkIHNldFBsdWdpbkRpcmVjdG9yaWVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKKyAgICAgICAgeworICAgICAgICAgICAg
Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMgPSBkaXJlY3RvcmllczsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUpOworICAgICAgICBib29sIGFkZERpc2FibGVkUGx1Z2luRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRl
ZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVnaW5E
aXJlY3RvcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luRGlyZWN0b3JpZXM7IH0KKworICAg
ICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24p
IGNvbnN0OworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAg
ICAgIHN0YXRpYyBib29sIGlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCk7CisgICAg
ICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChib29sIGlz
RW5hYmxlZCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQ
YXRoKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCk7CisjZW5kaWYKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKEhh
c2hTZXQ8U3RyaW5nPiYpIGNvbnN0OworICAgICAgICB2b2lkIGdldERlbGV0ZWRQbHVnaW5zKFBs
dWdpblNldCYpIGNvbnN0OworICAgICAgICBib29sIGZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVk
KGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUg
cGx1Z2luIHdhcyBhY3R1YWxseSBhZGRlZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVkIGlmIGl0
J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhpc3RpbmcgcGx1Z2luKS4KKyAgICAgICAgYm9vbCBhZGQo
UGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPik7CisgICAgICAgIHZvaWQgcmVtb3ZlKFBsdWdpblBh
Y2thZ2UqKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAg
ICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworICAgICAgICB2b2lkIHVw
ZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKworICAgICAgICBIYXNoU2V0
PFN0cmluZz4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBt
X3BsdWdpbkRpcmVjdG9yaWVzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVk
TUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAgICAgICBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOworICAgICAg
ICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOworICAgICAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJyZWRQbHVn
aW5zOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAg
IGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkOworI2VuZGlmCisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwIGIvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RjNmNmMzQ5OWZj
MjlkZTZhYzVhZWFkYjM5MjQwNDI3MWFhMGUxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwCkBAIC0wLDAgKzEsMzg1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlIDx3dGYvV2luZG93c0V4dHJhcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5QYXRoc0Zyb21S
ZWdpc3RyeShIS0VZIHJvb3RLZXksIEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgSEtF
WSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29m
dHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywgJmtleSk7
CisKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdjaGFyX3QgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKworICAg
IC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAg
ICAgRFdPUkQgbmFtZUxlbiA9IFdURl9BUlJBWV9MRU5HVEgobmFtZSk7CisgICAgICAgIHJlc3Vs
dCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RN
b2RpZmllZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgV0NIQVIgcGF0aFN0cltfTUFYX1BBVEhdOworICAgICAg
ICBEV09SRCBwYXRoU3RyU2l6ZSA9IHNpemVvZihwYXRoU3RyKTsKKyAgICAgICAgRFdPUkQgdHlw
ZTsKKworICAgICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKGtleSwgbmFtZSwgTCJQYXRo
IiwgJnR5cGUsIHBhdGhTdHIsICZwYXRoU3RyU2l6ZSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0g
RVJST1JfU1VDQ0VTUyB8fCB0eXBlICE9IFJFR19TWikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIHBhdGhzLmFkZChTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBzaXplb2Yo
V0NIQVIpIC0gMSkpOworICAgIH0KKworICAgIFJlZ0Nsb3NlS2V5KGtleSk7Cit9CisKK3ZvaWQg
UGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmlu
Zz4mIHBhdGhzKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2Ug
aW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisK
KyAgICBIQU5ETEUgaEZpbmQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICBXSU4zMl9GSU5E
X0RBVEFXIGZpbmRGaWxlRGF0YTsKKworICAgIFN0cmluZyBvbGRXTVBQbHVnaW5QYXRoOworICAg
IFN0cmluZyBuZXdXTVBQbHVnaW5QYXRoOworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICppdCArICJcXCoi
OworCisgICAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgJmZpbmRGaWxlRGF0YSk7CisKKyAgICAgICAgaWYg
KGhGaW5kID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGZpbmRGaWxlRGF0YS5kd0ZpbGVBdHRyaWJ1
dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBTdHJpbmcoZmluZEZpbGVEYXRhLmNG
aWxlTmFtZSwgd2NzbGVuKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUpKTsKKyAgICAgICAgICAgIGlm
ICgoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoIm5wIiwgZmFsc2UpIHx8ICFmaWxlbmFtZS5lbmRzV2l0
aCgiZGxsIiwgZmFsc2UpKSAmJgorICAgICAgICAgICAgICAgICghZXF1YWxJZ25vcmluZ0Nhc2Uo
ZmlsZW5hbWUsICJQbHVnaW4uZGxsIikgfHwgIWl0LT5lbmRzV2l0aCgiU2hvY2t3YXZlIDEwIiwg
ZmFsc2UpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5n
IGZ1bGxQYXRoID0gKml0ICsgIlxcIiArIGZpbGVuYW1lOworICAgICAgICAgICAgaWYgKCF1bmlx
dWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRoKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBwYXRocy5hZGQoZnVsbFBhdGgpOworCisgICAgICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkKKyAgICAg
ICAgICAgICAgICBvbGRXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7CisgICAgICAgICAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21wLmRsbCIpKQorICAgICAg
ICAgICAgICAgIG5ld1dNUFBsdWdpblBhdGggPSBmdWxsUGF0aDsKKworICAgICAgICB9IHdoaWxl
IChGaW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVEYXRhKSAhPSAwKTsKKworICAgICAgICBG
aW5kQ2xvc2UoaEZpbmQpOworICAgIH0KKworICAgIGFkZFBsdWdpblBhdGhzRnJvbVJlZ2lzdHJ5
KEhLRVlfTE9DQUxfTUFDSElORSwgcGF0aHMpOworICAgIGFkZFBsdWdpblBhdGhzRnJvbVJlZ2lz
dHJ5KEhLRVlfQ1VSUkVOVF9VU0VSLCBwYXRocyk7CisKKyAgICAvLyBJZiBib3RoIHRoZSBvbGQg
YW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwgCisgICAg
Ly8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2luZyB0aGUg
b2xkIG9uZS4KKyAgICBpZiAoIW9sZFdNUFBsdWdpblBhdGguaXNFbXB0eSgpICYmICFuZXdXTVBQ
bHVnaW5QYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcGF0aHMucmVtb3ZlKG9sZFdNUFBsdWdpblBh
dGgpOworfQorCitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhj
b25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsK
KworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAg
CisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgeworICAgICAg
ICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgp
OyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4n
IHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmlu
ZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNpb24u
YXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsg
MTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdo
ZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9v
bCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0
b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNp
b25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNp
b25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNp
b25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2Ft
ZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVn
aW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCit7CisgICAgLy8gRW51
bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0cnkKKyAg
ICBIS0VZIGtleTsKKyAgICBMT05HIHJlc3VsdDsKKyAgICAKKyAgICByZXN1bHQgPSBSZWdPcGVu
S2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBL
RVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAg
ICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOworCisg
ICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgICAgIGZvciAoaW50IGkgPSAwOzsgaSsr
KSB7CisgICAgICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdD
SEFSKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAm
bmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgICAgIGlmIChyZXN1
bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0
ZW5zaW9ucyI7CisgICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7CisKKyAgICAgICAgICAg
IC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlF
eChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0
YSgpLCAwLCBLRVlfUkVBRCwgJmV4dGVuc2lvbnNLZXkpOworCisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0IHRoZSBw
bHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNEaXJlY3RvcnlT
dHJbX01BWF9QQVRIXTsKKyAgICAgICAgICAgICAgICBEV09SRCBwbHVnaW5zRGlyZWN0b3J5U2l6
ZSA9IHNpemVvZihwbHVnaW5zRGlyZWN0b3J5U3RyKTsKKyAgICAgICAgICAgICAgICBEV09SRCB0
eXBlOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4dGVuc2lv
bnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNEaXJlY3Rv
cnlTdHIsICZwbHVnaW5zRGlyZWN0b3J5U2l6ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgICAgICAgICAg
ICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcocGx1Z2luc0RpcmVjdG9yeVN0ciwgcGx1Z2lu
c0RpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOworCisgICAgICAgICAgICAgICAg
UmVnQ2xvc2VLZXkoZXh0ZW5zaW9uc0tleSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7CisgICAgfQorfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KFZlY3RvcjxTdHJp
bmc+JiBkaXJlY3RvcmllcykKK3sKKyAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdpbiBp
cyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZpcmVm
b3ggaW5zdGFsbHMKKyAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRIICsgMV07
CisgICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1lbnRTdHJp
bmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2luRGlyZWN0
b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVjdG9yeVN0cikpOworCisgICAgaWYg
KHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gV1RGX0FS
UkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKQorICAgICAgICBkaXJlY3Rvcmllcy5hcHBl
bmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAtIDEpKTsK
KworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyW19N
QVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNpemVvZihp
bnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBnZXRSZWdp
c3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgTCJTb2Z0d2FyZVxcTWljcm9zb2Z0XFxNZWRp
YVBsYXllciIsIEwiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIsICZ0eXBlLCAmaW5zdGFsbGF0aW9u
RGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7CisKKyAgICBpZiAocmVz
dWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgIGRpcmVjdG9y
aWVzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxsYXRpb25E
aXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0
b3JpZXMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5
RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVh
ZGVyIiksIDAsIEtFWV9SRUFELCAma2V5KTsKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NF
U1MpCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICBGSUxFVElN
RSBsYXN0TW9kaWZpZWQ7CisKKyAgICBWZWN0b3I8aW50PiBsYXRlc3RBY3JvYmF0VmVyc2lvbjsK
KyAgICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmc7CisKKyAgICAvLyBFbnVtZXJh
dGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERXT1JEIG5h
bWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAgICByZXN1bHQgPSBS
ZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZp
ZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9iYXRWZXJzaW9uID0gcGFyc2VWZXJz
aW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7CisgICAgICAgIGlmIChjb21wYXJlVmVy
c2lvbnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRWZXJzaW9uKSkgeworICAgICAgICAg
ICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVyc2lvbjsKKyAgICAgICAgICAgIGxh
dGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZy5pc051bGwo
KSkgeworICAgICAgICBEV09SRCB0eXBlOworICAgICAgICBXQ0hBUiBhY3JvYmF0SW5zdGFsbFBh
dGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSA9
IHNpemVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOworCisgICAgICAgIFN0cmluZyBhY3JvYmF0
UGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVyXFwiICsgbGF0
ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxsUGF0aCI7CisgICAgICAgIHJlc3Vs
dCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1Z2luS2V5
UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgJnR5cGUsIGFj
cm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9iYXRJbnN0YWxsUGF0aFNpemUpOworCisgICAgICAg
IGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAgU3RyaW5nIGFjcm9i
YXRQbHVnaW5EaXJlY3RvcnkgPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0
SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7CisgICAg
ICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoYWNyb2JhdFBsdWdpbkRpcmVjdG9yeSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgYWRkSmF2YVBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMp
Cit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtF
WV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcSmF2YVNvZnRcXEphdmEgUGx1Zy1pbiIp
LCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklMRVRJTUUgbGFz
dE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0SmF2YVZlcnNpb247CisgICAgU3Ry
aW5nIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51bWVyYXRlIHN1YmtleXMK
KyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6
ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4
VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKKworICAg
ICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBWZWN0b3I8aW50PiBqYXZhVmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJp
bmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGphdmFWZXJz
aW9uLCBsYXRlc3RKYXZhVmVyc2lvbikpIHsKKyAgICAgICAgICAgIGxhdGVzdEphdmFWZXJzaW9u
ID0gamF2YVZlcnNpb247CisgICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lvblN0cmluZyA9IFN0
cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbGF0ZXN0
SmF2YVZlcnNpb25TdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIERXT1JEIHR5cGU7CisgICAg
ICAgIFdDSEFSIGphdmFJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOworICAgICAgICBEV09SRCBq
YXZhSW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGphdmFJbnN0YWxsUGF0aFN0cik7CisgICAgICAg
IERXT1JEIHVzZU5ld1BsdWdpblZhbHVlOworICAgICAgICBEV09SRCB1c2VOZXdQbHVnaW5TaXpl
OworCisgICAgICAgIFN0cmluZyBqYXZhUGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcSmF2YVNv
ZnRcXEphdmEgUGx1Zy1pblxcIiArIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nOworICAgICAgICBy
ZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgamF2YVBsdWdpbktl
eVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEwiVXNlTmV3SmF2
YVBsdWdpbiIsICZ0eXBlLCAmdXNlTmV3UGx1Z2luVmFsdWUsICZ1c2VOZXdQbHVnaW5TaXplKTsK
KworICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdXNlTmV3UGx1Z2luVmFs
dWUgPT0gMSkgeworICAgICAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xP
Q0FMX01BQ0hJTkUsIGphdmFQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkuZGF0YSgpLCBMIkphdmFIb21lIiwgJnR5cGUsIGphdmFJbnN0YWxsUGF0aFN0ciwgJmph
dmFJbnN0YWxsUGF0aFNpemUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUND
RVNTKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGphdmFQbHVnaW5EaXJlY3RvcnkgPSBTdHJp
bmcoamF2YUluc3RhbGxQYXRoU3RyLCBqYXZhSW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFS
KSAtIDEpICsgIlxcYmluXFxuZXdfcGx1Z2luIjsKKyAgICAgICAgICAgICAgICBkaXJlY3Rvcmll
cy5hcHBlbmQoamF2YVBsdWdpbkRpcmVjdG9yeSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMgaW5saW5lIFN0cmlu
ZyBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCkKK3sKKyAgICBXQ0hBUiBtb2R1bGVGaWxlTmFtZVN0
cltfTUFYX1BBVEhdOworICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc0RpcmVjdG9yeTsKKyAgICBz
dGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSBmYWxzZTsKKworICAgIGlmICghY2Fj
aGVkUGx1Z2luRGlyZWN0b3J5KSB7CisgICAgICAgIGNhY2hlZFBsdWdpbkRpcmVjdG9yeSA9IHRy
dWU7CisKKyAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmlsZU5hbWUo
MCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7CisKKyAgICAgICAgaWYgKCFtb2R1bGVG
aWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgpCisgICAgICAgICAg
ICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9kdWxlRmls
ZU5hbWVTdHIpKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIHBsdWdpbnNEaXJl
Y3RvcnkgPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIpICsgIlxcUGx1Z2lucyI7CisgICAgfQor
ZXhpdDoKKyAgICByZXR1cm4gcGx1Z2luc0RpcmVjdG9yeTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0
b3JpZXMpCit7CisgICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKKworICAg
IGlmICghR2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xF
TkdUSChzeXN0ZW1EaXJlY3RvcnlTdHIpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0NIQVIg
bWFjcm9tZWRpYURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBQYXRoQ29tYmluZShtYWNy
b21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxG
bGFzaCIpKTsKKyAgICBkaXJlY3Rvcmllcy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7
CisKKyAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3Rv
cnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7CisgICAgZGlyZWN0b3JpZXMu
YXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOworfQorCitWZWN0b3I8U3RyaW5nPiBQbHVn
aW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKK3sKKyAgICBWZWN0b3I8U3Ry
aW5nPiBkaXJlY3RvcmllczsKKyAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJpUGx1Z2lu
c0RpcmVjdG9yeSgpOworCisgICAgaWYgKCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkpCisgICAgICAg
IGRpcmVjdG9yaWVzLmFwcGVuZChvdXJEaXJlY3RvcnkpOworICAgIGFkZEFkb2JlQWNyb2JhdFBs
dWdpbkRpcmVjdG9yeShkaXJlY3Rvcmllcyk7CisgICAgYWRkTW96aWxsYVBsdWdpbkRpcmVjdG9y
aWVzKGRpcmVjdG9yaWVzKTsKKyAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5EaXJlY3Rv
cnkoZGlyZWN0b3JpZXMpOworICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3RvcmllcyhkaXJl
Y3Rvcmllcyk7CisKKyAgICByZXR1cm4gZGlyZWN0b3JpZXM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0
YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5
KQoreworICAgIFN0cmluZyBvdXJEaXJlY3RvcnkgPSBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCk7
CisKKyAgICBpZiAoIW91ckRpcmVjdG9yeS5pc051bGwoKSAmJiAhZGlyZWN0b3J5LmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gb3VyRGlyZWN0b3J5ID09IGRpcmVjdG9yeTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5EZWJ1Zy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRlYnVnLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42NmQyM2FlNjcxMzhhY2FiYzY1YjRlMzAwY2YyY2UxNzk4MTQwNTM2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5j
cHAKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBsdWdpbkRlYnVnLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
I2lmICFMT0dfRElTQUJMRUQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZXJyb3JTdHJpbmdzW10gPSB7CisgICAgIk5vIGVycm9ycyBvY2N1cnJlZC4i
LCAvKiBOUEVSUl9OT19FUlJPUiAqLworICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmljIGVycm9y
IGNvZGUgb2NjdXJyZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLworICAgICJJbnZhbGlk
IGluc3RhbmNlIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElEX0lOU1RB
TkNFX0VSUk9SICovCisgICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBFUlJfSU5W
QUxJRF9GVU5DVEFCTEVfRVJST1IgKi8KKyAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZhaWxlZC4i
LCAvKiBOUEVSUl9NT0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KKyAgICAiTWVtb3J5IGFsbG9j
YXRpb24gZmFpbGVkLiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KKyAgICAiUGx1
Zy1pbiBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRVJST1Ig
Ki8KKyAgICAiUGx1Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJS
X0lOVkFMSURfUExVR0lOX0RJUl9FUlJPUiAqLworICAgICJWZXJzaW9ucyBvZiBwbHVnLWluIGFu
ZCBDb21tdW5pY2F0b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJMRV9WRVJT
SU9OX0VSUk9SICovCisgICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBF
UlJfSU5WQUxJRF9QQVJBTSAqLworICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5Q
RVJSX0lOVkFMSURfVVJMICovCisgICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EICovCisgICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIsIC8q
IE5QRVJSX05PX0RBVEEgKi8KKyAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIsIC8qIE5Q
RVJSX1NUUkVBTV9OT1RfU0VFS0FCTEUgKi8KKyAgICAiVW5rbm93biBlcnJvciBjb2RlIgorfTsK
KworI2lmZGVmIFhQX01BQ09TWAorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRyYXdpbmdNb2Rl
bHNbXSA9IHsKKyAgICAiTlBEcmF3aW5nTW9kZWxRdWlja0RyYXciLAorICAgICJOUERyYXdpbmdN
b2RlbENvcmVHcmFwaGljcyIsCisgICAgIk5QRHJhd2luZ01vZGVsT3BlbkdMIiwKKyAgICAiTlBE
cmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGV2ZW50TW9kZWxzW10gPSB7CisgICAgIk5QRXZlbnRNb2RlbENhcmJvbiIsCisgICAgIk5QRXZl
bnRNb2RlbENvY29hIgorfTsKKyNlbmRpZiAvL1hQX01BQ09TWAorCitjb25zdCBjaGFyKiBwcmV0
dHlOYW1lRm9yTlBFcnJvcihOUEVycm9yIGVycm9yKQoreworICAgIHJldHVybiBlcnJvclN0cmlu
Z3NbZXJyb3JdOworfQorCisjaWZkZWYgWFBfTUFDT1NYCitjb25zdCBjaGFyKiBwcmV0dHlOYW1l
Rm9yRHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCkKK3sKKyAgICByZXR1
cm4gZHJhd2luZ01vZGVsc1tkcmF3aW5nTW9kZWxdOworfQorCitjb25zdCBjaGFyKiBwcmV0dHlO
YW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCkKK3sKKyAgICByZXR1cm4g
ZXZlbnRNb2RlbHNbZXZlbnRNb2RlbF07Cit9CisjZW5kaWYgLy9YUF9NQUNPU1gKKworQ1N0cmlu
ZyBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpCit7CisgICAg
c3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVnhEaXNwbGF5OiByZXR1cm4gIk5QTlZ4
RGlzcGxheSI7CisgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiByZXR1cm4gIk5QTlZ4dEFwcENv
bnRleHQiOworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiByZXR1cm4gIk5QTlZuZXRzY2Fw
ZVdpbmRvdyI7CisgICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOiByZXR1cm4gIk5Q
TlZqYXZhc2NyaXB0RW5hYmxlZEJvb2wiOworICAgIGNhc2UgTlBOVmFzZEVuYWJsZWRCb29sOiBy
ZXR1cm4gIk5QTlZhc2RFbmFibGVkQm9vbCI7CisgICAgY2FzZSBOUE5WaXNPZmZsaW5lQm9vbDog
cmV0dXJuICJOUE5WaXNPZmZsaW5lQm9vbCI7CisKKyAgICBjYXNlIE5QTlZzZXJ2aWNlTWFuYWdl
cjogcmV0dXJuICJOUE5Wc2VydmljZU1hbmFnZXIgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNl
IE5QTlZET01FbGVtZW50OiByZXR1cm4gIk5QTlZET01FbGVtZW50IChub3Qgc3VwcG9ydGVkKSI7
CisgICAgY2FzZSBOUE5WRE9NV2luZG93OiByZXR1cm4gIk5QTlZET01XaW5kb3cgKG5vdCBzdXBw
b3J0ZWQpIjsKKyAgICBjYXNlIE5QTlZUb29sa2l0OiByZXR1cm4gIk5QTlZUb29sa2l0IChub3Qg
c3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiByZXR1cm4gIk5Q
TlZTdXBwb3J0c1hFbWJlZEJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKKworICAgIGNhc2UgTlBOVldp
bmRvd05QT2JqZWN0OiByZXR1cm4gIk5QTlZXaW5kb3dOUE9iamVjdCI7CisgICAgY2FzZSBOUE5W
UGx1Z2luRWxlbWVudE5QT2JqZWN0OiByZXR1cm4gIk5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Qi
OworICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczogcmV0dXJuICJOUE5WU3VwcG9ydHNX
aW5kb3dsZXNzIjsKKyAgICBjYXNlIE5QTlZwcml2YXRlTW9kZUJvb2w6IHJldHVybiAiTlBOVnBy
aXZhdGVNb2RlQm9vbCI7CisKKyNpZmRlZiBYUF9NQUNPU1gKKyAgICBjYXNlIE5QTlZwbHVnaW5E
cmF3aW5nTW9kZWw6IHJldHVybiAiTlBOVnBsdWdpbkRyYXdpbmdNb2RlbCI7CisjaWZuZGVmIE5Q
X05PX1FVSUNLRFJBVworICAgIGNhc2UgTlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbDogcmV0dXJu
ICJOUE5Wc3VwcG9ydHNRdWlja0RyYXdCb29sIjsKKyNlbmRpZgorICAgIGNhc2UgTlBOVnN1cHBv
cnRzQ29yZUdyYXBoaWNzQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb3JlR3JhcGhpY3NCb29s
IjsKKyAgICBjYXNlIE5QTlZzdXBwb3J0c09wZW5HTEJvb2w6IHJldHVybiAiTlBOVnN1cHBvcnRz
T3BlbkdMQm9vbCI7CisgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbDogcmV0
dXJuICJOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbCI7CisjaWZuZGVmIE5QX05PX0NBUkJP
TgorICAgIGNhc2UgTlBOVnN1cHBvcnRzQ2FyYm9uQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHND
YXJib25Cb29sIjsKKyNlbmRpZgorICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29jb2FCb29sOiByZXR1
cm4gIk5QTlZzdXBwb3J0c0NvY29hQm9vbCI7CisjZW5kaWYKKworICAgIGRlZmF1bHQ6IHJldHVy
biAiVW5rbm93biB2YXJpYWJsZSI7CisgICAgfQorfQorCitDU3RyaW5nIHByZXR0eU5hbWVGb3JO
UFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dp
dGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBQVnBsdWdpbk5hbWVTdHJpbmc6IHJldHVybiAi
TlBQVnBsdWdpbk5hbWVTdHJpbmciOworICAgIGNhc2UgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3Ry
aW5nOiByZXR1cm4gIk5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZyI7CisgICAgY2FzZSBOUFBW
cGx1Z2luV2luZG93Qm9vbDogcmV0dXJuICJOUFBWcGx1Z2luV2luZG93Qm9vbCI7CisgICAgY2Fz
ZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5UcmFuc3BhcmVu
dEJvb2wiOworCisgICAgY2FzZSBOUFBWamF2YUNsYXNzOiByZXR1cm4gIk5QUFZqYXZhQ2xhc3Mg
KG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dTaXplOiByZXR1cm4g
Ik5QUFZwbHVnaW5XaW5kb3dTaXplIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUFBWcGx1
Z2luVGltZXJJbnRlcnZhbDogcmV0dXJuICJOUFBWcGx1Z2luVGltZXJJbnRlcnZhbCAobm90IHN1
cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVJbnN0YW5jZTogcmV0dXJu
ICJOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2Fz
ZSBOUFBWcGx1Z2luU2NyaXB0YWJsZUlJRDogcmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0YWJsZUlJ
RCAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVmphdmFzY3JpcHRQdXNoQ2FsbGVyQm9v
bDogcmV0dXJuICJOUFBWamF2YXNjcmlwdFB1c2hDYWxsZXJCb29sIChub3Qgc3VwcG9ydGVkKSI7
CisgICAgY2FzZSBOUFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeTogcmV0dXJuICJOUFBWcGx1
Z2luS2VlcExpYnJhcnlJbk1lbW9yeSAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVnBs
dWdpbk5lZWRzWEVtYmVkOiByZXR1cm4gIk5QUFZwbHVnaW5OZWVkc1hFbWJlZCAobm90IHN1cHBv
cnRlZCkiOworCisgICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0OiByZXR1cm4g
Ik5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QiOworCisgICAgY2FzZSBOUFBWZm9ybVZhbHVl
OiByZXR1cm4gIk5QUFZmb3JtVmFsdWUgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZw
bHVnaW5VcmxSZXF1ZXN0c0Rpc3BsYXllZEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblVybFJlcXVl
c3RzRGlzcGxheWVkQm9vbCAobm90IHN1cHBvcnRlZCkiOworCisgICAgY2FzZSBOUFBWcGx1Z2lu
V2FudHNBbGxOZXR3b3JrU3RyZWFtczogcmV0dXJuICJOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3Jr
U3RyZWFtcyI7CisgICAgY2FzZSBOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtOiByZXR1cm4gIk5Q
UFZwbHVnaW5DYW5jZWxTcmNTdHJlYW0iOworCisjaWZkZWYgWFBfTUFDT1NYCisgICAgY2FzZSBO
UFBWcGx1Z2luRHJhd2luZ01vZGVsOiB7CisgICAgICAgIFN0cmluZyByZXN1bHQoIk5QUFZwbHVn
aW5EcmF3aW5nTW9kZWwsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKHByZXR0eU5hbWVGb3JE
cmF3aW5nTW9kZWwoTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVlKSkpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5sYXRpbjEoKTsKKyAgICB9CisgICAgY2FzZSBOUFBWcGx1Z2luRXZlbnRN
b2RlbDogeworICAgICAgICBTdHJpbmcgcmVzdWx0KCJOUFBWcGx1Z2luRXZlbnRNb2RlbCwgIik7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQocHJldHR5TmFtZUZvckV2ZW50TW9kZWwoTlBFdmVudE1v
ZGVsKHVpbnRwdHJfdCh2YWx1ZSkpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQubGF0aW4xKCk7
CisgICAgfQorICAgIGNhc2UgTlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllcjogcmV0dXJuICJO
UFBWcGx1Z2luQ29yZUFuaW1hdGlvbkxheWVyIjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKKyNlbmRpZgorCisgICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlhYmxlIjsK
KyAgICB9Cit9CisKK0NTdHJpbmcgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5QTlVSTFZh
cmlhYmxlIHZhcmlhYmxlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5Q
TlVSTFZDb29raWU6IHJldHVybiAiTlBOVVJMVkNvb2tpZSI7CisgICAgY2FzZSBOUE5VUkxWUHJv
eHk6IHJldHVybiAiTlBOVVJMVlByb3h5IjsKKyAgICBkZWZhdWx0OiByZXR1cm4gIlVua25vd24g
dmFyaWFibGUiOworICAgIH0KK30KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
ICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1
Z2luRGVidWcuaCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGVidWcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42Njc0ODVlOTA5MjhhMDVmY2JkYTgyOTQwYTczOTY3MDk4NzFkYjYxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5oCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUGx1Z2luRGVidWdfaAorI2RlZmluZSBQbHVnaW5EZWJ1Z19oCisK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjZGVmaW5lIExPR19OUEVSUk9SKGVycikg
aWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lucywgIiVzXG4iLCBw
cmV0dHlOYW1lRm9yTlBFcnJvcihlcnIpKQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigp
IExPR19WRVJCT1NFKFBsdWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVtcyB3aXRo
IG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxlbXMuXG4i
KQorCisjaWYgIUxPR19ESVNBQkxFRAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNo
YXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOworCitDU3RyaW5nIHByZXR0
eU5hbWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7CitDU3RyaW5nIHByZXR0
eU5hbWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwor
Q1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFyaWFi
bGUpOworCisjaWZkZWYgWFBfTUFDT1NYCitjb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRHJhd2lu
Z01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCk7Citjb25zdCBjaGFyKiBwcmV0dHlO
YW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCk7CisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRAorCisjZW5kaWYg
Ly8gUGx1Z2luRGVidWdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUzYzMxNWMyMDE4NDM5
NGYzYjQwNjRhM2Y1NDQ3NTczZWQyY2YwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL1BsdWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKQEAgLTAsMCArMSwx
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbi5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgPHd0Zi9B
U0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU2V0IGEgdGltZXIgdG8gbWFr
ZSBzdXJlIHdlIHByb2Nlc3MgYW55IHF1ZXVlZCBtZXNzYWdlcyBhdCBsZWFzdCBldmVyeSAxNm1z
LgorLy8gVGhpcyB2YWx1ZSBhbGxvd3MgRmxhc2ggNjAgbWVzc2FnZXMvc2Vjb25kLCB3aGljaCBz
aG91bGQgYmUgZW5vdWdoIGZvciB2aWRlbworLy8gcGxheWJhY2ssIGFuZCBhbHNvIGdldHMgdXMg
b3ZlciB0aGUgbGltaXQgZm9yIGtpY2tpbmcgaW50byBoaWdoLXJlc29sdXRpb24KKy8vIHRpbWVy
IG1vZGUgKHNlZSBTaGFyZWRUaW1lcldpbi5jcHApLgorc3RhdGljIGNvbnN0IGRvdWJsZSBNZXNz
YWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwgPSAwLjAxNjsKKworLy8gRHVyaW5nIGEgY29udGludW91
cyBzdHJlYW0gb2YgbWVzc2FnZXMsIHByb2Nlc3Mgb25lIGV2ZXJ5IDVtcy4KK3N0YXRpYyBjb25z
dCBkb3VibGUgTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCA9IDAuMDA1OworCitQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyV2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZp
ZXcqIHBsdWdpblZpZXcpCisgICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAgICAsIG1f
YmFjaygwKQorICAgICwgbV9mcm9udCgwKQorICAgICwgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcigq
dGhpcywgJlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46Om1lc3NhZ2VUaHJvdHRsZVRpbWVyRmly
ZWQpCisgICAgLCBtX2xhc3RNZXNzYWdlVGltZSgwKQoreworICAgIC8vIEluaXRpYWxpemUgdGhl
IGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUgbWVzc2FnZXMKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgTnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgIG1faW5saW5lTWVz
c2FnZXNbaV0ubmV4dCA9ICZtX2lubGluZU1lc3NhZ2VzW2kgKyAxXTsKKyAgICBtX2lubGluZU1l
c3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV0ubmV4dCA9IDA7CisgICAgbV9mcmVlSW5saW5l
TWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKK30KKworUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbjo6flBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oKQoreworICAgIFBsdWdpbk1lc3Nh
Z2UqIG5leHQ7CisKKyAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OyBt
ZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gbWVzc2FnZS0+bmV4dDsK
KyAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgfQorfQorCit2b2lkIFBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UoSFdORCBoV25kLCBVSU5UIG1zZywgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBQbHVnaW5NZXNzYWdlKiBtZXNzYWdl
ID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICBtZXNzYWdlLT5oV25kID0gaFduZDsKKyAgICBt
ZXNzYWdlLT5tc2cgPSBtc2c7CisgICAgbWVzc2FnZS0+d1BhcmFtID0gd1BhcmFtOworICAgIG1l
c3NhZ2UtPmxQYXJhbSA9IGxQYXJhbTsKKyAgICBtZXNzYWdlLT5uZXh0ID0gMDsKKworICAgIGlm
IChtX2JhY2spCisgICAgICAgIG1fYmFjay0+bmV4dCA9IG1lc3NhZ2U7CisgICAgbV9iYWNrID0g
bWVzc2FnZTsKKyAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgIG1fZnJvbnQgPSBtZXNzYWdlOwor
CisgICAgLy8gSWYgaXQgaGFzIGJlZW4gbW9yZSB0aGFuIE1lc3NhZ2VEaXJlY3RQcm9jZXNzaW5n
SW50ZXJ2YWwgYmV0d2VlbiB0aHJvdHRsZWQgbWVzc2FnZXMsCisgICAgLy8gZ28gYWhlYWQgYW5k
IHByb2Nlc3MgYSBtZXNzYWdlIGRpcmVjdGx5LgorICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIGlmIChjdXJyZW50VGltZSAtIG1fbGFz
dE1lc3NhZ2VUaW1lID4gTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCkgeworICAgICAg
ICBwcm9jZXNzUXVldWVkTWVzc2FnZSgpOworICAgICAgICBtX2xhc3RNZXNzYWdlVGltZSA9IGN1
cnJlbnRUaW1lOworICAgICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRp
bWVJbnRlcnZhbCk7Cit9CisKK3ZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vz
c1F1ZXVlZE1lc3NhZ2UoKQoreworICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250
OworICAgIG1fZnJvbnQgPSBtX2Zyb250LT5uZXh0OworICAgIGlmIChtZXNzYWdlID09IG1fYmFj
aykKKyAgICAgICAgbV9iYWNrID0gMDsKKworICAgIC8vIFByb3RlY3QgdGhlIFBsdWdpblZpZXcg
ZnJvbSBkZXN0cnVjdGlvbiB3aGlsZSBjYWxsaW5nIGl0cyB3aW5kb3cgcHJvYy4KKyAgICAvLyA8
cmRhcjovL3Byb2JsZW0vNjkzMDI4MD4KKyAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCht
X3BsdWdpblZpZXcpOworICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5wbHVnaW5X
bmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1BhcmFtLCBt
ZXNzYWdlLT5sUGFyYW0pOworCisgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3ZvaWQg
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCgpCit7
CisgICAgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKKworICAgIGlmIChtX2Zyb250KQorICAgICAg
ICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0bGVUaW1l
SW50ZXJ2YWwpOworfQorCitQbHVnaW5NZXNzYWdlKiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2lu
OjphbGxvY2F0ZU1lc3NhZ2UoKQoreworICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAg
ICBpZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKKyAgICAgICAgbWVzc2FnZSA9IG1fZnJlZUlu
bGluZU1lc3NhZ2VzOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2UtPm5l
eHQ7CisgICAgfSBlbHNlCisgICAgICAgIG1lc3NhZ2UgPSBuZXcgUGx1Z2luTWVzc2FnZTsKKwor
ICAgIHJldHVybiBtZXNzYWdlOworfQorCitib29sIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46
OmlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQoreworICAgIHJldHVybiBt
ZXNzYWdlID49ICZtX2lubGluZU1lc3NhZ2VzWzBdICYmIG1lc3NhZ2UgPD0gJm1faW5saW5lTWVz
c2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXTsKK30KKwordm9pZCBQbHVnaW5NZXNzYWdlVGhy
b3R0bGVyV2luOjpmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQoreworICAgIGlm
IChpc0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKKyAgICAgICAgbWVzc2FnZS0+bmV4dCA9IG1f
ZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3Nh
Z2U7CisgICAgfSBlbHNlCisgICAgICAgIGRlbGV0ZSBtZXNzYWdlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2lu
TWVzc2FnZVRocm90dGxlcldpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjNTEwMzA4MzZkM2EzZTkyNzdhNjBk
NTdhZDYzN2M1YWZmMWRhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApAQCAtMCwwICsxLDc0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKKyNkZWZpbmUgUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbl9oCisKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8d2luZG93
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgUGx1Z2luVmlldzsKKworICAg
IHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsKKyAgICAgICAgSFdORCBoV25kOworICAgICAgICBVSU5U
IG1zZzsKKyAgICAgICAgV1BBUkFNIHdQYXJhbTsKKyAgICAgICAgTFBBUkFNIGxQYXJhbTsKKwor
ICAgICAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICB9OworCisgICAgY2xhc3Mg
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbiB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5N
ZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZpZXcqKTsKKyAgICAgICAgflBsdWdpbk1lc3NhZ2VU
aHJvdHRsZXJXaW4oKTsKKworICAgICAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoSFdORCwgVUlOVCBt
c2csIFdQQVJBTSwgTFBBUkFNKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgcHJvY2Vz
c1F1ZXVlZE1lc3NhZ2UoKTsKKyAgICAgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVk
KCk7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2FnZSgpOworICAgICAgICBi
b29sIGlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKKyAgICAgICAgdm9p
ZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKKworICAgICAgICBQbHVnaW5W
aWV3KiBtX3BsdWdpblZpZXc7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKKyAgICAg
ICAgUGx1Z2luTWVzc2FnZSogbV9mcm9udDsKKworICAgICAgICBzdGF0aWMgY29uc3QgaW50IE51
bUlubGluZU1lc3NhZ2VzID0gNDsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSBtX2lubGluZU1lc3Nh
Z2VzW051bUlubGluZU1lc3NhZ2VzXTsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcmVlSW5s
aW5lTWVzc2FnZXM7CisKKyAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcjsKKyAg
ICAgICAgZG91YmxlIG1fbGFzdE1lc3NhZ2VUaW1lOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U4Nzdj
MDE5NzI5ZTgyNWY2Zjc2MjBlNmY1ZjU3ODI5NzRkMDYzOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKQEAgLTAsMCArMSw0Nzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1
Z2luVmlldy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SWRlbnRpZmllclJlcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvTlBfanNvYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9jX3V0aWxpdHkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL25w
cnVudGltZV9pbXBsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9ydW50aW1lX3Jvb3QuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2thZ2UoKQoreworICAgIC8v
IFRoaXMgZGVzdHJ1Y3RvciBnZXRzIGNhbGxlZCBkdXJpbmcgcmVmcmVzaCgpIGlmIFBsdWdpbkRh
dGFiYXNlJ3MKKyAgICAvLyBQbHVnaW5TZXQgaGFzaCBpcyBhbHJlYWR5IHBvcHVsYXRlZCwgYXMg
aXQgcmVtb3ZlcyBpdGVtcyBmcm9tCisgICAgLy8gdGhlIGhhc2ggdGFibGUuIENhbGxpbmcgdGhl
IGRlc3RydWN0b3Igb24gYSBsb2FkZWQgcGx1Zy1pbiBvZgorICAgIC8vIGNvdXJzZSB3b3VsZCBj
YXVzZSBhIGNyYXNoLCBzbyB3ZSBjaGVjayB0byBjYWxsIHVubG9hZCBiZWZvcmUgd2UKKyAgICAv
LyBBU1NFUlQuCisgICAgLy8gRklYTUU6IFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0
byBmaXggdGhpcy4KKyAgICBpZiAoIW1fbG9hZENvdW50KQorICAgICAgICB1bmxvYWRXaXRob3V0
U2h1dGRvd24oKTsKKyAgICBlbHNlCisgICAgICAgIHVubG9hZCgpOworCisgICAgQVNTRVJUKCFt
X2lzTG9hZGVkKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVNvb24oKQor
eworICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOworICAgIEFTU0VS
VChtX21vZHVsZSk7CisgICAgQVNTRVJUKCFtX2xvYWRDb3VudCk7CisKKyAgICBtX2ZyZWVMaWJy
YXJ5VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVM
aWJyYXJ5VGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICAvLyBEbyBu
b3RoaW5nIGlmIHRoZSBtb2R1bGUgZ290IGxvYWRlZCBhZ2FpbiBtZWFud2hpbGUKKyAgICBpZiAo
IW1fbG9hZENvdW50KSB7CisgICAgICAgIHVubG9hZE1vZHVsZShtX21vZHVsZSk7CisgICAgICAg
IG1fbW9kdWxlID0gMDsKKyAgICB9Cit9CisKKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmUo
Y29uc3QgUGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAoreworICAgIC8vIFNvcnQgcGx1
Zy1pbnMgdGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3QuCisgICAgYm9vbCBBYWxs
b3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250
QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgYm9vbCBCYWxsb3dzTXVsdGlwbGVJbnN0YW5j
ZXMgPSAhY29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVs
dGlwbGVJbnN0YW5jZXMpOworICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgIT0gQmFs
bG93c011bHRpcGxlSW5zdGFuY2VzKQorICAgICAgICByZXR1cm4gQWFsbG93c011bHRpcGxlSW5z
dGFuY2VzID8gLTEgOiAxOworCisgICAgLy8gU29ydCBwbHVnLWlucyBpbiBhIHByZWZlcnJlZCBw
YXRoIGZpcnN0LgorICAgIGJvb2wgQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRh
YmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkocGFyZW50RGlyZWN0b3J5KCkpOworICAg
IGJvb2wgQmlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJy
ZWRQbHVnaW5EaXJlY3RvcnkoY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpKTsKKyAgICBpZiAo
QWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgIT0gQmlzSW5QcmVmZXJyZWREaXJlY3RvcnkpCisgICAg
ICAgIHJldHVybiBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA/IC0xIDogMTsKKworICAgIGludCBk
aWZmID0gc3RyY21wKG5hbWUoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ubmFtZSgpLnV0Zjgo
KS5kYXRhKCkpOworICAgIGlmIChkaWZmKQorICAgICAgICByZXR1cm4gZGlmZjsKKworICAgIGRp
ZmYgPSBjb21wYXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZlcnNpb24oKSk7CisgICAgaWYgKGRp
ZmYpCisgICAgICAgIHJldHVybiBkaWZmOworCisgICAgcmV0dXJuIHN0cmNtcChwYXJlbnREaXJl
Y3RvcnkoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkudXRmOCgp
LmRhdGEoKSk7Cit9CisKK1BsdWdpblBhY2thZ2U6OlBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNFbmFibGVkKHRy
dWUpCisgICAgLCBtX2lzTG9hZGVkKGZhbHNlKQorICAgICwgbV9sb2FkQ291bnQoMCkKKyAgICAs
IG1fcGF0aChwYXRoKQorICAgICwgbV9tb2R1bGVWZXJzaW9uKDApCisgICAgLCBtX21vZHVsZSgw
KQorICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQorICAgICwgbV9mcmVlTGlicmFy
eVRpbWVyKCp0aGlzLCAmUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQorI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgLCBtX2luZm9Jc0Zy
b21DYWNoZSh0cnVlKQorI2VuZGlmCit7CisgICAgbV9maWxlTmFtZSA9IHBhdGhHZXRGaWxlTmFt
ZShtX3BhdGgpOworICAgIG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxl
bmd0aCgpIC0gbV9maWxlTmFtZS5sZW5ndGgoKSAtIDEpOworfQorCit2b2lkIFBsdWdpblBhY2th
Z2U6OnVubG9hZCgpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoLS1tX2xvYWRDb3VudCA+IDApCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIG1fTlBQX1NodXRkb3duKCk7CisjZW5kaWYKKwor
ICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OnVu
bG9hZFdpdGhvdXRTaHV0ZG93bigpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKKyAgICBBU1NFUlQobV9tb2R1bGUp
OworCisgICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2ggd2hlbiBjbG9zaW5nIHRhYiB3aXRo
IHBkZiBmaWxlIChSZWFkZXIgNyBvbmx5KQorICAgIC8vIElmIHRoZSBwbHVnaW4gaGFzIHN1YmNs
YXNzZWQgaXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVhZGVyIDcsIHdlIG1heSBoYXZlCisg
ICAgLy8gZ290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVnaW4ncyBpbnRlcm5hbCB3aW5kb3cg
cHJvYyBmb3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKKyAgICAvLyBvcmlnaW5hbCB3aW5kb3cg
cHJvYy4gSWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkgZnJvbSBoZXJlLCB3ZSB3aWxsIGp1
bXAgYmFjaworICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVlZCB3aGVuIHdlIHJldHVybiwgc28g
ZGVsYXkgY2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1bnRpbAorICAgIC8vIHRoZSBuZXh0
IG1lc3NhZ2UgbG9vcAorICAgIGZyZWVMaWJyYXJ5U29vbigpOworCisgICAgbV9pc0xvYWRlZCA9
IGZhbHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVk
KQoreworICAgIG1faXNFbmFibGVkID0gZW5hYmxlZDsKK30KKworUGFzc1JlZlB0cjxQbHVnaW5Q
YWNrYWdlPiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCit7CisgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+
IHBhY2thZ2UgPSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBsYXN0TW9kaWZpZWQp
KTsKKworICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIHBhY2thZ2UucmVsZWFzZSgpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK1Bhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gUGx1Z2lu
UGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKQoreworICAgIFJlZlB0
cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYobmV3IFBsdWdpblBhY2thZ2UocGF0
aCwgbGFzdE1vZGlmaWVkKSk7CisgICAgcGFja2FnZS0+bV9uYW1lID0gbmFtZTsKKyAgICBwYWNr
YWdlLT5tX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgcGFja2FnZS0+ZGV0ZXJtaW5l
TW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOworICAgIHBhY2thZ2UtPnNldE1JTUVEZXNj
cmlwdGlvbihtaW1lRGVzY3JpcHRpb24pOworICAgIHBhY2thZ2UtPm1faW5mb0lzRnJvbUNhY2hl
ID0gdHJ1ZTsKKyAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Cit9CisjZW5kaWYKKworI2lm
IGRlZmluZWQoWFBfVU5JWCkKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2
YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNlIGEgc2luZ2xl
IHByb2Nlc3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3QgcmVsaWFi
bHkgdW5sb2FkIGEKKyAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0aGUgSmF2
YSBwbHVnaW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCisgICAgICAg
IG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgICAgIC8v
IFNldHRpbmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBiYWQg
c2Nyb2xsaW5nIHJlcGFpbnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUgSmF2YSBwbHVn
LWluLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RX
aGVuU2Nyb2xsaW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtaW1lVHlw
ZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gZmxhc2hUZW5WZXJzaW9uKDB4MGEwMDAwMDApOwor
CisgICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oZmxhc2hUZW5WZXJzaW9uKSA+PSAwKSB7
CisgICAgICAgICAgICAvLyBGbGFzaCAxMC4wIGIyMTggZG9lc24ndCBsaWtlIGhhdmluZyBhIE5V
TEwgd2luZG93IGhhbmRsZQorICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9u
dFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gRmxhc2ggOSBhbmQgb2xkZXIgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlm
IHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgICAgICAgICAgbV9xdWlya3MuYWRk
KFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKKyAgICAgICAgfQorCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICAgICAgLy8gNjQtYml0IEZsYXNoIGZyZWV6ZXMgaWYgcmlnaHQtY2xpY2sg
aXMgc2VudCBpbiB3aW5kb3dsZXNzIG1vZGUKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1
aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUpOworI2VuZGlmCisKKyAgICAgICAg
bV9xdWlya3MuYWRkKFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgpOworICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOworICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyk7
CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsKKyAg
ICB9Cit9CisjZW5kaWYKKworI2lmICFPUyhXSU5ET1dTKQordm9pZCBQbHVnaW5QYWNrYWdlOjpk
ZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCkKK3sKKyAgICAvLyBJdCdzIGEg
Yml0IGxhbWUgdG8gZGV0ZWN0IHRoZSBwbHVnaW4gdmVyc2lvbiBieSBwYXJzaW5nIGl0CisgICAg
Ly8gZnJvbSB0aGUgcGx1Z2luIGRlc2NyaXB0aW9uIHN0cmluZywgYnV0IGl0IGRvZXNuJ3Qgc2Vl
bSB0aGF0CisgICAgLy8gdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gYW55IHN0
YW5kYXJkaXplZCB3YXkgYXQKKyAgICAvLyB0aGUgbW9kdWxlIGxldmVsLCBsaWtlIGluIFdpbmRv
d3MKKworICAgIGlmIChtX2Rlc2NyaXB0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1fZGVzY3JpcHRpb24uc3RhcnRzV2l0aCgiU2hvY2t3YXZlIEZsYXNoIikgJiYg
bV9kZXNjcmlwdGlvbi5sZW5ndGgoKSA+PSAxOSkgeworICAgICAgICAvLyBUaGUgZmxhc2ggdmVy
c2lvbiBhcyBhIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBkaWZmZXJzIG9uIFVuaXggZnJvbSBXaW5k
b3dzCisgICAgICAgIC8vIHNpbmNlIHRoZSByZXZpc2lvbiBjYW4gYmUgbGFyZ2VyIHRoYW4gYSA4
IGJpdHMsIHNvIHdlIGFsbG93IGl0IDE2IGhlcmUgYW5kCisgICAgICAgIC8vIHB1c2ggdGhlIG1h
am9yL21pbm9yIHVwIDggYml0cy4gVGh1cyBvbiBVbml4LCBGbGFzaCdzIHZlcnNpb24gbWF5IGJl
CisgICAgICAgIC8vIDB4MGEwMDAwMDAgaW5zdGVhZCBvZiAweDAwMGEwMDAwLgorCisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHZlcnNpb25QYXJ0czsKKyAgICAgICAgbV9kZXNjcmlwdGlvbi5zdWJz
dHJpbmcoMTYpLnNwbGl0KCcgJywgLyphbGxvd0VtcHR5RW50cmllcyA9Ki8gZmFsc2UsIHZlcnNp
b25QYXJ0cyk7CisgICAgICAgIGlmICh2ZXJzaW9uUGFydHMuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICh2ZXJzaW9uUGFydHMuc2l6ZSgpID49IDEpIHsKKyAg
ICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1ham9yTWlub3JQYXJ0czsKKyAgICAgICAgICAgIHZl
cnNpb25QYXJ0c1swXS5zcGxpdCgnLicsIG1ham9yTWlub3JQYXJ0cyk7CisgICAgICAgICAgICBp
ZiAobWFqb3JNaW5vclBhcnRzLnNpemUoKSA+PSAxKSB7CisgICAgICAgICAgICAgICAgYm9vbCBj
b252ZXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtYWpvciA9IG1ham9y
TWlub3JQYXJ0c1swXS50b1VJbnQoJmNvbnZlcnRlZCk7CisgICAgICAgICAgICAgICAgaWYgKGNv
bnZlcnRlZCkKKyAgICAgICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uID0gKG1ham9yICYg
MHhmZikgPDwgMjQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWFqb3JNaW5vclBh
cnRzLnNpemUoKSA9PSAyKSB7CisgICAgICAgICAgICAgICAgYm9vbCBjb252ZXJ0ZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtaW5vciA9IG1ham9yTWlub3JQYXJ0c1sxXS50
b1VJbnQoJmNvbnZlcnRlZCk7CisgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRlZCkKKyAgICAg
ICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uIHw9IChtaW5vciAmIDB4ZmYpIDw8IDE2Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5zaXpl
KCkgPj0gMikgeworICAgICAgICAgICAgU3RyaW5nIHJldmlzaW9uID0gdmVyc2lvblBhcnRzWzFd
OworICAgICAgICAgICAgaWYgKHJldmlzaW9uLmxlbmd0aCgpID4gMSAmJiAocmV2aXNpb25bMF0g
PT0gJ3InIHx8IHJldmlzaW9uWzBdID09ICdiJykpIHsKKyAgICAgICAgICAgICAgICByZXZpc2lv
bi5yZW1vdmUoMCwgMSk7CisgICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uIHw9IHJldmlz
aW9uLnRvSW50KCkgJiAweGZmZmY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisjZW5kaWYKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorc3RhdGljIHZvaWQg
Z2V0TGlzdEZyb21WYXJpYW50QXJncyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTlBWYXJp
YW50KiBhcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCog
cm9vdE9iamVjdCwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYUxpc3QpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIGFMaXN0LmFwcGVu
ZChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmYXJnc1tpXSwg
cm9vdE9iamVjdCkpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6U291cmNlQ29kZSBtYWtlU291
cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCA9IFN0cmluZygpLCBj
b25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb246Om1pbmltdW1Q
b3NpdGlvbigpKQoreworICAgIHJldHVybiBKU0M6OlNvdXJjZUNvZGUoSlNDOjpTdHJpbmdTb3Vy
Y2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9uKSwgc3RhcnRQb3Np
dGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSwgc3RhcnRQb3NpdGlvbi5tX2NvbHVtbi5vbmVCYXNl
ZEludCgpKTsKK30KKworc3RhdGljIGJvb2wgTlBOX0V2YWx1YXRlKE5QUCBpbnN0YW5jZSwgTlBP
YmplY3QqIG8sIE5QU3RyaW5nKiBzLCBOUFZhcmlhbnQqIHZhcmlhbnQpCit7CisgICAgaWYgKG8t
Pl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7CisgICAgICAgIEphdmFTY3JpcHRPYmpl
Y3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOworCisgICAg
ICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmotPnJvb3RPYmpl
Y3Q7CisgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFRoZXJlIGlzIGEgY3Jhc2gg
aW4gRmxhc2ggd2hlbiBldmFsdWF0aW5nIGEgc2NyaXB0IHRoYXQgZGVzdHJveXMgdGhlCisgICAg
ICAgIC8vIFBsdWdpblZpZXcsIHNvIHdlIGRlc3Ryb3kgaXQgYXN5bmNocm9ub3VzbHkuCisgICAg
ICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShpbnN0YW5jZSk7CisKKyAgICAgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwor
ICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBTdHJpbmcgc2Ny
aXB0U3RyaW5nID0gSlNDOjpCaW5kaW5nczo6Y29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKKwor
ICAgICAgICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5n
KSwgSlNDOjpKU1ZhbHVlKCkpOworCisgICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1
ZVRvTlBWYXJpYW50KGV4ZWMsIHJldHVyblZhbHVlLCB2YXJpYW50KTsKKyAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgVk9J
RF9UT19OUFZBUklBTlQoKnZhcmlhbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIG1ldGhv
ZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFu
dCogcmVzdWx0KQoreworICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykg
eworICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFT
Y3JpcHRPYmplY3QqPihvKTsKKworICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nh
c3Q8SWRlbnRpZmllclJlcCo+KG1ldGhvZE5hbWUpOworICAgICAgICBpZiAoIWktPmlzU3RyaW5n
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNl
IHRoZSAiZXZhbCIgbWV0aG9kLgorICAgICAgICBpZiAobWV0aG9kTmFtZSA9PSBfTlBOX0dldFN0
cmluZ0lkZW50aWZpZXIoImV2YWwiKSkgeworICAgICAgICAgICAgaWYgKGFyZ0NvdW50ICE9IDEp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGFyZ3NbMF0u
dHlwZSAhPSBOUFZhcmlhbnRUeXBlX1N0cmluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6TlBOX0V2YWx1YXRlKG5wcCwgbywgY29u
c3RfY2FzdDxOUFN0cmluZyo+KCZhcmdzWzBdLnZhbHVlLnN0cmluZ1ZhbHVlKSwgcmVzdWx0KTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KKyAg
ICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9i
amVjdDsKKyAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9u
ID0gb2JqLT5pbXAtPmdldChleGVjLCBKU0M6OkJpbmRpbmdzOjppZGVudGlmaWVyRnJvbU5QSWRl
bnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOworICAgICAgICBKU0M6OkNhbGxEYXRhIGNhbGxE
YXRhOworICAgICAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rp
b24sIGNhbGxEYXRhKTsKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGVOb25l
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0
aW9uIG9iamVjdC4KKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0Owor
ICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50LCByb290
T2JqZWN0LCBhcmdMaXN0KTsKKyAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdFYgPSBKU0M6OmNh
bGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqLT5pbXAsIGFyZ0xpc3Qp
OworCisgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5j
dGlvbiBjYWxsLgorICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFu
dChleGVjLCByZXN1bHRWLCByZXN1bHQpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoby0+X2NsYXNzLT5pbnZv
a2UpCisgICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmludm9rZShvLCBtZXRob2ROYW1lLCBhcmdz
LCBhcmdDb3VudCwgcmVzdWx0KTsKKworICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MoKQoreworICAgIG1lbXNldCgmbV9icm93c2VyRnVuY3MsIDAsIHNpemVvZihtX2Jy
b3dzZXJGdW5jcykpOworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YobV9icm93c2Vy
RnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUFZlcnNpb24oKTsKKworICAg
IG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3Mu
cG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0g
TlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdT
dHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93
c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3Nl
ckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0g
TlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxv
YzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93
c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVs
b2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVy
bG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5v
dGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0g
TlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVl
OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0
OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJl
Z2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9i
cm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93c2Vy
RnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRl
OworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1
cHNFbmFibGVkU3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucGx1Z2ludGhyZWFkYXN5bmNjYWxs
ID0gTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbDsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVh
c2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRl
bnRpZmllcnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0
SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBf
TlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50
aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnRm
cm9taWRlbnRpZmllciA9IF9OUE5fSW50RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVu
Y3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3Mu
cmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVs
ZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZv
a2UgPSBXZWJDb3JlOjpOUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1
bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBX
ZWJDb3JlOjpOUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBf
TlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9T
ZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVt
b3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc1By
b3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzTWV0aG9kOwor
ICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOworICAg
IG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOworICAgIG1fYnJvd3Nl
ckZ1bmNzLmNvbnN0cnVjdCA9IF9OUE5fQ29uc3RydWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHZhbHVlZm9ydXJsID0gTlBOX0dldFZhbHVlRm9yVVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnNl
dHZhbHVlZm9ydXJsID0gTlBOX1NldFZhbHVlRm9yVVJMOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dGF1dGhlbnRpY2F0aW9uaW5mbyA9IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm87CisKKyAgICBt
X2Jyb3dzZXJGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0gTlBOX1BvcFVwQ29udGV4dE1lbnU7Cit9
CisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisKKyNpZiBFTkFCTEUoUExV
R0lOX1BBQ0tBR0VfU0lNUExFX0hBU0gpCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkg
Y29uc3QKK3sKKyAgICBzdHJ1Y3QgSGFzaENvZGVzIHsKKyAgICAgICAgdW5zaWduZWQgaGFzaDsK
KyAgICAgICAgdGltZV90IG1vZGlmaWVkRGF0ZTsKKyAgICB9IGhhc2hDb2RlczsKKworICAgIGhh
c2hDb2Rlcy5oYXNoID0gbV9wYXRoLmltcGwoKS0+aGFzaCgpOworICAgIGhhc2hDb2Rlcy5tb2Rp
ZmllZERhdGUgPSBtX2xhc3RNb2RpZmllZDsKKworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhh
c2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KCZoYXNoQ29kZXMpOworfQorCitib29sIFBsdWdp
blBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2th
Z2UmIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb247
Cit9CisjZW5kaWYKKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbihjb25z
dCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25zdAoreworICAgIC8v
IHJldHVybiAtMSwgMCwgb3IgMSBpZiBwbHVnLWluIHZlcnNpb24gaXMgbGVzcyB0aGFuLCBlcXVh
bCB0bywgb3IgZ3JlYXRlciB0aGFuCisgICAgLy8gdGhlIHBhc3NlZCB2ZXJzaW9uCisKKyNpZiBP
UyhXSU5ET1dTKQorICAgIGlmIChtX21vZHVsZVZlcnNpb24ubW9zdFNpZyAhPSBjb21wYXJlVmVy
c2lvbi5tb3N0U2lnKQorICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uLm1vc3RTaWcgPiBj
b21wYXJlVmVyc2lvbi5tb3N0U2lnID8gMSA6IC0xOworICAgIGlmIChtX21vZHVsZVZlcnNpb24u
bGVhc3RTaWcgIT0gY29tcGFyZVZlcnNpb24ubGVhc3RTaWcpCisgICAgICAgIHJldHVybiBtX21v
ZHVsZVZlcnNpb24ubGVhc3RTaWcgPiBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZyA/IDEgOiAtMTsK
KyNlbHNlICAgIAorICAgIGlmIChtX21vZHVsZVZlcnNpb24gIT0gY29tcGFyZVZlcnNpb24pCisg
ICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24gPiBjb21wYXJlVmVyc2lvbiA/IDEgOiAtMTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X01FVEFEQVRBX0NBQ0hFKQorYm9vbCBQbHVnaW5QYWNrYWdlOjplbnN1cmVQbHVnaW5Mb2FkZWQo
KQoreworICAgIGlmICghbV9pbmZvSXNGcm9tQ2FjaGUpCisgICAgICAgIHJldHVybiBtX2lzTG9h
ZGVkOworCisgICAgbV9xdWlya3MgPSBQbHVnaW5RdWlya1NldCgpOworICAgIG1fbmFtZSA9IFN0
cmluZygpOworICAgIG1fZGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKKyAgICBtX2Z1bGxNSU1FRGVz
Y3JpcHRpb24gPSBTdHJpbmcoKTsKKyAgICBtX21vZHVsZVZlcnNpb24gPSAwOworCisgICAgcmV0
dXJuIGZldGNoSW5mbygpOworfQorI2VuZGlmCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjgzNDA1NzY3OTdhYTZiYzgzMTc3MmJjM2I0
ZjljY2Y4Y2M4YmE2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdp
bnMvUGx1Z2luUGFja2FnZS5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsdWdpblBhY2th
Z2VfaAorI2RlZmluZSBQbHVnaW5QYWNrYWdlX2gKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
KyNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgi
CisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOworCisg
ICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlKCk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUGFj
a2FnZT4gY3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRp
bWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsKKyNlbmRpZgorCisgICAg
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgICAg
ICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlv
bjsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7
IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBwYXJlbnREaXJlY3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudERpcmVjdG9yeTsgfQorICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtb2R1
bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZTsgfQorICAgICAgICB1aW50MTZfdCBOUFZlcnNp
b24oKSBjb25zdDsKKyAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFzdE1vZGlmaWVkOyB9CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFw
JiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9u
czsgfQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CisKKyAgICAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5Q
YWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKTsKKworICAgICAgICBib29sIGxvYWQo
KTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1
dGRvd24oKTsKKworICAgICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNF
bmFibGVkOyB9CisgICAgICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKworI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5G
dW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CisjZW5kaWYKKyAgICAgICAg
aW50IGNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25z
dDsKKyAgICAgICAgaW50IGNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0OworICAg
ICAgICBQbHVnaW5RdWlya1NldCBxdWlya3MoKSBjb25zdCB7IHJldHVybiBtX3F1aXJrczsgfQor
ICAgICAgICBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIHZlcnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX21vZHVsZVZlcnNpb247IH0KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVU
QURBVEFfQ0FDSEUpCisgICAgICAgIGJvb2wgZW5zdXJlUGx1Z2luTG9hZGVkKCk7CisgICAgICAg
IHZvaWQgc2V0TUlNRURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsK
KyAgICAgICAgU3RyaW5nIGZ1bGxNSU1FRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1
bGxNSU1FRGVzY3JpcHRpb247fQorI2VuZGlmCisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2lu
UGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsK
KworICAgICAgICBib29sIGZldGNoSW5mbygpOworICAgICAgICBib29sIGlzUGx1Z2luQmxhY2ts
aXN0ZWQoKTsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSk7CisKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0
aW9uKCk7CisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOworCisgICAgICAg
IGJvb2wgbV9pc0VuYWJsZWQ7CisgICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKKyAgICAgICAgaW50
IG1fbG9hZENvdW50OworCisgICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOworICAgICAgICBT
dHJpbmcgbV9wYXRoOworICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKKyAgICAgICAgU3RyaW5n
IG1fbmFtZTsKKyAgICAgICAgU3RyaW5nIG1fcGFyZW50RGlyZWN0b3J5OworCisgICAgICAgIFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiBtX21vZHVsZVZlcnNpb247CisKKyAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBNSU1FVG9FeHRlbnNp
b25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtX21v
ZHVsZTsKKyAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOworCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRv
d247CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBOZXRz
Y2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworI2VuZGlmCisKKyAgICAgICAgdm9pZCBmcmVlTGli
cmFyeVNvb24oKTsKKyAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoKTsKKyAgICAg
ICAgVGltZXIgbV9mcmVlTGlicmFyeVRpbWVyOworCisgICAgICAgIFBsdWdpblF1aXJrU2V0IG1f
cXVpcmtzOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAg
ICAgIFN0cmluZyBtX2Z1bGxNSU1FRGVzY3JpcHRpb247CisgICAgICAgIGJvb2wgbV9pbmZvSXNG
cm9tQ2FjaGU7CisjZW5kaWYKKyAgICB9OworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3Jr
YXJvdW5kIGJlY2F1c2UgUGx1Z2luUGFja2FnZUhhc2ggaXMgYnJva2VuIGFuZCBtYXkgY29uc2lk
ZXIga2V5cyB3aXRoIGRpZmZlcmVudCBoYXNoZXMgYXMgZXF1YWwuCisgICAgc3RydWN0IFBsdWdp
blBhY2thZ2VIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiB7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IDY0OworICAgIH07
CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCB1aW50cHRyX3Qga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBs
dWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgp
OyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgdWludHB0cl90IGEsIGNvbnN0
IHVpbnRwdHJfdCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2th
Z2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYikpOyB9CisgICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYgYSwgY29uc3Qg
UmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlOjplcXVhbCgq
YS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luUGFja2FnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBh
Y2thZ2VXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4NTI1N2Q2MjI5MjcyMDkxOGE1MWEzNmQ4MjdkOGNj
ZDJkNDE5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1Bs
dWdpblBhY2thZ2VXaW4uY3BwCkBAIC0wLDAgKzEsMzM1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1
Z2luRGVidWcuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBs
LmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBM
UFZPSUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBTdHJpbmcmIGluZm8pCit7CisgICAgTFBWT0lE
IGJ1ZmZlcjsKKyAgICBVSU5UIGJ1ZmZlckxlbmd0aDsKKyAgICBTdHJpbmcgc3ViSW5mbyA9ICJc
XFN0cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiArIGluZm87CisgICAgYm9vbCByZXR2YWwgPSBW
ZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEsCisgICAgICAgIGNvbnN0X2Nhc3Q8VUNoYXIq
PihzdWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwKKyAgICAg
ICAgJmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7CisgICAgaWYgKCFyZXR2YWwgfHwgYnVmZmVyTGVu
Z3RoID09IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFN1YnRyYWN0IDEg
ZnJvbSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50IHRoZSB0cmFpbGluZyBudWxsIGNoYXJhY3Rl
ci4KKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBi
dWZmZXJMZW5ndGggLSAxKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNr
bGlzdGVkKCkKK3sKKyAgICBpZiAobmFtZSgpID09ICJDaXRyaXggSUNBIENsaWVudCIpIHsKKyAg
ICAgICAgLy8gVGhlIENpdHJpeCBJQ0EgQ2xpZW50IHBsdWctaW4gcmVxdWlyZXMgYSBNb3ppbGxh
LWJhc2VkIGJyb3dzZXI7IHNlZSA8cmRhcjovLzY0MTg2ODE+LgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewor
ICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZl
cmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgorICAgICAgICAvLyB0aGUgbGF0ZXN0
IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNo
LCBzbyBhbGxvdyBpdAorICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCisgICAgICAg
IHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gc2xQbHVnaW5NaW5SZXF1aXJlZCgw
eDUxQkUwMDAwLCAweDAwMDEwMDAwKTsKKworICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9u
KHNsUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZU5hbWUoKSwgIm5wbW96YXguZGxsIikp
IHsKKyAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFp
bnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRsbAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVOYW1lKCksICJucHdwZi5kbGwiKSkg
eworICAgICAgICAvLyBCdWcgNTcxMTk6IE1pY3Jvc29mdCBXaW5kb3dzIFByZXNlbnRhdGlvbiBG
b3VuZGF0aW9uIChXUEYpIHBsdWctaW4gY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb20uZGxs
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAobmFtZSgpID09ICJZYWhvbyBB
cHBsaWNhdGlvbiBTdGF0ZSBQbHVnaW4iKSB7CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg2MAorICAgICAgICAvLyBCdWcgaW4gWWFob28gQXBw
bGljYXRpb24gU3RhdGUgcGx1Zy1pbiBlYXJsaWVyIHRoYW4gMS4wLjAuNiBsZWFkcyB0byBoZWFw
IGNvcnJ1cHRpb24uIAorICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9u
IHlhaG9vQXBwU3RhdGVQbHVnaW5NaW5SZXF1aXJlZCgweDAwMDAwMDA2LCAweDAwMDEwMDAwKTsK
KyAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbih5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVx
dWlyZWQpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gt
c2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVW
ZXJzaW9uIGZsYXNoVGVuVmVyc2lvbigweDAwMDAwMDAwLCAweDAwMGEwMDAwKTsKKworICAgICAg
ICAvLyBQcmUgMTAgRmxhc2ggb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2Ug
cmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50CisgICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNp
b24oZmxhc2hUZW5WZXJzaW9uKSA8IDApCisgICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOworCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVn
aW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKKyAgICAgICAgbV9xdWlya3MuYWRk
KFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOworICAgIH0KKworICAgIGlmIChuYW1lKCku
Y29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG5hbWUoKS5jb250YWlucygiV2luZG93cyBNZWRpYSIp
KSB7CisgICAgICAgIC8vIFRoZSBXTVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0
IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAg
ICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBz
aXplCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dD
YWxsKTsKKworICAgICAgICAvLyBXaW5kb3dsZXNzIG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwg
d2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJlbW92ZSB0aGF0IHBhcmFtZXRlciAKKyAgICAg
ICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhlIHBsdWctaW4uCisgICAgICAgIG1fcXVpcmtz
LmFkZChQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKTsKKworICAgICAgICAv
LyBXTVAgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29wIHRoYXQgaXQgZW50ZXJzIHdoZW5ldmVyIHdl
IGNhbGwgaXQgb3IKKyAgICAgICAgLy8gYXNrIGl0IHRvIHBhaW50LiBUaGlzIG1vZGFsIGxvb3Ag
Y2FuIGRlbGl2ZXIgbWVzc2FnZXMgdG8gb3RoZXIKKyAgICAgICAgLy8gd2luZG93cyBpbiBXZWJL
aXQgYXQgdGltZXMgd2hlbiB0aGV5IGFyZSBub3QgZXhwZWN0aW5nIHRoZW0gKGZvcgorICAgICAg
ICAvLyBleGFtcGxlLCBkZWxpdmVyaW5nIGEgV01fUEFJTlQgbWVzc2FnZSBkdXJpbmcgYSBsYXlv
dXQpLCBhbmQgdGhlc2UKKyAgICAgICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMuCisgICAgICAgIG1f
cXVpcmtzLmFkZChQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApOworICAgIH0KKworICAg
IGlmIChuYW1lKCkgPT0gIlZMQyBNdWx0aW1lZGlhIFBsdWdpbiIgfHwgbmFtZSgpID09ICJWTEMg
TXVsdGltZWRpYSBQbHVnLWluIikgeworICAgICAgICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rlc3Ry
b3kgaWYgd2UgY2FsbCBOUFBfU2V0V2luZG93IHdpdGggYSBudWxsIHdpbmRvdyBoYW5kbGUKKyAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRl
c3Ryb3kpOworCisgICAgICAgIC8vIFZMQyAwLjguNmQgYW5kIDAuOC42ZSBjcmFzaCBpZiBtdWx0
aXBsZSBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81
NzczMDcwPiB0cmFja3MgYWxsb3dpbmcgbXVsdGlwbGUgaW5zdGFuY2VzIHdoZW4gdGhpcworICAg
ICAgICAvLyBidWcgaXMgZml4ZWQuCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0Rv
bnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKKyAgICB9CisKKyAgICAvLyBUaGUgRGl2WCBwbHVn
aW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZl
ciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBs
dWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8v
ZGl2eCIpCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5k
b3dDYWxsKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9i
bGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCisg
ICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3Np
YmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0by4KKyAg
ICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxp
ZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5jZSBnb2VzIGF3YXkuCisgICAgLy8gU2VlIDxy
ZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9u
L3gtc2lsdmVybGlnaHQiKQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5s
b2FkUGx1Z2luKTsKKworICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1F
VHlwZShtaW1lVHlwZSkpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBhIHNpbmdsZSBwcm9jZXNzIGNh
bm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fubm90IHJlbGlhYmx5IHVubG9hZCBh
CisgICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxvYWQgdGhlIEphdmEgcGx1Z2luLCBv
ciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBWTQorICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKKworICAgICAgICAvLyBTZXR0aW5nIHRo
ZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyBy
ZXBhaW50IHByb2JsZW1zCisgICAgICAgIC8vIHdpdGggdGhlIEphdmEgcGx1Zy1pbi4KKyAgICAg
ICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGlu
Zyk7CisgICAgfQorCisgICAgaWYgKG1pbWVUeXBlID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1w
bHVnaW4iKSB7CisgICAgICAgIC8vIFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGlu
ZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJm
bG93LgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JT
YW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KTsKKworICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1N
b2R1bGVWZXJzaW9uIGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbigweDAwMEIw
QjI0LCAweDAwMDYwMDAwKTsKKworICAgICAgICAvLyBVbmxvYWRpbmcgUmVhbFBsYXllciB2ZXJz
aW9ucyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNlIGEgaGFuZzsgc2VlIHJkYXI6Ly81NjY5MzE3
LgorICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVubG9hZGluZyB3aGVuIHRoaXMgYnVnIGluIHRo
ZSBSZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQgKHJkYXI6Ly81NzEzMTQ3KQorICAgICAgICBp
ZiAoY29tcGFyZUZpbGVWZXJzaW9uKGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lv
bikgPiAwKQorICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBs
dWdpbik7CisgICAgfQorfQorCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7Cisg
ICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOworICAgIHZlcnNpb25JbmZvU2l6
ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLCAmemVyb0hhbmRsZSk7CisgICAg
aWYgKHZlcnNpb25JbmZvU2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIHZlcnNpb25JbmZvRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPih2ZXJzaW9uSW5m
b1NpemUpOworCisgICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKGNvbnN0X2Nhc3Q8VUNoYXIq
PihtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLAorICAgICAg
ICAgICAgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEuZ2V0KCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBtX25hbWUgPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5m
b0RhdGEuZ2V0KCksICJQcm9kdWN0TmFtZSIpOworICAgIG1fZGVzY3JpcHRpb24gPSBnZXRWZXJz
aW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJGaWxlRGVzY3JpcHRpb24iKTsKKyAgICBp
ZiAobV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3JpcHRpb24uaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFZTX0ZJWEVERklMRUlORk8qIGluZm87CisgICAgVUlOVCBpbmZv
U2l6ZTsKKyAgICBpZiAoIVZlclF1ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgTCJc
XCIsIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19G
SVhFREZJTEVJTkZPKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbW9kdWxlVmVyc2lv
bi5sZWFzdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKKyAgICBtX21vZHVsZVZlcnNpb24u
bW9zdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKKworICAgIGlmIChpc1BsdWdpbkJsYWNr
bGlzdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHR5
cGVzOworICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIk1JTUVUeXBl
Iikuc3BsaXQoJ3wnLCB0eXBlcyk7CisgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9uTGlzdHM7
CisgICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZUV4dGVudHMi
KS5zcGxpdCgnfCcsIGV4dGVuc2lvbkxpc3RzKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlw
dGlvbnM7CisgICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZU9w
ZW5OYW1lIikuc3BsaXQoJ3wnLCBkZXNjcmlwdGlvbnMpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFN0cmluZyB0eXBlID0gdHlw
ZXNbaV0ubG93ZXIoKTsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gaSA8IGRlc2NyaXB0
aW9ucy5zaXplKCkgPyBkZXNjcmlwdGlvbnNbaV0gOiAiIjsKKyAgICAgICAgU3RyaW5nIGV4dGVu
c2lvbkxpc3QgPSBpIDwgZXh0ZW5zaW9uTGlzdHMuc2l6ZSgpID8gZXh0ZW5zaW9uTGlzdHNbaV0g
OiAiIjsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zVmVjdG9yOworICAgICAg
ICBleHRlbnNpb25MaXN0LnNwbGl0KCcsJywgZXh0ZW5zaW9uc1ZlY3Rvcik7CisKKyAgICAgICAg
Ly8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxpc3QgdGhhdCBtYXkgYmUgYXQgdGhlIGVuZCBv
ZiB0aGUgZGVzY3JpcHRpb24gc3RyaW5nLgorICAgICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24u
ZmluZCgiKCoiKTsKKyAgICAgICAgaWYgKHBvcyAhPSAtMSkgeworICAgICAgICAgICAgLy8gVGhl
cmUgbWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZi4KKyAgICAgICAg
ICAgIGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9uW3BvcyAtIDFdID09ICcgJykKKyAgICAgICAg
ICAgICAgICBwb3MtLTsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24ubGVm
dChwb3MpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBxdWlya3MgZm9y
IHRoZSBNSU1FIHR5cGVzIHRoaXMgcGx1Zy1pbiBzdXBwb3J0cworICAgICAgICBkZXRlcm1pbmVR
dWlya3ModHlwZSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZCh0eXBlLCBleHRl
bnNpb25zVmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKHR5cGUsIGRl
c2NyaXB0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQbHVnaW5Q
YWNrYWdlOjpsb2FkKCkKK3sKKyAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkp
IHsKKyAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVy
LnN0b3AoKTsKKyAgICB9IGVsc2UgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAgICAgaWYgKG1fcXVp
cmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhf
UEFUSF07CisKKyAgICAgICAgaWYgKCE6OkdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCBj
dXJyZW50UGF0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU3RyaW5n
IHBhdGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNlRmluZCgnXFwnKSk7CisK
KyAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGguY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIC8vIExvYWQgdGhlIGxpYnJhcnkKKyAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJy
YXJ5RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwg
TE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpOworCisgICAgICAgIGlmICghOjpTZXRDdXJy
ZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsKKyAgICAgICAgICAgIGlmIChtX21vZHVsZSkK
KyAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9tb2R1bGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfR2V0
RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKKyAgICBOUF9Jbml0aWFs
aXplRnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAg
TlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21v
ZHVsZSwgIk5QX0luaXRpYWxpemUiKTsKKyAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRF
bnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBv
aW50cyIpOworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJv
Y0FkZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOworCisgICAgaWYgKCFOUF9Jbml0aWFs
aXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICAgIGdv
dG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdp
bkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3Mp
OworCisgICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmbV9wbHVnaW5GdW5jcyk7CisgICAg
TE9HX05QRVJST1IobnBFcnIpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAg
ICAgICAgZ290byBhYm9ydDsKKworICAgIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKKworICAg
IG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOworICAgIExPR19OUEVSUk9S
KG5wRXJyKTsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290
byBhYm9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0
OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0Cit7IAorICAgIGNvbnN0IHVuc2ln
bmVkIGhhc2hDb2Rlc1tdID0geworICAgICAgICBtX25hbWUuaW1wbCgpLT5oYXNoKCksCisgICAg
ICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbWltZVRvRXh0ZW5z
aW9ucy5zaXplKCkKKyAgICB9OworCisgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdl
OjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQor
eworICAgIGlmIChhLm1fbmFtZSAhPSBiLm1fbmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGEubV9kZXNjcmlwdGlvbiAhPSBiLm1fZGVzY3JpcHRpb24pCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChhLm1fbWltZVRvRXh0ZW5zaW9ucy5zaXplKCkgIT0gYi5t
X21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBN
SU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBhLm1fbWltZVRv
RXh0ZW5zaW9ucy5lbmQoKS5rZXlzKCk7CisgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpj
b25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IGEubV9taW1lVG9FeHRlbnNpb25zLmJlZ2luKCkua2V5
cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCFiLm1fbWltZVRvRXh0ZW5zaW9u
cy5jb250YWlucygqaXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCit1aW50MTZfdCBQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24oKSBj
b25zdAoreworICAgIHJldHVybiBOUF9WRVJTSU9OX01JTk9SOworfQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5RdWlya1NldC5oIGIvU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5YTMzODNkYmI0NDY5
MDk5NDA3ZDZiZGExMjNkMTAxZGNiNWQzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9QbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsdWdp
blF1aXJrU2V0X2gKKyNkZWZpbmUgUGx1Z2luUXVpcmtTZXRfaAorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGVudW0gUGx1Z2luUXVpcmsgeworICAgICAgICBQbHVnaW5RdWlya1dhbnRz
TW96aWxsYVVzZXJBZ2VudCA9IDEgPDwgMCwKKyAgICAgICAgUGx1Z2luUXVpcmtEZWZlckZpcnN0
U2V0V2luZG93Q2FsbCA9IDEgPDwgMSwKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZUludmFs
aWRhdGUgPSAxIDw8IDIsIAorICAgICAgICBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRl
b1BhcmFtID0gMSA8PCAzLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09u
ZU1lc3NhZ2VzID0gMSA8PCA0LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4g
PSAxIDw8IDUsCisgICAgICAgIFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3Nh
Z2VSZWN1cnNpdmVseSA9IDEgPDwgNiwKKyAgICAgICAgUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3Nh
Z2VMb29wID0gMSA8PCA3LAorICAgICAgICBQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnID0g
MSA8PCA4LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxp
bmcgPSAxIDw8IDksCisgICAgICAgIFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVP
bkRlc3Ryb3kgPSAxIDw8IDEwLAorICAgICAgICBQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxl
SW5zdGFuY2VzID0gMSA8PCAxMSwKKyAgICAgICAgUGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xL
aXQgPSAxIDw8IDEyLAorICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNjcmVlbkRl
cHRoID0gMSA8PCAxMywKKyAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVU
aGFuT25jZSA9IDEgPDwgMTQsCisgICAgICAgIFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0lu
V2luZG93bGVzc01vZGUgPSAxIDw8IDE1LAorICAgICAgICBQbHVnaW5RdWlya1dhbnRzQ2hyb21l
VXNlckFnZW50ID0gMSA8PCAxNgorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5RdWlya1NldCB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFBsdWdpblF1aXJrU2V0KCkgOiBtX3F1aXJr
cygwKSB7IH0KKyAgICAgICAgICAgIHZvaWQgYWRkKFBsdWdpblF1aXJrIHF1aXJrKSB7IG1fcXVp
cmtzIHw9IHF1aXJrOyB9CisgICAgICAgICAgICBib29sIGNvbnRhaW5zKFBsdWdpblF1aXJrIHF1
aXJrKSBjb25zdCB7IHJldHVybiBtX3F1aXJrcyAmIHF1aXJrOyB9CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICB1bnNpZ25lZCBtX3F1aXJrczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQbHVnaW5RdWlya1NldF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzliOWIxMjBmMWY0MjBjNmI0
YTdjNmJmZjAwNzYzMzAwYjU1ODI0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtLmgiCisKKyNpbmNsdWRlICJE
b2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKKy8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2UgdG8gcmV0
dXJuIC0xIHRvIGluZGljYXRlIGVycm9yCisvLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3QgY2xhc2gg
d2l0aCB0aGVtLgorc3RhdGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7CisKK3VzaW5n
IHN0ZDo6bWF4OwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlw
ZWRlZiBIYXNoTWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7CitzdGF0aWMgU3RyZWFtTWFw
JiBzdHJlYW1zKCkKK3sKKyAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7CisgICAg
cmV0dXJuIHN0YXRpY1N0cmVhbXM7Cit9CisKK1BsdWdpblN0cmVhbTo6UGx1Z2luU3RyZWFtKFBs
dWdpblN0cmVhbUNsaWVudCogY2xpZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlm
eURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzLCBOUFAgaW5zdGFuY2UsIGNv
bnN0IFBsdWdpblF1aXJrU2V0JiBxdWlya3MpCisgICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNv
dXJjZVJlcXVlc3QpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2ZyYW1lKGZyYW1l
KQorICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAgLCBtX3NlbmROb3RpZmljYXRp
b24oc2VuZE5vdGlmaWNhdGlvbikKKyAgICAsIG1fc3RyZWFtU3RhdGUoU3RyZWFtQmVmb3JlU3Rh
cnRlZCkKKyAgICAsIG1fbG9hZE1hbnVhbGx5KGZhbHNlKQorICAgICwgbV9kZWxheURlbGl2ZXJ5
VGltZXIoKnRoaXMsICZQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKQorICAg
ICwgbV90ZW1wRmlsZUhhbmRsZShpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQorICAgICwgbV9w
bHVnaW5GdW5jcyhwbHVnaW5GdW5jcykKKyAgICAsIG1faW5zdGFuY2UoaW5zdGFuY2UpCisgICAg
LCBtX3F1aXJrcyhxdWlya3MpCit7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworCisgICAgbV9z
dHJlYW0udXJsID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgbV9zdHJlYW0ucGRh
dGEgPSAwOworICAgIG1fc3RyZWFtLmVuZCA9IDA7CisgICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9
IDA7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKKyAgICBtX3N0cmVhbS5oZWFkZXJz
ID0gMDsKKworICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsKK30KKwor
UGx1Z2luU3RyZWFtOjp+UGx1Z2luU3RyZWFtKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0
ZSAhPSBTdHJlYW1TdGFydGVkKTsKKyAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAgIGZhc3RG
cmVlKChjaGFyKiltX3N0cmVhbS51cmwpOworCisgICAgc3RyZWFtcygpLnJlbW92ZSgmbV9zdHJl
YW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6c3RhcnQoKQoreworICAgIEFTU0VSVCghbV9s
b2FkTWFudWFsbHkpOworICAgIG1fbG9hZGVyID0gcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNj
aGVkdWxlUGx1Z2luU3RyZWFtTG9hZChtX2ZyYW1lLCB0aGlzLCBtX3Jlc291cmNlUmVxdWVzdCk7
Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzdG9wKCkKK3sKKyAgICBtX3N0cmVhbVN0YXRlID0g
U3RyZWFtU3RvcHBlZDsKKworICAgIGlmIChtX2xvYWRNYW51YWxseSkgeworICAgICAgICBBU1NF
UlQoIW1fbG9hZGVyKTsKKworICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIg
PSBtX2ZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpOworICAgICAgICBBU1NF
UlQoZG9jdW1lbnRMb2FkZXIpOworCisgICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNMb2Fk
aW5nTWFpblJlc291cmNlKCkpCisgICAgICAgICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2VsTWFp
blJlc291cmNlTG9hZChtX2ZyYW1lLT5sb2FkZXIoKS5jYW5jZWxsZWRFcnJvcihtX3Jlc291cmNl
UmVxdWVzdCkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9sb2FkZXIp
IHsKKyAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOworICAgICAgICBtX2xvYWRlciA9IDA7Cisg
ICAgfQorCisgICAgbV9jbGllbnQgPSAwOworfQorCitzdGF0aWMgdWludDMyX3QgbGFzdE1vZGlm
aWVkRGF0ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBkb3VibGUg
bGFzdE1vZGlmaWVkID0gcmVzcG9uc2UubGFzdE1vZGlmaWVkKCk7CisgICAgaWYgKCFzdGQ6Omlz
ZmluaXRlKGxhc3RNb2RpZmllZCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGxh
c3RNb2RpZmllZCAqIDEwMDA7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgp
Cit7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisK
KyAgICBjb25zdCBVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNvdXJjZVJlc3BvbnNlLnVybCgpOwor
CisgICAgLy8gU29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0IHRoYXQgamF2YXNjcmlwdCBVUkxz
IGFyZSBwYXNzZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMgdGhlCisgICAgLy8gZm9ybWF0IHVz
ZWQgd2hlbiByZXF1ZXN0aW5nIHRoZSBVUkwuCisgICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0
KHJlc3BvbnNlVVJMKSkKKyAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXMocmVzcG9uc2VVUkwuc3RyaW5nKCkpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChyZXNwb25zZVVSTC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIENTdHJpbmcgbWltZVR5cGVTdHIgPSBtX3Jl
c291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7CisKKyAgICBsb25nIGxvbmcgZXhwZWN0
ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0
aCgpOworCisgICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgeworICAgICAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAgIFN0cmluZyBzZXBhcmF0b3IgPSBB
U0NJSUxpdGVyYWwoIjogIik7CisKKyAgICAgICAgU3RyaW5nIHN0YXR1c0xpbmUgPSAiSFRUUCAi
ICsgU3RyaW5nOjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpICsg
IiBPS1xuIjsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RhdHVzTGluZSk7CisKKyAg
ICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRz
KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFy
YXRvcik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIH0KKworICAgICAg
ICBtX2hlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOworCisgICAgICAg
IC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNzZWQpLCB0
aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAorICAgICAgICAvLyB3aGlj
aCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0IGtub3du
IGF0IHRoZSBtb21lbnQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NDcwNTk5PiB0cmFj
a3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXSB0
byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgorICAgICAgICBTdHJpbmcgY29udGVudEVuY29kaW5n
ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29u
dGVudEVuY29kaW5nKTsKKyAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcuaXNOdWxsKCkgJiYg
Y29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCisgICAgICAgICAgICBleHBlY3RlZENvbnRl
bnRMZW5ndGggPSAtMTsKKyAgICB9CisKKyAgICBtX3N0cmVhbS5oZWFkZXJzID0gbV9oZWFkZXJz
LmRhdGEoKTsKKyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubmRhdGEgPSB0
aGlzOworICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3RlZENvbnRlbnRMZW5ndGgsIDBMTCk7
CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbGFzdE1vZGlmaWVkRGF0ZShtX3Jlc291cmNl
UmVzcG9uc2UpOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7CisKKyAg
ICBtX3RyYW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKKyAgICBtX29mZnNldCA9IDA7CisgICAgbV9y
ZWFzb24gPSBXZWJSZWFzb25Ob25lOworCisgICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFtIGlmIGRl
c3Ryb3lzdHJlYW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFuZGxlcgor
ICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7CisKKyAgICAvLyBjYWxsaW5n
IGludG8gYSBwbHVnLWluIGNvdWxkIHJlc3VsdCBpbiByZS1lbnRyYW5jZSBpZiB0aGUgcGx1Zy1p
biB5aWVsZHMKKyAgICAvLyBjb250cm9sIHRvIHRoZSBzeXN0ZW0gKHJkYXI6Ly81NzQ0ODk5KS4g
cHJldmVudCB0aGlzIGJ5IGRlZmVycmluZyBmdXJ0aGVyCisgICAgLy8gbG9hZGluZyB3aGlsZSBj
YWxsaW5nIGludG8gdGhlIHBsdWctaW4uCisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xv
YWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVn
aW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVUeXBlKW1pbWVUeXBlU3RyLmRh
dGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKKyAgICBpZiAobV9sb2Fk
ZXIpCisgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAgICAKKyAg
ICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwgdG8gbmV3c3RyZWFt
IHdlIHJldHVybgorICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikgeworICAg
ICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKG5wRXJyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFydGVkOworCisgICAgaWYgKG1fdHJh
bnNmZXJNb2RlID09IE5QX05PUk1BTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXRoID0g
b3BlblRlbXBvcmFyeUZpbGUoIldLUCIsIG1fdGVtcEZpbGVIYW5kbGUpOworCisgICAgLy8gU29t
ZXRoaW5nIHdlbnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRoZSBzdHJlYW0KKyAgICBpZiAoIWlz
SGFuZGxlVmFsaWQobV90ZW1wRmlsZUhhbmRsZSkpCisgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lT
dHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworfQorCitOUFAgUGx1Z2luU3RyZWFtOjpvd25lckZv
clN0cmVhbShOUFN0cmVhbSogc3RyZWFtKQoreworICAgIHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0
cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5Q
UmVhc29uIHJlYXNvbikKK3sKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMp
OworCisgICAgZGVzdHJveVN0cmVhbShyZWFzb24pOworICAgIHN0b3AoKTsKK30KKwordm9pZCBQ
bHVnaW5TdHJlYW06OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIG1fcmVh
c29uID0gcmVhc29uOworICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05FKSB7CisgICAgICAg
IC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVkCisgICAgICAgIGlm
IChtX2RlbGl2ZXJ5RGF0YSkKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7
CisgICAgfSBlbHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgp
ID4gMCkgeworICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3RyZWFtZWQsIGRv
bid0IGRlc3Ryb3kgdGhlIHN0cmVhbSBub3cuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ZGVzdHJveVN0cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSgp
Cit7CisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpOworICAgIEFTU0VS
VCghbV9kZWxpdmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKTsKKworICAg
IGNsb3NlRmlsZShtX3RlbXBGaWxlSGFuZGxlKTsKKworICAgIGJvb2wgbmV3U3RyZWFtQ2FsbGVk
ID0gbV9zdHJlYW0ubmRhdGE7CisKKyAgICAvLyBQcm90ZWN0IGZyb20gZGVzdHJ1Y3Rpb24gaWY6
CisgICAgLy8gIE5QTl9EZXN0cm95U3RyZWFtIGlzIGNhbGxlZCBmcm9tIE5QUF9OZXdTdHJlYW0g
b3IKKyAgICAvLyAgUGx1Z2luU3RyZWFtQ2xpZW50OjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkg
cmVtb3ZlcyB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90
ZWN0KHRoaXMpOworCisgICAgaWYgKG5ld1N0cmVhbUNhbGxlZCkgeworICAgICAgICBpZiAobV9y
ZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1f
dHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1f
cGF0aC5pc051bGwoKSk7CisKKyAgICAgICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAg
ICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICAgICAgICAgIG1fcGx1
Z2luRnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcGF0aC51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgICAgICBtX2xvYWRl
ci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9z
dHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKSB7CisgICAgICAgICAgICBpZiAobV9s
b2FkZXIpCisgICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7
CisKKyAgICAgICAgICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3Ry
ZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOworCisgICAgICAgICAgICBpZiAo
bV9sb2FkZXIpCisgICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFs
c2UpOworCisgICAgICAgICAgICBMT0dfTlBFUlJPUihucEVycik7CisgICAgICAgIH0KKworICAg
ICAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fc2VuZE5vdGlmaWNh
dGlvbikgeworICAgICAgICAvLyBGbGFzaCA5IGNhbiBkZXJlZmVyZW5jZSBudWxsIGlmIHdlIGNh
bGwgTlBQX1VSTE5vdGlmeSB3aXRob3V0IGZpcnN0IGNhbGxpbmcgTlBQX05ld1N0cmVhbQorICAg
ICAgICAvLyBmb3IgcmVxdWVzdHMgbWFkZSB3aXRoIE5QTl9Qb3N0VVJMTm90aWZ5OyBzZWUgPHJk
YXI6Ly81NTg4ODA3PgorICAgICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICBtX2xvYWRl
ci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICAgICAgaWYgKCFuZXdTdHJlYW1DYWxsZWQg
JiYgbV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1ZykgJiYKKyAg
ICAgICAgICAgIGVxdWFsSWdub3JpbmdDYXNlKG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBNZXRob2Qo
KSwgIlBPU1QiKSkgeworICAgICAgICAgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7Cisg
ICAgICAgICAgICBtX3N0cmVhbS51cmwgPSAiIjsKKyAgICAgICAgICAgIG1fc3RyZWFtLm5vdGlm
eURhdGEgPSBtX25vdGlmeURhdGE7CisKKyAgICAgICAgICAgIHN0YXRpYyBjaGFyIGVtcHR5TWlt
ZVR5cGVbXSA9ICIiOworICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5z
dGFuY2UsIGVtcHR5TWltZVR5cGUsICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVyTW9kZSk7
CisgICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZt
X3N0cmVhbSwgbV9yZWFzb24pOworCisgICAgICAgICAgICAvLyBpbiBzdWNjZXNzZnVsIHJlcXVl
c3RzLCB0aGUgVVJMIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgZnJlZWQgaW4gb3VyCisg
ICAgICAgICAgICAvLyBkZXN0cnVjdG9yLCBzbyByZXNldCBpdCB0byAwCisgICAgICAgICAgICBt
X3N0cmVhbS51cmwgPSAwOworICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luRnVuY3MtPnVybG5v
dGlmeShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKKyAgICAgICAgaWYgKG1fbG9hZGVyKQor
ICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOworICAgIH0KKwor
ICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOworCisgICAgaWYgKCFtX2xvYWRNYW51
YWxseSAmJiBtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnN0cmVhbURpZEZpbmlzaExvYWRp
bmcodGhpcyk7CisKKyAgICBpZiAoIW1fcGF0aC5pc051bGwoKSkKKyAgICAgICAgZGVsZXRlRmls
ZShtX3BhdGgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGVsYXlEZWxpdmVyeVRpbWVyRmly
ZWQoKQoreworICAgIGRlbGl2ZXJEYXRhKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpkZWxp
dmVyRGF0YSgpCit7CisgICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRhKTsKKyAgICAKKyAgICBpZiAo
bV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGNhbmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJjZUxvYWRlciBvbiBlcnJvciBzbyB3
ZSBkb24ndCByZWFjaCB0aGlzIGNhc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1f
c3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBpZiAoIW1fc3RyZWFt
Lm5kYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50MzJfdCB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKKyAgICBp
bnQzMl90IHRvdGFsQnl0ZXNEZWxpdmVyZWQgPSAwOworCisgICAgaWYgKG1fbG9hZGVyKQorICAg
ICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICB3aGlsZSAodG90YWxC
eXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgaW50MzJfdCBkZWxpdmVyeUJ5
dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9zdHJlYW0pOwor
CisgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKKyAgICAgICAgICAgIG1fZGVsYXlE
ZWxpdmVyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVz
LCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7CisgICAgICAgICAgICBpbnQzMl90
IGRhdGFMZW5ndGggPSBkZWxpdmVyeUJ5dGVzOworICAgICAgICAgICAgY2hhciogZGF0YSA9IG1f
ZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkOworCisgICAgICAgICAg
ICAvLyBXcml0ZSB0aGUgZGF0YQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2lu
RnVuY3MtPndyaXRlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9vZmZzZXQsIGRhdGFMZW5ndGgs
ICh2b2lkKilkYXRhKTsKKyAgICAgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDwgMCkgeworICAg
ICAgICAgICAgICAgIExPR19QTFVHSU5fTkVUX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgaWYg
KG1fbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGlu
ZyhmYWxzZSk7CisgICAgICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19O
RVRXT1JLX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCBkYXRhTGVuZ3RoKTsK
KyAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgICAgICB0b3Rh
bEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7
CisKKyAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDApIHsKKyAgICAgICAgaWYgKHRvdGFs
Qnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAgICAgICAgICBpbnQgcmVtYWluaW5n
Qnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZDsKKyAgICAgICAgICAgIG1l
bW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIHRv
dGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsKKyAgICAgICAgICAgIG1fZGVsaXZl
cnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGlmIChtX3JlYXNv
biAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICAgICAgICAgIGRlc3Ryb3lTdHJlYW0oKTsKKyAg
ICAgICAgfQorICAgIH0gCit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0
cmVhbShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykK
K3sKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJM
LCAidGV4dC9wbGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwgIiIpKTsKKworICAgIGlmICht
X3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghcmVzdWx0U3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGRpZFJlY2VpdmVEYXRhKDAsIHJl
c3VsdFN0cmluZy5kYXRhKCksIHJlc3VsdFN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGlmICht
X3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9sb2FkZXIgPSAwOworCisgICAgZGVzdHJveVN0cmVhbShyZXN1bHRTdHJpbmcu
aXNOdWxsKCkgPyBOUFJFU19ORVRXT1JLX0VSUiA6IE5QUkVTX0RPTkUpOworfQorCit2b2lkIFBs
dWdpblN0cmVhbTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
KiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VS
VF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0cmVh
bVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgbV9yZXNvdXJjZVJlc3BvbnNl
ID0gcmVzcG9uc2U7CisKKyAgICBzdGFydFN0cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0cmVh
bTo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwg
bG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1T
dGFydGVkKTsKKworICAgIC8vIElmIHRoZSBwbHVnLWluIGNhbmNlbHMgdGhlIHN0cmVhbSBpbiBk
ZWxpdmVyRGF0YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKKyAgICAvLyBzbyBwcm90ZWN0IGl0IGhl
cmUuCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKKworICAgIGlmICht
X3RyYW5zZmVyTW9kZSAhPSBOUF9BU0ZJTEVPTkxZKSB7CisgICAgICAgIGlmICghbV9kZWxpdmVy
eURhdGEpCisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VmVj
dG9yPGNoYXI+PigpOworCisgICAgICAgIGludCBvbGRTaXplID0gbV9kZWxpdmVyeURhdGEtPnNp
emUoKTsKKyAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsK
KyAgICAgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBs
ZW5ndGgpOworCisgICAgICAgIGRlbGl2ZXJEYXRhKCk7CisgICAgfQorCisgICAgaWYgKG1fc3Ry
ZWFtU3RhdGUgIT0gU3RyZWFtU3RvcHBlZCAmJiBpc0hhbmRsZVZhbGlkKG1fdGVtcEZpbGVIYW5k
bGUpKSB7CisgICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSB3cml0ZVRvRmlsZShtX3RlbXBGaWxl
SGFuZGxlLCBkYXRhLCBsZW5ndGgpOworICAgICAgICBpZiAoYnl0ZXNXcml0dGVuICE9IGxlbmd0
aCkKKyAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIp
OworICAgIH0KK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmRpZEZhaWwoTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgQVNTRVJU
X1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisKKyAgICBMT0dfUExVR0lOX05F
VF9FUlJPUigpOworCisgICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0IGluIG91ciBiZWlu
ZyBkZWxldGVkCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKKworICAg
IGRlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworCisgICAgbV9sb2FkZXIgPSAwOwor
fQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlciogbG9hZGVyKQoreworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIg
PT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0YXJ0ZWQp
OworCisgICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0IGluIG91ciBiZWluZyBkZWxldGVk
CisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKKworICAgIGRlc3Ryb3lT
dHJlYW0oTlBSRVNfRE9ORSk7CisKKyAgICBtX2xvYWRlciA9IDA7Cit9CisKK2Jvb2wgUGx1Z2lu
U3RyZWFtOjp3YW50c0FsbFN0cmVhbXMoKSBjb25zdAoreworICAgIGlmICghbV9wbHVnaW5GdW5j
cy0+Z2V0dmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZvaWQqIHJlc3VsdCA9
IDA7CisgICAgaWYgKG1fcGx1Z2luRnVuY3MtPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVn
aW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmcmVzdWx0KSAhPSBOUEVSUl9OT19FUlJPUikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHJlc3VsdCAhPSAwOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5oIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMDAzMmM0
YzE5MDQ1MTIyZjU2YWNlZjYzMmU1NzgxOGExNWE5YmNmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uaApAQCAtMCwwICsxLDEyMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFBsdWdpblN0cmVhbV9oCisjZGVmaW5lIFBsdWdpblN0cmVhbV9oCisKKyNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSAiTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIFBs
dWdpblN0cmVhbTsKKworICAgIGVudW0gUGx1Z2luU3RyZWFtU3RhdGUgeyBTdHJlYW1CZWZvcmVT
dGFydGVkLCBTdHJlYW1TdGFydGVkLCBTdHJlYW1TdG9wcGVkIH07CisKKyAgICBjbGFzcyBQbHVn
aW5TdHJlYW1DbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+UGx1Z2luU3Ry
ZWFtQ2xpZW50KCkge30KKyAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRp
bmcoUGx1Z2luU3RyZWFtKikge30KKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luU3RyZWFtIDog
cHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luU3RyZWFtPiwgcHJpdmF0ZSBOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQbHVnaW5TdHJlYW0+IGNyZWF0ZShQbHVnaW5TdHJlYW1DbGllbnQqIGNsaWVudCwgRnJhbWUq
IGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNh
dGlvbiwgdm9pZCogbm90aWZ5RGF0YSwgY29uc3QgTlBQbHVnaW5GdW5jcyogZnVuY3Rpb25zLCBO
UFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0JiBxdWlya3MpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luU3RyZWFtKGNsaWVudCwgZnJhbWUs
IHJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEsIGZ1bmN0aW9ucywgaW5zdGFu
Y2UsIHF1aXJrcykpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgflBsdWdpblN0cmVhbSgp
OworICAgICAgICAKKyAgICAgICAgdm9pZCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsK
KworICAgICAgICB2b2lkIHN0YXJ0U3RyZWFtKCk7CisKKyAgICAgICAgdm9pZCBzZXRMb2FkTWFu
dWFsbHkoYm9vbCBsb2FkTWFudWFsbHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7
IH0KKworICAgICAgICB2b2lkIHNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IFVSTCYgcmVxdWVz
dFVSTCwgY29uc3QgV1RGOjpDU3RyaW5nJiByZXN1bHRTdHJpbmcpOworICAgICAgICB2b2lkIGNh
bmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOworCisgICAgICAgIHN0YXRpYyBOUFAgb3du
ZXJGb3JTdHJlYW0oTlBTdHJlYW0qKTsKKworICAgICAgICAvLyBOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlckNsaWVudAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
Kik7CisgICAgICAgIHZpcnR1YWwgYm9vbCB3YW50c0FsbFN0cmVhbXMoKSBjb25zdDsKKworICAg
IHByaXZhdGU6CisgICAgICAgIFBsdWdpblN0cmVhbShQbHVnaW5TdHJlYW1DbGllbnQqLCBGcmFt
ZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCog
bm90aWZ5RGF0YSwgY29uc3QgTlBQbHVnaW5GdW5jcyosIE5QUCBpbnN0YW5jZSwgY29uc3QgUGx1
Z2luUXVpcmtTZXQmKTsKKworICAgICAgICB2b2lkIGRlbGl2ZXJEYXRhKCk7CisgICAgICAgIHZv
aWQgZGVzdHJveVN0cmVhbShOUFJlYXNvbik7CisgICAgICAgIHZvaWQgZGVzdHJveVN0cmVhbSgp
OworCisgICAgICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKKyAgICAgICAg
UmVzb3VyY2VSZXNwb25zZSBtX3Jlc291cmNlUmVzcG9uc2U7CisKKyAgICAgICAgUGx1Z2luU3Ry
ZWFtQ2xpZW50KiBtX2NsaWVudDsKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIFJl
ZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIHZvaWQq
IG1fbm90aWZ5RGF0YTsKKyAgICAgICAgYm9vbCBtX3NlbmROb3RpZmljYXRpb247CisgICAgICAg
IFBsdWdpblN0cmVhbVN0YXRlIG1fc3RyZWFtU3RhdGU7CisgICAgICAgIGJvb2wgbV9sb2FkTWFu
dWFsbHk7CisKKyAgICAgICAgVGltZXIgbV9kZWxheURlbGl2ZXJ5VGltZXI7CisgICAgICAgIHZv
aWQgZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
VmVjdG9yPGNoYXI+PiBtX2RlbGl2ZXJ5RGF0YTsKKworICAgICAgICBQbGF0Zm9ybUZpbGVIYW5k
bGUgbV90ZW1wRmlsZUhhbmRsZTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBtX3Bs
dWdpbkZ1bmNzOworICAgICAgICBOUFAgbV9pbnN0YW5jZTsKKyAgICAgICAgdWludDE2X3QgbV90
cmFuc2Zlck1vZGU7CisgICAgICAgIGludDMyX3QgbV9vZmZzZXQ7CisgICAgICAgIENTdHJpbmcg
bV9oZWFkZXJzOworICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBOUFJlYXNvbiBtX3Jl
YXNvbjsKKyAgICAgICAgTlBTdHJlYW0gbV9zdHJlYW07CisgICAgICAgIFBsdWdpblF1aXJrU2V0
IG1fcXVpcmtzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGYwNDA4
ODIzZTAzMzMzZWE5YTQ5ZGE5MmEyOGJlZDM0N2ViNjRkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMCwwICsxLDE0ODkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR2lyaXNo
IFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAi
UGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9CcmlkZ2VKU0MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvQ29va2llSmFyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0VsZW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3QuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxv
YWRlckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVUcmVlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
UGx1Z0luRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck5hbWVzLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9JbWFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01CaW5kaW5n
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
S2V5Ym9hcmRFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luTWFpblRocmVh
ZFNjaGVkdWxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlckJveC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TZWN1cml0eU9yaWdpbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9X
aGVlbEV2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9jX2luc3RhbmNlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvcnVudGltZV9yb290
Lmg+CisjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHd0
Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBP
UyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRlICJQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCisjZW5kaWYKKwordXNpbmcgSlNDOjpFeGVjU3RhdGU7
Cit1c2luZyBKU0M6OkpTTG9jazsKK3VzaW5nIEpTQzo6SlNPYmplY3Q7Cit1c2luZyBKU0M6OkpT
VmFsdWU7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKwordXNpbmcgc3RkOjpt
aW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworc3RhdGljIGludCBzX2NhbGxpbmdQbHVnaW47CisK
K3R5cGVkZWYgSGFzaE1hcDxOUFAsIFBsdWdpblZpZXcqPiBJbnN0YW5jZU1hcDsKKworc3RhdGlj
IEluc3RhbmNlTWFwJiBpbnN0YW5jZU1hcCgpCit7CisgICAgc3RhdGljIEluc3RhbmNlTWFwJiBt
YXAgPSAqbmV3IEluc3RhbmNlTWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBTdHJp
bmcgc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IFVSTCYgdXJsKQoreworICAgIGlm
ICghcHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgLy8gVGhpcyByZXR1cm5zIGFuIHVuZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoMTEpKTsKK30KKwor
UGx1Z2luVmlldyogUGx1Z2luVmlldzo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CisKK3ZvaWQg
UGx1Z2luVmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKCkKK3sKKyAgICBwb3BQb3B1cHNF
bmFibGVkU3RhdGUoKTsKK30KKworSW50UmVjdCBQbHVnaW5WaWV3Ojp3aW5kb3dDbGlwUmVjdCgp
IGNvbnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KKyAgICBJ
bnRSZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBvdXIgZWxl
bWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBm
cmFtZSB2aWV3LgorICAgIEZyYW1lVmlldyogcGFyZW50VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS52aWV3KCk7CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHBhcmVudFZpZXctPndpbmRvd0Ns
aXBSZWN0Rm9yRnJhbWVPd25lcihtX2VsZW1lbnQsIHRydWUpKTsKKworICAgIHJldHVybiBjbGlw
UmVjdDsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLnByaW50aW5nKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9IGZyYW1lUmVjdCgpKQorICAgICAgICBXaWRn
ZXQ6OnNldEZyYW1lUmVjdChyZWN0KTsKKworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOworCisj
aWYgT1MoV0lORE9XUykKKyAgICAvLyBPbiBXaW5kb3dzIGFsd2F5cyBjYWxsIHBsdWdpbiB0byBj
aGFuZ2UgZ2VvbWV0cnkuCisgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOworI2VsaWYgZGVmaW5l
ZChYUF9VTklYKQorICAgIC8vIE9uIFVuaXgsIG11bHRpcGxlIGNhbGxzIHRvIHNldE5QV2luZG93
KCkgaW4gd2luZG93ZWQgbW9kZSBjYXVzZXMgRmxhc2ggdG8gY3Jhc2gKKyAgICBpZiAobV9tb2Rl
ID09IE5QX0ZVTEwgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KHJl
Y3QpOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZnJhbWVSZWN0c0NoYW5nZWQoKQor
eworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmNsaXBS
ZWN0Q2hhbmdlZCgpCit7CisgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4g
fHwgbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQcm90ZWN0IHRoZSBw
bHVnLWluIGZyb20gZGVsZXRpb24gd2hpbGUgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50LgorICAgIFJl
ZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KHRoaXMpOworCisgICAgaWYgKGV2ZW50LT5pc01vdXNl
RXZlbnQoKSkKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50
Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAg
ICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50
KSk7CisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZXdoZWVsRXZlbnQpCisgICAgICAgIGhhbmRsZVdoZWVsRXZlbnQoc3RhdGljX2Nhc3Q8
V2hlZWxFdmVudCo+KGV2ZW50KSk7CisjZW5kaWYKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2ZW50KQorICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aGUgcGx1Zy1pbiBoYXMgaGFuZGxl
ZCBtb3VzZWRvd24gZXZlbnQgYnkgZGlzcGxheWluZyBhIGNvbnRleHQgbWVudSwgc28gd2UgbmV2
ZXIgd2FudCBXZWJLaXQgdG8gc2hvdyBhIGRlZmF1bHQgb25lLgorI2lmIGRlZmluZWQoWFBfVU5J
WCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNvdXRFdmVudCkKKyAgICAgICAgaGFuZGxlRm9jdXNP
dXRFdmVudCgpOworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZv
Y3VzaW5FdmVudCkKKyAgICAgICAgaGFuZGxlRm9jdXNJbkV2ZW50KCk7CisjZW5kaWYKK30KKwor
dm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlhbGl6ZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlm
ICghbV9wbHVnaW4pIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nh
bk5vdEZpbmRQbHVnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9HKFBsdWdp
bnMsICJQbHVnaW5WaWV3Ojppbml0KCk6IEluaXRpYWxpemluZyBwbHVnLWluICclcyciLCBtX3Bs
dWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgp
KSB7CisgICAgICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0
dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFz
dGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5T
dGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9z
dGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK2Jvb2wgUGx1Z2lu
Vmlldzo6c3RhcnRPckFkZFRvVW5zdGFydGVkTGlzdCgpCit7CisgICAgaWYgKCFtX3BhcmVudEZy
YW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIG9ubHkgZGVs
YXkgc3RhcnRpbmcgdGhlIHBsdWctaW4gaWYgd2UncmUgZ29pbmcgdG8ga2ljayBvZmYgdGhlIGxv
YWQKKyAgICAvLyBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgdGhlIGxvYWRlciB3aWxsIHRyeSB0byBk
ZWxpdmVyIGRhdGEgYmVmb3JlIHdlJ3ZlCisgICAgLy8gc3RhcnRlZCB0aGUgcGx1Zy1pbi4KKyAg
ICBpZiAoIW1fbG9hZE1hbnVhbGx5ICYmICFtX3BhcmVudEZyYW1lLT5wYWdlKCktPmNhblN0YXJ0
TWVkaWEoKSkgeworICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5hZGRNZWRpYUNh
blN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1faXNXYWl0aW5nVG9TdGFydCA9IHRydWU7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBzdGFydCgpOworfQor
Citib29sIFBsdWdpblZpZXc6OnN0YXJ0KCkKK3sKKyAgICBpZiAobV9pc1N0YXJ0ZWQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNXYWl0aW5nVG9TdGFydCA9IGZhbHNlOworCisg
ICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkucmVnaXN0ZXJQbHVnaW4o
bV9pbnN0YW5jZSk7CisKKyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVChtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIHsKKyAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG5wRXJy
ID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS51
dGY4KCkuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5h
bWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7CisgICAgICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcoMCk7CisgICAgfQorCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05P
X0VSUk9SKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdp
bjsKKyAgICAgICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdp
c3RlclBsdWdpbihtX2luc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgpICYmICFt
X2xvYWRNYW51YWxseSkgeworICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVl
c3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAg
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7
CisgICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1fdXJs
KTsKKyAgICAgICAgbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7CisgICAgfQorCisg
ICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7CisKKyAgICBpZiAo
IXBsYXRmb3JtU3RhcnQoKSkKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RM
b2FkUGx1Z2luOworCisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6bWVkaWFDYW5TdGFydCgpCit7CisgICAgQVNTRVJUKCFtX2lzU3Rh
cnRlZCk7CisgICAgaWYgKCFzdGFydCgpKQorICAgICAgICBwYXJlbnRGcmFtZSgpLT5sb2FkZXIo
KS5jbGllbnQoKS5kaXNwYXRjaERpZEZhaWxUb1N0YXJ0UGx1Z2luKHRoaXMpOworfQorCitQbHVn
aW5WaWV3Ojp+UGx1Z2luVmlldygpCit7CisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3Ojp+
UGx1Z2luVmlldygpIik7CisKKyAgICBBU1NFUlQoIW1fbGlmZVN1cHBvcnRUaW1lci5pc0FjdGl2
ZSgpKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBwbHVnLWluLCB3ZSdsbCBy
ZXR1cm4gZWFybHkgaW4gb3VyIGNvbnN0cnVjdG9yLCBhbmQKKyAgICAvLyBtX2luc3RhbmNlIHdp
bGwgYmUgMC4KKyAgICBpZiAobV9pbnN0YW5jZSkKKyAgICAgICAgaW5zdGFuY2VNYXAoKS5yZW1v
dmUobV9pbnN0YW5jZSk7CisKKyAgICBpZiAobV9pc1dhaXRpbmdUb1N0YXJ0KQorICAgICAgICBt
X3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhp
cyk7CisKKyAgICBzdG9wKCk7CisKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbU5hbWVzLCBt
X3BhcmFtQ291bnQpOworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtVmFsdWVzLCBtX3BhcmFt
Q291bnQpOworCisgICAgcGxhdGZvcm1EZXN0cm95KCk7CisKKyAgICBtX3BhcmVudEZyYW1lLT5z
Y3JpcHQoKS5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAgIGlmICht
X3BsdWdpbiAmJiAhKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRV
bmxvYWRQbHVnaW4pKSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnN0b3AoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c3RvcCgpOiBTdG9wcGluZyBwbHVn
LWluICclcyciLCBtX3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgSGFzaFNl
dDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7CisgICAgSGFzaFNl
dDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1zLmVuZCgpOwor
ICAgIGZvciAoSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBpdCA9IHN0
cmVhbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5zdG9wKCk7
CisgICAgICAgIGRpc2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0KKworICAgIEFT
U0VSVChtX3N0cmVhbXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVkID0gZmFsc2U7CisK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaWYg
ZGVmaW5lZChYUF9XSU4pICYmICFQTEFURk9STShHVEspCisgICAgLy8gVW5zdWJjbGFzcyB0aGUg
d2luZG93CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBXTkRQUk9DIGN1cnJlbnRX
bmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCBHV0xQX1dORFBST0MpOworCisgICAgICAgIGlmIChjdXJyZW50V25kUHJvYyA9PSBQbHVnaW5W
aWV3V25kUHJvYykKKyAgICAgICAgICAgIFNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpbV9wbHVnaW5XbmRQcm9jKTsKKyAgICB9
CisjZW5kaWYgLy8gIWRlZmluZWQoWFBfV0lOKSB8fCBQTEFURk9STShHVEspCisjZW5kaWYgLy8g
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisKKyNpZiAhZGVmaW5lZChYUF9NQUNPU1gpCisg
ICAgLy8gQ2xlYXIgdGhlIHdpbmRvdworICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKworICAg
IGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93ICYmICFtX3BsdWdpbi0+cXVp
cmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJv
eSkpIHsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Cisg
ICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcoMCk7CisgICAgfQorCisjaWZkZWYgWFBfVU5JWAorICAgIGRlbGV0ZSBzdGF0aWNfY2Fz
dDxOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0Kj4obV9ucFdpbmRvdy53c19pbmZvKTsKKyAgICBt
X25wV2luZG93LndzX2luZm8gPSAwOworI2VuZGlmCisKKyNlbmRpZiAvLyAhZGVmaW5lZChYUF9N
QUNPU1gpCisKKyAgICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS51bnJl
Z2lzdGVyUGx1Z2luKG1faW5zdGFuY2UpOworCisgICAgTlBTYXZlZERhdGEqIHNhdmVkRGF0YSA9
IDA7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgJnNhdmVkRGF0YSk7CisgICAgc2V0Q2FsbGlu
Z1BsdWdpbihmYWxzZSk7CisgICAgTE9HX05QRVJST1IobnBFcnIpOworICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgaWYgKHNhdmVkRGF0YSkgeworICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBzYXZl
IHRoaXMgZGF0YSBpbnN0ZWFkIG9mIGp1c3QgZGlzY2FyZGluZyBpdAorICAgICAgICBpZiAoc2F2
ZWREYXRhLT5idWYpCisgICAgICAgICAgICBOUE5fTWVtRnJlZShzYXZlZERhdGEtPmJ1Zik7Cisg
ICAgICAgIE5QTl9NZW1GcmVlKHNhdmVkRGF0YSk7CisgICAgfQorI2VuZGlmCisKKyAgICBtX2lu
c3RhbmNlLT5wZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcoUGx1Z2luVmlldyogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3
ID0gcGx1Z2luVmlldzsKK30KKworUGx1Z2luVmlldyogUGx1Z2luVmlldzo6Y3VycmVudFBsdWdp
blZpZXcoKQoreworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMg
Y2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5n
IGNzdHIgPSBzdHIudXRmOCgpOworICAgIGNvbnN0IHNpemVfdCBjc3RyTGVuZ3RoID0gY3N0ci5s
ZW5ndGgoKTsKKyAgICBjaGFyKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYXN0
TWFsbG9jKGNzdHJMZW5ndGggKyAxKSk7CisKKyAgICBtZW1jcHkocmVzdWx0LCBjc3RyLmRhdGEo
KSwgY3N0ckxlbmd0aCk7CisgICAgcmVzdWx0W2NzdHJMZW5ndGhdID0gJ1wwJzsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QoUGx1Z2lu
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBkb24ndCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlz
IG5vIGxvbmdlciBwYXJ0IG9mIGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKKyAgICAvLyBkaXNw
bGF5ZWQgdW5sZXNzIHRoZSBsb2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdp
bi4KKyAgICBjb25zdCBTdHJpbmcmIHRhcmdldEZyYW1lTmFtZSA9IHJlcXVlc3QtPmZyYW1lTG9h
ZFJlcXVlc3QoKS5mcmFtZU5hbWUoKTsKKyAgICBpZiAobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCku
ZG9jdW1lbnRMb2FkZXIoKSAhPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVu
dExvYWRlcigpICYmICh0YXJnZXRGcmFtZU5hbWUuaXNOdWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+
dHJlZSgpLmZpbmQodGFyZ2V0RnJhbWVOYW1lKSAhPSBtX3BhcmVudEZyYW1lKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0
KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0
U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgZ2VzdHVyZUluZGljYXRvcihyZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpID8gRGVm
aW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKKworICAgIGlmIChqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICAvLyBpZiB0aGlz
IGlzIG5vdCBhIHRhcmdldGVkIHJlcXVlc3QsIGNyZWF0ZSBhIHN0cmVhbSBmb3IgaXQuIG90aGVy
d2lzZSwKKyAgICAgICAgLy8ganVzdCBwYXNzIGl0IG9mZiB0byB0aGUgbG9hZGVyCisgICAgICAg
IGlmICh0YXJnZXRGcmFtZU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UGx1
Z2luU3RyZWFtPiBzdHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBtX3BhcmVudEZy
YW1lLmdldCgpLCByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCks
IHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpLCBwbHVn
aW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9wbHVnaW4tPnF1aXJrcygpKTsKKyAg
ICAgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgICAgIHN0cmVhbS0+c3Rh
cnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgZnJh
bWUgaXMgb3VyIGZyYW1lLCB3ZSBjb3VsZCBkZXN0cm95IHRoZQorICAgICAgICAgICAgLy8gUGx1
Z2luVmlldywgc28gd2UgcHJvdGVjdCBpdC4gPHJkYXI6Ly9wcm9ibGVtLzY5OTEyNTE+CisgICAg
ICAgICAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICAgICAg
RnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3QobV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpKTsKKyAgICAgICAgICAgIGZy
YW1lUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0RnJhbWVOYW1lKTsKKyAgICAgICAgICAgIGZy
YW1lUmVxdWVzdC5zZXRTaG91bGRDaGVja05ld1dpbmRvd1BvbGljeSh0cnVlKTsKKyAgICAgICAg
ICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmxvYWQoZnJhbWVSZXF1ZXN0KTsKKworICAgICAg
ICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBz
ZW50IHdoZW4gdGhlIGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgICAgICBp
ZiAocmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKKyAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICAg
ICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVx
dWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3Rp
ZnlEYXRhKCkpOworICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAg
ICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJn
ZXRlZCBKYXZhU2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRo
YXQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJl
ZW4gbWFkZSBzdXJlIGluIDo6bG9hZC4KKyAgICBBU1NFUlQodGFyZ2V0RnJhbWVOYW1lLmlzRW1w
dHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUpID09IG1f
cGFyZW50RnJhbWUpOworICAgIAorICAgIC8vIEV4ZWN1dGluZyBhIHNjcmlwdCBjYW4gY2F1c2Ug
dGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlc3Ryb3llZCwgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0
byBpdC4KKyAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdG9yKHRoaXMpOworICAgIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmV4ZWN1
dGVTY3JpcHQoanNTdHJpbmcsIHJlcXVlc3QtPnNob3VsZEFsbG93UG9wdXBzKCkpOworCisgICAg
aWYgKHRhcmdldEZyYW1lTmFtZS5pc051bGwoKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0U3Ry
aW5nOworCisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1fcGFyZW50RnJh
bWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwor
ICAgICAgICBDU3RyaW5nIGNzdHI7CisgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RyaW5nKHNjcmlw
dFN0YXRlLCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAgY3N0ciA9IHJlc3VsdFN0cmluZy51
dGY4KCk7CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gc3RyZWFtID0gUGx1Z2luU3Ry
ZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVzdC0+ZnJhbWVMb2Fk
UmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCks
IHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNl
KCksIG1fcGx1Z2luLT5xdWlya3MoKSk7CisgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsK
KyAgICAgICAgc3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXF1ZXN0VVJMLCBjc3RyKTsK
KyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQoKQoreworICAg
IEFTU0VSVCghbV9yZXF1ZXN0cy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9pc0phdmFTY3Jp
cHRQYXVzZWQpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+IHJlcXVlc3Qg
PSBXVEY6Om1vdmUobV9yZXF1ZXN0c1swXSk7CisgICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7Cisg
ICAgCisgICAgLy8gU2NoZWR1bGUgYSBuZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3Jt
UmVxdWVzdCBzaW5jZSB0aGUgY2FsbCB0bworICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBjYXVz
ZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVsZXRlZC4KKyAgICBpZiAoIW1fcmVxdWVzdHMuaXNF
bXB0eSgpKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBw
ZXJmb3JtUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzY2hl
ZHVsZVJlcXVlc3Qoc3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+IHJlcXVlc3QpCit7Cisg
ICAgbV9yZXF1ZXN0cy5hcHBlbmQoV1RGOjptb3ZlKHJlcXVlc3QpKTsKKworICAgIGlmICghbV9p
c0phdmFTY3JpcHRQYXVzZWQpCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
IGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0
YSkKK3sKKyAgICBBU1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRw
TWV0aG9kKCkgPT0gIkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5o
dHRwTWV0aG9kKCkgPT0gIlBPU1QiKTsKKworICAgIFVSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIAorICAgIGlmICh1cmwuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9VUkw7CisKKyAgICAvLyBEb24ndCBhbGxvdyBy
ZXF1ZXN0cyB0byBiZSBtYWRlIHdoZW4gdGhlIGRvY3VtZW50IGxvYWRlciBpcyBzdG9wcGluZyBh
bGwgbG9hZGVycy4KKyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPmlz
U3RvcHBpbmcoKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBj
b25zdCBTdHJpbmcmIHRhcmdldEZyYW1lTmFtZSA9IGZyYW1lTG9hZFJlcXVlc3QuZnJhbWVOYW1l
KCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVy
bCk7CisKKyAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIC8vIFJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxs
YSBkb2VzLgorICAgICAgICBpZiAoIW1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNhbkV4ZWN1dGVT
Y3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9HRU5FUklDX0VSUk9SOworCisgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5
IGFsbG93IEpTIHJlcXVlc3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMg
dGhlIHBsdWctaW4uCisgICAgICAgIGlmICghdGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpICYmIG1f
cGFyZW50RnJhbWUtPnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJlbnRGcmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgIH0gZWxzZSBp
ZiAoIW1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkRpc3Bs
YXkodXJsKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBzY2hl
ZHVsZVJlcXVlc3Qoc3RkOjptYWtlX3VuaXF1ZTxQbHVnaW5SZXF1ZXN0PihmcmFtZUxvYWRSZXF1
ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBhcmVQb3B1cHNBbGxvd2VkKCkpKTsK
KworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworc3RhdGljIFVSTCBtYWtlVVJMKGNv
bnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7CisgICAg
U3RyaW5nIHVybFN0cmluZyA9IHJlbGF0aXZlVVJMU3RyaW5nOworCisgICAgLy8gU3RyaXAgcmV0
dXJuIGNoYXJhY3RlcnMuCisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXG4nLCAi
Iik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXHInLCAiIik7CisKKyAgICBy
ZXR1cm4gVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6
Z2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBu
b3RpZnlEYXRhKQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIGZyYW1lTG9h
ZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50
KCktPmJhc2VVUkwoKSwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0
LCB0cnVlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRVUkwoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVz
dCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCkpOworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIp
OworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwo
bV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKKworICAgIHJldHVy
biBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30KKworTlBFcnJvciBQbHVnaW5W
aWV3Ojpwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1
aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEpCit7CisgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxl
LCBub3RpZnlEYXRhLCB0cnVlLCB0cnVlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpwb3N0
VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNv
bnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7CisgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25s
eSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2lu
ZyBhIGZpbGUuCisgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBm
aWxlLCAwLCBmYWxzZSwgZmlsZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6bmV3U3RyZWFt
KE5QTUlNRVR5cGUsIGNvbnN0IGNoYXIqIC8qIHRhcmdldCAqLywgTlBTdHJlYW0qKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7Cit9CisKK2ludDMyX3QgUGx1Z2luVmlldzo6d3JpdGUoTlBTdHJlYW0q
LCBpbnQzMl90IC8qIGxlbiAqLywgdm9pZCogLyogYnVmZmVyICovKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJy
b3IgUGx1Z2luVmlldzo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiBy
ZWFzb24pCit7CisgICAgaWYgKCFzdHJlYW0gfHwgUGx1Z2luU3RyZWFtOjpvd25lckZvclN0cmVh
bShzdHJlYW0pICE9IG1faW5zdGFuY2UpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX0lO
U1RBTkNFX0VSUk9SOworCisgICAgUGx1Z2luU3RyZWFtKiBicm93c2VyU3RyZWFtID0gc3RhdGlj
X2Nhc3Q8UGx1Z2luU3RyZWFtKj4oc3RyZWFtLT5uZGF0YSk7CisgICAgYnJvd3NlclN0cmVhbS0+
Y2FuY2VsQW5kRGVzdHJveVN0cmVhbShyZWFzb24pOworCisgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOworfQorCit2b2lkIFBsdWdpblZpZXc6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQor
eworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBw
YWdlLT5jaHJvbWUoKS5zZXRTdGF0dXNiYXJUZXh0KG1fcGFyZW50RnJhbWUuZ2V0KCksIFN0cmlu
Zzo6ZnJvbVVURjgobWVzc2FnZSkpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVl
KE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBMT0coUGx1Z2lucywg
IlBsdWdpblZpZXc6OnNldFZhbHVlKCVzKTogIiwgcHJldHR5TmFtZUZvck5QUFZhcmlhYmxlKHZh
cmlhYmxlLCB2YWx1ZSkuZGF0YSgpKTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBj
YXNlIE5QUFZwbHVnaW5XaW5kb3dCb29sOgorICAgICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgIGNhc2UgTlBQVnBsdWdpblRyYW5z
cGFyZW50Qm9vbDoKKyAgICAgICAgbV9pc1RyYW5zcGFyZW50ID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICBjYXNlIE5Q
UFZwbHVnaW5EcmF3aW5nTW9kZWw6IHsKKyAgICAgICAgLy8gQ2FuIG9ubHkgc2V0IGRyYXdpbmcg
bW9kZWwgaW5zaWRlIE5QUF9OZXcoKQorICAgICAgICBpZiAodGhpcyAhPSBjdXJyZW50UGx1Z2lu
VmlldygpKQorICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAg
ICBOUERyYXdpbmdNb2RlbCBuZXdEcmF3aW5nTW9kZWwgPSBOUERyYXdpbmdNb2RlbCh1aW50cHRy
X3QodmFsdWUpKTsKKyAgICAgICAgc3dpdGNoIChuZXdEcmF3aW5nTW9kZWwpIHsKKyAgICAgICAg
Y2FzZSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljczoKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb246Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBhc2tlZCBm
b3IgdW5zdXBwb3J0ZWQgZHJhd2luZyBtb2RlbDogJXMiLAorICAgICAgICAgICAgICAgICAgICBw
cmV0dHlOYW1lRm9yRHJhd2luZ01vZGVsKG5ld0RyYXdpbmdNb2RlbCkpOworICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYXNl
IE5QUFZwbHVnaW5FdmVudE1vZGVsOiB7CisgICAgICAgIC8vIENhbiBvbmx5IHNldCBldmVudCBt
b2RlbCBpbnNpZGUgTlBQX05ldygpCisgICAgICAgIGlmICh0aGlzICE9IGN1cnJlbnRQbHVnaW5W
aWV3KCkpCisgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAg
IE5QRXZlbnRNb2RlbCBuZXdFdmVudE1vZGVsID0gTlBFdmVudE1vZGVsKHVpbnRwdHJfdCh2YWx1
ZSkpOworICAgICAgICBzd2l0Y2ggKG5ld0V2ZW50TW9kZWwpIHsKKyAgICAgICAgY2FzZSBOUEV2
ZW50TW9kZWxDb2NvYToKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luIGFza2VkIGZvciB1
bnN1cHBvcnRlZCBldmVudCBtb2RlbDogJXMiLAorICAgICAgICAgICAgICAgICAgICBwcmV0dHlO
YW1lRm9yRXZlbnRNb2RlbChuZXdFdmVudE1vZGVsKSk7CisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBkZWZpbmVkKFhQ
X01BQ09TWCkKKworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQbHVnaW5W
aWV3OjppbnZhbGlkYXRlVGltZXJGaXJlZCgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1faW52YWxpZFJlY3RzLnNpemUoKTsgaSsrKQorICAgICAgICBpbnZhbGlkYXRlUmVjdCht
X2ludmFsaWRSZWN0c1tpXSk7CisgICAgbV9pbnZhbGlkUmVjdHMuY2xlYXIoKTsKK30KKworCit2
b2lkIFBsdWdpblZpZXc6OnB1c2hQb3B1cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0ZSkKK3sKKyAg
ICBtX3BvcHVwU3RhdGVTdGFjay5hcHBlbmQoc3RhdGUpOworfQorIAordm9pZCBQbHVnaW5WaWV3
Ojpwb3BQb3B1cHNFbmFibGVkU3RhdGUoKQoreworICAgIG1fcG9wdXBTdGF0ZVN0YWNrLnJlbW92
ZUxhc3QoKTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjphcmVQb3B1cHNBbGxvd2VkKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcG9wdXBTdGF0ZVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG1fcG9wdXBTdGF0ZVN0YWNrLmxhc3QoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpzZXRKYXZhU2NyaXB0UGF1c2VkKGJvb2wgcGF1c2VkKQoreworICAgIGlm
IChtX2lzSmF2YVNjcmlwdFBhdXNlZCA9PSBwYXVzZWQpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2lzSmF2YVNjcmlwdFBhdXNlZCA9IHBhdXNlZDsKKworICAgIGlmIChtX2lzSmF2YVNjcmlwdFBh
dXNlZCkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAgIGVsc2UgaWYgKCFtX3Jl
cXVlc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDAp
OworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitOUE9iamVjdCogUGx1Z2lu
Vmlldzo6bnBPYmplY3QoKQoreworICAgIE5QT2JqZWN0KiBvYmplY3QgPSAwOworCisgICAgaWYg
KCFtX2lzU3RhcnRlZCB8fCAhbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5n
ZXR2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBPbiBXaW5kb3dzLCBjYWxsaW5n
IEphdmEncyBOUE5fR2V0VmFsdWUgY2FuIGFsbG93IHRoZSBtZXNzYWdlIGxvb3AgdG8KKyAgICAv
LyBydW4sIGFsbG93aW5nIGxvYWRpbmcgdG8gdGFrZSBwbGFjZSBvciBKYXZhU2NyaXB0IHRvIHJ1
bi4gUHJvdGVjdCB0aGUKKyAgICAvLyBQbHVnaW5WaWV3IGZyb20gZGVzdHJ1Y3Rpb24uIDxyZGFy
Oi8vcHJvYmxlbS82OTc4ODA0PgorICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KHRoaXMp
OworCisgICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAm
b2JqZWN0KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKworICAgIGlmIChucEVyciAh
PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gb2JqZWN0
OworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IFBsdWdp
blZpZXc6OmJpbmRpbmdJbnN0YW5jZSgpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgTlBPYmplY3QqIG9iamVjdCA9IG5wT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3Qp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGhhc09uZVJlZigpKSB7CisgICAgICAgIC8v
IFRoZSByZW5kZXJlciBmb3IgdGhlIFBsdWdpblZpZXcgd2FzIGRlc3Ryb3llZCBkdXJpbmcgdGhl
IGFib3ZlIGNhbGwsIGFuZAorICAgICAgICAvLyB0aGUgUGx1Z2luVmlldyB3aWxsIGJlIGRlc3Ry
b3llZCB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgc28gd2UKKyAgICAgICAgLy8gcmV0dXJu
IG51bGwuCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxKU0M6OkJpbmRp
bmdzOjpSb290T2JqZWN0PiByb290ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY3JlYXRlUm9v
dE9iamVjdCh0aGlzKTsKKyAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGluc3Rh
bmNlID0gSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUob2JqZWN0LCByb290LnJlbGVh
c2UoKSk7CisKKyAgICBfTlBOX1JlbGVhc2VPYmplY3Qob2JqZWN0KTsKKworICAgIHJldHVybiBp
bnN0YW5jZS5yZWxlYXNlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW0qIHN0cmVhbSkKK3sK
KyAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbSkpOworCisgICAgbV9zdHJlYW1z
LnJlbW92ZShzdHJlYW0pOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmFtZXRlcnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bVZhbHVlcykKK3sKKyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMu
c2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1
bnNpZ25lZCBwYXJhbUNvdW50ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9w
YXJhbVZhbHVlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihj
aGFyKikgKiBzaXplKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CisgICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtS
ZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UocGFyYW1OYW1l
c1tpXSwgIndpbmRvd2xlc3N2aWRlbyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgaWYgKHBhcmFtTmFtZXNbaV0gPT0gInBsdWdpbnNwYWdlIikKKyAgICAgICAgICAgIG1fcGx1
Z2luc1BhZ2UgPSBwYXJhbVZhbHVlc1tpXTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1D
b3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFt
VmFsdWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisK
KyAgICAgICAgcGFyYW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFt
Q291bnQ7Cit9CisKK1BsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBj
b25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4sIEhUTUxQbHVnSW5FbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BhcmVudEZyYW1lKHBhcmVudEZy
YW1lKQorICAgICwgbV9wbHVnaW4ocGx1Z2luKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisg
ICAgLCBtX2lzU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fc3RhdHVz
KFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKCp0
aGlzLCAmUGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAgLCBtX2ludmFsaWRhdGVU
aW1lcigqdGhpcywgJlBsdWdpblZpZXc6OmludmFsaWRhdGVUaW1lckZpcmVkKQorICAgICwgbV9w
b3BQb3B1cHNTdGF0ZVRpbWVyKCp0aGlzLCAmUGx1Z2luVmlldzo6cG9wUG9wdXBzU3RhdGVUaW1l
ckZpcmVkKQorICAgICwgbV9saWZlU3VwcG9ydFRpbWVyKCp0aGlzLCAmUGx1Z2luVmlldzo6bGlm
ZVN1cHBvcnRUaW1lckZpcmVkKQorICAgICwgbV9tb2RlKGxvYWRNYW51YWxseSA/IE5QX0ZVTEwg
OiBOUF9FTUJFRCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZhbHVlcygw
KQorICAgICwgbV9taW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIG1faW5zdGFuY2UoMCkKKyNpZiBk
ZWZpbmVkKFhQX01BQ09TWCkKKyAgICAsIG1faXNXaW5kb3dlZChmYWxzZSkKKyAgICAsIG1fdXBk
YXRlZENvY29hVGV4dElucHV0UmVxdWVzdGVkKGZhbHNlKQorICAgICwgbV9rZXlEb3duU2VudChm
YWxzZSkKKyAgICAsIG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyKDApCisjZWxzZQorICAgICwgbV9p
c1dpbmRvd2VkKHRydWUpCisjZW5kaWYKKyAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKKyAg
ICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9pc1dhaXRpbmdUb1N0YXJ0KGZh
bHNlKQorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFsc2UpCisj
ZW5kaWYKKyNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAg
ICAsIG1fcGx1Z2luV25kUHJvYygwKQorICAgICwgbV9sYXN0TWVzc2FnZSgwKQorICAgICwgbV9p
c0NhbGxpbmdQbHVnaW5XbmRQcm9jKGZhbHNlKQorICAgICwgbV93bVByaW50SERDKDApCisgICAg
LCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0KGZhbHNlKQorI2VuZGlmCisjaWYgUExBVEZPUk0o
RUZMKQorICAgICwgbV93aW5kb3coMCkKKyNlbmRpZgorI2lmIGRlZmluZWQoWFBfTUFDT1NYKQor
ICAgICwgbV9jb250ZXh0UmVmKDApCisjZW5kaWYKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFu
Z2UodHJ1ZSkKKyAgICAsIG1fZHJhd2FibGUoMCkKKyAgICAsIG1fdmlzdWFsKDApCisgICAgLCBt
X2NvbG9ybWFwKDApCisgICAgLCBtX3BsdWdpbkRpc3BsYXkoMCkKKyNlbmRpZgorICAgICwgbV9s
b2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQorICAgICwgbV9tYW51YWxTdHJlYW0oMCkKKyAgICAs
IG1faXNKYXZhU2NyaXB0UGF1c2VkKGZhbHNlKQorICAgICwgbV9oYXZlQ2FsbGVkU2V0V2luZG93
KGZhbHNlKQoreworICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9pbnN0YW5jZSA9ICZtX2luc3RhbmNlU3RydWN0OworICAgIG1faW5zdGFuY2UtPm5kYXRhID0g
dGhpczsKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7CisKKyAgICBpbnN0YW5jZU1hcCgpLmFk
ZChtX2luc3RhbmNlLCB0aGlzKTsKKworICAgIHNldFBhcmFtZXRlcnMocGFyYW1OYW1lcywgcGFy
YW1WYWx1ZXMpOworCisgICAgbWVtc2V0KCZtX25wV2luZG93LCAwLCBzaXplb2YobV9ucFdpbmRv
dykpOworI2lmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIG1lbXNldCgmbV9ucENnQ29udGV4dCwg
MCwgc2l6ZW9mKG1fbnBDZ0NvbnRleHQpKTsKKyNlbmRpZgorCisgICAgcmVzaXplKHNpemUpOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OmZvY3VzUGx1Z2luRWxlbWVudCgpCit7CisgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG1fZWxlbWVudCwgbV9wYXJlbnRGcmFtZSk7Cisg
ICAgZWxzZQorICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkRWxl
bWVudChtX2VsZW1lbnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAobV9zdGF0dXMg
IT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobV9sb2FkTWFudWFsbHkpOworICAgIEFTU0VSVCghbV9tYW51YWxTdHJlYW0pOwor
CisgICAgbV9tYW51YWxTdHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBtX3BhcmVu
dEZyYW1lLmdldCgpLCBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRl
cigpLT5yZXF1ZXN0KCksIGZhbHNlLCAwLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFu
Y2UoKSwgbV9wbHVnaW4tPnF1aXJrcygpKTsKKyAgICBtX21hbnVhbFN0cmVhbS0+c2V0TG9hZE1h
bnVhbGx5KHRydWUpOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVSZXNwb25zZSgw
LCByZXNwb25zZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZGlkUmVjZWl2ZURhdGEoY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9s
b2FkTWFudWFsbHkpOworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisgICAgCisgICAgbV9t
YW51YWxTdHJlYW0tPmRpZFJlY2VpdmVEYXRhKDAsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgaWYgKG1fc3RhdHVzICE9IFBs
dWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKG1fbG9hZE1hbnVhbGx5KTsKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAg
bV9tYW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAobV9zdGF0
dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQobV9sb2FkTWFudWFsbHkpOworICAgIAorICAgIGlmIChtX21hbnVhbFN0cmVh
bSkKKyAgICAgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OnNldENhbGxpbmdQbHVnaW4oYm9vbCBiKSBjb25zdAoreworICAgIGlmICgh
bV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrSGFzTW9kYWxNZXNzYWdlTG9v
cCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChiKQorICAgICAgICArK3NfY2FsbGluZ1Bs
dWdpbjsKKyAgICBlbHNlCisgICAgICAgIC0tc19jYWxsaW5nUGx1Z2luOworCisgICAgQVNTRVJU
KHNfY2FsbGluZ1BsdWdpbiA+PSAwKTsKK30KKworYm9vbCBQbHVnaW5WaWV3Ojppc0NhbGxpbmdQ
bHVnaW4oKQoreworICAgIHJldHVybiBzX2NhbGxpbmdQbHVnaW4gPiAwOworfQorCitQYXNzUmVm
UHRyPFBsdWdpblZpZXc+IFBsdWdpblZpZXc6OmNyZWF0ZShGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmIHNpemUsIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBVUkwm
IHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFs
bHkpCit7CisgICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZvciB0aGlzIE1JTUUg
dHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKKyAgICAvLyBhIHBsdWdpbiBieSB0aGUg
ZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBwYXNzIGEgbXV0YWJs
ZSBTdHJpbmcKKyAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAgUGx1Z2lu
UGFja2FnZSogcGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+Zmlu
ZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7CisKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5k
LCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIGlm
ICghcGx1Z2luICYmIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2go
KSkgeworICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICAgICAgcGx1Z2luID0g
UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmwsIG1pbWVU
eXBlQ29weSk7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5WaWV3KHBh
cmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1W
YWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1hbnVhbGx5KSk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6ZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sKKyAg
ICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7CisK
KyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFy
dHNXaXRoQmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVy
biBidWZmZXIuc2l6ZSgpID4gMCAmJiBidWZmZXJbMF0gPT0gJ1xuJzsKK30KKworc3RhdGljIGlu
bGluZSBpbnQgbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYg
YnVmZmVyKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aCAtIDQ7IGkrKykgeworICAgICAgICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0
LiBJdCBzZW5kcyAiXG5cbiIuCisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVz
W2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICAKKyAg
ICAgICAgLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlm
IGl0IGlzIHRoZSBmaXJzdCBsaW5lLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBi
eXRlc1tpICsgMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAg
aWYgKGkgPT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRGly
ZWN0b3IuIEl0IHNlbmRzICJcclxuXG4iICgzODgwMzg3KS4KKyAgICAgICAgICAgICAgICByZXR1
cm4gaSArIDE7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVz
W2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIEZsYXNoLiBJ
dCBzZW5kcyAiXHJcblxyXG4iICgzNzU4MTEzKS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSAr
IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxp
bmUgY29uc3QgY2hhciogZmluZEVPTChjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uIEVPTCBpcyBk
ZWZpbmVkIGFzCisgICAgLy8gYSBDUkxGIHBhaXIuIFVuZm9ydHVuYXRlbHksIHNvbWUgc2VydmVy
cyB3aWxsIHVzZSBMRgorICAgIC8vIGluc3RlYWQuIFdvcnNlIHlldCwgc29tZSBzZXJ2ZXJzIHdp
bGwgdXNlIGEgY29tYmluYXRpb24KKyAgICAvLyBvZiBib3RoIChlLmcuIDxoZWFkZXI+Q1JMRkxG
PGJvZHk+KSwgc28gZmluZEVPTCBuZWVkcworICAgIC8vIHRvIGJlIG1vcmUgZm9yZ2l2aW5nLiBJ
dCB3aWxsIG5vdyBhY2NlcHQgQ1JMRiwgTEYgb3IKKyAgICAvLyBDUi4KKyAgICAvLworICAgIC8v
IEl0IHJldHVybnMgTlVMTCBpZiBFT0xGIGlzIG5vdCBmb3VuZCBvciBpdCB3aWxsIHJldHVybgor
ICAgIC8vIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVyLgorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYnl0
ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIGlm
IChieXRlc1tpXSA9PSAnXHInKSB7CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgc3Bh
bm5pbmcgYnVmZmVyIGJvdW5kcworICAgICAgICAgICAgLy8gKENSTEYgaXMgYWNyb3NzIHJlYWRz
KS4gSWYgc28sIHdhaXQgZm9yCisgICAgICAgICAgICAvLyBuZXh0IHJlYWQuCisgICAgICAgICAg
ICBpZiAoaSArIDEgPT0gbGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5h
bWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9
IHRydWU7CisgICAgU3RyaW5nIHJlc3VsdDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBuYW1lLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgVUNoYXIgYzsKKworICAgICAgICBpZiAo
Y2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykK
KyAgICAgICAgICAgIGMgPSB0b0FTQ0lJVXBwZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UgaWYg
KCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1on
KQorICAgICAgICAgICAgYyA9IHRvQVNDSUlMb3dlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgYyA9IG5hbWVbaV07CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQor
ICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICByZXN1bHQu
YXBwZW5kKGMpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hh
cj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0g
YnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7
CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGlu
ZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3Jl
IGVuZC1vZi1saW5lcworICAgIHdoaWxlICgoZW9sID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkp
IHsKKyAgICAgICAgY29uc3QgY2hhciogbGluZSA9IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxl
bmd0aCA9IGVvbCAtIGJ5dGVzOworICAgICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0
aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wu
CisgICAgICAgIGJ5dGVzID0gZW9sICsgMTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdccicpICYm
ICgqYnl0ZXMgPT0gJ1xuJykpCisgICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZp
bmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5ndGggLT0g
KGJ5dGVzIC0gbGluZSk7CisgICAgICAgIGlmIChsaW5lTGVuZ3RoID09IDApCisgICAgICAgICAg
ICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0
JykgeworICAgICAgICAgICAgLy8gQ29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIK
KyAgICAgICAgICAgIGlmIChsYXN0S2V5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8g
bWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNZXJn
ZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAg
ICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUobGluZSwgbGluZUxlbmd0aCk7CisKKyAgICAgICAg
ICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJyYW5k
IG5ldyBoZWFkZXIKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAgICAgICAg
Zm9yIChjb2xvbiA9IGxpbmU7ICpjb2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBjb2xvbisr
KSB7CisgICAgICAgICAgICAgICAgLy8gZW1wdHkgbG9vcAorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGNvbG9uID09IGVvbCkgCisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhl
YWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0YWxpemVS
RkM4MjJIZWFkZXJGaWVsZE5hbWUoU3RyaW5nKGxpbmUsIGNvbG9uIC0gbGluZSkpOworICAgICAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoY29sb24rKzsg
Y29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqY29sb24g
IT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpCisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IFN0cmluZyhjb2xvbiwgZW9sIC0gY29sb24pOworCisg
ICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9IG9sZFZhbHVlICsgIiwgIiArIHZhbHVlOworCisgICAgICAgICAgICAg
ICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9yIFBs
dWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpCit7CisgICAgaWYg
KCF1cmwgfHwgIWxlbiB8fCAhYnVmKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJB
TTsKKworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3BhcmVudEZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIEhUVFBIZWFkZXJNYXAgaGVh
ZGVyRmllbGRzOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYgKGZpbGUp
IHsKKyAgICAgICAgTlBFcnJvciByZWFkUmVzdWx0ID0gaGFuZGxlUG9zdFJlYWRGaWxlKGJ1ZmZl
ciwgbGVuLCBidWYpOworICAgICAgICBpZihyZWFkUmVzdWx0ICE9IE5QRVJSX05PX0VSUk9SKQor
ICAgICAgICAgICAgcmV0dXJuIHJlYWRSZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVm
ZmVyLnJlc2l6ZShsZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4p
OworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAg
ICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFsbG93SGVh
ZGVycykgeworICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAg
ICAgICAgICBwb3N0RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJz
dEJsYW5rTGluZShidWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7Cisg
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBt
aWRkbGUgb2YgdGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAg
ICAgICAgICAgICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZl
ciwgbG9jYXRpb24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZm
ZXIuc2l6ZSgpIC0gbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1
Z2lucyBsaWtlIHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0
LAorICAgICAgICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhh
dC4gU28gd2Ugd2lsbCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBp
bnN0ZWFkIHRydW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAg
ICAgICAgICAgIFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldChIVFRQSGVh
ZGVyTmFtZTo6Q29udGVudExlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRM
ZW5ndGguaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29u
dGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIGhl
YWRlckZpZWxkcy5yZW1vdmUoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpOworCisgICAg
ICAgICAgICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247CisgICAgICAgICAgICAgICAgcG9zdERh
dGFMZW5ndGggPSBkYXRhTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQ
T1NUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFr
ZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOworICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEhlYWRlckZpZWxkcyhXVEY6
Om1vdmUoaGVhZGVyRmllbGRzKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRlKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0
aCkpOworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisKKyAgICBy
ZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRh
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIWlzVmlzaWJsZSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgaWYgKCFtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKm1fZWxlbWVu
dC0+cmVuZGVyZXIoKSk7CisgICAgCisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OworICAg
IGRpcnR5UmVjdC5tb3ZlKHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBhZGRpbmdM
ZWZ0KCksIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGluZ1RvcCgpKTsKKyAg
ICByZW5kZXJlci5yZXBhaW50UmVjdGFuZ2xlKGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gbnVsbFBsdWdp
bkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxsUGx1Z2luSW1h
Z2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKKworICAgIElu
dFJlY3QgaW1hZ2VSZWN0KGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpLCBudWxsUGx1
Z2luSW1hZ2UtPndpZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0KCkpOworCisgICAgaW50
IHhPZmZzZXQgPSAoZnJhbWVSZWN0KCkud2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAvIDI7
CisgICAgaW50IHlPZmZzZXQgPSAoZnJhbWVSZWN0KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVp
Z2h0KCkpIC8gMjsKKworICAgIGltYWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisg
ICAgaWYgKCFyZWN0LmludGVyc2VjdHMoaW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7
CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG51bGxQbHVnaW5JbWFnZS5nZXQoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81
LjAgKCIKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAgICAgIk1hY2ludG9zaDsgVTsgSW50
ZWwgTWFjIE9TIFg7IgorI2VsaWYgZGVmaW5lZChYUF9XSU4pCisgICAgICAgICJXaW5kb3dzOyBV
OyBXaW5kb3dzIE5UIDUuMTsiCisjZWxpZiBkZWZpbmVkKFhQX1VOSVgpCisvLyBUaGUgR3RrIHBv
cnQgdXNlcyBYMTEgcGx1Z2lucyBpbiBNYWMuCisjaWYgT1MoREFSV0lOKSAmJiBQTEFURk9STShH
VEspCisgICAgIlgxMTsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2Vsc2UKKyAgICAiWDExOyBVOyBM
aW51eCBpNjg2OyIKKyNlbmRpZgorI2VuZGlmCisgICAgICAgICIgZW4tVVM7IHJ2OjEuOC4xKSBH
ZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBD
aHJvbWVVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKCIKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkK
KyAgICAiTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMgT1MgWDsiCisjZWxpZiBkZWZpbmVkKFhQX1dJ
TikKKyAgICAiV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IgorI2VsaWYgZGVmaW5lZChYUF9V
TklYKQorICAgIC8vIFRoZSBHdGsgcG9ydCB1c2VzIFgxMSBwbHVnaW5zIGluIE1hYy4KKyNpZiBP
UyhEQVJXSU4pICYmIFBMQVRGT1JNKEdUSykKKyAgICAiWDExOyBVOyBJbnRlbCBNYWMgT1MgWDsi
CisjZWxzZQorICAgICJYMTE7IFU7IExpbnV4IGk2ODY7IgorI2VuZGlmCisjZW5kaWYKKyAgICAi
IEFwcGxlV2ViS2l0LzUzNC4zNCAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xOS4wLjEwNTUu
MSBTYWZhcmkvNTM0LjM0IjsKKworY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkK
K3sKKyAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNN
b3ppbGxhVXNlckFnZW50KSkKKyAgICAgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7CisgICAg
ZWxzZSBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNDaHJv
bWVVc2VyQWdlbnQpKQorICAgICAgICByZXR1cm4gQ2hyb21lVXNlckFnZW50OworICAgIGlmICht
X3VzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgbV91c2VyQWdlbnQgPSBtX3BhcmVudEZyYW1l
LT5sb2FkZXIoKS51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJB
Z2VudC5kYXRhKCk7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK2NvbnN0
IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudFN0YXRpYygpCit7CisgICAgcmV0dXJuIE1vemls
bGFVc2VyQWdlbnQ7Cit9CisjZW5kaWYKKworCit2b2lkIFBsdWdpblZpZXc6OmxpZmVTdXBwb3J0
VGltZXJGaXJlZCgpCit7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjprZWVw
QWxpdmUoKQoreworICAgIGlmIChtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcmVmKCk7CisgICAgbV9saWZlU3VwcG9ydFRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQordm9pZCBQbHVn
aW5WaWV3OjprZWVwQWxpdmUoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcg
PSBpbnN0YW5jZU1hcCgpLmdldChpbnN0YW5jZSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICBy
ZXR1cm47CisKKyAgICB2aWV3LT5rZWVwQWxpdmUoKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7Cisg
ICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyglcykiLCBwcmV0dHlO
YW1lRm9yTlBOVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBOUEVycm9yIHJlc3Vs
dDsKKyAgICBpZiAocGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUsICZyZXN1
bHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0
VmFsdWUoJXMpIiwgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwor
CisgICAgTlBFcnJvciByZXN1bHQ7CisgICAgaWYgKHBsYXRmb3JtR2V0VmFsdWUodmFyaWFibGUs
IHZhbHVlLCAmcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChwbGF0
Zm9ybUdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WV2lu
ZG93TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBPYmplY3QqIHdp
bmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLndpbmRvd1NjcmlwdE5Q
T2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJl
dGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVj
dHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0
KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKwor
ICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gd2luZG93U2Ny
aXB0T2JqZWN0OworCisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAg
ICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZh
U2NyaXB0UGF1c2VkKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisK
KyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgaWYg
KG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFt
ZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAg
ICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBtX2VsZW1lbnQtPmdldE5QT2JqZWN0KCk7CisKKyAg
ICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNj
cmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVu
dGltZS5odG1sPgorICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAg
X05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiog
diA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZwcml2
YXRlTW9kZUJvb2w6IHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2Uo
KTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CisgICAgICAgICooKE5QQm9vbCopdmFsdWUpID0gcGFnZS0+dXNlc0VwaGVtZXJhbFNl
c3Npb24oKTsKKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgIH0KKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwor
c3RhdGljIEZyYW1lKiBnZXRGcmFtZShGcmFtZSogcGFyZW50RnJhbWUsIEVsZW1lbnQqIGVsZW1l
bnQpCit7CisgICAgaWYgKHBhcmVudEZyYW1lKQorICAgICAgICByZXR1cm4gcGFyZW50RnJhbWU7
CisgICAgCisgICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKK30KKworTlBF
cnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwg
Y29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCit7CisgICAgTE9H
KFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCglcykiLCBwcmV0dHlOYW1lRm9y
TlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBOUEVycm9yIHJlc3VsdCA9
IE5QRVJSX05PX0VSUk9SOworCisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBO
VVJMVkNvb2tpZTogeworICAgICAgICBVUkwgdShtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5i
YXNlVVJMKCksIHVybCk7CisgICAgICAgIGlmICh1LmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
RnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAg
ICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2ll
U3RyID0gY29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSkudXRmOCgpOworICAgICAgICAgICAg
ICAgIGlmICghY29va2llU3RyLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGludCBzaXplID0gY29va2llU3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAqdmFs
dWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHNpemUrMSkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoKnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQo
KnZhbHVlLCAwLCBzaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCp2YWx1
ZSwgY29va2llU3RyLmRhdGEoKSwgc2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxlbiA9IHNpemU7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTlBF
UlJfT1VUX09GX01FTU9SWV9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfSU5WQUxJRF9VUkw7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5QTlVSTFZQcm94eTogeworICAgICAg
ICBVUkwgdShtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCk7CisgICAg
ICAgIGlmICh1LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJh
bWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEZyYW1lTG9h
ZGVyKiBmcmFtZUxvYWRlciA9IGZyYW1lID8gJmZyYW1lLT5sb2FkZXIoKSA6IDA7CisgICAgICAg
ICAgICBjb25zdCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IGZyYW1lTG9hZGVyID8gZnJh
bWVMb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCkgOiAwOworICAgICAgICAgICAgY29uc3QgQ1N0
cmluZyBwcm94eVN0ciA9IHRvU3RyaW5nKHByb3h5U2VydmVyc0ZvclVSTCh1LCBjb250ZXh0KSku
dXRmOCgpOworICAgICAgICAgICAgaWYgKCFwcm94eVN0ci5pc051bGwoKSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBzaXplID0gcHJveHlTdHIubGVuZ3RoKCk7CisgICAgICAgICAgICAg
ICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoKnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldCgq
dmFsdWUsIDAsIHNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIHBy
b3h5U3RyLmRhdGEoKSwgc2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICpsZW4gPSBzaXplOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9S
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IE5Q
RVJSX0lOVkFMSURfVVJMOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgTE9HKFBsdWdpbnMs
ICJQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTDogJXMiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFy
aWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKworTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTChO
UE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1
ZSwgdWludDMyX3QgbGVuKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFs
dWVGb3JVUkwoJXMpIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRh
KCkpOworCisgICAgTlBFcnJvciByZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKworICAgIHN3aXRj
aCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlVSTFZDb29raWU6IHsKKyAgICAgICAgVVJMIHUo
bV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOworICAgICAgICBpZiAo
dS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIgPSBTdHJp
bmc6OmZyb21VVEY4KHZhbHVlLCBsZW4pOworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0
RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChmcmFtZSAm
JiAhY29va2llU3RyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzZXRDb29raWVzKGZyYW1l
LT5kb2N1bWVudCgpLCB1LCBjb29raWVTdHIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBOUE5VUkxWUHJveHk6CisgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0
VmFsdWVGb3JVUkwoJXMpOiBQbHVnaW5zIGFyZSBOT1QgYWxsb3dlZCB0byBzZXQgcHJveHkgaW5m
b3JtYXRpb24uIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkp
OworICAgICAgICByZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVl
Rm9yVVJMOiAlcyIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgp
KTsKKyAgICAgICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpn
ZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhv
c3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogLyogc2NoZW1lICovLCBjb25zdCBjaGFyKiAv
KiByZWFsbSAqLywgY2hhcioqICAvKiB1c2VybmFtZSAqLywgdWludDMyX3QqIC8qIHVsZW4gKi8s
IGNoYXIqKiAvKiBwYXNzd29yZCAqLywgdWludDMyX3QqIC8qIHBsZW4gKi8pCit7CisjaWYgTE9H
X0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKHByb3RvY29sKTsKKyAgICBVTlVTRURfUEFSQU0o
aG9zdCk7CisgICAgVU5VU0VEX1BBUkFNKHBvcnQpOworI2VuZGlmCisgICAgTE9HKFBsdWdpbnMs
ICJQbHVnaW5WaWV3OjpnZXRBdXRoZW50aWNhdGlvbkluZm86IHByb3RvY29sPSVzLCBob3N0PSVz
LCBwb3J0PSVkIiwgcHJvdG9jb2wsIGhvc3QsIHBvcnQpOworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisjZW5kaWYKKwordm9pZCBQbHVn
aW5WaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdF
bmFibGVkKQoreworICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0VmFsdWUgPSBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+c2V0dmFsdWU7CisgICAgaWYgKCFzZXRWYWx1ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgIE5QQm9vbCB2YWx1
ZSA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CisgICAgc2V0VmFsdWUobV9pbnN0YW5jZSwgTlBO
VnByaXZhdGVNb2RlQm9vbCwgJnZhbHVlKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
KyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4NmJiOWQyODEx
NGFkZDg2OTRkNWNkMTE3YTAzZDY2MGRkZmMwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtMCwwICsxLDQ0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHaXJpc2ggUmFtYWty
aXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdfaAorI2RlZmluZSBQbHVnaW5W
aWV3X2gKKworI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCisjaW5jbHVkZSAiUGx1Z2lu
Vmlld0Jhc2UuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
I2luY2x1ZGUgIlBsdWdpblN0cmVhbS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5o
IgorI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCit0eXBlZGVmIHN0
cnVjdCBIV05EX18qIEhXTkQ7Cit0eXBlZGVmIEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7Cisj
ZWxzZQordHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKKyNlbmRp
ZgorI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HdGtTb2NrZXQgR3RrU29ja2V0
OworI2VuZGlmCisKKyNpZiBQTEFURk9STShYMTEpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2lu
ZG93OwordHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CisjZW5kaWYKKworbmFtZXNw
YWNlIEpTQyB7CisgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFu
Y2U7CisgICAgfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWU7Cisg
ICAgY2xhc3MgRnJhbWVWaWV3OworICAgIGNsYXNzIEltYWdlOworICAgIGNsYXNzIEhUTUxQbHVn
SW5FbGVtZW50OworICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgTW91c2VFdmVu
dDsKKyAgICBjbGFzcyBVUkw7CisjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCisgICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjsKKyNlbmRpZgor
ICAgIGNsYXNzIFBsdWdpblBhY2thZ2U7CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdDsKKyAgICBj
bGFzcyBQbHVnaW5TdHJlYW07CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBS
ZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFdoZWVsRXZlbnQ7CisKKyAgICBlbnVtIFBsdWdp
blN0YXR1cyB7CisgICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCisgICAgICAg
IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW4sCisgICAgICAgIFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseQorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0IHsKKyAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luUmVxdWVzdCk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luUmVxdWVzdChjb25zdCBGcmFtZUxv
YWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQq
IG5vdGlmeURhdGEsIGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMpCisgICAgICAgICAgICA6IG1fZnJh
bWVMb2FkUmVxdWVzdChmcmFtZUxvYWRSZXF1ZXN0KQorICAgICAgICAgICAgLCBtX25vdGlmeURh
dGEobm90aWZ5RGF0YSkKKyAgICAgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3Rp
ZmljYXRpb24pCisgICAgICAgICAgICAsIG1fc2hvdWxkQWxsb3dQb3B1cHMoc2hvdWxkQWxsb3dQ
b3B1cHMpIHsgfQorICAgIHB1YmxpYzoKKyAgICAgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYg
ZnJhbWVMb2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQor
ICAgICAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9
CisgICAgICAgIGJvb2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZE5v
dGlmaWNhdGlvbjsgfQorICAgICAgICBib29sIHNob3VsZEFsbG93UG9wdXBzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaG91bGRBbGxvd1BvcHVwczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1l
TG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OworICAgICAgICB2b2lkKiBtX25vdGlmeURh
dGE7CisgICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgICAgICBib29sIG1fc2hv
dWxkQWxsb3dQb3B1cHM7CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpbk1hbnVhbExvYWRlciB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5QbHVnaW5NYW51YWxMb2FkZXIoKSB7fQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiwgaW50KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikg
PSAwOworICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFBsdWdpblZpZXdC
YXNlCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgICAgICAgICAgICAg
ICAsIHByaXZhdGUgUGx1Z2luU3RyZWFtQ2xpZW50CisjZW5kaWYKKyAgICAgICAgICAgICAgICAg
ICAgICwgcHVibGljIFBsdWdpbk1hbnVhbExvYWRlcgorICAgICAgICAgICAgICAgICAgICAgLCBw
cml2YXRlIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQbHVnaW5WaWV3PiBjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25z
dCBJbnRTaXplJiwgSFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHZpcnR1
YWwgflBsdWdpblZpZXcoKTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4oKSBjb25z
dCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsgfQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQorICAgICAgICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9
CisjZW5kaWYKKworICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7
CisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBjdXJyZW50UGx1Z2luVmlldygpOworCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCgp
OworI2VuZGlmCisgICAgICAgIFBhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGJp
bmRpbmdJbnN0YW5jZSgpOworCisgICAgICAgIFBsdWdpblN0YXR1cyBzdGF0dXMoKSBjb25zdCB7
IHJldHVybiBtX3N0YXR1czsgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisg
ICAgICAgIC8vIE5QTiBmdW5jdGlvbnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAg
ICAgICBOUEVycm9yIGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7
CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNo
YXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2
b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBC
b29sIGZpbGUpOworICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNv
bnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQzMl90IHdy
aXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOworICAgICAg
ICBOUEVycm9yIGRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29u
KTsKKyNlbmRpZgorICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKKyNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZXJBZ2Vu
dFN0YXRpYygpOworI2VuZGlmCisgICAgICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworICAgICAgICAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAg
TlBFcnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAg
ICAgICBzdGF0aWMgTlBFcnJvciBnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpOworICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWVGb3JVUkwoTlBOVVJM
VmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJf
dCogbGVuKTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2
YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3QgbGVu
KTsKKyAgICAgICAgTlBFcnJvciBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJv
dG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1l
LCBjb25zdCBjaGFyKiByZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hh
cioqIHBhc3N3b3JkLCB1aW50MzJfdCogcGxlbik7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJl
Y3QoTlBSZWN0Kik7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7Cisj
ZW5kaWYKKyAgICAgICAgdm9pZCBmb3JjZVJlZHJhdygpOworICAgICAgICB2b2lkIHB1c2hQb3B1
cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0ZSk7CisgICAgICAgIHZvaWQgcG9wUG9wdXBzRW5hYmxl
ZFN0YXRlKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IElu
dFJlY3QmKTsKKworICAgICAgICBib29sIGFyZVBvcHVwc0FsbG93ZWQoKSBjb25zdDsKKworICAg
ICAgICB2b2lkIHNldEphdmFTY3JpcHRQYXVzZWQoYm9vbCk7CisKKyAgICAgICAgdm9pZCBwcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0
U3RyZWFtKFBsdWdpblN0cmVhbSopOworICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRp
bmcoUGx1Z2luU3RyZWFtKiBzdHJlYW0pIHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9CisK
KyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJh
bWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHND
aGFuZ2VkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHNob3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGNsaXBSZWN0Q2hhbmdlZCgpIG92ZXJyaWRlOworCisgICAg
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgcGx1Z2lucyBvbiBhbGwgcGxhdGZvcm1zIHRv
IG9idGFpbiBhIGNsaXAgcmVjdCB0aGF0IGluY2x1ZGVzIGNsaXBzIHNldCBieSBXZWJDb3JlLAor
ICAgICAgICAvLyBlLmcuLCBpbiBvdmVyZmxvdzphdXRvIHNlY3Rpb25zLiAgVGhlIGNsaXAgcmVj
dHMgY29vcmRpbmF0ZXMgYXJlIGluIHRoZSBjb250YWluaW5nIHdpbmRvdydzIGNvb3JkaW5hdGUg
c3BhY2UuCisgICAgICAgIC8vIFRoaXMgY2xpcCBpbmNsdWRlcyBhbnkgY2xpcHMgdGhhdCB0aGUg
d2lkZ2V0IGl0c2VsZiBzZXRzIHVwIGZvciBpdHMgY2hpbGRyZW4uCisgICAgICAgIEludFJlY3Qg
d2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZl
bnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnRWaXNpYmxlKGJvb2wpOworCisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1BsdWdpblZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisKKyAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnRGcmFtZS5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgZm9jdXNQbHVnaW5FbGVtZW50KCk7CisK
KyAgICAgICAgY29uc3QgU3RyaW5nJiBwbHVnaW5zUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1
Z2luc1BhZ2U7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWltZVR5cGU7IH0KKyAgICAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVy
biBtX3VybDsgfQorCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQorICAgICAgICBib29sIHBvcFVwQ29udGV4dE1lbnUoTlBNZW51Kik7CisjZW5k
aWYKKworI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAg
ICAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5U
LCBXUEFSQU0sIExQQVJBTSk7CisgICAgICAgIExSRVNVTFQgd25kUHJvYyhIV05EIGhXbmQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CisgICAgICAgIFdORFBS
T0MgcGx1Z2luV25kUHJvYygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luV25kUHJvYzsgfQorI2Vu
ZGlmCisKKyAgICAgICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lk
IGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2b2lkIGRpZEZpbmlz
aExvYWRpbmcoKTsKKyAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsK
KworICAgICAgICBzdGF0aWMgYm9vbCBpc0NhbGxpbmdQbHVnaW4oKTsKKworICAgICAgICBib29s
IHN0YXJ0KCk7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3Rh
dGljIHZvaWQga2VlcEFsaXZlKE5QUCk7CisjZW5kaWYKKyAgICAgICAgdm9pZCBrZWVwQWxpdmUo
KTsKKworI2lmIFBMQVRGT1JNKFgxMSkKKyAgICAgICAgc3RhdGljIERpc3BsYXkqIGdldFBsdWdp
bkRpc3BsYXkoRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIFdpbmRvdyBnZXRSb290V2luZG93KEZy
YW1lKiBwYXJlbnRGcmFtZSk7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdp
blZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZSos
IEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworCisgICAgICAgIHZvaWQgc2V0UGFyYW1l
dGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtVmFsdWVzKTsKKyAgICAgICAgYm9vbCBzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0
KCk7CisgICAgICAgIHZvaWQgaW5pdCgpOworICAgICAgICBib29sIHBsYXRmb3JtU3RhcnQoKTsK
KyAgICAgICAgdm9pZCBzdG9wKCk7CisgICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0
IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURh
dGEpOworICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZv
aWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMp
OworICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZl
ciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYpOworI2VuZGlmCisgICAgICAgIHN0YXRp
YyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpOwor
ICAgICAgICB2b2lkIHNldENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7CisKKyAgICAgICAgdm9p
ZCBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBtZWRpYUNhblN0YXJ0KCk7CisKKyNpZiBPUyhXSU5ET1dTKSAmJiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgdm9pZCBwYWludFdpbmRvd2VkUGx1
Z2luSW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgICAg
ICBzdGF0aWMgSERDIFdJTkFQSSBob29rZWRCZWdpblBhaW50KEhXTkQsIFBBSU5UU1RSVUNUKik7
CisgICAgICAgIHN0YXRpYyBCT09MIFdJTkFQSSBob29rZWRFbmRQYWludChIV05ELCBjb25zdCBQ
QUlOVFNUUlVDVCopOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICAgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2
YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7CisgICAgICAgIGJvb2wgcGxh
dGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3Iq
IHJlc3VsdCk7CisjZW5kaWYKKworICAgICAgICBSZWZQdHI8RnJhbWU+IG1fcGFyZW50RnJhbWU7
CisgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBtX3BsdWdpbjsKKyAgICAgICAgSFRNTFBs
dWdJbkVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAgICAg
ICAgVVJMIG1fdXJsOworICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7CisgICAgICAgIFZl
Y3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKKworICAgICAgICB2b2lkIHBlcmZvcm1SZXF1
ZXN0KFBsdWdpblJlcXVlc3QqKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3Qoc3RkOjp1
bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+KTsKKyAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJl
ZCgpOworICAgICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKCk7CisgICAgICAgIFRpbWVy
IG1fcmVxdWVzdFRpbWVyOworICAgICAgICBUaW1lciBtX2ludmFsaWRhdGVUaW1lcjsKKworICAg
ICAgICB2b2lkIHBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpOworICAgICAgICBUaW1lciBtX3Bv
cFBvcHVwc1N0YXRlVGltZXI7CisKKyAgICAgICAgdm9pZCBsaWZlU3VwcG9ydFRpbWVyRmlyZWQo
KTsKKyAgICAgICAgVGltZXIgbV9saWZlU3VwcG9ydFRpbWVyOworCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGJvb2wgZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmKTsK
KyNlbmRpZgorI2lmIGRlZmluZWQoWFBfTUFDT1NYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKKyAgICAgICAgaW50MTZfdCBkaXNwYXRjaE5QQ29jb2FFdmVudChOUENvY29hRXZlbnQm
KTsKKyAgICAgICAgYm9vbCBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZDsKKyAgICAg
ICAgYm9vbCBtX2tleURvd25TZW50OworICAgICAgICB1aW50MTZfdCBtX2Rpc3JlZ2FyZEtleVVw
Q291bnRlcjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgICAgIHZvaWQg
aGFuZGxlV2hlZWxFdmVudChXaGVlbEV2ZW50Kik7CisjZW5kaWYKKyAgICAgICAgdm9pZCB1cGRh
dGVQbHVnaW5XaWRnZXQoKTsKKyAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2b2lkIGhhbmRsZUtl
eWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZl
bnQoTW91c2VFdmVudCopOworI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCisgICAgICAgIHZvaWQgaGFuZGxlRm9jdXNJbkV2ZW50KCk7CisgICAgICAg
IHZvaWQgaGFuZGxlRm9jdXNPdXRFdmVudCgpOworI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQor
ICAgICAgICB2b2lkIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMpOworICAgICAgICBQ
YXNzUmVmUHRyPEltYWdlPiBzbmFwc2hvdCgpOworI2VuZGlmCisKKyAgICAgICAgaW50IG1fbW9k
ZTsKKyAgICAgICAgaW50IG1fcGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1OYW1l
czsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1WYWx1ZXM7CisgICAgICAgIFN0cmluZyBtX3BsdWdp
bnNQYWdlOworCisgICAgICAgIFN0cmluZyBtX21pbWVUeXBlOworICAgICAgICBXVEY6OkNTdHJp
bmcgbV91c2VyQWdlbnQ7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAg
ICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7CisgICAg
ICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisjZW5kaWYKKworICAgICAgICBWZWN0b3I8Ym9vbCwg
ND4gbV9wb3B1cFN0YXRlU3RhY2s7CisKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3Ry
ZWFtPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5S
ZXF1ZXN0Pj4gbV9yZXF1ZXN0czsKKworICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKKyAgICAg
ICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7CisgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7
CisgICAgICAgIGJvb2wgbV9pc1dhaXRpbmdUb1N0YXJ0OworCisjaWYgZGVmaW5lZChYUF9VTklY
KQorICAgICAgICBib29sIG1fbmVlZHNYRW1iZWQ7CisjZW5kaWYKKworI2lmIE9TKFdJTkRPV1Mp
ICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBPd25QdHI8UGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbj4gbV9tZXNzYWdlVGhyb3R0bGVyOworICAgICAgICBXTkRQUk9DIG1f
cGx1Z2luV25kUHJvYzsKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKKyAgICAgICAg
Ym9vbCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2M7CisgICAgICAgIEhEQyBtX3dtUHJpbnRIREM7
CisgICAgICAgIGJvb2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKKyNlbmRpZgorCisjaWYg
KFBMQVRGT1JNKEdUSykgJiYgT1MoV0lORE9XUykpIHx8IFBMQVRGT1JNKEVGTCkKKyAgICAgICAg
Ly8gT24gTWFjIE9TWCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhhdmUgaXRz
IG93biBuYXRpdmUgd2lkZ2V0LAorICAgICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNvbnRhaW5p
bmcgd2luZG93IGFzIGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5nLgorICAg
ICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBtX3dpbmRvdzsKK3B1YmxpYzoKKyAgICAgICAgUGxh
dGZvcm1QbHVnaW5XaWRnZXQgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSBjb25zdCB7IHJldHVybiBt
X3dpbmRvdzsgfQorICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3Jt
UGx1Z2luV2lkZ2V0IHdpZGdldCkgeyBtX3dpbmRvdyA9IHdpZGdldDsgfQorI2Vsc2UKK3B1Ymxp
YzoKKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBsdWdpbldp
ZGdldCB3aWRnZXQpIHsgc2V0UGxhdGZvcm1XaWRnZXQod2lkZ2V0KTsgfQorICAgICAgICBQbGF0
Zm9ybVBsdWdpbldpZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIHBs
YXRmb3JtV2lkZ2V0KCk7IH0KKyNlbmRpZgorCitwcml2YXRlOgorCisjaWYgZGVmaW5lZChYUF9V
TklYKSB8fCBQTEFURk9STShHVEspCisgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgp
OworI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dD
b250ZXh0OworICAgICAgICBDR0NvbnRleHRSZWYgbV9jb250ZXh0UmVmOworCisgICAgICAgIHZv
aWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFhQX1VOSVgp
ICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBib29sIG1faGFzUGVuZGlu
Z0dlb21ldHJ5Q2hhbmdlOworICAgICAgICBQaXhtYXAgbV9kcmF3YWJsZTsKKyAgICAgICAgVmlz
dWFsKiBtX3Zpc3VhbDsKKyAgICAgICAgQ29sb3JtYXAgbV9jb2xvcm1hcDsKKyAgICAgICAgRGlz
cGxheSogbV9wbHVnaW5EaXNwbGF5OworCisgICAgICAgIHZvaWQgaW5pdFhFdmVudChYRXZlbnQq
IGV2ZW50KTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBzdGF0aWMgZ2Jv
b2xlYW4gcGx1Z1JlbW92ZWRDYWxsYmFjayhHdGtTb2NrZXQqLCBQbHVnaW5WaWV3Kik7CisgICAg
ICAgIHN0YXRpYyB2b2lkIHBsdWdBZGRlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdpblZpZXcq
KTsKKyAgICAgICAgdm9pZCB1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOworICAgICAg
ICBib29sIG1fcGx1Z0FkZGVkOworICAgICAgICBJbnRSZWN0IG1fZGVsYXllZEFsbG9jYXRpb247
CisjZW5kaWYKKworICAgICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3Qg
dG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCisgICAgICAgIEludFJlY3QgbV93aW5kb3dS
ZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsK
KyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gbV9tYW51YWxTdHJlYW07CisKKyAgICAgICAg
Ym9vbCBtX2lzSmF2YVNjcmlwdFBhdXNlZDsKKworICAgICAgICBib29sIG1faGF2ZUNhbGxlZFNl
dFdpbmRvdzsKKworICAgICAgICBzdGF0aWMgUGx1Z2luVmlldyogc19jdXJyZW50UGx1Z2luVmll
dzsKKyAgICB9OworCitpbmxpbmUgUGx1Z2luVmlldyogdG9QbHVnaW5WaWV3KFdpZGdldCogd2lk
Z2V0KQoreworICAgIEFTU0VSVCghd2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3KCkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KTsKK30KKworaW5saW5l
IGNvbnN0IFBsdWdpblZpZXcqIHRvUGx1Z2luVmlldyhjb25zdCBXaWRnZXQqIHdpZGdldCkKK3sK
KyAgICBBU1NFUlQoIXdpZGdldCB8fCB3aWRnZXQtPmlzUGx1Z2luVmlldygpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+KHdpZGdldCk7Cit9CisKKy8vIFRoaXMg
d2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9QbHVn
aW5WaWV3KGNvbnN0IFBsdWdpblZpZXcqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlld1dp
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQxOTExMTU2NzlhMjE4YjU2NTMxOWE2ZmY5ZmEyMGQ2YWU0ZGU3MmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCkBA
IC0wLDAgKzEsMTAxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW1h
Z2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0JyaWRnZUpTQy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9DaHJvbWVDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Rm9jdXNDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2Fk
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFBsdWdJbkVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hvc3RXaW5kb3cuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ltYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUJpbmRpbmcuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Mb2NhbFdpbmRvd3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Nb3VzZUV2ZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9y
bU1vdXNlRXZlbnQuaD4KKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBs
dWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgorI2lu
Y2x1ZGUgIlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1NldHRpbmdzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL2NfaW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL25w
cnVudGltZV9pbXBsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9ydW50aW1lX3Jvb3QuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KKworI2lmIFVTRShDQUlSTykKKyNp
bmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4K
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjZW5kaWYKKworc3RhdGljIGlubGluZSBIV05EIHdpbmRv
d0hhbmRsZUZvclBhZ2VDbGllbnQoUGxhdGZvcm1QYWdlQ2xpZW50IGNsaWVudCkKK3sKKyNpZiBQ
TEFURk9STShHVEspCisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybiAwOworICAgIGlm
IChHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhjbGllbnQpKQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFdORD4oR0RLX1dJTkRPV19IV05EKHdpbmRvdykpOwor
ICAgIHJldHVybiAwOworI2Vsc2UKKyAgICByZXR1cm4gY2xpZW50OworI2VuZGlmCit9CisKK3Vz
aW5nIEpTQzo6RXhlY1N0YXRlOwordXNpbmcgSlNDOjpKU0xvY2s7Cit1c2luZyBKU0M6OkpTT2Jq
ZWN0OworCit1c2luZyBzdGQ6Om1pbjsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitjb25zdCBMUENX
U1RSIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lID0gTCJXZWJQbHVnaW5WaWV3IjsKK2NvbnN0
IExQQ1dTVFIga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5
IjsKKworLy8gVGhlIGNvZGUgdXNlZCB0byBob29rIEJlZ2luUGFpbnQvRW5kUGFpbnQgb3JpZ2lu
YWxseSBjYW1lIGZyb20KKy8vIDxodHRwOi8vd3d3LmZlbmd5dWFuLmNvbS9hcnRpY2xlL3dtcHJp
bnQuaHRtbD4uCisvLyBDb3B5cmlnaHQgKEMpIDIwMDAgYnkgRmVuZyBZdWFuICh3d3cuZmVuZ3l1
YW4uY29tKS4KKworc3RhdGljIHVuc2lnbmVkIGJlZ2luUGFpbnRTeXNDYWxsOworc3RhdGljIEJZ
VEUqIGJlZ2luUGFpbnQ7CisKK3N0YXRpYyB1bnNpZ25lZCBlbmRQYWludFN5c0NhbGw7CitzdGF0
aWMgQllURSogZW5kUGFpbnQ7CisKK3R5cGVkZWYgSERDIChXSU5BUEkgKlB0ckJlZ2luUGFpbnQp
KEhXTkQsIFBBSU5UU1RSVUNUKik7Cit0eXBlZGVmIEJPT0wgKFdJTkFQSSAqUHRyRW5kUGFpbnQp
KEhXTkQsIGNvbnN0IFBBSU5UU1RSVUNUKik7CisKKyNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2
XzY0KSAmJiBDT01QSUxFUihNU1ZDKQorZXh0ZXJuICJDIiBIREMgX19zdGRjYWxsIF9IQmVnaW5Q
YWludChIV05EIGhXbmQsIExQUEFJTlRTVFJVQ1QgbHBQYWludCk7CitleHRlcm4gIkMiIEJPT0wg
X19zdGRjYWxsIF9IRW5kUGFpbnQoSFdORCBoV25kLCBjb25zdCBQQUlOVFNUUlVDVCogbHBQYWlu
dCk7CisjZW5kaWYKKworSERDIFdJTkFQSSBQbHVnaW5WaWV3Ojpob29rZWRCZWdpblBhaW50KEhX
TkQgaFduZCwgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpCit7CisgICAgUGx1Z2luVmlldyogcGx1Z2lu
VmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBs
dWdpblZpZXdQcm9wZXJ0eSkpOworICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPm1f
d21QcmludEhEQykgeworICAgICAgICAvLyBXZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9QUklO
VENMSUVOVCwgc28gc2V0IHVwIHRoZSBQQUlOVFNUUlVDVCBzbworICAgICAgICAvLyB0aGF0IHRo
ZSBwbHVnaW4gd2lsbCBwYWludCBpbnRvIHRoZSBIREMgd2UgcHJvdmlkZS4KKyAgICAgICAgbWVt
c2V0KGxwUGFpbnQsIDAsIHNpemVvZihQQUlOVFNUUlVDVCkpOworICAgICAgICBscFBhaW50LT5o
ZGMgPSBwbHVnaW5WaWV3LT5tX3dtUHJpbnRIREM7CisgICAgICAgIEdldENsaWVudFJlY3QoaFdu
ZCwgJmxwUGFpbnQtPnJjUGFpbnQpOworICAgICAgICByZXR1cm4gcGx1Z2luVmlldy0+bV93bVBy
aW50SERDOworICAgIH0KKworI2lmIENPTVBJTEVSKEdDQykKKyAgICBIREMgcmVzdWx0OworICAg
IGFzbSAoInB1c2ggICAgJTJcbiIKKyAgICAgICAgICJwdXNoICAgICUzXG4iCisgICAgICAgICAi
Y2FsbCAgICAqJTRcbiIKKyAgICAgICAgIDogIj1hIiAocmVzdWx0KQorICAgICAgICAgOiAiYSIg
KGJlZ2luUGFpbnRTeXNDYWxsKSwgImciIChscFBhaW50KSwgImciIChoV25kKSwgIm0iIChiZWdp
blBhaW50KQorICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxpZiBkZWZpbmVkKF9NX0lYODYpCisgICAgLy8gQ2FsbCB0aHJvdWdoIHRvIHRoZSBv
cmlnaW5hbCBCZWdpblBhaW50LgorICAgIF9fYXNtICAgbW92ICAgICBlYXgsIGJlZ2luUGFpbnRT
eXNDYWxsCisgICAgX19hc20gICBwdXNoICAgIGxwUGFpbnQKKyAgICBfX2FzbSAgIHB1c2ggICAg
aFduZAorICAgIF9fYXNtICAgY2FsbCAgICBiZWdpblBhaW50CisjZWxzZQorICAgIHJldHVybiBf
SEJlZ2luUGFpbnQoaFduZCwgbHBQYWludCk7CisjZW5kaWYKK30KKworQk9PTCBXSU5BUEkgUGx1
Z2luVmlldzo6aG9va2VkRW5kUGFpbnQoSFdORCBoV25kLCBjb25zdCBQQUlOVFNUUlVDVCogbHBQ
YWludCkKK3sKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxQ
bHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7CisgICAg
aWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+bV93bVByaW50SERDKSB7CisgICAgICAgIC8v
IFdlJ3JlIHNlY3JldGx5IGhhbmRsaW5nIFdNX1BSSU5UQ0xJRU5ULCBzbyB3ZSBkb24ndCBoYXZl
IHRvIGRvIGFueQorICAgICAgICAvLyBjbGVhbnVwLgorICAgICAgICByZXR1cm4gVFJVRTsKKyAg
ICB9CisKKyNpZiBDT01QSUxFUihHQ0MpCisgICAgQk9PTCByZXN1bHQ7CisgICAgYXNtICgicHVz
aCAgICUyXG4iCisgICAgICAgICAicHVzaCAgICUzXG4iCisgICAgICAgICAiY2FsbCAgIColNFxu
IgorICAgICAgICAgOiAiPWEiIChyZXN1bHQpCisgICAgICAgICA6ICJhIiAoZW5kUGFpbnRTeXND
YWxsKSwgImciIChscFBhaW50KSwgImciIChoV25kKSwgIm0iIChlbmRQYWludCkKKyAgICAgICAg
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2VsaWYgZGVmaW5lZCAoX01fSVg4NikKKyAgICAvLyBD
YWxsIHRocm91Z2ggdG8gdGhlIG9yaWdpbmFsIEVuZFBhaW50LgorICAgIF9fYXNtICAgbW92ICAg
ICBlYXgsIGVuZFBhaW50U3lzQ2FsbAorICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50CisgICAg
X19hc20gICBwdXNoICAgIGhXbmQKKyAgICBfX2FzbSAgIGNhbGwgICAgZW5kUGFpbnQKKyNlbHNl
CisgICAgcmV0dXJuIF9IRW5kUGFpbnQoaFduZCwgbHBQYWludCk7CisjZW5kaWYKK30KKworc3Rh
dGljIHZvaWQgaG9vayhjb25zdCBjaGFyKiBtb2R1bGUsIGNvbnN0IGNoYXIqIHByb2MsIHVuc2ln
bmVkJiBzeXNDYWxsSUQsIEJZVEUqJiBwUHJvYywgY29uc3Qgdm9pZCogcE5ld1Byb2MpCit7Cisg
ICAgLy8gU2VlIDxodHRwOi8vd3d3LmZlbmd5dWFuLmNvbS9hcnRpY2xlL3dtcHJpbnQuaHRtbD4g
Zm9yIGFuIGV4cGxhbmF0aW9uIG9mCisgICAgLy8gaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuCisK
KyAgICBISU5TVEFOQ0UgaE1vZCA9IEdldE1vZHVsZUhhbmRsZUEobW9kdWxlKTsKKworICAgIHBQ
cm9jID0gcmVpbnRlcnByZXRfY2FzdDxCWVRFKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+
KEdldFByb2NBZGRyZXNzKGhNb2QsIHByb2MpKSk7CisKKyNpZiBDT01QSUxFUihHQ0MpIHx8IGRl
ZmluZWQoX01fSVg4NikKKyAgICBpZiAocFByb2NbMF0gIT0gMHhCOCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBiZSByZWFkaW5nIHRoZSBieXRlcyBvbmUtYnkt
b25lIGluc3RlYWQgb2YgZG9pbmcgYW4KKyAgICAvLyB1bmFsaWduZWQgcmVhZD8KKyAgICBzeXND
YWxsSUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KHBQcm9jICsgMSk7CisKKyAgICBE
V09SRCBmbE9sZFByb3RlY3Q7CisgICAgaWYgKCFWaXJ0dWFsUHJvdGVjdChwUHJvYywgNSwgUEFH
RV9FWEVDVVRFX1JFQURXUklURSwgJmZsT2xkUHJvdGVjdCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHBQcm9jWzBdID0gMHhFOTsKKyAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KHBQ
cm9jICsgMSkgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihwTmV3UHJvYykgLSByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihwUHJvYyArIDUpOworCisgICAgcFByb2MgKz0gNTsKKyNlbHNl
CisgICAgLyogRGlzYXNzZW1ibHkgb2YgQmVnaW5QYWludCgpCisgICAgMDAwMDAwMDA3NzlGQzVC
MCA0QyA4QiBEMSAgICAgICAgIG1vdiAgICAgICAgIHIxMCxyY3gKKyAgICAwMDAwMDAwMDc3OUZD
NUIzIEI4IDE3IDEwIDAwIDAwICAgbW92ICAgICAgICAgZWF4LDEwMTdoCisgICAgMDAwMDAwMDA3
NzlGQzVCOCAwRiAwNSAgICAgICAgICAgIHN5c2NhbGwKKyAgICAwMDAwMDAwMDc3OUZDNUJBIEMz
ICAgICAgICAgICAgICAgcmV0CisgICAgMDAwMDAwMDA3NzlGQzVCQiA5MCAgICAgICAgICAgICAg
IG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QkMgOTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAw
MDAwMDc3OUZDNUJEIDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVCRSA5
MCAgICAgICAgICAgICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QkYgOTAgICAgICAgICAgICAg
ICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUMwIDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAw
MDAwMDA3NzlGQzVDMSA5MCAgICAgICAgICAgICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QzIg
OTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUMzIDkwICAgICAgICAgICAg
ICAgbm9wCisgICAgKi8KKyAgICAvLyBDaGVjayBmb3IgdGhlIHNpZ25hdHVyZSBhcyBpbiB0aGUg
YWJvdmUgZGlzYXNzZW1ibHkKKyAgICBEV09SRCBndWFyZCA9IDB4QjhEMThCNEM7CisgICAgaWYg
KCpyZWludGVycHJldF9jYXN0PERXT1JEKj4ocFByb2MpICE9IGd1YXJkKQorICAgICAgICByZXR1
cm47CisKKyAgICBEV09SRCBmbE9sZFByb3RlY3Q7CisgICAgVmlydHVhbFByb3RlY3QocFByb2Ms
IDEyLCBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFLCAmIGZsT2xkUHJvdGVjdCk7CisgICAgcFByb2Nb
MF0gPSAweDQ4OyAgICAvLyBtb3YgcmF4LCB0aGlzCisgICAgcFByb2NbMV0gPSAweGI4OworICAg
ICooX19pbnQ2NCopKHBQcm9jKzIpID0gKF9faW50NjQpcE5ld1Byb2M7CisgICAgcFByb2NbMTBd
ID0gMHhmZjsgICAvLyBqbXAgcmF4CisgICAgcFByb2NbMTFdID0gMHhlMDsKKyNlbmRpZgorfQor
CitzdGF0aWMgdm9pZCBzZXRVcE9mZnNjcmVlblBhaW50aW5nSG9va3MoSERDIChXSU5BUEkqaG9v
a2VkQmVnaW5QYWludCkoSFdORCwgUEFJTlRTVFJVQ1QqKSwgQk9PTCAoV0lOQVBJKmhvb2tlZEVu
ZFBhaW50KShIV05ELCBjb25zdCBQQUlOVFNUUlVDVCopKQoreworICAgIHN0YXRpYyBib29sIGhh
dmVIb29rZWQgPSBmYWxzZTsKKyAgICBpZiAoaGF2ZUhvb2tlZCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGhhdmVIb29rZWQgPSB0cnVlOworCisgICAgLy8gTW9zdCAoYWxsPykgd2luZG93ZWQgcGx1
Z2lucyBkb24ndCBzZWVtIHRvIHJlc3BvbmQgdG8gV01fUFJJTlRDTElFTlQsIHNvCisgICAgLy8g
d2UgaG9vayBpbnRvIEJlZ2luUGFpbnQvRW5kUGFpbnQgdG8gYWxsb3cgdGhlaXIgbm9ybWFsIFdN
X1BBSU5UIGhhbmRsaW5nCisgICAgLy8gdG8gZHJhdyBpbnRvIGEgZ2l2ZW4gSERDLiBOb3RlIHRo
YXQgdGhpcyBob29raW5nIGFmZmVjdHMgdGhlIGVudGlyZQorICAgIC8vIHByb2Nlc3MuCisgICAg
aG9vaygidXNlcjMyLmRsbCIsICJCZWdpblBhaW50IiwgYmVnaW5QYWludFN5c0NhbGwsIGJlZ2lu
UGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0
cmRpZmZfdD4oaG9va2VkQmVnaW5QYWludCkpKTsKKyAgICBob29rKCJ1c2VyMzIuZGxsIiwgIkVu
ZFBhaW50IiwgZW5kUGFpbnRTeXNDYWxsLCBlbmRQYWludCwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihob29rZWRFbmRQYWludCkpKTsK
KworfQorCitzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQoreworICAgIHN0YXRpYyBi
b29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAgICBpZiAoaGF2ZVJlZ2lz
dGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBoYXZlUmVnaXN0
ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBXZWJDb3Jl
OjpzZXRJbnN0YW5jZUhhbmRsZSgoSElOU1RBTkNFKShHZXRNb2R1bGVIYW5kbGUoMCkpKTsKKyNl
bmRpZgorCisgICAgQVNTRVJUKFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCkpOworCisgICAgV05E
Q0xBU1NFWCB3Y2V4OworICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOworICAg
IHdjZXguaEljb25TbSAgICAgICAgPSAwOworICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBDU19E
QkxDTEtTOworICAgIHdjZXgubHBmblduZFByb2MgICAgPSBEZWZXaW5kb3dQcm9jOworICAgIHdj
ZXguY2JDbHNFeHRyYSAgICAgPSAwOworICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOworICAg
IHdjZXguaEluc3RhbmNlICAgICAgPSBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpOworICAgIHdj
ZXguaEljb24gICAgICAgICAgPSAwOworICAgIHdjZXguaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vy
c29yKDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IChIQlJVU0gpQ09M
T1JfV0lORE9XOworICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSAwOworICAgIHdjZXgubHBzekNs
YXNzTmFtZSAgPSBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZTsKKworICAgIHJldHVybiAhIVJl
Z2lzdGVyQ2xhc3NFeCgmd2NleCk7Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgUGx1Z2luVmlldzo6
UGx1Z2luVmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0pCit7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBsdWdpblZpZXdQcm9wZXJ0
eSkpOworCisgICAgcmV0dXJuIHBsdWdpblZpZXctPnduZFByb2MoaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0pOworfQorCitzdGF0aWMgYm9vbCBpc1dpbmRvd3NNZXNzYWdlVXNlckdlc3R1
cmUoVUlOVCBtZXNzYWdlKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgICAgICBjYXNl
IFdNX0xCVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9NQlVUVE9OVVA6CisgICAgICAgIGNhc2Ug
V01fUkJVVFRPTlVQOgorICAgICAgICBjYXNlIFdNX0tFWVVQOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitzdGF0aWMgaW5saW5lIEludFBvaW50IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coRnJh
bWVWaWV3KiB2aWV3LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIHZpZXct
PmNvbnRlbnRzVG9XaW5kb3cocG9pbnQpOworfQorCitzdGF0aWMgaW5saW5lIEludFJlY3QgY29u
dGVudHNUb05hdGl2ZVdpbmRvdyhGcmFtZVZpZXcqIHZpZXcsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7Cit9CisKK0xSRVNV
TFQKK1BsdWdpblZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgLy8gPHJkYXI6Ly81NzExMTM2PiBTb21ldGlt
ZXMgRmxhc2ggd2lsbCBjYWxsIFNldENhcHR1cmUgYmVmb3JlIGNyZWF0aW5nCisgICAgLy8gYSBm
dWxsLXNjcmVlbiB3aW5kb3cgYW5kIHdpbGwgbm90IHJlbGVhc2UgaXQsIHdoaWNoIGNhdXNlcyB0
aGUKKyAgICAvLyBmdWxsLXNjcmVlbiB3aW5kb3cgdG8gbmV2ZXIgcmVjZWl2ZSBtb3VzZSBldmVu
dHMuIFdlIHNldC9yZWxlYXNlIGNhcHR1cmUKKyAgICAvLyBvbiBtb3VzZSBkb3duL3VwIGJlZm9y
ZSBzZW5kaW5nIHRoZSBldmVudCB0byB0aGUgcGx1Zy1pbiB0byBwcmV2ZW50IHRoYXQuCisgICAg
c3dpdGNoIChtZXNzYWdlKSB7CisgICAgICAgIGNhc2UgV01fTEJVVFRPTkRPV046CisgICAgICAg
IGNhc2UgV01fTUJVVFRPTkRPV046CisgICAgICAgIGNhc2UgV01fUkJVVFRPTkRPV046CisgICAg
ICAgICAgICA6OlNldENhcHR1cmUoaFduZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXTV9MQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01fTUJVVFRPTlVQOgorICAgICAgICBj
YXNlIFdNX1JCVVRUT05VUDoKKyAgICAgICAgICAgIDo6UmVsZWFzZUNhcHR1cmUoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChtZXNzYWdlID09IG1fbGFzdE1lc3NhZ2Ug
JiYKKyAgICAgICAgbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENh
bGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSkgJiYgCisgICAgICAgIG1faXNDYWxs
aW5nUGx1Z2luV25kUHJvYykKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBpZiAobWVzc2FnZSA9
PSBXTV9VU0VSICsgMSAmJgorICAgICAgICBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1
Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcykpIHsKKyAgICAgICAgaWYgKCFt
X21lc3NhZ2VUaHJvdHRsZXIpCisgICAgICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZXIgPSBhZG9w
dFB0cihuZXcgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbih0aGlzKSk7CisKKyAgICAgICAgbV9t
ZXNzYWdlVGhyb3R0bGVyLT5hcHBlbmRNZXNzYWdlKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbV9sYXN0TWVzc2FnZSA9IG1l
c3NhZ2U7CisgICAgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jID0gdHJ1ZTsKKworICAgIC8vIElm
IHRoZSBwbHVnLWluIGRvZXNuJ3QgZXhwbGljaXRseSBzdXBwb3J0IGNoYW5naW5nIHRoZSBwb3At
dXAgc3RhdGUsIHdlIGVuYWJsZQorICAgIC8vIHBvcHVwcyBmb3IgYWxsIHVzZXIgZ2VzdHVyZXMu
CisgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gcG9wIHRoZSBzdGF0ZSBpbiBhIHRpbWVyLCBi
ZWNhdXNlIHRoZSBGbGFzaCBwbHVnLWluIAorICAgIC8vIHBvcHMgdXAgd2luZG93cyBpbiByZXNw
b25zZSB0byBhIHBvc3RlZCBtZXNzYWdlLgorICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+dmVyc2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgJiYKKyAgICAgICAg
aXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKG1lc3NhZ2UpICYmICFtX3BvcFBvcHVwc1N0YXRl
VGltZXIuaXNBY3RpdmUoKSkgeworCisgICAgICAgIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUodHJ1
ZSk7CisKKyAgICAgICAgbV9wb3BQb3B1cHNTdGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAg
ICB9CisKKyAgICBpZiAobWVzc2FnZSA9PSBXTV9QUklOVENMSUVOVCkgeworICAgICAgICAvLyBN
b3N0IChhbGw/KSB3aW5kb3dlZCBwbHVnaW5zIGRvbid0IHJlc3BvbmQgdG8gV01fUFJJTlRDTElF
TlQsIHNvIHdlCisgICAgICAgIC8vIGNoYW5nZSB0aGUgbWVzc2FnZSB0byBXTV9QQUlOVCBhbmQg
cmVseSBvbiBvdXIgaG9va2VkIHZlcnNpb25zIG9mCisgICAgICAgIC8vIEJlZ2luUGFpbnQvRW5k
UGFpbnQgdG8gbWFrZSB0aGUgcGx1Z2luIGRyYXcgaW50byB0aGUgZ2l2ZW4gSERDLgorICAgICAg
ICBtZXNzYWdlID0gV01fUEFJTlQ7CisgICAgICAgIG1fd21QcmludEhEQyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SERDPih3UGFyYW0pOworICAgIH0KKworICAgIC8vIENhbGwgdGhlIHBsdWctaW4ncyB3
aW5kb3cgcHJvYy4KKyAgICBMUkVTVUxUIHJlc3VsdCA9IDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVn
aW5XbmRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisKKyAgICBtX3dtUHJp
bnRIREMgPSAwOworCisgICAgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jID0gZmFsc2U7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdl
dCgpCit7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVW
aWV3JiBmcmFtZVZpZXcgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSk7CisKKyAgICBJ
bnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlw
UmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmll
dy5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5z
aXplKCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJl
Y3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYg
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgJiYgKCFtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0IHx8
IG1fd2luZG93UmVjdCAhPSBvbGRXaW5kb3dSZWN0IHx8IG1fY2xpcFJlY3QgIT0gb2xkQ2xpcFJl
Y3QpKSB7CisKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgICAgICAvLyBU
byBwcmV2ZW50IGZsYXNoZXMgd2hpbGUgc2Nyb2xsaW5nLCB3ZSBkaXNhYmxlIGRyYXdpbmcgZHVy
aW5nIHRoZSB3aW5kb3cKKyAgICAgICAgLy8gdXBkYXRlIHByb2Nlc3MgYnkgY2xpcHBpbmcgdGhl
IHdpbmRvdyB0byB0aGUgemVybyByZWN0LgorCisgICAgICAgIGJvb2wgY2xpcFRvWmVyb1JlY3Qg
PSAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9S
ZWN0V2hlblNjcm9sbGluZyk7CisKKyAgICAgICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7CisgICAg
ICAgICAgICBhdXRvIHJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAw
LCAwKSk7CisgICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCByZ24ubGVhaygpLCBGQUxTRSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRv
IHJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9j
bGlwUmVjdC55KCksIG1fY2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSkpOworICAg
ICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWso
KSwgVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1faGF2ZVVwZGF0ZWRQbHVnaW5X
aWRnZXQgfHwgbV93aW5kb3dSZWN0ICE9IG9sZFdpbmRvd1JlY3QpCisgICAgICAgICAgICA6Ok1v
dmVXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5k
b3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwg
VFJVRSk7CisKKyAgICAgICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7CisgICAgICAgICAgICBhdXRv
IHJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9j
bGlwUmVjdC55KCksIG1fY2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSkpOworICAg
ICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWso
KSwgVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
KworICAgICAgICBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0ID0gdHJ1ZTsKKyAgICB9Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIGlmIChmb2N1
c2VkICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIFNldEZvY3VzKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpOworCisgICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKKworICAg
IGlmICghbV9wbHVnaW4gfHwgbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBO
UEV2ZW50IG5wRXZlbnQ7CisKKyAgICBucEV2ZW50LmV2ZW50ID0gZm9jdXNlZCA/IFdNX1NFVEZP
Q1VTIDogV01fS0lMTEZPQ1VTOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKyAgICBucEV2ZW50
LmxQYXJhbSA9IDA7CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7CisKKyAgICBp
ZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAg
U2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19TSE9XTkEpOworCisgICAgV2lk
Z2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgc2V0U2Vs
ZlZpc2libGUoZmFsc2UpOworCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSwgU1dfSElERSk7CisKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKworYm9vbCBQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgbnBFdmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBib29s
IHNob3VsZFBvcCA9IGZhbHNlOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT52
ZXJzaW9uIDwgTlBWRVJTX0hBU19QT1BVUFNfRU5BQkxFRF9TVEFURSAmJiBpc1dpbmRvd3NNZXNz
YWdlVXNlckdlc3R1cmUobnBFdmVudC5ldmVudCkpIHsKKyAgICAgICAgcHVzaFBvcHVwc0VuYWJs
ZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAgc2hvdWxkUG9wID0gdHJ1ZTsKKyAgICB9CisKKyAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vblZNKCkpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgYm9vbCBhY2NlcHRl
ZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQp
OworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworCisgICAgaWYgKHNob3VsZFBvcCkgCisg
ICAgICAgIHBvcFBvcHVwc0VuYWJsZWRTdGF0ZSgpOworCisgICAgcmV0dXJuIGFjY2VwdGVkOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMgaGRj
KQoreworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgU2VuZE1lc3NhZ2UocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSwgV01fUFJJTlRDTElFTlQsIHJlaW50ZXJwcmV0X2Nhc3Q8V1BBUkFN
PihoZGMpLCBQUkZfQ0xJRU5UIHwgUFJGX0NISUxEUkVOIHwgUFJGX09XTkVEKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdh
YmxlOworICAgIG1fbnBXaW5kb3cud2luZG93ID0gaGRjOworCisgICAgV0lORE9XUE9TIHdpbmRv
d3BvcyA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworCisgICAgSW50UmVjdCByID0gY29udGVu
dHNUb05hdGl2ZVdpbmRvdyhkb3duY2FzdDxGcmFtZVZpZXc+KHBhcmVudCgpKSwgZnJhbWVSZWN0
KCkpOworCisgICAgd2luZG93cG9zLnggPSByLngoKTsKKyAgICB3aW5kb3dwb3MueSA9IHIueSgp
OworICAgIHdpbmRvd3Bvcy5jeCA9IHIud2lkdGgoKTsKKyAgICB3aW5kb3dwb3MuY3kgPSByLmhl
aWdodCgpOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9X
SU5ET1dQT1NDSEFOR0VEOworICAgIG5wRXZlbnQubFBhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KCZ3aW5kb3dwb3MpOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKworICAgIGRp
c3BhdGNoTlBFdmVudChucEV2ZW50KTsKKworICAgIHNldE5QV2luZG93UmVjdChmcmFtZVJlY3Qo
KSk7CisKKyAgICBucEV2ZW50LmV2ZW50ID0gV01fUEFJTlQ7CisgICAgbnBFdmVudC53UGFyYW0g
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaGRjKTsKKworICAgIC8vIFRoaXMgaXMgc3Vw
cG9zZWQgdG8gYmUgYSBwb2ludGVyIHRvIHRoZSBkaXJ0eSByZWN0LCBidXQgaXQgc2VlbXMgdGhh
dCB0aGUgRmxhc2ggcGx1Z2luCisgICAgLy8gaWdub3JlcyBpdCBzbyB3ZSBqdXN0IHBhc3MgbnVs
bC4KKyAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVu
dCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyNpZiAh
VVNFKFdJTkdESSkKKyAgICBBU1NFUlQobV9pc1dpbmRvd2VkKTsKKyAgICBBU1NFUlQoY29udGV4
dC0+c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpKTsKKworICAgIEludFBvaW50IGxvY2F0aW9u
SW5XaW5kb3cgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udmVydFRvQ29udGFp
bmluZ1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKKworICAgIExvY2FsV2luZG93c0Nv
bnRleHQgd2luZG93c0NvbnRleHQoY29udGV4dCwgZnJhbWVSZWN0KCksIGZhbHNlKTsKKworI2lm
IFVTRShDQUlSTykKKyAgICAvLyBNdXN0IGZsdXNoIGRyYXdpbmdzIHVwIHRvIHRoaXMgcG9pbnQg
dG8gdGhlIGJhY2tpbmcgbWV0YWZpbGUsIG90aGVyd2lzZSB0aGUKKyAgICAvLyBwbHVnaW4gcmVn
aW9uIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBhbnkgY2xlYXIgcmVnaW9ucyBzcGVjaWZpZWQg
aW4gdGhlCisgICAgLy8gY2Fpcm8tY29udHJvbGxlZCBwb3J0aW9ucyBvZiB0aGUgcmVuZGVyaW5n
LgorICAgIGNhaXJvX3Nob3dfcGFnZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7
CisjZW5kaWYKKworICAgIEhEQyBoZGMgPSB3aW5kb3dzQ29udGV4dC5oZGMoKTsKKyAgICBYRk9S
TSBvcmlnaW5hbFRyYW5zZm9ybTsKKyAgICBHZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmlnaW5h
bFRyYW5zZm9ybSk7CisKKyAgICAvLyBUaGUgcGx1Z2luIGV4cGVjdHMgdGhlIERDIHRvIGJlIGlu
IGNsaWVudCBjb29yZGluYXRlcywgc28gd2UgdHJhbnNsYXRlCisgICAgLy8gdGhlIERDIHRvIG1h
a2UgdGhhdCBzby4KKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gY29udGV4dC0+Z2V0Q1RNKCk7
CisgICAgY3RtLnRyYW5zbGF0ZShsb2NhdGlvbkluV2luZG93LngoKSwgbG9jYXRpb25JbldpbmRv
dy55KCkpOworICAgIFhGT1JNIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFhGT1JNPihjdG0udG9U
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKworICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJnRy
YW5zZm9ybSk7CisKKyAgICBwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoaGRjKTsKKworICAg
IFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJm9yaWdpbmFsVHJhbnNmb3JtKTsKKyNlbmRpZgorfQor
Cit2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAgIC8vIERy
YXcgdGhlICJtaXNzaW5nIHBsdWdpbiIgaW1hZ2UKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2lu
SWNvbihjb250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChj
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVu
c3VyZSB0aGF0IHdlIGhhdmUgY2FsbGVkIFNldFdpbmRvdyBiZWZvcmUgd2UgdHJ5IHRvIHBhaW50
LgorICAgIGlmICghbV9oYXZlQ2FsbGVkU2V0V2luZG93KQorICAgICAgICBzZXROUFdpbmRvd1Jl
Y3QoZnJhbWVSZWN0KCkpOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworI2lmICFVU0UoV0lO
R0RJKQorICAgICAgICBpZiAoY29udGV4dC0+c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpKQor
ICAgICAgICAgICAgcGFpbnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KGNvbnRleHQsIHJlY3Qp
OworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJbiB0aGUgR1RLIGFu
ZCBRdCBwb3J0cyB3ZSBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIGRvbid0IHdhbnQg
dG8gdXNlIHRoZSB3aW5kb3cKKyAgICAvLyBjb29yZGluYXRlcy4KKyNpZiBQTEFURk9STShHVEsp
CisgICAgSW50UmVjdCByZWN0SW5XaW5kb3cocmVjdCk7CisgICAgcmVjdEluV2luZG93LmludGVy
c2VjdChmcmFtZVJlY3QoKSk7CisjZWxzZQorICAgIEludFJlY3QgcmVjdEluV2luZG93ID0gZG93
bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkp
OworI2VuZGlmCisgICAgTG9jYWxXaW5kb3dzQ29udGV4dCB3aW5kb3dzQ29udGV4dChjb250ZXh0
LCByZWN0SW5XaW5kb3csIG1faXNUcmFuc3BhcmVudCk7CisKKyAgICAvLyBPbiBTYWZhcmkvV2lu
ZG93cyB3aXRob3V0IHRyYW5zcGFyZW5jeSBsYXllcnMgdGhlIEdyYXBoaWNzQ29udGV4dCByZXR1
cm5zIHRoZSBIREMKKyAgICAvLyBvZiB0aGUgd2luZG93IGFuZCB0aGUgcGx1Z2luIGV4cGVjdHMg
dGhhdCB0aGUgcGFzc2VkIGluIERDIGhhcyB3aW5kb3cgY29vcmRpbmF0ZXMuCisgICAgLy8gSW4g
dGhlIEdUSyBhbmQgUXQgcG9ydHMgd2UgYWx3YXlzIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZl
ciBhbmQgdGhlcmVmb3JlIG5lZWQKKyAgICAvLyB0byBwcmVzZXJ2ZSB0aGUgdHJhbnNsYXRpb24g
c2V0IGluIGdldFdpbmRvd3NDb250ZXh0LgorI2lmICFQTEFURk9STShHVEspCisgICAgaWYgKCFj
b250ZXh0LT5pc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSkgeworICAgICAgICBYRk9STSB0cmFuc2Zv
cm07CisgICAgICAgIEdldFdvcmxkVHJhbnNmb3JtKHdpbmRvd3NDb250ZXh0LmhkYygpLCAmdHJh
bnNmb3JtKTsKKyAgICAgICAgdHJhbnNmb3JtLmVEeCA9IDA7CisgICAgICAgIHRyYW5zZm9ybS5l
RHkgPSAwOworICAgICAgICBTZXRXb3JsZFRyYW5zZm9ybSh3aW5kb3dzQ29udGV4dC5oZGMoKSwg
JnRyYW5zZm9ybSk7CisgICAgfQorI2VuZGlmCisKKyAgICBwYWludEludG9UcmFuc2Zvcm1lZENv
bnRleHQod2luZG93c0NvbnRleHQuaGRjKCkpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKG1fcGx1
Z2luICYmICFtX2lzV2luZG93ZWQpOworCisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgbnBF
dmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29kZSgpOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0g
V01fS0VZRE9XTjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOworICAgIH0gZWxzZSBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgeworICAgICAgICBu
cEV2ZW50LmV2ZW50ID0gV01fQ0hBUjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOworICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkgewor
ICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZVVA7CisgICAgICAgIG5wRXZlbnQubFBhcmFt
ID0gMHg4MDAwOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OworICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworfQorCitleHRlcm4gYm9vbCBpZ25vcmVOZXh0U2V0Q3Vyc29yOwor
Cit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7
CisgICAgQVNTRVJUKG1fcGx1Z2luICYmICFtX2lzV2luZG93ZWQpOworCisgICAgTlBFdmVudCBu
cEV2ZW50OworCisgICAgSW50UG9pbnQgcCA9IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coZG93bmNh
c3Q8RnJhbWVWaWV3PihwYXJlbnQoKSksIEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+
cGFnZVkoKSkpOworCisgICAgbnBFdmVudC5sUGFyYW0gPSBNQUtFTFBBUkFNKHAueCgpLCBwLnko
KSk7CisgICAgbnBFdmVudC53UGFyYW0gPSAwOworCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkp
CisgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX0NPTlRST0w7CisgICAgaWYgKGV2ZW50LT5z
aGlmdEtleSgpKQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19TSElGVDsKKworICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCB8fAorICAgICAg
ICBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IAorICAgICAg
ICBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgeworICAgICAg
ICBucEV2ZW50LmV2ZW50ID0gV01fTU9VU0VNT1ZFOworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRv
bkRvd24oKSkKKyAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQ
YXJhbSB8PSBNS19MQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfTUJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfUkJVVFRPTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7CisgICAgICAgIHN3
aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAg
ICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQg
PSBXTV9NQlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTkRPV047Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkgeworICAgICAgICBzd2l0Y2ggKGV2
ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01CVVRU
T05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAg
ICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTlVQOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIGJhY2sgcG9ydGluZyB0aGUgaHR0cDov
L3dlYmtpdC5vcmcvYi81ODEwOCBmaXggaGVyZS4KKyAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKworI2lmICFQTEFU
Rk9STShHVEspCisgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNldEN1cnNvciBpcyBhbHdheXMg
Y2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRIYW5kbGVyLmNwcAorICAgIC8vIGFu
ZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8g
dHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KKyAgICBpZ25vcmVOZXh0U2V0Q3Vyc29yID0gdHJ1
ZTsKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAg
cGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2V0TGFzdFNldEN1cnNvclRvQ3VycmVudEN1cnNvcigp
OworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBh
cmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworCisgICAgaWYgKHBhcmVu
dCkKKyAgICAgICAgaW5pdCgpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIXBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gSWYgdGhlIHBs
dWctaW4gd2luZG93IG9yIG9uZSBvZiBpdHMgY2hpbGRyZW4gaGF2ZSB0aGUgZm9jdXMsIHdlIG5l
ZWQgdG8gCisgICAgICAgIC8vIGNsZWFyIGl0IHRvIHByZXZlbnQgdGhlIHdlYiB2aWV3IHdpbmRv
dyBmcm9tIGJlaW5nIGZvY3VzZWQgYmVjYXVzZSB0aGF0IGNhbgorICAgICAgICAvLyB0cmlnZ2Vy
IGEgbGF5b3V0IHdoaWxlIHRoZSBwbHVnaW4gZWxlbWVudCBpcyBiZWluZyBkZXRhY2hlZC4KKyAg
ICAgICAgSFdORCBmb2N1c2VkV2luZG93ID0gOjpHZXRGb2N1cygpOworICAgICAgICBpZiAocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBmb2N1c2VkV2luZG93IHx8IDo6SXNDaGlsZChwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCBmb2N1c2VkV2luZG93KSkKKyAgICAgICAgICAgIDo6U2V0Rm9jdXMo
MCk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2
aXNpYmxlKQoreworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSA9PSB2aXNpYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7CisKKyAg
ICBpZiAoaXNTZWxmVmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAg
ICAgaWYgKHZpc2libGUpCisgICAgICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCksIFNXX1NIT1dOQSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFNob3dXaW5kb3co
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1dfSElERSk7CisgICAgfQorfQorCit2b2lkIFBsdWdp
blZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICgh
bV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEluIHRoZSBHVEsgcG9ydCB3
ZSBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIGRvbid0IHdhbnQgdG8gdXNlIHRoZSB3
aW5kb3cKKyAgICAvLyBjb29yZGluYXRlcy4KKyMgaWYgUExBVEZPUk0oR1RLKQorICAgIEludFBv
aW50IHAgPSByZWN0LmxvY2F0aW9uKCk7CisjIGVsc2UKKyAgICBJbnRQb2ludCBwID0gZG93bmNh
c3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigp
KTsKKyMgZW5kaWYKKyAgICBtX25wV2luZG93LnggPSBwLngoKTsKKyAgICBtX25wV2luZG93Lnkg
PSBwLnkoKTsKKworICAgIG1fbnBXaW5kb3cud2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgbV9u
cFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworCisgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9
IHJlY3QuaGVpZ2h0KCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBt
X25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPnNldHdpbmRvdykgeworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2lu
ZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihm
YWxzZSk7CisKKyAgICAgICAgbV9oYXZlQ2FsbGVkU2V0V2luZG93ID0gdHJ1ZTsKKworICAgICAg
ICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NF
UlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisKKyAgICAgICAgV05EUFJPQyBjdXJyZW50V25k
UHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwg
R1dMUF9XTkRQUk9DKTsKKyAgICAgICAgaWYgKGN1cnJlbnRXbmRQcm9jICE9IFBsdWdpblZpZXdX
bmRQcm9jKQorICAgICAgICAgICAgbV9wbHVnaW5XbmRQcm9jID0gKFdORFBST0MpU2V0V2luZG93
TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MsIChMT05HX1BUUilQ
bHVnaW5WaWV3V25kUHJvYyk7CisgICAgfQorfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRs
ZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBj
aGFyKiBidWYpCit7CisgICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChm
aWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVu
YW1lLnN1YnN0cmluZyg4KTsKKworICAgIC8vIEdldCBmaWxlIGluZm8KKyAgICBXSU4zMl9GSUxF
X0FUVFJJQlVURV9EQVRBIGF0dHJzOworICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4VyhmaWxl
bmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgR2V0RmlsZUV4SW5m
b1N0YW5kYXJkLCAmYXR0cnMpID09IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9G
T1VORDsKKworICAgIGlmIChhdHRycy5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVf
RElSRUNUT1JZKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBI
QU5ETEUgZmlsZUhhbmRsZSA9IENyZWF0ZUZpbGVXKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBGSUxFX1JFQURfREFUQSwgRklMRV9TSEFSRV9SRUFELCAw
LCBPUEVOX0VYSVNUSU5HLCAwLCAwKTsKKyAgICAKKyAgICBpZiAoZmlsZUhhbmRsZSA9PSBJTlZB
TElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwor
CisgICAgYnVmZmVyLnJlc2l6ZShhdHRycy5uRmlsZVNpemVMb3cpOworCisgICAgRFdPUkQgYnl0
ZXNSZWFkOworICAgIGludCByZXR2YWwgPSBSZWFkRmlsZShmaWxlSGFuZGxlLCBidWZmZXIuZGF0
YSgpLCBhdHRycy5uRmlsZVNpemVMb3csICZieXRlc1JlYWQsIDApOworCisgICAgQ2xvc2VIYW5k
bGUoZmlsZUhhbmRsZSk7CisKKyAgICBpZiAocmV0dmFsID09IDAgfHwgYnl0ZXNSZWFkICE9IGF0
dHJzLm5GaWxlU2l6ZUxvdykKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwor
CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRm
b3JtR2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUsIHZvaWQqLCBOUEVycm9yKikKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5W
YXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBz
d2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7Cisg
ICAgICAgICAgICBIV05EKiB3ID0gcmVpbnRlcnByZXRfY2FzdDxIV05EKj4odmFsdWUpOworICAg
ICAgICAgICAgKncgPSB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KHBhcmVudCgpID8gcGFyZW50
KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkgOiAwKTsKKyAgICAgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOiB7CisgICAgICAg
ICAgICBOUEJvb2wqIGZsYWcgPSByZWludGVycHJldF9jYXN0PE5QQm9vbCo+KHZhbHVlKTsKKyAg
ICAgICAgICAgICpmbGFnID0gVFJVRTsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19F
UlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKG1faXNXaW5kb3dl
ZCkgeworICAgICAgICBSRUNUIGludmFsaWRSZWN0ID0geyByZWN0LngoKSwgcmVjdC55KCksIHJl
Y3QubWF4WCgpLCByZWN0Lm1heFkoKSB9OworICAgICAgICA6OkludmFsaWRhdGVSZWN0KHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksICZpbnZhbGlkUmVjdCwgZmFsc2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBp
ZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSBy
ZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaWYgKG1faXNXaW5k
b3dlZCkgeworICAgICAgICBSRUNUIGludmFsaWRSZWN0ID0geyByLngoKSwgci55KCksIHIubWF4
WCgpLCByLm1heFkoKSB9OworICAgICAgICBJbnZhbGlkYXRlUmVjdChwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCAmaW52YWxpZFJlY3QsIEZBTFNFKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
bV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRl
KSkgeworICAgICAgICAgICAgbV9pbnZhbGlkUmVjdHMuYXBwZW5kKHIpOworICAgICAgICAgICAg
aWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1faW52
YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAwMSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgaW52YWxpZGF0ZVJlY3Qocik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6Omlu
dmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQoreworICAgIGlmIChtX2lzV2luZG93ZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIFJFQ1QgcjsKKworICAgIGlmIChHZXRSZ25Cb3gocmVn
aW9uLCAmcikgPT0gMCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoci5sZWZ0LCByLnRvcCksIEludFNp
emUoci5yaWdodC1yLmxlZnQsIHIuYm90dG9tLXIudG9wKSk7CisgICAgaW52YWxpZGF0ZVJlY3Qo
cmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQoreworICAgIGlmICht
X2lzV2luZG93ZWQpCisgICAgICAgIDo6VXBkYXRlV2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpOworICAgIGVsc2UKKyAgICAgICAgOjpVcGRhdGVXaW5kb3cod2luZG93SGFuZGxlRm9yUGFn
ZUNsaWVudChwYXJlbnQoKSA/IHBhcmVudCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpIDogMCkpOworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQorewor
ICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0
YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAg
ICAgIHJlZ2lzdGVyUGx1Z2luVmlldygpOworICAgICAgICBzZXRVcE9mZnNjcmVlblBhaW50aW5n
SG9va3MoaG9va2VkQmVnaW5QYWludCwgaG9va2VkRW5kUGFpbnQpOworCisgICAgICAgIERXT1JE
IGZsYWdzID0gV1NfQ0hJTEQ7CisgICAgICAgIGlmIChpc1NlbGZWaXNpYmxlKCkpCisgICAgICAg
ICAgICBmbGFncyB8PSBXU19WSVNJQkxFOworCisgICAgICAgIEhXTkQgcGFyZW50V2luZG93SGFu
ZGxlID0gd2luZG93SGFuZGxlRm9yUGFnZUNsaWVudChtX3BhcmVudEZyYW1lLT52aWV3KCktPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOworICAgICAgICBIV05EIHdpbmRvdyA9
IDo6Q3JlYXRlV2luZG93RXgoMCwga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWUsIDAsIGZsYWdz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgcGFy
ZW50V2luZG93SGFuZGxlLCAwLCBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpLCAwKTsKKworI2lm
IE9TKFdJTkRPV1MpICYmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgbV93aW5kb3cgPSB3aW5kb3c7
CisjZWxzZQorICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCh3aW5kb3cpOworI2VuZGlmCisKKyAg
ICAgICAgLy8gQ2FsbGluZyBTZXRXaW5kb3dMb25nUHRyQSBoZXJlIG1ha2VzIHRoZSB3aW5kb3cg
cHJvYyBBU0NJSSwgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYXQgbGVhc3QKKyAgICAgICAgLy8gdGhl
IFNob2Nrd2F2ZSBEaXJlY3RvciBwbHVnLWluLgorI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZf
NjQpCisgICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwg
R1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpRGVmV2luZG93UHJvY0EpOworI2Vsc2UKKyAgICAgICAg
OjpTZXRXaW5kb3dMb25nUHRyQShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQywg
KExPTkcpRGVmV2luZG93UHJvY0EpOworI2VuZGlmCisgICAgICAgIFNldFByb3AocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSwga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSwgdGhpcyk7CisKKyAgICAgICAg
bV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgICAgICBtX25wV2luZG93
LndpbmRvdyA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBXaW5k
b3cud2luZG93ID0gMDsKKyAgICB9CisKKyAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKKworICAg
IGlmICghbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNl
dFdpbmRvd0NhbGwpKQorICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkK
K3sKKyAgICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIERlc3Ryb3lXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgc2V0UGxhdGZv
cm1QbHVnaW5XaWRnZXQoMCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IFBsdWdpblZpZXc6OnNu
YXBzaG90KCkKK3sKKyNpZiAhUExBVEZPUk0oR1RLKSAmJiAhVVNFKFdJTkdESSkKKyAgICBhdXRv
IGhkYyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKKworICAgIGlm
ICghbV9pc1dpbmRvd2VkKSB7CisgICAgICAgIC8vIEVuYWJsZSB3b3JsZCB0cmFuc2Zvcm1zLgor
ICAgICAgICBTZXRHcmFwaGljc01vZGUoaGRjLmdldCgpLCBHTV9BRFZBTkNFRCk7CisKKyAgICAg
ICAgWEZPUk0gdHJhbnNmb3JtOworICAgICAgICBHZXRXb3JsZFRyYW5zZm9ybShoZGMuZ2V0KCks
ICZ0cmFuc2Zvcm0pOworCisgICAgICAgIC8vIFdpbmRvd2xlc3MgcGx1Zy1pbnMgYXNzdW1lIHRo
YXQgdGhleSdyZSBkcmF3aW5nIG9udG8gdGhlIHZpZXcncyBEQy4KKyAgICAgICAgLy8gVHJhbnNs
YXRlIHRoZSBjb250ZXh0IHNvIHRoYXQgdGhlIHBsdWctaW4gZHJhd3MgYXQgKDAsIDApLgorICAg
ICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5j
b250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKS5sb2NhdGlvbigpOworICAgICAgICB0cmFuc2Zv
cm0uZUR4ID0gLXBvc2l0aW9uLngoKTsKKyAgICAgICAgdHJhbnNmb3JtLmVEeSA9IC1wb3NpdGlv
bi55KCk7CisgICAgICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYy5nZXQoKSwgJnRyYW5zZm9ybSk7
CisgICAgfQorCisgICAgdm9pZCogYml0czsKKyAgICBCaXRtYXBJbmZvIGJtcCA9IEJpdG1hcElu
Zm86OmNyZWF0ZUJvdHRvbVVwKGZyYW1lUmVjdCgpLnNpemUoKSk7CisgICAgYXV0byBoYm1wID0g
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZibXAsIERJQl9SR0JfQ09MT1JT
LCAmYml0cywgMCwgMCkpOworCisgICAgSEJJVE1BUCBoYm1wT2xkID0gc3RhdGljX2Nhc3Q8SEJJ
VE1BUD4oU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcC5nZXQoKSkpOworCisgICAgcGFpbnRJ
bnRvVHJhbnNmb3JtZWRDb250ZXh0KGhkYy5nZXQoKSk7CisKKyAgICBTZWxlY3RPYmplY3QoaGRj
LmdldCgpLCBoYm1wT2xkKTsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGhibXAu
Z2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL25wYXBpLmNw
cCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvbnBhcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDkw
YTUyYjdhMWU3Yzk2ZThkZjRkODk5YmNmODAxOTQ4ZWZmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL25wYXBpLmNwcApAQCAtMCwwICsxLDIwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAibnBy
dW50aW1lX2ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBUaGUg
cGx1Z2luIHZpZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBvZiB0aGUgaW5zdGFuY2UsLiBTb21ldGlt
ZXMsIHBsdWctaW5zIHdpbGwgY2FsbCBhbiBpbnN0YW5jZS1zcGVjaWZpYyBmdW5jdGlvbgorLy8g
d2l0aCBhIE5VTEwgaW5zdGFuY2UuIFRvIHdvcmthcm91bmQgdGhpcywgY2FsbCB0aGUgbGFzdCBw
bHVnLWluIHZpZXcgdGhhdCBtYWRlIGEgY2FsbCB0byBhIHBsdWctaW4uCisvLyBDdXJyZW50bHks
IHRoZSBjdXJyZW50IHBsdWctaW4gdmlldyBpcyBvbmx5IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQ
bHVnaW5WaWV3OjpzdGFydC4KKy8vIFRoaXMgc3BlY2lmaWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFz
aCBhbmQgU2hvY2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQX05ldywgdGhleSBjYWxsIE5QTl9Vc2Vy
YWdlbnQgd2l0aCBhIE5VTEwgaW5zdGFuY2UuCitzdGF0aWMgUGx1Z2luVmlldyogcGx1Z2luVmll
d0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFu
Y2UtPm5kYXRhKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3Rh
bmNlLT5uZGF0YSk7CisgICAgcmV0dXJuIFBsdWdpblZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCk7
Cit9CisKK3ZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzJfdCBzaXplKQoreworICAgIHJldHVybiBt
YWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQoreworICAgIGZy
ZWUocHRyKTsKK30KKwordWludDMyX3QgTlBOX01lbUZsdXNoKHVpbnQzMl90KQoreworICAgIC8v
IERvIG5vdGhpbmcKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBOUE5fUmVsb2FkUGx1Z2lucyhO
UEJvb2wgcmVsb2FkUGFnZXMpCit7CisgICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMocmVsb2FkUGFn
ZXMpOworfQorCitOUEVycm9yIE5QTl9SZXF1ZXN0UmVhZChOUFN0cmVhbSosIE5QQnl0ZVJhbmdl
KikKK3sKKyAgICByZXR1cm4gTlBFUlJfU1RSRUFNX05PVF9TRUVLQUJMRTsKK30KKworTlBFcnJv
ciBOUE5fR2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbm90aWZ5RGF0
YSk7Cit9CisKK05QRXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5nZXRVUkwodXJsLCB0YXJnZXQpOworfQorCitOUEVycm9yIE5QTl9Qb3N0
VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90
aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
cG9zdFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEpOwor
fQorCitOUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wg
ZmlsZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9z
dFVSTCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUpOworfQorCitOUEVycm9yIE5QTl9OZXdT
dHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwg
TlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQsIHN0cmVhbSk7Cit9CisKK2ludDMyX3Qg
TlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBsZW4sIHZv
aWQqIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+d3JpdGUoc3RyZWFtLCBsZW4sIGJ1ZmZlcik7Cit9CisKK05QRXJyb3IgTlBOX0Rlc3Ryb3lT
dHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7
CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmRlc3Ryb3lTdHJl
YW0oc3RyZWFtLCByZWFzb24pOworfQorCitjb25zdCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBp
bnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKTsKKworICAgICBpZiAoIXZpZXcpCisgICAgICAgICByZXR1cm4gUGx1Z2luVmll
dzo6dXNlckFnZW50U3RhdGljKCk7CisgCisgICAgcmV0dXJuIHZpZXctPnVzZXJBZ2VudCgpOwor
fQorCit2b2lkIE5QTl9TdGF0dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQor
eworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnN0YXR1cyhtZXNzYWdlKTsK
K30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJlY3QqIGludmFs
aWRSZWN0KQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpOworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAvLyBOU1BsdWdpbldyYXBwZXIs
IGEgcGx1Z2luIHdyYXBwZXIgYmluYXJ5IHRoYXQgYWxsb3dzIHJ1bm5pbmcgMzItYml0IHBsdWdp
bnMKKyAgICAvLyBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyB0eXBpY2FsbHkgdXNlZCBpbiBYMTEs
IHdpbGwgc29tZXRpbWVzIGdpdmUgdXMgYSBudWxsIE5QUCBoZXJlLgorICAgIGlmICghdmlldykK
KyAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgdmlldy0+aW52YWxpZGF0ZVJlY3QoaW52YWxp
ZFJlY3QpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBS
ZWdpb24gaW52YWxpZFJlZ2lvbikKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT5pbnZhbGlkYXRlUmVnaW9uKGludmFsaWRSZWdpb24pOworfQorCit2b2lkIE5QTl9Gb3Jj
ZVJlZHJhdyhOUFAgaW5zdGFuY2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+Zm9yY2VSZWRyYXcoKTsKK30KKworTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3Rh
bmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgUGx1Z2luVmll
dyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAgICAgaWYgKCF2
aWV3KQorICAgICAgICAgcmV0dXJuIFBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKHZhcmlhYmxl
LCB2YWx1ZSk7CisKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30KKworTlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQ
IGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c2V0VmFsdWUodmFyaWFibGUsIHZh
bHVlKTsKK30KKwordm9pZCogTlBOX0dldEphdmFFbnYoKQoreworICAgIC8vIFVuc3VwcG9ydGVk
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFApCit7CisgICAg
Ly8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBOUE5fUHVzaFBvcHVwc0Vu
YWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKQoreworICAgIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnB1c2hQb3B1cHNFbmFibGVkU3RhdGUoZW5hYmxlZCk7
Cit9CisKK3ZvaWQgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UpCit7Cisg
ICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9wUG9wdXBzRW5hYmxlZFN0YXRl
KCk7Cit9CisKK2V4dGVybiAiQyIgdHlwZWRlZiB2b2lkIFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1
bmN0aW9uKHZvaWQqKTsKK3ZvaWQgTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbChOUFAgaW5zdGFu
Y2UsIFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1bmN0aW9uIGZ1bmMsIHZvaWQqIHVzZXJEYXRhKQor
eworICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUgb25seSBkaWZmZXJzIGZyb20gTWFpblRo
cmVhZEZ1bmN0aW9uIGJ5IGJlaW5nIGV4dGVybiAiQyIsIHdoaWNoIGRvZXNuJ3QgYWZmZWN0IGNh
bGxpbmcgY29udmVudGlvbiBvbiBhbnkgY29tcGlsZXJzIHdlIHVzZS4KKyAgICBQbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS5zY2hlZHVsZUNhbGwoaW5zdGFuY2UsIHJlaW50
ZXJwcmV0X2Nhc3Q8UGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6TWFpblRocmVhZEZ1bmN0aW9u
Kj4oZnVuYyksIHVzZXJEYXRhKTsKK30KKworTlBFcnJvciBOUE5fR2V0VmFsdWVGb3JVUkwoTlBQ
IGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFy
KiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPmdldFZhbHVlRm9yVVJMKHZhcmlhYmxlLCB1cmwsIHZhbHVlLCBsZW4p
OworfQorCitOUEVycm9yIE5QTl9TZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZh
cmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50
MzJfdCBsZW4pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PnNldFZhbHVlRm9yVVJMKHZhcmlhYmxlLCB1cmwsIHZhbHVlLCBsZW4pOworfQorCitOUEVycm9y
IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBwcm90
b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUs
IGNvbnN0IGNoYXIqIHJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQzMl90KiB1bGVuLCBjaGFy
KiogcGFzc3dvcmQsIHVpbnQzMl90KiBwbGVuKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9y
SW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRBdXRoZW50aWNhdGlvbkluZm8ocHJvdG9jb2wsIGhvc3Qs
IHBvcnQsIHNjaGVtZSwgcmVhbG0sIHVzZXJuYW1lLCB1bGVuLCBwYXNzd29yZCwgcGxlbik7Cit9
CisKK05QRXJyb3IgTlBOX1BvcFVwQ29udGV4dE1lbnUoTlBQIGluc3RhbmNlLCBOUE1lbnUqIG1l
bnUpCit7CisgICAgVU5VU0VEX1BBUkFNKGluc3RhbmNlKTsKKyAgICBVTlVTRURfUEFSQU0obWVu
dSk7CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvRW1iZWRkZWRXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmgKaW5kZXggYTUyNzZiZjU3NDg2ZmFj
MGExMGVkMGEyMmVkNWZiMDhjYWJlZmQ4NS4uZjY0N2IzZTFjYzk3NzIzNTRjODU2NzA3NWQyYjY3
NTEwY2Y4OTNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
RW1iZWRkZWRXaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9F
bWJlZGRlZFdpZGdldC5oCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpZm5kZWYgRW1iZWRkZWRXaWRn
ZXRfaAogI2RlZmluZSBFbWJlZGRlZFdpZGdldF9oCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3Lmgi
CiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpblZpZXcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmNwcAppbmRleCAxYjM2MWIwYTY2YjI4YzE3NTJhNDE3OWEwZmFlNjBiYTYwZDU5ZDUw
Li43NmZkZDA5ZWQ0NmE0MTI2ZGIzZDhiOWJhMzczNTYzZmVjZGZhOGQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5jcHAKQEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgIldlYlBsYXRmb3JtU3RyYXRl
Z2llcy5oIgogCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VHcm91cC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db29raWVKYXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdp
bkRhdGFiYXNlLmg+CiAjaWYgVVNFKENGTkVUV09SSykKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1J
bnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1l
LmNwcAppbmRleCA4MTQwODBiYTQwODAxNjRmNmU5NWIxMWM3YzIxYzNmNzk5Njk2MGJkLi45Mzdl
NzkzZjQxZThiZDBmZjI2NzljMDc0NzExMzViMjEwOGM3ZjVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUu
Y3BwCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiRE9NQ29yZUNsYXNzZXMuaCIKICNpbmNs
dWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJNYXJzaGFsbGluZ0hlbHBl
cnMuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcu
aCIKICNpbmNsdWRlICJXZWJBY3Rpb25Qcm9wZXJ0eUJhZy5oIgogI2luY2x1ZGUgIldlYkNocm9t
ZUNsaWVudC5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKQEAgLTg1LDggKzg3LDYgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5
Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUGx1Z2luRGF0YWJhc2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpblZpZXcu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BvbGljeUNoZWNrZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1ByaW50Q29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdC93
aW4vV2ViVmlldy5jcHAKaW5kZXggYTY3NWJmYWYzYmU3NjMwNjcyMTgwODJkMTA5MWQyNWE5YjUw
NjhlYy4uZjA2ZWY2NGI3MmE1ODZhODI5N2IyZjVmYTEwY2RhOWUxY2E4Yjc2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4v
V2ViVmlldy5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJET01Db3JlQ2xhc3Nlcy5o
IgogI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJNYXJz
aGFsbGluZ0hlbHBlcnMuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNs
dWRlICJTb2Z0TGlua2luZy5oIgogI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCkBAIC0xMjcs
OCArMTI5LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1XaGVlbEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
bHVnaW5EYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhYmFzZS5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUGx1Z2luVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1By
b2dyZXNzVHJhY2tlci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bs
dWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAKaW5kZXggYTk2ODU2MThm
NDQ2ZGUzYTk1MDQ3Yjc5YWM5MGVkMTU4M2JmYzEyNi4uNWY1NDA5ZmU0YTExYjU4Y2FmMGVmMDBm
ZWNjOGE0YzIxMzhiZDQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bs
dWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXguY3BwCkBAIC0zMiw3ICsz
Miw2IEBACiAjaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAKICNpbmNsdWRlICJOZXRzY2Fw
ZVBsdWdpbk1vZHVsZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9GaWxlU3lzdGVtLmg+CiAKICNpZiBQTEFURk9STShHVEspCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244375</attachid>
            <date>2015-01-09 14:54:03 -0800</date>
            <delta_ts>2015-01-11 08:40:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140133-20150109145408.patch</filename>
            <type>text/plain</type>
            <size>498300</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWVlNTJkZmMxNjVjZmM2
NzM5MWM3MzVjZmU0MWU5ODlmNmNhYjdhYy4uZjAzYzVjMjdhZDM5ZGM1YjU0Y2FhMzQ0MzNlZDJh
NTlhZTkwNDgxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0aGUgV2lu
ZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
OgorCisyMDE1LTAxLTA2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisK
ICAgICAgICAgVHJ5IHRvIGZpeCB0aGUgV2luZG93cyBidWlsZC4KIAogICAgICAgICAqIFdlYkNv
cmUudmN4cHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5MDg5NTNj
YWYyZTQzN2Q4NjI4OTNjNjQ4NTQ5MGYzODMyNTQ3MWZmLi4zYmFiZTM0MmE0MjVmNDMxNjgyY2Yy
ZGJhYzVhMTE5MWJhOWQyOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1IEBACiAyMDE1LTAxLTA2
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0
aGUgV2luZG93cyBvbmx5IHBsdWctaW4gY29kZSB0byBXZWJLaXQvd2luCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDAxMzMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC52Y3hwcm9qL1dlYktp
dC9XZWJLaXQudmN4cHJvajoKKyAgICAgICAgKiBXZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0
LnZjeHByb2ouZmlsdGVyczoKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlkZXIK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEyNgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cKaW5kZXggNjNhNWNjNjg5NGY4NmU0N2YxYmU4YjhiOWJjMGM4NjgwMTli
NjdhZS4uNzAyMjc4YWI2NmRlYmMzOTU4ZWU5ODBjZjg3ZTI1NDE0YjAzZDgyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0No
YW5nZUxvZwpAQCAtMSw1ICsxLDMxMCBAQAogMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCisgICAgICAgIE1vdmUgdGhlIFdpbmRvd3Mgb25seSBwbHVn
LWluIGNvZGUgdG8gV2ViS2l0L3dpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQwMTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbHVnaW5zL1BhaW50SG9va3MuYXNtOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGFpbnRIb29rcy5hc20uCisgICAgICAgICogUGx1Z2lu
cy9QbHVnaW5EYXRhYmFzZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6UGx1
Z2luRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxl
ZFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cmVmcmVz
aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6cGx1Z2luRm9yTUlNRVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpmaW5kUGx1Z2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmdldERlbGV0ZWRQbHVnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnJlbW92ZURp
c2FibGVkUGx1Z2luRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6YWRk
RGlzYWJsZWRQbHVnaW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpk
ZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJh
c2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZWFk
VVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OndyaXRlVVRGOFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnVwZGF0ZVBlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6c2V0UGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGFiYXNlOjpwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luRGF0YWJhc2U6OnNldFBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbkRhdGFiYXNlOjpwbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZVdpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjphZGRQbHVnaW5Q
YXRoc0Zyb21SZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6Z2V0
UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVmVyc2lv
blN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlVmVyc2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6YWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3Jl
OjphZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6YWRk
SmF2YVBsdWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpzYWZhcmlQbHVnaW5zRGly
ZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3Rvcmll
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVj
dG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5EZWJ1Zy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnByZXR0
eU5hbWVGb3JEcmF3aW5nTW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvckV2
ZW50TW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OnByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUpOgorICAgICAgICAqIFBsdWdpbnMv
UGx1Z2luRGVidWcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGVidWcuaC4KKyAgICAgICAgKiBQbHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW46On5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vzc1F1ZXVl
ZE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6
bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjphbGxvY2F0ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWVzc2FnZVRocm90dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNzYWdlKToKKyAgICAgICAgKiBQ
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaC4KKyAgICAgICAg
KiBQbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2th
Z2U6On5QbHVnaW5QYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmZy
ZWVMaWJyYXJ5U29vbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmcmVlTGli
cmFyeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6Y29tcGFy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnVubG9hZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjp1bmxvYWRXaXRob3V0U2h1dGRvd24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlOjpjcmVhdGVQYWNrYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZTo6ZGV0ZXJtaW5lUXVpcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmRl
dGVybWluZU1vZHVsZVZlcnNpb25Gcm9tRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0TGlzdEZyb21WYXJpYW50QXJncyk6CisgICAgICAgIChXZWJDb3JlOjptYWtlU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOUE5f
SW52b2tlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luUGFja2FnZTo6ZW5zdXJlUGx1Z2luTG9hZGVkKToKKyAgICAgICAgKiBQbHVnaW5zL1BsdWdp
blBhY2thZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFj
a2FnZS5oLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6
OmZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OnBhcmVudERpcmVj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjptb2R1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblBhY2thZ2U6Om1pbWVUb0Rlc2NyaXB0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjptaW1lVG9FeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
OjpwbHVnaW5GdW5jcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpxdWlya3Mp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6dmVyc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmdWxsTUlNRURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blBhY2thZ2VIYXNoOjplcXVhbCk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5QYWNrYWdlV2lu
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmVyc2lvbkluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2U6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24pOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luUXVp
cmtTZXQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtT
ZXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblF1aXJrU2V0OjpQbHVnaW5RdWlya1NldCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5RdWlya1NldDo6YWRkKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblF1aXJrU2V0Ojpjb250YWlucyk6CisgICAgICAgICogUGx1Z2lucy9QbHVnaW5T
dHJlYW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJl
YW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6c3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5TdHJlYW06OlBsdWdpblN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJl
YW06On5QbHVnaW5TdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6bGFzdE1vZGlmaWVkRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OnN0YXJ0U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6b3duZXJGb3JT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblN0cmVhbTo6ZGVsaXZlckRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5TdHJlYW06OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblN0cmVhbTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luU3RyZWFtOjp3YW50
c0FsbFN0cmVhbXMpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luU3RyZWFtLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luU3RyZWFtQ2xpZW50Ojp+UGx1Z2luU3RyZWFtQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblN0cmVhbUNsaWVudDo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5TdHJlYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5TdHJlYW06OnNldExvYWRNYW51YWxseSk6CisgICAgICAgICogUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmll
dy5jcHAuCisgICAgICAgIChXZWJDb3JlOjppbnN0YW5jZU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNl
dEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpmcmFtZVJlY3RzQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
dGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXRDdXJyZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpjdXJy
ZW50UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVVVEY4U3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBlcmZvcm1SZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNjaGVkdWxlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VVUkwpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6Z2V0VVJMTm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpwb3N0VVJMTm90aWZ5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBvc3RVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6bmV3U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRlc3Ryb3lTdHJlYW0p
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmludmFsaWRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnB1
c2hQb3B1cHNFbmFibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmFyZVBv
cHVwc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0SmF2YVNjcmlw
dFBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpucE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OlBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9jdXNQbHVnaW5F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6c2V0Q2FsbGluZ1BsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppc0Nh
bGxpbmdQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydHNXaXRoQmxhbmtMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2F0aW9u
QWZ0ZXJGaXJzdEJsYW5rTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRU9MKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGFuZGxlUG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZh
bGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50U3Rh
dGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjprZWVwQWxpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogUGx1Z2lucy9Q
bHVnaW5WaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblJlcXVlc3Q6OlBsdWdpblJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUmVxdWVzdDo6ZnJhbWVMb2FkUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5SZXF1ZXN0Ojpub3RpZnlEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblJlcXVlc3Q6OnNlbmROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luUmVxdWVzdDo6c2hvdWxkQWxsb3dQb3B1cHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTWFudWFsTG9hZGVyOjp+UGx1Z2luTWFudWFsTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnN0
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdGF0dXMpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwYXJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbHVnaW5zUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjptaW1l
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cmwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6cGx1Z2luV25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpwbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXRQbGF0Zm9ybVBsdWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjp0b1BsdWdp
blZpZXcpOgorICAgICAgICAqIFBsdWdpbnMvUGx1Z2luVmlld1dpbi5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcC4KKyAgICAgICAg
KHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aG9va2VkQmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpob29r
ZWRFbmRQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpob29rKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFVwT2Zmc2NyZWVuUGFpbnRpbmdIb29rcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWdpc3Rl
clBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlld1du
ZFByb2MpOgorICAgICAgICAoV2ViQ29yZTo6aXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRlbnRzVG9OYXRpdmVXaW5kb3cpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6d25kUHJvYyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludElu
dG9UcmFuc2Zvcm1lZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFp
bnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBs
YXRmb3JtR2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGxh
dGZvcm1HZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnNuYXBzaG90KToKKyAgICAgICAgKiBQbHVnaW5zL25wYXBpLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwLgorICAgICAgICAocGx1Z2luVmlld0Zvcklu
c3RhbmNlKToKKyAgICAgICAgKE5QTl9NZW1BbGxvYyk6CisgICAgICAgIChOUE5fTWVtRnJlZSk6
CisgICAgICAgIChOUE5fTWVtRmx1c2gpOgorICAgICAgICAoTlBOX1JlbG9hZFBsdWdpbnMpOgor
ICAgICAgICAoTlBOX1JlcXVlc3RSZWFkKToKKyAgICAgICAgKE5QTl9HZXRVUkxOb3RpZnkpOgor
ICAgICAgICAoTlBOX0dldFVSTCk6CisgICAgICAgIChOUE5fUG9zdFVSTE5vdGlmeSk6CisgICAg
ICAgIChOUE5fUG9zdFVSTCk6CisgICAgICAgIChOUE5fTmV3U3RyZWFtKToKKyAgICAgICAgKE5Q
Tl9Xcml0ZSk6CisgICAgICAgIChOUE5fRGVzdHJveVN0cmVhbSk6CisgICAgICAgIChOUE5fVXNl
ckFnZW50KToKKyAgICAgICAgKE5QTl9TdGF0dXMpOgorICAgICAgICAoTlBOX0ludmFsaWRhdGVS
ZWN0KToKKyAgICAgICAgKE5QTl9JbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKE5QTl9Gb3Jj
ZVJlZHJhdyk6CisgICAgICAgIChOUE5fR2V0VmFsdWUpOgorICAgICAgICAoTlBOX1NldFZhbHVl
KToKKyAgICAgICAgKE5QTl9HZXRKYXZhRW52KToKKyAgICAgICAgKE5QTl9HZXRKYXZhUGVlcik6
CisgICAgICAgIChOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZSk6CisgICAgICAgIChOUE5fUG9w
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKE5QTl9QbHVnaW5UaHJlYWRBc3luY0NhbGwp
OgorICAgICAgICAoTlBOX0dldFZhbHVlRm9yVVJMKToKKyAgICAgICAgKE5QTl9TZXRWYWx1ZUZv
clVSTCk6CisgICAgICAgIChOUE5fR2V0QXV0aGVudGljYXRpb25JbmZvKToKKyAgICAgICAgKE5Q
Tl9Qb3BVcENvbnRleHRNZW51KToKKworMjAxNS0wMS0wNiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIEFkZCBhIFdlYktpdDEgZGF0YWJhc2UgcHJvdmlk
ZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDEy
NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc3MzBlOWE3NDI4YjM4ZjU2YjJmNjJlYjIxZWQ5
MGMxM2IyZWUzMzYuLmUxZDY0YmRhNjU2NTYyOGQ0ZGJmN2MyZjcyODlkOGUzMDQxOTJmMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjQyLDkgKzIyNDIsNyBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGx1Z2lucy9ET01QbHVnaW4uY3BwCiAgICAgcGx1Z2lucy9ET01QbHVnaW5BcnJh
eS5jcHAKICAgICBwbHVnaW5zL1BsdWdpbkRhdGEuY3BwCi0gICAgcGx1Z2lucy9QbHVnaW5EZWJ1
Zy5jcHAKICAgICBwbHVnaW5zL1BsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuY3BwCi0gICAgcGx1
Z2lucy9QbHVnaW5TdHJlYW0uY3BwCiAKICAgICByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNw
cAogICAgIHJlbmRlcmluZy9CaWRpUnVuLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggNGY3NjY5MzY0MjBlZTBjMDM1ZGVhMTk4M2Ex
NDc3NzMwOThhYWEwOS4uNWZhN2IzZGI4NjQyOWZjOGE1NTQyYmJhZGY3YTkxZmE3NTdjODU4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBA
IC0xNzc1NCwxOCArMTc3NTQsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1xET01NaW1lVHlwZUFycmF5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcRE9NUGx1Z2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcRE9NUGx1Z2luQXJyYXkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1
Z2luc1xucGFwaS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRhdGEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVn
aW5EYXRhYmFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRlYnVnLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1
Z2luTWFpblRocmVhZFNjaGVkdWxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5TdHJlYW0uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5WaWV3LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsdWdpbnNcd2luXFBsdWdpbkRhdGFiYXNlV2luLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1x3aW5cUGx1Z2luUGFja2FnZVdpbi5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5WaWV3
V2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbGxJbk9uZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdmdcU1ZHRm9udEZhY2VFbGVtZW50
LmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgpAQCAtMjEwMzEsMTUgKzIxMDIxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBs
dWdpbnNcbnBmdW5jdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcbnBydW50aW1lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBs
dWdpbkRhdGEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGF0YWJhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
RGVidWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luTWFp
blRocmVhZFNjaGVkdWxlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2lu
c1xQbHVnaW5QYWNrYWdlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblF1aXJrU2V0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblN0cmF0ZWd5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5z
XFBsdWdpblN0cmVhbS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQ
bHVnaW5WaWV3LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXHdpblxQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxzdmdcQ29sb3JEaXN0YW5jZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cc3Zn
XFNWR0FFbGVtZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZjk1OWI2MzRlM2UxNjFhZGY3
MDZhNGYwMzA3Y2YxMzYzNTQ3Mzk4Mi4uMjIzMDg0NjM2NWJjNDdjOWIzY2E2OGFlZWM4MTIxZDVh
ZmY1MGVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNDU2OSw0MiArNDU2OSwxMiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xET01QbHVnaW5BcnJheS5jcHAiPgogICAgICAgPEZp
bHRlcj5wbHVnaW5zPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbHVnaW5zXG5wYXBpLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luRGF0YS5jcHAiPgogICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpbkRh
dGFiYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGVidWcuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVy
LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luUGFja2FnZS5jcHAiPgot
ICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblN0cmVhbS5jcHAiPgotICAgICAgPEZp
bHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2lu
czwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGx1Z2luc1x3aW5cUGx1Z2luRGF0YWJhc2VXaW4uY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGx1Z2lu
c1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIj4KLSAgICAgIDxG
aWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblBhY2thZ2VXaW4uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpblZpZXdXaW4uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luc1x3aW48L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHN2Z1xTVkdBbGxJbk9uZS5jcHAiPgogICAgICAgPEZpbHRlcj5y
ZW5kZXJpbmdcc3ZnPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xMTYxMywzMyArMTE1
ODMsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YS5o
Ij4KICAgICAgIDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIj4KLSAgICAg
IDxGaWx0ZXI+cGx1Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccGx1Z2luc1xQbHVnaW5EZWJ1Zy5oIj4KLSAgICAgIDxGaWx0ZXI+cGx1
Z2luczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGx1Z2luc1xQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyLmgiPgogICAgICAgPEZpbHRlcj5w
bHVnaW5zPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwbHVnaW5zXFBsdWdpblBhY2thZ2UuaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdp
bnNcUGx1Z2luUXVpcmtTZXQuaCI+Ci0gICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2lu
U3RyYXRlZ3kuaCI+CiAgICAgICA8RmlsdGVyPnBsdWdpbnM8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsdWdpbnNcUGx1Z2luU3RyZWFtLmgi
PgotICAgICAgPEZpbHRlcj5wbHVnaW5zPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbHVnaW5zXFBsdWdpblZpZXcuaCI+Ci0gICAgICA8Rmls
dGVyPnBsdWdpbnM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsdWdpbnNcd2luXFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCI+Ci0gICAg
ICA8RmlsdGVyPnBsdWdpbnNcd2luPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxzdmdcQ29sb3JEaXN0YW5jZS5oIj4KICAgICAgIDxGaWx0ZXI+
cmVuZGVyaW5nXHN2ZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZApp
bmRleCAwOTQ0YmNjZjEyMTI1NzRkOGIzZDdlZjg5MmRkOGYyYzU5NWZiZjZjLi41MjViOTQwYjgz
ZGI0NDEyNjNhZDUxMzI2YzU0NzUyNDI5YzEyYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZApAQCAtNzks
NiArNzksNyBAQCB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5ccGFnZVxzY3JvbGxpbmdcKi5o
IiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZQogeGNvcHkgL3kgL2QgIiVQcm9qZWN0
RGlyJS4uXHBhZ2VcYW5pbWF0aW9uXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1
ZGVcV2ViQ29yZSIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxwYWdlXHdpblwqLmgiICIl
Q09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVBy
b2plY3REaXIlLi5cYnJpZGdlXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVc
V2ViQ29yZSIKK3hjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxicmlkZ2VcY1wqLmgiICIlQ09O
RklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2pl
Y3REaXIlLi5cYnJpZGdlXGpzY1wqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRl
XFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5ccGx1Z2luc1wqLmgiICIlQ09O
RklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2pl
Y3REaXIlLi5ccGx1Z2luc1x3aW5cKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVk
ZVxXZWJDb3JlIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNjZiMGMz
NDM4NTc3ODViYjY4MzQxMjA4YTA3MzY0M2U1ZjIwMzEwYS4uMDExOGM1MDMxMzk2MGE0ZjU2MmRi
MjE4ZGZlOGE5Mzk0YmZkODdmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CkBAIC05MSw3ICs5MSw2IEBACiAjaW5jbHVkZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKLSNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiUG9saWN5Q2hlY2tlci5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAppbmRleCBkMjcyNDU4Y2EwM2ZiZWM1NzE2MjNlZTRhYTFiMjNkYmVjMzNiNzA1Li4xOTkzOGQy
MzE1ZGFiYzg4OGY5NDFmOGM5MWMwYjBlZjI3ODBmYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtMzYsNyArMzYsNiBA
QAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZiYTJjZWUyZGE3MmNhZjE0Yjc1Y2YzNmZhYWQxNGI3NWU1NzQ4NTYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhYmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NzcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0KLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiBQbHVnaW5QYWNrYWdlQnlOYW1lTWFwOwotCi0j
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLXN0YXRpYyBjb25zdCBz
aXplX3QgbWF4aW11bVBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlU2l6ZSA9IDMyNzY4Owot
Ci1zdGF0aWMgYm9vbCBnUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7Ci0K
LVN0cmluZyYgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCkKLXsKLSAgICBERVBS
RUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBjYWNoZVBhdGgsICgpKTsKLSAgICBy
ZXR1cm4gY2FjaGVQYXRoOwotfQotI2VuZGlmCi0KLVBsdWdpbkRhdGFiYXNlOjpQbHVnaW5EYXRh
YmFzZSgpCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICA6
IG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZChmYWxzZSkKLSNlbmRpZgotewotfQot
Ci1QbHVnaW5EYXRhYmFzZSogUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoYm9vbCBw
b3B1bGF0ZSkKLXsKLSAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAwOwotCi0g
ICAgaWYgKCFwbHVnaW5zKSB7Ci0gICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2U7
Ci0KLSAgICAgICAgaWYgKHBvcHVsYXRlKSB7Ci0gICAgICAgICAgICBwbHVnaW5zLT5zZXRQbHVn
aW5EaXJlY3RvcmllcyhQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkp
OwotICAgICAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHBsdWdpbnM7Ci19Ci0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgaWYgKG1pbWVUeXBlLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZE1JTUVU
eXBlcy5jb250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIC8vIE5v
IHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNo
aW5nIGFnYWluCi0gICAgcmV0dXJuIChyZWZyZXNoKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVz
LmNvbnRhaW5zKG1pbWVUeXBlKSk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OmFkZEV4dHJh
UGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KQotewotICAgIG1fcGx1Z2lu
RGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSk7Ci0gICAgcmVmcmVzaCgpOwotfQotCi1ib29s
IFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKLXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X01FVEFEQVRBX0NBQ0hFKQotICAgIGlmICghbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9h
ZGVkKQotICAgICAgICBsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGUoKTsKLSNlbmRpZgotICAg
IGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX3BsdWdpbnMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQ7Ci0gICAgICAgIGdl
dERlbGV0ZWRQbHVnaW5zKHBsdWdpbnNUb1VubG9hZCk7Ci0KLSAgICAgICAgLy8gVW5sb2FkIHBs
dWdpbnMKLSAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwbHVnaW5zVG9V
bmxvYWQuZW5kKCk7Ci0gICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBy
ZW1vdmUoaXQtPmdldCgpKTsKLQotICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNU
b1VubG9hZC5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgSGFzaFNldDxTdHJpbmc+IHBhdGhzOwot
ICAgIGdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhwYXRocyk7Ci0KLSAgICBIYXNoTWFwPFN0
cmluZywgdGltZV90PiBwYXRoc1dpdGhUaW1lczsKLQotICAgIC8vIFdlIHNob3VsZCBvbmx5IHNr
aXAgdW5jaGFuZ2VkIGZpbGVzIGlmIHdlIGRpZG4ndCByZW1vdmUgYW55IHBsdWdpbnMgYWJvdmUu
IElmIHdlIGRpZCByZW1vdmUKLSAgICAvLyBhbnkgcGx1Z2lucywgd2UgbmVlZCB0byBsb29rIGF0
IGV2ZXJ5IHBsdWdpbiBmaWxlIHNvIHRoYXQsIGUuZy4sIGlmIHRoZSB1c2VyIGhhcyB0d28gdmVy
c2lvbnMKLSAgICAvLyBvZiBSZWFsUGxheWVyIGluc3RhbGxlZCBhbmQganVzdCByZW1vdmVkIHRo
ZSBuZXdlciBvbmUsIHdlJ2xsIHBpY2sgdXAgdGhlIG9sZGVyIG9uZS4KLSAgICBib29sIHNob3Vs
ZFNraXBVbmNoYW5nZWRGaWxlcyA9ICFwbHVnaW5TZXRDaGFuZ2VkOwotCi0gICAgSGFzaFNldDxT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXRoc0VuZCA9IHBhdGhzLmVuZCgpOwotICAgIGZvciAo
SGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhdGhzLmJlZ2luKCk7IGl0ICE9
IHBhdGhzRW5kOyArK2l0KSB7Ci0gICAgICAgIHRpbWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAg
IGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoKml0LCBsYXN0TW9kaWZpZWQpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcGF0aHNXaXRoVGltZXMuYWRkKCppdCwgbGFzdE1v
ZGlmaWVkKTsKLQotICAgICAgICAvLyBJZiB0aGUgcGF0aCdzIHRpbWVzdGFtcCBoYXNuJ3QgY2hh
bmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHJhbiByZWZyZXNoKCksIHdlIGRvbid0IGhhdmUg
dG8gZG8gYW55dGhpbmcuCi0gICAgICAgIGlmIChzaG91bGRTa2lwVW5jaGFuZ2VkRmlsZXMgJiYg
bV9wbHVnaW5QYXRoc1dpdGhUaW1lcy5nZXQoKml0KSA9PSBsYXN0TW9kaWZpZWQpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoUmVmUHRyPFBsdWdpblBhY2thZ2U+IG9sZFBh
Y2thZ2UgPSBtX3BsdWdpbnNCeVBhdGguZ2V0KCppdCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
c2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzIHx8IG9sZFBhY2thZ2UtPmxhc3RNb2RpZmllZCgpICE9
IGxhc3RNb2RpZmllZCk7Ci0gICAgICAgICAgICByZW1vdmUob2xkUGFja2FnZS5nZXQoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IFBsdWdp
blBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoKml0LCBsYXN0TW9kaWZpZWQpOwotICAgICAgICBpZiAo
cGFja2FnZSAmJiBhZGQocGFja2FnZS5yZWxlYXNlKCkpKQotICAgICAgICAgICAgcGx1Z2luU2V0
Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2FjaGUgYWxsIHRoZSBwYXRocyB3ZSBm
b3VuZCB3aXRoIHRoZWlyIHRpbWVzdGFtcHMgZm9yIG5leHQgdGltZS4KLSAgICBwYXRoc1dpdGhU
aW1lcy5zd2FwKG1fcGx1Z2luUGF0aHNXaXRoVGltZXMpOwotCi0gICAgaWYgKCFwbHVnaW5TZXRD
aGFuZ2VkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7
Ci0jZW5kaWYKLQotICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOwotCi0gICAgLy8g
UmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCi0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAv
LyBHZXQgTUlNRSB0eXBlcwotICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOwotICAg
ICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0
KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7Ci0gICAgICAgIGZvciAoOyBtYXBfaXQgIT0g
bWFwX2VuZDsgKyttYXBfaXQpCi0gICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRk
KG1hcF9pdC0+a2V5KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotVmVjdG9yPFBs
dWdpblBhY2thZ2UqPiBQbHVnaW5EYXRhYmFzZTo6cGx1Z2lucygpIGNvbnN0Ci17Ci0gICAgVmVj
dG9yPFBsdWdpblBhY2thZ2UqPiByZXN1bHQ7Ci0KLSAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlu
dCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2luQ29tcGFyZShjb25zdCB2b2lkKiBhLCBj
b25zdCB2b2lkKiBiKQotewotICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbkEgPSAqc3RhdGljX2Nh
c3Q8UGx1Z2luUGFja2FnZSogY29uc3QqPihhKTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5C
ID0gKnN0YXRpY19jYXN0PFBsdWdpblBhY2thZ2UqIGNvbnN0Kj4oYik7Ci0KLSAgICByZXR1cm4g
cGx1Z2luQS0+Y29tcGFyZSgqcGx1Z2luQik7Ci19Ci0KLVBsdWdpblBhY2thZ2UqIFBsdWdpbkRh
dGFiYXNlOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAg
IGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU3RyaW5n
IGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7Ci0gICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVkUGx1Z2lu
ID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChrZXkpOwotICAgIGlmIChwcmVmZXJyZWRQbHVnaW4K
LSAgICAgICAgJiYgcHJlZmVycmVkUGx1Z2luLT5pc0VuYWJsZWQoKQotICAgICAgICAmJiBwcmVm
ZXJyZWRQbHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKLSAgICAg
ICAgcmV0dXJuIHByZWZlcnJlZFBsdWdpbjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8UGx1Z2luUGFj
a2FnZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0KLSAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9ICgqaXQpLmdldCgpOwotCi0gICAgICAgIGlmICghcGx1
Z2luLT5pc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChw
bHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpIHsKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgICAgICAgICAgaWYgKCFwbHVnaW4t
PmVuc3VyZVBsdWdpbkxvYWRlZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlm
Ci0gICAgICAgICAgICBwbHVnaW5DaG9pY2VzLmFwcGVuZChwbHVnaW4pOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHBsdWdpbkNob2ljZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHFzb3J0KHBsdWdpbkNob2ljZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUo
KSwgc2l6ZW9mKFBsdWdpblBhY2thZ2UqKSwgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdp
bkNvbXBhcmUpOwotCi0gICAgcmV0dXJuIHBsdWdpbkNob2ljZXNbMF07Ci19Ci0KLVN0cmluZyBQ
bHVnaW5EYXRhYmFzZTo6TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNp
b24pIGNvbnN0Ci17Ci0gICAgaWYgKGV4dGVuc2lvbi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVn
aW5zLmVuZCgpOwotICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICBWZWN0b3I8UGx1Z2luUGFja2Fn
ZSosIDI+IHBsdWdpbkNob2ljZXM7Ci0gICAgSGFzaE1hcDxQbHVnaW5QYWNrYWdlKiwgU3RyaW5n
PiBtaW1lVHlwZUZvclBsdWdpbjsKLQotICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KCEoKml0KS0+aXNFbmFibGVkKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBN
SU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1l
VG9FeHRlbnNpb25zKCkuZW5kKCk7Ci0KLSAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdp
bigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKLSAgICAgICAgICAgIG1pbWVU
eXBlID0gbWltZV9pdC0+a2V5OwotICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcHJlZmVycmVk
UGx1Z2luID0gbV9wcmVmZXJyZWRQbHVnaW5zLmdldChtaW1lVHlwZSk7Ci0gICAgICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnZhbHVlOwotICAgICAg
ICAgICAgYm9vbCBmb3VuZE1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGV4dGVuc2lvbnNbaV0sIGV4dGVuc2lvbikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gKCppdCkuZ2V0KCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHByZWZlcnJlZFBsdWdpbiAmJiBQbHVnaW5QYWNrYWdlOjpl
cXVhbCgqcGx1Z2luLCAqcHJlZmVycmVkUGx1Z2luKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBtaW1lVHlwZTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFf
Q0FDSEUpCi0gICAgICAgICAgICAgICAgICAgIGlmICghcGx1Z2luLT5lbnN1cmVQbHVnaW5Mb2Fk
ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgICAgIHBsdWdpbkNob2ljZXMuYXBwZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICAg
ICAgICAgIG1pbWVUeXBlRm9yUGx1Z2luLmFkZChwbHVnaW4sIG1pbWVUeXBlKTsKLSAgICAgICAg
ICAgICAgICAgICAgZm91bmRNYXBwaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZv
dW5kTWFwcGluZykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCi0gICAgcXNvcnQocGx1Z2luQ2hvaWNlcy5kYXRhKCksIHBsdWdpbkNob2ljZXMuc2l6ZSgp
LCBzaXplb2YoUGx1Z2luUGFja2FnZSopLCBQbHVnaW5EYXRhYmFzZTo6cHJlZmVycmVkUGx1Z2lu
Q29tcGFyZSk7Ci0KLSAgICByZXR1cm4gbWltZVR5cGVGb3JQbHVnaW4uZ2V0KHBsdWdpbkNob2lj
ZXNbMF0pOwotfQotCi1QbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6ZmluZFBsdWdpbihj
b25zdCBVUkwmIHVybCwgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAoIW1pbWVUeXBlLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAg
ICAKLSAgICBTdHJpbmcgZmlsZW5hbWUgPSB1cmwubGFzdFBhdGhDb21wb25lbnQoKTsKLSAgICBp
ZiAoZmlsZW5hbWUuZW5kc1dpdGgoJy8nKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAg
aW50IGV4dGVuc2lvblBvcyA9IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYgKGV4
dGVuc2lvblBvcyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgU3RyaW5nIG1p
bWVUeXBlRm9yRXh0ZW5zaW9uID0gTUlNRVR5cGVGb3JFeHRlbnNpb24oZmlsZW5hbWUuc3Vic3Ry
aW5nKGV4dGVuc2lvblBvcyArIDEpKTsKLSAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4gPSBwbHVn
aW5Gb3JNSU1FVHlwZShtaW1lVHlwZUZvckV4dGVuc2lvbik7Ci0gICAgaWYgKCFwbHVnaW4pIHsK
LSAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgV2lu
ZG93cyBmb3IgdGhlIG1pbWUgdHlwZQotICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBl
eHRlbnNpb24uCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBtaW1lVHlwZSA9
IG1pbWVUeXBlRm9yRXh0ZW5zaW9uOwotICAgIHJldHVybiBwbHVnaW47Ci19Ci0KLXZvaWQgUGx1
Z2luRGF0YWJhc2U6OnNldFByZWZlcnJlZFBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIFBsdWdpblBhY2thZ2UqIHBsdWdpbikKLXsKLSAgICBpZiAoIXBsdWdpbiB8fCBw
bHVnaW4tPm1pbWVUb0V4dGVuc2lvbnMoKS5jb250YWlucyhtaW1lVHlwZSkpCi0gICAgICAgIG1f
cHJlZmVycmVkUGx1Z2lucy5zZXQobWltZVR5cGUubG93ZXIoKSwgcGx1Z2luKTsKLX0KLQotYm9v
bCBQbHVnaW5EYXRhYmFzZTo6ZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoY29uc3QgU3RyaW5n
JiBmaWxlUGF0aCkgY29uc3QKLXsKLSAgICAvLyBTa2lwIHBsdWdpbiBmaWxlcyB0aGF0IGFyZSBk
aXNhYmxlZCBieSBmaWxlbmFtZS4KLSAgICBpZiAobV9kaXNhYmxlZFBsdWdpbkZpbGVzLmNvbnRh
aW5zKHBhdGhHZXRGaWxlTmFtZShmaWxlUGF0aCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gZmlsZUV4aXN0cyhmaWxlUGF0aCk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJh
c2U6OmdldERlbGV0ZWRQbHVnaW5zKFBsdWdpblNldCYgcGx1Z2lucykgY29uc3QKLXsKLSAgICBQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKLSAgICBmb3Ig
KFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKCpp
dCktPnBhdGgoKSkpCi0gICAgICAgICAgICBwbHVnaW5zLmFkZCgqaXQpOwotICAgIH0KLX0KLQot
Ym9vbCBQbHVnaW5EYXRhYmFzZTo6YWRkKFBhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gcHJwUGFj
a2FnZSkKLXsKLSAgICBBU1NFUlRfQVJHKHBycFBhY2thZ2UsIHBycFBhY2thZ2UpOwotCi0gICAg
UmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBwcnBQYWNrYWdlOwotCi0gICAgaWYgKCFt
X3BsdWdpbnMuYWRkKHBhY2thZ2UpLmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIG1fcGx1Z2luc0J5UGF0aC5hZGQocGFja2FnZS0+cGF0aCgpLCBwYWNrYWdlKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6cmVtb3ZlKFBsdWdpblBh
Y2thZ2UqIHBhY2thZ2UpCi17Ci0gICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsKLSAgICBNSU1FVG9F
eHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNp
b25zKCkuZW5kKCk7Ci0gICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGx1
Z2luUGFja2FnZUJ5TmFtZU1hcDo6aXRlcmF0b3IgcGFja2FnZUluTWFwID0gbV9wcmVmZXJyZWRQ
bHVnaW5zLmZpbmQoaXQtPmtleSk7Ci0gICAgICAgIGlmIChwYWNrYWdlSW5NYXAgIT0gbV9wcmVm
ZXJyZWRQbHVnaW5zLmVuZCgpICYmIHBhY2thZ2VJbk1hcC0+dmFsdWUgPT0gcGFja2FnZSkKLSAg
ICAgICAgICAgIG1fcHJlZmVycmVkUGx1Z2lucy5yZW1vdmUocGFja2FnZUluTWFwKTsKLSAgICB9
Ci0KLSAgICBtX3BsdWdpbnMucmVtb3ZlKHBhY2thZ2UpOwotICAgIG1fcGx1Z2luc0J5UGF0aC5y
ZW1vdmUocGFja2FnZS0+cGF0aCgpKTsKLX0KLQotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Y2xlYXIo
KQotewotICAgIG1fcGx1Z2lucy5jbGVhcigpOwotICAgIG1fcGx1Z2luc0J5UGF0aC5jbGVhcigp
OwotICAgIG1fcGx1Z2luUGF0aHNXaXRoVGltZXMuY2xlYXIoKTsKLSAgICBtX3JlZ2lzdGVyZWRN
SU1FVHlwZXMuY2xlYXIoKTsKLSAgICBtX3ByZWZlcnJlZFBsdWdpbnMuY2xlYXIoKTsKLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotICAgIG1fcGVyc2lzdGVudE1l
dGFkYXRhQ2FjaGVJc0xvYWRlZCA9IGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wgUGx1Z2luRGF0
YWJhc2U6OnJlbW92ZURpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQot
ewotICAgIHJldHVybiBtX2Rpc2FibGVkUGx1Z2luRmlsZXMucmVtb3ZlKGZpbGVOYW1lKTsKLX0K
LQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6YWRkRGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZU5hbWUpCi17Ci0gICAgcmV0dXJuIG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5hZGQoZmls
ZU5hbWUpLmlzTmV3RW50cnk7Ci19Ci0KLSNpZiAoIU9TKFdJTkRPV1MpIHx8ICFFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkpCi0vLyBGb3IgU2FmYXJpL1dpbiB0aGUgZm9sbG93aW5nIHRocmVl
IG1ldGhvZHMgYXJlIGltcGxlbWVudGVkCi0vLyBpbiBQbHVnaW5EYXRhYmFzZVdpbi5jcHAsIGJ1
dCBpZiB3ZSBjYW4gdXNlIFdlYkNvcmUgY29uc3RydWN0cwotLy8gZm9yIHRoZSBsb2dpYyB3ZSBz
aG91bGQgcGVyaGFwcyBtb3ZlIGl0IGhlcmUgdW5kZXIgWFBfV0lOPwotCi1WZWN0b3I8U3RyaW5n
PiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKLXsKLSAgICBWZWN0
b3I8U3RyaW5nPiBwYXRoczsKLQotICAgIC8vIEFkZCBwYXRocyBzcGVjaWZpYyB0byBlYWNoIHBs
YXRmb3JtCi0jaWYgZGVmaW5lZChYUF9VTklYKQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9
IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0gICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygi
Ly5tb3ppbGxhL3BsdWdpbnMiKSk7Ci0gICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsK
LQotICAgIHVzZXJQbHVnaW5QYXRoID0gaG9tZURpcmVjdG9yeVBhdGgoKTsKLSAgICB1c2VyUGx1
Z2luUGF0aC5hcHBlbmQoU3RyaW5nKCIvLm5ldHNjYXBlL3BsdWdpbnMiKSk7Ci0gICAgcGF0aHMu
YXBwZW5kKHVzZXJQbHVnaW5QYXRoKTsKLQotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvYnJv
d3Nlci9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxh
L3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2ZpcmVmb3gvcGx1Z2lucyIp
OwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9icm93c2VyLXBsdWdpbnMiKTsKLSAgICBw
YXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dzZXItcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVu
ZCgiL3Vzci9saWIvbW96aWxsYS9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xv
Y2FsL25ldHNjYXBlL3BsdWdpbnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi9vcHQvbW96aWxsYS9w
bHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvb3B0L21vemlsbGEvbGliL3BsdWdpbnMiKTsK
LSAgICBwYXRocy5hcHBlbmQoIi9vcHQvbmV0c2NhcGUvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFw
cGVuZCgiL29wdC9uZXRzY2FwZS9jb21tdW5pY2F0b3IvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFw
cGVuZCgiL3Vzci9saWIvbmV0c2NhcGUvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vz
ci9saWIvbmV0c2NhcGUvcGx1Z2lucy1saWJjNSIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9s
aWIvbmV0c2NhcGUvcGx1Z2lucy1saWJjNiIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2
NC9uZXRzY2FwZS9wbHVnaW5zIik7Ci0gICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L21vemls
bGEvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbnNicm93c2VyL3BsdWdp
bnMiKTsKLSAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvbnNicm93c2VyL3BsdWdpbnMiKTsK
LQotICAgIFN0cmluZyBtb3pIb21lKGdldGVudigiTU9aSUxMQV9IT01FIikpOwotICAgIG1vekhv
bWUuYXBwZW5kKCIvcGx1Z2lucyIpOwotICAgIHBhdGhzLmFwcGVuZChtb3pIb21lKTsKLQotICAg
IFZlY3RvcjxTdHJpbmc+IG1velBhdGhzOwotICAgIFN0cmluZyBtb3pQYXRoKGdldGVudigiTU9a
X1BMVUdJTl9QQVRIIikpOwotICAgIG1velBhdGguc3BsaXQoVUNoYXIoJzonKSwgLyogYWxsb3dF
bXB0eUVudHJpZXMgKi8gZmFsc2UsIG1velBhdGhzKTsKLSAgICBwYXRocy5hcHBlbmRWZWN0b3Io
bW96UGF0aHMpOwotI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgU3RyaW5nIHVzZXJQbHVn
aW5QYXRoID0gaG9tZURpcmVjdG9yeVBhdGgoKTsKLSAgICB1c2VyUGx1Z2luUGF0aC5hcHBlbmQo
U3RyaW5nKCIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlucyIpKTsKLSAgICBwYXRocy5hcHBlbmQo
dXNlclBsdWdpblBhdGgpOwotICAgIHBhdGhzLmFwcGVuZCgiL0xpYnJhcnkvSW50ZXJuZXQgUGx1
Zy1JbnMiKTsKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQotICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0
aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7Ci0gICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmlu
ZygiXFxBcHBsaWNhdGlvbiBEYXRhXFxNb3ppbGxhXFxwbHVnaW5zIikpOwotICAgIHBhdGhzLmFw
cGVuZCh1c2VyUGx1Z2luUGF0aCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBwYXRoczsKLX0KLQot
Ym9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJiBwYXRoKQotewotICAgIFN0cmluZyBwcmVmZXJyZWRQYXRoID0gaG9tZURpcmVjdG9yeVBh
dGgoKTsKLQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChT
dHJpbmcoIi8ubW96aWxsYS9wbHVnaW5zIikpOwotI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0g
ICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3RyaW5nKCIvTGlicmFyeS9JbnRlcm5ldCBQbHVnLUlu
cyIpKTsKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQotICAgIHByZWZlcnJlZFBhdGguYXBwZW5kKFN0
cmluZygiXFxBcHBsaWNhdGlvbiBEYXRhXFxNb3ppbGxhXFxwbHVnaW5zIikpOwotI2VuZGlmCi0K
LSAgICAvLyBUT0RPOiBXZSBzaG91bGQgbm9ybWFsaXplIHRoZSBwYXRoIGJlZm9yZSBkb2luZyBh
IGNvbXBhcmlzb24uCi0gICAgcmV0dXJuIHBhdGggPT0gcHJlZmVycmVkUGF0aDsKLX0KLQotdm9p
ZCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgcGF0aHMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2Fz
ZSBpbnNlbnNpdGl2ZSBzZXQuCi0gICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsK
LQotI2lmIGRlZmluZWQoWFBfVU5JWCkKLSAgICBTdHJpbmcgZmlsZU5hbWVGaWx0ZXIoIiouc28i
KTsKLSNlbHNlCi0gICAgU3RyaW5nIGZpbGVOYW1lRmlsdGVyKCIiKTsKLSNlbmRpZgotCi0gICAg
VmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRpcnNFbmQgPSBtX3BsdWdpbkRpcmVjdG9y
aWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGRJdCA9
IG1fcGx1Z2luRGlyZWN0b3JpZXMuYmVnaW4oKTsgZEl0ICE9IGRpcnNFbmQ7ICsrZEl0KSB7Ci0g
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHBsdWdpblBhdGhzID0gbGlzdERpcmVjdG9yeSgqZEl0LCBm
aWxlTmFtZUZpbHRlcik7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBw
bHVnaW5zRW5kID0gcGx1Z2luUGF0aHMuZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIHBJdCA9IHBsdWdpblBhdGhzLmJlZ2luKCk7IHBJdCAhPSBwbHVn
aW5zRW5kOyArK3BJdCkgewotICAgICAgICAgICAgaWYgKCFmaWxlRXhpc3RzQW5kSXNOb3REaXNh
YmxlZCgqcEl0KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgcGF0
aHMuYWRkKCpwSXQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gIU9TKFdJTkRP
V1MpCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQotCi1zdGF0
aWMgdm9pZCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBm
aWxlLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IDA7
Ci0gICAgc2l6ZV90IGJ1ZmZlckNhcGFjaXR5ID0gMTAyNDsKLSAgICBidWZmZXIucmVzaXplKGJ1
ZmZlckNhcGFjaXR5KTsKLQotICAgIGRvIHsKLSAgICAgICAgYnVmZmVyU2l6ZSArPSByZWFkRnJv
bUZpbGUoZmlsZSwgYnVmZmVyLmRhdGEoKSArIGJ1ZmZlclNpemUsIGJ1ZmZlckNhcGFjaXR5IC0g
YnVmZmVyU2l6ZSk7Ci0gICAgICAgIGlmIChidWZmZXJTaXplID09IGJ1ZmZlckNhcGFjaXR5KSB7
Ci0gICAgICAgICAgICBpZiAoYnVmZmVyQ2FwYWNpdHkgPCBtYXhpbXVtUGVyc2lzdGVudFBsdWdp
bk1ldGFkYXRhQ2FjaGVTaXplKSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyQ2FwYWNpdHkgKj0g
MjsKLSAgICAgICAgICAgICAgICBidWZmZXIucmVzaXplKGJ1ZmZlckNhcGFjaXR5KTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLmNsZWFyKCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0gd2hpbGUgKHRydWUpOwotCi0gICAgYnVmZmVyLnNocmluayhidWZm
ZXJTaXplKTsKLX0KLQotc3RhdGljIGJvb2wgcmVhZFVURjhTdHJpbmcoU3RyaW5nJiByZXN1bHRT
dHJpbmcsIGNoYXIqJiBzdGFydCwgY29uc3QgY2hhciogZW5kKQotewotICAgIGlmIChzdGFydCA+
PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBsZW4gPSBzdHJsZW4oc3Rh
cnQpOwotICAgIHJlc3VsdFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgoc3RhcnQsIGxlbik7Ci0g
ICAgc3RhcnQgKz0gbGVuICsgMTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9v
bCByZWFkVGltZSh0aW1lX3QmIHJlc3VsdFRpbWUsIGNoYXIqJiBzdGFydCwgY29uc3QgY2hhciog
ZW5kKQotewotICAgIGlmIChzdGFydCArIHNpemVvZih0aW1lX3QpID49IGVuZCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIHN0cmVhbSBpcyBub3QgbmVjZXNzYXJ5IGFsaWdu
ZWQuCi0gICAgbWVtY3B5KCZyZXN1bHRUaW1lLCBzdGFydCwgc2l6ZW9mKHRpbWVfdCkpOwotICAg
IHN0YXJ0ICs9IHNpemVvZih0aW1lX3QpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBjb25zdCBjaGFyIHNjaGVtYVZlcnNpb24gPSAnMSc7Ci1zdGF0aWMgY29uc3QgY2hhciBwZXJz
aXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lW10gPSAiUGx1Z2luTWV0YWRhdGFDYWNo
ZS5iaW4iOwotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpsb2FkUGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGUoKQotewotICAgIGlmICghaXNQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKSB8fCBw
ZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlOwotICAgIFN0cmluZyBhYnNvbHV0ZUNhY2hl
UGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBh
dGgoKSwgcGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZSk7Ci0gICAgZmlsZSA9
IG9wZW5GaWxlKGFic29sdXRlQ2FjaGVQYXRoLCBPcGVuRm9yUmVhZCk7Ci0KLSAgICBpZiAoIWlz
SGFuZGxlVmFsaWQoZmlsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcmsgY2FjaGUg
YXMgbG9hZGVkIHJlZ2FyZGxlc3Mgb2Ygc3VjY2VzcyBvciBmYWlsdXJlLiBJZgotICAgIC8vIHRo
ZXJlJ3MgZXJyb3IgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCB0cnkgdG8gbG9hZCBpdCBhbnltb3Jl
LgotICAgIG1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCA9IHRydWU7Ci0KLSAgICBW
ZWN0b3I8Y2hhcj4gZmlsZUNvbnRlbnRzOwotICAgIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZp
bGUoZmlsZSwgZmlsZUNvbnRlbnRzKTsKLSAgICBjbG9zZUZpbGUoZmlsZSk7Ci0KLSAgICBpZiAo
ZmlsZUNvbnRlbnRzLnNpemUoKSA8IDIgfHwgZmlsZUNvbnRlbnRzLmZpcnN0KCkgIT0gc2NoZW1h
VmVyc2lvbiB8fCBmaWxlQ29udGVudHMubGFzdCgpICE9ICdcMCcpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgc2NoZW1h
Iik7Ci0gICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgY2hhciogYnVmZmVyUG9zID0gZmlsZUNvbnRlbnRzLmRhdGEoKSAr
IDE7Ci0gICAgY2hhciogZW5kID0gZmlsZUNvbnRlbnRzLmRhdGEoKSArIGZpbGVDb250ZW50cy5z
aXplKCk7Ci0KLSAgICBQbHVnaW5TZXQgY2FjaGVkUGx1Z2luczsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgdGltZV90PiBjYWNoZWRQbHVnaW5QYXRoc1dpdGhUaW1lczsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gY2FjaGVkUGx1Z2luc0J5UGF0aDsKLQotICAgIHdo
aWxlIChidWZmZXJQb3MgPCBlbmQpIHsKLSAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIHRp
bWVfdCBsYXN0TW9kaWZpZWQ7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBTdHJpbmcg
ZGVzYzsKLSAgICAgICAgU3RyaW5nIG1pbWVEZXNjOwotICAgICAgICBpZiAoIShyZWFkVVRGOFN0
cmluZyhwYXRoLCBidWZmZXJQb3MsIGVuZCkKLSAgICAgICAgICAgICAgJiYgcmVhZFRpbWUobGFz
dE1vZGlmaWVkLCBidWZmZXJQb3MsIGVuZCkKLSAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJp
bmcobmFtZSwgYnVmZmVyUG9zLCBlbmQpCi0gICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5n
KGRlc2MsIGJ1ZmZlclBvcywgZW5kKQotICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyht
aW1lRGVzYywgYnVmZmVyUG9zLCBlbmQpKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcmVhZCBwbHVnaW4gbWV0YWRhdGEgY2FjaGU6IGNvcnJ1cHQgZGF0YSIpOwotICAgICAg
ICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTa2lwIG1ldGFkYXRhIHRoYXQgcG9pbnRzIHRvIHBs
dWdpbnMgZnJvbSBkaXJlY3RvcmllcyB0aGF0Ci0gICAgICAgIC8vIGFyZSBub3QgcGFydCBvZiBw
bHVnaW4gZGlyZWN0b3J5IGxpc3QgYW55bW9yZS4KLSAgICAgICAgU3RyaW5nIHBsdWdpbkRpcmVj
dG9yeU5hbWUgPSBkaXJlY3RvcnlOYW1lKHBhdGgpOwotICAgICAgICBpZiAobV9wbHVnaW5EaXJl
Y3Rvcmllcy5maW5kKHBsdWdpbkRpcmVjdG9yeU5hbWUpID09IFdURjo6bm90Rm91bmQpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2Fn
ZSA9IFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2VGcm9tQ2FjaGUocGF0aCwgbGFzdE1vZGlm
aWVkLCBuYW1lLCBkZXNjLCBtaW1lRGVzYyk7Ci0KLSAgICAgICAgaWYgKHBhY2thZ2UgJiYgY2Fj
aGVkUGx1Z2lucy5hZGQocGFja2FnZSkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgY2FjaGVk
UGx1Z2luUGF0aHNXaXRoVGltZXMuYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZS0+bGFzdE1v
ZGlmaWVkKCkpOwotICAgICAgICAgICAgY2FjaGVkUGx1Z2luc0J5UGF0aC5hZGQocGFja2FnZS0+
cGF0aCgpLCBwYWNrYWdlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcGx1Z2lucy5zd2Fw
KGNhY2hlZFBsdWdpbnMpOwotICAgIG1fcGx1Z2luc0J5UGF0aC5zd2FwKGNhY2hlZFBsdWdpbnNC
eVBhdGgpOwotICAgIG1fcGx1Z2luUGF0aHNXaXRoVGltZXMuc3dhcChjYWNoZWRQbHVnaW5QYXRo
c1dpdGhUaW1lcyk7Ci19Ci0KLXN0YXRpYyBib29sIHdyaXRlVVRGOFN0cmluZyhQbGF0Zm9ybUZp
bGVIYW5kbGUgZmlsZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgQ1N0cmluZyB1dGY4
U3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBpbnQgbGVuZ3RoID0gdXRmOFN0cmluZy5sZW5n
dGgoKSArIDE7Ci0gICAgcmV0dXJuIHdyaXRlVG9GaWxlKGZpbGUsIHV0ZjhTdHJpbmcuZGF0YSgp
LCBsZW5ndGgpID09IGxlbmd0aDsKLX0KLQotc3RhdGljIGJvb2wgd3JpdGVUaW1lKFBsYXRmb3Jt
RmlsZUhhbmRsZSBmaWxlLCBjb25zdCB0aW1lX3QmIHRpbWUpCi17Ci0gICAgcmV0dXJuIHdyaXRl
VG9GaWxlKGZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZ0aW1lKSwgc2l6ZW9m
KHRpbWVfdCkpID09IHNpemVvZih0aW1lX3QpOwotfQotCi12b2lkIFBsdWdpbkRhdGFiYXNlOjp1
cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpCi17Ci0gICAgaWYgKCFpc1BlcnNpc3RlbnRN
ZXRhZGF0YUNhY2hlRW5hYmxlZCgpIHx8IHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUFsbERpcmVjdG9yaWVzKHBlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpKTsKLSAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBhdGgg
PSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCks
IHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmlsZW5hbWUpOwotICAgIGRlbGV0ZUZpbGUo
YWJzb2x1dGVDYWNoZVBhdGgpOwotCi0gICAgaWYgKG1fcGx1Z2lucy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlOwotICAgIGZpbGUgPSBv
cGVuRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCwgT3BlbkZvcldyaXRlKTsKLQotICAgIGlmICghaXNI
YW5kbGVWYWxpZChmaWxlKSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIHBs
dWdpbiBtZXRhZGF0YSBjYWNoZSBmb3Igc2F2aW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBjaGFyIGxvY2FsU2NoZW1hVmVyc2lvbiA9IHNjaGVtYVZlcnNpb247Ci0gICAgaWYg
KHdyaXRlVG9GaWxlKGZpbGUsICZsb2NhbFNjaGVtYVZlcnNpb24sIDEpICE9IDEpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3JpdGUgcGx1Z2luIG1ldGFkYXRhIGNhY2hlIHNjaGVt
YSIpOwotICAgICAgICBjbG9zZUZpbGUoZmlsZSk7Ci0gICAgICAgIGRlbGV0ZUZpbGUoYWJzb2x1
dGVDYWNoZVBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Ci0gICAgZm9yIChQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoISh3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPnBhdGgoKSkKLSAg
ICAgICAgICAgICAgJiYgd3JpdGVUaW1lKGZpbGUsICgqaXQpLT5sYXN0TW9kaWZpZWQoKSkKLSAg
ICAgICAgICAgICAgJiYgd3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5uYW1lKCkpCi0gICAg
ICAgICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+ZGVzY3JpcHRpb24oKSkK
LSAgICAgICAgICAgICAgJiYgd3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5mdWxsTUlNRURl
c2NyaXB0aW9uKCkpKSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gd3JpdGUg
cGx1Z2luIG1ldGFkYXRhIHRvIGNhY2hlIik7Ci0gICAgICAgICAgICBjbG9zZUZpbGUoZmlsZSk7
Ci0gICAgICAgICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsb3NlRmlsZShmaWxlKTsKLX0KLQot
Ym9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoKQot
ewotICAgIHJldHVybiBnUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVJc0VuYWJsZWQ7Ci19
Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxl
ZChib29sIGlzRW5hYmxlZCkKLXsKLSAgICBnUGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVJ
c0VuYWJsZWQgPSBpc0VuYWJsZWQ7Ci19Ci0KLVN0cmluZyBQbHVnaW5EYXRhYmFzZTo6cGVyc2lz
dGVudE1ldGFkYXRhQ2FjaGVQYXRoKCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGVyc2lzdGVu
dFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRoKCk7Ci19Ci0KLXZvaWQgUGx1Z2luRGF0YWJhc2U6OnNl
dFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlUGF0aCkKLXsKLSAgICBXZWJDb3JlOjpwZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFD
YWNoZVBhdGgoKSA9IHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aDsKLX0KLSNlbmRpZgotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oIGIvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiZmM0OGVjZGZmNmNmMjI0MzU1OTRmOGFlODUyMzAxYTYyNjNjZjg2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpbkRhdGFiYXNlX2gKLSNkZWZpbmUgUGx1Z2luRGF0
YWJhc2VfaAotCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIGNsYXNzIEVsZW1lbnQ7Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3Mg
SW50U2l6ZTsKLSAgICBjbGFzcyBVUkw7Ci0gICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VDbGllbnQ7
Ci0gICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKLQotICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8
UGx1Z2luUGFja2FnZT4sIFBsdWdpblBhY2thZ2VIYXNoLCBQbHVnaW5QYWNrYWdlSGFzaFRyYWl0
cz4gUGx1Z2luU2V0OwotCi0gICAgY2xhc3MgUGx1Z2luRGF0YWJhc2UgewotICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQbHVnaW5EYXRhYmFzZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luRGF0YWJhc2UoKTsKLQotICAgICAgICAvLyBU
aGUgZmlyc3QgY2FsbCB0byBpbnN0YWxsZWRQbHVnaW5zIGNyZWF0ZXMgdGhlIHBsdWdpbiBkYXRh
YmFzZQotICAgICAgICAvLyBhbmQgYnkgZGVmYXVsdCBwb3B1bGF0ZXMgaXQgd2l0aCB0aGUgcGx1
Z2lucyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4KLSAgICAgICAgLy8gRm9yIHRlc3RpbmcgcHVy
cG9zZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG5vdCBwb3B1bGF0ZSB0aGUgZGF0YWJhc2UKLSAgICAg
ICAgLy8gYXV0b21hdGljYWxseSwgYXMgdGhlIHBsdWdpbnMgbWlnaHQgYWZmZWN0IHRoZSBEUlQg
cmVzdWx0cyBieQotICAgICAgICAvLyB3cml0aW5nIHRvIGEuby4gc3RkZXJyLgotICAgICAgICBz
dGF0aWMgUGx1Z2luRGF0YWJhc2UqIGluc3RhbGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSA9IHRy
dWUpOwotCi0gICAgICAgIGJvb2wgcmVmcmVzaCgpOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0g
ICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcGx1Z2lucygpIGNvbnN0OwotICAgICAgICBi
b29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAg
ICB2b2lkIGFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOwotCi0gICAgICAg
IHN0YXRpYyBib29sIGlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGly
ZWN0b3J5KTsKLSAgICAgICAgc3RhdGljIGludCBwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0
IHZvaWQqLCBjb25zdCB2b2lkKik7Ci0KLSAgICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBsdWdp
bihjb25zdCBVUkwmLCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgUGx1Z2luUGFja2FnZSog
cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIHZvaWQg
c2V0UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1
Z2luUGFja2FnZSogcGx1Z2luKTsKLQotICAgICAgICB2b2lkIHNldFBsdWdpbkRpcmVjdG9yaWVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKLSAgICAgICAgewotICAgICAgICAg
ICAgY2xlYXIoKTsKLSAgICAgICAgICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMgPSBkaXJlY3Rvcmll
czsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgcmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxlKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUpOwotICAgICAgICBib29sIGFkZERpc2FibGVkUGx1Z2luRmls
ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKLSAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+
IGRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVn
aW5EaXJlY3RvcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luRGlyZWN0b3JpZXM7IH0KLQot
ICAgICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNp
b24pIGNvbnN0OwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0g
ICAgICAgIHN0YXRpYyBib29sIGlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCk7Ci0g
ICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChib29s
IGlzRW5hYmxlZCk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgcGVyc2lzdGVudE1ldGFkYXRhQ2Fj
aGVQYXRoKCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hl
UGF0aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCk7Ci0jZW5kaWYK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVz
KEhhc2hTZXQ8U3RyaW5nPiYpIGNvbnN0OwotICAgICAgICB2b2lkIGdldERlbGV0ZWRQbHVnaW5z
KFBsdWdpblNldCYpIGNvbnN0OwotICAgICAgICBib29sIGZpbGVFeGlzdHNBbmRJc05vdERpc2Fi
bGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotCi0gICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0
aGUgcGx1Z2luIHdhcyBhY3R1YWxseSBhZGRlZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVkIGlm
IGl0J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhpc3RpbmcgcGx1Z2luKS4KLSAgICAgICAgYm9vbCBh
ZGQoUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKFBsdWdp
blBhY2thZ2UqKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQot
ICAgICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOwotICAgICAgICB2b2lk
IHVwZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7Ci0jZW5kaWYKLQotICAgICAgICBIYXNo
U2V0PFN0cmluZz4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzOwotICAgICAgICBWZWN0b3I8U3RyaW5n
PiBtX3BsdWdpbkRpcmVjdG9yaWVzOwotICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3Rl
cmVkTUlNRVR5cGVzOwotICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOwotICAgICAgICBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOwotICAg
ICAgICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOwotICAg
ICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJyZWRQ
bHVnaW5zOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAg
ICAgIGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkOwotI2VuZGlmCi0gICAg
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5EZWJ1Zy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZDIzYWU2
NzEzOGFjYWJjNjViNGUzMDBjZjJjZTE3OTgxNDA1MzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EZWJ1
Zy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi0jaWYgIUxPR19ESVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlcnJvclN0cmluZ3NbXSA9IHsKLSAgICAiTm8g
ZXJyb3JzIG9jY3VycmVkLiIsIC8qIE5QRVJSX05PX0VSUk9SICovCi0gICAgIkVycm9yIHdpdGgg
bm8gc3BlY2lmaWMgZXJyb3IgY29kZSBvY2N1cnJlZC4iLCAvKiBOUEVSUl9HRU5FUklDX0VSUk9S
ICovCi0gICAgIkludmFsaWQgaW5zdGFuY2UgcGFzc2VkIHRvIHRoZSBwbHVnLWluLiIsIC8qIE5Q
RVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1IgKi8KLSAgICAiRnVuY3Rpb24gdGFibGUgaW52YWxp
ZC4iLCAvKiBOUEVSUl9JTlZBTElEX0ZVTkNUQUJMRV9FUlJPUiAqLwotICAgICJMb2FkaW5nIG9m
IHBsdWctaW4gZmFpbGVkLiIsIC8qIE5QRVJSX01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAqLwot
ICAgICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIiwgLyogTlBFUlJfT1VUX09GX01FTU9SWV9F
UlJPUiAqLwotICAgICJQbHVnLWluIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZB
TElEX1BMVUdJTl9FUlJPUiAqLwotICAgICJQbHVnLWluIGRpcmVjdG9yeSBtaXNzaW5nIG9yIGlu
dmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRElSX0VSUk9SICovCi0gICAgIlZlcnNp
b25zIG9mIHBsdWctaW4gYW5kIENvbW11bmljYXRvciBkbyBub3QgbWF0Y2guIiwgLyogTlBFUlJf
SU5DT01QQVRJQkxFX1ZFUlNJT05fRVJST1IgKi8KLSAgICAiUGFyYW1ldGVyIG1pc3Npbmcgb3Ig
aW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BBUkFNICovCi0gICAgIlVSTCBtaXNzaW5nIG9y
IGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9VUkwgKi8KLSAgICAiRmlsZSBtaXNzaW5nIG9y
IGludmFsaWQuIiwgLyogTlBFUlJfRklMRV9OT1RfRk9VTkQgKi8KLSAgICAiU3RyZWFtIGNvbnRh
aW5zIG5vIGRhdGEuIiwgLyogTlBFUlJfTk9fREFUQSAqLwotICAgICJTZWVrYWJsZSBzdHJlYW0g
ZXhwZWN0ZWQuIiwgLyogTlBFUlJfU1RSRUFNX05PVF9TRUVLQUJMRSAqLwotICAgICJVbmtub3du
IGVycm9yIGNvZGUiCi19OwotCi0jaWZkZWYgWFBfTUFDT1NYCi1zdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZHJhd2luZ01vZGVsc1tdID0gewotICAgICJOUERyYXdpbmdNb2RlbFF1aWNrRHJhdyIs
Ci0gICAgIk5QRHJhd2luZ01vZGVsQ29yZUdyYXBoaWNzIiwKLSAgICAiTlBEcmF3aW5nTW9kZWxP
cGVuR0wiLAotICAgICJOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb24iCi19OwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZXZlbnRNb2RlbHNbXSA9IHsKLSAgICAiTlBFdmVudE1vZGVsQ2Fy
Ym9uIiwKLSAgICAiTlBFdmVudE1vZGVsQ29jb2EiCi19OwotI2VuZGlmIC8vWFBfTUFDT1NYCi0K
LWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpCi17Ci0gICAg
cmV0dXJuIGVycm9yU3RyaW5nc1tlcnJvcl07Ci19Ci0KLSNpZmRlZiBYUF9NQUNPU1gKLWNvbnN0
IGNoYXIqIHByZXR0eU5hbWVGb3JEcmF3aW5nTW9kZWwoTlBEcmF3aW5nTW9kZWwgZHJhd2luZ01v
ZGVsKQotewotICAgIHJldHVybiBkcmF3aW5nTW9kZWxzW2RyYXdpbmdNb2RlbF07Ci19Ci0KLWNv
bnN0IGNoYXIqIHByZXR0eU5hbWVGb3JFdmVudE1vZGVsKE5QRXZlbnRNb2RlbCBldmVudE1vZGVs
KQotewotICAgIHJldHVybiBldmVudE1vZGVsc1tldmVudE1vZGVsXTsKLX0KLSNlbmRpZiAvL1hQ
X01BQ09TWAotCi1DU3RyaW5nIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2
YXJpYWJsZSkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5WeERpc3Bs
YXk6IHJldHVybiAiTlBOVnhEaXNwbGF5IjsKLSAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHJl
dHVybiAiTlBOVnh0QXBwQ29udGV4dCI7Ci0gICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHJl
dHVybiAiTlBOVm5ldHNjYXBlV2luZG93IjsKLSAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxl
ZEJvb2w6IHJldHVybiAiTlBOVmphdmFzY3JpcHRFbmFibGVkQm9vbCI7Ci0gICAgY2FzZSBOUE5W
YXNkRW5hYmxlZEJvb2w6IHJldHVybiAiTlBOVmFzZEVuYWJsZWRCb29sIjsKLSAgICBjYXNlIE5Q
TlZpc09mZmxpbmVCb29sOiByZXR1cm4gIk5QTlZpc09mZmxpbmVCb29sIjsKLQotICAgIGNhc2Ug
TlBOVnNlcnZpY2VNYW5hZ2VyOiByZXR1cm4gIk5QTlZzZXJ2aWNlTWFuYWdlciAobm90IHN1cHBv
cnRlZCkiOwotICAgIGNhc2UgTlBOVkRPTUVsZW1lbnQ6IHJldHVybiAiTlBOVkRPTUVsZW1lbnQg
KG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QTlZET01XaW5kb3c6IHJldHVybiAiTlBOVkRP
TVdpbmRvdyAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBOVlRvb2xraXQ6IHJldHVybiAi
TlBOVlRvb2xraXQgKG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJl
ZEJvb2w6IHJldHVybiAiTlBOVlN1cHBvcnRzWEVtYmVkQm9vbCAobm90IHN1cHBvcnRlZCkiOwot
Ci0gICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHJldHVybiAiTlBOVldpbmRvd05QT2JqZWN0
IjsKLSAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHJldHVybiAiTlBOVlBsdWdp
bkVsZW1lbnROUE9iamVjdCI7Ci0gICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOiByZXR1
cm4gIk5QTlZTdXBwb3J0c1dpbmRvd2xlc3MiOwotICAgIGNhc2UgTlBOVnByaXZhdGVNb2RlQm9v
bDogcmV0dXJuICJOUE5WcHJpdmF0ZU1vZGVCb29sIjsKLQotI2lmZGVmIFhQX01BQ09TWAotICAg
IGNhc2UgTlBOVnBsdWdpbkRyYXdpbmdNb2RlbDogcmV0dXJuICJOUE5WcGx1Z2luRHJhd2luZ01v
ZGVsIjsKLSNpZm5kZWYgTlBfTk9fUVVJQ0tEUkFXCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNRdWlj
a0RyYXdCb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c1F1aWNrRHJhd0Jvb2wiOwotI2VuZGlmCi0g
ICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlR3JhcGhpY3NCb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0
c0NvcmVHcmFwaGljc0Jvb2wiOwotICAgIGNhc2UgTlBOVnN1cHBvcnRzT3BlbkdMQm9vbDogcmV0
dXJuICJOUE5Wc3VwcG9ydHNPcGVuR0xCb29sIjsKLSAgICBjYXNlIE5QTlZzdXBwb3J0c0NvcmVB
bmltYXRpb25Cb29sOiByZXR1cm4gIk5QTlZzdXBwb3J0c0NvcmVBbmltYXRpb25Cb29sIjsKLSNp
Zm5kZWYgTlBfTk9fQ0FSQk9OCi0gICAgY2FzZSBOUE5Wc3VwcG9ydHNDYXJib25Cb29sOiByZXR1
cm4gIk5QTlZzdXBwb3J0c0NhcmJvbkJvb2wiOwotI2VuZGlmCi0gICAgY2FzZSBOUE5Wc3VwcG9y
dHNDb2NvYUJvb2w6IHJldHVybiAiTlBOVnN1cHBvcnRzQ29jb2FCb29sIjsKLSNlbmRpZgotCi0g
ICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlhYmxlIjsKLSAgICB9Ci19Ci0KLUNTdHJp
bmcgcHJldHR5TmFtZUZvck5QUFZhcmlhYmxlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmFt
ZVN0cmluZzogcmV0dXJuICJOUFBWcGx1Z2luTmFtZVN0cmluZyI7Ci0gICAgY2FzZSBOUFBWcGx1
Z2luRGVzY3JpcHRpb25TdHJpbmc6IHJldHVybiAiTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5n
IjsKLSAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5XaW5k
b3dCb29sIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6IHJldHVybiAiTlBQ
VnBsdWdpblRyYW5zcGFyZW50Qm9vbCI7Ci0KLSAgICBjYXNlIE5QUFZqYXZhQ2xhc3M6IHJldHVy
biAiTlBQVmphdmFDbGFzcyAobm90IHN1cHBvcnRlZCkiOwotICAgIGNhc2UgTlBQVnBsdWdpbldp
bmRvd1NpemU6IHJldHVybiAiTlBQVnBsdWdpbldpbmRvd1NpemUgKG5vdCBzdXBwb3J0ZWQpIjsK
LSAgICBjYXNlIE5QUFZwbHVnaW5UaW1lckludGVydmFsOiByZXR1cm4gIk5QUFZwbHVnaW5UaW1l
ckludGVydmFsIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJs
ZUluc3RhbmNlOiByZXR1cm4gIk5QUFZwbHVnaW5TY3JpcHRhYmxlSW5zdGFuY2UgKG5vdCBzdXBw
b3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxlSUlEOiByZXR1cm4gIk5QUFZw
bHVnaW5TY3JpcHRhYmxlSUlEIChub3Qgc3VwcG9ydGVkKSI7Ci0gICAgY2FzZSBOUFBWamF2YXNj
cmlwdFB1c2hDYWxsZXJCb29sOiByZXR1cm4gIk5QUFZqYXZhc2NyaXB0UHVzaENhbGxlckJvb2wg
KG5vdCBzdXBwb3J0ZWQpIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5LZWVwTGlicmFyeUluTWVtb3J5
OiByZXR1cm4gIk5QUFZwbHVnaW5LZWVwTGlicmFyeUluTWVtb3J5IChub3Qgc3VwcG9ydGVkKSI7
Ci0gICAgY2FzZSBOUFBWcGx1Z2luTmVlZHNYRW1iZWQ6IHJldHVybiAiTlBQVnBsdWdpbk5lZWRz
WEVtYmVkIChub3Qgc3VwcG9ydGVkKSI7Ci0KLSAgICBjYXNlIE5QUFZwbHVnaW5TY3JpcHRhYmxl
TlBPYmplY3Q6IHJldHVybiAiTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCI7Ci0KLSAgICBj
YXNlIE5QUFZmb3JtVmFsdWU6IHJldHVybiAiTlBQVmZvcm1WYWx1ZSAobm90IHN1cHBvcnRlZCki
OwotICAgIGNhc2UgTlBQVnBsdWdpblVybFJlcXVlc3RzRGlzcGxheWVkQm9vbDogcmV0dXJuICJO
UFBWcGx1Z2luVXJsUmVxdWVzdHNEaXNwbGF5ZWRCb29sIChub3Qgc3VwcG9ydGVkKSI7Ci0KLSAg
ICBjYXNlIE5QUFZwbHVnaW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zOiByZXR1cm4gIk5QUFZwbHVn
aW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zIjsKLSAgICBjYXNlIE5QUFZwbHVnaW5DYW5jZWxTcmNT
dHJlYW06IHJldHVybiAiTlBQVnBsdWdpbkNhbmNlbFNyY1N0cmVhbSI7Ci0KLSNpZmRlZiBYUF9N
QUNPU1gKLSAgICBjYXNlIE5QUFZwbHVnaW5EcmF3aW5nTW9kZWw6IHsKLSAgICAgICAgU3RyaW5n
IHJlc3VsdCgiTlBQVnBsdWdpbkRyYXdpbmdNb2RlbCwgIik7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQocHJldHR5TmFtZUZvckRyYXdpbmdNb2RlbChOUERyYXdpbmdNb2RlbCh1aW50cHRyX3QodmFs
dWUpKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0LmxhdGluMSgpOwotICAgIH0KLSAgICBjYXNl
IE5QUFZwbHVnaW5FdmVudE1vZGVsOiB7Ci0gICAgICAgIFN0cmluZyByZXN1bHQoIk5QUFZwbHVn
aW5FdmVudE1vZGVsLCAiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChwcmV0dHlOYW1lRm9yRXZl
bnRNb2RlbChOUEV2ZW50TW9kZWwodWludHB0cl90KHZhbHVlKSkpKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5sYXRpbjEoKTsKLSAgICB9Ci0gICAgY2FzZSBOUFBWcGx1Z2luQ29yZUFuaW1hdGlv
bkxheWVyOiByZXR1cm4gIk5QUFZwbHVnaW5Db3JlQW5pbWF0aW9uTGF5ZXIiOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmCi0KLSAgICBkZWZhdWx0OiByZXR1cm4gIlVu
a25vd24gdmFyaWFibGUiOwotICAgIH0KLX0KLQotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJM
VmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUpCi17Ci0gICAgc3dpdGNoICh2YXJpYWJs
ZSkgewotICAgIGNhc2UgTlBOVVJMVkNvb2tpZTogcmV0dXJuICJOUE5VUkxWQ29va2llIjsKLSAg
ICBjYXNlIE5QTlVSTFZQcm94eTogcmV0dXJuICJOUE5VUkxWUHJveHkiOwotICAgIGRlZmF1bHQ6
IHJldHVybiAiVW5rbm93biB2YXJpYWJsZSI7Ci0gICAgfQotfQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5EZWJ1Zy5oIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
ZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Njc0ODVlOTA5MjhhMDVmY2Jk
YTgyOTQwYTczOTY3MDk4NzFkYjYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGVidWcuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUGx1Z2luRGVidWdfaAotI2RlZmluZSBQbHVn
aW5EZWJ1Z19oCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAibnBydW50aW1lX2lu
dGVybmFsLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIExPR19O
UEVSUk9SKGVycikgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lu
cywgIiVzXG4iLCBwcmV0dHlOYW1lRm9yTlBFcnJvcihlcnIpKQotI2RlZmluZSBMT0dfUExVR0lO
X05FVF9FUlJPUigpIExPR19WRVJCT1NFKFBsdWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBw
cm9ibGVtcyB3aXRoIG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIg
cHJvYmxlbXMuXG4iKQotCi0jaWYgIUxPR19ESVNBQkxFRAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNvbnN0IGNoYXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOwotCi1D
U3RyaW5nIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7Ci1D
U3RyaW5nIHByZXR0eU5hbWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUpOwotQ1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFy
aWFibGUgdmFyaWFibGUpOwotCi0jaWZkZWYgWFBfTUFDT1NYCi1jb25zdCBjaGFyKiBwcmV0dHlO
YW1lRm9yRHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCk7Ci1jb25zdCBj
aGFyKiBwcmV0dHlOYW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCk7Ci0j
ZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUxPR19ESVNBQkxF
RAotCi0jZW5kaWYgLy8gUGx1Z2luRGVidWdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
UGFja2FnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMDk5ODgwNDk3MWNh
ZTVhYmE2M2NkNmNkYzEzNDVmZTdjMjQwZTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQ3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UGx1Z2luUGFja2FnZS5oIgotCi0jaW5jbHVkZSAiY191dGlsaXR5LmgiCi0jaW5jbHVkZSAiSWRl
bnRpZmllclJlcC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJO
UF9qc29iamVjdC5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1
Z2luRGVidWcuaCIKLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSAicnVudGltZV9y
b290LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgot
I2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24u
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5QYWNr
YWdlOjp+UGx1Z2luUGFja2FnZSgpCi17Ci0gICAgLy8gVGhpcyBkZXN0cnVjdG9yIGdldHMgY2Fs
bGVkIGR1cmluZyByZWZyZXNoKCkgaWYgUGx1Z2luRGF0YWJhc2UncwotICAgIC8vIFBsdWdpblNl
dCBoYXNoIGlzIGFscmVhZHkgcG9wdWxhdGVkLCBhcyBpdCByZW1vdmVzIGl0ZW1zIGZyb20KLSAg
ICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2FsbGluZyB0aGUgZGVzdHJ1Y3RvciBvbiBhIGxvYWRlZCBw
bHVnLWluIG9mCi0gICAgLy8gY291cnNlIHdvdWxkIGNhdXNlIGEgY3Jhc2gsIHNvIHdlIGNoZWNr
IHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3ZQotICAgIC8vIEFTU0VSVC4KLSAgICAvLyBGSVhNRTog
VGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGZpeCB0aGlzLgotICAgIGlmICghbV9s
b2FkQ291bnQpCi0gICAgICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotICAgIGVsc2UKLSAg
ICAgICAgdW5sb2FkKCk7Ci0KLSAgICBBU1NFUlQoIW1faXNMb2FkZWQpOwotfQotCi12b2lkIFBs
dWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5U29vbigpCi17Ci0gICAgQVNTRVJUKCFtX2ZyZWVMaWJy
YXJ5VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICBBU1NFUlQo
IW1fbG9hZENvdW50KTsKLQotICAgIG1fZnJlZUxpYnJhcnlUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKCkKLXsKLSAg
ICBBU1NFUlQobV9tb2R1bGUpOwotICAgIC8vIERvIG5vdGhpbmcgaWYgdGhlIG1vZHVsZSBnb3Qg
bG9hZGVkIGFnYWluIG1lYW53aGlsZQotICAgIGlmICghbV9sb2FkQ291bnQpIHsKLSAgICAgICAg
dW5sb2FkTW9kdWxlKG1fbW9kdWxlKTsKLSAgICAgICAgbV9tb2R1bGUgPSAwOwotICAgIH0KLX0K
LQotCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21w
YXJlVG8pIGNvbnN0Ci17Ci0gICAgLy8gU29ydCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxl
IGluc3RhbmNlcyBmaXJzdC4KLSAgICBib29sIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFx
dWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsK
LSAgICBib29sIEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCku
Y29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgaWYg
KEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyAhPSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCi0g
ICAgICAgIHJldHVybiBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPyAtMSA6IDE7Ci0KLSAgICAv
LyBTb3J0IHBsdWctaW5zIGluIGEgcHJlZmVycmVkIHBhdGggZmlyc3QuCi0gICAgYm9vbCBBaXNJ
blByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRp
cmVjdG9yeShwYXJlbnREaXJlY3RvcnkoKSk7Ci0gICAgYm9vbCBCaXNJblByZWZlcnJlZERpcmVj
dG9yeSA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb21wYXJl
VG8ucGFyZW50RGlyZWN0b3J5KCkpOwotICAgIGlmIChBaXNJblByZWZlcnJlZERpcmVjdG9yeSAh
PSBCaXNJblByZWZlcnJlZERpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIEFpc0luUHJlZmVycmVk
RGlyZWN0b3J5ID8gLTEgOiAxOwotCi0gICAgaW50IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0Zjgo
KS5kYXRhKCksIGNvbXBhcmVUby5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKGRpZmYp
Ci0gICAgICAgIHJldHVybiBkaWZmOwotCi0gICAgZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihj
b21wYXJlVG8udmVyc2lvbigpKTsKLSAgICBpZiAoZGlmZikKLSAgICAgICAgcmV0dXJuIGRpZmY7
Ci0KLSAgICByZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNv
bXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotUGx1Z2luUGFj
a2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFz
dE1vZGlmaWVkKQotICAgIDogbV9pc0VuYWJsZWQodHJ1ZSkKLSAgICAsIG1faXNMb2FkZWQoZmFs
c2UpCi0gICAgLCBtX2xvYWRDb3VudCgwKQotICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX21v
ZHVsZVZlcnNpb24oMCkKLSAgICAsIG1fbW9kdWxlKDApCi0gICAgLCBtX2xhc3RNb2RpZmllZChs
YXN0TW9kaWZpZWQpCi0gICAgLCBtX2ZyZWVMaWJyYXJ5VGltZXIoKnRoaXMsICZQbHVnaW5QYWNr
YWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZWQpCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9N
RVRBREFUQV9DQUNIRSkKLSAgICAsIG1faW5mb0lzRnJvbUNhY2hlKHRydWUpCi0jZW5kaWYKLXsK
LSAgICBtX2ZpbGVOYW1lID0gcGF0aEdldEZpbGVOYW1lKG1fcGF0aCk7Ci0gICAgbV9wYXJlbnRE
aXJlY3RvcnkgPSBtX3BhdGgubGVmdChtX3BhdGgubGVuZ3RoKCkgLSBtX2ZpbGVOYW1lLmxlbmd0
aCgpIC0gMSk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkKCkKLXsKLSAgICBpZiAo
IW1faXNMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgtLW1fbG9hZENvdW50ID4g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0g
ICAgbV9OUFBfU2h1dGRvd24oKTsKLSNlbmRpZgotCi0gICAgdW5sb2FkV2l0aG91dFNodXRkb3du
KCk7Ci19Ci0KLXZvaWQgUGx1Z2luUGFja2FnZTo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKLXsK
LSAgICBpZiAoIW1faXNMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9s
b2FkQ291bnQpOwotICAgIEFTU0VSVChtX21vZHVsZSk7Ci0KLSAgICAvLyA8cmRhcjovLzU1MzA1
MTk+OiBDcmFzaCB3aGVuIGNsb3NpbmcgdGFiIHdpdGggcGRmIGZpbGUgKFJlYWRlciA3IG9ubHkp
Ci0gICAgLy8gSWYgdGhlIHBsdWdpbiBoYXMgc3ViY2xhc3NlZCBpdHMgcGFyZW50IHdpbmRvdywg
YXMgd2l0aCBSZWFkZXIgNywgd2UgbWF5IGhhdmUKLSAgICAvLyBnb3R0ZW4gaGVyZSBieSB3YXkg
b2YgdGhlIHBsdWdpbidzIGludGVybmFsIHdpbmRvdyBwcm9jIGZvcndhcmRpbmcgYSBtZXNzYWdl
IHRvIG91cgotICAgIC8vIG9yaWdpbmFsIHdpbmRvdyBwcm9jLiBJZiB3ZSBmcmVlIHRoZSBwbHVn
aW4gbGlicmFyeSBmcm9tIGhlcmUsIHdlIHdpbGwganVtcCBiYWNrCi0gICAgLy8gdG8gY29kZSB3
ZSBqdXN0IGZyZWVkIHdoZW4gd2UgcmV0dXJuLCBzbyBkZWxheSBjYWxsaW5nIEZyZWVMaWJyYXJ5
IGF0IGxlYXN0IHVudGlsCi0gICAgLy8gdGhlIG5leHQgbWVzc2FnZSBsb29wCi0gICAgZnJlZUxp
YnJhcnlTb29uKCk7Ci0KLSAgICBtX2lzTG9hZGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2lu
UGFja2FnZTo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9pc0VuYWJsZWQgPSBl
bmFibGVkOwotfQotCi1QYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IFBsdWdpblBhY2thZ2U6OmNy
ZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmll
ZCkKLXsKLSAgICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gcGFja2FnZSA9IGFkb3B0UmVmKG5ldyBQ
bHVnaW5QYWNrYWdlKHBhdGgsIGxhc3RNb2RpZmllZCkpOwotCi0gICAgaWYgKCFwYWNrYWdlLT5m
ZXRjaEluZm8oKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gcGFja2FnZS5yZWxl
YXNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQot
UGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJv
bUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5n
JiBtaW1lRGVzY3JpcHRpb24pCi17Ci0gICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2Ug
PSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBsYXN0TW9kaWZpZWQpKTsKLSAgICBw
YWNrYWdlLT5tX25hbWUgPSBuYW1lOwotICAgIHBhY2thZ2UtPm1fZGVzY3JpcHRpb24gPSBkZXNj
cmlwdGlvbjsKLSAgICBwYWNrYWdlLT5kZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0
aW9uKCk7Ci0gICAgcGFja2FnZS0+c2V0TUlNRURlc2NyaXB0aW9uKG1pbWVEZXNjcmlwdGlvbik7
Ci0gICAgcGFja2FnZS0+bV9pbmZvSXNGcm9tQ2FjaGUgPSB0cnVlOwotICAgIHJldHVybiBwYWNr
YWdlLnJlbGVhc2UoKTsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChYUF9VTklYKQotdm9pZCBQ
bHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsK
LSAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUp
KSB7Ci0gICAgICAgIC8vIEJlY2F1c2UgYSBzaW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11
bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCByZWxpYWJseSB1bmxvYWQgYQotICAgICAgICAvLyBK
YXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRoZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSBy
ZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KLSAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJr
RG9udFVubG9hZFBsdWdpbik7Ci0KLSAgICAgICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lv
biB0byBhbiBlbXB0eSByZWdpb24gY2F1c2VzIGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVt
cwotICAgICAgICAvLyB3aXRoIHRoZSBKYXZhIHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFk
ZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nr
d2F2ZS1mbGFzaCIpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lv
biBmbGFzaFRlblZlcnNpb24oMHgwYTAwMDAwMCk7Ci0KLSAgICAgICAgaWYgKGNvbXBhcmVGaWxl
VmVyc2lvbihmbGFzaFRlblZlcnNpb24pID49IDApIHsKLSAgICAgICAgICAgIC8vIEZsYXNoIDEw
LjAgYjIxOCBkb2Vzbid0IGxpa2UgaGF2aW5nIGEgTlVMTCB3aW5kb3cgaGFuZGxlCi0gICAgICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVz
dHJveSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGbGFzaCA5IGFuZCBvbGRl
ciByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2Vy
IGFnZW50Ci0gICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFV
c2VyQWdlbnQpOwotICAgICAgICB9Ci0KLSNpZiBDUFUoWDg2XzY0KQotICAgICAgICAvLyA2NC1i
aXQgRmxhc2ggZnJlZXplcyBpZiByaWdodC1jbGljayBpcyBzZW50IGluIHdpbmRvd2xlc3MgbW9k
ZQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5k
b3dsZXNzTW9kZSk7Ci0jZW5kaWYKLQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtS
ZXF1aXJlc0RlZmF1bHRTY3JlZW5EZXB0aCk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBs
dWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOwotICAgIH0KLX0KLSNlbmRpZgotCi0jaWYgIU9T
KFdJTkRPV1MpCi12b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZU1vZHVsZVZlcnNpb25Gcm9t
RGVzY3JpcHRpb24oKQotewotICAgIC8vIEl0J3MgYSBiaXQgbGFtZSB0byBkZXRlY3QgdGhlIHBs
dWdpbiB2ZXJzaW9uIGJ5IHBhcnNpbmcgaXQKLSAgICAvLyBmcm9tIHRoZSBwbHVnaW4gZGVzY3Jp
cHRpb24gc3RyaW5nLCBidXQgaXQgZG9lc24ndCBzZWVtIHRoYXQKLSAgICAvLyB2ZXJzaW9uIGlu
Zm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBhbnkgc3RhbmRhcmRpemVkIHdheSBhdAotICAgIC8v
IHRoZSBtb2R1bGUgbGV2ZWwsIGxpa2UgaW4gV2luZG93cwotCi0gICAgaWYgKG1fZGVzY3JpcHRp
b24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kZXNjcmlwdGlvbi5z
dGFydHNXaXRoKCJTaG9ja3dhdmUgRmxhc2giKSAmJiBtX2Rlc2NyaXB0aW9uLmxlbmd0aCgpID49
IDE5KSB7Ci0gICAgICAgIC8vIFRoZSBmbGFzaCB2ZXJzaW9uIGFzIGEgUGxhdGZvcm1Nb2R1bGVW
ZXJzaW9uIGRpZmZlcnMgb24gVW5peCBmcm9tIFdpbmRvd3MKLSAgICAgICAgLy8gc2luY2UgdGhl
IHJldmlzaW9uIGNhbiBiZSBsYXJnZXIgdGhhbiBhIDggYml0cywgc28gd2UgYWxsb3cgaXQgMTYg
aGVyZSBhbmQKLSAgICAgICAgLy8gcHVzaCB0aGUgbWFqb3IvbWlub3IgdXAgOCBiaXRzLiBUaHVz
IG9uIFVuaXgsIEZsYXNoJ3MgdmVyc2lvbiBtYXkgYmUKLSAgICAgICAgLy8gMHgwYTAwMDAwMCBp
bnN0ZWFkIG9mIDB4MDAwYTAwMDAuCi0KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdmVyc2lvblBh
cnRzOwotICAgICAgICBtX2Rlc2NyaXB0aW9uLnN1YnN0cmluZygxNikuc3BsaXQoJyAnLCAvKmFs
bG93RW1wdHlFbnRyaWVzID0qLyBmYWxzZSwgdmVyc2lvblBhcnRzKTsKLSAgICAgICAgaWYgKHZl
cnNpb25QYXJ0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KHZlcnNpb25QYXJ0cy5zaXplKCkgPj0gMSkgewotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4g
bWFqb3JNaW5vclBhcnRzOwotICAgICAgICAgICAgdmVyc2lvblBhcnRzWzBdLnNwbGl0KCcuJywg
bWFqb3JNaW5vclBhcnRzKTsKLSAgICAgICAgICAgIGlmIChtYWpvck1pbm9yUGFydHMuc2l6ZSgp
ID49IDEpIHsKLSAgICAgICAgICAgICAgICBib29sIGNvbnZlcnRlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG1ham9yID0gbWFqb3JNaW5vclBhcnRzWzBdLnRvVUludCgmY29u
dmVydGVkKTsKLSAgICAgICAgICAgICAgICBpZiAoY29udmVydGVkKQotICAgICAgICAgICAgICAg
ICAgICBtX21vZHVsZVZlcnNpb24gPSAobWFqb3IgJiAweGZmKSA8PCAyNDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChtYWpvck1pbm9yUGFydHMuc2l6ZSgpID09IDIpIHsKLSAgICAg
ICAgICAgICAgICBib29sIGNvbnZlcnRlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG1pbm9yID0gbWFqb3JNaW5vclBhcnRzWzFdLnRvVUludCgmY29udmVydGVkKTsKLSAgICAg
ICAgICAgICAgICBpZiAoY29udmVydGVkKQotICAgICAgICAgICAgICAgICAgICBtX21vZHVsZVZl
cnNpb24gfD0gKG1pbm9yICYgMHhmZikgPDwgMTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAodmVyc2lvblBhcnRzLnNpemUoKSA+PSAyKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgcmV2aXNpb24gPSB2ZXJzaW9uUGFydHNbMV07Ci0gICAgICAgICAgICBpZiAocmV2aXNp
b24ubGVuZ3RoKCkgPiAxICYmIChyZXZpc2lvblswXSA9PSAncicgfHwgcmV2aXNpb25bMF0gPT0g
J2InKSkgewotICAgICAgICAgICAgICAgIHJldmlzaW9uLnJlbW92ZSgwLCAxKTsKLSAgICAgICAg
ICAgICAgICBtX21vZHVsZVZlcnNpb24gfD0gcmV2aXNpb24udG9JbnQoKSAmIDB4ZmZmZjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi1zdGF0aWMgdm9pZCBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVuc2lnbmVkIGFyZ0Nv
dW50LCBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0LCBKU0M6Ok1hcmtlZEFy
Z3VtZW50QnVmZmVyJiBhTGlzdCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJn
Q291bnQ7ICsraSkKLSAgICAgICAgYUxpc3QuYXBwZW5kKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRO
UFZhcmlhbnRUb1ZhbHVlKGV4ZWMsICZhcmdzW2ldLCByb290T2JqZWN0KSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgSlNDOjpTb3VyY2VDb2RlIG1ha2VTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2Us
IGNvbnN0IFN0cmluZyYgdXJsID0gU3RyaW5nKCksIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQ
b3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6bWluaW11bVBvc2l0aW9uKCkpCi17Ci0gICAgcmV0dXJu
IEpTQzo6U291cmNlQ29kZShKU0M6OlN0cmluZ1NvdXJjZVByb3ZpZGVyOjpjcmVhdGUoc291cmNl
LCB1cmwsIHN0YXJ0UG9zaXRpb24pLCBzdGFydFBvc2l0aW9uLm1fbGluZS5vbmVCYXNlZEludCgp
LCBzdGFydFBvc2l0aW9uLm1fY29sdW1uLm9uZUJhc2VkSW50KCkpOwotfQotCi1zdGF0aWMgYm9v
bCBOUE5fRXZhbHVhdGUoTlBQIGluc3RhbmNlLCBOUE9iamVjdCogbywgTlBTdHJpbmcqIHMsIE5Q
VmFyaWFudCogdmFyaWFudCkKLXsKLSAgICBpZiAoby0+X2NsYXNzID09IE5QU2NyaXB0T2JqZWN0
Q2xhc3MpIHsKLSAgICAgICAgSmF2YVNjcmlwdE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2Fz
dDxKYXZhU2NyaXB0T2JqZWN0Kj4obyk7Ci0KLSAgICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9i
amVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKLSAgICAgICAgaWYgKCFyb290T2Jq
ZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgLy8gVGhlcmUgaXMgYSBjcmFzaCBpbiBGbGFzaCB3aGVuIGV2YWx1YXRpbmcg
YSBzY3JpcHQgdGhhdCBkZXN0cm95cyB0aGUKLSAgICAgICAgLy8gUGx1Z2luVmlldywgc28gd2Ug
ZGVzdHJveSBpdCBhc3luY2hyb25vdXNseS4KLSAgICAgICAgUGx1Z2luVmlldzo6a2VlcEFsaXZl
KGluc3RhbmNlKTsKLQotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0gICAgICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBKU0M6OkJpbmRpbmdz
Ojpjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwotCi0gICAgICAgIEpTQzo6SlNWYWx1ZSByZXR1
cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7Ci0KLSAg
ICAgICAgSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmV0dXJu
VmFsdWUsIHZhcmlhbnQpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBWT0lEX1RPX05QVkFSSUFOVCgqdmFyaWFudCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBOUE5fSW52b2tlKE5QUCBucHAs
IE5QT2JqZWN0KiBvLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50KiBh
cmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKG8t
Pl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEphdmFTY3JpcHRPYmpl
Y3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOwotCi0gICAg
ICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4obWV0aG9k
TmFtZSk7Ci0gICAgICAgIGlmICghaS0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlICJldmFsIiBtZXRob2QuCi0gICAg
ICAgIGlmIChtZXRob2ROYW1lID09IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcigiZXZhbCIpKSB7
Ci0gICAgICAgICAgICBpZiAoYXJnQ291bnQgIT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYXJnc1swXS50eXBlICE9IE5QVmFyaWFudFR5cGVfU3Ry
aW5nKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpOUE5fRXZhbHVhdGUobnBwLCBvLCBjb25zdF9jYXN0PE5QU3RyaW5nKj4oJmFyZ3Nb
MF0udmFsdWUuc3RyaW5nVmFsdWUpLCByZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
TG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290
T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwotICAgICAgICBpZiAoIXJvb3RP
YmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwotICAgICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcC0+Z2V0KGV4ZWMsIEpT
Qzo6QmluZGluZ3M6OmlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygp
KSk7Ci0gICAgICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIEpTQzo6Q2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwotICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZU5vbmUpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotICAgICAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7Ci0gICAgICAgIGdldExpc3RGcm9tVmFyaWFu
dEFyZ3MoZXhlYywgYXJncywgYXJnQ291bnQsIHJvb3RPYmplY3QsIGFyZ0xpc3QpOwotICAgICAg
ICBKU0M6OkpTVmFsdWUgcmVzdWx0ViA9IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBvYmotPmltcCwgYXJnTGlzdCk7Ci0KLSAgICAgICAgLy8gQ29udmVydCBh
bmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCi0gICAgICAgIEpTQzo6
QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7
Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChvLT5fY2xhc3MtPmludm9rZSkKLSAgICAgICAgcmV0dXJuIG8tPl9j
bGFzcy0+aW52b2tlKG8sIG1ldGhvZE5hbWUsIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOwotCi0g
ICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgUGx1Z2luUGFja2FnZTo6aW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpCi17Ci0gICAgbWVtc2V0
KCZtX2Jyb3dzZXJGdW5jcywgMCwgc2l6ZW9mKG1fYnJvd3NlckZ1bmNzKSk7Ci0gICAgbV9icm93
c2VyRnVuY3Muc2l6ZSA9IHNpemVvZihtX2Jyb3dzZXJGdW5jcyk7Ci0gICAgbV9icm93c2VyRnVu
Y3MudmVyc2lvbiA9IE5QVmVyc2lvbigpOwotCi0gICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0g
TlBOX0dldFVSTDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7Ci0g
ICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7Ci0gICAgbV9i
cm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKLSAgICBtX2Jyb3dzZXJGdW5j
cy53cml0ZSA9IE5QTl9Xcml0ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0g
TlBOX0Rlc3Ryb3lTdHJlYW07Ci0gICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1
czsKLSAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OwotICAgIG1fYnJv
d3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOwotICAgIG1fYnJvd3NlckZ1bmNzLm1l
bWZyZWUgPSBOUE5fTWVtRnJlZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9N
ZW1GbHVzaDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBs
dWdpbnM7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlm
eTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7
Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7Ci0gICAgbV9icm93
c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52
YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuaW52
YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9uOwotICAgIG1fYnJvd3NlckZ1bmNz
LmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OwotICAgIG1fYnJvd3NlckZ1bmNzLmdldEph
dmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9
IE5QTl9HZXRKYXZhUGVlcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0
YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MucG9w
cG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKLSAgICBtX2Jy
b3dzZXJGdW5jcy5wbHVnaW50aHJlYWRhc3luY2NhbGwgPSBOUE5fUGx1Z2luVGhyZWFkQXN5bmND
YWxsOwotCi0gICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVs
ZWFzZVZhcmlhbnRWYWx1ZTsKLSAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVy
ID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmlu
Z2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKLSAgICBtX2Jyb3dzZXJG
dW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOwotICAgIG1fYnJv
d3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOwot
ICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVu
dGlmaWVyOwotICAgIG1fYnJvd3NlckZ1bmNzLmludGZyb21pZGVudGlmaWVyID0gX05QTl9JbnRG
cm9tSWRlbnRpZmllcjsKLSAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0Ny
ZWF0ZU9iamVjdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFp
bk9iamVjdDsKLSAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNl
T2JqZWN0OwotICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IFdlYkNvcmU6Ok5QTl9JbnZva2U7
Ci0gICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsK
LSAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZTsKLSAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7Ci0gICAgbV9i
cm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OwotICAgIG1fYnJvd3Nl
ckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKLSAgICBtX2Jyb3dz
ZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzUHJvcGVydHk7Ci0gICAgbV9icm93c2VyRnVu
Y3MuaGFzbWV0aG9kID0gX05QTl9IYXNNZXRob2Q7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0ZXhj
ZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247Ci0gICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRl
ID0gX05QTl9FbnVtZXJhdGU7Ci0gICAgbV9icm93c2VyRnVuY3MuY29uc3RydWN0ID0gX05QTl9D
b25zdHJ1Y3Q7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWVmb3J1cmwgPSBOUE5fR2V0VmFs
dWVGb3JVUkw7Ci0gICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWVmb3J1cmwgPSBOUE5fU2V0VmFs
dWVGb3JVUkw7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0YXV0aGVudGljYXRpb25pbmZvID0gTlBO
X0dldEF1dGhlbnRpY2F0aW9uSW5mbzsKLQotICAgIG1fYnJvd3NlckZ1bmNzLnBvcHVwY29udGV4
dG1lbnUgPSBOUE5fUG9wVXBDb250ZXh0TWVudTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLQotI2lmIEVOQUJMRShQTFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCkK
LXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAotewotICAgIHN0cnVjdCBIYXNo
Q29kZXMgewotICAgICAgICB1bnNpZ25lZCBoYXNoOwotICAgICAgICB0aW1lX3QgbW9kaWZpZWRE
YXRlOwotICAgIH0gaGFzaENvZGVzOwotCi0gICAgaGFzaENvZGVzLmhhc2ggPSBtX3BhdGguaW1w
bCgpLT5oYXNoKCk7Ci0gICAgaGFzaENvZGVzLm1vZGlmaWVkRGF0ZSA9IG1fbGFzdE1vZGlmaWVk
OwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVz
KT4oJmhhc2hDb2Rlcyk7Ci19Ci0KLWJvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1
Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikKLXsKLSAgICByZXR1cm4gYS5t
X2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKLX0KLSNlbmRpZgotCi1pbnQgUGx1Z2lu
UGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYg
Y29tcGFyZVZlcnNpb24pIGNvbnN0Ci17Ci0gICAgLy8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBs
dWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4KLSAg
ICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKG1fbW9k
dWxlVmVyc2lvbi5tb3N0U2lnICE9IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcpCi0gICAgICAgIHJl
dHVybiBtX21vZHVsZVZlcnNpb24ubW9zdFNpZyA+IGNvbXBhcmVWZXJzaW9uLm1vc3RTaWcgPyAx
IDogLTE7Ci0gICAgaWYgKG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyAhPSBjb21wYXJlVmVyc2lv
bi5sZWFzdFNpZykKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbi5sZWFzdFNpZyA+IGNv
bXBhcmVWZXJzaW9uLmxlYXN0U2lnID8gMSA6IC0xOwotI2Vsc2UgICAgCi0gICAgaWYgKG1fbW9k
dWxlVmVyc2lvbiAhPSBjb21wYXJlVmVyc2lvbikKLSAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVy
c2lvbiA+IGNvbXBhcmVWZXJzaW9uID8gMSA6IC0xOwotI2VuZGlmCi0KLSAgICByZXR1cm4gMDsK
LX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi1ib29sIFBs
dWdpblBhY2thZ2U6OmVuc3VyZVBsdWdpbkxvYWRlZCgpCi17Ci0gICAgaWYgKCFtX2luZm9Jc0Zy
b21DYWNoZSkKLSAgICAgICAgcmV0dXJuIG1faXNMb2FkZWQ7Ci0KLSAgICBtX3F1aXJrcyA9IFBs
dWdpblF1aXJrU2V0KCk7Ci0gICAgbV9uYW1lID0gU3RyaW5nKCk7Ci0gICAgbV9kZXNjcmlwdGlv
biA9IFN0cmluZygpOwotICAgIG1fZnVsbE1JTUVEZXNjcmlwdGlvbiA9IFN0cmluZygpOwotICAg
IG1fbW9kdWxlVmVyc2lvbiA9IDA7Ci0KLSAgICByZXR1cm4gZmV0Y2hJbmZvKCk7Ci19Ci0jZW5k
aWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjgzNDA1NzY3OTdhYTZiYzgzMTc3MmJjM2I0ZjljY2Y4Y2M4YmE2
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFBsdWdpblBhY2thZ2VfaAotI2RlZmluZSBQbHVnaW5QYWNrYWdlX2gK
LQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgot
I2luY2x1ZGUgIlRpbWVyLmgiCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0jaW5j
bHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4g
PiBNSU1FVG9FeHRlbnNpb25zTWFwOwotCi0gICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIH5QbHVn
aW5QYWNrYWdlKCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IGNy
ZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmll
ZCk7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gY3JlYXRlUGFja2FnZUZyb21DYWNoZShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURl
c2NyaXB0aW9uKTsKLSNlbmRpZgotCi0gICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIHBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0KLSAgICAgICAgY29uc3QgU3RyaW5n
JiBwYXJlbnREaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudERpcmVjdG9yeTsgfQot
ICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZTsg
fQotICAgICAgICB1aW50MTZfdCBOUFZlcnNpb24oKSBjb25zdDsKLSAgICAgICAgdGltZV90IGxh
c3RNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE1vZGlmaWVkOyB9Ci0KLSAgICAgICAg
Y29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7
IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsgfQotICAgICAgICBjb25zdCBNSU1FVG9FeHRl
bnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRl
bnNpb25zOyB9Ci0KLSAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwotICAgICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdl
JiBiKTsKLQotICAgICAgICBib29sIGxvYWQoKTsKLSAgICAgICAgdm9pZCB1bmxvYWQoKTsKLSAg
ICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKLQotICAgICAgICBib29sIGlzRW5h
YmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNFbmFibGVkOyB9Ci0gICAgICAgIHZvaWQgc2V0RW5h
YmxlZChib29sKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBj
b25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdp
bkZ1bmNzOyB9Ci0jZW5kaWYKLSAgICAgICAgaW50IGNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQ
bGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25zdDsKLSAgICAgICAgaW50IGNvbXBhcmUoY29uc3Qg
UGx1Z2luUGFja2FnZSYpIGNvbnN0OwotICAgICAgICBQbHVnaW5RdWlya1NldCBxdWlya3MoKSBj
b25zdCB7IHJldHVybiBtX3F1aXJrczsgfQotICAgICAgICBjb25zdCBQbGF0Zm9ybU1vZHVsZVZl
cnNpb24mIHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21vZHVsZVZlcnNpb247IH0KLQotI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIGJvb2wgZW5z
dXJlUGx1Z2luTG9hZGVkKCk7Ci0gICAgICAgIHZvaWQgc2V0TUlNRURlc2NyaXB0aW9uKGNvbnN0
IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsKLSAgICAgICAgU3RyaW5nIGZ1bGxNSU1FRGVzY3Jp
cHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1bGxNSU1FRGVzY3JpcHRpb247fQotI2VuZGlmCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgUGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKLQotICAgICAgICBib29sIGZldGNoSW5mbygpOwot
ICAgICAgICBib29sIGlzUGx1Z2luQmxhY2tsaXN0ZWQoKTsKLSAgICAgICAgdm9pZCBkZXRlcm1p
bmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0KLSAgICAgICAgdm9pZCBkZXRlcm1p
bmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHZvaWQgaW5pdGlhbGl6
ZUJyb3dzZXJGdW5jcygpOwotCi0gICAgICAgIGJvb2wgbV9pc0VuYWJsZWQ7Ci0gICAgICAgIGJv
b2wgbV9pc0xvYWRlZDsKLSAgICAgICAgaW50IG1fbG9hZENvdW50OwotCi0gICAgICAgIFN0cmlu
ZyBtX2Rlc2NyaXB0aW9uOwotICAgICAgICBTdHJpbmcgbV9wYXRoOwotICAgICAgICBTdHJpbmcg
bV9maWxlTmFtZTsKLSAgICAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgU3RyaW5nIG1fcGFy
ZW50RGlyZWN0b3J5OwotCi0gICAgICAgIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBtX21vZHVsZVZl
cnNpb247Ci0KLSAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRp
b25zOwotICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKLQot
ICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtX21vZHVsZTsKLSAgICAgICAgdGltZV90IG1fbGFzdE1v
ZGlmaWVkOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QUF9T
aHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247Ci0gICAgICAgIE5QUGx1Z2luRnVuY3MgbV9w
bHVnaW5GdW5jczsKLSAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOwotI2Vu
ZGlmCi0KLSAgICAgICAgdm9pZCBmcmVlTGlicmFyeVNvb24oKTsKLSAgICAgICAgdm9pZCBmcmVl
TGlicmFyeVRpbWVyRmlyZWQoKTsKLSAgICAgICAgVGltZXIgbV9mcmVlTGlicmFyeVRpbWVyOwot
Ci0gICAgICAgIFBsdWdpblF1aXJrU2V0IG1fcXVpcmtzOwotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fTUVUQURBVEFfQ0FDSEUpCi0gICAgICAgIFN0cmluZyBtX2Z1bGxNSU1FRGVzY3JpcHRp
b247Ci0gICAgICAgIGJvb2wgbV9pbmZvSXNGcm9tQ2FjaGU7Ci0jZW5kaWYKLSAgICB9OwotCi0g
ICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGJlY2F1c2UgUGx1Z2luUGFja2FnZUhh
c2ggaXMgYnJva2VuIGFuZCBtYXkgY29uc2lkZXIga2V5cyB3aXRoIGRpZmZlcmVudCBoYXNoZXMg
YXMgZXF1YWwuCi0gICAgc3RydWN0IFBsdWdpblBhY2thZ2VIYXNoVHJhaXRzIDogSGFzaFRyYWl0
czxSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
aW11bVRhYmxlU2l6ZSA9IDY0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhh
c2ggewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCB1aW50cHRyX3Qga2V5KSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0K
LSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+
JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9Ci0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgdWludHB0cl90IGEsIGNvbnN0IHVpbnRwdHJfdCBiKSB7IHJldHVybiBlcXVhbChy
ZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVn
aW5QYWNrYWdlKj4oYikpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0
cjxQbHVnaW5QYWNrYWdlPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJl
dHVybiBQbHVnaW5QYWNrYWdlOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7
Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luUXVpcmtTZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDlhMzM4M2RiYjQ0NjkwOTk0MDdkNmJkYTEyM2QxMDFkY2I1ZDM4NC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblF1aXJrU2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGx1Z2luUXVp
cmtTZXRfaAotI2RlZmluZSBQbHVnaW5RdWlya1NldF9oCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0gICAgZW51bSBQbHVnaW5RdWlyayB7Ci0gICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3pp
bGxhVXNlckFnZW50ID0gMSA8PCAwLAotICAgICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRX
aW5kb3dDYWxsID0gMSA8PCAxLAotICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0
ZSA9IDEgPDwgMiwgCi0gICAgICAgIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFy
YW0gPSAxIDw8IDMsCi0gICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVz
c2FnZXMgPSAxIDw8IDQsCi0gICAgICAgIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEg
PDwgNSwKLSAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJl
Y3Vyc2l2ZWx5ID0gMSA8PCA2LAotICAgICAgICBQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxv
b3AgPSAxIDw8IDcsCi0gICAgICAgIFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcgPSAxIDw8
IDgsCi0gICAgICAgIFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyA9
IDEgPDwgOSwKLSAgICAgICAgUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVz
dHJveSA9IDEgPDwgMTAsCi0gICAgICAgIFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0
YW5jZXMgPSAxIDw8IDExLAotICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVzR3RrVG9vbEtpdCA9
IDEgPDwgMTIsCi0gICAgICAgIFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgg
PSAxIDw8IDEzLAotICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsU2V0V2luZG93TW9yZVRoYW5P
bmNlID0gMSA8PCAxNCwKLSAgICAgICAgUGx1Z2luUXVpcmtJZ25vcmVSaWdodENsaWNrSW5XaW5k
b3dsZXNzTW9kZSA9IDEgPDwgMTUsCi0gICAgICAgIFBsdWdpblF1aXJrV2FudHNDaHJvbWVVc2Vy
QWdlbnQgPSAxIDw8IDE2Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblF1aXJrU2V0IHsKLSAg
ICAgICAgcHVibGljOgotICAgICAgICAgICAgUGx1Z2luUXVpcmtTZXQoKSA6IG1fcXVpcmtzKDAp
IHsgfQotICAgICAgICAgICAgdm9pZCBhZGQoUGx1Z2luUXVpcmsgcXVpcmspIHsgbV9xdWlya3Mg
fD0gcXVpcms7IH0KLSAgICAgICAgICAgIGJvb2wgY29udGFpbnMoUGx1Z2luUXVpcmsgcXVpcmsp
IGNvbnN0IHsgcmV0dXJuIG1fcXVpcmtzICYgcXVpcms7IH0KLSAgICAgICAgcHJpdmF0ZToKLSAg
ICAgICAgICAgIHVuc2lnbmVkIG1fcXVpcmtzOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFBsdWdpblF1aXJrU2V0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luU3RyZWFtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzliOWIxMjBm
MWY0MjBjNmI0YTdjNmJmZjAwNzYzMzAwYjU1ODI0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVh
bS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0ODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luU3RyZWFtLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNp
bmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgotI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLS8v
IFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2UgdG8gcmV0dXJuIC0xIHRv
IGluZGljYXRlIGVycm9yCi0vLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3QgY2xhc2ggd2l0aCB0aGVt
Lgotc3RhdGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7Ci0KLXVzaW5nIHN0ZDo6bWF4
OwotdXNpbmcgc3RkOjptaW47Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBIYXNo
TWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7Ci1zdGF0aWMgU3RyZWFtTWFwJiBzdHJlYW1z
KCkKLXsKLSAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7Ci0gICAgcmV0dXJuIHN0
YXRpY1N0cmVhbXM7Ci19Ci0KLVBsdWdpblN0cmVhbTo6UGx1Z2luU3RyZWFtKFBsdWdpblN0cmVh
bUNsaWVudCogY2xpZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVz
b3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNv
bnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzLCBOUFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdp
blF1aXJrU2V0JiBxdWlya3MpCi0gICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVl
c3QpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwg
bV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCi0gICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5v
dGlmaWNhdGlvbikKLSAgICAsIG1fc3RyZWFtU3RhdGUoU3RyZWFtQmVmb3JlU3RhcnRlZCkKLSAg
ICAsIG1fbG9hZE1hbnVhbGx5KGZhbHNlKQotICAgICwgbV9kZWxheURlbGl2ZXJ5VGltZXIoKnRo
aXMsICZQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKQotICAgICwgbV90ZW1w
RmlsZUhhbmRsZShpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQotICAgICwgbV9wbHVnaW5GdW5j
cyhwbHVnaW5GdW5jcykKLSAgICAsIG1faW5zdGFuY2UoaW5zdGFuY2UpCi0gICAgLCBtX3F1aXJr
cyhxdWlya3MpCi17Ci0gICAgQVNTRVJUKG1faW5zdGFuY2UpOwotCi0gICAgbV9zdHJlYW0udXJs
ID0gMDsKLSAgICBtX3N0cmVhbS5uZGF0YSA9IDA7Ci0gICAgbV9zdHJlYW0ucGRhdGEgPSAwOwot
ICAgIG1fc3RyZWFtLmVuZCA9IDA7Ci0gICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9IDA7Ci0gICAg
bV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKLSAgICBtX3N0cmVhbS5oZWFkZXJzID0gMDsKLQot
ICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsKLX0KLQotUGx1Z2luU3Ry
ZWFtOjp+UGx1Z2luU3RyZWFtKCkKLXsKLSAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJl
YW1TdGFydGVkKTsKLSAgICBBU1NFUlQoIW1fbG9hZGVyKTsKLQotICAgIGZhc3RGcmVlKChjaGFy
KiltX3N0cmVhbS51cmwpOwotCi0gICAgc3RyZWFtcygpLnJlbW92ZSgmbV9zdHJlYW0pOwotfQot
Ci12b2lkIFBsdWdpblN0cmVhbTo6c3RhcnQoKQotewotICAgIEFTU0VSVCghbV9sb2FkTWFudWFs
bHkpOwotICAgIG1fbG9hZGVyID0gcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNjaGVkdWxlUGx1
Z2luU3RyZWFtTG9hZChtX2ZyYW1lLCB0aGlzLCBtX3Jlc291cmNlUmVxdWVzdCk7Ci19Ci0KLXZv
aWQgUGx1Z2luU3RyZWFtOjpzdG9wKCkKLXsKLSAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3Rv
cHBlZDsKLQotICAgIGlmIChtX2xvYWRNYW51YWxseSkgewotICAgICAgICBBU1NFUlQoIW1fbG9h
ZGVyKTsKLQotICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1l
LT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpOwotICAgICAgICBBU1NFUlQoZG9jdW1l
bnRMb2FkZXIpOwotCi0gICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFpblJl
c291cmNlKCkpCi0gICAgICAgICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2VsTWFpblJlc291cmNl
TG9hZChtX2ZyYW1lLT5sb2FkZXIoKS5jYW5jZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkp
OwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9sb2FkZXIpIHsKLSAgICAg
ICAgbV9sb2FkZXItPmNhbmNlbCgpOwotICAgICAgICBtX2xvYWRlciA9IDA7Ci0gICAgfQotCi0g
ICAgbV9jbGllbnQgPSAwOwotfQotCi1zdGF0aWMgdWludDMyX3QgbGFzdE1vZGlmaWVkRGF0ZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBkb3VibGUgbGFzdE1vZGlm
aWVkID0gcmVzcG9uc2UubGFzdE1vZGlmaWVkKCk7Ci0gICAgaWYgKCFzdGQ6OmlzZmluaXRlKGxh
c3RNb2RpZmllZCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGxhc3RNb2RpZmll
ZCAqIDEwMDA7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgpCi17Ci0gICAg
QVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7Ci0KLSAgICBjb25z
dCBVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNvdXJjZVJlc3BvbnNlLnVybCgpOwotCi0gICAgLy8g
U29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBwYXNz
ZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMgdGhlCi0gICAgLy8gZm9ybWF0IHVzZWQgd2hlbiBy
ZXF1ZXN0aW5nIHRoZSBVUkwuCi0gICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KHJlc3BvbnNl
VVJMKSkKLSAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChkZWNvZGVVUkxFc2NhcGVT
ZXF1ZW5jZXMocmVzcG9uc2VVUkwuc3RyaW5nKCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UK
LSAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChyZXNwb25zZVVSTC5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIENTdHJpbmcgbWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVz
cG9uc2UubWltZVR5cGUoKS51dGY4KCk7Ci0KLSAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50
TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotCi0g
ICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgewotICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIFN0cmluZyBzZXBhcmF0b3IgPSBBU0NJSUxpdGVy
YWwoIjogIik7Ci0KLSAgICAgICAgU3RyaW5nIHN0YXR1c0xpbmUgPSAiSFRUUCAiICsgU3RyaW5n
OjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpICsgIiBPS1xuIjsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RhdHVzTGluZSk7Ci0KLSAgICAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZHMoKS5lbmQoKTsKLSAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+a2V5KTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvcik7Ci0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOwotICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2hlYWRl
cnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOwotCi0gICAgICAgIC8vIElmIHRo
ZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNzZWQpLCB0aGVuIGRvbid0
IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAotICAgICAgICAvLyB3aGljaCBpcyBvbmx5
IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0IGtub3duIGF0IHRoZSBt
b21lbnQuCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NDcwNTk5PiB0cmFja3MgYSByZXF1
ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXSB0byBpbmNvcnBv
cmF0ZSB0aGlzIGxvZ2ljLgotICAgICAgICBTdHJpbmcgY29udGVudEVuY29kaW5nID0gbV9yZXNv
dXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudEVuY29k
aW5nKTsKLSAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVu
Y29kaW5nICE9ICJpZGVudGl0eSIpCi0gICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGgg
PSAtMTsKLSAgICB9Ci0KLSAgICBtX3N0cmVhbS5oZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsK
LSAgICBtX3N0cmVhbS5wZGF0YSA9IDA7Ci0gICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOwotICAg
IG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3RlZENvbnRlbnRMZW5ndGgsIDBMTCk7Ci0gICAgbV9z
dHJlYW0ubGFzdG1vZGlmaWVkID0gbGFzdE1vZGlmaWVkRGF0ZShtX3Jlc291cmNlUmVzcG9uc2Up
OwotICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7Ci0KLSAgICBtX3RyYW5z
ZmVyTW9kZSA9IE5QX05PUk1BTDsKLSAgICBtX29mZnNldCA9IDA7Ci0gICAgbV9yZWFzb24gPSBX
ZWJSZWFzb25Ob25lOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFtIGlmIGRlc3Ryb3lzdHJl
YW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFuZGxlcgotICAgIFJlZlB0
cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAvLyBjYWxsaW5nIGludG8gYSBw
bHVnLWluIGNvdWxkIHJlc3VsdCBpbiByZS1lbnRyYW5jZSBpZiB0aGUgcGx1Zy1pbiB5aWVsZHMK
LSAgICAvLyBjb250cm9sIHRvIHRoZSBzeXN0ZW0gKHJkYXI6Ly81NzQ0ODk5KS4gcHJldmVudCB0
aGlzIGJ5IGRlZmVycmluZyBmdXJ0aGVyCi0gICAgLy8gbG9hZGluZyB3aGlsZSBjYWxsaW5nIGlu
dG8gdGhlIHBsdWctaW4uCi0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0
RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+
bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVUeXBlKW1pbWVUeXBlU3RyLmRhdGEoKSwgJm1f
c3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAg
ICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKLSAgICAKLSAgICAvLyBJZiB0
aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwgdG8gbmV3c3RyZWFtIHdlIHJldHVy
bgotICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQotICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICBjYW5j
ZWxBbmREZXN0cm95U3RyZWFtKG5wRXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFydGVkOwotCi0gICAgaWYgKG1fdHJhbnNmZXJNb2Rl
ID09IE5QX05PUk1BTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXRoID0gb3BlblRlbXBv
cmFyeUZpbGUoIldLUCIsIG1fdGVtcEZpbGVIYW5kbGUpOwotCi0gICAgLy8gU29tZXRoaW5nIHdl
bnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRoZSBzdHJlYW0KLSAgICBpZiAoIWlzSGFuZGxlVmFs
aWQobV90ZW1wRmlsZUhhbmRsZSkpCi0gICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBS
RVNfTkVUV09SS19FUlIpOwotfQotCi1OUFAgUGx1Z2luU3RyZWFtOjpvd25lckZvclN0cmVhbShO
UFN0cmVhbSogc3RyZWFtKQotewotICAgIHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0cmVhbSk7Ci19
Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uIHJl
YXNvbikKLXsKLSAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMpOwotCi0gICAg
ZGVzdHJveVN0cmVhbShyZWFzb24pOwotICAgIHN0b3AoKTsKLX0KLQotdm9pZCBQbHVnaW5TdHJl
YW06OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQotewotICAgIG1fcmVhc29uID0gcmVh
c29uOwotICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05FKSB7Ci0gICAgICAgIC8vIFN0b3Ag
YW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVkCi0gICAgICAgIGlmIChtX2RlbGl2
ZXJ5RGF0YSkKLSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7Ci0gICAgfSBl
bHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgewot
ICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ry
b3kgdGhlIHN0cmVhbSBub3cuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZGVzdHJveVN0
cmVhbSgpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSgpCi17Ci0gICAg
aWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpOwotICAgIEFTU0VSVCghbV9kZWxp
dmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKTsKLQotICAgIGNsb3NlRmls
ZShtX3RlbXBGaWxlSGFuZGxlKTsKLQotICAgIGJvb2wgbmV3U3RyZWFtQ2FsbGVkID0gbV9zdHJl
YW0ubmRhdGE7Ci0KLSAgICAvLyBQcm90ZWN0IGZyb20gZGVzdHJ1Y3Rpb24gaWY6Ci0gICAgLy8g
IE5QTl9EZXN0cm95U3RyZWFtIGlzIGNhbGxlZCBmcm9tIE5QUF9OZXdTdHJlYW0gb3IKLSAgICAv
LyAgUGx1Z2luU3RyZWFtQ2xpZW50OjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkgcmVtb3ZlcyB0
aGUgbGFzdCByZWZlcmVuY2UKLSAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMp
OwotCi0gICAgaWYgKG5ld1N0cmVhbUNhbGxlZCkgewotICAgICAgICBpZiAobV9yZWFzb24gPT0g
TlBSRVNfRE9ORSAmJiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJN
b2RlID09IE5QX0FTRklMRU9OTFkpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fcGF0aC5pc051
bGwoKSk7Ci0KLSAgICAgICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgICAgICBtX2xv
YWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICAgICAgICAgIG1fcGx1Z2luRnVuY3Mt
PmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVm
ZXJzTG9hZGluZyhmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9zdHJlYW1TdGF0
ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKSB7Ci0gICAgICAgICAgICBpZiAobV9sb2FkZXIpCi0g
ICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0KLSAgICAg
ICAgICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5z
dGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOwotCi0gICAgICAgICAgICBpZiAobV9sb2FkZXIp
Ci0gICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCi0g
ICAgICAgICAgICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3N0
cmVhbS5uZGF0YSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fc2VuZE5vdGlmaWNhdGlvbikgewot
ICAgICAgICAvLyBGbGFzaCA5IGNhbiBkZXJlZmVyZW5jZSBudWxsIGlmIHdlIGNhbGwgTlBQX1VS
TE5vdGlmeSB3aXRob3V0IGZpcnN0IGNhbGxpbmcgTlBQX05ld1N0cmVhbQotICAgICAgICAvLyBm
b3IgcmVxdWVzdHMgbWFkZSB3aXRoIE5QTl9Qb3N0VVJMTm90aWZ5OyBzZWUgPHJkYXI6Ly81NTg4
ODA3PgotICAgICAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVm
ZXJzTG9hZGluZyh0cnVlKTsKLSAgICAgICAgaWYgKCFuZXdTdHJlYW1DYWxsZWQgJiYgbV9xdWly
a3MuY29udGFpbnMoUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1ZykgJiYKLSAgICAgICAgICAg
IGVxdWFsSWdub3JpbmdDYXNlKG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIlBPU1Qi
KSkgewotICAgICAgICAgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7Ci0gICAgICAgICAg
ICBtX3N0cmVhbS51cmwgPSAiIjsKLSAgICAgICAgICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBt
X25vdGlmeURhdGE7Ci0KLSAgICAgICAgICAgIHN0YXRpYyBjaGFyIGVtcHR5TWltZVR5cGVbXSA9
ICIiOwotICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIGVt
cHR5TWltZVR5cGUsICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVyTW9kZSk7Ci0gICAgICAg
ICAgICBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwg
bV9yZWFzb24pOwotCi0gICAgICAgICAgICAvLyBpbiBzdWNjZXNzZnVsIHJlcXVlc3RzLCB0aGUg
VVJMIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgZnJlZWQgaW4gb3VyCi0gICAgICAgICAg
ICAvLyBkZXN0cnVjdG9yLCBzbyByZXNldCBpdCB0byAwCi0gICAgICAgICAgICBtX3N0cmVhbS51
cmwgPSAwOwotICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2luRnVuY3MtPnVybG5vdGlmeShtX2lu
c3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBt
X3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKLSAgICAgICAgaWYgKG1fbG9hZGVyKQotICAgICAgICAg
ICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotICAgIH0KLQotICAgIG1fc3Ry
ZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOwotCi0gICAgaWYgKCFtX2xvYWRNYW51YWxseSAmJiBt
X2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnN0cmVhbURpZEZpbmlzaExvYWRpbmcodGhpcyk7
Ci0KLSAgICBpZiAoIW1fcGF0aC5pc051bGwoKSkKLSAgICAgICAgZGVsZXRlRmlsZShtX3BhdGgp
OwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoKQotewot
ICAgIGRlbGl2ZXJEYXRhKCk7Ci19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpkZWxpdmVyRGF0YSgp
Ci17Ci0gICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRhKTsKLSAgICAKLSAgICBpZiAobV9zdHJlYW1T
dGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNhbmNl
bCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJjZUxvYWRlciBvbiBlcnJvciBzbyB3ZSBkb24ndCBy
ZWFjaCB0aGlzIGNhc2UKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fc3RyZWFtU3Rh
dGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7Ci0KLSAgICBpZiAoIW1fc3RyZWFtLm5kYXRhIHx8
IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50
MzJfdCB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKLSAgICBpbnQzMl90IHRv
dGFsQnl0ZXNEZWxpdmVyZWQgPSAwOwotCi0gICAgaWYgKG1fbG9hZGVyKQotICAgICAgICBtX2xv
YWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLSAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2
ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKLSAgICAgICAgaW50MzJfdCBkZWxpdmVyeUJ5dGVzID0gbV9w
bHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9zdHJlYW0pOwotCi0gICAgICAg
IGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKLSAgICAgICAgICAgIG1fZGVsYXlEZWxpdmVyeVRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCB0b3RhbEJ5
dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7Ci0gICAgICAgICAgICBpbnQzMl90IGRhdGFMZW5n
dGggPSBkZWxpdmVyeUJ5dGVzOwotICAgICAgICAgICAgY2hhciogZGF0YSA9IG1fZGVsaXZlcnlE
YXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkOwotCi0gICAgICAgICAgICAvLyBXcml0
ZSB0aGUgZGF0YQotICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndy
aXRlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9vZmZzZXQsIGRhdGFMZW5ndGgsICh2b2lkKilk
YXRhKTsKLSAgICAgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDwgMCkgewotICAgICAgICAgICAg
ICAgIExPR19QTFVHSU5fTkVUX0VSUk9SKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9hZGVy
KQotICAgICAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VS
Uik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCBkYXRhTGVuZ3RoKTsKLSAgICAgICAg
ICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0gICAgICAgICAgICB0b3RhbEJ5dGVzRGVs
aXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fbG9h
ZGVyKQotICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7Ci0KLSAgICBp
ZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDApIHsKLSAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxp
dmVyZWQgPCB0b3RhbEJ5dGVzKSB7Ci0gICAgICAgICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0
b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZDsKLSAgICAgICAgICAgIG1lbW1vdmUobV9k
ZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNE
ZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsKLSAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5y
ZXNpemUocmVtYWluaW5nQnl0ZXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9k
ZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKLSAgICAgICAgICAgIGlmIChtX3JlYXNvbiAhPSBXZWJS
ZWFzb25Ob25lKQotICAgICAgICAgICAgICAgIGRlc3Ryb3lTdHJlYW0oKTsKLSAgICAgICAgfQot
ICAgIH0gCi19Ci0KLXZvaWQgUGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25z
dCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykKLXsKLSAgICBk
aWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9w
bGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwgIiIpKTsKLQotICAgIGlmIChtX3N0cmVhbVN0
YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0
U3RyaW5nLmlzTnVsbCgpKSB7Ci0gICAgICAgIGRpZFJlY2VpdmVEYXRhKDAsIHJlc3VsdFN0cmlu
Zy5kYXRhKCksIHJlc3VsdFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgIGlmIChtX3N0cmVhbVN0
YXRlID09IFN0cmVhbVN0b3BwZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9sb2FkZXIgPSAwOwotCi0gICAgZGVzdHJveVN0cmVhbShyZXN1bHRTdHJpbmcuaXNOdWxsKCkg
PyBOUFJFU19ORVRXT1JLX0VSUiA6IE5QUkVTX0RPTkUpOwotfQotCi12b2lkIFBsdWdpblN0cmVh
bTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVF9VTlVTRUQo
bG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOwotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09
IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOwotCi0gICAgbV9yZXNvdXJjZVJlc3BvbnNlID0gcmVzcG9u
c2U7Ci0KLSAgICBzdGFydFN0cmVhbSgpOwotfQotCi12b2lkIFBsdWdpblN0cmVhbTo6ZGlkUmVj
ZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09
IG1fbG9hZGVyKTsKLSAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsK
LQotICAgIC8vIElmIHRoZSBwbHVnLWluIGNhbmNlbHMgdGhlIHN0cmVhbSBpbiBkZWxpdmVyRGF0
YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKLSAgICAvLyBzbyBwcm90ZWN0IGl0IGhlcmUuCi0gICAg
UmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGlmIChtX3RyYW5zZmVy
TW9kZSAhPSBOUF9BU0ZJTEVPTkxZKSB7Ci0gICAgICAgIGlmICghbV9kZWxpdmVyeURhdGEpCi0g
ICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPGNoYXI+
PigpOwotCi0gICAgICAgIGludCBvbGRTaXplID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKLSAg
ICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsKLSAgICAgICAg
bWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgpOwot
Ci0gICAgICAgIGRlbGl2ZXJEYXRhKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fc3RyZWFtU3RhdGUg
IT0gU3RyZWFtU3RvcHBlZCAmJiBpc0hhbmRsZVZhbGlkKG1fdGVtcEZpbGVIYW5kbGUpKSB7Ci0g
ICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSB3cml0ZVRvRmlsZShtX3RlbXBGaWxlSGFuZGxlLCBk
YXRhLCBsZW5ndGgpOwotICAgICAgICBpZiAoYnl0ZXNXcml0dGVuICE9IGxlbmd0aCkKLSAgICAg
ICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwotICAgIH0K
LX0KLQotdm9pZCBQbHVnaW5TdHJlYW06OmRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChs
b2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7Ci0KLSAgICBMT0dfUExVR0lOX05FVF9FUlJPUigp
OwotCi0gICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0IGluIG91ciBiZWluZyBkZWxldGVk
Ci0gICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGRlc3Ryb3lT
dHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOwotCi0gICAgbV9sb2FkZXIgPSAwOwotfQotCi12b2lk
IFBsdWdpblN0cmVhbTo6ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ciogbG9hZGVyKQotewotICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2Fk
ZXIpOwotICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0YXJ0ZWQpOwotCi0gICAg
Ly8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0IGluIG91ciBiZWluZyBkZWxldGVkCi0gICAgUmVm
UHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKLQotICAgIGRlc3Ryb3lTdHJlYW0oTlBS
RVNfRE9ORSk7Ci0KLSAgICBtX2xvYWRlciA9IDA7Ci19Ci0KLWJvb2wgUGx1Z2luU3RyZWFtOjp3
YW50c0FsbFN0cmVhbXMoKSBjb25zdAotewotICAgIGlmICghbV9wbHVnaW5GdW5jcy0+Z2V0dmFs
dWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAg
aWYgKG1fcGx1Z2luRnVuY3MtPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5XYW50c0Fs
bE5ldHdvcmtTdHJlYW1zLCAmcmVzdWx0KSAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc3VsdCAhPSAwOwotfQotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5TdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAw
MzJjNGMxOTA0NTEyMmY1NmFjZWY2MzJlNTc4MThhMTVhOWJjZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blN0cmVhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQ
bHVnaW5TdHJlYW1faAotI2RlZmluZSBQbHVnaW5TdHJlYW1faAotCi0jaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyLmgiCi0jaW5jbHVkZSAiUGx1Z2luUXVpcmtTZXQuaCIKLSNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBQbHVnaW5TdHJlYW07Ci0K
LSAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRlIHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3RyZWFt
U3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9OwotCi0gICAgY2xhc3MgUGx1Z2luU3RyZWFtQ2xpZW50
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpblN0cmVhbUNsaWVudCgpIHt9
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKFBsdWdpblN0cmVh
bSopIHt9Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblN0cmVhbSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFBsdWdpblN0cmVhbT4sIHByaXZhdGUgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGll
bnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luU3RyZWFt
PiBjcmVhdGUoUGx1Z2luU3RyZWFtQ2xpZW50KiBjbGllbnQsIEZyYW1lKiBmcmFtZSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5v
dGlmeURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqIGZ1bmN0aW9ucywgTlBQIGluc3RhbmNlLCBj
b25zdCBQbHVnaW5RdWlya1NldCYgcXVpcmtzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBsdWdpblN0cmVhbShjbGllbnQsIGZyYW1lLCByZXF1ZXN0LCBzZW5k
Tm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBmdW5jdGlvbnMsIGluc3RhbmNlLCBxdWlya3MpKTsK
LSAgICAgICAgfQotICAgICAgICB2aXJ0dWFsIH5QbHVnaW5TdHJlYW0oKTsKLSAgICAgICAgCi0g
ICAgICAgIHZvaWQgc3RhcnQoKTsKLSAgICAgICAgdm9pZCBzdG9wKCk7Ci0KLSAgICAgICAgdm9p
ZCBzdGFydFN0cmVhbSgpOwotCi0gICAgICAgIHZvaWQgc2V0TG9hZE1hbnVhbGx5KGJvb2wgbG9h
ZE1hbnVhbGx5KSB7IG1fbG9hZE1hbnVhbGx5ID0gbG9hZE1hbnVhbGx5OyB9Ci0KLSAgICAgICAg
dm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdU
Rjo6Q1N0cmluZyYgcmVzdWx0U3RyaW5nKTsKLSAgICAgICAgdm9pZCBjYW5jZWxBbmREZXN0cm95
U3RyZWFtKE5QUmVhc29uKTsKLQotICAgICAgICBzdGF0aWMgTlBQIG93bmVyRm9yU3RyZWFtKE5Q
U3RyZWFtKik7Ci0KLSAgICAgICAgLy8gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgY2hh
ciosIGludCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciopOwotICAgICAgICB2
aXJ0dWFsIGJvb2wgd2FudHNBbGxTdHJlYW1zKCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBQbHVnaW5TdHJlYW0oUGx1Z2luU3RyZWFtQ2xpZW50KiwgRnJhbWUqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEsIGNv
bnN0IE5QUGx1Z2luRnVuY3MqLCBOUFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0Jik7
Ci0KLSAgICAgICAgdm9pZCBkZWxpdmVyRGF0YSgpOwotICAgICAgICB2b2lkIGRlc3Ryb3lTdHJl
YW0oTlBSZWFzb24pOwotICAgICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oKTsKLQotICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVlc3Q7Ci0gICAgICAgIFJlc291cmNlUmVzcG9u
c2UgbV9yZXNvdXJjZVJlc3BvbnNlOwotCi0gICAgICAgIFBsdWdpblN0cmVhbUNsaWVudCogbV9j
bGllbnQ7Ci0gICAgICAgIEZyYW1lKiBtX2ZyYW1lOwotICAgICAgICBSZWZQdHI8TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVyOwotICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7
Ci0gICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOwotICAgICAgICBQbHVnaW5TdHJlYW1T
dGF0ZSBtX3N0cmVhbVN0YXRlOwotICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5OwotCi0gICAg
ICAgIFRpbWVyIG1fZGVsYXlEZWxpdmVyeVRpbWVyOwotICAgICAgICB2b2lkIGRlbGF5RGVsaXZl
cnlUaW1lckZpcmVkKCk7Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxjaGFyPj4g
bV9kZWxpdmVyeURhdGE7Ci0KLSAgICAgICAgUGxhdGZvcm1GaWxlSGFuZGxlIG1fdGVtcEZpbGVI
YW5kbGU7Ci0KLSAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogbV9wbHVnaW5GdW5jczsKLSAg
ICAgICAgTlBQIG1faW5zdGFuY2U7Ci0gICAgICAgIHVpbnQxNl90IG1fdHJhbnNmZXJNb2RlOwot
ICAgICAgICBpbnQzMl90IG1fb2Zmc2V0OwotICAgICAgICBDU3RyaW5nIG1faGVhZGVyczsKLSAg
ICAgICAgU3RyaW5nIG1fcGF0aDsKLSAgICAgICAgTlBSZWFzb24gbV9yZWFzb247Ci0gICAgICAg
IE5QU3RyZWFtIG1fc3RyZWFtOwotICAgICAgICBQbHVnaW5RdWlya1NldCBtX3F1aXJrczsKLSAg
ICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYjIyNWMw
NGNjMWVlNDFkNTYyZWRiZDkyMGM5ZDI5NzU4ZWU0ZTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0ODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHaXJpc2ggUmFtYWtyaXNobmFuIDxnaXJp
c2hAZm9yd2FyZGJpYXMuaW4+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luVmlldy5oIgotCi0j
aW5jbHVkZSAiQnJpZGdlSlNDLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ29v
a2llSmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5j
bHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBs
dWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJJ
bWFnZS5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93
LmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0j
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgotI2lu
Y2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlLmgiCi0jaW5jbHVkZSAiUHJveHlTZXJ2ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIK
LSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2lu
Y2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgiCi0jaW5jbHVkZSAiV2hlZWxFdmVudC5oIgot
I2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgotI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgotI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xv
Y2suaD4KLSNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0jaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0jaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5oIgotI2VuZGlmCi0KLXVz
aW5nIEpTQzo6RXhlY1N0YXRlOwotdXNpbmcgSlNDOjpKU0xvY2s7Ci11c2luZyBKU0M6OkpTT2Jq
ZWN0OwotdXNpbmcgSlNDOjpKU1ZhbHVlOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0KLXVzaW5nIHN0ZDo6bWluOwotCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBpbnQg
c19jYWxsaW5nUGx1Z2luOwotCi10eXBlZGVmIEhhc2hNYXA8TlBQLCBQbHVnaW5WaWV3Kj4gSW5z
dGFuY2VNYXA7Ci0KLXN0YXRpYyBJbnN0YW5jZU1hcCYgaW5zdGFuY2VNYXAoKQotewotICAgIHN0
YXRpYyBJbnN0YW5jZU1hcCYgbWFwID0gKm5ldyBJbnN0YW5jZU1hcDsKLSAgICByZXR1cm4gbWFw
OwotfQotCi1zdGF0aWMgU3RyaW5nIHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBV
UkwmIHVybCkKLXsKLSAgICBpZiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KHVybCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3Ry
aW5nCi0gICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vi
c3RyaW5nKDExKSk7Ci19Ci0KLVBsdWdpblZpZXcqIFBsdWdpblZpZXc6OnNfY3VycmVudFBsdWdp
blZpZXcgPSAwOwotCi12b2lkIFBsdWdpblZpZXc6OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgp
Ci17Ci0gICAgcG9wUG9wdXBzRW5hYmxlZFN0YXRlKCk7Ci19Ci0KLUludFJlY3QgUGx1Z2luVmll
dzo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAotewotICAgIC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRv
IG91ciBib3VuZHMuCi0gICAgSW50UmVjdCBjbGlwUmVjdChtX3dpbmRvd1JlY3QpOwotICAgIAot
ICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5kIGdldCB0aGUgY2xpcCByZWN0IGZyb20gdGhlIGVu
Y2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmlldy4KLSAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcg
PSBtX2VsZW1lbnQtPmRvY3VtZW50KCkudmlldygpOwotICAgIGNsaXBSZWN0LmludGVyc2VjdChw
YXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZvckZyYW1lT3duZXIobV9lbGVtZW50LCB0cnVlKSk7
Ci0KLSAgICByZXR1cm4gY2xpcFJlY3Q7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQo
KS5wcmludGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocmVjdCAhPSBmcmFtZVJl
Y3QoKSkKLSAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZVJlY3QocmVjdCk7Ci0KLSAgICB1cGRhdGVQ
bHVnaW5XaWRnZXQoKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgLy8gT24gV2luZG93cyBhbHdh
eXMgY2FsbCBwbHVnaW4gdG8gY2hhbmdlIGdlb21ldHJ5LgotICAgIHNldE5QV2luZG93UmVjdChy
ZWN0KTsKLSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAvLyBPbiBVbml4LCBtdWx0aXBsZSBj
YWxscyB0byBzZXROUFdpbmRvdygpIGluIHdpbmRvd2VkIG1vZGUgY2F1c2VzIEZsYXNoIHRvIGNy
YXNoCi0gICAgaWYgKG1fbW9kZSA9PSBOUF9GVUxMIHx8ICFtX2lzV2luZG93ZWQpCi0gICAgICAg
IHNldE5QV2luZG93UmVjdChyZWN0KTsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdpblZpZXc6OmZy
YW1lUmVjdHNDaGFuZ2VkKCkKLXsKLSAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKLX0KLQotdm9p
ZCBQbHVnaW5WaWV3OjpjbGlwUmVjdENoYW5nZWQoKQotewotICAgIHVwZGF0ZVBsdWdpbldpZGdl
dCgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKLXsK
LSAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gUHJvdGVjdCB0aGUgcGx1Zy1pbiBmcm9tIGRlbGV0aW9uIHdoaWxlIGRpc3BhdGNoaW5n
IHRoZSBldmVudC4KLSAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAg
IGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCi0gICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3Rh
dGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5
Ym9hcmRFdmVudCgpKQotICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnQqPihldmVudCkpOwotI2lmIGRlZmluZWQoWFBfTUFDT1NYKQotICAgIGVsc2Ug
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLndoZWVsRXZlbnQgfHwgZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50KQotICAgICAgICBoYW5kbGVXaGVl
bEV2ZW50KHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCkpOwotI2VuZGlmCi0gICAgZWxz
ZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29udGV4dG1lbnVFdmVudCkKLSAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7IC8vIFdlIGRvbid0IGtub3cgaWYgdGhl
IHBsdWctaW4gaGFzIGhhbmRsZWQgbW91c2Vkb3duIGV2ZW50IGJ5IGRpc3BsYXlpbmcgYSBjb250
ZXh0IG1lbnUsIHNvIHdlIG5ldmVyIHdhbnQgV2ViS2l0IHRvIHNob3cgYSBkZWZhdWx0IG9uZS4K
LSNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZvY3Vzb3V0RXZlbnQpCi0g
ICAgICAgIGhhbmRsZUZvY3VzT3V0RXZlbnQoKTsKLSAgICBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5mb2N1c2luRXZlbnQpCi0gICAgICAgIGhhbmRsZUZvY3VzSW5FdmVu
dCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW5pdCgpCi17Ci0gICAgaWYgKG1f
aGF2ZUluaXRpYWxpemVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hhdmVJbml0aWFsaXpl
ZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fcGx1Z2luKSB7Ci0gICAgICAgIEFTU0VSVChtX3N0YXR1
cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6aW5pdCgpOiBJbml0aWFsaXppbmcg
cGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlm
ICghbV9wbHVnaW4tPmxvYWQoKSkgewotICAgICAgICBtX3BsdWdpbiA9IDA7Ci0gICAgICAgIG1f
c3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghc3RhcnRPckFkZFRvVW5zdGFydGVkTGlzdCgpKSB7Ci0gICAgICAg
IG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5
OwotfQotCi1ib29sIFBsdWdpblZpZXc6OnN0YXJ0T3JBZGRUb1Vuc3RhcnRlZExpc3QoKQotewot
ICAgIGlmICghbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBXZSBvbmx5IGRlbGF5IHN0YXJ0aW5nIHRoZSBwbHVnLWluIGlmIHdlJ3JlIGdvaW5n
IHRvIGtpY2sgb2ZmIHRoZSBsb2FkCi0gICAgLy8gb3Vyc2VsdmVzLiBPdGhlcndpc2UsIHRoZSBs
b2FkZXIgd2lsbCB0cnkgdG8gZGVsaXZlciBkYXRhIGJlZm9yZSB3ZSd2ZQotICAgIC8vIHN0YXJ0
ZWQgdGhlIHBsdWctaW4uCi0gICAgaWYgKCFtX2xvYWRNYW51YWxseSAmJiAhbV9wYXJlbnRGcmFt
ZS0+cGFnZSgpLT5jYW5TdGFydE1lZGlhKCkpIHsKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9j
dW1lbnQoKS0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKHRoaXMpOwotICAgICAgICBtX2lzV2Fp
dGluZ1RvU3RhcnQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gc3RhcnQoKTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpzdGFydCgpCi17Ci0gICAgaWYg
KG1faXNTdGFydGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2lzV2FpdGluZ1Rv
U3RhcnQgPSBmYWxzZTsKLQotICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxl
cigpLnJlZ2lzdGVyUGx1Z2luKG1faW5zdGFuY2UpOwotCi0gICAgQVNTRVJUKG1fcGx1Z2luKTsK
LSAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3ApOwotCi0gICAgTlBFcnJv
ciBucEVycjsKLSAgICB7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3
KHRoaXMpOwotICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhK
U0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOwotICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKChOUE1J
TUVUeXBlKW1fbWltZVR5cGUudXRmOCgpLmRhdGEoKSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3Bh
cmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9wYXJhbVZhbHVlcywgTlVMTCk7Ci0gICAgICAgIHNl
dENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgICAgICBMT0dfTlBFUlJPUihucEVycik7Ci0gICAg
ICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwotICAgIH0KLQotICAgIGlm
IChucEVyciAhPSBOUEVSUl9OT19FUlJPUikgewotICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0
YXR1c0Nhbk5vdExvYWRQbHVnaW47Ci0gICAgICAgIFBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXI6
OnNjaGVkdWxlcigpLnVucmVnaXN0ZXJQbHVnaW4obV9pbnN0YW5jZSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2lzU3RhcnRlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1f
dXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFudWFsbHkpIHsKLSAgICAgICAgRnJhbWVMb2FkUmVx
dWVzdCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCkpOwotICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNl
dEhUVFBNZXRob2QoIkdFVCIpOwotICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnNldFVSTChtX3VybCk7Ci0gICAgICAgIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFs
c2UsIDApOwotICAgIH0KLQotICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vz
c2Z1bGx5OwotCi0gICAgaWYgKCFwbGF0Zm9ybVN0YXJ0KCkpCi0gICAgICAgIG1fc3RhdHVzID0g
UGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKLQotICAgIGlmIChtX3N0YXR1cyAhPSBQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQoKQotewot
ICAgIEFTU0VSVCghbV9pc1N0YXJ0ZWQpOwotICAgIGlmICghc3RhcnQoKSkKLSAgICAgICAgcGFy
ZW50RnJhbWUoKS0+bG9hZGVyKCkuY2xpZW50KCkuZGlzcGF0Y2hEaWRGYWlsVG9TdGFydFBsdWdp
bih0aGlzKTsKLX0KLQotUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQotewotICAgIExPRyhQbHVn
aW5zLCAiUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKSIpOwotCi0gICAgQVNTRVJUKCFtX2xpZmVT
dXBwb3J0VGltZXIuaXNBY3RpdmUoKSk7Ci0KLSAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gZmluZCB0
aGUgcGx1Zy1pbiwgd2UnbGwgcmV0dXJuIGVhcmx5IGluIG91ciBjb25zdHJ1Y3RvciwgYW5kCi0g
ICAgLy8gbV9pbnN0YW5jZSB3aWxsIGJlIDAuCi0gICAgaWYgKG1faW5zdGFuY2UpCi0gICAgICAg
IGluc3RhbmNlTWFwKCkucmVtb3ZlKG1faW5zdGFuY2UpOwotCi0gICAgaWYgKG1faXNXYWl0aW5n
VG9TdGFydCkKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+cmVtb3ZlTWVkaWFD
YW5TdGFydExpc3RlbmVyKHRoaXMpOwotCi0gICAgc3RvcCgpOwotCi0gICAgZnJlZVN0cmluZ0Fy
cmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsKLSAgICBmcmVlU3RyaW5nQXJyYXkobV9w
YXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsKLQotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotCi0g
ICAgbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4o
dGhpcyk7Ci0KLSAgICBpZiAobV9wbHVnaW4gJiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkpCi0gICAgICAgIG1fcGx1Z2luLT51bmxv
YWQoKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKLXsKLSAgICBpZiAoIW1faXNTdGFy
dGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnN0
b3AoKTogU3RvcHBpbmcgcGx1Zy1pbiAnJXMnIiwgbV9wbHVnaW4tPm5hbWUoKS51dGY4KCkuZGF0
YSgpKTsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBzdHJlYW1zID0gbV9z
dHJlYW1zOwotICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgZW5k
ID0gc3RyZWFtcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4g
Pjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAoKml0KS0+c3RvcCgpOwotICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgp
KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7Ci0KLSAgICBtX2lz
U3RhcnRlZCA9IGZhbHNlOwotCi0gICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotI2lmIGRlZmluZWQoWFBfV0lOKSAmJiAhUExBVEZPUk0oR1RLKQotICAg
IC8vIFVuc3ViY2xhc3MgdGhlIHdpbmRvdwotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAg
ICAgV05EUFJPQyBjdXJyZW50V25kUHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DKTsKLQotICAgICAgICBpZiAoY3VycmVu
dFduZFByb2MgPT0gUGx1Z2luVmlld1duZFByb2MpCi0gICAgICAgICAgICBTZXRXaW5kb3dMb25n
UHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdXTFBfV05EUFJPQywgKExPTkdfUFRSKW1fcGx1
Z2luV25kUHJvYyk7Ci0gICAgfQotI2VuZGlmIC8vICFkZWZpbmVkKFhQX1dJTikgfHwgUExBVEZP
Uk0oR1RLKQotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0jaWYgIWRl
ZmluZWQoWFBfTUFDT1NYKQotICAgIC8vIENsZWFyIHRoZSB3aW5kb3cKLSAgICBtX25wV2luZG93
LndpbmRvdyA9IDA7Ci0KLSAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dyAmJiAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udFNldE51bGxX
aW5kb3dIYW5kbGVPbkRlc3Ryb3kpKSB7Ci0gICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KHRoaXMpOwotICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgICAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2lu
ZG93KTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgICAgIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOwotICAgIH0KLQotI2lmZGVmIFhQX1VOSVgKLSAg
ICBkZWxldGUgc3RhdGljX2Nhc3Q8TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCo+KG1fbnBXaW5k
b3cud3NfaW5mbyk7Ci0gICAgbV9ucFdpbmRvdy53c19pbmZvID0gMDsKLSNlbmRpZgotCi0jZW5k
aWYgLy8gIWRlZmluZWQoWFBfTUFDT1NYKQotCi0gICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxl
cjo6c2NoZWR1bGVyKCkudW5yZWdpc3RlclBsdWdpbihtX2luc3RhbmNlKTsKLQotICAgIE5QU2F2
ZWREYXRhKiBzYXZlZERhdGEgPSAwOwotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KHRoaXMpOwotICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0gICAgTlBFcnJvciBucEVy
ciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5kZXN0cm95KG1faW5zdGFuY2UsICZzYXZlZERh
dGEpOwotICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOwotICAgIExPR19OUEVSUk9SKG5wRXJy
KTsKLSAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLQotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChzYXZlZERhdGEpIHsKLSAgICAgICAgLy8g
VE9ETzogQWN0dWFsbHkgc2F2ZSB0aGlzIGRhdGEgaW5zdGVhZCBvZiBqdXN0IGRpc2NhcmRpbmcg
aXQKLSAgICAgICAgaWYgKHNhdmVkRGF0YS0+YnVmKQotICAgICAgICAgICAgTlBOX01lbUZyZWUo
c2F2ZWREYXRhLT5idWYpOwotICAgICAgICBOUE5fTWVtRnJlZShzYXZlZERhdGEpOwotICAgIH0K
LSNlbmRpZgotCi0gICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOwotfQotCi12b2lkIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqIHBsdWdpblZpZXcpCi17Ci0gICAg
c19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdpblZpZXc7Ci19Ci0KLVBsdWdpblZpZXcqIFBsdWdp
blZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCkKLXsKLSAgICByZXR1cm4gc19jdXJyZW50UGx1Z2lu
VmlldzsKLX0KLQotc3RhdGljIGNoYXIqIGNyZWF0ZVVURjhTdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHIpCi17Ci0gICAgQ1N0cmluZyBjc3RyID0gc3RyLnV0ZjgoKTsKLSAgICBjb25zdCBzaXplX3Qg
Y3N0ckxlbmd0aCA9IGNzdHIubGVuZ3RoKCk7Ci0gICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjc3RyTGVuZ3RoICsgMSkpOwotCi0gICAgbWVtY3B5
KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHJMZW5ndGgpOwotICAgIHJlc3VsdFtjc3RyTGVuZ3Ro
XSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBl
cmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgaWYgKCFtX2lzU3Rh
cnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0
IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMg
YmVpbmcgCi0gICAgLy8gZGlzcGxheWVkIHVubGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1l
IGZyYW1lIGFzIHRoZSBwbHVnaW4uCi0gICAgY29uc3QgU3RyaW5nJiB0YXJnZXRGcmFtZU5hbWUg
PSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCk7Ci0gICAgaWYgKG1fcGFy
ZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+bG9h
ZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJiAodGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgp
IHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJl
bnRGcmFtZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFVSTCByZXF1ZXN0VVJMID0gcmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwotICAgIFN0cmlu
ZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKLQot
ICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IocmVxdWVzdC0+c2hvdWxk
QWxsb3dQb3B1cHMoKSA/IERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUgOiBQb3NzaWJs
eVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0KLSAgICBpZiAoanNTdHJpbmcuaXNOdWxsKCkpIHsK
LSAgICAgICAgLy8gaWYgdGhpcyBpcyBub3QgYSB0YXJnZXRlZCByZXF1ZXN0LCBjcmVhdGUgYSBz
dHJlYW0gZm9yIGl0LiBvdGhlcndpc2UsCi0gICAgICAgIC8vIGp1c3QgcGFzcyBpdCBvZmYgdG8g
dGhlIGxvYWRlcgotICAgICAgICBpZiAodGFyZ2V0RnJhbWVOYW1lLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gc3RyZWFtID0gUGx1Z2luU3RyZWFtOjpjcmVh
dGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgp
LnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3Qt
Pm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1
Z2luLT5xdWlya3MoKSk7Ci0gICAgICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAg
ICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBJZiB0aGUgdGFyZ2V0IGZyYW1lIGlzIG91ciBmcmFtZSwgd2UgY291bGQgZGVzdHJveSB0aGUK
LSAgICAgICAgICAgIC8vIFBsdWdpblZpZXcsIHNvIHdlIHByb3RlY3QgaXQuIDxyZGFyOi8vcHJv
YmxlbS82OTkxMjUxPgotICAgICAgICAgICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3QodGhp
cyk7Ci0KLSAgICAgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVSZXF1ZXN0KG1fcGFyZW50
RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3Qo
KSk7Ci0gICAgICAgICAgICBmcmFtZVJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldEZyYW1lTmFt
ZSk7Ci0gICAgICAgICAgICBmcmFtZVJlcXVlc3Quc2V0U2hvdWxkQ2hlY2tOZXdXaW5kb3dQb2xp
Y3kodHJ1ZSk7Ci0gICAgICAgICAgICBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5sb2FkKGZyYW1l
UmVxdWVzdCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2
OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVuIHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9h
ZGluZwotICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkgewotICAg
ICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOwotICAg
ICAgICAgICAgICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9N
V2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgICAgICAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bih0cnVlKTsKLSAgICAgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90
aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgTlBSRVNf
RE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKLSAgICAgICAgICAgICAgICBzZXRDYWxsaW5n
UGx1Z2luKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1
Z2luVmlldygwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gVGFyZ2V0ZWQgSmF2YVNjcmlwdCByZXF1ZXN0cyBhcmUgb25seSBhbGxv
d2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IHBsdWdpbgotICAg
IC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUgc3VyZSBpbiA6OmxvYWQuCi0gICAgQVNTRVJUKHRh
cmdldEZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLmZpbmQodGFy
Z2V0RnJhbWVOYW1lKSA9PSBtX3BhcmVudEZyYW1lKTsKLSAgICAKLSAgICAvLyBFeGVjdXRpbmcg
YSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdl
IGtlZXAgYSByZWZlcmVuY2UgdG8gaXQuCi0gICAgUmVmUHRyPFBsdWdpblZpZXc+IHByb3RlY3Rv
cih0aGlzKTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX3BhcmVudEZy
YW1lLT5zY3JpcHQoKS5leGVjdXRlU2NyaXB0KGpzU3RyaW5nLCByZXF1ZXN0LT5zaG91bGRBbGxv
d1BvcHVwcygpKTsKLQotICAgIGlmICh0YXJnZXRGcmFtZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAg
ICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKLQotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0
U3RhdGUgPSBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgQ1N0cmluZyBjc3RyOwotICAgICAgICBpZiAocmVz
dWx0LmdldFN0cmluZyhzY3JpcHRTdGF0ZSwgcmVzdWx0U3RyaW5nKSkKLSAgICAgICAgICAgIGNz
dHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOwotCi0gICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+
IHN0cmVhbSA9IFBsdWdpblN0cmVhbTo6Y3JlYXRlKHRoaXMsIG1fcGFyZW50RnJhbWUuZ2V0KCks
IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+
c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVn
aW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3BsdWdpbi0+cXVpcmtzKCkpOwotICAgICAgICBtX3N0
cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgICAgIHN0cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0o
cmVxdWVzdFVSTCwgY3N0cik7Ci0gICAgfQotfQotCi12b2lkIFBsdWdpblZpZXc6OnJlcXVlc3RU
aW1lckZpcmVkKCkKLXsKLSAgICBBU1NFUlQoIW1fcmVxdWVzdHMuaXNFbXB0eSgpKTsKLSAgICBB
U1NFUlQoIW1faXNKYXZhU2NyaXB0UGF1c2VkKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbHVn
aW5SZXF1ZXN0PiByZXF1ZXN0ID0gV1RGOjptb3ZlKG1fcmVxdWVzdHNbMF0pOwotICAgIG1fcmVx
dWVzdHMucmVtb3ZlKDApOwotICAgIAotICAgIC8vIFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVm
b3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNhbGwgdG8KLSAgICAvLyBwZXJm
b3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlbGV0ZWQuCi0gICAg
aWYgKCFtX3JlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRP
bmVTaG90KDApOwotCi0gICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6c2NoZWR1bGVSZXF1ZXN0KHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5SZXF1
ZXN0PiByZXF1ZXN0KQotewotICAgIG1fcmVxdWVzdHMuYXBwZW5kKFdURjo6bW92ZShyZXF1ZXN0
KSk7Ci0KLSAgICBpZiAoIW1faXNKYXZhU2NyaXB0UGF1c2VkKQotICAgICAgICBtX3JlcXVlc3RU
aW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6bG9hZChjb25z
dCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRp
b24sIHZvaWQqIG5vdGlmeURhdGEpCi17Ci0gICAgQVNTRVJUKGZyYW1lTG9hZFJlcXVlc3QucmVz
b3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJHRVQiIHx8IGZyYW1lTG9hZFJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7Ci0KLSAgICBVUkwgdXJs
ID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKLSAgICAKLSAgICBp
ZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOwotCi0g
ICAgLy8gRG9uJ3QgYWxsb3cgcmVxdWVzdHMgdG8gYmUgbWFkZSB3aGVuIHRoZSBkb2N1bWVudCBs
b2FkZXIgaXMgc3RvcHBpbmcgYWxsIGxvYWRlcnMuCi0gICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgaWYgKCFs
b2FkZXIgfHwgbG9hZGVyLT5pc1N0b3BwaW5nKCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwotCi0gICAgY29uc3QgU3RyaW5nJiB0YXJnZXRGcmFtZU5hbWUgPSBmcmFtZUxv
YWRSZXF1ZXN0LmZyYW1lTmFtZSgpOwotICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmlu
Z0lmSmF2YVNjcmlwdFVSTCh1cmwpOwotCi0gICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSkgewot
ICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4g
VGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4KLSAgICAgICAgaWYgKCFtX3BhcmVudEZyYW1lLT5z
Y3JpcHQoKS5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCi0gICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgICAgICAvLyBGb3Igc2Vj
dXJpdHkgcmVhc29ucywgb25seSBhbGxvdyBKUyByZXF1ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBm
cmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVnLWluLgotICAgICAgICBpZiAoIXRhcmdldEZyYW1l
TmFtZS5pc051bGwoKSAmJiBtX3BhcmVudEZyYW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5h
bWUpICE9IG1fcGFyZW50RnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9Q
QVJBTTsKLSAgICB9IGVsc2UgaWYgKCFtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5jYW5EaXNwbGF5KHVybCkpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOwotCi0gICAgc2NoZWR1bGVSZXF1ZXN0KHN0ZDo6bWFrZV91bmlxdWU8UGx1Z2luUmVx
dWVzdD4oZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwgYXJl
UG9wdXBzQWxsb3dlZCgpKSk7Ci0KLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19Ci0KLXN0
YXRpYyBVUkwgbWFrZVVSTChjb25zdCBVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0aXZl
VVJMU3RyaW5nKQotewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSByZWxhdGl2ZVVSTFN0cmluZzsK
LQotICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgotICAgIHVybFN0cmluZy5yZXBsYWNl
V2l0aExpdGVyYWwoJ1xuJywgIiIpOwotICAgIHVybFN0cmluZy5yZXBsYWNlV2l0aExpdGVyYWwo
J1xyJywgIiIpOwotCi0gICAgcmV0dXJuIFVSTChiYXNlVVJMLCB1cmxTdHJpbmcpOwotfQotCi1O
UEVycm9yIFBsdWdpblZpZXc6OmdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNo
YXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZy
YW1lTG9hZFJlcXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KSk7Ci0KLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0g
ICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOwotCi0gICAgcmV0dXJuIGxv
YWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwgbm90aWZ5RGF0YSk7Ci19Ci0KLU5QRXJyb3IgUGx1
Z2luVmlldzo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQotewot
ICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3BhcmVudEZyYW1lLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKLQotICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJh
bWVOYW1lKHRhcmdldCk7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5z
ZXRIVFRQTWV0aG9kKCJHRVQiKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVz
dCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwg
dXJsKSk7Ci0KLSAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7Ci19
Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6cG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBm
aWxlLCB2b2lkKiBub3RpZnlEYXRhKQotewotICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFy
Z2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSwgdHJ1ZSwgdHJ1ZSk7Ci19Ci0KLU5QRXJy
b3IgUGx1Z2luVmlldzo6cG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdl
dCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQotewotICAgIC8v
IEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cgaGVhZGVycyB0byBiZSBzcGVjaWZpZWQgdmlhIE5Q
UF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxlLgotICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwg
dGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwgZmFsc2UsIGZpbGUpOwotfQotCi1OUEVycm9yIFBs
dWdpblZpZXc6Om5ld1N0cmVhbShOUE1JTUVUeXBlLCBjb25zdCBjaGFyKiAvKiB0YXJnZXQgKi8s
IE5QU3RyZWFtKiopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAvLyBVbnN1cHBvcnRl
ZAotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotCi1pbnQzMl90IFBsdWdpblZp
ZXc6OndyaXRlKE5QU3RyZWFtKiwgaW50MzJfdCAvKiBsZW4gKi8sIHZvaWQqIC8qIGJ1ZmZlciAq
LykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIC8vIFVuc3VwcG9ydGVkCi0gICAgcmV0
dXJuIC0xOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0q
IHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQotewotICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0
cmVhbTo6b3duZXJGb3JTdHJlYW0oc3RyZWFtKSAhPSBtX2luc3RhbmNlKQotICAgICAgICByZXR1
cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUjsKLQotICAgIFBsdWdpblN0cmVhbSogYnJv
d3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBsdWdpblN0cmVhbSo+KHN0cmVhbS0+bmRhdGEpOwot
ICAgIGJyb3dzZXJTdHJlYW0tPmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKLQotICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29u
c3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUt
PnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+Y2hyb21lKCkuc2V0U3RhdHVzYmFyVGV4dChtX3BhcmVu
dEZyYW1lLmdldCgpLCBTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpKTsKLX0KLQotTlBFcnJvciBQ
bHVnaW5WaWV3OjpzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCi17
Ci0gICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpzZXRWYWx1ZSglcyk6ICIsIHByZXR0eU5h
bWVGb3JOUFBWYXJpYWJsZSh2YXJpYWJsZSwgdmFsdWUpLmRhdGEoKSk7Ci0KLSAgICBzd2l0Y2gg
KHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9vbDoKLSAgICAgICAgbV9p
c1dpbmRvd2VkID0gdmFsdWU7Ci0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICBj
YXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6Ci0gICAgICAgIG1faXNUcmFuc3BhcmVudCA9
IHZhbHVlOwotICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0jaWYgZGVmaW5lZChYUF9N
QUNPU1gpCi0gICAgY2FzZSBOUFBWcGx1Z2luRHJhd2luZ01vZGVsOiB7Ci0gICAgICAgIC8vIENh
biBvbmx5IHNldCBkcmF3aW5nIG1vZGVsIGluc2lkZSBOUFBfTmV3KCkKLSAgICAgICAgaWYgKHRo
aXMgIT0gY3VycmVudFBsdWdpblZpZXcoKSkKLSAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7Ci0KLSAgICAgICAgTlBEcmF3aW5nTW9kZWwgbmV3RHJhd2luZ01vZGVsID0gTlBE
cmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVlKSk7Ci0gICAgICAgIHN3aXRjaCAobmV3RHJhd2lu
Z01vZGVsKSB7Ci0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9kZWxDb3JlR3JhcGhpY3M6Ci0gICAg
ICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIGNhc2UgTlBEcmF3aW5nTW9k
ZWxDb3JlQW5pbWF0aW9uOgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgTE9HKFBsdWdp
bnMsICJQbHVnaW4gYXNrZWQgZm9yIHVuc3VwcG9ydGVkIGRyYXdpbmcgbW9kZWw6ICVzIiwKLSAg
ICAgICAgICAgICAgICAgICAgcHJldHR5TmFtZUZvckRyYXdpbmdNb2RlbChuZXdEcmF3aW5nTW9k
ZWwpKTsKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgY2FzZSBOUFBWcGx1Z2luRXZlbnRNb2RlbDogewotICAgICAgICAvLyBD
YW4gb25seSBzZXQgZXZlbnQgbW9kZWwgaW5zaWRlIE5QUF9OZXcoKQotICAgICAgICBpZiAodGhp
cyAhPSBjdXJyZW50UGx1Z2luVmlldygpKQotICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKLQotICAgICAgICBOUEV2ZW50TW9kZWwgbmV3RXZlbnRNb2RlbCA9IE5QRXZlbnRN
b2RlbCh1aW50cHRyX3QodmFsdWUpKTsKLSAgICAgICAgc3dpdGNoIChuZXdFdmVudE1vZGVsKSB7
Ci0gICAgICAgIGNhc2UgTlBFdmVudE1vZGVsQ29jb2E6Ci0gICAgICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBMT0coUGx1Z2lucywg
IlBsdWdpbiBhc2tlZCBmb3IgdW5zdXBwb3J0ZWQgZXZlbnQgbW9kZWw6ICVzIiwKLSAgICAgICAg
ICAgICAgICAgICAgcHJldHR5TmFtZUZvckV2ZW50TW9kZWwobmV3RXZlbnRNb2RlbCkpOwotICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgICAgIH0KLSAgICB9Ci0j
ZW5kaWYgLy8gZGVmaW5lZChYUF9NQUNPU1gpCi0KLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9
Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0cy5zaXplKCk7IGkrKykKLSAgICAg
ICAgaW52YWxpZGF0ZVJlY3QobV9pbnZhbGlkUmVjdHNbaV0pOwotICAgIG1faW52YWxpZFJlY3Rz
LmNsZWFyKCk7Ci19Ci0KLQotdm9pZCBQbHVnaW5WaWV3OjpwdXNoUG9wdXBzRW5hYmxlZFN0YXRl
KGJvb2wgc3RhdGUpCi17Ci0gICAgbV9wb3B1cFN0YXRlU3RhY2suYXBwZW5kKHN0YXRlKTsKLX0K
LSAKLXZvaWQgUGx1Z2luVmlldzo6cG9wUG9wdXBzRW5hYmxlZFN0YXRlKCkKLXsKLSAgICBtX3Bv
cHVwU3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6YXJlUG9w
dXBzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BvcHVwU3RhdGVTdGFjay5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBtX3BvcHVwU3RhdGVTdGFjay5sYXN0KCk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6c2V0SmF2YVNjcmlwdFBhdXNlZChib29s
IHBhdXNlZCkKLXsKLSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQgPT0gcGF1c2VkKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9pc0phdmFTY3JpcHRQYXVzZWQgPSBwYXVzZWQ7Ci0KLSAgICBp
ZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0gICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0b3AoKTsK
LSAgICBlbHNlIGlmICghbV9yZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcmVxdWVzdFRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotTlBPYmplY3QqIFBsdWdpblZpZXc6Om5wT2JqZWN0KCkKLXsKLSAgICBOUE9iamVjdCogb2Jq
ZWN0ID0gMDsKLQotICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIW1fcGx1Z2luIHx8ICFtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8g
T24gV2luZG93cywgY2FsbGluZyBKYXZhJ3MgTlBOX0dldFZhbHVlIGNhbiBhbGxvdyB0aGUgbWVz
c2FnZSBsb29wIHRvCi0gICAgLy8gcnVuLCBhbGxvd2luZyBsb2FkaW5nIHRvIHRha2UgcGxhY2Ug
b3IgSmF2YVNjcmlwdCB0byBydW4uIFByb3RlY3QgdGhlCi0gICAgLy8gUGx1Z2luVmlldyBmcm9t
IGRlc3RydWN0aW9uLiA8cmRhcjovL3Byb2JsZW0vNjk3ODgwND4KLSAgICBSZWZQdHI8UGx1Z2lu
Vmlldz4gcHJvdGVjdCh0aGlzKTsKLQotICAgIE5QRXJyb3IgbnBFcnI7Ci0gICAgewotICAgICAg
ICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKLSAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKLSAgICAgICAgbnBFcnIgPSBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNj
cmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFs
c2UpOwotICAgICAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKLSAgICB9
Ci0KLSAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG9iamVjdDsKLX0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPEpTQzo6QmluZGlu
Z3M6Okluc3RhbmNlPiBQbHVnaW5WaWV3OjpiaW5kaW5nSW5zdGFuY2UoKQotewotI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIE5QT2JqZWN0KiBvYmplY3QgPSBucE9iamVjdCgp
OwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChoYXNPbmVS
ZWYoKSkgewotICAgICAgICAvLyBUaGUgcmVuZGVyZXIgZm9yIHRoZSBQbHVnaW5WaWV3IHdhcyBk
ZXN0cm95ZWQgZHVyaW5nIHRoZSBhYm92ZSBjYWxsLCBhbmQKLSAgICAgICAgLy8gdGhlIFBsdWdp
blZpZXcgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIHNvIHdl
Ci0gICAgICAgIC8vIHJldHVybiBudWxsLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUt
PnNjcmlwdCgpLmNyZWF0ZVJvb3RPYmplY3QodGhpcyk7Ci0gICAgUmVmUHRyPEpTQzo6QmluZGlu
Z3M6Okluc3RhbmNlPiBpbnN0YW5jZSA9IEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRl
KG9iamVjdCwgcm9vdC5yZWxlYXNlKCkpOwotCi0gICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVj
dCk7Ci0KLSAgICByZXR1cm4gaW5zdGFuY2UucmVsZWFzZSgpOwotI2Vsc2UKLSAgICByZXR1cm4g
MDsKLSNlbmRpZgotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2lu
U3RyZWFtKiBzdHJlYW0pCi17Ci0gICAgQVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0p
KTsKLQotICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCi17Ci0gICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6
ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gcGFyYW1O
YW1lcy5zaXplKCk7Ci0gICAgdW5zaWduZWQgcGFyYW1Db3VudCA9IDA7Ci0KLSAgICBtX3BhcmFt
TmFtZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciop
ICogc2l6ZSkpOwotICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4o
ZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNv
bnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdu
b3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3aW5kb3dsZXNzdmlkZW8iKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChwYXJhbU5hbWVzW2ldID09ICJwbHVnaW5zcGFnZSIp
Ci0gICAgICAgICAgICBtX3BsdWdpbnNQYWdlID0gcGFyYW1WYWx1ZXNbaV07Ci0KLSAgICAgICAg
bV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbU5hbWVzW2ld
KTsKLSAgICAgICAgbV9wYXJhbVZhbHVlc1twYXJhbUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmco
cGFyYW1WYWx1ZXNbaV0pOwotCi0gICAgICAgIHBhcmFtQ291bnQrKzsKLSAgICB9Ci0KLSAgICBt
X3BhcmFtQ291bnQgPSBwYXJhbUNvdW50OwotfQotCi1QbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZy
YW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcGx1
Z2luLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotICAgIDogbV9w
YXJlbnRGcmFtZShwYXJlbnRGcmFtZSkKLSAgICAsIG1fcGx1Z2luKHBsdWdpbikKLSAgICAsIG1f
ZWxlbWVudChlbGVtZW50KQotICAgICwgbV9pc1N0YXJ0ZWQoZmFsc2UpCi0gICAgLCBtX3VybCh1
cmwpCi0gICAgLCBtX3N0YXR1cyhQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAg
LCBtX3JlcXVlc3RUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6OnJlcXVlc3RUaW1lckZpcmVkKQot
ICAgICwgbV9pbnZhbGlkYXRlVGltZXIoKnRoaXMsICZQbHVnaW5WaWV3OjppbnZhbGlkYXRlVGlt
ZXJGaXJlZCkKLSAgICAsIG1fcG9wUG9wdXBzU3RhdGVUaW1lcigqdGhpcywgJlBsdWdpblZpZXc6
OnBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCkKLSAgICAsIG1fbGlmZVN1cHBvcnRUaW1lcigqdGhp
cywgJlBsdWdpblZpZXc6OmxpZmVTdXBwb3J0VGltZXJGaXJlZCkKLSAgICAsIG1fbW9kZShsb2Fk
TWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1CRUQpCi0gICAgLCBtX3BhcmFtTmFtZXMoMCkKLSAg
ICAsIG1fcGFyYW1WYWx1ZXMoMCkKLSAgICAsIG1fbWltZVR5cGUobWltZVR5cGUpCi0gICAgLCBt
X2luc3RhbmNlKDApCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgLCBtX2lzV2luZG93ZWQo
ZmFsc2UpCi0gICAgLCBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZChmYWxzZSkKLSAg
ICAsIG1fa2V5RG93blNlbnQoZmFsc2UpCi0gICAgLCBtX2Rpc3JlZ2FyZEtleVVwQ291bnRlcigw
KQotI2Vsc2UKLSAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQotI2VuZGlmCi0gICAgLCBtX2lzVHJh
bnNwYXJlbnQoZmFsc2UpCi0gICAgLCBtX2hhdmVJbml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1f
aXNXYWl0aW5nVG9TdGFydChmYWxzZSkKLSNpZiBkZWZpbmVkKFhQX1VOSVgpCi0gICAgLCBtX25l
ZWRzWEVtYmVkKGZhbHNlKQotI2VuZGlmCi0jaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCi0gICAgLCBtX3BsdWdpblduZFByb2MoMCkKLSAgICAsIG1fbGFzdE1l
c3NhZ2UoMCkKLSAgICAsIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyhmYWxzZSkKLSAgICAsIG1f
d21QcmludEhEQygwKQotICAgICwgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldChmYWxzZSkKLSNl
bmRpZgotI2lmIFBMQVRGT1JNKEVGTCkKLSAgICAsIG1fd2luZG93KDApCi0jZW5kaWYKLSNpZiBk
ZWZpbmVkKFhQX01BQ09TWCkKLSAgICAsIG1fY29udGV4dFJlZigwKQotI2VuZGlmCi0jaWYgZGVm
aW5lZChYUF9VTklYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAsIG1faGFz
UGVuZGluZ0dlb21ldHJ5Q2hhbmdlKHRydWUpCi0gICAgLCBtX2RyYXdhYmxlKDApCi0gICAgLCBt
X3Zpc3VhbCgwKQotICAgICwgbV9jb2xvcm1hcCgwKQotICAgICwgbV9wbHVnaW5EaXNwbGF5KDAp
Ci0jZW5kaWYKLSAgICAsIG1fbG9hZE1hbnVhbGx5KGxvYWRNYW51YWxseSkKLSAgICAsIG1fbWFu
dWFsU3RyZWFtKDApCi0gICAgLCBtX2lzSmF2YVNjcmlwdFBhdXNlZChmYWxzZSkKLSAgICAsIG1f
aGF2ZUNhbGxlZFNldFdpbmRvdyhmYWxzZSkKLXsKLSAgICBpZiAoIW1fcGx1Z2luKSB7Ci0gICAg
ICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1faW5zdGFuY2UgPSAmbV9pbnN0YW5jZVN0cnVjdDsKLSAgICBt
X2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7Ci0gICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOwotCi0g
ICAgaW5zdGFuY2VNYXAoKS5hZGQobV9pbnN0YW5jZSwgdGhpcyk7Ci0KLSAgICBzZXRQYXJhbWV0
ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKLQotICAgIG1lbXNldCgmbV9ucFdpbmRvdywg
MCwgc2l6ZW9mKG1fbnBXaW5kb3cpKTsKLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICBtZW1z
ZXQoJm1fbnBDZ0NvbnRleHQsIDAsIHNpemVvZihtX25wQ2dDb250ZXh0KSk7Ci0jZW5kaWYKLQot
ICAgIHJlc2l6ZShzaXplKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojpmb2N1c1BsdWdpbkVsZW1l
bnQoKQotewotICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQotICAg
ICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudChtX2VsZW1lbnQs
IG1fcGFyZW50RnJhbWUpOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1l
bnQoKS0+c2V0Rm9jdXNlZEVsZW1lbnQobV9lbGVtZW50KTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3
OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17
Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICBBU1NFUlQo
IW1fbWFudWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFsU3RyZWFtID0gUGx1Z2luU3RyZWFtOjpj
cmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCku
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCwgcGx1Z2luKCktPnBs
dWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcGx1Z2luLT5xdWlya3MoKSk7Ci0gICAgbV9tYW51
YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKLQotICAgIG1fbWFudWFsU3RyZWFtLT5k
aWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRp
ZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKG1f
c3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICBBU1NFUlQobV9tYW51YWxTdHJl
YW0pOwotICAgIAotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0YSgwLCBkYXRhLCBs
ZW5ndGgpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZpbmlzaExvYWRpbmcoKQotewotICAg
IGlmIChtX3N0YXR1cyAhPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChtX2xvYWRNYW51YWxseSk7Ci0gICAgQVNTRVJUKG1fbWFu
dWFsU3RyZWFtKTsKLQotICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOwot
fQotCi12b2lkIFBsdWdpblZpZXc6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
Ci17Ci0gICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fbG9hZE1hbnVhbGx5KTsKLSAgICAKLSAg
ICBpZiAobV9tYW51YWxTdHJlYW0pCi0gICAgICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGYWlsKDAs
IGVycm9yKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRDYWxsaW5nUGx1Z2luKGJvb2wgYikg
Y29uc3QKLXsKLSAgICBpZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a0hhc01vZGFsTWVzc2FnZUxvb3ApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYikKLSAg
ICAgICAgKytzX2NhbGxpbmdQbHVnaW47Ci0gICAgZWxzZQotICAgICAgICAtLXNfY2FsbGluZ1Bs
dWdpbjsKLQotICAgIEFTU0VSVChzX2NhbGxpbmdQbHVnaW4gPj0gMCk7Ci19Ci0KLWJvb2wgUGx1
Z2luVmlldzo6aXNDYWxsaW5nUGx1Z2luKCkKLXsKLSAgICByZXR1cm4gc19jYWxsaW5nUGx1Z2lu
ID4gMDsKLX0KLQotUGFzc1JlZlB0cjxQbHVnaW5WaWV3PiBQbHVnaW5WaWV3OjpjcmVhdGUoRnJh
bWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBIVE1MUGx1Z0luRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQotewotICAgIC8vIGlmIHdlIGZhaWwgdG8gZmluZCBhIHBs
dWdpbiBmb3IgdGhpcyBNSU1FIHR5cGUsIGZpbmRQbHVnaW4gd2lsbCBzZWFyY2ggZm9yCi0gICAg
Ly8gYSBwbHVnaW4gYnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCB1cGRhdGUgdGhlIE1JTUUgdHlw
ZSwgc28gcGFzcyBhIG11dGFibGUgU3RyaW5nCi0gICAgU3RyaW5nIG1pbWVUeXBlQ29weSA9IG1p
bWVUeXBlOwotICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0
YWxsZWRQbHVnaW5zKCktPmZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwotCi0gICAgLy8g
Tm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFy
Y2hpbmcgYWdhaW4KLSAgICBpZiAoIXBsdWdpbiAmJiBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVk
UGx1Z2lucygpLT5yZWZyZXNoKCkpIHsKLSAgICAgICAgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7
Ci0gICAgICAgIHBsdWdpbiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPmZp
bmRQbHVnaW4odXJsLCBtaW1lVHlwZUNvcHkpOwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUGx1Z2luVmlldyhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmws
IHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSkpOwot
fQotCi12b2lkIFBsdWdpblZpZXc6OmZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXks
IGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFzdHJpbmdBcnJheSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgZmFzdEZyZWUo
c3RyaW5nQXJyYXlbaV0pOwotCi0gICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOwotfQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1
ZmZlcikKLXsKLSAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdc
bic7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShj
b25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1
ZmZlci5kYXRhKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKLSAgICAgICAgLy8g
U3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgotICAgICAgICBpZiAoYnl0ZXNb
aV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKLSAgICAgICAgICAgIHJldHVybiBp
ICsgMjsKLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIg
Q1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KLSAgICAgICAgaWYgKGJ5
dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsKLSAgICAgICAgICAgIGkg
Kz0gMjsKLSAgICAgICAgICAgIGlmIChpID09IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNb
aV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAvLyBT
dXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGkgKyAyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIC0x
OwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0
ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3Bl
Y2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcwotICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1
bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKLSAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5
ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCi0gICAgLy8gb2YgYm90aCAo
ZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKLSAgICAvLyB0byBi
ZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCi0gICAgLy8g
Q1IuCi0gICAgLy8KLSAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQg
b3IgaXQgd2lsbCByZXR1cm4KLSAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0
aW5nIGNoYXJhY3Rlci4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCi0gICAgICAgICAgICByZXR1cm4gYnl0
ZXMgKyBpOwotICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgewotICAgICAgICAgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKLSAgICAgICAgICAgIC8vIChD
UkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgotICAgICAgICAgICAgLy8gbmV4
dCByZWFkLgotICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXpl
UkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBib29sIGNh
cGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwotICAgIFN0cmluZyByZXN1bHQ7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIFVDaGFy
IGM7Ci0KLSAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScg
JiYgbmFtZVtpXSA8PSAneicpCi0gICAgICAgICAgICBjID0gdG9BU0NJSVVwcGVyKG5hbWVbaV0p
OwotICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdB
JyAmJiBuYW1lW2ldIDw9ICdaJykKLSAgICAgICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFtZVtp
XSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGMgPSBuYW1lW2ldOwotCi0gICAgICAgIGlm
IChuYW1lW2ldID09ICctJykKLSAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVl
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7
Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1zdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVs
ZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBj
b25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgY29uc3QgY2hhciogZW9sOwot
ICAgIFN0cmluZyBsYXN0S2V5OwotICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwotCi0g
ICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2Ug
Y2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKLSAgICB3aGlsZSAoKGVvbCA9IGZpbmRF
T0woYnl0ZXMsIGxlbmd0aCkpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsK
LSAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKLSAgICAgICAgCi0gICAgICAg
IC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyBy
ZXR1cm5lZCBieSBmaW5kRU9MLgotICAgICAgICBieXRlcyA9IGVvbCArIDE7Ci0gICAgICAgIGlm
ICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQotICAgICAgICAgICAgYnl0ZXMr
KzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCi0K
LSAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOwotICAgICAgICBpZiAobGluZUxlbmd0
aCA9PSAwKQotICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0
aGUgaGVhZGVyCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0g
JyAnIHx8ICpsaW5lID09ICdcdCcpIHsKLSAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0
aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgewot
ICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGlu
dWUKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVh
ZGVyCi0gICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5n
ZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVM
ZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJy
ZW50VmFsdWUgKyBuZXdWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBj
b2xvbjsKLSAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNv
bG9uICE9IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAotICAgICAgICAgICAg
ICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGxh
c3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xv
biAtIGxpbmUpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICAgICAgICAg
ICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoY29sb24gPT0gZW9sKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24s
IGVvbCAtIGNvbG9uKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRl
ckZpZWxkcy5nZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051
bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvbGRWYWx1ZSArICIsICIgKyB2YWx1
ZTsKLQotICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhlYWRlckZpZWxk
czsKLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBm
aWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dI
ZWFkZXJzKQotewotICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikKLSAgICAgICAgcmV0dXJu
IE5QRVJSX0lOVkFMSURfUEFSQU07Ci0KLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJl
cXVlc3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7Ci0KLSAg
ICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwot
ICAgIAotICAgIGlmIChmaWxlKSB7Ci0gICAgICAgIE5QRXJyb3IgcmVhZFJlc3VsdCA9IGhhbmRs
ZVBvc3RSZWFkRmlsZShidWZmZXIsIGxlbiwgYnVmKTsKLSAgICAgICAgaWYocmVhZFJlc3VsdCAh
PSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybiByZWFkUmVzdWx0OwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNpemUobGVuKTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZl
ci5kYXRhKCksIGJ1ZiwgbGVuKTsKLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9
IGJ1ZmZlci5kYXRhKCk7Ci0gICAgaW50IHBvc3REYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsK
LQotICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKLSAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xp
bmUoYnVmZmVyKSkgewotICAgICAgICAgICAgcG9zdERhdGErKzsKLSAgICAgICAgICAgIHBvc3RE
YXRhTGVuZ3RoLS07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgbG9jYXRpb24g
PSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChs
b2NhdGlvbiAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlz
IHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3Jl
IGlzIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgy
MkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOwotCi0gICAgICAgICAgICAg
ICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNl
bHZlcyB3aGVuIHRoZXkgcG9zdCwKLSAgICAgICAgICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlv
biBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKLSAgICAg
ICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVz
dGVkIGxlbmd0aC4KLSAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRl
ckZpZWxkcy5nZXQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5ndGgudG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsK
LSAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpDb250
ZW50TGVuZ3RoKTsKLQotICAgICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOwotICAg
ICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0
KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVS
TCgpLCB1cmwpKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhU
VFBIZWFkZXJGaWVsZHMoV1RGOjptb3ZlKGhlYWRlckZpZWxkcykpOwotICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShwb3N0
RGF0YSwgcG9zdERhdGFMZW5ndGgpKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFt
ZSh0YXJnZXQpOwotCi0gICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlm
aWNhdGlvbiwgbm90aWZ5RGF0YSk7Ci19Ci0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVdp
bmRvd2xlc3NQbHVnaW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFpc1Zp
c2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbV9lbGVtZW50LT5yZW5k
ZXJlcigpKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KCptX2VsZW1lbnQtPnJlbmRlcmVyKCkpOwotICAgIAotICAgIEludFJlY3QgZGly
dHlSZWN0ID0gcmVjdDsKLSAgICBkaXJ0eVJlY3QubW92ZShyZW5kZXJlci5ib3JkZXJMZWZ0KCkg
KyByZW5kZXJlci5wYWRkaW5nTGVmdCgpLCByZW5kZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVy
LnBhZGRpbmdUb3AoKSk7Ci0gICAgcmVuZGVyZXIucmVwYWludFJlY3RhbmdsZShkaXJ0eVJlY3Qp
OwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHN0YXRpYyBSZWZQ
dHI8SW1hZ2U+IG51bGxQbHVnaW5JbWFnZTsKLSAgICBpZiAoIW51bGxQbHVnaW5JbWFnZSkKLSAg
ICAgICAgbnVsbFBsdWdpbkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJudWxs
UGx1Z2luIik7Ci0KLSAgICBJbnRSZWN0IGltYWdlUmVjdChmcmFtZVJlY3QoKS54KCksIGZyYW1l
UmVjdCgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53aWR0aCgpLCBudWxsUGx1Z2luSW1hZ2UtPmhl
aWdodCgpKTsKLQotICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lUmVjdCgpLndpZHRoKCkgLSBpbWFn
ZVJlY3Qud2lkdGgoKSkgLyAyOwotICAgIGludCB5T2Zmc2V0ID0gKGZyYW1lUmVjdCgpLmhlaWdo
dCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7Ci0KLSAgICBpbWFnZVJlY3QubW92ZSh4T2Zm
c2V0LCB5T2Zmc2V0KTsKLQotICAgIGlmICghcmVjdC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBjb250ZXh0LT5jbGlw
KHdpbmRvd0NsaXBSZWN0KCkpOwotICAgIGNvbnRleHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1h
Z2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKLSAg
ICBjb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNl
ckFnZW50ID0gIk1vemlsbGEvNS4wICgiCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgICAg
ICJNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBYOyIKLSNlbGlmIGRlZmluZWQoWFBfV0lOKQot
ICAgICAgICAiV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IgotI2VsaWYgZGVmaW5lZChYUF9V
TklYKQotLy8gVGhlIEd0ayBwb3J0IHVzZXMgWDExIHBsdWdpbnMgaW4gTWFjLgotI2lmIE9TKERB
UldJTikgJiYgUExBVEZPUk0oR1RLKQotICAgICJYMTE7IFU7IEludGVsIE1hYyBPUyBYOyIKLSNl
bHNlCi0gICAgIlgxMTsgVTsgTGludXggaTY4NjsiCi0jZW5kaWYKLSNlbmRpZgotICAgICAgICAi
IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8yLjAiOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgQ2hyb21lVXNlckFnZW50ID0gIk1vemlsbGEvNS4wICgiCi0jaWYg
ZGVmaW5lZChYUF9NQUNPU1gpCi0gICAgIk1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7Igot
I2VsaWYgZGVmaW5lZChYUF9XSU4pCi0gICAgIldpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyIK
LSNlbGlmIGRlZmluZWQoWFBfVU5JWCkKLSAgICAvLyBUaGUgR3RrIHBvcnQgdXNlcyBYMTEgcGx1
Z2lucyBpbiBNYWMuCi0jaWYgT1MoREFSV0lOKSAmJiBQTEFURk9STShHVEspCi0gICAgIlgxMTsg
VTsgSW50ZWwgTWFjIE9TIFg7IgotI2Vsc2UKLSAgICAiWDExOyBVOyBMaW51eCBpNjg2OyIKLSNl
bmRpZgotI2VuZGlmCi0gICAgIiBBcHBsZVdlYktpdC81MzQuMzQgKEtIVE1MLCBsaWtlIEdlY2tv
KSBDaHJvbWUvMTkuMC4xMDU1LjEgU2FmYXJpLzUzNC4zNCI7Ci0KLWNvbnN0IGNoYXIqIFBsdWdp
blZpZXc6OnVzZXJBZ2VudCgpCi17Ci0gICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCi0gICAgICAgIHJldHVybiBNb3pp
bGxhVXNlckFnZW50OwotICAgIGVsc2UgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya1dhbnRzQ2hyb21lVXNlckFnZW50KSkKLSAgICAgICAgcmV0dXJuIENocm9tZVVz
ZXJBZ2VudDsKLSAgICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCi0gICAgICAgIG1fdXNlckFn
ZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkudXNlckFnZW50KG1fdXJsKS51dGY4KCk7Ci0K
LSAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi1jb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKQot
ewotICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OwotfQotI2VuZGlmCi0KLQotdm9pZCBQbHVn
aW5WaWV3OjpsaWZlU3VwcG9ydFRpbWVyRmlyZWQoKQotewotICAgIGRlcmVmKCk7Ci19Ci0KLXZv
aWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKCkKLXsKLSAgICBpZiAobV9saWZlU3VwcG9ydFRpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlZigpOwotICAgIG1fbGlmZVN1
cHBvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLXZvaWQgUGx1Z2luVmlldzo6a2VlcEFsaXZlKE5QUCBpbnN0YW5jZSkKLXsKLSAg
ICBQbHVnaW5WaWV3KiB2aWV3ID0gaW5zdGFuY2VNYXAoKS5nZXQoaW5zdGFuY2UpOwotICAgIGlm
ICghdmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlldy0+a2VlcEFsaXZlKCk7Ci19Ci0K
LU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVT
dGF0aWMoJXMpIiwgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwot
Ci0gICAgTlBFcnJvciByZXN1bHQ7Ci0gICAgaWYgKHBsYXRmb3JtR2V0VmFsdWVTdGF0aWModmFy
aWFibGUsIHZhbHVlLCAmcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQotCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZh
bHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBMT0coUGx1Z2lu
cywgIlBsdWdpblZpZXc6OmdldFZhbHVlKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5WYXJpYWJsZSh2
YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0OwotICAgIGlmIChwbGF0Zm9y
bUdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0KLSAgICBpZiAocGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUsICZy
ZXN1bHQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkg
ewotICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7Ci0gICAgICAgIGlmIChtX2lzSmF2YVNj
cmlwdFBhdXNlZCkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0g
ICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT5zY3Jp
cHQoKS53aW5kb3dTY3JpcHROUE9iamVjdCgpOwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1ZSBp
cyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3
Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgaWYg
KHdpbmRvd1NjcmlwdE9iamVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRv
d1NjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAg
ICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsKLQotICAgICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7Ci0gICAgfQotCi0gICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7Ci0g
ICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKLSAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9HRU5FUklDX0VSUk9SOwotCi0gICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3Qg
PSAwOwotCi0gICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBt
X2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShv
YmplY3RUYWcpKQotICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gbV9lbGVtZW50LT5n
ZXROUE9iamVjdCgpOwotCi0gICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9i
amVjdCkKLSAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7
Ci0KLSAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAqdiA9IHBsdWdp
blNjcmlwdE9iamVjdDsKLQotICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgfQot
Ci0gICAgY2FzZSBOUE5WcHJpdmF0ZU1vZGVCb29sOiB7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBt
X3BhcmVudEZyYW1lLT5wYWdlKCk7Ci0gICAgICAgIGlmICghcGFnZSkKLSAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgICAgICAqKChOUEJvb2wqKXZhbHVlKSA9IHBh
Z2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCk7Ci0gICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBGcmFtZSogZ2V0RnJhbWUoRnJhbWUqIHBhcmVudEZy
YW1lLCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmIChwYXJlbnRGcmFtZSkKLSAgICAgICAg
cmV0dXJuIHBhcmVudEZyYW1lOwotICAgIAotICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgp
LmZyYW1lKCk7Ci19Ci0KLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwoTlBOVVJM
VmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJf
dCogbGVuKQotewotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwo
JXMpIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotCi0g
ICAgTlBFcnJvciByZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKLQotICAgIHN3aXRjaCAodmFyaWFi
bGUpIHsKLSAgICBjYXNlIE5QTlVSTFZDb29raWU6IHsKLSAgICAgICAgVVJMIHUobV9wYXJlbnRG
cmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOwotICAgICAgICBpZiAodS5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCks
IG1fZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHUpLnV0
ZjgoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNvb2tpZVN0ci5pc051bGwoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsKLSAgICAg
ICAgICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhz
aXplKzEpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCp2YWx1ZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbWVtc2V0KCp2YWx1ZSwgMCwgc2l6ZSsxKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1lbWNweSgqdmFsdWUsIGNvb2tpZVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICps
ZW4gPSBzaXplOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1I7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9
IE5QRVJSX0lOVkFMSURfVVJMOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBOUE5V
UkxWUHJveHk6IHsKLSAgICAgICAgVVJMIHUobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFz
ZVVSTCgpLCB1cmwpOwotICAgICAgICBpZiAodS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIEZy
YW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAgICAg
ICAgICBjb25zdCBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBmcmFtZSA/ICZmcmFtZS0+bG9h
ZGVyKCkgOiAwOwotICAgICAgICAgICAgY29uc3QgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQg
PSBmcmFtZUxvYWRlciA/IGZyYW1lTG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpIDogMDsKLSAg
ICAgICAgICAgIGNvbnN0IENTdHJpbmcgcHJveHlTdHIgPSB0b1N0cmluZyhwcm94eVNlcnZlcnNG
b3JVUkwodSwgY29udGV4dCkpLnV0ZjgoKTsKLSAgICAgICAgICAgIGlmICghcHJveHlTdHIuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IHByb3h5U3RyLmxlbmd0
aCgpOwotICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVt
QWxsb2Moc2l6ZSsxKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCp2YWx1ZSkgewotICAgICAgICAg
ICAgICAgICAgICBtZW1zZXQoKnZhbHVlLCAwLCBzaXplKzEpOwotICAgICAgICAgICAgICAgICAg
ICBtZW1jcHkoKnZhbHVlLCBwcm94eVN0ci5kYXRhKCksIHNpemUrMSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAqbGVuID0gc2l6ZTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJf
T1VUX09GX01FTU9SWV9FUlJPUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0g
ICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkw6ICVzIiwgcHJl
dHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLU5QRXJyb3IgUGx1Z2luVmll
dzo6c2V0VmFsdWVGb3JVUkwoTlBOVVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdmFsdWUsIHVpbnQzMl90IGxlbikKLXsKLSAgICBMT0coUGx1Z2lucywg
IlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKCVzKSIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJp
YWJsZSh2YXJpYWJsZSkuZGF0YSgpKTsKLQotICAgIE5QRXJyb3IgcmVzdWx0ID0gTlBFUlJfTk9f
RVJST1I7Ci0KLSAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Ci0gICAgY2FzZSBOUE5VUkxWQ29va2ll
OiB7Ci0gICAgICAgIFVSTCB1KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSwg
dXJsKTsKLSAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJp
bmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKLSAgICAgICAgICAg
IEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7Ci0gICAg
ICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2llU3RyKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTlBOVVJMVlByb3h5OgotICAgICAgICBMT0coUGx1Z2lu
cywgIlBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKCVzKTogUGx1Z2lucyBhcmUgTk9UIGFsbG93
ZWQgdG8gc2V0IHByb3h5IGluZm9ybWF0aW9uLiIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJs
ZSh2YXJpYWJsZSkuZGF0YSgpKTsKLSAgICAgICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJP
UjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgTE9HKFBsdWdpbnMsICJQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTDogJXMiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFi
bGUodmFyaWFibGUpLmRhdGEoKSk7Ci0gICAgICAgIHJlc3VsdCA9IE5QRVJSX0dFTkVSSUNfRVJS
T1I7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5Q
RXJyb3IgUGx1Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IGNoYXIqIHByb3Rv
Y29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIC8qIHNjaGVt
ZSAqLywgY29uc3QgY2hhciogLyogcmVhbG0gKi8sIGNoYXIqKiAgLyogdXNlcm5hbWUgKi8sIHVp
bnQzMl90KiAvKiB1bGVuICovLCBjaGFyKiogLyogcGFzc3dvcmQgKi8sIHVpbnQzMl90KiAvKiBw
bGVuICovKQotewotI2lmIExPR19ESVNBQkxFRAotICAgIFVOVVNFRF9QQVJBTShwcm90b2NvbCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGhvc3QpOwotICAgIFVOVVNFRF9QQVJBTShwb3J0KTsKLSNlbmRp
ZgotICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvOiBw
cm90b2NvbD0lcywgaG9zdD0lcywgcG9ydD0lZCIsIHByb3RvY29sLCBob3N0LCBwb3J0KTsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotfQot
I2VuZGlmCi0KLXZvaWQgUGx1Z2luVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJv
b2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKLXsKLSAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNl
dFZhbHVlID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHZhbHVlOwotICAgIGlmICghc2V0
VmFsdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVn
aW5WaWV3KHRoaXMpOwotICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
KEpTRE9NV2luZG93QmFzZTo6Y29tbW9uVk0oKSk7Ci0gICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVl
KTsKLSAgICBOUEJvb2wgdmFsdWUgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwotICAgIHNldFZh
bHVlKG1faW5zdGFuY2UsIE5QTlZwcml2YXRlTW9kZUJvb2wsICZ2YWx1ZSk7Ci0gICAgc2V0Q2Fs
bGluZ1BsdWdpbihmYWxzZSk7Ci0gICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXco
MCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTg2YmI5ZDI4MTE0YWRkODY5NGQ1Y2QxMTdhMDNkNjYwZGRm
YzAzNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdpcmlzaCBSYW1ha3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUGx1Z2luVmlld19oCi0j
ZGVmaW5lIFBsdWdpblZpZXdfaAotCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKLSNp
bmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgot
I2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0jaW5jbHVkZSAiUGx1Z2luU3RyZWFtLmgiCi0jaW5jbHVkZSAibnBydW50
aW1lX2ludGVybmFsLmgiCi0jZW5kaWYKLQotI2lmIE9TKFdJTkRPV1MpICYmIFBMQVRGT1JNKEdU
SykKLXR5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsKLXR5cGVkZWYgSFdORCBQbGF0Zm9ybVBs
dWdpbldpZGdldDsKLSNlbHNlCi10eXBlZGVmIFBsYXRmb3JtV2lkZ2V0IFBsYXRmb3JtUGx1Z2lu
V2lkZ2V0OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotdHlwZWRlZiBzdHJ1Y3QgX0d0a1Nv
Y2tldCBHdGtTb2NrZXQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFgxMSkKLXR5cGVkZWYgdW5z
aWduZWQgbG9uZyBXaW5kb3c7Ci10eXBlZGVmIHN0cnVjdCBfWERpc3BsYXkgRGlzcGxheTsKLSNl
bmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICBuYW1lc3BhY2UgQmluZGluZ3MgewotICAgICAg
ICBjbGFzcyBJbnN0YW5jZTsKLSAgICB9Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBj
bGFzcyBGcmFtZTsKLSAgICBjbGFzcyBGcmFtZVZpZXc7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAg
Y2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7Ci0gICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKLSAgICBj
bGFzcyBNb3VzZUV2ZW50OwotICAgIGNsYXNzIFVSTDsKLSNpZiBPUyhXSU5ET1dTKSAmJiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luOwotI2VuZGlmCi0gICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKLSAgICBjbGFzcyBQbHVnaW5S
ZXF1ZXN0OwotICAgIGNsYXNzIFBsdWdpblN0cmVhbTsKLSAgICBjbGFzcyBSZXNvdXJjZUVycm9y
OwotICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci0gICAgY2xhc3MgV2hlZWxFdmVudDsKLQot
ICAgIGVudW0gUGx1Z2luU3RhdHVzIHsKLSAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBs
dWdpbiwKLSAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbiwKLSAgICAgICAgUGx1
Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblJl
cXVlc3QgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbHVnaW5SZXF1ZXN0KTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVnaW5SZXF1ZXN0
KGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlm
aWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzaG91bGRBbGxvd1BvcHVwcykKLSAgICAg
ICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCi0gICAgICAgICAg
ICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQotICAgICAgICAgICAgLCBtX3NlbmROb3RpZmlj
YXRpb24oc2VuZE5vdGlmaWNhdGlvbikKLSAgICAgICAgICAgICwgbV9zaG91bGRBbGxvd1BvcHVw
cyhzaG91bGRBbGxvd1BvcHVwcykgeyB9Ci0gICAgcHVibGljOgotICAgICAgICBjb25zdCBGcmFt
ZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUxv
YWRSZXF1ZXN0OyB9Ci0gICAgICAgIHZvaWQqIG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBt
X25vdGlmeURhdGE7IH0KLSAgICAgICAgYm9vbCBzZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9Ci0gICAgICAgIGJvb2wgc2hvdWxkQWxsb3dQb3B1
cHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEFsbG93UG9wdXBzOyB9Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBtX2ZyYW1lTG9hZFJlcXVlc3Q7Ci0gICAgICAgIHZv
aWQqIG1fbm90aWZ5RGF0YTsKLSAgICAgICAgYm9vbCBtX3NlbmROb3RpZmljYXRpb247Ci0gICAg
ICAgIGJvb2wgbV9zaG91bGRBbGxvd1BvcHVwczsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2lu
TWFudWFsTG9hZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpbk1hbnVh
bExvYWRlcigpIHt9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaExvYWRpbmcoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJl
c291cmNlRXJyb3ImKSA9IDA7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBsdWdpblZpZXcgOiBwdWJs
aWMgUGx1Z2luVmlld0Jhc2UKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAg
ICAgICAgICAgICAgICAgICwgcHJpdmF0ZSBQbHVnaW5TdHJlYW1DbGllbnQKLSNlbmRpZgotICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgUGx1Z2luTWFudWFsTG9hZGVyCi0gICAgICAgICAg
ICAgICAgICAgICAsIHByaXZhdGUgTWVkaWFDYW5TdGFydExpc3RlbmVyIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpblZpZXc+IGNyZWF0ZShGcmFtZSogcGFy
ZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBIVE1MUGx1Z0luRWxlbWVudCosIGNvbnN0IFVSTCYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsK
LSAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlldygpOwotCi0gICAgICAgIFBsdWdpblBhY2thZ2Uq
IHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9Ci0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdGFuY2U7IH0KLSNlbmRpZgotCi0gICAgICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNv
bnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGljIFBsdWdpblZpZXcqIGN1cnJlbnRQbHVnaW5W
aWV3KCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgTlBPYmpl
Y3QqIG5wT2JqZWN0KCk7Ci0jZW5kaWYKLSAgICAgICAgUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdz
OjpJbnN0YW5jZT4gYmluZGluZ0luc3RhbmNlKCk7Ci0KLSAgICAgICAgUGx1Z2luU3RhdHVzIHN0
YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKLSAgICAgICAgLy8gTlBOIGZ1bmN0aW9ucwotICAgICAgICBOUEVycm9yIGdl
dFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90
aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3IgZ2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0KTsKLSAgICAgICAgTlBFcnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwg
TlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOwotICAgICAgICBOUEVycm9yIHBvc3RVUkwo
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3Qg
Y2hhciogYnV0LCBOUEJvb2wgZmlsZSk7Ci0gICAgICAgIE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlN
RVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7Ci0gICAg
ICAgIGludDMyX3Qgd3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1
ZmZlcik7Ci0gICAgICAgIE5QRXJyb3IgZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBO
UFJlYXNvbiByZWFzb24pOwotI2VuZGlmCi0gICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCgp
OwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogdXNlckFnZW50U3RhdGljKCk7Ci0jZW5kaWYKLSAgICAgICAgdm9pZCBzdGF0dXMoY29u
c3QgY2hhciogbWVzc2FnZSk7Ci0gICAgICAgIAotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgICAgICBOUEVycm9yIGdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSk7Ci0gICAgICAgIHN0YXRpYyBOUEVycm9yIGdldFZhbHVlU3RhdGljKE5QTlZhcmlh
YmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7Ci0gICAgICAgIE5QRXJyb3Igc2V0VmFsdWUoTlBQ
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKLSAgICAgICAgTlBFcnJvciBnZXRWYWx1
ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFyKiog
dmFsdWUsIHVpbnQzMl90KiBsZW4pOwotICAgICAgICBOUEVycm9yIHNldFZhbHVlRm9yVVJMKE5Q
TlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVl
LCB1aW50MzJfdCBsZW4pOwotICAgICAgICBOUEVycm9yIGdldEF1dGhlbnRpY2F0aW9uSW5mbyhj
b25zdCBjaGFyKiBwcm90b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBjb25z
dCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIqIHJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQz
Ml90KiB1bGVuLCBjaGFyKiogcGFzc3dvcmQsIHVpbnQzMl90KiBwbGVuKTsKLSAgICAgICAgdm9p
ZCBpbnZhbGlkYXRlUmVjdChOUFJlY3QqKTsKLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9u
KE5QUmVnaW9uKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGZvcmNlUmVkcmF3KCk7Ci0gICAgICAg
IHZvaWQgcHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShib29sIHN0YXRlKTsKLSAgICAgICAgdm9pZCBw
b3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZVJlY3QoY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIGJvb2wgYXJlUG9wdXBzQWxsb3dlZCgp
IGNvbnN0OwotCi0gICAgICAgIHZvaWQgc2V0SmF2YVNjcmlwdFBhdXNlZChib29sKTsKLQotICAg
ICAgICB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKTsKLQotICAgICAgICB2
b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKik7Ci0gICAgICAgIHZvaWQgc3RyZWFt
RGlkRmluaXNoTG9hZGluZyhQbHVnaW5TdHJlYW0qIHN0cmVhbSkgeyBkaXNjb25uZWN0U3RyZWFt
KHN0cmVhbSk7IH0KLQotICAgICAgICAvLyBXaWRnZXQgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZnJhbWVSZWN0c0NoYW5nZWQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJv
b2wpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
aGlkZSgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xpcFJlY3RDaGFuZ2VkKCkgb3Zl
cnJpZGU7Ci0KLSAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCBieSBwbHVnaW5zIG9uIGFs
bCBwbGF0Zm9ybXMgdG8gb2J0YWluIGEgY2xpcCByZWN0IHRoYXQgaW5jbHVkZXMgY2xpcHMgc2V0
IGJ5IFdlYkNvcmUsCi0gICAgICAgIC8vIGUuZy4sIGluIG92ZXJmbG93OmF1dG8gc2VjdGlvbnMu
ICBUaGUgY2xpcCByZWN0cyBjb29yZGluYXRlcyBhcmUgaW4gdGhlIGNvbnRhaW5pbmcgd2luZG93
J3MgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgLy8gVGhpcyBjbGlwIGluY2x1ZGVzIGFueSBj
bGlwcyB0aGF0IHRoZSB3aWRnZXQgaXRzZWxmIHNldHMgdXAgZm9yIGl0cyBjaGlsZHJlbi4KLSAg
ICAgICAgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFdmVudChFdmVudCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50
KFNjcm9sbFZpZXcqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudFZpc2libGUoYm9v
bCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzUGx1Z2luVmlldygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICBGcmFtZSogcGFyZW50RnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudEZyYW1lLmdldCgpOyB9Ci0KLSAgICAgICAgdm9pZCBmb2N1c1BsdWdp
bkVsZW1lbnQoKTsKLQotICAgICAgICBjb25zdCBTdHJpbmcmIHBsdWdpbnNQYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9wbHVnaW5zUGFnZTsgfQotICAgICAgICBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZTsgfQotICAgICAgICBjb25zdCBVUkwmIHVybCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkgJiYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGJvb2wgcG9wVXBDb250ZXh0TWVudShO
UE1lbnUqKTsKLSNlbmRpZgotCi0jaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCi0gICAgICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXdXbmRQ
cm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLSAgICAgICAgTFJFU1VMVCB3bmRQcm9j
KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKTsK
LSAgICAgICAgV05EUFJPQyBwbHVnaW5XbmRQcm9jKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5X
bmRQcm9jOyB9Ci0jZW5kaWYKLQotICAgICAgICAvLyBVc2VkIGZvciBtYW51YWwgbG9hZGluZwot
ICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
Ci0gICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7Ci0gICAgICAg
IHZvaWQgZGlkRmluaXNoTG9hZGluZygpOwotICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVz
b3VyY2VFcnJvciYpOwotCi0gICAgICAgIHN0YXRpYyBib29sIGlzQ2FsbGluZ1BsdWdpbigpOwot
Ci0gICAgICAgIGJvb2wgc3RhcnQoKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotICAgICAgICBzdGF0aWMgdm9pZCBrZWVwQWxpdmUoTlBQKTsKLSNlbmRpZgotICAgICAgICB2
b2lkIGtlZXBBbGl2ZSgpOwotCi0jaWYgUExBVEZPUk0oWDExKQotICAgICAgICBzdGF0aWMgRGlz
cGxheSogZ2V0UGx1Z2luRGlzcGxheShGcmFtZSopOwotICAgICAgICBzdGF0aWMgV2luZG93IGdl
dFJvb3RXaW5kb3coRnJhbWUqIHBhcmVudEZyYW1lKTsKLSNlbmRpZgotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBQ
bHVnaW5QYWNrYWdlKiwgSFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVz
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7Ci0KLSAgICAgICAg
dm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwotICAgICAgICBib29sIHN0YXJ0T3JBZGRU
b1Vuc3RhcnRlZExpc3QoKTsKLSAgICAgICAgdm9pZCBpbml0KCk7Ci0gICAgICAgIGJvb2wgcGxh
dGZvcm1TdGFydCgpOwotICAgICAgICB2b2lkIHN0b3AoKTsKLSAgICAgICAgdm9pZCBwbGF0Zm9y
bURlc3Ryb3koKTsKLSAgICAgICAgc3RhdGljIHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1
Z2luVmlldyopOwotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBOUEVy
cm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwg
dm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYs
IGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29s
IGFsbG93SGVhZGVycyk7Ci0gICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdFJlYWRGaWxlKFZlY3Rv
cjxjaGFyPiYgYnVmZmVyLCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1Zik7Ci0jZW5kaWYK
LSAgICAgICAgc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwg
aW50IGxlbmd0aCk7Ci0gICAgICAgIHZvaWQgc2V0Q2FsbGluZ1BsdWdpbihib29sKSBjb25zdDsK
LQotICAgICAgICB2b2lkIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChjb25zdCBJbnRS
ZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIG1lZGlhQ2FuU3RhcnQoKTsKLQotI2lmIE9T
KFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICB2b2lkIHBh
aW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgICAgIHN0YXRpYyBIREMgV0lOQVBJIGhvb2tlZEJlZ2luUGFpbnQoSFdORCwg
UEFJTlRTVFJVQ1QqKTsKLSAgICAgICAgc3RhdGljIEJPT0wgV0lOQVBJIGhvb2tlZEVuZFBhaW50
KEhXTkQsIGNvbnN0IFBBSU5UU1RSVUNUKik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotICAgICAgICBzdGF0aWMgYm9vbCBwbGF0Zm9ybUdldFZhbHVlU3RhdGlj
KE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSAg
ICAgICAgYm9vbCBwbGF0Zm9ybUdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSwgTlBFcnJvciogcmVzdWx0KTsKLSNlbmRpZgotCi0gICAgICAgIFJlZlB0cjxGcmFtZT4g
bV9wYXJlbnRGcmFtZTsKLSAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IG1fcGx1Z2luOwot
ICAgICAgICBIVE1MUGx1Z0luRWxlbWVudCogbV9lbGVtZW50OwotICAgICAgICBib29sIG1faXNT
dGFydGVkOwotICAgICAgICBVUkwgbV91cmw7Ci0gICAgICAgIFBsdWdpblN0YXR1cyBtX3N0YXR1
czsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1faW52YWxpZFJlY3RzOwotCi0gICAgICAgIHZv
aWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdCopOwotICAgICAgICB2b2lkIHNjaGVkdWxl
UmVxdWVzdChzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luUmVxdWVzdD4pOwotICAgICAgICB2b2lkIHJl
cXVlc3RUaW1lckZpcmVkKCk7Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZVRpbWVyRmlyZWQoKTsK
LSAgICAgICAgVGltZXIgbV9yZXF1ZXN0VGltZXI7Ci0gICAgICAgIFRpbWVyIG1faW52YWxpZGF0
ZVRpbWVyOwotCi0gICAgICAgIHZvaWQgcG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKCk7Ci0gICAg
ICAgIFRpbWVyIG1fcG9wUG9wdXBzU3RhdGVUaW1lcjsKLQotICAgICAgICB2b2lkIGxpZmVTdXBw
b3J0VGltZXJGaXJlZCgpOwotICAgICAgICBUaW1lciBtX2xpZmVTdXBwb3J0VGltZXI7Ci0KLSNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgYm9vbCBkaXNwYXRjaE5QRXZl
bnQoTlBFdmVudCYpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBpbnQxNl90IGRpc3BhdGNoTlBDb2NvYUV2ZW50
KE5QQ29jb2FFdmVudCYpOwotICAgICAgICBib29sIG1fdXBkYXRlZENvY29hVGV4dElucHV0UmVx
dWVzdGVkOwotICAgICAgICBib29sIG1fa2V5RG93blNlbnQ7Ci0gICAgICAgIHVpbnQxNl90IG1f
ZGlzcmVnYXJkS2V5VXBDb3VudGVyOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQX01BQ09TWCkK
LSAgICAgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KFdoZWVsRXZlbnQqKTsKLSNlbmRpZgotICAg
ICAgICB2b2lkIHVwZGF0ZVBsdWdpbldpZGdldCgpOwotICAgICAgICB2b2lkIHBhaW50TWlzc2lu
Z1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAg
IHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7Ci0gICAgICAgIHZvaWQg
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50Kik7Ci0jaWYgZGVmaW5lZChYUF9VTklYKSAmJiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgdm9pZCBoYW5kbGVGb2N1c0luRXZl
bnQoKTsKLSAgICAgICAgdm9pZCBoYW5kbGVGb2N1c091dEV2ZW50KCk7Ci0jZW5kaWYKLQotI2lm
IE9TKFdJTkRPV1MpCi0gICAgICAgIHZvaWQgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KEhE
Qyk7Ci0gICAgICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHNuYXBzaG90KCk7Ci0jZW5kaWYKLQotICAg
ICAgICBpbnQgbV9tb2RlOwotICAgICAgICBpbnQgbV9wYXJhbUNvdW50OwotICAgICAgICBjaGFy
KiogbV9wYXJhbU5hbWVzOwotICAgICAgICBjaGFyKiogbV9wYXJhbVZhbHVlczsKLSAgICAgICAg
U3RyaW5nIG1fcGx1Z2luc1BhZ2U7Ci0KLSAgICAgICAgU3RyaW5nIG1fbWltZVR5cGU7Ci0gICAg
ICAgIFdURjo6Q1N0cmluZyBtX3VzZXJBZ2VudDsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgICAgICBOUFAgbV9pbnN0YW5jZTsKLSAgICAgICAgTlBQX3QgbV9pbnN0YW5j
ZVN0cnVjdDsKLSAgICAgICAgTlBXaW5kb3cgbV9ucFdpbmRvdzsKLSNlbmRpZgotCi0gICAgICAg
IFZlY3Rvcjxib29sLCA0PiBtX3BvcHVwU3RhdGVTdGFjazsKLQotICAgICAgICBIYXNoU2V0PFJl
ZlB0cjxQbHVnaW5TdHJlYW0+ID4gbV9zdHJlYW1zOwotICAgICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPFBsdWdpblJlcXVlc3Q+PiBtX3JlcXVlc3RzOwotCi0gICAgICAgIGJvb2wgbV9pc1dp
bmRvd2VkOwotICAgICAgICBib29sIG1faXNUcmFuc3BhcmVudDsKLSAgICAgICAgYm9vbCBtX2hh
dmVJbml0aWFsaXplZDsKLSAgICAgICAgYm9vbCBtX2lzV2FpdGluZ1RvU3RhcnQ7Ci0KLSNpZiBk
ZWZpbmVkKFhQX1VOSVgpCi0gICAgICAgIGJvb2wgbV9uZWVkc1hFbWJlZDsKLSNlbmRpZgotCi0j
aWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIE93
blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7Ci0gICAg
ICAgIFdORFBST0MgbV9wbHVnaW5XbmRQcm9jOwotICAgICAgICB1bnNpZ25lZCBtX2xhc3RNZXNz
YWdlOwotICAgICAgICBib29sIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYzsKLSAgICAgICAgSERD
IG1fd21QcmludEhEQzsKLSAgICAgICAgYm9vbCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0Owot
I2VuZGlmCi0KLSNpZiAoUExBVEZPUk0oR1RLKSAmJiBPUyhXSU5ET1dTKSkgfHwgUExBVEZPUk0o
RUZMKQotICAgICAgICAvLyBPbiBNYWMgT1NYIGFuZCBRdC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9l
cyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3aWRnZXQsCi0gICAgICAgIC8vIGJ1dCBpcyB1c2lu
ZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMgaXRzIHJlZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcv
cGFpbnRpbmcuCi0gICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IG1fd2luZG93OwotcHVibGlj
OgotICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2luZG93OyB9Ci0gICAgICAgIHZvaWQgc2V0UGxhdGZvcm1QbHVnaW5X
aWRnZXQoUGxhdGZvcm1QbHVnaW5XaWRnZXQgd2lkZ2V0KSB7IG1fd2luZG93ID0gd2lkZ2V0OyB9
Ci0jZWxzZQotcHVibGljOgotICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBs
YXRmb3JtUGx1Z2luV2lkZ2V0IHdpZGdldCkgeyBzZXRQbGF0Zm9ybVdpZGdldCh3aWRnZXQpOyB9
Ci0gICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29u
c3QgeyByZXR1cm4gcGxhdGZvcm1XaWRnZXQoKTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0KLSNp
ZiBkZWZpbmVkKFhQX1VOSVgpIHx8IFBMQVRGT1JNKEdUSykKLSAgICAgICAgdm9pZCBzZXROUFdp
bmRvd0lmTmVlZGVkKCk7Ci0jZWxpZiBkZWZpbmVkKFhQX01BQ09TWCkKLSAgICAgICAgTlBfQ0dD
b250ZXh0IG1fbnBDZ0NvbnRleHQ7Ci0gICAgICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHRSZWY7
Ci0KLSAgICAgICAgdm9pZCBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Ci0jZW5kaWYKLQotI2lmIGRl
ZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgICAgIGJv
b2wgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFuZ2U7Ci0gICAgICAgIFBpeG1hcCBtX2RyYXdhYmxl
OwotICAgICAgICBWaXN1YWwqIG1fdmlzdWFsOwotICAgICAgICBDb2xvcm1hcCBtX2NvbG9ybWFw
OwotICAgICAgICBEaXNwbGF5KiBtX3BsdWdpbkRpc3BsYXk7Ci0KLSAgICAgICAgdm9pZCBpbml0
WEV2ZW50KFhFdmVudCogZXZlbnQpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi0gICAg
ICAgIHN0YXRpYyBnYm9vbGVhbiBwbHVnUmVtb3ZlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdp
blZpZXcqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGx1Z0FkZGVkQ2FsbGJhY2soR3RrU29ja2V0
KiwgUGx1Z2luVmlldyopOwotICAgICAgICB2b2lkIHVwZGF0ZVdpZGdldEFsbG9jYXRpb25BbmRD
bGlwKCk7Ci0gICAgICAgIGJvb2wgbV9wbHVnQWRkZWQ7Ci0gICAgICAgIEludFJlY3QgbV9kZWxh
eWVkQWxsb2NhdGlvbjsKLSNlbmRpZgotCi0gICAgICAgIEludFJlY3QgbV9jbGlwUmVjdDsgLy8g
VGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2VkIHBsdWctaW4KLSAgICAgICAgSW50
UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cgcmVjdC4KLQotICAgICAgICBib29sIG1f
bG9hZE1hbnVhbGx5OwotICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBtX21hbnVhbFN0cmVh
bTsKLQotICAgICAgICBib29sIG1faXNKYXZhU2NyaXB0UGF1c2VkOwotCi0gICAgICAgIGJvb2wg
bV9oYXZlQ2FsbGVkU2V0V2luZG93OwotCi0gICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBzX2N1
cnJlbnRQbHVnaW5WaWV3OwotICAgIH07Ci0KLWlubGluZSBQbHVnaW5WaWV3KiB0b1BsdWdpblZp
ZXcoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgQVNTRVJUKCF3aWRnZXQgfHwgd2lkZ2V0LT5pc1Bs
dWdpblZpZXcoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQp
OwotfQotCi1pbmxpbmUgY29uc3QgUGx1Z2luVmlldyogdG9QbHVnaW5WaWV3KGNvbnN0IFdpZGdl
dCogd2lkZ2V0KQotewotICAgIEFTU0VSVCghd2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3
KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4od2lkZ2V0KTsK
LX0KLQotLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0
Lgotdm9pZCB0b1BsdWdpblZpZXcoY29uc3QgUGx1Z2luVmlldyopOwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9u
cGFwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNmRkOTBhNTJiN2ExZTdjOTZlOGRmNGQ4OTliY2Y4MDE5NDhlZmZk
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
TWFpblRocmVhZFNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKLSNpbmNsdWRl
ICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLS8v
IFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNv
bWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxsIGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9u
Ci0vLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBs
YXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4KLS8vIEN1cnJl
bnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3
IGluIFBsdWdpblZpZXc6OnN0YXJ0LgotLy8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5k
IEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBO
X1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0YW5jZS4KLXN0YXRpYyBQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3RhbmNlKQotewotICAgIGlmIChpbnN0YW5jZSAmJiBp
bnN0YW5jZS0+bmRhdGEpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4o
aW5zdGFuY2UtPm5kYXRhKTsKLSAgICByZXR1cm4gUGx1Z2luVmlldzo6Y3VycmVudFBsdWdpblZp
ZXcoKTsKLX0KLQotdm9pZCogTlBOX01lbUFsbG9jKHVpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0
dXJuIG1hbGxvYyhzaXplKTsKLX0KLQotdm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCi17Ci0g
ICAgZnJlZShwdHIpOwotfQotCi11aW50MzJfdCBOUE5fTWVtRmx1c2godWludDMyX3QpCi17Ci0g
ICAgLy8gRG8gbm90aGluZwotICAgIHJldHVybiAwOwotfQotCi12b2lkIE5QTl9SZWxvYWRQbHVn
aW5zKE5QQm9vbCByZWxvYWRQYWdlcykKLXsKLSAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxv
YWRQYWdlcyk7Ci19Ci0KLU5QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiwgTlBCeXRl
UmFuZ2UqKQotewotICAgIHJldHVybiBOUEVSUl9TVFJFQU1fTk9UX1NFRUtBQkxFOwotfQotCi1O
UEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKLXsKLSAgICByZXR1cm4gcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3Rp
ZnlEYXRhKTsKLX0KLQotTlBFcnJvciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCi17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1cmwsIHRhcmdldCk7Ci19Ci0KLU5QRXJyb3IgTlBO
X1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIq
IHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lk
KiBub3RpZnlEYXRhKQotewotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0
YSk7Ci19Ci0KLU5QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5Q
Qm9vbCBmaWxlKQotewotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5wb3N0VVJMKHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSk7Ci19Ci0KLU5QRXJyb3IgTlBO
X05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFy
Z2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKS0+bmV3U3RyZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKLX0KLQotaW50
MzJfdCBOUE5fV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IGxl
biwgdm9pZCogYnVmZmVyKQotewotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT53cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKLX0KLQotTlBFcnJvciBOUE5fRGVz
dHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNv
bikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJv
eVN0cmVhbShzdHJlYW0sIHJlYXNvbik7Ci19Ci0KLWNvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQo
TlBQIGluc3RhbmNlKQotewotICAgIFBsdWdpblZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoaW5zdGFuY2UpOwotCi0gICAgIGlmICghdmlldykKLSAgICAgICAgIHJldHVybiBQbHVn
aW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMoKTsKLSAKLSAgICByZXR1cm4gdmlldy0+dXNlckFnZW50
KCk7Ci19Ci0KLXZvaWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpCi17Ci0gICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3Nh
Z2UpOwotfQotCi12b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCog
aW52YWxpZFJlY3QpCi17Ci0gICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSk7Ci0jaWYgZGVmaW5lZChYUF9VTklYKQotICAgIC8vIE5TUGx1Z2luV3Jh
cHBlciwgYSBwbHVnaW4gd3JhcHBlciBiaW5hcnkgdGhhdCBhbGxvd3MgcnVubmluZyAzMi1iaXQg
cGx1Z2lucwotICAgIC8vIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIHR5cGljYWxseSB1c2VkIGlu
IFgxMSwgd2lsbCBzb21ldGltZXMgZ2l2ZSB1cyBhIG51bGwgTlBQIGhlcmUuCi0gICAgaWYgKCF2
aWV3KQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChp
bnZhbGlkUmVjdCk7Ci19Ci0KLXZvaWQgTlBOX0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNl
LCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQotewotICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPmludmFsaWRhdGVSZWdpb24oaW52YWxpZFJlZ2lvbik7Ci19Ci0KLXZvaWQgTlBO
X0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkKLXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpLT5mb3JjZVJlZHJhdygpOwotfQotCi1OUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAg
aW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBQbHVn
aW5WaWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKLQotICAgICBp
ZiAoIXZpZXcpCi0gICAgICAgICByZXR1cm4gUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWModmFy
aWFibGUsIHZhbHVlKTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOwotfQotCi1OUEVycm9yIE5QTl9TZXRWYWx1
ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAg
IHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJs
ZSwgdmFsdWUpOwotfQotCi12b2lkKiBOUE5fR2V0SmF2YUVudigpCi17Ci0gICAgLy8gVW5zdXBw
b3J0ZWQKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCogTlBOX0dldEphdmFQZWVyKE5QUCkKLXsK
LSAgICAvLyBVbnN1cHBvcnRlZAotICAgIHJldHVybiAwOwotfQotCi12b2lkIE5QTl9QdXNoUG9w
dXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpCi17Ci0gICAgcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShlbmFi
bGVkKTsKLX0KLQotdm9pZCBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkK
LXsKLSAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3BQb3B1cHNFbmFibGVk
U3RhdGUoKTsKLX0KLQotZXh0ZXJuICJDIiB0eXBlZGVmIHZvaWQgUGx1Z2luVGhyZWFkQXN5bmND
YWxsRnVuY3Rpb24odm9pZCopOwotdm9pZCBOUE5fUGx1Z2luVGhyZWFkQXN5bmNDYWxsKE5QUCBp
bnN0YW5jZSwgUGx1Z2luVGhyZWFkQXN5bmNDYWxsRnVuY3Rpb24gZnVuYywgdm9pZCogdXNlckRh
dGEpCi17Ci0gICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZSBvbmx5IGRpZmZlcnMgZnJvbSBN
YWluVGhyZWFkRnVuY3Rpb24gYnkgYmVpbmcgZXh0ZXJuICJDIiwgd2hpY2ggZG9lc24ndCBhZmZl
Y3QgY2FsbGluZyBjb252ZW50aW9uIG9uIGFueSBjb21waWxlcnMgd2UgdXNlLgotICAgIFBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXI6OnNjaGVkdWxlcigpLnNjaGVkdWxlQ2FsbChpbnN0YW5jZSwg
cmVpbnRlcnByZXRfY2FzdDxQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpNYWluVGhyZWFkRnVu
Y3Rpb24qPihmdW5jKSwgdXNlckRhdGEpOwotfQotCi1OUEVycm9yIE5QTl9HZXRWYWx1ZUZvclVS
TChOUFAgaW5zdGFuY2UsIE5QTlVSTFZhcmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmws
IGNoYXIqKiB2YWx1ZSwgdWludDMyX3QqIGxlbikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWVGb3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUs
IGxlbik7Ci19Ci0KLU5QRXJyb3IgTlBOX1NldFZhbHVlRm9yVVJMKE5QUCBpbnN0YW5jZSwgTlBO
VVJMVmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdmFsdWUs
IHVpbnQzMl90IGxlbikKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+c2V0VmFsdWVGb3JVUkwodmFyaWFibGUsIHVybCwgdmFsdWUsIGxlbik7Ci19Ci0KLU5Q
RXJyb3IgTlBOX0dldEF1dGhlbnRpY2F0aW9uSW5mbyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIq
IHByb3RvY29sLCBjb25zdCBjaGFyKiBob3N0LCBpbnQzMl90IHBvcnQsIGNvbnN0IGNoYXIqIHNj
aGVtZSwgY29uc3QgY2hhciogcmVhbG0sIGNoYXIqKiB1c2VybmFtZSwgdWludDMyX3QqIHVsZW4s
IGNoYXIqKiBwYXNzd29yZCwgdWludDMyX3QqIHBsZW4pCi17Ci0gICAgcmV0dXJuIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldEF1dGhlbnRpY2F0aW9uSW5mbyhwcm90b2NvbCwg
aG9zdCwgcG9ydCwgc2NoZW1lLCByZWFsbSwgdXNlcm5hbWUsIHVsZW4sIHBhc3N3b3JkLCBwbGVu
KTsKLX0KLQotTlBFcnJvciBOUE5fUG9wVXBDb250ZXh0TWVudShOUFAgaW5zdGFuY2UsIE5QTWVu
dSogbWVudSkKLXsKLSAgICBVTlVTRURfUEFSQU0oaW5zdGFuY2UpOwotICAgIFVOVVNFRF9QQVJB
TShtZW51KTsKLSAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QYWludEhvb2tzLmFzbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvd2luL1BhaW50SG9va3MuYXNtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
NTA4ODEzNTZhMGRkY2Q3ODMwNzI4MTFlOWYxNWExMTU5NGIxODVkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BhaW50SG9va3MuYXNtCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotOy8qCi07ICAg
IENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLTsKLTsgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotOyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotOyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLTsgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
OwotOyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLTsgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLTsgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLTsgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi07Ci07ICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLTsgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLTsgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLTsgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi07Ki8KLQotO0hEQyBfX3N0ZGNhbGwgX0hCZWdpblBhaW50
KEhXTkQgaFduZCwgTFBQQUlOVFNUUlVDVCBscFBhaW50KTsKLQotUFVCTElDICBfSEJlZ2luUGFp
bnQKLQotX1RFWFQgICBTRUdNRU5UCi0KLV9IQmVnaW5QYWludCBQUk9DCi0gICAgIG1vdiAgcjEw
LHJjeAotICAgICBtb3YgIGVheCwxMDE3aAotICAgICBzeXNjYWxsCi0gICAgIHJldAotX0hCZWdp
blBhaW50IEVORFAKLQotX1RFWFQgICBFTkRTCi0KLTtCT09MIF9fc3RkY2FsbCBfSEVuZFBhaW50
KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpOwotCi1QVUJMSUMgIF9IRW5k
UGFpbnQKLQotX1RFWFQgICBTRUdNRU5UCi0KLV9IRW5kUGFpbnQgUFJPQwotICAgIG1vdiAgcjEw
LHJjeAotICAgIG1vdiAgZWF4LDEwMTloCi0gICAgc3lzY2FsbAotICAgIHJldAotX0hFbmRQYWlu
dCBFTkRQCi0KLV9URVhUICAgRU5EUwotCi1FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2RjNmNmMzQ5OWZjMjlkZTZhYzVhZWFkYjM5MjQwNDI3MWFhMGUxOC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzODUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRh
YmFzZS5oIgotCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkUGx1Z2luUGF0aHNGcm9t
UmVnaXN0cnkoSEtFWSByb290S2V5LCBIYXNoU2V0PFN0cmluZz4mIHBhdGhzKQotewotICAgIEhL
RVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4Vyhyb290S2V5LCBMIlNv
ZnR3YXJlXFxNb3ppbGxhUGx1Z2lucyIsIDAsIEtFWV9FTlVNRVJBVEVfU1VCX0tFWVMsICZrZXkp
OwotCi0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB3Y2hhcl90IG5hbWVbMTI4XTsKLSAgICBGSUxFVElNRSBsYXN0TW9kaWZpZWQ7Ci0KLSAg
ICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7Ci0gICAg
ICAgIERXT1JEIG5hbWVMZW4gPSBXVEZfQVJSQVlfTEVOR1RIKG5hbWUpOwotICAgICAgICByZXN1
bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0
TW9kaWZpZWQpOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIFdDSEFSIHBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAg
ICAgRFdPUkQgcGF0aFN0clNpemUgPSBzaXplb2YocGF0aFN0cik7Ci0gICAgICAgIERXT1JEIHR5
cGU7Ci0KLSAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShrZXksIG5hbWUsIEwiUGF0
aCIsICZ0eXBlLCBwYXRoU3RyLCAmcGF0aFN0clNpemUpOwotICAgICAgICBpZiAocmVzdWx0ICE9
IEVSUk9SX1NVQ0NFU1MgfHwgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBwYXRocy5hZGQoU3RyaW5nKHBhdGhTdHIsIHBhdGhTdHJTaXplIC8gc2l6ZW9m
KFdDSEFSKSAtIDEpKTsKLSAgICB9Ci0KLSAgICBSZWdDbG9zZUtleShrZXkpOwotfQotCi12b2lk
IFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJp
bmc+JiBwYXRocykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNl
IGluc2Vuc2l0aXZlIHNldC4KLSAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOwot
Ci0gICAgSEFORExFIGhGaW5kID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0gICAgV0lOMzJfRklO
RF9EQVRBVyBmaW5kRmlsZURhdGE7Ci0KLSAgICBTdHJpbmcgb2xkV01QUGx1Z2luUGF0aDsKLSAg
ICBTdHJpbmcgbmV3V01QUGx1Z2luUGF0aDsKLQotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9y
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAqaXQgKyAiXFwq
IjsKLQotICAgICAgICBoRmluZCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksICZmaW5kRmlsZURhdGEpOwotCi0gICAgICAgIGlm
IChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChmaW5kRmlsZURhdGEuZHdGaWxlQXR0cmli
dXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpbmRGaWxlRGF0YS5j
RmlsZU5hbWUsIHdjc2xlbihmaW5kRmlsZURhdGEuY0ZpbGVOYW1lKSk7Ci0gICAgICAgICAgICBp
ZiAoKCFmaWxlbmFtZS5zdGFydHNXaXRoKCJucCIsIGZhbHNlKSB8fCAhZmlsZW5hbWUuZW5kc1dp
dGgoImRsbCIsIGZhbHNlKSkgJiYKLSAgICAgICAgICAgICAgICAoIWVxdWFsSWdub3JpbmdDYXNl
KGZpbGVuYW1lLCAiUGx1Z2luLmRsbCIpIHx8ICFpdC0+ZW5kc1dpdGgoIlNob2Nrd2F2ZSAxMCIs
IGZhbHNlKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmlu
ZyBmdWxsUGF0aCA9ICppdCArICJcXCIgKyBmaWxlbmFtZTsKLSAgICAgICAgICAgIGlmICghdW5p
cXVlRmlsZW5hbWVzLmFkZChmdWxsUGF0aCkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgcGF0aHMuYWRkKGZ1bGxQYXRoKTsKLQotICAgICAgICAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVuYW1lLCAibnBkc3BsYXkuZGxsIikpCi0gICAg
ICAgICAgICAgICAgb2xkV01QUGx1Z2luUGF0aCA9IGZ1bGxQYXRoOwotICAgICAgICAgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucC1tc3dtcC5kbGwiKSkKLSAgICAg
ICAgICAgICAgICBuZXdXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7Ci0KLSAgICAgICAgfSB3aGls
ZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZpbmRGaWxlRGF0YSkgIT0gMCk7Ci0KLSAgICAgICAg
RmluZENsb3NlKGhGaW5kKTsKLSAgICB9Ci0KLSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdpc3Ry
eShIS0VZX0xPQ0FMX01BQ0hJTkUsIHBhdGhzKTsKLSAgICBhZGRQbHVnaW5QYXRoc0Zyb21SZWdp
c3RyeShIS0VZX0NVUlJFTlRfVVNFUiwgcGF0aHMpOwotCi0gICAgLy8gSWYgYm90aCB0aGUgb2xk
IGFuZCBuZXcgV01QIHBsdWdpbiBhcmUgcHJlc2VudCBpbiB0aGUgcGx1Z2lucyBzZXQsIAotICAg
IC8vIHdlIHJlbW92ZSB0aGUgb2xkIG9uZSBzbyB3ZSBkb24ndCBlbmQgdXAgY2hvb3NpbmcgdGhl
IG9sZCBvbmUuCi0gICAgaWYgKCFvbGRXTVBQbHVnaW5QYXRoLmlzRW1wdHkoKSAmJiAhbmV3V01Q
UGx1Z2luUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHBhdGhzLnJlbW92ZShvbGRXTVBQbHVnaW5Q
YXRoKTsKLX0KLQotc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJpbmco
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQotewotICAgIFZlY3RvcjxpbnQ+IHZlcnNpb247
Ci0KLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7Ci0gICAgdW5zaWduZWQgZW5kUG9zOwotICAg
IAotICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKLSAgICAg
ICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgo
KTsgKytlbmRQb3MpCi0gICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICcu
JyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJzdHJp
bmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOwotICAgICAgICB2ZXJzaW9u
LmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKLQotICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyAr
IDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcnNpb247Ci19Ci0KLS8vIFRoaXMgcmV0dXJucyB3
aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCi1zdGF0aWMgaW5saW5lIGJv
b2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVj
dG9yPGludD4mIHZlcnNpb25CKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJz
aW9uQS5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJz
aW9uQltpXSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBlbHNlIGlmICh2ZXJz
aW9uQVtpXSA8IHZlcnNpb25CW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhlIHNh
bWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFsc2UK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1
Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQotewotICAgIC8vIEVu
dW1lcmF0ZSBhbGwgTW96aWxsYSBwbHVnaW4gZGlyZWN0b3JpZXMgaW4gdGhlIHJlZ2lzdHJ5Ci0g
ICAgSEtFWSBrZXk7Ci0gICAgTE9ORyByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gUmVnT3Bl
bktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXE1vemlsbGEiKSwgMCwg
S0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgewotICAg
ICAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKLQot
ICAgICAgICAvLyBFbnVtZXJhdGUgc3Via2V5cwotICAgICAgICBmb3IgKGludCBpID0gMDs7IGkr
KykgewotICAgICAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNpemVvZihuYW1lKSAvIHNpemVvZihX
Q0hBUik7Ci0gICAgICAgICAgICByZXN1bHQgPSBSZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwg
Jm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZpZWQpOwotCi0gICAgICAgICAgICBpZiAocmVz
dWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIFN0cmluZyBleHRlbnNpb25zUGF0aCA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKSArICJcXEV4
dGVuc2lvbnMiOwotICAgICAgICAgICAgSEtFWSBleHRlbnNpb25zS2V5OwotCi0gICAgICAgICAg
ICAvLyBUcnkgb3BlbmluZyB0aGUga2V5Ci0gICAgICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5
RXgoa2V5LCBleHRlbnNpb25zUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRh
dGEoKSwgMCwgS0VZX1JFQUQsICZleHRlbnNpb25zS2V5KTsKLQotICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm93IGdldCB0aGUg
cGx1Z2lucyBkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICBXQ0hBUiBwbHVnaW5zRGlyZWN0b3J5
U3RyW19NQVhfUEFUSF07Ci0gICAgICAgICAgICAgICAgRFdPUkQgcGx1Z2luc0RpcmVjdG9yeVNp
emUgPSBzaXplb2YocGx1Z2luc0RpcmVjdG9yeVN0cik7Ci0gICAgICAgICAgICAgICAgRFdPUkQg
dHlwZTsKLQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFJlZ1F1ZXJ5VmFsdWVFeChleHRlbnNp
b25zS2V5LCBURVhUKCJQbHVnaW5zIiksIDAsICZ0eXBlLCAoTFBCWVRFKSZwbHVnaW5zRGlyZWN0
b3J5U3RyLCAmcGx1Z2luc0RpcmVjdG9yeVNpemUpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAgICAgICAgICAg
ICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoU3RyaW5nKHBsdWdpbnNEaXJlY3RvcnlTdHIsIHBsdWdp
bnNEaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKLQotICAgICAgICAgICAgICAg
IFJlZ0Nsb3NlS2V5KGV4dGVuc2lvbnNLZXkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBSZWdDbG9zZUtleShrZXkpOwotICAgIH0KLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIGFkZFdpbmRvd3NNZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3Ry
aW5nPiYgZGlyZWN0b3JpZXMpCi17Ci0gICAgLy8gVGhlIG5ldyBXTVAgRmlyZWZveCBwbHVnaW4g
aXMgaW5zdGFsbGVkIGluIFxQRmlsZXNcUGx1Z2lucyBpZiBpdCBjYW4ndCBmaW5kIGFueSBGaXJl
Zm94IGluc3RhbGxzCi0gICAgV0NIQVIgcGx1Z2luRGlyZWN0b3J5U3RyW19NQVhfUEFUSCArIDFd
OwotICAgIERXT1JEIHBsdWdpbkRpcmVjdG9yeVNpemUgPSA6OkV4cGFuZEVudmlyb25tZW50U3Ry
aW5nc1coVEVYVCgiJVNZU1RFTURSSVZFJVxcUEZpbGVzXFxQbHVnaW5zIiksIHBsdWdpbkRpcmVj
dG9yeVN0ciwgV1RGX0FSUkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKTsKLQotICAgIGlm
IChwbHVnaW5EaXJlY3RvcnlTaXplID4gMCAmJiBwbHVnaW5EaXJlY3RvcnlTaXplIDw9IFdURl9B
UlJBWV9MRU5HVEgocGx1Z2luRGlyZWN0b3J5U3RyKSkKLSAgICAgICAgZGlyZWN0b3JpZXMuYXBw
ZW5kKFN0cmluZyhwbHVnaW5EaXJlY3RvcnlTdHIsIHBsdWdpbkRpcmVjdG9yeVNpemUgLSAxKSk7
Ci0KLSAgICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0cltf
TUFYX1BBVEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgPSBzaXplb2Yo
aW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gZ2V0UmVn
aXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIEwiU29mdHdhcmVcXE1pY3Jvc29mdFxcTWVk
aWFQbGF5ZXIiLCBMIkluc3RhbGxhdGlvbiBEaXJlY3RvcnkiLCAmdHlwZSwgJmluc3RhbGxhdGlv
bkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwotCi0gICAgaWYgKHJl
c3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKQotICAgICAgICBkaXJlY3Rv
cmllcy5hcHBlbmQoU3RyaW5nKGluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgaW5zdGFsbGF0aW9u
RGlyZWN0b3J5U2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBhZGRBZG9iZUFjcm9iYXRQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVj
dG9yaWVzKQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3Blbktl
eUV4KEhLRVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJl
YWRlciIpLCAwLCBLRVlfUkVBRCwgJmtleSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUND
RVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXQ0hBUiBuYW1lWzEyOF07Ci0gICAgRklMRVRJ
TUUgbGFzdE1vZGlmaWVkOwotCi0gICAgVmVjdG9yPGludD4gbGF0ZXN0QWNyb2JhdFZlcnNpb247
Ci0gICAgU3RyaW5nIGxhdGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nOwotCi0gICAgLy8gRW51bWVy
YXRlIHN1YmtleXMKLSAgICBmb3IgKGludCBpID0gMDs7IGkrKykgewotICAgICAgICBEV09SRCBu
YW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKLSAgICAgICAgcmVzdWx0ID0g
UmVnRW51bUtleUV4VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlm
aWVkKTsKLQotICAgICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBWZWN0b3I8aW50PiBhY3JvYmF0VmVyc2lvbiA9IHBhcnNlVmVy
c2lvblN0cmluZyhTdHJpbmcobmFtZSwgbmFtZUxlbikpOwotICAgICAgICBpZiAoY29tcGFyZVZl
cnNpb25zKGFjcm9iYXRWZXJzaW9uLCBsYXRlc3RBY3JvYmF0VmVyc2lvbikpIHsKLSAgICAgICAg
ICAgIGxhdGVzdEFjcm9iYXRWZXJzaW9uID0gYWNyb2JhdFZlcnNpb247Ci0gICAgICAgICAgICBs
YXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyA9IFN0cmluZyhuYW1lLCBuYW1lTGVuKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmICghbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcuaXNOdWxs
KCkpIHsKLSAgICAgICAgRFdPUkQgdHlwZTsKLSAgICAgICAgV0NIQVIgYWNyb2JhdEluc3RhbGxQ
YXRoU3RyW19NQVhfUEFUSF07Ci0gICAgICAgIERXT1JEIGFjcm9iYXRJbnN0YWxsUGF0aFNpemUg
PSBzaXplb2YoYWNyb2JhdEluc3RhbGxQYXRoU3RyKTsKLQotICAgICAgICBTdHJpbmcgYWNyb2Jh
dFBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEFkb2JlXFxBY3JvYmF0IFJlYWRlclxcIiArIGxh
dGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nICsgIlxcSW5zdGFsbFBhdGgiOwotICAgICAgICByZXN1
bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgYWNyb2JhdFBsdWdpbktl
eVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIDAsICZ0eXBlLCBh
Y3JvYmF0SW5zdGFsbFBhdGhTdHIsICZhY3JvYmF0SW5zdGFsbFBhdGhTaXplKTsKLQotICAgICAg
ICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIFN0cmluZyBhY3Jv
YmF0UGx1Z2luRGlyZWN0b3J5ID0gU3RyaW5nKGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgYWNyb2Jh
dEluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hBUikgLSAxKSArICJcXGJyb3dzZXIiOwotICAg
ICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIGFkZEphdmFQbHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVz
KQotewotICAgIEhLRVkga2V5OwotICAgIEhSRVNVTFQgcmVzdWx0ID0gUmVnT3BlbktleUV4KEhL
RVlfTE9DQUxfTUFDSElORSwgVEVYVCgiU29mdHdhcmVcXEphdmFTb2Z0XFxKYXZhIFBsdWctaW4i
KSwgMCwgS0VZX1JFQUQsICZrZXkpOwotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgV0NIQVIgbmFtZVsxMjhdOwotICAgIEZJTEVUSU1FIGxh
c3RNb2RpZmllZDsKLQotICAgIFZlY3RvcjxpbnQ+IGxhdGVzdEphdmFWZXJzaW9uOwotICAgIFN0
cmluZyBsYXRlc3RKYXZhVmVyc2lvblN0cmluZzsKLQotICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlz
Ci0gICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKLSAgICAgICAgRFdPUkQgbmFtZUxlbiA9IHNp
emVvZihuYW1lKSAvIHNpemVvZihXQ0hBUik7Ci0gICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlF
eFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7Ci0KLSAg
ICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgVmVjdG9yPGludD4gamF2YVZlcnNpb24gPSBwYXJzZVZlcnNpb25TdHJpbmcoU3Ry
aW5nKG5hbWUsIG5hbWVMZW4pKTsKLSAgICAgICAgaWYgKGNvbXBhcmVWZXJzaW9ucyhqYXZhVmVy
c2lvbiwgbGF0ZXN0SmF2YVZlcnNpb24pKSB7Ci0gICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lv
biA9IGphdmFWZXJzaW9uOwotICAgICAgICAgICAgbGF0ZXN0SmF2YVZlcnNpb25TdHJpbmcgPSBT
dHJpbmcobmFtZSwgbmFtZUxlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWxhdGVz
dEphdmFWZXJzaW9uU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBEV09SRCB0eXBlOwotICAg
ICAgICBXQ0hBUiBqYXZhSW5zdGFsbFBhdGhTdHJbX01BWF9QQVRIXTsKLSAgICAgICAgRFdPUkQg
amF2YUluc3RhbGxQYXRoU2l6ZSA9IHNpemVvZihqYXZhSW5zdGFsbFBhdGhTdHIpOwotICAgICAg
ICBEV09SRCB1c2VOZXdQbHVnaW5WYWx1ZTsKLSAgICAgICAgRFdPUkQgdXNlTmV3UGx1Z2luU2l6
ZTsKLQotICAgICAgICBTdHJpbmcgamF2YVBsdWdpbktleVBhdGggPSAiU29mdHdhcmVcXEphdmFT
b2Z0XFxKYXZhIFBsdWctaW5cXCIgKyBsYXRlc3RKYXZhVmVyc2lvblN0cmluZzsKLSAgICAgICAg
cmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQbHVnaW5L
ZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBMIlVzZU5ld0ph
dmFQbHVnaW4iLCAmdHlwZSwgJnVzZU5ld1BsdWdpblZhbHVlLCAmdXNlTmV3UGx1Z2luU2l6ZSk7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHVzZU5ld1BsdWdpblZh
bHVlID09IDEpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9M
T0NBTF9NQUNISU5FLCBqYXZhUGx1Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLmRhdGEoKSwgTCJKYXZhSG9tZSIsICZ0eXBlLCBqYXZhSW5zdGFsbFBhdGhTdHIsICZq
YXZhSW5zdGFsbFBhdGhTaXplKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VD
Q0VTUykgewotICAgICAgICAgICAgICAgIFN0cmluZyBqYXZhUGx1Z2luRGlyZWN0b3J5ID0gU3Ry
aW5nKGphdmFJbnN0YWxsUGF0aFN0ciwgamF2YUluc3RhbGxQYXRoU2l6ZSAvIHNpemVvZihXQ0hB
UikgLSAxKSArICJcXGJpblxcbmV3X3BsdWdpbiI7Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3Jp
ZXMuYXBwZW5kKGphdmFQbHVnaW5EaXJlY3RvcnkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgUmVnQ2xvc2VLZXkoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJp
bmcgc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgpCi17Ci0gICAgV0NIQVIgbW9kdWxlRmlsZU5hbWVT
dHJbX01BWF9QQVRIXTsKLSAgICBzdGF0aWMgU3RyaW5nIHBsdWdpbnNEaXJlY3Rvcnk7Ci0gICAg
c3RhdGljIGJvb2wgY2FjaGVkUGx1Z2luRGlyZWN0b3J5ID0gZmFsc2U7Ci0KLSAgICBpZiAoIWNh
Y2hlZFBsdWdpbkRpcmVjdG9yeSkgewotICAgICAgICBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSB0
cnVlOwotCi0gICAgICAgIGludCBtb2R1bGVGaWxlTmFtZUxlbiA9IEdldE1vZHVsZUZpbGVOYW1l
KDAsIG1vZHVsZUZpbGVOYW1lU3RyLCBfTUFYX1BBVEgpOwotCi0gICAgICAgIGlmICghbW9kdWxl
RmlsZU5hbWVMZW4gfHwgbW9kdWxlRmlsZU5hbWVMZW4gPT0gX01BWF9QQVRIKQotICAgICAgICAg
ICAgZ290byBleGl0OwotCi0gICAgICAgIGlmICghUGF0aFJlbW92ZUZpbGVTcGVjKG1vZHVsZUZp
bGVOYW1lU3RyKSkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBwbHVnaW5zRGly
ZWN0b3J5ID0gU3RyaW5nKG1vZHVsZUZpbGVOYW1lU3RyKSArICJcXFBsdWdpbnMiOwotICAgIH0K
LWV4aXQ6Ci0gICAgcmV0dXJuIHBsdWdpbnNEaXJlY3Rvcnk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVj
dG9yaWVzKQotewotICAgIFdDSEFSIHN5c3RlbURpcmVjdG9yeVN0cltNQVhfUEFUSF07Ci0KLSAg
ICBpZiAoIUdldFN5c3RlbURpcmVjdG9yeShzeXN0ZW1EaXJlY3RvcnlTdHIsIFdURl9BUlJBWV9M
RU5HVEgoc3lzdGVtRGlyZWN0b3J5U3RyKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdDSEFS
IG1hY3JvbWVkaWFEaXJlY3RvcnlTdHJbTUFYX1BBVEhdOwotCi0gICAgUGF0aENvbWJpbmUobWFj
cm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0b3J5U3RyLCBURVhUKCJtYWNyb21lZFxc
Rmxhc2giKSk7Ci0gICAgZGlyZWN0b3JpZXMuYXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIp
OwotCi0gICAgUGF0aENvbWJpbmUobWFjcm9tZWRpYURpcmVjdG9yeVN0ciwgc3lzdGVtRGlyZWN0
b3J5U3RyLCBURVhUKCJtYWNyb21lZFxcU2hvY2t3YXZlIDEwIikpOwotICAgIGRpcmVjdG9yaWVz
LmFwcGVuZChtYWNyb21lZGlhRGlyZWN0b3J5U3RyKTsKLX0KLQotVmVjdG9yPFN0cmluZz4gUGx1
Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCi17Ci0gICAgVmVjdG9yPFN0
cmluZz4gZGlyZWN0b3JpZXM7Ci0gICAgU3RyaW5nIG91ckRpcmVjdG9yeSA9IHNhZmFyaVBsdWdp
bnNEaXJlY3RvcnkoKTsKLQotICAgIGlmICghb3VyRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAg
ICBkaXJlY3Rvcmllcy5hcHBlbmQob3VyRGlyZWN0b3J5KTsKLSAgICBhZGRBZG9iZUFjcm9iYXRQ
bHVnaW5EaXJlY3RvcnkoZGlyZWN0b3JpZXMpOwotICAgIGFkZE1vemlsbGFQbHVnaW5EaXJlY3Rv
cmllcyhkaXJlY3Rvcmllcyk7Ci0gICAgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0
b3J5KGRpcmVjdG9yaWVzKTsKLSAgICBhZGRNYWNyb21lZGlhUGx1Z2luRGlyZWN0b3JpZXMoZGly
ZWN0b3JpZXMpOwotCi0gICAgcmV0dXJuIGRpcmVjdG9yaWVzOwotfQotCi1ib29sIFBsdWdpbkRh
dGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9y
eSkKLXsKLSAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJpUGx1Z2luc0RpcmVjdG9yeSgp
OwotCi0gICAgaWYgKCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkgJiYgIWRpcmVjdG9yeS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIG91ckRpcmVjdG9yeSA9PSBkaXJlY3Rvcnk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGE1M2MzMTVjMjAxODQzOTRmM2I0MDY0YTNmNTQ0NzU3M2VkMmNmMDkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQbHVnaW5N
ZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0KLSNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBTZXQgYSB0aW1l
ciB0byBtYWtlIHN1cmUgd2UgcHJvY2VzcyBhbnkgcXVldWVkIG1lc3NhZ2VzIGF0IGxlYXN0IGV2
ZXJ5IDE2bXMuCi0vLyBUaGlzIHZhbHVlIGFsbG93cyBGbGFzaCA2MCBtZXNzYWdlcy9zZWNvbmQs
IHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggZm9yIHZpZGVvCi0vLyBwbGF5YmFjaywgYW5kIGFsc28g
Z2V0cyB1cyBvdmVyIHRoZSBsaW1pdCBmb3Iga2lja2luZyBpbnRvIGhpZ2gtcmVzb2x1dGlvbgot
Ly8gdGltZXIgbW9kZSAoc2VlIFNoYXJlZFRpbWVyV2luLmNwcCkuCi1zdGF0aWMgY29uc3QgZG91
YmxlIE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCA9IDAuMDE2OwotCi0vLyBEdXJpbmcgYSBj
b250aW51b3VzIHN0cmVhbSBvZiBtZXNzYWdlcywgcHJvY2VzcyBvbmUgZXZlcnkgNW1zLgotc3Rh
dGljIGNvbnN0IGRvdWJsZSBNZXNzYWdlRGlyZWN0UHJvY2Vzc2luZ0ludGVydmFsID0gMC4wMDU7
Ci0KLVBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46OlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4o
UGx1Z2luVmlldyogcGx1Z2luVmlldykKLSAgICA6IG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3KQot
ICAgICwgbV9iYWNrKDApCi0gICAgLCBtX2Zyb250KDApCi0gICAgLCBtX21lc3NhZ2VUaHJvdHRs
ZVRpbWVyKCp0aGlzLCAmUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxl
VGltZXJGaXJlZCkKLSAgICAsIG1fbGFzdE1lc3NhZ2VUaW1lKDApCi17Ci0gICAgLy8gSW5pdGlh
bGl6ZSB0aGUgZnJlZSBsaXN0IHdpdGggb3VyIGlubGluZSBtZXNzYWdlcwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBOdW1JbmxpbmVNZXNzYWdlcyAtIDE7IGkrKykKLSAgICAgICAgbV9p
bmxpbmVNZXNzYWdlc1tpXS5uZXh0ID0gJm1faW5saW5lTWVzc2FnZXNbaSArIDFdOwotICAgIG1f
aW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXS5uZXh0ID0gMDsKLSAgICBtX2Zy
ZWVJbmxpbmVNZXNzYWdlcyA9ICZtX2lubGluZU1lc3NhZ2VzWzBdOwotfQotCi1QbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luOjp+UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbigpCi17Ci0gICAgUGx1
Z2luTWVzc2FnZSogbmV4dDsKLQotICAgIGZvciAoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1f
ZnJvbnQ7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBuZXh0KSB7Ci0gICAgICAgIG5leHQgPSBtZXNzYWdl
LT5uZXh0OwotICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKLSAgICB9Ci19Ci0KLXZvaWQg
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6YXBwZW5kTWVzc2FnZShIV05EIGhXbmQsIFVJTlQg
bXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFBsdWdpbk1lc3NhZ2Uq
IG1lc3NhZ2UgPSBhbGxvY2F0ZU1lc3NhZ2UoKTsKLQotICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25k
OwotICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsKLSAgICBtZXNzYWdlLT53UGFyYW0gPSB3UGFyYW07
Ci0gICAgbWVzc2FnZS0+bFBhcmFtID0gbFBhcmFtOwotICAgIG1lc3NhZ2UtPm5leHQgPSAwOwot
Ci0gICAgaWYgKG1fYmFjaykKLSAgICAgICAgbV9iYWNrLT5uZXh0ID0gbWVzc2FnZTsKLSAgICBt
X2JhY2sgPSBtZXNzYWdlOwotICAgIGlmICghbV9mcm9udCkKLSAgICAgICAgbV9mcm9udCA9IG1l
c3NhZ2U7Ci0KLSAgICAvLyBJZiBpdCBoYXMgYmVlbiBtb3JlIHRoYW4gTWVzc2FnZURpcmVjdFBy
b2Nlc3NpbmdJbnRlcnZhbCBiZXR3ZWVuIHRocm90dGxlZCBtZXNzYWdlcywKLSAgICAvLyBnbyBh
aGVhZCBhbmQgcHJvY2VzcyBhIG1lc3NhZ2UgZGlyZWN0bHkuCi0gICAgZG91YmxlIGN1cnJlbnRU
aW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0gICAgaWYgKGN1cnJlbnRUaW1l
IC0gbV9sYXN0TWVzc2FnZVRpbWUgPiBNZXNzYWdlRGlyZWN0UHJvY2Vzc2luZ0ludGVydmFsKSB7
Ci0gICAgICAgIHByb2Nlc3NRdWV1ZWRNZXNzYWdlKCk7Ci0gICAgICAgIG1fbGFzdE1lc3NhZ2VU
aW1lID0gY3VycmVudFRpbWU7Ci0gICAgICAgIGlmICghbV9mcm9udCkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRo
cm90dGxlVGltZUludGVydmFsKTsKLX0KLQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2lu
Ojpwcm9jZXNzUXVldWVkTWVzc2FnZSgpCi17Ci0gICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9
IG1fZnJvbnQ7Ci0gICAgbV9mcm9udCA9IG1fZnJvbnQtPm5leHQ7Ci0gICAgaWYgKG1lc3NhZ2Ug
PT0gbV9iYWNrKQotICAgICAgICBtX2JhY2sgPSAwOwotCi0gICAgLy8gUHJvdGVjdCB0aGUgUGx1
Z2luVmlldyBmcm9tIGRlc3RydWN0aW9uIHdoaWxlIGNhbGxpbmcgaXRzIHdpbmRvdyBwcm9jLgot
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS82OTMwMjgwPgotICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBw
cm90ZWN0KG1fcGx1Z2luVmlldyk7Ci0gICAgOjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblZpZXct
PnBsdWdpblduZFByb2MoKSwgbWVzc2FnZS0+aFduZCwgbWVzc2FnZS0+bXNnLCBtZXNzYWdlLT53
UGFyYW0sIG1lc3NhZ2UtPmxQYXJhbSk7Ci0KLSAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKLX0K
LQotdm9pZCBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luOjptZXNzYWdlVGhyb3R0bGVUaW1lckZp
cmVkKCkKLXsKLSAgICBwcm9jZXNzUXVldWVkTWVzc2FnZSgpOwotCi0gICAgaWYgKG1fZnJvbnQp
Ci0gICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJv
dHRsZVRpbWVJbnRlcnZhbCk7Ci19Ci0KLVBsdWdpbk1lc3NhZ2UqIFBsdWdpbk1lc3NhZ2VUaHJv
dHRsZXJXaW46OmFsbG9jYXRlTWVzc2FnZSgpCi17Ci0gICAgUGx1Z2luTWVzc2FnZSAqbWVzc2Fn
ZTsKLQotICAgIGlmIChtX2ZyZWVJbmxpbmVNZXNzYWdlcykgewotICAgICAgICBtZXNzYWdlID0g
bV9mcmVlSW5saW5lTWVzc2FnZXM7Ci0gICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVz
c2FnZS0+bmV4dDsKLSAgICB9IGVsc2UKLSAgICAgICAgbWVzc2FnZSA9IG5ldyBQbHVnaW5NZXNz
YWdlOwotCi0gICAgcmV0dXJuIG1lc3NhZ2U7Ci19Ci0KLWJvb2wgUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbjo6aXNJbmxpbmVNZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpCi17Ci0gICAg
cmV0dXJuIG1lc3NhZ2UgPj0gJm1faW5saW5lTWVzc2FnZXNbMF0gJiYgbWVzc2FnZSA8PSAmbV9p
bmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdOwotfQotCi12b2lkIFBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW46OmZyZWVNZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKGlzSW5saW5lTWVzc2FnZShtZXNzYWdlKSkgewotICAgICAgICBtZXNzYWdlLT5u
ZXh0ID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7Ci0gICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2Vz
ID0gbWVzc2FnZTsKLSAgICB9IGVsc2UKLSAgICAgICAgZGVsZXRlIG1lc3NhZ2U7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggN2M1MTAzMDgzNmQzYTNlOTI3N2E2MGQ1N2FkNjM3YzVhZmYxZGFjNi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEs
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKLSNkZWZp
bmUgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbl9oCi0KLSNpbmNsdWRlICJUaW1lci5oIgotCi0j
aW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgUGx1
Z2luVmlldzsKLQotICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsKLSAgICAgICAgSFdORCBoV25k
OwotICAgICAgICBVSU5UIG1zZzsKLSAgICAgICAgV1BBUkFNIHdQYXJhbTsKLSAgICAgICAgTFBB
UkFNIGxQYXJhbTsKLQotICAgICAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKLSAgICB9
OwotCi0gICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbiB7Ci0gICAgcHVibGljOgot
ICAgICAgICBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZpZXcqKTsKLSAgICAgICAg
flBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oKTsKLQotICAgICAgICB2b2lkIGFwcGVuZE1lc3Nh
Z2UoSFdORCwgVUlOVCBtc2csIFdQQVJBTSwgTFBBUkFNKTsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIHZvaWQgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKLSAgICAgICAgdm9pZCBtZXNzYWdlVGhy
b3R0bGVUaW1lckZpcmVkKCk7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2Fn
ZSgpOwotICAgICAgICBib29sIGlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdl
KTsKLSAgICAgICAgdm9pZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKLQot
ICAgICAgICBQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7Ci0gICAgICAgIFBsdWdpbk1lc3NhZ2Uq
IG1fYmFjazsKLSAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcm9udDsKLQotICAgICAgICBzdGF0
aWMgY29uc3QgaW50IE51bUlubGluZU1lc3NhZ2VzID0gNDsKLSAgICAgICAgUGx1Z2luTWVzc2Fn
ZSBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzXTsKLSAgICAgICAgUGx1Z2luTWVz
c2FnZSogbV9mcmVlSW5saW5lTWVzc2FnZXM7Ci0KLSAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhy
b3R0bGVUaW1lcjsKLSAgICAgICAgZG91YmxlIG1fbGFzdE1lc3NhZ2VUaW1lOwotICAgIH07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFj
a2FnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2lu
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg1MjU3ZDYyMjkyNzIwOTE4YTUx
YTM2ZDgyN2Q4Y2NkMmQ0MTljMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotCi0jaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
RGVidWcuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgi
Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFN0cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBMUFZP
SUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBTdHJpbmcmIGluZm8pCi17Ci0gICAgTFBWT0lEIGJ1
ZmZlcjsKLSAgICBVSU5UIGJ1ZmZlckxlbmd0aDsKLSAgICBTdHJpbmcgc3ViSW5mbyA9ICJcXFN0
cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiArIGluZm87Ci0gICAgYm9vbCByZXR2YWwgPSBWZXJR
dWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEsCi0gICAgICAgIGNvbnN0X2Nhc3Q8VUNoYXIqPihz
dWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwKLSAgICAgICAg
JmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7Ci0gICAgaWYgKCFyZXR2YWwgfHwgYnVmZmVyTGVuZ3Ro
ID09IDApCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8vIFN1YnRyYWN0IDEgZnJv
bSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50IHRoZSB0cmFpbGluZyBudWxsIGNoYXJhY3Rlci4K
LSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBidWZm
ZXJMZW5ndGggLSAxKTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlz
dGVkKCkKLXsKLSAgICBpZiAobmFtZSgpID09ICJDaXRyaXggSUNBIENsaWVudCIpIHsKLSAgICAg
ICAgLy8gVGhlIENpdHJpeCBJQ0EgQ2xpZW50IHBsdWctaW4gcmVxdWlyZXMgYSBNb3ppbGxhLWJh
c2VkIGJyb3dzZXI7IHNlZSA8cmRhcjovLzY0MTg2ODE+LgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewotICAg
ICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZlcmxp
Z2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgotICAgICAgICAvLyB0aGUgbGF0ZXN0IDEu
MCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNoLCBz
byBhbGxvdyBpdAotICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCi0gICAgICAgIHN0
YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gc2xQbHVnaW5NaW5SZXF1aXJlZCgweDUx
QkUwMDAwLCAweDAwMDEwMDAwKTsKLQotICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9uKHNs
UGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0g
ZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZU5hbWUoKSwgIm5wbW96YXguZGxsIikpIHsK
LSAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFpbnMg
YWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRsbAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVOYW1lKCksICJucHdwZi5kbGwiKSkgewot
ICAgICAgICAvLyBCdWcgNTcxMTk6IE1pY3Jvc29mdCBXaW5kb3dzIFByZXNlbnRhdGlvbiBGb3Vu
ZGF0aW9uIChXUEYpIHBsdWctaW4gY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb20uZGxsCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAobmFtZSgpID09ICJZYWhvbyBBcHBs
aWNhdGlvbiBTdGF0ZSBQbHVnaW4iKSB7Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg2MAotICAgICAgICAvLyBCdWcgaW4gWWFob28gQXBwbGlj
YXRpb24gU3RhdGUgcGx1Zy1pbiBlYXJsaWVyIHRoYW4gMS4wLjAuNiBsZWFkcyB0byBoZWFwIGNv
cnJ1cHRpb24uIAotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHlh
aG9vQXBwU3RhdGVQbHVnaW5NaW5SZXF1aXJlZCgweDAwMDAwMDA2LCAweDAwMDEwMDAwKTsKLSAg
ICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbih5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVxdWly
ZWQpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkKLXsKLSAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hv
Y2t3YXZlLWZsYXNoIikgewotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJz
aW9uIGZsYXNoVGVuVmVyc2lvbigweDAwMDAwMDAwLCAweDAwMGEwMDAwKTsKLQotICAgICAgICAv
LyBQcmUgMTAgRmxhc2ggb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0
dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50Ci0gICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24o
Zmxhc2hUZW5WZXJzaW9uKSA8IDApCi0gICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVp
cmtXYW50c01vemlsbGFVc2VyQWdlbnQpOwotCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya1Rocm90dGxlSW52YWxpZGF0ZSk7Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKLSAgICAgICAgbV9xdWlya3MuYWRkKFBs
dWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOwotICAgIH0KLQotICAgIGlmIChuYW1lKCkuY29u
dGFpbnMoIk1pY3Jvc29mdCIpICYmIG5hbWUoKS5jb250YWlucygiV2luZG93cyBNZWRpYSIpKSB7
Ci0gICAgICAgIC8vIFRoZSBXTVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5Q
UF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KLSAgICAgICAg
Ly8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXpl
Ci0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxs
KTsKLQotICAgICAgICAvLyBXaW5kb3dsZXNzIG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0
aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJlbW92ZSB0aGF0IHBhcmFtZXRlciAKLSAgICAgICAg
Ly8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhlIHBsdWctaW4uCi0gICAgICAgIG1fcXVpcmtzLmFk
ZChQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKTsKLQotICAgICAgICAvLyBX
TVAgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29wIHRoYXQgaXQgZW50ZXJzIHdoZW5ldmVyIHdlIGNh
bGwgaXQgb3IKLSAgICAgICAgLy8gYXNrIGl0IHRvIHBhaW50LiBUaGlzIG1vZGFsIGxvb3AgY2Fu
IGRlbGl2ZXIgbWVzc2FnZXMgdG8gb3RoZXIKLSAgICAgICAgLy8gd2luZG93cyBpbiBXZWJLaXQg
YXQgdGltZXMgd2hlbiB0aGV5IGFyZSBub3QgZXhwZWN0aW5nIHRoZW0gKGZvcgotICAgICAgICAv
LyBleGFtcGxlLCBkZWxpdmVyaW5nIGEgV01fUEFJTlQgbWVzc2FnZSBkdXJpbmcgYSBsYXlvdXQp
LCBhbmQgdGhlc2UKLSAgICAgICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMuCi0gICAgICAgIG1fcXVp
cmtzLmFkZChQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApOwotICAgIH0KLQotICAgIGlm
IChuYW1lKCkgPT0gIlZMQyBNdWx0aW1lZGlhIFBsdWdpbiIgfHwgbmFtZSgpID09ICJWTEMgTXVs
dGltZWRpYSBQbHVnLWluIikgewotICAgICAgICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rlc3Ryb3kg
aWYgd2UgY2FsbCBOUFBfU2V0V2luZG93IHdpdGggYSBudWxsIHdpbmRvdyBoYW5kbGUKLSAgICAg
ICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ry
b3kpOwotCi0gICAgICAgIC8vIFZMQyAwLjguNmQgYW5kIDAuOC42ZSBjcmFzaCBpZiBtdWx0aXBs
ZSBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Nzcz
MDcwPiB0cmFja3MgYWxsb3dpbmcgbXVsdGlwbGUgaW5zdGFuY2VzIHdoZW4gdGhpcwotICAgICAg
ICAvLyBidWcgaXMgZml4ZWQuCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRB
bGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgRGl2WCBwbHVnaW4g
c2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1
cGRhdGVzIGl0cyBzaXplLCBzbwotICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdp
biB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQotICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8vZGl2
eCIpCi0gICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dD
YWxsKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVt
IGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCi0gICAg
Ly8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxl
IHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0by4KLSAgICAv
LyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0
ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5jZSBnb2VzIGF3YXkuCi0gICAgLy8gU2VlIDxyZGFy
Oi8vcHJvYmxlbS81NDg3NzQyPi4KLSAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gt
c2lsdmVybGlnaHQiKQotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2Fk
UGx1Z2luKTsKLQotICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlw
ZShtaW1lVHlwZSkpIHsKLSAgICAgICAgLy8gQmVjYXVzZSBhIHNpbmdsZSBwcm9jZXNzIGNhbm5v
dCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fubm90IHJlbGlhYmx5IHVubG9hZCBhCi0g
ICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxvYWQgdGhlIEphdmEgcGx1Z2luLCBvciB3
ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBWTQotICAgICAgICBtX3F1aXJrcy5hZGQo
UGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKLQotICAgICAgICAvLyBTZXR0aW5nIHRoZSB3
aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyByZXBh
aW50IHByb2JsZW1zCi0gICAgICAgIC8vIHdpdGggdGhlIEphdmEgcGx1Zy1pbi4KLSAgICAgICAg
bV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7
Ci0gICAgfQotCi0gICAgaWYgKG1pbWVUeXBlID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVn
aW4iKSB7Ci0gICAgICAgIC8vIFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0
aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93
LgotICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1l
TWVzc2FnZVJlY3Vyc2l2ZWx5KTsKLQotICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1
bGVWZXJzaW9uIGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbigweDAwMEIwQjI0
LCAweDAwMDYwMDAwKTsKLQotICAgICAgICAvLyBVbmxvYWRpbmcgUmVhbFBsYXllciB2ZXJzaW9u
cyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNlIGEgaGFuZzsgc2VlIHJkYXI6Ly81NjY5MzE3Lgot
ICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVubG9hZGluZyB3aGVuIHRoaXMgYnVnIGluIHRoZSBS
ZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQgKHJkYXI6Ly81NzEzMTQ3KQotICAgICAgICBpZiAo
Y29tcGFyZUZpbGVWZXJzaW9uKGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbikg
PiAwKQotICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdp
bik7Ci0gICAgfQotfQotCi1ib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCi17Ci0gICAg
RFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOwotICAgIHZlcnNpb25JbmZvU2l6ZSA9
IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLCAmemVyb0hhbmRsZSk7Ci0gICAgaWYg
KHZlcnNpb25JbmZvU2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IHZlcnNpb25JbmZvRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPih2ZXJzaW9uSW5mb1Np
emUpOwotCi0gICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKGNvbnN0X2Nhc3Q8VUNoYXIqPiht
X3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLAotICAgICAgICAg
ICAgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBtX25hbWUgPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5mb0Rh
dGEuZ2V0KCksICJQcm9kdWN0TmFtZSIpOwotICAgIG1fZGVzY3JpcHRpb24gPSBnZXRWZXJzaW9u
SW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJGaWxlRGVzY3JpcHRpb24iKTsKLSAgICBpZiAo
bV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3JpcHRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFZTX0ZJWEVERklMRUlORk8qIGluZm87Ci0gICAgVUlOVCBpbmZvU2l6
ZTsKLSAgICBpZiAoIVZlclF1ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgTCJcXCIs
IChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19GSVhF
REZJTEVJTkZPKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fbW9kdWxlVmVyc2lvbi5s
ZWFzdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKLSAgICBtX21vZHVsZVZlcnNpb24ubW9z
dFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKLQotICAgIGlmIChpc1BsdWdpbkJsYWNrbGlz
dGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
OwotICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIk1JTUVUeXBlIiku
c3BsaXQoJ3wnLCB0eXBlcyk7Ci0gICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9uTGlzdHM7Ci0g
ICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZUV4dGVudHMiKS5z
cGxpdCgnfCcsIGV4dGVuc2lvbkxpc3RzKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlwdGlv
bnM7Ci0gICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZU9wZW5O
YW1lIikuc3BsaXQoJ3wnLCBkZXNjcmlwdGlvbnMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gdHlwZXNb
aV0ubG93ZXIoKTsKLSAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gaSA8IGRlc2NyaXB0aW9u
cy5zaXplKCkgPyBkZXNjcmlwdGlvbnNbaV0gOiAiIjsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lv
bkxpc3QgPSBpIDwgZXh0ZW5zaW9uTGlzdHMuc2l6ZSgpID8gZXh0ZW5zaW9uTGlzdHNbaV0gOiAi
IjsKLQotICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zVmVjdG9yOwotICAgICAgICBl
eHRlbnNpb25MaXN0LnNwbGl0KCcsJywgZXh0ZW5zaW9uc1ZlY3Rvcik7Ci0KLSAgICAgICAgLy8g
R2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxpc3QgdGhhdCBtYXkgYmUgYXQgdGhlIGVuZCBvZiB0
aGUgZGVzY3JpcHRpb24gc3RyaW5nLgotICAgICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24uZmlu
ZCgiKCoiKTsKLSAgICAgICAgaWYgKHBvcyAhPSAtMSkgewotICAgICAgICAgICAgLy8gVGhlcmUg
bWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZi4KLSAgICAgICAgICAg
IGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9uW3BvcyAtIDFdID09ICcgJykKLSAgICAgICAgICAg
ICAgICBwb3MtLTsKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24ubGVmdChw
b3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBxdWlya3MgZm9yIHRo
ZSBNSU1FIHR5cGVzIHRoaXMgcGx1Zy1pbiBzdXBwb3J0cwotICAgICAgICBkZXRlcm1pbmVRdWly
a3ModHlwZSk7Ci0KLSAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZCh0eXBlLCBleHRlbnNp
b25zVmVjdG9yKTsKLSAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKHR5cGUsIGRlc2Ny
aXB0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQbHVnaW5QYWNr
YWdlOjpsb2FkKCkKLXsKLSAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpIHsK
LSAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKLSAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0
b3AoKTsKLSAgICB9IGVsc2UgaWYgKG1faXNMb2FkZWQpIHsKLSAgICAgICAgaWYgKG1fcXVpcmtz
LmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2xvYWRDb3VudCsrOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhfUEFU
SF07Ci0KLSAgICAgICAgaWYgKCE6OkdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCBjdXJy
ZW50UGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgU3RyaW5nIHBh
dGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNlRmluZCgnXFwnKSk7Ci0KLSAg
ICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIC8vIExvYWQgdGhlIGxpYnJhcnkKLSAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5
RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgTE9B
RF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpOwotCi0gICAgICAgIGlmICghOjpTZXRDdXJyZW50
RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsKLSAgICAgICAgICAgIGlmIChtX21vZHVsZSkKLSAg
ICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV9tb2R1bGUpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIG1faXNMb2FkZWQgPSB0cnVlOwotCi0gICAgTlBfR2V0RW50
cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKLSAgICBOUF9Jbml0aWFsaXpl
RnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsKLSAgICBOUEVycm9yIG5wRXJyOwotCi0gICAgTlBf
SW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21vZHVs
ZSwgIk5QX0luaXRpYWxpemUiKTsKLSAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRFbnRy
eVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBvaW50
cyIpOwotICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJvY0Fk
ZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOwotCi0gICAgaWYgKCFOUF9Jbml0aWFsaXpl
IHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCi0gICAgICAgIGdvdG8g
YWJvcnQ7Ci0KLSAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1
bmNzKSk7Ci0gICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOwot
Ci0gICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmbV9wbHVnaW5GdW5jcyk7Ci0gICAgTE9H
X05QRVJST1IobnBFcnIpOwotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAg
ICAgZ290byBhYm9ydDsKLQotICAgIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKLQotICAgIG5w
RXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOwotICAgIExPR19OUEVSUk9SKG5w
RXJyKTsKLQotICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKLSAgICAgICAgZ290byBh
Ym9ydDsKLQotICAgIG1fbG9hZENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci0KLWFib3J0Ogot
ICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdW5z
aWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0Ci17IAotICAgIGNvbnN0IHVuc2lnbmVk
IGhhc2hDb2Rlc1tdID0gewotICAgICAgICBtX25hbWUuaW1wbCgpLT5oYXNoKCksCi0gICAgICAg
IG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCi0gICAgICAgIG1fbWltZVRvRXh0ZW5zaW9u
cy5zaXplKCkKLSAgICB9OwotCi0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxz
aXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKLX0KLQotYm9vbCBQbHVnaW5QYWNrYWdlOjpl
cXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQotewot
ICAgIGlmIChhLm1fbmFtZSAhPSBiLm1fbmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKGEubV9kZXNjcmlwdGlvbiAhPSBiLm1fZGVzY3JpcHRpb24pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChhLm1fbWltZVRvRXh0ZW5zaW9ucy5zaXplKCkgIT0gYi5tX21p
bWVUb0V4dGVuc2lvbnMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBNSU1F
VG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBhLm1fbWltZVRvRXh0
ZW5zaW9ucy5lbmQoKS5rZXlzKCk7Ci0gICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25z
dF9pdGVyYXRvcjo6S2V5cyBpdCA9IGEubV9taW1lVG9FeHRlbnNpb25zLmJlZ2luKCkua2V5cygp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCFiLm1fbWltZVRvRXh0ZW5zaW9ucy5j
b250YWlucygqaXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi11aW50MTZfdCBQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24oKSBjb25z
dAotewotICAgIHJldHVybiBOUF9WRVJTSU9OX01JTk9SOwotfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjkyMTJiYTI0OWY0NzdlMDM2OTE4ZWMyNjEzMjhlNzZmN2RmOWY4Ni4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQml0bWFw
SW5mby5oIgotI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgotI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAi
SFRNTFBsdWdJbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSAi
SW1hZ2UuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRv
dy5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJMb2NhbFdpbmRvd3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk1vdXNl
RXZlbnQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50
LmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5o
IgotI2luY2x1ZGUgIlBsdWdpbk1haW5UaHJlYWRTY2hlZHVsZXIuaCIKLSNpbmNsdWRlICJQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAi
V2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiY19pbnN0YW5jZS5oIgotI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNp
bmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+Ci0KLSNpZiBVU0UoQ0FJUk8pCi0jaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+Ci0j
aW5jbHVkZSA8Z3RrL2d0ay5oPgotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgSFdORCB3aW5kb3dI
YW5kbGVGb3JQYWdlQ2xpZW50KFBsYXRmb3JtUGFnZUNsaWVudCBjbGllbnQpCi17Ci0jaWYgUExB
VEZPUk0oR1RLKQotICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
R2RrV2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coY2xpZW50KSkKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhXTkQ+KEdES19XSU5ET1dfSFdORCh3aW5kb3cpKTsKLSAg
ICByZXR1cm4gMDsKLSNlbHNlCi0gICAgcmV0dXJuIGNsaWVudDsKLSNlbmRpZgotfQotCi11c2lu
ZyBKU0M6OkV4ZWNTdGF0ZTsKLXVzaW5nIEpTQzo6SlNMb2NrOwotdXNpbmcgSlNDOjpKU09iamVj
dDsKLQotdXNpbmcgc3RkOjptaW47Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotY29uc3QgTFBDV1NU
UiBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZSA9IEwiV2ViUGx1Z2luVmlldyI7Ci1jb25zdCBM
UENXU1RSIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7
Ci0KLS8vIFRoZSBjb2RlIHVzZWQgdG8gaG9vayBCZWdpblBhaW50L0VuZFBhaW50IG9yaWdpbmFs
bHkgY2FtZSBmcm9tCi0vLyA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50
Lmh0bWw+LgotLy8gQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEZlbmcgWXVhbiAod3d3LmZlbmd5dWFu
LmNvbSkuCi0KLXN0YXRpYyB1bnNpZ25lZCBiZWdpblBhaW50U3lzQ2FsbDsKLXN0YXRpYyBCWVRF
KiBiZWdpblBhaW50OwotCi1zdGF0aWMgdW5zaWduZWQgZW5kUGFpbnRTeXNDYWxsOwotc3RhdGlj
IEJZVEUqIGVuZFBhaW50OwotCi10eXBlZGVmIEhEQyAoV0lOQVBJICpQdHJCZWdpblBhaW50KShI
V05ELCBQQUlOVFNUUlVDVCopOwotdHlwZWRlZiBCT09MIChXSU5BUEkgKlB0ckVuZFBhaW50KShI
V05ELCBjb25zdCBQQUlOVFNUUlVDVCopOwotCi0jaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82
NCkgJiYgQ09NUElMRVIoTVNWQykKLWV4dGVybiAiQyIgSERDIF9fc3RkY2FsbCBfSEJlZ2luUGFp
bnQoSFdORCBoV25kLCBMUFBBSU5UU1RSVUNUIGxwUGFpbnQpOwotZXh0ZXJuICJDIiBCT09MIF9f
c3RkY2FsbCBfSEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFpbnQp
OwotI2VuZGlmCi0KLUhEQyBXSU5BUEkgUGx1Z2luVmlldzo6aG9va2VkQmVnaW5QYWludChIV05E
IGhXbmQsIFBBSU5UU1RSVUNUKiBscFBhaW50KQotewotICAgIFBsdWdpblZpZXcqIHBsdWdpblZp
ZXcgPSByZWludGVycHJldF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVn
aW5WaWV3UHJvcGVydHkpKTsKLSAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5tX3dt
UHJpbnRIREMpIHsKLSAgICAgICAgLy8gV2UncmUgc2VjcmV0bHkgaGFuZGxpbmcgV01fUFJJTlRD
TElFTlQsIHNvIHNldCB1cCB0aGUgUEFJTlRTVFJVQ1Qgc28KLSAgICAgICAgLy8gdGhhdCB0aGUg
cGx1Z2luIHdpbGwgcGFpbnQgaW50byB0aGUgSERDIHdlIHByb3ZpZGUuCi0gICAgICAgIG1lbXNl
dChscFBhaW50LCAwLCBzaXplb2YoUEFJTlRTVFJVQ1QpKTsKLSAgICAgICAgbHBQYWludC0+aGRj
ID0gcGx1Z2luVmlldy0+bV93bVByaW50SERDOwotICAgICAgICBHZXRDbGllbnRSZWN0KGhXbmQs
ICZscFBhaW50LT5yY1BhaW50KTsKLSAgICAgICAgcmV0dXJuIHBsdWdpblZpZXctPm1fd21Qcmlu
dEhEQzsKLSAgICB9Ci0KLSNpZiBDT01QSUxFUihHQ0MpCi0gICAgSERDIHJlc3VsdDsKLSAgICBh
c20gKCJwdXNoICAgICUyXG4iCi0gICAgICAgICAicHVzaCAgICAlM1xuIgotICAgICAgICAgImNh
bGwgICAgKiU0XG4iCi0gICAgICAgICA6ICI9YSIgKHJlc3VsdCkKLSAgICAgICAgIDogImEiIChi
ZWdpblBhaW50U3lzQ2FsbCksICJnIiAobHBQYWludCksICJnIiAoaFduZCksICJtIiAoYmVnaW5Q
YWludCkKLSAgICAgICAgIDogIm1lbW9yeSIKLSAgICAgICAgKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotI2VsaWYgZGVmaW5lZChfTV9JWDg2KQotICAgIC8vIENhbGwgdGhyb3VnaCB0byB0aGUgb3Jp
Z2luYWwgQmVnaW5QYWludC4KLSAgICBfX2FzbSAgIG1vdiAgICAgZWF4LCBiZWdpblBhaW50U3lz
Q2FsbAotICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50Ci0gICAgX19hc20gICBwdXNoICAgIGhX
bmQKLSAgICBfX2FzbSAgIGNhbGwgICAgYmVnaW5QYWludAotI2Vsc2UKLSAgICByZXR1cm4gX0hC
ZWdpblBhaW50KGhXbmQsIGxwUGFpbnQpOwotI2VuZGlmCi19Ci0KLUJPT0wgV0lOQVBJIFBsdWdp
blZpZXc6Omhvb2tlZEVuZFBhaW50KEhXTkQgaFduZCwgY29uc3QgUEFJTlRTVFJVQ1QqIGxwUGFp
bnQpCi17Ci0gICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1
Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSkpOwotICAgIGlm
IChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPm1fd21QcmludEhEQykgewotICAgICAgICAvLyBX
ZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9QUklOVENMSUVOVCwgc28gd2UgZG9uJ3QgaGF2ZSB0
byBkbyBhbnkKLSAgICAgICAgLy8gY2xlYW51cC4KLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAg
fQotCi0jaWYgQ09NUElMRVIoR0NDKQotICAgIEJPT0wgcmVzdWx0OwotICAgIGFzbSAoInB1c2gg
ICAlMlxuIgotICAgICAgICAgInB1c2ggICAlM1xuIgotICAgICAgICAgImNhbGwgICAqJTRcbiIK
LSAgICAgICAgIDogIj1hIiAocmVzdWx0KQotICAgICAgICAgOiAiYSIgKGVuZFBhaW50U3lzQ2Fs
bCksICJnIiAobHBQYWludCksICJnIiAoaFduZCksICJtIiAoZW5kUGFpbnQpCi0gICAgICAgICk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSNlbGlmIGRlZmluZWQgKF9NX0lYODYpCi0gICAgLy8gQ2Fs
bCB0aHJvdWdoIHRvIHRoZSBvcmlnaW5hbCBFbmRQYWludC4KLSAgICBfX2FzbSAgIG1vdiAgICAg
ZWF4LCBlbmRQYWludFN5c0NhbGwKLSAgICBfX2FzbSAgIHB1c2ggICAgbHBQYWludAotICAgIF9f
YXNtICAgcHVzaCAgICBoV25kCi0gICAgX19hc20gICBjYWxsICAgIGVuZFBhaW50Ci0jZWxzZQot
ICAgIHJldHVybiBfSEVuZFBhaW50KGhXbmQsIGxwUGFpbnQpOwotI2VuZGlmCi19Ci0KLXN0YXRp
YyB2b2lkIGhvb2soY29uc3QgY2hhciogbW9kdWxlLCBjb25zdCBjaGFyKiBwcm9jLCB1bnNpZ25l
ZCYgc3lzQ2FsbElELCBCWVRFKiYgcFByb2MsIGNvbnN0IHZvaWQqIHBOZXdQcm9jKQotewotICAg
IC8vIFNlZSA8aHR0cDovL3d3dy5mZW5neXVhbi5jb20vYXJ0aWNsZS93bXByaW50Lmh0bWw+IGZv
ciBhbiBleHBsYW5hdGlvbiBvZgotICAgIC8vIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLgotCi0g
ICAgSElOU1RBTkNFIGhNb2QgPSBHZXRNb2R1bGVIYW5kbGVBKG1vZHVsZSk7Ci0KLSAgICBwUHJv
YyA9IHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihH
ZXRQcm9jQWRkcmVzcyhoTW9kLCBwcm9jKSkpOwotCi0jaWYgQ09NUElMRVIoR0NDKSB8fCBkZWZp
bmVkKF9NX0lYODYpCi0gICAgaWYgKHBQcm9jWzBdICE9IDB4QjgpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYmUgcmVhZGluZyB0aGUgYnl0ZXMgb25lLWJ5LW9u
ZSBpbnN0ZWFkIG9mIGRvaW5nIGFuCi0gICAgLy8gdW5hbGlnbmVkIHJlYWQ/Ci0gICAgc3lzQ2Fs
bElEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJvYyArIDEpOwotCi0gICAgRFdP
UkQgZmxPbGRQcm90ZWN0OwotICAgIGlmICghVmlydHVhbFByb3RlY3QocFByb2MsIDUsIFBBR0Vf
RVhFQ1VURV9SRUFEV1JJVEUsICZmbE9sZFByb3RlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBwUHJvY1swXSA9IDB4RTk7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihwUHJv
YyArIDEpID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocE5ld1Byb2MpIC0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4ocFByb2MgKyA1KTsKLQotICAgIHBQcm9jICs9IDU7Ci0jZWxzZQot
ICAgIC8qIERpc2Fzc2VtYmx5IG9mIEJlZ2luUGFpbnQoKQotICAgIDAwMDAwMDAwNzc5RkM1QjAg
NEMgOEIgRDEgICAgICAgICBtb3YgICAgICAgICByMTAscmN4Ci0gICAgMDAwMDAwMDA3NzlGQzVC
MyBCOCAxNyAxMCAwMCAwMCAgIG1vdiAgICAgICAgIGVheCwxMDE3aAotICAgIDAwMDAwMDAwNzc5
RkM1QjggMEYgMDUgICAgICAgICAgICBzeXNjYWxsCi0gICAgMDAwMDAwMDA3NzlGQzVCQSBDMyAg
ICAgICAgICAgICAgIHJldAotICAgIDAwMDAwMDAwNzc5RkM1QkIgOTAgICAgICAgICAgICAgICBu
b3AKLSAgICAwMDAwMDAwMDc3OUZDNUJDIDkwICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAw
MDA3NzlGQzVCRCA5MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAwMDAwNzc5RkM1QkUgOTAg
ICAgICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUJGIDkwICAgICAgICAgICAgICAg
bm9wCi0gICAgMDAwMDAwMDA3NzlGQzVDMCA5MCAgICAgICAgICAgICAgIG5vcAotICAgIDAwMDAw
MDAwNzc5RkM1QzEgOTAgICAgICAgICAgICAgICBub3AKLSAgICAwMDAwMDAwMDc3OUZDNUMyIDkw
ICAgICAgICAgICAgICAgbm9wCi0gICAgMDAwMDAwMDA3NzlGQzVDMyA5MCAgICAgICAgICAgICAg
IG5vcAotICAgICovCi0gICAgLy8gQ2hlY2sgZm9yIHRoZSBzaWduYXR1cmUgYXMgaW4gdGhlIGFi
b3ZlIGRpc2Fzc2VtYmx5Ci0gICAgRFdPUkQgZ3VhcmQgPSAweEI4RDE4QjRDOwotICAgIGlmICgq
cmVpbnRlcnByZXRfY2FzdDxEV09SRCo+KHBQcm9jKSAhPSBndWFyZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRFdPUkQgZmxPbGRQcm90ZWN0OwotICAgIFZpcnR1YWxQcm90ZWN0KHBQcm9jLCAx
MiwgUEFHRV9FWEVDVVRFX1JFQURXUklURSwgJiBmbE9sZFByb3RlY3QpOwotICAgIHBQcm9jWzBd
ID0gMHg0ODsgICAgLy8gbW92IHJheCwgdGhpcwotICAgIHBQcm9jWzFdID0gMHhiODsKLSAgICAq
KF9faW50NjQqKShwUHJvYysyKSA9IChfX2ludDY0KXBOZXdQcm9jOwotICAgIHBQcm9jWzEwXSA9
IDB4ZmY7ICAgLy8gam1wIHJheAotICAgIHBQcm9jWzExXSA9IDB4ZTA7Ci0jZW5kaWYKLX0KLQot
c3RhdGljIHZvaWQgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hvb2tzKEhEQyAoV0lOQVBJKmhvb2tl
ZEJlZ2luUGFpbnQpKEhXTkQsIFBBSU5UU1RSVUNUKiksIEJPT0wgKFdJTkFQSSpob29rZWRFbmRQ
YWludCkoSFdORCwgY29uc3QgUEFJTlRTVFJVQ1QqKSkKLXsKLSAgICBzdGF0aWMgYm9vbCBoYXZl
SG9va2VkID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVIb29rZWQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBoYXZlSG9va2VkID0gdHJ1ZTsKLQotICAgIC8vIE1vc3QgKGFsbD8pIHdpbmRvd2VkIHBsdWdp
bnMgZG9uJ3Qgc2VlbSB0byByZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5ULCBzbwotICAgIC8vIHdl
IGhvb2sgaW50byBCZWdpblBhaW50L0VuZFBhaW50IHRvIGFsbG93IHRoZWlyIG5vcm1hbCBXTV9Q
QUlOVCBoYW5kbGluZwotICAgIC8vIHRvIGRyYXcgaW50byBhIGdpdmVuIEhEQy4gTm90ZSB0aGF0
IHRoaXMgaG9va2luZyBhZmZlY3RzIHRoZSBlbnRpcmUKLSAgICAvLyBwcm9jZXNzLgotICAgIGhv
b2soInVzZXIzMi5kbGwiLCAiQmVnaW5QYWludCIsIGJlZ2luUGFpbnRTeXNDYWxsLCBiZWdpblBh
aW50LCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJk
aWZmX3Q+KGhvb2tlZEJlZ2luUGFpbnQpKSk7Ci0gICAgaG9vaygidXNlcjMyLmRsbCIsICJFbmRQ
YWludCIsIGVuZFBhaW50U3lzQ2FsbCwgZW5kUGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oaG9va2VkRW5kUGFpbnQpKSk7Ci0K
LX0KLQotc3RhdGljIGJvb2wgcmVnaXN0ZXJQbHVnaW5WaWV3KCkKLXsKLSAgICBzdGF0aWMgYm9v
bCBoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzID0gZmFsc2U7Ci0gICAgaWYgKGhhdmVSZWdpc3Rl
cmVkV2luZG93Q2xhc3MpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaGF2ZVJlZ2lzdGVy
ZWRXaW5kb3dDbGFzcyA9IHRydWU7Ci0KLSNpZiBQTEFURk9STShHVEspCi0gICAgV2ViQ29yZTo6
c2V0SW5zdGFuY2VIYW5kbGUoKEhJTlNUQU5DRSkoR2V0TW9kdWxlSGFuZGxlKDApKSk7Ci0jZW5k
aWYKLQotICAgIEFTU0VSVChXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpKTsKLQotICAgIFdORENM
QVNTRVggd2NleDsKLSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKLSAgICB3
Y2V4LmhJY29uU20gICAgICAgID0gMDsKLSAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfREJM
Q0xLUzsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gRGVmV2luZG93UHJvYzsKLSAgICB3Y2V4
LmNiQ2xzRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsKLSAgICB3
Y2V4LmhJbnN0YW5jZSAgICAgID0gV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKTsKLSAgICB3Y2V4
LmhJY29uICAgICAgICAgID0gMDsKLSAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNv
cigwLCBJRENfQVJST1cpOwotICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAoSEJSVVNIKUNPTE9S
X1dJTkRPVzsKLSAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gMDsKLSAgICB3Y2V4Lmxwc3pDbGFz
c05hbWUgID0ga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWU7Ci0KLSAgICByZXR1cm4gISFSZWdp
c3RlckNsYXNzRXgoJndjZXgpOwotfQotCi1MUkVTVUxUIENBTExCQUNLIFBsdWdpblZpZXc6OlBs
dWdpblZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtKQotewotICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSByZWludGVycHJl
dF9jYXN0PFBsdWdpblZpZXcqPihHZXRQcm9wKGhXbmQsIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkp
KTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3LT53bmRQcm9jKGhXbmQsIG1lc3NhZ2UsIHdQYXJh
bSwgbFBhcmFtKTsKLX0KLQotc3RhdGljIGJvb2wgaXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJl
KFVJTlQgbWVzc2FnZSkKLXsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBX
TV9MQlVUVE9OVVA6Ci0gICAgICAgIGNhc2UgV01fTUJVVFRPTlVQOgotICAgICAgICBjYXNlIFdN
X1JCVVRUT05VUDoKLSAgICAgICAgY2FzZSBXTV9LRVlVUDoKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotc3RhdGljIGlubGluZSBJbnRQb2ludCBjb250ZW50c1RvTmF0aXZlV2luZG93KEZyYW1l
VmlldyogdmlldywgY29uc3QgSW50UG9pbnQmIHBvaW50KQotewotICAgIHJldHVybiB2aWV3LT5j
b250ZW50c1RvV2luZG93KHBvaW50KTsKLX0KLQotc3RhdGljIGlubGluZSBJbnRSZWN0IGNvbnRl
bnRzVG9OYXRpdmVXaW5kb3coRnJhbWVWaWV3KiB2aWV3LCBjb25zdCBJbnRSZWN0JiByZWN0KQot
ewotICAgIHJldHVybiB2aWV3LT5jb250ZW50c1RvV2luZG93KHJlY3QpOwotfQotCi1MUkVTVUxU
Ci1QbHVnaW5WaWV3Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIC8vIDxyZGFyOi8vNTcxMTEzNj4gU29tZXRpbWVz
IEZsYXNoIHdpbGwgY2FsbCBTZXRDYXB0dXJlIGJlZm9yZSBjcmVhdGluZwotICAgIC8vIGEgZnVs
bC1zY3JlZW4gd2luZG93IGFuZCB3aWxsIG5vdCByZWxlYXNlIGl0LCB3aGljaCBjYXVzZXMgdGhl
Ci0gICAgLy8gZnVsbC1zY3JlZW4gd2luZG93IHRvIG5ldmVyIHJlY2VpdmUgbW91c2UgZXZlbnRz
LiBXZSBzZXQvcmVsZWFzZSBjYXB0dXJlCi0gICAgLy8gb24gbW91c2UgZG93bi91cCBiZWZvcmUg
c2VuZGluZyB0aGUgZXZlbnQgdG8gdGhlIHBsdWctaW4gdG8gcHJldmVudCB0aGF0LgotICAgIHN3
aXRjaCAobWVzc2FnZSkgewotICAgICAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgotICAgICAgICBj
YXNlIFdNX01CVVRUT05ET1dOOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgotICAgICAg
ICAgICAgOjpTZXRDYXB0dXJlKGhXbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgV01fTEJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAgY2Fz
ZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAgICA6OlJlbGVhc2VDYXB0dXJlKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZSA9PSBtX2xhc3RNZXNzYWdlICYm
Ci0gICAgICAgIG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDYWxs
V25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHkpICYmIAotICAgICAgICBtX2lzQ2FsbGlu
Z1BsdWdpblduZFByb2MpCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgaWYgKG1lc3NhZ2UgPT0g
V01fVVNFUiArIDEgJiYKLSAgICAgICAgbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdp
blF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMpKSB7Ci0gICAgICAgIGlmICghbV9t
ZXNzYWdlVGhyb3R0bGVyKQotICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVyID0gYWRvcHRQ
dHIobmV3IFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4odGhpcykpOwotCi0gICAgICAgIG1fbWVz
c2FnZVRocm90dGxlci0+YXBwZW5kTWVzc2FnZShoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJh
bSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG1fbGFzdE1lc3NhZ2UgPSBtZXNz
YWdlOwotICAgIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyA9IHRydWU7Ci0KLSAgICAvLyBJZiB0
aGUgcGx1Zy1pbiBkb2Vzbid0IGV4cGxpY2l0bHkgc3VwcG9ydCBjaGFuZ2luZyB0aGUgcG9wLXVw
IHN0YXRlLCB3ZSBlbmFibGUKLSAgICAvLyBwb3B1cHMgZm9yIGFsbCB1c2VyIGdlc3R1cmVzLgot
ICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHBvcCB0aGUgc3RhdGUgaW4gYSB0aW1lciwgYmVj
YXVzZSB0aGUgRmxhc2ggcGx1Zy1pbiAKLSAgICAvLyBwb3BzIHVwIHdpbmRvd3MgaW4gcmVzcG9u
c2UgdG8gYSBwb3N0ZWQgbWVzc2FnZS4KLSAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PnZlcnNpb24gPCBOUFZFUlNfSEFTX1BPUFVQU19FTkFCTEVEX1NUQVRFICYmCi0gICAgICAgIGlz
V2luZG93c01lc3NhZ2VVc2VyR2VzdHVyZShtZXNzYWdlKSAmJiAhbV9wb3BQb3B1cHNTdGF0ZVRp
bWVyLmlzQWN0aXZlKCkpIHsKLQotICAgICAgICBwdXNoUG9wdXBzRW5hYmxlZFN0YXRlKHRydWUp
OwotCi0gICAgICAgIG1fcG9wUG9wdXBzU3RhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAg
fQotCi0gICAgaWYgKG1lc3NhZ2UgPT0gV01fUFJJTlRDTElFTlQpIHsKLSAgICAgICAgLy8gTW9z
dCAoYWxsPykgd2luZG93ZWQgcGx1Z2lucyBkb24ndCByZXNwb25kIHRvIFdNX1BSSU5UQ0xJRU5U
LCBzbyB3ZQotICAgICAgICAvLyBjaGFuZ2UgdGhlIG1lc3NhZ2UgdG8gV01fUEFJTlQgYW5kIHJl
bHkgb24gb3VyIGhvb2tlZCB2ZXJzaW9ucyBvZgotICAgICAgICAvLyBCZWdpblBhaW50L0VuZFBh
aW50IHRvIG1ha2UgdGhlIHBsdWdpbiBkcmF3IGludG8gdGhlIGdpdmVuIEhEQy4KLSAgICAgICAg
bWVzc2FnZSA9IFdNX1BBSU5UOwotICAgICAgICBtX3dtUHJpbnRIREMgPSByZWludGVycHJldF9j
YXN0PEhEQz4od1BhcmFtKTsKLSAgICB9Ci0KLSAgICAvLyBDYWxsIHRoZSBwbHVnLWluJ3Mgd2lu
ZG93IHByb2MuCi0gICAgTFJFU1VMVCByZXN1bHQgPSA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2lu
V25kUHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotCi0gICAgbV93bVByaW50
SERDID0gMDsKLQotICAgIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyA9IGZhbHNlOwotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQo
KQotewotICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmll
dyYgZnJhbWVWaWV3ID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpOwotCi0gICAgSW50
UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OwotICAgIEludFJlY3Qgb2xkQ2xpcFJl
Y3QgPSBtX2NsaXBSZWN0OwotCi0gICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXcu
Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6
ZSgpKTsKLSAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKLSAgICBtX2NsaXBSZWN0
Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKLQotICAgIGlmIChw
bGF0Zm9ybVBsdWdpbldpZGdldCgpICYmICghbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCB8fCBt
X3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0
KSkgewotCi0gICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7Ci0KLSAgICAgICAgLy8gVG8g
cHJldmVudCBmbGFzaGVzIHdoaWxlIHNjcm9sbGluZywgd2UgZGlzYWJsZSBkcmF3aW5nIGR1cmlu
ZyB0aGUgd2luZG93Ci0gICAgICAgIC8vIHVwZGF0ZSBwcm9jZXNzIGJ5IGNsaXBwaW5nIHRoZSB3
aW5kb3cgdG8gdGhlIHplcm8gcmVjdC4KLQotICAgICAgICBib29sIGNsaXBUb1plcm9SZWN0ID0g
IW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVj
dFdoZW5TY3JvbGxpbmcpOwotCi0gICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAg
ICAgICAgYXV0byByZ24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwg
MCkpOwotICAgICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwg
cmduLmxlYWsoKSwgRkFMU0UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byBy
Z24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xp
cFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAg
ICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCks
IFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2hhdmVVcGRhdGVkUGx1Z2luV2lk
Z2V0IHx8IG1fd2luZG93UmVjdCAhPSBvbGRXaW5kb3dSZWN0KQotICAgICAgICAgICAgOjpNb3Zl
V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93
UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksIFRS
VUUpOwotCi0gICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICAgICAgYXV0byBy
Z24gPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xp
cFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpKTsKLSAgICAg
ICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbi5sZWFrKCks
IFRSVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7Ci0K
LSAgICAgICAgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldCA9IHRydWU7Ci0gICAgfQotfQotCi12
b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKLXsKLSAgICBpZiAoZm9jdXNl
ZCAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICBTZXRGb2N1cyhwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKTsKLQotICAgIFdpZGdldDo6c2V0Rm9jdXMoZm9jdXNlZCk7Ci0KLSAgICBp
ZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlBF
dmVudCBucEV2ZW50OwotCi0gICAgbnBFdmVudC5ldmVudCA9IGZvY3VzZWQgPyBXTV9TRVRGT0NV
UyA6IFdNX0tJTExGT0NVUzsKLSAgICBucEV2ZW50LndQYXJhbSA9IDA7Ci0gICAgbnBFdmVudC5s
UGFyYW0gPSAwOwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpOwotfQotCi12b2lkIFBs
dWdpblZpZXc6OnNob3coKQotewotICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOwotCi0gICAgaWYg
KGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCi0gICAgICAgIFNo
b3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1dfU0hPV05BKTsKLQotICAgIFdpZGdl
dDo6c2hvdygpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmhpZGUoKQotewotICAgIHNldFNlbGZW
aXNpYmxlKGZhbHNlKTsKLQotICAgIGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKQotICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
IFNXX0hJREUpOwotCi0gICAgV2lkZ2V0OjpoaWRlKCk7Ci19Ci0KLWJvb2wgUGx1Z2luVmlldzo6
ZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmIG5wRXZlbnQpCi17Ci0gICAgaWYgKCFtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+ZXZlbnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYm9vbCBz
aG91bGRQb3AgPSBmYWxzZTsKLQotICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dmVy
c2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgJiYgaXNXaW5kb3dzTWVzc2Fn
ZVVzZXJHZXN0dXJlKG5wRXZlbnQuZXZlbnQpKSB7Ci0gICAgICAgIHB1c2hQb3B1cHNFbmFibGVk
U3RhdGUodHJ1ZSk7Ci0gICAgICAgIHNob3VsZFBvcCA9IHRydWU7Ci0gICAgfQotCi0gICAgSlND
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21t
b25WTSgpKTsKLSAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOwotICAgIGJvb2wgYWNjZXB0ZWQg
PSAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsK
LSAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKLQotICAgIGlmIChzaG91bGRQb3ApIAotICAg
ICAgICBwb3BQb3B1cHNFbmFibGVkU3RhdGUoKTsKLQotICAgIHJldHVybiBhY2NlcHRlZDsKLX0K
LQotdm9pZCBQbHVnaW5WaWV3OjpwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoSERDIGhkYykK
LXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIFNlbmRNZXNzYWdlKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCksIFdNX1BSSU5UQ0xJRU5ULCByZWludGVycHJldF9jYXN0PFdQQVJBTT4o
aGRjKSwgUFJGX0NMSUVOVCB8IFBSRl9DSElMRFJFTiB8IFBSRl9PV05FRCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJs
ZTsKLSAgICBtX25wV2luZG93LndpbmRvdyA9IGhkYzsKLQotICAgIFdJTkRPV1BPUyB3aW5kb3dw
b3MgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKLQotICAgIEludFJlY3QgciA9IGNvbnRlbnRz
VG9OYXRpdmVXaW5kb3coZG93bmNhc3Q8RnJhbWVWaWV3PihwYXJlbnQoKSksIGZyYW1lUmVjdCgp
KTsKLQotICAgIHdpbmRvd3Bvcy54ID0gci54KCk7Ci0gICAgd2luZG93cG9zLnkgPSByLnkoKTsK
LSAgICB3aW5kb3dwb3MuY3ggPSByLndpZHRoKCk7Ci0gICAgd2luZG93cG9zLmN5ID0gci5oZWln
aHQoKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLSAgICBucEV2ZW50LmV2ZW50ID0gV01fV0lO
RE9XUE9TQ0hBTkdFRDsKLSAgICBucEV2ZW50LmxQYXJhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pigmd2luZG93cG9zKTsKLSAgICBucEV2ZW50LndQYXJhbSA9IDA7Ci0KLSAgICBkaXNw
YXRjaE5QRXZlbnQobnBFdmVudCk7Ci0KLSAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkp
OwotCi0gICAgbnBFdmVudC5ldmVudCA9IFdNX1BBSU5UOwotICAgIG5wRXZlbnQud1BhcmFtID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhkYyk7Ci0KLSAgICAvLyBUaGlzIGlzIHN1cHBv
c2VkIHRvIGJlIGEgcG9pbnRlciB0byB0aGUgZGlydHkgcmVjdCwgYnV0IGl0IHNlZW1zIHRoYXQg
dGhlIEZsYXNoIHBsdWdpbgotICAgIC8vIGlnbm9yZXMgaXQgc28gd2UganVzdCBwYXNzIG51bGwu
Ci0gICAgbnBFdmVudC5sUGFyYW0gPSAwOwotCi0gICAgZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQp
OwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0jaWYgIVVT
RShXSU5HREkpCi0gICAgQVNTRVJUKG1faXNXaW5kb3dlZCk7Ci0gICAgQVNTRVJUKGNvbnRleHQt
PnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSk7Ci0KLSAgICBJbnRQb2ludCBsb2NhdGlvbklu
V2luZG93ID0gZG93bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNvbnZlcnRUb0NvbnRhaW5p
bmdXaW5kb3coZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7Ci0KLSAgICBMb2NhbFdpbmRvd3NDb250
ZXh0IHdpbmRvd3NDb250ZXh0KGNvbnRleHQsIGZyYW1lUmVjdCgpLCBmYWxzZSk7Ci0KLSNpZiBV
U0UoQ0FJUk8pCi0gICAgLy8gTXVzdCBmbHVzaCBkcmF3aW5ncyB1cCB0byB0aGlzIHBvaW50IHRv
IHRoZSBiYWNraW5nIG1ldGFmaWxlLCBvdGhlcndpc2UgdGhlCi0gICAgLy8gcGx1Z2luIHJlZ2lv
biB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggYW55IGNsZWFyIHJlZ2lvbnMgc3BlY2lmaWVkIGlu
IHRoZQotICAgIC8vIGNhaXJvLWNvbnRyb2xsZWQgcG9ydGlvbnMgb2YgdGhlIHJlbmRlcmluZy4K
LSAgICBjYWlyb19zaG93X3BhZ2UoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwot
I2VuZGlmCi0KLSAgICBIREMgaGRjID0gd2luZG93c0NvbnRleHQuaGRjKCk7Ci0gICAgWEZPUk0g
b3JpZ2luYWxUcmFuc2Zvcm07Ci0gICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLCAmb3JpZ2luYWxU
cmFuc2Zvcm0pOwotCi0gICAgLy8gVGhlIHBsdWdpbiBleHBlY3RzIHRoZSBEQyB0byBiZSBpbiBj
bGllbnQgY29vcmRpbmF0ZXMsIHNvIHdlIHRyYW5zbGF0ZQotICAgIC8vIHRoZSBEQyB0byBtYWtl
IHRoYXQgc28uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwot
ICAgIGN0bS50cmFuc2xhdGUobG9jYXRpb25JbldpbmRvdy54KCksIGxvY2F0aW9uSW5XaW5kb3cu
eSgpKTsKLSAgICBYRk9STSB0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxYRk9STT4oY3RtLnRvVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0KLSAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMsICZ0cmFu
c2Zvcm0pOwotCi0gICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250ZXh0KGhkYyk7Ci0KLSAgICBT
ZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmlnaW5hbFRyYW5zZm9ybSk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX2lzU3RhcnRlZCkgewotICAgICAgICAvLyBEcmF3
IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCi0gICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbklj
b24oY29udGV4dCwgcmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbnN1
cmUgdGhhdCB3ZSBoYXZlIGNhbGxlZCBTZXRXaW5kb3cgYmVmb3JlIHdlIHRyeSB0byBwYWludC4K
LSAgICBpZiAoIW1faGF2ZUNhbGxlZFNldFdpbmRvdykKLSAgICAgICAgc2V0TlBXaW5kb3dSZWN0
KGZyYW1lUmVjdCgpKTsKLQotICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSNpZiAhVVNFKFdJTkdE
SSkKLSAgICAgICAgaWYgKGNvbnRleHQtPnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSkKLSAg
ICAgICAgICAgIHBhaW50V2luZG93ZWRQbHVnaW5JbnRvQ29udGV4dChjb250ZXh0LCByZWN0KTsK
LSNlbmRpZgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSW4gdGhlIEdUSyBhbmQg
UXQgcG9ydHMgd2UgZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRv
IHVzZSB0aGUgd2luZG93Ci0gICAgLy8gY29vcmRpbmF0ZXMuCi0jaWYgUExBVEZPUk0oR1RLKQot
ICAgIEludFJlY3QgcmVjdEluV2luZG93KHJlY3QpOwotICAgIHJlY3RJbldpbmRvdy5pbnRlcnNl
Y3QoZnJhbWVSZWN0KCkpOwotI2Vsc2UKLSAgICBJbnRSZWN0IHJlY3RJbldpbmRvdyA9IGRvd25j
YXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKTsK
LSNlbmRpZgotICAgIExvY2FsV2luZG93c0NvbnRleHQgd2luZG93c0NvbnRleHQoY29udGV4dCwg
cmVjdEluV2luZG93LCBtX2lzVHJhbnNwYXJlbnQpOwotCi0gICAgLy8gT24gU2FmYXJpL1dpbmRv
d3Mgd2l0aG91dCB0cmFuc3BhcmVuY3kgbGF5ZXJzIHRoZSBHcmFwaGljc0NvbnRleHQgcmV0dXJu
cyB0aGUgSERDCi0gICAgLy8gb2YgdGhlIHdpbmRvdyBhbmQgdGhlIHBsdWdpbiBleHBlY3RzIHRo
YXQgdGhlIHBhc3NlZCBpbiBEQyBoYXMgd2luZG93IGNvb3JkaW5hdGVzLgotICAgIC8vIEluIHRo
ZSBHVEsgYW5kIFF0IHBvcnRzIHdlIGFsd2F5cyBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZmZXIg
YW5kIHRoZXJlZm9yZSBuZWVkCi0gICAgLy8gdG8gcHJlc2VydmUgdGhlIHRyYW5zbGF0aW9uIHNl
dCBpbiBnZXRXaW5kb3dzQ29udGV4dC4KLSNpZiAhUExBVEZPUk0oR1RLKQotICAgIGlmICghY29u
dGV4dC0+aXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKLSAgICAgICAgWEZPUk0gdHJhbnNmb3Jt
OwotICAgICAgICBHZXRXb3JsZFRyYW5zZm9ybSh3aW5kb3dzQ29udGV4dC5oZGMoKSwgJnRyYW5z
Zm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybS5lRHggPSAwOwotICAgICAgICB0cmFuc2Zvcm0uZUR5
ID0gMDsKLSAgICAgICAgU2V0V29ybGRUcmFuc2Zvcm0od2luZG93c0NvbnRleHQuaGRjKCksICZ0
cmFuc2Zvcm0pOwotICAgIH0KLSNlbmRpZgotCi0gICAgcGFpbnRJbnRvVHJhbnNmb3JtZWRDb250
ZXh0KHdpbmRvd3NDb250ZXh0LmhkYygpKTsKLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVL
ZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQotewotICAgIEFTU0VSVChtX3BsdWdp
biAmJiAhbV9pc1dpbmRvd2VkKTsKLQotICAgIE5QRXZlbnQgbnBFdmVudDsKLQotICAgIG5wRXZl
bnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUoKTsKLQotICAgIGlmIChldmVudC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpIHsKLSAgICAgICAgbnBFdmVudC5ldmVudCA9IFdN
X0tFWURPV047Ci0gICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsKLSAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKLSAgICAgICAgbnBF
dmVudC5ldmVudCA9IFdNX0NIQVI7Ci0gICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsKLSAgICB9
IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXVwRXZlbnQpIHsKLSAg
ICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWVVQOwotICAgICAgICBucEV2ZW50LmxQYXJhbSA9
IDB4ODAwMDsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNDOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsK
LSAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5wRXZlbnQpKQotICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKLX0KLQotZXh0ZXJuIGJvb2wgaWdub3JlTmV4dFNldEN1cnNvcjsKLQot
dm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQotewot
ICAgIEFTU0VSVChtX3BsdWdpbiAmJiAhbV9pc1dpbmRvd2VkKTsKLQotICAgIE5QRXZlbnQgbnBF
dmVudDsKLQotICAgIEludFBvaW50IHAgPSBjb250ZW50c1RvTmF0aXZlV2luZG93KGRvd25jYXN0
PEZyYW1lVmlldz4ocGFyZW50KCkpLCBJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBh
Z2VZKCkpKTsKLQotICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkp
OwotICAgIG5wRXZlbnQud1BhcmFtID0gMDsKLQotICAgIGlmIChldmVudC0+Y3RybEtleSgpKQot
ICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19DT05UUk9MOwotICAgIGlmIChldmVudC0+c2hp
ZnRLZXkoKSkKLSAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfU0hJRlQ7Ci0KLSAgICBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQgfHwKLSAgICAgICAg
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCB8fCAKLSAgICAgICAg
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpIHsKLSAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9WRTsKLSAgICAgICAgaWYgKGV2ZW50LT5idXR0b25E
b3duKCkpCi0gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewotICAgICAgICAg
ICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKLSAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFy
YW0gfD0gTUtfTEJVVFRPTjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBNaWRkbGVCdXR0b246Ci0gICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1Bh
cmFtIHw9IE1LX01CVVRUT047Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgUmlnaHRCdXR0b246Ci0gICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1Bh
cmFtIHw9IE1LX1JCVVRUT047Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNl
ZG93bkV2ZW50KSB7Ci0gICAgICAgIGZvY3VzUGx1Z2luRWxlbWVudCgpOwotICAgICAgICBzd2l0
Y2ggKGV2ZW50LT5idXR0b24oKSkgewotICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0g
V01fTUJVVFRPTkRPV047Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IDI6Ci0gICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpIHsKLSAgICAgICAgc3dpdGNoIChldmVu
dC0+YnV0dG9uKCkpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBucEV2
ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9O
VVA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAg
ICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0M6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1v
blZNKCkpOwotICAgIC8vIEZJWE1FOiBDb25zaWRlciBiYWNrIHBvcnRpbmcgdGhlIGh0dHA6Ly93
ZWJraXQub3JnL2IvNTgxMDggZml4IGhlcmUuCi0gICAgaWYgKGRpc3BhdGNoTlBFdmVudChucEV2
ZW50KSkKLSAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Ci0KLSNpZiAhUExBVEZP
Uk0oR1RLKQotICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNh
bGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAKLSAgICAvLyBhbmQg
c2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRy
dWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCi0gICAgaWdub3JlTmV4dFNldEN1cnNvciA9IHRydWU7
Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBh
Z2UtPmNocm9tZSgpLmNsaWVudCgpLnNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKTsK
LSNlbmRpZgotfQotCi12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJl
bnQpCi17Ci0gICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKLQotICAgIGlmIChwYXJlbnQp
Ci0gICAgICAgIGluaXQoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFwbGF0Zm9ybVBsdWdp
bldpZGdldCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRoZSBwbHVn
LWluIHdpbmRvdyBvciBvbmUgb2YgaXRzIGNoaWxkcmVuIGhhdmUgdGhlIGZvY3VzLCB3ZSBuZWVk
IHRvIAotICAgICAgICAvLyBjbGVhciBpdCB0byBwcmV2ZW50IHRoZSB3ZWIgdmlldyB3aW5kb3cg
ZnJvbSBiZWluZyBmb2N1c2VkIGJlY2F1c2UgdGhhdCBjYW4KLSAgICAgICAgLy8gdHJpZ2dlciBh
IGxheW91dCB3aGlsZSB0aGUgcGx1Z2luIGVsZW1lbnQgaXMgYmVpbmcgZGV0YWNoZWQuCi0gICAg
ICAgIEhXTkQgZm9jdXNlZFdpbmRvdyA9IDo6R2V0Rm9jdXMoKTsKLSAgICAgICAgaWYgKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkgPT0gZm9jdXNlZFdpbmRvdyB8fCA6OklzQ2hpbGQocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSwgZm9jdXNlZFdpbmRvdykpCi0gICAgICAgICAgICA6OlNldEZvY3VzKDAp
OwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlz
aWJsZSkKLXsKLSAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOwotCi0gICAg
aWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKSB7Ci0gICAgICAg
IGlmICh2aXNpYmxlKQotICAgICAgICAgICAgU2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpLCBTV19TSE9XTkEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBTaG93V2luZG93KHBs
YXRmb3JtUGx1Z2luV2lkZ2V0KCksIFNXX0hJREUpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5W
aWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1f
aXNTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJbiB0aGUgR1RLIHBvcnQgd2Ug
ZHJhdyBpbiBhbiBvZmZzY3JlZW4gYnVmZmVyIGFuZCBkb24ndCB3YW50IHRvIHVzZSB0aGUgd2lu
ZG93Ci0gICAgLy8gY29vcmRpbmF0ZXMuCi0jIGlmIFBMQVRGT1JNKEdUSykKLSAgICBJbnRQb2lu
dCBwID0gcmVjdC5sb2NhdGlvbigpOwotIyBlbHNlCi0gICAgSW50UG9pbnQgcCA9IGRvd25jYXN0
PEZyYW1lVmlldz4oKnBhcmVudCgpKS5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7
Ci0jIGVuZGlmCi0gICAgbV9ucFdpbmRvdy54ID0gcC54KCk7Ci0gICAgbV9ucFdpbmRvdy55ID0g
cC55KCk7Ci0KLSAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0aCgpOwotICAgIG1fbnBX
aW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKLQotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
cmlnaHQgPSByZWN0LndpZHRoKCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBy
ZWN0LmhlaWdodCgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7Ci0gICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOwotCi0gICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5zZXR3aW5kb3cpIHsKLSAgICAgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpKTsKLSAgICAgICAgc2V0Q2FsbGlu
Z1BsdWdpbih0cnVlKTsKLSAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRv
dyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7Ci0gICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFs
c2UpOwotCi0gICAgICAgIG1faGF2ZUNhbGxlZFNldFdpbmRvdyA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKCFtX2lzV2luZG93ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQVNTRVJU
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotCi0gICAgICAgIFdORFBST0MgY3VycmVudFduZFBy
b2MgPSAoV05EUFJPQylHZXRXaW5kb3dMb25nUHRyKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdX
TFBfV05EUFJPQyk7Ci0gICAgICAgIGlmIChjdXJyZW50V25kUHJvYyAhPSBQbHVnaW5WaWV3V25k
UHJvYykKLSAgICAgICAgICAgIG1fcGx1Z2luV25kUHJvYyA9IChXTkRQUk9DKVNldFdpbmRvd0xv
bmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpUGx1
Z2luVmlld1duZFByb2MpOwotICAgIH0KLX0KLQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQ
b3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hh
ciogYnVmKQotewotICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7Ci0KLSAgICBpZiAoZmls
ZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFt
ZS5zdWJzdHJpbmcoOCk7Ci0KLSAgICAvLyBHZXQgZmlsZSBpbmZvCi0gICAgV0lOMzJfRklMRV9B
VFRSSUJVVEVfREFUQSBhdHRyczsKLSAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeFcoZmlsZW5h
bWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEdldEZpbGVFeEluZm9T
dGFuZGFyZCwgJmF0dHJzKSA9PSAwKQotICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9V
TkQ7Ci0KLSAgICBpZiAoYXR0cnMuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJ
UkVDVE9SWSkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwotCi0gICAgSEFO
RExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlVyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLmRhdGEoKSwgRklMRV9SRUFEX0RBVEEsIEZJTEVfU0hBUkVfUkVBRCwgMCwg
T1BFTl9FWElTVElORywgMCwgMCk7Ci0gICAgCi0gICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUUpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQot
ICAgIGJ1ZmZlci5yZXNpemUoYXR0cnMubkZpbGVTaXplTG93KTsKLQotICAgIERXT1JEIGJ5dGVz
UmVhZDsKLSAgICBpbnQgcmV0dmFsID0gUmVhZEZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEo
KSwgYXR0cnMubkZpbGVTaXplTG93LCAmYnl0ZXNSZWFkLCAwKTsKLQotICAgIENsb3NlSGFuZGxl
KGZpbGVIYW5kbGUpOwotCi0gICAgaWYgKHJldHZhbCA9PSAwIHx8IGJ5dGVzUmVhZCAhPSBhdHRy
cy5uRmlsZVNpemVMb3cpCi0gICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKLQot
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9y
bUdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlLCB2b2lkKiwgTlBFcnJvciopCi17Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlLCBOUEVycm9yKiByZXN1bHQpCi17Ci0gICAgc3dp
dGNoICh2YXJpYWJsZSkgewotICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAg
ICAgICAgICAgSFdORCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SFdORCo+KHZhbHVlKTsKLSAgICAg
ICAgICAgICp3ID0gd2luZG93SGFuZGxlRm9yUGFnZUNsaWVudChwYXJlbnQoKSA/IHBhcmVudCgp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpIDogMCk7Ci0gICAgICAgICAgICAq
cmVzdWx0ID0gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczogewotICAgICAgICAg
ICAgTlBCb29sKiBmbGFnID0gcmVpbnRlcnByZXRfY2FzdDxOUEJvb2wqPih2YWx1ZSk7Ci0gICAg
ICAgICAgICAqZmxhZyA9IFRSVUU7Ci0gICAgICAgICAgICAqcmVzdWx0ID0gTlBFUlJfTk9fRVJS
T1I7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZh
bGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChtX2lzV2luZG93ZWQp
IHsKLSAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
Lm1heFgoKSwgcmVjdC5tYXhZKCkgfTsKLSAgICAgICAgOjpJbnZhbGlkYXRlUmVjdChwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCAmaW52YWxpZFJlY3QsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGludmFsaWRhdGVXaW5kb3dsZXNzUGx1Z2luUmVjdChyZWN0KTsKLX0KLQot
dm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCi17Ci0gICAgaWYg
KCFyZWN0KSB7Ci0gICAgICAgIGludmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVj
dC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKLQotICAgIGlmIChtX2lzV2luZG93
ZWQpIHsKLSAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsgci54KCksIHIueSgpLCByLm1heFgo
KSwgci5tYXhZKCkgfTsKLSAgICAgICAgSW52YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSwgJmludmFsaWRSZWN0LCBGQUxTRSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1f
cGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkp
IHsKLSAgICAgICAgICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChyKTsKLSAgICAgICAgICAgIGlm
ICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBtX2ludmFs
aWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGludmFsaWRhdGVSZWN0KHIpOwotICAgIH0KLX0KLQotdm9pZCBQbHVnaW5WaWV3OjppbnZh
bGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKLXsKLSAgICBpZiAobV9pc1dpbmRvd2VkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSRUNUIHI7Ci0KLSAgICBpZiAoR2V0UmduQm94KHJlZ2lv
biwgJnIpID09IDApIHsKLSAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgSW50UmVjdCByZWN0KEludFBvaW50KHIubGVmdCwgci50b3ApLCBJbnRTaXpl
KHIucmlnaHQtci5sZWZ0LCByLmJvdHRvbS1yLnRvcCkpOwotICAgIGludmFsaWRhdGVSZWN0KHJl
Y3QpOwotfQotCi12b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKLXsKLSAgICBpZiAobV9p
c1dpbmRvd2VkKQotICAgICAgICA6OlVwZGF0ZVdpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIDo6VXBkYXRlV2luZG93KHdpbmRvd0hhbmRsZUZvclBhZ2VD
bGllbnQocGFyZW50KCkgPyBwYXJlbnQoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVBhZ2VDbGll
bnQoKSA6IDApKTsKLX0KLQotYm9vbCBQbHVnaW5WaWV3OjpwbGF0Zm9ybVN0YXJ0KCkKLXsKLSAg
ICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwotICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpOwotCi0gICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAg
ICByZWdpc3RlclBsdWdpblZpZXcoKTsKLSAgICAgICAgc2V0VXBPZmZzY3JlZW5QYWludGluZ0hv
b2tzKGhvb2tlZEJlZ2luUGFpbnQsIGhvb2tlZEVuZFBhaW50KTsKLQotICAgICAgICBEV09SRCBm
bGFncyA9IFdTX0NISUxEOwotICAgICAgICBpZiAoaXNTZWxmVmlzaWJsZSgpKQotICAgICAgICAg
ICAgZmxhZ3MgfD0gV1NfVklTSUJMRTsKLQotICAgICAgICBIV05EIHBhcmVudFdpbmRvd0hhbmRs
ZSA9IHdpbmRvd0hhbmRsZUZvclBhZ2VDbGllbnQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0
V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKTsKLSAgICAgICAgSFdORCB3aW5kb3cgPSA6
OkNyZWF0ZVdpbmRvd0V4KDAsIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lLCAwLCBmbGFncywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIHBhcmVu
dFdpbmRvd0hhbmRsZSwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUoKSwgMCk7Ci0KLSNpZiBP
UyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCi0gICAgICAgIG1fd2luZG93ID0gd2luZG93Owot
I2Vsc2UKLSAgICAgICAgc2V0UGxhdGZvcm1XaWRnZXQod2luZG93KTsKLSNlbmRpZgotCi0gICAg
ICAgIC8vIENhbGxpbmcgU2V0V2luZG93TG9uZ1B0ckEgaGVyZSBtYWtlcyB0aGUgd2luZG93IHBy
b2MgQVNDSUksIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGF0IGxlYXN0Ci0gICAgICAgIC8vIHRoZSBT
aG9ja3dhdmUgRGlyZWN0b3IgcGx1Zy1pbi4KLSNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0
KQotICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHJBKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIEdX
TFBfV05EUFJPQywgKExPTkdfUFRSKURlZldpbmRvd1Byb2NBKTsKLSNlbHNlCi0gICAgICAgIDo6
U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgR1dMX1dORFBST0MsIChM
T05HKURlZldpbmRvd1Byb2NBKTsKLSNlbmRpZgotICAgICAgICBTZXRQcm9wKHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCksIGtXZWJQbHVnaW5WaWV3UHJvcGVydHksIHRoaXMpOwotCi0gICAgICAgIG1f
bnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKLSAgICAgICAgbV9ucFdpbmRvdy53
aW5kb3cgPSBwbGF0Zm9ybVBsdWdpbldpZGdldCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1f
bnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOwotICAgICAgICBtX25wV2luZG93
LndpbmRvdyA9IDA7Ci0gICAgfQotCi0gICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Ci0KLSAgICBp
ZiAoIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRX
aW5kb3dDYWxsKSkKLSAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lUmVjdCgpKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsdWdpblZpZXc6OnBsYXRmb3JtRGVzdHJveSgpCi17
Ci0gICAgaWYgKCFwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBEZXN0cm95V2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwotICAgIHNldFBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KDApOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBQbHVnaW5WaWV3OjpzbmFw
c2hvdCgpCi17Ci0jaWYgIVBMQVRGT1JNKEdUSykgJiYgIVVTRShXSU5HREkpCi0gICAgYXV0byBo
ZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0KLSAgICBpZiAo
IW1faXNXaW5kb3dlZCkgewotICAgICAgICAvLyBFbmFibGUgd29ybGQgdHJhbnNmb3Jtcy4KLSAg
ICAgICAgU2V0R3JhcGhpY3NNb2RlKGhkYy5nZXQoKSwgR01fQURWQU5DRUQpOwotCi0gICAgICAg
IFhGT1JNIHRyYW5zZm9ybTsKLSAgICAgICAgR2V0V29ybGRUcmFuc2Zvcm0oaGRjLmdldCgpLCAm
dHJhbnNmb3JtKTsKLQotICAgICAgICAvLyBXaW5kb3dsZXNzIHBsdWctaW5zIGFzc3VtZSB0aGF0
IHRoZXkncmUgZHJhd2luZyBvbnRvIHRoZSB2aWV3J3MgREMuCi0gICAgICAgIC8vIFRyYW5zbGF0
ZSB0aGUgY29udGV4dCBzbyB0aGF0IHRoZSBwbHVnLWluIGRyYXdzIGF0ICgwLCAwKS4KLSAgICAg
ICAgSW50UG9pbnQgcG9zaXRpb24gPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29u
dGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKSkubG9jYXRpb24oKTsKLSAgICAgICAgdHJhbnNmb3Jt
LmVEeCA9IC1wb3NpdGlvbi54KCk7Ci0gICAgICAgIHRyYW5zZm9ybS5lRHkgPSAtcG9zaXRpb24u
eSgpOwotICAgICAgICBTZXRXb3JsZFRyYW5zZm9ybShoZGMuZ2V0KCksICZ0cmFuc2Zvcm0pOwot
ICAgIH0KLQotICAgIHZvaWQqIGJpdHM7Ci0gICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZv
OjpjcmVhdGVCb3R0b21VcChmcmFtZVJlY3QoKS5zaXplKCkpOwotICAgIGF1dG8gaGJtcCA9IGFk
b3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYm1wLCBESUJfUkdCX0NPTE9SUywg
JmJpdHMsIDAsIDApKTsKLQotICAgIEhCSVRNQVAgaGJtcE9sZCA9IHN0YXRpY19jYXN0PEhCSVRN
QVA+KFNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXAuZ2V0KCkpKTsKLQotICAgIHBhaW50SW50
b1RyYW5zZm9ybWVkQ29udGV4dChoZGMuZ2V0KCkpOwotCi0gICAgU2VsZWN0T2JqZWN0KGhkYy5n
ZXQoKSwgaGJtcE9sZCk7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShoYm1wLmdl
dCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQv
V2ViS2l0LnZjeHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJL
aXQudmN4cHJvagppbmRleCBmZjc1MGJjM2EzYTI5MjUwNTFmMTg0NjU1OGMxMDhmNmEzYzA4ZGY4
Li5iMDI4MDUwNTlmODQ4ZDgxYzcwMTU0YWE1ODNlNTIxODhjZWJiMzY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvagorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvagpAQCAtMjk0
LDYgKzI5NCwxNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxXZWJE
YXRhYmFzZVByb3ZpZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXFN0
b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXC4uXGNmXFdlYkNvcmVTdXBwb3J0XFdlYkluc3BlY3RvckNsaWVudENGLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXG5wYXBpLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpbkRh
dGFiYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5z
XFBsdWdpbkRlYnVnLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQ
bHVnaW5zXFBsdWdpblBhY2thZ2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Li5cd2luXFBsdWdpbnNcUGx1Z2luU3RyZWFtLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZpZXcuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJhc2VXaW4uY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbi5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2lu
c1xQbHVnaW5QYWNrYWdlV2luLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u
XHdpblxQbHVnaW5zXFBsdWdpblZpZXdXaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cLi5cd2luXEFjY2Vzc2libGVCYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1lbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cLi5cd2luXEFjY2Vzc2libGVJbWFnZS5jcHAiIC8+CkBAIC00MzYsNiArNDQ2
LDE0IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFN0b3JhZ2VUcmFj
a2VyQ2xpZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlxTdG9yYWdlXFdl
YkRhdGFiYXNlUHJvdmlkZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXFN0
b3JhZ2VcV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGVidWcuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblBhY2thZ2UuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblF1aXJrU2V0
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVnaW5T
dHJhdGVneS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNc
UGx1Z2luU3RyZWFtLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1
Z2luc1xQbHVnaW5WaWV3LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5c
UGx1Z2luc1xQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlwuLlx3aW5cQWNjZXNzaWJsZUJhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlRG9jdW1lbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXC4uXHdpblxBY2Nlc3NpYmxlSW1hZ2UuaCIgLz4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52Y3hwcm9qL1dlYktpdC9XZWJLaXQudmN4cHJvai5maWx0
ZXJzCmluZGV4IDA5NGY2MGE5YjE5MTE3ZTNkMThmZTVlN2I5Yzk1MDY3OGUyOGM0MzQuLmVkMzE4
ZGJiOTZjMGNlNjVlMWJlMjEwOTc2NWMxNjMxYjdkMjZiOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0LnZjeHByb2ovV2ViS2l0L1dlYktpdC52Y3hwcm9qLmZpbHRlcnMKKysrIGIv
U291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQvV2ViS2l0LnZjeHByb2ouZmlsdGVy
cwpAQCAtMjE3LDYgKzIxNywzNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2lu
XFdlYlNlcmlhbGl6ZWRKU1ZhbHVlLmNwcCI+CiAgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQ
bHVnaW5zXG5wYXBpLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8
L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBs
dWdpbkRhdGFiYXNlLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8
L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBs
dWdpbkRlYnVnLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0Ns
Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdp
blBhY2thZ2UuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xD
b21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2lu
U3RyZWFtLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29t
cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVnaW5zXFBsdWdpblZp
ZXcuY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxl
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0YWJh
c2VXaW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xDb21w
aWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0ZXI+Cisg
ICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2lu
c1xQbHVnaW5QYWNrYWdlV2luLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZXM8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXHdpblxQbHVn
aW5zXFBsdWdpblZpZXdXaW4uY3BwIj4KKyAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgor
ICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cU3RvcmFnZVxT
dG9yYWdlQXJlYUltcGwuY3BwIj4KICAgICAgIDxGaWx0ZXI+U291cmNlczwvRmlsdGVyPgogICAg
IDwvQ2xDb21waWxlPgpAQCAtNTU4LDYgKzU4OCwyNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cLi5cd2luXFdlYkNvcmVTdXBwb3J0XEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
LmgiPgogICAgICAgPEZpbHRlcj5XZWJDb3JlU3VwcG9ydDwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2luRGF0
YWJhc2UuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJ
bmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2lu
RGVidWcuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJ
bmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNcUGx1Z2lu
UGFja2FnZS5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAgPC9D
bEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQbHVn
aW5RdWlya1NldC5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAg
PC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQ
bHVnaW5TdHJlYW0uaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAg
IDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cd2luXFBsdWdpbnNc
UGx1Z2luVmlldy5oIj4KKyAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CisgICAg
PC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlx3aW5cUGx1Z2luc1xQ
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiPgorICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8
L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4u
XFN0b3JhZ2VcU3RvcmFnZUFyZWFJbXBsLmgiPgogICAgICAgPEZpbHRlcj5Tb3VyY2VzPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC52
Y3hwcm9qL1dlYktpdC9XZWJLaXRDb21tb24ucHJvcHMgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC52
Y3hwcm9qL1dlYktpdC9XZWJLaXRDb21tb24ucHJvcHMKaW5kZXggZDFjN2E0MWZlZWI1MjExYmMx
MDFkMTc1NGM0NTQ3ZmM4YzAwZDgyMS4uNGU1MjJkNjZiNGZlNGIyZDUwZDdiYjQ5MmNkYTExNTAz
MGQ3MzE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQudmN4cHJvai9XZWJLaXQv
V2ViS2l0Q29tbW9uLnByb3BzCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0LnZjeHByb2ovV2Vi
S2l0L1dlYktpdENvbW1vbi5wcm9wcwpAQCAtNSw3ICs1LDcgQEAKICAgPC9Qcm9wZXJ0eUdyb3Vw
PgogICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0
aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChQcm9qZWN0RGlyKTskKFByb2plY3REaXIpXC4uXC4u
XHdpbjskKFByb2plY3REaXIpXC4uXC4uXHdpblxXZWJDb3JlU3VwcG9ydDskKFByb2plY3REaXIp
XC4uXC4uXFN0b3JhZ2U7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcV2ViS2l0OyQo
Q29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlOyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJ
bmNsdWRlXHByaXZhdGU7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXEluY2x1ZGVcV2ViQ29yZTsk
KENvbmZpZ3VyYXRpb25CdWlsZERpcilcSW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJz
OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlOyQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmU7JChDb25maWd1
cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxEZXJpdmVk
U291cmNlczskKFdlYktpdF9MaWJyYXJpZXMpXEluY2x1ZGU7JChXZWJLaXRfTGlicmFyaWVzKVxJ
bmNsdWRlXHByaXZhdGU7JChXZWJLaXRfTGlicmFyaWVzKVxJbmNsdWRlXFdlYkNvcmU7JChXZWJL
aXRfTGlicmFyaWVzKVxJbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnM7JChXZWJLaXRf
TGlicmFyaWVzKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlOyQoV2ViS2l0X0xpYnJhcmllcylcSW5j
bHVkZVxwcml2YXRlXEphdmFTY3JpcHRDb3JlOyQoSW50RGlyKWluY2x1ZGU7JShBZGRpdGlvbmFs
SW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAg
IDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHJvamVjdERpcik7JChQcm9qZWN0RGly
KVwuLlwuLlx3aW47JChQcm9qZWN0RGlyKVwuLlwuLlx3aW5cUGx1Z2luczskKFByb2plY3REaXIp
XC4uXC4uXHdpblxXZWJDb3JlU3VwcG9ydDskKFByb2plY3REaXIpXC4uXC4uXFN0b3JhZ2U7JChD
b25maWd1cmF0aW9uQnVpbGREaXIpXGluY2x1ZGVcV2ViS2l0OyQoQ29uZmlndXJhdGlvbkJ1aWxk
RGlyKVxJbmNsdWRlOyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlXHByaXZhdGU7JChD
b25maWd1cmF0aW9uQnVpbGREaXIpXEluY2x1ZGVcV2ViQ29yZTskKENvbmZpZ3VyYXRpb25CdWls
ZERpcilcSW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzOyQoQ29uZmlndXJhdGlvbkJ1
aWxkRGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlOyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJ
bmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmU7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
aiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYktpdFxEZXJpdmVkU291cmNlczskKFdlYktpdF9M
aWJyYXJpZXMpXEluY2x1ZGU7JChXZWJLaXRfTGlicmFyaWVzKVxJbmNsdWRlXHByaXZhdGU7JChX
ZWJLaXRfTGlicmFyaWVzKVxJbmNsdWRlXFdlYkNvcmU7JChXZWJLaXRfTGlicmFyaWVzKVxJbmNs
dWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnM7JChXZWJLaXRfTGlicmFyaWVzKVxJbmNsdWRl
XEphdmFTY3JpcHRDb3JlOyQoV2ViS2l0X0xpYnJhcmllcylcSW5jbHVkZVxwcml2YXRlXEphdmFT
Y3JpcHRDb3JlOyQoSW50RGlyKWluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz
KTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KICAgICAgIDxQcmVwcm9jZXNzb3JEZWZp
bml0aW9ucz5XRUJLSVRfRVhQT1JUUztGUkFNRVdPUktfTkFNRT1XZWJLaXQ7JShQcmVwcm9jZXNz
b3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgICAgPFByZWNvbXBp
bGVkSGVhZGVyPlVzZTwvUHJlY29tcGlsZWRIZWFkZXI+CiAgICAgICA8UHJlY29tcGlsZWRIZWFk
ZXJGaWxlPldlYktpdFByZWZpeC5oPC9QcmVjb21waWxlZEhlYWRlckZpbGU+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BhaW50SG9va3MuYXNtIGIvU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTA4ODEzNTZhMGRkY2Q3
ODMwNzI4MTFlOWYxNWExMTU5NGIxODVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QYWludEhvb2tzLmFzbQpAQCAtMCwwICsxLDUwIEBACis7LyoKKzsgICAg
Q29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorOworOyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCis7ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorOyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7
Cis7ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorOyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorOyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorOyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworOyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorOyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsqLworCis7SERDIF9fc3RkY2FsbCBfSEJlZ2luUGFpbnQo
SFdORCBoV25kLCBMUFBBSU5UU1RSVUNUIGxwUGFpbnQpOworCitQVUJMSUMgIF9IQmVnaW5QYWlu
dAorCitfVEVYVCAgIFNFR01FTlQKKworX0hCZWdpblBhaW50IFBST0MKKyAgICAgbW92ICByMTAs
cmN4CisgICAgIG1vdiAgZWF4LDEwMTdoCisgICAgIHN5c2NhbGwKKyAgICAgcmV0CitfSEJlZ2lu
UGFpbnQgRU5EUAorCitfVEVYVCAgIEVORFMKKworO0JPT0wgX19zdGRjYWxsIF9IRW5kUGFpbnQo
SFdORCBoV25kLCBjb25zdCBQQUlOVFNUUlVDVCogbHBQYWludCk7CisKK1BVQkxJQyAgX0hFbmRQ
YWludAorCitfVEVYVCAgIFNFR01FTlQKKworX0hFbmRQYWludCBQUk9DCisgICAgbW92ICByMTAs
cmN4CisgICAgbW92ICBlYXgsMTAxOWgKKyAgICBzeXNjYWxsCisgICAgcmV0CitfSEVuZFBhaW50
IEVORFAKKworX1RFWFQgICBFTkRTCisKK0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYmEyY2VlMmRhNzJjYWYxNGI3NWNmMzZm
YWFkMTRiNzVlNTc0ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1
Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPFBsdWdpblBhY2thZ2U+ID4gUGx1Z2luUGFja2FnZUJ5TmFtZU1hcDsKKworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1h
eGltdW1QZXJzaXN0ZW50UGx1Z2luTWV0YWRhdGFDYWNoZVNpemUgPSAzMjc2ODsKKworc3RhdGlj
IGJvb2wgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOworCitTdHJpbmcm
IHBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlUGF0aCgpCit7CisgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY2FjaGVQYXRoLCAoKSk7CisgICAgcmV0dXJuIGNh
Y2hlUGF0aDsKK30KKyNlbmRpZgorCitQbHVnaW5EYXRhYmFzZTo6UGx1Z2luRGF0YWJhc2UoKQor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgOiBtX3BlcnNp
c3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQoZmFsc2UpCisjZW5kaWYKK3sKK30KKworUGx1Z2lu
RGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKGJvb2wgcG9wdWxhdGUp
Cit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBwbHVnaW5zID0gMDsKKworICAgIGlmICgh
cGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlOworCisgICAg
ICAgIGlmIChwb3B1bGF0ZSkgeworICAgICAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luRGlyZWN0
b3JpZXMoUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpKTsKKyAgICAg
ICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBwbHVnaW5zOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc01JTUVUeXBlUmVnaXN0ZXJl
ZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29u
dGFpbnMobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBObyBwbHVnaW4g
d2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2Fp
bgorICAgIHJldHVybiAocmVmcmVzaCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlu
cyhtaW1lVHlwZSkpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjphZGRFeHRyYVBsdWdpbkRp
cmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKK3sKKyAgICBtX3BsdWdpbkRpcmVjdG9y
aWVzLmFwcGVuZChkaXJlY3RvcnkpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQbHVnaW5E
YXRhYmFzZTo6cmVmcmVzaCgpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFU
QV9DQUNIRSkKKyAgICBpZiAoIW1fcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVJc0xvYWRlZCkKKyAg
ICAgICAgbG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKyAgICBib29sIHBs
dWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkg
eworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkOworICAgICAgICBnZXREZWxldGVk
UGx1Z2lucyhwbHVnaW5zVG9VbmxvYWQpOworCisgICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCisg
ICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVu
ZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5z
VG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgcmVtb3ZlKGl0
LT5nZXQoKSk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQu
aXNFbXB0eSgpOworICAgIH0KKworICAgIEhhc2hTZXQ8U3RyaW5nPiBwYXRoczsKKyAgICBnZXRQ
bHVnaW5QYXRoc0luRGlyZWN0b3JpZXMocGF0aHMpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHRp
bWVfdD4gcGF0aHNXaXRoVGltZXM7CisKKyAgICAvLyBXZSBzaG91bGQgb25seSBza2lwIHVuY2hh
bmdlZCBmaWxlcyBpZiB3ZSBkaWRuJ3QgcmVtb3ZlIGFueSBwbHVnaW5zIGFib3ZlLiBJZiB3ZSBk
aWQgcmVtb3ZlCisgICAgLy8gYW55IHBsdWdpbnMsIHdlIG5lZWQgdG8gbG9vayBhdCBldmVyeSBw
bHVnaW4gZmlsZSBzbyB0aGF0LCBlLmcuLCBpZiB0aGUgdXNlciBoYXMgdHdvIHZlcnNpb25zCisg
ICAgLy8gb2YgUmVhbFBsYXllciBpbnN0YWxsZWQgYW5kIGp1c3QgcmVtb3ZlZCB0aGUgbmV3ZXIg
b25lLCB3ZSdsbCBwaWNrIHVwIHRoZSBvbGRlciBvbmUuCisgICAgYm9vbCBzaG91bGRTa2lwVW5j
aGFuZ2VkRmlsZXMgPSAhcGx1Z2luU2V0Q2hhbmdlZDsKKworICAgIEhhc2hTZXQ8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgcGF0aHNFbmQgPSBwYXRocy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYXRocy5iZWdpbigpOyBpdCAhPSBwYXRoc0Vu
ZDsgKytpdCkgeworICAgICAgICB0aW1lX3QgbGFzdE1vZGlmaWVkOworICAgICAgICBpZiAoIWdl
dEZpbGVNb2RpZmljYXRpb25UaW1lKCppdCwgbGFzdE1vZGlmaWVkKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIHBhdGhzV2l0aFRpbWVzLmFkZCgqaXQsIGxhc3RNb2RpZmllZCk7
CisKKyAgICAgICAgLy8gSWYgdGhlIHBhdGgncyB0aW1lc3RhbXAgaGFzbid0IGNoYW5nZWQgc2lu
Y2UgdGhlIGxhc3QgdGltZSB3ZSByYW4gcmVmcmVzaCgpLCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFu
eXRoaW5nLgorICAgICAgICBpZiAoc2hvdWxkU2tpcFVuY2hhbmdlZEZpbGVzICYmIG1fcGx1Z2lu
UGF0aHNXaXRoVGltZXMuZ2V0KCppdCkgPT0gbGFzdE1vZGlmaWVkKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgaWYgKFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBvbGRQYWNrYWdlID0g
bV9wbHVnaW5zQnlQYXRoLmdldCgqaXQpKSB7CisgICAgICAgICAgICBBU1NFUlQoIXNob3VsZFNr
aXBVbmNoYW5nZWRGaWxlcyB8fCBvbGRQYWNrYWdlLT5sYXN0TW9kaWZpZWQoKSAhPSBsYXN0TW9k
aWZpZWQpOworICAgICAgICAgICAgcmVtb3ZlKG9sZFBhY2thZ2UuZ2V0KCkpOworICAgICAgICB9
CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBQbHVnaW5QYWNrYWdl
OjpjcmVhdGVQYWNrYWdlKCppdCwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgaWYgKHBhY2thZ2Ug
JiYgYWRkKHBhY2thZ2UucmVsZWFzZSgpKSkKKyAgICAgICAgICAgIHBsdWdpblNldENoYW5nZWQg
PSB0cnVlOworICAgIH0KKworICAgIC8vIENhY2hlIGFsbCB0aGUgcGF0aHMgd2UgZm91bmQgd2l0
aCB0aGVpciB0aW1lc3RhbXBzIGZvciBuZXh0IHRpbWUuCisgICAgcGF0aHNXaXRoVGltZXMuc3dh
cChtX3BsdWdpblBhdGhzV2l0aFRpbWVzKTsKKworICAgIGlmICghcGx1Z2luU2V0Q2hhbmdlZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRB
REFUQV9DQUNIRSkKKyAgICB1cGRhdGVQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworI2VuZGlm
CisKKyAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKKworICAgIC8vIFJlZ2lzdGVy
IHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gR2V0IE1J
TUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBt
YXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsKKyAgICAgICAgTUlN
RVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVU
b0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAgICBmb3IgKDsgbWFwX2l0ICE9IG1hcF9lbmQ7
ICsrbWFwX2l0KQorICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQt
PmtleSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1ZlY3RvcjxQbHVnaW5QYWNr
YWdlKj4gUGx1Z2luRGF0YWJhc2U6OnBsdWdpbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxQbHVn
aW5QYWNrYWdlKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQgUGx1Z2lu
RGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9p
ZCogYikKK3sKKyAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW5BID0gKnN0YXRpY19jYXN0PFBsdWdp
blBhY2thZ2UqIGNvbnN0Kj4oYSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luQiA9ICpzdGF0
aWNfY2FzdDxQbHVnaW5QYWNrYWdlKiBjb25zdCo+KGIpOworCisgICAgcmV0dXJuIHBsdWdpbkEt
PmNvbXBhcmUoKnBsdWdpbkIpOworfQorCitQbHVnaW5QYWNrYWdlKiBQbHVnaW5EYXRhYmFzZTo6
cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWlt
ZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0cmluZyBrZXkgPSBt
aW1lVHlwZS5sb3dlcigpOworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
bHVnaW5zLmVuZCgpOworICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9IG1fcHJl
ZmVycmVkUGx1Z2lucy5nZXQoa2V5KTsKKyAgICBpZiAocHJlZmVycmVkUGx1Z2luCisgICAgICAg
ICYmIHByZWZlcnJlZFBsdWdpbi0+aXNFbmFibGVkKCkKKyAgICAgICAgJiYgcHJlZmVycmVkUGx1
Z2luLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisgICAgICAgIHJldHVy
biBwcmVmZXJyZWRQbHVnaW47CisgICAgfQorCisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqLCAy
PiBwbHVnaW5DaG9pY2VzOworCisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBQbHVnaW5Q
YWNrYWdlKiBwbHVnaW4gPSAoKml0KS5nZXQoKTsKKworICAgICAgICBpZiAoIXBsdWdpbi0+aXNF
bmFibGVkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocGx1Z2luLT5t
aW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKSB7CisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgICAgIGlmICghcGx1Z2luLT5lbnN1cmVQ
bHVnaW5Mb2FkZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorICAgICAg
ICAgICAgcGx1Z2luQ2hvaWNlcy5hcHBlbmQocGx1Z2luKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChwbHVnaW5DaG9pY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBxc29ydChwbHVnaW5DaG9pY2VzLmRhdGEoKSwgcGx1Z2luQ2hvaWNlcy5zaXplKCksIHNpemVv
ZihQbHVnaW5QYWNrYWdlKiksIFBsdWdpbkRhdGFiYXNlOjpwcmVmZXJyZWRQbHVnaW5Db21wYXJl
KTsKKworICAgIHJldHVybiBwbHVnaW5DaG9pY2VzWzBdOworfQorCitTdHJpbmcgUGx1Z2luRGF0
YWJhc2U6Ok1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25z
dAoreworICAgIGlmIChleHRlbnNpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQo
KTsKKyAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2UqLCAyPiBw
bHVnaW5DaG9pY2VzOworICAgIEhhc2hNYXA8UGx1Z2luUGFja2FnZSosIFN0cmluZz4gbWltZVR5
cGVGb3JQbHVnaW47CisKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICghKCppdCkt
PmlzRW5hYmxlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTUlNRVRvRXh0
ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5z
aW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWlt
ZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBtaW1lVHlwZSA9IG1p
bWVfaXQtPmtleTsKKyAgICAgICAgICAgIFBsdWdpblBhY2thZ2UqIHByZWZlcnJlZFBsdWdpbiA9
IG1fcHJlZmVycmVkUGx1Z2lucy5nZXQobWltZVR5cGUpOworICAgICAgICAgICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT52YWx1ZTsKKyAgICAgICAgICAgIGJv
b2wgZm91bmRNYXBwaW5nID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShleHRlbnNpb25zW2ldLCBleHRlbnNpb24pKSB7CisgICAgICAgICAgICAg
ICAgICAgIFBsdWdpblBhY2thZ2UqIHBsdWdpbiA9ICgqaXQpLmdldCgpOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChwcmVmZXJyZWRQbHVnaW4gJiYgUGx1Z2luUGFja2FnZTo6ZXF1YWwoKnBs
dWdpbiwgKnByZWZlcnJlZFBsdWdpbikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWltZVR5cGU7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBsdWdpbi0+ZW5zdXJlUGx1Z2luTG9hZGVkKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorICAgICAgICAgICAgICAg
ICAgICBwbHVnaW5DaG9pY2VzLmFwcGVuZChwbHVnaW4pOworICAgICAgICAgICAgICAgICAgICBt
aW1lVHlwZUZvclBsdWdpbi5hZGQocGx1Z2luLCBtaW1lVHlwZSk7CisgICAgICAgICAgICAgICAg
ICAgIGZvdW5kTWFwcGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmb3VuZE1hcHBp
bmcpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
cGx1Z2luQ2hvaWNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
IHFzb3J0KHBsdWdpbkNob2ljZXMuZGF0YSgpLCBwbHVnaW5DaG9pY2VzLnNpemUoKSwgc2l6ZW9m
KFBsdWdpblBhY2thZ2UqKSwgUGx1Z2luRGF0YWJhc2U6OnByZWZlcnJlZFBsdWdpbkNvbXBhcmUp
OworCisgICAgcmV0dXJuIG1pbWVUeXBlRm9yUGx1Z2luLmdldChwbHVnaW5DaG9pY2VzWzBdKTsK
K30KKworUGx1Z2luUGFja2FnZSogUGx1Z2luRGF0YWJhc2U6OmZpbmRQbHVnaW4oY29uc3QgVVJM
JiB1cmwsIFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKCFtaW1lVHlwZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgCisgICAg
U3RyaW5nIGZpbGVuYW1lID0gdXJsLmxhc3RQYXRoQ29tcG9uZW50KCk7CisgICAgaWYgKGZpbGVu
YW1lLmVuZHNXaXRoKCcvJykpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGludCBleHRl
bnNpb25Qb3MgPSBmaWxlbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGlmIChleHRlbnNpb25Q
b3MgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFN0cmluZyBtaW1lVHlwZUZv
ckV4dGVuc2lvbiA9IE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVuYW1lLnN1YnN0cmluZyhleHRl
bnNpb25Qb3MgKyAxKSk7CisgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2luRm9yTUlN
RVR5cGUobWltZVR5cGVGb3JFeHRlbnNpb24pOworICAgIGlmICghcGx1Z2luKSB7CisgICAgICAg
IC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IFdpbmRvd3MgZm9y
IHRoZSBtaW1lIHR5cGUKKyAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9u
LgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgbWltZVR5cGUgPSBtaW1lVHlw
ZUZvckV4dGVuc2lvbjsKKyAgICByZXR1cm4gcGx1Z2luOworfQorCit2b2lkIFBsdWdpbkRhdGFi
YXNlOjpzZXRQcmVmZXJyZWRQbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4pCit7CisgICAgaWYgKCFwbHVnaW4gfHwgcGx1Z2luLT5t
aW1lVG9FeHRlbnNpb25zKCkuY29udGFpbnMobWltZVR5cGUpKQorICAgICAgICBtX3ByZWZlcnJl
ZFBsdWdpbnMuc2V0KG1pbWVUeXBlLmxvd2VyKCksIHBsdWdpbik7Cit9CisKK2Jvb2wgUGx1Z2lu
RGF0YWJhc2U6OmZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgpIGNvbnN0Cit7CisgICAgLy8gU2tpcCBwbHVnaW4gZmlsZXMgdGhhdCBhcmUgZGlzYWJsZWQg
YnkgZmlsZW5hbWUuCisgICAgaWYgKG1fZGlzYWJsZWRQbHVnaW5GaWxlcy5jb250YWlucyhwYXRo
R2V0RmlsZU5hbWUoZmlsZVBhdGgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIGZpbGVFeGlzdHMoZmlsZVBhdGgpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRE
ZWxldGVkUGx1Z2lucyhQbHVnaW5TZXQmIHBsdWdpbnMpIGNvbnN0Cit7CisgICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBpZiAoIWZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVkKCgqaXQpLT5wYXRo
KCkpKQorICAgICAgICAgICAgcGx1Z2lucy5hZGQoKml0KTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OmFkZChQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBycFBhY2thZ2UpCit7
CisgICAgQVNTRVJUX0FSRyhwcnBQYWNrYWdlLCBwcnBQYWNrYWdlKTsKKworICAgIFJlZlB0cjxQ
bHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gcHJwUGFja2FnZTsKKworICAgIGlmICghbV9wbHVnaW5z
LmFkZChwYWNrYWdlKS5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBt
X3BsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwgcGFja2FnZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OnJlbW92ZShQbHVnaW5QYWNrYWdlKiBw
YWNrYWdlKQoreworICAgIE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7CisgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmVu
ZCgpOworICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFBsdWdpblBhY2th
Z2VCeU5hbWVNYXA6Oml0ZXJhdG9yIHBhY2thZ2VJbk1hcCA9IG1fcHJlZmVycmVkUGx1Z2lucy5m
aW5kKGl0LT5rZXkpOworICAgICAgICBpZiAocGFja2FnZUluTWFwICE9IG1fcHJlZmVycmVkUGx1
Z2lucy5lbmQoKSAmJiBwYWNrYWdlSW5NYXAtPnZhbHVlID09IHBhY2thZ2UpCisgICAgICAgICAg
ICBtX3ByZWZlcnJlZFBsdWdpbnMucmVtb3ZlKHBhY2thZ2VJbk1hcCk7CisgICAgfQorCisgICAg
bV9wbHVnaW5zLnJlbW92ZShwYWNrYWdlKTsKKyAgICBtX3BsdWdpbnNCeVBhdGgucmVtb3ZlKHBh
Y2thZ2UtPnBhdGgoKSk7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmNsZWFyKCkKK3sKKyAg
ICBtX3BsdWdpbnMuY2xlYXIoKTsKKyAgICBtX3BsdWdpbnNCeVBhdGguY2xlYXIoKTsKKyAgICBt
X3BsdWdpblBhdGhzV2l0aFRpbWVzLmNsZWFyKCk7CisgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVz
LmNsZWFyKCk7CisgICAgbV9wcmVmZXJyZWRQbHVnaW5zLmNsZWFyKCk7CisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICBtX3BlcnNpc3RlbnRNZXRhZGF0YUNh
Y2hlSXNMb2FkZWQgPSBmYWxzZTsKKyNlbmRpZgorfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjpy
ZW1vdmVEaXNhYmxlZFBsdWdpbkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKK3sKKyAgICBy
ZXR1cm4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzLnJlbW92ZShmaWxlTmFtZSk7Cit9CisKK2Jvb2wg
UGx1Z2luRGF0YWJhc2U6OmFkZERpc2FibGVkUGx1Z2luRmlsZShjb25zdCBTdHJpbmcmIGZpbGVO
YW1lKQoreworICAgIHJldHVybiBtX2Rpc2FibGVkUGx1Z2luRmlsZXMuYWRkKGZpbGVOYW1lKS5p
c05ld0VudHJ5OworfQorCisjaWYgKCFPUyhXSU5ET1dTKSB8fCAhRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpKQorLy8gRm9yIFNhZmFyaS9XaW4gdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2Rz
IGFyZSBpbXBsZW1lbnRlZAorLy8gaW4gUGx1Z2luRGF0YWJhc2VXaW4uY3BwLCBidXQgaWYgd2Ug
Y2FuIHVzZSBXZWJDb3JlIGNvbnN0cnVjdHMKKy8vIGZvciB0aGUgbG9naWMgd2Ugc2hvdWxkIHBl
cmhhcHMgbW92ZSBpdCBoZXJlIHVuZGVyIFhQX1dJTj8KKworVmVjdG9yPFN0cmluZz4gUGx1Z2lu
RGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpCit7CisgICAgVmVjdG9yPFN0cmlu
Zz4gcGF0aHM7CisKKyAgICAvLyBBZGQgcGF0aHMgc3BlY2lmaWMgdG8gZWFjaCBwbGF0Zm9ybQor
I2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGggPSBob21lRGly
ZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmcoIi8ubW96aWxs
YS9wbHVnaW5zIikpOworICAgIHBhdGhzLmFwcGVuZCh1c2VyUGx1Z2luUGF0aCk7CisKKyAgICB1
c2VyUGx1Z2luUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisgICAgdXNlclBsdWdpblBhdGgu
YXBwZW5kKFN0cmluZygiLy5uZXRzY2FwZS9wbHVnaW5zIikpOworICAgIHBhdGhzLmFwcGVuZCh1
c2VyUGx1Z2luUGF0aCk7CisKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL2Jyb3dzZXIvcGx1
Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9saWIvbW96aWxsYS9wbHVnaW5z
Iik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9maXJlZm94L3BsdWdpbnMiKTsKKyAgICBw
YXRocy5hcHBlbmQoIi91c3IvbGliNjQvYnJvd3Nlci1wbHVnaW5zIik7CisgICAgcGF0aHMuYXBw
ZW5kKCIvdXNyL2xpYi9icm93c2VyLXBsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3Iv
bGliL21vemlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9uZXRz
Y2FwZS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvb3B0L21vemlsbGEvcGx1Z2lucyIp
OworICAgIHBhdGhzLmFwcGVuZCgiL29wdC9tb3ppbGxhL2xpYi9wbHVnaW5zIik7CisgICAgcGF0
aHMuYXBwZW5kKCIvb3B0L25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi9v
cHQvbmV0c2NhcGUvY29tbXVuaWNhdG9yL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91
c3IvbGliL25ldHNjYXBlL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25l
dHNjYXBlL3BsdWdpbnMtbGliYzUiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25ldHNj
YXBlL3BsdWdpbnMtbGliYzYiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliNjQvbmV0c2Nh
cGUvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWI2NC9tb3ppbGxhL3BsdWdp
bnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL25zYnJvd3Nlci9wbHVnaW5zIik7Cisg
ICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYjY0L25zYnJvd3Nlci9wbHVnaW5zIik7CisKKyAgICBT
dHJpbmcgbW96SG9tZShnZXRlbnYoIk1PWklMTEFfSE9NRSIpKTsKKyAgICBtb3pIb21lLmFwcGVu
ZCgiL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQobW96SG9tZSk7CisKKyAgICBWZWN0b3I8
U3RyaW5nPiBtb3pQYXRoczsKKyAgICBTdHJpbmcgbW96UGF0aChnZXRlbnYoIk1PWl9QTFVHSU5f
UEFUSCIpKTsKKyAgICBtb3pQYXRoLnNwbGl0KFVDaGFyKCc6JyksIC8qIGFsbG93RW1wdHlFbnRy
aWVzICovIGZhbHNlLCBtb3pQYXRocyk7CisgICAgcGF0aHMuYXBwZW5kVmVjdG9yKG1velBhdGhz
KTsKKyNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIFN0cmluZyB1c2VyUGx1Z2luUGF0aCA9
IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisgICAgdXNlclBsdWdpblBhdGguYXBwZW5kKFN0cmluZygi
L0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7CisgICAgcGF0aHMuYXBwZW5kKHVzZXJQbHVn
aW5QYXRoKTsKKyAgICBwYXRocy5hcHBlbmQoIi9MaWJyYXJ5L0ludGVybmV0IFBsdWctSW5zIik7
CisjZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICBTdHJpbmcgdXNlclBsdWdpblBhdGggPSBob21l
RGlyZWN0b3J5UGF0aCgpOworICAgIHVzZXJQbHVnaW5QYXRoLmFwcGVuZChTdHJpbmcoIlxcQXBw
bGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lucyIpKTsKKyAgICBwYXRocy5hcHBlbmQodXNl
clBsdWdpblBhdGgpOworI2VuZGlmCisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICBTdHJpbmcgcHJlZmVycmVkUGF0aCA9IGhvbWVEaXJlY3RvcnlQYXRoKCk7CisK
KyNpZiBkZWZpbmVkKFhQX1VOSVgpCisgICAgcHJlZmVycmVkUGF0aC5hcHBlbmQoU3RyaW5nKCIv
Lm1vemlsbGEvcGx1Z2lucyIpKTsKKyNlbGlmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIHByZWZl
cnJlZFBhdGguYXBwZW5kKFN0cmluZygiL0xpYnJhcnkvSW50ZXJuZXQgUGx1Zy1JbnMiKSk7Cisj
ZWxpZiBkZWZpbmVkKFhQX1dJTikKKyAgICBwcmVmZXJyZWRQYXRoLmFwcGVuZChTdHJpbmcoIlxc
QXBwbGljYXRpb24gRGF0YVxcTW96aWxsYVxccGx1Z2lucyIpKTsKKyNlbmRpZgorCisgICAgLy8g
VE9ETzogV2Ugc2hvdWxkIG5vcm1hbGl6ZSB0aGUgcGF0aCBiZWZvcmUgZG9pbmcgYSBjb21wYXJp
c29uLgorICAgIHJldHVybiBwYXRoID09IHByZWZlcnJlZFBhdGg7Cit9CisKK3ZvaWQgUGx1Z2lu
RGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mIHBh
dGhzKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5z
aXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisKKyNpZiBk
ZWZpbmVkKFhQX1VOSVgpCisgICAgU3RyaW5nIGZpbGVOYW1lRmlsdGVyKCIqLnNvIik7CisjZWxz
ZQorICAgIFN0cmluZyBmaWxlTmFtZUZpbHRlcigiIik7CisjZW5kaWYKKworICAgIFZlY3RvcjxT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkaXJzRW5kID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5lbmQo
KTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBkSXQgPSBtX3BsdWdp
bkRpcmVjdG9yaWVzLmJlZ2luKCk7IGRJdCAhPSBkaXJzRW5kOyArK2RJdCkgeworICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBwbHVnaW5QYXRocyA9IGxpc3REaXJlY3RvcnkoKmRJdCwgZmlsZU5hbWVG
aWx0ZXIpOworICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGx1Z2luc0Vu
ZCA9IHBsdWdpblBhdGhzLmVuZCgpOworICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25z
dF9pdGVyYXRvciBwSXQgPSBwbHVnaW5QYXRocy5iZWdpbigpOyBwSXQgIT0gcGx1Z2luc0VuZDsg
KytwSXQpIHsKKyAgICAgICAgICAgIGlmICghZmlsZUV4aXN0c0FuZElzTm90RGlzYWJsZWQoKnBJ
dCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHBhdGhzLmFkZCgq
cEl0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworI2VuZGlmIC8vICFPUyhXSU5ET1dTKQorCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKKworc3RhdGljIHZvaWQg
ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZSwgVmVj
dG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAwOworICAgIHNp
emVfdCBidWZmZXJDYXBhY2l0eSA9IDEwMjQ7CisgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBh
Y2l0eSk7CisKKyAgICBkbyB7CisgICAgICAgIGJ1ZmZlclNpemUgKz0gcmVhZEZyb21GaWxlKGZp
bGUsIGJ1ZmZlci5kYXRhKCkgKyBidWZmZXJTaXplLCBidWZmZXJDYXBhY2l0eSAtIGJ1ZmZlclNp
emUpOworICAgICAgICBpZiAoYnVmZmVyU2l6ZSA9PSBidWZmZXJDYXBhY2l0eSkgeworICAgICAg
ICAgICAgaWYgKGJ1ZmZlckNhcGFjaXR5IDwgbWF4aW11bVBlcnNpc3RlbnRQbHVnaW5NZXRhZGF0
YUNhY2hlU2l6ZSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlckNhcGFjaXR5ICo9IDI7CisgICAg
ICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5jbGVhcigpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBicmVh
azsKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICAgIGJ1ZmZlci5zaHJpbmsoYnVmZmVyU2l6ZSk7
Cit9CisKK3N0YXRpYyBib29sIHJlYWRVVEY4U3RyaW5nKFN0cmluZyYgcmVzdWx0U3RyaW5nLCBj
aGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKK3sKKyAgICBpZiAoc3RhcnQgPj0gZW5kKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgbGVuID0gc3RybGVuKHN0YXJ0KTsKKyAg
ICByZXN1bHRTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHN0YXJ0LCBsZW4pOworICAgIHN0YXJ0
ICs9IGxlbiArIDE7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcmVhZFRp
bWUodGltZV90JiByZXN1bHRUaW1lLCBjaGFyKiYgc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKK3sK
KyAgICBpZiAoc3RhcnQgKyBzaXplb2YodGltZV90KSA+PSBlbmQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFRoZSBzdHJlYW0gaXMgbm90IG5lY2Vzc2FyeSBhbGlnbmVkLgorICAg
IG1lbWNweSgmcmVzdWx0VGltZSwgc3RhcnQsIHNpemVvZih0aW1lX3QpKTsKKyAgICBzdGFydCAr
PSBzaXplb2YodGltZV90KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgY29uc3Qg
Y2hhciBzY2hlbWFWZXJzaW9uID0gJzEnOworc3RhdGljIGNvbnN0IGNoYXIgcGVyc2lzdGVudFBs
dWdpbk1ldGFkYXRhQ2FjaGVGaWxlbmFtZVtdID0gIlBsdWdpbk1ldGFkYXRhQ2FjaGUuYmluIjsK
Kwordm9pZCBQbHVnaW5EYXRhYmFzZTo6bG9hZFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCkKK3sK
KyAgICBpZiAoIWlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkgfHwgcGVyc2lzdGVu
dE1ldGFkYXRhQ2FjaGVQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQ
bGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKKyAgICBTdHJpbmcgYWJzb2x1dGVDYWNoZVBhdGggPSBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQYXRoKCksIHBl
cnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlRmlsZW5hbWUpOworICAgIGZpbGUgPSBvcGVuRmls
ZShhYnNvbHV0ZUNhY2hlUGF0aCwgT3BlbkZvclJlYWQpOworCisgICAgaWYgKCFpc0hhbmRsZVZh
bGlkKGZpbGUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXJrIGNhY2hlIGFzIGxvYWRl
ZCByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gSWYKKyAgICAvLyB0aGVyZSdzIGVy
cm9yIGluIHRoZSBjYWNoZSwgd2Ugd29uJ3QgdHJ5IHRvIGxvYWQgaXQgYW55bW9yZS4KKyAgICBt
X3BlcnNpc3RlbnRNZXRhZGF0YUNhY2hlSXNMb2FkZWQgPSB0cnVlOworCisgICAgVmVjdG9yPGNo
YXI+IGZpbGVDb250ZW50czsKKyAgICBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGUs
IGZpbGVDb250ZW50cyk7CisgICAgY2xvc2VGaWxlKGZpbGUpOworCisgICAgaWYgKGZpbGVDb250
ZW50cy5zaXplKCkgPCAyIHx8IGZpbGVDb250ZW50cy5maXJzdCgpICE9IHNjaGVtYVZlcnNpb24g
fHwgZmlsZUNvbnRlbnRzLmxhc3QoKSAhPSAnXDAnKSB7CisgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIHJlYWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IHNjaGVtYSIpOworICAg
ICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQYXRoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNoYXIqIGJ1ZmZlclBvcyA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyAxOworICAg
IGNoYXIqIGVuZCA9IGZpbGVDb250ZW50cy5kYXRhKCkgKyBmaWxlQ29udGVudHMuc2l6ZSgpOwor
CisgICAgUGx1Z2luU2V0IGNhY2hlZFBsdWdpbnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIHRpbWVf
dD4gY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGltZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxQbHVnaW5QYWNrYWdlPiA+IGNhY2hlZFBsdWdpbnNCeVBhdGg7CisKKyAgICB3aGlsZSAoYnVm
ZmVyUG9zIDwgZW5kKSB7CisgICAgICAgIFN0cmluZyBwYXRoOworICAgICAgICB0aW1lX3QgbGFz
dE1vZGlmaWVkOworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgU3RyaW5nIGRlc2M7Cisg
ICAgICAgIFN0cmluZyBtaW1lRGVzYzsKKyAgICAgICAgaWYgKCEocmVhZFVURjhTdHJpbmcocGF0
aCwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRUaW1lKGxhc3RNb2RpZmll
ZCwgYnVmZmVyUG9zLCBlbmQpCisgICAgICAgICAgICAgICYmIHJlYWRVVEY4U3RyaW5nKG5hbWUs
IGJ1ZmZlclBvcywgZW5kKQorICAgICAgICAgICAgICAmJiByZWFkVVRGOFN0cmluZyhkZXNjLCBi
dWZmZXJQb3MsIGVuZCkKKyAgICAgICAgICAgICAgJiYgcmVhZFVURjhTdHJpbmcobWltZURlc2Ms
IGJ1ZmZlclBvcywgZW5kKSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJl
YWQgcGx1Z2luIG1ldGFkYXRhIGNhY2hlOiBjb3JydXB0IGRhdGEiKTsKKyAgICAgICAgICAgIGRl
bGV0ZUZpbGUoYWJzb2x1dGVDYWNoZVBhdGgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU2tpcCBtZXRhZGF0YSB0aGF0IHBvaW50cyB0byBwbHVnaW5zIGZy
b20gZGlyZWN0b3JpZXMgdGhhdAorICAgICAgICAvLyBhcmUgbm90IHBhcnQgb2YgcGx1Z2luIGRp
cmVjdG9yeSBsaXN0IGFueW1vcmUuCisgICAgICAgIFN0cmluZyBwbHVnaW5EaXJlY3RvcnlOYW1l
ID0gZGlyZWN0b3J5TmFtZShwYXRoKTsKKyAgICAgICAgaWYgKG1fcGx1Z2luRGlyZWN0b3JpZXMu
ZmluZChwbHVnaW5EaXJlY3RvcnlOYW1lKSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+IHBhY2thZ2UgPSBQbHVn
aW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlRnJvbUNhY2hlKHBhdGgsIGxhc3RNb2RpZmllZCwgbmFt
ZSwgZGVzYywgbWltZURlc2MpOworCisgICAgICAgIGlmIChwYWNrYWdlICYmIGNhY2hlZFBsdWdp
bnMuYWRkKHBhY2thZ2UpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIGNhY2hlZFBsdWdpblBh
dGhzV2l0aFRpbWVzLmFkZChwYWNrYWdlLT5wYXRoKCksIHBhY2thZ2UtPmxhc3RNb2RpZmllZCgp
KTsKKyAgICAgICAgICAgIGNhY2hlZFBsdWdpbnNCeVBhdGguYWRkKHBhY2thZ2UtPnBhdGgoKSwg
cGFja2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3BsdWdpbnMuc3dhcChjYWNoZWRQ
bHVnaW5zKTsKKyAgICBtX3BsdWdpbnNCeVBhdGguc3dhcChjYWNoZWRQbHVnaW5zQnlQYXRoKTsK
KyAgICBtX3BsdWdpblBhdGhzV2l0aFRpbWVzLnN3YXAoY2FjaGVkUGx1Z2luUGF0aHNXaXRoVGlt
ZXMpOworfQorCitzdGF0aWMgYm9vbCB3cml0ZVVURjhTdHJpbmcoUGxhdGZvcm1GaWxlSGFuZGxl
IGZpbGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIENTdHJpbmcgdXRmOFN0cmluZyA9
IHN0cmluZy51dGY4KCk7CisgICAgaW50IGxlbmd0aCA9IHV0ZjhTdHJpbmcubGVuZ3RoKCkgKyAx
OworICAgIHJldHVybiB3cml0ZVRvRmlsZShmaWxlLCB1dGY4U3RyaW5nLmRhdGEoKSwgbGVuZ3Ro
KSA9PSBsZW5ndGg7Cit9CisKK3N0YXRpYyBib29sIHdyaXRlVGltZShQbGF0Zm9ybUZpbGVIYW5k
bGUgZmlsZSwgY29uc3QgdGltZV90JiB0aW1lKQoreworICAgIHJldHVybiB3cml0ZVRvRmlsZShm
aWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmdGltZSksIHNpemVvZih0aW1lX3Qp
KSA9PSBzaXplb2YodGltZV90KTsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZTo6dXBkYXRlUGVy
c2lzdGVudE1ldGFkYXRhQ2FjaGUoKQoreworICAgIGlmICghaXNQZXJzaXN0ZW50TWV0YWRhdGFD
YWNoZUVuYWJsZWQoKSB8fCBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGgoKS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VBbGxEaXJlY3RvcmllcyhwZXJzaXN0ZW50TWV0
YWRhdGFDYWNoZVBhdGgoKSk7CisgICAgU3RyaW5nIGFic29sdXRlQ2FjaGVQYXRoID0gcGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCgpLCBwZXJzaXN0
ZW50UGx1Z2luTWV0YWRhdGFDYWNoZUZpbGVuYW1lKTsKKyAgICBkZWxldGVGaWxlKGFic29sdXRl
Q2FjaGVQYXRoKTsKKworICAgIGlmIChtX3BsdWdpbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZTsKKyAgICBmaWxlID0gb3BlbkZpbGUo
YWJzb2x1dGVDYWNoZVBhdGgsIE9wZW5Gb3JXcml0ZSk7CisKKyAgICBpZiAoIWlzSGFuZGxlVmFs
aWQoZmlsZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gb3BlbiBwbHVnaW4gbWV0
YWRhdGEgY2FjaGUgZm9yIHNhdmluZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Y2hhciBsb2NhbFNjaGVtYVZlcnNpb24gPSBzY2hlbWFWZXJzaW9uOworICAgIGlmICh3cml0ZVRv
RmlsZShmaWxlLCAmbG9jYWxTY2hlbWFWZXJzaW9uLCAxKSAhPSAxKSB7CisgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBtZXRhZGF0YSBjYWNoZSBzY2hlbWEiKTsKKyAg
ICAgICAgY2xvc2VGaWxlKGZpbGUpOworICAgICAgICBkZWxldGVGaWxlKGFic29sdXRlQ2FjaGVQ
YXRoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgaWYgKCEod3JpdGVVVEY4U3RyaW5nKGZpbGUsICgqaXQpLT5wYXRoKCkpCisgICAgICAgICAg
ICAgICYmIHdyaXRlVGltZShmaWxlLCAoKml0KS0+bGFzdE1vZGlmaWVkKCkpCisgICAgICAgICAg
ICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+bmFtZSgpKQorICAgICAgICAgICAg
ICAmJiB3cml0ZVVURjhTdHJpbmcoZmlsZSwgKCppdCktPmRlc2NyaXB0aW9uKCkpCisgICAgICAg
ICAgICAgICYmIHdyaXRlVVRGOFN0cmluZyhmaWxlLCAoKml0KS0+ZnVsbE1JTUVEZXNjcmlwdGlv
bigpKSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHdyaXRlIHBsdWdpbiBt
ZXRhZGF0YSB0byBjYWNoZSIpOworICAgICAgICAgICAgY2xvc2VGaWxlKGZpbGUpOworICAgICAg
ICAgICAgZGVsZXRlRmlsZShhYnNvbHV0ZUNhY2hlUGF0aCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbG9zZUZpbGUoZmlsZSk7Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2U6OmlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCkKK3sKKyAgICBy
ZXR1cm4gZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVkOworfQorCit2b2lk
IFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUVuYWJsZWQoYm9vbCBp
c0VuYWJsZWQpCit7CisgICAgZ1BlcnNpc3RlbnRQbHVnaW5NZXRhZGF0YUNhY2hlSXNFbmFibGVk
ID0gaXNFbmFibGVkOworfQorCitTdHJpbmcgUGx1Z2luRGF0YWJhc2U6OnBlcnNpc3RlbnRNZXRh
ZGF0YUNhY2hlUGF0aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBlcnNpc3RlbnRQbHVnaW5N
ZXRhZGF0YUNhY2hlUGF0aCgpOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpzZXRQZXJzaXN0
ZW50TWV0YWRhdGFDYWNoZVBhdGgoY29uc3QgU3RyaW5nJiBwZXJzaXN0ZW50TWV0YWRhdGFDYWNo
ZVBhdGgpCit7CisgICAgV2ViQ29yZTo6cGVyc2lzdGVudFBsdWdpbk1ldGFkYXRhQ2FjaGVQYXRo
KCkgPSBwZXJzaXN0ZW50TWV0YWRhdGFDYWNoZVBhdGg7Cit9CisjZW5kaWYKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmM0OGVjZGZm
NmNmMjI0MzU1OTRmOGFlODUyMzAxYTYyNjNjZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5oCkBAIC0wLDAgKzEsMTE4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFBsdWdpbkRhdGFiYXNlX2gKKyNkZWZpbmUgUGx1Z2luRGF0YWJh
c2VfaAorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgSW50
U2l6ZTsKKyAgICBjbGFzcyBVUkw7CisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VDbGllbnQ7Cisg
ICAgY2xhc3MgUGx1Z2luUGFja2FnZTsKKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1
Z2luUGFja2FnZT4sIFBsdWdpblBhY2thZ2VIYXNoLCBQbHVnaW5QYWNrYWdlSGFzaFRyYWl0cz4g
UGx1Z2luU2V0OworCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2UgeworICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQbHVnaW5EYXRhYmFzZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luRGF0YWJhc2UoKTsKKworICAgICAgICAvLyBUaGUg
Zmlyc3QgY2FsbCB0byBpbnN0YWxsZWRQbHVnaW5zIGNyZWF0ZXMgdGhlIHBsdWdpbiBkYXRhYmFz
ZQorICAgICAgICAvLyBhbmQgYnkgZGVmYXVsdCBwb3B1bGF0ZXMgaXQgd2l0aCB0aGUgcGx1Z2lu
cyBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4KKyAgICAgICAgLy8gRm9yIHRlc3RpbmcgcHVycG9z
ZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG5vdCBwb3B1bGF0ZSB0aGUgZGF0YWJhc2UKKyAgICAgICAg
Ly8gYXV0b21hdGljYWxseSwgYXMgdGhlIHBsdWdpbnMgbWlnaHQgYWZmZWN0IHRoZSBEUlQgcmVz
dWx0cyBieQorICAgICAgICAvLyB3cml0aW5nIHRvIGEuby4gc3RkZXJyLgorICAgICAgICBzdGF0
aWMgUGx1Z2luRGF0YWJhc2UqIGluc3RhbGxlZFBsdWdpbnMoYm9vbCBwb3B1bGF0ZSA9IHRydWUp
OworCisgICAgICAgIGJvb2wgcmVmcmVzaCgpOworICAgICAgICB2b2lkIGNsZWFyKCk7CisgICAg
ICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29s
IGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICB2
b2lkIGFkZEV4dHJhUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworCisgICAgICAgIHN0
YXRpYyBib29sIGlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0
b3J5KTsKKyAgICAgICAgc3RhdGljIGludCBwcmVmZXJyZWRQbHVnaW5Db21wYXJlKGNvbnN0IHZv
aWQqLCBjb25zdCB2b2lkKik7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZSogZmluZFBsdWdpbihj
b25zdCBVUkwmLCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1
Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgc2V0
UHJlZmVycmVkUGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGx1Z2lu
UGFja2FnZSogcGx1Z2luKTsKKworICAgICAgICB2b2lkIHNldFBsdWdpbkRpcmVjdG9yaWVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBkaXJlY3RvcmllcykKKyAgICAgICAgeworICAgICAgICAgICAg
Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fcGx1Z2luRGlyZWN0b3JpZXMgPSBkaXJlY3RvcmllczsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVtb3ZlRGlzYWJsZWRQbHVnaW5GaWxlKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUpOworICAgICAgICBib29sIGFkZERpc2FibGVkUGx1Z2luRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRl
ZmF1bHRQbHVnaW5EaXJlY3RvcmllcygpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBwbHVnaW5E
aXJlY3RvcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luRGlyZWN0b3JpZXM7IH0KKworICAg
ICAgICBTdHJpbmcgTUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24p
IGNvbnN0OworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAg
ICAgIHN0YXRpYyBib29sIGlzUGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVFbmFibGVkKCk7CisgICAg
ICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlRW5hYmxlZChib29sIGlz
RW5hYmxlZCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcGVyc2lzdGVudE1ldGFkYXRhQ2FjaGVQ
YXRoKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldFBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0
aChjb25zdCBTdHJpbmcmIHBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlUGF0aCk7CisjZW5kaWYKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZ2V0UGx1Z2luUGF0aHNJbkRpcmVjdG9yaWVzKEhh
c2hTZXQ8U3RyaW5nPiYpIGNvbnN0OworICAgICAgICB2b2lkIGdldERlbGV0ZWRQbHVnaW5zKFBs
dWdpblNldCYpIGNvbnN0OworICAgICAgICBib29sIGZpbGVFeGlzdHNBbmRJc05vdERpc2FibGVk
KGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUg
cGx1Z2luIHdhcyBhY3R1YWxseSBhZGRlZCBvciBub3QgKGl0IHdvbid0IGJlIGFkZGVkIGlmIGl0
J3MgYSBkdXBsaWNhdGUgb2YgYW4gZXhpc3RpbmcgcGx1Z2luKS4KKyAgICAgICAgYm9vbCBhZGQo
UGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPik7CisgICAgICAgIHZvaWQgcmVtb3ZlKFBsdWdpblBh
Y2thZ2UqKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX01FVEFEQVRBX0NBQ0hFKQorICAg
ICAgICB2b2lkIGxvYWRQZXJzaXN0ZW50TWV0YWRhdGFDYWNoZSgpOworICAgICAgICB2b2lkIHVw
ZGF0ZVBlcnNpc3RlbnRNZXRhZGF0YUNhY2hlKCk7CisjZW5kaWYKKworICAgICAgICBIYXNoU2V0
PFN0cmluZz4gbV9kaXNhYmxlZFBsdWdpbkZpbGVzOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBt
X3BsdWdpbkRpcmVjdG9yaWVzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVk
TUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAgICAgICBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wbHVnaW5zQnlQYXRoOworICAgICAg
ICBIYXNoTWFwPFN0cmluZywgdGltZV90PiBtX3BsdWdpblBhdGhzV2l0aFRpbWVzOworICAgICAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsdWdpblBhY2thZ2U+ID4gbV9wcmVmZXJyZWRQbHVn
aW5zOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgICAg
IGJvb2wgbV9wZXJzaXN0ZW50TWV0YWRhdGFDYWNoZUlzTG9hZGVkOworI2VuZGlmCisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwIGIvU291cmNlL1dlYktpdC93
aW4vUGx1Z2lucy9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RjNmNmMzQ5OWZj
MjlkZTZhYzVhZWFkYjM5MjQwNDI3MWFhMGUxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGF0YWJhc2VXaW4uY3BwCkBAIC0wLDAgKzEsMzg1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlIDx3dGYvV2luZG93c0V4dHJhcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbHVnaW5QYXRoc0Zyb21S
ZWdpc3RyeShIS0VZIHJvb3RLZXksIEhhc2hTZXQ8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgSEtF
WSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXhXKHJvb3RLZXksIEwiU29m
dHdhcmVcXE1vemlsbGFQbHVnaW5zIiwgMCwgS0VZX0VOVU1FUkFURV9TVUJfS0VZUywgJmtleSk7
CisKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdjaGFyX3QgbmFtZVsxMjhdOworICAgIEZJTEVUSU1FIGxhc3RNb2RpZmllZDsKKworICAg
IC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgZm9yIChpbnQgaSA9IDA7OyBpKyspIHsKKyAgICAg
ICAgRFdPUkQgbmFtZUxlbiA9IFdURl9BUlJBWV9MRU5HVEgobmFtZSk7CisgICAgICAgIHJlc3Vs
dCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAmbmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RN
b2RpZmllZCk7CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgV0NIQVIgcGF0aFN0cltfTUFYX1BBVEhdOworICAgICAg
ICBEV09SRCBwYXRoU3RyU2l6ZSA9IHNpemVvZihwYXRoU3RyKTsKKyAgICAgICAgRFdPUkQgdHlw
ZTsKKworICAgICAgICByZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKGtleSwgbmFtZSwgTCJQYXRo
IiwgJnR5cGUsIHBhdGhTdHIsICZwYXRoU3RyU2l6ZSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0g
RVJST1JfU1VDQ0VTUyB8fCB0eXBlICE9IFJFR19TWikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIHBhdGhzLmFkZChTdHJpbmcocGF0aFN0ciwgcGF0aFN0clNpemUgLyBzaXplb2Yo
V0NIQVIpIC0gMSkpOworICAgIH0KKworICAgIFJlZ0Nsb3NlS2V5KGtleSk7Cit9CisKK3ZvaWQg
UGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmlu
Zz4mIHBhdGhzKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2Ug
aW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisK
KyAgICBIQU5ETEUgaEZpbmQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICBXSU4zMl9GSU5E
X0RBVEFXIGZpbmRGaWxlRGF0YTsKKworICAgIFN0cmluZyBvbGRXTVBQbHVnaW5QYXRoOworICAg
IFN0cmluZyBuZXdXTVBQbHVnaW5QYXRoOworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICppdCArICJcXCoi
OworCisgICAgICAgIGhGaW5kID0gRmluZEZpcnN0RmlsZVcocGF0dGVybi5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgJmZpbmRGaWxlRGF0YSk7CisKKyAgICAgICAgaWYg
KGhGaW5kID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGZpbmRGaWxlRGF0YS5kd0ZpbGVBdHRyaWJ1
dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBTdHJpbmcoZmluZEZpbGVEYXRhLmNG
aWxlTmFtZSwgd2NzbGVuKGZpbmRGaWxlRGF0YS5jRmlsZU5hbWUpKTsKKyAgICAgICAgICAgIGlm
ICgoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoIm5wIiwgZmFsc2UpIHx8ICFmaWxlbmFtZS5lbmRzV2l0
aCgiZGxsIiwgZmFsc2UpKSAmJgorICAgICAgICAgICAgICAgICghZXF1YWxJZ25vcmluZ0Nhc2Uo
ZmlsZW5hbWUsICJQbHVnaW4uZGxsIikgfHwgIWl0LT5lbmRzV2l0aCgiU2hvY2t3YXZlIDEwIiwg
ZmFsc2UpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgU3RyaW5n
IGZ1bGxQYXRoID0gKml0ICsgIlxcIiArIGZpbGVuYW1lOworICAgICAgICAgICAgaWYgKCF1bmlx
dWVGaWxlbmFtZXMuYWRkKGZ1bGxQYXRoKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBwYXRocy5hZGQoZnVsbFBhdGgpOworCisgICAgICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZW5hbWUsICJucGRzcGxheS5kbGwiKSkKKyAgICAg
ICAgICAgICAgICBvbGRXTVBQbHVnaW5QYXRoID0gZnVsbFBhdGg7CisgICAgICAgICAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShmaWxlbmFtZSwgIm5wLW1zd21wLmRsbCIpKQorICAgICAg
ICAgICAgICAgIG5ld1dNUFBsdWdpblBhdGggPSBmdWxsUGF0aDsKKworICAgICAgICB9IHdoaWxl
IChGaW5kTmV4dEZpbGVXKGhGaW5kLCAmZmluZEZpbGVEYXRhKSAhPSAwKTsKKworICAgICAgICBG
aW5kQ2xvc2UoaEZpbmQpOworICAgIH0KKworICAgIGFkZFBsdWdpblBhdGhzRnJvbVJlZ2lzdHJ5
KEhLRVlfTE9DQUxfTUFDSElORSwgcGF0aHMpOworICAgIGFkZFBsdWdpblBhdGhzRnJvbVJlZ2lz
dHJ5KEhLRVlfQ1VSUkVOVF9VU0VSLCBwYXRocyk7CisKKyAgICAvLyBJZiBib3RoIHRoZSBvbGQg
YW5kIG5ldyBXTVAgcGx1Z2luIGFyZSBwcmVzZW50IGluIHRoZSBwbHVnaW5zIHNldCwgCisgICAg
Ly8gd2UgcmVtb3ZlIHRoZSBvbGQgb25lIHNvIHdlIGRvbid0IGVuZCB1cCBjaG9vc2luZyB0aGUg
b2xkIG9uZS4KKyAgICBpZiAoIW9sZFdNUFBsdWdpblBhdGguaXNFbXB0eSgpICYmICFuZXdXTVBQ
bHVnaW5QYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcGF0aHMucmVtb3ZlKG9sZFdNUFBsdWdpblBh
dGgpOworfQorCitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhj
b25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsK
KworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAg
CisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgeworICAgICAg
ICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgp
OyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4n
IHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmlu
ZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNpb24u
YXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsg
MTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdo
ZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9v
bCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0
b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNp
b25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNp
b25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNp
b25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2Ft
ZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZE1vemlsbGFQbHVn
aW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCit7CisgICAgLy8gRW51
bWVyYXRlIGFsbCBNb3ppbGxhIHBsdWdpbiBkaXJlY3RvcmllcyBpbiB0aGUgcmVnaXN0cnkKKyAg
ICBIS0VZIGtleTsKKyAgICBMT05HIHJlc3VsdDsKKyAgICAKKyAgICByZXN1bHQgPSBSZWdPcGVu
S2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcTW96aWxsYSIpLCAwLCBL
RVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAg
ICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICAgICAgRklMRVRJTUUgbGFzdE1vZGlmaWVkOworCisg
ICAgICAgIC8vIEVudW1lcmF0ZSBzdWJrZXlzCisgICAgICAgIGZvciAoaW50IGkgPSAwOzsgaSsr
KSB7CisgICAgICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFdD
SEFSKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ0VudW1LZXlFeFcoa2V5LCBpLCBuYW1lLCAm
bmFtZUxlbiwgMCwgMCwgMCwgJmxhc3RNb2RpZmllZCk7CisKKyAgICAgICAgICAgIGlmIChyZXN1
bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgU3RyaW5nIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pICsgIlxcRXh0
ZW5zaW9ucyI7CisgICAgICAgICAgICBIS0VZIGV4dGVuc2lvbnNLZXk7CisKKyAgICAgICAgICAg
IC8vIFRyeSBvcGVuaW5nIHRoZSBrZXkKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlF
eChrZXksIGV4dGVuc2lvbnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0
YSgpLCAwLCBLRVlfUkVBRCwgJmV4dGVuc2lvbnNLZXkpOworCisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0IHRoZSBw
bHVnaW5zIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgIFdDSEFSIHBsdWdpbnNEaXJlY3RvcnlT
dHJbX01BWF9QQVRIXTsKKyAgICAgICAgICAgICAgICBEV09SRCBwbHVnaW5zRGlyZWN0b3J5U2l6
ZSA9IHNpemVvZihwbHVnaW5zRGlyZWN0b3J5U3RyKTsKKyAgICAgICAgICAgICAgICBEV09SRCB0
eXBlOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUmVnUXVlcnlWYWx1ZUV4KGV4dGVuc2lv
bnNLZXksIFRFWFQoIlBsdWdpbnMiKSwgMCwgJnR5cGUsIChMUEJZVEUpJnBsdWdpbnNEaXJlY3Rv
cnlTdHIsICZwbHVnaW5zRGlyZWN0b3J5U2l6ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgICAgICAgICAg
ICAgIGRpcmVjdG9yaWVzLmFwcGVuZChTdHJpbmcocGx1Z2luc0RpcmVjdG9yeVN0ciwgcGx1Z2lu
c0RpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOworCisgICAgICAgICAgICAgICAg
UmVnQ2xvc2VLZXkoZXh0ZW5zaW9uc0tleSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7CisgICAgfQorfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgYWRkV2luZG93c01lZGlhUGxheWVyUGx1Z2luRGlyZWN0b3J5KFZlY3RvcjxTdHJp
bmc+JiBkaXJlY3RvcmllcykKK3sKKyAgICAvLyBUaGUgbmV3IFdNUCBGaXJlZm94IHBsdWdpbiBp
cyBpbnN0YWxsZWQgaW4gXFBGaWxlc1xQbHVnaW5zIGlmIGl0IGNhbid0IGZpbmQgYW55IEZpcmVm
b3ggaW5zdGFsbHMKKyAgICBXQ0hBUiBwbHVnaW5EaXJlY3RvcnlTdHJbX01BWF9QQVRIICsgMV07
CisgICAgRFdPUkQgcGx1Z2luRGlyZWN0b3J5U2l6ZSA9IDo6RXhwYW5kRW52aXJvbm1lbnRTdHJp
bmdzVyhURVhUKCIlU1lTVEVNRFJJVkUlXFxQRmlsZXNcXFBsdWdpbnMiKSwgcGx1Z2luRGlyZWN0
b3J5U3RyLCBXVEZfQVJSQVlfTEVOR1RIKHBsdWdpbkRpcmVjdG9yeVN0cikpOworCisgICAgaWYg
KHBsdWdpbkRpcmVjdG9yeVNpemUgPiAwICYmIHBsdWdpbkRpcmVjdG9yeVNpemUgPD0gV1RGX0FS
UkFZX0xFTkdUSChwbHVnaW5EaXJlY3RvcnlTdHIpKQorICAgICAgICBkaXJlY3Rvcmllcy5hcHBl
bmQoU3RyaW5nKHBsdWdpbkRpcmVjdG9yeVN0ciwgcGx1Z2luRGlyZWN0b3J5U2l6ZSAtIDEpKTsK
KworICAgIERXT1JEIHR5cGU7CisgICAgV0NIQVIgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyW19N
QVhfUEFUSF07CisgICAgRFdPUkQgaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSA9IHNpemVvZihp
bnN0YWxsYXRpb25EaXJlY3RvcnlTdHIpOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBnZXRSZWdp
c3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgTCJTb2Z0d2FyZVxcTWljcm9zb2Z0XFxNZWRp
YVBsYXllciIsIEwiSW5zdGFsbGF0aW9uIERpcmVjdG9yeSIsICZ0eXBlLCAmaW5zdGFsbGF0aW9u
RGlyZWN0b3J5U3RyLCAmaW5zdGFsbGF0aW9uRGlyZWN0b3J5U2l6ZSk7CisKKyAgICBpZiAocmVz
dWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdHlwZSA9PSBSRUdfU1opCisgICAgICAgIGRpcmVjdG9y
aWVzLmFwcGVuZChTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyLCBpbnN0YWxsYXRpb25E
aXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpKTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0
b3JpZXMpCit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5
RXgoSEtFWV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVh
ZGVyIiksIDAsIEtFWV9SRUFELCAma2V5KTsKKyAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NF
U1MpCisgICAgICAgIHJldHVybjsKKworICAgIFdDSEFSIG5hbWVbMTI4XTsKKyAgICBGSUxFVElN
RSBsYXN0TW9kaWZpZWQ7CisKKyAgICBWZWN0b3I8aW50PiBsYXRlc3RBY3JvYmF0VmVyc2lvbjsK
KyAgICBTdHJpbmcgbGF0ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmc7CisKKyAgICAvLyBFbnVtZXJh
dGUgc3Via2V5cworICAgIGZvciAoaW50IGkgPSAwOzsgaSsrKSB7CisgICAgICAgIERXT1JEIG5h
bWVMZW4gPSBzaXplb2YobmFtZSkgLyBzaXplb2YoV0NIQVIpOworICAgICAgICByZXN1bHQgPSBS
ZWdFbnVtS2V5RXhXKGtleSwgaSwgbmFtZSwgJm5hbWVMZW4sIDAsIDAsIDAsICZsYXN0TW9kaWZp
ZWQpOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIFZlY3RvcjxpbnQ+IGFjcm9iYXRWZXJzaW9uID0gcGFyc2VWZXJz
aW9uU3RyaW5nKFN0cmluZyhuYW1lLCBuYW1lTGVuKSk7CisgICAgICAgIGlmIChjb21wYXJlVmVy
c2lvbnMoYWNyb2JhdFZlcnNpb24sIGxhdGVzdEFjcm9iYXRWZXJzaW9uKSkgeworICAgICAgICAg
ICAgbGF0ZXN0QWNyb2JhdFZlcnNpb24gPSBhY3JvYmF0VmVyc2lvbjsKKyAgICAgICAgICAgIGxh
dGVzdEFjcm9iYXRWZXJzaW9uU3RyaW5nID0gU3RyaW5nKG5hbWUsIG5hbWVMZW4pOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZy5pc051bGwo
KSkgeworICAgICAgICBEV09SRCB0eXBlOworICAgICAgICBXQ0hBUiBhY3JvYmF0SW5zdGFsbFBh
dGhTdHJbX01BWF9QQVRIXTsKKyAgICAgICAgRFdPUkQgYWNyb2JhdEluc3RhbGxQYXRoU2l6ZSA9
IHNpemVvZihhY3JvYmF0SW5zdGFsbFBhdGhTdHIpOworCisgICAgICAgIFN0cmluZyBhY3JvYmF0
UGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcQWRvYmVcXEFjcm9iYXQgUmVhZGVyXFwiICsgbGF0
ZXN0QWNyb2JhdFZlcnNpb25TdHJpbmcgKyAiXFxJbnN0YWxsUGF0aCI7CisgICAgICAgIHJlc3Vs
dCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1Z2luS2V5
UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgJnR5cGUsIGFj
cm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFjcm9iYXRJbnN0YWxsUGF0aFNpemUpOworCisgICAgICAg
IGlmIChyZXN1bHQgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAgU3RyaW5nIGFjcm9i
YXRQbHVnaW5EaXJlY3RvcnkgPSBTdHJpbmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0
SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7CisgICAg
ICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoYWNyb2JhdFBsdWdpbkRpcmVjdG9yeSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQgYWRkSmF2YVBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMp
Cit7CisgICAgSEtFWSBrZXk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBSZWdPcGVuS2V5RXgoSEtF
WV9MT0NBTF9NQUNISU5FLCBURVhUKCJTb2Z0d2FyZVxcSmF2YVNvZnRcXEphdmEgUGx1Zy1pbiIp
LCAwLCBLRVlfUkVBRCwgJmtleSk7CisgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXQ0hBUiBuYW1lWzEyOF07CisgICAgRklMRVRJTUUgbGFz
dE1vZGlmaWVkOworCisgICAgVmVjdG9yPGludD4gbGF0ZXN0SmF2YVZlcnNpb247CisgICAgU3Ry
aW5nIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nOworCisgICAgLy8gRW51bWVyYXRlIHN1YmtleXMK
KyAgICBmb3IgKGludCBpID0gMDs7IGkrKykgeworICAgICAgICBEV09SRCBuYW1lTGVuID0gc2l6
ZW9mKG5hbWUpIC8gc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgcmVzdWx0ID0gUmVnRW51bUtleUV4
VyhrZXksIGksIG5hbWUsICZuYW1lTGVuLCAwLCAwLCAwLCAmbGFzdE1vZGlmaWVkKTsKKworICAg
ICAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBWZWN0b3I8aW50PiBqYXZhVmVyc2lvbiA9IHBhcnNlVmVyc2lvblN0cmluZyhTdHJp
bmcobmFtZSwgbmFtZUxlbikpOworICAgICAgICBpZiAoY29tcGFyZVZlcnNpb25zKGphdmFWZXJz
aW9uLCBsYXRlc3RKYXZhVmVyc2lvbikpIHsKKyAgICAgICAgICAgIGxhdGVzdEphdmFWZXJzaW9u
ID0gamF2YVZlcnNpb247CisgICAgICAgICAgICBsYXRlc3RKYXZhVmVyc2lvblN0cmluZyA9IFN0
cmluZyhuYW1lLCBuYW1lTGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbGF0ZXN0
SmF2YVZlcnNpb25TdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIERXT1JEIHR5cGU7CisgICAg
ICAgIFdDSEFSIGphdmFJbnN0YWxsUGF0aFN0cltfTUFYX1BBVEhdOworICAgICAgICBEV09SRCBq
YXZhSW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGphdmFJbnN0YWxsUGF0aFN0cik7CisgICAgICAg
IERXT1JEIHVzZU5ld1BsdWdpblZhbHVlOworICAgICAgICBEV09SRCB1c2VOZXdQbHVnaW5TaXpl
OworCisgICAgICAgIFN0cmluZyBqYXZhUGx1Z2luS2V5UGF0aCA9ICJTb2Z0d2FyZVxcSmF2YVNv
ZnRcXEphdmEgUGx1Zy1pblxcIiArIGxhdGVzdEphdmFWZXJzaW9uU3RyaW5nOworICAgICAgICBy
ZXN1bHQgPSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgamF2YVBsdWdpbktl
eVBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEwiVXNlTmV3SmF2
YVBsdWdpbiIsICZ0eXBlLCAmdXNlTmV3UGx1Z2luVmFsdWUsICZ1c2VOZXdQbHVnaW5TaXplKTsK
KworICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdXNlTmV3UGx1Z2luVmFs
dWUgPT0gMSkgeworICAgICAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xP
Q0FMX01BQ0hJTkUsIGphdmFQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkuZGF0YSgpLCBMIkphdmFIb21lIiwgJnR5cGUsIGphdmFJbnN0YWxsUGF0aFN0ciwgJmph
dmFJbnN0YWxsUGF0aFNpemUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUND
RVNTKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGphdmFQbHVnaW5EaXJlY3RvcnkgPSBTdHJp
bmcoamF2YUluc3RhbGxQYXRoU3RyLCBqYXZhSW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9mKFdDSEFS
KSAtIDEpICsgIlxcYmluXFxuZXdfcGx1Z2luIjsKKyAgICAgICAgICAgICAgICBkaXJlY3Rvcmll
cy5hcHBlbmQoamF2YVBsdWdpbkRpcmVjdG9yeSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBSZWdDbG9zZUtleShrZXkpOworfQorCitzdGF0aWMgaW5saW5lIFN0cmlu
ZyBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCkKK3sKKyAgICBXQ0hBUiBtb2R1bGVGaWxlTmFtZVN0
cltfTUFYX1BBVEhdOworICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luc0RpcmVjdG9yeTsKKyAgICBz
dGF0aWMgYm9vbCBjYWNoZWRQbHVnaW5EaXJlY3RvcnkgPSBmYWxzZTsKKworICAgIGlmICghY2Fj
aGVkUGx1Z2luRGlyZWN0b3J5KSB7CisgICAgICAgIGNhY2hlZFBsdWdpbkRpcmVjdG9yeSA9IHRy
dWU7CisKKyAgICAgICAgaW50IG1vZHVsZUZpbGVOYW1lTGVuID0gR2V0TW9kdWxlRmlsZU5hbWUo
MCwgbW9kdWxlRmlsZU5hbWVTdHIsIF9NQVhfUEFUSCk7CisKKyAgICAgICAgaWYgKCFtb2R1bGVG
aWxlTmFtZUxlbiB8fCBtb2R1bGVGaWxlTmFtZUxlbiA9PSBfTUFYX1BBVEgpCisgICAgICAgICAg
ICBnb3RvIGV4aXQ7CisKKyAgICAgICAgaWYgKCFQYXRoUmVtb3ZlRmlsZVNwZWMobW9kdWxlRmls
ZU5hbWVTdHIpKQorICAgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIHBsdWdpbnNEaXJl
Y3RvcnkgPSBTdHJpbmcobW9kdWxlRmlsZU5hbWVTdHIpICsgIlxcUGx1Z2lucyI7CisgICAgfQor
ZXhpdDoKKyAgICByZXR1cm4gcGx1Z2luc0RpcmVjdG9yeTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgZGlyZWN0
b3JpZXMpCit7CisgICAgV0NIQVIgc3lzdGVtRGlyZWN0b3J5U3RyW01BWF9QQVRIXTsKKworICAg
IGlmICghR2V0U3lzdGVtRGlyZWN0b3J5KHN5c3RlbURpcmVjdG9yeVN0ciwgV1RGX0FSUkFZX0xF
TkdUSChzeXN0ZW1EaXJlY3RvcnlTdHIpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0NIQVIg
bWFjcm9tZWRpYURpcmVjdG9yeVN0cltNQVhfUEFUSF07CisKKyAgICBQYXRoQ29tYmluZShtYWNy
b21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3RvcnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxG
bGFzaCIpKTsKKyAgICBkaXJlY3Rvcmllcy5hcHBlbmQobWFjcm9tZWRpYURpcmVjdG9yeVN0cik7
CisKKyAgICBQYXRoQ29tYmluZShtYWNyb21lZGlhRGlyZWN0b3J5U3RyLCBzeXN0ZW1EaXJlY3Rv
cnlTdHIsIFRFWFQoIm1hY3JvbWVkXFxTaG9ja3dhdmUgMTAiKSk7CisgICAgZGlyZWN0b3JpZXMu
YXBwZW5kKG1hY3JvbWVkaWFEaXJlY3RvcnlTdHIpOworfQorCitWZWN0b3I8U3RyaW5nPiBQbHVn
aW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKK3sKKyAgICBWZWN0b3I8U3Ry
aW5nPiBkaXJlY3RvcmllczsKKyAgICBTdHJpbmcgb3VyRGlyZWN0b3J5ID0gc2FmYXJpUGx1Z2lu
c0RpcmVjdG9yeSgpOworCisgICAgaWYgKCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkpCisgICAgICAg
IGRpcmVjdG9yaWVzLmFwcGVuZChvdXJEaXJlY3RvcnkpOworICAgIGFkZEFkb2JlQWNyb2JhdFBs
dWdpbkRpcmVjdG9yeShkaXJlY3Rvcmllcyk7CisgICAgYWRkTW96aWxsYVBsdWdpbkRpcmVjdG9y
aWVzKGRpcmVjdG9yaWVzKTsKKyAgICBhZGRXaW5kb3dzTWVkaWFQbGF5ZXJQbHVnaW5EaXJlY3Rv
cnkoZGlyZWN0b3JpZXMpOworICAgIGFkZE1hY3JvbWVkaWFQbHVnaW5EaXJlY3RvcmllcyhkaXJl
Y3Rvcmllcyk7CisKKyAgICByZXR1cm4gZGlyZWN0b3JpZXM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0
YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5
KQoreworICAgIFN0cmluZyBvdXJEaXJlY3RvcnkgPSBzYWZhcmlQbHVnaW5zRGlyZWN0b3J5KCk7
CisKKyAgICBpZiAoIW91ckRpcmVjdG9yeS5pc051bGwoKSAmJiAhZGlyZWN0b3J5LmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gb3VyRGlyZWN0b3J5ID09IGRpcmVjdG9yeTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5EZWJ1Zy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpbkRlYnVnLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42NmQyM2FlNjcxMzhhY2FiYzY1YjRlMzAwY2YyY2UxNzk4MTQwNTM2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5j
cHAKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBsdWdpbkRlYnVnLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
I2lmICFMT0dfRElTQUJMRUQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZXJyb3JTdHJpbmdzW10gPSB7CisgICAgIk5vIGVycm9ycyBvY2N1cnJlZC4i
LCAvKiBOUEVSUl9OT19FUlJPUiAqLworICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmljIGVycm9y
IGNvZGUgb2NjdXJyZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLworICAgICJJbnZhbGlk
IGluc3RhbmNlIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElEX0lOU1RB
TkNFX0VSUk9SICovCisgICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBFUlJfSU5W
QUxJRF9GVU5DVEFCTEVfRVJST1IgKi8KKyAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZhaWxlZC4i
LCAvKiBOUEVSUl9NT0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KKyAgICAiTWVtb3J5IGFsbG9j
YXRpb24gZmFpbGVkLiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KKyAgICAiUGx1
Zy1pbiBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRVJST1Ig
Ki8KKyAgICAiUGx1Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJS
X0lOVkFMSURfUExVR0lOX0RJUl9FUlJPUiAqLworICAgICJWZXJzaW9ucyBvZiBwbHVnLWluIGFu
ZCBDb21tdW5pY2F0b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJMRV9WRVJT
SU9OX0VSUk9SICovCisgICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBF
UlJfSU5WQUxJRF9QQVJBTSAqLworICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5Q
RVJSX0lOVkFMSURfVVJMICovCisgICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EICovCisgICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIsIC8q
IE5QRVJSX05PX0RBVEEgKi8KKyAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIsIC8qIE5Q
RVJSX1NUUkVBTV9OT1RfU0VFS0FCTEUgKi8KKyAgICAiVW5rbm93biBlcnJvciBjb2RlIgorfTsK
KworI2lmZGVmIFhQX01BQ09TWAorc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRyYXdpbmdNb2Rl
bHNbXSA9IHsKKyAgICAiTlBEcmF3aW5nTW9kZWxRdWlja0RyYXciLAorICAgICJOUERyYXdpbmdN
b2RlbENvcmVHcmFwaGljcyIsCisgICAgIk5QRHJhd2luZ01vZGVsT3BlbkdMIiwKKyAgICAiTlBE
cmF3aW5nTW9kZWxDb3JlQW5pbWF0aW9uIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGV2ZW50TW9kZWxzW10gPSB7CisgICAgIk5QRXZlbnRNb2RlbENhcmJvbiIsCisgICAgIk5QRXZl
bnRNb2RlbENvY29hIgorfTsKKyNlbmRpZiAvL1hQX01BQ09TWAorCitjb25zdCBjaGFyKiBwcmV0
dHlOYW1lRm9yTlBFcnJvcihOUEVycm9yIGVycm9yKQoreworICAgIHJldHVybiBlcnJvclN0cmlu
Z3NbZXJyb3JdOworfQorCisjaWZkZWYgWFBfTUFDT1NYCitjb25zdCBjaGFyKiBwcmV0dHlOYW1l
Rm9yRHJhd2luZ01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCkKK3sKKyAgICByZXR1
cm4gZHJhd2luZ01vZGVsc1tkcmF3aW5nTW9kZWxdOworfQorCitjb25zdCBjaGFyKiBwcmV0dHlO
YW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCkKK3sKKyAgICByZXR1cm4g
ZXZlbnRNb2RlbHNbZXZlbnRNb2RlbF07Cit9CisjZW5kaWYgLy9YUF9NQUNPU1gKKworQ1N0cmlu
ZyBwcmV0dHlOYW1lRm9yTlBOVmFyaWFibGUoTlBOVmFyaWFibGUgdmFyaWFibGUpCit7CisgICAg
c3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBOVnhEaXNwbGF5OiByZXR1cm4gIk5QTlZ4
RGlzcGxheSI7CisgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiByZXR1cm4gIk5QTlZ4dEFwcENv
bnRleHQiOworICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiByZXR1cm4gIk5QTlZuZXRzY2Fw
ZVdpbmRvdyI7CisgICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOiByZXR1cm4gIk5Q
TlZqYXZhc2NyaXB0RW5hYmxlZEJvb2wiOworICAgIGNhc2UgTlBOVmFzZEVuYWJsZWRCb29sOiBy
ZXR1cm4gIk5QTlZhc2RFbmFibGVkQm9vbCI7CisgICAgY2FzZSBOUE5WaXNPZmZsaW5lQm9vbDog
cmV0dXJuICJOUE5WaXNPZmZsaW5lQm9vbCI7CisKKyAgICBjYXNlIE5QTlZzZXJ2aWNlTWFuYWdl
cjogcmV0dXJuICJOUE5Wc2VydmljZU1hbmFnZXIgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNl
IE5QTlZET01FbGVtZW50OiByZXR1cm4gIk5QTlZET01FbGVtZW50IChub3Qgc3VwcG9ydGVkKSI7
CisgICAgY2FzZSBOUE5WRE9NV2luZG93OiByZXR1cm4gIk5QTlZET01XaW5kb3cgKG5vdCBzdXBw
b3J0ZWQpIjsKKyAgICBjYXNlIE5QTlZUb29sa2l0OiByZXR1cm4gIk5QTlZUb29sa2l0IChub3Qg
c3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiByZXR1cm4gIk5Q
TlZTdXBwb3J0c1hFbWJlZEJvb2wgKG5vdCBzdXBwb3J0ZWQpIjsKKworICAgIGNhc2UgTlBOVldp
bmRvd05QT2JqZWN0OiByZXR1cm4gIk5QTlZXaW5kb3dOUE9iamVjdCI7CisgICAgY2FzZSBOUE5W
UGx1Z2luRWxlbWVudE5QT2JqZWN0OiByZXR1cm4gIk5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Qi
OworICAgIGNhc2UgTlBOVlN1cHBvcnRzV2luZG93bGVzczogcmV0dXJuICJOUE5WU3VwcG9ydHNX
aW5kb3dsZXNzIjsKKyAgICBjYXNlIE5QTlZwcml2YXRlTW9kZUJvb2w6IHJldHVybiAiTlBOVnBy
aXZhdGVNb2RlQm9vbCI7CisKKyNpZmRlZiBYUF9NQUNPU1gKKyAgICBjYXNlIE5QTlZwbHVnaW5E
cmF3aW5nTW9kZWw6IHJldHVybiAiTlBOVnBsdWdpbkRyYXdpbmdNb2RlbCI7CisjaWZuZGVmIE5Q
X05PX1FVSUNLRFJBVworICAgIGNhc2UgTlBOVnN1cHBvcnRzUXVpY2tEcmF3Qm9vbDogcmV0dXJu
ICJOUE5Wc3VwcG9ydHNRdWlja0RyYXdCb29sIjsKKyNlbmRpZgorICAgIGNhc2UgTlBOVnN1cHBv
cnRzQ29yZUdyYXBoaWNzQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHNDb3JlR3JhcGhpY3NCb29s
IjsKKyAgICBjYXNlIE5QTlZzdXBwb3J0c09wZW5HTEJvb2w6IHJldHVybiAiTlBOVnN1cHBvcnRz
T3BlbkdMQm9vbCI7CisgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbDogcmV0
dXJuICJOUE5Wc3VwcG9ydHNDb3JlQW5pbWF0aW9uQm9vbCI7CisjaWZuZGVmIE5QX05PX0NBUkJP
TgorICAgIGNhc2UgTlBOVnN1cHBvcnRzQ2FyYm9uQm9vbDogcmV0dXJuICJOUE5Wc3VwcG9ydHND
YXJib25Cb29sIjsKKyNlbmRpZgorICAgIGNhc2UgTlBOVnN1cHBvcnRzQ29jb2FCb29sOiByZXR1
cm4gIk5QTlZzdXBwb3J0c0NvY29hQm9vbCI7CisjZW5kaWYKKworICAgIGRlZmF1bHQ6IHJldHVy
biAiVW5rbm93biB2YXJpYWJsZSI7CisgICAgfQorfQorCitDU3RyaW5nIHByZXR0eU5hbWVGb3JO
UFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dp
dGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBQVnBsdWdpbk5hbWVTdHJpbmc6IHJldHVybiAi
TlBQVnBsdWdpbk5hbWVTdHJpbmciOworICAgIGNhc2UgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3Ry
aW5nOiByZXR1cm4gIk5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZyI7CisgICAgY2FzZSBOUFBW
cGx1Z2luV2luZG93Qm9vbDogcmV0dXJuICJOUFBWcGx1Z2luV2luZG93Qm9vbCI7CisgICAgY2Fz
ZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOiByZXR1cm4gIk5QUFZwbHVnaW5UcmFuc3BhcmVu
dEJvb2wiOworCisgICAgY2FzZSBOUFBWamF2YUNsYXNzOiByZXR1cm4gIk5QUFZqYXZhQ2xhc3Mg
KG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dTaXplOiByZXR1cm4g
Ik5QUFZwbHVnaW5XaW5kb3dTaXplIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2FzZSBOUFBWcGx1
Z2luVGltZXJJbnRlcnZhbDogcmV0dXJuICJOUFBWcGx1Z2luVGltZXJJbnRlcnZhbCAobm90IHN1
cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVnBsdWdpblNjcmlwdGFibGVJbnN0YW5jZTogcmV0dXJu
ICJOUFBWcGx1Z2luU2NyaXB0YWJsZUluc3RhbmNlIChub3Qgc3VwcG9ydGVkKSI7CisgICAgY2Fz
ZSBOUFBWcGx1Z2luU2NyaXB0YWJsZUlJRDogcmV0dXJuICJOUFBWcGx1Z2luU2NyaXB0YWJsZUlJ
RCAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVmphdmFzY3JpcHRQdXNoQ2FsbGVyQm9v
bDogcmV0dXJuICJOUFBWamF2YXNjcmlwdFB1c2hDYWxsZXJCb29sIChub3Qgc3VwcG9ydGVkKSI7
CisgICAgY2FzZSBOUFBWcGx1Z2luS2VlcExpYnJhcnlJbk1lbW9yeTogcmV0dXJuICJOUFBWcGx1
Z2luS2VlcExpYnJhcnlJbk1lbW9yeSAobm90IHN1cHBvcnRlZCkiOworICAgIGNhc2UgTlBQVnBs
dWdpbk5lZWRzWEVtYmVkOiByZXR1cm4gIk5QUFZwbHVnaW5OZWVkc1hFbWJlZCAobm90IHN1cHBv
cnRlZCkiOworCisgICAgY2FzZSBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0OiByZXR1cm4g
Ik5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QiOworCisgICAgY2FzZSBOUFBWZm9ybVZhbHVl
OiByZXR1cm4gIk5QUFZmb3JtVmFsdWUgKG5vdCBzdXBwb3J0ZWQpIjsKKyAgICBjYXNlIE5QUFZw
bHVnaW5VcmxSZXF1ZXN0c0Rpc3BsYXllZEJvb2w6IHJldHVybiAiTlBQVnBsdWdpblVybFJlcXVl
c3RzRGlzcGxheWVkQm9vbCAobm90IHN1cHBvcnRlZCkiOworCisgICAgY2FzZSBOUFBWcGx1Z2lu
V2FudHNBbGxOZXR3b3JrU3RyZWFtczogcmV0dXJuICJOUFBWcGx1Z2luV2FudHNBbGxOZXR3b3Jr
U3RyZWFtcyI7CisgICAgY2FzZSBOUFBWcGx1Z2luQ2FuY2VsU3JjU3RyZWFtOiByZXR1cm4gIk5Q
UFZwbHVnaW5DYW5jZWxTcmNTdHJlYW0iOworCisjaWZkZWYgWFBfTUFDT1NYCisgICAgY2FzZSBO
UFBWcGx1Z2luRHJhd2luZ01vZGVsOiB7CisgICAgICAgIFN0cmluZyByZXN1bHQoIk5QUFZwbHVn
aW5EcmF3aW5nTW9kZWwsICIpOworICAgICAgICByZXN1bHQuYXBwZW5kKHByZXR0eU5hbWVGb3JE
cmF3aW5nTW9kZWwoTlBEcmF3aW5nTW9kZWwodWludHB0cl90KHZhbHVlKSkpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5sYXRpbjEoKTsKKyAgICB9CisgICAgY2FzZSBOUFBWcGx1Z2luRXZlbnRN
b2RlbDogeworICAgICAgICBTdHJpbmcgcmVzdWx0KCJOUFBWcGx1Z2luRXZlbnRNb2RlbCwgIik7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQocHJldHR5TmFtZUZvckV2ZW50TW9kZWwoTlBFdmVudE1v
ZGVsKHVpbnRwdHJfdCh2YWx1ZSkpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQubGF0aW4xKCk7
CisgICAgfQorICAgIGNhc2UgTlBQVnBsdWdpbkNvcmVBbmltYXRpb25MYXllcjogcmV0dXJuICJO
UFBWcGx1Z2luQ29yZUFuaW1hdGlvbkxheWVyIjsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKKyNlbmRpZgorCisgICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIHZhcmlhYmxlIjsK
KyAgICB9Cit9CisKK0NTdHJpbmcgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKE5QTlVSTFZh
cmlhYmxlIHZhcmlhYmxlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5Q
TlVSTFZDb29raWU6IHJldHVybiAiTlBOVVJMVkNvb2tpZSI7CisgICAgY2FzZSBOUE5VUkxWUHJv
eHk6IHJldHVybiAiTlBOVVJMVlByb3h5IjsKKyAgICBkZWZhdWx0OiByZXR1cm4gIlVua25vd24g
dmFyaWFibGUiOworICAgIH0KK30KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
ICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1
Z2luRGVidWcuaCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luRGVidWcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42Njc0ODVlOTA5MjhhMDVmY2JkYTgyOTQwYTczOTY3MDk4NzFkYjYxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5EZWJ1Zy5oCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUGx1Z2luRGVidWdfaAorI2RlZmluZSBQbHVnaW5EZWJ1Z19oCisK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjZGVmaW5lIExPR19OUEVSUk9SKGVycikg
aWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgTE9HX1ZFUkJPU0UoUGx1Z2lucywgIiVzXG4iLCBw
cmV0dHlOYW1lRm9yTlBFcnJvcihlcnIpKQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigp
IExPR19WRVJCT1NFKFBsdWdpbnMsICJTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVtcyB3aXRo
IG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxlbXMuXG4i
KQorCisjaWYgIUxPR19ESVNBQkxFRAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNo
YXIqIHByZXR0eU5hbWVGb3JOUEVycm9yKE5QRXJyb3IgZXJyb3IpOworCitDU3RyaW5nIHByZXR0
eU5hbWVGb3JOUE5WYXJpYWJsZShOUE5WYXJpYWJsZSB2YXJpYWJsZSk7CitDU3RyaW5nIHByZXR0
eU5hbWVGb3JOUFBWYXJpYWJsZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwor
Q1N0cmluZyBwcmV0dHlOYW1lRm9yTlBOVVJMVmFyaWFibGUoTlBOVVJMVmFyaWFibGUgdmFyaWFi
bGUpOworCisjaWZkZWYgWFBfTUFDT1NYCitjb25zdCBjaGFyKiBwcmV0dHlOYW1lRm9yRHJhd2lu
Z01vZGVsKE5QRHJhd2luZ01vZGVsIGRyYXdpbmdNb2RlbCk7Citjb25zdCBjaGFyKiBwcmV0dHlO
YW1lRm9yRXZlbnRNb2RlbChOUEV2ZW50TW9kZWwgZXZlbnRNb2RlbCk7CisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIUxPR19ESVNBQkxFRAorCisjZW5kaWYg
Ly8gUGx1Z2luRGVidWdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUzYzMxNWMyMDE4NDM5
NGYzYjQwNjRhM2Y1NDQ3NTczZWQyY2YwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL1BsdWdpbnMvUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAKQEAgLTAsMCArMSwx
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luTWVzc2FnZVRo
cm90dGxlcldpbi5oIgorCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgPHd0Zi9B
U0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU2V0IGEgdGltZXIgdG8gbWFr
ZSBzdXJlIHdlIHByb2Nlc3MgYW55IHF1ZXVlZCBtZXNzYWdlcyBhdCBsZWFzdCBldmVyeSAxNm1z
LgorLy8gVGhpcyB2YWx1ZSBhbGxvd3MgRmxhc2ggNjAgbWVzc2FnZXMvc2Vjb25kLCB3aGljaCBz
aG91bGQgYmUgZW5vdWdoIGZvciB2aWRlbworLy8gcGxheWJhY2ssIGFuZCBhbHNvIGdldHMgdXMg
b3ZlciB0aGUgbGltaXQgZm9yIGtpY2tpbmcgaW50byBoaWdoLXJlc29sdXRpb24KKy8vIHRpbWVy
IG1vZGUgKHNlZSBTaGFyZWRUaW1lcldpbi5jcHApLgorc3RhdGljIGNvbnN0IGRvdWJsZSBNZXNz
YWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwgPSAwLjAxNjsKKworLy8gRHVyaW5nIGEgY29udGludW91
cyBzdHJlYW0gb2YgbWVzc2FnZXMsIHByb2Nlc3Mgb25lIGV2ZXJ5IDVtcy4KK3N0YXRpYyBjb25z
dCBkb3VibGUgTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCA9IDAuMDA1OworCitQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyV2luOjpQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZp
ZXcqIHBsdWdpblZpZXcpCisgICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAgICAsIG1f
YmFjaygwKQorICAgICwgbV9mcm9udCgwKQorICAgICwgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcigq
dGhpcywgJlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46Om1lc3NhZ2VUaHJvdHRsZVRpbWVyRmly
ZWQpCisgICAgLCBtX2xhc3RNZXNzYWdlVGltZSgwKQoreworICAgIC8vIEluaXRpYWxpemUgdGhl
IGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUgbWVzc2FnZXMKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgTnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgIG1faW5saW5lTWVz
c2FnZXNbaV0ubmV4dCA9ICZtX2lubGluZU1lc3NhZ2VzW2kgKyAxXTsKKyAgICBtX2lubGluZU1l
c3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV0ubmV4dCA9IDA7CisgICAgbV9mcmVlSW5saW5l
TWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKK30KKworUGx1Z2luTWVzc2FnZVRocm90
dGxlcldpbjo6flBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4oKQoreworICAgIFBsdWdpbk1lc3Nh
Z2UqIG5leHQ7CisKKyAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OyBt
ZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gbWVzc2FnZS0+bmV4dDsK
KyAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgfQorfQorCit2b2lkIFBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJXaW46OmFwcGVuZE1lc3NhZ2UoSFdORCBoV25kLCBVSU5UIG1zZywgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBQbHVnaW5NZXNzYWdlKiBtZXNzYWdl
ID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICBtZXNzYWdlLT5oV25kID0gaFduZDsKKyAgICBt
ZXNzYWdlLT5tc2cgPSBtc2c7CisgICAgbWVzc2FnZS0+d1BhcmFtID0gd1BhcmFtOworICAgIG1l
c3NhZ2UtPmxQYXJhbSA9IGxQYXJhbTsKKyAgICBtZXNzYWdlLT5uZXh0ID0gMDsKKworICAgIGlm
IChtX2JhY2spCisgICAgICAgIG1fYmFjay0+bmV4dCA9IG1lc3NhZ2U7CisgICAgbV9iYWNrID0g
bWVzc2FnZTsKKyAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgIG1fZnJvbnQgPSBtZXNzYWdlOwor
CisgICAgLy8gSWYgaXQgaGFzIGJlZW4gbW9yZSB0aGFuIE1lc3NhZ2VEaXJlY3RQcm9jZXNzaW5n
SW50ZXJ2YWwgYmV0d2VlbiB0aHJvdHRsZWQgbWVzc2FnZXMsCisgICAgLy8gZ28gYWhlYWQgYW5k
IHByb2Nlc3MgYSBtZXNzYWdlIGRpcmVjdGx5LgorICAgIGRvdWJsZSBjdXJyZW50VGltZSA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIGlmIChjdXJyZW50VGltZSAtIG1fbGFz
dE1lc3NhZ2VUaW1lID4gTWVzc2FnZURpcmVjdFByb2Nlc3NpbmdJbnRlcnZhbCkgeworICAgICAg
ICBwcm9jZXNzUXVldWVkTWVzc2FnZSgpOworICAgICAgICBtX2xhc3RNZXNzYWdlVGltZSA9IGN1
cnJlbnRUaW1lOworICAgICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRp
bWVJbnRlcnZhbCk7Cit9CisKK3ZvaWQgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6cHJvY2Vz
c1F1ZXVlZE1lc3NhZ2UoKQoreworICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250
OworICAgIG1fZnJvbnQgPSBtX2Zyb250LT5uZXh0OworICAgIGlmIChtZXNzYWdlID09IG1fYmFj
aykKKyAgICAgICAgbV9iYWNrID0gMDsKKworICAgIC8vIFByb3RlY3QgdGhlIFBsdWdpblZpZXcg
ZnJvbSBkZXN0cnVjdGlvbiB3aGlsZSBjYWxsaW5nIGl0cyB3aW5kb3cgcHJvYy4KKyAgICAvLyA8
cmRhcjovL3Byb2JsZW0vNjkzMDI4MD4KKyAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCht
X3BsdWdpblZpZXcpOworICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5wbHVnaW5X
bmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1BhcmFtLCBt
ZXNzYWdlLT5sUGFyYW0pOworCisgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3ZvaWQg
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCgpCit7
CisgICAgcHJvY2Vzc1F1ZXVlZE1lc3NhZ2UoKTsKKworICAgIGlmIChtX2Zyb250KQorICAgICAg
ICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0bGVUaW1l
SW50ZXJ2YWwpOworfQorCitQbHVnaW5NZXNzYWdlKiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2lu
OjphbGxvY2F0ZU1lc3NhZ2UoKQoreworICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAg
ICBpZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKKyAgICAgICAgbWVzc2FnZSA9IG1fZnJlZUlu
bGluZU1lc3NhZ2VzOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2UtPm5l
eHQ7CisgICAgfSBlbHNlCisgICAgICAgIG1lc3NhZ2UgPSBuZXcgUGx1Z2luTWVzc2FnZTsKKwor
ICAgIHJldHVybiBtZXNzYWdlOworfQorCitib29sIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW46
OmlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQoreworICAgIHJldHVybiBt
ZXNzYWdlID49ICZtX2lubGluZU1lc3NhZ2VzWzBdICYmIG1lc3NhZ2UgPD0gJm1faW5saW5lTWVz
c2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXTsKK30KKwordm9pZCBQbHVnaW5NZXNzYWdlVGhy
b3R0bGVyV2luOjpmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKQoreworICAgIGlm
IChpc0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKKyAgICAgICAgbWVzc2FnZS0+bmV4dCA9IG1f
ZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3Nh
Z2U7CisgICAgfSBlbHNlCisgICAgICAgIGRlbGV0ZSBtZXNzYWdlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2lu
TWVzc2FnZVRocm90dGxlcldpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjNTEwMzA4MzZkM2EzZTkyNzdhNjBk
NTdhZDYzN2M1YWZmMWRhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9Q
bHVnaW5zL1BsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaApAQCAtMCwwICsxLDc0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luX2gKKyNkZWZpbmUgUGx1Z2luTWVzc2Fn
ZVRocm90dGxlcldpbl9oCisKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8d2luZG93
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgUGx1Z2luVmlldzsKKworICAg
IHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsKKyAgICAgICAgSFdORCBoV25kOworICAgICAgICBVSU5U
IG1zZzsKKyAgICAgICAgV1BBUkFNIHdQYXJhbTsKKyAgICAgICAgTFBBUkFNIGxQYXJhbTsKKwor
ICAgICAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICB9OworCisgICAgY2xhc3Mg
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbiB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5N
ZXNzYWdlVGhyb3R0bGVyV2luKFBsdWdpblZpZXcqKTsKKyAgICAgICAgflBsdWdpbk1lc3NhZ2VU
aHJvdHRsZXJXaW4oKTsKKworICAgICAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoSFdORCwgVUlOVCBt
c2csIFdQQVJBTSwgTFBBUkFNKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgcHJvY2Vz
c1F1ZXVlZE1lc3NhZ2UoKTsKKyAgICAgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVk
KCk7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2FnZSgpOworICAgICAgICBi
b29sIGlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKKyAgICAgICAgdm9p
ZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKTsKKworICAgICAgICBQbHVnaW5W
aWV3KiBtX3BsdWdpblZpZXc7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKKyAgICAg
ICAgUGx1Z2luTWVzc2FnZSogbV9mcm9udDsKKworICAgICAgICBzdGF0aWMgY29uc3QgaW50IE51
bUlubGluZU1lc3NhZ2VzID0gNDsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSBtX2lubGluZU1lc3Nh
Z2VzW051bUlubGluZU1lc3NhZ2VzXTsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbV9mcmVlSW5s
aW5lTWVzc2FnZXM7CisKKyAgICAgICAgVGltZXIgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcjsKKyAg
ICAgICAgZG91YmxlIG1fbGFzdE1lc3NhZ2VUaW1lOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW5faApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U4Nzdj
MDE5NzI5ZTgyNWY2Zjc2MjBlNmY1ZjU3ODI5NzRkMDYzOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKQEAgLTAsMCArMSw0Nzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1
Z2luVmlldy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbXBsZXRpb24uaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SWRlbnRpZmllclJlcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvTlBfanNvYmplY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9jX3V0aWxpdHkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL25w
cnVudGltZV9pbXBsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9ydW50aW1lX3Jvb3QuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2thZ2UoKQoreworICAgIC8v
IFRoaXMgZGVzdHJ1Y3RvciBnZXRzIGNhbGxlZCBkdXJpbmcgcmVmcmVzaCgpIGlmIFBsdWdpbkRh
dGFiYXNlJ3MKKyAgICAvLyBQbHVnaW5TZXQgaGFzaCBpcyBhbHJlYWR5IHBvcHVsYXRlZCwgYXMg
aXQgcmVtb3ZlcyBpdGVtcyBmcm9tCisgICAgLy8gdGhlIGhhc2ggdGFibGUuIENhbGxpbmcgdGhl
IGRlc3RydWN0b3Igb24gYSBsb2FkZWQgcGx1Zy1pbiBvZgorICAgIC8vIGNvdXJzZSB3b3VsZCBj
YXVzZSBhIGNyYXNoLCBzbyB3ZSBjaGVjayB0byBjYWxsIHVubG9hZCBiZWZvcmUgd2UKKyAgICAv
LyBBU1NFUlQuCisgICAgLy8gRklYTUU6IFRoZXJlIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0
byBmaXggdGhpcy4KKyAgICBpZiAoIW1fbG9hZENvdW50KQorICAgICAgICB1bmxvYWRXaXRob3V0
U2h1dGRvd24oKTsKKyAgICBlbHNlCisgICAgICAgIHVubG9hZCgpOworCisgICAgQVNTRVJUKCFt
X2lzTG9hZGVkKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVNvb24oKQor
eworICAgIEFTU0VSVCghbV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkpOworICAgIEFTU0VS
VChtX21vZHVsZSk7CisgICAgQVNTRVJUKCFtX2xvYWRDb3VudCk7CisKKyAgICBtX2ZyZWVMaWJy
YXJ5VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVM
aWJyYXJ5VGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICAvLyBEbyBu
b3RoaW5nIGlmIHRoZSBtb2R1bGUgZ290IGxvYWRlZCBhZ2FpbiBtZWFud2hpbGUKKyAgICBpZiAo
IW1fbG9hZENvdW50KSB7CisgICAgICAgIHVubG9hZE1vZHVsZShtX21vZHVsZSk7CisgICAgICAg
IG1fbW9kdWxlID0gMDsKKyAgICB9Cit9CisKKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmUo
Y29uc3QgUGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAoreworICAgIC8vIFNvcnQgcGx1
Zy1pbnMgdGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3QuCisgICAgYm9vbCBBYWxs
b3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250
QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgYm9vbCBCYWxsb3dzTXVsdGlwbGVJbnN0YW5j
ZXMgPSAhY29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVs
dGlwbGVJbnN0YW5jZXMpOworICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgIT0gQmFs
bG93c011bHRpcGxlSW5zdGFuY2VzKQorICAgICAgICByZXR1cm4gQWFsbG93c011bHRpcGxlSW5z
dGFuY2VzID8gLTEgOiAxOworCisgICAgLy8gU29ydCBwbHVnLWlucyBpbiBhIHByZWZlcnJlZCBw
YXRoIGZpcnN0LgorICAgIGJvb2wgQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRh
YmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkocGFyZW50RGlyZWN0b3J5KCkpOworICAg
IGJvb2wgQmlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJy
ZWRQbHVnaW5EaXJlY3RvcnkoY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpKTsKKyAgICBpZiAo
QWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgIT0gQmlzSW5QcmVmZXJyZWREaXJlY3RvcnkpCisgICAg
ICAgIHJldHVybiBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA/IC0xIDogMTsKKworICAgIGludCBk
aWZmID0gc3RyY21wKG5hbWUoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ubmFtZSgpLnV0Zjgo
KS5kYXRhKCkpOworICAgIGlmIChkaWZmKQorICAgICAgICByZXR1cm4gZGlmZjsKKworICAgIGRp
ZmYgPSBjb21wYXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZlcnNpb24oKSk7CisgICAgaWYgKGRp
ZmYpCisgICAgICAgIHJldHVybiBkaWZmOworCisgICAgcmV0dXJuIHN0cmNtcChwYXJlbnREaXJl
Y3RvcnkoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkudXRmOCgp
LmRhdGEoKSk7Cit9CisKK1BsdWdpblBhY2thZ2U6OlBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNFbmFibGVkKHRy
dWUpCisgICAgLCBtX2lzTG9hZGVkKGZhbHNlKQorICAgICwgbV9sb2FkQ291bnQoMCkKKyAgICAs
IG1fcGF0aChwYXRoKQorICAgICwgbV9tb2R1bGVWZXJzaW9uKDApCisgICAgLCBtX21vZHVsZSgw
KQorICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQorICAgICwgbV9mcmVlTGlicmFy
eVRpbWVyKCp0aGlzLCAmUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmVkKQorI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAgLCBtX2luZm9Jc0Zy
b21DYWNoZSh0cnVlKQorI2VuZGlmCit7CisgICAgbV9maWxlTmFtZSA9IHBhdGhHZXRGaWxlTmFt
ZShtX3BhdGgpOworICAgIG1fcGFyZW50RGlyZWN0b3J5ID0gbV9wYXRoLmxlZnQobV9wYXRoLmxl
bmd0aCgpIC0gbV9maWxlTmFtZS5sZW5ndGgoKSAtIDEpOworfQorCit2b2lkIFBsdWdpblBhY2th
Z2U6OnVubG9hZCgpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoLS1tX2xvYWRDb3VudCA+IDApCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIG1fTlBQX1NodXRkb3duKCk7CisjZW5kaWYKKwor
ICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OnVu
bG9hZFdpdGhvdXRTaHV0ZG93bigpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlQoIW1fbG9hZENvdW50KTsKKyAgICBBU1NFUlQobV9tb2R1bGUp
OworCisgICAgLy8gPHJkYXI6Ly81NTMwNTE5PjogQ3Jhc2ggd2hlbiBjbG9zaW5nIHRhYiB3aXRo
IHBkZiBmaWxlIChSZWFkZXIgNyBvbmx5KQorICAgIC8vIElmIHRoZSBwbHVnaW4gaGFzIHN1YmNs
YXNzZWQgaXRzIHBhcmVudCB3aW5kb3csIGFzIHdpdGggUmVhZGVyIDcsIHdlIG1heSBoYXZlCisg
ICAgLy8gZ290dGVuIGhlcmUgYnkgd2F5IG9mIHRoZSBwbHVnaW4ncyBpbnRlcm5hbCB3aW5kb3cg
cHJvYyBmb3J3YXJkaW5nIGEgbWVzc2FnZSB0byBvdXIKKyAgICAvLyBvcmlnaW5hbCB3aW5kb3cg
cHJvYy4gSWYgd2UgZnJlZSB0aGUgcGx1Z2luIGxpYnJhcnkgZnJvbSBoZXJlLCB3ZSB3aWxsIGp1
bXAgYmFjaworICAgIC8vIHRvIGNvZGUgd2UganVzdCBmcmVlZCB3aGVuIHdlIHJldHVybiwgc28g
ZGVsYXkgY2FsbGluZyBGcmVlTGlicmFyeSBhdCBsZWFzdCB1bnRpbAorICAgIC8vIHRoZSBuZXh0
IG1lc3NhZ2UgbG9vcAorICAgIGZyZWVMaWJyYXJ5U29vbigpOworCisgICAgbV9pc0xvYWRlZCA9
IGZhbHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVk
KQoreworICAgIG1faXNFbmFibGVkID0gZW5hYmxlZDsKK30KKworUGFzc1JlZlB0cjxQbHVnaW5Q
YWNrYWdlPiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCit7CisgICAgUmVmUHRyPFBsdWdpblBhY2thZ2U+
IHBhY2thZ2UgPSBhZG9wdFJlZihuZXcgUGx1Z2luUGFja2FnZShwYXRoLCBsYXN0TW9kaWZpZWQp
KTsKKworICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIHBhY2thZ2UucmVsZWFzZSgpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9NRVRBREFUQV9DQUNIRSkKK1Bhc3NSZWZQdHI8UGx1Z2luUGFja2FnZT4gUGx1Z2lu
UGFja2FnZTo6Y3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IHRpbWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKQoreworICAgIFJlZlB0
cjxQbHVnaW5QYWNrYWdlPiBwYWNrYWdlID0gYWRvcHRSZWYobmV3IFBsdWdpblBhY2thZ2UocGF0
aCwgbGFzdE1vZGlmaWVkKSk7CisgICAgcGFja2FnZS0+bV9uYW1lID0gbmFtZTsKKyAgICBwYWNr
YWdlLT5tX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgcGFja2FnZS0+ZGV0ZXJtaW5l
TW9kdWxlVmVyc2lvbkZyb21EZXNjcmlwdGlvbigpOworICAgIHBhY2thZ2UtPnNldE1JTUVEZXNj
cmlwdGlvbihtaW1lRGVzY3JpcHRpb24pOworICAgIHBhY2thZ2UtPm1faW5mb0lzRnJvbUNhY2hl
ID0gdHJ1ZTsKKyAgICByZXR1cm4gcGFja2FnZS5yZWxlYXNlKCk7Cit9CisjZW5kaWYKKworI2lm
IGRlZmluZWQoWFBfVU5JWCkKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2
YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNlIGEgc2luZ2xl
IHByb2Nlc3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3QgcmVsaWFi
bHkgdW5sb2FkIGEKKyAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0aGUgSmF2
YSBwbHVnaW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCisgICAgICAg
IG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgICAgIC8v
IFNldHRpbmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBiYWQg
c2Nyb2xsaW5nIHJlcGFpbnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUgSmF2YSBwbHVn
LWluLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RX
aGVuU2Nyb2xsaW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtaW1lVHlw
ZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gZmxhc2hUZW5WZXJzaW9uKDB4MGEwMDAwMDApOwor
CisgICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNpb24oZmxhc2hUZW5WZXJzaW9uKSA+PSAwKSB7
CisgICAgICAgICAgICAvLyBGbGFzaCAxMC4wIGIyMTggZG9lc24ndCBsaWtlIGhhdmluZyBhIE5V
TEwgd2luZG93IGhhbmRsZQorICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9u
dFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gRmxhc2ggOSBhbmQgb2xkZXIgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlm
IHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgICAgICAgICAgbV9xdWlya3MuYWRk
KFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKKyAgICAgICAgfQorCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICAgICAgLy8gNjQtYml0IEZsYXNoIGZyZWV6ZXMgaWYgcmlnaHQtY2xpY2sg
aXMgc2VudCBpbiB3aW5kb3dsZXNzIG1vZGUKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1
aXJrSWdub3JlUmlnaHRDbGlja0luV2luZG93bGVzc01vZGUpOworI2VuZGlmCisKKyAgICAgICAg
bV9xdWlya3MuYWRkKFBsdWdpblF1aXJrUmVxdWlyZXNEZWZhdWx0U2NyZWVuRGVwdGgpOworICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOworICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyk7
CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsKKyAg
ICB9Cit9CisjZW5kaWYKKworI2lmICFPUyhXSU5ET1dTKQordm9pZCBQbHVnaW5QYWNrYWdlOjpk
ZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0aW9uKCkKK3sKKyAgICAvLyBJdCdzIGEg
Yml0IGxhbWUgdG8gZGV0ZWN0IHRoZSBwbHVnaW4gdmVyc2lvbiBieSBwYXJzaW5nIGl0CisgICAg
Ly8gZnJvbSB0aGUgcGx1Z2luIGRlc2NyaXB0aW9uIHN0cmluZywgYnV0IGl0IGRvZXNuJ3Qgc2Vl
bSB0aGF0CisgICAgLy8gdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gYW55IHN0
YW5kYXJkaXplZCB3YXkgYXQKKyAgICAvLyB0aGUgbW9kdWxlIGxldmVsLCBsaWtlIGluIFdpbmRv
d3MKKworICAgIGlmIChtX2Rlc2NyaXB0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG1fZGVzY3JpcHRpb24uc3RhcnRzV2l0aCgiU2hvY2t3YXZlIEZsYXNoIikgJiYg
bV9kZXNjcmlwdGlvbi5sZW5ndGgoKSA+PSAxOSkgeworICAgICAgICAvLyBUaGUgZmxhc2ggdmVy
c2lvbiBhcyBhIFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBkaWZmZXJzIG9uIFVuaXggZnJvbSBXaW5k
b3dzCisgICAgICAgIC8vIHNpbmNlIHRoZSByZXZpc2lvbiBjYW4gYmUgbGFyZ2VyIHRoYW4gYSA4
IGJpdHMsIHNvIHdlIGFsbG93IGl0IDE2IGhlcmUgYW5kCisgICAgICAgIC8vIHB1c2ggdGhlIG1h
am9yL21pbm9yIHVwIDggYml0cy4gVGh1cyBvbiBVbml4LCBGbGFzaCdzIHZlcnNpb24gbWF5IGJl
CisgICAgICAgIC8vIDB4MGEwMDAwMDAgaW5zdGVhZCBvZiAweDAwMGEwMDAwLgorCisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHZlcnNpb25QYXJ0czsKKyAgICAgICAgbV9kZXNjcmlwdGlvbi5zdWJz
dHJpbmcoMTYpLnNwbGl0KCcgJywgLyphbGxvd0VtcHR5RW50cmllcyA9Ki8gZmFsc2UsIHZlcnNp
b25QYXJ0cyk7CisgICAgICAgIGlmICh2ZXJzaW9uUGFydHMuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICh2ZXJzaW9uUGFydHMuc2l6ZSgpID49IDEpIHsKKyAg
ICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1ham9yTWlub3JQYXJ0czsKKyAgICAgICAgICAgIHZl
cnNpb25QYXJ0c1swXS5zcGxpdCgnLicsIG1ham9yTWlub3JQYXJ0cyk7CisgICAgICAgICAgICBp
ZiAobWFqb3JNaW5vclBhcnRzLnNpemUoKSA+PSAxKSB7CisgICAgICAgICAgICAgICAgYm9vbCBj
b252ZXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtYWpvciA9IG1ham9y
TWlub3JQYXJ0c1swXS50b1VJbnQoJmNvbnZlcnRlZCk7CisgICAgICAgICAgICAgICAgaWYgKGNv
bnZlcnRlZCkKKyAgICAgICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uID0gKG1ham9yICYg
MHhmZikgPDwgMjQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWFqb3JNaW5vclBh
cnRzLnNpemUoKSA9PSAyKSB7CisgICAgICAgICAgICAgICAgYm9vbCBjb252ZXJ0ZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtaW5vciA9IG1ham9yTWlub3JQYXJ0c1sxXS50
b1VJbnQoJmNvbnZlcnRlZCk7CisgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRlZCkKKyAgICAg
ICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uIHw9IChtaW5vciAmIDB4ZmYpIDw8IDE2Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcnNpb25QYXJ0cy5zaXpl
KCkgPj0gMikgeworICAgICAgICAgICAgU3RyaW5nIHJldmlzaW9uID0gdmVyc2lvblBhcnRzWzFd
OworICAgICAgICAgICAgaWYgKHJldmlzaW9uLmxlbmd0aCgpID4gMSAmJiAocmV2aXNpb25bMF0g
PT0gJ3InIHx8IHJldmlzaW9uWzBdID09ICdiJykpIHsKKyAgICAgICAgICAgICAgICByZXZpc2lv
bi5yZW1vdmUoMCwgMSk7CisgICAgICAgICAgICAgICAgbV9tb2R1bGVWZXJzaW9uIHw9IHJldmlz
aW9uLnRvSW50KCkgJiAweGZmZmY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisjZW5kaWYKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorc3RhdGljIHZvaWQg
Z2V0TGlzdEZyb21WYXJpYW50QXJncyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTlBWYXJp
YW50KiBhcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCog
cm9vdE9iamVjdCwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYUxpc3QpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIGFMaXN0LmFwcGVu
ZChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCAmYXJnc1tpXSwg
cm9vdE9iamVjdCkpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6U291cmNlQ29kZSBtYWtlU291
cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCA9IFN0cmluZygpLCBj
b25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24gPSBUZXh0UG9zaXRpb246Om1pbmltdW1Q
b3NpdGlvbigpKQoreworICAgIHJldHVybiBKU0M6OlNvdXJjZUNvZGUoSlNDOjpTdHJpbmdTb3Vy
Y2VQcm92aWRlcjo6Y3JlYXRlKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9uKSwgc3RhcnRQb3Np
dGlvbi5tX2xpbmUub25lQmFzZWRJbnQoKSwgc3RhcnRQb3NpdGlvbi5tX2NvbHVtbi5vbmVCYXNl
ZEludCgpKTsKK30KKworc3RhdGljIGJvb2wgTlBOX0V2YWx1YXRlKE5QUCBpbnN0YW5jZSwgTlBP
YmplY3QqIG8sIE5QU3RyaW5nKiBzLCBOUFZhcmlhbnQqIHZhcmlhbnQpCit7CisgICAgaWYgKG8t
Pl9jbGFzcyA9PSBOUFNjcmlwdE9iamVjdENsYXNzKSB7CisgICAgICAgIEphdmFTY3JpcHRPYmpl
Y3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG8pOworCisgICAg
ICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmotPnJvb3RPYmpl
Y3Q7CisgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFRoZXJlIGlzIGEgY3Jhc2gg
aW4gRmxhc2ggd2hlbiBldmFsdWF0aW5nIGEgc2NyaXB0IHRoYXQgZGVzdHJveXMgdGhlCisgICAg
ICAgIC8vIFBsdWdpblZpZXcsIHNvIHdlIGRlc3Ryb3kgaXQgYXN5bmNocm9ub3VzbHkuCisgICAg
ICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShpbnN0YW5jZSk7CisKKyAgICAgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwor
ICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBTdHJpbmcgc2Ny
aXB0U3RyaW5nID0gSlNDOjpCaW5kaW5nczo6Y29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKKwor
ICAgICAgICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5n
KSwgSlNDOjpKU1ZhbHVlKCkpOworCisgICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1
ZVRvTlBWYXJpYW50KGV4ZWMsIHJldHVyblZhbHVlLCB2YXJpYW50KTsKKyAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgVk9J
RF9UT19OUFZBUklBTlQoKnZhcmlhbnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IGJvb2wgTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbywgTlBJZGVudGlmaWVyIG1ldGhv
ZE5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFu
dCogcmVzdWx0KQoreworICAgIGlmIChvLT5fY2xhc3MgPT0gTlBTY3JpcHRPYmplY3RDbGFzcykg
eworICAgICAgICBKYXZhU2NyaXB0T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEphdmFT
Y3JpcHRPYmplY3QqPihvKTsKKworICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nh
c3Q8SWRlbnRpZmllclJlcCo+KG1ldGhvZE5hbWUpOworICAgICAgICBpZiAoIWktPmlzU3RyaW5n
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNl
IHRoZSAiZXZhbCIgbWV0aG9kLgorICAgICAgICBpZiAobWV0aG9kTmFtZSA9PSBfTlBOX0dldFN0
cmluZ0lkZW50aWZpZXIoImV2YWwiKSkgeworICAgICAgICAgICAgaWYgKGFyZ0NvdW50ICE9IDEp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGFyZ3NbMF0u
dHlwZSAhPSBOUFZhcmlhbnRUeXBlX1N0cmluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6TlBOX0V2YWx1YXRlKG5wcCwgbywgY29u
c3RfY2FzdDxOUFN0cmluZyo+KCZhcmdzWzBdLnZhbHVlLnN0cmluZ1ZhbHVlKSwgcmVzdWx0KTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KKyAg
ICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9i
amVjdDsKKyAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9u
ID0gb2JqLT5pbXAtPmdldChleGVjLCBKU0M6OkJpbmRpbmdzOjppZGVudGlmaWVyRnJvbU5QSWRl
bnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOworICAgICAgICBKU0M6OkNhbGxEYXRhIGNhbGxE
YXRhOworICAgICAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rp
b24sIGNhbGxEYXRhKTsKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGVOb25l
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0
aW9uIG9iamVjdC4KKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0Owor
ICAgICAgICBnZXRMaXN0RnJvbVZhcmlhbnRBcmdzKGV4ZWMsIGFyZ3MsIGFyZ0NvdW50LCByb290
T2JqZWN0LCBhcmdMaXN0KTsKKyAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdFYgPSBKU0M6OmNh
bGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqLT5pbXAsIGFyZ0xpc3Qp
OworCisgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5j
dGlvbiBjYWxsLgorICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFu
dChleGVjLCByZXN1bHRWLCByZXN1bHQpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoby0+X2NsYXNzLT5pbnZv
a2UpCisgICAgICAgIHJldHVybiBvLT5fY2xhc3MtPmludm9rZShvLCBtZXRob2ROYW1lLCBhcmdz
LCBhcmdDb3VudCwgcmVzdWx0KTsKKworICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OmluaXRpYWxpemVCcm93
c2VyRnVuY3MoKQoreworICAgIG1lbXNldCgmbV9icm93c2VyRnVuY3MsIDAsIHNpemVvZihtX2Jy
b3dzZXJGdW5jcykpOworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YobV9icm93c2Vy
RnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUFZlcnNpb24oKTsKKworICAg
IG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3Mu
cG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0g
TlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdT
dHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93
c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3Nl
ckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0g
TlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxv
YzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93
c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVs
b2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVy
bG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5v
dGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0g
TlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVl
OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0
OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJl
Z2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9i
cm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93c2Vy
RnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRl
OworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1
cHNFbmFibGVkU3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucGx1Z2ludGhyZWFkYXN5bmNjYWxs
ID0gTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbDsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVh
c2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRl
bnRpZmllcnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0
SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBf
TlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50
aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnRm
cm9taWRlbnRpZmllciA9IF9OUE5fSW50RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVu
Y3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3Mu
cmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVs
ZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZv
a2UgPSBXZWJDb3JlOjpOUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1
bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBX
ZWJDb3JlOjpOUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBf
TlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9T
ZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVt
b3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc1By
b3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzTWV0aG9kOwor
ICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOworICAg
IG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOworICAgIG1fYnJvd3Nl
ckZ1bmNzLmNvbnN0cnVjdCA9IF9OUE5fQ29uc3RydWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHZhbHVlZm9ydXJsID0gTlBOX0dldFZhbHVlRm9yVVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnNl
dHZhbHVlZm9ydXJsID0gTlBOX1NldFZhbHVlRm9yVVJMOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dGF1dGhlbnRpY2F0aW9uaW5mbyA9IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm87CisKKyAgICBt
X2Jyb3dzZXJGdW5jcy5wb3B1cGNvbnRleHRtZW51ID0gTlBOX1BvcFVwQ29udGV4dE1lbnU7Cit9
CisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisKKyNpZiBFTkFCTEUoUExV
R0lOX1BBQ0tBR0VfU0lNUExFX0hBU0gpCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkg
Y29uc3QKK3sKKyAgICBzdHJ1Y3QgSGFzaENvZGVzIHsKKyAgICAgICAgdW5zaWduZWQgaGFzaDsK
KyAgICAgICAgdGltZV90IG1vZGlmaWVkRGF0ZTsKKyAgICB9IGhhc2hDb2RlczsKKworICAgIGhh
c2hDb2Rlcy5oYXNoID0gbV9wYXRoLmltcGwoKS0+aGFzaCgpOworICAgIGhhc2hDb2Rlcy5tb2Rp
ZmllZERhdGUgPSBtX2xhc3RNb2RpZmllZDsKKworICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhh
c2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KCZoYXNoQ29kZXMpOworfQorCitib29sIFBsdWdp
blBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2th
Z2UmIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb247
Cit9CisjZW5kaWYKKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbihjb25z
dCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25zdAoreworICAgIC8v
IHJldHVybiAtMSwgMCwgb3IgMSBpZiBwbHVnLWluIHZlcnNpb24gaXMgbGVzcyB0aGFuLCBlcXVh
bCB0bywgb3IgZ3JlYXRlciB0aGFuCisgICAgLy8gdGhlIHBhc3NlZCB2ZXJzaW9uCisKKyNpZiBP
UyhXSU5ET1dTKQorICAgIGlmIChtX21vZHVsZVZlcnNpb24ubW9zdFNpZyAhPSBjb21wYXJlVmVy
c2lvbi5tb3N0U2lnKQorICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uLm1vc3RTaWcgPiBj
b21wYXJlVmVyc2lvbi5tb3N0U2lnID8gMSA6IC0xOworICAgIGlmIChtX21vZHVsZVZlcnNpb24u
bGVhc3RTaWcgIT0gY29tcGFyZVZlcnNpb24ubGVhc3RTaWcpCisgICAgICAgIHJldHVybiBtX21v
ZHVsZVZlcnNpb24ubGVhc3RTaWcgPiBjb21wYXJlVmVyc2lvbi5sZWFzdFNpZyA/IDEgOiAtMTsK
KyNlbHNlICAgIAorICAgIGlmIChtX21vZHVsZVZlcnNpb24gIT0gY29tcGFyZVZlcnNpb24pCisg
ICAgICAgIHJldHVybiBtX21vZHVsZVZlcnNpb24gPiBjb21wYXJlVmVyc2lvbiA/IDEgOiAtMTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X01FVEFEQVRBX0NBQ0hFKQorYm9vbCBQbHVnaW5QYWNrYWdlOjplbnN1cmVQbHVnaW5Mb2FkZWQo
KQoreworICAgIGlmICghbV9pbmZvSXNGcm9tQ2FjaGUpCisgICAgICAgIHJldHVybiBtX2lzTG9h
ZGVkOworCisgICAgbV9xdWlya3MgPSBQbHVnaW5RdWlya1NldCgpOworICAgIG1fbmFtZSA9IFN0
cmluZygpOworICAgIG1fZGVzY3JpcHRpb24gPSBTdHJpbmcoKTsKKyAgICBtX2Z1bGxNSU1FRGVz
Y3JpcHRpb24gPSBTdHJpbmcoKTsKKyAgICBtX21vZHVsZVZlcnNpb24gPSAwOworCisgICAgcmV0
dXJuIGZldGNoSW5mbygpOworfQorI2VuZGlmCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5oIGIvU291cmNlL1dlYktpdC93aW4vUGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjgzNDA1NzY3OTdhYTZiYzgzMTc3MmJjM2I0
ZjljY2Y4Y2M4YmE2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdp
bnMvUGx1Z2luUGFja2FnZS5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsdWdpblBhY2th
Z2VfaAorI2RlZmluZSBQbHVnaW5QYWNrYWdlX2gKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
KyNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgi
CisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOworCisg
ICAgY2xhc3MgUGx1Z2luUGFja2FnZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2U+
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlKCk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFBsdWdpblBhY2thZ2U+IGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9NRVRBREFUQV9DQUNIRSkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luUGFj
a2FnZT4gY3JlYXRlUGFja2FnZUZyb21DYWNoZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRp
bWVfdCYgbGFzdE1vZGlmaWVkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVz
Y3JpcHRpb24sIGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsKKyNlbmRpZgorCisgICAg
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgICAg
ICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlv
bjsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7
IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBwYXJlbnREaXJlY3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudERpcmVjdG9yeTsgfQorICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtb2R1
bGUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZTsgfQorICAgICAgICB1aW50MTZfdCBOUFZlcnNp
b24oKSBjb25zdDsKKyAgICAgICAgdGltZV90IGxhc3RNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFzdE1vZGlmaWVkOyB9CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFw
JiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9u
czsgfQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CisKKyAgICAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5Q
YWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKTsKKworICAgICAgICBib29sIGxvYWQo
KTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1
dGRvd24oKTsKKworICAgICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNF
bmFibGVkOyB9CisgICAgICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKworI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5G
dW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CisjZW5kaWYKKyAgICAgICAg
aW50IGNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25z
dDsKKyAgICAgICAgaW50IGNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0OworICAg
ICAgICBQbHVnaW5RdWlya1NldCBxdWlya3MoKSBjb25zdCB7IHJldHVybiBtX3F1aXJrczsgfQor
ICAgICAgICBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIHZlcnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX21vZHVsZVZlcnNpb247IH0KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVU
QURBVEFfQ0FDSEUpCisgICAgICAgIGJvb2wgZW5zdXJlUGx1Z2luTG9hZGVkKCk7CisgICAgICAg
IHZvaWQgc2V0TUlNRURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgbWltZURlc2NyaXB0aW9uKTsK
KyAgICAgICAgU3RyaW5nIGZ1bGxNSU1FRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1
bGxNSU1FRGVzY3JpcHRpb247fQorI2VuZGlmCisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2lu
UGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsK
KworICAgICAgICBib29sIGZldGNoSW5mbygpOworICAgICAgICBib29sIGlzUGx1Z2luQmxhY2ts
aXN0ZWQoKTsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSk7CisKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVNb2R1bGVWZXJzaW9uRnJvbURlc2NyaXB0
aW9uKCk7CisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZUJyb3dzZXJGdW5jcygpOworCisgICAgICAg
IGJvb2wgbV9pc0VuYWJsZWQ7CisgICAgICAgIGJvb2wgbV9pc0xvYWRlZDsKKyAgICAgICAgaW50
IG1fbG9hZENvdW50OworCisgICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9uOworICAgICAgICBT
dHJpbmcgbV9wYXRoOworICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKKyAgICAgICAgU3RyaW5n
IG1fbmFtZTsKKyAgICAgICAgU3RyaW5nIG1fcGFyZW50RGlyZWN0b3J5OworCisgICAgICAgIFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiBtX21vZHVsZVZlcnNpb247CisKKyAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBNSU1FVG9FeHRlbnNp
b25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBQbGF0Zm9ybU1vZHVsZSBtX21v
ZHVsZTsKKyAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOworCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRv
d247CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBOZXRz
Y2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworI2VuZGlmCisKKyAgICAgICAgdm9pZCBmcmVlTGli
cmFyeVNvb24oKTsKKyAgICAgICAgdm9pZCBmcmVlTGlicmFyeVRpbWVyRmlyZWQoKTsKKyAgICAg
ICAgVGltZXIgbV9mcmVlTGlicmFyeVRpbWVyOworCisgICAgICAgIFBsdWdpblF1aXJrU2V0IG1f
cXVpcmtzOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fTUVUQURBVEFfQ0FDSEUpCisgICAg
ICAgIFN0cmluZyBtX2Z1bGxNSU1FRGVzY3JpcHRpb247CisgICAgICAgIGJvb2wgbV9pbmZvSXNG
cm9tQ2FjaGU7CisjZW5kaWYKKyAgICB9OworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3Jr
YXJvdW5kIGJlY2F1c2UgUGx1Z2luUGFja2FnZUhhc2ggaXMgYnJva2VuIGFuZCBtYXkgY29uc2lk
ZXIga2V5cyB3aXRoIGRpZmZlcmVudCBoYXNoZXMgYXMgZXF1YWwuCisgICAgc3RydWN0IFBsdWdp
blBhY2thZ2VIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxSZWZQdHI8UGx1Z2luUGFja2FnZT4gPiB7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IDY0OworICAgIH07
CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCB1aW50cHRyX3Qga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBs
dWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgp
OyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgdWludHB0cl90IGEsIGNvbnN0
IHVpbnRwdHJfdCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2th
Z2UqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYikpOyB9CisgICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYgYSwgY29uc3Qg
UmVmUHRyPFBsdWdpblBhY2thZ2U+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlOjplcXVhbCgq
YS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMv
UGx1Z2luUGFja2FnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBh
Y2thZ2VXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4NTI1N2Q2MjI5MjcyMDkxOGE1MWEzNmQ4MjdkOGNj
ZDJkNDE5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1Bs
dWdpblBhY2thZ2VXaW4uY3BwCkBAIC0wLDAgKzEsMzM1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1
Z2luRGVidWcuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBs
LmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyBnZXRWZXJzaW9uSW5mbyhjb25zdCBM
UFZPSUQgdmVyc2lvbkluZm9EYXRhLCBjb25zdCBTdHJpbmcmIGluZm8pCit7CisgICAgTFBWT0lE
IGJ1ZmZlcjsKKyAgICBVSU5UIGJ1ZmZlckxlbmd0aDsKKyAgICBTdHJpbmcgc3ViSW5mbyA9ICJc
XFN0cmluZ2ZpbGVJbmZvXFwwNDA5MDRFNFxcIiArIGluZm87CisgICAgYm9vbCByZXR2YWwgPSBW
ZXJRdWVyeVZhbHVlVyh2ZXJzaW9uSW5mb0RhdGEsCisgICAgICAgIGNvbnN0X2Nhc3Q8VUNoYXIq
PihzdWJJbmZvLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwKKyAgICAg
ICAgJmJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCk7CisgICAgaWYgKCFyZXR2YWwgfHwgYnVmZmVyTGVu
Z3RoID09IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFN1YnRyYWN0IDEg
ZnJvbSB0aGUgbGVuZ3RoOyB3ZSBkb24ndCB3YW50IHRoZSB0cmFpbGluZyBudWxsIGNoYXJhY3Rl
ci4KKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBi
dWZmZXJMZW5ndGggLSAxKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNr
bGlzdGVkKCkKK3sKKyAgICBpZiAobmFtZSgpID09ICJDaXRyaXggSUNBIENsaWVudCIpIHsKKyAg
ICAgICAgLy8gVGhlIENpdHJpeCBJQ0EgQ2xpZW50IHBsdWctaW4gcmVxdWlyZXMgYSBNb3ppbGxh
LWJhc2VkIGJyb3dzZXI7IHNlZSA8cmRhcjovLzY0MTg2ODE+LgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAobmFtZSgpID09ICJTaWx2ZXJsaWdodCBQbHVnLUluIikgewor
ICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciA8cmRhcjovLzU1NTczNzk+IENyYXNoIGluIFNpbHZl
cmxpZ2h0IHdoZW4gb3BlbmluZyBtaWNyb3NvZnQuY29tLgorICAgICAgICAvLyB0aGUgbGF0ZXN0
IDEuMCB2ZXJzaW9uIG9mIFNpbHZlcmxpZ2h0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGlzIGNyYXNo
LCBzbyBhbGxvdyBpdAorICAgICAgICAvLyBhbmQgYW55IG5ld2VyIHZlcnNpb25zCisgICAgICAg
IHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gc2xQbHVnaW5NaW5SZXF1aXJlZCgw
eDUxQkUwMDAwLCAweDAwMDEwMDAwKTsKKworICAgICAgICBpZiAoY29tcGFyZUZpbGVWZXJzaW9u
KHNsUGx1Z2luTWluUmVxdWlyZWQpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZmlsZU5hbWUoKSwgIm5wbW96YXguZGxsIikp
IHsKKyAgICAgICAgLy8gQnVnIDE1MjE3OiBNb3ppbGxhIEFjdGl2ZVggY29udHJvbCBjb21wbGFp
bnMgYWJvdXQgbWlzc2luZyB4cGNvbV9jb3JlLmRsbAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGZpbGVOYW1lKCksICJucHdwZi5kbGwiKSkg
eworICAgICAgICAvLyBCdWcgNTcxMTk6IE1pY3Jvc29mdCBXaW5kb3dzIFByZXNlbnRhdGlvbiBG
b3VuZGF0aW9uIChXUEYpIHBsdWctaW4gY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgeHBjb20uZGxs
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAobmFtZSgpID09ICJZYWhvbyBB
cHBsaWNhdGlvbiBTdGF0ZSBQbHVnaW4iKSB7CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjg2MAorICAgICAgICAvLyBCdWcgaW4gWWFob28gQXBw
bGljYXRpb24gU3RhdGUgcGx1Zy1pbiBlYXJsaWVyIHRoYW4gMS4wLjAuNiBsZWFkcyB0byBoZWFw
IGNvcnJ1cHRpb24uIAorICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9u
IHlhaG9vQXBwU3RhdGVQbHVnaW5NaW5SZXF1aXJlZCgweDAwMDAwMDA2LCAweDAwMDEwMDAwKTsK
KyAgICAgICAgaWYgKGNvbXBhcmVGaWxlVmVyc2lvbih5YWhvb0FwcFN0YXRlUGx1Z2luTWluUmVx
dWlyZWQpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gt
c2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVW
ZXJzaW9uIGZsYXNoVGVuVmVyc2lvbigweDAwMDAwMDAwLCAweDAwMGEwMDAwKTsKKworICAgICAg
ICAvLyBQcmUgMTAgRmxhc2ggb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2Ug
cmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50CisgICAgICAgIGlmIChjb21wYXJlRmlsZVZlcnNp
b24oZmxhc2hUZW5WZXJzaW9uKSA8IDApCisgICAgICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOworCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVn
aW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKKyAgICAgICAgbV9xdWlya3MuYWRk
KFBsdWdpblF1aXJrRmxhc2hVUkxOb3RpZnlCdWcpOworICAgIH0KKworICAgIGlmIChuYW1lKCku
Y29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG5hbWUoKS5jb250YWlucygiV2luZG93cyBNZWRpYSIp
KSB7CisgICAgICAgIC8vIFRoZSBXTVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0
IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAg
ICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBz
aXplCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dD
YWxsKTsKKworICAgICAgICAvLyBXaW5kb3dsZXNzIG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwg
d2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJlbW92ZSB0aGF0IHBhcmFtZXRlciAKKyAgICAg
ICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhlIHBsdWctaW4uCisgICAgICAgIG1fcXVpcmtz
LmFkZChQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKTsKKworICAgICAgICAv
LyBXTVAgaGFzIGEgbW9kYWwgbWVzc2FnZSBsb29wIHRoYXQgaXQgZW50ZXJzIHdoZW5ldmVyIHdl
IGNhbGwgaXQgb3IKKyAgICAgICAgLy8gYXNrIGl0IHRvIHBhaW50LiBUaGlzIG1vZGFsIGxvb3Ag
Y2FuIGRlbGl2ZXIgbWVzc2FnZXMgdG8gb3RoZXIKKyAgICAgICAgLy8gd2luZG93cyBpbiBXZWJL
aXQgYXQgdGltZXMgd2hlbiB0aGV5IGFyZSBub3QgZXhwZWN0aW5nIHRoZW0gKGZvcgorICAgICAg
ICAvLyBleGFtcGxlLCBkZWxpdmVyaW5nIGEgV01fUEFJTlQgbWVzc2FnZSBkdXJpbmcgYSBsYXlv
dXQpLCBhbmQgdGhlc2UKKyAgICAgICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMuCisgICAgICAgIG1f
cXVpcmtzLmFkZChQbHVnaW5RdWlya0hhc01vZGFsTWVzc2FnZUxvb3ApOworICAgIH0KKworICAg
IGlmIChuYW1lKCkgPT0gIlZMQyBNdWx0aW1lZGlhIFBsdWdpbiIgfHwgbmFtZSgpID09ICJWTEMg
TXVsdGltZWRpYSBQbHVnLWluIikgeworICAgICAgICAvLyBWTEMgaGFuZ3Mgb24gTlBQX0Rlc3Ry
b3kgaWYgd2UgY2FsbCBOUFBfU2V0V2luZG93IHdpdGggYSBudWxsIHdpbmRvdyBoYW5kbGUKKyAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRl
c3Ryb3kpOworCisgICAgICAgIC8vIFZMQyAwLjguNmQgYW5kIDAuOC42ZSBjcmFzaCBpZiBtdWx0
aXBsZSBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81
NzczMDcwPiB0cmFja3MgYWxsb3dpbmcgbXVsdGlwbGUgaW5zdGFuY2VzIHdoZW4gdGhpcworICAg
ICAgICAvLyBidWcgaXMgZml4ZWQuCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0Rv
bnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKKyAgICB9CisKKyAgICAvLyBUaGUgRGl2WCBwbHVn
aW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZl
ciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBs
dWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8v
ZGl2eCIpCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5k
b3dDYWxsKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9i
bGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCisg
ICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3Np
YmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0by4KKyAg
ICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxp
ZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5jZSBnb2VzIGF3YXkuCisgICAgLy8gU2VlIDxy
ZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9u
L3gtc2lsdmVybGlnaHQiKQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5s
b2FkUGx1Z2luKTsKKworICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1F
VHlwZShtaW1lVHlwZSkpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBhIHNpbmdsZSBwcm9jZXNzIGNh
bm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fubm90IHJlbGlhYmx5IHVubG9hZCBh
CisgICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxvYWQgdGhlIEphdmEgcGx1Z2luLCBv
ciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBWTQorICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKKworICAgICAgICAvLyBTZXR0aW5nIHRo
ZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyBy
ZXBhaW50IHByb2JsZW1zCisgICAgICAgIC8vIHdpdGggdGhlIEphdmEgcGx1Zy1pbi4KKyAgICAg
ICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGlu
Zyk7CisgICAgfQorCisgICAgaWYgKG1pbWVUeXBlID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1w
bHVnaW4iKSB7CisgICAgICAgIC8vIFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGlu
ZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJm
bG93LgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JT
YW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KTsKKworICAgICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1N
b2R1bGVWZXJzaW9uIGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lvbigweDAwMEIw
QjI0LCAweDAwMDYwMDAwKTsKKworICAgICAgICAvLyBVbmxvYWRpbmcgUmVhbFBsYXllciB2ZXJz
aW9ucyBuZXdlciB0aGFuIDEwLjUgY2FuIGNhdXNlIGEgaGFuZzsgc2VlIHJkYXI6Ly81NjY5MzE3
LgorICAgICAgICAvLyBGSVhNRTogUmVzdW1lIHVubG9hZGluZyB3aGVuIHRoaXMgYnVnIGluIHRo
ZSBSZWFsUGxheWVyIFBsdWctSW4gaXMgZml4ZWQgKHJkYXI6Ly81NzEzMTQ3KQorICAgICAgICBp
ZiAoY29tcGFyZUZpbGVWZXJzaW9uKGxhc3RLbm93blVubG9hZGFibGVSZWFsUGxheWVyVmVyc2lv
bikgPiAwKQorICAgICAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBs
dWdpbik7CisgICAgfQorfQorCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7Cisg
ICAgRFdPUkQgdmVyc2lvbkluZm9TaXplLCB6ZXJvSGFuZGxlOworICAgIHZlcnNpb25JbmZvU2l6
ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLCAmemVyb0hhbmRsZSk7CisgICAg
aWYgKHZlcnNpb25JbmZvU2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIHZlcnNpb25JbmZvRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPih2ZXJzaW9uSW5m
b1NpemUpOworCisgICAgaWYgKCFHZXRGaWxlVmVyc2lvbkluZm9XKGNvbnN0X2Nhc3Q8VUNoYXIq
PihtX3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLAorICAgICAg
ICAgICAgMCwgdmVyc2lvbkluZm9TaXplLCB2ZXJzaW9uSW5mb0RhdGEuZ2V0KCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBtX25hbWUgPSBnZXRWZXJzaW9uSW5mbyh2ZXJzaW9uSW5m
b0RhdGEuZ2V0KCksICJQcm9kdWN0TmFtZSIpOworICAgIG1fZGVzY3JpcHRpb24gPSBnZXRWZXJz
aW9uSW5mbyh2ZXJzaW9uSW5mb0RhdGEuZ2V0KCksICJGaWxlRGVzY3JpcHRpb24iKTsKKyAgICBp
ZiAobV9uYW1lLmlzTnVsbCgpIHx8IG1fZGVzY3JpcHRpb24uaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFZTX0ZJWEVERklMRUlORk8qIGluZm87CisgICAgVUlOVCBpbmZv
U2l6ZTsKKyAgICBpZiAoIVZlclF1ZXJ5VmFsdWVXKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgTCJc
XCIsIChMUFZPSUQqKSAmaW5mbywgJmluZm9TaXplKSB8fCBpbmZvU2l6ZSA8IHNpemVvZihWU19G
SVhFREZJTEVJTkZPKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fbW9kdWxlVmVyc2lv
bi5sZWFzdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25MUzsKKyAgICBtX21vZHVsZVZlcnNpb24u
bW9zdFNpZyA9IGluZm8tPmR3RmlsZVZlcnNpb25NUzsKKworICAgIGlmIChpc1BsdWdpbkJsYWNr
bGlzdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHR5
cGVzOworICAgIGdldFZlcnNpb25JbmZvKHZlcnNpb25JbmZvRGF0YS5nZXQoKSwgIk1JTUVUeXBl
Iikuc3BsaXQoJ3wnLCB0eXBlcyk7CisgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9uTGlzdHM7
CisgICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZUV4dGVudHMi
KS5zcGxpdCgnfCcsIGV4dGVuc2lvbkxpc3RzKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlw
dGlvbnM7CisgICAgZ2V0VmVyc2lvbkluZm8odmVyc2lvbkluZm9EYXRhLmdldCgpLCAiRmlsZU9w
ZW5OYW1lIikuc3BsaXQoJ3wnLCBkZXNjcmlwdGlvbnMpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFN0cmluZyB0eXBlID0gdHlw
ZXNbaV0ubG93ZXIoKTsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gaSA8IGRlc2NyaXB0
aW9ucy5zaXplKCkgPyBkZXNjcmlwdGlvbnNbaV0gOiAiIjsKKyAgICAgICAgU3RyaW5nIGV4dGVu
c2lvbkxpc3QgPSBpIDwgZXh0ZW5zaW9uTGlzdHMuc2l6ZSgpID8gZXh0ZW5zaW9uTGlzdHNbaV0g
OiAiIjsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zVmVjdG9yOworICAgICAg
ICBleHRlbnNpb25MaXN0LnNwbGl0KCcsJywgZXh0ZW5zaW9uc1ZlY3Rvcik7CisKKyAgICAgICAg
Ly8gR2V0IHJpZCBvZiB0aGUgZXh0ZW5zaW9uIGxpc3QgdGhhdCBtYXkgYmUgYXQgdGhlIGVuZCBv
ZiB0aGUgZGVzY3JpcHRpb24gc3RyaW5nLgorICAgICAgICBpbnQgcG9zID0gZGVzY3JpcHRpb24u
ZmluZCgiKCoiKTsKKyAgICAgICAgaWYgKHBvcyAhPSAtMSkgeworICAgICAgICAgICAgLy8gVGhl
cmUgbWlnaHQgYmUgYSBzcGFjZSB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZi4KKyAgICAgICAg
ICAgIGlmIChwb3MgPiAxICYmIGRlc2NyaXB0aW9uW3BvcyAtIDFdID09ICcgJykKKyAgICAgICAg
ICAgICAgICBwb3MtLTsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24ubGVm
dChwb3MpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBxdWlya3MgZm9y
IHRoZSBNSU1FIHR5cGVzIHRoaXMgcGx1Zy1pbiBzdXBwb3J0cworICAgICAgICBkZXRlcm1pbmVR
dWlya3ModHlwZSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZCh0eXBlLCBleHRl
bnNpb25zVmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKHR5cGUsIGRl
c2NyaXB0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQbHVnaW5Q
YWNrYWdlOjpsb2FkKCkKK3sKKyAgICBpZiAobV9mcmVlTGlicmFyeVRpbWVyLmlzQWN0aXZlKCkp
IHsKKyAgICAgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICAgICAgbV9mcmVlTGlicmFyeVRpbWVy
LnN0b3AoKTsKKyAgICB9IGVsc2UgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAgICAgaWYgKG1fcXVp
cmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhf
UEFUSF07CisKKyAgICAgICAgaWYgKCE6OkdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRILCBj
dXJyZW50UGF0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU3RyaW5n
IHBhdGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNlRmluZCgnXFwnKSk7CisK
KyAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGguY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKS5kYXRhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIC8vIExvYWQgdGhlIGxpYnJhcnkKKyAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJy
YXJ5RXhXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwg
TE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpOworCisgICAgICAgIGlmICghOjpTZXRDdXJy
ZW50RGlyZWN0b3J5VyhjdXJyZW50UGF0aCkpIHsKKyAgICAgICAgICAgIGlmIChtX21vZHVsZSkK
KyAgICAgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KG1fbW9kdWxlKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9tb2R1bGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfR2V0
RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKKyAgICBOUF9Jbml0aWFs
aXplRnVuY1B0ciBOUF9Jbml0aWFsaXplID0gMDsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAg
TlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilHZXRQcm9jQWRkcmVzcyhtX21v
ZHVsZSwgIk5QX0luaXRpYWxpemUiKTsKKyAgICBOUF9HZXRFbnRyeVBvaW50cyA9IChOUF9HZXRF
bnRyeVBvaW50c0Z1bmNQdHIpR2V0UHJvY0FkZHJlc3MobV9tb2R1bGUsICJOUF9HZXRFbnRyeVBv
aW50cyIpOworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpR2V0UHJv
Y0FkZHJlc3MobV9tb2R1bGUsICJOUF9TaHV0ZG93biIpOworCisgICAgaWYgKCFOUF9Jbml0aWFs
aXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICAgIGdv
dG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdp
bkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3Mp
OworCisgICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmbV9wbHVnaW5GdW5jcyk7CisgICAg
TE9HX05QRVJST1IobnBFcnIpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAg
ICAgICAgZ290byBhYm9ydDsKKworICAgIGluaXRpYWxpemVCcm93c2VyRnVuY3MoKTsKKworICAg
IG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MpOworICAgIExPR19OUEVSUk9S
KG5wRXJyKTsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290
byBhYm9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0
OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0Cit7IAorICAgIGNvbnN0IHVuc2ln
bmVkIGhhc2hDb2Rlc1tdID0geworICAgICAgICBtX25hbWUuaW1wbCgpLT5oYXNoKCksCisgICAg
ICAgIG1fZGVzY3JpcHRpb24uaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbWltZVRvRXh0ZW5z
aW9ucy5zaXplKCkKKyAgICB9OworCisgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9y
eTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdl
OjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQor
eworICAgIGlmIChhLm1fbmFtZSAhPSBiLm1fbmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGEubV9kZXNjcmlwdGlvbiAhPSBiLm1fZGVzY3JpcHRpb24pCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChhLm1fbWltZVRvRXh0ZW5zaW9ucy5zaXplKCkgIT0gYi5t
X21pbWVUb0V4dGVuc2lvbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBN
SU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBhLm1fbWltZVRv
RXh0ZW5zaW9ucy5lbmQoKS5rZXlzKCk7CisgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpj
b25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IGEubV9taW1lVG9FeHRlbnNpb25zLmJlZ2luKCkua2V5
cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCFiLm1fbWltZVRvRXh0ZW5zaW9u
cy5jb250YWlucygqaXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCit1aW50MTZfdCBQbHVnaW5QYWNrYWdlOjpOUFZlcnNpb24oKSBj
b25zdAoreworICAgIHJldHVybiBOUF9WRVJTSU9OX01JTk9SOworfQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5RdWlya1NldC5oIGIvU291cmNlL1dlYktp
dC93aW4vUGx1Z2lucy9QbHVnaW5RdWlya1NldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5YTMzODNkYmI0NDY5
MDk5NDA3ZDZiZGExMjNkMTAxZGNiNWQzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9QbHVnaW5zL1BsdWdpblF1aXJrU2V0LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsdWdp
blF1aXJrU2V0X2gKKyNkZWZpbmUgUGx1Z2luUXVpcmtTZXRfaAorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGVudW0gUGx1Z2luUXVpcmsgeworICAgICAgICBQbHVnaW5RdWlya1dhbnRz
TW96aWxsYVVzZXJBZ2VudCA9IDEgPDwgMCwKKyAgICAgICAgUGx1Z2luUXVpcmtEZWZlckZpcnN0
U2V0V2luZG93Q2FsbCA9IDEgPDwgMSwKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZUludmFs
aWRhdGUgPSAxIDw8IDIsIAorICAgICAgICBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRl
b1BhcmFtID0gMSA8PCAzLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09u
ZU1lc3NhZ2VzID0gMSA8PCA0LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4g
PSAxIDw8IDUsCisgICAgICAgIFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3Nh
Z2VSZWN1cnNpdmVseSA9IDEgPDwgNiwKKyAgICAgICAgUGx1Z2luUXVpcmtIYXNNb2RhbE1lc3Nh
Z2VMb29wID0gMSA8PCA3LAorICAgICAgICBQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnID0g
MSA8PCA4LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxp
bmcgPSAxIDw8IDksCisgICAgICAgIFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVP
bkRlc3Ryb3kgPSAxIDw8IDEwLAorICAgICAgICBQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxl
SW5zdGFuY2VzID0gMSA8PCAxMSwKKyAgICAgICAgUGx1Z2luUXVpcmtSZXF1aXJlc0d0a1Rvb2xL
aXQgPSAxIDw8IDEyLAorICAgICAgICBQbHVnaW5RdWlya1JlcXVpcmVzRGVmYXVsdFNjcmVlbkRl
cHRoID0gMSA8PCAxMywKKyAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFNldFdpbmRvd01vcmVU
aGFuT25jZSA9IDEgPDwgMTQsCisgICAgICAgIFBsdWdpblF1aXJrSWdub3JlUmlnaHRDbGlja0lu
V2luZG93bGVzc01vZGUgPSAxIDw8IDE1LAorICAgICAgICBQbHVnaW5RdWlya1dhbnRzQ2hyb21l
VXNlckFnZW50ID0gMSA8PCAxNgorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5RdWlya1NldCB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFBsdWdpblF1aXJrU2V0KCkgOiBtX3F1aXJr
cygwKSB7IH0KKyAgICAgICAgICAgIHZvaWQgYWRkKFBsdWdpblF1aXJrIHF1aXJrKSB7IG1fcXVp
cmtzIHw9IHF1aXJrOyB9CisgICAgICAgICAgICBib29sIGNvbnRhaW5zKFBsdWdpblF1aXJrIHF1
aXJrKSBjb25zdCB7IHJldHVybiBtX3F1aXJrcyAmIHF1aXJrOyB9CisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICB1bnNpZ25lZCBtX3F1aXJrczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQbHVnaW5RdWlya1NldF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9QbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzliOWIxMjBmMWY0MjBjNmI0
YTdjNmJmZjAwNzYzMzAwYjU1ODI0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2luL1BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcApAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtLmgiCisKKyNpbmNsdWRlICJE
b2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKKy8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2UgdG8gcmV0
dXJuIC0xIHRvIGluZGljYXRlIGVycm9yCisvLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3QgY2xhc2gg
d2l0aCB0aGVtLgorc3RhdGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7CisKK3VzaW5n
IHN0ZDo6bWF4OwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlw
ZWRlZiBIYXNoTWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7CitzdGF0aWMgU3RyZWFtTWFw
JiBzdHJlYW1zKCkKK3sKKyAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7CisgICAg
cmV0dXJuIHN0YXRpY1N0cmVhbXM7Cit9CisKK1BsdWdpblN0cmVhbTo6UGx1Z2luU3RyZWFtKFBs
dWdpblN0cmVhbUNsaWVudCogY2xpZW50LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlm
eURhdGEsIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzLCBOUFAgaW5zdGFuY2UsIGNv
bnN0IFBsdWdpblF1aXJrU2V0JiBxdWlya3MpCisgICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNv
dXJjZVJlcXVlc3QpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2ZyYW1lKGZyYW1l
KQorICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAgLCBtX3NlbmROb3RpZmljYXRp
b24oc2VuZE5vdGlmaWNhdGlvbikKKyAgICAsIG1fc3RyZWFtU3RhdGUoU3RyZWFtQmVmb3JlU3Rh
cnRlZCkKKyAgICAsIG1fbG9hZE1hbnVhbGx5KGZhbHNlKQorICAgICwgbV9kZWxheURlbGl2ZXJ5
VGltZXIoKnRoaXMsICZQbHVnaW5TdHJlYW06OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKQorICAg
ICwgbV90ZW1wRmlsZUhhbmRsZShpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQorICAgICwgbV9w
bHVnaW5GdW5jcyhwbHVnaW5GdW5jcykKKyAgICAsIG1faW5zdGFuY2UoaW5zdGFuY2UpCisgICAg
LCBtX3F1aXJrcyhxdWlya3MpCit7CisgICAgQVNTRVJUKG1faW5zdGFuY2UpOworCisgICAgbV9z
dHJlYW0udXJsID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgbV9zdHJlYW0ucGRh
dGEgPSAwOworICAgIG1fc3RyZWFtLmVuZCA9IDA7CisgICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9
IDA7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKKyAgICBtX3N0cmVhbS5oZWFkZXJz
ID0gMDsKKworICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsKK30KKwor
UGx1Z2luU3RyZWFtOjp+UGx1Z2luU3RyZWFtKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0
ZSAhPSBTdHJlYW1TdGFydGVkKTsKKyAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAgIGZhc3RG
cmVlKChjaGFyKiltX3N0cmVhbS51cmwpOworCisgICAgc3RyZWFtcygpLnJlbW92ZSgmbV9zdHJl
YW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6c3RhcnQoKQoreworICAgIEFTU0VSVCghbV9s
b2FkTWFudWFsbHkpOworICAgIG1fbG9hZGVyID0gcmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPnNj
aGVkdWxlUGx1Z2luU3RyZWFtTG9hZChtX2ZyYW1lLCB0aGlzLCBtX3Jlc291cmNlUmVxdWVzdCk7
Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzdG9wKCkKK3sKKyAgICBtX3N0cmVhbVN0YXRlID0g
U3RyZWFtU3RvcHBlZDsKKworICAgIGlmIChtX2xvYWRNYW51YWxseSkgeworICAgICAgICBBU1NF
UlQoIW1fbG9hZGVyKTsKKworICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIg
PSBtX2ZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRlcigpOworICAgICAgICBBU1NF
UlQoZG9jdW1lbnRMb2FkZXIpOworCisgICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNMb2Fk
aW5nTWFpblJlc291cmNlKCkpCisgICAgICAgICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2VsTWFp
blJlc291cmNlTG9hZChtX2ZyYW1lLT5sb2FkZXIoKS5jYW5jZWxsZWRFcnJvcihtX3Jlc291cmNl
UmVxdWVzdCkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9sb2FkZXIp
IHsKKyAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOworICAgICAgICBtX2xvYWRlciA9IDA7Cisg
ICAgfQorCisgICAgbV9jbGllbnQgPSAwOworfQorCitzdGF0aWMgdWludDMyX3QgbGFzdE1vZGlm
aWVkRGF0ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBkb3VibGUg
bGFzdE1vZGlmaWVkID0gcmVzcG9uc2UubGFzdE1vZGlmaWVkKCk7CisgICAgaWYgKCFzdGQ6Omlz
ZmluaXRlKGxhc3RNb2RpZmllZCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGxh
c3RNb2RpZmllZCAqIDEwMDA7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzdGFydFN0cmVhbSgp
Cit7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisK
KyAgICBjb25zdCBVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNvdXJjZVJlc3BvbnNlLnVybCgpOwor
CisgICAgLy8gU29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0IHRoYXQgamF2YXNjcmlwdCBVUkxz
IGFyZSBwYXNzZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMgdGhlCisgICAgLy8gZm9ybWF0IHVz
ZWQgd2hlbiByZXF1ZXN0aW5nIHRoZSBVUkwuCisgICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0
KHJlc3BvbnNlVVJMKSkKKyAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXMocmVzcG9uc2VVUkwuc3RyaW5nKCkpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9zdHJlYW0udXJsID0gZmFzdFN0ckR1cChyZXNwb25zZVVSTC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIENTdHJpbmcgbWltZVR5cGVTdHIgPSBtX3Jl
c291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7CisKKyAgICBsb25nIGxvbmcgZXhwZWN0
ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0
aCgpOworCisgICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgeworICAgICAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgICAgIFN0cmluZyBzZXBhcmF0b3IgPSBB
U0NJSUxpdGVyYWwoIjogIik7CisKKyAgICAgICAgU3RyaW5nIHN0YXR1c0xpbmUgPSAiSFRUUCAi
ICsgU3RyaW5nOjpudW1iZXIobV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpICsg
IiBPS1xuIjsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3RhdHVzTGluZSk7CisKKyAg
ICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRz
KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFy
YXRvcik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgIH0KKworICAgICAg
ICBtX2hlYWRlcnMgPSBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOworCisgICAgICAg
IC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNzZWQpLCB0
aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAorICAgICAgICAvLyB3aGlj
aCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0IGtub3du
IGF0IHRoZSBtb21lbnQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NDcwNTk5PiB0cmFj
a3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXSB0
byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgorICAgICAgICBTdHJpbmcgY29udGVudEVuY29kaW5n
ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29u
dGVudEVuY29kaW5nKTsKKyAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcuaXNOdWxsKCkgJiYg
Y29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCisgICAgICAgICAgICBleHBlY3RlZENvbnRl
bnRMZW5ndGggPSAtMTsKKyAgICB9CisKKyAgICBtX3N0cmVhbS5oZWFkZXJzID0gbV9oZWFkZXJz
LmRhdGEoKTsKKyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubmRhdGEgPSB0
aGlzOworICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3RlZENvbnRlbnRMZW5ndGgsIDBMTCk7
CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbGFzdE1vZGlmaWVkRGF0ZShtX3Jlc291cmNl
UmVzcG9uc2UpOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7CisKKyAg
ICBtX3RyYW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKKyAgICBtX29mZnNldCA9IDA7CisgICAgbV9y
ZWFzb24gPSBXZWJSZWFzb25Ob25lOworCisgICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFtIGlmIGRl
c3Ryb3lzdHJlYW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFuZGxlcgor
ICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHByb3RlY3QodGhpcyk7CisKKyAgICAvLyBjYWxsaW5n
IGludG8gYSBwbHVnLWluIGNvdWxkIHJlc3VsdCBpbiByZS1lbnRyYW5jZSBpZiB0aGUgcGx1Zy1p
biB5aWVsZHMKKyAgICAvLyBjb250cm9sIHRvIHRoZSBzeXN0ZW0gKHJkYXI6Ly81NzQ0ODk5KS4g
cHJldmVudCB0aGlzIGJ5IGRlZmVycmluZyBmdXJ0aGVyCisgICAgLy8gbG9hZGluZyB3aGlsZSBj
YWxsaW5nIGludG8gdGhlIHBsdWctaW4uCisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xv
YWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVn
aW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVUeXBlKW1pbWVUeXBlU3RyLmRh
dGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKKyAgICBpZiAobV9sb2Fk
ZXIpCisgICAgICAgIG1fbG9hZGVyLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKyAgICAKKyAg
ICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwgdG8gbmV3c3RyZWFt
IHdlIHJldHVybgorICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikgeworICAg
ICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKG5wRXJyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFydGVkOworCisgICAgaWYgKG1fdHJh
bnNmZXJNb2RlID09IE5QX05PUk1BTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXRoID0g
b3BlblRlbXBvcmFyeUZpbGUoIldLUCIsIG1fdGVtcEZpbGVIYW5kbGUpOworCisgICAgLy8gU29t
ZXRoaW5nIHdlbnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRoZSBzdHJlYW0KKyAgICBpZiAoIWlz
SGFuZGxlVmFsaWQobV90ZW1wRmlsZUhhbmRsZSkpCisgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lT
dHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworfQorCitOUFAgUGx1Z2luU3RyZWFtOjpvd25lckZv
clN0cmVhbShOUFN0cmVhbSogc3RyZWFtKQoreworICAgIHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0
cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5Q
UmVhc29uIHJlYXNvbikKK3sKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90ZWN0KHRoaXMp
OworCisgICAgZGVzdHJveVN0cmVhbShyZWFzb24pOworICAgIHN0b3AoKTsKK30KKwordm9pZCBQ
bHVnaW5TdHJlYW06OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIG1fcmVh
c29uID0gcmVhc29uOworICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05FKSB7CisgICAgICAg
IC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVkCisgICAgICAgIGlm
IChtX2RlbGl2ZXJ5RGF0YSkKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7
CisgICAgfSBlbHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgp
ID4gMCkgeworICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3RyZWFtZWQsIGRv
bid0IGRlc3Ryb3kgdGhlIHN0cmVhbSBub3cuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ZGVzdHJveVN0cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGVzdHJveVN0cmVhbSgp
Cit7CisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpOworICAgIEFTU0VS
VCghbV9kZWxpdmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKTsKKworICAg
IGNsb3NlRmlsZShtX3RlbXBGaWxlSGFuZGxlKTsKKworICAgIGJvb2wgbmV3U3RyZWFtQ2FsbGVk
ID0gbV9zdHJlYW0ubmRhdGE7CisKKyAgICAvLyBQcm90ZWN0IGZyb20gZGVzdHJ1Y3Rpb24gaWY6
CisgICAgLy8gIE5QTl9EZXN0cm95U3RyZWFtIGlzIGNhbGxlZCBmcm9tIE5QUF9OZXdTdHJlYW0g
b3IKKyAgICAvLyAgUGx1Z2luU3RyZWFtQ2xpZW50OjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkg
cmVtb3ZlcyB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBwcm90
ZWN0KHRoaXMpOworCisgICAgaWYgKG5ld1N0cmVhbUNhbGxlZCkgeworICAgICAgICBpZiAobV9y
ZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1f
dHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1f
cGF0aC5pc051bGwoKSk7CisKKyAgICAgICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAg
ICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICAgICAgICAgIG1fcGx1
Z2luRnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcGF0aC51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgICAgICAgICBtX2xvYWRl
ci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9z
dHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKSB7CisgICAgICAgICAgICBpZiAobV9s
b2FkZXIpCisgICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7
CisKKyAgICAgICAgICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3Ry
ZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOworCisgICAgICAgICAgICBpZiAo
bV9sb2FkZXIpCisgICAgICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFs
c2UpOworCisgICAgICAgICAgICBMT0dfTlBFUlJPUihucEVycik7CisgICAgICAgIH0KKworICAg
ICAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fc2VuZE5vdGlmaWNh
dGlvbikgeworICAgICAgICAvLyBGbGFzaCA5IGNhbiBkZXJlZmVyZW5jZSBudWxsIGlmIHdlIGNh
bGwgTlBQX1VSTE5vdGlmeSB3aXRob3V0IGZpcnN0IGNhbGxpbmcgTlBQX05ld1N0cmVhbQorICAg
ICAgICAvLyBmb3IgcmVxdWVzdHMgbWFkZSB3aXRoIE5QTl9Qb3N0VVJMTm90aWZ5OyBzZWUgPHJk
YXI6Ly81NTg4ODA3PgorICAgICAgICBpZiAobV9sb2FkZXIpCisgICAgICAgICAgICBtX2xvYWRl
ci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICAgICAgaWYgKCFuZXdTdHJlYW1DYWxsZWQg
JiYgbV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1ZykgJiYKKyAg
ICAgICAgICAgIGVxdWFsSWdub3JpbmdDYXNlKG1fcmVzb3VyY2VSZXF1ZXN0Lmh0dHBNZXRob2Qo
KSwgIlBPU1QiKSkgeworICAgICAgICAgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7Cisg
ICAgICAgICAgICBtX3N0cmVhbS51cmwgPSAiIjsKKyAgICAgICAgICAgIG1fc3RyZWFtLm5vdGlm
eURhdGEgPSBtX25vdGlmeURhdGE7CisKKyAgICAgICAgICAgIHN0YXRpYyBjaGFyIGVtcHR5TWlt
ZVR5cGVbXSA9ICIiOworICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5z
dGFuY2UsIGVtcHR5TWltZVR5cGUsICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVyTW9kZSk7
CisgICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZt
X3N0cmVhbSwgbV9yZWFzb24pOworCisgICAgICAgICAgICAvLyBpbiBzdWNjZXNzZnVsIHJlcXVl
c3RzLCB0aGUgVVJMIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgZnJlZWQgaW4gb3VyCisg
ICAgICAgICAgICAvLyBkZXN0cnVjdG9yLCBzbyByZXNldCBpdCB0byAwCisgICAgICAgICAgICBt
X3N0cmVhbS51cmwgPSAwOworICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luRnVuY3MtPnVybG5v
dGlmeShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKKyAgICAgICAgaWYgKG1fbG9hZGVyKQor
ICAgICAgICAgICAgbV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOworICAgIH0KKwor
ICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOworCisgICAgaWYgKCFtX2xvYWRNYW51
YWxseSAmJiBtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnN0cmVhbURpZEZpbmlzaExvYWRp
bmcodGhpcyk7CisKKyAgICBpZiAoIW1fcGF0aC5pc051bGwoKSkKKyAgICAgICAgZGVsZXRlRmls
ZShtX3BhdGgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGVsYXlEZWxpdmVyeVRpbWVyRmly
ZWQoKQoreworICAgIGRlbGl2ZXJEYXRhKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpkZWxp
dmVyRGF0YSgpCit7CisgICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRhKTsKKyAgICAKKyAgICBpZiAo
bV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGNhbmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJjZUxvYWRlciBvbiBlcnJvciBzbyB3
ZSBkb24ndCByZWFjaCB0aGlzIGNhc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1f
c3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBpZiAoIW1fc3RyZWFt
Lm5kYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50MzJfdCB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKKyAgICBp
bnQzMl90IHRvdGFsQnl0ZXNEZWxpdmVyZWQgPSAwOworCisgICAgaWYgKG1fbG9hZGVyKQorICAg
ICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICB3aGlsZSAodG90YWxC
eXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgaW50MzJfdCBkZWxpdmVyeUJ5
dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9zdHJlYW0pOwor
CisgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKKyAgICAgICAgICAgIG1fZGVsYXlE
ZWxpdmVyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVz
LCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7CisgICAgICAgICAgICBpbnQzMl90
IGRhdGFMZW5ndGggPSBkZWxpdmVyeUJ5dGVzOworICAgICAgICAgICAgY2hhciogZGF0YSA9IG1f
ZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkOworCisgICAgICAgICAg
ICAvLyBXcml0ZSB0aGUgZGF0YQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2lu
RnVuY3MtPndyaXRlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9vZmZzZXQsIGRhdGFMZW5ndGgs
ICh2b2lkKilkYXRhKTsKKyAgICAgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDwgMCkgeworICAg
ICAgICAgICAgICAgIExPR19QTFVHSU5fTkVUX0VSUk9SKCk7CisgICAgICAgICAgICAgICAgaWYg
KG1fbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGlu
ZyhmYWxzZSk7CisgICAgICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19O
RVRXT1JLX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCBkYXRhTGVuZ3RoKTsK
KyAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgICAgICB0b3Rh
bEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7
CisKKyAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDApIHsKKyAgICAgICAgaWYgKHRvdGFs
Qnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAgICAgICAgICBpbnQgcmVtYWluaW5n
Qnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZDsKKyAgICAgICAgICAgIG1l
bW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIHRv
dGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsKKyAgICAgICAgICAgIG1fZGVsaXZl
cnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGlmIChtX3JlYXNv
biAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICAgICAgICAgIGRlc3Ryb3lTdHJlYW0oKTsKKyAg
ICAgICAgfQorICAgIH0gCit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtOjpzZW5kSmF2YVNjcmlwdFN0
cmVhbShjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykK
K3sKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJM
LCAidGV4dC9wbGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwgIiIpKTsKKworICAgIGlmICht
X3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghcmVzdWx0U3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGRpZFJlY2VpdmVEYXRhKDAsIHJl
c3VsdFN0cmluZy5kYXRhKCksIHJlc3VsdFN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGlmICht
X3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9sb2FkZXIgPSAwOworCisgICAgZGVzdHJveVN0cmVhbShyZXN1bHRTdHJpbmcu
aXNOdWxsKCkgPyBOUFJFU19ORVRXT1JLX0VSUiA6IE5QUkVTX0RPTkUpOworfQorCit2b2lkIFBs
dWdpblN0cmVhbTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
KiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VS
VF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0cmVh
bVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgbV9yZXNvdXJjZVJlc3BvbnNl
ID0gcmVzcG9uc2U7CisKKyAgICBzdGFydFN0cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0cmVh
bTo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwg
bG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1T
dGFydGVkKTsKKworICAgIC8vIElmIHRoZSBwbHVnLWluIGNhbmNlbHMgdGhlIHN0cmVhbSBpbiBk
ZWxpdmVyRGF0YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKKyAgICAvLyBzbyBwcm90ZWN0IGl0IGhl
cmUuCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKKworICAgIGlmICht
X3RyYW5zZmVyTW9kZSAhPSBOUF9BU0ZJTEVPTkxZKSB7CisgICAgICAgIGlmICghbV9kZWxpdmVy
eURhdGEpCisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8VmVj
dG9yPGNoYXI+PigpOworCisgICAgICAgIGludCBvbGRTaXplID0gbV9kZWxpdmVyeURhdGEtPnNp
emUoKTsKKyAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsK
KyAgICAgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBs
ZW5ndGgpOworCisgICAgICAgIGRlbGl2ZXJEYXRhKCk7CisgICAgfQorCisgICAgaWYgKG1fc3Ry
ZWFtU3RhdGUgIT0gU3RyZWFtU3RvcHBlZCAmJiBpc0hhbmRsZVZhbGlkKG1fdGVtcEZpbGVIYW5k
bGUpKSB7CisgICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSB3cml0ZVRvRmlsZShtX3RlbXBGaWxl
SGFuZGxlLCBkYXRhLCBsZW5ndGgpOworICAgICAgICBpZiAoYnl0ZXNXcml0dGVuICE9IGxlbmd0
aCkKKyAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIp
OworICAgIH0KK30KKwordm9pZCBQbHVnaW5TdHJlYW06OmRpZEZhaWwoTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgQVNTRVJU
X1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisKKyAgICBMT0dfUExVR0lOX05F
VF9FUlJPUigpOworCisgICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0IGluIG91ciBiZWlu
ZyBkZWxldGVkCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKKworICAg
IGRlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworCisgICAgbV9sb2FkZXIgPSAwOwor
fQorCit2b2lkIFBsdWdpblN0cmVhbTo6ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlciogbG9hZGVyKQoreworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIg
PT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0YXJ0ZWQp
OworCisgICAgLy8gZGVzdHJveVN0cmVhbSBjYW4gcmVzdWx0IGluIG91ciBiZWluZyBkZWxldGVk
CisgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gcHJvdGVjdCh0aGlzKTsKKworICAgIGRlc3Ryb3lT
dHJlYW0oTlBSRVNfRE9ORSk7CisKKyAgICBtX2xvYWRlciA9IDA7Cit9CisKK2Jvb2wgUGx1Z2lu
U3RyZWFtOjp3YW50c0FsbFN0cmVhbXMoKSBjb25zdAoreworICAgIGlmICghbV9wbHVnaW5GdW5j
cy0+Z2V0dmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZvaWQqIHJlc3VsdCA9
IDA7CisgICAgaWYgKG1fcGx1Z2luRnVuY3MtPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVn
aW5XYW50c0FsbE5ldHdvcmtTdHJlYW1zLCAmcmVzdWx0KSAhPSBOUEVSUl9OT19FUlJPUikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHJlc3VsdCAhPSAwOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblN0cmVhbS5oIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMDAzMmM0
YzE5MDQ1MTIyZjU2YWNlZjYzMmU1NzgxOGExNWE5YmNmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5TdHJlYW0uaApAQCAtMCwwICsxLDEyMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFBsdWdpblN0cmVhbV9oCisjZGVmaW5lIFBsdWdpblN0cmVhbV9oCisKKyNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSAiTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5RdWlya1NldC5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIFBs
dWdpblN0cmVhbTsKKworICAgIGVudW0gUGx1Z2luU3RyZWFtU3RhdGUgeyBTdHJlYW1CZWZvcmVT
dGFydGVkLCBTdHJlYW1TdGFydGVkLCBTdHJlYW1TdG9wcGVkIH07CisKKyAgICBjbGFzcyBQbHVn
aW5TdHJlYW1DbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+UGx1Z2luU3Ry
ZWFtQ2xpZW50KCkge30KKyAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRp
bmcoUGx1Z2luU3RyZWFtKikge30KKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luU3RyZWFtIDog
cHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luU3RyZWFtPiwgcHJpdmF0ZSBOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQbHVnaW5TdHJlYW0+IGNyZWF0ZShQbHVnaW5TdHJlYW1DbGllbnQqIGNsaWVudCwgRnJhbWUq
IGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNh
dGlvbiwgdm9pZCogbm90aWZ5RGF0YSwgY29uc3QgTlBQbHVnaW5GdW5jcyogZnVuY3Rpb25zLCBO
UFAgaW5zdGFuY2UsIGNvbnN0IFBsdWdpblF1aXJrU2V0JiBxdWlya3MpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luU3RyZWFtKGNsaWVudCwgZnJhbWUs
IHJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEsIGZ1bmN0aW9ucywgaW5zdGFu
Y2UsIHF1aXJrcykpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgflBsdWdpblN0cmVhbSgp
OworICAgICAgICAKKyAgICAgICAgdm9pZCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsK
KworICAgICAgICB2b2lkIHN0YXJ0U3RyZWFtKCk7CisKKyAgICAgICAgdm9pZCBzZXRMb2FkTWFu
dWFsbHkoYm9vbCBsb2FkTWFudWFsbHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7
IH0KKworICAgICAgICB2b2lkIHNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IFVSTCYgcmVxdWVz
dFVSTCwgY29uc3QgV1RGOjpDU3RyaW5nJiByZXN1bHRTdHJpbmcpOworICAgICAgICB2b2lkIGNh
bmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOworCisgICAgICAgIHN0YXRpYyBOUFAgb3du
ZXJGb3JTdHJlYW0oTlBTdHJlYW0qKTsKKworICAgICAgICAvLyBOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlckNsaWVudAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
Kik7CisgICAgICAgIHZpcnR1YWwgYm9vbCB3YW50c0FsbFN0cmVhbXMoKSBjb25zdDsKKworICAg
IHByaXZhdGU6CisgICAgICAgIFBsdWdpblN0cmVhbShQbHVnaW5TdHJlYW1DbGllbnQqLCBGcmFt
ZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCog
bm90aWZ5RGF0YSwgY29uc3QgTlBQbHVnaW5GdW5jcyosIE5QUCBpbnN0YW5jZSwgY29uc3QgUGx1
Z2luUXVpcmtTZXQmKTsKKworICAgICAgICB2b2lkIGRlbGl2ZXJEYXRhKCk7CisgICAgICAgIHZv
aWQgZGVzdHJveVN0cmVhbShOUFJlYXNvbik7CisgICAgICAgIHZvaWQgZGVzdHJveVN0cmVhbSgp
OworCisgICAgICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKKyAgICAgICAg
UmVzb3VyY2VSZXNwb25zZSBtX3Jlc291cmNlUmVzcG9uc2U7CisKKyAgICAgICAgUGx1Z2luU3Ry
ZWFtQ2xpZW50KiBtX2NsaWVudDsKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIFJl
ZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIHZvaWQq
IG1fbm90aWZ5RGF0YTsKKyAgICAgICAgYm9vbCBtX3NlbmROb3RpZmljYXRpb247CisgICAgICAg
IFBsdWdpblN0cmVhbVN0YXRlIG1fc3RyZWFtU3RhdGU7CisgICAgICAgIGJvb2wgbV9sb2FkTWFu
dWFsbHk7CisKKyAgICAgICAgVGltZXIgbV9kZWxheURlbGl2ZXJ5VGltZXI7CisgICAgICAgIHZv
aWQgZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
VmVjdG9yPGNoYXI+PiBtX2RlbGl2ZXJ5RGF0YTsKKworICAgICAgICBQbGF0Zm9ybUZpbGVIYW5k
bGUgbV90ZW1wRmlsZUhhbmRsZTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBtX3Bs
dWdpbkZ1bmNzOworICAgICAgICBOUFAgbV9pbnN0YW5jZTsKKyAgICAgICAgdWludDE2X3QgbV90
cmFuc2Zlck1vZGU7CisgICAgICAgIGludDMyX3QgbV9vZmZzZXQ7CisgICAgICAgIENTdHJpbmcg
bV9oZWFkZXJzOworICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBOUFJlYXNvbiBtX3Jl
YXNvbjsKKyAgICAgICAgTlBTdHJlYW0gbV9zdHJlYW07CisgICAgICAgIFBsdWdpblF1aXJrU2V0
IG1fcXVpcmtzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGYwNDA4
ODIzZTAzMzMzZWE5YTQ5ZGE5MmEyOGJlZDM0N2ViNjRkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMCwwICsxLDE0ODkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR2lyaXNo
IFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAi
UGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9CcmlkZ2VKU0MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvQ29va2llSmFyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0VsZW1l
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZFJlcXVlc3QuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxv
YWRlckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVUcmVlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
UGx1Z0luRWxlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck5hbWVzLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9JbWFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01CaW5kaW5n
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
S2V5Ym9hcmRFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luTWFpblRocmVh
ZFNjaGVkdWxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlckJveC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TZWN1cml0eU9yaWdpbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9X
aGVlbEV2ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9jX2luc3RhbmNlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9ucHJ1bnRpbWVfaW1wbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvcnVudGltZV9yb290
Lmg+CisjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHd0
Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBP
UyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpbmNsdWRlICJQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyV2luLmgiCisjZW5kaWYKKwordXNpbmcgSlNDOjpFeGVjU3RhdGU7
Cit1c2luZyBKU0M6OkpTTG9jazsKK3VzaW5nIEpTQzo6SlNPYmplY3Q7Cit1c2luZyBKU0M6OkpT
VmFsdWU7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKwordXNpbmcgc3RkOjpt
aW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworc3RhdGljIGludCBzX2NhbGxpbmdQbHVnaW47CisK
K3R5cGVkZWYgSGFzaE1hcDxOUFAsIFBsdWdpblZpZXcqPiBJbnN0YW5jZU1hcDsKKworc3RhdGlj
IEluc3RhbmNlTWFwJiBpbnN0YW5jZU1hcCgpCit7CisgICAgc3RhdGljIEluc3RhbmNlTWFwJiBt
YXAgPSAqbmV3IEluc3RhbmNlTWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBTdHJp
bmcgc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IFVSTCYgdXJsKQoreworICAgIGlm
ICghcHJvdG9jb2xJc0phdmFTY3JpcHQodXJsKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgLy8gVGhpcyByZXR1cm5zIGFuIHVuZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoMTEpKTsKK30KKwor
UGx1Z2luVmlldyogUGx1Z2luVmlldzo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CisKK3ZvaWQg
UGx1Z2luVmlldzo6cG9wUG9wdXBzU3RhdGVUaW1lckZpcmVkKCkKK3sKKyAgICBwb3BQb3B1cHNF
bmFibGVkU3RhdGUoKTsKK30KKworSW50UmVjdCBQbHVnaW5WaWV3Ojp3aW5kb3dDbGlwUmVjdCgp
IGNvbnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KKyAgICBJ
bnRSZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBvdXIgZWxl
bWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBm
cmFtZSB2aWV3LgorICAgIEZyYW1lVmlldyogcGFyZW50VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS52aWV3KCk7CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHBhcmVudFZpZXctPndpbmRvd0Ns
aXBSZWN0Rm9yRnJhbWVPd25lcihtX2VsZW1lbnQsIHRydWUpKTsKKworICAgIHJldHVybiBjbGlw
UmVjdDsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLnByaW50aW5nKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9IGZyYW1lUmVjdCgpKQorICAgICAgICBXaWRn
ZXQ6OnNldEZyYW1lUmVjdChyZWN0KTsKKworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOworCisj
aWYgT1MoV0lORE9XUykKKyAgICAvLyBPbiBXaW5kb3dzIGFsd2F5cyBjYWxsIHBsdWdpbiB0byBj
aGFuZ2UgZ2VvbWV0cnkuCisgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOworI2VsaWYgZGVmaW5l
ZChYUF9VTklYKQorICAgIC8vIE9uIFVuaXgsIG11bHRpcGxlIGNhbGxzIHRvIHNldE5QV2luZG93
KCkgaW4gd2luZG93ZWQgbW9kZSBjYXVzZXMgRmxhc2ggdG8gY3Jhc2gKKyAgICBpZiAobV9tb2Rl
ID09IE5QX0ZVTEwgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KHJl
Y3QpOworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZnJhbWVSZWN0c0NoYW5nZWQoKQor
eworICAgIHVwZGF0ZVBsdWdpbldpZGdldCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmNsaXBS
ZWN0Q2hhbmdlZCgpCit7CisgICAgdXBkYXRlUGx1Z2luV2lkZ2V0KCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4g
fHwgbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQcm90ZWN0IHRoZSBw
bHVnLWluIGZyb20gZGVsZXRpb24gd2hpbGUgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50LgorICAgIFJl
ZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KHRoaXMpOworCisgICAgaWYgKGV2ZW50LT5pc01vdXNl
RXZlbnQoKSkKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50
Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAg
ICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50
KSk7CisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkud2hlZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5tb3VzZXdoZWVsRXZlbnQpCisgICAgICAgIGhhbmRsZVdoZWVsRXZlbnQoc3RhdGljX2Nhc3Q8
V2hlZWxFdmVudCo+KGV2ZW50KSk7CisjZW5kaWYKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2ZW50KQorICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aGUgcGx1Zy1pbiBoYXMgaGFuZGxl
ZCBtb3VzZWRvd24gZXZlbnQgYnkgZGlzcGxheWluZyBhIGNvbnRleHQgbWVudSwgc28gd2UgbmV2
ZXIgd2FudCBXZWJLaXQgdG8gc2hvdyBhIGRlZmF1bHQgb25lLgorI2lmIGRlZmluZWQoWFBfVU5J
WCkgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZWxzZSBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuZm9jdXNvdXRFdmVudCkKKyAgICAgICAgaGFuZGxlRm9jdXNP
dXRFdmVudCgpOworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZv
Y3VzaW5FdmVudCkKKyAgICAgICAgaGFuZGxlRm9jdXNJbkV2ZW50KCk7CisjZW5kaWYKK30KKwor
dm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlhbGl6ZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlm
ICghbV9wbHVnaW4pIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nh
bk5vdEZpbmRQbHVnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9HKFBsdWdp
bnMsICJQbHVnaW5WaWV3Ojppbml0KCk6IEluaXRpYWxpemluZyBwbHVnLWluICclcyciLCBtX3Bs
dWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgp
KSB7CisgICAgICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0
dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFz
dGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5T
dGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9z
dGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK2Jvb2wgUGx1Z2lu
Vmlldzo6c3RhcnRPckFkZFRvVW5zdGFydGVkTGlzdCgpCit7CisgICAgaWYgKCFtX3BhcmVudEZy
YW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIG9ubHkgZGVs
YXkgc3RhcnRpbmcgdGhlIHBsdWctaW4gaWYgd2UncmUgZ29pbmcgdG8ga2ljayBvZmYgdGhlIGxv
YWQKKyAgICAvLyBvdXJzZWx2ZXMuIE90aGVyd2lzZSwgdGhlIGxvYWRlciB3aWxsIHRyeSB0byBk
ZWxpdmVyIGRhdGEgYmVmb3JlIHdlJ3ZlCisgICAgLy8gc3RhcnRlZCB0aGUgcGx1Zy1pbi4KKyAg
ICBpZiAoIW1fbG9hZE1hbnVhbGx5ICYmICFtX3BhcmVudEZyYW1lLT5wYWdlKCktPmNhblN0YXJ0
TWVkaWEoKSkgeworICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5hZGRNZWRpYUNh
blN0YXJ0TGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1faXNXYWl0aW5nVG9TdGFydCA9IHRydWU7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBzdGFydCgpOworfQor
Citib29sIFBsdWdpblZpZXc6OnN0YXJ0KCkKK3sKKyAgICBpZiAobV9pc1N0YXJ0ZWQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNXYWl0aW5nVG9TdGFydCA9IGZhbHNlOworCisg
ICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkucmVnaXN0ZXJQbHVnaW4o
bV9pbnN0YW5jZSk7CisKKyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVChtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIHsKKyAg
ICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG5wRXJy
ID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS51
dGY4KCkuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5h
bWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxz
ZSk7CisgICAgICAgIExPR19OUEVSUk9SKG5wRXJyKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0
Q3VycmVudFBsdWdpblZpZXcoMCk7CisgICAgfQorCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05P
X0VSUk9SKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdp
bjsKKyAgICAgICAgUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6c2NoZWR1bGVyKCkudW5yZWdp
c3RlclBsdWdpbihtX2luc3RhbmNlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgpICYmICFt
X2xvYWRNYW51YWxseSkgeworICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVl
c3QobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgICAg
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7
CisgICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1fdXJs
KTsKKyAgICAgICAgbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7CisgICAgfQorCisg
ICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7CisKKyAgICBpZiAo
IXBsYXRmb3JtU3RhcnQoKSkKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RM
b2FkUGx1Z2luOworCisgICAgaWYgKG1fc3RhdHVzICE9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6bWVkaWFDYW5TdGFydCgpCit7CisgICAgQVNTRVJUKCFtX2lzU3Rh
cnRlZCk7CisgICAgaWYgKCFzdGFydCgpKQorICAgICAgICBwYXJlbnRGcmFtZSgpLT5sb2FkZXIo
KS5jbGllbnQoKS5kaXNwYXRjaERpZEZhaWxUb1N0YXJ0UGx1Z2luKHRoaXMpOworfQorCitQbHVn
aW5WaWV3Ojp+UGx1Z2luVmlldygpCit7CisgICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3Ojp+
UGx1Z2luVmlldygpIik7CisKKyAgICBBU1NFUlQoIW1fbGlmZVN1cHBvcnRUaW1lci5pc0FjdGl2
ZSgpKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBwbHVnLWluLCB3ZSdsbCBy
ZXR1cm4gZWFybHkgaW4gb3VyIGNvbnN0cnVjdG9yLCBhbmQKKyAgICAvLyBtX2luc3RhbmNlIHdp
bGwgYmUgMC4KKyAgICBpZiAobV9pbnN0YW5jZSkKKyAgICAgICAgaW5zdGFuY2VNYXAoKS5yZW1v
dmUobV9pbnN0YW5jZSk7CisKKyAgICBpZiAobV9pc1dhaXRpbmdUb1N0YXJ0KQorICAgICAgICBt
X3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5yZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIodGhp
cyk7CisKKyAgICBzdG9wKCk7CisKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbU5hbWVzLCBt
X3BhcmFtQ291bnQpOworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtVmFsdWVzLCBtX3BhcmFt
Q291bnQpOworCisgICAgcGxhdGZvcm1EZXN0cm95KCk7CisKKyAgICBtX3BhcmVudEZyYW1lLT5z
Y3JpcHQoKS5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAgIGlmICht
X3BsdWdpbiAmJiAhKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRV
bmxvYWRQbHVnaW4pKSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OnN0b3AoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c3RvcCgpOiBTdG9wcGluZyBwbHVn
LWluICclcyciLCBtX3BsdWdpbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgSGFzaFNl
dDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7CisgICAgSGFzaFNl
dDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1zLmVuZCgpOwor
ICAgIGZvciAoSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBpdCA9IHN0
cmVhbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5zdG9wKCk7
CisgICAgICAgIGRpc2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0KKworICAgIEFT
U0VSVChtX3N0cmVhbXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVkID0gZmFsc2U7CisK
KyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vblZNKCkpOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjaWYg
ZGVmaW5lZChYUF9XSU4pICYmICFQTEFURk9STShHVEspCisgICAgLy8gVW5zdWJjbGFzcyB0aGUg
d2luZG93CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBXTkRQUk9DIGN1cnJlbnRX
bmRQcm9jID0gKFdORFBST0MpR2V0V2luZG93TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCBHV0xQX1dORFBST0MpOworCisgICAgICAgIGlmIChjdXJyZW50V25kUHJvYyA9PSBQbHVnaW5W
aWV3V25kUHJvYykKKyAgICAgICAgICAgIFNldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgR1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpbV9wbHVnaW5XbmRQcm9jKTsKKyAgICB9
CisjZW5kaWYgLy8gIWRlZmluZWQoWFBfV0lOKSB8fCBQTEFURk9STShHVEspCisjZW5kaWYgLy8g
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisKKyNpZiAhZGVmaW5lZChYUF9NQUNPU1gpCisg
ICAgLy8gQ2xlYXIgdGhlIHdpbmRvdworICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKworICAg
IGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93ICYmICFtX3BsdWdpbi0+cXVp
cmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJv
eSkpIHsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7Cisg
ICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcoMCk7CisgICAgfQorCisjaWZkZWYgWFBfVU5JWAorICAgIGRlbGV0ZSBzdGF0aWNfY2Fz
dDxOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0Kj4obV9ucFdpbmRvdy53c19pbmZvKTsKKyAgICBt
X25wV2luZG93LndzX2luZm8gPSAwOworI2VuZGlmCisKKyNlbmRpZiAvLyAhZGVmaW5lZChYUF9N
QUNPU1gpCisKKyAgICBQbHVnaW5NYWluVGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS51bnJl
Z2lzdGVyUGx1Z2luKG1faW5zdGFuY2UpOworCisgICAgTlBTYXZlZERhdGEqIHNhdmVkRGF0YSA9
IDA7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgc2V0
Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgJnNhdmVkRGF0YSk7CisgICAgc2V0Q2FsbGlu
Z1BsdWdpbihmYWxzZSk7CisgICAgTE9HX05QRVJST1IobnBFcnIpOworICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgaWYgKHNhdmVkRGF0YSkgeworICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBzYXZl
IHRoaXMgZGF0YSBpbnN0ZWFkIG9mIGp1c3QgZGlzY2FyZGluZyBpdAorICAgICAgICBpZiAoc2F2
ZWREYXRhLT5idWYpCisgICAgICAgICAgICBOUE5fTWVtRnJlZShzYXZlZERhdGEtPmJ1Zik7Cisg
ICAgICAgIE5QTl9NZW1GcmVlKHNhdmVkRGF0YSk7CisgICAgfQorI2VuZGlmCisKKyAgICBtX2lu
c3RhbmNlLT5wZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdp
blZpZXcoUGx1Z2luVmlldyogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3
ID0gcGx1Z2luVmlldzsKK30KKworUGx1Z2luVmlldyogUGx1Z2luVmlldzo6Y3VycmVudFBsdWdp
blZpZXcoKQoreworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMg
Y2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5n
IGNzdHIgPSBzdHIudXRmOCgpOworICAgIGNvbnN0IHNpemVfdCBjc3RyTGVuZ3RoID0gY3N0ci5s
ZW5ndGgoKTsKKyAgICBjaGFyKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYXN0
TWFsbG9jKGNzdHJMZW5ndGggKyAxKSk7CisKKyAgICBtZW1jcHkocmVzdWx0LCBjc3RyLmRhdGEo
KSwgY3N0ckxlbmd0aCk7CisgICAgcmVzdWx0W2NzdHJMZW5ndGhdID0gJ1wwJzsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGVyZm9ybVJlcXVlc3QoUGx1Z2lu
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBkb24ndCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlz
IG5vIGxvbmdlciBwYXJ0IG9mIGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKKyAgICAvLyBkaXNw
bGF5ZWQgdW5sZXNzIHRoZSBsb2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdp
bi4KKyAgICBjb25zdCBTdHJpbmcmIHRhcmdldEZyYW1lTmFtZSA9IHJlcXVlc3QtPmZyYW1lTG9h
ZFJlcXVlc3QoKS5mcmFtZU5hbWUoKTsKKyAgICBpZiAobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCku
ZG9jdW1lbnRMb2FkZXIoKSAhPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVu
dExvYWRlcigpICYmICh0YXJnZXRGcmFtZU5hbWUuaXNOdWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+
dHJlZSgpLmZpbmQodGFyZ2V0RnJhbWVOYW1lKSAhPSBtX3BhcmVudEZyYW1lKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0
KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0
U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAgVXNlckdlc3R1cmVJbmRp
Y2F0b3IgZ2VzdHVyZUluZGljYXRvcihyZXF1ZXN0LT5zaG91bGRBbGxvd1BvcHVwcygpID8gRGVm
aW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSA6IFBvc3NpYmx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKKworICAgIGlmIChqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICAvLyBpZiB0aGlz
IGlzIG5vdCBhIHRhcmdldGVkIHJlcXVlc3QsIGNyZWF0ZSBhIHN0cmVhbSBmb3IgaXQuIG90aGVy
d2lzZSwKKyAgICAgICAgLy8ganVzdCBwYXNzIGl0IG9mZiB0byB0aGUgbG9hZGVyCisgICAgICAg
IGlmICh0YXJnZXRGcmFtZU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UGx1
Z2luU3RyZWFtPiBzdHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBtX3BhcmVudEZy
YW1lLmdldCgpLCByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCks
IHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpLCBwbHVn
aW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9wbHVnaW4tPnF1aXJrcygpKTsKKyAg
ICAgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgICAgIHN0cmVhbS0+c3Rh
cnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgZnJh
bWUgaXMgb3VyIGZyYW1lLCB3ZSBjb3VsZCBkZXN0cm95IHRoZQorICAgICAgICAgICAgLy8gUGx1
Z2luVmlldywgc28gd2UgcHJvdGVjdCBpdC4gPHJkYXI6Ly9wcm9ibGVtLzY5OTEyNTE+CisgICAg
ICAgICAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdCh0aGlzKTsKKworICAgICAgICAgICAg
RnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3QobV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpKTsKKyAgICAgICAgICAgIGZy
YW1lUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0RnJhbWVOYW1lKTsKKyAgICAgICAgICAgIGZy
YW1lUmVxdWVzdC5zZXRTaG91bGRDaGVja05ld1dpbmRvd1BvbGljeSh0cnVlKTsKKyAgICAgICAg
ICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLmxvYWQoZnJhbWVSZXF1ZXN0KTsKKworICAgICAg
ICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBz
ZW50IHdoZW4gdGhlIGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgICAgICBp
ZiAocmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgICAgICAgICAgICAgSlNDOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpjb21tb25W
TSgpKTsKKyAgICAgICAgICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICAg
ICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVx
dWVzdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3Rp
ZnlEYXRhKCkpOworICAgICAgICAgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAg
ICAgICAgICAgICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJn
ZXRlZCBKYXZhU2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRo
YXQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJl
ZW4gbWFkZSBzdXJlIGluIDo6bG9hZC4KKyAgICBBU1NFUlQodGFyZ2V0RnJhbWVOYW1lLmlzRW1w
dHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCkuZmluZCh0YXJnZXRGcmFtZU5hbWUpID09IG1f
cGFyZW50RnJhbWUpOworICAgIAorICAgIC8vIEV4ZWN1dGluZyBhIHNjcmlwdCBjYW4gY2F1c2Ug
dGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlc3Ryb3llZCwgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0
byBpdC4KKyAgICBSZWZQdHI8UGx1Z2luVmlldz4gcHJvdGVjdG9yKHRoaXMpOworICAgIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIHJlc3VsdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmV4ZWN1
dGVTY3JpcHQoanNTdHJpbmcsIHJlcXVlc3QtPnNob3VsZEFsbG93UG9wdXBzKCkpOworCisgICAg
aWYgKHRhcmdldEZyYW1lTmFtZS5pc051bGwoKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0U3Ry
aW5nOworCisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1fcGFyZW50RnJh
bWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwor
ICAgICAgICBDU3RyaW5nIGNzdHI7CisgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RyaW5nKHNjcmlw
dFN0YXRlLCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAgY3N0ciA9IHJlc3VsdFN0cmluZy51
dGY4KCk7CisKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gc3RyZWFtID0gUGx1Z2luU3Ry
ZWFtOjpjcmVhdGUodGhpcywgbV9wYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVzdC0+ZnJhbWVMb2Fk
UmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCks
IHJlcXVlc3QtPm5vdGlmeURhdGEoKSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNl
KCksIG1fcGx1Z2luLT5xdWlya3MoKSk7CisgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsK
KyAgICAgICAgc3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXF1ZXN0VVJMLCBjc3RyKTsK
KyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQoKQoreworICAg
IEFTU0VSVCghbV9yZXF1ZXN0cy5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV9pc0phdmFTY3Jp
cHRQYXVzZWQpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+IHJlcXVlc3Qg
PSBXVEY6Om1vdmUobV9yZXF1ZXN0c1swXSk7CisgICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7Cisg
ICAgCisgICAgLy8gU2NoZWR1bGUgYSBuZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3Jt
UmVxdWVzdCBzaW5jZSB0aGUgY2FsbCB0bworICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBjYXVz
ZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVsZXRlZC4KKyAgICBpZiAoIW1fcmVxdWVzdHMuaXNF
bXB0eSgpKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBw
ZXJmb3JtUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzY2hl
ZHVsZVJlcXVlc3Qoc3RkOjp1bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+IHJlcXVlc3QpCit7Cisg
ICAgbV9yZXF1ZXN0cy5hcHBlbmQoV1RGOjptb3ZlKHJlcXVlc3QpKTsKKworICAgIGlmICghbV9p
c0phdmFTY3JpcHRQYXVzZWQpCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
IGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0
YSkKK3sKKyAgICBBU1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRw
TWV0aG9kKCkgPT0gIkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5o
dHRwTWV0aG9kKCkgPT0gIlBPU1QiKTsKKworICAgIFVSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIAorICAgIGlmICh1cmwuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9VUkw7CisKKyAgICAvLyBEb24ndCBhbGxvdyBy
ZXF1ZXN0cyB0byBiZSBtYWRlIHdoZW4gdGhlIGRvY3VtZW50IGxvYWRlciBpcyBzdG9wcGluZyBh
bGwgbG9hZGVycy4KKyAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBpZiAoIWxvYWRlciB8fCBsb2FkZXItPmlz
U3RvcHBpbmcoKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBj
b25zdCBTdHJpbmcmIHRhcmdldEZyYW1lTmFtZSA9IGZyYW1lTG9hZFJlcXVlc3QuZnJhbWVOYW1l
KCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVy
bCk7CisKKyAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIC8vIFJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxs
YSBkb2VzLgorICAgICAgICBpZiAoIW1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLmNhbkV4ZWN1dGVT
Y3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9HRU5FUklDX0VSUk9SOworCisgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5
IGFsbG93IEpTIHJlcXVlc3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMg
dGhlIHBsdWctaW4uCisgICAgICAgIGlmICghdGFyZ2V0RnJhbWVOYW1lLmlzTnVsbCgpICYmIG1f
cGFyZW50RnJhbWUtPnRyZWUoKS5maW5kKHRhcmdldEZyYW1lTmFtZSkgIT0gbV9wYXJlbnRGcmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgIH0gZWxzZSBp
ZiAoIW1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkRpc3Bs
YXkodXJsKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBzY2hl
ZHVsZVJlcXVlc3Qoc3RkOjptYWtlX3VuaXF1ZTxQbHVnaW5SZXF1ZXN0PihmcmFtZUxvYWRSZXF1
ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBhcmVQb3B1cHNBbGxvd2VkKCkpKTsK
KworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworc3RhdGljIFVSTCBtYWtlVVJMKGNv
bnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7CisgICAg
U3RyaW5nIHVybFN0cmluZyA9IHJlbGF0aXZlVVJMU3RyaW5nOworCisgICAgLy8gU3RyaXAgcmV0
dXJuIGNoYXJhY3RlcnMuCisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXG4nLCAi
Iik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXHInLCAiIik7CisKKyAgICBy
ZXR1cm4gVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6
Z2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBu
b3RpZnlEYXRhKQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIGZyYW1lTG9h
ZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50
KCktPmJhc2VVUkwoKSwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0
LCB0cnVlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRVUkwoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVz
dCBmcmFtZUxvYWRSZXF1ZXN0KG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCkpOworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIp
OworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwo
bV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpKTsKKworICAgIHJldHVy
biBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30KKworTlBFcnJvciBQbHVnaW5W
aWV3Ojpwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1
aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEpCit7CisgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxl
LCBub3RpZnlEYXRhLCB0cnVlLCB0cnVlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpwb3N0
VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNv
bnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7CisgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25s
eSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2lu
ZyBhIGZpbGUuCisgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBm
aWxlLCAwLCBmYWxzZSwgZmlsZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6bmV3U3RyZWFt
KE5QTUlNRVR5cGUsIGNvbnN0IGNoYXIqIC8qIHRhcmdldCAqLywgTlBTdHJlYW0qKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7Cit9CisKK2ludDMyX3QgUGx1Z2luVmlldzo6d3JpdGUoTlBTdHJlYW0q
LCBpbnQzMl90IC8qIGxlbiAqLywgdm9pZCogLyogYnVmZmVyICovKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJy
b3IgUGx1Z2luVmlldzo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiBy
ZWFzb24pCit7CisgICAgaWYgKCFzdHJlYW0gfHwgUGx1Z2luU3RyZWFtOjpvd25lckZvclN0cmVh
bShzdHJlYW0pICE9IG1faW5zdGFuY2UpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX0lO
U1RBTkNFX0VSUk9SOworCisgICAgUGx1Z2luU3RyZWFtKiBicm93c2VyU3RyZWFtID0gc3RhdGlj
X2Nhc3Q8UGx1Z2luU3RyZWFtKj4oc3RyZWFtLT5uZGF0YSk7CisgICAgYnJvd3NlclN0cmVhbS0+
Y2FuY2VsQW5kRGVzdHJveVN0cmVhbShyZWFzb24pOworCisgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOworfQorCit2b2lkIFBsdWdpblZpZXc6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQor
eworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBw
YWdlLT5jaHJvbWUoKS5zZXRTdGF0dXNiYXJUZXh0KG1fcGFyZW50RnJhbWUuZ2V0KCksIFN0cmlu
Zzo6ZnJvbVVURjgobWVzc2FnZSkpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVl
KE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBMT0coUGx1Z2lucywg
IlBsdWdpblZpZXc6OnNldFZhbHVlKCVzKTogIiwgcHJldHR5TmFtZUZvck5QUFZhcmlhYmxlKHZh
cmlhYmxlLCB2YWx1ZSkuZGF0YSgpKTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBj
YXNlIE5QUFZwbHVnaW5XaW5kb3dCb29sOgorICAgICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgIGNhc2UgTlBQVnBsdWdpblRyYW5z
cGFyZW50Qm9vbDoKKyAgICAgICAgbV9pc1RyYW5zcGFyZW50ID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICBjYXNlIE5Q
UFZwbHVnaW5EcmF3aW5nTW9kZWw6IHsKKyAgICAgICAgLy8gQ2FuIG9ubHkgc2V0IGRyYXdpbmcg
bW9kZWwgaW5zaWRlIE5QUF9OZXcoKQorICAgICAgICBpZiAodGhpcyAhPSBjdXJyZW50UGx1Z2lu
VmlldygpKQorICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAg
ICBOUERyYXdpbmdNb2RlbCBuZXdEcmF3aW5nTW9kZWwgPSBOUERyYXdpbmdNb2RlbCh1aW50cHRy
X3QodmFsdWUpKTsKKyAgICAgICAgc3dpdGNoIChuZXdEcmF3aW5nTW9kZWwpIHsKKyAgICAgICAg
Y2FzZSBOUERyYXdpbmdNb2RlbENvcmVHcmFwaGljczoKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgY2FzZSBOUERyYXdpbmdNb2RlbENvcmVBbmltYXRpb246Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBhc2tlZCBm
b3IgdW5zdXBwb3J0ZWQgZHJhd2luZyBtb2RlbDogJXMiLAorICAgICAgICAgICAgICAgICAgICBw
cmV0dHlOYW1lRm9yRHJhd2luZ01vZGVsKG5ld0RyYXdpbmdNb2RlbCkpOworICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYXNl
IE5QUFZwbHVnaW5FdmVudE1vZGVsOiB7CisgICAgICAgIC8vIENhbiBvbmx5IHNldCBldmVudCBt
b2RlbCBpbnNpZGUgTlBQX05ldygpCisgICAgICAgIGlmICh0aGlzICE9IGN1cnJlbnRQbHVnaW5W
aWV3KCkpCisgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAg
IE5QRXZlbnRNb2RlbCBuZXdFdmVudE1vZGVsID0gTlBFdmVudE1vZGVsKHVpbnRwdHJfdCh2YWx1
ZSkpOworICAgICAgICBzd2l0Y2ggKG5ld0V2ZW50TW9kZWwpIHsKKyAgICAgICAgY2FzZSBOUEV2
ZW50TW9kZWxDb2NvYToKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luIGFza2VkIGZvciB1
bnN1cHBvcnRlZCBldmVudCBtb2RlbDogJXMiLAorICAgICAgICAgICAgICAgICAgICBwcmV0dHlO
YW1lRm9yRXZlbnRNb2RlbChuZXdFdmVudE1vZGVsKSk7CisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBkZWZpbmVkKFhQ
X01BQ09TWCkKKworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQbHVnaW5W
aWV3OjppbnZhbGlkYXRlVGltZXJGaXJlZCgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1faW52YWxpZFJlY3RzLnNpemUoKTsgaSsrKQorICAgICAgICBpbnZhbGlkYXRlUmVjdCht
X2ludmFsaWRSZWN0c1tpXSk7CisgICAgbV9pbnZhbGlkUmVjdHMuY2xlYXIoKTsKK30KKworCit2
b2lkIFBsdWdpblZpZXc6OnB1c2hQb3B1cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0ZSkKK3sKKyAg
ICBtX3BvcHVwU3RhdGVTdGFjay5hcHBlbmQoc3RhdGUpOworfQorIAordm9pZCBQbHVnaW5WaWV3
Ojpwb3BQb3B1cHNFbmFibGVkU3RhdGUoKQoreworICAgIG1fcG9wdXBTdGF0ZVN0YWNrLnJlbW92
ZUxhc3QoKTsKK30KKworYm9vbCBQbHVnaW5WaWV3OjphcmVQb3B1cHNBbGxvd2VkKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcG9wdXBTdGF0ZVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG1fcG9wdXBTdGF0ZVN0YWNrLmxhc3QoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpzZXRKYXZhU2NyaXB0UGF1c2VkKGJvb2wgcGF1c2VkKQoreworICAgIGlm
IChtX2lzSmF2YVNjcmlwdFBhdXNlZCA9PSBwYXVzZWQpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2lzSmF2YVNjcmlwdFBhdXNlZCA9IHBhdXNlZDsKKworICAgIGlmIChtX2lzSmF2YVNjcmlwdFBh
dXNlZCkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAgIGVsc2UgaWYgKCFtX3Jl
cXVlc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDAp
OworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitOUE9iamVjdCogUGx1Z2lu
Vmlldzo6bnBPYmplY3QoKQoreworICAgIE5QT2JqZWN0KiBvYmplY3QgPSAwOworCisgICAgaWYg
KCFtX2lzU3RhcnRlZCB8fCAhbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5n
ZXR2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBPbiBXaW5kb3dzLCBjYWxsaW5n
IEphdmEncyBOUE5fR2V0VmFsdWUgY2FuIGFsbG93IHRoZSBtZXNzYWdlIGxvb3AgdG8KKyAgICAv
LyBydW4sIGFsbG93aW5nIGxvYWRpbmcgdG8gdGFrZSBwbGFjZSBvciBKYXZhU2NyaXB0IHRvIHJ1
bi4gUHJvdGVjdCB0aGUKKyAgICAvLyBQbHVnaW5WaWV3IGZyb20gZGVzdHJ1Y3Rpb24uIDxyZGFy
Oi8vcHJvYmxlbS82OTc4ODA0PgorICAgIFJlZlB0cjxQbHVnaW5WaWV3PiBwcm90ZWN0KHRoaXMp
OworCisgICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAgIFBsdWdpblZpZXc6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAm
b2JqZWN0KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgICAgIFBsdWdp
blZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgIH0KKworICAgIGlmIChucEVyciAh
PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gb2JqZWN0
OworfQorI2VuZGlmCisKK1Bhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IFBsdWdp
blZpZXc6OmJpbmRpbmdJbnN0YW5jZSgpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgTlBPYmplY3QqIG9iamVjdCA9IG5wT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3Qp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGhhc09uZVJlZigpKSB7CisgICAgICAgIC8v
IFRoZSByZW5kZXJlciBmb3IgdGhlIFBsdWdpblZpZXcgd2FzIGRlc3Ryb3llZCBkdXJpbmcgdGhl
IGFib3ZlIGNhbGwsIGFuZAorICAgICAgICAvLyB0aGUgUGx1Z2luVmlldyB3aWxsIGJlIGRlc3Ry
b3llZCB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgc28gd2UKKyAgICAgICAgLy8gcmV0dXJu
IG51bGwuCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxKU0M6OkJpbmRp
bmdzOjpSb290T2JqZWN0PiByb290ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCkuY3JlYXRlUm9v
dE9iamVjdCh0aGlzKTsKKyAgICBSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGluc3Rh
bmNlID0gSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUob2JqZWN0LCByb290LnJlbGVh
c2UoKSk7CisKKyAgICBfTlBOX1JlbGVhc2VPYmplY3Qob2JqZWN0KTsKKworICAgIHJldHVybiBp
bnN0YW5jZS5yZWxlYXNlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6ZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW0qIHN0cmVhbSkKK3sK
KyAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbSkpOworCisgICAgbV9zdHJlYW1z
LnJlbW92ZShzdHJlYW0pOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmFtZXRlcnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bVZhbHVlcykKK3sKKyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMu
c2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1
bnNpZ25lZCBwYXJhbUNvdW50ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9w
YXJhbVZhbHVlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihj
aGFyKikgKiBzaXplKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CisgICAgICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtS
ZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UocGFyYW1OYW1l
c1tpXSwgIndpbmRvd2xlc3N2aWRlbyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgaWYgKHBhcmFtTmFtZXNbaV0gPT0gInBsdWdpbnNwYWdlIikKKyAgICAgICAgICAgIG1fcGx1
Z2luc1BhZ2UgPSBwYXJhbVZhbHVlc1tpXTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1D
b3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFt
VmFsdWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisK
KyAgICAgICAgcGFyYW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFt
Q291bnQ7Cit9CisKK1BsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBj
b25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwbHVnaW4sIEhUTUxQbHVnSW5FbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BhcmVudEZyYW1lKHBhcmVudEZy
YW1lKQorICAgICwgbV9wbHVnaW4ocGx1Z2luKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisg
ICAgLCBtX2lzU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fc3RhdHVz
KFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKCp0
aGlzLCAmUGx1Z2luVmlldzo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAgLCBtX2ludmFsaWRhdGVU
aW1lcigqdGhpcywgJlBsdWdpblZpZXc6OmludmFsaWRhdGVUaW1lckZpcmVkKQorICAgICwgbV9w
b3BQb3B1cHNTdGF0ZVRpbWVyKCp0aGlzLCAmUGx1Z2luVmlldzo6cG9wUG9wdXBzU3RhdGVUaW1l
ckZpcmVkKQorICAgICwgbV9saWZlU3VwcG9ydFRpbWVyKCp0aGlzLCAmUGx1Z2luVmlldzo6bGlm
ZVN1cHBvcnRUaW1lckZpcmVkKQorICAgICwgbV9tb2RlKGxvYWRNYW51YWxseSA/IE5QX0ZVTEwg
OiBOUF9FTUJFRCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZhbHVlcygw
KQorICAgICwgbV9taW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIG1faW5zdGFuY2UoMCkKKyNpZiBk
ZWZpbmVkKFhQX01BQ09TWCkKKyAgICAsIG1faXNXaW5kb3dlZChmYWxzZSkKKyAgICAsIG1fdXBk
YXRlZENvY29hVGV4dElucHV0UmVxdWVzdGVkKGZhbHNlKQorICAgICwgbV9rZXlEb3duU2VudChm
YWxzZSkKKyAgICAsIG1fZGlzcmVnYXJkS2V5VXBDb3VudGVyKDApCisjZWxzZQorICAgICwgbV9p
c1dpbmRvd2VkKHRydWUpCisjZW5kaWYKKyAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKKyAg
ICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9pc1dhaXRpbmdUb1N0YXJ0KGZh
bHNlKQorI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFsc2UpCisj
ZW5kaWYKKyNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAg
ICAsIG1fcGx1Z2luV25kUHJvYygwKQorICAgICwgbV9sYXN0TWVzc2FnZSgwKQorICAgICwgbV9p
c0NhbGxpbmdQbHVnaW5XbmRQcm9jKGZhbHNlKQorICAgICwgbV93bVByaW50SERDKDApCisgICAg
LCBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0KGZhbHNlKQorI2VuZGlmCisjaWYgUExBVEZPUk0o
RUZMKQorICAgICwgbV93aW5kb3coMCkKKyNlbmRpZgorI2lmIGRlZmluZWQoWFBfTUFDT1NYKQor
ICAgICwgbV9jb250ZXh0UmVmKDApCisjZW5kaWYKKyNpZiBkZWZpbmVkKFhQX1VOSVgpICYmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICwgbV9oYXNQZW5kaW5nR2VvbWV0cnlDaGFu
Z2UodHJ1ZSkKKyAgICAsIG1fZHJhd2FibGUoMCkKKyAgICAsIG1fdmlzdWFsKDApCisgICAgLCBt
X2NvbG9ybWFwKDApCisgICAgLCBtX3BsdWdpbkRpc3BsYXkoMCkKKyNlbmRpZgorICAgICwgbV9s
b2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQorICAgICwgbV9tYW51YWxTdHJlYW0oMCkKKyAgICAs
IG1faXNKYXZhU2NyaXB0UGF1c2VkKGZhbHNlKQorICAgICwgbV9oYXZlQ2FsbGVkU2V0V2luZG93
KGZhbHNlKQoreworICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9pbnN0YW5jZSA9ICZtX2luc3RhbmNlU3RydWN0OworICAgIG1faW5zdGFuY2UtPm5kYXRhID0g
dGhpczsKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7CisKKyAgICBpbnN0YW5jZU1hcCgpLmFk
ZChtX2luc3RhbmNlLCB0aGlzKTsKKworICAgIHNldFBhcmFtZXRlcnMocGFyYW1OYW1lcywgcGFy
YW1WYWx1ZXMpOworCisgICAgbWVtc2V0KCZtX25wV2luZG93LCAwLCBzaXplb2YobV9ucFdpbmRv
dykpOworI2lmIGRlZmluZWQoWFBfTUFDT1NYKQorICAgIG1lbXNldCgmbV9ucENnQ29udGV4dCwg
MCwgc2l6ZW9mKG1fbnBDZ0NvbnRleHQpKTsKKyNlbmRpZgorCisgICAgcmVzaXplKHNpemUpOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OmZvY3VzUGx1Z2luRWxlbWVudCgpCit7CisgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLnNldEZvY3VzZWRFbGVtZW50KG1fZWxlbWVudCwgbV9wYXJlbnRGcmFtZSk7Cisg
ICAgZWxzZQorICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkRWxl
bWVudChtX2VsZW1lbnQpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmRpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAobV9zdGF0dXMg
IT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobV9sb2FkTWFudWFsbHkpOworICAgIEFTU0VSVCghbV9tYW51YWxTdHJlYW0pOwor
CisgICAgbV9tYW51YWxTdHJlYW0gPSBQbHVnaW5TdHJlYW06OmNyZWF0ZSh0aGlzLCBtX3BhcmVu
dEZyYW1lLmdldCgpLCBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExvYWRl
cigpLT5yZXF1ZXN0KCksIGZhbHNlLCAwLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwgaW5zdGFu
Y2UoKSwgbV9wbHVnaW4tPnF1aXJrcygpKTsKKyAgICBtX21hbnVhbFN0cmVhbS0+c2V0TG9hZE1h
bnVhbGx5KHRydWUpOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVSZXNwb25zZSgw
LCByZXNwb25zZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZGlkUmVjZWl2ZURhdGEoY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAobV9zdGF0dXMgIT0gUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9s
b2FkTWFudWFsbHkpOworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisgICAgCisgICAgbV9t
YW51YWxTdHJlYW0tPmRpZFJlY2VpdmVEYXRhKDAsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgaWYgKG1fc3RhdHVzICE9IFBs
dWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKG1fbG9hZE1hbnVhbGx5KTsKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAg
bV9tYW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAobV9zdGF0
dXMgIT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQobV9sb2FkTWFudWFsbHkpOworICAgIAorICAgIGlmIChtX21hbnVhbFN0cmVh
bSkKKyAgICAgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OnNldENhbGxpbmdQbHVnaW4oYm9vbCBiKSBjb25zdAoreworICAgIGlmICgh
bV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrSGFzTW9kYWxNZXNzYWdlTG9v
cCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChiKQorICAgICAgICArK3NfY2FsbGluZ1Bs
dWdpbjsKKyAgICBlbHNlCisgICAgICAgIC0tc19jYWxsaW5nUGx1Z2luOworCisgICAgQVNTRVJU
KHNfY2FsbGluZ1BsdWdpbiA+PSAwKTsKK30KKworYm9vbCBQbHVnaW5WaWV3Ojppc0NhbGxpbmdQ
bHVnaW4oKQoreworICAgIHJldHVybiBzX2NhbGxpbmdQbHVnaW4gPiAwOworfQorCitQYXNzUmVm
UHRyPFBsdWdpblZpZXc+IFBsdWdpblZpZXc6OmNyZWF0ZShGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmIHNpemUsIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBVUkwm
IHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFs
bHkpCit7CisgICAgLy8gaWYgd2UgZmFpbCB0byBmaW5kIGEgcGx1Z2luIGZvciB0aGlzIE1JTUUg
dHlwZSwgZmluZFBsdWdpbiB3aWxsIHNlYXJjaCBmb3IKKyAgICAvLyBhIHBsdWdpbiBieSB0aGUg
ZmlsZSBleHRlbnNpb24gYW5kIHVwZGF0ZSB0aGUgTUlNRSB0eXBlLCBzbyBwYXNzIGEgbXV0YWJs
ZSBTdHJpbmcKKyAgICBTdHJpbmcgbWltZVR5cGVDb3B5ID0gbWltZVR5cGU7CisgICAgUGx1Z2lu
UGFja2FnZSogcGx1Z2luID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+Zmlu
ZFBsdWdpbih1cmwsIG1pbWVUeXBlQ29weSk7CisKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5k
LCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIGlm
ICghcGx1Z2luICYmIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2go
KSkgeworICAgICAgICBtaW1lVHlwZUNvcHkgPSBtaW1lVHlwZTsKKyAgICAgICAgcGx1Z2luID0g
UGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+ZmluZFBsdWdpbih1cmwsIG1pbWVU
eXBlQ29weSk7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5WaWV3KHBh
cmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1W
YWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1hbnVhbGx5KSk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6ZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sKKyAg
ICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7CisK
KyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFy
dHNXaXRoQmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVy
biBidWZmZXIuc2l6ZSgpID4gMCAmJiBidWZmZXJbMF0gPT0gJ1xuJzsKK30KKworc3RhdGljIGlu
bGluZSBpbnQgbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYg
YnVmZmVyKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aCAtIDQ7IGkrKykgeworICAgICAgICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0
LiBJdCBzZW5kcyAiXG5cbiIuCisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVz
W2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICAKKyAg
ICAgICAgLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlm
IGl0IGlzIHRoZSBmaXJzdCBsaW5lLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBi
eXRlc1tpICsgMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAg
aWYgKGkgPT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRGly
ZWN0b3IuIEl0IHNlbmRzICJcclxuXG4iICgzODgwMzg3KS4KKyAgICAgICAgICAgICAgICByZXR1
cm4gaSArIDE7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVz
W2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIEZsYXNoLiBJ
dCBzZW5kcyAiXHJcblxyXG4iICgzNzU4MTEzKS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSAr
IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxp
bmUgY29uc3QgY2hhciogZmluZEVPTChjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uIEVPTCBpcyBk
ZWZpbmVkIGFzCisgICAgLy8gYSBDUkxGIHBhaXIuIFVuZm9ydHVuYXRlbHksIHNvbWUgc2VydmVy
cyB3aWxsIHVzZSBMRgorICAgIC8vIGluc3RlYWQuIFdvcnNlIHlldCwgc29tZSBzZXJ2ZXJzIHdp
bGwgdXNlIGEgY29tYmluYXRpb24KKyAgICAvLyBvZiBib3RoIChlLmcuIDxoZWFkZXI+Q1JMRkxG
PGJvZHk+KSwgc28gZmluZEVPTCBuZWVkcworICAgIC8vIHRvIGJlIG1vcmUgZm9yZ2l2aW5nLiBJ
dCB3aWxsIG5vdyBhY2NlcHQgQ1JMRiwgTEYgb3IKKyAgICAvLyBDUi4KKyAgICAvLworICAgIC8v
IEl0IHJldHVybnMgTlVMTCBpZiBFT0xGIGlzIG5vdCBmb3VuZCBvciBpdCB3aWxsIHJldHVybgor
ICAgIC8vIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVyLgorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYnl0
ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIGlm
IChieXRlc1tpXSA9PSAnXHInKSB7CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgc3Bh
bm5pbmcgYnVmZmVyIGJvdW5kcworICAgICAgICAgICAgLy8gKENSTEYgaXMgYWNyb3NzIHJlYWRz
KS4gSWYgc28sIHdhaXQgZm9yCisgICAgICAgICAgICAvLyBuZXh0IHJlYWQuCisgICAgICAgICAg
ICBpZiAoaSArIDEgPT0gbGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5h
bWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9
IHRydWU7CisgICAgU3RyaW5nIHJlc3VsdDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBuYW1lLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgVUNoYXIgYzsKKworICAgICAgICBpZiAo
Y2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykK
KyAgICAgICAgICAgIGMgPSB0b0FTQ0lJVXBwZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UgaWYg
KCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1on
KQorICAgICAgICAgICAgYyA9IHRvQVNDSUlMb3dlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgYyA9IG5hbWVbaV07CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQor
ICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICByZXN1bHQu
YXBwZW5kKGMpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hh
cj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0g
YnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7
CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGlu
ZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3Jl
IGVuZC1vZi1saW5lcworICAgIHdoaWxlICgoZW9sID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkp
IHsKKyAgICAgICAgY29uc3QgY2hhciogbGluZSA9IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxl
bmd0aCA9IGVvbCAtIGJ5dGVzOworICAgICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0
aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wu
CisgICAgICAgIGJ5dGVzID0gZW9sICsgMTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdccicpICYm
ICgqYnl0ZXMgPT0gJ1xuJykpCisgICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZp
bmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5ndGggLT0g
KGJ5dGVzIC0gbGluZSk7CisgICAgICAgIGlmIChsaW5lTGVuZ3RoID09IDApCisgICAgICAgICAg
ICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0
JykgeworICAgICAgICAgICAgLy8gQ29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIK
KyAgICAgICAgICAgIGlmIChsYXN0S2V5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8g
bWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNZXJn
ZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAg
ICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUobGluZSwgbGluZUxlbmd0aCk7CisKKyAgICAgICAg
ICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJyYW5k
IG5ldyBoZWFkZXIKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAgICAgICAg
Zm9yIChjb2xvbiA9IGxpbmU7ICpjb2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBjb2xvbisr
KSB7CisgICAgICAgICAgICAgICAgLy8gZW1wdHkgbG9vcAorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGNvbG9uID09IGVvbCkgCisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhl
YWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0YWxpemVS
RkM4MjJIZWFkZXJGaWVsZE5hbWUoU3RyaW5nKGxpbmUsIGNvbG9uIC0gbGluZSkpOworICAgICAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoY29sb24rKzsg
Y29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqY29sb24g
IT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpCisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IFN0cmluZyhjb2xvbiwgZW9sIC0gY29sb24pOworCisg
ICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9IG9sZFZhbHVlICsgIiwgIiArIHZhbHVlOworCisgICAgICAgICAgICAg
ICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9yIFBs
dWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpCit7CisgICAgaWYg
KCF1cmwgfHwgIWxlbiB8fCAhYnVmKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJB
TTsKKworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdChtX3BhcmVudEZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKworICAgIEhUVFBIZWFkZXJNYXAgaGVh
ZGVyRmllbGRzOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYgKGZpbGUp
IHsKKyAgICAgICAgTlBFcnJvciByZWFkUmVzdWx0ID0gaGFuZGxlUG9zdFJlYWRGaWxlKGJ1ZmZl
ciwgbGVuLCBidWYpOworICAgICAgICBpZihyZWFkUmVzdWx0ICE9IE5QRVJSX05PX0VSUk9SKQor
ICAgICAgICAgICAgcmV0dXJuIHJlYWRSZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVm
ZmVyLnJlc2l6ZShsZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4p
OworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAg
ICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFsbG93SGVh
ZGVycykgeworICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAg
ICAgICAgICBwb3N0RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJz
dEJsYW5rTGluZShidWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7Cisg
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBt
aWRkbGUgb2YgdGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAg
ICAgICAgICAgICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZl
ciwgbG9jYXRpb24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZm
ZXIuc2l6ZSgpIC0gbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1
Z2lucyBsaWtlIHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0
LAorICAgICAgICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhh
dC4gU28gd2Ugd2lsbCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBp
bnN0ZWFkIHRydW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAg
ICAgICAgICAgIFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldChIVFRQSGVh
ZGVyTmFtZTo6Q29udGVudExlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRM
ZW5ndGguaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29u
dGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIGhl
YWRlckZpZWxkcy5yZW1vdmUoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgpOworCisgICAg
ICAgICAgICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247CisgICAgICAgICAgICAgICAgcG9zdERh
dGFMZW5ndGggPSBkYXRhTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQ
T1NUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFr
ZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCkpOworICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEhlYWRlckZpZWxkcyhXVEY6
Om1vdmUoaGVhZGVyRmllbGRzKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRlKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0
aCkpOworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisKKyAgICBy
ZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRh
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIWlzVmlzaWJsZSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgaWYgKCFtX2VsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvJiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKm1fZWxlbWVu
dC0+cmVuZGVyZXIoKSk7CisgICAgCisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OworICAg
IGRpcnR5UmVjdC5tb3ZlKHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBhZGRpbmdM
ZWZ0KCksIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGluZ1RvcCgpKTsKKyAg
ICByZW5kZXJlci5yZXBhaW50UmVjdGFuZ2xlKGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIFJlZlB0cjxJbWFnZT4gbnVsbFBsdWdp
bkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxsUGx1Z2luSW1h
Z2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKKworICAgIElu
dFJlY3QgaW1hZ2VSZWN0KGZyYW1lUmVjdCgpLngoKSwgZnJhbWVSZWN0KCkueSgpLCBudWxsUGx1
Z2luSW1hZ2UtPndpZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0KCkpOworCisgICAgaW50
IHhPZmZzZXQgPSAoZnJhbWVSZWN0KCkud2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAvIDI7
CisgICAgaW50IHlPZmZzZXQgPSAoZnJhbWVSZWN0KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVp
Z2h0KCkpIC8gMjsKKworICAgIGltYWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisg
ICAgaWYgKCFyZWN0LmludGVyc2VjdHMoaW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7
CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG51bGxQbHVnaW5JbWFnZS5nZXQoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81
LjAgKCIKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAgICAgIk1hY2ludG9zaDsgVTsgSW50
ZWwgTWFjIE9TIFg7IgorI2VsaWYgZGVmaW5lZChYUF9XSU4pCisgICAgICAgICJXaW5kb3dzOyBV
OyBXaW5kb3dzIE5UIDUuMTsiCisjZWxpZiBkZWZpbmVkKFhQX1VOSVgpCisvLyBUaGUgR3RrIHBv
cnQgdXNlcyBYMTEgcGx1Z2lucyBpbiBNYWMuCisjaWYgT1MoREFSV0lOKSAmJiBQTEFURk9STShH
VEspCisgICAgIlgxMTsgVTsgSW50ZWwgTWFjIE9TIFg7IgorI2Vsc2UKKyAgICAiWDExOyBVOyBM
aW51eCBpNjg2OyIKKyNlbmRpZgorI2VuZGlmCisgICAgICAgICIgZW4tVVM7IHJ2OjEuOC4xKSBH
ZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBD
aHJvbWVVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKCIKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkK
KyAgICAiTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMgT1MgWDsiCisjZWxpZiBkZWZpbmVkKFhQX1dJ
TikKKyAgICAiV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IgorI2VsaWYgZGVmaW5lZChYUF9V
TklYKQorICAgIC8vIFRoZSBHdGsgcG9ydCB1c2VzIFgxMSBwbHVnaW5zIGluIE1hYy4KKyNpZiBP
UyhEQVJXSU4pICYmIFBMQVRGT1JNKEdUSykKKyAgICAiWDExOyBVOyBJbnRlbCBNYWMgT1MgWDsi
CisjZWxzZQorICAgICJYMTE7IFU7IExpbnV4IGk2ODY7IgorI2VuZGlmCisjZW5kaWYKKyAgICAi
IEFwcGxlV2ViS2l0LzUzNC4zNCAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xOS4wLjEwNTUu
MSBTYWZhcmkvNTM0LjM0IjsKKworY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkK
K3sKKyAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNN
b3ppbGxhVXNlckFnZW50KSkKKyAgICAgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7CisgICAg
ZWxzZSBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNDaHJv
bWVVc2VyQWdlbnQpKQorICAgICAgICByZXR1cm4gQ2hyb21lVXNlckFnZW50OworICAgIGlmICht
X3VzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgbV91c2VyQWdlbnQgPSBtX3BhcmVudEZyYW1l
LT5sb2FkZXIoKS51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJB
Z2VudC5kYXRhKCk7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK2NvbnN0
IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudFN0YXRpYygpCit7CisgICAgcmV0dXJuIE1vemls
bGFVc2VyQWdlbnQ7Cit9CisjZW5kaWYKKworCit2b2lkIFBsdWdpblZpZXc6OmxpZmVTdXBwb3J0
VGltZXJGaXJlZCgpCit7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjprZWVw
QWxpdmUoKQoreworICAgIGlmIChtX2xpZmVTdXBwb3J0VGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcmVmKCk7CisgICAgbV9saWZlU3VwcG9ydFRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQordm9pZCBQbHVn
aW5WaWV3OjprZWVwQWxpdmUoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXcqIHZpZXcg
PSBpbnN0YW5jZU1hcCgpLmdldChpbnN0YW5jZSk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICBy
ZXR1cm47CisKKyAgICB2aWV3LT5rZWVwQWxpdmUoKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7Cisg
ICAgTE9HKFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyglcykiLCBwcmV0dHlO
YW1lRm9yTlBOVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBOUEVycm9yIHJlc3Vs
dDsKKyAgICBpZiAocGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUsICZyZXN1
bHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6Z2V0
VmFsdWUoJXMpIiwgcHJldHR5TmFtZUZvck5QTlZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkpOwor
CisgICAgTlBFcnJvciByZXN1bHQ7CisgICAgaWYgKHBsYXRmb3JtR2V0VmFsdWUodmFyaWFibGUs
IHZhbHVlLCAmcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChwbGF0
Zm9ybUdldFZhbHVlU3RhdGljKHZhcmlhYmxlLCB2YWx1ZSwgJnJlc3VsdCkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WV2lu
ZG93TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBPYmplY3QqIHdp
bmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLndpbmRvd1NjcmlwdE5Q
T2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJl
dGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVj
dHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0
KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKwor
ICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gd2luZG93U2Ny
aXB0T2JqZWN0OworCisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAg
ICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZh
U2NyaXB0UGF1c2VkKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisK
KyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgaWYg
KG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFt
ZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAg
ICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBtX2VsZW1lbnQtPmdldE5QT2JqZWN0KCk7CisKKyAg
ICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNj
cmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVu
dGltZS5odG1sPgorICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAg
X05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiog
diA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZwcml2
YXRlTW9kZUJvb2w6IHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2Uo
KTsKKyAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CisgICAgICAgICooKE5QQm9vbCopdmFsdWUpID0gcGFnZS0+dXNlc0VwaGVtZXJhbFNl
c3Npb24oKTsKKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgIH0KKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwor
c3RhdGljIEZyYW1lKiBnZXRGcmFtZShGcmFtZSogcGFyZW50RnJhbWUsIEVsZW1lbnQqIGVsZW1l
bnQpCit7CisgICAgaWYgKHBhcmVudEZyYW1lKQorICAgICAgICByZXR1cm4gcGFyZW50RnJhbWU7
CisgICAgCisgICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKTsKK30KKworTlBF
cnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwg
Y29uc3QgY2hhciogdXJsLCBjaGFyKiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCit7CisgICAgTE9H
KFBsdWdpbnMsICJQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCglcykiLCBwcmV0dHlOYW1lRm9y
TlBOVVJMVmFyaWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisKKyAgICBOUEVycm9yIHJlc3VsdCA9
IE5QRVJSX05PX0VSUk9SOworCisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgIGNhc2UgTlBO
VVJMVkNvb2tpZTogeworICAgICAgICBVUkwgdShtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5i
YXNlVVJMKCksIHVybCk7CisgICAgICAgIGlmICh1LmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
RnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAg
ICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2ll
U3RyID0gY29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSkudXRmOCgpOworICAgICAgICAgICAg
ICAgIGlmICghY29va2llU3RyLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGludCBzaXplID0gY29va2llU3RyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAqdmFs
dWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHNpemUrMSkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoKnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQo
KnZhbHVlLCAwLCBzaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCp2YWx1
ZSwgY29va2llU3RyLmRhdGEoKSwgc2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChsZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxlbiA9IHNpemU7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTlBF
UlJfT1VUX09GX01FTU9SWV9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfSU5WQUxJRF9VUkw7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE5QTlVSTFZQcm94eTogeworICAgICAg
ICBVUkwgdShtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCksIHVybCk7CisgICAg
ICAgIGlmICh1LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJh
bWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGNvbnN0IEZyYW1lTG9h
ZGVyKiBmcmFtZUxvYWRlciA9IGZyYW1lID8gJmZyYW1lLT5sb2FkZXIoKSA6IDA7CisgICAgICAg
ICAgICBjb25zdCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IGZyYW1lTG9hZGVyID8gZnJh
bWVMb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCkgOiAwOworICAgICAgICAgICAgY29uc3QgQ1N0
cmluZyBwcm94eVN0ciA9IHRvU3RyaW5nKHByb3h5U2VydmVyc0ZvclVSTCh1LCBjb250ZXh0KSku
dXRmOCgpOworICAgICAgICAgICAgaWYgKCFwcm94eVN0ci5pc051bGwoKSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBzaXplID0gcHJveHlTdHIubGVuZ3RoKCk7CisgICAgICAgICAgICAg
ICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoKnZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldCgq
dmFsdWUsIDAsIHNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgqdmFsdWUsIHBy
b3h5U3RyLmRhdGEoKSwgc2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICpsZW4gPSBzaXplOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9S
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IE5Q
RVJSX0lOVkFMSURfVVJMOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgTE9HKFBsdWdpbnMs
ICJQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTDogJXMiLCBwcmV0dHlOYW1lRm9yTlBOVVJMVmFy
aWFibGUodmFyaWFibGUpLmRhdGEoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKworTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTChO
UE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1
ZSwgdWludDMyX3QgbGVuKQoreworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0VmFs
dWVGb3JVUkwoJXMpIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRh
KCkpOworCisgICAgTlBFcnJvciByZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKworICAgIHN3aXRj
aCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlVSTFZDb29raWU6IHsKKyAgICAgICAgVVJMIHUo
bV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLCB1cmwpOworICAgICAgICBpZiAo
dS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIgPSBTdHJp
bmc6OmZyb21VVEY4KHZhbHVlLCBsZW4pOworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0
RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChmcmFtZSAm
JiAhY29va2llU3RyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzZXRDb29raWVzKGZyYW1l
LT5kb2N1bWVudCgpLCB1LCBjb29raWVTdHIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBOUE5VUkxWUHJveHk6CisgICAgICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luVmlldzo6c2V0
VmFsdWVGb3JVUkwoJXMpOiBQbHVnaW5zIGFyZSBOT1QgYWxsb3dlZCB0byBzZXQgcHJveHkgaW5m
b3JtYXRpb24uIiwgcHJldHR5TmFtZUZvck5QTlVSTFZhcmlhYmxlKHZhcmlhYmxlKS5kYXRhKCkp
OworICAgICAgICByZXN1bHQgPSBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpblZpZXc6OnNldFZhbHVl
Rm9yVVJMOiAlcyIsIHByZXR0eU5hbWVGb3JOUE5VUkxWYXJpYWJsZSh2YXJpYWJsZSkuZGF0YSgp
KTsKKyAgICAgICAgcmVzdWx0ID0gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3Ojpn
ZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJvdG9jb2wsIGNvbnN0IGNoYXIqIGhv
c3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogLyogc2NoZW1lICovLCBjb25zdCBjaGFyKiAv
KiByZWFsbSAqLywgY2hhcioqICAvKiB1c2VybmFtZSAqLywgdWludDMyX3QqIC8qIHVsZW4gKi8s
IGNoYXIqKiAvKiBwYXNzd29yZCAqLywgdWludDMyX3QqIC8qIHBsZW4gKi8pCit7CisjaWYgTE9H
X0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKHByb3RvY29sKTsKKyAgICBVTlVTRURfUEFSQU0o
aG9zdCk7CisgICAgVU5VU0VEX1BBUkFNKHBvcnQpOworI2VuZGlmCisgICAgTE9HKFBsdWdpbnMs
ICJQbHVnaW5WaWV3OjpnZXRBdXRoZW50aWNhdGlvbkluZm86IHByb3RvY29sPSVzLCBob3N0PSVz
LCBwb3J0PSVkIiwgcHJvdG9jb2wsIGhvc3QsIHBvcnQpOworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisjZW5kaWYKKwordm9pZCBQbHVn
aW5WaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCBwcml2YXRlQnJvd3NpbmdF
bmFibGVkKQoreworICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0VmFsdWUgPSBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+c2V0dmFsdWU7CisgICAgaWYgKCFzZXRWYWx1ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAg
SlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoSlNET01XaW5kb3dCYXNlOjpj
b21tb25WTSgpKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgIE5QQm9vbCB2YWx1
ZSA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CisgICAgc2V0VmFsdWUobV9pbnN0YW5jZSwgTlBO
VnByaXZhdGVNb2RlQm9vbCwgJnZhbHVlKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
KyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4NmJiOWQyODEx
NGFkZDg2OTRkNWNkMTE3YTAzZDY2MGRkZmMwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXcuaApAQCAtMCwwICsxLDQ0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHaXJpc2ggUmFtYWty
aXNobmFuIDxnaXJpc2hAZm9yd2FyZGJpYXMuaW4+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdfaAorI2RlZmluZSBQbHVnaW5W
aWV3X2gKKworI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCisjaW5jbHVkZSAiUGx1Z2lu
Vmlld0Jhc2UuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
I2luY2x1ZGUgIlBsdWdpblN0cmVhbS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5o
IgorI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKSAmJiBQTEFURk9STShHVEspCit0eXBlZGVmIHN0
cnVjdCBIV05EX18qIEhXTkQ7Cit0eXBlZGVmIEhXTkQgUGxhdGZvcm1QbHVnaW5XaWRnZXQ7Cisj
ZWxzZQordHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBsdWdpbldpZGdldDsKKyNlbmRp
ZgorI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HdGtTb2NrZXQgR3RrU29ja2V0
OworI2VuZGlmCisKKyNpZiBQTEFURk9STShYMTEpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV2lu
ZG93OwordHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CisjZW5kaWYKKworbmFtZXNw
YWNlIEpTQyB7CisgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFu
Y2U7CisgICAgfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWU7Cisg
ICAgY2xhc3MgRnJhbWVWaWV3OworICAgIGNsYXNzIEltYWdlOworICAgIGNsYXNzIEhUTUxQbHVn
SW5FbGVtZW50OworICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgTW91c2VFdmVu
dDsKKyAgICBjbGFzcyBVUkw7CisjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCisgICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbjsKKyNlbmRpZgor
ICAgIGNsYXNzIFBsdWdpblBhY2thZ2U7CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdDsKKyAgICBj
bGFzcyBQbHVnaW5TdHJlYW07CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBS
ZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFdoZWVsRXZlbnQ7CisKKyAgICBlbnVtIFBsdWdp
blN0YXR1cyB7CisgICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCisgICAgICAg
IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW4sCisgICAgICAgIFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseQorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0IHsKKyAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luUmVxdWVzdCk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luUmVxdWVzdChjb25zdCBGcmFtZUxv
YWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQq
IG5vdGlmeURhdGEsIGJvb2wgc2hvdWxkQWxsb3dQb3B1cHMpCisgICAgICAgICAgICA6IG1fZnJh
bWVMb2FkUmVxdWVzdChmcmFtZUxvYWRSZXF1ZXN0KQorICAgICAgICAgICAgLCBtX25vdGlmeURh
dGEobm90aWZ5RGF0YSkKKyAgICAgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3Rp
ZmljYXRpb24pCisgICAgICAgICAgICAsIG1fc2hvdWxkQWxsb3dQb3B1cHMoc2hvdWxkQWxsb3dQ
b3B1cHMpIHsgfQorICAgIHB1YmxpYzoKKyAgICAgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYg
ZnJhbWVMb2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQor
ICAgICAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9
CisgICAgICAgIGJvb2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZE5v
dGlmaWNhdGlvbjsgfQorICAgICAgICBib29sIHNob3VsZEFsbG93UG9wdXBzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaG91bGRBbGxvd1BvcHVwczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1l
TG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OworICAgICAgICB2b2lkKiBtX25vdGlmeURh
dGE7CisgICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgICAgICBib29sIG1fc2hv
dWxkQWxsb3dQb3B1cHM7CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpbk1hbnVhbExvYWRlciB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5QbHVnaW5NYW51YWxMb2FkZXIoKSB7fQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiwgaW50KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCkg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikg
PSAwOworICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFBsdWdpblZpZXdC
YXNlCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgICAgICAgICAgICAg
ICAsIHByaXZhdGUgUGx1Z2luU3RyZWFtQ2xpZW50CisjZW5kaWYKKyAgICAgICAgICAgICAgICAg
ICAgICwgcHVibGljIFBsdWdpbk1hbnVhbExvYWRlcgorICAgICAgICAgICAgICAgICAgICAgLCBw
cml2YXRlIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQbHVnaW5WaWV3PiBjcmVhdGUoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25z
dCBJbnRTaXplJiwgSFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBVUkwmLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHZpcnR1
YWwgflBsdWdpblZpZXcoKTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwbHVnaW4oKSBjb25z
dCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsgfQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQorICAgICAgICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9
CisjZW5kaWYKKworICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7
CisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3KiBjdXJyZW50UGx1Z2luVmlldygpOworCisjaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIE5QT2JqZWN0KiBucE9iamVjdCgp
OworI2VuZGlmCisgICAgICAgIFBhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6SW5zdGFuY2U+IGJp
bmRpbmdJbnN0YW5jZSgpOworCisgICAgICAgIFBsdWdpblN0YXR1cyBzdGF0dXMoKSBjb25zdCB7
IHJldHVybiBtX3N0YXR1czsgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisg
ICAgICAgIC8vIE5QTiBmdW5jdGlvbnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAg
ICAgICBOUEVycm9yIGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7
CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNo
YXIqIHRhcmdldCwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2
b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzJfdCBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBC
b29sIGZpbGUpOworICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNv
bnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQzMl90IHdy
aXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOworICAgICAg
ICBOUEVycm9yIGRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29u
KTsKKyNlbmRpZgorICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKKyNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHVzZXJBZ2Vu
dFN0YXRpYygpOworI2VuZGlmCisgICAgICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworICAgICAgICAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAg
TlBFcnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAg
ICAgICBzdGF0aWMgTlBFcnJvciBnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpOworICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWVGb3JVUkwoTlBOVVJM
VmFyaWFibGUgdmFyaWFibGUsIGNvbnN0IGNoYXIqIHVybCwgY2hhcioqIHZhbHVlLCB1aW50MzJf
dCogbGVuKTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1ZUZvclVSTChOUE5VUkxWYXJpYWJsZSB2
YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB2YWx1ZSwgdWludDMyX3QgbGVu
KTsKKyAgICAgICAgTlBFcnJvciBnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgY2hhciogcHJv
dG9jb2wsIGNvbnN0IGNoYXIqIGhvc3QsIGludDMyX3QgcG9ydCwgY29uc3QgY2hhciogc2NoZW1l
LCBjb25zdCBjaGFyKiByZWFsbSwgY2hhcioqIHVzZXJuYW1lLCB1aW50MzJfdCogdWxlbiwgY2hh
cioqIHBhc3N3b3JkLCB1aW50MzJfdCogcGxlbik7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJl
Y3QoTlBSZWN0Kik7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7Cisj
ZW5kaWYKKyAgICAgICAgdm9pZCBmb3JjZVJlZHJhdygpOworICAgICAgICB2b2lkIHB1c2hQb3B1
cHNFbmFibGVkU3RhdGUoYm9vbCBzdGF0ZSk7CisgICAgICAgIHZvaWQgcG9wUG9wdXBzRW5hYmxl
ZFN0YXRlKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IElu
dFJlY3QmKTsKKworICAgICAgICBib29sIGFyZVBvcHVwc0FsbG93ZWQoKSBjb25zdDsKKworICAg
ICAgICB2b2lkIHNldEphdmFTY3JpcHRQYXVzZWQoYm9vbCk7CisKKyAgICAgICAgdm9pZCBwcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0
U3RyZWFtKFBsdWdpblN0cmVhbSopOworICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRp
bmcoUGx1Z2luU3RyZWFtKiBzdHJlYW0pIHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9CisK
KyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJh
bWVSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHND
aGFuZ2VkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHNob3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGNsaXBSZWN0Q2hhbmdlZCgpIG92ZXJyaWRlOworCisgICAg
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgcGx1Z2lucyBvbiBhbGwgcGxhdGZvcm1zIHRv
IG9idGFpbiBhIGNsaXAgcmVjdCB0aGF0IGluY2x1ZGVzIGNsaXBzIHNldCBieSBXZWJDb3JlLAor
ICAgICAgICAvLyBlLmcuLCBpbiBvdmVyZmxvdzphdXRvIHNlY3Rpb25zLiAgVGhlIGNsaXAgcmVj
dHMgY29vcmRpbmF0ZXMgYXJlIGluIHRoZSBjb250YWluaW5nIHdpbmRvdydzIGNvb3JkaW5hdGUg
c3BhY2UuCisgICAgICAgIC8vIFRoaXMgY2xpcCBpbmNsdWRlcyBhbnkgY2xpcHMgdGhhdCB0aGUg
d2lkZ2V0IGl0c2VsZiBzZXRzIHVwIGZvciBpdHMgY2hpbGRyZW4uCisgICAgICAgIEludFJlY3Qg
d2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZl
bnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnRWaXNpYmxlKGJvb2wpOworCisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1BsdWdpblZpZXcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisKKyAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnRGcmFtZS5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgZm9jdXNQbHVnaW5FbGVtZW50KCk7CisK
KyAgICAgICAgY29uc3QgU3RyaW5nJiBwbHVnaW5zUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGx1
Z2luc1BhZ2U7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWltZVR5cGU7IH0KKyAgICAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVy
biBtX3VybDsgfQorCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpICYmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQorICAgICAgICBib29sIHBvcFVwQ29udGV4dE1lbnUoTlBNZW51Kik7CisjZW5k
aWYKKworI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAg
ICAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBQbHVnaW5WaWV3V25kUHJvYyhIV05ELCBVSU5U
LCBXUEFSQU0sIExQQVJBTSk7CisgICAgICAgIExSRVNVTFQgd25kUHJvYyhIV05EIGhXbmQsIFVJ
TlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CisgICAgICAgIFdORFBS
T0MgcGx1Z2luV25kUHJvYygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luV25kUHJvYzsgfQorI2Vu
ZGlmCisKKyAgICAgICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lk
IGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2b2lkIGRpZEZpbmlz
aExvYWRpbmcoKTsKKyAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsK
KworICAgICAgICBzdGF0aWMgYm9vbCBpc0NhbGxpbmdQbHVnaW4oKTsKKworICAgICAgICBib29s
IHN0YXJ0KCk7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgc3Rh
dGljIHZvaWQga2VlcEFsaXZlKE5QUCk7CisjZW5kaWYKKyAgICAgICAgdm9pZCBrZWVwQWxpdmUo
KTsKKworI2lmIFBMQVRGT1JNKFgxMSkKKyAgICAgICAgc3RhdGljIERpc3BsYXkqIGdldFBsdWdp
bkRpc3BsYXkoRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIFdpbmRvdyBnZXRSb290V2luZG93KEZy
YW1lKiBwYXJlbnRGcmFtZSk7CisjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdp
blZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZSos
IEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworCisgICAgICAgIHZvaWQgc2V0UGFyYW1l
dGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtVmFsdWVzKTsKKyAgICAgICAgYm9vbCBzdGFydE9yQWRkVG9VbnN0YXJ0ZWRMaXN0
KCk7CisgICAgICAgIHZvaWQgaW5pdCgpOworICAgICAgICBib29sIHBsYXRmb3JtU3RhcnQoKTsK
KyAgICAgICAgdm9pZCBzdG9wKCk7CisgICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0
IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURh
dGEpOworICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZv
aWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMp
OworICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZl
ciwgdWludDMyX3QgbGVuLCBjb25zdCBjaGFyKiBidWYpOworI2VuZGlmCisgICAgICAgIHN0YXRp
YyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpOwor
ICAgICAgICB2b2lkIHNldENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7CisKKyAgICAgICAgdm9p
ZCBpbnZhbGlkYXRlV2luZG93bGVzc1BsdWdpblJlY3QoY29uc3QgSW50UmVjdCYpOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBtZWRpYUNhblN0YXJ0KCk7CisKKyNpZiBPUyhXSU5ET1dTKSAmJiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgdm9pZCBwYWludFdpbmRvd2VkUGx1
Z2luSW50b0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgICAg
ICBzdGF0aWMgSERDIFdJTkFQSSBob29rZWRCZWdpblBhaW50KEhXTkQsIFBBSU5UU1RSVUNUKik7
CisgICAgICAgIHN0YXRpYyBCT09MIFdJTkFQSSBob29rZWRFbmRQYWludChIV05ELCBjb25zdCBQ
QUlOVFNUUlVDVCopOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICAgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1HZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2
YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCk7CisgICAgICAgIGJvb2wgcGxh
dGZvcm1HZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3Iq
IHJlc3VsdCk7CisjZW5kaWYKKworICAgICAgICBSZWZQdHI8RnJhbWU+IG1fcGFyZW50RnJhbWU7
CisgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlPiBtX3BsdWdpbjsKKyAgICAgICAgSFRNTFBs
dWdJbkVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAgICAg
ICAgVVJMIG1fdXJsOworICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7CisgICAgICAgIFZl
Y3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKKworICAgICAgICB2b2lkIHBlcmZvcm1SZXF1
ZXN0KFBsdWdpblJlcXVlc3QqKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3Qoc3RkOjp1
bmlxdWVfcHRyPFBsdWdpblJlcXVlc3Q+KTsKKyAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJl
ZCgpOworICAgICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKCk7CisgICAgICAgIFRpbWVy
IG1fcmVxdWVzdFRpbWVyOworICAgICAgICBUaW1lciBtX2ludmFsaWRhdGVUaW1lcjsKKworICAg
ICAgICB2b2lkIHBvcFBvcHVwc1N0YXRlVGltZXJGaXJlZCgpOworICAgICAgICBUaW1lciBtX3Bv
cFBvcHVwc1N0YXRlVGltZXI7CisKKyAgICAgICAgdm9pZCBsaWZlU3VwcG9ydFRpbWVyRmlyZWQo
KTsKKyAgICAgICAgVGltZXIgbV9saWZlU3VwcG9ydFRpbWVyOworCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGJvb2wgZGlzcGF0Y2hOUEV2ZW50KE5QRXZlbnQmKTsK
KyNlbmRpZgorI2lmIGRlZmluZWQoWFBfTUFDT1NYKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKKyAgICAgICAgaW50MTZfdCBkaXNwYXRjaE5QQ29jb2FFdmVudChOUENvY29hRXZlbnQm
KTsKKyAgICAgICAgYm9vbCBtX3VwZGF0ZWRDb2NvYVRleHRJbnB1dFJlcXVlc3RlZDsKKyAgICAg
ICAgYm9vbCBtX2tleURvd25TZW50OworICAgICAgICB1aW50MTZfdCBtX2Rpc3JlZ2FyZEtleVVw
Q291bnRlcjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgICAgIHZvaWQg
aGFuZGxlV2hlZWxFdmVudChXaGVlbEV2ZW50Kik7CisjZW5kaWYKKyAgICAgICAgdm9pZCB1cGRh
dGVQbHVnaW5XaWRnZXQoKTsKKyAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2b2lkIGhhbmRsZUtl
eWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZl
bnQoTW91c2VFdmVudCopOworI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCisgICAgICAgIHZvaWQgaGFuZGxlRm9jdXNJbkV2ZW50KCk7CisgICAgICAg
IHZvaWQgaGFuZGxlRm9jdXNPdXRFdmVudCgpOworI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQor
ICAgICAgICB2b2lkIHBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMpOworICAgICAgICBQ
YXNzUmVmUHRyPEltYWdlPiBzbmFwc2hvdCgpOworI2VuZGlmCisKKyAgICAgICAgaW50IG1fbW9k
ZTsKKyAgICAgICAgaW50IG1fcGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1OYW1l
czsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1WYWx1ZXM7CisgICAgICAgIFN0cmluZyBtX3BsdWdp
bnNQYWdlOworCisgICAgICAgIFN0cmluZyBtX21pbWVUeXBlOworICAgICAgICBXVEY6OkNTdHJp
bmcgbV91c2VyQWdlbnQ7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAg
ICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7CisgICAg
ICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisjZW5kaWYKKworICAgICAgICBWZWN0b3I8Ym9vbCwg
ND4gbV9wb3B1cFN0YXRlU3RhY2s7CisKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3Ry
ZWFtPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxQbHVnaW5S
ZXF1ZXN0Pj4gbV9yZXF1ZXN0czsKKworICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKKyAgICAg
ICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7CisgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7
CisgICAgICAgIGJvb2wgbV9pc1dhaXRpbmdUb1N0YXJ0OworCisjaWYgZGVmaW5lZChYUF9VTklY
KQorICAgICAgICBib29sIG1fbmVlZHNYRW1iZWQ7CisjZW5kaWYKKworI2lmIE9TKFdJTkRPV1Mp
ICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBPd25QdHI8UGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbj4gbV9tZXNzYWdlVGhyb3R0bGVyOworICAgICAgICBXTkRQUk9DIG1f
cGx1Z2luV25kUHJvYzsKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKKyAgICAgICAg
Ym9vbCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2M7CisgICAgICAgIEhEQyBtX3dtUHJpbnRIREM7
CisgICAgICAgIGJvb2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKKyNlbmRpZgorCisjaWYg
KFBMQVRGT1JNKEdUSykgJiYgT1MoV0lORE9XUykpIHx8IFBMQVRGT1JNKEVGTCkKKyAgICAgICAg
Ly8gT24gTWFjIE9TWCBhbmQgUXQvV2luZG93cyB0aGUgcGx1Z2luIGRvZXMgbm90IGhhdmUgaXRz
IG93biBuYXRpdmUgd2lkZ2V0LAorICAgICAgICAvLyBidXQgaXMgdXNpbmcgdGhlIGNvbnRhaW5p
bmcgd2luZG93IGFzIGl0cyByZWZlcmVuY2UgZm9yIHBvc2l0aW9uaW5nL3BhaW50aW5nLgorICAg
ICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBtX3dpbmRvdzsKK3B1YmxpYzoKKyAgICAgICAgUGxh
dGZvcm1QbHVnaW5XaWRnZXQgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSBjb25zdCB7IHJldHVybiBt
X3dpbmRvdzsgfQorICAgICAgICB2b2lkIHNldFBsYXRmb3JtUGx1Z2luV2lkZ2V0KFBsYXRmb3Jt
UGx1Z2luV2lkZ2V0IHdpZGdldCkgeyBtX3dpbmRvdyA9IHdpZGdldDsgfQorI2Vsc2UKK3B1Ymxp
YzoKKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdldChQbGF0Zm9ybVBsdWdpbldp
ZGdldCB3aWRnZXQpIHsgc2V0UGxhdGZvcm1XaWRnZXQod2lkZ2V0KTsgfQorICAgICAgICBQbGF0
Zm9ybVBsdWdpbldpZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIHBs
YXRmb3JtV2lkZ2V0KCk7IH0KKyNlbmRpZgorCitwcml2YXRlOgorCisjaWYgZGVmaW5lZChYUF9V
TklYKSB8fCBQTEFURk9STShHVEspCisgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgp
OworI2VsaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgICAgIE5QX0NHQ29udGV4dCBtX25wQ2dD
b250ZXh0OworICAgICAgICBDR0NvbnRleHRSZWYgbV9jb250ZXh0UmVmOworCisgICAgICAgIHZv
aWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFhQX1VOSVgp
ICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBib29sIG1faGFzUGVuZGlu
Z0dlb21ldHJ5Q2hhbmdlOworICAgICAgICBQaXhtYXAgbV9kcmF3YWJsZTsKKyAgICAgICAgVmlz
dWFsKiBtX3Zpc3VhbDsKKyAgICAgICAgQ29sb3JtYXAgbV9jb2xvcm1hcDsKKyAgICAgICAgRGlz
cGxheSogbV9wbHVnaW5EaXNwbGF5OworCisgICAgICAgIHZvaWQgaW5pdFhFdmVudChYRXZlbnQq
IGV2ZW50KTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBzdGF0aWMgZ2Jv
b2xlYW4gcGx1Z1JlbW92ZWRDYWxsYmFjayhHdGtTb2NrZXQqLCBQbHVnaW5WaWV3Kik7CisgICAg
ICAgIHN0YXRpYyB2b2lkIHBsdWdBZGRlZENhbGxiYWNrKEd0a1NvY2tldCosIFBsdWdpblZpZXcq
KTsKKyAgICAgICAgdm9pZCB1cGRhdGVXaWRnZXRBbGxvY2F0aW9uQW5kQ2xpcCgpOworICAgICAg
ICBib29sIG1fcGx1Z0FkZGVkOworICAgICAgICBJbnRSZWN0IG1fZGVsYXllZEFsbG9jYXRpb247
CisjZW5kaWYKKworICAgICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3Qg
dG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCisgICAgICAgIEludFJlY3QgbV93aW5kb3dS
ZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsK
KyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gbV9tYW51YWxTdHJlYW07CisKKyAgICAgICAg
Ym9vbCBtX2lzSmF2YVNjcmlwdFBhdXNlZDsKKworICAgICAgICBib29sIG1faGF2ZUNhbGxlZFNl
dFdpbmRvdzsKKworICAgICAgICBzdGF0aWMgUGx1Z2luVmlldyogc19jdXJyZW50UGx1Z2luVmll
dzsKKyAgICB9OworCitpbmxpbmUgUGx1Z2luVmlldyogdG9QbHVnaW5WaWV3KFdpZGdldCogd2lk
Z2V0KQoreworICAgIEFTU0VSVCghd2lkZ2V0IHx8IHdpZGdldC0+aXNQbHVnaW5WaWV3KCkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KTsKK30KKworaW5saW5l
IGNvbnN0IFBsdWdpblZpZXcqIHRvUGx1Z2luVmlldyhjb25zdCBXaWRnZXQqIHdpZGdldCkKK3sK
KyAgICBBU1NFUlQoIXdpZGdldCB8fCB3aWRnZXQtPmlzUGx1Z2luVmlldygpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+KHdpZGdldCk7Cit9CisKKy8vIFRoaXMg
d2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9QbHVn
aW5WaWV3KGNvbnN0IFBsdWdpblZpZXcqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luVmlld1dp
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQxOTExMTU2NzlhMjE4YjU2NTMxOWE2ZmY5ZmEyMGQ2YWU0ZGU3MmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwCkBA
IC0wLDAgKzEsMTAxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW1h
Z2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0JyaWRnZUpTQy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9DaHJvbWVDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRWxlbWVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Rm9jdXNDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVMb2FkUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2Fk
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFBsdWdJbkVs
ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hvc3RXaW5kb3cuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ltYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUJpbmRpbmcuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Mb2NhbFdpbmRvd3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Nb3VzZUV2ZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9y
bU1vdXNlRXZlbnQuaD4KKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBs
dWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luTWFpblRocmVhZFNjaGVkdWxlci5oIgorI2lu
Y2x1ZGUgIlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1NldHRpbmdzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL2NfaW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL25w
cnVudGltZV9pbXBsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9ydW50aW1lX3Jvb3QuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KKworI2lmIFVTRShDQUlSTykKKyNp
bmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4K
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjZW5kaWYKKworc3RhdGljIGlubGluZSBIV05EIHdpbmRv
d0hhbmRsZUZvclBhZ2VDbGllbnQoUGxhdGZvcm1QYWdlQ2xpZW50IGNsaWVudCkKK3sKKyNpZiBQ
TEFURk9STShHVEspCisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybiAwOworICAgIGlm
IChHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhjbGllbnQpKQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFdORD4oR0RLX1dJTkRPV19IV05EKHdpbmRvdykpOwor
ICAgIHJldHVybiAwOworI2Vsc2UKKyAgICByZXR1cm4gY2xpZW50OworI2VuZGlmCit9CisKK3Vz
aW5nIEpTQzo6RXhlY1N0YXRlOwordXNpbmcgSlNDOjpKU0xvY2s7Cit1c2luZyBKU0M6OkpTT2Jq
ZWN0OworCit1c2luZyBzdGQ6Om1pbjsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitjb25zdCBMUENX
U1RSIGtXZWJQbHVnaW5WaWV3ZG93Q2xhc3NOYW1lID0gTCJXZWJQbHVnaW5WaWV3IjsKK2NvbnN0
IExQQ1dTVFIga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5
IjsKKworLy8gVGhlIGNvZGUgdXNlZCB0byBob29rIEJlZ2luUGFpbnQvRW5kUGFpbnQgb3JpZ2lu
YWxseSBjYW1lIGZyb20KKy8vIDxodHRwOi8vd3d3LmZlbmd5dWFuLmNvbS9hcnRpY2xlL3dtcHJp
bnQuaHRtbD4uCisvLyBDb3B5cmlnaHQgKEMpIDIwMDAgYnkgRmVuZyBZdWFuICh3d3cuZmVuZ3l1
YW4uY29tKS4KKworc3RhdGljIHVuc2lnbmVkIGJlZ2luUGFpbnRTeXNDYWxsOworc3RhdGljIEJZ
VEUqIGJlZ2luUGFpbnQ7CisKK3N0YXRpYyB1bnNpZ25lZCBlbmRQYWludFN5c0NhbGw7CitzdGF0
aWMgQllURSogZW5kUGFpbnQ7CisKK3R5cGVkZWYgSERDIChXSU5BUEkgKlB0ckJlZ2luUGFpbnQp
KEhXTkQsIFBBSU5UU1RSVUNUKik7Cit0eXBlZGVmIEJPT0wgKFdJTkFQSSAqUHRyRW5kUGFpbnQp
KEhXTkQsIGNvbnN0IFBBSU5UU1RSVUNUKik7CisKKyNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2
XzY0KSAmJiBDT01QSUxFUihNU1ZDKQorZXh0ZXJuICJDIiBIREMgX19zdGRjYWxsIF9IQmVnaW5Q
YWludChIV05EIGhXbmQsIExQUEFJTlRTVFJVQ1QgbHBQYWludCk7CitleHRlcm4gIkMiIEJPT0wg
X19zdGRjYWxsIF9IRW5kUGFpbnQoSFdORCBoV25kLCBjb25zdCBQQUlOVFNUUlVDVCogbHBQYWlu
dCk7CisjZW5kaWYKKworSERDIFdJTkFQSSBQbHVnaW5WaWV3Ojpob29rZWRCZWdpblBhaW50KEhX
TkQgaFduZCwgUEFJTlRTVFJVQ1QqIGxwUGFpbnQpCit7CisgICAgUGx1Z2luVmlldyogcGx1Z2lu
VmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBs
dWdpblZpZXdQcm9wZXJ0eSkpOworICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPm1f
d21QcmludEhEQykgeworICAgICAgICAvLyBXZSdyZSBzZWNyZXRseSBoYW5kbGluZyBXTV9QUklO
VENMSUVOVCwgc28gc2V0IHVwIHRoZSBQQUlOVFNUUlVDVCBzbworICAgICAgICAvLyB0aGF0IHRo
ZSBwbHVnaW4gd2lsbCBwYWludCBpbnRvIHRoZSBIREMgd2UgcHJvdmlkZS4KKyAgICAgICAgbWVt
c2V0KGxwUGFpbnQsIDAsIHNpemVvZihQQUlOVFNUUlVDVCkpOworICAgICAgICBscFBhaW50LT5o
ZGMgPSBwbHVnaW5WaWV3LT5tX3dtUHJpbnRIREM7CisgICAgICAgIEdldENsaWVudFJlY3QoaFdu
ZCwgJmxwUGFpbnQtPnJjUGFpbnQpOworICAgICAgICByZXR1cm4gcGx1Z2luVmlldy0+bV93bVBy
aW50SERDOworICAgIH0KKworI2lmIENPTVBJTEVSKEdDQykKKyAgICBIREMgcmVzdWx0OworICAg
IGFzbSAoInB1c2ggICAgJTJcbiIKKyAgICAgICAgICJwdXNoICAgICUzXG4iCisgICAgICAgICAi
Y2FsbCAgICAqJTRcbiIKKyAgICAgICAgIDogIj1hIiAocmVzdWx0KQorICAgICAgICAgOiAiYSIg
KGJlZ2luUGFpbnRTeXNDYWxsKSwgImciIChscFBhaW50KSwgImciIChoV25kKSwgIm0iIChiZWdp
blBhaW50KQorICAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworICAgIHJldHVybiByZXN1
bHQ7CisjZWxpZiBkZWZpbmVkKF9NX0lYODYpCisgICAgLy8gQ2FsbCB0aHJvdWdoIHRvIHRoZSBv
cmlnaW5hbCBCZWdpblBhaW50LgorICAgIF9fYXNtICAgbW92ICAgICBlYXgsIGJlZ2luUGFpbnRT
eXNDYWxsCisgICAgX19hc20gICBwdXNoICAgIGxwUGFpbnQKKyAgICBfX2FzbSAgIHB1c2ggICAg
aFduZAorICAgIF9fYXNtICAgY2FsbCAgICBiZWdpblBhaW50CisjZWxzZQorICAgIHJldHVybiBf
SEJlZ2luUGFpbnQoaFduZCwgbHBQYWludCk7CisjZW5kaWYKK30KKworQk9PTCBXSU5BUEkgUGx1
Z2luVmlldzo6aG9va2VkRW5kUGFpbnQoSFdORCBoV25kLCBjb25zdCBQQUlOVFNUUlVDVCogbHBQ
YWludCkKK3sKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcmVpbnRlcnByZXRfY2FzdDxQ
bHVnaW5WaWV3Kj4oR2V0UHJvcChoV25kLCBrV2ViUGx1Z2luVmlld1Byb3BlcnR5KSk7CisgICAg
aWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+bV93bVByaW50SERDKSB7CisgICAgICAgIC8v
IFdlJ3JlIHNlY3JldGx5IGhhbmRsaW5nIFdNX1BSSU5UQ0xJRU5ULCBzbyB3ZSBkb24ndCBoYXZl
IHRvIGRvIGFueQorICAgICAgICAvLyBjbGVhbnVwLgorICAgICAgICByZXR1cm4gVFJVRTsKKyAg
ICB9CisKKyNpZiBDT01QSUxFUihHQ0MpCisgICAgQk9PTCByZXN1bHQ7CisgICAgYXNtICgicHVz
aCAgICUyXG4iCisgICAgICAgICAicHVzaCAgICUzXG4iCisgICAgICAgICAiY2FsbCAgIColNFxu
IgorICAgICAgICAgOiAiPWEiIChyZXN1bHQpCisgICAgICAgICA6ICJhIiAoZW5kUGFpbnRTeXND
YWxsKSwgImciIChscFBhaW50KSwgImciIChoV25kKSwgIm0iIChlbmRQYWludCkKKyAgICAgICAg
KTsKKyAgICByZXR1cm4gcmVzdWx0OworI2VsaWYgZGVmaW5lZCAoX01fSVg4NikKKyAgICAvLyBD
YWxsIHRocm91Z2ggdG8gdGhlIG9yaWdpbmFsIEVuZFBhaW50LgorICAgIF9fYXNtICAgbW92ICAg
ICBlYXgsIGVuZFBhaW50U3lzQ2FsbAorICAgIF9fYXNtICAgcHVzaCAgICBscFBhaW50CisgICAg
X19hc20gICBwdXNoICAgIGhXbmQKKyAgICBfX2FzbSAgIGNhbGwgICAgZW5kUGFpbnQKKyNlbHNl
CisgICAgcmV0dXJuIF9IRW5kUGFpbnQoaFduZCwgbHBQYWludCk7CisjZW5kaWYKK30KKworc3Rh
dGljIHZvaWQgaG9vayhjb25zdCBjaGFyKiBtb2R1bGUsIGNvbnN0IGNoYXIqIHByb2MsIHVuc2ln
bmVkJiBzeXNDYWxsSUQsIEJZVEUqJiBwUHJvYywgY29uc3Qgdm9pZCogcE5ld1Byb2MpCit7Cisg
ICAgLy8gU2VlIDxodHRwOi8vd3d3LmZlbmd5dWFuLmNvbS9hcnRpY2xlL3dtcHJpbnQuaHRtbD4g
Zm9yIGFuIGV4cGxhbmF0aW9uIG9mCisgICAgLy8gaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuCisK
KyAgICBISU5TVEFOQ0UgaE1vZCA9IEdldE1vZHVsZUhhbmRsZUEobW9kdWxlKTsKKworICAgIHBQ
cm9jID0gcmVpbnRlcnByZXRfY2FzdDxCWVRFKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+
KEdldFByb2NBZGRyZXNzKGhNb2QsIHByb2MpKSk7CisKKyNpZiBDT01QSUxFUihHQ0MpIHx8IGRl
ZmluZWQoX01fSVg4NikKKyAgICBpZiAocFByb2NbMF0gIT0gMHhCOCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBiZSByZWFkaW5nIHRoZSBieXRlcyBvbmUtYnkt
b25lIGluc3RlYWQgb2YgZG9pbmcgYW4KKyAgICAvLyB1bmFsaWduZWQgcmVhZD8KKyAgICBzeXND
YWxsSUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KHBQcm9jICsgMSk7CisKKyAgICBE
V09SRCBmbE9sZFByb3RlY3Q7CisgICAgaWYgKCFWaXJ0dWFsUHJvdGVjdChwUHJvYywgNSwgUEFH
RV9FWEVDVVRFX1JFQURXUklURSwgJmZsT2xkUHJvdGVjdCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHBQcm9jWzBdID0gMHhFOTsKKyAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KHBQ
cm9jICsgMSkgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihwTmV3UHJvYykgLSByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihwUHJvYyArIDUpOworCisgICAgcFByb2MgKz0gNTsKKyNlbHNl
CisgICAgLyogRGlzYXNzZW1ibHkgb2YgQmVnaW5QYWludCgpCisgICAgMDAwMDAwMDA3NzlGQzVC
MCA0QyA4QiBEMSAgICAgICAgIG1vdiAgICAgICAgIHIxMCxyY3gKKyAgICAwMDAwMDAwMDc3OUZD
NUIzIEI4IDE3IDEwIDAwIDAwICAgbW92ICAgICAgICAgZWF4LDEwMTdoCisgICAgMDAwMDAwMDA3
NzlGQzVCOCAwRiAwNSAgICAgICAgICAgIHN5c2NhbGwKKyAgICAwMDAwMDAwMDc3OUZDNUJBIEMz
ICAgICAgICAgICAgICAgcmV0CisgICAgMDAwMDAwMDA3NzlGQzVCQiA5MCAgICAgICAgICAgICAg
IG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QkMgOTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAw
MDAwMDc3OUZDNUJEIDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAwMDAwMDA3NzlGQzVCRSA5
MCAgICAgICAgICAgICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QkYgOTAgICAgICAgICAgICAg
ICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUMwIDkwICAgICAgICAgICAgICAgbm9wCisgICAgMDAw
MDAwMDA3NzlGQzVDMSA5MCAgICAgICAgICAgICAgIG5vcAorICAgIDAwMDAwMDAwNzc5RkM1QzIg
OTAgICAgICAgICAgICAgICBub3AKKyAgICAwMDAwMDAwMDc3OUZDNUMzIDkwICAgICAgICAgICAg
ICAgbm9wCisgICAgKi8KKyAgICAvLyBDaGVjayBmb3IgdGhlIHNpZ25hdHVyZSBhcyBpbiB0aGUg
YWJvdmUgZGlzYXNzZW1ibHkKKyAgICBEV09SRCBndWFyZCA9IDB4QjhEMThCNEM7CisgICAgaWYg
KCpyZWludGVycHJldF9jYXN0PERXT1JEKj4ocFByb2MpICE9IGd1YXJkKQorICAgICAgICByZXR1
cm47CisKKyAgICBEV09SRCBmbE9sZFByb3RlY3Q7CisgICAgVmlydHVhbFByb3RlY3QocFByb2Ms
IDEyLCBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFLCAmIGZsT2xkUHJvdGVjdCk7CisgICAgcFByb2Nb
MF0gPSAweDQ4OyAgICAvLyBtb3YgcmF4LCB0aGlzCisgICAgcFByb2NbMV0gPSAweGI4OworICAg
ICooX19pbnQ2NCopKHBQcm9jKzIpID0gKF9faW50NjQpcE5ld1Byb2M7CisgICAgcFByb2NbMTBd
ID0gMHhmZjsgICAvLyBqbXAgcmF4CisgICAgcFByb2NbMTFdID0gMHhlMDsKKyNlbmRpZgorfQor
CitzdGF0aWMgdm9pZCBzZXRVcE9mZnNjcmVlblBhaW50aW5nSG9va3MoSERDIChXSU5BUEkqaG9v
a2VkQmVnaW5QYWludCkoSFdORCwgUEFJTlRTVFJVQ1QqKSwgQk9PTCAoV0lOQVBJKmhvb2tlZEVu
ZFBhaW50KShIV05ELCBjb25zdCBQQUlOVFNUUlVDVCopKQoreworICAgIHN0YXRpYyBib29sIGhh
dmVIb29rZWQgPSBmYWxzZTsKKyAgICBpZiAoaGF2ZUhvb2tlZCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGhhdmVIb29rZWQgPSB0cnVlOworCisgICAgLy8gTW9zdCAoYWxsPykgd2luZG93ZWQgcGx1
Z2lucyBkb24ndCBzZWVtIHRvIHJlc3BvbmQgdG8gV01fUFJJTlRDTElFTlQsIHNvCisgICAgLy8g
d2UgaG9vayBpbnRvIEJlZ2luUGFpbnQvRW5kUGFpbnQgdG8gYWxsb3cgdGhlaXIgbm9ybWFsIFdN
X1BBSU5UIGhhbmRsaW5nCisgICAgLy8gdG8gZHJhdyBpbnRvIGEgZ2l2ZW4gSERDLiBOb3RlIHRo
YXQgdGhpcyBob29raW5nIGFmZmVjdHMgdGhlIGVudGlyZQorICAgIC8vIHByb2Nlc3MuCisgICAg
aG9vaygidXNlcjMyLmRsbCIsICJCZWdpblBhaW50IiwgYmVnaW5QYWludFN5c0NhbGwsIGJlZ2lu
UGFpbnQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPihyZWludGVycHJldF9jYXN0PHB0
cmRpZmZfdD4oaG9va2VkQmVnaW5QYWludCkpKTsKKyAgICBob29rKCJ1c2VyMzIuZGxsIiwgIkVu
ZFBhaW50IiwgZW5kUGFpbnRTeXNDYWxsLCBlbmRQYWludCwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB2b2lkICo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihob29rZWRFbmRQYWludCkpKTsK
KworfQorCitzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQoreworICAgIHN0YXRpYyBi
b29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAgICBpZiAoaGF2ZVJlZ2lz
dGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBoYXZlUmVnaXN0
ZXJlZFdpbmRvd0NsYXNzID0gdHJ1ZTsKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBXZWJDb3Jl
OjpzZXRJbnN0YW5jZUhhbmRsZSgoSElOU1RBTkNFKShHZXRNb2R1bGVIYW5kbGUoMCkpKTsKKyNl
bmRpZgorCisgICAgQVNTRVJUKFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCkpOworCisgICAgV05E
Q0xBU1NFWCB3Y2V4OworICAgIHdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOworICAg
IHdjZXguaEljb25TbSAgICAgICAgPSAwOworICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBDU19E
QkxDTEtTOworICAgIHdjZXgubHBmblduZFByb2MgICAgPSBEZWZXaW5kb3dQcm9jOworICAgIHdj
ZXguY2JDbHNFeHRyYSAgICAgPSAwOworICAgIHdjZXguY2JXbmRFeHRyYSAgICAgPSAwOworICAg
IHdjZXguaEluc3RhbmNlICAgICAgPSBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpOworICAgIHdj
ZXguaEljb24gICAgICAgICAgPSAwOworICAgIHdjZXguaEN1cnNvciAgICAgICAgPSBMb2FkQ3Vy
c29yKDAsIElEQ19BUlJPVyk7CisgICAgd2NleC5oYnJCYWNrZ3JvdW5kICA9IChIQlJVU0gpQ09M
T1JfV0lORE9XOworICAgIHdjZXgubHBzek1lbnVOYW1lICAgPSAwOworICAgIHdjZXgubHBzekNs
YXNzTmFtZSAgPSBrV2ViUGx1Z2luVmlld2Rvd0NsYXNzTmFtZTsKKworICAgIHJldHVybiAhIVJl
Z2lzdGVyQ2xhc3NFeCgmd2NleCk7Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgUGx1Z2luVmlldzo6
UGx1Z2luVmlld1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0pCit7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UGx1Z2luVmlldyo+KEdldFByb3AoaFduZCwga1dlYlBsdWdpblZpZXdQcm9wZXJ0
eSkpOworCisgICAgcmV0dXJuIHBsdWdpblZpZXctPnduZFByb2MoaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0pOworfQorCitzdGF0aWMgYm9vbCBpc1dpbmRvd3NNZXNzYWdlVXNlckdlc3R1
cmUoVUlOVCBtZXNzYWdlKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgICAgICBjYXNl
IFdNX0xCVVRUT05VUDoKKyAgICAgICAgY2FzZSBXTV9NQlVUVE9OVVA6CisgICAgICAgIGNhc2Ug
V01fUkJVVFRPTlVQOgorICAgICAgICBjYXNlIFdNX0tFWVVQOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitzdGF0aWMgaW5saW5lIEludFBvaW50IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coRnJh
bWVWaWV3KiB2aWV3LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuIHZpZXct
PmNvbnRlbnRzVG9XaW5kb3cocG9pbnQpOworfQorCitzdGF0aWMgaW5saW5lIEludFJlY3QgY29u
dGVudHNUb05hdGl2ZVdpbmRvdyhGcmFtZVZpZXcqIHZpZXcsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9XaW5kb3cocmVjdCk7Cit9CisKK0xSRVNV
TFQKK1BsdWdpblZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgLy8gPHJkYXI6Ly81NzExMTM2PiBTb21ldGlt
ZXMgRmxhc2ggd2lsbCBjYWxsIFNldENhcHR1cmUgYmVmb3JlIGNyZWF0aW5nCisgICAgLy8gYSBm
dWxsLXNjcmVlbiB3aW5kb3cgYW5kIHdpbGwgbm90IHJlbGVhc2UgaXQsIHdoaWNoIGNhdXNlcyB0
aGUKKyAgICAvLyBmdWxsLXNjcmVlbiB3aW5kb3cgdG8gbmV2ZXIgcmVjZWl2ZSBtb3VzZSBldmVu
dHMuIFdlIHNldC9yZWxlYXNlIGNhcHR1cmUKKyAgICAvLyBvbiBtb3VzZSBkb3duL3VwIGJlZm9y
ZSBzZW5kaW5nIHRoZSBldmVudCB0byB0aGUgcGx1Zy1pbiB0byBwcmV2ZW50IHRoYXQuCisgICAg
c3dpdGNoIChtZXNzYWdlKSB7CisgICAgICAgIGNhc2UgV01fTEJVVFRPTkRPV046CisgICAgICAg
IGNhc2UgV01fTUJVVFRPTkRPV046CisgICAgICAgIGNhc2UgV01fUkJVVFRPTkRPV046CisgICAg
ICAgICAgICA6OlNldENhcHR1cmUoaFduZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXTV9MQlVUVE9OVVA6CisgICAgICAgIGNhc2UgV01fTUJVVFRPTlVQOgorICAgICAgICBj
YXNlIFdNX1JCVVRUT05VUDoKKyAgICAgICAgICAgIDo6UmVsZWFzZUNhcHR1cmUoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChtZXNzYWdlID09IG1fbGFzdE1lc3NhZ2Ug
JiYKKyAgICAgICAgbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENh
bGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSkgJiYgCisgICAgICAgIG1faXNDYWxs
aW5nUGx1Z2luV25kUHJvYykKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBpZiAobWVzc2FnZSA9
PSBXTV9VU0VSICsgMSAmJgorICAgICAgICBtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1
Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcykpIHsKKyAgICAgICAgaWYgKCFt
X21lc3NhZ2VUaHJvdHRsZXIpCisgICAgICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZXIgPSBhZG9w
dFB0cihuZXcgUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbih0aGlzKSk7CisKKyAgICAgICAgbV9t
ZXNzYWdlVGhyb3R0bGVyLT5hcHBlbmRNZXNzYWdlKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbV9sYXN0TWVzc2FnZSA9IG1l
c3NhZ2U7CisgICAgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jID0gdHJ1ZTsKKworICAgIC8vIElm
IHRoZSBwbHVnLWluIGRvZXNuJ3QgZXhwbGljaXRseSBzdXBwb3J0IGNoYW5naW5nIHRoZSBwb3At
dXAgc3RhdGUsIHdlIGVuYWJsZQorICAgIC8vIHBvcHVwcyBmb3IgYWxsIHVzZXIgZ2VzdHVyZXMu
CisgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gcG9wIHRoZSBzdGF0ZSBpbiBhIHRpbWVyLCBi
ZWNhdXNlIHRoZSBGbGFzaCBwbHVnLWluIAorICAgIC8vIHBvcHMgdXAgd2luZG93cyBpbiByZXNw
b25zZSB0byBhIHBvc3RlZCBtZXNzYWdlLgorICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+dmVyc2lvbiA8IE5QVkVSU19IQVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgJiYKKyAgICAgICAg
aXNXaW5kb3dzTWVzc2FnZVVzZXJHZXN0dXJlKG1lc3NhZ2UpICYmICFtX3BvcFBvcHVwc1N0YXRl
VGltZXIuaXNBY3RpdmUoKSkgeworCisgICAgICAgIHB1c2hQb3B1cHNFbmFibGVkU3RhdGUodHJ1
ZSk7CisKKyAgICAgICAgbV9wb3BQb3B1cHNTdGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAg
ICB9CisKKyAgICBpZiAobWVzc2FnZSA9PSBXTV9QUklOVENMSUVOVCkgeworICAgICAgICAvLyBN
b3N0IChhbGw/KSB3aW5kb3dlZCBwbHVnaW5zIGRvbid0IHJlc3BvbmQgdG8gV01fUFJJTlRDTElF
TlQsIHNvIHdlCisgICAgICAgIC8vIGNoYW5nZSB0aGUgbWVzc2FnZSB0byBXTV9QQUlOVCBhbmQg
cmVseSBvbiBvdXIgaG9va2VkIHZlcnNpb25zIG9mCisgICAgICAgIC8vIEJlZ2luUGFpbnQvRW5k
UGFpbnQgdG8gbWFrZSB0aGUgcGx1Z2luIGRyYXcgaW50byB0aGUgZ2l2ZW4gSERDLgorICAgICAg
ICBtZXNzYWdlID0gV01fUEFJTlQ7CisgICAgICAgIG1fd21QcmludEhEQyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SERDPih3UGFyYW0pOworICAgIH0KKworICAgIC8vIENhbGwgdGhlIHBsdWctaW4ncyB3
aW5kb3cgcHJvYy4KKyAgICBMUkVTVUxUIHJlc3VsdCA9IDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVn
aW5XbmRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisKKyAgICBtX3dtUHJp
bnRIREMgPSAwOworCisgICAgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jID0gZmFsc2U7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldpZGdl
dCgpCit7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVW
aWV3JiBmcmFtZVZpZXcgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSk7CisKKyAgICBJ
bnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlw
UmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmll
dy5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpLCBmcmFtZVJlY3QoKS5z
aXplKCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJl
Y3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYg
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgJiYgKCFtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0IHx8
IG1fd2luZG93UmVjdCAhPSBvbGRXaW5kb3dSZWN0IHx8IG1fY2xpcFJlY3QgIT0gb2xkQ2xpcFJl
Y3QpKSB7CisKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgICAgICAvLyBU
byBwcmV2ZW50IGZsYXNoZXMgd2hpbGUgc2Nyb2xsaW5nLCB3ZSBkaXNhYmxlIGRyYXdpbmcgZHVy
aW5nIHRoZSB3aW5kb3cKKyAgICAgICAgLy8gdXBkYXRlIHByb2Nlc3MgYnkgY2xpcHBpbmcgdGhl
IHdpbmRvdyB0byB0aGUgemVybyByZWN0LgorCisgICAgICAgIGJvb2wgY2xpcFRvWmVyb1JlY3Qg
PSAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9S
ZWN0V2hlblNjcm9sbGluZyk7CisKKyAgICAgICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7CisgICAg
ICAgICAgICBhdXRvIHJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAw
LCAwKSk7CisgICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgp
LCByZ24ubGVhaygpLCBGQUxTRSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRv
IHJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9j
bGlwUmVjdC55KCksIG1fY2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSkpOworICAg
ICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWso
KSwgVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1faGF2ZVVwZGF0ZWRQbHVnaW5X
aWRnZXQgfHwgbV93aW5kb3dSZWN0ICE9IG9sZFdpbmRvd1JlY3QpCisgICAgICAgICAgICA6Ok1v
dmVXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5k
b3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwg
VFJVRSk7CisKKyAgICAgICAgaWYgKGNsaXBUb1plcm9SZWN0KSB7CisgICAgICAgICAgICBhdXRv
IHJnbiA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9j
bGlwUmVjdC55KCksIG1fY2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSkpOworICAg
ICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLmxlYWso
KSwgVFJVRSk7CisgICAgICAgIH0KKworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsK
KworICAgICAgICBtX2hhdmVVcGRhdGVkUGx1Z2luV2lkZ2V0ID0gdHJ1ZTsKKyAgICB9Cit9CisK
K3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQoreworICAgIGlmIChmb2N1
c2VkICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIFNldEZvY3VzKHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpOworCisgICAgV2lkZ2V0OjpzZXRGb2N1cyhmb2N1c2VkKTsKKworICAg
IGlmICghbV9wbHVnaW4gfHwgbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBO
UEV2ZW50IG5wRXZlbnQ7CisKKyAgICBucEV2ZW50LmV2ZW50ID0gZm9jdXNlZCA/IFdNX1NFVEZP
Q1VTIDogV01fS0lMTEZPQ1VTOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKyAgICBucEV2ZW50
LmxQYXJhbSA9IDA7CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVudCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7CisKKyAgICBp
ZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAg
U2hvd1dpbmRvdyhwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBTV19TSE9XTkEpOworCisgICAgV2lk
Z2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgc2V0U2Vs
ZlZpc2libGUoZmFsc2UpOworCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIFNob3dXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQo
KSwgU1dfSElERSk7CisKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKworYm9vbCBQbHVnaW5WaWV3
OjpkaXNwYXRjaE5QRXZlbnQoTlBFdmVudCYgbnBFdmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5ldmVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBib29s
IHNob3VsZFBvcCA9IGZhbHNlOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT52
ZXJzaW9uIDwgTlBWRVJTX0hBU19QT1BVUFNfRU5BQkxFRF9TVEFURSAmJiBpc1dpbmRvd3NNZXNz
YWdlVXNlckdlc3R1cmUobnBFdmVudC5ldmVudCkpIHsKKyAgICAgICAgcHVzaFBvcHVwc0VuYWJs
ZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAgc2hvdWxkUG9wID0gdHJ1ZTsKKyAgICB9CisKKyAgICBK
U0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNv
bW1vblZNKCkpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgYm9vbCBhY2NlcHRl
ZCA9ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQp
OworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworCisgICAgaWYgKHNob3VsZFBvcCkgCisg
ICAgICAgIHBvcFBvcHVwc0VuYWJsZWRTdGF0ZSgpOworCisgICAgcmV0dXJuIGFjY2VwdGVkOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50SW50b1RyYW5zZm9ybWVkQ29udGV4dChIREMgaGRj
KQoreworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgU2VuZE1lc3NhZ2UocGxhdGZv
cm1QbHVnaW5XaWRnZXQoKSwgV01fUFJJTlRDTElFTlQsIHJlaW50ZXJwcmV0X2Nhc3Q8V1BBUkFN
PihoZGMpLCBQUkZfQ0xJRU5UIHwgUFJGX0NISUxEUkVOIHwgUFJGX09XTkVEKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdh
YmxlOworICAgIG1fbnBXaW5kb3cud2luZG93ID0gaGRjOworCisgICAgV0lORE9XUE9TIHdpbmRv
d3BvcyA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworCisgICAgSW50UmVjdCByID0gY29udGVu
dHNUb05hdGl2ZVdpbmRvdyhkb3duY2FzdDxGcmFtZVZpZXc+KHBhcmVudCgpKSwgZnJhbWVSZWN0
KCkpOworCisgICAgd2luZG93cG9zLnggPSByLngoKTsKKyAgICB3aW5kb3dwb3MueSA9IHIueSgp
OworICAgIHdpbmRvd3Bvcy5jeCA9IHIud2lkdGgoKTsKKyAgICB3aW5kb3dwb3MuY3kgPSByLmhl
aWdodCgpOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9X
SU5ET1dQT1NDSEFOR0VEOworICAgIG5wRXZlbnQubFBhcmFtID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KCZ3aW5kb3dwb3MpOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKworICAgIGRp
c3BhdGNoTlBFdmVudChucEV2ZW50KTsKKworICAgIHNldE5QV2luZG93UmVjdChmcmFtZVJlY3Qo
KSk7CisKKyAgICBucEV2ZW50LmV2ZW50ID0gV01fUEFJTlQ7CisgICAgbnBFdmVudC53UGFyYW0g
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaGRjKTsKKworICAgIC8vIFRoaXMgaXMgc3Vw
cG9zZWQgdG8gYmUgYSBwb2ludGVyIHRvIHRoZSBkaXJ0eSByZWN0LCBidXQgaXQgc2VlbXMgdGhh
dCB0aGUgRmxhc2ggcGx1Z2luCisgICAgLy8gaWdub3JlcyBpdCBzbyB3ZSBqdXN0IHBhc3MgbnVs
bC4KKyAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisKKyAgICBkaXNwYXRjaE5QRXZlbnQobnBFdmVu
dCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyNpZiAh
VVNFKFdJTkdESSkKKyAgICBBU1NFUlQobV9pc1dpbmRvd2VkKTsKKyAgICBBU1NFUlQoY29udGV4
dC0+c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpKTsKKworICAgIEludFBvaW50IGxvY2F0aW9u
SW5XaW5kb3cgPSBkb3duY2FzdDxGcmFtZVZpZXc+KCpwYXJlbnQoKSkuY29udmVydFRvQ29udGFp
bmluZ1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKKworICAgIExvY2FsV2luZG93c0Nv
bnRleHQgd2luZG93c0NvbnRleHQoY29udGV4dCwgZnJhbWVSZWN0KCksIGZhbHNlKTsKKworI2lm
IFVTRShDQUlSTykKKyAgICAvLyBNdXN0IGZsdXNoIGRyYXdpbmdzIHVwIHRvIHRoaXMgcG9pbnQg
dG8gdGhlIGJhY2tpbmcgbWV0YWZpbGUsIG90aGVyd2lzZSB0aGUKKyAgICAvLyBwbHVnaW4gcmVn
aW9uIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBhbnkgY2xlYXIgcmVnaW9ucyBzcGVjaWZpZWQg
aW4gdGhlCisgICAgLy8gY2Fpcm8tY29udHJvbGxlZCBwb3J0aW9ucyBvZiB0aGUgcmVuZGVyaW5n
LgorICAgIGNhaXJvX3Nob3dfcGFnZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7
CisjZW5kaWYKKworICAgIEhEQyBoZGMgPSB3aW5kb3dzQ29udGV4dC5oZGMoKTsKKyAgICBYRk9S
TSBvcmlnaW5hbFRyYW5zZm9ybTsKKyAgICBHZXRXb3JsZFRyYW5zZm9ybShoZGMsICZvcmlnaW5h
bFRyYW5zZm9ybSk7CisKKyAgICAvLyBUaGUgcGx1Z2luIGV4cGVjdHMgdGhlIERDIHRvIGJlIGlu
IGNsaWVudCBjb29yZGluYXRlcywgc28gd2UgdHJhbnNsYXRlCisgICAgLy8gdGhlIERDIHRvIG1h
a2UgdGhhdCBzby4KKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gY29udGV4dC0+Z2V0Q1RNKCk7
CisgICAgY3RtLnRyYW5zbGF0ZShsb2NhdGlvbkluV2luZG93LngoKSwgbG9jYXRpb25JbldpbmRv
dy55KCkpOworICAgIFhGT1JNIHRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFhGT1JNPihjdG0udG9U
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKworICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJnRy
YW5zZm9ybSk7CisKKyAgICBwYWludEludG9UcmFuc2Zvcm1lZENvbnRleHQoaGRjKTsKKworICAg
IFNldFdvcmxkVHJhbnNmb3JtKGhkYywgJm9yaWdpbmFsVHJhbnNmb3JtKTsKKyNlbmRpZgorfQor
Cit2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAgIC8vIERy
YXcgdGhlICJtaXNzaW5nIHBsdWdpbiIgaW1hZ2UKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2lu
SWNvbihjb250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChj
b250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEVu
c3VyZSB0aGF0IHdlIGhhdmUgY2FsbGVkIFNldFdpbmRvdyBiZWZvcmUgd2UgdHJ5IHRvIHBhaW50
LgorICAgIGlmICghbV9oYXZlQ2FsbGVkU2V0V2luZG93KQorICAgICAgICBzZXROUFdpbmRvd1Jl
Y3QoZnJhbWVSZWN0KCkpOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworI2lmICFVU0UoV0lO
R0RJKQorICAgICAgICBpZiAoY29udGV4dC0+c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpKQor
ICAgICAgICAgICAgcGFpbnRXaW5kb3dlZFBsdWdpbkludG9Db250ZXh0KGNvbnRleHQsIHJlY3Qp
OworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJbiB0aGUgR1RLIGFu
ZCBRdCBwb3J0cyB3ZSBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIGRvbid0IHdhbnQg
dG8gdXNlIHRoZSB3aW5kb3cKKyAgICAvLyBjb29yZGluYXRlcy4KKyNpZiBQTEFURk9STShHVEsp
CisgICAgSW50UmVjdCByZWN0SW5XaW5kb3cocmVjdCk7CisgICAgcmVjdEluV2luZG93LmludGVy
c2VjdChmcmFtZVJlY3QoKSk7CisjZWxzZQorICAgIEludFJlY3QgcmVjdEluV2luZG93ID0gZG93
bmNhc3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KCkp
OworI2VuZGlmCisgICAgTG9jYWxXaW5kb3dzQ29udGV4dCB3aW5kb3dzQ29udGV4dChjb250ZXh0
LCByZWN0SW5XaW5kb3csIG1faXNUcmFuc3BhcmVudCk7CisKKyAgICAvLyBPbiBTYWZhcmkvV2lu
ZG93cyB3aXRob3V0IHRyYW5zcGFyZW5jeSBsYXllcnMgdGhlIEdyYXBoaWNzQ29udGV4dCByZXR1
cm5zIHRoZSBIREMKKyAgICAvLyBvZiB0aGUgd2luZG93IGFuZCB0aGUgcGx1Z2luIGV4cGVjdHMg
dGhhdCB0aGUgcGFzc2VkIGluIERDIGhhcyB3aW5kb3cgY29vcmRpbmF0ZXMuCisgICAgLy8gSW4g
dGhlIEdUSyBhbmQgUXQgcG9ydHMgd2UgYWx3YXlzIGRyYXcgaW4gYW4gb2Zmc2NyZWVuIGJ1ZmZl
ciBhbmQgdGhlcmVmb3JlIG5lZWQKKyAgICAvLyB0byBwcmVzZXJ2ZSB0aGUgdHJhbnNsYXRpb24g
c2V0IGluIGdldFdpbmRvd3NDb250ZXh0LgorI2lmICFQTEFURk9STShHVEspCisgICAgaWYgKCFj
b250ZXh0LT5pc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSkgeworICAgICAgICBYRk9STSB0cmFuc2Zv
cm07CisgICAgICAgIEdldFdvcmxkVHJhbnNmb3JtKHdpbmRvd3NDb250ZXh0LmhkYygpLCAmdHJh
bnNmb3JtKTsKKyAgICAgICAgdHJhbnNmb3JtLmVEeCA9IDA7CisgICAgICAgIHRyYW5zZm9ybS5l
RHkgPSAwOworICAgICAgICBTZXRXb3JsZFRyYW5zZm9ybSh3aW5kb3dzQ29udGV4dC5oZGMoKSwg
JnRyYW5zZm9ybSk7CisgICAgfQorI2VuZGlmCisKKyAgICBwYWludEludG9UcmFuc2Zvcm1lZENv
bnRleHQod2luZG93c0NvbnRleHQuaGRjKCkpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgQVNTRVJUKG1fcGx1
Z2luICYmICFtX2lzV2luZG93ZWQpOworCisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgbnBF
dmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29kZSgpOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0g
V01fS0VZRE9XTjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOworICAgIH0gZWxzZSBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgeworICAgICAgICBu
cEV2ZW50LmV2ZW50ID0gV01fQ0hBUjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOworICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudCkgewor
ICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZVVA7CisgICAgICAgIG5wRXZlbnQubFBhcmFt
ID0gMHg4MDAwOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisKKyAgICBKU0M6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkp
OworICAgIGlmIChkaXNwYXRjaE5QRXZlbnQobnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworfQorCitleHRlcm4gYm9vbCBpZ25vcmVOZXh0U2V0Q3Vyc29yOwor
Cit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7
CisgICAgQVNTRVJUKG1fcGx1Z2luICYmICFtX2lzV2luZG93ZWQpOworCisgICAgTlBFdmVudCBu
cEV2ZW50OworCisgICAgSW50UG9pbnQgcCA9IGNvbnRlbnRzVG9OYXRpdmVXaW5kb3coZG93bmNh
c3Q8RnJhbWVWaWV3PihwYXJlbnQoKSksIEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+
cGFnZVkoKSkpOworCisgICAgbnBFdmVudC5sUGFyYW0gPSBNQUtFTFBBUkFNKHAueCgpLCBwLnko
KSk7CisgICAgbnBFdmVudC53UGFyYW0gPSAwOworCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkp
CisgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX0NPTlRST0w7CisgICAgaWYgKGV2ZW50LT5z
aGlmdEtleSgpKQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19TSElGVDsKKworICAgIGlm
IChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCB8fAorICAgICAg
ICBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50IHx8IAorICAgICAg
ICBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgeworICAgICAg
ICBucEV2ZW50LmV2ZW50ID0gV01fTU9VU0VNT1ZFOworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRv
bkRvd24oKSkKKyAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQ
YXJhbSB8PSBNS19MQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfTUJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfUkJVVFRPTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgZm9jdXNQbHVnaW5FbGVtZW50KCk7CisgICAgICAgIHN3
aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAg
ICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQg
PSBXTV9NQlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTkRPV047Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkgeworICAgICAgICBzd2l0Y2ggKGV2
ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01CVVRU
T05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAg
ICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTlVQOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKworICAgIEpT
Qzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKEpTRE9NV2luZG93QmFzZTo6Y29t
bW9uVk0oKSk7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIGJhY2sgcG9ydGluZyB0aGUgaHR0cDov
L3dlYmtpdC5vcmcvYi81ODEwOCBmaXggaGVyZS4KKyAgICBpZiAoZGlzcGF0Y2hOUEV2ZW50KG5w
RXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKworI2lmICFQTEFU
Rk9STShHVEspCisgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNldEN1cnNvciBpcyBhbHdheXMg
Y2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRIYW5kbGVyLmNwcAorICAgIC8vIGFu
ZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8g
dHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KKyAgICBpZ25vcmVOZXh0U2V0Q3Vyc29yID0gdHJ1
ZTsKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAg
cGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2V0TGFzdFNldEN1cnNvclRvQ3VycmVudEN1cnNvcigp
OworI2VuZGlmCit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBh
cmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworCisgICAgaWYgKHBhcmVu
dCkKKyAgICAgICAgaW5pdCgpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIXBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gSWYgdGhlIHBs
dWctaW4gd2luZG93IG9yIG9uZSBvZiBpdHMgY2hpbGRyZW4gaGF2ZSB0aGUgZm9jdXMsIHdlIG5l
ZWQgdG8gCisgICAgICAgIC8vIGNsZWFyIGl0IHRvIHByZXZlbnQgdGhlIHdlYiB2aWV3IHdpbmRv
dyBmcm9tIGJlaW5nIGZvY3VzZWQgYmVjYXVzZSB0aGF0IGNhbgorICAgICAgICAvLyB0cmlnZ2Vy
IGEgbGF5b3V0IHdoaWxlIHRoZSBwbHVnaW4gZWxlbWVudCBpcyBiZWluZyBkZXRhY2hlZC4KKyAg
ICAgICAgSFdORCBmb2N1c2VkV2luZG93ID0gOjpHZXRGb2N1cygpOworICAgICAgICBpZiAocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSA9PSBmb2N1c2VkV2luZG93IHx8IDo6SXNDaGlsZChwbGF0Zm9y
bVBsdWdpbldpZGdldCgpLCBmb2N1c2VkV2luZG93KSkKKyAgICAgICAgICAgIDo6U2V0Rm9jdXMo
MCk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2
aXNpYmxlKQoreworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSA9PSB2aXNpYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7CisKKyAg
ICBpZiAoaXNTZWxmVmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAg
ICAgaWYgKHZpc2libGUpCisgICAgICAgICAgICBTaG93V2luZG93KHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCksIFNXX1NIT1dOQSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFNob3dXaW5kb3co
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgU1dfSElERSk7CisgICAgfQorfQorCit2b2lkIFBsdWdp
blZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICgh
bV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEluIHRoZSBHVEsgcG9ydCB3
ZSBkcmF3IGluIGFuIG9mZnNjcmVlbiBidWZmZXIgYW5kIGRvbid0IHdhbnQgdG8gdXNlIHRoZSB3
aW5kb3cKKyAgICAvLyBjb29yZGluYXRlcy4KKyMgaWYgUExBVEZPUk0oR1RLKQorICAgIEludFBv
aW50IHAgPSByZWN0LmxvY2F0aW9uKCk7CisjIGVsc2UKKyAgICBJbnRQb2ludCBwID0gZG93bmNh
c3Q8RnJhbWVWaWV3PigqcGFyZW50KCkpLmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigp
KTsKKyMgZW5kaWYKKyAgICBtX25wV2luZG93LnggPSBwLngoKTsKKyAgICBtX25wV2luZG93Lnkg
PSBwLnkoKTsKKworICAgIG1fbnBXaW5kb3cud2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgbV9u
cFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworCisgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9
IHJlY3QuaGVpZ2h0KCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBt
X25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPnNldHdpbmRvdykgeworICAgICAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCkpOworICAgICAgICBzZXRDYWxs
aW5nUGx1Z2luKHRydWUpOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2lu
ZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihm
YWxzZSk7CisKKyAgICAgICAgbV9oYXZlQ2FsbGVkU2V0V2luZG93ID0gdHJ1ZTsKKworICAgICAg
ICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NF
UlQocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisKKyAgICAgICAgV05EUFJPQyBjdXJyZW50V25k
UHJvYyA9IChXTkRQUk9DKUdldFdpbmRvd0xvbmdQdHIocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwg
R1dMUF9XTkRQUk9DKTsKKyAgICAgICAgaWYgKGN1cnJlbnRXbmRQcm9jICE9IFBsdWdpblZpZXdX
bmRQcm9jKQorICAgICAgICAgICAgbV9wbHVnaW5XbmRQcm9jID0gKFdORFBST0MpU2V0V2luZG93
TG9uZ1B0cihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xQX1dORFBST0MsIChMT05HX1BUUilQ
bHVnaW5WaWV3V25kUHJvYyk7CisgICAgfQorfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRs
ZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdCBj
aGFyKiBidWYpCit7CisgICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChm
aWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVu
YW1lLnN1YnN0cmluZyg4KTsKKworICAgIC8vIEdldCBmaWxlIGluZm8KKyAgICBXSU4zMl9GSUxF
X0FUVFJJQlVURV9EQVRBIGF0dHJzOworICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4VyhmaWxl
bmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgR2V0RmlsZUV4SW5m
b1N0YW5kYXJkLCAmYXR0cnMpID09IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9G
T1VORDsKKworICAgIGlmIChhdHRycy5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVf
RElSRUNUT1JZKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBI
QU5ETEUgZmlsZUhhbmRsZSA9IENyZWF0ZUZpbGVXKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBGSUxFX1JFQURfREFUQSwgRklMRV9TSEFSRV9SRUFELCAw
LCBPUEVOX0VYSVNUSU5HLCAwLCAwKTsKKyAgICAKKyAgICBpZiAoZmlsZUhhbmRsZSA9PSBJTlZB
TElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwor
CisgICAgYnVmZmVyLnJlc2l6ZShhdHRycy5uRmlsZVNpemVMb3cpOworCisgICAgRFdPUkQgYnl0
ZXNSZWFkOworICAgIGludCByZXR2YWwgPSBSZWFkRmlsZShmaWxlSGFuZGxlLCBidWZmZXIuZGF0
YSgpLCBhdHRycy5uRmlsZVNpemVMb3csICZieXRlc1JlYWQsIDApOworCisgICAgQ2xvc2VIYW5k
bGUoZmlsZUhhbmRsZSk7CisKKyAgICBpZiAocmV0dmFsID09IDAgfHwgYnl0ZXNSZWFkICE9IGF0
dHJzLm5GaWxlU2l6ZUxvdykKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwor
CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRm
b3JtR2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUsIHZvaWQqLCBOUEVycm9yKikKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGx1Z2luVmlldzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5W
YXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUsIE5QRXJyb3IqIHJlc3VsdCkKK3sKKyAgICBz
d2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7Cisg
ICAgICAgICAgICBIV05EKiB3ID0gcmVpbnRlcnByZXRfY2FzdDxIV05EKj4odmFsdWUpOworICAg
ICAgICAgICAgKncgPSB3aW5kb3dIYW5kbGVGb3JQYWdlQ2xpZW50KHBhcmVudCgpID8gcGFyZW50
KCktPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkgOiAwKTsKKyAgICAgICAgICAg
ICpyZXN1bHQgPSBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNXaW5kb3dsZXNzOiB7CisgICAgICAg
ICAgICBOUEJvb2wqIGZsYWcgPSByZWludGVycHJldF9jYXN0PE5QQm9vbCo+KHZhbHVlKTsKKyAg
ICAgICAgICAgICpmbGFnID0gVFJVRTsKKyAgICAgICAgICAgICpyZXN1bHQgPSBOUEVSUl9OT19F
UlJPUjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKG1faXNXaW5kb3dl
ZCkgeworICAgICAgICBSRUNUIGludmFsaWRSZWN0ID0geyByZWN0LngoKSwgcmVjdC55KCksIHJl
Y3QubWF4WCgpLCByZWN0Lm1heFkoKSB9OworICAgICAgICA6OkludmFsaWRhdGVSZWN0KHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCksICZpbnZhbGlkUmVjdCwgZmFsc2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaW52YWxpZGF0ZVdpbmRvd2xlc3NQbHVnaW5SZWN0KHJlY3QpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBp
ZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSBy
ZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaWYgKG1faXNXaW5k
b3dlZCkgeworICAgICAgICBSRUNUIGludmFsaWRSZWN0ID0geyByLngoKSwgci55KCksIHIubWF4
WCgpLCByLm1heFkoKSB9OworICAgICAgICBJbnZhbGlkYXRlUmVjdChwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCAmaW52YWxpZFJlY3QsIEZBTFNFKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
bV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRl
KSkgeworICAgICAgICAgICAgbV9pbnZhbGlkUmVjdHMuYXBwZW5kKHIpOworICAgICAgICAgICAg
aWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1faW52
YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAwMSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgaW52YWxpZGF0ZVJlY3Qocik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6Omlu
dmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQoreworICAgIGlmIChtX2lzV2luZG93ZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIFJFQ1QgcjsKKworICAgIGlmIChHZXRSZ25Cb3gocmVn
aW9uLCAmcikgPT0gMCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoci5sZWZ0LCByLnRvcCksIEludFNp
emUoci5yaWdodC1yLmxlZnQsIHIuYm90dG9tLXIudG9wKSk7CisgICAgaW52YWxpZGF0ZVJlY3Qo
cmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQoreworICAgIGlmICht
X2lzV2luZG93ZWQpCisgICAgICAgIDo6VXBkYXRlV2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0
KCkpOworICAgIGVsc2UKKyAgICAgICAgOjpVcGRhdGVXaW5kb3cod2luZG93SGFuZGxlRm9yUGFn
ZUNsaWVudChwYXJlbnQoKSA/IHBhcmVudCgpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNs
aWVudCgpIDogMCkpOworfQorCitib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtU3RhcnQoKQorewor
ICAgIEFTU0VSVChtX2lzU3RhcnRlZCk7CisgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0
YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAg
ICAgIHJlZ2lzdGVyUGx1Z2luVmlldygpOworICAgICAgICBzZXRVcE9mZnNjcmVlblBhaW50aW5n
SG9va3MoaG9va2VkQmVnaW5QYWludCwgaG9va2VkRW5kUGFpbnQpOworCisgICAgICAgIERXT1JE
IGZsYWdzID0gV1NfQ0hJTEQ7CisgICAgICAgIGlmIChpc1NlbGZWaXNpYmxlKCkpCisgICAgICAg
ICAgICBmbGFncyB8PSBXU19WSVNJQkxFOworCisgICAgICAgIEhXTkQgcGFyZW50V2luZG93SGFu
ZGxlID0gd2luZG93SGFuZGxlRm9yUGFnZUNsaWVudChtX3BhcmVudEZyYW1lLT52aWV3KCktPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpOworICAgICAgICBIV05EIHdpbmRvdyA9
IDo6Q3JlYXRlV2luZG93RXgoMCwga1dlYlBsdWdpblZpZXdkb3dDbGFzc05hbWUsIDAsIGZsYWdz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgcGFy
ZW50V2luZG93SGFuZGxlLCAwLCBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpLCAwKTsKKworI2lm
IE9TKFdJTkRPV1MpICYmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgbV93aW5kb3cgPSB3aW5kb3c7
CisjZWxzZQorICAgICAgICBzZXRQbGF0Zm9ybVdpZGdldCh3aW5kb3cpOworI2VuZGlmCisKKyAg
ICAgICAgLy8gQ2FsbGluZyBTZXRXaW5kb3dMb25nUHRyQSBoZXJlIG1ha2VzIHRoZSB3aW5kb3cg
cHJvYyBBU0NJSSwgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYXQgbGVhc3QKKyAgICAgICAgLy8gdGhl
IFNob2Nrd2F2ZSBEaXJlY3RvciBwbHVnLWluLgorI2lmIE9TKFdJTkRPV1MpICYmIENQVShYODZf
NjQpCisgICAgICAgIDo6U2V0V2luZG93TG9uZ1B0ckEocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwg
R1dMUF9XTkRQUk9DLCAoTE9OR19QVFIpRGVmV2luZG93UHJvY0EpOworI2Vsc2UKKyAgICAgICAg
OjpTZXRXaW5kb3dMb25nUHRyQShwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCBHV0xfV05EUFJPQywg
KExPTkcpRGVmV2luZG93UHJvY0EpOworI2VuZGlmCisgICAgICAgIFNldFByb3AocGxhdGZvcm1Q
bHVnaW5XaWRnZXQoKSwga1dlYlBsdWdpblZpZXdQcm9wZXJ0eSwgdGhpcyk7CisKKyAgICAgICAg
bV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgICAgICBtX25wV2luZG93
LndpbmRvdyA9IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBXaW5k
b3cud2luZG93ID0gMDsKKyAgICB9CisKKyAgICB1cGRhdGVQbHVnaW5XaWRnZXQoKTsKKworICAg
IGlmICghbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNl
dFdpbmRvd0NhbGwpKQorICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVSZWN0KCkpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGxhdGZvcm1EZXN0cm95KCkK
K3sKKyAgICBpZiAoIXBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIERlc3Ryb3lXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgc2V0UGxhdGZv
cm1QbHVnaW5XaWRnZXQoMCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IFBsdWdpblZpZXc6OnNu
YXBzaG90KCkKK3sKKyNpZiAhUExBVEZPUk0oR1RLKSAmJiAhVVNFKFdJTkdESSkKKyAgICBhdXRv
IGhkYyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKKworICAgIGlm
ICghbV9pc1dpbmRvd2VkKSB7CisgICAgICAgIC8vIEVuYWJsZSB3b3JsZCB0cmFuc2Zvcm1zLgor
ICAgICAgICBTZXRHcmFwaGljc01vZGUoaGRjLmdldCgpLCBHTV9BRFZBTkNFRCk7CisKKyAgICAg
ICAgWEZPUk0gdHJhbnNmb3JtOworICAgICAgICBHZXRXb3JsZFRyYW5zZm9ybShoZGMuZ2V0KCks
ICZ0cmFuc2Zvcm0pOworCisgICAgICAgIC8vIFdpbmRvd2xlc3MgcGx1Zy1pbnMgYXNzdW1lIHRo
YXQgdGhleSdyZSBkcmF3aW5nIG9udG8gdGhlIHZpZXcncyBEQy4KKyAgICAgICAgLy8gVHJhbnNs
YXRlIHRoZSBjb250ZXh0IHNvIHRoYXQgdGhlIHBsdWctaW4gZHJhd3MgYXQgKDAsIDApLgorICAg
ICAgICBJbnRQb2ludCBwb3NpdGlvbiA9IGRvd25jYXN0PEZyYW1lVmlldz4oKnBhcmVudCgpKS5j
b250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpKS5sb2NhdGlvbigpOworICAgICAgICB0cmFuc2Zv
cm0uZUR4ID0gLXBvc2l0aW9uLngoKTsKKyAgICAgICAgdHJhbnNmb3JtLmVEeSA9IC1wb3NpdGlv
bi55KCk7CisgICAgICAgIFNldFdvcmxkVHJhbnNmb3JtKGhkYy5nZXQoKSwgJnRyYW5zZm9ybSk7
CisgICAgfQorCisgICAgdm9pZCogYml0czsKKyAgICBCaXRtYXBJbmZvIGJtcCA9IEJpdG1hcElu
Zm86OmNyZWF0ZUJvdHRvbVVwKGZyYW1lUmVjdCgpLnNpemUoKSk7CisgICAgYXV0byBoYm1wID0g
YWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZibXAsIERJQl9SR0JfQ09MT1JT
LCAmYml0cywgMCwgMCkpOworCisgICAgSEJJVE1BUCBoYm1wT2xkID0gc3RhdGljX2Nhc3Q8SEJJ
VE1BUD4oU2VsZWN0T2JqZWN0KGhkYy5nZXQoKSwgaGJtcC5nZXQoKSkpOworCisgICAgcGFpbnRJ
bnRvVHJhbnNmb3JtZWRDb250ZXh0KGhkYy5nZXQoKSk7CisKKyAgICBTZWxlY3RPYmplY3QoaGRj
LmdldCgpLCBoYm1wT2xkKTsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGhibXAu
Z2V0KCkpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL25wYXBpLmNw
cCBiL1NvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvbnBhcGkuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZDkw
YTUyYjdhMWU3Yzk2ZThkZjRkODk5YmNmODAxOTQ4ZWZmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL25wYXBpLmNwcApAQCAtMCwwICsxLDIwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsdWdpbk1haW5U
aHJlYWRTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAibnBy
dW50aW1lX2ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBUaGUg
cGx1Z2luIHZpZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBvZiB0aGUgaW5zdGFuY2UsLiBTb21ldGlt
ZXMsIHBsdWctaW5zIHdpbGwgY2FsbCBhbiBpbnN0YW5jZS1zcGVjaWZpYyBmdW5jdGlvbgorLy8g
d2l0aCBhIE5VTEwgaW5zdGFuY2UuIFRvIHdvcmthcm91bmQgdGhpcywgY2FsbCB0aGUgbGFzdCBw
bHVnLWluIHZpZXcgdGhhdCBtYWRlIGEgY2FsbCB0byBhIHBsdWctaW4uCisvLyBDdXJyZW50bHks
IHRoZSBjdXJyZW50IHBsdWctaW4gdmlldyBpcyBvbmx5IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQ
bHVnaW5WaWV3OjpzdGFydC4KKy8vIFRoaXMgc3BlY2lmaWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFz
aCBhbmQgU2hvY2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQX05ldywgdGhleSBjYWxsIE5QTl9Vc2Vy
YWdlbnQgd2l0aCBhIE5VTEwgaW5zdGFuY2UuCitzdGF0aWMgUGx1Z2luVmlldyogcGx1Z2luVmll
d0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFu
Y2UtPm5kYXRhKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGluc3Rh
bmNlLT5uZGF0YSk7CisgICAgcmV0dXJuIFBsdWdpblZpZXc6OmN1cnJlbnRQbHVnaW5WaWV3KCk7
Cit9CisKK3ZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzJfdCBzaXplKQoreworICAgIHJldHVybiBt
YWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQoreworICAgIGZy
ZWUocHRyKTsKK30KKwordWludDMyX3QgTlBOX01lbUZsdXNoKHVpbnQzMl90KQoreworICAgIC8v
IERvIG5vdGhpbmcKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBOUE5fUmVsb2FkUGx1Z2lucyhO
UEJvb2wgcmVsb2FkUGFnZXMpCit7CisgICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMocmVsb2FkUGFn
ZXMpOworfQorCitOUEVycm9yIE5QTl9SZXF1ZXN0UmVhZChOUFN0cmVhbSosIE5QQnl0ZVJhbmdl
KikKK3sKKyAgICByZXR1cm4gTlBFUlJfU1RSRUFNX05PVF9TRUVLQUJMRTsKK30KKworTlBFcnJv
ciBOUE5fR2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbm90aWZ5RGF0
YSk7Cit9CisKK05QRXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5nZXRVUkwodXJsLCB0YXJnZXQpOworfQorCitOUEVycm9yIE5QTl9Qb3N0
VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90
aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
cG9zdFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEpOwor
fQorCitOUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMl90IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wg
ZmlsZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9z
dFVSTCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUpOworfQorCitOUEVycm9yIE5QTl9OZXdT
dHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwg
TlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQsIHN0cmVhbSk7Cit9CisKK2ludDMyX3Qg
TlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBsZW4sIHZv
aWQqIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+d3JpdGUoc3RyZWFtLCBsZW4sIGJ1ZmZlcik7Cit9CisKK05QRXJyb3IgTlBOX0Rlc3Ryb3lT
dHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7
CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmRlc3Ryb3lTdHJl
YW0oc3RyZWFtLCByZWFzb24pOworfQorCitjb25zdCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBp
bnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3KiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKTsKKworICAgICBpZiAoIXZpZXcpCisgICAgICAgICByZXR1cm4gUGx1Z2luVmll
dzo6dXNlckFnZW50U3RhdGljKCk7CisgCisgICAgcmV0dXJuIHZpZXctPnVzZXJBZ2VudCgpOwor
fQorCit2b2lkIE5QTl9TdGF0dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQor
eworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnN0YXR1cyhtZXNzYWdlKTsK
K30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJlY3QqIGludmFs
aWRSZWN0KQoreworICAgIFBsdWdpblZpZXcqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpOworI2lmIGRlZmluZWQoWFBfVU5JWCkKKyAgICAvLyBOU1BsdWdpbldyYXBwZXIs
IGEgcGx1Z2luIHdyYXBwZXIgYmluYXJ5IHRoYXQgYWxsb3dzIHJ1bm5pbmcgMzItYml0IHBsdWdp
bnMKKyAgICAvLyBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyB0eXBpY2FsbHkgdXNlZCBpbiBYMTEs
IHdpbGwgc29tZXRpbWVzIGdpdmUgdXMgYSBudWxsIE5QUCBoZXJlLgorICAgIGlmICghdmlldykK
KyAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgdmlldy0+aW52YWxpZGF0ZVJlY3QoaW52YWxp
ZFJlY3QpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBS
ZWdpb24gaW52YWxpZFJlZ2lvbikKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT5pbnZhbGlkYXRlUmVnaW9uKGludmFsaWRSZWdpb24pOworfQorCit2b2lkIE5QTl9Gb3Jj
ZVJlZHJhdyhOUFAgaW5zdGFuY2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+Zm9yY2VSZWRyYXcoKTsKK30KKworTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3Rh
bmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgUGx1Z2luVmll
dyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAgICAgaWYgKCF2
aWV3KQorICAgICAgICAgcmV0dXJuIFBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKHZhcmlhYmxl
LCB2YWx1ZSk7CisKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30KKworTlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQ
IGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c2V0VmFsdWUodmFyaWFibGUsIHZh
bHVlKTsKK30KKwordm9pZCogTlBOX0dldEphdmFFbnYoKQoreworICAgIC8vIFVuc3VwcG9ydGVk
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFApCit7CisgICAg
Ly8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBOUE5fUHVzaFBvcHVwc0Vu
YWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKQoreworICAgIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnB1c2hQb3B1cHNFbmFibGVkU3RhdGUoZW5hYmxlZCk7
Cit9CisKK3ZvaWQgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UpCit7Cisg
ICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9wUG9wdXBzRW5hYmxlZFN0YXRl
KCk7Cit9CisKK2V4dGVybiAiQyIgdHlwZWRlZiB2b2lkIFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1
bmN0aW9uKHZvaWQqKTsKK3ZvaWQgTlBOX1BsdWdpblRocmVhZEFzeW5jQ2FsbChOUFAgaW5zdGFu
Y2UsIFBsdWdpblRocmVhZEFzeW5jQ2FsbEZ1bmN0aW9uIGZ1bmMsIHZvaWQqIHVzZXJEYXRhKQor
eworICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUgb25seSBkaWZmZXJzIGZyb20gTWFpblRo
cmVhZEZ1bmN0aW9uIGJ5IGJlaW5nIGV4dGVybiAiQyIsIHdoaWNoIGRvZXNuJ3QgYWZmZWN0IGNh
bGxpbmcgY29udmVudGlvbiBvbiBhbnkgY29tcGlsZXJzIHdlIHVzZS4KKyAgICBQbHVnaW5NYWlu
VGhyZWFkU2NoZWR1bGVyOjpzY2hlZHVsZXIoKS5zY2hlZHVsZUNhbGwoaW5zdGFuY2UsIHJlaW50
ZXJwcmV0X2Nhc3Q8UGx1Z2luTWFpblRocmVhZFNjaGVkdWxlcjo6TWFpblRocmVhZEZ1bmN0aW9u
Kj4oZnVuYyksIHVzZXJEYXRhKTsKK30KKworTlBFcnJvciBOUE5fR2V0VmFsdWVGb3JVUkwoTlBQ
IGluc3RhbmNlLCBOUE5VUkxWYXJpYWJsZSB2YXJpYWJsZSwgY29uc3QgY2hhciogdXJsLCBjaGFy
KiogdmFsdWUsIHVpbnQzMl90KiBsZW4pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPmdldFZhbHVlRm9yVVJMKHZhcmlhYmxlLCB1cmwsIHZhbHVlLCBsZW4p
OworfQorCitOUEVycm9yIE5QTl9TZXRWYWx1ZUZvclVSTChOUFAgaW5zdGFuY2UsIE5QTlVSTFZh
cmlhYmxlIHZhcmlhYmxlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHZhbHVlLCB1aW50
MzJfdCBsZW4pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PnNldFZhbHVlRm9yVVJMKHZhcmlhYmxlLCB1cmwsIHZhbHVlLCBsZW4pOworfQorCitOUEVycm9y
IE5QTl9HZXRBdXRoZW50aWNhdGlvbkluZm8oTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBwcm90
b2NvbCwgY29uc3QgY2hhciogaG9zdCwgaW50MzJfdCBwb3J0LCBjb25zdCBjaGFyKiBzY2hlbWUs
IGNvbnN0IGNoYXIqIHJlYWxtLCBjaGFyKiogdXNlcm5hbWUsIHVpbnQzMl90KiB1bGVuLCBjaGFy
KiogcGFzc3dvcmQsIHVpbnQzMl90KiBwbGVuKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9y
SW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRBdXRoZW50aWNhdGlvbkluZm8ocHJvdG9jb2wsIGhvc3Qs
IHBvcnQsIHNjaGVtZSwgcmVhbG0sIHVzZXJuYW1lLCB1bGVuLCBwYXNzd29yZCwgcGxlbik7Cit9
CisKK05QRXJyb3IgTlBOX1BvcFVwQ29udGV4dE1lbnUoTlBQIGluc3RhbmNlLCBOUE1lbnUqIG1l
bnUpCit7CisgICAgVU5VU0VEX1BBUkFNKGluc3RhbmNlKTsKKyAgICBVTlVTRURfUEFSQU0obWVu
dSk7CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvRW1iZWRkZWRXaWRnZXQuaCBiL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmgKaW5kZXggYTUyNzZiZjU3NDg2ZmFj
MGExMGVkMGEyMmVkNWZiMDhjYWJlZmQ4NS4uZjY0N2IzZTFjYzk3NzIzNTRjODU2NzA3NWQyYjY3
NTEwY2Y4OTNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
RW1iZWRkZWRXaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9F
bWJlZGRlZFdpZGdldC5oCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpZm5kZWYgRW1iZWRkZWRXaWRn
ZXRfaAogI2RlZmluZSBFbWJlZGRlZFdpZGdldF9oCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3Lmgi
CiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpblZpZXcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5jcHAKaW5kZXggYjhiZDY0ZDU0NTZhYTM3ZGY3NDJmY2JlMjZhZjY0ZjhmOWQ5Nzk5Ny4u
OWVhZGI1NDYyOTY2NDg2OTVhNjdiOTE0Y2MzNmJkNTVhMDdiY2MwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmNwcApAQCAtMzUsNiArMzUsOSBAQAogI2luY2x1ZGUgIkVtYmVkZGVkV2lkZ2V0LmgiCiAjaW5j
bHVkZSAiTWFyc2hhbGxpbmdIZWxwZXJzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
KyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiV2ViQWN0aW9uUHJvcGVydHlCYWcu
aCIKICNpbmNsdWRlICJXZWJDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIldl
YkNocm9tZUNsaWVudC5oIgpAQCAtNzMsOSArNzYsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTG9j
YWxpemVkU3RyaW5ncy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YWJh
c2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpblBhY2thZ2UuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1BsdWdpblZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BvbGljeUNoZWNrZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VIYW5kbGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDFiMzYxYjBhNjZiMjhjMTc1MmE0
MTc5YTBmYWU2MGJhNjBkNTlkNTAuLjc2ZmRkMDllZDQ2YTQxMjZkYjNkOGI5YmEzNzM1NjNmZWNk
ZmE4ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5jbHVk
ZSAiV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZUdyb3VwLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvb2tpZUphci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YWJhc2UuaD4KICNpZiBVU0UoQ0ZORVRXT1JLKQogI2lu
Y2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwIGIvU291cmNl
L1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCmluZGV4IDgxNDA4MGJhNDA4MDE2NGY2ZTk1YjExYzdj
MjFjM2Y3OTk2OTYwYmQuLjkzN2U3OTNmNDFlOGJkMGZmMjY3OWMwNzQ3MTEzNWIyMTA4YzdmNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJET01D
b3JlQ2xhc3Nlcy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1
ZGUgIk1hcnNoYWxsaW5nSGVscGVycy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisj
aW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIldlYkFjdGlvblByb3BlcnR5QmFnLmgi
CiAjaW5jbHVkZSAiV2ViQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5o
IgpAQCAtODUsOCArODcsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVn
aW5EYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhYmFzZS5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUGx1Z2luVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUG9saWN5Q2hlY2tlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUhhbmRsZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAppbmRleCBhNjc1YmZhZjNiZTc2MzA2
NzIxODA4MmQxMDkxZDI1YTliNTA2OGVjLi5mMDZlZjY0YjcyYTU4NmE4Mjk3YjJmNWZhMTBjZGE5
ZTFjYThiNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1
ZGUgIkRPTUNvcmVDbGFzc2VzLmgiCiAjaW5jbHVkZSAiRnVsbHNjcmVlblZpZGVvQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIk1hcnNoYWxsaW5nSGVscGVycy5oIgorI2luY2x1ZGUgIlBsdWdpbkRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCiAjaW5jbHVkZSAiU3ViZnJh
bWVMb2FkZXIuaCIKQEAgLTEyNyw4ICsxMjksNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZv
cm1Nb3VzZUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVdoZWVsRXZlbnQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsdWdp
bkRhdGFiYXNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5WaWV3Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Qb3B1cE1lbnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudVdpbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUHJvZ3Jlc3NUcmFja2VyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXguY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4
LmNwcAppbmRleCBhOTY4NTYxOGY0NDZkZTNhOTUwNDdiNzlhYzkwZWQxNTgzYmZjMTI2Li41ZjU0
MDlmZTRhMTFiNThjYWYwZWYwMGZlY2M4YTRjMjEzOGJkNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXguY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3Jl
VW5peC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIK
IAogI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z2luTW9kdWxlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0
YWJhc2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KIAogI2lmIFBMQVRGT1JN
KEdUSykK
</data>

          </attachment>
      

    </bug>

</bugzilla>