<?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>122538</bug_id>
          
          <creation_ts>2013-10-08 19:11:42 -0700</creation_ts>
          <short_desc>FTL should be able to do simple OSR exits using llvm.webkit.stackmap</short_desc>
          <delta_ts>2013-10-09 21:24:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>122487</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rego+ews</cc>
    
    <cc>sam</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>937786</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-08 19:11:42 -0700</bug_when>
    <thetext>This bug is just for getting a basic prototype working.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937788</commentid>
    <comment_count>1</comment_count>
      <attachid>213741</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-08 19:20:56 -0700</bug_when>
    <thetext>Created attachment 213741
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937789</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-08 19:22:03 -0700</bug_when>
    <thetext>Attachment 213741 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/MacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h&apos;, u&apos;Source/JavaScriptCore/assembler/X86Assembler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCArgumentGetter.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCArgumentGetter.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitThunkGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitThunkGenerator.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitValue.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLFail.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITCode.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExit.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExitCompilationInfo.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSaveRestore.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSaveRestore.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueFormat.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueFormat.h&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/ftl/FTLStackMaps.h:49:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLStackMaps.h:66:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLStackMaps.h:88:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLStackMaps.h:95:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLCompile.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/ftl/FTLSaveRestore.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:43:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:58:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:65:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:70:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:75:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:83:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 12 in 31 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>937790</commentid>
    <comment_count>3</comment_count>
      <attachid>213742</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-08 19:23:35 -0700</bug_when>
    <thetext>Created attachment 213742
the patch

Forgot some files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937791</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-08 19:24:38 -0700</bug_when>
    <thetext>Attachment 213742 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/MacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h&apos;, u&apos;Source/JavaScriptCore/assembler/X86Assembler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCArgumentGetter.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCArgumentGetter.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitThunkGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitThunkGenerator.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitValue.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLFail.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITCode.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExit.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExitCompilationInfo.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSaveRestore.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSaveRestore.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueFormat.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueFormat.h&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/PrintStream.cpp&apos;, u&apos;Source/WTF/wtf/PrintStream.h&apos;, u&apos;Source/WTF/wtf/RefCountedArray.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/ftl/FTLStackMaps.h:49:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLStackMaps.h:66:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLStackMaps.h:88:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLStackMaps.h:95:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLCompile.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/ftl/FTLSaveRestore.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:43:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:58:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:65:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:70:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:75:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:83:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 12 in 35 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>937792</commentid>
    <comment_count>5</comment_count>
      <attachid>213742</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-10-08 19:36:06 -0700</bug_when>
    <thetext>Comment on attachment 213742
the patch

Attachment 213742 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/3709407</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937796</commentid>
    <comment_count>6</comment_count>
      <attachid>213745</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-08 19:52:45 -0700</bug_when>
    <thetext>Created attachment 213745
the patch

Attempt to fix gcc build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937797</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-08 19:55:52 -0700</bug_when>
    <thetext>Attachment 213745 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/assembler/AbstractMacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/MacroAssembler.h&apos;, u&apos;Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h&apos;, u&apos;Source/JavaScriptCore/assembler/X86Assembler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCArgumentGetter.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCArgumentGetter.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCompile.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitThunkGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitThunkGenerator.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLExitValue.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLFail.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITCode.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExit.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExitCompilationInfo.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSRExitCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSaveRestore.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLSaveRestore.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLStackMaps.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLThunks.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueFormat.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLValueFormat.h&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/PrintStream.cpp&apos;, u&apos;Source/WTF/wtf/PrintStream.h&apos;, u&apos;Source/WTF/wtf/RefCountedArray.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/ftl/FTLStackMaps.h:49:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLStackMaps.h:66:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLStackMaps.h:88:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLStackMaps.h:95:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/ftl/FTLCompile.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/ftl/FTLSaveRestore.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:43:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:58:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:65:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:70:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:75:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLValueFormat.cpp:83:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 12 in 35 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>937799</commentid>
    <comment_count>8</comment_count>
      <attachid>213746</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-08 20:10:51 -0700</bug_when>
    <thetext>Created attachment 213746
the patch

Fix style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938139</commentid>
    <comment_count>9</comment_count>
    <who name="Nadav Rotem">nrotem</who>
    <bug_when>2013-10-09 17:12:34 -0700</bug_when>
    <thetext>You changed whitespace in Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h

The LLVM parts look good to me. 

Can you break this patch to multiple small patches. For example PrintStream.h can go in separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938145</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-09 17:30:06 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; You changed whitespace in Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
&gt; 

I will revert. 

&gt; The LLVM parts look good to me. 
&gt; 
&gt; Can you break this patch to multiple small patches. For example PrintStream.h can go in separately.

I&apos;ll land the WTF changes separately. 

But we usually don&apos;t make a big deal of splitting work up into smaller patches. We prefer to have a one-to-one mapping between patches and commits, and we prefer for each commit to be thoroughly tested. So splitting up into patches, especially for complex changes like this, is not necessarily a win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938206</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-10-09 21:24:13 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/157208 and http://trac.webkit.org/changeset/157209</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213741</attachid>
            <date>2013-10-08 19:20:56 -0700</date>
            <delta_ts>2013-10-08 19:23:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76871</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMy0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzaW1wbGUgT1NSIGV4aXRzIHVzaW5nIGxsdm0ud2Vi
a2l0LnN0YWNrbWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjI1MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgZ2l2ZXMgdGhlIEZUTCB0aGUgYWJpbGl0eSB0byBPU1IgZXhpdCB1
c2luZyB0aGUgbGx2bS53ZWJraXQuc3RhY2ttYXAgaW50cmluc2ljLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgRlRMIGNvbXBpbGVzIGFsbCBPU1IgZXhpdCBjYWxscyBhcyBjYWxscyB0byBsbHZt
LndlYmtpdC5zdGFja21hcCB3aXRoIGEgdW5pcXVlCisgICAgICAgICAgSUQsIHBhc3NpbmcgYSBy
ZXF1ZXN0ZWQgc2l6ZSB0aGF0IGlzIGJpZyBlbm91Z2ggZm9yIG93biBqdW1wIHJlcGxhY2VtZW50
LgorICAgICAgICAKKyAgICAgICAgLSBBZnRlciBMTFZNIGNvbXBpbGF0aW9uLCB3ZSBwYXJzZSB0
aGUgbmV3IExMVk0gc3RhY2ttYXAgc2VjdGlvbi4KKyAgICAgICAgCisgICAgICAgIC0gRm9yIGFs
bCBsbHZtLndlYmtpdC5zdGFja21hcHMgdGhhdCB3ZSB1c2VkIGZvciBPU1IgZXhpdHMsIHdlIGRv
IGEganVtcFJlcGxhY2VtZW50LAorICAgICAgICAgIHdoaWNoIHRhcmdldHMgZXhpdCB0aHVua3Mg
dGhhdCB3ZSBnZW5lcmF0ZS4KKyAgICAgICAgCisgICAgICAgIC0gSWYgYW4gZXhpdCB0aHVuayBm
aXJlcywgaXQgY2F1c2VzIEpTQyB0byBjb21waWxlIGFuIGV4aXQgb2ZmLXJhbXAgdGhhdCB1c2Vz
IGEKKyAgICAgICAgICBjb21iaW5hdGlvbiBvZiB0aGUgSlNDLWludGVybmFsIE9TUiBleGl0IGFj
Y291bnRpbmcgKEZUTDo6RXhpdFZhbHVlIGFuZCBmcmllbmRzKSBhbmQKKyAgICAgICAgICBMTFZN
IHN0YWNrbWFwJ3MgYWNjb3VudGluZyBvZiB3aGVyZSBkYXRhIGFjdHVhbGx5IGVuZGVkIHVwIChy
ZWdpc3RlciwgaW5kaXJlY3QsCisgICAgICAgICAgY29uc3RhbnQpIHRvIHJlY29uc3RydWN0IGJ5
dGVjb2RlIHN0YXRlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGlsbCBoYXMgc2hvcnRjb21p
bmdzOyBmb3IgZXhhbXBsZSBpdCBjYW5ub3QgaGFuZGxlIFhNTSBvciBZTU0gcmVnaXN0ZXJzLiBI
YW5kbGluZworICAgICAgICBZTU0gcmVnaXN0ZXJzIHdpbGwgcmVxdWlyZSBhZGRpbmcgc29tZSBi
YXNpYyBZTU0gc3VwcG9ydCB0byBvdXIgYXNzZW1ibGVycyAtIHJlYWxseSB3ZQorICAgICAgICBq
dXN0IG5lZWQgdGhlIGFiaWxpdHkgdG8gbW92ZSBhIFlNTSdzIHZhbHVlIGludG8gYSBHUFIuCisg
ICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHByZXNlcnZlcyBhbGwgb2YgdGhlIG9sZCwgaW50
cmluc2ljLWxlc3MsIEZUTCBPU1IgZXhpdCBzdXBwb3J0LiBIZW5jZSBpdAorICAgICAgICBtYW5h
Z2VzIHRvIHBhc3MgYWxsIGV4aXN0aW5nIEZUTCB0ZXN0cyBldmVuIGRlc3BpdGUgaXRzIGluY29t
cGxldGVuZXNzLiBJIHRoaW5rIHRoYXQncworICAgICAgICB0aGUgcmlnaHQgd2F5IHRvIGdvIHNp
bmNlIHRoaXMgaXMgYWxyZWFkeSBhIGJpZyBwYXRjaCwgYW5kIGFueXdheSBpdCB3b3VsZCBiZSBn
cmVhdCB0bworICAgICAgICBrZWVwIHRoZSBpbnRyaW5zaWMtbGVzcyBGVEwgT1NSIGV4aXQgc3Vw
cG9ydCBzbyBsb25nIGFzIHRoZSBMTFZNIHNpZGUgb2YgdGhpcyBoYXNuJ3QKKyAgICAgICAgbGFu
ZGVkLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OmlzU3RhY2tSZWxhdGVkKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVh
bFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om5leHRSZWdpc3Rlcik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0ZXIpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpmaXJz
dFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIpOgor
ICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21w
aWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0QW5kQm94KToKKyAg
ICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmg6CisgICAgICAgIChKU0M6OkZUTDo6Q0Fy
Z3VtZW50R2V0dGVyOjpsb2FkTmV4dERvdWJsZUludG9HUFIpOgorICAgICAgICAqIGZ0bC9GVExD
b21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlQ29kZVNlY3Rpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgIChKU0M6
OkZUTDo6ZHVtcERhdGFTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpmaXhGdW5jdGlvbkJh
c2VkT25TdGFja01hcHMpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRU
aHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtH
ZW5lcmF0b3I6OmVtaXRUaHVua3MpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkZUTDo6
RXhpdFZhbHVlOjppc0luSlNTdGFja1NvbWVob3cpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRW
YWx1ZTo6dmFsdWVGb3JtYXQpOgorICAgICAgICAqIGZ0bC9GVExGYWlsLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpmYWlsKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5o
OgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUV4aXRUaHVua3MpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExWTSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpsaW5rT1NSRXhpdHNBbmRDb21wbGV0ZUluaXRpYWxpemF0aW9u
QmxvY2tzKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExP
U1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdENvbXBp
bGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWJXaXRoT1NS
RXhpdFN0YWNrbWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1YldpdGhvdXRPU1JF
eGl0U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExPU1JFeGl0KToKKyAg
ICAgICAgKiBmdGwvRlRMU2F2ZVJlc3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRM
OjpieXRlc0ZvckdQUnMpOgorICAgICAgICAoSlNDOjpGVEw6OnJlcXVpcmVkU2NyYXRjaE1lbW9y
eVNpemVJbkJ5dGVzKToKKyAgICAgICAgKEpTQzo6RlRMOjpvZmZzZXRPZkdQUik6CisgICAgICAg
IChKU0M6OkZUTDo6c2F2ZUFsbFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkZUTDo6cmVzdG9y
ZUFsbFJlZ2lzdGVycyk6CisgICAgICAgICogZnRsL0ZUTFNhdmVSZXN0b3JlLmg6IEFkZGVkLgor
ICAgICAgICAqIGZ0bC9GVExTdGFja01hcHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRM
OjpyZWFkT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkNvbnN0YW50Ojpw
YXJzZSk6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpDb25zdGFudDo6ZHVtcCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpMb2NhdGlvbjo6cGFyc2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlN0YWNrTWFwczo6TG9jYXRpb246OmR1bXApOgorICAgICAgICAoSlNDOjpGVEw6
OlN0YWNrTWFwczo6TG9jYXRpb246Omludm9sdmVzR1BSKToKKyAgICAgICAgKEpTQzo6RlRMOjpT
dGFja01hcHM6OkxvY2F0aW9uOjppc0dQUik6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBz
OjpMb2NhdGlvbjo6Z3ByKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9u
OjpyZXN0b3JlSW50byk6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpSZWNvcmQ6OnBh
cnNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OlJlY29yZDo6ZHVtcCk6CisgICAg
ICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpwYXJzZSk6CisgICAgICAgIChKU0M6OkZUTDo6U3Rh
Y2tNYXBzOjpkdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OmR1bXBNdWx0aWxp
bmUpOgorICAgICAgICAoSlNDOjpGVEw6OlN0YWNrTWFwczo6Z2V0UmVjb3JkTWFwKToKKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZnRsL0ZUTFN0YWNrTWFwcy5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OnJlYm94QWNjb3JkaW5nVG9Gb3JtYXQpOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZUZvcm1hdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvRGF0YVZpZXcuY3BwOgorICAgICAgICAoSlNDOjpEYXRhVmll
dzo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGFWaWV3Lmg6CisgICAgICAgIChKU0M6
OkRhdGFWaWV3OjpyZWFkKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxMy0x
MC0wOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQg
Zm9yLW9mIGl0ZXJhdGlvbiB0byBpbi1iYW5kIHNpZ25hbGxpbmcgc28gd2UgY2FuIHRyaXZpYWxs
eSBhdm9pZCB1bm5lY2Vzc2FyeSBvYmplY3QgYWxsb2NhdGlvbgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTQsNiArMzE0LDggQEAKIAkJMEY5RDMzNzAxNjVEQkI5MDAwNUFEMzg3IC8qIERpc2Fz
c2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcgLyogRGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJ
MEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM5NDE3RkZDNEU2MDA3M0My
QkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLzsgfTsKIAkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOUQzMzlBMTgw
M0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0
YWNrTWFwcy5jcHAgKi87IH07CisJCTBGOUQzMzlCMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFj
a01hcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OUQzMzk5MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQjRGNDE3RkNCOTE3MDBDQjY3
RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tM
YXlvdXRQaGFzZS5jcHAgKi87IH07CiAJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdT
dGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjlGQjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZD
OEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEJGMTRFMUI1RkIw
MEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICsz
NzQsOCBAQAogCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQw
NTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICov
OyB9OwogCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0NBRTQzMTZEMENGNkUw
MEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVz
dG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovOyB9OworCQkw
RkNFRkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQy
QzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZE
ODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87
IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZE
ODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKQEAgLTE1MjgsNiArMTUzMiw4IEBACiAJCTBGOUQz
MzZFMTY1REJCOEQwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxl
ci9EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5
NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoZWRBdC5jcHA7IHBhdGggPSBkZmcvREZHRmx1c2hl
ZEF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzOTUxN0ZGQzRFNjAw
NzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdGbHVzaGVkQXQuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaGVkQXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFw
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTdGFja01hcHMu
Y3BwOyBwYXRoID0gZnRsL0ZUTFN0YWNrTWFwcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGOUQzMzk5MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU3RhY2tNYXBzLmg7IHBhdGggPSBmdGwvRlRM
U3RhY2tNYXBzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYyMTdGQ0I5
MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlG
QjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGFja0xheW91dFBoYXNlLmg7IHBhdGggPSBkZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlG
QzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1OTgsNiArMTYwNCw4IEBACiAJCTBG
QzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9ySW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNDQUU0MzE2RDBDRjZFMDBEMEM2NUIg
LyogUGFyc2VyRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2Vy
RXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDRUZBQTkxODA0QzEzRTAw
NDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmNwcDsgcGF0aCA9IGZ0bC9GVExTYXZlUmVzdG9yZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExTYXZlUmVzdG9yZS5oOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQwLDYgKzI2NDgs
MTAgQEAKIAkJCQkwRjIzNUJDQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVy
LmggKi8sCiAJCQkJMEZFQTBBMjkxNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgKi8s
CiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oICovLAorCQkJCTBG
Q0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8sCisJCQkJMEZD
RUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8sCisJCQkJMEY5RDMz
OTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgKi8sCisJCQkJMEY5RDMzOTkx
ODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oICovLAogCQkJCTBGRUEwQTE1MTcwNkJC
OTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8sCiAJCQkJMEZFQTBBMDcxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTFN0YXRlLmggKi8sCiAJCQkJQTdGQ0MyNkMxN0EwQjZBQTAwNzg2RDFBIC8qIEZU
TFN3aXRjaENhc2UuaCAqLywKQEAgLTQzMDQsNiArNDMxNiw3IEBACiAJCQkJQkMxOEM0MkEwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkIxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZl
UmVzdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MDdEMjlFMEU4NzFFNUUwMEQ3
RDg5NiAvKiBKU1R5cGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwMjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDk5LDYgKzQ1
MTIsNyBAQAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyREY0NDMwMTcwN0FDMDEwMEE1Q0E5NiAv
KiBTdXBlclJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0
NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlEMzM5QjE4MDNBREI3
MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDEx
RDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNTI0OCw2ICs1MjYyLDcgQEAKIAkJCQk5
NjlBMDc5QTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODUwMTA3RUMwRDcwMDEzRTdCMiAvKiBPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3QkRBRUM4MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9yUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExT
YXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZD
NDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0
MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkw
MDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUzNDUsNiArNTM2
MCw3IEBACiAJCQkJODY3MDRCODQxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4NjEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJ
VC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
clBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5RDMzOUExODAzQURCNzAwNzNDMkJD
IC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI0MjEyREI4QTgx
MDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0
LDkgQEAgcHVibGljOgogICAgIGNsYXNzIEp1bXA7CiAKICAgICB0eXBlZGVmIHR5cGVuYW1lIEFz
c2VtYmxlclR5cGU6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICAKKyAgICBzdGF0aWMgUmVn
aXN0ZXJJRCBmaXJzdFJlZ2lzdGVyKCkgeyByZXR1cm4gQXNzZW1ibGVyVHlwZTo6Zmlyc3RSZWdp
c3RlcigpOyB9CisgICAgc3RhdGljIFJlZ2lzdGVySUQgbGFzdFJlZ2lzdGVyKCkgeyByZXR1cm4g
QXNzZW1ibGVyVHlwZTo6bGFzdFJlZ2lzdGVyKCk7IH0KIAogICAgIC8vIFNlY3Rpb24gMTogTWFj
cm9Bc3NlbWJsZXIgb3BlcmFuZCB0eXBlcwogICAgIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNTcxMTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgTWFj
cm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJCYXNlIHsKIHB1YmxpYzoKIAorICAg
IHN0YXRpYyBib29sIGlzU3RhY2tSZWxhdGVkKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlZyA9PSBzdGFja1BvaW50ZXJSZWdpc3RlciB8fCByZWcgPT0gZnJhbWVQb2lu
dGVyUmVnaXN0ZXI7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBSZWdpc3RlcklEIGZpcnN0UmVh
bFJlZ2lzdGVyKCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlciA9IE1h
Y3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7CisgICAgICAgIHdoaWxlIChNYWNyb0Fzc2Vt
Ymxlcjo6aXNTdGFja1JlbGF0ZWQoZmlyc3RSZWdpc3RlcikpCisgICAgICAgICAgICArK2ZpcnN0
UmVnaXN0ZXI7CisgICAgICAgIHJldHVybiBmaXJzdFJlZ2lzdGVyOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgUmVnaXN0ZXJJRCBuZXh0UmVnaXN0ZXIoUmVnaXN0ZXJJRCByZWcpCisgICAgewor
ICAgICAgICBSZWdpc3RlcklEIHJlc3VsdCA9IHN0YXRpY19jYXN0PFJlZ2lzdGVySUQ+KHJlZyAr
IDEpOworICAgICAgICB3aGlsZSAoTWFjcm9Bc3NlbWJsZXI6OmlzU3RhY2tSZWxhdGVkKHJlc3Vs
dCkpCisgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFJlZ2lzdGVySUQgc2Vjb25kUmVhbFJlZ2lzdGVyKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXh0UmVnaXN0ZXIoZmlyc3RSZWFsUmVnaXN0ZXIoKSk7CisgICAg
fQorCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpwb3A7CiAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJCYXNlOjpqdW1wOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNo
MzI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVzcDsKICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmFtZVBvaW50ZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVy
czo6ZWJwOwotCisgICAgCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxpbmRGb3JTcGVjaWZpY0Fy
Y2godWludDMyX3QgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID49IDB4MDBmZmZmZmY7IH0KICNpZiBD
UFUoWDg2XzY0KQogICAgIHN0YXRpYyBib29sIHNob3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHVp
bnQ2NF90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+PSAweDAwZmZmZmZmOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9u
IDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsMTYgQEAgbmFtZXNwYWNlIFg4NlJlZ2lz
dGVycyB7CiBjbGFzcyBYODZBc3NlbWJsZXIgewogcHVibGljOgogICAgIHR5cGVkZWYgWDg2UmVn
aXN0ZXJzOjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7CisgICAgc3RhdGljIFJlZ2lzdGVySUQgZmly
c3RSZWdpc3RlcigpIHsgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWF4OyB9CisgICAgc3RhdGljIFJl
Z2lzdGVySUQgbGFzdFJlZ2lzdGVyKCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAg
cmV0dXJuIFg4NlJlZ2lzdGVyczo6cjE1OworI2Vsc2UKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lz
dGVyczo6ZWRpOworI2VuZGlmCisgICAgfQorICAgIAogICAgIHR5cGVkZWYgWDg2UmVnaXN0ZXJz
OjpYTU1SZWdpc3RlcklEIFhNTVJlZ2lzdGVySUQ7CiAgICAgdHlwZWRlZiBYTU1SZWdpc3RlcklE
IEZQUmVnaXN0ZXJJRDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsMTIgKzI2NCwxOCBAQCBQbGFuOjpDb21waWxhdGlv
blBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGlmIChPcHRpb25zOjpyZXBvcnRDb21w
aWxlVGltZXMoKSkKICAgICAgICAgICAgIGJlZm9yZUZUTCA9IGN1cnJlbnRUaW1lTVMoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsbHZtQWx3YXlzRmFpbHMoKSkgeworICAgICAg
ICBpZiAoT3B0aW9uczo6bGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSgpKSB7CiAgICAgICAg
ICAgICBGVEw6OmZhaWwoc3RhdGUpOwogICAgICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIEZUTDo6Y29tcGlsZShzdGF0ZSk7CisKKyAgICAgICAg
aWYgKE9wdGlvbnM6Omxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmsoKSkgeworICAgICAgICAgICAg
RlRMOjpmYWlsKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBGVExQYXRoOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBGVEw6Omxpbmsoc3RhdGUpOwogICAgICAgICByZXR1cm4gRlRM
UGF0aDsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVu
dEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
QXJndW1lbnRHZXR0ZXIuY3BwCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYw
ICs1MiwzMSBAQCB2b2lkIENBcmd1bWVudEdldHRlcjo6bG9hZE5leHRBbmRCb3goCiAgICAgfQog
ICAgIAogICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOiB7
CisgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgorICAgIGNhc2UgVmFsdWVGb3JtYXRVSW50MzI6
CiAgICAgICAgIGxvYWROZXh0MzIoZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5vcjY0KEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVzdGluYXRpb24pOwogICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBjYXNlIFZhbHVlRm9ybWF0VUludDMyOiB7Ci0g
ICAgICAgIGxvYWROZXh0MzIoZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlRG91Ymxl
VG82NChGUFJJbmZvOjpmcFJlZ1QwLCBzY3JhdGNoMik7Ci0gICAgICAgIG1faml0LmJveEludDUy
KGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbiwgc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOwot
ICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMiwgRlBSSW5mbzo6ZnBSZWdUMCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBWYWx1ZUZvcm1hdElu
dDUyOiB7CisgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgorICAgIGNhc2UgVmFsdWVGb3JtYXRT
dHJpY3RJbnQ1MjoKKyAgICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1ZToKICAgICAgICAgbG9hZE5l
eHQ2NChkZXN0aW5hdGlvbik7Ci0gICAgICAgIG1faml0LnJzaGlmdDY0KEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpLCBkZXN0aW5hdGlvbik7
Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OmZwUmVnVDAsIHNjcmF0Y2gy
KTsKLSAgICAgICAgbV9qaXQuYm94SW50NTIoZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLCBzY3Jh
dGNoMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKHNj
cmF0Y2gyLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgICAg
ICAgICAgCi0gICAgY2FzZSBWYWx1ZUZvcm1hdFN0cmljdEludDUyOiB7Ci0gICAgICAgIGxvYWRO
ZXh0NjQoZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZv
OjpmcFJlZ1QwLCBzY3JhdGNoMik7Ci0gICAgICAgIG1faml0LmJveEludDUyKGRlc3RpbmF0aW9u
LCBkZXN0aW5hdGlvbiwgc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICBtX2pp
dC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMiwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAgICAgICAgIAotICAgIGNhc2UgVmFsdWVGb3JtYXRCb29sZWFuOiB7
CisgICAgY2FzZSBWYWx1ZUZvcm1hdEJvb2xlYW46CiAgICAgICAgIGxvYWROZXh0OChkZXN0aW5h
dGlvbik7Ci0gICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihW
YWx1ZUZhbHNlKSwgZGVzdGluYXRpb24pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAg
ICAgICAKLSAgICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1ZTogewotICAgICAgICBsb2FkTmV4dDY0
KGRlc3RpbmF0aW9uKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgICAgICAgICAgCi0gICAg
Y2FzZSBWYWx1ZUZvcm1hdERvdWJsZTogewotICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChG
UFJJbmZvOjpmcFJlZ1QwLCBzY3JhdGNoMSk7Ci0gICAgICAgIGxvYWROZXh0RG91YmxlKEZQUklu
Zm86OmZwUmVnVDApOwotICAgICAgICBtX2ppdC5ib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwg
ZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgY2FzZSBWYWx1ZUZvcm1hdERvdWJsZToKKyAgICAgICAgbG9h
ZE5leHREb3VibGVJbnRvR1BSKGRlc3RpbmF0aW9uKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQog
ICAgICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAorICAgIHJlYm94QWNjb3JkaW5n
VG9Gb3JtYXQoZm9ybWF0LCBtX2ppdCwgZGVzdGluYXRpb24sIHNjcmF0Y2gxLCBzY3JhdGNoMik7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuaAkocmV2aXNpb24gMTU3MTE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAwLDYgKzEwMCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWROZXh0NjQoZGVz
dGluYXRpb24pOwogICAgIH0KICAgICAKKyAgICB2b2lkIGxvYWROZXh0RG91YmxlSW50b0dQUihH
UFJSZWcgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBpZiAobV9mcHJBcmd1bWVudEluZGV4
IDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykgeworICAgICAgICAgICAgbV9q
aXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG1fZnByQXJndW1l
bnRJbmRleCsrKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkNjQobmV4dEFkZHJlc3MoKSwgZGVzdGluYXRp
b24pOworICAgIH0KKyAgICAKICAgICB2b2lkIGxvYWROZXh0RG91YmxlKEZQUlJlZyBkZXN0aW5h
dGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE1
IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkNDYWxs
SGVscGVycy5oIgorI2luY2x1ZGUgIkRhdGFWaWV3LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgi
CiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgog
I2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUg
IlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvTExWTUhlYWRlcnMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNDIsMTEgKzQ2LDggQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAogc3RhdGljIHVpbnQ4
X3QqIG1tQWxsb2NhdGVDb2RlU2VjdGlvbigKLSAgICB2b2lkKiBvcGFxdWVTdGF0ZSwgdWludHB0
cl90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCwgdW5zaWduZWQgc2VjdGlvbklELAotICAgIGNv
bnN0IGNoYXIqIHNlY3Rpb25OYW1lKQorICAgIHZvaWQqIG9wYXF1ZVN0YXRlLCB1aW50cHRyX3Qg
c2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50LCB1bnNpZ25lZCwgY29uc3QgY2hhciogc2VjdGlvbk5h
bWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHNlY3Rpb25JRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNl
Y3Rpb25OYW1lKTsKICAgICAKICAgICBTdGF0ZSYgc3RhdGUgPSAqc3RhdGljX2Nhc3Q8U3RhdGUq
PihvcGFxdWVTdGF0ZSk7CiAgICAgCkBAIC01Nyw2ICs1OCw3IEBAIHN0YXRpYyB1aW50OF90KiBt
bUFsbG9jYXRlQ29kZVNlY3Rpb24oCiAgICAgICAgICAgICBzdGF0ZS5ncmFwaC5tX3ZtLCBzaXpl
LCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CiAg
ICAgCiAgICAgc3RhdGUuaml0Q29kZS0+YWRkSGFuZGxlKHJlc3VsdCk7CisgICAgc3RhdGUuY29k
ZVNlY3Rpb25OYW1lcy5hcHBlbmQoc2VjdGlvbk5hbWUpOwogICAgIAogICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1aW50OF90Kj4ocmVzdWx0LT5zdGFydCgpKTsKIH0KQEAgLTY2LDcgKzY4LDYgQEAg
c3RhdGljIHVpbnQ4X3QqIG1tQWxsb2NhdGVEYXRhU2VjdGlvbigKICAgICBjb25zdCBjaGFyKiBz
ZWN0aW9uTmFtZSwgTExWTUJvb2wgaXNSZWFkT25seSkKIHsKICAgICBVTlVTRURfUEFSQU0oc2Vj
dGlvbklEKTsKLSAgICBVTlVTRURfUEFSQU0oc2VjdGlvbk5hbWUpOwogICAgIFVOVVNFRF9QQVJB
TShpc1JlYWRPbmx5KTsKIAogICAgIFN0YXRlJiBzdGF0ZSA9ICpzdGF0aWNfY2FzdDxTdGF0ZSo+
KG9wYXF1ZVN0YXRlKTsKQEAgLTc2LDcgKzc3LDEyIEBAIHN0YXRpYyB1aW50OF90KiBtbUFsbG9j
YXRlRGF0YVNlY3Rpb24oCiAgICAgUmVmQ291bnRlZEFycmF5PExTZWN0aW9uV29yZD4gc2VjdGlv
bigKICAgICAgICAgKHNpemUgKyBzaXplb2YoTFNlY3Rpb25Xb3JkKSAtIDEpIC8gc2l6ZW9mKExT
ZWN0aW9uV29yZCkpOwogICAgIAotICAgIHN0YXRlLmppdENvZGUtPmFkZERhdGFTZWN0aW9uKHNl
Y3Rpb24pOworICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCAiX19qc19zdGFja21hcHMiKSkK
KyAgICAgICAgc3RhdGUuc3RhY2ttYXBzU2VjdGlvbiA9IHNlY3Rpb247CisgICAgZWxzZSB7Cisg
ICAgICAgIHN0YXRlLmppdENvZGUtPmFkZERhdGFTZWN0aW9uKHNlY3Rpb24pOworICAgICAgICBz
dGF0ZS5kYXRhU2VjdGlvbk5hbWVzLmFwcGVuZChzZWN0aW9uTmFtZSk7CisgICAgfQogICAgIAog
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KHNlY3Rpb24uZGF0YSgpKTsKIH0KQEAg
LTkwLDYgKzk2LDYwIEBAIHN0YXRpYyB2b2lkIG1tRGVzdHJveSh2b2lkKikKIHsKIH0KIAorc3Rh
dGljIHZvaWQgZHVtcERhdGFTZWN0aW9uKFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHNl
Y3Rpb24sIGNvbnN0IGNoYXIqIHByZWZpeCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgc2VjdGlvbi5zaXplKCk7ICsraikgeworICAgICAgICBjaGFyIGJ1ZlszMl07CisgICAgICAg
IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCVseCIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHNlY3Rpb24uZGF0YSgpICsgaikpKTsKKyAg
ICAgICAgZGF0YUxvZ0YoIiVzJTE2czogMHglMDE2bGx4XG4iLCBwcmVmaXgsIGJ1Ziwgc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihzZWN0aW9uW2pdKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCisgICAgU3RhdGUmIHN0YXRlLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29kZSwgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVk
RnVuY3Rpb24sCisgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCkKK3sKKyAgICBW
TSYgdm0gPSBzdGF0ZS5ncmFwaC5tX3ZtOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JF
eGl0VGh1bmsgPQorICAgICAgICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtH
ZW5lcmF0b3IpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCA9IENvZGVMb2NhdGlvbkxh
YmVsKG9zckV4aXRUaHVuay5jb2RlKCkpOworCisgICAgRXhpdFRodW5rR2VuZXJhdG9yIGV4aXRU
aHVua0dlbmVyYXRvcihzdGF0ZSk7CisgICAgZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVua3Mo
KTsKKyAgICBpZiAoZXhpdFRodW5rR2VuZXJhdG9yLmRpZFRoaW5ncygpKSB7CisgICAgICAgIE93
blB0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtCdWZmZXIoCisg
ICAgICAgICAgICB2bSwgJmV4aXRUaHVua0dlbmVyYXRvciwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkKSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc3RhdGUub3NyRXhp
dC5zaXplKCkgPT0gc3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkpOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm9zckV4aXQuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBzdGF0ZS5vc3JF
eGl0W2ldOworICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoaW5mby5tX3RodW5r
SnVtcCwgdGFyZ2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5mby5tX3RodW5rQWRk
cmVzcyA9IGxpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5tX3RodW5rTGFiZWwpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBleGl0Lm1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGxpbmtCdWZm
ZXItPm9mZnNldE9mKGluZm8ubV90aHVua0p1bXApOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzdGF0ZS5maW5hbGl6ZXItPmluaXRpYWxpemVFeGl0VGh1bmtzTGlua0J1ZmZlcihsaW5r
QnVmZmVyLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBleGl0SW5kZXggPSBqaXRD
b2RlLT5vc3JFeGl0LnNpemUoKTsgZXhpdEluZGV4LS07KSB7CisgICAgICAgIE9TUkV4aXRDb21w
aWxhdGlvbkluZm8mIGluZm8gPSBzdGF0ZS5vc3JFeGl0W2V4aXRJbmRleF07CisgICAgICAgIE9T
UkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2V4aXRJbmRleF07CisgICAgICAgIFN0YWNr
TWFwczo6UmVjb3JkJiByZWNvcmQgPSByZWNvcmRNYXAuZmluZChleGl0Lm1fc3RhY2ttYXBJRCkt
PnZhbHVlOworICAgICAgICAKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAo
CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCgKKyAgICAgICAgICAgICAgICBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNl
dCksCisgICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzKTsKKyAgICB9Cit9CisKIHZvaWQg
Y29tcGlsZShTdGF0ZSYgc3RhdGUpCiB7CiAgICAgY2hhciogZXJyb3IgPSAwOwpAQCAtMTQzLDE1
ICsyMDMsMTIgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKICAgICBMTFZNRGlzcG9zZUV4
ZWN1dGlvbkVuZ2luZShlbmdpbmUpOwogCiAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBmb3VydGhUaWVyOiBGVEwgbWVtb3J5IGFsbG9jYXRvciBz
aG91bGQgYmUgYWJsZSB0byB0ZWxsIHVzIHdoaWNoIG9mCi0gICAgICAgIC8vIHRoZXNlIHRoaW5n
cyBpcyBhY3R1YWxseSBjb2RlIG9yIGRhdGEuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYxODkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0YXRlLmppdENvZGUtPmhhbmRsZXMoKS5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxl
cygpW2ldLmdldCgpOwogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiR2Vu
ZXJhdGVkIExMVk0gY29kZSBmb3IgIiwKICAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklU
VHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwKLSAgICAgICAg
ICAgICAgICAiICMiLCBpLCAiOlxuIik7CisgICAgICAgICAgICAgICAgIiAjIiwgaSwgIiwgIiwg
c3RhdGUuY29kZVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOwogICAgICAgICAgICAgZGlzYXNzZW1i
bGUoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+c3RhcnQo
KSksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwKICAgICAgICAgICAgICAgICAiICAgICIsIFdURjo6
ZGF0YUZpbGUoKSwgTExWTVN1YnNldCk7CkBAIC0xNjIsMTQgKzIxOSw1MiBAQCB2b2lkIGNvbXBp
bGUoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAi
R2VuZXJhdGVkIExMVk0gZGF0YSBzZWN0aW9uIGZvciAiLAogICAgICAgICAgICAgICAgIENvZGVC
bG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQp
LAotICAgICAgICAgICAgICAgICIgIyIsIGksICI6XG4iKTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBzZWN0aW9uLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAg
Y2hhciBidWZbMzJdOwotICAgICAgICAgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1Ziks
ICIweCVseCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHNlY3Rpb24uZGF0YSgpICsgaikpKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAg
ICUxNnM6IDB4JTAxNmxseFxuIiwgYnVmLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNlY3Rpb25b
al0pKTsKKyAgICAgICAgICAgICAgICAiICMiLCBpLCAiLCAiLCBzdGF0ZS5kYXRhU2VjdGlvbk5h
bWVzW2ldLCAiOlxuIik7CisgICAgICAgICAgICBkdW1wRGF0YVNlY3Rpb24oc2VjdGlvbiwgIiAg
ICAiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoc3RhdGUuc3RhY2ttYXBzU2Vj
dGlvbi5zaXplKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBzdGFj
a21hcHMgc2VjdGlvbiBmb3IgIiwKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlw
ZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwgIjpcbiIpOworICAg
ICAgICAgICAgZGF0YUxvZygiICAgIFJhdyBkYXRhOlxuIik7CisgICAgICAgICAgICBkdW1wRGF0
YVNlY3Rpb24oc3RhdGUuc3RhY2ttYXBzU2VjdGlvbiwgIiAgICAiKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgUmVmUHRyPERhdGFWaWV3PiBzdGFja21hcHNEYXRhID0gRGF0YVZpZXc6
OmNyZWF0ZSgKKyAgICAgICAgICAgIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUuc3RhY2ttYXBz
U2VjdGlvbi5kYXRhKCksIHN0YXRlLnN0YWNrbWFwc1NlY3Rpb24uYnl0ZVNpemUoKSkpOworICAg
ICAgICBzdGF0ZS5qaXRDb2RlLT5zdGFja21hcHMucGFyc2Uoc3RhY2ttYXBzRGF0YS5nZXQoKSk7
CisgICAgCisgICAgICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICAg
ICAgZGF0YUxvZygiICAgIFN0cnVjdHVyZWQgZGF0YTpcbiIpOworICAgICAgICAgICAgc3RhdGUu
aml0Q29kZS0+c3RhY2ttYXBzLmR1bXBNdWx0aWxpbmUoV1RGOjpkYXRhRmlsZSgpLCAiICAgICAg
ICAiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXAg
cmVjb3JkTWFwID0gc3RhdGUuaml0Q29kZS0+c3RhY2ttYXBzLmdldFJlY29yZE1hcCgpOworICAg
ICAgICBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCisgICAgICAgICAgICBzdGF0ZSwgc3Rh
dGUuZ3JhcGgubV9jb2RlQmxvY2ssIHN0YXRlLmppdENvZGUuZ2V0KCksIHN0YXRlLmdlbmVyYXRl
ZEZ1bmN0aW9uLAorICAgICAgICAgICAgcmVjb3JkTWFwKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0YXRlLmppdENvZGUtPmhhbmRsZXMoKS5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChzdGF0ZS5jb2RlU2VjdGlvbk5hbWVzW2ldICE9ICJfX3RleHQiKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBzdGF0ZS5qaXRDb2RlLT5oYW5k
bGVzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAg
ICAgICAgIkdlbmVyYXRlZCBMTFZNIGNvZGUgYWZ0ZXIgc3RhY2ttYXAtYmFzZWQgZml4LXVwIGZv
ciAiLAorICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFw
aC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwKKyAgICAgICAgICAgICAgICAgICAgIiAj
IiwgaSwgIiwgIiwgc3RhdGUuY29kZVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOworICAgICAgICAg
ICAgICAgIGRpc2Fzc2VtYmxlKAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoaGFuZGxlLT5zdGFydCgpKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpLAorICAgICAgICAg
ICAgICAgICAgICAiICAgICIsIFdURjo6ZGF0YUZpbGUoKSwgTExWTVN1YnNldCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgc3RhdGUubW9kdWxlID0gMDsgLy8g
V2Ugbm8gbG9uZ2VyIG93biB0aGUgbW9kdWxlLgogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1
bmtHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEy
ICs1MSwyMSBAQCB2b2lkIEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKHVuc2lnCiAgICAg
T1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fc3RhdGUub3NyRXhpdFtpbmRleF07CiAg
ICAgCiAgICAgaW5mby5tX3RodW5rTGFiZWwgPSBsYWJlbCgpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGluZGV4KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaWYgKE9wdGlvbnM6OmZ0bE9T
UkV4aXRVc2VzU3RhY2ttYXAoKSkKKyAgICAgICAgcHVzaChUcnVzdGVkSW1tMzIoaW5kZXgpKTsK
KyAgICBlbHNlCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGluZGV4KSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CiAgICAgaW5mby5tX3RodW5rSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKICAgICAK
ICAgICBtX2RpZFRoaW5ncyA9IHRydWU7CiB9CiAKK3ZvaWQgRXhpdFRodW5rR2VuZXJhdG9yOjpl
bWl0VGh1bmtzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdGF0ZS5vc3JF
eGl0LnNpemUoKTsgKytpKQorICAgICAgICBlbWl0VGh1bmsoaSk7Cit9CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oCShyZXZp
c2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHB1YmxpYzoKICAgICB+
RXhpdFRodW5rR2VuZXJhdG9yKCk7CiAgICAgCiAgICAgdm9pZCBlbWl0VGh1bmsodW5zaWduZWQg
aW5kZXgpOworICAgIHZvaWQgZW1pdFRodW5rcygpOwogICAgIAogICAgIGJvb2wgZGlkVGhpbmdz
KCkgY29uc3QgeyByZXR1cm4gbV9kaWRUaGluZ3M7IH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiAr
MTI2LDcgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewogICAgICAgICBjYXNl
IEV4aXRWYWx1ZUluSlNTdGFjazoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0lu
dDMyOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6CiAgICAgICAgIGNh
c2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgZGVmYXVsdDoKQEAgLTE1Miw3ICsxNTMsNDAgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQoaXNJbkpTU3RhY2tTb21laG93KCkpOwogICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKHUudmlydHVhbFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBJZiBpdCdzIGlu
IHRoZSBKU1N0YWNrIHNvbWVob3csIHRoaXMgd2lsbCB0ZWxsIHlvdSB3aGF0IGZvcm1hdCBpdCdz
IGluLCBpbiBhIG1hbm5lcgorICAgIC8vIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGV4aXRBcmd1
bWVudCgpLmZvcm1hdCgpLiBJZiBpdCdzIGEgY29uc3RhbnQgb3IgaXQncyBkZWFkLCBpdAorICAg
IC8vIHdpbGwgY2xhaW0gdG8gYmUgYSBKU1ZhbHVlLiBJZiBpdCdzIGFuIGFyZ3VtZW50IHRoZW4g
aXQgd2lsbCB0ZWxsIHlvdSB0aGUgYXJndW1lbnQncworICAgIC8vIGZvcm1hdC4KKyAgICBWYWx1
ZUZvcm1hdCB2YWx1ZUZvcm1hdCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgICAgICBjYXNlIEludmFsaWRFeGl0VmFsdWU6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEludmFsaWRWYWx1ZUZv
cm1hdDsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6CisgICAgICAg
IGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNr
OgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlRm9ybWF0SlNWYWx1ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIGV4aXRB
cmd1bWVudCgpLmZvcm1hdCgpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRXhpdFZhbHVl
SW5KU1N0YWNrQXNJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZUZvcm1hdEludDMyOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MjoKKyAg
ICAgICAgICAgIHJldHVybiBWYWx1ZUZvcm1hdEludDUyOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gVmFs
dWVGb3JtYXREb3VibGU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBJbnZhbGlkVmFsdWVGb3JtYXQ7Cisg
ICAgfQorCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRmFpbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGYWlsLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGYWlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsOCBAQCB2b2lkIGZhaWwoU3RhdGUmIHN0YXRlKQogewogICAgIHN0YXRlLmdyYXBo
Lm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKHN0YXRlLmdy
YXBoLm1fcGxhbikpOwogICAgIAotICAgIExMVk1EaXNwb3NlTW9kdWxlKHN0YXRlLm1vZHVsZSk7
CisgICAgaWYgKHN0YXRlLm1vZHVsZSkKKyAgICAgICAgTExWTURpc3Bvc2VNb2R1bGUoc3RhdGUu
bW9kdWxlKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlz
aW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVw
b3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc211
bC53aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwg
aW50NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJm
bG93MzIsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0
VHlwZShtX2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1h
Y3JvKHN1YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVu
Y3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBp
bnQ2NCkpIFwKKyAgICBtYWNybyh3ZWJraXRTdGFja21hcCwgImxsdm0ud2Via2l0LnN0YWNrbWFw
IiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQzMiwgaW50MzIsIFZhcmlhZGljKSkgXAogICAg
IG1hY3JvKHRyYXAsICJsbHZtLnRyYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUpKSBcCiAgICAg
bWFjcm8ob3NyRXhpdCwgIndlYmtpdF9vc3JfZXhpdCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwg
Ym9vbGVhbiwgaW50MzIsIFZhcmlhZGljKSkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNp
bmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorI2luY2x1
ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlIDx3dGYv
TExWTUhlYWRlcnMuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CkBAIC02Nyw2
ICs2OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAg
IFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCA4PiBvc3JFeGl0OworICAgIFN0YWNrTWFwcyBzdGFj
a21hcHM7CiAgICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZDb3VudGVkQXJyYXk8TFNlY3Rp
b25Xb3JkPj4gbV9kYXRhU2VjdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDYgKzUyLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKIHN0YXRpYyBpbnQgY29t
cGlsZUNvdW50ZXI7CiAKK3N0YXRpYyBib29sIGdlbmVyYXRlRXhpdFRodW5rcygpCit7CisgICAg
cmV0dXJuICFPcHRpb25zOjp1c2VMTFZNT1NSRXhpdEludHJpbnNpYygpICYmICFPcHRpb25zOjpm
dGxPU1JFeGl0VXNlc1N0YWNrbWFwKCk7Cit9CisKIC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiB0
eXBlQ2hlY2soKSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQgb24gTExWTSwgYnkgY3JlYXRpbmcK
IC8vIHNpZ25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCiAjZGVmaW5lIEZUTF9UWVBFX0NIRUNL
KGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikg
ZG8geyBcCkBAIC03NSw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2V4aXRUaHVua0dl
bmVyYXRvcihzdGF0ZSkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAs
IG1faW50ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCisgICAgICAgICwgbV9zdGFja21h
cElEcygwKQogICAgIHsKICAgICB9CiAgICAgCkBAIC0zMjU2LDggKzMyNjIsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25kaXRpb24s
IGZhaWxDYXNlLCBjb250aW51YXRpb24pOwogCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyht
X3Byb2xvZ3VlKTsKLSAgICAgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MgPSBidWlsZEFsbG9j
YShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmludFB0cik7CisgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVFeGl0VGh1bmtzKCkpIHsKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xv
Z3VlKTsKKyAgICAgICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzVmFsdWUgPSBidWlsZEFs
bG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmludFB0cik7CisgICAgICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICAgICAgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29u
dGludWF0aW9uKTsKICAgICAgICAgfQpAQCAtMzI2NSw3ICszMjczLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaWYgKE9wdGlvbnM6OmZ0bE9TUkV4aXRPbWl0c01hcnNoYWxsaW5nKCkpIHsKICAgICAg
ICAgICAgIG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAgICAgbV9vdXQuaW50VG9QdHIoCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmdldChpbmZvLm1fdGh1bmtBZGRyZXNzKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuZ2V0KGluZm8ubV90aHVua0FkZHJlc3NWYWx1ZSksCiAgICAgICAg
ICAgICAgICAgICAgIHBvaW50ZXJUeXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlwZSkpKSk7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZW1pdE9TUkV4aXRDYWxsKGZhaWxDb25kaXRp
b24sIGluZGV4LCBleGl0LCBpbmZvLCBsb3dWYWx1ZSwgZGlyZWN0aW9uLCByZWNvdmVyeSk7CkBA
IC0zMjc1LDcgKzMyODMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgCi0gICAgICAg
ICAgICBtX2V4aXRUaHVua0dlbmVyYXRvci5lbWl0VGh1bmsoaW5kZXgpOworICAgICAgICAgICAg
aWYgKGdlbmVyYXRlRXhpdFRodW5rcygpKQorICAgICAgICAgICAgICAgIG1fZXhpdFRodW5rR2Vu
ZXJhdG9yLmVtaXRUaHVuayhpbmRleCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0zMzQx
LDkgKzMzNTAsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmZ0bE9TUkV4aXRVc2VzU3RhY2ttYXAoKSkg
eworICAgICAgICAgICAgZXhpdC5tX3N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAg
ICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJs
ZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOworICAgICAgICAgICAgYXJndW1lbnRzLmlu
c2VydCgwLCBtX291dC5jb25zdEludDMyKGV4aXQubV9zdGFja21hcElEKSk7CisgICAgICAgIAor
ICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC53ZWJraXRTdGFja21hcEludHJpbnNpYygpLCBh
cmd1bWVudHMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQuaW50VG9QdHIoCi0gICAgICAgICAg
ICAgICAgbV9vdXQuZ2V0KGluZm8ubV90aHVua0FkZHJlc3MpLAorICAgICAgICAgICAgICAgIG1f
b3V0LmdldChpbmZvLm1fdGh1bmtBZGRyZXNzVmFsdWUpLAogICAgICAgICAgICAgICAgIHBvaW50
ZXJUeXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlwZSwgYXJndW1lbnRUeXBlcykpKSwKICAg
ICAgICAgICAgIGFyZ3VtZW50cyk7CiAgICAgfQpAQCAtMzQ5OSw3ICszNTE3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBtX291dC5zZXQoCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50UHRyKAogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci0+bG9jYXRp
b25PZihpbmZvLm1fdGh1bmtMYWJlbCkuZXhlY3V0YWJsZUFkZHJlc3MoKSksCi0gICAgICAgICAg
ICAgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICBpbmZv
Lm1fdGh1bmtBZGRyZXNzVmFsdWUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZXhp
dC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLT5vZmZzZXRPZihpbmZvLm1fdGh1
bmtKdW1wKTsKICAgICAgICAgICAgIH0KQEAgLTM2OTYsNiArMzcxNCw4IEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9ub2RlSW5kZXg7CiAgICAgTm9kZSogbV9ub2RlOwogICAgIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIAorICAgIHVpbnQzMl90IG1fc3RhY2ttYXBJ
RHM7CiB9OwogCiB2b2lkIGxvd2VyREZHVG9MTFZNKFN0YXRlJiBzdGF0ZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY1
LDYgKzE2NSw4IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAg
ICAKICAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVzOwogICAgIAorICAgIHVpbnQzMl90
IG1fc3RhY2ttYXBJRDsKKyAgICAKICAgICBDb2RlTG9jYXRpb25KdW1wIGNvZGVMb2NhdGlvbkZv
clJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0OwogICAgIAogICAgIHZvaWQg
Y29udmVydFRvRm9yd2FyZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDE0IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKIAogc3RydWN0IE9TUkV4aXRDb21waWxhdGlvbkluZm8gewogICAgIE9TUkV4aXRDb21w
aWxhdGlvbkluZm8oKQotICAgICAgICA6IG1fdGh1bmtBZGRyZXNzKDApCisgICAgICAgIDogbV90
aHVua0FkZHJlc3NWYWx1ZSgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fdGh1bmtMYWJlbDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3RodW5rSnVtcDsKLSAgICBMVmFsdWUgbV90aHVua0FkZHJlc3M7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWwgbV90aHVua0FkZHJlc3M7CisgICAgTFZhbHVlIG1fdGh1bmtBZGRyZXNzVmFsdWU7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTcxMTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRG
b3JPcGVyYW5kLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTE9TUkV4
aXQuaCIKKyNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAKQEAgLTQxLDcgKzQyLDEzNSBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKLXN0
YXRpYyB2b2lkIGNvbXBpbGVTdHViKAorLy8gVGhpcyBpbXBsZW1lbnRzIHR3byBmbGF2b3JzIG9m
IE9TUiBleGl0OiBvbmUgdGhhdCBpbnZvbHZlcyBoYXZpbmcgTExWTSBpbnRyaW5zaWNzIHRvIGhl
bHAKKy8vIE9TUiBleGl0LCBhbmQgb25lIHRoYXQgZG9lc24ndC4gVGhlIG9uZSB0aGF0IGRvZXNu
J3Qgd2lsbCBnZXQga2lsbGVkIG9mZiwgc28gd2UgZG9uJ3QgYXR0ZW1wdAorLy8gdG8gc2hhcmUg
Y29kZSBiZXR3ZWVuIHRoZSB0d28uCisKK3N0YXRpYyB2b2lkIGNvbXBpbGVTdHViV2l0aE9TUkV4
aXRTdGFja21hcCgKKyAgICB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4
aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgU3RhY2tNYXBz
OjpSZWNvcmQqIHJlY29yZDsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBqaXRDb2RlLT5z
dGFja21hcHMucmVjb3Jkcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgcmVjb3JkID0gJmppdENv
ZGUtPnN0YWNrbWFwcy5yZWNvcmRzW2ldOworICAgICAgICBpZiAocmVjb3JkLT5wYXRjaHBvaW50
SUQgPT0gZXhpdC5tX3N0YWNrbWFwSUQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlQocmVjb3JkLT5wYXRjaHBvaW50SUQgPT0gZXhpdC5tX3N0YWNr
bWFwSUQpOworICAgIAorICAgIENDYWxsSGVscGVycyBqaXQodm0sIGNvZGVCbG9jayk7CisgICAg
CisgICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycyBhbmQg
dG8gYnVpbGQgdXAgdGhlIEpTU3RhY2suCisgICAgLy8gVXNlIGEgc2NyYXRjaCBidWZmZXIgdG8g
dHJhbnNmZXIgYWxsIHZhbHVlcy4KKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
dm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBleGl0Lm1f
dmFsdWVzLnNpemUoKSArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOworICAg
IEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CisgICAgY2hh
ciogcmVnaXN0ZXJTY3JhdGNoID0gYml0d2lzZV9jYXN0PGNoYXIqPihzY3JhdGNoICsgZXhpdC5t
X3ZhbHVlcy5zaXplKCkpOworICAgIAorICAgIHNhdmVBbGxSZWdpc3RlcnMoaml0LCByZWdpc3Rl
clNjcmF0Y2gpOworICAgIAorICAgIC8vIEJyaW5nIHRoZSBzdGFjayBiYWNrIGludG8gYSBzYW5l
IGZvcm0uCisgICAgaml0LnBvcChHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgLy8gR2V0IHRo
ZSBjYWxsIGZyYW1lIGFuZCB0YWcgdGhpbmdpZXMuCisgICAgcmVjb3JkLT5sb2NhdGlvbnNbMF0u
cmVzdG9yZUludG8oaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBEbyBzb21lIHZhbHVlIHBy
b2ZpbGluZy4KKyAgICBpZiAoZXhpdC5tX3Byb2ZpbGVWYWx1ZUZvcm1hdCAhPSBJbnZhbGlkVmFs
dWVGb3JtYXQpIHsKKyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbMV0ucmVzdG9yZUludG8oaml0
LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAorICAgICAgICAgICAgZXhpdC5tX3Byb2Zp
bGVWYWx1ZUZvcm1hdCwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBCYWRDYWNo
ZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisgICAg
ICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBqaXQuYmFzZWxpbmVDb2Rl
QmxvY2tGb3IoY29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgpKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBh
cnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOworICAgICAgICAgICAg
ICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgU3Ry
dWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIs
IE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZB
cnJheU1vZGVzKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKCEhZXhpdC5tX3ZhbHVlUHJvZmlsZSkKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86OnJlZ1QwLCBleGl0Lm1fdmFsdWVQcm9maWxlLmdldFNwZWNGYWlsQnVja2V0KDApKTsK
KyAgICB9CisKKyAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIHdoZXJldmVyIHRoZSBleGl0IGRh
dGEgdGVsbHMgdXMgaXQgd2FzLCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbgorICAgIC8v
IHRoZSBzY3JhdGNoIGJ1ZmZlci4gVGhpcyBkb2Vzbid0IHJlYm94IGFueSB2YWx1ZXMgeWV0Lgor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5k
ZXgtLTspIHsKKyAgICAgICAgRXhpdFZhbHVlIHZhbHVlID0gZXhpdC5tX3ZhbHVlc1tpbmRleF07
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHZhbHVlLmtpbmQoKSkgeworICAgICAgICBjYXNl
IEV4aXRWYWx1ZURlYWQ6CisgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRXhpdFZh
bHVlQ29uc3RhbnQ6CisgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRXhpdFZh
bHVlQXJndW1lbnQ6CisgICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJn
dW1lbnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgICAgICBqaXQsIGpp
dENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNT
dGFjazoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgorICAgICAgICBj
YXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5K
U1N0YWNrQXNEb3VibGU6CisgICAgICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBz
Y3JhdGNoICsgaW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBOb3cgZ2V0IHN0YXRlIG91dCBv
ZiB0aGUgc2NyYXRjaCBidWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW50byB0aGUgc3RhY2suIFRo
aXMgcGFydCBkb2VzCisgICAgLy8gYWxsIHJlYm94aW5nLgorICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAgICAgaW50IG9wZXJh
bmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIEV4aXRW
YWx1ZSB2YWx1ZSA9IGV4aXQubV92YWx1ZXNbaW5kZXhdOworICAgICAgICAKKyAgICAgICAgaml0
LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgcmVib3hB
Y2NvcmRpbmdUb0Zvcm1hdCgKKyAgICAgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwg
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAg
IGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
b3BlcmFuZCkpOworICAgIH0KKyAgICAKKyAgICBoYW5kbGVFeGl0Q291bnRzKGppdCwgZXhpdCk7
CisgICAgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhqaXQsIGV4aXQpOworICAgIAorICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQucG9wKE1hY3JvQXNzZW1ibGVyOjpmcmFt
ZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnBvcChHUFJJbmZvOjpub25BcmdHUFIwKTsgLy8g
aWdub3JlIHRoZSByZXN1bHQuCisgICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAgIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcihleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRS
ZXN1bHRSZWdpc3Rlcik7CisgICAgfQorICAgIAorICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChq
aXQsIGV4aXQpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBj
b2RlQmxvY2spOworICAgIGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKKyAgICAgICAg
c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCksCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAo
IkZUTCBPU1IgZXhpdCAjJXUgKGJjIyV1LCAlcykgZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVz
IiwKKyAgICAgICAgICAgIGV4aXRJRCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwK
KyAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNv
ZGVCbG9jaykuZGF0YSgpLAorICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxE
dW1wQ29udGV4dD4oZXhpdC5tX3ZhbHVlcykpLmRhdGEoKSkpOworfQorCitzdGF0aWMgdm9pZCBj
b21waWxlU3R1YldpdGhvdXRPU1JFeGl0U3RhY2ttYXAoCiAgICAgdW5zaWduZWQgZXhpdElELCBP
U1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIENDYWxs
SGVscGVycyBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0yMTksMTEgKzM0OCwxNSBAQCBleHRlcm4g
IkMiIHZvaWQqIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNTCiAgICAgLy8gcmVhbGx5IGJlIHByb2Zp
dGFibGUuCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLT5oZWFwKTsKIAotICAgIE9T
UkV4aXQmIGV4aXQgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsKCktPm9zckV4aXRbZXhpdElE
XTsKKyAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bCgpOwor
ICAgIE9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2V4aXRJRF07CiAgICAgCiAgICAg
cHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKICAg
ICAKLSAgICBjb21waWxlU3R1YihleGl0SUQsIGV4aXQsIHZtLCBjb2RlQmxvY2spOworICAgIGlm
IChPcHRpb25zOjpmdGxPU1JFeGl0VXNlc1N0YWNrbWFwKCkpCisgICAgICAgIGNvbXBpbGVTdHVi
V2l0aE9TUkV4aXRTdGFja21hcChleGl0SUQsIGppdENvZGUsIGV4aXQsIHZtLCBjb2RlQmxvY2sp
OworICAgIGVsc2UKKyAgICAgICAgY29tcGlsZVN0dWJXaXRob3V0T1NSRXhpdFN0YWNrbWFwKGV4
aXRJRCwgZXhpdCwgdm0sIGNvZGVCbG9jayk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2F2ZVJlc3RvcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFNhdmVS
ZXN0b3JlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCisjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzdGF0aWMgc2l6ZV90IGJ5dGVzRm9yR1BS
cygpCit7CisgICAgcmV0dXJuIChNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkgLSBNYWNy
b0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpICsgMSkgKiBzaXplb2YoaW50NjRfdCk7Cit9CisK
K3NpemVfdCByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpCit7CisgICAgcmV0dXJu
IGJ5dGVzRm9yR1BScygpICsgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyAqIHNp
emVvZihkb3VibGUpOworfQorCitzaXplX3Qgb2Zmc2V0T2ZHUFIoR1BSUmVnIHJlZykKK3sKKyAg
ICByZXR1cm4gKHJlZyAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpICogc2l6ZW9m
KGludDY0X3QpOworfQorCit2b2lkIHNhdmVBbGxSZWdpc3RlcnMoTWFjcm9Bc3NlbWJsZXImIGpp
dCwgY2hhciogc2NyYXRjaE1lbW9yeSkKK3sKKyAgICAvLyBHZXQgdGhlIGZpcnN0IHJlZ2lzdGVy
IG91dCBvZiB0aGUgd2F5LCBzbyB0aGF0IHdlIGNhbiB1c2UgaXQgYXMgYSBwb2ludGVyLgorICAg
IGppdC5wb2tlNjQoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVhbFJlZ2lzdGVyKCksIDApOworICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hNZW1vcnkpLCBN
YWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWFsUmVnaXN0ZXIoKSk7CisgICAgCisgICAgLy8gR2V0IGFs
bCBvZiB0aGUgb3RoZXIgR1BScyBvdXQgb2YgdGhlIHdheS4KKyAgICBmb3IgKE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0ZXIo
KTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0gTWFjcm9Bc3Nl
bWJsZXI6Om5leHRSZWdpc3RlcihyZWcpKQorICAgICAgICBqaXQuc3RvcmU2NChyZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpLCBv
ZmZzZXRPZkdQUihyZWcpKSk7CisgICAgCisgICAgLy8gUmVzdG9yZSB0aGUgZmlyc3QgcmVnaXN0
ZXIgaW50byB0aGUgc2Vjb25kIG9uZSBhbmQgc2F2ZSBpdC4KKyAgICBqaXQucGVlazY0KE1hY3Jv
QXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0ZXIoKSwgMCk7CisgICAgaml0LnN0b3JlNjQoTWFj
cm9Bc3NlbWJsZXI6OnNlY29uZFJlYWxSZWdpc3RlcigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWFsUmVnaXN0ZXIoKSwgb2Zmc2V0T2ZHUFIoTWFjcm9B
c3NlbWJsZXI6OmZpcnN0UmVhbFJlZ2lzdGVyKCkpKSk7CisgICAgCisgICAgLy8gU2F2ZSBhbGwg
RlAgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWN0dWFsbHkg
YmUgc2F2aW5nIGFsbCBGUCByZWdpc3RlcnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMjUxOAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBG
UFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaE1lbW9yeSArIGJ5dGVzRm9y
R1BScygpICsgc2l6ZW9mKGRvdWJsZSkgKiBpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBq
aXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgfQorfQorCit2b2lkIHJlc3RvcmVBbGxSZWdpc3RlcnMoTWFjcm9Bc3NlbWJs
ZXImIGppdCwgY2hhciogc2NyYXRjaE1lbW9yeSkKK3sKKyAgICAvLyBSZXN0b3JlIGFsbCBGUCBh
cmd1bWVudCByZWdpc3RlcnMuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhY3R1YWxseSBiZSBy
ZXN0b3JpbmcgYWxsIEZQIHJlZ2lzdGVycy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNTE4CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQ
UkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoTWVtb3J5ICsgYnl0ZXNGb3JH
UFJzKCkgKyBzaXplb2YoZG91YmxlKSAqIGkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGpp
dC5sb2FkRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIo
aSkpOworICAgIH0KKyAgICAKKyAgICAvLyBOb3csIHJlc3RvcmUgYWxsIEdQUnMuCisgICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaE1lbW9yeSksIE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpKTsKKyAgICAKKyAgICBmb3IgKE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0
ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0gTWFjcm9B
c3NlbWJsZXI6Om5leHRSZWdpc3RlcihyZWcpKQorICAgICAgICBqaXQubG9hZDY0KE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpLCBvZmZz
ZXRPZkdQUihyZWcpKSwgcmVnKTsKKyAgICAKKyAgICBqaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpLCBvZmZzZXRPZkdQ
UihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWFsUmVnaXN0ZXIoKSkpLCBNYWNyb0Fzc2VtYmxlcjo6
Zmlyc3RSZWFsUmVnaXN0ZXIoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNhdmVSZXN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTYXZlUmVzdG9yZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTYXZlUmVzdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExTYXZlUmVzdG9yZV9oCisjZGVmaW5lIEZUTFNhdmVSZXN0b3JlX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJHUFJJbmZv
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYWNyb0Fzc2VtYmxlcjsKKworbmFtZXNw
YWNlIEZUTCB7CisKK3NpemVfdCByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpOwor
CitzaXplX3Qgb2Zmc2V0T2ZHUFIoR1BSUmVnKTsKKworLy8gQXNzdW1lcyB0aGF0IHRvcC1vZi1z
dGFjayBjYW4gYmUgdXNlZCBhcyBhIHBvaW50ZXItc2l6ZWQgc2NyYXRjaHBhZC4gU2F2ZXMgYWxs
IG9mCisvLyB0aGUgcmVnaXN0ZXJzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyIHN1Y2ggdGhhdCBS
ZWdpc3RlcklEICogc2l6ZW9mKGludDY0X3QpIGlzIHRoZQorLy8gb2Zmc2V0IG9mIGV2ZXJ5IHJl
Z2lzdGVyLgordm9pZCBzYXZlQWxsUmVnaXN0ZXJzKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNoYXIq
IHNjcmF0Y2hNZW1vcnkpOworCit2b2lkIHJlc3RvcmVBbGxSZWdpc3RlcnMoTWFjcm9Bc3NlbWJs
ZXImIGppdCwgY2hhciogc2NyYXRjaE1lbW9yeSk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMU2F2ZVJlc3Rv
cmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGVExTdGFja01hcHMuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRM
U2F2ZVJlc3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCByZWFkT2JqZWN0
KERhdGFWaWV3KiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAgIFQgcmVzdWx0OworICAg
IHJlc3VsdC5wYXJzZSh2aWV3LCBvZmZzZXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgU3RhY2tNYXBzOjpDb25zdGFudDo6cGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBv
ZmZzZXQpCit7CisgICAgaW50ZWdlciA9IHZpZXctPnJlYWQ8aW50NjRfdD4ob2Zmc2V0LCB0cnVl
KTsKK30KKwordm9pZCBTdGFja01hcHM6OkNvbnN0YW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50ZigiMHglMDE2bGx4IiwgaW50ZWdlcik7Cit9CisKK3Zv
aWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6cGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBv
ZmZzZXQpCit7CisgICAgdWludDE2X3QgdGFnZ2VkUmVnID0gdmlldy0+cmVhZDx1aW50MTZfdD4o
b2Zmc2V0LCB0cnVlKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50MTZfdD4odGFnZ2VkUmVnKSA8
IDApIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJEZXRlY3RlZCBhIG5lZ2F0aXZl
IHRhZ2dlZCByZWdpc3RlciAiLCBzdGF0aWNfY2FzdDxpbnQxNl90Pih0YWdnZWRSZWcpLAorICAg
ICAgICAgICAgIiBhdCBvZmZzZXQgIiwgb2Zmc2V0LCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgZHdhcmZSZWdOdW0gPSB0YWdnZWRSZWcg
JiAoKDEgPDwgMTIpIC0gMSk7CisgICAga2luZCA9IHN0YXRpY19jYXN0PEtpbmQ+KHRhZ2dlZFJl
ZyA+PiAxMik7CisKKyAgICB0aGlzLT5vZmZzZXQgPSB2aWV3LT5yZWFkPGludDE2X3Q+KG9mZnNl
dCwgdHJ1ZSk7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIGtpbmQsICIsIHJlZyIsIGR3YXJm
UmVnTnVtLCAiLCAiLCBvZmZzZXQsICIpIik7Cit9CisKK2Jvb2wgU3RhY2tNYXBzOjpMb2NhdGlv
bjo6aW52b2x2ZXNHUFIoKSBjb25zdAoreworICAgIHJldHVybiBpc0dQUigpIHx8IGtpbmQgPT0g
SW5kaXJlY3Q7Cit9CisKKyNpZiBDUFUoWDg2XzY0KSAvLyBDUFUgY2FzZXMgZm9yIFN0YWNrTWFw
czo6TG9jYXRpb24KKy8vIFRoaXMgZGVjb2RlcyBEd2FyZiBmbGF2b3VyIDAgZm9yIHg4Ni02NC4K
K2Jvb2wgU3RhY2tNYXBzOjpMb2NhdGlvbjo6aXNHUFIoKSBjb25zdAoreworICAgIHJldHVybiBr
aW5kID09IFJlZ2lzdGVyICYmIGR3YXJmUmVnTnVtIDwgMTY7Cit9CisKK0dQUlJlZyBTdGFja01h
cHM6OkxvY2F0aW9uOjpncHIoKSBjb25zdAoreworICAgIC8vIFN0dXBpZGx5LCBEd2FyZiBkb2Vz
bid0IG51bWJlciB0aGUgcmVnaXN0ZXJzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgYXJjaGl0ZWN0
dXJlOworICAgIC8vIGZvciBleGFtcGxlLCB0aGUgYXJjaGl0ZWN0dXJlIGVuY29kZXMgQ1ggYXMg
MSBhbmQgRFggYXMgMiB3aGlsZSBEd2FyZiBkb2VzIHRoZQorICAgIC8vIG9wcG9zaXRlLiBIZW5j
ZSB3ZSBuZWVkIHRoZSBzd2l0Y2guCisgICAgCisgICAgc3dpdGNoIChkd2FyZlJlZ051bSkgewor
ICAgIGNhc2UgMDoKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWF4OworICAgIGNhc2Ug
MToKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWR4OworICAgIGNhc2UgMjoKKyAgICAg
ICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIGNhc2UgMzoKKyAgICAgICAgcmV0dXJu
IFg4NlJlZ2lzdGVyczo6ZWJ4OworICAgIGNhc2UgNDoKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lz
dGVyczo6ZXNpOworICAgIGNhc2UgNToKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWRp
OworICAgIGNhc2UgNjoKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWJwOworICAgIGNh
c2UgNzoKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZXNwOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGR3YXJmUmVnTnVtIDwgMTYpOworICAgICAgICAvLyBSZWdp
c3RlcnMgcjguLnIxNSBhcmUgbnVtYmVyZWQgc2Vuc2libHkuCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHUFJSZWc+KGR3YXJmUmVnTnVtKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RhY2tNYXBz
OjpMb2NhdGlvbjo6cmVzdG9yZUludG8oCisgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgY29uc3Qg
U3RhY2tNYXBzJiBzdGFja21hcHMsIGNoYXIqIHNhdmVkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGlmIChpc0dQUigpKSB7CisgICAgICAgIGppdC5sb2FkNjQoc2F2ZWRSZWdpc3Rl
cnMgKyBvZmZzZXRPZkdQUihncHIoKSksIHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBvdGhlciByZWdpc3RlcnMuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI1MTgKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIEluZGlyZWN0OgorICAgICAgICBqaXQubG9hZDY0KHNhdmVkUmVnaXN0ZXJz
ICsgb2Zmc2V0T2ZHUFIoZ3ByKCkpLCByZXN1bHQpOworICAgICAgICBqaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG9mZnNldCksIHJlc3VsdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBDb25zdGFudEluZGV4OgorICAgICAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KHN0YWNrbWFwcy5jb25zdGFudHNbb2Zmc2V0XS5p
bnRlZ2VyKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFVu
cHJvY2Vzc2VkOgorICAgICAgICAvLyBTaG91bGQgbmV2ZXIgc2VlIHRoaXMgLSBpdCdzIGFuIGVu
dW1lcmF0aW9uIGVudHJ5IG9uIExMVk0ncyBzaWRlIHRoYXQgbWVhbnMgdGhhdAorICAgICAgICAv
LyBpdCBoYXNuJ3QgcHJvY2Vzc2VkIHRoaXMgbG9jYXRpb24uCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbHNlIC8vIENQVSBjYXNlcyBmb3IgU3Rh
Y2tNYXBzOjpMb2NhdGlvbgorI2Vycm9yICJDUFUgYXJjaGl0ZWN0dXJlIG5vdCBzdXBwb3J0ZWQu
IgorI2VuZGlmIC8vIENQVSBjYXNlcyBmb3IgU3RhY2tNYXBzOjpMb2NhdGlvbgorCitib29sIFN0
YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCkK
K3sKKyAgICBwYXRjaHBvaW50SUQgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUp
OworICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90PihwYXRjaHBvaW50SUQpIDwgMCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGluc3RydWN0aW9uT2Zmc2V0ID0gdmlldy0+cmVh
ZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICBmbGFncyA9IHZpZXctPnJlYWQ8dWludDE2
X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gdmlldy0+cmVh
ZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICB3aGlsZSAobGVuZ3RoLS0pCisgICAgICAg
IGxvY2F0aW9ucy5hcHBlbmQocmVhZE9iamVjdDxMb2NhdGlvbj4odmlldywgb2Zmc2V0KSk7Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpSZWNvcmQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICIoIyIs
IHBhdGNocG9pbnRJRCwgIiwgb2Zmc2V0ID0gIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICIsIGZsYWdz
ID0gIiwgZmxhZ3MsCisgICAgICAgICIsIFsiLCBsaXN0RHVtcChsb2NhdGlvbnMpLCAiXSkiKTsK
K30KKworYm9vbCBTdGFja01hcHM6OnBhcnNlKERhdGFWaWV3KiB2aWV3KQoreworICAgIHVuc2ln
bmVkIG9mZnNldCA9IDA7CisgICAgCisgICAgdWludDMyX3QgbnVtQ29uc3RhbnRzID0gdmlldy0+
cmVhZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICB3aGlsZSAobnVtQ29uc3RhbnRzLS0p
CisgICAgICAgIGNvbnN0YW50cy5hcHBlbmQocmVhZE9iamVjdDxDb25zdGFudD4odmlldywgb2Zm
c2V0KSk7CisgICAgCisgICAgdWludDMyX3QgbnVtUmVjb3JkcyA9IHZpZXctPnJlYWQ8dWludDMy
X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgd2hpbGUgKG51bVJlY29yZHMtLSkgeworICAgICAgICBS
ZWNvcmQgcmVjb3JkOworICAgICAgICBpZiAoIXJlY29yZC5wYXJzZSh2aWV3LCBvZmZzZXQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZWNvcmRzLmFwcGVuZChyZWNvcmQp
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdGFja01hcHM6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkNvbnN0YW50czpb
IiwgbGlzdER1bXAoY29uc3RhbnRzKSwgIl0sIFJlY29yZHM6WyIsIGxpc3REdW1wKHJlY29yZHMp
LCAiXSIpOworfQorCit2b2lkIFN0YWNrTWFwczo6ZHVtcE11bHRpbGluZShQcmludFN0cmVhbSYg
b3V0LCBjb25zdCBjaGFyKiBwcmVmaXgpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KHByZWZpeCwg
IkNvbnN0YW50czpcbiIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb25zdGFudHMu
c2l6ZSgpOyArK2kpCisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgICAgIiwgY29uc3RhbnRz
W2ldLCAiXG4iKTsKKyAgICBvdXQucHJpbnQocHJlZml4LCAiUmVjb3JkczpcbiIpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWNvcmRzLnNpemUoKTsgKytpKQorICAgICAgICBvdXQu
cHJpbnQocHJlZml4LCAiICAgICIsIHJlY29yZHNbaV0sICJcbiIpOworfQorCitTdGFja01hcHM6
OlJlY29yZE1hcCBTdGFja01hcHM6OmdldFJlY29yZE1hcCgpIGNvbnN0Cit7CisgICAgUmVjb3Jk
TWFwIHJlc3VsdDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykK
KyAgICAgICAgcmVzdWx0LmFkZChyZWNvcmRzW2ldLnBhdGNocG9pbnRJRCwgcmVjb3Jkc1tpXSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6RlRMOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhY2tNYXBzOjpMb2NhdGlvbjo6S2luZCBraW5k
KQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6
VW5wcm9jZXNzZWQ6CisgICAgICAgIG91dC5wcmludCgiVW5wcm9jZXNzZWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6UmVnaXN0ZXI6CisgICAgICAg
IG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tN
YXBzOjpMb2NhdGlvbjo6SW5kaXJlY3Q6CisgICAgICAgIG91dC5wcmludCgiSW5kaXJlY3QiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6Q29uc3RhbnQ6
CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6Q29uc3RhbnRJbmRleDoKKyAgICAgICAgb3V0LnByaW50
KCJDb25zdGFudEluZGV4Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGF0YUxvZygi
VW5yZWNvZ25pemVkIGtpbmQ6ICIsIHN0YXRpY19jYXN0PGludD4oa2luZCksICJcbiIpOworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhY2tNYXBzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExT
dGFja01hcHNfaAorI2RlZmluZSBGVExTdGFja01hcHNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRhdGFWaWV3LmgiCisj
aW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXI7
CisKK25hbWVzcGFjZSBGVEwgeworCitzdHJ1Y3QgU3RhY2tNYXBzIHsKKyAgICB1bmlvbiBDb25z
dGFudCB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlIHZhbHVlOworICAgICAgICBpbnQ2NF90IGlu
dGVnZXI7CisgICAgICAgIAorICAgICAgICB2b2lkIHBhcnNlKERhdGFWaWV3KiB2aWV3LCB1bnNp
Z25lZCYgb2Zmc2V0KTsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
OworICAgIH07CisgICAgCisgICAgc3RydWN0IExvY2F0aW9uIHsKKyAgICAgICAgZW51bSBLaW5k
IHsKKyAgICAgICAgICAgIFVucHJvY2Vzc2VkLAorICAgICAgICAgICAgUmVnaXN0ZXIsCisgICAg
ICAgICAgICBJbmRpcmVjdCwKKyAgICAgICAgICAgIENvbnN0YW50LAorICAgICAgICAgICAgQ29u
c3RhbnRJbmRleAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgdWludDE2X3QgZHdhcmZS
ZWdOdW07IC8vIFJlcHJlc2VudGVkIGFzIGEgMTItYml0IGludCBpbiB0aGUgc2VjdGlvbi4KKyAg
ICAgICAgS2luZCBraW5kOworICAgICAgICBpbnQxNl90IG9mZnNldDsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpOworICAgICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBi
b29sIGlzR1BSKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaW52b2x2ZXNHUFIoKSBjb25zdDsKKyAg
ICAgICAgR1BSUmVnIGdwcigpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgLy8gQXNzdW1pbmcg
dGhhdCBhbGwgcmVnaXN0ZXJzIGFyZSBzYXZlZCB0byB0aGUgc2F2ZWRSZWdpc3RlcnMgYnVmZmVy
IGFjY29yZGluZworICAgICAgICAvLyB0byBGVExTYXZlUmVzdG9yZSBjb252ZW50aW9uLCB0aGlz
IGxvYWRzIHRoZSB2YWx1ZSBpbnRvIHRoZSBnaXZlbiByZWdpc3Rlci4KKyAgICAgICAgLy8gVGhl
IGNvZGUgdGhhdCB0aGlzIGdlbmVyYXRlcyBpc24ndCBleGFjdGx5IHN1cGVyIGZhc3QuCisgICAg
ICAgIHZvaWQgcmVzdG9yZUludG8oCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlciYsIGNvbnN0
IFN0YWNrTWFwcyYgc3RhY2ttYXBzLCBjaGFyKiBzYXZlZFJlZ2lzdGVycywKKyAgICAgICAgICAg
IEdQUlJlZyByZXN1bHQpOworICAgIH07CisgICAgCisgICAgc3RydWN0IFJlY29yZCB7CisgICAg
ICAgIHVpbnQzMl90IHBhdGNocG9pbnRJRDsKKyAgICAgICAgdWludDMyX3QgaW5zdHJ1Y3Rpb25P
ZmZzZXQ7CisgICAgICAgIHVpbnQxNl90IGZsYWdzOworICAgICAgICAKKyAgICAgICAgVmVjdG9y
PExvY2F0aW9uPiBsb2NhdGlvbnM7CisgICAgICAgIAorICAgICAgICBib29sIHBhcnNlKERhdGFW
aWV3KiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KTsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIH07CisgICAgCisgICAgVmVjdG9yPENvbnN0YW50PiBjb25z
dGFudHM7CisgICAgVmVjdG9yPFJlY29yZD4gcmVjb3JkczsKKyAgICAKKyAgICBib29sIHBhcnNl
KERhdGFWaWV3KiB2aWV3KTsgLy8gUmV0dXJucyB0cnVlIG9uIHBhcnNlIHN1Y2Nlc3MsIGZhbHNl
IG9uIGZhaWx1cmUuIEZhaWx1cmUgbWVhbnMgdGhhdCBMTFZNIGlzIHNpZ25hbGluZyBjb21waWxl
IGZhaWx1cmUgdG8gdXMuCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
ICAgIHZvaWQgZHVtcE11bHRpbGluZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVm
aXgpIGNvbnN0OworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJfdCwgUmVjb3JkLCBX
VEY6OkludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVpbnQzMl90Pj4gUmVjb3JkTWFwOworICAgIAorICAgIFJlY29yZE1hcCBnZXRSZWNvcmRNYXAo
KSBjb25zdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworbmFtZXNwYWNlIFdU
RiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6RlRMOjpTdGFja01h
cHM6OkxvY2F0aW9uOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFN0YWNrTWFwc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIu
aCIKICNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiCisjaW5jbHVkZSAiRlRM
U3RhY2tNYXBzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTU3LDYgKzU4LDkgQEAgcHVibGljOgogICAgIFZlY3Rv
cjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBvc3JFeGl0OwogICAgIEdlbmVyYXRlZEZ1bmN0aW9u
IGdlbmVyYXRlZEZ1bmN0aW9uOwogICAgIEpJVEZpbmFsaXplciogZmluYWxpemVyOworICAgIFZl
Y3RvcjxDU3RyaW5nPiBjb2RlU2VjdGlvbk5hbWVzOworICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRh
U2VjdGlvbk5hbWVzOworICAgIFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFw
c1NlY3Rpb247CiAgICAgCiAgICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24g
MTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTIgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisj
aW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2luY2x1
ZGUgIkZUTE9TUkV4aXRDb21waWxlci5oIgorI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCiAj
aW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAg
LTQwLDcgKzQxLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBNYWNy
b0Fzc2VtYmxlciBqaXQ7CisgICAgQXNzZW1ibHlIZWxwZXJzIGppdCh2bSwgMCk7CisgICAgCisg
ICAgLy8gTm90ZSB0aGF0IGluIHRoZSBmdGxPU1JFeGl0VXNlc1N0YWNrbWFwKCkgY2FzZSwgdGhl
ICJyZXR1cm4gYWRkcmVzcyIgd2lsbCBiZSB0aGUKKyAgICAvLyBPU1IgZXhpdCBJRC4KICAgICAK
ICAgICAvLyBQcmV0ZW5kIHRoYXQgd2UncmUgYSBDIGNhbGwgZnJhbWUuCiAgICAgaml0LnB1c2go
TWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTQ4LDQ0ICs1Miw0NiBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgaml0LnB1c2go
R1BSSW5mbzo6cmVnVDApOwogICAgIGppdC5wdXNoKEdQUkluZm86OnJlZ1QwKTsKICAgICAKLSAg
ICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86
Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVn
aXN0ZXJzKTsKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKLSAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0g
c3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkp
OwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzOyArK2kpCi0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvQXJn
dW1lbnRSZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihidWZmZXIgKyBHUFJJbmZvOjpu
dW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzICsgaSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotICAg
ICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpLCBHUFJJ
bmZvOjpub25BcmdHUFIxKTsKLSAgICB9CisgICAgaWYgKCFPcHRpb25zOjpmdGxPU1JFeGl0VXNl
c1N0YWNrbWFwKCkpCisgICAgICAgIGppdC5wb2tlKEdQUkluZm86Om5vbkFyZ0dQUjAsIDEpOwor
ICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZl
ckZvclNpemUocmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSk7CisgICAgY2hhciog
YnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7
CisgICAgCisgICAgc2F2ZUFsbFJlZ2lzdGVycyhqaXQsIGJ1ZmZlcik7CiAgICAgCiAgICAgLy8g
VGVsbCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBhY3Rp
dmUgZHVyaW5nIGNhbGwuCiAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpub25BcmdHUFIx
KTsKLSAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRj
aFNpemUpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSks
IEdQUkluZm86Om5vbkFyZ0dQUjEpOwogCiAgICAgLy8gYXJndW1lbnQgMCBpcyBhbHJlYWR5IHRo
ZSBjYWxsIGZyYW1lLgotICAgIGppdC5tb3ZlKEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgaWYgKE9wdGlvbnM6OmZ0bE9TUkV4aXRVc2VzU3RhY2ttYXAo
KSkKKyAgICAgICAgaml0LnBlZWsoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAzKTsKKyAgICBlbHNl
CisgICAgICAgIGppdC5wZWVrKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoKTsKICAgICAKLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCB3ZSdyZSBub3QgdXNpbmcgdGhlIHJldHVybiByZWdpc3RlciBpZiBpdCdz
IGFuIGFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdhbnQg
dG8gbWFrZSBhIHRhaWwgY2FsbCB0byB3aGF0IHdhcyByZXR1cm5lZCB0byB1cyBpbiB0aGUKKyAg
ICAvLyByZXR1cm5WYWx1ZUdQUi4gQnV0IGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgZG8gdGhpcywg
d2UgbXVzdCByZXN0b3JlIGFsbCByZWdpc3RlcnMuCisgICAgLy8gVGhlIHdheSB3ZSB3aWxsIGFj
Y29tcGxpc2ggdGhpcyBpcyBieSBhcnJhbmdpbmcgdG8gaGF2ZSB0aGUgdGFpbCBjYWxsIHRhcmdl
dCBpbiB0aGUKKyAgICAvLyByZXR1cm4gYWRkcmVzcyAic2xvdCIgKGJlIGl0IGEgcmVnaXN0ZXIg
b3IgdGhlIHN0YWNrKS4KKyAgICAKKyAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgR1BSSW5mbzo6cmVnVDApOwogICAgIAogICAgIC8vIFByZXBhcmUgZm9yIHRhaWwgY2FsbC4K
LSAgICBqaXQucG9wKEdQUkluZm86Om5vbkFyZ0dQUjEpOwotICAgIGppdC5wb3AoR1BSSW5mbzo6
bm9uQXJnR1BSMSk7CisgICAgaml0LnBvcChHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0LnBvcChH
UFJJbmZvOjpyZWdUMSk7CiAgICAgaml0LnBvcChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIpOwogICAgIAotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MSk7Ci0gICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBH
UFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIHNpdHRpbmcg
b24gdGhlIHJldHVybiBhZGRyZXNzIC0gc28gaWYgd2UgZGlkIGEganVtcCByaWdodCBub3csIHRo
ZQorICAgIC8vIHRhaWwtY2FsbGVlIHdvdWxkIGJlIGhhcHB5LiBJbnN0ZWFkIHdlJ2xsIHN0YXNo
IHRoZSBjYWxsZWUgaW4gdGhlIHJldHVybiBhZGRyZXNzIGFuZCB0aGVuCisgICAgLy8gcmVzdG9y
ZSBhbGwgcmVnaXN0ZXJzLgogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJ
bmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZB
cmd1bWVudFJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLSAgICAgICAgaml0
LmxvYWREb3VibGUoR1BSSW5mbzo6bm9uQXJnR1BSMSwgRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lz
dGVyKGkpKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51
bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKLSAgICAgICAgaml0LmxvYWQ2NChidWZmZXIg
KyBpLCBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpOworICAgIGppdC5yZXN0b3JlUmV0
dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMCk7CiAgICAgCi0gICAgaml0Lmp1
bXAoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgcmVzdG9yZUFsbFJlZ2lzdGVycyhqaXQsIGJ1
ZmZlcik7CisKKyAgICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmdW5j
dGlvbkNhbGwsIGNvbXBpbGVGVExPU1JFeGl0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNjcgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiQXNzZW1i
bHlIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBy
ZWJveEFjY29yZGluZ1RvRm9ybWF0KAorICAgIFZhbHVlRm9ybWF0IGZvcm1hdCwgQXNzZW1ibHlI
ZWxwZXJzJiBqaXQsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6
IHsKKyAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB2YWx1
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVG
b3JtYXRVSW50MzI6IHsKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OmZwUmVn
VDAsIHNjcmF0Y2gyKTsKKyAgICAgICAgaml0LmJveEludDUyKHZhbHVlLCB2YWx1ZSwgc2NyYXRj
aDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRj
aDIsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjogeworICAgICAgICBqaXQucnNoaWZ0NjQoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCksIHZhbHVl
KTsKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OmZwUmVnVDAsIHNjcmF0Y2gy
KTsKKyAgICAgICAgaml0LmJveEludDUyKHZhbHVlLCB2YWx1ZSwgc2NyYXRjaDEsIEZQUkluZm86
OmZwUmVnVDApOworICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaDIsIEZQUkluZm86
OmZwUmVnVDApOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNl
IFZhbHVlRm9ybWF0U3RyaWN0SW50NTI6IHsKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQ
UkluZm86OmZwUmVnVDAsIHNjcmF0Y2gyKTsKKyAgICAgICAgaml0LmJveEludDUyKHZhbHVlLCB2
YWx1ZSwgc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBqaXQubW92ZTY0VG9E
b3VibGUoc2NyYXRjaDIsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0Qm9vbGVhbjogeworICAgICAgICBq
aXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCB2YWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVGb3Jt
YXRKU1ZhbHVlOiB7CisgICAgICAgIC8vIERvbmUgYWxyZWFkeSEKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZUZvcm1hdERvdWJsZTogeworICAgICAg
ICBqaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6ZnBSZWdUMCwgc2NyYXRjaDEpOworICAgICAg
ICBqaXQubW92ZTY0VG9Eb3VibGUodmFsdWUsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBq
aXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIHZhbHVlKTsKKyAgICAgICAgaml0Lm1vdmU2
NFRvRG91YmxlKHNjcmF0Y2gxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKIG5hbWVzcGFjZSBXVEYgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOjpG
VEw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5oCShy
ZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9y
bWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKIAorI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEFzc2VtYmx5SGVscGVyczsKKworbmFtZXNwYWNlIEZUTCB7CiAKIC8vIE5vdGUgdGhh
dCB0aGlzIGlzIGF3a3dhcmRseSBzaW1pbGFyIHRvIERhdGFGb3JtYXQgaW4gb3RoZXIgcGFydHMg
b2YgSlNDLCBleGNlcHQgdGhhdAogLy8gdW5saWtlIERhdGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVS
ZWNvdmVyeSwgaXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFVJbnQzMiBhbmQgSW50MzIuCkBAIC00
OCw2ICs1Myw5IEBAIGVudW0gVmFsdWVGb3JtYXQgewogICAgIFZhbHVlRm9ybWF0RG91YmxlCiB9
OwogCit2b2lkIHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQoCisgICAgVmFsdWVGb3JtYXQsIEFzc2Vt
Ymx5SGVscGVycyYsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkocmV2aXNpb24g
MTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMiBAQCBQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRh
Vmlldzo6Y3JlYXRlKAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBi
eXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFW
aWV3OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyKQoreworICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIHJldHVybiBj
cmVhdGUoYnVmZmVyLCAwLCBidWZmZXItPmJ5dGVMZW5ndGgoKSk7Cit9CisKIEpTQXJyYXlCdWZm
ZXJWaWV3KiBEYXRhVmlldzo6d3JhcChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiB7CiAgICAgcmV0dXJuIEpTRGF0YVZpZXc6OmNyZWF0ZSgKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMTU3MTE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+KTsKICAgICAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCBPVkVS
UklERQogICAgIHsKQEAgLTY4LDYgKzY5LDE1IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIHJlYWQodW5zaWduZWQmIG9mZnNldCwgYm9vbCBs
aXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgeworICAgICAgICBUIHJlc3VsdCA9
IHRoaXMtPnRlbXBsYXRlIGdldDxUPihvZmZzZXQsIGxpdHRsZUVuZGlhbiwgc3RhdHVzKTsKKyAg
ICAgICAgaWYgKCFzdGF0dXMgfHwgKnN0YXR1cykKKyAgICAgICAgICAgIG9mZnNldCArPSBzaXpl
b2YoVCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBzZXQodW5zaWduZWQgb2Zmc2V0LCBUIHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgYm9vbCogc3RhdHVzID0gMCkKICAgICB7CiAgICAgICAgIGlmIChzdGF0
dXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlz
aW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMywxMSBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9w
dGlvblJhbmdlOwogICAgIHYoYm9vbCwgdXNlTExWTVNtYWxsQ29kZU1vZGVsLCBmYWxzZSkgXAog
ICAgIHYoYm9vbCwgZnRsVHJhcHNPbk9TUkV4aXQsIGZhbHNlKSBcCiAgICAgdihib29sLCBmdGxP
U1JFeGl0T21pdHNNYXJzaGFsbGluZywgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGZ0bE9TUkV4aXRV
c2VzU3RhY2ttYXAsIGZhbHNlKSBcCiAgICAgdihib29sLCB1c2VMTFZNT1NSRXhpdEludHJpbnNp
YywgZmFsc2UpIFwKICAgICB2KGJvb2wsIGR1bXBMTFZNSVIsIGZhbHNlKSBcCi0gICAgdihib29s
LCBsbHZtQWx3YXlzRmFpbHMsIGZhbHNlKSBcCisgICAgdihib29sLCBsbHZtQWx3YXlzRmFpbHNC
ZWZvcmVDb21waWxlLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3Jl
TGluaywgZmFsc2UpIFwKICAgICB2KHVuc2lnbmVkLCBsbHZtQmFja2VuZE9wdGltaXphdGlvbkxl
dmVsLCAyKSBcCiAgICAgdih1bnNpZ25lZCwgbGx2bU9wdGltaXphdGlvbkxldmVsLCAyKSBcCiAg
ICAgdih1bnNpZ25lZCwgbGx2bVNpemVMZXZlbCwgMCkgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213742</attachid>
            <date>2013-10-08 19:23:35 -0700</date>
            <delta_ts>2013-10-08 19:52:45 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79528</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMy0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzaW1wbGUgT1NSIGV4aXRzIHVzaW5nIGxsdm0ud2Vi
a2l0LnN0YWNrbWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjI1MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgZ2l2ZXMgdGhlIEZUTCB0aGUgYWJpbGl0eSB0byBPU1IgZXhpdCB1
c2luZyB0aGUgbGx2bS53ZWJraXQuc3RhY2ttYXAgaW50cmluc2ljLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgRlRMIGNvbXBpbGVzIGFsbCBPU1IgZXhpdCBjYWxscyBhcyBjYWxscyB0byBsbHZt
LndlYmtpdC5zdGFja21hcCB3aXRoIGEgdW5pcXVlCisgICAgICAgICAgSUQsIHBhc3NpbmcgYSBy
ZXF1ZXN0ZWQgc2l6ZSB0aGF0IGlzIGJpZyBlbm91Z2ggZm9yIG93biBqdW1wIHJlcGxhY2VtZW50
LgorICAgICAgICAKKyAgICAgICAgLSBBZnRlciBMTFZNIGNvbXBpbGF0aW9uLCB3ZSBwYXJzZSB0
aGUgbmV3IExMVk0gc3RhY2ttYXAgc2VjdGlvbi4KKyAgICAgICAgCisgICAgICAgIC0gRm9yIGFs
bCBsbHZtLndlYmtpdC5zdGFja21hcHMgdGhhdCB3ZSB1c2VkIGZvciBPU1IgZXhpdHMsIHdlIGRv
IGEganVtcFJlcGxhY2VtZW50LAorICAgICAgICAgIHdoaWNoIHRhcmdldHMgZXhpdCB0aHVua3Mg
dGhhdCB3ZSBnZW5lcmF0ZS4KKyAgICAgICAgCisgICAgICAgIC0gSWYgYW4gZXhpdCB0aHVuayBm
aXJlcywgaXQgY2F1c2VzIEpTQyB0byBjb21waWxlIGFuIGV4aXQgb2ZmLXJhbXAgdGhhdCB1c2Vz
IGEKKyAgICAgICAgICBjb21iaW5hdGlvbiBvZiB0aGUgSlNDLWludGVybmFsIE9TUiBleGl0IGFj
Y291bnRpbmcgKEZUTDo6RXhpdFZhbHVlIGFuZCBmcmllbmRzKSBhbmQKKyAgICAgICAgICBMTFZN
IHN0YWNrbWFwJ3MgYWNjb3VudGluZyBvZiB3aGVyZSBkYXRhIGFjdHVhbGx5IGVuZGVkIHVwIChy
ZWdpc3RlciwgaW5kaXJlY3QsCisgICAgICAgICAgY29uc3RhbnQpIHRvIHJlY29uc3RydWN0IGJ5
dGVjb2RlIHN0YXRlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGlsbCBoYXMgc2hvcnRjb21p
bmdzOyBmb3IgZXhhbXBsZSBpdCBjYW5ub3QgaGFuZGxlIFhNTSBvciBZTU0gcmVnaXN0ZXJzLiBI
YW5kbGluZworICAgICAgICBZTU0gcmVnaXN0ZXJzIHdpbGwgcmVxdWlyZSBhZGRpbmcgc29tZSBi
YXNpYyBZTU0gc3VwcG9ydCB0byBvdXIgYXNzZW1ibGVycyAtIHJlYWxseSB3ZQorICAgICAgICBq
dXN0IG5lZWQgdGhlIGFiaWxpdHkgdG8gbW92ZSBhIFlNTSdzIHZhbHVlIGludG8gYSBHUFIuCisg
ICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHByZXNlcnZlcyBhbGwgb2YgdGhlIG9sZCwgaW50
cmluc2ljLWxlc3MsIEZUTCBPU1IgZXhpdCBzdXBwb3J0LiBIZW5jZSBpdAorICAgICAgICBtYW5h
Z2VzIHRvIHBhc3MgYWxsIGV4aXN0aW5nIEZUTCB0ZXN0cyBldmVuIGRlc3BpdGUgaXRzIGluY29t
cGxldGVuZXNzLiBJIHRoaW5rIHRoYXQncworICAgICAgICB0aGUgcmlnaHQgd2F5IHRvIGdvIHNp
bmNlIHRoaXMgaXMgYWxyZWFkeSBhIGJpZyBwYXRjaCwgYW5kIGFueXdheSBpdCB3b3VsZCBiZSBn
cmVhdCB0bworICAgICAgICBrZWVwIHRoZSBpbnRyaW5zaWMtbGVzcyBGVEwgT1NSIGV4aXQgc3Vw
cG9ydCBzbyBsb25nIGFzIHRoZSBMTFZNIHNpZGUgb2YgdGhpcyBoYXNuJ3QKKyAgICAgICAgbGFu
ZGVkLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OmlzU3RhY2tSZWxhdGVkKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVh
bFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om5leHRSZWdpc3Rlcik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0ZXIpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpmaXJz
dFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIpOgor
ICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21w
aWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0QW5kQm94KToKKyAg
ICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmg6CisgICAgICAgIChKU0M6OkZUTDo6Q0Fy
Z3VtZW50R2V0dGVyOjpsb2FkTmV4dERvdWJsZUludG9HUFIpOgorICAgICAgICAqIGZ0bC9GVExD
b21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlQ29kZVNlY3Rpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgIChKU0M6
OkZUTDo6ZHVtcERhdGFTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpmaXhGdW5jdGlvbkJh
c2VkT25TdGFja01hcHMpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRU
aHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtH
ZW5lcmF0b3I6OmVtaXRUaHVua3MpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkZUTDo6
RXhpdFZhbHVlOjppc0luSlNTdGFja1NvbWVob3cpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRW
YWx1ZTo6dmFsdWVGb3JtYXQpOgorICAgICAgICAqIGZ0bC9GVExGYWlsLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpmYWlsKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5o
OgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUV4aXRUaHVua3MpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExWTSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpsaW5rT1NSRXhpdHNBbmRDb21wbGV0ZUluaXRpYWxpemF0aW9u
QmxvY2tzKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExP
U1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdENvbXBp
bGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWJXaXRoT1NS
RXhpdFN0YWNrbWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1YldpdGhvdXRPU1JF
eGl0U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExPU1JFeGl0KToKKyAg
ICAgICAgKiBmdGwvRlRMU2F2ZVJlc3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRM
OjpieXRlc0ZvckdQUnMpOgorICAgICAgICAoSlNDOjpGVEw6OnJlcXVpcmVkU2NyYXRjaE1lbW9y
eVNpemVJbkJ5dGVzKToKKyAgICAgICAgKEpTQzo6RlRMOjpvZmZzZXRPZkdQUik6CisgICAgICAg
IChKU0M6OkZUTDo6c2F2ZUFsbFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkZUTDo6cmVzdG9y
ZUFsbFJlZ2lzdGVycyk6CisgICAgICAgICogZnRsL0ZUTFNhdmVSZXN0b3JlLmg6IEFkZGVkLgor
ICAgICAgICAqIGZ0bC9GVExTdGFja01hcHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRM
OjpyZWFkT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkNvbnN0YW50Ojpw
YXJzZSk6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpDb25zdGFudDo6ZHVtcCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpMb2NhdGlvbjo6cGFyc2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlN0YWNrTWFwczo6TG9jYXRpb246OmR1bXApOgorICAgICAgICAoSlNDOjpGVEw6
OlN0YWNrTWFwczo6TG9jYXRpb246Omludm9sdmVzR1BSKToKKyAgICAgICAgKEpTQzo6RlRMOjpT
dGFja01hcHM6OkxvY2F0aW9uOjppc0dQUik6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBz
OjpMb2NhdGlvbjo6Z3ByKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9u
OjpyZXN0b3JlSW50byk6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpSZWNvcmQ6OnBh
cnNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OlJlY29yZDo6ZHVtcCk6CisgICAg
ICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpwYXJzZSk6CisgICAgICAgIChKU0M6OkZUTDo6U3Rh
Y2tNYXBzOjpkdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OmR1bXBNdWx0aWxp
bmUpOgorICAgICAgICAoSlNDOjpGVEw6OlN0YWNrTWFwczo6Z2V0UmVjb3JkTWFwKToKKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZnRsL0ZUTFN0YWNrTWFwcy5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OnJlYm94QWNjb3JkaW5nVG9Gb3JtYXQpOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZUZvcm1hdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvRGF0YVZpZXcuY3BwOgorICAgICAgICAoSlNDOjpEYXRhVmll
dzo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGFWaWV3Lmg6CisgICAgICAgIChKU0M6
OkRhdGFWaWV3OjpyZWFkKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxMy0x
MC0wOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQg
Zm9yLW9mIGl0ZXJhdGlvbiB0byBpbi1iYW5kIHNpZ25hbGxpbmcgc28gd2UgY2FuIHRyaXZpYWxs
eSBhdm9pZCB1bm5lY2Vzc2FyeSBvYmplY3QgYWxsb2NhdGlvbgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTQsNiArMzE0LDggQEAKIAkJMEY5RDMzNzAxNjVEQkI5MDAwNUFEMzg3IC8qIERpc2Fz
c2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcgLyogRGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJ
MEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM5NDE3RkZDNEU2MDA3M0My
QkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLzsgfTsKIAkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOUQzMzlBMTgw
M0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0
YWNrTWFwcy5jcHAgKi87IH07CisJCTBGOUQzMzlCMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFj
a01hcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OUQzMzk5MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQjRGNDE3RkNCOTE3MDBDQjY3
RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tM
YXlvdXRQaGFzZS5jcHAgKi87IH07CiAJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdT
dGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjlGQjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZD
OEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEJGMTRFMUI1RkIw
MEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICsz
NzQsOCBAQAogCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQw
NTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICov
OyB9OwogCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0NBRTQzMTZEMENGNkUw
MEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVz
dG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovOyB9OworCQkw
RkNFRkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQy
QzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZE
ODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87
IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZE
ODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKQEAgLTE1MjgsNiArMTUzMiw4IEBACiAJCTBGOUQz
MzZFMTY1REJCOEQwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxl
ci9EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5
NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoZWRBdC5jcHA7IHBhdGggPSBkZmcvREZHRmx1c2hl
ZEF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzOTUxN0ZGQzRFNjAw
NzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdGbHVzaGVkQXQuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaGVkQXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFw
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTdGFja01hcHMu
Y3BwOyBwYXRoID0gZnRsL0ZUTFN0YWNrTWFwcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGOUQzMzk5MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU3RhY2tNYXBzLmg7IHBhdGggPSBmdGwvRlRM
U3RhY2tNYXBzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYyMTdGQ0I5
MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlG
QjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGFja0xheW91dFBoYXNlLmg7IHBhdGggPSBkZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlG
QzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1OTgsNiArMTYwNCw4IEBACiAJCTBG
QzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9ySW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNDQUU0MzE2RDBDRjZFMDBEMEM2NUIg
LyogUGFyc2VyRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2Vy
RXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDRUZBQTkxODA0QzEzRTAw
NDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmNwcDsgcGF0aCA9IGZ0bC9GVExTYXZlUmVzdG9yZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExTYXZlUmVzdG9yZS5oOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQwLDYgKzI2NDgs
MTAgQEAKIAkJCQkwRjIzNUJDQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVy
LmggKi8sCiAJCQkJMEZFQTBBMjkxNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgKi8s
CiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oICovLAorCQkJCTBG
Q0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8sCisJCQkJMEZD
RUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8sCisJCQkJMEY5RDMz
OTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgKi8sCisJCQkJMEY5RDMzOTkx
ODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oICovLAogCQkJCTBGRUEwQTE1MTcwNkJC
OTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8sCiAJCQkJMEZFQTBBMDcxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTFN0YXRlLmggKi8sCiAJCQkJQTdGQ0MyNkMxN0EwQjZBQTAwNzg2RDFBIC8qIEZU
TFN3aXRjaENhc2UuaCAqLywKQEAgLTQzMDQsNiArNDMxNiw3IEBACiAJCQkJQkMxOEM0MkEwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkIxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZl
UmVzdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MDdEMjlFMEU4NzFFNUUwMEQ3
RDg5NiAvKiBKU1R5cGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwMjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDk5LDYgKzQ1
MTIsNyBAQAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyREY0NDMwMTcwN0FDMDEwMEE1Q0E5NiAv
KiBTdXBlclJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0
NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlEMzM5QjE4MDNBREI3
MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDEx
RDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNTI0OCw2ICs1MjYyLDcgQEAKIAkJCQk5
NjlBMDc5QTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODUwMTA3RUMwRDcwMDEzRTdCMiAvKiBPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3QkRBRUM4MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9yUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExT
YXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZD
NDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0
MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkw
MDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUzNDUsNiArNTM2
MCw3IEBACiAJCQkJODY3MDRCODQxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4NjEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJ
VC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
clBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5RDMzOUExODAzQURCNzAwNzNDMkJD
IC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI0MjEyREI4QTgx
MDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0
LDkgQEAgcHVibGljOgogICAgIGNsYXNzIEp1bXA7CiAKICAgICB0eXBlZGVmIHR5cGVuYW1lIEFz
c2VtYmxlclR5cGU6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICAKKyAgICBzdGF0aWMgUmVn
aXN0ZXJJRCBmaXJzdFJlZ2lzdGVyKCkgeyByZXR1cm4gQXNzZW1ibGVyVHlwZTo6Zmlyc3RSZWdp
c3RlcigpOyB9CisgICAgc3RhdGljIFJlZ2lzdGVySUQgbGFzdFJlZ2lzdGVyKCkgeyByZXR1cm4g
QXNzZW1ibGVyVHlwZTo6bGFzdFJlZ2lzdGVyKCk7IH0KIAogICAgIC8vIFNlY3Rpb24gMTogTWFj
cm9Bc3NlbWJsZXIgb3BlcmFuZCB0eXBlcwogICAgIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNTcxMTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgTWFj
cm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJCYXNlIHsKIHB1YmxpYzoKIAorICAg
IHN0YXRpYyBib29sIGlzU3RhY2tSZWxhdGVkKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlZyA9PSBzdGFja1BvaW50ZXJSZWdpc3RlciB8fCByZWcgPT0gZnJhbWVQb2lu
dGVyUmVnaXN0ZXI7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBSZWdpc3RlcklEIGZpcnN0UmVh
bFJlZ2lzdGVyKCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlciA9IE1h
Y3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7CisgICAgICAgIHdoaWxlIChNYWNyb0Fzc2Vt
Ymxlcjo6aXNTdGFja1JlbGF0ZWQoZmlyc3RSZWdpc3RlcikpCisgICAgICAgICAgICArK2ZpcnN0
UmVnaXN0ZXI7CisgICAgICAgIHJldHVybiBmaXJzdFJlZ2lzdGVyOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgUmVnaXN0ZXJJRCBuZXh0UmVnaXN0ZXIoUmVnaXN0ZXJJRCByZWcpCisgICAgewor
ICAgICAgICBSZWdpc3RlcklEIHJlc3VsdCA9IHN0YXRpY19jYXN0PFJlZ2lzdGVySUQ+KHJlZyAr
IDEpOworICAgICAgICB3aGlsZSAoTWFjcm9Bc3NlbWJsZXI6OmlzU3RhY2tSZWxhdGVkKHJlc3Vs
dCkpCisgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFJlZ2lzdGVySUQgc2Vjb25kUmVhbFJlZ2lzdGVyKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXh0UmVnaXN0ZXIoZmlyc3RSZWFsUmVnaXN0ZXIoKSk7CisgICAg
fQorCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpwb3A7CiAgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJCYXNlOjpqdW1wOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNo
MzI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgc3RhY2tQb2ludGVyUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVzcDsKICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBmcmFtZVBvaW50ZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVy
czo6ZWJwOwotCisgICAgCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxpbmRGb3JTcGVjaWZpY0Fy
Y2godWludDMyX3QgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID49IDB4MDBmZmZmZmY7IH0KICNpZiBD
UFUoWDg2XzY0KQogICAgIHN0YXRpYyBib29sIHNob3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHVp
bnQ2NF90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+PSAweDAwZmZmZmZmOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9u
IDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsMTYgQEAgbmFtZXNwYWNlIFg4NlJlZ2lz
dGVycyB7CiBjbGFzcyBYODZBc3NlbWJsZXIgewogcHVibGljOgogICAgIHR5cGVkZWYgWDg2UmVn
aXN0ZXJzOjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7CisgICAgc3RhdGljIFJlZ2lzdGVySUQgZmly
c3RSZWdpc3RlcigpIHsgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWF4OyB9CisgICAgc3RhdGljIFJl
Z2lzdGVySUQgbGFzdFJlZ2lzdGVyKCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAg
cmV0dXJuIFg4NlJlZ2lzdGVyczo6cjE1OworI2Vsc2UKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lz
dGVyczo6ZWRpOworI2VuZGlmCisgICAgfQorICAgIAogICAgIHR5cGVkZWYgWDg2UmVnaXN0ZXJz
OjpYTU1SZWdpc3RlcklEIFhNTVJlZ2lzdGVySUQ7CiAgICAgdHlwZWRlZiBYTU1SZWdpc3RlcklE
IEZQUmVnaXN0ZXJJRDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsMTIgKzI2NCwxOCBAQCBQbGFuOjpDb21waWxhdGlv
blBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGlmIChPcHRpb25zOjpyZXBvcnRDb21w
aWxlVGltZXMoKSkKICAgICAgICAgICAgIGJlZm9yZUZUTCA9IGN1cnJlbnRUaW1lTVMoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsbHZtQWx3YXlzRmFpbHMoKSkgeworICAgICAg
ICBpZiAoT3B0aW9uczo6bGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSgpKSB7CiAgICAgICAg
ICAgICBGVEw6OmZhaWwoc3RhdGUpOwogICAgICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIEZUTDo6Y29tcGlsZShzdGF0ZSk7CisKKyAgICAgICAg
aWYgKE9wdGlvbnM6Omxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmsoKSkgeworICAgICAgICAgICAg
RlRMOjpmYWlsKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBGVExQYXRoOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBGVEw6Omxpbmsoc3RhdGUpOwogICAgICAgICByZXR1cm4gRlRM
UGF0aDsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVu
dEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
QXJndW1lbnRHZXR0ZXIuY3BwCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYw
ICs1MiwzMSBAQCB2b2lkIENBcmd1bWVudEdldHRlcjo6bG9hZE5leHRBbmRCb3goCiAgICAgfQog
ICAgIAogICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOiB7
CisgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgorICAgIGNhc2UgVmFsdWVGb3JtYXRVSW50MzI6
CiAgICAgICAgIGxvYWROZXh0MzIoZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5vcjY0KEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVzdGluYXRpb24pOwogICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBjYXNlIFZhbHVlRm9ybWF0VUludDMyOiB7Ci0g
ICAgICAgIGxvYWROZXh0MzIoZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlRG91Ymxl
VG82NChGUFJJbmZvOjpmcFJlZ1QwLCBzY3JhdGNoMik7Ci0gICAgICAgIG1faml0LmJveEludDUy
KGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbiwgc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOwot
ICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMiwgRlBSSW5mbzo6ZnBSZWdUMCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBWYWx1ZUZvcm1hdElu
dDUyOiB7CisgICAgY2FzZSBWYWx1ZUZvcm1hdEludDUyOgorICAgIGNhc2UgVmFsdWVGb3JtYXRT
dHJpY3RJbnQ1MjoKKyAgICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1ZToKICAgICAgICAgbG9hZE5l
eHQ2NChkZXN0aW5hdGlvbik7Ci0gICAgICAgIG1faml0LnJzaGlmdDY0KEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpLCBkZXN0aW5hdGlvbik7
Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OmZwUmVnVDAsIHNjcmF0Y2gy
KTsKLSAgICAgICAgbV9qaXQuYm94SW50NTIoZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uLCBzY3Jh
dGNoMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKHNj
cmF0Y2gyLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgICAg
ICAgICAgCi0gICAgY2FzZSBWYWx1ZUZvcm1hdFN0cmljdEludDUyOiB7Ci0gICAgICAgIGxvYWRO
ZXh0NjQoZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZv
OjpmcFJlZ1QwLCBzY3JhdGNoMik7Ci0gICAgICAgIG1faml0LmJveEludDUyKGRlc3RpbmF0aW9u
LCBkZXN0aW5hdGlvbiwgc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICBtX2pp
dC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMiwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAgICAgICAgIAotICAgIGNhc2UgVmFsdWVGb3JtYXRCb29sZWFuOiB7
CisgICAgY2FzZSBWYWx1ZUZvcm1hdEJvb2xlYW46CiAgICAgICAgIGxvYWROZXh0OChkZXN0aW5h
dGlvbik7Ci0gICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihW
YWx1ZUZhbHNlKSwgZGVzdGluYXRpb24pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAg
ICAgICAKLSAgICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1ZTogewotICAgICAgICBsb2FkTmV4dDY0
KGRlc3RpbmF0aW9uKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgICAgICAgICAgCi0gICAg
Y2FzZSBWYWx1ZUZvcm1hdERvdWJsZTogewotICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChG
UFJJbmZvOjpmcFJlZ1QwLCBzY3JhdGNoMSk7Ci0gICAgICAgIGxvYWROZXh0RG91YmxlKEZQUklu
Zm86OmZwUmVnVDApOwotICAgICAgICBtX2ppdC5ib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwg
ZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgY2FzZSBWYWx1ZUZvcm1hdERvdWJsZToKKyAgICAgICAgbG9h
ZE5leHREb3VibGVJbnRvR1BSKGRlc3RpbmF0aW9uKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQog
ICAgICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAorICAgIHJlYm94QWNjb3JkaW5n
VG9Gb3JtYXQoZm9ybWF0LCBtX2ppdCwgZGVzdGluYXRpb24sIHNjcmF0Y2gxLCBzY3JhdGNoMik7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuaAkocmV2aXNpb24gMTU3MTE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAwLDYgKzEwMCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIGxvYWROZXh0NjQoZGVz
dGluYXRpb24pOwogICAgIH0KICAgICAKKyAgICB2b2lkIGxvYWROZXh0RG91YmxlSW50b0dQUihH
UFJSZWcgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBpZiAobV9mcHJBcmd1bWVudEluZGV4
IDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykgeworICAgICAgICAgICAgbV9q
aXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG1fZnByQXJndW1l
bnRJbmRleCsrKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkNjQobmV4dEFkZHJlc3MoKSwgZGVzdGluYXRp
b24pOworICAgIH0KKyAgICAKICAgICB2b2lkIGxvYWROZXh0RG91YmxlKEZQUlJlZyBkZXN0aW5h
dGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDE1
IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkNDYWxs
SGVscGVycy5oIgorI2luY2x1ZGUgIkRhdGFWaWV3LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgi
CiAjaW5jbHVkZSAiRGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgog
I2luY2x1ZGUgIkpJVFN0dWJzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUg
IlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvTExWTUhlYWRlcnMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNDIsMTEgKzQ2LDggQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAogc3RhdGljIHVpbnQ4
X3QqIG1tQWxsb2NhdGVDb2RlU2VjdGlvbigKLSAgICB2b2lkKiBvcGFxdWVTdGF0ZSwgdWludHB0
cl90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCwgdW5zaWduZWQgc2VjdGlvbklELAotICAgIGNv
bnN0IGNoYXIqIHNlY3Rpb25OYW1lKQorICAgIHZvaWQqIG9wYXF1ZVN0YXRlLCB1aW50cHRyX3Qg
c2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50LCB1bnNpZ25lZCwgY29uc3QgY2hhciogc2VjdGlvbk5h
bWUpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHNlY3Rpb25JRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNl
Y3Rpb25OYW1lKTsKICAgICAKICAgICBTdGF0ZSYgc3RhdGUgPSAqc3RhdGljX2Nhc3Q8U3RhdGUq
PihvcGFxdWVTdGF0ZSk7CiAgICAgCkBAIC01Nyw2ICs1OCw3IEBAIHN0YXRpYyB1aW50OF90KiBt
bUFsbG9jYXRlQ29kZVNlY3Rpb24oCiAgICAgICAgICAgICBzdGF0ZS5ncmFwaC5tX3ZtLCBzaXpl
LCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CiAg
ICAgCiAgICAgc3RhdGUuaml0Q29kZS0+YWRkSGFuZGxlKHJlc3VsdCk7CisgICAgc3RhdGUuY29k
ZVNlY3Rpb25OYW1lcy5hcHBlbmQoc2VjdGlvbk5hbWUpOwogICAgIAogICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1aW50OF90Kj4ocmVzdWx0LT5zdGFydCgpKTsKIH0KQEAgLTY2LDcgKzY4LDYgQEAg
c3RhdGljIHVpbnQ4X3QqIG1tQWxsb2NhdGVEYXRhU2VjdGlvbigKICAgICBjb25zdCBjaGFyKiBz
ZWN0aW9uTmFtZSwgTExWTUJvb2wgaXNSZWFkT25seSkKIHsKICAgICBVTlVTRURfUEFSQU0oc2Vj
dGlvbklEKTsKLSAgICBVTlVTRURfUEFSQU0oc2VjdGlvbk5hbWUpOwogICAgIFVOVVNFRF9QQVJB
TShpc1JlYWRPbmx5KTsKIAogICAgIFN0YXRlJiBzdGF0ZSA9ICpzdGF0aWNfY2FzdDxTdGF0ZSo+
KG9wYXF1ZVN0YXRlKTsKQEAgLTc2LDcgKzc3LDEyIEBAIHN0YXRpYyB1aW50OF90KiBtbUFsbG9j
YXRlRGF0YVNlY3Rpb24oCiAgICAgUmVmQ291bnRlZEFycmF5PExTZWN0aW9uV29yZD4gc2VjdGlv
bigKICAgICAgICAgKHNpemUgKyBzaXplb2YoTFNlY3Rpb25Xb3JkKSAtIDEpIC8gc2l6ZW9mKExT
ZWN0aW9uV29yZCkpOwogICAgIAotICAgIHN0YXRlLmppdENvZGUtPmFkZERhdGFTZWN0aW9uKHNl
Y3Rpb24pOworICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCAiX19qc19zdGFja21hcHMiKSkK
KyAgICAgICAgc3RhdGUuc3RhY2ttYXBzU2VjdGlvbiA9IHNlY3Rpb247CisgICAgZWxzZSB7Cisg
ICAgICAgIHN0YXRlLmppdENvZGUtPmFkZERhdGFTZWN0aW9uKHNlY3Rpb24pOworICAgICAgICBz
dGF0ZS5kYXRhU2VjdGlvbk5hbWVzLmFwcGVuZChzZWN0aW9uTmFtZSk7CisgICAgfQogICAgIAog
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KHNlY3Rpb24uZGF0YSgpKTsKIH0KQEAg
LTkwLDYgKzk2LDYwIEBAIHN0YXRpYyB2b2lkIG1tRGVzdHJveSh2b2lkKikKIHsKIH0KIAorc3Rh
dGljIHZvaWQgZHVtcERhdGFTZWN0aW9uKFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHNl
Y3Rpb24sIGNvbnN0IGNoYXIqIHByZWZpeCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgc2VjdGlvbi5zaXplKCk7ICsraikgeworICAgICAgICBjaGFyIGJ1ZlszMl07CisgICAgICAg
IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCVseCIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHNlY3Rpb24uZGF0YSgpICsgaikpKTsKKyAg
ICAgICAgZGF0YUxvZ0YoIiVzJTE2czogMHglMDE2bGx4XG4iLCBwcmVmaXgsIGJ1Ziwgc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihzZWN0aW9uW2pdKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCisgICAgU3RhdGUmIHN0YXRlLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSklUQ29kZSogaml0Q29kZSwgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVk
RnVuY3Rpb24sCisgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCkKK3sKKyAgICBW
TSYgdm0gPSBzdGF0ZS5ncmFwaC5tX3ZtOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JF
eGl0VGh1bmsgPQorICAgICAgICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtH
ZW5lcmF0b3IpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCA9IENvZGVMb2NhdGlvbkxh
YmVsKG9zckV4aXRUaHVuay5jb2RlKCkpOworCisgICAgRXhpdFRodW5rR2VuZXJhdG9yIGV4aXRU
aHVua0dlbmVyYXRvcihzdGF0ZSk7CisgICAgZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVua3Mo
KTsKKyAgICBpZiAoZXhpdFRodW5rR2VuZXJhdG9yLmRpZFRoaW5ncygpKSB7CisgICAgICAgIE93
blB0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtCdWZmZXIoCisg
ICAgICAgICAgICB2bSwgJmV4aXRUaHVua0dlbmVyYXRvciwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkKSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc3RhdGUub3NyRXhp
dC5zaXplKCkgPT0gc3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkpOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLm9zckV4aXQuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBzdGF0ZS5vc3JF
eGl0W2ldOworICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoaW5mby5tX3RodW5r
SnVtcCwgdGFyZ2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5mby5tX3RodW5rQWRk
cmVzcyA9IGxpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5tX3RodW5rTGFiZWwpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBleGl0Lm1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGxpbmtCdWZm
ZXItPm9mZnNldE9mKGluZm8ubV90aHVua0p1bXApOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzdGF0ZS5maW5hbGl6ZXItPmluaXRpYWxpemVFeGl0VGh1bmtzTGlua0J1ZmZlcihsaW5r
QnVmZmVyLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGNvZGVCbG9jayk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBleGl0SW5kZXggPSBqaXRD
b2RlLT5vc3JFeGl0LnNpemUoKTsgZXhpdEluZGV4LS07KSB7CisgICAgICAgIE9TUkV4aXRDb21w
aWxhdGlvbkluZm8mIGluZm8gPSBzdGF0ZS5vc3JFeGl0W2V4aXRJbmRleF07CisgICAgICAgIE9T
UkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2V4aXRJbmRleF07CisgICAgICAgIFN0YWNr
TWFwczo6UmVjb3JkJiByZWNvcmQgPSByZWNvcmRNYXAuZmluZChleGl0Lm1fc3RhY2ttYXBJRCkt
PnZhbHVlOworICAgICAgICAKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAo
CisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCgKKyAgICAgICAgICAgICAgICBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNl
dCksCisgICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzKTsKKyAgICB9Cit9CisKIHZvaWQg
Y29tcGlsZShTdGF0ZSYgc3RhdGUpCiB7CiAgICAgY2hhciogZXJyb3IgPSAwOwpAQCAtMTQzLDE1
ICsyMDMsMTIgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKICAgICBMTFZNRGlzcG9zZUV4
ZWN1dGlvbkVuZ2luZShlbmdpbmUpOwogCiAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBmb3VydGhUaWVyOiBGVEwgbWVtb3J5IGFsbG9jYXRvciBz
aG91bGQgYmUgYWJsZSB0byB0ZWxsIHVzIHdoaWNoIG9mCi0gICAgICAgIC8vIHRoZXNlIHRoaW5n
cyBpcyBhY3R1YWxseSBjb2RlIG9yIGRhdGEuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYxODkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0YXRlLmppdENvZGUtPmhhbmRsZXMoKS5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxl
cygpW2ldLmdldCgpOwogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiR2Vu
ZXJhdGVkIExMVk0gY29kZSBmb3IgIiwKICAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklU
VHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwKLSAgICAgICAg
ICAgICAgICAiICMiLCBpLCAiOlxuIik7CisgICAgICAgICAgICAgICAgIiAjIiwgaSwgIiwgIiwg
c3RhdGUuY29kZVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOwogICAgICAgICAgICAgZGlzYXNzZW1i
bGUoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+c3RhcnQo
KSksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwKICAgICAgICAgICAgICAgICAiICAgICIsIFdURjo6
ZGF0YUZpbGUoKSwgTExWTVN1YnNldCk7CkBAIC0xNjIsMTQgKzIxOSw1MiBAQCB2b2lkIGNvbXBp
bGUoU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAi
R2VuZXJhdGVkIExMVk0gZGF0YSBzZWN0aW9uIGZvciAiLAogICAgICAgICAgICAgICAgIENvZGVC
bG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQp
LAotICAgICAgICAgICAgICAgICIgIyIsIGksICI6XG4iKTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBzZWN0aW9uLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAg
Y2hhciBidWZbMzJdOwotICAgICAgICAgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1Ziks
ICIweCVseCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHNlY3Rpb24uZGF0YSgpICsgaikpKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAg
ICUxNnM6IDB4JTAxNmxseFxuIiwgYnVmLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNlY3Rpb25b
al0pKTsKKyAgICAgICAgICAgICAgICAiICMiLCBpLCAiLCAiLCBzdGF0ZS5kYXRhU2VjdGlvbk5h
bWVzW2ldLCAiOlxuIik7CisgICAgICAgICAgICBkdW1wRGF0YVNlY3Rpb24oc2VjdGlvbiwgIiAg
ICAiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoc3RhdGUuc3RhY2ttYXBzU2Vj
dGlvbi5zaXplKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7Cisg
ICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBzdGFj
a21hcHMgc2VjdGlvbiBmb3IgIiwKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlw
ZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwgIjpcbiIpOworICAg
ICAgICAgICAgZGF0YUxvZygiICAgIFJhdyBkYXRhOlxuIik7CisgICAgICAgICAgICBkdW1wRGF0
YVNlY3Rpb24oc3RhdGUuc3RhY2ttYXBzU2VjdGlvbiwgIiAgICAiKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgUmVmUHRyPERhdGFWaWV3PiBzdGFja21hcHNEYXRhID0gRGF0YVZpZXc6
OmNyZWF0ZSgKKyAgICAgICAgICAgIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUuc3RhY2ttYXBz
U2VjdGlvbi5kYXRhKCksIHN0YXRlLnN0YWNrbWFwc1NlY3Rpb24uYnl0ZVNpemUoKSkpOworICAg
ICAgICBzdGF0ZS5qaXRDb2RlLT5zdGFja21hcHMucGFyc2Uoc3RhY2ttYXBzRGF0YS5nZXQoKSk7
CisgICAgCisgICAgICAgIGlmIChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICAg
ICAgZGF0YUxvZygiICAgIFN0cnVjdHVyZWQgZGF0YTpcbiIpOworICAgICAgICAgICAgc3RhdGUu
aml0Q29kZS0+c3RhY2ttYXBzLmR1bXBNdWx0aWxpbmUoV1RGOjpkYXRhRmlsZSgpLCAiICAgICAg
ICAiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmRNYXAg
cmVjb3JkTWFwID0gc3RhdGUuaml0Q29kZS0+c3RhY2ttYXBzLmdldFJlY29yZE1hcCgpOworICAg
ICAgICBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCisgICAgICAgICAgICBzdGF0ZSwgc3Rh
dGUuZ3JhcGgubV9jb2RlQmxvY2ssIHN0YXRlLmppdENvZGUuZ2V0KCksIHN0YXRlLmdlbmVyYXRl
ZEZ1bmN0aW9uLAorICAgICAgICAgICAgcmVjb3JkTWFwKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0YXRlLmppdENvZGUtPmhhbmRsZXMoKS5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChzdGF0ZS5jb2RlU2VjdGlvbk5hbWVzW2ldICE9ICJfX3RleHQiKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBzdGF0ZS5qaXRDb2RlLT5oYW5k
bGVzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAg
ICAgICAgIkdlbmVyYXRlZCBMTFZNIGNvZGUgYWZ0ZXIgc3RhY2ttYXAtYmFzZWQgZml4LXVwIGZv
ciAiLAorICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFw
aC5tX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwKKyAgICAgICAgICAgICAgICAgICAgIiAj
IiwgaSwgIiwgIiwgc3RhdGUuY29kZVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOworICAgICAgICAg
ICAgICAgIGRpc2Fzc2VtYmxlKAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoaGFuZGxlLT5zdGFydCgpKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpLAorICAgICAgICAg
ICAgICAgICAgICAiICAgICIsIFdURjo6ZGF0YUZpbGUoKSwgTExWTVN1YnNldCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgc3RhdGUubW9kdWxlID0gMDsgLy8g
V2Ugbm8gbG9uZ2VyIG93biB0aGUgbW9kdWxlLgogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1
bmtHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEy
ICs1MSwyMSBAQCB2b2lkIEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKHVuc2lnCiAgICAg
T1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fc3RhdGUub3NyRXhpdFtpbmRleF07CiAg
ICAgCiAgICAgaW5mby5tX3RodW5rTGFiZWwgPSBsYWJlbCgpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKGluZGV4KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaWYgKE9wdGlvbnM6OmZ0bE9T
UkV4aXRVc2VzU3RhY2ttYXAoKSkKKyAgICAgICAgcHVzaChUcnVzdGVkSW1tMzIoaW5kZXgpKTsK
KyAgICBlbHNlCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGluZGV4KSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CiAgICAgaW5mby5tX3RodW5rSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKICAgICAK
ICAgICBtX2RpZFRoaW5ncyA9IHRydWU7CiB9CiAKK3ZvaWQgRXhpdFRodW5rR2VuZXJhdG9yOjpl
bWl0VGh1bmtzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdGF0ZS5vc3JF
eGl0LnNpemUoKTsgKytpKQorICAgICAgICBlbWl0VGh1bmsoaSk7Cit9CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oCShyZXZp
c2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHB1YmxpYzoKICAgICB+
RXhpdFRodW5rR2VuZXJhdG9yKCk7CiAgICAgCiAgICAgdm9pZCBlbWl0VGh1bmsodW5zaWduZWQg
aW5kZXgpOworICAgIHZvaWQgZW1pdFRodW5rcygpOwogICAgIAogICAgIGJvb2wgZGlkVGhpbmdz
KCkgY29uc3QgeyByZXR1cm4gbV9kaWRUaGluZ3M7IH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiAr
MTI2LDcgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewogICAgICAgICBjYXNl
IEV4aXRWYWx1ZUluSlNTdGFjazoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0lu
dDMyOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6CiAgICAgICAgIGNh
c2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgZGVmYXVsdDoKQEAgLTE1Miw3ICsxNTMsNDAgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQoaXNJbkpTU3RhY2tTb21laG93KCkpOwogICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKHUudmlydHVhbFJlZ2lzdGVyKTsKICAgICB9Ci0gICAgCisKKyAgICAvLyBJZiBpdCdzIGlu
IHRoZSBKU1N0YWNrIHNvbWVob3csIHRoaXMgd2lsbCB0ZWxsIHlvdSB3aGF0IGZvcm1hdCBpdCdz
IGluLCBpbiBhIG1hbm5lcgorICAgIC8vIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGV4aXRBcmd1
bWVudCgpLmZvcm1hdCgpLiBJZiBpdCdzIGEgY29uc3RhbnQgb3IgaXQncyBkZWFkLCBpdAorICAg
IC8vIHdpbGwgY2xhaW0gdG8gYmUgYSBKU1ZhbHVlLiBJZiBpdCdzIGFuIGFyZ3VtZW50IHRoZW4g
aXQgd2lsbCB0ZWxsIHlvdSB0aGUgYXJndW1lbnQncworICAgIC8vIGZvcm1hdC4KKyAgICBWYWx1
ZUZvcm1hdCB2YWx1ZUZvcm1hdCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgICAgICBjYXNlIEludmFsaWRFeGl0VmFsdWU6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEludmFsaWRWYWx1ZUZv
cm1hdDsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6CisgICAgICAg
IGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNr
OgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlRm9ybWF0SlNWYWx1ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIGV4aXRB
cmd1bWVudCgpLmZvcm1hdCgpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRXhpdFZhbHVl
SW5KU1N0YWNrQXNJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZUZvcm1hdEludDMyOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MjoKKyAg
ICAgICAgICAgIHJldHVybiBWYWx1ZUZvcm1hdEludDUyOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gVmFs
dWVGb3JtYXREb3VibGU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBJbnZhbGlkVmFsdWVGb3JtYXQ7Cisg
ICAgfQorCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRmFpbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGYWlsLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGYWlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsOCBAQCB2b2lkIGZhaWwoU3RhdGUmIHN0YXRlKQogewogICAgIHN0YXRlLmdyYXBo
Lm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKHN0YXRlLmdy
YXBoLm1fcGxhbikpOwogICAgIAotICAgIExMVk1EaXNwb3NlTW9kdWxlKHN0YXRlLm1vZHVsZSk7
CisgICAgaWYgKHN0YXRlLm1vZHVsZSkKKyAgICAgICAgTExWTURpc3Bvc2VNb2R1bGUoc3RhdGUu
bW9kdWxlKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlz
aW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVw
b3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc211
bC53aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwg
aW50NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJm
bG93MzIsICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0
VHlwZShtX2NvbnRleHQsIGludDMyLCBib29sZWFuKSwgaW50MzIsIGludDMyKSkgXAogICAgIG1h
Y3JvKHN1YldpdGhPdmVyZmxvdzY0LCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVu
Y3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBp
bnQ2NCkpIFwKKyAgICBtYWNybyh3ZWJraXRTdGFja21hcCwgImxsdm0ud2Via2l0LnN0YWNrbWFw
IiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQzMiwgaW50MzIsIFZhcmlhZGljKSkgXAogICAg
IG1hY3JvKHRyYXAsICJsbHZtLnRyYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUpKSBcCiAgICAg
bWFjcm8ob3NyRXhpdCwgIndlYmtpdF9vc3JfZXhpdCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwg
Ym9vbGVhbiwgaW50MzIsIFZhcmlhZGljKSkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNp
bmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorI2luY2x1
ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlIDx3dGYv
TExWTUhlYWRlcnMuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CkBAIC02Nyw2
ICs2OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAg
IFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCA4PiBvc3JFeGl0OworICAgIFN0YWNrTWFwcyBzdGFj
a21hcHM7CiAgICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZDb3VudGVkQXJyYXk8TFNlY3Rp
b25Xb3JkPj4gbV9kYXRhU2VjdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDYgKzUyLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKIHN0YXRpYyBpbnQgY29t
cGlsZUNvdW50ZXI7CiAKK3N0YXRpYyBib29sIGdlbmVyYXRlRXhpdFRodW5rcygpCit7CisgICAg
cmV0dXJuICFPcHRpb25zOjp1c2VMTFZNT1NSRXhpdEludHJpbnNpYygpICYmICFPcHRpb25zOjpm
dGxPU1JFeGl0VXNlc1N0YWNrbWFwKCk7Cit9CisKIC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiB0
eXBlQ2hlY2soKSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQgb24gTExWTSwgYnkgY3JlYXRpbmcK
IC8vIHNpZ25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCiAjZGVmaW5lIEZUTF9UWVBFX0NIRUNL
KGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikg
ZG8geyBcCkBAIC03NSw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2V4aXRUaHVua0dl
bmVyYXRvcihzdGF0ZSkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAs
IG1faW50ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCisgICAgICAgICwgbV9zdGFja21h
cElEcygwKQogICAgIHsKICAgICB9CiAgICAgCkBAIC0zMjU2LDggKzMyNjIsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25kaXRpb24s
IGZhaWxDYXNlLCBjb250aW51YXRpb24pOwogCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyht
X3Byb2xvZ3VlKTsKLSAgICAgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MgPSBidWlsZEFsbG9j
YShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmludFB0cik7CisgICAgICAgICAgICBpZiAoZ2VuZXJh
dGVFeGl0VGh1bmtzKCkpIHsKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xv
Z3VlKTsKKyAgICAgICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzVmFsdWUgPSBidWlsZEFs
bG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmludFB0cik7CisgICAgICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICAgICAgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29u
dGludWF0aW9uKTsKICAgICAgICAgfQpAQCAtMzI2NSw3ICszMjczLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaWYgKE9wdGlvbnM6OmZ0bE9TUkV4aXRPbWl0c01hcnNoYWxsaW5nKCkpIHsKICAgICAg
ICAgICAgIG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAgICAgbV9vdXQuaW50VG9QdHIoCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmdldChpbmZvLm1fdGh1bmtBZGRyZXNzKSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuZ2V0KGluZm8ubV90aHVua0FkZHJlc3NWYWx1ZSksCiAgICAgICAg
ICAgICAgICAgICAgIHBvaW50ZXJUeXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlwZSkpKSk7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZW1pdE9TUkV4aXRDYWxsKGZhaWxDb25kaXRp
b24sIGluZGV4LCBleGl0LCBpbmZvLCBsb3dWYWx1ZSwgZGlyZWN0aW9uLCByZWNvdmVyeSk7CkBA
IC0zMjc1LDcgKzMyODMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgCi0gICAgICAg
ICAgICBtX2V4aXRUaHVua0dlbmVyYXRvci5lbWl0VGh1bmsoaW5kZXgpOworICAgICAgICAgICAg
aWYgKGdlbmVyYXRlRXhpdFRodW5rcygpKQorICAgICAgICAgICAgICAgIG1fZXhpdFRodW5rR2Vu
ZXJhdG9yLmVtaXRUaHVuayhpbmRleCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0zMzQx
LDkgKzMzNTAsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmZ0bE9TUkV4aXRVc2VzU3RhY2ttYXAoKSkg
eworICAgICAgICAgICAgZXhpdC5tX3N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAg
ICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJs
ZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOworICAgICAgICAgICAgYXJndW1lbnRzLmlu
c2VydCgwLCBtX291dC5jb25zdEludDMyKGV4aXQubV9zdGFja21hcElEKSk7CisgICAgICAgIAor
ICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC53ZWJraXRTdGFja21hcEludHJpbnNpYygpLCBh
cmd1bWVudHMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQuaW50VG9QdHIoCi0gICAgICAgICAg
ICAgICAgbV9vdXQuZ2V0KGluZm8ubV90aHVua0FkZHJlc3MpLAorICAgICAgICAgICAgICAgIG1f
b3V0LmdldChpbmZvLm1fdGh1bmtBZGRyZXNzVmFsdWUpLAogICAgICAgICAgICAgICAgIHBvaW50
ZXJUeXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlwZSwgYXJndW1lbnRUeXBlcykpKSwKICAg
ICAgICAgICAgIGFyZ3VtZW50cyk7CiAgICAgfQpAQCAtMzQ5OSw3ICszNTE3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBtX291dC5zZXQoCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50UHRyKAogICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci0+bG9jYXRp
b25PZihpbmZvLm1fdGh1bmtMYWJlbCkuZXhlY3V0YWJsZUFkZHJlc3MoKSksCi0gICAgICAgICAg
ICAgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICBpbmZv
Lm1fdGh1bmtBZGRyZXNzVmFsdWUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZXhp
dC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLT5vZmZzZXRPZihpbmZvLm1fdGh1
bmtKdW1wKTsKICAgICAgICAgICAgIH0KQEAgLTM2OTYsNiArMzcxNCw4IEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9ub2RlSW5kZXg7CiAgICAgTm9kZSogbV9ub2RlOwogICAgIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIAorICAgIHVpbnQzMl90IG1fc3RhY2ttYXBJ
RHM7CiB9OwogCiB2b2lkIGxvd2VyREZHVG9MTFZNKFN0YXRlJiBzdGF0ZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY1
LDYgKzE2NSw4IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAg
ICAKICAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVzOwogICAgIAorICAgIHVpbnQzMl90
IG1fc3RhY2ttYXBJRDsKKyAgICAKICAgICBDb2RlTG9jYXRpb25KdW1wIGNvZGVMb2NhdGlvbkZv
clJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0OwogICAgIAogICAgIHZvaWQg
Y29udmVydFRvRm9yd2FyZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDE0IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKIAogc3RydWN0IE9TUkV4aXRDb21waWxhdGlvbkluZm8gewogICAgIE9TUkV4aXRDb21w
aWxhdGlvbkluZm8oKQotICAgICAgICA6IG1fdGh1bmtBZGRyZXNzKDApCisgICAgICAgIDogbV90
aHVua0FkZHJlc3NWYWx1ZSgwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fdGh1bmtMYWJlbDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3RodW5rSnVtcDsKLSAgICBMVmFsdWUgbV90aHVua0FkZHJlc3M7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWwgbV90aHVua0FkZHJlc3M7CisgICAgTFZhbHVlIG1fdGh1bmtBZGRyZXNzVmFsdWU7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTcxMTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRG
b3JPcGVyYW5kLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTE9TUkV4
aXQuaCIKKyNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAKQEAgLTQxLDcgKzQyLDEzNSBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKLXN0
YXRpYyB2b2lkIGNvbXBpbGVTdHViKAorLy8gVGhpcyBpbXBsZW1lbnRzIHR3byBmbGF2b3JzIG9m
IE9TUiBleGl0OiBvbmUgdGhhdCBpbnZvbHZlcyBoYXZpbmcgTExWTSBpbnRyaW5zaWNzIHRvIGhl
bHAKKy8vIE9TUiBleGl0LCBhbmQgb25lIHRoYXQgZG9lc24ndC4gVGhlIG9uZSB0aGF0IGRvZXNu
J3Qgd2lsbCBnZXQga2lsbGVkIG9mZiwgc28gd2UgZG9uJ3QgYXR0ZW1wdAorLy8gdG8gc2hhcmUg
Y29kZSBiZXR3ZWVuIHRoZSB0d28uCisKK3N0YXRpYyB2b2lkIGNvbXBpbGVTdHViV2l0aE9TUkV4
aXRTdGFja21hcCgKKyAgICB1bnNpZ25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4
aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgU3RhY2tNYXBz
OjpSZWNvcmQqIHJlY29yZDsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBqaXRDb2RlLT5z
dGFja21hcHMucmVjb3Jkcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgcmVjb3JkID0gJmppdENv
ZGUtPnN0YWNrbWFwcy5yZWNvcmRzW2ldOworICAgICAgICBpZiAocmVjb3JkLT5wYXRjaHBvaW50
SUQgPT0gZXhpdC5tX3N0YWNrbWFwSUQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlQocmVjb3JkLT5wYXRjaHBvaW50SUQgPT0gZXhpdC5tX3N0YWNr
bWFwSUQpOworICAgIAorICAgIENDYWxsSGVscGVycyBqaXQodm0sIGNvZGVCbG9jayk7CisgICAg
CisgICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycyBhbmQg
dG8gYnVpbGQgdXAgdGhlIEpTU3RhY2suCisgICAgLy8gVXNlIGEgc2NyYXRjaCBidWZmZXIgdG8g
dHJhbnNmZXIgYWxsIHZhbHVlcy4KKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
dm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBleGl0Lm1f
dmFsdWVzLnNpemUoKSArIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOworICAg
IEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoID0gc2NyYXRjaEJ1ZmZlciA/IHN0YXRpY19jYXN0PEVu
Y29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKSA6IDA7CisgICAgY2hh
ciogcmVnaXN0ZXJTY3JhdGNoID0gYml0d2lzZV9jYXN0PGNoYXIqPihzY3JhdGNoICsgZXhpdC5t
X3ZhbHVlcy5zaXplKCkpOworICAgIAorICAgIHNhdmVBbGxSZWdpc3RlcnMoaml0LCByZWdpc3Rl
clNjcmF0Y2gpOworICAgIAorICAgIC8vIEJyaW5nIHRoZSBzdGFjayBiYWNrIGludG8gYSBzYW5l
IGZvcm0uCisgICAgaml0LnBvcChHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgLy8gR2V0IHRo
ZSBjYWxsIGZyYW1lIGFuZCB0YWcgdGhpbmdpZXMuCisgICAgcmVjb3JkLT5sb2NhdGlvbnNbMF0u
cmVzdG9yZUludG8oaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBEbyBzb21lIHZhbHVlIHBy
b2ZpbGluZy4KKyAgICBpZiAoZXhpdC5tX3Byb2ZpbGVWYWx1ZUZvcm1hdCAhPSBJbnZhbGlkVmFs
dWVGb3JtYXQpIHsKKyAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbMV0ucmVzdG9yZUludG8oaml0
LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAorICAgICAgICAgICAgZXhpdC5tX3Byb2Zp
bGVWYWx1ZUZvcm1hdCwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBCYWRDYWNo
ZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisgICAg
ICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBqaXQuYmFzZWxpbmVDb2Rl
QmxvY2tGb3IoY29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgpKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBh
cnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOworICAgICAgICAgICAg
ICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgU3Ry
dWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIs
IE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZB
cnJheU1vZGVzKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKCEhZXhpdC5tX3ZhbHVlUHJvZmlsZSkKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQ
UkluZm86OnJlZ1QwLCBleGl0Lm1fdmFsdWVQcm9maWxlLmdldFNwZWNGYWlsQnVja2V0KDApKTsK
KyAgICB9CisKKyAgICAvLyBTYXZlIGFsbCBzdGF0ZSBmcm9tIHdoZXJldmVyIHRoZSBleGl0IGRh
dGEgdGVsbHMgdXMgaXQgd2FzLCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbgorICAgIC8v
IHRoZSBzY3JhdGNoIGJ1ZmZlci4gVGhpcyBkb2Vzbid0IHJlYm94IGFueSB2YWx1ZXMgeWV0Lgor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5k
ZXgtLTspIHsKKyAgICAgICAgRXhpdFZhbHVlIHZhbHVlID0gZXhpdC5tX3ZhbHVlc1tpbmRleF07
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHZhbHVlLmtpbmQoKSkgeworICAgICAgICBjYXNl
IEV4aXRWYWx1ZURlYWQ6CisgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRXhpdFZh
bHVlQ29uc3RhbnQ6CisgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZS5jb25zdGFudCgpKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRXhpdFZh
bHVlQXJndW1lbnQ6CisgICAgICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5leGl0QXJn
dW1lbnQoKS5hcmd1bWVudCgpXS5yZXN0b3JlSW50bygKKyAgICAgICAgICAgICAgICBqaXQsIGpp
dENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNT
dGFjazoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgorICAgICAgICBj
YXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5K
U1N0YWNrQXNEb3VibGU6CisgICAgICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBz
Y3JhdGNoICsgaW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBOb3cgZ2V0IHN0YXRlIG91dCBv
ZiB0aGUgc2NyYXRjaCBidWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sgaW50byB0aGUgc3RhY2suIFRo
aXMgcGFydCBkb2VzCisgICAgLy8gYWxsIHJlYm94aW5nLgorICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAgICAgaW50IG9wZXJh
bmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIEV4aXRW
YWx1ZSB2YWx1ZSA9IGV4aXQubV92YWx1ZXNbaW5kZXhdOworICAgICAgICAKKyAgICAgICAgaml0
LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgcmVib3hB
Y2NvcmRpbmdUb0Zvcm1hdCgKKyAgICAgICAgICAgIHZhbHVlLnZhbHVlRm9ybWF0KCksIGppdCwg
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAg
IGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
b3BlcmFuZCkpOworICAgIH0KKyAgICAKKyAgICBoYW5kbGVFeGl0Q291bnRzKGppdCwgZXhpdCk7
CisgICAgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhqaXQsIGV4aXQpOworICAgIAorICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQucG9wKE1hY3JvQXNzZW1ibGVyOjpmcmFt
ZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnBvcChHUFJJbmZvOjpub25BcmdHUFIwKTsgLy8g
aWdub3JlIHRoZSByZXN1bHQuCisgICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgaml0LmxvYWQ2NCgKKyAgICAgICAgICAgIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcihleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRS
ZXN1bHRSZWdpc3Rlcik7CisgICAgfQorICAgIAorICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChq
aXQsIGV4aXQpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBj
b2RlQmxvY2spOworICAgIGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKKyAgICAgICAg
c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCksCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAo
IkZUTCBPU1IgZXhpdCAjJXUgKGJjIyV1LCAlcykgZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVz
IiwKKyAgICAgICAgICAgIGV4aXRJRCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwK
KyAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNv
ZGVCbG9jaykuZGF0YSgpLAorICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxE
dW1wQ29udGV4dD4oZXhpdC5tX3ZhbHVlcykpLmRhdGEoKSkpOworfQorCitzdGF0aWMgdm9pZCBj
b21waWxlU3R1YldpdGhvdXRPU1JFeGl0U3RhY2ttYXAoCiAgICAgdW5zaWduZWQgZXhpdElELCBP
U1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIENDYWxs
SGVscGVycyBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0yMTksMTEgKzM0OCwxNSBAQCBleHRlcm4g
IkMiIHZvaWQqIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNTCiAgICAgLy8gcmVhbGx5IGJlIHByb2Zp
dGFibGUuCiAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLT5oZWFwKTsKIAotICAgIE9T
UkV4aXQmIGV4aXQgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsKCktPm9zckV4aXRbZXhpdElE
XTsKKyAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bCgpOwor
ICAgIE9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2V4aXRJRF07CiAgICAgCiAgICAg
cHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKICAg
ICAKLSAgICBjb21waWxlU3R1YihleGl0SUQsIGV4aXQsIHZtLCBjb2RlQmxvY2spOworICAgIGlm
IChPcHRpb25zOjpmdGxPU1JFeGl0VXNlc1N0YWNrbWFwKCkpCisgICAgICAgIGNvbXBpbGVTdHVi
V2l0aE9TUkV4aXRTdGFja21hcChleGl0SUQsIGppdENvZGUsIGV4aXQsIHZtLCBjb2RlQmxvY2sp
OworICAgIGVsc2UKKyAgICAgICAgY29tcGlsZVN0dWJXaXRob3V0T1NSRXhpdFN0YWNrbWFwKGV4
aXRJRCwgZXhpdCwgdm0sIGNvZGVCbG9jayk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2F2ZVJlc3RvcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFNhdmVS
ZXN0b3JlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCisjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzdGF0aWMgc2l6ZV90IGJ5dGVzRm9yR1BS
cygpCit7CisgICAgcmV0dXJuIChNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkgLSBNYWNy
b0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpICsgMSkgKiBzaXplb2YoaW50NjRfdCk7Cit9CisK
K3NpemVfdCByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpCit7CisgICAgcmV0dXJu
IGJ5dGVzRm9yR1BScygpICsgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyAqIHNp
emVvZihkb3VibGUpOworfQorCitzaXplX3Qgb2Zmc2V0T2ZHUFIoR1BSUmVnIHJlZykKK3sKKyAg
ICByZXR1cm4gKHJlZyAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpICogc2l6ZW9m
KGludDY0X3QpOworfQorCit2b2lkIHNhdmVBbGxSZWdpc3RlcnMoTWFjcm9Bc3NlbWJsZXImIGpp
dCwgY2hhciogc2NyYXRjaE1lbW9yeSkKK3sKKyAgICAvLyBHZXQgdGhlIGZpcnN0IHJlZ2lzdGVy
IG91dCBvZiB0aGUgd2F5LCBzbyB0aGF0IHdlIGNhbiB1c2UgaXQgYXMgYSBwb2ludGVyLgorICAg
IGppdC5wb2tlNjQoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVhbFJlZ2lzdGVyKCksIDApOworICAg
IGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hNZW1vcnkpLCBN
YWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWFsUmVnaXN0ZXIoKSk7CisgICAgCisgICAgLy8gR2V0IGFs
bCBvZiB0aGUgb3RoZXIgR1BScyBvdXQgb2YgdGhlIHdheS4KKyAgICBmb3IgKE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0ZXIo
KTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0gTWFjcm9Bc3Nl
bWJsZXI6Om5leHRSZWdpc3RlcihyZWcpKQorICAgICAgICBqaXQuc3RvcmU2NChyZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpLCBv
ZmZzZXRPZkdQUihyZWcpKSk7CisgICAgCisgICAgLy8gUmVzdG9yZSB0aGUgZmlyc3QgcmVnaXN0
ZXIgaW50byB0aGUgc2Vjb25kIG9uZSBhbmQgc2F2ZSBpdC4KKyAgICBqaXQucGVlazY0KE1hY3Jv
QXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0ZXIoKSwgMCk7CisgICAgaml0LnN0b3JlNjQoTWFj
cm9Bc3NlbWJsZXI6OnNlY29uZFJlYWxSZWdpc3RlcigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWFsUmVnaXN0ZXIoKSwgb2Zmc2V0T2ZHUFIoTWFjcm9B
c3NlbWJsZXI6OmZpcnN0UmVhbFJlZ2lzdGVyKCkpKSk7CisgICAgCisgICAgLy8gU2F2ZSBhbGwg
RlAgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWN0dWFsbHkg
YmUgc2F2aW5nIGFsbCBGUCByZWdpc3RlcnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMjUxOAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBG
UFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaE1lbW9yeSArIGJ5dGVzRm9y
R1BScygpICsgc2l6ZW9mKGRvdWJsZSkgKiBpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBq
aXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgfQorfQorCit2b2lkIHJlc3RvcmVBbGxSZWdpc3RlcnMoTWFjcm9Bc3NlbWJs
ZXImIGppdCwgY2hhciogc2NyYXRjaE1lbW9yeSkKK3sKKyAgICAvLyBSZXN0b3JlIGFsbCBGUCBh
cmd1bWVudCByZWdpc3RlcnMuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhY3R1YWxseSBiZSBy
ZXN0b3JpbmcgYWxsIEZQIHJlZ2lzdGVycy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNTE4CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQ
UkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoTWVtb3J5ICsgYnl0ZXNGb3JH
UFJzKCkgKyBzaXplb2YoZG91YmxlKSAqIGkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGpp
dC5sb2FkRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIo
aSkpOworICAgIH0KKyAgICAKKyAgICAvLyBOb3csIHJlc3RvcmUgYWxsIEdQUnMuCisgICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaE1lbW9yeSksIE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpKTsKKyAgICAKKyAgICBmb3IgKE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0
ZXIoKTsgcmVnIDw9IE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKTsgcmVnID0gTWFjcm9B
c3NlbWJsZXI6Om5leHRSZWdpc3RlcihyZWcpKQorICAgICAgICBqaXQubG9hZDY0KE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpLCBvZmZz
ZXRPZkdQUihyZWcpKSwgcmVnKTsKKyAgICAKKyAgICBqaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpLCBvZmZzZXRPZkdQ
UihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWFsUmVnaXN0ZXIoKSkpLCBNYWNyb0Fzc2VtYmxlcjo6
Zmlyc3RSZWFsUmVnaXN0ZXIoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNhdmVSZXN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTYXZlUmVzdG9yZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTYXZlUmVzdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExTYXZlUmVzdG9yZV9oCisjZGVmaW5lIEZUTFNhdmVSZXN0b3JlX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJHUFJJbmZv
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYWNyb0Fzc2VtYmxlcjsKKworbmFtZXNw
YWNlIEZUTCB7CisKK3NpemVfdCByZXF1aXJlZFNjcmF0Y2hNZW1vcnlTaXplSW5CeXRlcygpOwor
CitzaXplX3Qgb2Zmc2V0T2ZHUFIoR1BSUmVnKTsKKworLy8gQXNzdW1lcyB0aGF0IHRvcC1vZi1z
dGFjayBjYW4gYmUgdXNlZCBhcyBhIHBvaW50ZXItc2l6ZWQgc2NyYXRjaHBhZC4gU2F2ZXMgYWxs
IG9mCisvLyB0aGUgcmVnaXN0ZXJzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyIHN1Y2ggdGhhdCBS
ZWdpc3RlcklEICogc2l6ZW9mKGludDY0X3QpIGlzIHRoZQorLy8gb2Zmc2V0IG9mIGV2ZXJ5IHJl
Z2lzdGVyLgordm9pZCBzYXZlQWxsUmVnaXN0ZXJzKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNoYXIq
IHNjcmF0Y2hNZW1vcnkpOworCit2b2lkIHJlc3RvcmVBbGxSZWdpc3RlcnMoTWFjcm9Bc3NlbWJs
ZXImIGppdCwgY2hhciogc2NyYXRjaE1lbW9yeSk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMU2F2ZVJlc3Rv
cmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGVExTdGFja01hcHMuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRM
U2F2ZVJlc3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCByZWFkT2JqZWN0
KERhdGFWaWV3KiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAgIFQgcmVzdWx0OworICAg
IHJlc3VsdC5wYXJzZSh2aWV3LCBvZmZzZXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Zv
aWQgU3RhY2tNYXBzOjpDb25zdGFudDo6cGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBv
ZmZzZXQpCit7CisgICAgaW50ZWdlciA9IHZpZXctPnJlYWQ8aW50NjRfdD4ob2Zmc2V0LCB0cnVl
KTsKK30KKwordm9pZCBTdGFja01hcHM6OkNvbnN0YW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50ZigiMHglMDE2bGx4IiwgaW50ZWdlcik7Cit9CisKK3Zv
aWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6cGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBv
ZmZzZXQpCit7CisgICAgdWludDE2X3QgdGFnZ2VkUmVnID0gdmlldy0+cmVhZDx1aW50MTZfdD4o
b2Zmc2V0LCB0cnVlKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50MTZfdD4odGFnZ2VkUmVnKSA8
IDApIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJEZXRlY3RlZCBhIG5lZ2F0aXZl
IHRhZ2dlZCByZWdpc3RlciAiLCBzdGF0aWNfY2FzdDxpbnQxNl90Pih0YWdnZWRSZWcpLAorICAg
ICAgICAgICAgIiBhdCBvZmZzZXQgIiwgb2Zmc2V0LCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgZHdhcmZSZWdOdW0gPSB0YWdnZWRSZWcg
JiAoKDEgPDwgMTIpIC0gMSk7CisgICAga2luZCA9IHN0YXRpY19jYXN0PEtpbmQ+KHRhZ2dlZFJl
ZyA+PiAxMik7CisKKyAgICB0aGlzLT5vZmZzZXQgPSB2aWV3LT5yZWFkPGludDE2X3Q+KG9mZnNl
dCwgdHJ1ZSk7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIsIGtpbmQsICIsIHJlZyIsIGR3YXJm
UmVnTnVtLCAiLCAiLCBvZmZzZXQsICIpIik7Cit9CisKK2Jvb2wgU3RhY2tNYXBzOjpMb2NhdGlv
bjo6aW52b2x2ZXNHUFIoKSBjb25zdAoreworICAgIHJldHVybiBpc0dQUigpIHx8IGtpbmQgPT0g
SW5kaXJlY3Q7Cit9CisKKyNpZiBDUFUoWDg2XzY0KSAvLyBDUFUgY2FzZXMgZm9yIFN0YWNrTWFw
czo6TG9jYXRpb24KKy8vIFRoaXMgZGVjb2RlcyBEd2FyZiBmbGF2b3VyIDAgZm9yIHg4Ni02NC4K
K2Jvb2wgU3RhY2tNYXBzOjpMb2NhdGlvbjo6aXNHUFIoKSBjb25zdAoreworICAgIHJldHVybiBr
aW5kID09IFJlZ2lzdGVyICYmIGR3YXJmUmVnTnVtIDwgMTY7Cit9CisKK0dQUlJlZyBTdGFja01h
cHM6OkxvY2F0aW9uOjpncHIoKSBjb25zdAoreworICAgIC8vIFN0dXBpZGx5LCBEd2FyZiBkb2Vz
bid0IG51bWJlciB0aGUgcmVnaXN0ZXJzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgYXJjaGl0ZWN0
dXJlOworICAgIC8vIGZvciBleGFtcGxlLCB0aGUgYXJjaGl0ZWN0dXJlIGVuY29kZXMgQ1ggYXMg
MSBhbmQgRFggYXMgMiB3aGlsZSBEd2FyZiBkb2VzIHRoZQorICAgIC8vIG9wcG9zaXRlLiBIZW5j
ZSB3ZSBuZWVkIHRoZSBzd2l0Y2guCisgICAgCisgICAgc3dpdGNoIChkd2FyZlJlZ051bSkgewor
ICAgIGNhc2UgMDoKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWF4OworICAgIGNhc2Ug
MToKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWR4OworICAgIGNhc2UgMjoKKyAgICAg
ICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWN4OworICAgIGNhc2UgMzoKKyAgICAgICAgcmV0dXJu
IFg4NlJlZ2lzdGVyczo6ZWJ4OworICAgIGNhc2UgNDoKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lz
dGVyczo6ZXNpOworICAgIGNhc2UgNToKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWRp
OworICAgIGNhc2UgNjoKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWJwOworICAgIGNh
c2UgNzoKKyAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZXNwOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGR3YXJmUmVnTnVtIDwgMTYpOworICAgICAgICAvLyBSZWdp
c3RlcnMgcjguLnIxNSBhcmUgbnVtYmVyZWQgc2Vuc2libHkuCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHUFJSZWc+KGR3YXJmUmVnTnVtKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RhY2tNYXBz
OjpMb2NhdGlvbjo6cmVzdG9yZUludG8oCisgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgY29uc3Qg
U3RhY2tNYXBzJiBzdGFja21hcHMsIGNoYXIqIHNhdmVkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0
KQoreworICAgIGlmIChpc0dQUigpKSB7CisgICAgICAgIGppdC5sb2FkNjQoc2F2ZWRSZWdpc3Rl
cnMgKyBvZmZzZXRPZkdQUihncHIoKSksIHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBvdGhlciByZWdpc3RlcnMuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI1MTgKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIEluZGlyZWN0OgorICAgICAgICBqaXQubG9hZDY0KHNhdmVkUmVnaXN0ZXJz
ICsgb2Zmc2V0T2ZHUFIoZ3ByKCkpLCByZXN1bHQpOworICAgICAgICBqaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdCwgb2Zmc2V0KSwgcmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG9mZnNldCksIHJlc3VsdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBDb25zdGFudEluZGV4OgorICAgICAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KHN0YWNrbWFwcy5jb25zdGFudHNbb2Zmc2V0XS5p
bnRlZ2VyKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFVu
cHJvY2Vzc2VkOgorICAgICAgICAvLyBTaG91bGQgbmV2ZXIgc2VlIHRoaXMgLSBpdCdzIGFuIGVu
dW1lcmF0aW9uIGVudHJ5IG9uIExMVk0ncyBzaWRlIHRoYXQgbWVhbnMgdGhhdAorICAgICAgICAv
LyBpdCBoYXNuJ3QgcHJvY2Vzc2VkIHRoaXMgbG9jYXRpb24uCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbHNlIC8vIENQVSBjYXNlcyBmb3IgU3Rh
Y2tNYXBzOjpMb2NhdGlvbgorI2Vycm9yICJDUFUgYXJjaGl0ZWN0dXJlIG5vdCBzdXBwb3J0ZWQu
IgorI2VuZGlmIC8vIENQVSBjYXNlcyBmb3IgU3RhY2tNYXBzOjpMb2NhdGlvbgorCitib29sIFN0
YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCkK
K3sKKyAgICBwYXRjaHBvaW50SUQgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUp
OworICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90PihwYXRjaHBvaW50SUQpIDwgMCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGluc3RydWN0aW9uT2Zmc2V0ID0gdmlldy0+cmVh
ZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICBmbGFncyA9IHZpZXctPnJlYWQ8dWludDE2
X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gdmlldy0+cmVh
ZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICB3aGlsZSAobGVuZ3RoLS0pCisgICAgICAg
IGxvY2F0aW9ucy5hcHBlbmQocmVhZE9iamVjdDxMb2NhdGlvbj4odmlldywgb2Zmc2V0KSk7Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpSZWNvcmQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICIoIyIs
IHBhdGNocG9pbnRJRCwgIiwgb2Zmc2V0ID0gIiwgaW5zdHJ1Y3Rpb25PZmZzZXQsICIsIGZsYWdz
ID0gIiwgZmxhZ3MsCisgICAgICAgICIsIFsiLCBsaXN0RHVtcChsb2NhdGlvbnMpLCAiXSkiKTsK
K30KKworYm9vbCBTdGFja01hcHM6OnBhcnNlKERhdGFWaWV3KiB2aWV3KQoreworICAgIHVuc2ln
bmVkIG9mZnNldCA9IDA7CisgICAgCisgICAgdWludDMyX3QgbnVtQ29uc3RhbnRzID0gdmlldy0+
cmVhZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICB3aGlsZSAobnVtQ29uc3RhbnRzLS0p
CisgICAgICAgIGNvbnN0YW50cy5hcHBlbmQocmVhZE9iamVjdDxDb25zdGFudD4odmlldywgb2Zm
c2V0KSk7CisgICAgCisgICAgdWludDMyX3QgbnVtUmVjb3JkcyA9IHZpZXctPnJlYWQ8dWludDMy
X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgd2hpbGUgKG51bVJlY29yZHMtLSkgeworICAgICAgICBS
ZWNvcmQgcmVjb3JkOworICAgICAgICBpZiAoIXJlY29yZC5wYXJzZSh2aWV3LCBvZmZzZXQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZWNvcmRzLmFwcGVuZChyZWNvcmQp
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdGFja01hcHM6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkNvbnN0YW50czpb
IiwgbGlzdER1bXAoY29uc3RhbnRzKSwgIl0sIFJlY29yZHM6WyIsIGxpc3REdW1wKHJlY29yZHMp
LCAiXSIpOworfQorCit2b2lkIFN0YWNrTWFwczo6ZHVtcE11bHRpbGluZShQcmludFN0cmVhbSYg
b3V0LCBjb25zdCBjaGFyKiBwcmVmaXgpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KHByZWZpeCwg
IkNvbnN0YW50czpcbiIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb25zdGFudHMu
c2l6ZSgpOyArK2kpCisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgICAgIiwgY29uc3RhbnRz
W2ldLCAiXG4iKTsKKyAgICBvdXQucHJpbnQocHJlZml4LCAiUmVjb3JkczpcbiIpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWNvcmRzLnNpemUoKTsgKytpKQorICAgICAgICBvdXQu
cHJpbnQocHJlZml4LCAiICAgICIsIHJlY29yZHNbaV0sICJcbiIpOworfQorCitTdGFja01hcHM6
OlJlY29yZE1hcCBTdGFja01hcHM6OmdldFJlY29yZE1hcCgpIGNvbnN0Cit7CisgICAgUmVjb3Jk
TWFwIHJlc3VsdDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykK
KyAgICAgICAgcmVzdWx0LmFkZChyZWNvcmRzW2ldLnBhdGNocG9pbnRJRCwgcmVjb3Jkc1tpXSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6RlRMOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhY2tNYXBzOjpMb2NhdGlvbjo6S2luZCBraW5k
KQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6
VW5wcm9jZXNzZWQ6CisgICAgICAgIG91dC5wcmludCgiVW5wcm9jZXNzZWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6UmVnaXN0ZXI6CisgICAgICAg
IG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tN
YXBzOjpMb2NhdGlvbjo6SW5kaXJlY3Q6CisgICAgICAgIG91dC5wcmludCgiSW5kaXJlY3QiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6Q29uc3RhbnQ6
CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6Q29uc3RhbnRJbmRleDoKKyAgICAgICAgb3V0LnByaW50
KCJDb25zdGFudEluZGV4Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGF0YUxvZygi
VW5yZWNvZ25pemVkIGtpbmQ6ICIsIHN0YXRpY19jYXN0PGludD4oa2luZCksICJcbiIpOworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhY2tNYXBzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExT
dGFja01hcHNfaAorI2RlZmluZSBGVExTdGFja01hcHNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRhdGFWaWV3LmgiCisj
aW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXI7
CisKK25hbWVzcGFjZSBGVEwgeworCitzdHJ1Y3QgU3RhY2tNYXBzIHsKKyAgICB1bmlvbiBDb25z
dGFudCB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlIHZhbHVlOworICAgICAgICBpbnQ2NF90IGlu
dGVnZXI7CisgICAgICAgIAorICAgICAgICB2b2lkIHBhcnNlKERhdGFWaWV3KiB2aWV3LCB1bnNp
Z25lZCYgb2Zmc2V0KTsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
OworICAgIH07CisgICAgCisgICAgc3RydWN0IExvY2F0aW9uIHsKKyAgICAgICAgZW51bSBLaW5k
IHsKKyAgICAgICAgICAgIFVucHJvY2Vzc2VkLAorICAgICAgICAgICAgUmVnaXN0ZXIsCisgICAg
ICAgICAgICBJbmRpcmVjdCwKKyAgICAgICAgICAgIENvbnN0YW50LAorICAgICAgICAgICAgQ29u
c3RhbnRJbmRleAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgdWludDE2X3QgZHdhcmZS
ZWdOdW07IC8vIFJlcHJlc2VudGVkIGFzIGEgMTItYml0IGludCBpbiB0aGUgc2VjdGlvbi4KKyAg
ICAgICAgS2luZCBraW5kOworICAgICAgICBpbnQxNl90IG9mZnNldDsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpOworICAgICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBi
b29sIGlzR1BSKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaW52b2x2ZXNHUFIoKSBjb25zdDsKKyAg
ICAgICAgR1BSUmVnIGdwcigpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgLy8gQXNzdW1pbmcg
dGhhdCBhbGwgcmVnaXN0ZXJzIGFyZSBzYXZlZCB0byB0aGUgc2F2ZWRSZWdpc3RlcnMgYnVmZmVy
IGFjY29yZGluZworICAgICAgICAvLyB0byBGVExTYXZlUmVzdG9yZSBjb252ZW50aW9uLCB0aGlz
IGxvYWRzIHRoZSB2YWx1ZSBpbnRvIHRoZSBnaXZlbiByZWdpc3Rlci4KKyAgICAgICAgLy8gVGhl
IGNvZGUgdGhhdCB0aGlzIGdlbmVyYXRlcyBpc24ndCBleGFjdGx5IHN1cGVyIGZhc3QuCisgICAg
ICAgIHZvaWQgcmVzdG9yZUludG8oCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlciYsIGNvbnN0
IFN0YWNrTWFwcyYgc3RhY2ttYXBzLCBjaGFyKiBzYXZlZFJlZ2lzdGVycywKKyAgICAgICAgICAg
IEdQUlJlZyByZXN1bHQpOworICAgIH07CisgICAgCisgICAgc3RydWN0IFJlY29yZCB7CisgICAg
ICAgIHVpbnQzMl90IHBhdGNocG9pbnRJRDsKKyAgICAgICAgdWludDMyX3QgaW5zdHJ1Y3Rpb25P
ZmZzZXQ7CisgICAgICAgIHVpbnQxNl90IGZsYWdzOworICAgICAgICAKKyAgICAgICAgVmVjdG9y
PExvY2F0aW9uPiBsb2NhdGlvbnM7CisgICAgICAgIAorICAgICAgICBib29sIHBhcnNlKERhdGFW
aWV3KiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KTsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIH07CisgICAgCisgICAgVmVjdG9yPENvbnN0YW50PiBjb25z
dGFudHM7CisgICAgVmVjdG9yPFJlY29yZD4gcmVjb3JkczsKKyAgICAKKyAgICBib29sIHBhcnNl
KERhdGFWaWV3KiB2aWV3KTsgLy8gUmV0dXJucyB0cnVlIG9uIHBhcnNlIHN1Y2Nlc3MsIGZhbHNl
IG9uIGZhaWx1cmUuIEZhaWx1cmUgbWVhbnMgdGhhdCBMTFZNIGlzIHNpZ25hbGluZyBjb21waWxl
IGZhaWx1cmUgdG8gdXMuCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
ICAgIHZvaWQgZHVtcE11bHRpbGluZShQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVm
aXgpIGNvbnN0OworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJfdCwgUmVjb3JkLCBX
VEY6OkludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVpbnQzMl90Pj4gUmVjb3JkTWFwOworICAgIAorICAgIFJlY29yZE1hcCBnZXRSZWNvcmRNYXAo
KSBjb25zdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworbmFtZXNwYWNlIFdU
RiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6RlRMOjpTdGFja01h
cHM6OkxvY2F0aW9uOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFN0YWNrTWFwc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQAogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIu
aCIKICNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiCisjaW5jbHVkZSAiRlRM
U3RhY2tNYXBzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTU3LDYgKzU4LDkgQEAgcHVibGljOgogICAgIFZlY3Rv
cjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBvc3JFeGl0OwogICAgIEdlbmVyYXRlZEZ1bmN0aW9u
IGdlbmVyYXRlZEZ1bmN0aW9uOwogICAgIEpJVEZpbmFsaXplciogZmluYWxpemVyOworICAgIFZl
Y3RvcjxDU3RyaW5nPiBjb2RlU2VjdGlvbk5hbWVzOworICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRh
U2VjdGlvbk5hbWVzOworICAgIFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFw
c1NlY3Rpb247CiAgICAgCiAgICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24g
MTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTIgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisj
aW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2luY2x1
ZGUgIkZUTE9TUkV4aXRDb21waWxlci5oIgorI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCiAj
aW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAg
LTQwLDcgKzQxLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBNYWNy
b0Fzc2VtYmxlciBqaXQ7CisgICAgQXNzZW1ibHlIZWxwZXJzIGppdCh2bSwgMCk7CisgICAgCisg
ICAgLy8gTm90ZSB0aGF0IGluIHRoZSBmdGxPU1JFeGl0VXNlc1N0YWNrbWFwKCkgY2FzZSwgdGhl
ICJyZXR1cm4gYWRkcmVzcyIgd2lsbCBiZSB0aGUKKyAgICAvLyBPU1IgZXhpdCBJRC4KICAgICAK
ICAgICAvLyBQcmV0ZW5kIHRoYXQgd2UncmUgYSBDIGNhbGwgZnJhbWUuCiAgICAgaml0LnB1c2go
TWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTQ4LDQ0ICs1Miw0NiBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgaml0LnB1c2go
R1BSSW5mbzo6cmVnVDApOwogICAgIGppdC5wdXNoKEdQUkluZm86OnJlZ1QwKTsKICAgICAKLSAg
ICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86
Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVn
aXN0ZXJzKTsKLSAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hC
dWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKLSAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0g
c3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkp
OwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzOyArK2kpCi0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvQXJn
dW1lbnRSZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBq
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihidWZmZXIgKyBHUFJJbmZvOjpu
dW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzICsgaSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotICAg
ICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpLCBHUFJJ
bmZvOjpub25BcmdHUFIxKTsKLSAgICB9CisgICAgaWYgKCFPcHRpb25zOjpmdGxPU1JFeGl0VXNl
c1N0YWNrbWFwKCkpCisgICAgICAgIGppdC5wb2tlKEdQUkluZm86Om5vbkFyZ0dQUjAsIDEpOwor
ICAgIAorICAgIFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZl
ckZvclNpemUocmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSk7CisgICAgY2hhciog
YnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7
CisgICAgCisgICAgc2F2ZUFsbFJlZ2lzdGVycyhqaXQsIGJ1ZmZlcik7CiAgICAgCiAgICAgLy8g
VGVsbCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBhY3Rp
dmUgZHVyaW5nIGNhbGwuCiAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpub25BcmdHUFIx
KTsKLSAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRj
aFNpemUpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSks
IEdQUkluZm86Om5vbkFyZ0dQUjEpOwogCiAgICAgLy8gYXJndW1lbnQgMCBpcyBhbHJlYWR5IHRo
ZSBjYWxsIGZyYW1lLgotICAgIGppdC5tb3ZlKEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgaWYgKE9wdGlvbnM6OmZ0bE9TUkV4aXRVc2VzU3RhY2ttYXAo
KSkKKyAgICAgICAgaml0LnBlZWsoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAzKTsKKyAgICBlbHNl
CisgICAgICAgIGppdC5wZWVrKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoKTsKICAgICAKLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCB3ZSdyZSBub3QgdXNpbmcgdGhlIHJldHVybiByZWdpc3RlciBpZiBpdCdz
IGFuIGFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdhbnQg
dG8gbWFrZSBhIHRhaWwgY2FsbCB0byB3aGF0IHdhcyByZXR1cm5lZCB0byB1cyBpbiB0aGUKKyAg
ICAvLyByZXR1cm5WYWx1ZUdQUi4gQnV0IGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgZG8gdGhpcywg
d2UgbXVzdCByZXN0b3JlIGFsbCByZWdpc3RlcnMuCisgICAgLy8gVGhlIHdheSB3ZSB3aWxsIGFj
Y29tcGxpc2ggdGhpcyBpcyBieSBhcnJhbmdpbmcgdG8gaGF2ZSB0aGUgdGFpbCBjYWxsIHRhcmdl
dCBpbiB0aGUKKyAgICAvLyByZXR1cm4gYWRkcmVzcyAic2xvdCIgKGJlIGl0IGEgcmVnaXN0ZXIg
b3IgdGhlIHN0YWNrKS4KKyAgICAKKyAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgR1BSSW5mbzo6cmVnVDApOwogICAgIAogICAgIC8vIFByZXBhcmUgZm9yIHRhaWwgY2FsbC4K
LSAgICBqaXQucG9wKEdQUkluZm86Om5vbkFyZ0dQUjEpOwotICAgIGppdC5wb3AoR1BSSW5mbzo6
bm9uQXJnR1BSMSk7CisgICAgaml0LnBvcChHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0LnBvcChH
UFJJbmZvOjpyZWdUMSk7CiAgICAgaml0LnBvcChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIpOwogICAgIAotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MSk7Ci0gICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBH
UFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIHNpdHRpbmcg
b24gdGhlIHJldHVybiBhZGRyZXNzIC0gc28gaWYgd2UgZGlkIGEganVtcCByaWdodCBub3csIHRo
ZQorICAgIC8vIHRhaWwtY2FsbGVlIHdvdWxkIGJlIGhhcHB5LiBJbnN0ZWFkIHdlJ2xsIHN0YXNo
IHRoZSBjYWxsZWUgaW4gdGhlIHJldHVybiBhZGRyZXNzIGFuZCB0aGVuCisgICAgLy8gcmVzdG9y
ZSBhbGwgcmVnaXN0ZXJzLgogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJ
bmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZB
cmd1bWVudFJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLSAgICAgICAgaml0
LmxvYWREb3VibGUoR1BSSW5mbzo6bm9uQXJnR1BSMSwgRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lz
dGVyKGkpKTsKLSAgICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51
bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKLSAgICAgICAgaml0LmxvYWQ2NChidWZmZXIg
KyBpLCBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpOworICAgIGppdC5yZXN0b3JlUmV0
dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMCk7CiAgICAgCi0gICAgaml0Lmp1
bXAoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgcmVzdG9yZUFsbFJlZ2lzdGVycyhqaXQsIGJ1
ZmZlcik7CisKKyAgICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmdW5j
dGlvbkNhbGwsIGNvbXBpbGVGVExPU1JFeGl0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNjcgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiQXNzZW1i
bHlIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBy
ZWJveEFjY29yZGluZ1RvRm9ybWF0KAorICAgIFZhbHVlRm9ybWF0IGZvcm1hdCwgQXNzZW1ibHlI
ZWxwZXJzJiBqaXQsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6
IHsKKyAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB2YWx1
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVG
b3JtYXRVSW50MzI6IHsKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OmZwUmVn
VDAsIHNjcmF0Y2gyKTsKKyAgICAgICAgaml0LmJveEludDUyKHZhbHVlLCB2YWx1ZSwgc2NyYXRj
aDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRj
aDIsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjogeworICAgICAgICBqaXQucnNoaWZ0NjQoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCksIHZhbHVl
KTsKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OmZwUmVnVDAsIHNjcmF0Y2gy
KTsKKyAgICAgICAgaml0LmJveEludDUyKHZhbHVlLCB2YWx1ZSwgc2NyYXRjaDEsIEZQUkluZm86
OmZwUmVnVDApOworICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaDIsIEZQUkluZm86
OmZwUmVnVDApOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNl
IFZhbHVlRm9ybWF0U3RyaWN0SW50NTI6IHsKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQ
UkluZm86OmZwUmVnVDAsIHNjcmF0Y2gyKTsKKyAgICAgICAgaml0LmJveEludDUyKHZhbHVlLCB2
YWx1ZSwgc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBqaXQubW92ZTY0VG9E
b3VibGUoc2NyYXRjaDIsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0Qm9vbGVhbjogeworICAgICAgICBq
aXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCB2YWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVGb3Jt
YXRKU1ZhbHVlOiB7CisgICAgICAgIC8vIERvbmUgYWxyZWFkeSEKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZUZvcm1hdERvdWJsZTogeworICAgICAg
ICBqaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6ZnBSZWdUMCwgc2NyYXRjaDEpOworICAgICAg
ICBqaXQubW92ZTY0VG9Eb3VibGUodmFsdWUsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBq
aXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIHZhbHVlKTsKKyAgICAgICAgaml0Lm1vdmU2
NFRvRG91YmxlKHNjcmF0Y2gxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKIG5hbWVzcGFjZSBXVEYgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOjpG
VEw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5oCShy
ZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9y
bWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDE0IEBACiAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKIAorI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEFzc2VtYmx5SGVscGVyczsKKworbmFtZXNwYWNlIEZUTCB7CiAKIC8vIE5vdGUgdGhh
dCB0aGlzIGlzIGF3a3dhcmRseSBzaW1pbGFyIHRvIERhdGFGb3JtYXQgaW4gb3RoZXIgcGFydHMg
b2YgSlNDLCBleGNlcHQgdGhhdAogLy8gdW5saWtlIERhdGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVS
ZWNvdmVyeSwgaXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFVJbnQzMiBhbmQgSW50MzIuCkBAIC00
OCw2ICs1Myw5IEBAIGVudW0gVmFsdWVGb3JtYXQgewogICAgIFZhbHVlRm9ybWF0RG91YmxlCiB9
OwogCit2b2lkIHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQoCisgICAgVmFsdWVGb3JtYXQsIEFzc2Vt
Ymx5SGVscGVycyYsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkocmV2aXNpb24g
MTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMiBAQCBQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRh
Vmlldzo6Y3JlYXRlKAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBi
eXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFW
aWV3OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyKQoreworICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIHJldHVybiBj
cmVhdGUoYnVmZmVyLCAwLCBidWZmZXItPmJ5dGVMZW5ndGgoKSk7Cit9CisKIEpTQXJyYXlCdWZm
ZXJWaWV3KiBEYXRhVmlldzo6d3JhcChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiB7CiAgICAgcmV0dXJuIEpTRGF0YVZpZXc6OmNyZWF0ZSgKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMTU3MTE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+KTsKICAgICAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCBPVkVS
UklERQogICAgIHsKQEAgLTY4LDYgKzY5LDE1IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIHJlYWQodW5zaWduZWQmIG9mZnNldCwgYm9vbCBs
aXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgeworICAgICAgICBUIHJlc3VsdCA9
IHRoaXMtPnRlbXBsYXRlIGdldDxUPihvZmZzZXQsIGxpdHRsZUVuZGlhbiwgc3RhdHVzKTsKKyAg
ICAgICAgaWYgKCFzdGF0dXMgfHwgKnN0YXR1cykKKyAgICAgICAgICAgIG9mZnNldCArPSBzaXpl
b2YoVCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBzZXQodW5zaWduZWQgb2Zmc2V0LCBUIHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgYm9vbCogc3RhdHVzID0gMCkKICAgICB7CiAgICAgICAgIGlmIChzdGF0
dXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlz
aW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMywxMSBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9w
dGlvblJhbmdlOwogICAgIHYoYm9vbCwgdXNlTExWTVNtYWxsQ29kZU1vZGVsLCBmYWxzZSkgXAog
ICAgIHYoYm9vbCwgZnRsVHJhcHNPbk9TUkV4aXQsIGZhbHNlKSBcCiAgICAgdihib29sLCBmdGxP
U1JFeGl0T21pdHNNYXJzaGFsbGluZywgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGZ0bE9TUkV4aXRV
c2VzU3RhY2ttYXAsIGZhbHNlKSBcCiAgICAgdihib29sLCB1c2VMTFZNT1NSRXhpdEludHJpbnNp
YywgZmFsc2UpIFwKICAgICB2KGJvb2wsIGR1bXBMTFZNSVIsIGZhbHNlKSBcCi0gICAgdihib29s
LCBsbHZtQWx3YXlzRmFpbHMsIGZhbHNlKSBcCisgICAgdihib29sLCBsbHZtQWx3YXlzRmFpbHNC
ZWZvcmVDb21waWxlLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3Jl
TGluaywgZmFsc2UpIFwKICAgICB2KHVuc2lnbmVkLCBsbHZtQmFja2VuZE9wdGltaXphdGlvbkxl
dmVsLCAyKSBcCiAgICAgdih1bnNpZ25lZCwgbGx2bU9wdGltaXphdGlvbkxldmVsLCAyKSBcCiAg
ICAgdih1bnNpZ25lZCwgbGx2bVNpemVMZXZlbCwgMCkgXApJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzE1
NSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTMtMTAtMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBGVEwgc2hvdWxkIGJlIGFibGUgdG8gZG8gc2ltcGxlIE9TUiBleGl0cyB1c2luZyBsbHZtLndl
YmtpdC5zdGFja21hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIyNTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3dGYvUHJpbnRTdHJlYW0uY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiB3dGYvUHJpbnRTdHJlYW0uaDoKKyAgICAgICAgKiB3dGYvUmVmQ291bnRl
ZEFycmF5Lmg6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6Ynl0ZVNpemUpOgorCiAy
MDEzLTEwLTA4ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAg
ICAgIFR1cm4gdGhyZWFkZWQgc2Nyb2xsaW5nIG9uIGZvciBhbGwgTWFjIHBvcnRzLgpJbmRleDog
U291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1ByaW50U3RyZWFtLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL1dURi93dGYv
UHJpbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSwxNiBAQCB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgdW5zCiAgICAgb3V0LnByaW50ZigiJXUiLCB2
YWx1ZSk7CiB9CiAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBzaG9ydCB2
YWx1ZSkKK3sKKyAgICBvdXQucHJpbnRmKCIlZCIsIHN0YXRpY19jYXN0PGludD4odmFsdWUpKTsK
K30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIHVuc2lnbmVkIHNob3J0
IHZhbHVlKQoreworICAgIG91dC5wcmludGYoIiV1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZh
bHVlKSk7Cit9CisKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBsb25nIHZh
bHVlKQogewogICAgIG91dC5wcmludGYoIiVsZCIsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1ByaW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUHJpbnRTdHJl
YW0uaAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL1dURi93dGYvUHJpbnRTdHJlYW0uaAko
d29ya2luZyBjb3B5KQpAQCAtMjU3LDYgKzI1Nyw4IEBAIGlubGluZSB2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG8KIGlubGluZSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgU3RyaW5nJiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGljX2Nhc3Q8Y29u
c3QgU3RyaW5nJj4odmFsdWUpKTsgfQogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBTdHJpbmdJbXBsKiB2YWx1ZSkgeyBwcmludEludGVybmFsKG91dCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgU3RyaW5nSW1wbCo+KHZhbHVlKSk7IH0KIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBib29sKTsKK1dURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBzaG9ydCk7CitXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgdW5zaWduZWQgc2hvcnQpOwog
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGludCk7
CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgdW5z
aWduZWQpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIGxvbmcpOwpJbmRleDogU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgJKHJldmlzaW9uIDE1NzEx
OCkKKysrIFNvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjYsNiArMTI2LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSGVhZGVyOjpmcm9tUGF5
bG9hZChtX2RhdGEpLT5sZW5ndGg7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBieXRlU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHNpemUoKSAqIHNpemVvZihUKTsgfQorICAgIAogICAgIFQqIGRhdGEo
KSB7IHJldHVybiBtX2RhdGE7IH0KICAgICBUKiBiZWdpbigpIHsgcmV0dXJuIG1fZGF0YTsgfQog
ICAgIFQqIGVuZCgpCg==
</data>
<flag name="commit-queue"
          id="236146"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213745</attachid>
            <date>2013-10-08 19:52:45 -0700</date>
            <delta_ts>2013-10-08 20:10:51 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79607</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMy0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzaW1wbGUgT1NSIGV4aXRzIHVzaW5nIGxsdm0ud2Vi
a2l0LnN0YWNrbWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjI1MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgZ2l2ZXMgdGhlIEZUTCB0aGUgYWJpbGl0eSB0byBPU1IgZXhpdCB1
c2luZyB0aGUgbGx2bS53ZWJraXQuc3RhY2ttYXAgaW50cmluc2ljLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgRlRMIGNvbXBpbGVzIGFsbCBPU1IgZXhpdCBjYWxscyBhcyBjYWxscyB0byBsbHZt
LndlYmtpdC5zdGFja21hcCB3aXRoIGEgdW5pcXVlCisgICAgICAgICAgSUQsIHBhc3NpbmcgYSBy
ZXF1ZXN0ZWQgc2l6ZSB0aGF0IGlzIGJpZyBlbm91Z2ggZm9yIG93biBqdW1wIHJlcGxhY2VtZW50
LgorICAgICAgICAKKyAgICAgICAgLSBBZnRlciBMTFZNIGNvbXBpbGF0aW9uLCB3ZSBwYXJzZSB0
aGUgbmV3IExMVk0gc3RhY2ttYXAgc2VjdGlvbi4KKyAgICAgICAgCisgICAgICAgIC0gRm9yIGFs
bCBsbHZtLndlYmtpdC5zdGFja21hcHMgdGhhdCB3ZSB1c2VkIGZvciBPU1IgZXhpdHMsIHdlIGRv
IGEganVtcFJlcGxhY2VtZW50LAorICAgICAgICAgIHdoaWNoIHRhcmdldHMgZXhpdCB0aHVua3Mg
dGhhdCB3ZSBnZW5lcmF0ZS4KKyAgICAgICAgCisgICAgICAgIC0gSWYgYW4gZXhpdCB0aHVuayBm
aXJlcywgaXQgY2F1c2VzIEpTQyB0byBjb21waWxlIGFuIGV4aXQgb2ZmLXJhbXAgdGhhdCB1c2Vz
IGEKKyAgICAgICAgICBjb21iaW5hdGlvbiBvZiB0aGUgSlNDLWludGVybmFsIE9TUiBleGl0IGFj
Y291bnRpbmcgKEZUTDo6RXhpdFZhbHVlIGFuZCBmcmllbmRzKSBhbmQKKyAgICAgICAgICBMTFZN
IHN0YWNrbWFwJ3MgYWNjb3VudGluZyBvZiB3aGVyZSBkYXRhIGFjdHVhbGx5IGVuZGVkIHVwIChy
ZWdpc3RlciwgaW5kaXJlY3QsCisgICAgICAgICAgY29uc3RhbnQpIHRvIHJlY29uc3RydWN0IGJ5
dGVjb2RlIHN0YXRlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGlsbCBoYXMgc2hvcnRjb21p
bmdzOyBmb3IgZXhhbXBsZSBpdCBjYW5ub3QgaGFuZGxlIFhNTSBvciBZTU0gcmVnaXN0ZXJzLiBI
YW5kbGluZworICAgICAgICBZTU0gcmVnaXN0ZXJzIHdpbGwgcmVxdWlyZSBhZGRpbmcgc29tZSBi
YXNpYyBZTU0gc3VwcG9ydCB0byBvdXIgYXNzZW1ibGVycyAtIHJlYWxseSB3ZQorICAgICAgICBq
dXN0IG5lZWQgdGhlIGFiaWxpdHkgdG8gbW92ZSBhIFlNTSdzIHZhbHVlIGludG8gYSBHUFIuCisg
ICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHByZXNlcnZlcyBhbGwgb2YgdGhlIG9sZCwgaW50
cmluc2ljLWxlc3MsIEZUTCBPU1IgZXhpdCBzdXBwb3J0LiBIZW5jZSBpdAorICAgICAgICBtYW5h
Z2VzIHRvIHBhc3MgYWxsIGV4aXN0aW5nIEZUTCB0ZXN0cyBldmVuIGRlc3BpdGUgaXRzIGluY29t
cGxldGVuZXNzLiBJIHRoaW5rIHRoYXQncworICAgICAgICB0aGUgcmlnaHQgd2F5IHRvIGdvIHNp
bmNlIHRoaXMgaXMgYWxyZWFkeSBhIGJpZyBwYXRjaCwgYW5kIGFueXdheSBpdCB3b3VsZCBiZSBn
cmVhdCB0bworICAgICAgICBrZWVwIHRoZSBpbnRyaW5zaWMtbGVzcyBGVEwgT1NSIGV4aXQgc3Vw
cG9ydCBzbyBsb25nIGFzIHRoZSBMTFZNIHNpZGUgb2YgdGhpcyBoYXNuJ3QKKyAgICAgICAgbGFu
ZGVkLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OmlzU3RhY2tSZWxhdGVkKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVh
bFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om5leHRSZWdpc3Rlcik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0ZXIpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpmaXJz
dFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIpOgor
ICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21w
aWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0QW5kQm94KToKKyAg
ICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmg6CisgICAgICAgIChKU0M6OkZUTDo6Q0Fy
Z3VtZW50R2V0dGVyOjpsb2FkTmV4dERvdWJsZUludG9HUFIpOgorICAgICAgICAqIGZ0bC9GVExD
b21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlQ29kZVNlY3Rpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgIChKU0M6
OkZUTDo6ZHVtcERhdGFTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpmaXhGdW5jdGlvbkJh
c2VkT25TdGFja01hcHMpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRU
aHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtH
ZW5lcmF0b3I6OmVtaXRUaHVua3MpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkZUTDo6
RXhpdFZhbHVlOjppc0luSlNTdGFja1NvbWVob3cpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRW
YWx1ZTo6dmFsdWVGb3JtYXQpOgorICAgICAgICAqIGZ0bC9GVExGYWlsLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpmYWlsKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5o
OgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUV4aXRUaHVua3MpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExWTSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpsaW5rT1NSRXhpdHNBbmRDb21wbGV0ZUluaXRpYWxpemF0aW9u
QmxvY2tzKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExP
U1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdENvbXBp
bGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWJXaXRoT1NS
RXhpdFN0YWNrbWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1YldpdGhvdXRPU1JF
eGl0U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExPU1JFeGl0KToKKyAg
ICAgICAgKiBmdGwvRlRMU2F2ZVJlc3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRM
OjpieXRlc0ZvckdQUnMpOgorICAgICAgICAoSlNDOjpGVEw6OnJlcXVpcmVkU2NyYXRjaE1lbW9y
eVNpemVJbkJ5dGVzKToKKyAgICAgICAgKEpTQzo6RlRMOjpvZmZzZXRPZkdQUik6CisgICAgICAg
IChKU0M6OkZUTDo6c2F2ZUFsbFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkZUTDo6cmVzdG9y
ZUFsbFJlZ2lzdGVycyk6CisgICAgICAgICogZnRsL0ZUTFNhdmVSZXN0b3JlLmg6IEFkZGVkLgor
ICAgICAgICAqIGZ0bC9GVExTdGFja01hcHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRM
OjpyZWFkT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkNvbnN0YW50Ojpw
YXJzZSk6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpDb25zdGFudDo6ZHVtcCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpMb2NhdGlvbjo6cGFyc2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlN0YWNrTWFwczo6TG9jYXRpb246OmR1bXApOgorICAgICAgICAoSlNDOjpGVEw6
OlN0YWNrTWFwczo6TG9jYXRpb246Omludm9sdmVzR1BSKToKKyAgICAgICAgKEpTQzo6RlRMOjpT
dGFja01hcHM6OkxvY2F0aW9uOjppc0dQUik6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBz
OjpMb2NhdGlvbjo6Z3ByKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9u
OjpyZXN0b3JlSW50byk6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpSZWNvcmQ6OnBh
cnNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OlJlY29yZDo6ZHVtcCk6CisgICAg
ICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpwYXJzZSk6CisgICAgICAgIChKU0M6OkZUTDo6U3Rh
Y2tNYXBzOjpkdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OmR1bXBNdWx0aWxp
bmUpOgorICAgICAgICAoSlNDOjpGVEw6OlN0YWNrTWFwczo6Z2V0UmVjb3JkTWFwKToKKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZnRsL0ZUTFN0YWNrTWFwcy5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OnJlYm94QWNjb3JkaW5nVG9Gb3JtYXQpOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZUZvcm1hdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvRGF0YVZpZXcuY3BwOgorICAgICAgICAoSlNDOjpEYXRhVmll
dzo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGFWaWV3Lmg6CisgICAgICAgIChKU0M6
OkRhdGFWaWV3OjpyZWFkKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxMy0x
MC0wOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQg
Zm9yLW9mIGl0ZXJhdGlvbiB0byBpbi1iYW5kIHNpZ25hbGxpbmcgc28gd2UgY2FuIHRyaXZpYWxs
eSBhdm9pZCB1bm5lY2Vzc2FyeSBvYmplY3QgYWxsb2NhdGlvbgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTQsNiArMzE0LDggQEAKIAkJMEY5RDMzNzAxNjVEQkI5MDAwNUFEMzg3IC8qIERpc2Fz
c2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcgLyogRGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJ
MEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM5NDE3RkZDNEU2MDA3M0My
QkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLzsgfTsKIAkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOUQzMzlBMTgw
M0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0
YWNrTWFwcy5jcHAgKi87IH07CisJCTBGOUQzMzlCMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFj
a01hcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OUQzMzk5MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQjRGNDE3RkNCOTE3MDBDQjY3
RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tM
YXlvdXRQaGFzZS5jcHAgKi87IH07CiAJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdT
dGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjlGQjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZD
OEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEJGMTRFMUI1RkIw
MEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICsz
NzQsOCBAQAogCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQw
NTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICov
OyB9OwogCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0NBRTQzMTZEMENGNkUw
MEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVz
dG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovOyB9OworCQkw
RkNFRkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQy
QzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZE
ODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87
IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZE
ODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKQEAgLTE1MjgsNiArMTUzMiw4IEBACiAJCTBGOUQz
MzZFMTY1REJCOEQwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxl
ci9EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5
NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoZWRBdC5jcHA7IHBhdGggPSBkZmcvREZHRmx1c2hl
ZEF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzOTUxN0ZGQzRFNjAw
NzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdGbHVzaGVkQXQuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaGVkQXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFw
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTdGFja01hcHMu
Y3BwOyBwYXRoID0gZnRsL0ZUTFN0YWNrTWFwcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGOUQzMzk5MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU3RhY2tNYXBzLmg7IHBhdGggPSBmdGwvRlRM
U3RhY2tNYXBzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYyMTdGQ0I5
MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlG
QjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGFja0xheW91dFBoYXNlLmg7IHBhdGggPSBkZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlG
QzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1OTgsNiArMTYwNCw4IEBACiAJCTBG
QzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9ySW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNDQUU0MzE2RDBDRjZFMDBEMEM2NUIg
LyogUGFyc2VyRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2Vy
RXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDRUZBQTkxODA0QzEzRTAw
NDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmNwcDsgcGF0aCA9IGZ0bC9GVExTYXZlUmVzdG9yZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExTYXZlUmVzdG9yZS5oOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQwLDYgKzI2NDgs
MTAgQEAKIAkJCQkwRjIzNUJDQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVy
LmggKi8sCiAJCQkJMEZFQTBBMjkxNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgKi8s
CiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oICovLAorCQkJCTBG
Q0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8sCisJCQkJMEZD
RUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8sCisJCQkJMEY5RDMz
OTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgKi8sCisJCQkJMEY5RDMzOTkx
ODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oICovLAogCQkJCTBGRUEwQTE1MTcwNkJC
OTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8sCiAJCQkJMEZFQTBBMDcxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTFN0YXRlLmggKi8sCiAJCQkJQTdGQ0MyNkMxN0EwQjZBQTAwNzg2RDFBIC8qIEZU
TFN3aXRjaENhc2UuaCAqLywKQEAgLTQzMDQsNiArNDMxNiw3IEBACiAJCQkJQkMxOEM0MkEwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkIxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZl
UmVzdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MDdEMjlFMEU4NzFFNUUwMEQ3
RDg5NiAvKiBKU1R5cGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwMjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDk5LDYgKzQ1
MTIsNyBAQAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyREY0NDMwMTcwN0FDMDEwMEE1Q0E5NiAv
KiBTdXBlclJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0
NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlEMzM5QjE4MDNBREI3
MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDEx
RDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNTI0OCw2ICs1MjYyLDcgQEAKIAkJCQk5
NjlBMDc5QTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODUwMTA3RUMwRDcwMDEzRTdCMiAvKiBPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3QkRBRUM4MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9yUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExT
YXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZD
NDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0
MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkw
MDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUzNDUsNiArNTM2
MCw3IEBACiAJCQkJODY3MDRCODQxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4NjEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJ
VC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
clBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5RDMzOUExODAzQURCNzAwNzNDMkJD
IC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI0MjEyREI4QTgx
MDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0
LDkgQEAgcHVibGljOgogICAgIGNsYXNzIEp1bXA7CiAKICAgICB0eXBlZGVmIHR5cGVuYW1lIEFz
c2VtYmxlclR5cGU6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICAKKyAgICBzdGF0aWMgUmVn
aXN0ZXJJRCBmaXJzdFJlZ2lzdGVyKCkgeyByZXR1cm4gQXNzZW1ibGVyVHlwZTo6Zmlyc3RSZWdp
c3RlcigpOyB9CisgICAgc3RhdGljIFJlZ2lzdGVySUQgbGFzdFJlZ2lzdGVyKCkgeyByZXR1cm4g
QXNzZW1ibGVyVHlwZTo6bGFzdFJlZ2lzdGVyKCk7IH0KIAogICAgIC8vIFNlY3Rpb24gMTogTWFj
cm9Bc3NlbWJsZXIgb3BlcmFuZCB0eXBlcwogICAgIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNTcxMTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgTWFj
cm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJCYXNlIHsKIHB1YmxpYzoKIAorICAg
IHN0YXRpYyBib29sIGlzU3RhY2tSZWxhdGVkKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlZyA9PSBzdGFja1BvaW50ZXJSZWdpc3RlciB8fCByZWcgPT0gZnJhbWVQb2lu
dGVyUmVnaXN0ZXI7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBSZWdpc3RlcklEIGZpcnN0UmVh
bFJlZ2lzdGVyKCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlciA9IE1h
Y3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7CisgICAgICAgIHdoaWxlIChNYWNyb0Fzc2Vt
Ymxlcjo6aXNTdGFja1JlbGF0ZWQoZmlyc3RSZWdpc3RlcikpCisgICAgICAgICAgICBmaXJzdFJl
Z2lzdGVyID0gc3RhdGljX2Nhc3Q8UmVnaXN0ZXJJRD4oZmlyc3RSZWdpc3RlciArIDEpOworICAg
ICAgICByZXR1cm4gZmlyc3RSZWdpc3RlcjsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFJlZ2lz
dGVySUQgbmV4dFJlZ2lzdGVyKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCByZXN1bHQgPSBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPihyZWcgKyAxKTsKKyAgICAgICAg
d2hpbGUgKE1hY3JvQXNzZW1ibGVyOjppc1N0YWNrUmVsYXRlZChyZXN1bHQpKQorICAgICAgICAg
ICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8UmVnaXN0ZXJJRD4ocmVzdWx0ICsgMSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBSZWdpc3RlcklEIHNlY29u
ZFJlYWxSZWdpc3RlcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV4dFJlZ2lzdGVyKGZpcnN0
UmVhbFJlZ2lzdGVyKCkpOworICAgIH0KKwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6
cG9wOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6anVtcDsKICAgICB1c2luZyBNYWNy
b0Fzc2VtYmxlckJhc2U6OmJyYW5jaDMyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNp
b24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJlZ2lzdGVyID0gWDg2
UmVnaXN0ZXJzOjplc3A7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZnJhbWVQb2ludGVy
UmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVicDsKLQorICAgIAogICAgIHN0YXRpYyBib29sIHNo
b3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHVpbnQzMl90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+
PSAweDAwZmZmZmZmOyB9CiAjaWYgQ1BVKFg4Nl82NCkKICAgICBzdGF0aWMgYm9vbCBzaG91bGRC
bGluZEZvclNwZWNpZmljQXJjaCh1aW50NjRfdCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPj0gMHgw
MGZmZmZmZjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4
NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDE2
IEBAIG5hbWVzcGFjZSBYODZSZWdpc3RlcnMgewogY2xhc3MgWDg2QXNzZW1ibGVyIHsKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOworICAg
IHN0YXRpYyBSZWdpc3RlcklEIGZpcnN0UmVnaXN0ZXIoKSB7IHJldHVybiBYODZSZWdpc3RlcnM6
OmVheDsgfQorICAgIHN0YXRpYyBSZWdpc3RlcklEIGxhc3RSZWdpc3RlcigpCisgICAgeworI2lm
IENQVShYODZfNjQpCisgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OnIxNTsKKyNlbHNlCisg
ICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OmVkaTsKKyNlbmRpZgorICAgIH0KKyAgICAKICAg
ICB0eXBlZGVmIFg4NlJlZ2lzdGVyczo6WE1NUmVnaXN0ZXJJRCBYTU1SZWdpc3RlcklEOwogICAg
IHR5cGVkZWYgWE1NUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDEyICsyNjQs
MTggQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBp
ZiAoT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCiAgICAgICAgICAgICBiZWZvcmVGVEwg
PSBjdXJyZW50VGltZU1TKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bGx2bUFs
d2F5c0ZhaWxzKCkpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6Omxsdm1BbHdheXNGYWlsc0JlZm9y
ZUNvbXBpbGUoKSkgewogICAgICAgICAgICAgRlRMOjpmYWlsKHN0YXRlKTsKICAgICAgICAgICAg
IHJldHVybiBGVExQYXRoOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBGVEw6OmNvbXBp
bGUoc3RhdGUpOworCisgICAgICAgIGlmIChPcHRpb25zOjpsbHZtQWx3YXlzRmFpbHNCZWZvcmVM
aW5rKCkpIHsKKyAgICAgICAgICAgIEZUTDo6ZmFpbChzdGF0ZSk7CisgICAgICAgICAgICByZXR1
cm4gRlRMUGF0aDsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgRlRMOjpsaW5rKHN0YXRl
KTsKICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcAkocmV2aXNpb24gMTU3MTE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw2MCArNTIsMzEgQEAgdm9pZCBDQXJndW1lbnRHZXR0ZXI6Omxv
YWROZXh0QW5kQm94KAogICAgIH0KICAgICAKICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNh
c2UgVmFsdWVGb3JtYXRJbnQzMjogeworICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICBj
YXNlIFZhbHVlRm9ybWF0VUludDMyOgogICAgICAgICBsb2FkTmV4dDMyKGRlc3RpbmF0aW9uKTsK
LSAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3Rp
bmF0aW9uKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBW
YWx1ZUZvcm1hdFVJbnQzMjogewotICAgICAgICBsb2FkTmV4dDMyKGRlc3RpbmF0aW9uKTsKLSAg
ICAgICAgbV9qaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6ZnBSZWdUMCwgc2NyYXRjaDIpOwot
ICAgICAgICBtX2ppdC5ib3hJbnQ1MihkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24sIHNjcmF0Y2gx
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRj
aDIsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICBicmVhazsKLSAgICB9CiAgICAgICAgIAot
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjogeworICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoK
KyAgICBjYXNlIFZhbHVlRm9ybWF0U3RyaWN0SW50NTI6CisgICAgY2FzZSBWYWx1ZUZvcm1hdEpT
VmFsdWU6CiAgICAgICAgIGxvYWROZXh0NjQoZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5y
c2hpZnQ2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjppbnQ1MlNoaWZ0
QW1vdW50KSwgZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChGUFJJ
bmZvOjpmcFJlZ1QwLCBzY3JhdGNoMik7Ci0gICAgICAgIG1faml0LmJveEludDUyKGRlc3RpbmF0
aW9uLCBkZXN0aW5hdGlvbiwgc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICBt
X2ppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMiwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAg
IGJyZWFrOwotICAgIH0KICAgICAgICAgICAgIAotICAgIGNhc2UgVmFsdWVGb3JtYXRTdHJpY3RJ
bnQ1MjogewotICAgICAgICBsb2FkTmV4dDY0KGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbV9qaXQu
bW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6ZnBSZWdUMCwgc2NyYXRjaDIpOwotICAgICAgICBtX2pp
dC5ib3hJbnQ1MihkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24sIHNjcmF0Y2gxLCBGUFJJbmZvOjpm
cFJlZ1QwKTsKLSAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaDIsIEZQUkluZm86
OmZwUmVnVDApOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBjYXNl
IFZhbHVlRm9ybWF0Qm9vbGVhbjogeworICAgIGNhc2UgVmFsdWVGb3JtYXRCb29sZWFuOgogICAg
ICAgICBsb2FkTmV4dDgoZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBWYWx1ZUZvcm1hdEpTVmFsdWU6
IHsKLSAgICAgICAgbG9hZE5leHQ2NChkZXN0aW5hdGlvbik7CiAgICAgICAgIGJyZWFrOwotICAg
IH0KICAgICAgICAgICAgIAotICAgIGNhc2UgVmFsdWVGb3JtYXREb3VibGU6IHsKLSAgICAgICAg
bV9qaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6ZnBSZWdUMCwgc2NyYXRjaDEpOwotICAgICAg
ICBsb2FkTmV4dERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgbV9qaXQuYm94RG91
YmxlKEZQUkluZm86OmZwUmVnVDAsIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbV9qaXQubW92ZTY0
VG9Eb3VibGUoc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOworICAgIGNhc2UgVmFsdWVGb3Jt
YXREb3VibGU6CisgICAgICAgIGxvYWROZXh0RG91YmxlSW50b0dQUihkZXN0aW5hdGlvbik7CiAg
ICAgICAgIGJyZWFrOwotICAgIH0KICAgICAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAg
ICAKKyAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KGZvcm1hdCwgbV9qaXQsIGRlc3RpbmF0aW9u
LCBzY3JhdGNoMSwgc2NyYXRjaDIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmgJ
KHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3Vt
ZW50R2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTYgQEAgcHVibGljOgog
ICAgICAgICBsb2FkTmV4dDY0KGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBs
b2FkTmV4dERvdWJsZUludG9HUFIoR1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAg
aWYgKG1fZnByQXJndW1lbnRJbmRleCA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3Rl
cnMpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnRvQXJndW1l
bnRSZWdpc3RlcihtX2ZwckFyZ3VtZW50SW5kZXgrKyksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDY0KG5l
eHRBZGRyZXNzKCksIGRlc3RpbmF0aW9uKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBsb2FkTmV4
dERvdWJsZShGUFJSZWcgZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE1NzEx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDExICszMCwxNSBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5
cGUuaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEYXRhVmlldy5oIgog
I2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgorI2luY2x1
ZGUgIkZUTEV4aXRUaHVua0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNp
bmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKKyNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0xM
Vk1IZWFkZXJzLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTQyLDEx
ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIHVzaW5nIG5hbWVzcGFj
ZSBERkc7CiAKIHN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRlQ29kZVNlY3Rpb24oCi0gICAgdm9p
ZCogb3BhcXVlU3RhdGUsIHVpbnRwdHJfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQsIHVuc2ln
bmVkIHNlY3Rpb25JRCwKLSAgICBjb25zdCBjaGFyKiBzZWN0aW9uTmFtZSkKKyAgICB2b2lkKiBv
cGFxdWVTdGF0ZSwgdWludHB0cl90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCwgdW5zaWduZWQs
IGNvbnN0IGNoYXIqIHNlY3Rpb25OYW1lKQogewotICAgIFVOVVNFRF9QQVJBTShzZWN0aW9uSUQp
OwotICAgIFVOVVNFRF9QQVJBTShzZWN0aW9uTmFtZSk7CiAgICAgCiAgICAgU3RhdGUmIHN0YXRl
ID0gKnN0YXRpY19jYXN0PFN0YXRlKj4ob3BhcXVlU3RhdGUpOwogICAgIApAQCAtNTcsNiArNTgs
NyBAQCBzdGF0aWMgdWludDhfdCogbW1BbGxvY2F0ZUNvZGVTZWN0aW9uKAogICAgICAgICAgICAg
c3RhdGUuZ3JhcGgubV92bSwgc2l6ZSwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uTXVzdFN1Y2NlZWQpOwogICAgIAogICAgIHN0YXRlLmppdENvZGUtPmFkZEhhbmRsZShy
ZXN1bHQpOworICAgIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXMuYXBwZW5kKHNlY3Rpb25OYW1lKTsK
ICAgICAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHJlc3VsdC0+c3RhcnQoKSk7
CiB9CkBAIC02Niw3ICs2OCw2IEBAIHN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRlRGF0YVNlY3Rp
b24oCiAgICAgY29uc3QgY2hhciogc2VjdGlvbk5hbWUsIExMVk1Cb29sIGlzUmVhZE9ubHkpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHNlY3Rpb25JRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNlY3Rpb25O
YW1lKTsKICAgICBVTlVTRURfUEFSQU0oaXNSZWFkT25seSk7CiAKICAgICBTdGF0ZSYgc3RhdGUg
PSAqc3RhdGljX2Nhc3Q8U3RhdGUqPihvcGFxdWVTdGF0ZSk7CkBAIC03Niw3ICs3NywxMiBAQCBz
dGF0aWMgdWludDhfdCogbW1BbGxvY2F0ZURhdGFTZWN0aW9uKAogICAgIFJlZkNvdW50ZWRBcnJh
eTxMU2VjdGlvbldvcmQ+IHNlY3Rpb24oCiAgICAgICAgIChzaXplICsgc2l6ZW9mKExTZWN0aW9u
V29yZCkgLSAxKSAvIHNpemVvZihMU2VjdGlvbldvcmQpKTsKICAgICAKLSAgICBzdGF0ZS5qaXRD
b2RlLT5hZGREYXRhU2VjdGlvbihzZWN0aW9uKTsKKyAgICBpZiAoIXN0cmNtcChzZWN0aW9uTmFt
ZSwgIl9fanNfc3RhY2ttYXBzIikpCisgICAgICAgIHN0YXRlLnN0YWNrbWFwc1NlY3Rpb24gPSBz
ZWN0aW9uOworICAgIGVsc2UgeworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5hZGREYXRhU2VjdGlv
bihzZWN0aW9uKTsKKyAgICAgICAgc3RhdGUuZGF0YVNlY3Rpb25OYW1lcy5hcHBlbmQoc2VjdGlv
bk5hbWUpOworICAgIH0KICAgICAKICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihz
ZWN0aW9uLmRhdGEoKSk7CiB9CkBAIC05MCw2ICs5Niw2MCBAQCBzdGF0aWMgdm9pZCBtbURlc3Ry
b3kodm9pZCopCiB7CiB9CiAKK3N0YXRpYyB2b2lkIGR1bXBEYXRhU2VjdGlvbihSZWZDb3VudGVk
QXJyYXk8TFNlY3Rpb25Xb3JkPiBzZWN0aW9uLCBjb25zdCBjaGFyKiBwcmVmaXgpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNlY3Rpb24uc2l6ZSgpOyArK2opIHsKKyAgICAgICAg
Y2hhciBidWZbMzJdOworICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHglbHgi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzZWN0
aW9uLmRhdGEoKSArIGopKSk7CisgICAgICAgIGRhdGFMb2dGKCIlcyUxNnM6IDB4JTAxNmxseFxu
IiwgcHJlZml4LCBidWYsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2VjdGlvbltqXSkpOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAorICAgIFN0
YXRlJiBzdGF0ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUqIGppdENvZGUsIEdlbmVy
YXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uLAorICAgIFN0YWNrTWFwczo6UmVjb3JkTWFw
JiByZWNvcmRNYXApCit7CisgICAgVk0mIHZtID0gc3RhdGUuZ3JhcGgubV92bTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdFRodW5rID0KKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yihv
c3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCB0
YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0VGh1bmsuY29kZSgpKTsKKworICAgIEV4
aXRUaHVua0dlbmVyYXRvciBleGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpOworICAgIGV4aXRUaHVu
a0dlbmVyYXRvci5lbWl0VGh1bmtzKCk7CisgICAgaWYgKGV4aXRUaHVua0dlbmVyYXRvci5kaWRU
aGluZ3MoKSkgeworICAgICAgICBPd25QdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciA9IGFkb3B0
UHRyKG5ldyBMaW5rQnVmZmVyKAorICAgICAgICAgICAgdm0sICZleGl0VGh1bmtHZW5lcmF0b3Is
IGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkpOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKHN0YXRlLm9zckV4aXQuc2l6ZSgpID09IHN0YXRlLmppdENvZGUtPm9zckV4aXQu
c2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0
ZS5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25J
bmZvJiBpbmZvID0gc3RhdGUub3NyRXhpdFtpXTsKKyAgICAgICAgICAgIE9TUkV4aXQmIGV4aXQg
PSBqaXRDb2RlLT5vc3JFeGl0W2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBsaW5rQnVm
ZmVyLT5saW5rKGluZm8ubV90aHVua0p1bXAsIHRhcmdldCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGluZm8u
bV90aHVua0xhYmVsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJs
ZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLT5vZmZzZXRPZihpbmZvLm1fdGh1bmtKdW1wKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXplRXhp
dFRodW5rc0xpbmtCdWZmZXIobGlua0J1ZmZlci5yZWxlYXNlKCkpOworICAgIH0KKworICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOworICAgIAorICAgIGZvciAodW5z
aWduZWQgZXhpdEluZGV4ID0gaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7IGV4aXRJbmRleC0tOykg
eworICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gc3RhdGUub3NyRXhpdFtl
eGl0SW5kZXhdOworICAgICAgICBPU1JFeGl0JiBleGl0ID0gaml0Q29kZS0+b3NyRXhpdFtleGl0
SW5kZXhdOworICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gcmVjb3JkTWFwLmZp
bmQoZXhpdC5tX3N0YWNrbWFwSUQpLT52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVwbGFjZVdpdGhKdW1wKAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoCisg
ICAgICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyBy
ZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQpLAorICAgICAgICAgICAgaW5mby5tX3RodW5rQWRkcmVz
cyk7CisgICAgfQorfQorCiB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlKQogewogICAgIGNoYXIq
IGVycm9yID0gMDsKQEAgLTE0MywxNSArMjAzLDEyIEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3Rh
dGUpCiAgICAgTExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUoZW5naW5lKTsKIAogICAgIGlmIChz
aG91bGRTaG93RGlzYXNzZW1ibHkoKSkgewotICAgICAgICAvLyBGSVhNRTogZm91cnRoVGllcjog
RlRMIG1lbW9yeSBhbGxvY2F0b3Igc2hvdWxkIGJlIGFibGUgdG8gdGVsbCB1cyB3aGljaCBvZgot
ICAgICAgICAvLyB0aGVzZSB0aGluZ3MgaXMgYWN0dWFsbHkgY29kZSBvciBkYXRhLgotICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE2MTg5CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVzKCkuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhhbmRsZSA9
IHN0YXRlLmppdENvZGUtPmhhbmRsZXMoKVtpXS5nZXQoKTsKICAgICAgICAgICAgIGRhdGFMb2co
CiAgICAgICAgICAgICAgICAgIkdlbmVyYXRlZCBMTFZNIGNvZGUgZm9yICIsCiAgICAgICAgICAg
ICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENv
ZGU6OkRGR0pJVCksCi0gICAgICAgICAgICAgICAgIiAjIiwgaSwgIjpcbiIpOworICAgICAgICAg
ICAgICAgICIgIyIsIGksICIsICIsIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXNbaV0sICI6XG4iKTsK
ICAgICAgICAgICAgIGRpc2Fzc2VtYmxlKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cihoYW5kbGUtPnN0YXJ0KCkpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCksCiAgICAgICAg
ICAgICAgICAgIiAgICAiLCBXVEY6OmRhdGFGaWxlKCksIExMVk1TdWJzZXQpOwpAQCAtMTYyLDE0
ICsyMTksNTIgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIGRhdGFM
b2coCiAgICAgICAgICAgICAgICAgIkdlbmVyYXRlZCBMTFZNIGRhdGEgc2VjdGlvbiBmb3IgIiwK
ICAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVC
bG9jaywgSklUQ29kZTo6REZHSklUKSwKLSAgICAgICAgICAgICAgICAiICMiLCBpLCAiOlxuIik7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2VjdGlvbi5zaXplKCk7ICsr
aikgewotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMyXTsKLSAgICAgICAgICAgICAgICBzbnBy
aW50ZihidWYsIHNpemVvZihidWYpLCAiMHglbHgiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzZWN0aW9uLmRhdGEoKSArIGopKSk7Ci0gICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgICAlMTZzOiAweCUwMTZsbHhcbiIsIGJ1Ziwgc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihzZWN0aW9uW2pdKSk7CisgICAgICAgICAgICAgICAgIiAjIiwgaSwgIiwg
Iiwgc3RhdGUuZGF0YVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOworICAgICAgICAgICAgZHVtcERh
dGFTZWN0aW9uKHNlY3Rpb24sICIgICAgIik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
aWYgKHN0YXRlLnN0YWNrbWFwc1NlY3Rpb24uc2l6ZSgpKSB7CisgICAgICAgIGlmIChzaG91bGRT
aG93RGlzYXNzZW1ibHkoKSkgeworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAg
ICAiR2VuZXJhdGVkIExMVk0gc3RhY2ttYXBzIHNlY3Rpb24gZm9yICIsCisgICAgICAgICAgICAg
ICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6
OkRGR0pJVCksICI6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBSYXcgZGF0YTpcbiIp
OworICAgICAgICAgICAgZHVtcERhdGFTZWN0aW9uKHN0YXRlLnN0YWNrbWFwc1NlY3Rpb24sICIg
ICAgIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxEYXRhVmlldz4gc3Rh
Y2ttYXBzRGF0YSA9IERhdGFWaWV3OjpjcmVhdGUoCisgICAgICAgICAgICBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKHN0YXRlLnN0YWNrbWFwc1NlY3Rpb24uZGF0YSgpLCBzdGF0ZS5zdGFja21hcHNTZWN0
aW9uLmJ5dGVTaXplKCkpKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+c3RhY2ttYXBzLnBhcnNl
KHN0YWNrbWFwc0RhdGEuZ2V0KCkpOworICAgIAorICAgICAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fz
c2VtYmx5KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBTdHJ1Y3R1cmVkIGRhdGE6XG4i
KTsKKyAgICAgICAgICAgIHN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5kdW1wTXVsdGlsaW5lKFdU
Rjo6ZGF0YUZpbGUoKSwgIiAgICAgICAgIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IFN0YWNrTWFwczo6UmVjb3JkTWFwIHJlY29yZE1hcCA9IHN0YXRlLmppdENvZGUtPnN0YWNrbWFw
cy5nZXRSZWNvcmRNYXAoKTsKKyAgICAgICAgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAor
ICAgICAgICAgICAgc3RhdGUsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBzdGF0ZS5qaXRDb2Rl
LmdldCgpLCBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiwKKyAgICAgICAgICAgIHJlY29yZE1hcCk7
CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVzKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY29kZVNlY3Rpb25OYW1l
c1tpXSAhPSAiX190ZXh0IikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxl
ID0gc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgIGRh
dGFMb2coCisgICAgICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBjb2RlIGFmdGVyIHN0
YWNrbWFwLWJhc2VkIGZpeC11cCBmb3IgIiwKKyAgICAgICAgICAgICAgICAgICAgQ29kZUJsb2Nr
V2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksCisg
ICAgICAgICAgICAgICAgICAgICIgIyIsIGksICIsICIsIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXNb
aV0sICI6XG4iKTsKKyAgICAgICAgICAgICAgICBkaXNhc3NlbWJsZSgKKyAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+c3RhcnQoKSksIGhhbmRsZS0+c2l6
ZUluQnl0ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgIiAgICAiLCBXVEY6OmRhdGFGaWxlKCks
IExMVk1TdWJzZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgIAorICAg
IHN0YXRlLm1vZHVsZSA9IDA7IC8vIFdlIG5vIGxvbmdlciBvd24gdGhlIG1vZHVsZS4KIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTU3MTE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxMiArNTEsMjEgQEAgdm9pZCBFeGl0VGh1bmtHZW5lcmF0b3I6
OmVtaXRUaHVuayh1bnNpZwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX3N0
YXRlLm9zckV4aXRbaW5kZXhdOwogICAgIAogICAgIGluZm8ubV90aHVua0xhYmVsID0gbGFiZWwo
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihpbmRleCksIEdQUkluZm86Om5vbkFyZ0dQUjApOwor
ICAgIGlmIChPcHRpb25zOjpmdGxPU1JFeGl0VXNlc1N0YWNrbWFwKCkpCisgICAgICAgIHB1c2go
VHJ1c3RlZEltbTMyKGluZGV4KSk7CisgICAgZWxzZQorICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihpbmRleCksIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGluZm8ubV90aHVua0p1bXAgPSBw
YXRjaGFibGVKdW1wKCk7CiAgICAgCiAgICAgbV9kaWRUaGluZ3MgPSB0cnVlOwogfQogCit2b2lk
IEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rcygpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc3RhdGUub3NyRXhpdC5zaXplKCk7ICsraSkKKyAgICAgICAgZW1pdFRodW5r
KGkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0
VGh1bmtHZW5lcmF0b3IuaAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsNyBAQCBwdWJsaWM6CiAgICAgfkV4aXRUaHVua0dlbmVyYXRvcigpOwogICAgIAogICAgIHZv
aWQgZW1pdFRodW5rKHVuc2lnbmVkIGluZGV4KTsKKyAgICB2b2lkIGVtaXRUaHVua3MoKTsKICAg
ICAKICAgICBib29sIGRpZFRoaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fZGlkVGhpbmdzOyB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkocmV2aXNpb24g
MTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw3IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoIChr
aW5kKCkpIHsKICAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CiAgICAgICAgIGNhc2Ug
RXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3Rh
Y2tBc0ludDUyOgogICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xNTIsNyArMTUzLDQw
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGlzSW5KU1N0YWNrU29tZWhvdygpKTsKICAgICAg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcih1LnZpcnR1YWxSZWdpc3Rlcik7CiAgICAgfQotICAg
IAorCisgICAgLy8gSWYgaXQncyBpbiB0aGUgSlNTdGFjayBzb21laG93LCB0aGlzIHdpbGwgdGVs
bCB5b3Ugd2hhdCBmb3JtYXQgaXQncyBpbiwgaW4gYSBtYW5uZXIKKyAgICAvLyB0aGF0IGlzIGNv
bXBhdGlibGUgd2l0aCBleGl0QXJndW1lbnQoKS5mb3JtYXQoKS4gSWYgaXQncyBhIGNvbnN0YW50
IG9yIGl0J3MgZGVhZCwgaXQKKyAgICAvLyB3aWxsIGNsYWltIHRvIGJlIGEgSlNWYWx1ZS4gSWYg
aXQncyBhbiBhcmd1bWVudCB0aGVuIGl0IHdpbGwgdGVsbCB5b3UgdGhlIGFyZ3VtZW50J3MKKyAg
ICAvLyBmb3JtYXQuCisgICAgVmFsdWVGb3JtYXQgdmFsdWVGb3JtYXQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnZhbGlkRXhpdFZhbHVl
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IHJldHVybiBJbnZhbGlkVmFsdWVGb3JtYXQ7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBF
eGl0VmFsdWVEZWFkOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgorICAgICAgICBj
YXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZUZvcm1hdEpT
VmFsdWU7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKKyAg
ICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoKS5mb3JtYXQoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAgICAgICAgICByZXR1
cm4gVmFsdWVGb3JtYXRJbnQzMjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEV4aXRWYWx1
ZUluSlNTdGFja0FzSW50NTI6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVGb3JtYXRJbnQ1MjsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgor
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlRm9ybWF0RG91YmxlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
SW52YWxpZFZhbHVlRm9ybWF0OworICAgIH0KKwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0
KikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZhaWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRmFpbC5jcHAJ
KHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRmFpbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDggQEAgdm9pZCBmYWlsKFN0YXRlJiBzdGF0
ZSkKIHsKICAgICBzdGF0ZS5ncmFwaC5tX3BsYW4uZmluYWxpemVyID0gYWRvcHRQdHIobmV3IEZh
aWxlZEZpbmFsaXplcihzdGF0ZS5ncmFwaC5tX3BsYW4pKTsKICAgICAKLSAgICBMTFZNRGlzcG9z
ZU1vZHVsZShzdGF0ZS5tb2R1bGUpOworICAgIGlmIChzdGF0ZS5tb2R1bGUpCisgICAgICAgIExM
Vk1EaXNwb3NlTW9kdWxlKHN0YXRlLm1vZHVsZSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3Np
dG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8obXVsV2l0
aE92ZXJmbG93NjQsICJsbHZtLnNtdWwud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUo
c3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAog
ICAgIG1hY3JvKHN1YldpdGhPdmVyZmxvdzMyLCAibGx2bS5zc3ViLndpdGgub3ZlcmZsb3cuaTMy
IiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250ZXh0LCBpbnQzMiwgYm9vbGVhbiksIGlu
dDMyLCBpbnQzMikpIFwKICAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3c2NCwgImxsdm0uc3N1Yi53
aXRoLm92ZXJmbG93Lmk2NCIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50
NjQsIGJvb2xlYW4pLCBpbnQ2NCwgaW50NjQpKSBcCisgICAgbWFjcm8od2Via2l0U3RhY2ttYXAs
ICJsbHZtLndlYmtpdC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIsIGlu
dDMyLCBWYXJpYWRpYykpIFwKICAgICBtYWNybyh0cmFwLCAibGx2bS50cmFwIiwgZnVuY3Rpb25U
eXBlKHZvaWRUeXBlKSkgXAogICAgIG1hY3JvKG9zckV4aXQsICJ3ZWJraXRfb3NyX2V4aXQiLCBm
dW5jdGlvblR5cGUodm9pZFR5cGUsIGJvb2xlYW4sIGludDMyLCBWYXJpYWRpYykpCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxNTcxMTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUg
IkZUTE9TUkV4aXQuaCIKKyNpbmNsdWRlICJGVExTdGFja01hcHMuaCIKICNpbmNsdWRlICJKSVRD
b2RlLmgiCiAjaW5jbHVkZSA8d3RmL0xMVk1IZWFkZXJzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWRBcnJheS5oPgpAQCAtNjcsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgREZHOjpD
b21tb25EYXRhIGNvbW1vbjsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4gb3NyRXhp
dDsKKyAgICBTdGFja01hcHMgc3RhY2ttYXBzOwogICAgIAogcHJpdmF0ZToKICAgICBWZWN0b3I8
UmVmQ291bnRlZEFycmF5PExTZWN0aW9uV29yZD4+IG1fZGF0YVNlY3Rpb25zOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlz
aW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxMSBAQCB1c2luZyBuYW1lc3BhY2Ug
REZHOwogCiBzdGF0aWMgaW50IGNvbXBpbGVDb3VudGVyOwogCitzdGF0aWMgYm9vbCBnZW5lcmF0
ZUV4aXRUaHVua3MoKQoreworICAgIHJldHVybiAhT3B0aW9uczo6dXNlTExWTU9TUkV4aXRJbnRy
aW5zaWMoKSAmJiAhT3B0aW9uczo6ZnRsT1NSRXhpdFVzZXNTdGFja21hcCgpOworfQorCiAvLyBV
c2luZyB0aGlzIGluc3RlYWQgb2YgdHlwZUNoZWNrKCkgaGVscHMgdG8gcmVkdWNlIHRoZSBsb2Fk
IG9uIExMVk0sIGJ5IGNyZWF0aW5nCiAvLyBzaWduaWZpY2FudGx5IGxlc3MgZGVhZCBjb2RlLgog
I2RlZmluZSBGVExfVFlQRV9DSEVDSyhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGZhaWxDb25kaXRpb24pIGRvIHsgXApAQCAtNzUsNiArODAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCiAgICAgICAgICwgbV9zdGF0ZShz
dGF0ZS5ncmFwaCkKICAgICAgICAgLCBtX2ludGVycHJldGVyKHN0YXRlLmdyYXBoLCBtX3N0YXRl
KQorICAgICAgICAsIG1fc3RhY2ttYXBJRHMoMCkKICAgICB7CiAgICAgfQogICAgIApAQCAtMzI1
Niw4ICszMjYyLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChmYWlsQ29uZGl0aW9uLCBmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKIAotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSk7Ci0gICAgICAgICAgICBpbmZvLm1fdGh1
bmtBZGRyZXNzID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5pbnRQdHIpOwor
ICAgICAgICAgICAgaWYgKGdlbmVyYXRlRXhpdFRodW5rcygpKSB7CisgICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSk7CisgICAgICAgICAgICAgICAgaW5mby5tX3RodW5r
QWRkcmVzc1ZhbHVlID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291dC5pbnRQdHIp
OworICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIH0KQEAgLTMyNjUsNyAr
MzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChPcHRpb25zOjpmdGxPU1JFeGl0T21pdHNN
YXJzaGFsbGluZygpKSB7CiAgICAgICAgICAgICBtX291dC5jYWxsKAogICAgICAgICAgICAgICAg
IG1fb3V0LmludFRvUHRyKAotICAgICAgICAgICAgICAgICAgICBtX291dC5nZXQoaW5mby5tX3Ro
dW5rQWRkcmVzcyksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmdldChpbmZvLm1fdGh1bmtB
ZGRyZXNzVmFsdWUpLAogICAgICAgICAgICAgICAgICAgICBwb2ludGVyVHlwZShmdW5jdGlvblR5
cGUobV9vdXQudm9pZFR5cGUpKSkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGVtaXRP
U1JFeGl0Q2FsbChmYWlsQ29uZGl0aW9uLCBpbmRleCwgZXhpdCwgaW5mbywgbG93VmFsdWUsIGRp
cmVjdGlvbiwgcmVjb3ZlcnkpOwpAQCAtMzI3NSw3ICszMjgzLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CiAgICAgICAgIAotICAgICAgICAgICAgbV9leGl0VGh1bmtHZW5lcmF0b3IuZW1pdFRodW5r
KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChnZW5lcmF0ZUV4aXRUaHVua3MoKSkKKyAgICAgICAg
ICAgICAgICBtX2V4aXRUaHVua0dlbmVyYXRvci5lbWl0VGh1bmsoaW5kZXgpOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtMzM0MSw5ICszMzUwLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpmdGxP
U1JFeGl0VXNlc1N0YWNrbWFwKCkpIHsKKyAgICAgICAgICAgIGV4aXQubV9zdGFja21hcElEID0g
bV9zdGFja21hcElEcysrOworICAgICAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5j
b25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKKyAg
ICAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMihleGl0Lm1fc3Rh
Y2ttYXBJRCkpOworICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQud2Via2l0
U3RhY2ttYXBJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgbV9vdXQuY2FsbCgKICAgICAgICAgICAgIG1fb3V0
LmludFRvUHRyKAotICAgICAgICAgICAgICAgIG1fb3V0LmdldChpbmZvLm1fdGh1bmtBZGRyZXNz
KSwKKyAgICAgICAgICAgICAgICBtX291dC5nZXQoaW5mby5tX3RodW5rQWRkcmVzc1ZhbHVlKSwK
ICAgICAgICAgICAgICAgICBwb2ludGVyVHlwZShmdW5jdGlvblR5cGUobV9vdXQudm9pZFR5cGUs
IGFyZ3VtZW50VHlwZXMpKSksCiAgICAgICAgICAgICBhcmd1bWVudHMpOwogICAgIH0KQEAgLTM0
OTksNyArMzUxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KAogICAg
ICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigKICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5tX3RodW5rTGFiZWwpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpLAotICAgICAgICAgICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzKTsKKyAg
ICAgICAgICAgICAgICAgICAgaW5mby5tX3RodW5rQWRkcmVzc1ZhbHVlKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGV4aXQubV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZl
ci0+b2Zmc2V0T2YoaW5mby5tX3RodW5rSnVtcCk7CiAgICAgICAgICAgICB9CkBAIC0zNjk2LDYg
KzM3MTQsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4OwogICAgIE5vZGUq
IG1fbm9kZTsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICAKKyAg
ICB1aW50MzJfdCBtX3N0YWNrbWFwSURzOwogfTsKIAogdm9pZCBsb3dlckRGR1RvTExWTShTdGF0
ZSYgc3RhdGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkocmV2
aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsOCBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1Ymxp
YyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgCiAgICAgT3BlcmFuZHM8RXhpdFZhbHVlPiBtX3ZhbHVl
czsKICAgICAKKyAgICB1aW50MzJfdCBtX3N0YWNrbWFwSUQ7CisgICAgCiAgICAgQ29kZUxvY2F0
aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBj
b25zdDsKICAgICAKICAgICB2b2lkIGNvbnZlcnRUb0ZvcndhcmQoCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaAko
cmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxNCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHN0cnVjdCBPU1JFeGl0Q29tcGlsYXRpb25J
bmZvIHsKICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkKLSAgICAgICAgOiBtX3RodW5rQWRk
cmVzcygwKQorICAgICAgICA6IG1fdGh1bmtBZGRyZXNzVmFsdWUoMCkKICAgICB7CiAgICAgfQog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3RodW5rTGFiZWw7CiAgICAgTWFjcm9B
c3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV90aHVua0p1bXA7Ci0gICAgTFZhbHVlIG1fdGh1bmtB
ZGRyZXNzOworICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fdGh1bmtBZGRyZXNzOworICAgIExWYWx1
ZSBtX3RodW5rQWRkcmVzc1ZhbHVlOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVy
LmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUu
aCIKICNpbmNsdWRlICJGVExPU1JFeGl0LmgiCisjaW5jbHVkZSAiRlRMU2F2ZVJlc3RvcmUuaCIK
ICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogCkBA
IC00MSw3ICs0MiwxMzUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB1c2lu
ZyBuYW1lc3BhY2UgREZHOwogCi1zdGF0aWMgdm9pZCBjb21waWxlU3R1YigKKy8vIFRoaXMgaW1w
bGVtZW50cyB0d28gZmxhdm9ycyBvZiBPU1IgZXhpdDogb25lIHRoYXQgaW52b2x2ZXMgaGF2aW5n
IExMVk0gaW50cmluc2ljcyB0byBoZWxwCisvLyBPU1IgZXhpdCwgYW5kIG9uZSB0aGF0IGRvZXNu
J3QuIFRoZSBvbmUgdGhhdCBkb2Vzbid0IHdpbGwgZ2V0IGtpbGxlZCBvZmYsIHNvIHdlIGRvbid0
IGF0dGVtcHQKKy8vIHRvIHNoYXJlIGNvZGUgYmV0d2VlbiB0aGUgdHdvLgorCitzdGF0aWMgdm9p
ZCBjb21waWxlU3R1YldpdGhPU1JFeGl0U3RhY2ttYXAoCisgICAgdW5zaWduZWQgZXhpdElELCBK
SVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayogY29kZUJs
b2NrKQoreworICAgIFN0YWNrTWFwczo6UmVjb3JkKiByZWNvcmQ7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gaml0Q29kZS0+c3RhY2ttYXBzLnJlY29yZHMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgIHJlY29yZCA9ICZqaXRDb2RlLT5zdGFja21hcHMucmVjb3Jkc1tpXTsKKyAgICAgICAg
aWYgKHJlY29yZC0+cGF0Y2hwb2ludElEID09IGV4aXQubV9zdGFja21hcElEKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHJlY29yZC0+cGF0Y2hw
b2ludElEID09IGV4aXQubV9zdGFja21hcElEKTsKKyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0
KHZtLCBjb2RlQmxvY2spOworICAgIAorICAgIC8vIFdlIG5lZWQgc2NyYXRjaCBzcGFjZSB0byBz
YXZlIGFsbCByZWdpc3RlcnMgYW5kIHRvIGJ1aWxkIHVwIHRoZSBKU1N0YWNrLgorICAgIC8vIFVz
ZSBhIHNjcmF0Y2ggYnVmZmVyIHRvIHRyYW5zZmVyIGFsbCB2YWx1ZXMuCisgICAgU2NyYXRjaEJ1
ZmZlciogc2NyYXRjaEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICogZXhpdC5tX3ZhbHVlcy5zaXplKCkgKyByZXF1aXJlZFNjcmF0Y2hNZW1v
cnlTaXplSW5CeXRlcygpKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHNjcmF0Y2hC
dWZmZXIgPyBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFC
dWZmZXIoKSkgOiAwOworICAgIGNoYXIqIHJlZ2lzdGVyU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxj
aGFyKj4oc2NyYXRjaCArIGV4aXQubV92YWx1ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBzYXZlQWxs
UmVnaXN0ZXJzKGppdCwgcmVnaXN0ZXJTY3JhdGNoKTsKKyAgICAKKyAgICAvLyBCcmluZyB0aGUg
c3RhY2sgYmFjayBpbnRvIGEgc2FuZSBmb3JtLgorICAgIGppdC5wb3AoR1BSSW5mbzo6cmVnVDAp
OworICAgIAorICAgIC8vIEdldCB0aGUgY2FsbCBmcmFtZSBhbmQgdGFnIHRoaW5naWVzLgorICAg
IHJlY29yZC0+bG9jYXRpb25zWzBdLnJlc3RvcmVJbnRvKGppdCwgaml0Q29kZS0+c3RhY2ttYXBz
LCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBqaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoVGFnTWFzayksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgCisg
ICAgLy8gRG8gc29tZSB2YWx1ZSBwcm9maWxpbmcuCisgICAgaWYgKGV4aXQubV9wcm9maWxlVmFs
dWVGb3JtYXQgIT0gSW52YWxpZFZhbHVlRm9ybWF0KSB7CisgICAgICAgIHJlY29yZC0+bG9jYXRp
b25zWzFdLnJlc3RvcmVJbnRvKGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0
Y2gsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKKyAg
ICAgICAgICAgIGV4aXQubV9wcm9maWxlVmFsdWVGb3JtYXQsIGppdCwgR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIAorICAgICAgICBpZiAo
ZXhpdC5tX2tpbmQgPT0gQmFkQ2FjaGUgfHwgZXhpdC5tX2tpbmQgPT0gQmFkSW5kZXhpbmdUeXBl
KSB7CisgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdp
bkZvckV4aXRQcm9maWxlOworICAgICAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9m
aWxlID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2Zp
bGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSkgeworICAgICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihHUFJJbmZvOjpyZWdUMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVj
dHVyZSgpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDEsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBHUFJJ
bmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGppdC5sc2hp
ZnQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIGpp
dC5vcjMyKEdQUkluZm86OnJlZ1QyLCBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKGFy
cmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2RlcygpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghIWV4aXQubV92YWx1ZVByb2ZpbGUpCisgICAg
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgZXhpdC5tX3ZhbHVlUHJvZmlsZS5n
ZXRTcGVjRmFpbEJ1Y2tldCgwKSk7CisgICAgfQorCisgICAgLy8gU2F2ZSBhbGwgc3RhdGUgZnJv
bSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0IHdhcywgaW50byB0aGUgYXBwcm9w
cmlhdGUgcGxhY2UgaW4KKyAgICAvLyB0aGUgc2NyYXRjaCBidWZmZXIuIFRoaXMgZG9lc24ndCBy
ZWJveCBhbnkgdmFsdWVzIHlldC4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhp
dC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAgIEV4aXRWYWx1ZSB2YWx1ZSA9
IGV4aXQubV92YWx1ZXNbaW5kZXhdOworICAgICAgICAKKyAgICAgICAgc3dpdGNoICh2YWx1ZS5r
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgorICAgICAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgorICAgICAgICAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3Rh
bnQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICAgICAgcmVjb3JkLT5s
b2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0ucmVzdG9yZUludG8oCisg
ICAgICAgICAgICAgICAgaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrQXNJbnQzMjoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgorICAg
ICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgorICAgICAgICAgICAgaml0Lmxv
YWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmFsdWUudmlydHVhbFJlZ2lzdGVyKCkp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBqaXQuc3Rv
cmU2NChHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaCArIGluZGV4KTsKKyAgICB9CisgICAgCisgICAg
Ly8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGFuZCBwbGFjZSBpdCBi
YWNrIGludG8gdGhlIHN0YWNrLiBUaGlzIHBhcnQgZG9lcworICAgIC8vIGFsbCByZWJveGluZy4K
KyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07
KSB7CisgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpOworICAgICAgICBFeGl0VmFsdWUgdmFsdWUgPSBleGl0Lm1fdmFsdWVzW2luZGV4XTsK
KyAgICAgICAgCisgICAgICAgIGppdC5sb2FkNjQoc2NyYXRjaCArIGluZGV4LCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgIHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQoCisgICAgICAgICAgICB2YWx1
ZS52YWx1ZUZvcm1hdCgpLCBqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDIpOworICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICB9CisgICAgCisgICAgaGFuZGxl
RXhpdENvdW50cyhqaXQsIGV4aXQpOworICAgIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoaml0LCBl
eGl0KTsKKyAgICAKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnBv
cChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5wb3AoR1BS
SW5mbzo6bm9uQXJnR1BSMCk7IC8vIGlnbm9yZSB0aGUgcmVzdWx0LgorICAgIAorICAgIGlmIChl
eGl0Lm1fbGFzdFNldE9wZXJhbmQuaXNWYWxpZCgpKSB7CisgICAgICAgIGppdC5sb2FkNjQoCisg
ICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoZXhpdC5tX2xhc3RTZXRPcGVy
YW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIH0KKyAgICAKKyAgICBh
ZGp1c3RBbmRKdW1wVG9UYXJnZXQoaml0LCBleGl0KTsKKyAgICAKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgJmppdCwgY29kZUJsb2NrKTsKKyAgICBleGl0Lm1fY29kZSA9IEZJTkFM
SVpFX0NPREVfSUYoCisgICAgICAgIHNob3VsZFNob3dEaXNhc3NlbWJseSgpLAorICAgICAgICBw
YXRjaEJ1ZmZlciwKKyAgICAgICAgKCJGVEwgT1NSIGV4aXQgIyV1IChiYyMldSwgJXMpIGZyb20g
JXMsIHdpdGggb3BlcmFuZHMgPSAlcyIsCisgICAgICAgICAgICBleGl0SUQsIGV4aXQubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQu
bV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKKyAgICAgICAgICAgIHRvQ1N0
cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KGV4aXQubV92YWx1ZXMpKS5kYXRhKCkp
KTsKK30KKworc3RhdGljIHZvaWQgY29tcGlsZVN0dWJXaXRob3V0T1NSRXhpdFN0YWNrbWFwKAog
ICAgIHVuc2lnbmVkIGV4aXRJRCwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtLCBjb2RlQmxvY2spOwpAQCAtMjE5
LDExICszNDgsMTUgQEAgZXh0ZXJuICJDIiB2b2lkKiBjb21waWxlRlRMT1NSRXhpdChFeGVjUwog
ICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
Qyh2bS0+aGVhcCk7CiAKLSAgICBPU1JFeGl0JiBleGl0ID0gY29kZUJsb2NrLT5qaXRDb2RlKCkt
PmZ0bCgpLT5vc3JFeGl0W2V4aXRJRF07CisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9j
ay0+aml0Q29kZSgpLT5mdGwoKTsKKyAgICBPU1JFeGl0JiBleGl0ID0gaml0Q29kZS0+b3NyRXhp
dFtleGl0SURdOwogICAgIAogICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVjLCBl
eGl0Lm1fY29kZU9yaWdpbik7CiAgICAgCi0gICAgY29tcGlsZVN0dWIoZXhpdElELCBleGl0LCB2
bSwgY29kZUJsb2NrKTsKKyAgICBpZiAoT3B0aW9uczo6ZnRsT1NSRXhpdFVzZXNTdGFja21hcCgp
KQorICAgICAgICBjb21waWxlU3R1YldpdGhPU1JFeGl0U3RhY2ttYXAoZXhpdElELCBqaXRDb2Rl
LCBleGl0LCB2bSwgY29kZUJsb2NrKTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBpbGVTdHViV2l0
aG91dE9TUkV4aXRTdGFja21hcChleGl0SUQsIGV4aXQsIHZtLCBjb2RlQmxvY2spOwogICAgIAog
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTYXZlUmVz
dG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTYXZl
UmVzdG9yZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNhdmVSZXN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
KyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNs
dWRlICJHUFJJbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworc3Rh
dGljIHNpemVfdCBieXRlc0ZvckdQUnMoKQoreworICAgIHJldHVybiAoTWFjcm9Bc3NlbWJsZXI6
Omxhc3RSZWdpc3RlcigpIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSArIDEpICog
c2l6ZW9mKGludDY0X3QpOworfQorCitzaXplX3QgcmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUlu
Qnl0ZXMoKQoreworICAgIHJldHVybiBieXRlc0ZvckdQUnMoKSArIEZQUkluZm86Om51bWJlck9m
QXJndW1lbnRSZWdpc3RlcnMgKiBzaXplb2YoZG91YmxlKTsKK30KKworc2l6ZV90IG9mZnNldE9m
R1BSKEdQUlJlZyByZWcpCit7CisgICAgcmV0dXJuIChyZWcgLSBNYWNyb0Fzc2VtYmxlcjo6Zmly
c3RSZWdpc3RlcigpKSAqIHNpemVvZihpbnQ2NF90KTsKK30KKwordm9pZCBzYXZlQWxsUmVnaXN0
ZXJzKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNoYXIqIHNjcmF0Y2hNZW1vcnkpCit7CisgICAgLy8g
R2V0IHRoZSBmaXJzdCByZWdpc3RlciBvdXQgb2YgdGhlIHdheSwgc28gdGhhdCB3ZSBjYW4gdXNl
IGl0IGFzIGEgcG9pbnRlci4KKyAgICBqaXQucG9rZTY0KE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJl
YWxSZWdpc3RlcigpLCAwKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzY3JhdGNoTWVtb3J5KSwgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVhbFJlZ2lzdGVyKCkp
OworICAgIAorICAgIC8vIEdldCBhbGwgb2YgdGhlIG90aGVyIEdQUnMgb3V0IG9mIHRoZSB3YXku
CisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2VtYmxl
cjo6c2Vjb25kUmVhbFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lz
dGVyKCk7IHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpuZXh0UmVnaXN0ZXIocmVnKSkKKyAgICAgICAg
aml0LnN0b3JlNjQocmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6
Zmlyc3RSZWFsUmVnaXN0ZXIoKSwgb2Zmc2V0T2ZHUFIocmVnKSkpOworICAgIAorICAgIC8vIFJl
c3RvcmUgdGhlIGZpcnN0IHJlZ2lzdGVyIGludG8gdGhlIHNlY29uZCBvbmUgYW5kIHNhdmUgaXQu
CisgICAgaml0LnBlZWs2NChNYWNyb0Fzc2VtYmxlcjo6c2Vjb25kUmVhbFJlZ2lzdGVyKCksIDAp
OworICAgIGppdC5zdG9yZTY0KE1hY3JvQXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0ZXIoKSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVhbFJlZ2lzdGVy
KCksIG9mZnNldE9mR1BSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpKSkpOwor
ICAgIAorICAgIC8vIFNhdmUgYWxsIEZQIGFyZ3VtZW50IHJlZ2lzdGVycy4KKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGFjdHVhbGx5IGJlIHNhdmluZyBhbGwgRlAgcmVnaXN0ZXJzLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI1MTgKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsg
KytpKSB7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNj
cmF0Y2hNZW1vcnkgKyBieXRlc0ZvckdQUnMoKSArIHNpemVvZihkb3VibGUpICogaSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvQXJndW1lbnRS
ZWdpc3RlcihpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIH0KK30KKwordm9pZCByZXN0b3JlQWxs
UmVnaXN0ZXJzKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNoYXIqIHNjcmF0Y2hNZW1vcnkpCit7Cisg
ICAgLy8gUmVzdG9yZSBhbGwgRlAgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYWN0dWFsbHkgYmUgcmVzdG9yaW5nIGFsbCBGUCByZWdpc3RlcnMuCisgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjUxOAorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyAr
K2kpIHsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2Ny
YXRjaE1lbW9yeSArIGJ5dGVzRm9yR1BScygpICsgc2l6ZW9mKGRvdWJsZSkgKiBpKSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICBqaXQubG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5m
bzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsKKyAgICB9CisgICAgCisgICAgLy8gTm93LCByZXN0
b3JlIGFsbCBHUFJzLgorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHNjcmF0Y2hNZW1vcnkpLCBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWFsUmVnaXN0ZXIoKSk7Cisg
ICAgCisgICAgZm9yIChNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcgPSBNYWNyb0Fzc2Vt
Ymxlcjo6c2Vjb25kUmVhbFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxlcjo6bGFzdFJl
Z2lzdGVyKCk7IHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpuZXh0UmVnaXN0ZXIocmVnKSkKKyAgICAg
ICAgaml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6Zmly
c3RSZWFsUmVnaXN0ZXIoKSwgb2Zmc2V0T2ZHUFIocmVnKSksIHJlZyk7CisgICAgCisgICAgaml0
LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWFs
UmVnaXN0ZXIoKSwgb2Zmc2V0T2ZHUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVhbFJlZ2lzdGVy
KCkpKSwgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVhbFJlZ2lzdGVyKCkpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTYXZlUmVzdG9yZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2F2ZVJlc3RvcmUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2F2ZVJlc3RvcmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgRlRMU2F2ZVJlc3RvcmVfaAorI2RlZmluZSBGVExTYXZlUmVz
dG9yZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklU
KQorCisjaW5jbHVkZSAiR1BSSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFj
cm9Bc3NlbWJsZXI7CisKK25hbWVzcGFjZSBGVEwgeworCitzaXplX3QgcmVxdWlyZWRTY3JhdGNo
TWVtb3J5U2l6ZUluQnl0ZXMoKTsKKworc2l6ZV90IG9mZnNldE9mR1BSKEdQUlJlZyk7CisKKy8v
IEFzc3VtZXMgdGhhdCB0b3Atb2Ytc3RhY2sgY2FuIGJlIHVzZWQgYXMgYSBwb2ludGVyLXNpemVk
IHNjcmF0Y2hwYWQuIFNhdmVzIGFsbCBvZgorLy8gdGhlIHJlZ2lzdGVycyBpbnRvIHRoZSBzY3Jh
dGNoIGJ1ZmZlciBzdWNoIHRoYXQgUmVnaXN0ZXJJRCAqIHNpemVvZihpbnQ2NF90KSBpcyB0aGUK
Ky8vIG9mZnNldCBvZiBldmVyeSByZWdpc3Rlci4KK3ZvaWQgc2F2ZUFsbFJlZ2lzdGVycyhNYWNy
b0Fzc2VtYmxlciYgaml0LCBjaGFyKiBzY3JhdGNoTWVtb3J5KTsKKwordm9pZCByZXN0b3JlQWxs
UmVnaXN0ZXJzKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGNoYXIqIHNjcmF0Y2hNZW1vcnkpOworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwor
I2VuZGlmIC8vIEZUTFNhdmVSZXN0b3JlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK1QgcmVhZE9iamVjdChEYXRhVmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCkK
K3sKKyAgICBUIHJlc3VsdDsKKyAgICByZXN1bHQucGFyc2Uodmlldywgb2Zmc2V0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFN0YWNrTWFwczo6Q29uc3RhbnQ6OnBhcnNlKERhdGFW
aWV3KiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAgIGludGVnZXIgPSB2aWV3LT5yZWFk
PGludDY0X3Q+KG9mZnNldCwgdHJ1ZSk7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpDb25zdGFudDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIjB4JTAxNmxs
eCIsIGludGVnZXIpOworfQorCit2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OnBhcnNlKERhdGFW
aWV3KiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAgIHVpbnQxNl90IHRhZ2dlZFJlZyA9
IHZpZXctPnJlYWQ8dWludDE2X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgaWYgKHN0YXRpY19jYXN0
PGludDE2X3Q+KHRhZ2dlZFJlZykgPCAwKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAg
ICAiRGV0ZWN0ZWQgYSBuZWdhdGl2ZSB0YWdnZWQgcmVnaXN0ZXIgIiwgc3RhdGljX2Nhc3Q8aW50
MTZfdD4odGFnZ2VkUmVnKSwKKyAgICAgICAgICAgICIgYXQgb2Zmc2V0ICIsIG9mZnNldCwgIlxu
Iik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIGR3
YXJmUmVnTnVtID0gdGFnZ2VkUmVnICYgKCgxIDw8IDEyKSAtIDEpOworICAgIGtpbmQgPSBzdGF0
aWNfY2FzdDxLaW5kPih0YWdnZWRSZWcgPj4gMTIpOworCisgICAgdGhpcy0+b2Zmc2V0ID0gdmll
dy0+cmVhZDxpbnQxNl90PihvZmZzZXQsIHRydWUpOworfQorCit2b2lkIFN0YWNrTWFwczo6TG9j
YXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigi
LCBraW5kLCAiLCByZWciLCBkd2FyZlJlZ051bSwgIiwgIiwgb2Zmc2V0LCAiKSIpOworfQorCiti
b29sIFN0YWNrTWFwczo6TG9jYXRpb246Omludm9sdmVzR1BSKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaXNHUFIoKSB8fCBraW5kID09IEluZGlyZWN0OworfQorCisjaWYgQ1BVKFg4Nl82NCkgLy8g
Q1BVIGNhc2VzIGZvciBTdGFja01hcHM6OkxvY2F0aW9uCisvLyBUaGlzIGRlY29kZXMgRHdhcmYg
Zmxhdm91ciAwIGZvciB4ODYtNjQuCitib29sIFN0YWNrTWFwczo6TG9jYXRpb246OmlzR1BSKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4ga2luZCA9PSBSZWdpc3RlciAmJiBkd2FyZlJlZ051bSA8IDE2
OworfQorCitHUFJSZWcgU3RhY2tNYXBzOjpMb2NhdGlvbjo6Z3ByKCkgY29uc3QKK3sKKyAgICAv
LyBTdHVwaWRseSwgRHdhcmYgZG9lc24ndCBudW1iZXIgdGhlIHJlZ2lzdGVycyBpbiB0aGUgc2Ft
ZSB3YXkgYXMgdGhlIGFyY2hpdGVjdHVyZTsKKyAgICAvLyBmb3IgZXhhbXBsZSwgdGhlIGFyY2hp
dGVjdHVyZSBlbmNvZGVzIENYIGFzIDEgYW5kIERYIGFzIDIgd2hpbGUgRHdhcmYgZG9lcyB0aGUK
KyAgICAvLyBvcHBvc2l0ZS4gSGVuY2Ugd2UgbmVlZCB0aGUgc3dpdGNoLgorICAgIAorICAgIHN3
aXRjaCAoZHdhcmZSZWdOdW0pIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBYODZSZWdp
c3RlcnM6OmVheDsKKyAgICBjYXNlIDE6CisgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OmVk
eDsKKyAgICBjYXNlIDI6CisgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBj
YXNlIDM6CisgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OmVieDsKKyAgICBjYXNlIDQ6Cisg
ICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OmVzaTsKKyAgICBjYXNlIDU6CisgICAgICAgIHJl
dHVybiBYODZSZWdpc3RlcnM6OmVkaTsKKyAgICBjYXNlIDY6CisgICAgICAgIHJldHVybiBYODZS
ZWdpc3RlcnM6OmVicDsKKyAgICBjYXNlIDc6CisgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6
OmVzcDsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVChkd2FyZlJlZ051bSA8
IDE2KTsKKyAgICAgICAgLy8gUmVnaXN0ZXJzIHI4Li5yMTUgYXJlIG51bWJlcmVkIHNlbnNpYmx5
LgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihkd2FyZlJlZ051bSk7CisgICAg
fQorfQorCit2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OnJlc3RvcmVJbnRvKAorICAgIE1hY3Jv
QXNzZW1ibGVyJiBqaXQsIGNvbnN0IFN0YWNrTWFwcyYgc3RhY2ttYXBzLCBjaGFyKiBzYXZlZFJl
Z2lzdGVycywgR1BSUmVnIHJlc3VsdCkKK3sKKyAgICBpZiAoaXNHUFIoKSkgeworICAgICAgICBq
aXQubG9hZDY0KHNhdmVkUmVnaXN0ZXJzICsgb2Zmc2V0T2ZHUFIoZ3ByKCkpLCByZXN1bHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNh
c2UgUmVnaXN0ZXI6CisgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3Ro
ZXIgcmVnaXN0ZXJzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIyNTE4CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJbmRpcmVjdDoKKyAgICAgICAgaml0
LmxvYWQ2NChzYXZlZFJlZ2lzdGVycyArIG9mZnNldE9mR1BSKGdwcigpKSwgcmVzdWx0KTsKKyAg
ICAgICAgaml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHQsIG9mZnNldCks
IHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDb25zdGFudDoK
KyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihvZmZzZXQpLCBy
ZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ29uc3RhbnRJbmRl
eDoKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChzdGFja21h
cHMuY29uc3RhbnRzW29mZnNldF0uaW50ZWdlciksIHJlc3VsdCk7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBVbnByb2Nlc3NlZDoKKyAgICAgICAgLy8gU2hvdWxkIG5ldmVy
IHNlZSB0aGlzIC0gaXQncyBhbiBlbnVtZXJhdGlvbiBlbnRyeSBvbiBMTFZNJ3Mgc2lkZSB0aGF0
IG1lYW5zIHRoYXQKKyAgICAgICAgLy8gaXQgaGFzbid0IHByb2Nlc3NlZCB0aGlzIGxvY2F0aW9u
LgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisjZWxz
ZSAvLyBDUFUgY2FzZXMgZm9yIFN0YWNrTWFwczo6TG9jYXRpb24KKyNlcnJvciAiQ1BVIGFyY2hp
dGVjdHVyZSBub3Qgc3VwcG9ydGVkLiIKKyNlbmRpZiAvLyBDUFUgY2FzZXMgZm9yIFN0YWNrTWFw
czo6TG9jYXRpb24KKworYm9vbCBTdGFja01hcHM6OlJlY29yZDo6cGFyc2UoRGF0YVZpZXcqIHZp
ZXcsIHVuc2lnbmVkJiBvZmZzZXQpCit7CisgICAgcGF0Y2hwb2ludElEID0gdmlldy0+cmVhZDx1
aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGF0
Y2hwb2ludElEKSA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpbnN0cnVj
dGlvbk9mZnNldCA9IHZpZXctPnJlYWQ8dWludDMyX3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgZmxh
Z3MgPSB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOworICAgIAorICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHZpZXctPnJlYWQ8dWludDE2X3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgd2hp
bGUgKGxlbmd0aC0tKQorICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKHJlYWRPYmplY3Q8TG9jYXRp
b24+KHZpZXcsIG9mZnNldCkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFN0
YWNrTWFwczo6UmVjb3JkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KAorICAgICAgICAiKCMiLCBwYXRjaHBvaW50SUQsICIsIG9mZnNldCA9ICIsIGluc3Ry
dWN0aW9uT2Zmc2V0LCAiLCBmbGFncyA9ICIsIGZsYWdzLAorICAgICAgICAiLCBbIiwgbGlzdER1
bXAobG9jYXRpb25zKSwgIl0pIik7Cit9CisKK2Jvb2wgU3RhY2tNYXBzOjpwYXJzZShEYXRhVmll
dyogdmlldykKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOworICAgIAorICAgIHVpbnQzMl90
IG51bUNvbnN0YW50cyA9IHZpZXctPnJlYWQ8dWludDMyX3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAg
d2hpbGUgKG51bUNvbnN0YW50cy0tKQorICAgICAgICBjb25zdGFudHMuYXBwZW5kKHJlYWRPYmpl
Y3Q8Q29uc3RhbnQ+KHZpZXcsIG9mZnNldCkpOworICAgIAorICAgIHVpbnQzMl90IG51bVJlY29y
ZHMgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOworICAgIHdoaWxlIChudW1S
ZWNvcmRzLS0pIHsKKyAgICAgICAgUmVjb3JkIHJlY29yZDsKKyAgICAgICAgaWYgKCFyZWNvcmQu
cGFyc2Uodmlldywgb2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmVjb3Jkcy5hcHBlbmQocmVjb3JkKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgU3RhY2tNYXBzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJDb25zdGFudHM6WyIsIGxpc3REdW1wKGNvbnN0YW50cyksICJdLCBSZWNvcmRz
OlsiLCBsaXN0RHVtcChyZWNvcmRzKSwgIl0iKTsKK30KKwordm9pZCBTdGFja01hcHM6OmR1bXBN
dWx0aWxpbmUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4KSBjb25zdAorewor
ICAgIG91dC5wcmludChwcmVmaXgsICJDb25zdGFudHM6XG4iKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY29uc3RhbnRzLnNpemUoKTsgKytpKQorICAgICAgICBvdXQucHJpbnQocHJl
Zml4LCAiICAgICIsIGNvbnN0YW50c1tpXSwgIlxuIik7CisgICAgb3V0LnByaW50KHByZWZpeCwg
IlJlY29yZHM6XG4iKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjb3Jkcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgICAiLCByZWNvcmRzW2ldLCAi
XG4iKTsKK30KKworU3RhY2tNYXBzOjpSZWNvcmRNYXAgU3RhY2tNYXBzOjpnZXRSZWNvcmRNYXAo
KSBjb25zdAoreworICAgIFJlY29yZE1hcCByZXN1bHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
cmVjb3Jkcy5zaXplKCk7IGktLTspCisgICAgICAgIHJlc3VsdC5hZGQocmVjb3Jkc1tpXS5wYXRj
aHBvaW50SUQsIHJlY29yZHNbaV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M6OkZUTDsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0YWNrTWFw
czo6TG9jYXRpb246OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IFN0YWNrTWFwczo6TG9jYXRpb246OlVucHJvY2Vzc2VkOgorICAgICAgICBvdXQucHJpbnQoIlVu
cHJvY2Vzc2VkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRp
b246OlJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246OkluZGlyZWN0OgorICAgICAgICBv
dXQucHJpbnQoIkluZGlyZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrTWFw
czo6TG9jYXRpb246OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246OkNvbnN0YW50SW5k
ZXg6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnRJbmRleCIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGRhdGFMb2coIlVucmVjb2duaXplZCBraW5kOiAiLCBzdGF0aWNfY2FzdDxp
bnQ+KGtpbmQpLCAiXG4iKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgRlRMU3RhY2tNYXBzX2gKKyNkZWZpbmUgRlRMU3RhY2tNYXBzX2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNp
bmNsdWRlICJEYXRhVmlldy5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJKU0NK
U1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIE1hY3JvQXNzZW1ibGVyOworCituYW1lc3BhY2UgRlRMIHsKKworc3RydWN0IFN0YWNr
TWFwcyB7CisgICAgdW5pb24gQ29uc3RhbnQgeworICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZTsKKyAgICAgICAgaW50NjRfdCBpbnRlZ2VyOworICAgICAgICAKKyAgICAgICAgdm9pZCBwYXJz
ZShEYXRhVmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCk7CisgICAgICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICB9OworICAgIAorICAgIHN0cnVjdCBMb2NhdGlv
biB7CisgICAgICAgIGVudW0gS2luZCB7CisgICAgICAgICAgICBVbnByb2Nlc3NlZCwKKyAgICAg
ICAgICAgIFJlZ2lzdGVyLAorICAgICAgICAgICAgSW5kaXJlY3QsCisgICAgICAgICAgICBDb25z
dGFudCwKKyAgICAgICAgICAgIENvbnN0YW50SW5kZXgKKyAgICAgICAgfTsKKyAgICAgICAgCisg
ICAgICAgIHVpbnQxNl90IGR3YXJmUmVnTnVtOyAvLyBSZXByZXNlbnRlZCBhcyBhIDEyLWJpdCBp
bnQgaW4gdGhlIHNlY3Rpb24uCisgICAgICAgIEtpbmQga2luZDsKKyAgICAgICAgaW50MTZfdCBv
ZmZzZXQ7CisgICAgICAgIAorICAgICAgICB2b2lkIHBhcnNlKERhdGFWaWV3KiB2aWV3LCB1bnNp
Z25lZCYgb2Zmc2V0KTsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
OworICAgICAgICAKKyAgICAgICAgYm9vbCBpc0dQUigpIGNvbnN0OworICAgICAgICBib29sIGlu
dm9sdmVzR1BSKCkgY29uc3Q7CisgICAgICAgIEdQUlJlZyBncHIoKSBjb25zdDsKKyAgICAgICAg
CisgICAgICAgIC8vIEFzc3VtaW5nIHRoYXQgYWxsIHJlZ2lzdGVycyBhcmUgc2F2ZWQgdG8gdGhl
IHNhdmVkUmVnaXN0ZXJzIGJ1ZmZlciBhY2NvcmRpbmcKKyAgICAgICAgLy8gdG8gRlRMU2F2ZVJl
c3RvcmUgY29udmVudGlvbiwgdGhpcyBsb2FkcyB0aGUgdmFsdWUgaW50byB0aGUgZ2l2ZW4gcmVn
aXN0ZXIuCisgICAgICAgIC8vIFRoZSBjb2RlIHRoYXQgdGhpcyBnZW5lcmF0ZXMgaXNuJ3QgZXhh
Y3RseSBzdXBlciBmYXN0LgorICAgICAgICB2b2lkIHJlc3RvcmVJbnRvKAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXImLCBjb25zdCBTdGFja01hcHMmIHN0YWNrbWFwcywgY2hhciogc2F2ZWRS
ZWdpc3RlcnMsCisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0KTsKKyAgICB9OworICAgIAorICAg
IHN0cnVjdCBSZWNvcmQgeworICAgICAgICB1aW50MzJfdCBwYXRjaHBvaW50SUQ7CisgICAgICAg
IHVpbnQzMl90IGluc3RydWN0aW9uT2Zmc2V0OworICAgICAgICB1aW50MTZfdCBmbGFnczsKKyAg
ICAgICAgCisgICAgICAgIFZlY3RvcjxMb2NhdGlvbj4gbG9jYXRpb25zOworICAgICAgICAKKyAg
ICAgICAgYm9vbCBwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCk7CisgICAg
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICB9OworICAgIAorICAg
IFZlY3RvcjxDb25zdGFudD4gY29uc3RhbnRzOworICAgIFZlY3RvcjxSZWNvcmQ+IHJlY29yZHM7
CisgICAgCisgICAgYm9vbCBwYXJzZShEYXRhVmlldyogdmlldyk7IC8vIFJldHVybnMgdHJ1ZSBv
biBwYXJzZSBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLiBGYWlsdXJlIG1lYW5zIHRoYXQgTExW
TSBpcyBzaWduYWxpbmcgY29tcGlsZSBmYWlsdXJlIHRvIHVzLgorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICB2b2lkIGR1bXBNdWx0aWxpbmUoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgY2hhciogcHJlZml4KSBjb25zdDsKKyAgICAKKyAgICB0eXBlZGVmIEhhc2hN
YXA8dWludDMyX3QsIFJlY29yZCwgV1RGOjpJbnRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IFJlY29yZE1hcDsKKyAgICAKKyAgICBS
ZWNvcmRNYXAgZ2V0UmVjb3JkTWFwKCkgY29uc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkZUTDo6U3RhY2tNYXBzOjpMb2NhdGlvbjo6S2luZCk7CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExTdGFj
a01hcHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lv
biAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5j
bHVkZSAiRlRMSklURmluYWxpemVyLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9u
SW5mby5oIgorI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC01Nyw2ICs1OCw5
IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbz4gb3NyRXhpdDsK
ICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbjsKICAgICBKSVRGaW5hbGl6
ZXIqIGZpbmFsaXplcjsKKyAgICBWZWN0b3I8Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsKKyAg
ICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKKyAgICBSZWZDb3VudGVkQXJyYXk8
TFNlY3Rpb25Xb3JkPiBzdGFja21hcHNTZWN0aW9uOwogICAgIAogICAgIHZvaWQgZHVtcFN0YXRl
KGNvbnN0IGNoYXIqIHdoZW4pOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFRodW5rcy5jcHAJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDEyIEBACiAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1
ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsZXIuaCIKKyNpbmNsdWRl
ICJGVExTYXZlUmVzdG9yZS5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewogCkBAIC00MCw3ICs0MSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgREZH
OwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRv
cihWTSogdm0pCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXIgaml0OworICAgIEFzc2VtYmx5SGVscGVy
cyBqaXQodm0sIDApOworICAgIAorICAgIC8vIE5vdGUgdGhhdCBpbiB0aGUgZnRsT1NSRXhpdFVz
ZXNTdGFja21hcCgpIGNhc2UsIHRoZSAicmV0dXJuIGFkZHJlc3MiIHdpbGwgYmUgdGhlCisgICAg
Ly8gT1NSIGV4aXQgSUQuCiAgICAgCiAgICAgLy8gUHJldGVuZCB0aGF0IHdlJ3JlIGEgQyBjYWxs
IGZyYW1lLgogICAgIGppdC5wdXNoKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rl
cik7CkBAIC00OCw0NCArNTIsNDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5l
cmF0aW9uVAogICAgIGppdC5wdXNoKEdQUkluZm86OnJlZ1QwKTsKICAgICBqaXQucHVzaChHUFJJ
bmZvOjpyZWdUMCk7CiAgICAgCi0gICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSAqIChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzICsgRlBSSW5m
bzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7Ci0gICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRj
aEJ1ZmZlciA9IHZtLT5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7Ci0gICAgRW5j
b2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRj
aEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQotICAgICAgICBqaXQu
c3RvcmU2NChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSksIGJ1ZmZlciArIGkpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0
ZXJzOyArK2kpIHsKLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyArIGkpLCBHUFJJ
bmZvOjpub25BcmdHUFIxKTsKLSAgICAgICAgaml0LnN0b3JlRG91YmxlKEZQUkluZm86OnRvQXJn
dW1lbnRSZWdpc3RlcihpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Ci0gICAgfQorICAgIGlmICgh
T3B0aW9uczo6ZnRsT1NSRXhpdFVzZXNTdGFja21hcCgpKQorICAgICAgICBqaXQucG9rZShHUFJJ
bmZvOjpub25BcmdHUFIwLCAxKTsKKyAgICAKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVm
ZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJ
bkJ5dGVzKCkpOworICAgIGNoYXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihzY3JhdGNo
QnVmZmVyLT5kYXRhQnVmZmVyKCkpOworICAgIAorICAgIHNhdmVBbGxSZWdpc3RlcnMoaml0LCBi
dWZmZXIpOwogICAgIAogICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBvZiB0aGUg
c2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgogICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Ci0gICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hTaXplKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisgICAg
aml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlcXVpcmVkU2NyYXRj
aE1lbW9yeVNpemVJbkJ5dGVzKCkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKIAogICAgIC8vIGFy
Z3VtZW50IDAgaXMgYWxyZWFkeSB0aGUgY2FsbCBmcmFtZS4KLSAgICBqaXQubW92ZShHUFJJbmZv
Ojpub25BcmdHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGlmIChPcHRpb25zOjpm
dGxPU1JFeGl0VXNlc1N0YWNrbWFwKCkpCisgICAgICAgIGppdC5wZWVrKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgMyk7CisgICAgZWxzZQorICAgICAgICBqaXQucGVlayhHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIDEpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGppdC5j
YWxsKCk7CiAgICAgCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgbm90IHVzaW5nIHRoZSBy
ZXR1cm4gcmVnaXN0ZXIgaWYgaXQncyBhbiBhcmd1bWVudCByZWdpc3Rlci4KLSAgICBqaXQubW92
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgLy8g
QXQgdGhpcyBwb2ludCB3ZSB3YW50IHRvIG1ha2UgYSB0YWlsIGNhbGwgdG8gd2hhdCB3YXMgcmV0
dXJuZWQgdG8gdXMgaW4gdGhlCisgICAgLy8gcmV0dXJuVmFsdWVHUFIuIEJ1dCBhdCB0aGUgc2Ft
ZSB0aW1lIGFzIHdlIGRvIHRoaXMsIHdlIG11c3QgcmVzdG9yZSBhbGwgcmVnaXN0ZXJzLgorICAg
IC8vIFRoZSB3YXkgd2Ugd2lsbCBhY2NvbXBsaXNoIHRoaXMgaXMgYnkgYXJyYW5naW5nIHRvIGhh
dmUgdGhlIHRhaWwgY2FsbCB0YXJnZXQgaW4gdGhlCisgICAgLy8gcmV0dXJuIGFkZHJlc3MgInNs
b3QiIChiZSBpdCBhIHJlZ2lzdGVyIG9yIHRoZSBzdGFjaykuCisgICAgCisgICAgaml0Lm1vdmUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKICAgICAKICAgICAvLyBQ
cmVwYXJlIGZvciB0YWlsIGNhbGwuCi0gICAgaml0LnBvcChHUFJJbmZvOjpub25BcmdHUFIxKTsK
LSAgICBqaXQucG9wKEdQUkluZm86Om5vbkFyZ0dQUjEpOworICAgIGppdC5wb3AoR1BSSW5mbzo6
cmVnVDEpOworICAgIGppdC5wb3AoR1BSSW5mbzo6cmVnVDEpOwogICAgIGppdC5wb3AoTWFjcm9B
c3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKICAgICAKLSAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIo
KSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisgICAgLy8gQXQgdGhp
cyBwb2ludCB3ZSdyZSBzaXR0aW5nIG9uIHRoZSByZXR1cm4gYWRkcmVzcyAtIHNvIGlmIHdlIGRp
ZCBhIGp1bXAgcmlnaHQgbm93LCB0aGUKKyAgICAvLyB0YWlsLWNhbGxlZSB3b3VsZCBiZSBoYXBw
eS4gSW5zdGVhZCB3ZSdsbCBzdGFzaCB0aGUgY2FsbGVlIGluIHRoZSByZXR1cm4gYWRkcmVzcyBh
bmQgdGhlbgorICAgIC8vIHJlc3RvcmUgYWxsIHJlZ2lzdGVycy4KICAgICAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytp
KSB7Ci0gICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJ1ZmZl
ciArIEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMSk7Ci0gICAgICAgIGppdC5sb2FkRG91YmxlKEdQUkluZm86Om5vbkFyZ0dQUjEsIEZQ
UkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7Ci0gICAgfQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCi0gICAg
ICAgIGppdC5sb2FkNjQoYnVmZmVyICsgaSwgR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkp
KTsKKyAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVn
VDApOwogICAgIAotICAgIGppdC5qdW1wKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIHJlc3Rv
cmVBbGxSZWdpc3RlcnMoaml0LCBidWZmZXIpOworCisgICAgaml0LnJldCgpOwogICAgIAogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAg
IHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBjb21waWxlRlRMT1NSRXhpdCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAkocmV2aXNp
b24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDY3IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJ
VCkKIAorI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK3ZvaWQgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKKyAgICBWYWx1ZUZv
cm1hdCBmb3JtYXQsIEFzc2VtYmx5SGVscGVycyYgaml0LCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBz
Y3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAg
Y2FzZSBWYWx1ZUZvcm1hdEludDMyOiB7CisgICAgICAgIGppdC5vcjY0KEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
ICAgICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0VUludDMyOiB7CisgICAgICAgIGppdC5tb3ZlRG91
YmxlVG82NChGUFJJbmZvOjpmcFJlZ1QwLCBzY3JhdGNoMik7CisgICAgICAgIGppdC5ib3hJbnQ1
Mih2YWx1ZSwgdmFsdWUsIHNjcmF0Y2gxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgaml0
Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0SW50NTI6IHsKKyAgICAg
ICAgaml0LnJzaGlmdDY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Omlu
dDUyU2hpZnRBbW91bnQpLCB2YWx1ZSk7CisgICAgICAgIGppdC5tb3ZlRG91YmxlVG82NChGUFJJ
bmZvOjpmcFJlZ1QwLCBzY3JhdGNoMik7CisgICAgICAgIGppdC5ib3hJbnQ1Mih2YWx1ZSwgdmFs
dWUsIHNjcmF0Y2gxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91
YmxlKHNjcmF0Y2gyLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZUZvcm1hdFN0cmljdEludDUyOiB7CisgICAgICAg
IGppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpmcFJlZ1QwLCBzY3JhdGNoMik7CisgICAgICAg
IGppdC5ib3hJbnQ1Mih2YWx1ZSwgdmFsdWUsIHNjcmF0Y2gxLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
KyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZUZvcm1h
dEJvb2xlYW46IHsKKyAgICAgICAgaml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihWYWx1ZUZhbHNlKSwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAg
ICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1ZTogeworICAgICAgICAvLyBEb25lIGFscmVh
ZHkhCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVG
b3JtYXREb3VibGU6IHsKKyAgICAgICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OmZwUmVn
VDAsIHNjcmF0Y2gxKTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHZhbHVlLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKKyAgICAgICAgaml0LmJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB2YWx1
ZSk7CisgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCiBuYW1lc3BhY2UgV1RGIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzo6RlRMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExWYWx1ZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVmFsdWVGb3JtYXQuaAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwx
NCBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBc3NlbWJseUhlbHBlcnM7CisKK25hbWVzcGFj
ZSBGVEwgewogCiAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhd2t3YXJkbHkgc2ltaWxhciB0byBEYXRh
Rm9ybWF0IGluIG90aGVyIHBhcnRzIG9mIEpTQywgZXhjZXB0IHRoYXQKIC8vIHVubGlrZSBEYXRh
Rm9ybWF0IGFuZCBsaWtlIFZhbHVlUmVjb3ZlcnksIGl0IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBV
SW50MzIgYW5kIEludDMyLgpAQCAtNDgsNiArNTMsOSBAQCBlbnVtIFZhbHVlRm9ybWF0IHsKICAg
ICBWYWx1ZUZvcm1hdERvdWJsZQogfTsKIAordm9pZCByZWJveEFjY29yZGluZ1RvRm9ybWF0KAor
ICAgIFZhbHVlRm9ybWF0LCBBc3NlbWJseUhlbHBlcnMmLCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBz
Y3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAog
CiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRhVmlldy5jcHAJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTIgQEAgUGFz
c1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwogfQogCitQYXNz
UmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IHBhc3NlZEJ1ZmZlcikKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3Nl
ZEJ1ZmZlcjsKKyAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpOworfQorCiBKU0FycmF5QnVmZmVyVmlldyogRGF0YVZpZXc6OndyYXAoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIHJldHVybiBKU0RhdGFW
aWV3OjpjcmVhdGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3
LmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgcHJvdGVjdGVkOgogICAg
IAogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFW
aWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPik7CiAgICAgCiAgICAgdmlydHVhbCB1bnNpZ25lZCBi
eXRlTGVuZ3RoKCkgY29uc3QgT1ZFUlJJREUKICAgICB7CkBAIC02OCw2ICs2OSwxNSBAQCBwdWJs
aWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCByZWFkKHVu
c2lnbmVkJiBvZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBib29sKiBzdGF0dXMgPSAwKQorICAg
IHsKKyAgICAgICAgVCByZXN1bHQgPSB0aGlzLT50ZW1wbGF0ZSBnZXQ8VD4ob2Zmc2V0LCBsaXR0
bGVFbmRpYW4sIHN0YXR1cyk7CisgICAgICAgIGlmICghc3RhdHVzIHx8ICpzdGF0dXMpCisgICAg
ICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKFQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQgc2V0KHVuc2lnbmVk
IG9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCiAg
ICAgewogICAgICAgICBpZiAoc3RhdHVzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw5ICsxMjMsMTEgQEAg
dHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25SYW5nZTsKICAgICB2KGJvb2wsIHVzZUxMVk1TbWFs
bENvZGVNb2RlbCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIGZ0bFRyYXBzT25PU1JFeGl0LCBmYWxz
ZSkgXAogICAgIHYoYm9vbCwgZnRsT1NSRXhpdE9taXRzTWFyc2hhbGxpbmcsIGZhbHNlKSBcCisg
ICAgdihib29sLCBmdGxPU1JFeGl0VXNlc1N0YWNrbWFwLCBmYWxzZSkgXAogICAgIHYoYm9vbCwg
dXNlTExWTU9TUkV4aXRJbnRyaW5zaWMsIGZhbHNlKSBcCiAgICAgdihib29sLCBkdW1wTExWTUlS
LCBmYWxzZSkgXAotICAgIHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzLCBmYWxzZSkgXAorICAgIHYo
Ym9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSwgZmFsc2UpIFwKKyAgICB2KGJvb2ws
IGxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmssIGZhbHNlKSBcCiAgICAgdih1bnNpZ25lZCwgbGx2
bUJhY2tlbmRPcHRpbWl6YXRpb25MZXZlbCwgMikgXAogICAgIHYodW5zaWduZWQsIGxsdm1PcHRp
bWl6YXRpb25MZXZlbCwgMikgXAogICAgIHYodW5zaWduZWQsIGxsdm1TaXplTGV2ZWwsIDApIFwK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTcxNTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEzLTEwLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgRlRMIHNob3VsZCBiZSBhYmxlIHRvIGRvIHNpbXBsZSBP
U1IgZXhpdHMgdXNpbmcgbGx2bS53ZWJraXQuc3RhY2ttYXAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjUzOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1ByaW50U3RyZWFtLmNwcDoKKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogd3RmL1ByaW50U3RyZWFtLmg6Cisg
ICAgICAgICogd3RmL1JlZkNvdW50ZWRBcnJheS5oOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVk
QXJyYXk6OmJ5dGVTaXplKToKKwogMjAxMy0xMC0wOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBUdXJuIHRocmVhZGVkIHNjcm9sbGluZyBvbiBmb3Ig
YWxsIE1hYyBwb3J0cy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5jcHAJKHJldmlzaW9uIDE1NzEx
OCkKKysrIFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODksNiArODksMTYgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIHVucwog
ICAgIG91dC5wcmludGYoIiV1IiwgdmFsdWUpOwogfQogCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgc2hvcnQgdmFsdWUpCit7CisgICAgb3V0LnByaW50ZigiJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHZhbHVlKSk7Cit9CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKK3sKKyAgICBvdXQucHJpbnRmKCIldSIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOworfQorCiB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgbG9uZyB2YWx1ZSkKIHsKICAgICBvdXQucHJpbnRmKCIlbGQiLCB2YWx1
ZSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9X
VEYvd3RmL1ByaW50U3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw2ICsyNTcsOCBAQCBp
bmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvCiBpbmxpbmUgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0cmluZyYgdmFsdWUpIHsgcHJpbnRJbnRlcm5h
bChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KHZhbHVlKSk7IH0KIGlubGluZSB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RyaW5nSW1wbCogdmFsdWUpIHsgcHJp
bnRJbnRlcm5hbChvdXQsIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZ0ltcGwqPih2YWx1ZSkpOyB9
CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgYm9v
bCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
c2hvcnQpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIHVuc2lnbmVkIHNob3J0KTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mLCBpbnQpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIHVuc2lnbmVkKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBsb25nKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Jl
ZkNvdW50ZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRB
cnJheS5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw4IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRhKS0+bGVuZ3RoOwogICAgIH0KICAgICAK
KyAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplKCkgKiBzaXplb2YoVCk7
IH0KKyAgICAKICAgICBUKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgVCogYmVnaW4o
KSB7IHJldHVybiBtX2RhdGE7IH0KICAgICBUKiBlbmQoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213746</attachid>
            <date>2013-10-08 20:10:51 -0700</date>
            <delta_ts>2013-10-09 17:23:56 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79521</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MTU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxMy0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgYmUgYWJsZSB0byBkbyBzaW1wbGUgT1NSIGV4aXRzIHVzaW5nIGxsdm0ud2Vi
a2l0LnN0YWNrbWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjI1MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgZ2l2ZXMgdGhlIEZUTCB0aGUgYWJpbGl0eSB0byBPU1IgZXhpdCB1
c2luZyB0aGUgbGx2bS53ZWJraXQuc3RhY2ttYXAgaW50cmluc2ljLgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgRlRMIGNvbXBpbGVzIGFsbCBPU1IgZXhpdCBjYWxscyBhcyBjYWxscyB0byBsbHZt
LndlYmtpdC5zdGFja21hcCB3aXRoIGEgdW5pcXVlCisgICAgICAgICAgSUQsIHBhc3NpbmcgYSBy
ZXF1ZXN0ZWQgc2l6ZSB0aGF0IGlzIGJpZyBlbm91Z2ggZm9yIG93biBqdW1wIHJlcGxhY2VtZW50
LgorICAgICAgICAKKyAgICAgICAgLSBBZnRlciBMTFZNIGNvbXBpbGF0aW9uLCB3ZSBwYXJzZSB0
aGUgbmV3IExMVk0gc3RhY2ttYXAgc2VjdGlvbi4KKyAgICAgICAgCisgICAgICAgIC0gRm9yIGFs
bCBsbHZtLndlYmtpdC5zdGFja21hcHMgdGhhdCB3ZSB1c2VkIGZvciBPU1IgZXhpdHMsIHdlIGRv
IGEganVtcFJlcGxhY2VtZW50LAorICAgICAgICAgIHdoaWNoIHRhcmdldHMgZXhpdCB0aHVua3Mg
dGhhdCB3ZSBnZW5lcmF0ZS4KKyAgICAgICAgCisgICAgICAgIC0gSWYgYW4gZXhpdCB0aHVuayBm
aXJlcywgaXQgY2F1c2VzIEpTQyB0byBjb21waWxlIGFuIGV4aXQgb2ZmLXJhbXAgdGhhdCB1c2Vz
IGEKKyAgICAgICAgICBjb21iaW5hdGlvbiBvZiB0aGUgSlNDLWludGVybmFsIE9TUiBleGl0IGFj
Y291bnRpbmcgKEZUTDo6RXhpdFZhbHVlIGFuZCBmcmllbmRzKSBhbmQKKyAgICAgICAgICBMTFZN
IHN0YWNrbWFwJ3MgYWNjb3VudGluZyBvZiB3aGVyZSBkYXRhIGFjdHVhbGx5IGVuZGVkIHVwIChy
ZWdpc3RlciwgaW5kaXJlY3QsCisgICAgICAgICAgY29uc3RhbnQpIHRvIHJlY29uc3RydWN0IGJ5
dGVjb2RlIHN0YXRlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGlsbCBoYXMgc2hvcnRjb21p
bmdzOyBmb3IgZXhhbXBsZSBpdCBjYW5ub3QgaGFuZGxlIFhNTSBvciBZTU0gcmVnaXN0ZXJzLiBI
YW5kbGluZworICAgICAgICBZTU0gcmVnaXN0ZXJzIHdpbGwgcmVxdWlyZSBhZGRpbmcgc29tZSBi
YXNpYyBZTU0gc3VwcG9ydCB0byBvdXIgYXNzZW1ibGVycyAtIHJlYWxseSB3ZQorICAgICAgICBq
dXN0IG5lZWQgdGhlIGFiaWxpdHkgdG8gbW92ZSBhIFlNTSdzIHZhbHVlIGludG8gYSBHUFIuCisg
ICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHByZXNlcnZlcyBhbGwgb2YgdGhlIG9sZCwgaW50
cmluc2ljLWxlc3MsIEZUTCBPU1IgZXhpdCBzdXBwb3J0LiBIZW5jZSBpdAorICAgICAgICBtYW5h
Z2VzIHRvIHBhc3MgYWxsIGV4aXN0aW5nIEZUTCB0ZXN0cyBldmVuIGRlc3BpdGUgaXRzIGluY29t
cGxldGVuZXNzLiBJIHRoaW5rIHRoYXQncworICAgICAgICB0aGUgcmlnaHQgd2F5IHRvIGdvIHNp
bmNlIHRoaXMgaXMgYWxyZWFkeSBhIGJpZyBwYXRjaCwgYW5kIGFueXdheSBpdCB3b3VsZCBiZSBn
cmVhdCB0bworICAgICAgICBrZWVwIHRoZSBpbnRyaW5zaWMtbGVzcyBGVEwgT1NSIGV4aXQgc3Vw
cG9ydCBzbyBsb25nIGFzIHRoZSBMTFZNIHNpZGUgb2YgdGhpcyBoYXNuJ3QKKyAgICAgICAgbGFu
ZGVkLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKToKKyAgICAgICAg
KEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OmlzU3RhY2tSZWxhdGVkKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVh
bFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om5leHRSZWdpc3Rlcik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzZWNvbmRSZWFsUmVnaXN0ZXIpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAqIGFz
c2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpmaXJz
dFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIpOgor
ICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21w
aWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0QW5kQm94KToKKyAg
ICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmg6CisgICAgICAgIChKU0M6OkZUTDo6Q0Fy
Z3VtZW50R2V0dGVyOjpsb2FkTmV4dERvdWJsZUludG9HUFIpOgorICAgICAgICAqIGZ0bC9GVExD
b21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlQ29kZVNlY3Rpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgIChKU0M6
OkZUTDo6ZHVtcERhdGFTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpmaXhGdW5jdGlvbkJh
c2VkT25TdGFja01hcHMpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRU
aHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtH
ZW5lcmF0b3I6OmVtaXRUaHVua3MpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkZUTDo6
RXhpdFZhbHVlOjppc0luSlNTdGFja1NvbWVob3cpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRW
YWx1ZTo6dmFsdWVGb3JtYXQpOgorICAgICAgICAqIGZ0bC9GVExGYWlsLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpmYWlsKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5o
OgorICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUV4aXRUaHVua3MpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExWTSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0T1NSRXhpdENhbGwpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpsaW5rT1NSRXhpdHNBbmRDb21wbGV0ZUluaXRpYWxpemF0aW9u
QmxvY2tzKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAqIGZ0bC9GVExP
U1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdENvbXBp
bGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWJXaXRoT1NS
RXhpdFN0YWNrbWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1YldpdGhvdXRPU1JF
eGl0U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExPU1JFeGl0KToKKyAg
ICAgICAgKiBmdGwvRlRMU2F2ZVJlc3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRM
OjpieXRlc0ZvckdQUnMpOgorICAgICAgICAoSlNDOjpGVEw6OnJlcXVpcmVkU2NyYXRjaE1lbW9y
eVNpemVJbkJ5dGVzKToKKyAgICAgICAgKEpTQzo6RlRMOjpvZmZzZXRPZkdQUik6CisgICAgICAg
IChKU0M6OkZUTDo6c2F2ZUFsbFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkZUTDo6cmVzdG9y
ZUFsbFJlZ2lzdGVycyk6CisgICAgICAgICogZnRsL0ZUTFNhdmVSZXN0b3JlLmg6IEFkZGVkLgor
ICAgICAgICAqIGZ0bC9GVExTdGFja01hcHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRM
OjpyZWFkT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkNvbnN0YW50Ojpw
YXJzZSk6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpDb25zdGFudDo6ZHVtcCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpMb2NhdGlvbjo6cGFyc2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlN0YWNrTWFwczo6TG9jYXRpb246OmR1bXApOgorICAgICAgICAoSlNDOjpGVEw6
OlN0YWNrTWFwczo6TG9jYXRpb246Omludm9sdmVzR1BSKToKKyAgICAgICAgKEpTQzo6RlRMOjpT
dGFja01hcHM6OkxvY2F0aW9uOjppc0dQUik6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBz
OjpMb2NhdGlvbjo6Z3ByKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9u
OjpyZXN0b3JlSW50byk6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpSZWNvcmQ6OnBh
cnNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OlJlY29yZDo6ZHVtcCk6CisgICAg
ICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpwYXJzZSk6CisgICAgICAgIChKU0M6OkZUTDo6U3Rh
Y2tNYXBzOjpkdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OmR1bXBNdWx0aWxp
bmUpOgorICAgICAgICAoSlNDOjpGVEw6OlN0YWNrTWFwczo6Z2V0UmVjb3JkTWFwKToKKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZnRsL0ZUTFN0YWNrTWFwcy5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtz
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OnJlYm94QWNjb3JkaW5nVG9Gb3JtYXQpOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZUZvcm1hdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvRGF0YVZpZXcuY3BwOgorICAgICAgICAoSlNDOjpEYXRhVmll
dzo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGFWaWV3Lmg6CisgICAgICAgIChKU0M6
OkRhdGFWaWV3OjpyZWFkKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxMy0x
MC0wOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQg
Zm9yLW9mIGl0ZXJhdGlvbiB0byBpbi1iYW5kIHNpZ25hbGxpbmcgc28gd2UgY2FuIHRyaXZpYWxs
eSBhdm9pZCB1bm5lY2Vzc2FyeSBvYmplY3QgYWxsb2NhdGlvbgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTQsNiArMzE0LDggQEAKIAkJMEY5RDMzNzAxNjVEQkI5MDAwNUFEMzg3IC8qIERpc2Fz
c2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcgLyogRGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJ
MEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM5NDE3RkZDNEU2MDA3M0My
QkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLzsgfTsKIAkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOUQzMzlBMTgw
M0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0
YWNrTWFwcy5jcHAgKi87IH07CisJCTBGOUQzMzlCMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFj
a01hcHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OUQzMzk5MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlGQjRGNDE3RkNCOTE3MDBDQjY3
RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlGQjRGMjE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tM
YXlvdXRQaGFzZS5jcHAgKi87IH07CiAJCTBGOUZCNEY1MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdT
dGFja0xheW91dFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjlGQjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOUZD
OEMzMTRFMUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZDOEJGMTRFMUI1RkIw
MEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCAqLzsgfTsKQEAgLTM3Miw2ICsz
NzQsOCBAQAogCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQw
NTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICov
OyB9OwogCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0NBRTQzMTZEMENGNkUw
MEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVz
dG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovOyB9OworCQkw
RkNFRkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQy
QzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZE
ODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87
IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZE
ODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKQEAgLTE1MjgsNiArMTUzMiw4IEBACiAJCTBGOUQz
MzZFMTY1REJCOEQwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxl
ci9EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5
NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZsdXNoZWRBdC5jcHA7IHBhdGggPSBkZmcvREZHRmx1c2hl
ZEF0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzOTUxN0ZGQzRFNjAw
NzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdGbHVzaGVkQXQuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaGVkQXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFw
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTdGFja01hcHMu
Y3BwOyBwYXRoID0gZnRsL0ZUTFN0YWNrTWFwcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGOUQzMzk5MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU3RhY2tNYXBzLmg7IHBhdGggPSBmdGwvRlRM
U3RhY2tNYXBzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUZCNEYyMTdGQ0I5
MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R1N0YWNrTGF5b3V0UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlG
QjRGMzE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGFja0xheW91dFBoYXNlLmg7IHBhdGggPSBkZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlG
QzhCRjE0RTFCNUZCMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1OTgsNiArMTYwNCw4IEBACiAJCTBG
QzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNsb3RWaXNpdG9ySW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNDQUU0MzE2RDBDRjZFMDBEMEM2NUIg
LyogUGFyc2VyRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2Vy
RXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDRUZBQTkxODA0QzEzRTAw
NDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmNwcDsgcGF0aCA9IGZ0bC9GVExTYXZlUmVzdG9yZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExTYXZlUmVzdG9yZS5oOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4
MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcv
REZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQwLDYgKzI2NDgs
MTAgQEAKIAkJCQkwRjIzNUJDQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVy
LmggKi8sCiAJCQkJMEZFQTBBMjkxNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgKi8s
CiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oICovLAorCQkJCTBG
Q0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8sCisJCQkJMEZD
RUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8sCisJCQkJMEY5RDMz
OTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgKi8sCisJCQkJMEY5RDMzOTkx
ODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oICovLAogCQkJCTBGRUEwQTE1MTcwNkJC
OTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8sCiAJCQkJMEZFQTBBMDcxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTFN0YXRlLmggKi8sCiAJCQkJQTdGQ0MyNkMxN0EwQjZBQTAwNzg2RDFBIC8qIEZU
TFN3aXRjaENhc2UuaCAqLywKQEAgLTQzMDQsNiArNDMxNiw3IEBACiAJCQkJQkMxOEM0MkEwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkIxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZl
UmVzdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MDdEMjlFMEU4NzFFNUUwMEQ3
RDg5NiAvKiBKU1R5cGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjcwMjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDk5LDYgKzQ1
MTIsNyBAQAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyREY0NDMwMTcwN0FDMDEwMEE1Q0E5NiAv
KiBTdXBlclJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0
NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjlEMzM5QjE4MDNBREI3
MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDEx
RDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNTI0OCw2ICs1MjYyLDcgQEAKIAkJCQk5
NjlBMDc5QTBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODUwMTA3RUMwRDcwMDEzRTdCMiAvKiBPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3QkRBRUM4MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9yUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExT
YXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZD
NDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFCQzEwN0VDNTREMDA0
MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMDUyQzM0MEZCNzkyMTkw
MDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUzNDUsNiArNTM2
MCw3IEBACiAJCQkJODY3MDRCODQxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4NjEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJ
VC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFy
clBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5RDMzOUExODAzQURCNzAwNzNDMkJD
IC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI0MjEyREI4QTgx
MDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0
LDkgQEAgcHVibGljOgogICAgIGNsYXNzIEp1bXA7CiAKICAgICB0eXBlZGVmIHR5cGVuYW1lIEFz
c2VtYmxlclR5cGU6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKKyAgICAKKyAgICBzdGF0aWMgUmVn
aXN0ZXJJRCBmaXJzdFJlZ2lzdGVyKCkgeyByZXR1cm4gQXNzZW1ibGVyVHlwZTo6Zmlyc3RSZWdp
c3RlcigpOyB9CisgICAgc3RhdGljIFJlZ2lzdGVySUQgbGFzdFJlZ2lzdGVyKCkgeyByZXR1cm4g
QXNzZW1ibGVyVHlwZTo6bGFzdFJlZ2lzdGVyKCk7IH0KIAogICAgIC8vIFNlY3Rpb24gMTogTWFj
cm9Bc3NlbWJsZXIgb3BlcmFuZCB0eXBlcwogICAgIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxNTcxMTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgTWFj
cm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJCYXNlIHsKIHB1YmxpYzoKIAorICAg
IHN0YXRpYyBib29sIGlzU3RhY2tSZWxhdGVkKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlZyA9PSBzdGFja1BvaW50ZXJSZWdpc3RlciB8fCByZWcgPT0gZnJhbWVQb2lu
dGVyUmVnaXN0ZXI7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBSZWdpc3RlcklEIGZpcnN0UmVh
bFJlZ2lzdGVyKCkKKyAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlciA9IE1h
Y3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCk7CisgICAgICAgIHdoaWxlIChNYWNyb0Fzc2Vt
Ymxlcjo6aXNTdGFja1JlbGF0ZWQoZmlyc3RSZWdpc3RlcikpCisgICAgICAgICAgICBmaXJzdFJl
Z2lzdGVyID0gc3RhdGljX2Nhc3Q8UmVnaXN0ZXJJRD4oZmlyc3RSZWdpc3RlciArIDEpOworICAg
ICAgICByZXR1cm4gZmlyc3RSZWdpc3RlcjsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFJlZ2lz
dGVySUQgbmV4dFJlZ2lzdGVyKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCByZXN1bHQgPSBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPihyZWcgKyAxKTsKKyAgICAgICAg
d2hpbGUgKE1hY3JvQXNzZW1ibGVyOjppc1N0YWNrUmVsYXRlZChyZXN1bHQpKQorICAgICAgICAg
ICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8UmVnaXN0ZXJJRD4ocmVzdWx0ICsgMSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBSZWdpc3RlcklEIHNlY29u
ZFJlYWxSZWdpc3RlcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV4dFJlZ2lzdGVyKGZpcnN0
UmVhbFJlZ2lzdGVyKCkpOworICAgIH0KKwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6
cG9wOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6anVtcDsKICAgICB1c2luZyBNYWNy
b0Fzc2VtYmxlckJhc2U6OmJyYW5jaDMyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNp
b24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJlZ2lzdGVyID0gWDg2
UmVnaXN0ZXJzOjplc3A7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZnJhbWVQb2ludGVy
UmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVicDsKLQorICAgIAogICAgIHN0YXRpYyBib29sIHNo
b3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHVpbnQzMl90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+
PSAweDAwZmZmZmZmOyB9CiAjaWYgQ1BVKFg4Nl82NCkKICAgICBzdGF0aWMgYm9vbCBzaG91bGRC
bGluZEZvclNwZWNpZmljQXJjaCh1aW50NjRfdCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPj0gMHgw
MGZmZmZmZjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4
NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDE2
IEBAIG5hbWVzcGFjZSBYODZSZWdpc3RlcnMgewogY2xhc3MgWDg2QXNzZW1ibGVyIHsKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOworICAg
IHN0YXRpYyBSZWdpc3RlcklEIGZpcnN0UmVnaXN0ZXIoKSB7IHJldHVybiBYODZSZWdpc3RlcnM6
OmVheDsgfQorICAgIHN0YXRpYyBSZWdpc3RlcklEIGxhc3RSZWdpc3RlcigpCisgICAgeworI2lm
IENQVShYODZfNjQpCisgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OnIxNTsKKyNlbHNlCisg
ICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OmVkaTsKKyNlbmRpZgorICAgIH0KKyAgICAKICAg
ICB0eXBlZGVmIFg4NlJlZ2lzdGVyczo6WE1NUmVnaXN0ZXJJRCBYTU1SZWdpc3RlcklEOwogICAg
IHR5cGVkZWYgWE1NUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDEyICsyNjQs
MTggQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBp
ZiAoT3B0aW9uczo6cmVwb3J0Q29tcGlsZVRpbWVzKCkpCiAgICAgICAgICAgICBiZWZvcmVGVEwg
PSBjdXJyZW50VGltZU1TKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoT3B0aW9uczo6bGx2bUFs
d2F5c0ZhaWxzKCkpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6Omxsdm1BbHdheXNGYWlsc0JlZm9y
ZUNvbXBpbGUoKSkgewogICAgICAgICAgICAgRlRMOjpmYWlsKHN0YXRlKTsKICAgICAgICAgICAg
IHJldHVybiBGVExQYXRoOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBGVEw6OmNvbXBp
bGUoc3RhdGUpOworCisgICAgICAgIGlmIChPcHRpb25zOjpsbHZtQWx3YXlzRmFpbHNCZWZvcmVM
aW5rKCkpIHsKKyAgICAgICAgICAgIEZUTDo6ZmFpbChzdGF0ZSk7CisgICAgICAgICAgICByZXR1
cm4gRlRMUGF0aDsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgRlRMOjpsaW5rKHN0YXRl
KTsKICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcAkocmV2aXNpb24gMTU3MTE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw2MCArNTIsMzEgQEAgdm9pZCBDQXJndW1lbnRHZXR0ZXI6Omxv
YWROZXh0QW5kQm94KAogICAgIH0KICAgICAKICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNh
c2UgVmFsdWVGb3JtYXRJbnQzMjogeworICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICBj
YXNlIFZhbHVlRm9ybWF0VUludDMyOgogICAgICAgICBsb2FkTmV4dDMyKGRlc3RpbmF0aW9uKTsK
LSAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3Rp
bmF0aW9uKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBW
YWx1ZUZvcm1hdFVJbnQzMjogewotICAgICAgICBsb2FkTmV4dDMyKGRlc3RpbmF0aW9uKTsKLSAg
ICAgICAgbV9qaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6ZnBSZWdUMCwgc2NyYXRjaDIpOwot
ICAgICAgICBtX2ppdC5ib3hJbnQ1MihkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24sIHNjcmF0Y2gx
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRj
aDIsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICBicmVhazsKLSAgICB9CiAgICAgICAgIAot
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjogeworICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1MjoK
KyAgICBjYXNlIFZhbHVlRm9ybWF0U3RyaWN0SW50NTI6CisgICAgY2FzZSBWYWx1ZUZvcm1hdEpT
VmFsdWU6CiAgICAgICAgIGxvYWROZXh0NjQoZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5y
c2hpZnQ2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjppbnQ1MlNoaWZ0
QW1vdW50KSwgZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChGUFJJ
bmZvOjpmcFJlZ1QwLCBzY3JhdGNoMik7Ci0gICAgICAgIG1faml0LmJveEludDUyKGRlc3RpbmF0
aW9uLCBkZXN0aW5hdGlvbiwgc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICBt
X2ppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoMiwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAg
IGJyZWFrOwotICAgIH0KICAgICAgICAgICAgIAotICAgIGNhc2UgVmFsdWVGb3JtYXRTdHJpY3RJ
bnQ1MjogewotICAgICAgICBsb2FkTmV4dDY0KGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbV9qaXQu
bW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6ZnBSZWdUMCwgc2NyYXRjaDIpOwotICAgICAgICBtX2pp
dC5ib3hJbnQ1MihkZXN0aW5hdGlvbiwgZGVzdGluYXRpb24sIHNjcmF0Y2gxLCBGUFJJbmZvOjpm
cFJlZ1QwKTsKLSAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaDIsIEZQUkluZm86
OmZwUmVnVDApOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBjYXNl
IFZhbHVlRm9ybWF0Qm9vbGVhbjogeworICAgIGNhc2UgVmFsdWVGb3JtYXRCb29sZWFuOgogICAg
ICAgICBsb2FkTmV4dDgoZGVzdGluYXRpb24pOwotICAgICAgICBtX2ppdC5vcjMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgY2FzZSBWYWx1ZUZvcm1hdEpTVmFsdWU6
IHsKLSAgICAgICAgbG9hZE5leHQ2NChkZXN0aW5hdGlvbik7CiAgICAgICAgIGJyZWFrOwotICAg
IH0KICAgICAgICAgICAgIAotICAgIGNhc2UgVmFsdWVGb3JtYXREb3VibGU6IHsKLSAgICAgICAg
bV9qaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6ZnBSZWdUMCwgc2NyYXRjaDEpOwotICAgICAg
ICBsb2FkTmV4dERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgbV9qaXQuYm94RG91
YmxlKEZQUkluZm86OmZwUmVnVDAsIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbV9qaXQubW92ZTY0
VG9Eb3VibGUoc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOworICAgIGNhc2UgVmFsdWVGb3Jt
YXREb3VibGU6CisgICAgICAgIGxvYWROZXh0RG91YmxlSW50b0dQUihkZXN0aW5hdGlvbik7CiAg
ICAgICAgIGJyZWFrOwotICAgIH0KICAgICAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAg
ICAKKyAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KGZvcm1hdCwgbV9qaXQsIGRlc3RpbmF0aW9u
LCBzY3JhdGNoMSwgc2NyYXRjaDIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmgJ
KHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3Vt
ZW50R2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMTYgQEAgcHVibGljOgog
ICAgICAgICBsb2FkTmV4dDY0KGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBs
b2FkTmV4dERvdWJsZUludG9HUFIoR1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAg
aWYgKG1fZnByQXJndW1lbnRJbmRleCA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3Rl
cnMpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OnRvQXJndW1l
bnRSZWdpc3RlcihtX2ZwckFyZ3VtZW50SW5kZXgrKyksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDY0KG5l
eHRBZGRyZXNzKCksIGRlc3RpbmF0aW9uKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBsb2FkTmV4
dERvdWJsZShGUFJSZWcgZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE1NzEx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDEwICszMSwxNCBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBl
LmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisj
aW5jbHVkZSAiRGF0YVZpZXcuaCIKICNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKKyNpbmNsdWRl
ICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisjaW5j
bHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9MTFZN
SGVhZGVycy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC00MiwxMSAr
NDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiB1c2luZyBuYW1lc3BhY2Ug
REZHOwogCiBzdGF0aWMgdWludDhfdCogbW1BbGxvY2F0ZUNvZGVTZWN0aW9uKAotICAgIHZvaWQq
IG9wYXF1ZVN0YXRlLCB1aW50cHRyX3Qgc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50LCB1bnNpZ25l
ZCBzZWN0aW9uSUQsCi0gICAgY29uc3QgY2hhciogc2VjdGlvbk5hbWUpCisgICAgdm9pZCogb3Bh
cXVlU3RhdGUsIHVpbnRwdHJfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQsIHVuc2lnbmVkLCBj
b25zdCBjaGFyKiBzZWN0aW9uTmFtZSkKIHsKLSAgICBVTlVTRURfUEFSQU0oc2VjdGlvbklEKTsK
LSAgICBVTlVTRURfUEFSQU0oc2VjdGlvbk5hbWUpOwogICAgIAogICAgIFN0YXRlJiBzdGF0ZSA9
ICpzdGF0aWNfY2FzdDxTdGF0ZSo+KG9wYXF1ZVN0YXRlKTsKICAgICAKQEAgLTU3LDYgKzU4LDcg
QEAgc3RhdGljIHVpbnQ4X3QqIG1tQWxsb2NhdGVDb2RlU2VjdGlvbigKICAgICAgICAgICAgIHN0
YXRlLmdyYXBoLm1fdm0sIHNpemUsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkKTsKICAgICAKICAgICBzdGF0ZS5qaXRDb2RlLT5hZGRIYW5kbGUocmVz
dWx0KTsKKyAgICBzdGF0ZS5jb2RlU2VjdGlvbk5hbWVzLmFwcGVuZChzZWN0aW9uTmFtZSk7CiAg
ICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihyZXN1bHQtPnN0YXJ0KCkpOwog
fQpAQCAtNjYsNyArNjgsNiBAQCBzdGF0aWMgdWludDhfdCogbW1BbGxvY2F0ZURhdGFTZWN0aW9u
KAogICAgIGNvbnN0IGNoYXIqIHNlY3Rpb25OYW1lLCBMTFZNQm9vbCBpc1JlYWRPbmx5KQogewog
ICAgIFVOVVNFRF9QQVJBTShzZWN0aW9uSUQpOwotICAgIFVOVVNFRF9QQVJBTShzZWN0aW9uTmFt
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGlzUmVhZE9ubHkpOwogCiAgICAgU3RhdGUmIHN0YXRlID0g
KnN0YXRpY19jYXN0PFN0YXRlKj4ob3BhcXVlU3RhdGUpOwpAQCAtNzYsNyArNzcsMTIgQEAgc3Rh
dGljIHVpbnQ4X3QqIG1tQWxsb2NhdGVEYXRhU2VjdGlvbigKICAgICBSZWZDb3VudGVkQXJyYXk8
TFNlY3Rpb25Xb3JkPiBzZWN0aW9uKAogICAgICAgICAoc2l6ZSArIHNpemVvZihMU2VjdGlvbldv
cmQpIC0gMSkgLyBzaXplb2YoTFNlY3Rpb25Xb3JkKSk7CiAgICAgCi0gICAgc3RhdGUuaml0Q29k
ZS0+YWRkRGF0YVNlY3Rpb24oc2VjdGlvbik7CisgICAgaWYgKCFzdHJjbXAoc2VjdGlvbk5hbWUs
ICJfX2pzX3N0YWNrbWFwcyIpKQorICAgICAgICBzdGF0ZS5zdGFja21hcHNTZWN0aW9uID0gc2Vj
dGlvbjsKKyAgICBlbHNlIHsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+YWRkRGF0YVNlY3Rpb24o
c2VjdGlvbik7CisgICAgICAgIHN0YXRlLmRhdGFTZWN0aW9uTmFtZXMuYXBwZW5kKHNlY3Rpb25O
YW1lKTsKKyAgICB9CiAgICAgCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50OF90Kj4oc2Vj
dGlvbi5kYXRhKCkpOwogfQpAQCAtOTAsNiArOTYsNjAgQEAgc3RhdGljIHZvaWQgbW1EZXN0cm95
KHZvaWQqKQogewogfQogCitzdGF0aWMgdm9pZCBkdW1wRGF0YVNlY3Rpb24oUmVmQ291bnRlZEFy
cmF5PExTZWN0aW9uV29yZD4gc2VjdGlvbiwgY29uc3QgY2hhciogcHJlZml4KQoreworICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBzZWN0aW9uLnNpemUoKTsgKytqKSB7CisgICAgICAgIGNo
YXIgYnVmWzMyXTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JWx4Iiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc2VjdGlv
bi5kYXRhKCkgKyBqKSkpOworICAgICAgICBkYXRhTG9nRigiJXMlMTZzOiAweCUwMTZsbHhcbiIs
IHByZWZpeCwgYnVmLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNlY3Rpb25bal0pKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKKyAgICBTdGF0
ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKiBqaXRDb2RlLCBHZW5lcmF0
ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKKyAgICBTdGFja01hcHM6OlJlY29yZE1hcCYg
cmVjb3JkTWFwKQoreworICAgIFZNJiB2bSA9IHN0YXRlLmdyYXBoLm1fdm07CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG9zckV4aXRUaHVuayA9CisgICAgICAgIHZtLmdldENUSVN0dWIob3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgdGFy
Z2V0ID0gQ29kZUxvY2F0aW9uTGFiZWwob3NyRXhpdFRodW5rLmNvZGUoKSk7CisKKyAgICBFeGl0
VGh1bmtHZW5lcmF0b3IgZXhpdFRodW5rR2VuZXJhdG9yKHN0YXRlKTsKKyAgICBleGl0VGh1bmtH
ZW5lcmF0b3IuZW1pdFRodW5rcygpOworICAgIGlmIChleGl0VGh1bmtHZW5lcmF0b3IuZGlkVGhp
bmdzKCkpIHsKKyAgICAgICAgT3duUHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIgPSBhZG9wdFB0
cihuZXcgTGlua0J1ZmZlcigKKyAgICAgICAgICAgIHZtLCAmZXhpdFRodW5rR2VuZXJhdG9yLCBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChzdGF0ZS5vc3JFeGl0LnNpemUoKSA9PSBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNp
emUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUu
b3NyRXhpdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5m
byYgaW5mbyA9IHN0YXRlLm9zckV4aXRbaV07CisgICAgICAgICAgICBPU1JFeGl0JiBleGl0ID0g
aml0Q29kZS0+b3NyRXhpdFtpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGlua0J1ZmZl
ci0+bGluayhpbmZvLm1fdGh1bmtKdW1wLCB0YXJnZXQpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzID0gbGlua0J1ZmZlci0+bG9jYXRpb25PZihpbmZvLm1f
dGh1bmtMYWJlbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGV4aXQubV9wYXRjaGFibGVD
b2RlT2Zmc2V0ID0gbGlua0J1ZmZlci0+b2Zmc2V0T2YoaW5mby5tX3RodW5rSnVtcCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUV4aXRU
aHVua3NMaW5rQnVmZmVyKGxpbmtCdWZmZXIucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGV4aXRJbmRleCA9IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyBleGl0SW5kZXgtLTspIHsK
KyAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IHN0YXRlLm9zckV4aXRbZXhp
dEluZGV4XTsKKyAgICAgICAgT1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbZXhpdElu
ZGV4XTsKKyAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IHJlY29yZE1hcC5maW5k
KGV4aXQubV9zdGFja21hcElEKS0+dmFsdWU7CisgICAgICAgIAorICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlcGxhY2VXaXRoSnVtcCgKKyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKAorICAg
ICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVj
b3JkLmluc3RydWN0aW9uT2Zmc2V0KSwKKyAgICAgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3Mp
OworICAgIH0KK30KKwogdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSkKIHsKICAgICBjaGFyKiBl
cnJvciA9IDA7CkBAIC0xNDMsMTUgKzIwMywxMiBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRl
KQogICAgIExMVk1EaXNwb3NlRXhlY3V0aW9uRW5naW5lKGVuZ2luZSk7CiAKICAgICBpZiAoc2hv
dWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGZvdXJ0aFRpZXI6IEZU
TCBtZW1vcnkgYWxsb2NhdG9yIHNob3VsZCBiZSBhYmxlIHRvIHRlbGwgdXMgd2hpY2ggb2YKLSAg
ICAgICAgLy8gdGhlc2UgdGhpbmdzIGlzIGFjdHVhbGx5IGNvZGUgb3IgZGF0YS4KLSAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjE4OQogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBz
dGF0ZS5qaXRDb2RlLT5oYW5kbGVzKClbaV0uZ2V0KCk7CiAgICAgICAgICAgICBkYXRhTG9nKAog
ICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBjb2RlIGZvciAiLAogICAgICAgICAgICAg
ICAgIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2Rl
OjpERkdKSVQpLAotICAgICAgICAgICAgICAgICIgIyIsIGksICI6XG4iKTsKKyAgICAgICAgICAg
ICAgICAiICMiLCBpLCAiLCAiLCBzdGF0ZS5jb2RlU2VjdGlvbk5hbWVzW2ldLCAiOlxuIik7CiAg
ICAgICAgICAgICBkaXNhc3NlbWJsZSgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoaGFuZGxlLT5zdGFydCgpKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpLAogICAgICAgICAg
ICAgICAgICIgICAgIiwgV1RGOjpkYXRhRmlsZSgpLCBMTFZNU3Vic2V0KTsKQEAgLTE2MiwxNCAr
MjE5LDUyIEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICBkYXRhTG9n
KAogICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBkYXRhIHNlY3Rpb24gZm9yICIsCiAg
ICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxv
Y2ssIEpJVENvZGU6OkRGR0pJVCksCi0gICAgICAgICAgICAgICAgIiAjIiwgaSwgIjpcbiIpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNlY3Rpb24uc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMl07Ci0gICAgICAgICAgICAgICAgc25wcmlu
dGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JWx4Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4o
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc2VjdGlvbi5kYXRhKCkgKyBqKSkpOwotICAgICAgICAg
ICAgICAgIGRhdGFMb2dGKCIgICAgJTE2czogMHglMDE2bGx4XG4iLCBidWYsIHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4oc2VjdGlvbltqXSkpOworICAgICAgICAgICAgICAgICIgIyIsIGksICIsICIs
IHN0YXRlLmRhdGFTZWN0aW9uTmFtZXNbaV0sICI6XG4iKTsKKyAgICAgICAgICAgIGR1bXBEYXRh
U2VjdGlvbihzZWN0aW9uLCAiICAgICIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlm
IChzdGF0ZS5zdGFja21hcHNTZWN0aW9uLnNpemUoKSkgeworICAgICAgICBpZiAoc2hvdWxkU2hv
d0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAg
IkdlbmVyYXRlZCBMTFZNIHN0YWNrbWFwcyBzZWN0aW9uIGZvciAiLAorICAgICAgICAgICAgICAg
IENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpE
RkdKSVQpLCAiOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgUmF3IGRhdGE6XG4iKTsK
KyAgICAgICAgICAgIGR1bXBEYXRhU2VjdGlvbihzdGF0ZS5zdGFja21hcHNTZWN0aW9uLCAiICAg
ICIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSZWZQdHI8RGF0YVZpZXc+IHN0YWNr
bWFwc0RhdGEgPSBEYXRhVmlldzo6Y3JlYXRlKAorICAgICAgICAgICAgQXJyYXlCdWZmZXI6OmNy
ZWF0ZShzdGF0ZS5zdGFja21hcHNTZWN0aW9uLmRhdGEoKSwgc3RhdGUuc3RhY2ttYXBzU2VjdGlv
bi5ieXRlU2l6ZSgpKSk7CisgICAgICAgIHN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5wYXJzZShz
dGFja21hcHNEYXRhLmdldCgpKTsKKyAgICAKKyAgICAgICAgaWYgKHNob3VsZFNob3dEaXNhc3Nl
bWJseSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgU3RydWN0dXJlZCBkYXRhOlxuIik7
CisgICAgICAgICAgICBzdGF0ZS5qaXRDb2RlLT5zdGFja21hcHMuZHVtcE11bHRpbGluZShXVEY6
OmRhdGFGaWxlKCksICIgICAgICAgICIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBT
dGFja01hcHM6OlJlY29yZE1hcCByZWNvcmRNYXAgPSBzdGF0ZS5qaXRDb2RlLT5zdGFja21hcHMu
Z2V0UmVjb3JkTWFwKCk7CisgICAgICAgIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKKyAg
ICAgICAgICAgIHN0YXRlLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgc3RhdGUuaml0Q29kZS5n
ZXQoKSwgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24sCisgICAgICAgICAgICByZWNvcmRNYXApOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmNvZGVTZWN0aW9uTmFtZXNb
aV0gIT0gIl9fdGV4dCIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGhhbmRsZSA9
IHN0YXRlLmppdENvZGUtPmhhbmRsZXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKAorICAgICAgICAgICAgICAgICAgICAiR2VuZXJhdGVkIExMVk0gY29kZSBhZnRlciBzdGFj
a21hcC1iYXNlZCBmaXgtdXAgZm9yICIsCisgICAgICAgICAgICAgICAgICAgIENvZGVCbG9ja1dp
dGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpLAorICAg
ICAgICAgICAgICAgICAgICAiICMiLCBpLCAiLCAiLCBzdGF0ZS5jb2RlU2VjdGlvbk5hbWVzW2ld
LCAiOlxuIik7CisgICAgICAgICAgICAgICAgZGlzYXNzZW1ibGUoCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cihoYW5kbGUtPnN0YXJ0KCkpLCBoYW5kbGUtPnNpemVJ
bkJ5dGVzKCksCisgICAgICAgICAgICAgICAgICAgICIgICAgIiwgV1RGOjpkYXRhRmlsZSgpLCBM
TFZNU3Vic2V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBz
dGF0ZS5tb2R1bGUgPSAwOyAvLyBXZSBubyBsb25nZXIgb3duIHRoZSBtb2R1bGUuCiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1NzExOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTEsMTIgKzUxLDIxIEBAIHZvaWQgRXhpdFRodW5rR2VuZXJhdG9yOjpl
bWl0VGh1bmsodW5zaWcKICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9zdGF0
ZS5vc3JFeGl0W2luZGV4XTsKICAgICAKICAgICBpbmZvLm1fdGh1bmtMYWJlbCA9IGxhYmVsKCk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoaW5kZXgpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAg
ICBpZiAoT3B0aW9uczo6ZnRsT1NSRXhpdFVzZXNTdGFja21hcCgpKQorICAgICAgICBwdXNoKFRy
dXN0ZWRJbW0zMihpbmRleCkpOworICAgIGVsc2UKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
aW5kZXgpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBpbmZvLm1fdGh1bmtKdW1wID0gcGF0
Y2hhYmxlSnVtcCgpOwogICAgIAogICAgIG1fZGlkVGhpbmdzID0gdHJ1ZTsKIH0KIAordm9pZCBF
eGl0VGh1bmtHZW5lcmF0b3I6OmVtaXRUaHVua3MoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3N0YXRlLm9zckV4aXQuc2l6ZSgpOyArK2kpCisgICAgICAgIGVtaXRUaHVuayhp
KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRo
dW5rR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDcgQEAgcHVibGljOgogICAgIH5FeGl0VGh1bmtHZW5lcmF0b3IoKTsKICAgICAKICAgICB2b2lk
IGVtaXRUaHVuayh1bnNpZ25lZCBpbmRleCk7CisgICAgdm9pZCBlbWl0VGh1bmtzKCk7CiAgICAg
CiAgICAgYm9vbCBkaWRUaGluZ3MoKSBjb25zdCB7IHJldHVybiBtX2RpZFRoaW5nczsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDE1
NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw2ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAoa2lu
ZCgpKSB7CiAgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgogICAgICAgICBjYXNlIEV4
aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNr
QXNJbnQ1MjoKICAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgpAQCAtMTUyLDcgKzE1Myw0MCBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChpc0luSlNTdGFja1NvbWVob3coKSk7CiAgICAgICAg
IHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIodS52aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KLSAgICAK
KworICAgIC8vIElmIGl0J3MgaW4gdGhlIEpTU3RhY2sgc29tZWhvdywgdGhpcyB3aWxsIHRlbGwg
eW91IHdoYXQgZm9ybWF0IGl0J3MgaW4sIGluIGEgbWFubmVyCisgICAgLy8gdGhhdCBpcyBjb21w
YXRpYmxlIHdpdGggZXhpdEFyZ3VtZW50KCkuZm9ybWF0KCkuIElmIGl0J3MgYSBjb25zdGFudCBv
ciBpdCdzIGRlYWQsIGl0CisgICAgLy8gd2lsbCBjbGFpbSB0byBiZSBhIEpTVmFsdWUuIElmIGl0
J3MgYW4gYXJndW1lbnQgdGhlbiBpdCB3aWxsIHRlbGwgeW91IHRoZSBhcmd1bWVudCdzCisgICAg
Ly8gZm9ybWF0LgorICAgIFZhbHVlRm9ybWF0IHZhbHVlRm9ybWF0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW52YWxpZEV4aXRWYWx1ZToK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBy
ZXR1cm4gSW52YWxpZFZhbHVlRm9ybWF0OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRXhp
dFZhbHVlRGVhZDoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKKyAgICAgICAgY2Fz
ZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVGb3JtYXRKU1Zh
bHVlOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6CisgICAg
ICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KCkuZm9ybWF0KCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgorICAgICAgICAgICAgcmV0dXJu
IFZhbHVlRm9ybWF0SW50MzI7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJ
bkpTU3RhY2tBc0ludDUyOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlRm9ybWF0SW50NTI7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAg
ICAgICAgICAgIHJldHVybiBWYWx1ZUZvcm1hdERvdWJsZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIElu
dmFsaWRWYWx1ZUZvcm1hdDsKKyAgICB9CisKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGYWlsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZhaWwuY3BwCShy
ZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZhaWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBAIHZvaWQgZmFpbChTdGF0ZSYgc3RhdGUp
CiB7CiAgICAgc3RhdGUuZ3JhcGgubV9wbGFuLmZpbmFsaXplciA9IGFkb3B0UHRyKG5ldyBGYWls
ZWRGaW5hbGl6ZXIoc3RhdGUuZ3JhcGgubV9wbGFuKSk7CiAgICAgCi0gICAgTExWTURpc3Bvc2VN
b2R1bGUoc3RhdGUubW9kdWxlKTsKKyAgICBpZiAoc3RhdGUubW9kdWxlKQorICAgICAgICBMTFZN
RGlzcG9zZU1vZHVsZShzdGF0ZS5tb2R1bGUpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNp
Y1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTU3MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKG11bFdpdGhP
dmVyZmxvdzY0LCAibGx2bS5zbXVsLndpdGgub3ZlcmZsb3cuaTY0IiwgZnVuY3Rpb25UeXBlKHN0
cnVjdFR5cGUobV9jb250ZXh0LCBpbnQ2NCwgYm9vbGVhbiksIGludDY0LCBpbnQ2NCkpIFwKICAg
ICBtYWNybyhzdWJXaXRoT3ZlcmZsb3czMiwgImxsdm0uc3N1Yi53aXRoLm92ZXJmbG93LmkzMiIs
IGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQz
MiwgaW50MzIpKSBcCiAgICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93NjQsICJsbHZtLnNzdWIud2l0
aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0
LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAorICAgIG1hY3JvKHdlYmtpdFN0YWNrbWFwLCAi
bGx2bS53ZWJraXQuc3RhY2ttYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyLCBpbnQz
MiwgVmFyaWFkaWMpKSBcCiAgICAgbWFjcm8odHJhcCwgImxsdm0udHJhcCIsIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSkpIFwKICAgICBtYWNybyhvc3JFeGl0LCAid2Via2l0X29zcl9leGl0IiwgZnVu
Y3Rpb25UeXBlKHZvaWRUeXBlLCBib29sZWFuLCBpbnQzMiwgVmFyaWFkaWMpKQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTU3MTE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJG
VExPU1JFeGl0LmgiCisjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5jbHVkZSAiSklUQ29k
ZS5oIgogI2luY2x1ZGUgPHd0Zi9MTFZNSGVhZGVycy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkQXJyYXkuaD4KQEAgLTY3LDYgKzY4LDcgQEAgcHVibGljOgogICAgIAogICAgIERGRzo6Q29t
bW9uRGF0YSBjb21tb247CiAgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7
CisgICAgU3RhY2tNYXBzIHN0YWNrbWFwczsKICAgICAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJl
ZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+PiBtX2RhdGFTZWN0aW9uczsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lv
biAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIERG
RzsKIAogc3RhdGljIGludCBjb21waWxlQ291bnRlcjsKIAorc3RhdGljIGJvb2wgZ2VuZXJhdGVF
eGl0VGh1bmtzKCkKK3sKKyAgICByZXR1cm4gIU9wdGlvbnM6OnVzZUxMVk1PU1JFeGl0SW50cmlu
c2ljKCkgJiYgIU9wdGlvbnM6OmZ0bE9TUkV4aXRVc2VzU3RhY2ttYXAoKTsKK30KKwogLy8gVXNp
bmcgdGhpcyBpbnN0ZWFkIG9mIHR5cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVjZSB0aGUgbG9hZCBv
biBMTFZNLCBieSBjcmVhdGluZwogLy8gc2lnbmlmaWNhbnRseSBsZXNzIGRlYWQgY29kZS4KICNk
ZWZpbmUgRlRMX1RZUEVfQ0hFQ0sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJv
dWdoLCBmYWlsQ29uZGl0aW9uKSBkbyB7IFwKQEAgLTc1LDYgKzgwLDcgQEAgcHVibGljOgogICAg
ICAgICAsIG1fZXhpdFRodW5rR2VuZXJhdG9yKHN0YXRlKQogICAgICAgICAsIG1fc3RhdGUoc3Rh
dGUuZ3JhcGgpCiAgICAgICAgICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9zdGF0ZSkK
KyAgICAgICAgLCBtX3N0YWNrbWFwSURzKDApCiAgICAgewogICAgIH0KICAgICAKQEAgLTMyNTYs
OCArMzI2MiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5i
cmFuY2goZmFpbENvbmRpdGlvbiwgZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOwotICAgICAgICAgICAgaW5mby5tX3RodW5r
QWRkcmVzcyA9IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQuaW50UHRyKTsKKyAg
ICAgICAgICAgIGlmIChnZW5lcmF0ZUV4aXRUaHVua3MoKSkgeworICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOworICAgICAgICAgICAgICAgIGluZm8ubV90aHVua0Fk
ZHJlc3NWYWx1ZSA9IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQuaW50UHRyKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24pOwogICAgICAgICB9CkBAIC0zMjY1LDcgKzMy
NzMsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoT3B0aW9uczo6ZnRsT1NSRXhpdE9taXRzTWFy
c2hhbGxpbmcoKSkgewogICAgICAgICAgICAgbV9vdXQuY2FsbCgKICAgICAgICAgICAgICAgICBt
X291dC5pbnRUb1B0cigKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuZ2V0KGluZm8ubV90aHVu
a0FkZHJlc3MpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5nZXQoaW5mby5tX3RodW5rQWRk
cmVzc1ZhbHVlKSwKICAgICAgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBl
KG1fb3V0LnZvaWRUeXBlKSkpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBlbWl0T1NS
RXhpdENhbGwoZmFpbENvbmRpdGlvbiwgaW5kZXgsIGV4aXQsIGluZm8sIGxvd1ZhbHVlLCBkaXJl
Y3Rpb24sIHJlY292ZXJ5KTsKQEAgLTMyNzUsNyArMzI4Myw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwogICAgICAgICAKLSAgICAgICAgICAgIG1fZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVuayhp
bmRleCk7CisgICAgICAgICAgICBpZiAoZ2VuZXJhdGVFeGl0VGh1bmtzKCkpCisgICAgICAgICAg
ICAgICAgbV9leGl0VGh1bmtHZW5lcmF0b3IuZW1pdFRodW5rKGluZGV4KTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKQEAgLTMzNDEsOSArMzM1MCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6ZnRsT1NS
RXhpdFVzZXNTdGFja21hcCgpKSB7CisgICAgICAgICAgICBleGl0Lm1fc3RhY2ttYXBJRCA9IG1f
c3RhY2ttYXBJRHMrKzsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29u
c3RJbnQzMihNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKSk7CisgICAg
ICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoZXhpdC5tX3N0YWNr
bWFwSUQpKTsKKyAgICAgICAgCisgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0LndlYmtpdFN0
YWNrbWFwSW50cmluc2ljKCksIGFyZ3VtZW50cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5p
bnRUb1B0cigKLSAgICAgICAgICAgICAgICBtX291dC5nZXQoaW5mby5tX3RodW5rQWRkcmVzcyks
CisgICAgICAgICAgICAgICAgbV9vdXQuZ2V0KGluZm8ubV90aHVua0FkZHJlc3NWYWx1ZSksCiAg
ICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBlKG1fb3V0LnZvaWRUeXBlLCBh
cmd1bWVudFR5cGVzKSkpLAogICAgICAgICAgICAgYXJndW1lbnRzKTsKICAgICB9CkBAIC0zNDk5
LDcgKzM1MTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fb3V0LnNldCgKICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVsKS5leGVjdXRhYmxlQWRk
cmVzcygpKSwKLSAgICAgICAgICAgICAgICAgICAgaW5mby5tX3RodW5rQWRkcmVzcyk7CisgICAg
ICAgICAgICAgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3NWYWx1ZSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBleGl0Lm1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGxpbmtCdWZmZXIt
Pm9mZnNldE9mKGluZm8ubV90aHVua0p1bXApOwogICAgICAgICAgICAgfQpAQCAtMzY5Niw2ICsz
NzE0LDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKICAgICBOb2RlKiBt
X25vZGU7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CisgICAgCisgICAg
dWludDMyX3QgbV9zdGFja21hcElEczsKIH07CiAKIHZvaWQgbG93ZXJERkdUb0xMVk0oU3RhdGUm
IHN0YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlz
aW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDggQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMg
REZHOjpPU1JFeGl0QmFzZQogICAgIAogICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7
CiAgICAgCisgICAgdWludDMyX3QgbV9zdGFja21hcElEOworICAgIAogICAgIENvZGVMb2NhdGlv
bkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29u
c3Q7CiAgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9Gb3J3YXJkKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHJl
dmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBzdHJ1Y3QgT1NSRXhpdENvbXBpbGF0aW9uSW5m
byB7CiAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpCi0gICAgICAgIDogbV90aHVua0FkZHJl
c3MoMCkKKyAgICAgICAgOiBtX3RodW5rQWRkcmVzc1ZhbHVlKDApCiAgICAgewogICAgIH0KICAg
ICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV90aHVua0xhYmVsOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fdGh1bmtKdW1wOwotICAgIExWYWx1ZSBtX3RodW5rQWRk
cmVzczsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX3RodW5rQWRkcmVzczsKKyAgICBMVmFsdWUg
bV90aHVua0FkZHJlc3NWYWx1ZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHAJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIkZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCiAj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKIApAQCAt
NDEsNyArNDIsMTM1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcg
bmFtZXNwYWNlIERGRzsKIAotc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCisvLyBUaGlzIGltcGxl
bWVudHMgdHdvIGZsYXZvcnMgb2YgT1NSIGV4aXQ6IG9uZSB0aGF0IGludm9sdmVzIGhhdmluZyBM
TFZNIGludHJpbnNpY3MgdG8gaGVscAorLy8gT1NSIGV4aXQsIGFuZCBvbmUgdGhhdCBkb2Vzbid0
LiBUaGUgb25lIHRoYXQgZG9lc24ndCB3aWxsIGdldCBraWxsZWQgb2ZmLCBzbyB3ZSBkb24ndCBh
dHRlbXB0CisvLyB0byBzaGFyZSBjb2RlIGJldHdlZW4gdGhlIHR3by4KKworc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWJXaXRoT1NSRXhpdFN0YWNrbWFwKAorICAgIHVuc2lnbmVkIGV4aXRJRCwgSklU
Q29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBTdGFja01hcHM6OlJlY29yZCogcmVjb3JkOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IGppdENvZGUtPnN0YWNrbWFwcy5yZWNvcmRzLnNpemUoKTsgaS0tOykgeworICAg
ICAgICByZWNvcmQgPSAmaml0Q29kZS0+c3RhY2ttYXBzLnJlY29yZHNbaV07CisgICAgICAgIGlm
IChyZWNvcmQtPnBhdGNocG9pbnRJRCA9PSBleGl0Lm1fc3RhY2ttYXBJRCkKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmQtPnBhdGNocG9p
bnRJRCA9PSBleGl0Lm1fc3RhY2ttYXBJRCk7CisgICAgCisgICAgQ0NhbGxIZWxwZXJzIGppdCh2
bSwgY29kZUJsb2NrKTsKKyAgICAKKyAgICAvLyBXZSBuZWVkIHNjcmF0Y2ggc3BhY2UgdG8gc2F2
ZSBhbGwgcmVnaXN0ZXJzIGFuZCB0byBidWlsZCB1cCB0aGUgSlNTdGFjay4KKyAgICAvLyBVc2Ug
YSBzY3JhdGNoIGJ1ZmZlciB0byB0cmFuc2ZlciBhbGwgdmFsdWVzLgorICAgIFNjcmF0Y2hCdWZm
ZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSAqIGV4aXQubV92YWx1ZXMuc2l6ZSgpICsgcmVxdWlyZWRTY3JhdGNoTWVtb3J5
U2l6ZUluQnl0ZXMoKSk7CisgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVm
ZmVyID8gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVm
ZmVyKCkpIDogMDsKKyAgICBjaGFyKiByZWdpc3RlclNjcmF0Y2ggPSBiaXR3aXNlX2Nhc3Q8Y2hh
cio+KHNjcmF0Y2ggKyBleGl0Lm1fdmFsdWVzLnNpemUoKSk7CisgICAgCisgICAgc2F2ZUFsbFJl
Z2lzdGVycyhqaXQsIHJlZ2lzdGVyU2NyYXRjaCk7CisgICAgCisgICAgLy8gQnJpbmcgdGhlIHN0
YWNrIGJhY2sgaW50byBhIHNhbmUgZm9ybS4KKyAgICBqaXQucG9wKEdQUkluZm86OnJlZ1QwKTsK
KyAgICAKKyAgICAvLyBHZXQgdGhlIGNhbGwgZnJhbWUgYW5kIHRhZyB0aGluZ2llcy4KKyAgICBy
ZWNvcmQtPmxvY2F0aW9uc1swXS5yZXN0b3JlSW50byhqaXQsIGppdENvZGUtPnN0YWNrbWFwcywg
cmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KFRhZ01hc2spLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIAorICAg
IC8vIERvIHNvbWUgdmFsdWUgcHJvZmlsaW5nLgorICAgIGlmIChleGl0Lm1fcHJvZmlsZVZhbHVl
Rm9ybWF0ICE9IEludmFsaWRWYWx1ZUZvcm1hdCkgeworICAgICAgICByZWNvcmQtPmxvY2F0aW9u
c1sxXS5yZXN0b3JlSW50byhqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNo
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQoCisgICAg
ICAgICAgICBleGl0Lm1fcHJvZmlsZVZhbHVlRm9ybWF0LCBqaXQsIEdQUkluZm86OnJlZ1QwLCBH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4
aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkg
eworICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW5G
b3JFeGl0UHJvZmlsZTsKKyAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmls
ZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxl
KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoR1BSSW5mbzo6cmVnVDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgR1BSSW5m
bzo6cmVnVDEpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBqaXQubHNoaWZ0
MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBqaXQu
b3IzMihHUFJJbmZvOjpyZWdUMiwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhhcnJh
eVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoISFleGl0Lm1fdmFsdWVQcm9maWxlKQorICAgICAg
ICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIGV4aXQubV92YWx1ZVByb2ZpbGUuZ2V0
U3BlY0ZhaWxCdWNrZXQoMCkpOworICAgIH0KKworICAgIC8vIFNhdmUgYWxsIHN0YXRlIGZyb20g
d2hlcmV2ZXIgdGhlIGV4aXQgZGF0YSB0ZWxscyB1cyBpdCB3YXMsIGludG8gdGhlIGFwcHJvcHJp
YXRlIHBsYWNlIGluCisgICAgLy8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBUaGlzIGRvZXNuJ3QgcmVi
b3ggYW55IHZhbHVlcyB5ZXQuCisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGV4aXQu
bV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykgeworICAgICAgICBFeGl0VmFsdWUgdmFsdWUgPSBl
eGl0Lm1fdmFsdWVzW2luZGV4XTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAodmFsdWUua2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKKyAgICAgICAgICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKKyAgICAgICAgICAgIGppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlLmNvbnN0YW50
KCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKKyAgICAgICAgICAgIHJlY29yZC0+bG9j
YXRpb25zW3ZhbHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAorICAg
ICAgICAgICAgICAgIGppdCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFj
a0FzSW50MzI6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MjoKKyAgICAg
ICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAgICAgIGppdC5sb2Fk
NjQoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpKSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaml0LnN0b3Jl
NjQoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2ggKyBpbmRleCk7CisgICAgfQorICAgIAorICAgIC8v
IE5vdyBnZXQgc3RhdGUgb3V0IG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBhbmQgcGxhY2UgaXQgYmFj
ayBpbnRvIHRoZSBzdGFjay4gVGhpcyBwYXJ0IGRvZXMKKyAgICAvLyBhbGwgcmVib3hpbmcuCisg
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpbmRleC0tOykg
eworICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGlu
ZGV4KTsKKyAgICAgICAgRXhpdFZhbHVlIHZhbHVlID0gZXhpdC5tX3ZhbHVlc1tpbmRleF07Cisg
ICAgICAgIAorICAgICAgICBqaXQubG9hZDY0KHNjcmF0Y2ggKyBpbmRleCwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAorICAgICAgICAgICAgdmFsdWUu
dmFsdWVGb3JtYXQoKSwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgfQorICAgIAorICAgIGhhbmRsZUV4
aXRDb3VudHMoaml0LCBleGl0KTsKKyAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGppdCwgZXhp
dCk7CisgICAgCisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5wb3Ao
TWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQucG9wKEdQUklu
Zm86Om5vbkFyZ0dQUjApOyAvLyBpZ25vcmUgdGhlIHJlc3VsdC4KKyAgICAKKyAgICBpZiAoZXhp
dC5tX2xhc3RTZXRPcGVyYW5kLmlzVmFsaWQoKSkgeworICAgICAgICBqaXQubG9hZDY0KAorICAg
ICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGV4aXQubV9sYXN0U2V0T3BlcmFu
ZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICB9CisgICAgCisgICAgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KGppdCwgZXhpdCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sICZqaXQsIGNvZGVCbG9jayk7CisgICAgZXhpdC5tX2NvZGUgPSBGSU5BTEla
RV9DT0RFX0lGKAorICAgICAgICBzaG91bGRTaG93RGlzYXNzZW1ibHkoKSwKKyAgICAgICAgcGF0
Y2hCdWZmZXIsCisgICAgICAgICgiRlRMIE9TUiBleGl0ICMldSAoYmMjJXUsICVzKSBmcm9tICVz
LCB3aXRoIG9wZXJhbmRzID0gJXMiLAorICAgICAgICAgICAgZXhpdElELCBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4LAorICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1f
a2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCisgICAgICAgICAgICB0b0NTdHJp
bmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihleGl0Lm1fdmFsdWVzKSkuZGF0YSgpKSk7
Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBpbGVTdHViV2l0aG91dE9TUkV4aXRTdGFja21hcCgKICAg
ICB1bnNpZ25lZCBleGl0SUQsIE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSwgY29kZUJsb2NrKTsKQEAgLTIxOSwx
MSArMzQ4LDE1IEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1MKICAg
ICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Mo
dm0tPmhlYXApOwogCi0gICAgT1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5m
dGwoKS0+b3NyRXhpdFtleGl0SURdOworICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2st
PmppdENvZGUoKS0+ZnRsKCk7CisgICAgT1NSRXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRb
ZXhpdElEXTsKICAgICAKICAgICBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoZXhlYywgZXhp
dC5tX2NvZGVPcmlnaW4pOwogICAgIAotICAgIGNvbXBpbGVTdHViKGV4aXRJRCwgZXhpdCwgdm0s
IGNvZGVCbG9jayk7CisgICAgaWYgKE9wdGlvbnM6OmZ0bE9TUkV4aXRVc2VzU3RhY2ttYXAoKSkK
KyAgICAgICAgY29tcGlsZVN0dWJXaXRoT1NSRXhpdFN0YWNrbWFwKGV4aXRJRCwgaml0Q29kZSwg
ZXhpdCwgdm0sIGNvZGVCbG9jayk7CisgICAgZWxzZQorICAgICAgICBjb21waWxlU3R1YldpdGhv
dXRPU1JFeGl0U3RhY2ttYXAoZXhpdElELCBleGl0LCB2bSwgY29kZUJsb2NrKTsKICAgICAKICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluaygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2F2ZVJlc3Rv
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2F2ZVJl
c3RvcmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
YXZlUmVzdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRlRMU2F2ZVJlc3RvcmUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0YXRp
YyBzaXplX3QgYnl0ZXNGb3JHUFJzKCkKK3sKKyAgICByZXR1cm4gKE1hY3JvQXNzZW1ibGVyOjps
YXN0UmVnaXN0ZXIoKSAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkgKyAxKSAqIHNp
emVvZihpbnQ2NF90KTsKK30KKworc2l6ZV90IHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5
dGVzKCkKK3sKKyAgICByZXR1cm4gYnl0ZXNGb3JHUFJzKCkgKyBGUFJJbmZvOjpudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzICogc2l6ZW9mKGRvdWJsZSk7Cit9CisKK3NpemVfdCBvZmZzZXRPZkdQ
UihHUFJSZWcgcmVnKQoreworICAgIHJldHVybiAocmVnIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0
UmVnaXN0ZXIoKSkgKiBzaXplb2YoaW50NjRfdCk7Cit9CisKK3ZvaWQgc2F2ZUFsbFJlZ2lzdGVy
cyhNYWNyb0Fzc2VtYmxlciYgaml0LCBjaGFyKiBzY3JhdGNoTWVtb3J5KQoreworICAgIC8vIEdl
dCB0aGUgZmlyc3QgcmVnaXN0ZXIgb3V0IG9mIHRoZSB3YXksIHNvIHRoYXQgd2UgY2FuIHVzZSBp
dCBhcyBhIHBvaW50ZXIuCisgICAgaml0LnBva2U2NChNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWFs
UmVnaXN0ZXIoKSwgMCk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc2NyYXRjaE1lbW9yeSksIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpKTsK
KyAgICAKKyAgICAvLyBHZXQgYWxsIG9mIHRoZSBvdGhlciBHUFJzIG91dCBvZiB0aGUgd2F5Lgor
ICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJsZXI6
OnNlY29uZFJlYWxSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3Rl
cigpOyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6bmV4dFJlZ2lzdGVyKHJlZykpCisgICAgICAgIGpp
dC5zdG9yZTY0KHJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZp
cnN0UmVhbFJlZ2lzdGVyKCksIG9mZnNldE9mR1BSKHJlZykpKTsKKyAgICAKKyAgICAvLyBSZXN0
b3JlIHRoZSBmaXJzdCByZWdpc3RlciBpbnRvIHRoZSBzZWNvbmQgb25lIGFuZCBzYXZlIGl0Lgor
ICAgIGppdC5wZWVrNjQoTWFjcm9Bc3NlbWJsZXI6OnNlY29uZFJlYWxSZWdpc3RlcigpLCAwKTsK
KyAgICBqaXQuc3RvcmU2NChNYWNyb0Fzc2VtYmxlcjo6c2Vjb25kUmVhbFJlZ2lzdGVyKCksIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3Rlcigp
LCBvZmZzZXRPZkdQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWFsUmVnaXN0ZXIoKSkpKTsKKyAg
ICAKKyAgICAvLyBTYXZlIGFsbCBGUCBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBhY3R1YWxseSBiZSBzYXZpbmcgYWxsIEZQIHJlZ2lzdGVycy4KKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNTE4CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsr
aSkgeworICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3Jh
dGNoTWVtb3J5ICsgYnl0ZXNGb3JHUFJzKCkgKyBzaXplb2YoZG91YmxlKSAqIGkpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjp0b0FyZ3VtZW50UmVn
aXN0ZXIoaSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICB9Cit9CisKK3ZvaWQgcmVzdG9yZUFsbFJl
Z2lzdGVycyhNYWNyb0Fzc2VtYmxlciYgaml0LCBjaGFyKiBzY3JhdGNoTWVtb3J5KQoreworICAg
IC8vIFJlc3RvcmUgYWxsIEZQIGFyZ3VtZW50IHJlZ2lzdGVycy4KKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGFjdHVhbGx5IGJlIHJlc3RvcmluZyBhbGwgRlAgcmVnaXN0ZXJzLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI1MTgKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytp
KSB7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0
Y2hNZW1vcnkgKyBieXRlc0ZvckdQUnMoKSArIHNpemVvZihkb3VibGUpICogaSksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86
OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgfQorICAgIAorICAgIC8vIE5vdywgcmVzdG9y
ZSBhbGwgR1BScy4KKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihz
Y3JhdGNoTWVtb3J5KSwgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVhbFJlZ2lzdGVyKCkpOworICAg
IAorICAgIGZvciAoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnID0gTWFjcm9Bc3NlbWJs
ZXI6OnNlY29uZFJlYWxSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdp
c3RlcigpOyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6bmV4dFJlZ2lzdGVyKHJlZykpCisgICAgICAg
IGppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0
UmVhbFJlZ2lzdGVyKCksIG9mZnNldE9mR1BSKHJlZykpLCByZWcpOworICAgIAorICAgIGppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVhbFJl
Z2lzdGVyKCksIG9mZnNldE9mR1BSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3Rlcigp
KSksIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlYWxSZWdpc3RlcigpKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2F2ZVJlc3RvcmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNhdmVSZXN0b3JlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNhdmVSZXN0b3JlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEZUTFNhdmVSZXN0b3JlX2gKKyNkZWZpbmUgRlRMU2F2ZVJlc3Rv
cmVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgIkdQUkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hY3Jv
QXNzZW1ibGVyOworCituYW1lc3BhY2UgRlRMIHsKKworc2l6ZV90IHJlcXVpcmVkU2NyYXRjaE1l
bW9yeVNpemVJbkJ5dGVzKCk7CisKK3NpemVfdCBvZmZzZXRPZkdQUihHUFJSZWcpOworCisvLyBB
c3N1bWVzIHRoYXQgdG9wLW9mLXN0YWNrIGNhbiBiZSB1c2VkIGFzIGEgcG9pbnRlci1zaXplZCBz
Y3JhdGNocGFkLiBTYXZlcyBhbGwgb2YKKy8vIHRoZSByZWdpc3RlcnMgaW50byB0aGUgc2NyYXRj
aCBidWZmZXIgc3VjaCB0aGF0IFJlZ2lzdGVySUQgKiBzaXplb2YoaW50NjRfdCkgaXMgdGhlCisv
LyBvZmZzZXQgb2YgZXZlcnkgcmVnaXN0ZXIuCit2b2lkIHNhdmVBbGxSZWdpc3RlcnMoTWFjcm9B
c3NlbWJsZXImIGppdCwgY2hhciogc2NyYXRjaE1lbW9yeSk7CisKK3ZvaWQgcmVzdG9yZUFsbFJl
Z2lzdGVycyhNYWNyb0Fzc2VtYmxlciYgaml0LCBjaGFyKiBzY3JhdGNoTWVtb3J5KTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNl
bmRpZiAvLyBGVExTYXZlUmVzdG9yZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhY2tNYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgorCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisKKyNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVBy
aW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitUIHJlYWRPYmplY3QoRGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCit7
CisgICAgVCByZXN1bHQ7CisgICAgcmVzdWx0LnBhcnNlKHZpZXcsIG9mZnNldCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBTdGFja01hcHM6OkNvbnN0YW50OjpwYXJzZShEYXRhVmll
dyogdmlldywgdW5zaWduZWQmIG9mZnNldCkKK3sKKyAgICBpbnRlZ2VyID0gdmlldy0+cmVhZDxp
bnQ2NF90PihvZmZzZXQsIHRydWUpOworfQorCit2b2lkIFN0YWNrTWFwczo6Q29uc3RhbnQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnRmKCIweCUwMTZsbHgi
LCBpbnRlZ2VyKTsKK30KKwordm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpwYXJzZShEYXRhVmll
dyogdmlldywgdW5zaWduZWQmIG9mZnNldCkKK3sKKyAgICB1aW50MTZfdCB0YWdnZWRSZWcgPSB2
aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOworICAgIGlmIChzdGF0aWNfY2FzdDxp
bnQxNl90Pih0YWdnZWRSZWcpIDwgMCkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAg
IkRldGVjdGVkIGEgbmVnYXRpdmUgdGFnZ2VkIHJlZ2lzdGVyICIsIHN0YXRpY19jYXN0PGludDE2
X3Q+KHRhZ2dlZFJlZyksCisgICAgICAgICAgICAiIGF0IG9mZnNldCAiLCBvZmZzZXQsICJcbiIp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBkd2Fy
ZlJlZ051bSA9IHRhZ2dlZFJlZyAmICgoMSA8PCAxMikgLSAxKTsKKyAgICBraW5kID0gc3RhdGlj
X2Nhc3Q8S2luZD4odGFnZ2VkUmVnID4+IDEyKTsKKworICAgIHRoaXMtPm9mZnNldCA9IHZpZXct
PnJlYWQ8aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKK30KKwordm9pZCBTdGFja01hcHM6OkxvY2F0
aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIoIiwg
a2luZCwgIiwgcmVnIiwgZHdhcmZSZWdOdW0sICIsICIsIG9mZnNldCwgIikiKTsKK30KKworYm9v
bCBTdGFja01hcHM6OkxvY2F0aW9uOjppbnZvbHZlc0dQUigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGlzR1BSKCkgfHwga2luZCA9PSBJbmRpcmVjdDsKK30KKworI2lmIENQVShYODZfNjQpIC8vIENQ
VSBjYXNlcyBmb3IgU3RhY2tNYXBzOjpMb2NhdGlvbgorLy8gVGhpcyBkZWNvZGVzIER3YXJmIGZs
YXZvdXIgMCBmb3IgeDg2LTY0LgorYm9vbCBTdGFja01hcHM6OkxvY2F0aW9uOjppc0dQUigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGtpbmQgPT0gUmVnaXN0ZXIgJiYgZHdhcmZSZWdOdW0gPCAxNjsK
K30KKworR1BSUmVnIFN0YWNrTWFwczo6TG9jYXRpb246OmdwcigpIGNvbnN0Cit7CisgICAgLy8g
U3R1cGlkbHksIER3YXJmIGRvZXNuJ3QgbnVtYmVyIHRoZSByZWdpc3RlcnMgaW4gdGhlIHNhbWUg
d2F5IGFzIHRoZSBhcmNoaXRlY3R1cmU7CisgICAgLy8gZm9yIGV4YW1wbGUsIHRoZSBhcmNoaXRl
Y3R1cmUgZW5jb2RlcyBDWCBhcyAxIGFuZCBEWCBhcyAyIHdoaWxlIER3YXJmIGRvZXMgdGhlCisg
ICAgLy8gb3Bwb3NpdGUuIEhlbmNlIHdlIG5lZWQgdGhlIHN3aXRjaC4KKyAgICAKKyAgICBzd2l0
Y2ggKGR3YXJmUmVnTnVtKSB7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gWDg2UmVnaXN0
ZXJzOjplYXg7CisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gWDg2UmVnaXN0ZXJzOjplZHg7
CisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gWDg2UmVnaXN0ZXJzOjplY3g7CisgICAgY2Fz
ZSAzOgorICAgICAgICByZXR1cm4gWDg2UmVnaXN0ZXJzOjplYng7CisgICAgY2FzZSA0OgorICAg
ICAgICByZXR1cm4gWDg2UmVnaXN0ZXJzOjplc2k7CisgICAgY2FzZSA1OgorICAgICAgICByZXR1
cm4gWDg2UmVnaXN0ZXJzOjplZGk7CisgICAgY2FzZSA2OgorICAgICAgICByZXR1cm4gWDg2UmVn
aXN0ZXJzOjplYnA7CisgICAgY2FzZSA3OgorICAgICAgICByZXR1cm4gWDg2UmVnaXN0ZXJzOjpl
c3A7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZHdhcmZSZWdOdW0gPCAx
Nik7CisgICAgICAgIC8vIFJlZ2lzdGVycyByOC4ucjE1IGFyZSBudW1iZXJlZCBzZW5zaWJseS4K
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQUlJlZz4oZHdhcmZSZWdOdW0pOworICAgIH0K
K30KKwordm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpyZXN0b3JlSW50bygKKyAgICBNYWNyb0Fz
c2VtYmxlciYgaml0LCBjb25zdCBTdGFja01hcHMmIHN0YWNrbWFwcywgY2hhciogc2F2ZWRSZWdp
c3RlcnMsIEdQUlJlZyByZXN1bHQpCit7CisgICAgaWYgKGlzR1BSKCkpIHsKKyAgICAgICAgaml0
LmxvYWQ2NChzYXZlZFJlZ2lzdGVycyArIG9mZnNldE9mR1BSKGdwcigpKSwgcmVzdWx0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IFJlZ2lzdGVyOgorICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBoYW5kbGUgdGhlIG90aGVy
IHJlZ2lzdGVycy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMjUxOAorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSW5kaXJlY3Q6CisgICAgICAgIGppdC5s
b2FkNjQoc2F2ZWRSZWdpc3RlcnMgKyBvZmZzZXRPZkdQUihncHIoKSksIHJlc3VsdCk7CisgICAg
ICAgIGppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0LCBvZmZzZXQpLCBy
ZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIob2Zmc2V0KSwgcmVz
dWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENvbnN0YW50SW5kZXg6
CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoc3RhY2ttYXBz
LmNvbnN0YW50c1tvZmZzZXRdLmludGVnZXIpLCByZXN1bHQpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgVW5wcm9jZXNzZWQ6CisgICAgICAgIC8vIFNob3VsZCBuZXZlciBz
ZWUgdGhpcyAtIGl0J3MgYW4gZW51bWVyYXRpb24gZW50cnkgb24gTExWTSdzIHNpZGUgdGhhdCBt
ZWFucyB0aGF0CisgICAgICAgIC8vIGl0IGhhc24ndCBwcm9jZXNzZWQgdGhpcyBsb2NhdGlvbi4K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorI2Vsc2Ug
Ly8gQ1BVIGNhc2VzIGZvciBTdGFja01hcHM6OkxvY2F0aW9uCisjZXJyb3IgIkNQVSBhcmNoaXRl
Y3R1cmUgbm90IHN1cHBvcnRlZC4iCisjZW5kaWYgLy8gQ1BVIGNhc2VzIGZvciBTdGFja01hcHM6
OkxvY2F0aW9uCisKK2Jvb2wgU3RhY2tNYXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiB2aWV3
LCB1bnNpZ25lZCYgb2Zmc2V0KQoreworICAgIHBhdGNocG9pbnRJRCA9IHZpZXctPnJlYWQ8dWlu
dDMyX3Q+KG9mZnNldCwgdHJ1ZSk7CisgICAgaWYgKHN0YXRpY19jYXN0PGludDMyX3Q+KHBhdGNo
cG9pbnRJRCkgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaW5zdHJ1Y3Rp
b25PZmZzZXQgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOworICAgIGZsYWdz
ID0gdmlldy0+cmVhZDx1aW50MTZfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSB2aWV3LT5yZWFkPHVpbnQxNl90PihvZmZzZXQsIHRydWUpOworICAgIHdoaWxl
IChsZW5ndGgtLSkKKyAgICAgICAgbG9jYXRpb25zLmFwcGVuZChyZWFkT2JqZWN0PExvY2F0aW9u
Pih2aWV3LCBvZmZzZXQpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdGFj
a01hcHM6OlJlY29yZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgKKyAgICAgICAgIigjIiwgcGF0Y2hwb2ludElELCAiLCBvZmZzZXQgPSAiLCBpbnN0cnVj
dGlvbk9mZnNldCwgIiwgZmxhZ3MgPSAiLCBmbGFncywKKyAgICAgICAgIiwgWyIsIGxpc3REdW1w
KGxvY2F0aW9ucyksICJdKSIpOworfQorCitib29sIFN0YWNrTWFwczo6cGFyc2UoRGF0YVZpZXcq
IHZpZXcpCit7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKKyAgICAKKyAgICB1aW50MzJfdCBu
dW1Db25zdGFudHMgPSB2aWV3LT5yZWFkPHVpbnQzMl90PihvZmZzZXQsIHRydWUpOworICAgIHdo
aWxlIChudW1Db25zdGFudHMtLSkKKyAgICAgICAgY29uc3RhbnRzLmFwcGVuZChyZWFkT2JqZWN0
PENvbnN0YW50Pih2aWV3LCBvZmZzZXQpKTsKKyAgICAKKyAgICB1aW50MzJfdCBudW1SZWNvcmRz
ID0gdmlldy0+cmVhZDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlKTsKKyAgICB3aGlsZSAobnVtUmVj
b3Jkcy0tKSB7CisgICAgICAgIFJlY29yZCByZWNvcmQ7CisgICAgICAgIGlmICghcmVjb3JkLnBh
cnNlKHZpZXcsIG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
Y29yZHMuYXBwZW5kKHJlY29yZCk7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFN0YWNrTWFwczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiQ29uc3RhbnRzOlsiLCBsaXN0RHVtcChjb25zdGFudHMpLCAiXSwgUmVjb3Jkczpb
IiwgbGlzdER1bXAocmVjb3JkcyksICJdIik7Cit9CisKK3ZvaWQgU3RhY2tNYXBzOjpkdW1wTXVs
dGlsaW5lKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQocHJlZml4LCAiQ29uc3RhbnRzOlxuIik7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvbnN0YW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgb3V0LnByaW50KHByZWZp
eCwgIiAgICAiLCBjb25zdGFudHNbaV0sICJcbiIpOworICAgIG91dC5wcmludChwcmVmaXgsICJS
ZWNvcmRzOlxuIik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY29yZHMuc2l6ZSgp
OyArK2kpCisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgICAgIiwgcmVjb3Jkc1tpXSwgIlxu
Iik7Cit9CisKK1N0YWNrTWFwczo6UmVjb3JkTWFwIFN0YWNrTWFwczo6Z2V0UmVjb3JkTWFwKCkg
Y29uc3QKK3sKKyAgICBSZWNvcmRNYXAgcmVzdWx0OworICAgIGZvciAodW5zaWduZWQgaSA9IHJl
Y29yZHMuc2l6ZSgpOyBpLS07KQorICAgICAgICByZXN1bHQuYWRkKHJlY29yZHNbaV0ucGF0Y2hw
b2ludElELCByZWNvcmRzW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlND
OjpGVEw7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja01hcHM6
OkxvY2F0aW9uOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBT
dGFja01hcHM6OkxvY2F0aW9uOjpVbnByb2Nlc3NlZDoKKyAgICAgICAgb3V0LnByaW50KCJVbnBy
b2Nlc3NlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9u
OjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpJbmRpcmVjdDoKKyAgICAgICAgb3V0
LnByaW50KCJJbmRpcmVjdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja01hcHM6
OkxvY2F0aW9uOjpDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpDb25zdGFudEluZGV4
OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50SW5kZXgiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQga2luZDogIiwgc3RhdGljX2Nhc3Q8aW50
PihraW5kKSwgIlxuIik7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEZUTFN0YWNrTWFwc19oCisjZGVmaW5lIEZUTFN0YWNrTWFwc19oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBNYWNyb0Fzc2VtYmxlcjsKKworbmFtZXNwYWNlIEZUTCB7CisKK3N0cnVjdCBTdGFja01h
cHMgeworICAgIHVuaW9uIENvbnN0YW50IHsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7
CisgICAgICAgIGludDY0X3QgaW50ZWdlcjsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcGFyc2Uo
RGF0YVZpZXcqLCB1bnNpZ25lZCYgb2Zmc2V0KTsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIH07CisgICAgCisgICAgc3RydWN0IExvY2F0aW9uIHsKKyAg
ICAgICAgZW51bSBLaW5kIHsKKyAgICAgICAgICAgIFVucHJvY2Vzc2VkLAorICAgICAgICAgICAg
UmVnaXN0ZXIsCisgICAgICAgICAgICBJbmRpcmVjdCwKKyAgICAgICAgICAgIENvbnN0YW50LAor
ICAgICAgICAgICAgQ29uc3RhbnRJbmRleAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAg
dWludDE2X3QgZHdhcmZSZWdOdW07IC8vIFJlcHJlc2VudGVkIGFzIGEgMTItYml0IGludCBpbiB0
aGUgc2VjdGlvbi4KKyAgICAgICAgS2luZCBraW5kOworICAgICAgICBpbnQxNl90IG9mZnNldDsK
KyAgICAgICAgCisgICAgICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqLCB1bnNpZ25lZCYgb2Zmc2V0
KTsKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgICAgICAK
KyAgICAgICAgYm9vbCBpc0dQUigpIGNvbnN0OworICAgICAgICBib29sIGludm9sdmVzR1BSKCkg
Y29uc3Q7CisgICAgICAgIEdQUlJlZyBncHIoKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIC8v
IEFzc3VtaW5nIHRoYXQgYWxsIHJlZ2lzdGVycyBhcmUgc2F2ZWQgdG8gdGhlIHNhdmVkUmVnaXN0
ZXJzIGJ1ZmZlciBhY2NvcmRpbmcKKyAgICAgICAgLy8gdG8gRlRMU2F2ZVJlc3RvcmUgY29udmVu
dGlvbiwgdGhpcyBsb2FkcyB0aGUgdmFsdWUgaW50byB0aGUgZ2l2ZW4gcmVnaXN0ZXIuCisgICAg
ICAgIC8vIFRoZSBjb2RlIHRoYXQgdGhpcyBnZW5lcmF0ZXMgaXNuJ3QgZXhhY3RseSBzdXBlciBm
YXN0LgorICAgICAgICB2b2lkIHJlc3RvcmVJbnRvKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXImLCBjb25zdCBTdGFja01hcHMmIHN0YWNrbWFwcywgY2hhciogc2F2ZWRSZWdpc3RlcnMsCisg
ICAgICAgICAgICBHUFJSZWcgcmVzdWx0KTsKKyAgICB9OworICAgIAorICAgIHN0cnVjdCBSZWNv
cmQgeworICAgICAgICB1aW50MzJfdCBwYXRjaHBvaW50SUQ7CisgICAgICAgIHVpbnQzMl90IGlu
c3RydWN0aW9uT2Zmc2V0OworICAgICAgICB1aW50MTZfdCBmbGFnczsKKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxMb2NhdGlvbj4gbG9jYXRpb25zOworICAgICAgICAKKyAgICAgICAgYm9vbCBw
YXJzZShEYXRhVmlldyosIHVuc2lnbmVkJiBvZmZzZXQpOworICAgICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICB9OworICAgIAorICAgIFZlY3RvcjxDb25zdGFudD4gY29u
c3RhbnRzOworICAgIFZlY3RvcjxSZWNvcmQ+IHJlY29yZHM7CisgICAgCisgICAgYm9vbCBwYXJz
ZShEYXRhVmlldyopOyAvLyBSZXR1cm5zIHRydWUgb24gcGFyc2Ugc3VjY2VzcywgZmFsc2Ugb24g
ZmFpbHVyZS4gRmFpbHVyZSBtZWFucyB0aGF0IExMVk0gaXMgc2lnbmFsaW5nIGNvbXBpbGUgZmFp
bHVyZSB0byB1cy4KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lk
IGR1bXBNdWx0aWxpbmUoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgpIGNvbnN0Owor
ICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJfdCwgUmVjb3JkLCBXVEY6OkludEhhc2g8
dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4g
UmVjb3JkTWFwOworICAgIAorICAgIFJlY29yZE1hcCBnZXRSZWNvcmRNYXAoKSBjb25zdDsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9u
OjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKworI2VuZGlmIC8vIEZUTFN0YWNrTWFwc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRl
ICJGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiCisjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgi
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKQEAgLTU3LDYgKzU4LDkgQEAgcHVibGljOgogICAgIFZlY3RvcjxPU1JFeGl0Q29t
cGlsYXRpb25JbmZvPiBvc3JFeGl0OwogICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1
bmN0aW9uOwogICAgIEpJVEZpbmFsaXplciogZmluYWxpemVyOworICAgIFZlY3RvcjxDU3RyaW5n
PiBjb2RlU2VjdGlvbk5hbWVzOworICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlvbk5hbWVz
OworICAgIFJlZkNvdW50ZWRBcnJheTxMU2VjdGlvbldvcmQ+IHN0YWNrbWFwc1NlY3Rpb247CiAg
ICAgCiAgICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMTU3MTE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwxMSArMjgsMTIgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiQXNz
ZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2luY2x1ZGUgIkZUTE9TUkV4
aXRDb21waWxlci5oIgorI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCiAjaW5jbHVkZSAiR1BS
SW5mby5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAgLTQwLDcgKzQxLDEw
IEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICBNYWNyb0Fzc2VtYmxlciBq
aXQ7CisgICAgQXNzZW1ibHlIZWxwZXJzIGppdCh2bSwgMCk7CisgICAgCisgICAgLy8gTm90ZSB0
aGF0IGluIHRoZSBmdGxPU1JFeGl0VXNlc1N0YWNrbWFwKCkgY2FzZSwgdGhlICJyZXR1cm4gYWRk
cmVzcyIgd2lsbCBiZSB0aGUKKyAgICAvLyBPU1IgZXhpdCBJRC4KICAgICAKICAgICAvLyBQcmV0
ZW5kIHRoYXQgd2UncmUgYSBDIGNhbGwgZnJhbWUuCiAgICAgaml0LnB1c2goTWFjcm9Bc3NlbWJs
ZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTQ4LDQ0ICs1Miw0NiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgaml0LnB1c2goR1BSSW5mbzo6cmVn
VDApOwogICAgIGppdC5wdXNoKEdQUkluZm86OnJlZ1QwKTsKICAgICAKLSAgICBzaXplX3Qgc2Ny
YXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86Om51bWJlck9mQXJn
dW1lbnRSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKLSAg
ICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHNjcmF0Y2hTaXplKTsKLSAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOwotICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0
ZXJzOyArK2kpCi0gICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3Rl
cihpKSwgYnVmZmVyICsgaSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86
Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkgewotICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihidWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZkFyZ3Vt
ZW50UmVnaXN0ZXJzICsgaSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOwotICAgICAgICBqaXQuc3Rv
cmVEb3VibGUoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpLCBHUFJJbmZvOjpub25BcmdH
UFIxKTsKLSAgICB9CisgICAgaWYgKCFPcHRpb25zOjpmdGxPU1JFeGl0VXNlc1N0YWNrbWFwKCkp
CisgICAgICAgIGppdC5wb2tlKEdQUkluZm86Om5vbkFyZ0dQUjAsIDEpOworICAgIAorICAgIFNj
cmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSB2bS0+c2NyYXRjaEJ1ZmZlckZvclNpemUocmVx
dWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSk7CisgICAgY2hhciogYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CisgICAgCisgICAg
c2F2ZUFsbFJlZ2lzdGVycyhqaXQsIGJ1ZmZlcik7CiAgICAgCiAgICAgLy8gVGVsbCBHQyBtYXJr
IHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBhY3RpdmUgZHVyaW5nIGNh
bGwuCiAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1
ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLSAgICBqaXQu
c3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBHUFJJ
bmZvOjpub25BcmdHUFIxKTsKKyAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIocmVxdWlyZWRTY3JhdGNoTWVtb3J5U2l6ZUluQnl0ZXMoKSksIEdQUkluZm86Om5v
bkFyZ0dQUjEpOwogCiAgICAgLy8gYXJndW1lbnQgMCBpcyBhbHJlYWR5IHRoZSBjYWxsIGZyYW1l
LgotICAgIGppdC5tb3ZlKEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgaWYgKE9wdGlvbnM6OmZ0bE9TUkV4aXRVc2VzU3RhY2ttYXAoKSkKKyAgICAgICAg
aml0LnBlZWsoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAzKTsKKyAgICBlbHNlCisgICAgICAgIGpp
dC5wZWVrKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoKTsKICAgICAKLSAgICAvLyBNYWtlIHN1cmUgdGhh
dCB3ZSdyZSBub3QgdXNpbmcgdGhlIHJldHVybiByZWdpc3RlciBpZiBpdCdzIGFuIGFyZ3VtZW50
IHJlZ2lzdGVyLgotICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdhbnQgdG8gbWFrZSBhIHRh
aWwgY2FsbCB0byB3aGF0IHdhcyByZXR1cm5lZCB0byB1cyBpbiB0aGUKKyAgICAvLyByZXR1cm5W
YWx1ZUdQUi4gQnV0IGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgZG8gdGhpcywgd2UgbXVzdCByZXN0
b3JlIGFsbCByZWdpc3RlcnMuCisgICAgLy8gVGhlIHdheSB3ZSB3aWxsIGFjY29tcGxpc2ggdGhp
cyBpcyBieSBhcnJhbmdpbmcgdG8gaGF2ZSB0aGUgdGFpbCBjYWxsIHRhcmdldCBpbiB0aGUKKyAg
ICAvLyByZXR1cm4gYWRkcmVzcyAic2xvdCIgKGJlIGl0IGEgcmVnaXN0ZXIgb3IgdGhlIHN0YWNr
KS4KKyAgICAKKyAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6
cmVnVDApOwogICAgIAogICAgIC8vIFByZXBhcmUgZm9yIHRhaWwgY2FsbC4KLSAgICBqaXQucG9w
KEdQUkluZm86Om5vbkFyZ0dQUjEpOwotICAgIGppdC5wb3AoR1BSSW5mbzo6bm9uQXJnR1BSMSk7
CisgICAgaml0LnBvcChHUFJJbmZvOjpyZWdUMSk7CisgICAgaml0LnBvcChHUFJJbmZvOjpyZWdU
MSk7CiAgICAgaml0LnBvcChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwog
ICAgIAotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hC
dWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Ci0gICAgaml0
LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBHUFJJbmZvOjpub25B
cmdHUFIxKTsKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIHNpdHRpbmcgb24gdGhlIHJldHVy
biBhZGRyZXNzIC0gc28gaWYgd2UgZGlkIGEganVtcCByaWdodCBub3csIHRoZQorICAgIC8vIHRh
aWwtY2FsbGVlIHdvdWxkIGJlIGhhcHB5LiBJbnN0ZWFkIHdlJ2xsIHN0YXNoIHRoZSBjYWxsZWUg
aW4gdGhlIHJldHVybiBhZGRyZXNzIGFuZCB0aGVuCisgICAgLy8gcmVzdG9yZSBhbGwgcmVnaXN0
ZXJzLgogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJP
ZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpIHsKLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lz
dGVycyArIGkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKLSAgICAgICAgaml0LmxvYWREb3VibGUo
R1BSSW5mbzo6bm9uQXJnR1BSMSwgRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsKLSAg
ICB9Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1l
bnRSZWdpc3RlcnM7ICsraSkKLSAgICAgICAgaml0LmxvYWQ2NChidWZmZXIgKyBpLCBHUFJJbmZv
Ojp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpOworICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihHUFJJbmZvOjpyZWdUMCk7CiAgICAgCi0gICAgaml0Lmp1bXAoR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgcmVzdG9yZUFsbFJlZ2lzdGVycyhqaXQsIGJ1ZmZlcik7CisKKyAg
ICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZqaXQs
IEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGwsIGNv
bXBpbGVGVExPU1JFeGl0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFs
dWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VmFsdWVGb3JtYXQuY3BwCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNjcg
QEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCByZWJveEFjY29yZGlu
Z1RvRm9ybWF0KAorICAgIFZhbHVlRm9ybWF0IGZvcm1hdCwgQXNzZW1ibHlIZWxwZXJzJiBqaXQs
IEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6IHsKKyAgICAgICAg
aml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB2YWx1ZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0VUludDMyOiB7CisgICAg
ICAgIGppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpmcFJlZ1QwLCBzY3JhdGNoMik7CisgICAg
ICAgIGppdC5ib3hJbnQ1Mih2YWx1ZSwgdmFsdWUsIHNjcmF0Y2gxLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQ1
MjogeworICAgICAgICBqaXQucnNoaWZ0NjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCksIHZhbHVlKTsKKyAgICAgICAgaml0Lm1vdmVEb3Vi
bGVUbzY0KEZQUkluZm86OmZwUmVnVDAsIHNjcmF0Y2gyKTsKKyAgICAgICAgaml0LmJveEludDUy
KHZhbHVlLCB2YWx1ZSwgc2NyYXRjaDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBqaXQu
bW92ZTY0VG9Eb3VibGUoc2NyYXRjaDIsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgCisgICAgY2FzZSBWYWx1ZUZvcm1hdFN0cmljdEludDUyOiB7CisgICAg
ICAgIGppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpmcFJlZ1QwLCBzY3JhdGNoMik7CisgICAg
ICAgIGppdC5ib3hJbnQ1Mih2YWx1ZSwgdmFsdWUsIHNjcmF0Y2gxLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gyLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2UgVmFsdWVGb3JtYXRCb29s
ZWFuOiB7CisgICAgICAgIGppdC5vcjMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoVmFs
dWVGYWxzZSksIHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2Ug
VmFsdWVGb3JtYXRKU1ZhbHVlOiB7CisgICAgICAgIC8vIERvbmUgYWxyZWFkeSEKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2UgVmFsdWVGb3JtYXREb3VibGU6IHsKKyAgICAg
ICAgaml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OmZwUmVnVDAsIHNjcmF0Y2gxKTsKKyAgICAg
ICAgaml0Lm1vdmU2NFRvRG91YmxlKHZhbHVlLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAg
aml0LmJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB2YWx1ZSk7CisgICAgICAgIGppdC5tb3Zl
NjRUb0RvdWJsZShzY3JhdGNoMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKwogbmFtZXNwYWNlIFdURiB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M6OkZUTDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJKHJldmlzaW9u
IDE1NzExOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTQgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQog
CisjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
QXNzZW1ibHlIZWxwZXJzOworCituYW1lc3BhY2UgRlRMIHsKIAogLy8gTm90ZSB0aGF0IHRoaXMg
aXMgYXdrd2FyZGx5IHNpbWlsYXIgdG8gRGF0YUZvcm1hdCBpbiBvdGhlciBwYXJ0cyBvZiBKU0Ms
IGV4Y2VwdCB0aGF0CiAvLyB1bmxpa2UgRGF0YUZvcm1hdCBhbmQgbGlrZSBWYWx1ZVJlY292ZXJ5
LCBpdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gVUludDMyIGFuZCBJbnQzMi4KQEAgLTQ4LDYgKzUz
LDkgQEAgZW51bSBWYWx1ZUZvcm1hdCB7CiAgICAgVmFsdWVGb3JtYXREb3VibGUKIH07CiAKK3Zv
aWQgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKKyAgICBWYWx1ZUZvcm1hdCwgQXNzZW1ibHlIZWxw
ZXJzJiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAxNTcxMTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDEyIEBAIFBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3Ojpj
cmVhdGUoCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZz
ZXQsIGJ5dGVMZW5ndGgpKTsKIH0KIAorUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNy
ZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgcmV0dXJuIGNyZWF0ZShi
dWZmZXIsIDAsIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKK30KKwogSlNBcnJheUJ1ZmZlclZpZXcq
IERhdGFWaWV3Ojp3cmFwKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIHsKICAgICByZXR1cm4gSlNEYXRhVmlldzo6Y3JlYXRlKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw2ICszOCw3IEBAIHByb3RlY3RlZDoKICAgICAKIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOwog
ICAgIAogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IE9WRVJSSURFCiAg
ICAgewpAQCAtNjgsNiArNjksMTUgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIFQgcmVhZCh1bnNpZ25lZCYgb2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgYm9vbCogc3RhdHVzID0gMCkKKyAgICB7CisgICAgICAgIFQgcmVzdWx0ID0gdGhpcy0+
dGVtcGxhdGUgZ2V0PFQ+KG9mZnNldCwgbGl0dGxlRW5kaWFuLCBzdGF0dXMpOworICAgICAgICBp
ZiAoIXN0YXR1cyB8fCAqc3RhdHVzKQorICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihUKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KICAgICB2b2lkIHNldCh1bnNpZ25lZCBvZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBib29sKiBzdGF0dXMgPSAwKQogICAgIHsKICAgICAgICAgaWYgKHN0YXR1cykgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTU3
MTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjMsOSArMTIzLDExIEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFu
Z2U7CiAgICAgdihib29sLCB1c2VMTFZNU21hbGxDb2RlTW9kZWwsIGZhbHNlKSBcCiAgICAgdihi
b29sLCBmdGxUcmFwc09uT1NSRXhpdCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIGZ0bE9TUkV4aXRP
bWl0c01hcnNoYWxsaW5nLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgZnRsT1NSRXhpdFVzZXNTdGFj
a21hcCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHVzZUxMVk1PU1JFeGl0SW50cmluc2ljLCBmYWxz
ZSkgXAogICAgIHYoYm9vbCwgZHVtcExMVk1JUiwgZmFsc2UpIFwKLSAgICB2KGJvb2wsIGxsdm1B
bHdheXNGYWlscywgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGxsdm1BbHdheXNGYWlsc0JlZm9yZUNv
bXBpbGUsIGZhbHNlKSBcCisgICAgdihib29sLCBsbHZtQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBm
YWxzZSkgXAogICAgIHYodW5zaWduZWQsIGxsdm1CYWNrZW5kT3B0aW1pemF0aW9uTGV2ZWwsIDIp
IFwKICAgICB2KHVuc2lnbmVkLCBsbHZtT3B0aW1pemF0aW9uTGV2ZWwsIDIpIFwKICAgICB2KHVu
c2lnbmVkLCBsbHZtU2l6ZUxldmVsLCAwKSBcCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MTU1KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAx
My0xMC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEZUTCBz
aG91bGQgYmUgYWJsZSB0byBkbyBzaW1wbGUgT1NSIGV4aXRzIHVzaW5nIGxsdm0ud2Via2l0LnN0
YWNrbWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjI1MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHd0Zi9QcmludFN0cmVhbS5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAg
ICAgICAqIHd0Zi9QcmludFN0cmVhbS5oOgorICAgICAgICAqIHd0Zi9SZWZDb3VudGVkQXJyYXku
aDoKKyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpieXRlU2l6ZSk6CisKIDIwMTMtMTAt
MDggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHVy
biB0aHJlYWRlZCBzY3JvbGxpbmcgb24gZm9yIGFsbCBNYWMgcG9ydHMuCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9QcmludFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUHJp
bnRTdHJlYW0uY3BwCShyZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9QcmludFN0
cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDE2IEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCB1bnMKICAgICBvdXQucHJpbnRmKCIldSIsIHZhbHVlKTsK
IH0KIAordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIHNob3J0IHZhbHVlKQor
eworICAgIG91dC5wcmludGYoIiVkIiwgc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpOworfQorCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgdW5zaWduZWQgc2hvcnQgdmFsdWUp
Cit7CisgICAgb3V0LnByaW50ZigiJXUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpKTsK
K30KKwogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGxvbmcgdmFsdWUpCiB7
CiAgICAgb3V0LnByaW50ZigiJWxkIiwgdmFsdWUpOwpJbmRleDogU291cmNlL1dURi93dGYvUHJp
bnRTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCShy
ZXZpc2lvbiAxNTcxMTgpCisrKyBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTcsNiArMjU3LDggQEAgaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgbwogaW5saW5lIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBT
dHJpbmcmIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxjb25zdCBTdHJp
bmcmPih2YWx1ZSkpOyB9CiBpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFN0cmluZ0ltcGwqIHZhbHVlKSB7IHByaW50SW50ZXJuYWwob3V0LCBzdGF0aWNfY2FzdDxj
b25zdCBTdHJpbmdJbXBsKj4odmFsdWUpKTsgfQogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIGJvb2wpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIHNob3J0KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCB1bnNpZ25lZCBzaG9ydCk7CiBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgaW50KTsKIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCB1bnNpZ25lZCk7
CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgbG9u
Zyk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAkocmV2aXNpb24gMTU3MTE4KQorKysg
U291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2
ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBIZWFkZXI6OmZyb21QYXlsb2FkKG1f
ZGF0YSktPmxlbmd0aDsKICAgICB9CiAgICAgCisgICAgc2l6ZV90IGJ5dGVTaXplKCkgY29uc3Qg
eyByZXR1cm4gc2l6ZSgpICogc2l6ZW9mKFQpOyB9CisgICAgCiAgICAgVCogZGF0YSgpIHsgcmV0
dXJuIG1fZGF0YTsgfQogICAgIFQqIGJlZ2luKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgVCog
ZW5kKCkK
</data>
<flag name="review"
          id="236151"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>