<?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>112741</bug_id>
          
          <creation_ts>2013-03-19 13:52:59 -0700</creation_ts>
          <short_desc>JSC: Fix incorrect debugger column number value</short_desc>
          <delta_ts>2013-03-20 02:12:33 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>858704</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-19 13:52:59 -0700</bug_when>
    <thetext>The column number for function block entries can be erroneous.  Will fix.

ref: &lt;rdar://problem/13277445&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859014</commentid>
    <comment_count>1</comment_count>
      <attachid>193974</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-19 20:29:00 -0700</bug_when>
    <thetext>Created attachment 193974
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859018</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 20:33:05 -0700</bug_when>
    <thetext>Attachment 193974 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/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/parser/ASTBuilder.h&apos;, u&apos;Source/JavaScriptCore/parser/Lexer.cpp&apos;, u&apos;Source/JavaScriptCore/parser/Lexer.h&apos;, u&apos;Source/JavaScriptCore/parser/NodeConstructors.h&apos;, u&apos;Source/JavaScriptCore/parser/Nodes.cpp&apos;, u&apos;Source/JavaScriptCore/parser/Nodes.h&apos;, u&apos;Source/JavaScriptCore/parser/Parser.cpp&apos;, u&apos;Source/JavaScriptCore/parser/Parser.h&apos;, u&apos;Source/JavaScriptCore/parser/ParserTokens.h&apos;, u&apos;Source/JavaScriptCore/parser/SyntaxChecker.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/text/StringImpl.cpp&apos;, u&apos;Source/WTF/wtf/text/StringImpl.h&apos;, u&apos;Source/WTF/wtf/text/WTFString.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/parser/Parser.h:975:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859048</commentid>
    <comment_count>3</comment_count>
      <attachid>193974</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-19 21:16:29 -0700</bug_when>
    <thetext>Comment on attachment 193974
the patch

Attachment 193974 did not pass win-ews (win):
Output: http://webkit-commit-queue.appspot.com/results/17213721</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859056</commentid>
    <comment_count>4</comment_count>
      <attachid>193980</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-19 21:31:23 -0700</bug_when>
    <thetext>Created attachment 193980
new patch with the obsolete refs removed from the export list files and added a missing ChangeLog comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859057</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 21:33:23 -0700</bug_when>
    <thetext>Attachment 193980 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.order&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/parser/ASTBuilder.h&apos;, u&apos;Source/JavaScriptCore/parser/Lexer.cpp&apos;, u&apos;Source/JavaScriptCore/parser/Lexer.h&apos;, u&apos;Source/JavaScriptCore/parser/NodeConstructors.h&apos;, u&apos;Source/JavaScriptCore/parser/Nodes.cpp&apos;, u&apos;Source/JavaScriptCore/parser/Nodes.h&apos;, u&apos;Source/JavaScriptCore/parser/Parser.cpp&apos;, u&apos;Source/JavaScriptCore/parser/Parser.h&apos;, u&apos;Source/JavaScriptCore/parser/ParserTokens.h&apos;, u&apos;Source/JavaScriptCore/parser/SyntaxChecker.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/text/StringImpl.cpp&apos;, u&apos;Source/WTF/wtf/text/StringImpl.h&apos;, u&apos;Source/WTF/wtf/text/WTFString.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/parser/Parser.h:975:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859135</commentid>
    <comment_count>6</comment_count>
      <attachid>193980</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-03-20 00:56:51 -0700</bug_when>
    <thetext>Comment on attachment 193980
new patch with the obsolete refs removed from the export list files and added a missing ChangeLog comment.

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

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:1347
&gt; +    size_t lineTerminatorPosition = source.reverseFindLineTerminator(actualCharPosition);

Does this vend the correct column number for script attributes and other things where the start of the source doesn&apos;t match the start of the line?   e.g.

&lt;script&gt;foo()
&lt;/script&gt;

or &lt;foo onload=&quot;blah()&quot;&gt;
?

&gt; Source/WTF/ChangeLog:18
&gt; +2013-03-19  Mark Lam  &lt;mark.lam@apple.com&gt;
&gt; +
&gt; +        Need a short description (OOPS!).
&gt; +        Need the bug URL (OOPS!).
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * wtf/text/StringImpl.cpp:
&gt; +        (WTF::StringImpl::reverseFindLineTerminator):
&gt; +        (WTF):
&gt; +        * wtf/text/StringImpl.h:
&gt; +        (StringImpl):
&gt; +        (WTF):
&gt; +        (WTF::reverseFindLineTerminator):
&gt; +        * wtf/text/WTFString.h:
&gt; +        (WTF::String::reverseFindLineTerminator):
&gt; +        (String):
&gt; +

Double changelog :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859142</commentid>
    <comment_count>7</comment_count>
      <attachid>193980</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-20 01:04:26 -0700</bug_when>
    <thetext>Comment on attachment 193980
new patch with the obsolete refs removed from the export list files and added a missing ChangeLog comment.

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

&gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:1347
&gt;&gt; +    size_t lineTerminatorPosition = source.reverseFindLineTerminator(actualCharPosition);
&gt; 
&gt; Does this vend the correct column number for script attributes and other things where the start of the source doesn&apos;t match the start of the line?   e.g.
&gt; 
&gt; &lt;script&gt;foo()
&gt; &lt;/script&gt;
&gt; 
&gt; or &lt;foo onload=&quot;blah()&quot;&gt;
&gt; ?

It checks for a ‘\n’ or ‘\t’ or ‘\0’.  So, it doesn’t care if you have html tags preceding it.  It truly measures the displacement from the start of the line.  That’s what we want, right?

&gt;&gt; Source/WTF/ChangeLog:18
&gt;&gt; +
&gt; 
&gt; Double changelog :(

Duh!!! Will fix.  Can I get a r+ to land assuming I fix this before landing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859146</commentid>
    <comment_count>8</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-03-20 01:14:14 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 193980 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193980&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:1347
&gt; &gt;&gt; +    size_t lineTerminatorPosition = source.reverseFindLineTerminator(actualCharPosition);
&gt; &gt; 
&gt; &gt; Does this vend the correct column number for script attributes and other things where the start of the source doesn&apos;t match the start of the line?   e.g.
&gt; &gt; 
&gt; &gt; &lt;script&gt;foo()
&gt; &gt; &lt;/script&gt;
&gt; &gt; 
&gt; &gt; or &lt;foo onload=&quot;blah()&quot;&gt;
&gt; &gt; ?
&gt; 
&gt; It checks for a ‘\n’ or ‘\t’ or ‘\0’.  So, it doesn’t care if you have html tags preceding it.  It truly measures the displacement from the start of the line.  That’s what we want, right?

&apos;\0&apos; can&apos;t appear in the string - how do you ensure that the offset you are recording as the start of a line is the actual start of the line?  Alternatively how do you avoid walking off the start of the source?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859151</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-20 01:23:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 193980 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193980&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:1347
&gt; &gt; &gt;&gt; +    size_t lineTerminatorPosition = source.reverseFindLineTerminator(actualCharPosition);
&gt; &gt; &gt; 
&gt; &gt; &gt; Does this vend the correct column number for script attributes and other things where the start of the source doesn&apos;t match the start of the line?   e.g.
&gt; &gt; &gt; 
&gt; &gt; &gt; &lt;script&gt;foo()
&gt; &gt; &gt; &lt;/script&gt;
&gt; &gt; &gt; 
&gt; &gt; &gt; or &lt;foo onload=&quot;blah()&quot;&gt;
&gt; &gt; &gt; ?
&gt; &gt; 
&gt; &gt; It checks for a ‘\n’ or ‘\t’ or ‘\0’.  So, it doesn’t care if you have html tags preceding it.  It truly measures the displacement from the start of the line.  That’s what we want, right?
&gt; 
&gt; &apos;\0&apos; can&apos;t appear in the string - how do you ensure that the offset you are recording as the start of a line is the actual start of the line?  Alternatively how do you avoid walking off the start of the source?

See reverseFindLineTerminator() in StringImpl.h (also in this patch).  “source” is a WTF::String.  The reverseFind is bounded by the length of the string.  If it runs out of characters, it will return notFound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859152</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-20 01:27:05 -0700</bug_when>
    <thetext>&gt; (In reply to comment #8)
&gt; &gt; &apos;\0&apos; can&apos;t appear in the string - how do you ensure that the offset you are recording as the start of a line is the actual start of the line?  Alternatively how do you avoid walking off the start of the source?

Regarding ‘\0’, I included in the StringImpl::reverseFindLineTerminator() because it uses an explicitly specified length unlike C strings that requires a ‘\0’ terminator.  I wasn’t sure if we ever allow WTF::String instances that include ‘\0’ in them (though we don’t allow that in our parsed source strings.  Are you saying that we (the webkit project) does not allow that?  If so, I can remove the ‘\0’ check in StringImpl::reverseFindLineTerminator().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859161</commentid>
    <comment_count>11</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-03-20 01:37:04 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &apos;\0&apos; can&apos;t appear in the string - how do you ensure that the offset you are recording as the start of a line is the actual start of the line?  Alternatively how do you avoid walking off the start of the source?
&gt; 
&gt; Regarding ‘\0’, I included in the StringImpl::reverseFindLineTerminator() because it uses an explicitly specified length unlike C strings that requires a ‘\0’ terminator.  I wasn’t sure if we ever allow WTF::String instances that include ‘\0’ in them (though we don’t allow that in our parsed source strings.  Are you saying that we (the webkit project) does not allow that?  If so, I can remove the ‘\0’ check in StringImpl::reverseFindLineTerminator().

It&apos;s probably possible to induce a null in a html string or some such, but in such a case i don&apos;t believe the null would be a line delimiter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859171</commentid>
    <comment_count>12</comment_count>
      <attachid>194000</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-20 01:44:34 -0700</bug_when>
    <thetext>Created attachment 194000
patch : addressed Oliver’s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859173</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-20 01:49:04 -0700</bug_when>
    <thetext>Attachment 194000 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.order&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/parser/ASTBuilder.h&apos;, u&apos;Source/JavaScriptCore/parser/Lexer.cpp&apos;, u&apos;Source/JavaScriptCore/parser/Lexer.h&apos;, u&apos;Source/JavaScriptCore/parser/NodeConstructors.h&apos;, u&apos;Source/JavaScriptCore/parser/Nodes.cpp&apos;, u&apos;Source/JavaScriptCore/parser/Nodes.h&apos;, u&apos;Source/JavaScriptCore/parser/Parser.cpp&apos;, u&apos;Source/JavaScriptCore/parser/Parser.h&apos;, u&apos;Source/JavaScriptCore/parser/ParserTokens.h&apos;, u&apos;Source/JavaScriptCore/parser/SyntaxChecker.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/text/StringImpl.cpp&apos;, u&apos;Source/WTF/wtf/text/StringImpl.h&apos;, u&apos;Source/WTF/wtf/text/WTFString.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/parser/Parser.h:975:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859185</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-03-20 02:12:33 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r146318: &lt;http://trac.webkit.org/changeset/146318&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193974</attachid>
            <date>2013-03-19 20:29:00 -0700</date>
            <delta_ts>2013-03-19 21:31:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>bug-112741.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64"></data>
<flag name="commit-queue"
          id="215653"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193980</attachid>
            <date>2013-03-19 21:31:23 -0700</date>
            <delta_ts>2013-03-20 01:44:34 -0700</delta_ts>
            <desc>new patch with the obsolete refs removed from the export list files and added a missing ChangeLog comment.</desc>
            <filename>bug-112741.patch</filename>
            <type>text/plain</type>
            <size>78344</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ2MzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBA
QAorMjAxMy0wMy0xOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Rml4IGluY29ycmVjdCBkZWJ1Z2dlciBjb2x1bW4gbnVtYmVyIHZhbHVlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyNzQxLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEluIGxleGVyLCBwYXJzZXIs
IGFuZCBkZWJ1Z2dlciBjb2RlLCByZW5hbWVkIGNvbHVtbiB0byBjaGFyUG9zaXRpb24uCisgICAg
ICAgIDIuIENvbnZlcnQgdGhlIGNoYXJQb3NpdGlvbiB0byB0aGUgZXF1aXZhbGVudCBjb2x1bW4g
bnVtYmVyIGJlZm9yZQorICAgICAgICAgICBwYXNzaW5nIGl0IHRvIHRoZSBkZWJ1Z2dlci4KKyAg
ICAgICAgMy4gQ2hhbmdlZCBTY29wZU5vZGVzIHRvIHRha2UgYm90aCBhIHN0YXJ0TG9jYXRpb24g
YW5kIGFuIGVuZExvY2F0aW9uLgorICAgICAgICAgICBUaGlzIGFsbG93cyBGdW5jdGlvbkJvZHlO
b2RlcywgUHJvZ3JhbU5vZGVzLCBhbmQgRXZhbE5vZGVzcyB0byBlbWl0CisgICAgICAgICAgIGNv
cnJlY3QgZGVidWcgaG9va3Mgd2l0aCBjb3JyZWN0IHN0YXJ0aW5nIGxpbmUgYW5kIGNvbHVtbiBu
dW1iZXJzLgorICAgICAgICA0LiBGaXhlZCB0aGUgTGV4ZXIgdG8gbm90IHJlc2V0IHRoZSBjaGFy
UG9zaXRpb24gKHByZXZpb3VzbHkKKyAgICAgICAgICAgY29sdW1uTnVtYmVyKSBpbiBMZXhlcjo6
bGV4KCkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5vcmRlcjoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVFeHBvcnRzLmRl
ZjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlRXhwb3J0
R2VuZXJhdG9yL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW46CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUp
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVidWdIb29rKToKKyAgICAgICAgKiBieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFeHByZXNzaW9uSW5mbyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkFycmF5Tm9kZTo6dG9Bcmd1bWVudExpc3QpOgor
ICAgICAgICAoSlNDOjpDb25zdFN0YXRlbWVudE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OkVtcHR5U3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFeHBy
U3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6VmFyU3RhdGVtZW50
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6SWZOb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpJZkVsc2VOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpEb1doaWxlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6V2hpbGVOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvbnRp
bnVlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QnJlYWtOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpSZXR1cm5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAg
ICAoSlNDOjpXaXRoTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6U3dpdGNoTm9k
ZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6TGFiZWxOb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpUaHJvd05vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6
OlRyeU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkZWJ1
Zyk6CisgICAgICAgIC0gY29udmVydCBjaGFyUG9zaXRpb24gdG8gY29sdW1uIGZvciB0aGUgZGVi
dWdnZXIuCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bf
ZGVidWcpKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X29wX2RlYnVnKSk6CisgICAgICAgICogcGFyc2VyL0FT
VEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY3Rpb25FeHBy
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY3Rpb25Cb2R5KToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQmxvY2tTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpB
U1RCdWlsZGVyOjpjcmVhdGVFeHByU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6Y3JlYXRlSWZTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVG
b3JMb29wKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlVmFyU3RhdGVtZW50KToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6Y3JlYXRlQnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNy
ZWF0ZVRyeVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVN3aXRj
aFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVdoaWxlU3RhdGVt
ZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG9XaGlsZVN0YXRlbWVudCk6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVdpdGhTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUaHJvd1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6OmNyZWF0ZURlYnVnZ2VyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
Y3JlYXRlQ29uc3RTdGF0ZW1lbnQpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6CisgICAg
ICAgIChKU0M6Ojo6c2V0Q29kZSk6CisgICAgICAgIChKU0M6Ojo6aW50ZXJuYWxTaGlmdCk6Cisg
ICAgICAgIChKU0M6Ojo6c2hpZnQpOgorICAgICAgICAoSlNDOjo6OmxleCk6CisgICAgICAgICog
cGFyc2VyL0xleGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50Q2hhclBvc2l0aW9u
KToKKyAgICAgICAgKExleGVyKToKKyAgICAgICAgKEpTQzo6OjpsZXhFeHBlY3RJZGVudGlmaWVy
KToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpO
b2RlOjpOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpT
dGF0ZW1lbnROb2RlOjpzZXRMb2MpOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OlNjb3BlTm9k
ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZSk6CisgICAgICAgIChK
U0M6OlByb2dyYW1Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5v
ZGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
Qm9keU5vZGU6OmNyZWF0ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChK
U0M6Ok5vZGU6OmNoYXJQb3NpdGlvbik6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKFN0YXRl
bWVudE5vZGUpOgorICAgICAgICAoSlNDOjpTdGF0ZW1lbnROb2RlOjpsYXN0TGluZSk6CisgICAg
ICAgIChTY29wZU5vZGUpOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OnN0YXJ0TGluZSk6Cisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c3RhcnRDaGFyUG9zaXRpb24pOgorICAgICAgICAoUHJv
Z3JhbU5vZGUpOgorICAgICAgICAoRXZhbE5vZGUpOgorICAgICAgICAoRnVuY3Rpb25Cb2R5Tm9k
ZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6UGFyc2Vy
KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6
cGFyc2VGdW5jdGlvbkluZm8pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAg
KEpTQzo6OjpwYXJzZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlclRva2Vucy5oOgorICAgICAg
ICAoSlNDOjpKU1Rva2VuTG9jYXRpb246OkpTVG9rZW5Mb2NhdGlvbik6CisgICAgICAgIChKU1Rv
a2VuTG9jYXRpb24pOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAg
IChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6CisKIDIwMTMtMDMtMTkg
IE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggd2hl
biBsb2FkaW5nIGh0dHA6Ly93d3cuanFjaGFydC5jb20vanF1ZXJ5L2dhdWdlcy9SYWRpYWxHYXVn
ZS9MaXZlRGF0YQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLm9y
ZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5v
cmRlcgkocmV2aXNpb24gMTQ2MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC00NjgsNyArNDY4LDYgQEAgX19aTjNKU0Mx
MVByb2dyYW1Ob2RlNmNyZWF0ZUVQTlNfMTJKU0dsbwogX19aTjNKU0M5U2NvcGVOb2RlQzJFUE5T
XzEySlNHbG9iYWxEYXRhRVJLTlNfMTBTb3VyY2VDb2RlRVBOU18xNFNvdXJjZUVsZW1lbnRzRVBO
M1dURjZWZWN0b3JJU3Q0cGFpcklQS05TXzEwSWRlbnRpZmllckVqRUxtMEVFRVBOUzlfSVBOU18x
NkZ1bmN0aW9uQm9keU5vZGVFTG0wRUVFUk5TOF83SGFzaFNldElOUzhfNlJlZlB0cklOUzhfMTBT
dHJpbmdJbXBsRUVFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzhfMTBIYXNoVHJhaXRzSVNPX0VF
RUVqaQogX19aTjNKU0MxMVBhcnNlckFyZW5hMTRkZXJlZldpdGhBcmVuYUVOM1dURjEwUGFzc1Jl
ZlB0cklOU18yMVBhcnNlckFyZW5hUmVmQ291bnRlZEVFRQogX19aTjNKU0MxMVBhcnNlckFyZW5h
MTByZW1vdmVMYXN0RXYKLV9fWk4zSlNDMTNTdGF0ZW1lbnROb2RlNnNldExvY0VpaQogX19aTjNK
U0MxMVBhcnNlckFyZW5hNXJlc2V0RXYKIF9fWk4zV1RGNlZlY3RvcklOM0pTQzEwSWRlbnRpZmll
ckVMbTY0RUUxNHNocmlua0NhcGFjaXR5RW0KIF9fWk4zSlNDOUNvZGVCbG9ja0MyRVBOU18xNlNj
cmlwdEV4ZWN1dGFibGVFTlNfOENvZGVUeXBlRVBOU18xNEpTR2xvYmFsT2JqZWN0RU4zV1RGMTBQ
YXNzUmVmUHRySU5TXzE0U291cmNlUHJvdmlkZXJFRUVqUE5TNl83SGFzaE1hcElOUzZfNlJlZlB0
cklOUzZfMTBTdHJpbmdJbXBsRUVFTlNfMTZTeW1ib2xUYWJsZUVudHJ5RU5TXzE3SWRlbnRpZmll
clJlcEhhc2hFTlM2XzEwSGFzaFRyYWl0c0lTRF9FRU5TXzI2U3ltYm9sVGFibGVJbmRleEhhc2hU
cmFpdHNFRUViCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTM2MSw3ICszNjEsNiBA
QCBFWFBPUlRTCiAgICAgP3NldEdldHRlckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYVkpT
VmFsdWVAMkBAWgogICAgID9zZXRHbG9iYWxUaGlzQEpTR2xvYmFsT2JqZWN0QEpTQ0BASUFFWEFB
VkpTR2xvYmFsRGF0YUAyQFBBVkpTT2JqZWN0QDJAQFoKICAgICA/c2V0SW5kZXhRdWlja2x5VG9V
bmRlY2lkZWRASlNPYmplY3RASlNDQEBBQUVYQUFWSlNHbG9iYWxEYXRhQDJASVZKU1ZhbHVlQDJA
QFoKLSAgICA/c2V0TG9jQFN0YXRlbWVudE5vZGVASlNDQEBRQUVYSEhAWgogICAgID9zZXRNYWlu
VGhyZWFkQ2FsbGJhY2tzUGF1c2VkQFdURkBAWUFYX05AWgogICAgID9zZXRPcHRpb25AT3B0aW9u
c0BKU0NAQFNBX05QQkRAWgogICAgID9zZXRPcmRlckxvd2VyRmlyc3RAQ29sbGF0b3JAV1RGQEBR
QUVYX05AWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmVFeHBvcnRHZW5lcmF0b3IvSmF2YVNjcmlwdENvcmVFeHBvcnRzLmRl
Zi5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZUV4cG9ydEdlbmVyYXRvci9KYXZhU2NyaXB0Q29yZUV4cG9y
dHMuZGVmLmluCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZUV4cG9ydEdlbmVyYXRvci9KYXZhU2Ny
aXB0Q29yZUV4cG9ydHMuZGVmLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNyArMzYwLDYgQEAg
RVhQT1JUUwogICAgID9zZXRHZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUFFWFZKU1Zh
bHVlQDJAQFoKICAgICA/c2V0R2xvYmFsVGhpc0BKU0dsb2JhbE9iamVjdEBKU0NAQElBRVhBQVZK
U0dsb2JhbERhdGFAMkBQQVZKU09iamVjdEAyQEBaCiAgICAgP3NldEluZGV4UXVpY2tseVRvVW5k
ZWNpZGVkQEpTT2JqZWN0QEpTQ0BAQUFFWEFBVkpTR2xvYmFsRGF0YUAyQElWSlNWYWx1ZUAyQEBa
Ci0gICAgP3NldExvY0BTdGF0ZW1lbnROb2RlQEpTQ0BAUUFFWEhIQFoKICAgICA/c2V0TWFpblRo
cmVhZENhbGxiYWNrc1BhdXNlZEBXVEZAQFlBWF9OQFoKICAgICA/c2V0T3B0aW9uQE9wdGlvbnNA
SlNDQEBTQV9OUEJEQFoKICAgICA/c2V0T3JkZXJMb3dlckZpcnN0QENvbGxhdG9yQFdURkBAUUFF
WF9OQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1l
cm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0xNDczLDggKzE0NzMsOCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3Ry
ZWFtCiAgICAgICAgICAgICBpbnQgZGVidWdIb29rSUQgPSAoKytpdCktPnUub3BlcmFuZDsKICAg
ICAgICAgICAgIGludCBmaXJzdExpbmUgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAg
IGludCBsYXN0TGluZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGNvbHVt
biA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gZGVi
dWdcdFx0ICVzLCAlZCwgJWQsICVkIiwgbG9jYXRpb24sIGRlYnVnSG9va05hbWUoZGVidWdIb29r
SUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjb2x1bW4pOworICAgICAgICAgICAgaW50IGNoYXJQ
b3NpdGlvbiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0
ZF0gZGVidWdcdFx0ICVzLCAlZCwgJWQsICVkIiwgbG9jYXRpb24sIGRlYnVnSG9va05hbWUoZGVi
dWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjaGFyUG9zaXRpb24pOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4K
ICAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4KICAqCkBAIC0yMTIxLDcgKzIxMjEs
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UG9wU2NvcGUoKQogICAgIG1fZHluYW1p
Y1Njb3BlRGVwdGgtLTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9v
ayhEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBp
bnQgY29sdW1uKQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayhEZWJ1Z0hv
b2tJRCBkZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY2hhclBv
c2l0aW9uKQogewogI2lmIEVOQUJMRShERUJVR19XSVRIX0JSRUFLUE9JTlQpCiAgICAgaWYgKGRl
YnVnSG9va0lEICE9IERpZFJlYWNoQnJlYWtwb2ludCkKQEAgLTIxMzQsNyArMjEzNCw3IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWJ1Z0hvb2soRGUKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZGVidWdIb29rSUQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmaXJzdExp
bmUpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChsYXN0TGluZSk7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGNvbHVtbik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNoYXJQb3Np
dGlvbik7CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dChT
dGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAx
NDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3
YXJpY2hAdXdhdGVybG9vLmNhPgogICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgog
ICoKQEAgLTM3NCw3ICszNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc3RhcnRPZmZzZXQgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgc3RhcnQgb2Zmc2V0IGlzIG91dCBvZiBib3VuZHMgd2Ug
Y2xlYXIgYm90aCBvZmZzZXRzCiAgICAgICAgICAgICAgICAgLy8gc28gd2Ugb25seSBnZXQgdGhl
IGRpdm90IG1hcmtlci4gIEVycm9yIG1lc3NhZ2Ugd2lsbCBoYXZlIHRvIGJlIHJlZHVjZWQKLSAg
ICAgICAgICAgICAgICAvLyB0byBsaW5lIGFuZCBjb2x1bW4gbnVtYmVyLgorICAgICAgICAgICAg
ICAgIC8vIHRvIGxpbmUgYW5kIGNoYXJQb3NpdGlvbiBudW1iZXIuCiAgICAgICAgICAgICAgICAg
c3RhcnRPZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgIGVuZE9mZnNldCA9IDA7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGVuZE9mZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNl
dCkgewpAQCAtNTExLDcgKzUxMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0UHVzaFdpdGhTY29wZShSZWdpc3RlcklEKiBzY29wZSk7CiAgICAgICAgIHZvaWQg
ZW1pdFBvcFNjb3BlKCk7CiAKLSAgICAgICAgdm9pZCBlbWl0RGVidWdIb29rKERlYnVnSG9va0lE
LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBjb2x1bW4pOworICAgICAgICB2b2lk
IGVtaXREZWJ1Z0hvb2soRGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSwg
aW50IGNoYXJQb3NpdGlvbik7CiAKICAgICAgICAgaW50IHNjb3BlRGVwdGgoKSB7IHJldHVybiBt
X2R5bmFtaWNTY29wZURlcHRoICsgbV9maW5hbGx5RGVwdGg7IH0KICAgICAgICAgYm9vbCBoYXNG
aW5hbGlzZXIoKSB7IHJldHVybiBtX2ZpbmFsbHlEZXB0aCAhPSAwOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShy
ZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChj
d3p3YXJpY2hAdXdhdGVybG9vLmNhKQogKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3Zp
Y2gKICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgpA
QCAtMjAxLDcgKzIwMSw3IEBAIGJvb2wgQXJyYXlOb2RlOjppc1NpbXBsZUFycmF5KCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQXJndW1lbnRMaXN0Tm9kZSogQXJyYXlOb2RlOjp0b0Fy
Z3VtZW50TGlzdChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBpbnQg
Y29sdW1uTnVtYmVyKSBjb25zdAorQXJndW1lbnRMaXN0Tm9kZSogQXJyYXlOb2RlOjp0b0FyZ3Vt
ZW50TGlzdChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBpbnQgY2hh
clBvc2l0aW9uKSBjb25zdAogewogICAgIEFTU0VSVCghbV9lbGlzaW9uICYmICFtX29wdGlvbmFs
KTsKICAgICBFbGVtZW50Tm9kZSogcHRyID0gbV9lbGVtZW50OwpAQCAtMjA5LDcgKzIwOSw3IEBA
IEFyZ3VtZW50TGlzdE5vZGUqIEFycmF5Tm9kZTo6dG9Bcmd1bWVudEwKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uOwogICAgIGxvY2F0aW9uLmxpbmUgPSBs
aW5lTnVtYmVyOwotICAgIGxvY2F0aW9uLmNvbHVtbiA9IGNvbHVtbk51bWJlcjsKKyAgICBsb2Nh
dGlvbi5jaGFyUG9zaXRpb24gPSBjaGFyUG9zaXRpb247CiAgICAgQXJndW1lbnRMaXN0Tm9kZSog
aGVhZCA9IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgcHRyLT52
YWx1ZSgpKTsKICAgICBBcmd1bWVudExpc3ROb2RlKiB0YWlsID0gaGVhZDsKICAgICBwdHIgPSBw
dHItPm5leHQoKTsKQEAgLTE0NjIsNyArMTQ2Miw3IEBAIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5v
ZGU6OmVtaXRCeXRlY29kZSgKIAogUmVnaXN0ZXJJRCogQ29uc3RTdGF0ZW1lbnROb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7Ci0g
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGlu
ZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2so
V2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRp
b24oKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShtX25leHQpOwogfQogCkBAIC0x
NTA1LDcgKzE1MDUsNyBAQCBSZWdpc3RlcklEKiBCbG9ja05vZGU6OmVtaXRCeXRlY29kZShCeXRl
CiAKIFJlZ2lzdGVySUQqIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBnZW5lcmF0b3Iu
ZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5l
KCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0
YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNoYXJQb3NpdGlvbigpKTsKICAgICBy
ZXR1cm4gZHN0OwogfQogCkBAIC0xNTEzLDcgKzE1MTMsNyBAQCBSZWdpc3RlcklEKiBFbXB0eVN0
YXRlbWVudE5vZGU6OmVtaXRCeXRlCiAKIFJlZ2lzdGVySUQqIERlYnVnZ2VyU3RhdGVtZW50Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRSZWFjaEJyZWFrcG9pbnQs
IGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRE
ZWJ1Z0hvb2soRGlkUmVhY2hCcmVha3BvaW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY2hh
clBvc2l0aW9uKCkpOwogICAgIHJldHVybiBkc3Q7CiB9CiAKQEAgLTE1MjIsNyArMTUyMiw3IEBA
IFJlZ2lzdGVySUQqIERlYnVnZ2VyU3RhdGVtZW50Tm9kZTo6ZW1pdEIKIFJlZ2lzdGVySUQqIEV4
cHJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIEFTU0VSVChtX2V4cHIpOwotICAgIGdlbmVyYXRv
ci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExp
bmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRl
U3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY2hhclBvc2l0aW9uKCkpOwogICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2V4cHIpOwogfQogCkBAIC0xNTMxLDcg
KzE1MzEsNyBAQCBSZWdpc3RlcklEKiBFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjCiBSZWdp
c3RlcklEKiBWYXJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAgICAgQVNTRVJUKG1fZXhwcik7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBs
YXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4
ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7
CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogfQogCkBAIC0xNTM5LDcg
KzE1MzksNyBAQCBSZWdpc3RlcklEKiBWYXJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvCiAKIFJl
Z2lzdGVySUQqIElmTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxs
RXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5l
KCksIGxhc3RMaW5lKCksIGNoYXJQb3NpdGlvbigpKTsKICAgICAKICAgICBSZWZQdHI8TGFiZWw+
IGFmdGVyVGhlbiA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCkBAIC0xNTYzLDcgKzE1NjMsNyBA
QCBSZWdpc3RlcklEKiBJZk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kCiAKIFJlZ2lzdGVySUQq
IElmRWxzZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1
dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBs
YXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7CiAgICAgCiAgICAgUmVmUHRyPExhYmVsPiBiZWZv
cmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPExhYmVsPiBhZnRlckVs
c2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKQEAgLTE1OTksMTIgKzE1OTksMTIgQEAgUmVnaXN0
ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRCeXRlY29kZShCeQogICAgIFJlZlB0cjxMYWJlbD4gdG9w
T2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0
b3BPZkxvb3AuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLSAgICBnZW5l
cmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbGFzdExpbmUoKSwgbGFz
dExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVj
dXRlU3RhdGVtZW50LCBsYXN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7CiAK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVU
YXJnZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1l
bnQsIGxhc3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbGFzdExpbmUoKSwgbGFzdExpbmUoKSwg
Y2hhclBvc2l0aW9uKCkpOwogICAgIGlmIChtX2V4cHItPmhhc0NvbmRpdGlvbkNvbnRleHRDb2Rl
Z2VuKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4
cHIsIHRvcE9mTG9vcC5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCksIGZhbHNlKTsKICAgICBl
bHNlIHsKQEAgLTE2MjMsNyArMTYyMyw3IEBAIFJlZ2lzdGVySUQqIFdoaWxlTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGUKICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVs
U2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CiAgICAgUmVmUHRyPExhYmVsPiB0b3BPZkxvb3AgPSBn
ZW5lcmF0b3IubmV3TGFiZWwoKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxF
eGVjdXRlU3RhdGVtZW50LCBtX2V4cHItPmxpbmVObygpLCBtX2V4cHItPmxpbmVObygpLCBtX2V4
cHItPmNvbHVtbk5vKCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRl
U3RhdGVtZW50LCBtX2V4cHItPmxpbmVObygpLCBtX2V4cHItPmxpbmVObygpLCBtX2V4cHItPmNo
YXJQb3NpdGlvbigpKTsKICAgICBpZiAobV9leHByLT5oYXNDb25kaXRpb25Db250ZXh0Q29kZWdl
bigpKQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQobV9leHBy
LCB0b3BPZkxvb3AuZ2V0KCksIHNjb3BlLT5icmVha1RhcmdldCgpLCB0cnVlKTsKICAgICBlbHNl
IHsKQEAgLTE2MzcsNyArMTYzNyw3IEBAIFJlZ2lzdGVySUQqIFdoaWxlTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGUKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAKICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAgICBnZW5l
cmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxh
c3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhl
Y3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNoYXJQb3NpdGlvbigpKTsK
IAogICAgIGlmIChtX2V4cHItPmhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKCkpCiAgICAgICAg
IGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4cHIsIHRvcE9mTG9vcC5n
ZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCksIGZhbHNlKTsKQEAgLTE2NTgsNyArMTY1OCw3IEBA
IFJlZ2lzdGVySUQqIEZvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY28KIHsKICAgICBMYWJlbFNj
b3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7
CiAKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmly
c3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNoYXJQ
b3NpdGlvbigpKTsKIAogICAgIGlmIChtX2V4cHIxKQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5v
ZGUoZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSwgbV9leHByMSk7CkBAIC0xNjc5LDcgKzE2Nzks
NyBAQCBSZWdpc3RlcklEKiBGb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvCiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50
KTsKIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwot
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExp
bmUoKSwgbGFzdExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29r
KFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY2hhclBvc2l0
aW9uKCkpOwogICAgIGlmIChtX2V4cHIzKQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2Vu
ZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSwgbV9leHByMyk7CiAKQEAgLTE3MDYsNyArMTcwNiw3IEBA
IFJlZ2lzdGVySUQqIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKICAgICBpZiAoIW1fbGV4
cHItPmlzTG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9y
KGdlbmVyYXRvciwgIkxlZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVy
ZW5jZS4iKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVt
ZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5l
bWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUo
KSwgY2hhclBvc2l0aW9uKCkpOwogCiAgICAgaWYgKG1faW5pdCkKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCksIG1faW5pdCk7CkBAIC0xNzcwLDcg
KzE3NzAsNyBAQCBSZWdpc3RlcklEKiBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlCiAKICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdE5leHRQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLCBiYXNlLmdldCgpLCBpLmdl
dCgpLCBzaXplLmdldCgpLCBpdGVyLmdldCgpLCBsb29wU3RhcnQuZ2V0KCkpOwotICAgIGdlbmVy
YXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFz
dExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVj
dXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY2hhclBvc2l0aW9uKCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwogICAgIHJldHVy
biBkc3Q7CiB9CkBAIC0xNzgwLDcgKzE3ODAsNyBAQCBSZWdpc3RlcklEKiBGb3JJbk5vZGU6OmVt
aXRCeXRlY29kZShCeXRlCiAvLyBFQ01BIDEyLjcKIFJlZ2lzdGVySUQqIENvbnRpbnVlTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwg
Zmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERl
YnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNo
YXJQb3NpdGlvbigpKTsKICAgICAKICAgICBMYWJlbFNjb3BlKiBzY29wZSA9IGdlbmVyYXRvci5j
b250aW51ZVRhcmdldChtX2lkZW50KTsKICAgICBBU1NFUlQoc2NvcGUpOwpAQCAtMTc5NCw3ICsx
Nzk0LDcgQEAgUmVnaXN0ZXJJRCogQ29udGludWVOb2RlOjplbWl0Qnl0ZWNvZGUoQgogLy8gRUNN
QSAxMi44CiBSZWdpc3RlcklEKiBCcmVha05vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXRE
ZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBj
b2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1l
bnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7CiAgICAgCiAgICAg
TGFiZWxTY29wZSogc2NvcGUgPSBnZW5lcmF0b3IuYnJlYWtUYXJnZXQobV9pZGVudCk7CiAgICAg
QVNTRVJUKHNjb3BlKTsKQEAgLTE4MDcsNyArMTgwNyw3IEBAIFJlZ2lzdGVySUQqIEJyZWFrTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKIAogUmVnaXN0ZXJJRCogUmV0dXJuTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5l
KCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhX
aWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNoYXJQb3NpdGlv
bigpKTsKICAgICBBU1NFUlQoZ2VuZXJhdG9yLmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsK
IAogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKQEAgLTE4MjMsNyAr
MTgyMyw3IEBAIFJlZ2lzdGVySUQqIFJldHVybk5vZGU6OmVtaXRCeXRlY29kZShCeXQKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRKdW1wU2NvcGVzKGwwLmdldCgpLCAwKTsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChsMC5nZXQoKSk7CiAgICAgfQotICAgIGdlbmVyYXRvci5lbWl0RGVidWdI
b29rKFdpbGxMZWF2ZUNhbGxGcmFtZSwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigp
KTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsTGVhdmVDYWxsRnJhbWUsIGZpcnN0
TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0UmV0dXJuKHIwKTsKIH0KIApAQCAtMTgzMSw3ICsxODMxLDcgQEAgUmVnaXN0ZXJJRCog
UmV0dXJuTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAogCiBSZWdpc3RlcklEKiBXaXRoTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmly
c3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNoYXJQ
b3NpdGlvbigpKTsKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZv
dCwgbV9leHByZXNzaW9uTGVuZ3RoLCAwKTsKQEAgLTIwMDgsNyArMjAwOCw3IEBAIFJlZ2lzdGVy
SUQqIENhc2VCbG9ja05vZGU6OmVtaXRCeXRlY29kZUYKIAogUmVnaXN0ZXJJRCogU3dpdGNoTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVu
dCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCks
IGNoYXJQb3NpdGlvbigpKTsKICAgICAKICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJh
dG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6U3dpdGNoKTsKIApAQCAtMjAyMyw3ICsyMDIz
LDcgQEAgUmVnaXN0ZXJJRCogU3dpdGNoTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAogCiBSZWdpc3Rl
cklEKiBMYWJlbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4
ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgp
LCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7CiAKICAgICBBU1NFUlQoIWdlbmVyYXRvci5i
cmVha1RhcmdldChtX25hbWUpKTsKIApAQCAtMjAzOCw3ICsyMDM4LDcgQEAgUmVnaXN0ZXJJRCog
TGFiZWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogCiBSZWdpc3RlcklEKiBUaHJvd05vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZp
cnN0TGluZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1
Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFy
UG9zaXRpb24oKSk7CiAKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkp
CiAgICAgICAgIGRzdCA9IDA7CkBAIC0yMDU1LDcgKzIwNTUsNyBAQCBSZWdpc3RlcklEKiBUcnlO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvCiAgICAgLy8gTk9URTogVGhlIGNhdGNoIGFuZCBmaW5h
bGx5IGJsb2NrcyBtdXN0IGJlIGxhYmVsZWQgZXhwbGljaXRseSwgc28gdGhlCiAgICAgLy8gb3B0
aW1pemVyIGtub3dzIHRoZXkgbWF5IGJlIGp1bXBlZCB0byBmcm9tIGFueXdoZXJlLgogCi0gICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgp
LCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2ls
bEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24o
KSk7CiAKICAgICBBU1NFUlQobV9jYXRjaEJsb2NrIHx8IG1fZmluYWxseUJsb2NrKTsKIApAQCAt
MjEyNCwxMyArMjEyNCwxMyBAQCBpbmxpbmUgdm9pZCBTY29wZU5vZGU6OmVtaXRTdGF0ZW1lbnRz
Qnl0CiAKIFJlZ2lzdGVySUQqIFByb2dyYW1Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1
Z0hvb2soV2lsbEV4ZWN1dGVQcm9ncmFtLCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY29sdW1u
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlUHJvZ3JhbSwgc3Rh
cnRMaW5lKCksIHN0YXJ0TGluZSgpLCBzdGFydENoYXJQb3NpdGlvbigpKTsKIAogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBkc3RSZWdpc3RlciA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAg
ICBnZW5lcmF0b3IuZW1pdExvYWQoZHN0UmVnaXN0ZXIuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwog
ICAgIGVtaXRTdGF0ZW1lbnRzQnl0ZWNvZGUoZ2VuZXJhdG9yLCBkc3RSZWdpc3Rlci5nZXQoKSk7
CiAKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRFeGVjdXRlUHJvZ3JhbSwgZmlyc3RM
aW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9v
ayhEaWRFeGVjdXRlUHJvZ3JhbSwgbGFzdExpbmUoKSwgbGFzdExpbmUoKSwgY2hhclBvc2l0aW9u
KCkgLSAxKTsKICAgICBnZW5lcmF0b3IuZW1pdEVuZChkc3RSZWdpc3Rlci5nZXQoKSk7CiAgICAg
cmV0dXJuIDA7CiB9CkBAIC0yMTM5LDEzICsyMTM5LDEzIEBAIFJlZ2lzdGVySUQqIFByb2dyYW1O
b2RlOjplbWl0Qnl0ZWNvZGUoQnkKIAogUmVnaXN0ZXJJRCogRXZhbE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKLSAgICBnZW5l
cmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVByb2dyYW0sIGZpcnN0TGluZSgpLCBsYXN0
TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1
dGVQcm9ncmFtLCBzdGFydExpbmUoKSwgc3RhcnRMaW5lKCksIHN0YXJ0Q2hhclBvc2l0aW9uKCkp
OwogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRzdFJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3RSZWdpc3Rlci5nZXQoKSwganNV
bmRlZmluZWQoKSk7CiAgICAgZW1pdFN0YXRlbWVudHNCeXRlY29kZShnZW5lcmF0b3IsIGRzdFJl
Z2lzdGVyLmdldCgpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKERpZEV4ZWN1dGVQ
cm9ncmFtLCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRv
ci5lbWl0RGVidWdIb29rKERpZEV4ZWN1dGVQcm9ncmFtLCBsYXN0TGluZSgpLCBsYXN0TGluZSgp
LCBjaGFyUG9zaXRpb24oKSAtIDEpOwogICAgIGdlbmVyYXRvci5lbWl0RW5kKGRzdFJlZ2lzdGVy
LmdldCgpKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTIxNTQsNyArMjE1NCw3IEBAIFJlZ2lzdGVy
SUQqIEV2YWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWMKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25C
b2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqKQogewotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKERpZEVudGVyQ2FsbEZyYW1l
LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5lbWl0
RGVidWdIb29rKERpZEVudGVyQ2FsbEZyYW1lLCBzdGFydExpbmUoKSwgc3RhcnRMaW5lKCksIHN0
YXJ0Q2hhclBvc2l0aW9uKCkpOwogICAgIGVtaXRTdGF0ZW1lbnRzQnl0ZWNvZGUoZ2VuZXJhdG9y
LCBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKTsKIAogICAgIFN0YXRlbWVudE5vZGUqIHNpbmds
ZVN0YXRlbWVudCA9IHRoaXMtPnNpbmdsZVN0YXRlbWVudCgpOwpAQCAtMjE3MCw3ICsyMTcwLDgg
QEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjbwogICAgIC8vIElmIHRo
ZXJlIGlzIG5vIHJldHVybiB3ZSBtdXN0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0IG9uZS4KICAgICBp
ZiAoIXJldHVybk5vZGUpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuaXND
b25zdHJ1Y3RvcigpID8gZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpIDogZ2VuZXJhdG9yLmVtaXRM
b2FkKDAsIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhX
aWxsTGVhdmVDYWxsRnJhbWUsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7Cisg
ICAgICAgIEFTU0VSVCgoY2hhclBvc2l0aW9uKCkgLSAgMSkgPj0gMCk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0RGVidWdIb29rKFdpbGxMZWF2ZUNhbGxGcmFtZSwgbGFzdExpbmUoKSwgbGFzdExp
bmUoKSwgY2hhclBvc2l0aW9uKCkgLSAxKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXR1cm4o
cjApOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE0NjIyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3
YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTMzMywxMiArMTMzMywy
NCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgcmV0dXJu
IGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0
ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCwg
aW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY29sdW1uKQorTkVWRVJfSU5MSU5FIHZv
aWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBk
ZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY2hhclBvc2l0aW9u
KQogewogICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9i
amVjdCgpLT5kZWJ1Z2dlcigpOwogICAgIGlmICghZGVidWdnZXIpCiAgICAgICAgIHJldHVybjsK
IAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAg
ICBzaXplX3QgYWN0dWFsQ2hhclBvc2l0aW9uID0gY2hhclBvc2l0aW9uICsgY29kZUJsb2NrLT5z
b3VyY2VPZmZzZXQoKTsKKworICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IGNvZGVCbG9j
ay0+c291cmNlKCk7CisgICAgU3RyaW5nIHNvdXJjZSA9IHByb3ZpZGVyLT5zb3VyY2UoKTsKKyAg
ICBzaXplX3QgbGluZVRlcm1pbmF0b3JQb3NpdGlvbiA9IHNvdXJjZS5yZXZlcnNlRmluZExpbmVU
ZXJtaW5hdG9yKGFjdHVhbENoYXJQb3NpdGlvbik7CisgICAgaW50IGNvbHVtbjsKKyAgICBpZiAo
bGluZVRlcm1pbmF0b3JQb3NpdGlvbiAhPSBub3RGb3VuZCkKKyAgICAgICAgY29sdW1uID0gYWN0
dWFsQ2hhclBvc2l0aW9uIC0gKGxpbmVUZXJtaW5hdG9yUG9zaXRpb24gKyAxKTsKKyAgICBlbHNl
CisgICAgICAgIGNvbHVtbiA9IGFjdHVhbENoYXJQb3NpdGlvbjsKKwogICAgIHN3aXRjaCAoZGVi
dWdIb29rSUQpIHsKICAgICAgICAgY2FzZSBEaWRFbnRlckNhbGxGcmFtZToKICAgICAgICAgICAg
IGRlYnVnZ2VyLT5jYWxsRXZlbnQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5v
d25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKSwgZmlyc3RMaW5lLCBjb2x1bW4pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJl
dmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjMwLDcgKzIzMCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBsZXIoKSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0
KCk7IH0KIAogICAgICAgICBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIHRocm93RXhjZXB0aW9u
KENhbGxGcmFtZSomLCBKU1ZhbHVlJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgICAg
ICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tJRCwgaW50IGZp
cnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY29sdW1uKTsKKyAgICAgICAgTkVWRVJfSU5MSU5F
IHZvaWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGludCBs
YXN0TGluZSwgaW50IGNoYXJQb3NpdGlvbik7CiAgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcg
Z2V0VHJhY2VMaW5lKENhbGxGcmFtZSosIFN0YWNrRnJhbWVDb2RlVHlwZSwgY29uc3QgU3RyaW5n
JiwgaW50KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RhY2tU
cmFjZShKU0dsb2JhbERhdGEqLCBWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMpOwogICAgICAg
ICBzdGF0aWMgdm9pZCBhZGRTdGFja1RyYWNlSWZOZWNlc3NhcnkoQ2FsbEZyYW1lKiwgSlNPYmpl
Y3QqIGVycm9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShy
ZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQ2OCw5ICszNDY4LDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3BfZGVidWcpCiAgICAgaW50IGRlYnVnSG9va0lEID0gc3RhY2tGcmFtZS5hcmdz
WzBdLmludDMyKCk7CiAgICAgaW50IGZpcnN0TGluZSA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQz
MigpOwogICAgIGludCBsYXN0TGluZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5pbnQzMigpOwotICAg
IGludCBjb2x1bW4gPSBzdGFja0ZyYW1lLmFyZ3NbM10uaW50MzIoKTsKKyAgICBpbnQgY2hhclBv
c2l0aW9uID0gc3RhY2tGcmFtZS5hcmdzWzNdLmludDMyKCk7CiAKLSAgICBzdGFja0ZyYW1lLmds
b2JhbERhdGEtPmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUsIHN0YXRpY19jYXN0PERlYnVn
SG9va0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUsIGNvbHVtbik7CisgICAg
c3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+ZGVidWcoY2FsbEZyYW1lLCBzdGF0
aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBj
aGFyUG9zaXRpb24pOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fdGhyb3cp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHJldmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MzcsOSArMTYzNyw5
IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWJ1ZykKICAgICBpbnQgZGVidWdI
b29rSUQgPSBwY1sxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGZpcnN0TGluZSA9IHBjWzJdLnUub3Bl
cmFuZDsKICAgICBpbnQgbGFzdExpbmUgPSBwY1szXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGNvbHVt
biA9IHBjWzRdLnUub3BlcmFuZDsKKyAgICBpbnQgY2hhclBvc2l0aW9uID0gcGNbNF0udS5vcGVy
YW5kOwogCi0gICAgZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+ZGVidWcoZXhlYywgc3RhdGljX2Nh
c3Q8RGVidWdIb29rSUQ+KGRlYnVnSG9va0lEKSwgZmlyc3RMaW5lLCBsYXN0TGluZSwgY29sdW1u
KTsKKyAgICBnbG9iYWxEYXRhLmludGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0aWNfY2FzdDxE
ZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjaGFyUG9zaXRp
b24pOwogICAgIAogICAgIExMSU5UX0VORCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjUsMTMgKzI2
NSwxMyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUZ1bmN0aW9uRXhwcihj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBG
dW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJzLCBpbnQgb3Bl
bkJyYWNlUG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5
RW5kTGluZSkKICAgICB7CiAgICAgICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX2ds
b2JhbERhdGEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgKm5hbWUsIGJvZHksIG1fc291cmNlQ29k
ZS0+c3ViRXhwcmVzc2lvbihvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExp
bmUpLCBwYXJhbWV0ZXJzKTsKLSAgICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJv
ZHlFbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0
YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rp
b25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGJvb2wgaW5TdHJpY3RDb250
ZXh0KQorICAgIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0
aW9uQm9keU5vZGU6OmNyZWF0ZShtX2dsb2JhbERhdGEsIGxvY2F0aW9uLCBpblN0cmljdENvbnRl
eHQpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKG1fZ2xvYmFsRGF0
YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluU3RyaWN0Q29udGV4dCk7CiAgICAgfQog
CiAgICAgdm9pZCBzZXRGdW5jdGlvblN0YXJ0KEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBm
dW5jdGlvblN0YXJ0KQpAQCAtMjgyLDE0ICsyODIsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRl
IDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGNvbnN0
IElkZW50aWZpZXIqIG5hbWUsIFBhcmFtZXRlck5vZGUqIHBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9k
ZSogYm9keSwgaW50IG9wZW5CcmFjZVBvcywgaW50IGNsb3NlQnJhY2VQb3MsIGludCBib2R5U3Rh
cnRMaW5lLCBpbnQgYm9keUVuZExpbmUpCiAgICAgewogICAgICAgICBBU1NFUlQobmFtZSk7Ci0g
ICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5kTGluZSwgbG9jYXRpb24u
Y29sdW1uKTsKKyAgICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5l
LCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICBib2R5LT5zZXRJbmZlcnJlZE5hbWUo
Km5hbWUpOwogICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByb3BlcnR5Tm9kZSht
X2dsb2JhbERhdGEsICpuYW1lLCBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY0V4cHJOb2RlKGxvY2F0
aW9uLCBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBib2R5LCBt
X3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBi
b2R5U3RhcnRMaW5lKSwgcGFyYW1zKSwgdHlwZSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRl
IDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoSlNHbG9i
YWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpU
eXBlIHR5cGUsIGRvdWJsZSBuYW1lLCBQYXJhbWV0ZXJOb2RlKiBwYXJhbXMsIEZ1bmN0aW9uQm9k
eU5vZGUqIGJvZHksIGludCBvcGVuQnJhY2VQb3MsIGludCBjbG9zZUJyYWNlUG9zLCBpbnQgYm9k
eVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lKQogICAgIHsKLSAgICAgICAgYm9keS0+c2V0TG9j
KGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICBi
b2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3Np
dGlvbik7CiAgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlOb2RlKG1f
Z2xvYmFsRGF0YSwgbmFtZSwgbmV3IChtX2dsb2JhbERhdGEpIEZ1bmNFeHByTm9kZShsb2NhdGlv
biwgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgYm9keSwgbV9z
b3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9k
eVN0YXJ0TGluZSksIHBhcmFtcyksIHR5cGUpOwogICAgIH0KIApAQCAtMzI2LDQ5ICszMjYsNDkg
QEAgcHVibGljOgogICAgICAgICBpZiAoKm5hbWUgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5hcmd1bWVudHMpCiAgICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7CiAgICAgICAgIG1f
c2NvcGUubV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhLmFwcGVuZChkZWNsLT5ib2R5KCkpOwotICAg
ICAgICBib2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLmNv
bHVtbik7CisgICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5kTGluZSwg
bG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIGRlY2w7CiAgICAgfQogCiAg
ICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQmxvY2tTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgSlNDOjpTb3VyY2VFbGVtZW50cyogZWxlbWVudHMsIGludCBzdGFydExp
bmUsIGludCBlbmRMaW5lKQogICAgIHsKICAgICAgICAgQmxvY2tOb2RlKiBibG9jayA9IG5ldyAo
bV9nbG9iYWxEYXRhKSBCbG9ja05vZGUobG9jYXRpb24sIGVsZW1lbnRzKTsKLSAgICAgICAgYmxv
Y2stPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNvbHVtbik7CisgICAgICAg
IGJsb2NrLT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24p
OwogICAgICAgICByZXR1cm4gYmxvY2s7CiAgICAgfQogCiAgICAgU3RhdGVtZW50Tm9kZSogY3Jl
YXRlRXhwclN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKICAgICAgICAgRXhwclN0
YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBFeHByU3RhdGVtZW50Tm9k
ZShsb2NhdGlvbiwgZXhwcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxv
Y2F0aW9uLmNvbHVtbik7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0
aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAg
U3RhdGVtZW50Tm9kZSogY3JlYXRlSWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgU3RhdGVtZW50Tm9kZSogdHJ1ZUJs
b2NrLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgewogICAgICAgICBJZk5vZGUqIHJlc3VsdCA9
IG5ldyAobV9nbG9iYWxEYXRhKSBJZk5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgdHJ1ZUJsb2Nr
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY29sdW1uKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9u
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBj
cmVhdGVJZlN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogY29uZGl0aW9uLCBTdGF0ZW1lbnROb2RlKiB0cnVlQmxvY2ssIFN0YXRlbWVudE5v
ZGUqIGZhbHNlQmxvY2ssIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7CiAgICAgICAgIElmTm9k
ZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIElmRWxzZU5vZGUobG9jYXRpb24sIGNvbmRp
dGlvbiwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnQsIGVuZCwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQs
IGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JMb29wKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVzc2lvbk5v
ZGUqIGNvbmRpdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRl
bWVudHMsIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7CiAgICAgICAgIEZvck5vZGUqIHJlc3Vs
dCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGb3JOb2RlKGxvY2F0aW9uLCBpbml0aWFsaXplciwgY29u
ZGl0aW9uLCBpdGVyLCBzdGF0ZW1lbnRzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQs
IGVuZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLmNoYXJQ
b3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgU3RhdGVtZW50
Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIsIEV4cHJl
c3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBpbnQgc3RhcnQsIGlu
dCBkaXZvdCwgaW50IGVuZCwgaW50IGluaXRTdGFydCwgaW50IGluaXRFbmQsIGludCBzdGFydExp
bmUsIGludCBlbmRMaW5lKQogICAgIHsKICAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgRm9ySW5Ob2RlKG1fZ2xvYmFsRGF0YSwgbG9jYXRpb24sICppZGVudCwg
aW5pdGlhbGl6ZXIsIGl0ZXIsIHN0YXRlbWVudHMsIGluaXRTdGFydCwgaW5pdFN0YXJ0IC0gc3Rh
cnQsIGluaXRFbmQgLSBpbml0U3RhcnQpOwotICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExp
bmUsIGVuZExpbmUsIGxvY2F0aW9uLmNvbHVtbik7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgc2V0RXhj
ZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZGl2b3QgKyAxLCBlbmQpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTM3Niw3ICszNzYsNyBAQCBwdWJsaWM6CiAgICAgU3Rh
dGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnRzLCBpbnQgZVN0YXJ0LCBpbnQgZURpdm90LCBpbnQgZUVuZCwgaW50IHN0
YXJ0LCBpbnQgZW5kKQogICAgIHsKICAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1f
Z2xvYmFsRGF0YSkgRm9ySW5Ob2RlKGxvY2F0aW9uLCBsaHMsIGl0ZXIsIHN0YXRlbWVudHMpOwot
ICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kLCBsb2NhdGlvbi5jb2x1bW4pOworICAg
ICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwog
ICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIGVTdGFydCwgZURpdm90LCBlRW5k
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zOTAsNyArMzkwLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEVtcHR5U3RhdGVt
ZW50Tm9kZShsb2NhdGlvbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IG5l
dyAobV9nbG9iYWxEYXRhKSBWYXJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBleHByKTsKLSAgICAg
ICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTM5OCw3ICszOTgsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBSZXR1cm5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUmV0
dXJuTm9kZShsb2NhdGlvbiwgZXhwcmVzc2lvbik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
c3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00MDYsNyArNDA2LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQnJlYWtO
b2RlKG1fZ2xvYmFsRGF0YSwgbG9jYXRpb24pOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlv
bihyZXN1bHQsIGVTdGFydCwgZUVuZCwgZUVuZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDE0LDcgKzQxNCw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEJyZWFrTm9k
ZShsb2NhdGlvbiwgKmlkZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0
LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwotICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUs
IGVuZExpbmUsIGxvY2F0aW9uLmNvbHVtbik7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0
TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKQEAgLTQyMiw3ICs0MjIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBDb250aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBDb250aW51ZU5vZGUo
bV9nbG9iYWxEYXRhLCBsb2NhdGlvbik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJl
c3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRM
aW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICByZXN1bHQtPnNldExvYyhz
dGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCkBAIC00MzAsNyArNDMwLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgQ29udGludWVOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29udGludWVO
b2RlKGxvY2F0aW9uLCAqaWRlbnQpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1
bHQsIGVTdGFydCwgZUVuZCwgZUVuZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGlu
ZSwgZW5kTGluZSwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtNDM5LDcgKzQzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgVHJ5
Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFRyeU5vZGUobG9jYXRpb24sIHRyeUJs
b2NrLCAqaWRlbnQsIGNhdGNoQmxvY2ssIGZpbmFsbHlCbG9jayk7CiAgICAgICAgIGlmIChjYXRj
aEJsb2NrKQogICAgICAgICAgICAgdXNlc0NhdGNoKCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9j
KHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDQ3LDIxICs0NDcsMjEgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgQ2FzZUJsb2NrTm9kZSogY2FzZXMgPSBuZXcgKG1fZ2xvYmFsRGF0YSkg
Q2FzZUJsb2NrTm9kZShmaXJzdENsYXVzZXMsIGRlZmF1bHRDbGF1c2UsIHNlY29uZENsYXVzZXMp
OwogICAgICAgICBTd2l0Y2hOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgU3dpdGNo
Tm9kZShsb2NhdGlvbiwgZXhwciwgY2FzZXMpOwotICAgICAgICByZXN1bHQtPnNldExvYyhzdGFy
dExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNvbHVtbik7CisgICAgICAgIHJlc3VsdC0+c2V0TG9j
KHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVXaGlsZVN0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkK
ICAgICB7CiAgICAgICAgIFdoaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFdo
aWxlTm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50KTsKLSAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICByZXN1bHQt
PnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRG9X
aGlsZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnRMaW5lLCBpbnQg
ZW5kTGluZSkKICAgICB7CiAgICAgICAgIERvV2hpbGVOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xv
YmFsRGF0YSkgRG9XaGlsZU5vZGUobG9jYXRpb24sIHN0YXRlbWVudCwgZXhwcik7Ci0gICAgICAg
IHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY29sdW1uKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9z
aXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDc2LDE0ICs0NzYs
MTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdXNlc1dpdGgoKTsKICAgICAgICAgV2l0aE5v
ZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBXaXRoTm9kZShsb2NhdGlvbiwgZXhwciwg
c3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICByZXN1bHQtPnNldExv
YyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfSAgICAKICAgICAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVU
aHJvd1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGlu
ZSkKICAgICB7CiAgICAgICAgIFRocm93Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEp
IFRocm93Tm9kZShsb2NhdGlvbiwgZXhwcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0
TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
c3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICBzZXRF
eGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtNDkxLDE0ICs0OTEsMTQgQEAgcHVibGljOgogICAgIFN0YXRl
bWVudE5vZGUqIGNyZWF0ZURlYnVnZ2VyKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKICAgICAgICAgRGVidWdnZXJTdGF0
ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRGVidWdnZXJTdGF0ZW1lbnRO
b2RlKGxvY2F0aW9uKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5l
LCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVu
ZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUNvbnN0U3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIENvbnN0RGVjbE5vZGUqIGRlY2xzLCBpbnQgc3Rh
cnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7CiAgICAgICAgIENvbnN0U3RhdGVtZW50Tm9kZSog
cmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENvbnN0U3RhdGVtZW50Tm9kZShsb2NhdGlvbiwg
ZGVjbHMpOwotICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0
aW9uLmNvbHVtbik7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwg
bG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAxNDYy
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQg
KEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgKHpoZXJjemVnQGluZi51LXN6ZWdlZC5odSkKICAqICBD
b3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgKG1hdGhpYXNAcWl3aS5iZSkKQEAgLTU1
MCw3ICs1NTAsNyBAQCB2b2lkIExleGVyPFQ+OjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmCiAg
ICAgbV9jb2RlRW5kID0gbV9jb2RlU3RhcnQgKyBzb3VyY2UuZW5kT2Zmc2V0KCk7CiAgICAgbV9l
cnJvciA9IGZhbHNlOwogICAgIG1fYXRMaW5lU3RhcnQgPSB0cnVlOwotICAgIG1fY29sdW1uTnVt
YmVyID0gMDsKKyAgICBtX2NoYXJQb3NpdGlvbiA9IDA7CiAgICAgbV9sZXhFcnJvck1lc3NhZ2Ug
PSBTdHJpbmcoKTsKICAgICAKICAgICBtX2J1ZmZlcjgucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShp
bml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5KTsKQEAgLTU2Nyw3ICs1NjcsNyBAQCB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91bnQ+IEFMV0FZU19JTkxJTkUgdm9p
ZCBMZXhlcjxUPjo6aW50ZXJuYWxTaGlmdCgpCiB7CiAgICAgbV9jb2RlICs9IHNoaWZ0QW1vdW50
OwotICAgIG1fY29sdW1uTnVtYmVyICs9IHNoaWZ0QW1vdW50OworICAgIG1fY2hhclBvc2l0aW9u
ICs9IHNoaWZ0QW1vdW50OwogICAgIG1fY3VycmVudCA9ICptX2NvZGU7CiB9CiAKQEAgLTU3OSw3
ICs1NzksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnNoaWZ0KCkKICAgICArK21f
Y29kZTsKICAgICBpZiAoTElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCiAgICAgICAgIG1fY3Vy
cmVudCA9ICptX2NvZGU7Ci0gICAgKyttX2NvbHVtbk51bWJlcjsKKyAgICArK21fY2hhclBvc2l0
aW9uOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KQEAgLTEzMTksNyArMTMxOSw3IEBAIHN0
YXJ0OgogICAgICAgICByZXR1cm4gRU9GVE9LOwogICAgIAogICAgIHRva2VuTG9jYXRpb24tPnN0
YXJ0T2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOwotICAgIHRva2VuTG9jYXRpb24tPmNvbHVtbiA9
IG1fY29sdW1uTnVtYmVyOworICAgIHRva2VuTG9jYXRpb24tPmNoYXJQb3NpdGlvbiA9IG1fY2hh
clBvc2l0aW9uOwogCiAgICAgQ2hhcmFjdGVyVHlwZSB0eXBlOwogICAgIGlmIChMSUtFTFkoaXNM
YXRpbjEobV9jdXJyZW50KSkpCkBAIC0xNjQyLDcgKzE2NDIsNiBAQCBpbk51bWJlckFmdGVyRGVj
aW1hbFBvaW50OgogICAgICAgICBzaGlmdExpbmVUZXJtaW5hdG9yKCk7CiAgICAgICAgIG1fYXRM
aW5lU3RhcnQgPSB0cnVlOwogICAgICAgICBtX3Rlcm1pbmF0b3IgPSB0cnVlOwotICAgICAgICBt
X2NvbHVtbk51bWJlciA9IDA7CiAgICAgICAgIGdvdG8gc3RhcnQ7CiAgICAgY2FzZSBDaGFyYWN0
ZXJJbnZhbGlkOgogICAgICAgICBtX2xleEVycm9yTWVzc2FnZSA9IGludmFsaWRDaGFyYWN0ZXJN
ZXNzYWdlKCk7CkBAIC0xNjY1LDcgKzE2NjQsNiBAQCBpblNpbmdsZUxpbmVDb21tZW50OgogICAg
IHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKICAgICBtX2F0TGluZVN0YXJ0ID0gdHJ1ZTsKICAgICBt
X3Rlcm1pbmF0b3IgPSB0cnVlOwotICAgIG1fY29sdW1uTnVtYmVyID0gMDsKICAgICBpZiAoIWxh
c3RUb2tlbldhc1Jlc3RyS2V5d29yZCgpKQogICAgICAgICBnb3RvIHN0YXJ0OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyAoemhlcmN6
ZWdAaW5mLnUtc3plZ2VkLmh1KQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC05MCw3ICs5MCw3IEBAIHB1Ymxp
YzoKICAgICBKU1Rva2VuVHlwZSBsZXgoSlNUb2tlbkRhdGEqLCBKU1Rva2VuTG9jYXRpb24qLCB1
bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICBib29sIG5leHRUb2tlbklzQ29sb24oKTsK
ICAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQotICAg
IGludCBjdXJyZW50Q29sdW1uTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5OdW1iZXI7
IH0KKyAgICBpbnQgY3VycmVudENoYXJQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhclBv
c2l0aW9uOyB9CiAgICAgdm9pZCBzZXRMYXN0TGluZU51bWJlcihpbnQgbGFzdExpbmVOdW1iZXIp
IHsgbV9sYXN0TGluZU51bWJlciA9IGxhc3RMaW5lTnVtYmVyOyB9CiAgICAgaW50IGxhc3RMaW5l
TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZU51bWJlcjsgfQogICAgIGJvb2wgcHJl
dlRlcm1pbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Rlcm1pbmF0b3I7IH0KQEAgLTE3MCw3ICsx
NzAsNyBAQCBwcml2YXRlOgogCiAgICAgaW50IG1fbGluZU51bWJlcjsKICAgICBpbnQgbV9sYXN0
TGluZU51bWJlcjsKLSAgICBpbnQgbV9jb2x1bW5OdW1iZXI7CisgICAgaW50IG1fY2hhclBvc2l0
aW9uOwogCiAgICAgVmVjdG9yPExDaGFyPiBtX2J1ZmZlcjg7CiAgICAgVmVjdG9yPFVDaGFyPiBt
X2J1ZmZlcjE2OwpAQCAtMzE3LDcgKzMxNyw3IEBAIEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUg
TGV4ZXI8VD46OmxleEUKICAgICAgICAgbV9jdXJyZW50ID0gMDsKIAogICAgIG1fY29kZSA9IHB0
cjsKLSAgICBtX2NvbHVtbk51bWJlciA9IG1fY29sdW1uTnVtYmVyICsgKG1fY29kZSAtIHN0YXJ0
KTsKKyAgICBtX2NoYXJQb3NpdGlvbiA9IG1fY2hhclBvc2l0aW9uICsgKG1fY29kZSAtIHN0YXJ0
KTsKIAogICAgIC8vIENyZWF0ZSB0aGUgaWRlbnRpZmllciBpZiBuZWVkZWQKICAgICBpZiAobGV4
ZXJGbGFncyAmIExleGV4RmxhZ3NEb250QnVpbGRLZXl3b3JkcykKQEAgLTMyNyw3ICszMjcsNyBA
QCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFCiAgICAgdG9rZW5Mb2Nh
dGlvbi0+bGluZSA9IG1fbGluZU51bWJlcjsKICAgICB0b2tlbkxvY2F0aW9uLT5zdGFydE9mZnNl
dCA9IHN0YXJ0IC0gbV9jb2RlU3RhcnQ7CiAgICAgdG9rZW5Mb2NhdGlvbi0+ZW5kT2Zmc2V0ID0g
Y3VycmVudE9mZnNldCgpOwotICAgIHRva2VuTG9jYXRpb24tPmNvbHVtbiA9IG1fY29sdW1uTnVt
YmVyOworICAgIHRva2VuTG9jYXRpb24tPmNoYXJQb3NpdGlvbiA9IG1fY2hhclBvc2l0aW9uOwog
ICAgIG1fbGFzdFRva2VuID0gSURFTlQ7CiAgICAgcmV0dXJuIElERU5UOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJl
dmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0
cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlu
bGluZSBOb2RlOjpOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgICAg
IDogbV9saW5lTnVtYmVyKGxvY2F0aW9uLmxpbmUpCi0gICAgICAgICwgbV9jb2x1bW5OdW1iZXIo
bG9jYXRpb24uY29sdW1uKQorICAgICAgICAsIG1fY2hhclBvc2l0aW9uKGxvY2F0aW9uLmNoYXJQ
b3NpdGlvbikKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmNwcAkocmV2aXNpb24gMTQ2MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdh
dGVybG9vLmNhKQogKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICogIENvcHly
aWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgpAQCAtNTIsMTggKzUy
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gU3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lk
IFN0YXRlbWVudE5vZGU6OnNldExvYyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBj
b2x1bW4pCit2b2lkIFN0YXRlbWVudE5vZGU6OnNldExvYyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFz
dExpbmUsIGludCBjaGFyUG9zaXRpb24pCiB7CiAgICAgbV9saW5lTnVtYmVyID0gZmlyc3RMaW5l
OwogICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKLSAgICBtX2NvbHVtbk51bWJlciA9IGNvbHVt
bjsKLX0KLQotdm9pZCBTdGF0ZW1lbnROb2RlOjpzZXRMb2MoaW50IGZpcnN0TGluZSwgaW50IGxh
c3RMaW5lKQotewotICAgIG1fbGluZU51bWJlciA9IGZpcnN0TGluZTsKLSAgICBtX2xhc3RMaW5l
ID0gbGFzdExpbmU7Ci0gICAgbV9jb2x1bW5OdW1iZXIgPSAwOworICAgIG1fY2hhclBvc2l0aW9u
ID0gY2hhclBvc2l0aW9uOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
U291cmNlRWxlbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgzLDE4
ICs3NiwyMiBAQCBTdGF0ZW1lbnROb2RlKiBTb3VyY2VFbGVtZW50czo6c2luZ2xlU3RhCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTY29wZU5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBib29sIGluU3RyaWN0Q29u
dGV4dCkKLSAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCitTY29wZU5vZGU6OlNjb3BlTm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRM
b2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgYm9vbCBpblN0cmlj
dENvbnRleHQpCisgICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0aW9uKQogICAgICwgUGFyc2Vy
QXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCisgICAgLCBtX3N0YXJ0TGluZU51bWJlcihzdGFy
dExvY2F0aW9uLmxpbmUpCisgICAgLCBtX3N0YXJ0Q2hhclBvc2l0aW9uKHN0YXJ0TG9jYXRpb24u
Y2hhclBvc2l0aW9uKQogICAgICwgbV9mZWF0dXJlcyhpblN0cmljdENvbnRleHQgPyBTdHJpY3RN
b2RlRmVhdHVyZSA6IE5vRmVhdHVyZXMpCiAgICAgLCBtX251bUNvbnN0YW50cygwKQogICAgICwg
bV9zdGF0ZW1lbnRzKDApCiB7CiB9CiAKLVNjb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJT
dGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZh
cmlhYmxlcywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDog
U3RhdGVtZW50Tm9kZShsb2NhdGlvbikKK1Njb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0
YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTdGF0ZW1lbnROb2RlKGVu
ZExvY2F0aW9uKQogICAgICwgUGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCisgICAg
LCBtX3N0YXJ0TGluZU51bWJlcihzdGFydExvY2F0aW9uLmxpbmUpCisgICAgLCBtX3N0YXJ0Q2hh
clBvc2l0aW9uKHN0YXJ0TG9jYXRpb24uY2hhclBvc2l0aW9uKQogICAgICwgbV9mZWF0dXJlcyhm
ZWF0dXJlcykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fbnVtQ29uc3RhbnRzKG51
bUNvbnN0YW50cykKQEAgLTExNSwxNCArMTEyLDE0IEBAIFN0YXRlbWVudE5vZGUqIFNjb3BlTm9k
ZTo6c2luZ2xlU3RhdGVtZW4KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBy
b2dyYW1Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBQcm9ncmFt
Tm9kZTo6UHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2
YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJl
ZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbG9jYXRp
b24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFi
bGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQoraW5saW5lIFByb2dyYW1Ob2RlOjpQcm9ncmFt
Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxl
bWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNT
dGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDog
U2NvcGVOb2RlKGdsb2JhbERhdGEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2Us
IGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVy
ZXMsIG51bUNvbnN0YW50cykKIHsKIH0KIAotUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3Jh
bU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0
YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFy
aWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywg
aW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpj
cmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5j
U3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAg
ICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBuZXcgUHJvZ3JhbU5vZGUoZ2xvYmFsRGF0YSwg
bG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCAgY2FwdHVyZWRWYXJpYWJs
ZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPFByb2dyYW1O
b2RlPiBub2RlID0gbmV3IFByb2dyYW1Ob2RlKGdsb2JhbERhdGEsIHN0YXJ0TG9jYXRpb24sIGVu
ZExvY2F0aW9uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgIGNhcHR1cmVkVmFyaWFi
bGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNTRVJUKG5vZGUt
Pm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPm1fYXJlbmEucmVtb3ZlTGFzdCgp
OwpAQCAtMTMzLDE0ICsxMzAsMTQgQEAgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5v
ZGU6OmNyZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZhbE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5saW5lIEV2YWxOb2RlOjpFdmFsTm9kZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0
YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50
cykKLSAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBsb2NhdGlvbiwgc291cmNlLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1D
b25zdGFudHMpCitpbmxpbmUgRXZhbE5vZGU6OkV2YWxOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNr
KiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0
dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc3Rh
cnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5j
U3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQogewogfQog
Ci1QYXNzUmVmUHRyPEV2YWxOb2RlPiBFdmFsTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywg
SWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFzc1JlZlB0cjxF
dmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ss
IEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJs
ZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9k
ZShnbG9iYWxEYXRhLCBsb2NhdGlvbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNh
cHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOworICAgIFJl
ZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVk
VmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNTRVJU
KG5vZGUtPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPm1fYXJlbmEucmVtb3Zl
TGFzdCgpOwpAQCAtMTc2LDEzICsxNzMsMTMgQEAgRnVuY3Rpb25QYXJhbWV0ZXJzOjp+RnVuY3Rp
b25QYXJhbWV0ZXJzKAogICAgICAgICBpZGVudGlmaWVycygpW2ldLn5JZGVudGlmaWVyKCk7CiB9
CiAKLWlubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgYm9vbCBpblN0
cmljdENvbnRleHQpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbG9jYXRpb24sIGluU3Ry
aWN0Q29udGV4dCkKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0
aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBib29sIGluU3RyaWN0Q29u
dGV4dCkKKyAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2Nh
dGlvbiwgaW5TdHJpY3RDb250ZXh0KQogewogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6
RnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbG9j
YXRpb24sIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJl
ZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKK2lubGluZSBGdW5jdGlvbkJvZHlO
b2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExv
Y2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVu
Y3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKQorICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIHN0YXJ0TG9jYXRpb24s
IGVuZExvY2F0aW9uLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywg
Y2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCiB7CiB9CiAKQEAgLTIw
MCwxNCArMTk3LDE0IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhQYXMK
ICAgICBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSA9IGZ1bmN0aW9uTmFtZUlzSW5TY29w
ZVRvZ2dsZTsKIH0KIAotRnVuY3Rpb25Cb2R5Tm9kZSogRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRl
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgYm9vbCBpblN0cmljdENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlO
b2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGJv
b2wgaW5TdHJpY3RDb250ZXh0KQogewotICAgIHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShn
bG9iYWxEYXRhLCBsb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICByZXR1cm4gbmV3IEZ1
bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGlu
U3RyaWN0Q29udGV4dCk7CiB9CiAKLVBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rp
b25Cb2R5Tm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayog
dmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVy
ZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4g
RnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVu
ZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywg
RnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxl
cywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2RlID0g
bmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgbG9jYXRpb24sIGNoaWxkcmVuLCB2YXJT
dGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMs
IG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBuZXcg
RnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
Y2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2VD
b2RlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKIAogICAgIEFTU0VSVChub2RlLT5tX2FyZW5h
Lmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE0NjIyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVy
b24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDcgTWFrcyBPcmxvdmljaAogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgpAQCAtMTI3LDExICsxMjcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgaW50IGxpbmVObygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQogCi0gICAg
ICAgIGludCBjb2x1bW5ObygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uTnVtYmVyOyB9CisgICAg
ICAgIGludCBjaGFyUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NoYXJQb3NpdGlvbjsgfQog
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBpbnQgbV9saW5lTnVtYmVyOwotICAgICAgICBpbnQg
bV9jb2x1bW5OdW1iZXI7CisgICAgICAgIGludCBtX2NoYXJQb3NpdGlvbjsKICAgICB9OwogCiAg
ICAgY2xhc3MgRXhwcmVzc2lvbk5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC0xNjksMTEgKzE2OSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdGF0ZW1lbnROb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYpOwogCiAgICAgcHVibGljOgotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHNldExvYyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpOwotICAgICAgICB2b2lkIHNldExv
YyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBjb2x1bW4pOworICAgICAgICB2b2lk
IHNldExvYyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBjaGFyUG9zaXRpb24pOwog
ICAgICAgICBpbnQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbGluZU5vKCk7IH0KICAgICAg
ICAgaW50IGxhc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZTsgfQotICAgICAgICBp
bnQgY29sdW1uKCkgY29uc3QgeyByZXR1cm4gY29sdW1uTm8oKTt9CiAKICAgICAgICAgdmlydHVh
bCBib29sIGlzRW1wdHlTdGF0ZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZXR1cm5Ob2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAg
LTEyOTUsOCArMTI5Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIERlY2xh
cmF0aW9uU3RhY2tzOjpWYXJTdGFjayBWYXJTdGFjazsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJh
dGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayBGdW5jdGlvblN0YWNrOwogCi0gICAgICAgIFNjb3Bl
Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBib29sIGluU3RyaWN0
Q29udGV4dCk7Ci0gICAgICAgIFNjb3BlTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBjb25zdCBTb3VyY2VDb2RlJiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayos
IEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKKyAgICAgICAgU2NvcGVOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBib29sIGluU3RyaWN0
Q29udGV4dCk7CisgICAgICAgIFNjb3BlTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgY29uc3QgU291cmNl
Q29kZSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRp
ZmllclNldCYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdXNp
bmcgUGFyc2VyQXJlbmFSZWZDb3VudGVkOjpvcGVyYXRvciBuZXc7CiAKQEAgLTEzMTMsNiArMTMx
MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnByb3ZpZGVyKCktPnVybCgpOyB9CiAgICAgICAgIGlu
dHB0cl90IHNvdXJjZUlEKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UucHJvdmlkZXJJRCgpOyB9
CiAKKyAgICAgICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRMaW5lTnVt
YmVyOyB9CisgICAgICAgIGludCBzdGFydENoYXJQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnRDaGFyUG9zaXRpb247fQorCiAgICAgICAgIHZvaWQgc2V0RmVhdHVyZXMoQ29kZUZlYXR1
cmVzIGZlYXR1cmVzKSB7IG1fZmVhdHVyZXMgPSBmZWF0dXJlczsgfQogICAgICAgICBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMoKSB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CiAKQEAgLTEzNDUsNiArMTM0
Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldFNvdXJjZShjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UpIHsgbV9zb3VyY2UgPSBzb3VyY2U7IH0KICAgICAgICAgUGFyc2VyQXJl
bmEgbV9hcmVuYTsKIAorICAgICAgICBpbnQgbV9zdGFydExpbmVOdW1iZXI7CisgICAgICAgIGlu
dCBtX3N0YXJ0Q2hhclBvc2l0aW9uOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29kZUZlYXR1
cmVzIG1fZmVhdHVyZXM7CiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CkBAIC0xMzU4LDEy
ICsxMzYyLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFByb2dyYW1Ob2RlIDogcHVi
bGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c0Z1bmN0aW9uTm9kZSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmFt
Tm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFNvdXJj
ZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNv
bnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBT
b3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQm
LCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAog
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSBmYWxzZTsKIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIFByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwg
SWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpOworICAgICAgICBQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxl
bWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3Qg
U291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApOwogICAgIH07CkBAIC0xMzcxLDEyICsxMzc1LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEV2YWxOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IGZhbHNlOwotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlv
blN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMs
IGludCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4g
Y3JlYXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rp
b25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlz
RnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEV2YWxOb2RlKEpTR2xv
YmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3Rh
Y2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBD
b2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBFdmFsTm9kZShKU0dsb2Jh
bERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVu
dGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cyk7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogICAgIH07CkBAIC0xNDAzLDggKzE0MDcs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDogcHVibGlj
IFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1
bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgYm9vbCBpc1N0cmljdE1v
ZGUpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBjcmVhdGUo
SlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgU291cmNlRWxlbWVudHMqLCBW
YXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29k
ZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIHN0YXRpYyBGdW5j
dGlvbkJvZHlOb2RlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGJvb2wgaXNTdHJpY3RNb2RlKTsK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKEpTR2xv
YmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElk
ZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KICAgICAgICAgc2l6ZV90IHBhcmFtZXRl
ckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0KQEAgLTE0Mjcs
OCArMTQzMSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBz
Y29wZUlzRnVuY3Rpb24gPSB0cnVlOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rpb25C
b2R5Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBib29sIGluU3Ry
aWN0Q29udGV4dCk7Ci0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9u
U3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywg
aW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRh
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmQsIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0ds
b2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJ
ZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cyk7CiAKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAgICAgICBJZGVudGlm
aWVyIG1faW5mZXJyZWROYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyLmNwcAkocmV2aXNpb24gMTQ2MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC05Nyw3ICs5Nyw2IEBAIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJz
ZXIoSlNHbG9iYWxEYXRhKiAKICAgICBpZiAoIW5hbWUuaXNOdWxsKCkpCiAgICAgICAgIHNjb3Bl
LT5kZWNsYXJlQ2FsbGVlKCZuYW1lKTsKICAgICBuZXh0KCk7Ci0gICAgbV9sZXhlci0+c2V0TGFz
dExpbmVOdW1iZXIodG9rZW5MaW5lKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJU
eXBlPgpAQCAtNzk0LDEzICs3OTMsMTYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRm9ybWFsUAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VG
dW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CisgICAgSlNUb2tlbkxvY2F0aW9u
IHN0YXJ0TG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKKyAgICBuZXh0KCk7CisKICAgICBpZiAo
bWF0Y2goQ0xPU0VCUkFDRSkpCi0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9u
Qm9keSh0b2tlbkxvY2F0aW9uKCksIHN0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0
cmljdE1vZGUoKSk7CiAgICAgRGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVu
dERlcHRoKTsKICAgICBtX3N0YXRlbWVudERlcHRoID0gMDsKICAgICB0eXBlbmFtZSBUcmVlQnVp
bGRlcjo6RnVuY3Rpb25Cb2R5QnVpbGRlciBib2R5QnVpbGRlcihjb25zdF9jYXN0PEpTR2xvYmFs
RGF0YSo+KG1fZ2xvYmFsRGF0YSksIG1fbGV4ZXIuZ2V0KCkpOwogICAgIGZhaWxJZkZhbHNlKHBh
cnNlU291cmNlRWxlbWVudHM8Q2hlY2tGb3JTdHJpY3RNb2RlPihib2R5QnVpbGRlcikpOwotICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keSh0b2tlbkxvY2F0aW9uKCksIHN0cmlj
dE1vZGUoKSk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9j
YXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RyaWN0TW9kZSgpKTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIExleGVyVHlwZT4KQEAgLTgyNiwxMyArODI4LDE2IEBAIHRlbXBsYXRlIDxGdW5jdGlv
blJlcXVpcmVtZW50cyByZXF1aXJlbWUKICAgICAKICAgICBvcGVuQnJhY2VQb3MgPSBtX3Rva2Vu
Lm1fZGF0YS5pbnRWYWx1ZTsKICAgICBib2R5U3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAg
SlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CisgICAgSlNUb2tlbkxv
Y2F0aW9uIHN0YXJ0TG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAKICAgICAvLyBJZiB3
ZSBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24gYWxyZWFkeSwgd2UgY2FuIHVzZSB0aGUgY2FjaGVk
IGluZm8gYW5kIHNraXAgdGhlIHBhcnNlciB0byB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KICAg
ICBpZiAoY29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0qIGNhY2hlZEluZm8gPSBUcmVlQnVp
bGRlcjo6Q2FuVXNlRnVuY3Rpb25DYWNoZSA/IGZpbmRDYWNoZWRGdW5jdGlvbkluZm8ob3BlbkJy
YWNlUG9zKSA6IDApIHsKICAgICAgICAgLy8gSWYgd2UncmUgaW4gYSBzdHJpY3QgY29udGV4dCwg
dGhlIGNhY2hlZCBmdW5jdGlvbiBpbmZvIG11c3Qgc2F5IGl0IHdhcyBzdHJpY3QgdG9vLgogICAg
ICAgICBBU1NFUlQoIXN0cmljdE1vZGUoKSB8fCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKLSAg
ICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KGxvY2F0aW9uLCBjYWNoZWRJ
bmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGVuZExvY2F0aW9uOwor
ICAgICAgICBlbmRMb2NhdGlvbi5saW5lID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZUxpbmU7Cisg
ICAgICAgIGVuZExvY2F0aW9uLmNoYXJQb3NpdGlvbiA9IGNhY2hlZEluZm8tPmNsb3NlQnJhY2VQ
b3M7CisgICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CiAgICAgICAgIAogICAg
ICAgICBmdW5jdGlvblNjb3BlLT5yZXN0b3JlRnJvbVNvdXJjZVByb3ZpZGVyQ2FjaGUoY2FjaGVk
SW5mbyk7CiAgICAgICAgIGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVC
dWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pKTsKQEAgLTg0Nyw4ICs4NTIsNiBAQCB0ZW1w
bGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAKLSAgICBuZXh0KCk7Ci0gICAgCiAgICAgYm9keSA9IHBhcnNlRnVuY3Rp
b25Cb2R5KGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGJvZHkpOwogICAgIGlmIChmdW5jdGlv
blNjb3BlLT5zdHJpY3RNb2RlKCkgJiYgbmFtZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05NTAsNiArOTUwLDggQEAgUGFz
c1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPgogICAgIGVyckxpbmUgPSAtMTsK
ICAgICBlcnJNc2cgPSBTdHJpbmcoKTsKIAorICAgIEpTVG9rZW5Mb2NhdGlvbiBzdGFydExvY2F0
aW9uKHRva2VuTG9jYXRpb24oKSk7CisKICAgICBTdHJpbmcgcGFyc2VFcnJvciA9IHBhcnNlSW5u
ZXIoKTsKIAogICAgIGludCBsaW5lTnVtYmVyID0gbV9sZXhlci0+bGluZU51bWJlcigpOwpAQCAt
OTY2LDExICs5NjgsMTIgQEAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBl
PgogCiAgICAgUmVmUHRyPFBhcnNlZE5vZGU+IHJlc3VsdDsKICAgICBpZiAobV9zb3VyY2VFbGVt
ZW50cykgewotICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb247Ci0gICAgICAgIGxvY2F0
aW9uLmxpbmUgPSBtX2xleGVyLT5sYXN0TGluZU51bWJlcigpOwotICAgICAgICBsb2NhdGlvbi5j
b2x1bW4gPSBtX2xleGVyLT5jdXJyZW50Q29sdW1uTnVtYmVyKCk7CisgICAgICAgIEpTVG9rZW5M
b2NhdGlvbiBlbmRMb2NhdGlvbjsKKyAgICAgICAgZW5kTG9jYXRpb24ubGluZSA9IG1fbGV4ZXIt
Pmxhc3RMaW5lTnVtYmVyKCk7CisgICAgICAgIGVuZExvY2F0aW9uLmNoYXJQb3NpdGlvbiA9IG1f
bGV4ZXItPmN1cnJlbnRDaGFyUG9zaXRpb24oKTsKICAgICAgICAgcmVzdWx0ID0gUGFyc2VkTm9k
ZTo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRM
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZExvY2F0aW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VFbGVtZW50cywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFyRGVjbGFyYXRpb25zID8g
Jm1fdmFyRGVjbGFyYXRpb25zLT5kYXRhIDogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA/ICZtX2Z1bmNEZWNsYXJhdGlvbnMtPmRhdGEg
OiAwLApAQCAtOTc4LDcgKzk4MSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExl
eGVyVHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptX3NvdXJjZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX251bUNvbnN0YW50cyk7Ci0gICAgICAgIHJl
c3VsdC0+c2V0TG9jKG1fc291cmNlLT5maXJzdExpbmUoKSwgbV9sYXN0TGluZSwgbV9sZXhlci0+
Y3VycmVudENvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2Ut
PmZpcnN0TGluZSgpLCBtX2xhc3RMaW5lLCBtX2xleGVyLT5jdXJyZW50Q2hhclBvc2l0aW9uKCkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIGNhbiBuZXZlciBzZWUgYSBzeW50YXggZXJy
b3Igd2hlbiByZXBhcnNpbmcgYSBmdW5jdGlvbiwgc2luY2Ugd2Ugc2hvdWxkIGhhdmUKICAgICAg
ICAgLy8gcmVwb3J0ZWQgdGhlIGVycm9yIHdoZW4gcGFyc2luZyB0aGUgY29udGFpbmluZyBwcm9n
cmFtIG9yIGV2YWwgY29kZS4gU28gaWYgd2UncmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAkocmV2aXNpb24gMTQ2MjI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzLDE4
ICsxNDMsMTggQEAgdW5pb24gSlNUb2tlbkRhdGEgewogfTsKIAogc3RydWN0IEpTVG9rZW5Mb2Nh
dGlvbiB7Ci0gICAgSlNUb2tlbkxvY2F0aW9uKCkgOiBsaW5lKDApLCBjb2x1bW4oMCkgeyB9Cisg
ICAgSlNUb2tlbkxvY2F0aW9uKCkgOiBsaW5lKDApLCBjaGFyUG9zaXRpb24oMCkgeyB9CiAgICAg
SlNUb2tlbkxvY2F0aW9uKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgewog
ICAgICAgICBsaW5lID0gbG9jYXRpb24ubGluZTsKICAgICAgICAgc3RhcnRPZmZzZXQgPSBsb2Nh
dGlvbi5zdGFydE9mZnNldDsKICAgICAgICAgZW5kT2Zmc2V0ID0gbG9jYXRpb24uZW5kT2Zmc2V0
OwotICAgICAgICBjb2x1bW4gPSBsb2NhdGlvbi5jb2x1bW47CisgICAgICAgIGNoYXJQb3NpdGlv
biA9IGxvY2F0aW9uLmNoYXJQb3NpdGlvbjsKICAgICB9CiAgICAgaW50IGxpbmU7CiAgICAgaW50
IHN0YXJ0T2Zmc2V0OwogICAgIGludCBlbmRPZmZzZXQ7Ci0gICAgaW50IGNvbHVtbjsKKyAgICBp
bnQgY2hhclBvc2l0aW9uOwogfTsKIAogc3RydWN0IEpTVG9rZW4gewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHJldmlzaW9uIDE0NjIyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZUNvbmRpdGlvbmFsRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwg
RXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBDb25kaXRpb25hbEV4cHI7
IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVG
dW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAg
IGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgYm9vbCkgeyBy
ZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgYm9vbCkgeyByZXR1cm4gMTsgfQogICAgIHZv
aWQgc2V0RnVuY3Rpb25TdGFydChpbnQsIGludCkgeyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50
cygpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKGludCkgeyByZXR1cm4g
MTsgfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NjMwMSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTMtMDMtMTkgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09Q
UyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmRMaW5lVGVybWluYXRvcik6
CisgICAgICAgIChXVEYpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAg
ICAgKFN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6cmV2ZXJzZUZp
bmRMaW5lVGVybWluYXRvcik6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAg
ICAgIChXVEY6OlN0cmluZzo6cmV2ZXJzZUZpbmRMaW5lVGVybWluYXRvcik6CisgICAgICAgIChT
dHJpbmcpOgorCisyMDEzLTAzLTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKwor
ICAgICAgICBJbnRyb2R1Y2luZyBTdHJpbmc6OnJldmVyc2VGaW5kTGluZVRlcm1pbmF0b3IoKS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjc0MS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlz
IG5lZWRlZCBieSB0aGUgSlNDIGRlYnVnZ2VyIGNvZGUgZm9yIGNvbXB1dGluZyBjb2x1bW4gbnVt
YmVycy4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpyZXZlcnNlRmluZExpbmVUZXJtaW5hdG9yKToKKyAgICAgICAgKiB3dGYv
dGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChTdHJpbmdJbXBsKToKKyAgICAgICAgKFdURjo6
cmV2ZXJzZUZpbmRMaW5lVGVybWluYXRvcik6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5n
Lmg6CisgICAgICAgIChXVEY6OlN0cmluZzo6cmV2ZXJzZUZpbmRMaW5lVGVybWluYXRvcik6CisK
IDIwMTMtMDMtMTkgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIEZpeCB0aGUgV1RGIGd5cCBidWlsZCBmb3IgR1RLKy4KSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTQ2MjI1KQorKysgU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChD
KSAyMDAxIERpcmsgTXVlbGxlciAoIG11ZWxsZXJAa2RlLm9yZyApCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNiBBbmRyZXcgV2VsbGluZ3RvbiAocHJvdG9uQHdpcmV0YXBw
ZWQubmV0KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTExMTYsNiArMTExNiwxMyBAQCBzaXplX3QgU3RyaW5n
SW1wbDo6ZmluZElnbm9yaW5nQ2FzZShTdHJpCiAgICAgcmV0dXJuIGZpbmRJZ25vcmluZ0Nhc2VJ
bm5lcihjaGFyYWN0ZXJzMTYoKSArIGluZGV4LCBtYXRjaFN0cmluZy0+Y2hhcmFjdGVyczE2KCks
IGluZGV4LCBzZWFyY2hMZW5ndGgsIG1hdGNoTGVuZ3RoKTsKIH0KIAorc2l6ZV90IFN0cmluZ0lt
cGw6OnJldmVyc2VGaW5kTGluZVRlcm1pbmF0b3IodW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYg
KGlzOEJpdCgpKQorICAgICAgICByZXR1cm4gV1RGOjpyZXZlcnNlRmluZExpbmVUZXJtaW5hdG9y
KGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBpbmRleCk7CisgICAgcmV0dXJuIFdURjo6cmV2ZXJz
ZUZpbmRMaW5lVGVybWluYXRvcihjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIGluZGV4KTsKK30K
Kwogc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKFVDaGFyIGMsIHVuc2lnbmVkIGluZGV4
KQogewogICAgIGlmIChpczhCaXQoKSkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCShy
ZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNjk3LDYgKzY5Nyw3IEBAIHB1YmxpYzoKICAgICBBTFdBWVNfSU5MSU5F
IHNpemVfdCBmaW5kSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIHMsIHVuc2lnbmVkIGluZGV4ID0g
MCkgeyByZXR1cm4gZmluZElnbm9yaW5nQ2FzZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4ocyksIGluZGV4KTsgfTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IGZpbmRJ
Z25vcmluZ0Nhc2UoU3RyaW5nSW1wbCosIHVuc2lnbmVkIGluZGV4ID0gMCk7CiAKKyAgICBXVEZf
RVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IHJldmVyc2VGaW5kTGluZVRlcm1pbmF0b3IodW5zaWdu
ZWQgaW5kZXggPSBVSU5UX01BWCk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCBy
ZXZlcnNlRmluZChVQ2hhciwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01BWCk7CiAgICAgV1RGX0VY
UE9SVF9TVFJJTkdfQVBJIHNpemVfdCByZXZlcnNlRmluZChTdHJpbmdJbXBsKiwgdW5zaWduZWQg
aW5kZXggPSBVSU5UX01BWCk7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIHNpemVfdCByZXZl
cnNlRmluZElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01B
WCk7CkBAIC0xMTA3LDcgKzExMDgsMjMgQEAgaW5saW5lIHNpemVfdCBmaW5kKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZQogICAgIHJldHVybiBub3RGb3VuZDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgoraW5saW5l
IHNpemVfdCByZXZlcnNlRmluZExpbmVUZXJtaW5hdG9yKGNvbnN0IENoYXJhY3RlclR5cGUqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01BWCkKK3sK
KyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgIGlmIChpbmRl
eCA+PSBsZW5ndGgpCisgICAgICAgIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICBDaGFyYWN0ZXJU
eXBlIGMgPSBjaGFyYWN0ZXJzW2luZGV4XTsKKyAgICB3aGlsZSAoKGMgIT0gJ1xuJykgJiYgKGMg
IT0gJ1xyJykgJiYgKGMgIT0gJ1wwJykpIHsKKyAgICAgICAgaWYgKCFpbmRleC0tKQorICAgICAg
ICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgICAgICBjID0gY2hhcmFjdGVyc1tpbmRleF07Cisg
ICAgfQorICAgIHJldHVybiBpbmRleDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KIGlubGluZSBzaXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDaGFyYWN0ZXJUeXBlIG1hdGNoQ2hhcmFjdGVyLCB1
bnNpZ25lZCBpbmRleCA9IFVJTlRfTUFYKQogewogICAgIGlmICghbGVuZ3RoKQpJbmRleDogU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1dURlN0cmluZy5oCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvV1RGL3d0Zi90
ZXh0L1dURlN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIChD
KSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYxLDYgKzI2MSw5IEBAIHB1YmxpYzoKICAg
ICBzaXplX3QgZmluZChjb25zdCBMQ2hhciogc3RyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0
CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChzdHIsIHN0YXJ0KSA6IG5v
dEZvdW5kOyB9CiAKKyAgICBzaXplX3QgcmV2ZXJzZUZpbmRMaW5lVGVybWluYXRvcih1bnNpZ25l
ZCBzdGFydCA9IFVJTlRfTUFYKSBjb25zdAorICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2lt
cGwtPnJldmVyc2VGaW5kTGluZVRlcm1pbmF0b3Ioc3RhcnQpIDogbm90Rm91bmQ7IH0KKwogICAg
IC8vIEZpbmQgdGhlIGxhc3QgaW5zdGFuY2Ugb2YgYSBzaW5nbGUgY2hhcmFjdGVyIG9yIHN0cmlu
Zy4KICAgICBzaXplX3QgcmV2ZXJzZUZpbmQoVUNoYXIgYywgdW5zaWduZWQgc3RhcnQgPSBVSU5U
X01BWCkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5yZXZlcnNlRmlu
ZChjLCBzdGFydCkgOiBub3RGb3VuZDsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194000</attachid>
            <date>2013-03-20 01:44:34 -0700</date>
            <delta_ts>2013-03-20 01:56:44 -0700</delta_ts>
            <desc>patch : addressed Oliver’s feedback.</desc>
            <filename>bug-112741a.patch</filename>
            <type>text/plain</type>
            <size>77836</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ2MzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBA
QAorMjAxMy0wMy0xOSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
Rml4IGluY29ycmVjdCBkZWJ1Z2dlciBjb2x1bW4gbnVtYmVyIHZhbHVlLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyNzQxLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEluIGxleGVyLCBwYXJzZXIs
IGFuZCBkZWJ1Z2dlciBjb2RlLCByZW5hbWVkIGNvbHVtbiB0byBjaGFyUG9zaXRpb24uCisgICAg
ICAgIDIuIENvbnZlcnQgdGhlIGNoYXJQb3NpdGlvbiB0byB0aGUgZXF1aXZhbGVudCBjb2x1bW4g
bnVtYmVyIGJlZm9yZQorICAgICAgICAgICBwYXNzaW5nIGl0IHRvIHRoZSBkZWJ1Z2dlci4KKyAg
ICAgICAgMy4gQ2hhbmdlZCBTY29wZU5vZGVzIHRvIHRha2UgYm90aCBhIHN0YXJ0TG9jYXRpb24g
YW5kIGFuIGVuZExvY2F0aW9uLgorICAgICAgICAgICBUaGlzIGFsbG93cyBGdW5jdGlvbkJvZHlO
b2RlcywgUHJvZ3JhbU5vZGVzLCBhbmQgRXZhbE5vZGVzcyB0byBlbWl0CisgICAgICAgICAgIGNv
cnJlY3QgZGVidWcgaG9va3Mgd2l0aCBjb3JyZWN0IHN0YXJ0aW5nIGxpbmUgYW5kIGNvbHVtbiBu
dW1iZXJzLgorICAgICAgICA0LiBGaXhlZCB0aGUgTGV4ZXIgdG8gbm90IHJlc2V0IHRoZSBjaGFy
UG9zaXRpb24gKHByZXZpb3VzbHkKKyAgICAgICAgICAgY29sdW1uTnVtYmVyKSBpbiBMZXhlcjo6
bGV4KCkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5vcmRlcjoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVFeHBvcnRzLmRl
ZjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlRXhwb3J0
R2VuZXJhdG9yL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYuaW46CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUp
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVidWdIb29rKToKKyAgICAgICAgKiBieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFeHByZXNzaW9uSW5mbyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkFycmF5Tm9kZTo6dG9Bcmd1bWVudExpc3QpOgor
ICAgICAgICAoSlNDOjpDb25zdFN0YXRlbWVudE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OkVtcHR5U3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFeHBy
U3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6VmFyU3RhdGVtZW50
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6SWZOb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpJZkVsc2VOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpEb1doaWxlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6V2hpbGVOb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvbnRp
bnVlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QnJlYWtOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpSZXR1cm5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAg
ICAoSlNDOjpXaXRoTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6U3dpdGNoTm9k
ZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6TGFiZWxOb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpUaHJvd05vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6
OlRyeU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkZWJ1
Zyk6CisgICAgICAgIC0gY29udmVydCBjaGFyUG9zaXRpb24gdG8gY29sdW1uIGZvciB0aGUgZGVi
dWdnZXIuCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bf
ZGVidWcpKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X29wX2RlYnVnKSk6CisgICAgICAgICogcGFyc2VyL0FT
VEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY3Rpb25FeHBy
KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY3Rpb25Cb2R5KToKKyAgICAg
ICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZUZ1bmNEZWNsU3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlQmxvY2tTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpB
U1RCdWlsZGVyOjpjcmVhdGVFeHByU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRl
cjo6Y3JlYXRlSWZTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVG
b3JMb29wKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRm9ySW5Mb29wKToKKyAg
ICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlVmFyU3RhdGVtZW50KToKKyAgICAgICAgKEpT
Qzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6QVNU
QnVpbGRlcjo6Y3JlYXRlQnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjpjcmVhdGVDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNy
ZWF0ZVRyeVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVN3aXRj
aFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVdoaWxlU3RhdGVt
ZW50KToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRG9XaGlsZVN0YXRlbWVudCk6
CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVdpdGhTdGF0ZW1lbnQpOgorICAgICAg
ICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVUaHJvd1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6
OkFTVEJ1aWxkZXI6OmNyZWF0ZURlYnVnZ2VyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6
Y3JlYXRlQ29uc3RTdGF0ZW1lbnQpOgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6CisgICAg
ICAgIChKU0M6Ojo6c2V0Q29kZSk6CisgICAgICAgIChKU0M6Ojo6aW50ZXJuYWxTaGlmdCk6Cisg
ICAgICAgIChKU0M6Ojo6c2hpZnQpOgorICAgICAgICAoSlNDOjo6OmxleCk6CisgICAgICAgICog
cGFyc2VyL0xleGVyLmg6CisgICAgICAgIChKU0M6OkxleGVyOjpjdXJyZW50Q2hhclBvc2l0aW9u
KToKKyAgICAgICAgKExleGVyKToKKyAgICAgICAgKEpTQzo6OjpsZXhFeHBlY3RJZGVudGlmaWVy
KToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpO
b2RlOjpOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpT
dGF0ZW1lbnROb2RlOjpzZXRMb2MpOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OlNjb3BlTm9k
ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZSk6CisgICAgICAgIChK
U0M6OlByb2dyYW1Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6RXZhbE5v
ZGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
Qm9keU5vZGU6OmNyZWF0ZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChK
U0M6Ok5vZGU6OmNoYXJQb3NpdGlvbik6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKFN0YXRl
bWVudE5vZGUpOgorICAgICAgICAoSlNDOjpTdGF0ZW1lbnROb2RlOjpsYXN0TGluZSk6CisgICAg
ICAgIChTY29wZU5vZGUpOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OnN0YXJ0TGluZSk6Cisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c3RhcnRDaGFyUG9zaXRpb24pOgorICAgICAgICAoUHJv
Z3JhbU5vZGUpOgorICAgICAgICAoRXZhbE5vZGUpOgorICAgICAgICAoRnVuY3Rpb25Cb2R5Tm9k
ZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6Ojo6UGFyc2Vy
KToKKyAgICAgICAgKEpTQzo6OjpwYXJzZUZ1bmN0aW9uQm9keSk6CisgICAgICAgIChKU0M6Ojo6
cGFyc2VGdW5jdGlvbkluZm8pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAg
KEpTQzo6OjpwYXJzZSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlclRva2Vucy5oOgorICAgICAg
ICAoSlNDOjpKU1Rva2VuTG9jYXRpb246OkpTVG9rZW5Mb2NhdGlvbik6CisgICAgICAgIChKU1Rv
a2VuTG9jYXRpb24pOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAg
IChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZ1bmN0aW9uQm9keSk6CisKIDIwMTMtMDMtMTkg
IE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggd2hl
biBsb2FkaW5nIGh0dHA6Ly93d3cuanFjaGFydC5jb20vanF1ZXJ5L2dhdWdlcy9SYWRpYWxHYXVn
ZS9MaXZlRGF0YQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLm9y
ZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5v
cmRlcgkocmV2aXNpb24gMTQ2MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLm9yZGVyCSh3b3JraW5nIGNvcHkpCkBAIC00NjgsNyArNDY4LDYgQEAgX19aTjNKU0Mx
MVByb2dyYW1Ob2RlNmNyZWF0ZUVQTlNfMTJKU0dsbwogX19aTjNKU0M5U2NvcGVOb2RlQzJFUE5T
XzEySlNHbG9iYWxEYXRhRVJLTlNfMTBTb3VyY2VDb2RlRVBOU18xNFNvdXJjZUVsZW1lbnRzRVBO
M1dURjZWZWN0b3JJU3Q0cGFpcklQS05TXzEwSWRlbnRpZmllckVqRUxtMEVFRVBOUzlfSVBOU18x
NkZ1bmN0aW9uQm9keU5vZGVFTG0wRUVFUk5TOF83SGFzaFNldElOUzhfNlJlZlB0cklOUzhfMTBT
dHJpbmdJbXBsRUVFTlNfMTdJZGVudGlmaWVyUmVwSGFzaEVOUzhfMTBIYXNoVHJhaXRzSVNPX0VF
RUVqaQogX19aTjNKU0MxMVBhcnNlckFyZW5hMTRkZXJlZldpdGhBcmVuYUVOM1dURjEwUGFzc1Jl
ZlB0cklOU18yMVBhcnNlckFyZW5hUmVmQ291bnRlZEVFRQogX19aTjNKU0MxMVBhcnNlckFyZW5h
MTByZW1vdmVMYXN0RXYKLV9fWk4zSlNDMTNTdGF0ZW1lbnROb2RlNnNldExvY0VpaQogX19aTjNK
U0MxMVBhcnNlckFyZW5hNXJlc2V0RXYKIF9fWk4zV1RGNlZlY3RvcklOM0pTQzEwSWRlbnRpZmll
ckVMbTY0RUUxNHNocmlua0NhcGFjaXR5RW0KIF9fWk4zSlNDOUNvZGVCbG9ja0MyRVBOU18xNlNj
cmlwdEV4ZWN1dGFibGVFTlNfOENvZGVUeXBlRVBOU18xNEpTR2xvYmFsT2JqZWN0RU4zV1RGMTBQ
YXNzUmVmUHRySU5TXzE0U291cmNlUHJvdmlkZXJFRUVqUE5TNl83SGFzaE1hcElOUzZfNlJlZlB0
cklOUzZfMTBTdHJpbmdJbXBsRUVFTlNfMTZTeW1ib2xUYWJsZUVudHJ5RU5TXzE3SWRlbnRpZmll
clJlcEhhc2hFTlM2XzEwSGFzaFRyYWl0c0lTRF9FRU5TXzI2U3ltYm9sVGFibGVJbmRleEhhc2hU
cmFpdHNFRUViCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZUV4cG9ydHMuZGVmCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlRXhwb3J0cy5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTM2MSw3ICszNjEsNiBA
QCBFWFBPUlRTCiAgICAgP3NldEdldHRlckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYVkpT
VmFsdWVAMkBAWgogICAgID9zZXRHbG9iYWxUaGlzQEpTR2xvYmFsT2JqZWN0QEpTQ0BASUFFWEFB
VkpTR2xvYmFsRGF0YUAyQFBBVkpTT2JqZWN0QDJAQFoKICAgICA/c2V0SW5kZXhRdWlja2x5VG9V
bmRlY2lkZWRASlNPYmplY3RASlNDQEBBQUVYQUFWSlNHbG9iYWxEYXRhQDJASVZKU1ZhbHVlQDJA
QFoKLSAgICA/c2V0TG9jQFN0YXRlbWVudE5vZGVASlNDQEBRQUVYSEhAWgogICAgID9zZXRNYWlu
VGhyZWFkQ2FsbGJhY2tzUGF1c2VkQFdURkBAWUFYX05AWgogICAgID9zZXRPcHRpb25AT3B0aW9u
c0BKU0NAQFNBX05QQkRAWgogICAgID9zZXRPcmRlckxvd2VyRmlyc3RAQ29sbGF0b3JAV1RGQEBR
QUVYX05AWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmVFeHBvcnRHZW5lcmF0b3IvSmF2YVNjcmlwdENvcmVFeHBvcnRzLmRl
Zi5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZUV4cG9ydEdlbmVyYXRvci9KYXZhU2NyaXB0Q29yZUV4cG9y
dHMuZGVmLmluCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZUV4cG9ydEdlbmVyYXRvci9KYXZhU2Ny
aXB0Q29yZUV4cG9ydHMuZGVmLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNyArMzYwLDYgQEAg
RVhQT1JUUwogICAgID9zZXRHZXR0ZXJAUHJvcGVydHlEZXNjcmlwdG9yQEpTQ0BAUUFFWFZKU1Zh
bHVlQDJAQFoKICAgICA/c2V0R2xvYmFsVGhpc0BKU0dsb2JhbE9iamVjdEBKU0NAQElBRVhBQVZK
U0dsb2JhbERhdGFAMkBQQVZKU09iamVjdEAyQEBaCiAgICAgP3NldEluZGV4UXVpY2tseVRvVW5k
ZWNpZGVkQEpTT2JqZWN0QEpTQ0BAQUFFWEFBVkpTR2xvYmFsRGF0YUAyQElWSlNWYWx1ZUAyQEBa
Ci0gICAgP3NldExvY0BTdGF0ZW1lbnROb2RlQEpTQ0BAUUFFWEhIQFoKICAgICA/c2V0TWFpblRo
cmVhZENhbGxiYWNrc1BhdXNlZEBXVEZAQFlBWF9OQFoKICAgICA/c2V0T3B0aW9uQE9wdGlvbnNA
SlNDQEBTQV9OUEJEQFoKICAgICA/c2V0T3JkZXJMb3dlckZpcnN0QENvbGxhdG9yQFdURkBAUUFF
WF9OQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1l
cm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0xNDczLDggKzE0NzMsOCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3Ry
ZWFtCiAgICAgICAgICAgICBpbnQgZGVidWdIb29rSUQgPSAoKytpdCktPnUub3BlcmFuZDsKICAg
ICAgICAgICAgIGludCBmaXJzdExpbmUgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAg
IGludCBsYXN0TGluZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGNvbHVt
biA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gZGVi
dWdcdFx0ICVzLCAlZCwgJWQsICVkIiwgbG9jYXRpb24sIGRlYnVnSG9va05hbWUoZGVidWdIb29r
SUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjb2x1bW4pOworICAgICAgICAgICAgaW50IGNoYXJQ
b3NpdGlvbiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0
ZF0gZGVidWdcdFx0ICVzLCAlZCwgJWQsICVkIiwgbG9jYXRpb24sIGRlYnVnSG9va05hbWUoZGVi
dWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjaGFyUG9zaXRpb24pOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDksIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4K
ICAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4KICAqCkBAIC0yMTIxLDcgKzIxMjEs
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UG9wU2NvcGUoKQogICAgIG1fZHluYW1p
Y1Njb3BlRGVwdGgtLTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9v
ayhEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBp
bnQgY29sdW1uKQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlYnVnSG9vayhEZWJ1Z0hv
b2tJRCBkZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY2hhclBv
c2l0aW9uKQogewogI2lmIEVOQUJMRShERUJVR19XSVRIX0JSRUFLUE9JTlQpCiAgICAgaWYgKGRl
YnVnSG9va0lEICE9IERpZFJlYWNoQnJlYWtwb2ludCkKQEAgLTIxMzQsNyArMjEzNCw3IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWJ1Z0hvb2soRGUKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZGVidWdIb29rSUQpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmaXJzdExp
bmUpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChsYXN0TGluZSk7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGNvbHVtbik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNoYXJQb3Np
dGlvbik7CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dChT
dGF0ZW1lbnROb2RlKiBmaW5hbGx5QmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAx
NDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3
YXJpY2hAdXdhdGVybG9vLmNhPgogICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgog
ICoKQEAgLTM3NCw3ICszNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc3RhcnRPZmZzZXQgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgc3RhcnQgb2Zmc2V0IGlzIG91dCBvZiBib3VuZHMgd2Ug
Y2xlYXIgYm90aCBvZmZzZXRzCiAgICAgICAgICAgICAgICAgLy8gc28gd2Ugb25seSBnZXQgdGhl
IGRpdm90IG1hcmtlci4gIEVycm9yIG1lc3NhZ2Ugd2lsbCBoYXZlIHRvIGJlIHJlZHVjZWQKLSAg
ICAgICAgICAgICAgICAvLyB0byBsaW5lIGFuZCBjb2x1bW4gbnVtYmVyLgorICAgICAgICAgICAg
ICAgIC8vIHRvIGxpbmUgYW5kIGNoYXJQb3NpdGlvbiBudW1iZXIuCiAgICAgICAgICAgICAgICAg
c3RhcnRPZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgIGVuZE9mZnNldCA9IDA7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGVuZE9mZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNl
dCkgewpAQCAtNTExLDcgKzUxMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0UHVzaFdpdGhTY29wZShSZWdpc3RlcklEKiBzY29wZSk7CiAgICAgICAgIHZvaWQg
ZW1pdFBvcFNjb3BlKCk7CiAKLSAgICAgICAgdm9pZCBlbWl0RGVidWdIb29rKERlYnVnSG9va0lE
LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBjb2x1bW4pOworICAgICAgICB2b2lk
IGVtaXREZWJ1Z0hvb2soRGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSwg
aW50IGNoYXJQb3NpdGlvbik7CiAKICAgICAgICAgaW50IHNjb3BlRGVwdGgoKSB7IHJldHVybiBt
X2R5bmFtaWNTY29wZURlcHRoICsgbV9maW5hbGx5RGVwdGg7IH0KICAgICAgICAgYm9vbCBoYXNG
aW5hbGlzZXIoKSB7IHJldHVybiBtX2ZpbmFsbHlEZXB0aCAhPSAwOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShy
ZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChj
d3p3YXJpY2hAdXdhdGVybG9vLmNhKQogKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3Zp
Y2gKICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgpA
QCAtMjAxLDcgKzIwMSw3IEBAIGJvb2wgQXJyYXlOb2RlOjppc1NpbXBsZUFycmF5KCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQXJndW1lbnRMaXN0Tm9kZSogQXJyYXlOb2RlOjp0b0Fy
Z3VtZW50TGlzdChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBpbnQg
Y29sdW1uTnVtYmVyKSBjb25zdAorQXJndW1lbnRMaXN0Tm9kZSogQXJyYXlOb2RlOjp0b0FyZ3Vt
ZW50TGlzdChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVtYmVyLCBpbnQgY2hh
clBvc2l0aW9uKSBjb25zdAogewogICAgIEFTU0VSVCghbV9lbGlzaW9uICYmICFtX29wdGlvbmFs
KTsKICAgICBFbGVtZW50Tm9kZSogcHRyID0gbV9lbGVtZW50OwpAQCAtMjA5LDcgKzIwOSw3IEBA
IEFyZ3VtZW50TGlzdE5vZGUqIEFycmF5Tm9kZTo6dG9Bcmd1bWVudEwKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uOwogICAgIGxvY2F0aW9uLmxpbmUgPSBs
aW5lTnVtYmVyOwotICAgIGxvY2F0aW9uLmNvbHVtbiA9IGNvbHVtbk51bWJlcjsKKyAgICBsb2Nh
dGlvbi5jaGFyUG9zaXRpb24gPSBjaGFyUG9zaXRpb247CiAgICAgQXJndW1lbnRMaXN0Tm9kZSog
aGVhZCA9IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRMaXN0Tm9kZShsb2NhdGlvbiwgcHRyLT52
YWx1ZSgpKTsKICAgICBBcmd1bWVudExpc3ROb2RlKiB0YWlsID0gaGVhZDsKICAgICBwdHIgPSBw
dHItPm5leHQoKTsKQEAgLTE0NjIsNyArMTQ2Miw3IEBAIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5v
ZGU6OmVtaXRCeXRlY29kZSgKIAogUmVnaXN0ZXJJRCogQ29uc3RTdGF0ZW1lbnROb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7Ci0g
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGlu
ZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2so
V2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRp
b24oKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShtX25leHQpOwogfQogCkBAIC0x
NTA1LDcgKzE1MDUsNyBAQCBSZWdpc3RlcklEKiBCbG9ja05vZGU6OmVtaXRCeXRlY29kZShCeXRl
CiAKIFJlZ2lzdGVySUQqIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBnZW5lcmF0b3Iu
ZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5l
KCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0
YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNoYXJQb3NpdGlvbigpKTsKICAgICBy
ZXR1cm4gZHN0OwogfQogCkBAIC0xNTEzLDcgKzE1MTMsNyBAQCBSZWdpc3RlcklEKiBFbXB0eVN0
YXRlbWVudE5vZGU6OmVtaXRCeXRlCiAKIFJlZ2lzdGVySUQqIERlYnVnZ2VyU3RhdGVtZW50Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRSZWFjaEJyZWFrcG9pbnQs
IGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRE
ZWJ1Z0hvb2soRGlkUmVhY2hCcmVha3BvaW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY2hh
clBvc2l0aW9uKCkpOwogICAgIHJldHVybiBkc3Q7CiB9CiAKQEAgLTE1MjIsNyArMTUyMiw3IEBA
IFJlZ2lzdGVySUQqIERlYnVnZ2VyU3RhdGVtZW50Tm9kZTo6ZW1pdEIKIFJlZ2lzdGVySUQqIEV4
cHJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIEFTU0VSVChtX2V4cHIpOwotICAgIGdlbmVyYXRv
ci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExp
bmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRl
U3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY2hhclBvc2l0aW9uKCkpOwogICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2V4cHIpOwogfQogCkBAIC0xNTMxLDcg
KzE1MzEsNyBAQCBSZWdpc3RlcklEKiBFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjCiBSZWdp
c3RlcklEKiBWYXJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAgICAgQVNTRVJUKG1fZXhwcik7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBs
YXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4
ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7
CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOwogfQogCkBAIC0xNTM5LDcg
KzE1MzksNyBAQCBSZWdpc3RlcklEKiBWYXJTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvCiAKIFJl
Z2lzdGVySUQqIElmTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxs
RXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5l
KCksIGxhc3RMaW5lKCksIGNoYXJQb3NpdGlvbigpKTsKICAgICAKICAgICBSZWZQdHI8TGFiZWw+
IGFmdGVyVGhlbiA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCkBAIC0xNTYzLDcgKzE1NjMsNyBA
QCBSZWdpc3RlcklEKiBJZk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kCiAKIFJlZ2lzdGVySUQq
IElmRWxzZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1
dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBs
YXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7CiAgICAgCiAgICAgUmVmUHRyPExhYmVsPiBiZWZv
cmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPExhYmVsPiBhZnRlckVs
c2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKQEAgLTE1OTksMTIgKzE1OTksMTIgQEAgUmVnaXN0
ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRCeXRlY29kZShCeQogICAgIFJlZlB0cjxMYWJlbD4gdG9w
T2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0
b3BPZkxvb3AuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLSAgICBnZW5l
cmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbGFzdExpbmUoKSwgbGFz
dExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVj
dXRlU3RhdGVtZW50LCBsYXN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7CiAK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVU
YXJnZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1l
bnQsIGxhc3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbGFzdExpbmUoKSwgbGFzdExpbmUoKSwg
Y2hhclBvc2l0aW9uKCkpOwogICAgIGlmIChtX2V4cHItPmhhc0NvbmRpdGlvbkNvbnRleHRDb2Rl
Z2VuKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4
cHIsIHRvcE9mTG9vcC5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCksIGZhbHNlKTsKICAgICBl
bHNlIHsKQEAgLTE2MjMsNyArMTYyMyw3IEBAIFJlZ2lzdGVySUQqIFdoaWxlTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGUKICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVs
U2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CiAgICAgUmVmUHRyPExhYmVsPiB0b3BPZkxvb3AgPSBn
ZW5lcmF0b3IubmV3TGFiZWwoKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxF
eGVjdXRlU3RhdGVtZW50LCBtX2V4cHItPmxpbmVObygpLCBtX2V4cHItPmxpbmVObygpLCBtX2V4
cHItPmNvbHVtbk5vKCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRl
U3RhdGVtZW50LCBtX2V4cHItPmxpbmVObygpLCBtX2V4cHItPmxpbmVObygpLCBtX2V4cHItPmNo
YXJQb3NpdGlvbigpKTsKICAgICBpZiAobV9leHByLT5oYXNDb25kaXRpb25Db250ZXh0Q29kZWdl
bigpKQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQobV9leHBy
LCB0b3BPZkxvb3AuZ2V0KCksIHNjb3BlLT5icmVha1RhcmdldCgpLCB0cnVlKTsKICAgICBlbHNl
IHsKQEAgLTE2MzcsNyArMTYzNyw3IEBAIFJlZ2lzdGVySUQqIFdoaWxlTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGUKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAKICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAgICBnZW5l
cmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxh
c3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhl
Y3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNoYXJQb3NpdGlvbigpKTsK
IAogICAgIGlmIChtX2V4cHItPmhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKCkpCiAgICAgICAg
IGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4cHIsIHRvcE9mTG9vcC5n
ZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCksIGZhbHNlKTsKQEAgLTE2NTgsNyArMTY1OCw3IEBA
IFJlZ2lzdGVySUQqIEZvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY28KIHsKICAgICBMYWJlbFNj
b3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7
CiAKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmly
c3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNoYXJQ
b3NpdGlvbigpKTsKIAogICAgIGlmIChtX2V4cHIxKQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5v
ZGUoZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSwgbV9leHByMSk7CkBAIC0xNjc5LDcgKzE2Nzks
NyBAQCBSZWdpc3RlcklEKiBGb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvCiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50
KTsKIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwot
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExp
bmUoKSwgbGFzdExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29r
KFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY2hhclBvc2l0
aW9uKCkpOwogICAgIGlmIChtX2V4cHIzKQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2Vu
ZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSwgbV9leHByMyk7CiAKQEAgLTE3MDYsNyArMTcwNiw3IEBA
IFJlZ2lzdGVySUQqIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKICAgICBpZiAoIW1fbGV4
cHItPmlzTG9jYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9y
KGdlbmVyYXRvciwgIkxlZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVy
ZW5jZS4iKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVt
ZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5l
bWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUo
KSwgY2hhclBvc2l0aW9uKCkpOwogCiAgICAgaWYgKG1faW5pdCkKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCksIG1faW5pdCk7CkBAIC0xNzcwLDcg
KzE3NzAsNyBAQCBSZWdpc3RlcklEKiBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlCiAKICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdE5leHRQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLCBiYXNlLmdldCgpLCBpLmdl
dCgpLCBzaXplLmdldCgpLCBpdGVyLmdldCgpLCBsb29wU3RhcnQuZ2V0KCkpOwotICAgIGdlbmVy
YXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFz
dExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVj
dXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY2hhclBvc2l0aW9uKCkpOwog
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwogICAgIHJldHVy
biBkc3Q7CiB9CkBAIC0xNzgwLDcgKzE3ODAsNyBAQCBSZWdpc3RlcklEKiBGb3JJbk5vZGU6OmVt
aXRCeXRlY29kZShCeXRlCiAvLyBFQ01BIDEyLjcKIFJlZ2lzdGVySUQqIENvbnRpbnVlTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwg
Zmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERl
YnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNo
YXJQb3NpdGlvbigpKTsKICAgICAKICAgICBMYWJlbFNjb3BlKiBzY29wZSA9IGdlbmVyYXRvci5j
b250aW51ZVRhcmdldChtX2lkZW50KTsKICAgICBBU1NFUlQoc2NvcGUpOwpAQCAtMTc5NCw3ICsx
Nzk0LDcgQEAgUmVnaXN0ZXJJRCogQ29udGludWVOb2RlOjplbWl0Qnl0ZWNvZGUoQgogLy8gRUNN
QSAxMi44CiBSZWdpc3RlcklEKiBCcmVha05vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXRE
ZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBj
b2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1l
bnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7CiAgICAgCiAgICAg
TGFiZWxTY29wZSogc2NvcGUgPSBnZW5lcmF0b3IuYnJlYWtUYXJnZXQobV9pZGVudCk7CiAgICAg
QVNTRVJUKHNjb3BlKTsKQEAgLTE4MDcsNyArMTgwNyw3IEBAIFJlZ2lzdGVySUQqIEJyZWFrTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKIAogUmVnaXN0ZXJJRCogUmV0dXJuTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5l
KCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhX
aWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNoYXJQb3NpdGlv
bigpKTsKICAgICBBU1NFUlQoZ2VuZXJhdG9yLmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsK
IAogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKQEAgLTE4MjMsNyAr
MTgyMyw3IEBAIFJlZ2lzdGVySUQqIFJldHVybk5vZGU6OmVtaXRCeXRlY29kZShCeXQKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRKdW1wU2NvcGVzKGwwLmdldCgpLCAwKTsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChsMC5nZXQoKSk7CiAgICAgfQotICAgIGdlbmVyYXRvci5lbWl0RGVidWdI
b29rKFdpbGxMZWF2ZUNhbGxGcmFtZSwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigp
KTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsTGVhdmVDYWxsRnJhbWUsIGZpcnN0
TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0UmV0dXJuKHIwKTsKIH0KIApAQCAtMTgzMSw3ICsxODMxLDcgQEAgUmVnaXN0ZXJJRCog
UmV0dXJuTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAogCiBSZWdpc3RlcklEKiBXaXRoTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmly
c3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNoYXJQ
b3NpdGlvbigpKTsKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZv
dCwgbV9leHByZXNzaW9uTGVuZ3RoLCAwKTsKQEAgLTIwMDgsNyArMjAwOCw3IEBAIFJlZ2lzdGVy
SUQqIENhc2VCbG9ja05vZGU6OmVtaXRCeXRlY29kZUYKIAogUmVnaXN0ZXJJRCogU3dpdGNoTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVu
dCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCks
IGNoYXJQb3NpdGlvbigpKTsKICAgICAKICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJh
dG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6U3dpdGNoKTsKIApAQCAtMjAyMyw3ICsyMDIz
LDcgQEAgUmVnaXN0ZXJJRCogU3dpdGNoTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAogCiBSZWdpc3Rl
cklEKiBMYWJlbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4
ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgp
LCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24oKSk7CiAKICAgICBBU1NFUlQoIWdlbmVyYXRvci5i
cmVha1RhcmdldChtX25hbWUpKTsKIApAQCAtMjAzOCw3ICsyMDM4LDcgQEAgUmVnaXN0ZXJJRCog
TGFiZWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogCiBSZWdpc3RlcklEKiBUaHJvd05vZGU6OmVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3Qp
CiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZp
cnN0TGluZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1
Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFy
UG9zaXRpb24oKSk7CiAKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkp
CiAgICAgICAgIGRzdCA9IDA7CkBAIC0yMDU1LDcgKzIwNTUsNyBAQCBSZWdpc3RlcklEKiBUcnlO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvCiAgICAgLy8gTk9URTogVGhlIGNhdGNoIGFuZCBmaW5h
bGx5IGJsb2NrcyBtdXN0IGJlIGxhYmVsZWQgZXhwbGljaXRseSwgc28gdGhlCiAgICAgLy8gb3B0
aW1pemVyIGtub3dzIHRoZXkgbWF5IGJlIGp1bXBlZCB0byBmcm9tIGFueXdoZXJlLgogCi0gICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgp
LCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2ls
bEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjaGFyUG9zaXRpb24o
KSk7CiAKICAgICBBU1NFUlQobV9jYXRjaEJsb2NrIHx8IG1fZmluYWxseUJsb2NrKTsKIApAQCAt
MjEyNCwxMyArMjEyNCwxMyBAQCBpbmxpbmUgdm9pZCBTY29wZU5vZGU6OmVtaXRTdGF0ZW1lbnRz
Qnl0CiAKIFJlZ2lzdGVySUQqIFByb2dyYW1Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7Ci0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1
Z0hvb2soV2lsbEV4ZWN1dGVQcm9ncmFtLCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY29sdW1u
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlUHJvZ3JhbSwgc3Rh
cnRMaW5lKCksIHN0YXJ0TGluZSgpLCBzdGFydENoYXJQb3NpdGlvbigpKTsKIAogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBkc3RSZWdpc3RlciA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAg
ICBnZW5lcmF0b3IuZW1pdExvYWQoZHN0UmVnaXN0ZXIuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwog
ICAgIGVtaXRTdGF0ZW1lbnRzQnl0ZWNvZGUoZ2VuZXJhdG9yLCBkc3RSZWdpc3Rlci5nZXQoKSk7
CiAKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRFeGVjdXRlUHJvZ3JhbSwgZmlyc3RM
aW5lKCksIGxhc3RMaW5lKCksIGNvbHVtbigpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9v
ayhEaWRFeGVjdXRlUHJvZ3JhbSwgbGFzdExpbmUoKSwgbGFzdExpbmUoKSwgY2hhclBvc2l0aW9u
KCkgLSAxKTsKICAgICBnZW5lcmF0b3IuZW1pdEVuZChkc3RSZWdpc3Rlci5nZXQoKSk7CiAgICAg
cmV0dXJuIDA7CiB9CkBAIC0yMTM5LDEzICsyMTM5LDEzIEBAIFJlZ2lzdGVySUQqIFByb2dyYW1O
b2RlOjplbWl0Qnl0ZWNvZGUoQnkKIAogUmVnaXN0ZXJJRCogRXZhbE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIHsKLSAgICBnZW5l
cmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVByb2dyYW0sIGZpcnN0TGluZSgpLCBsYXN0
TGluZSgpLCBjb2x1bW4oKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1
dGVQcm9ncmFtLCBzdGFydExpbmUoKSwgc3RhcnRMaW5lKCksIHN0YXJ0Q2hhclBvc2l0aW9uKCkp
OwogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRzdFJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3RSZWdpc3Rlci5nZXQoKSwganNV
bmRlZmluZWQoKSk7CiAgICAgZW1pdFN0YXRlbWVudHNCeXRlY29kZShnZW5lcmF0b3IsIGRzdFJl
Z2lzdGVyLmdldCgpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKERpZEV4ZWN1dGVQ
cm9ncmFtLCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRv
ci5lbWl0RGVidWdIb29rKERpZEV4ZWN1dGVQcm9ncmFtLCBsYXN0TGluZSgpLCBsYXN0TGluZSgp
LCBjaGFyUG9zaXRpb24oKSAtIDEpOwogICAgIGdlbmVyYXRvci5lbWl0RW5kKGRzdFJlZ2lzdGVy
LmdldCgpKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTIxNTQsNyArMjE1NCw3IEBAIFJlZ2lzdGVy
SUQqIEV2YWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWMKIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25C
b2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqKQogewotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKERpZEVudGVyQ2FsbEZyYW1l
LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSwgY29sdW1uKCkpOworICAgIGdlbmVyYXRvci5lbWl0
RGVidWdIb29rKERpZEVudGVyQ2FsbEZyYW1lLCBzdGFydExpbmUoKSwgc3RhcnRMaW5lKCksIHN0
YXJ0Q2hhclBvc2l0aW9uKCkpOwogICAgIGVtaXRTdGF0ZW1lbnRzQnl0ZWNvZGUoZ2VuZXJhdG9y
LCBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKTsKIAogICAgIFN0YXRlbWVudE5vZGUqIHNpbmds
ZVN0YXRlbWVudCA9IHRoaXMtPnNpbmdsZVN0YXRlbWVudCgpOwpAQCAtMjE3MCw3ICsyMTcwLDgg
QEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjbwogICAgIC8vIElmIHRo
ZXJlIGlzIG5vIHJldHVybiB3ZSBtdXN0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0IG9uZS4KICAgICBp
ZiAoIXJldHVybk5vZGUpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuaXND
b25zdHJ1Y3RvcigpID8gZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpIDogZ2VuZXJhdG9yLmVtaXRM
b2FkKDAsIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhX
aWxsTGVhdmVDYWxsRnJhbWUsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpLCBjb2x1bW4oKSk7Cisg
ICAgICAgIEFTU0VSVCgoY2hhclBvc2l0aW9uKCkgLSAgMSkgPj0gMCk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0RGVidWdIb29rKFdpbGxMZWF2ZUNhbGxGcmFtZSwgbGFzdExpbmUoKSwgbGFzdExp
bmUoKSwgY2hhclBvc2l0aW9uKCkgLSAxKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXR1cm4o
cjApOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE0NjIyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3
YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTMzMywxMiArMTMzMywy
NCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgcmV0dXJu
IGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0
ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCwg
aW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY29sdW1uKQorTkVWRVJfSU5MSU5FIHZv
aWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZyYW1lLCBEZWJ1Z0hvb2tJRCBk
ZWJ1Z0hvb2tJRCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY2hhclBvc2l0aW9u
KQogewogICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+ZHluYW1pY0dsb2JhbE9i
amVjdCgpLT5kZWJ1Z2dlcigpOwogICAgIGlmICghZGVidWdnZXIpCiAgICAgICAgIHJldHVybjsK
IAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAg
ICBzaXplX3QgYWN0dWFsQ2hhclBvc2l0aW9uID0gY2hhclBvc2l0aW9uICsgY29kZUJsb2NrLT5z
b3VyY2VPZmZzZXQoKTsKKworICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IGNvZGVCbG9j
ay0+c291cmNlKCk7CisgICAgU3RyaW5nIHNvdXJjZSA9IHByb3ZpZGVyLT5zb3VyY2UoKTsKKyAg
ICBzaXplX3QgbGluZVRlcm1pbmF0b3JQb3NpdGlvbiA9IHNvdXJjZS5yZXZlcnNlRmluZExpbmVU
ZXJtaW5hdG9yKGFjdHVhbENoYXJQb3NpdGlvbik7CisgICAgaW50IGNvbHVtbjsKKyAgICBpZiAo
bGluZVRlcm1pbmF0b3JQb3NpdGlvbiAhPSBub3RGb3VuZCkKKyAgICAgICAgY29sdW1uID0gYWN0
dWFsQ2hhclBvc2l0aW9uIC0gKGxpbmVUZXJtaW5hdG9yUG9zaXRpb24gKyAxKTsKKyAgICBlbHNl
CisgICAgICAgIGNvbHVtbiA9IGFjdHVhbENoYXJQb3NpdGlvbjsKKwogICAgIHN3aXRjaCAoZGVi
dWdIb29rSUQpIHsKICAgICAgICAgY2FzZSBEaWRFbnRlckNhbGxGcmFtZToKICAgICAgICAgICAg
IGRlYnVnZ2VyLT5jYWxsRXZlbnQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5v
d25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKSwgZmlyc3RMaW5lLCBjb2x1bW4pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJl
dmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjMwLDcgKzIzMCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBTYW1wbGluZ1Rvb2wqIHNhbXBsZXIoKSB7IHJldHVybiBtX3NhbXBsZXIuZ2V0
KCk7IH0KIAogICAgICAgICBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIHRocm93RXhjZXB0aW9u
KENhbGxGcmFtZSomLCBKU1ZhbHVlJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwotICAgICAg
ICBORVZFUl9JTkxJTkUgdm9pZCBkZWJ1ZyhDYWxsRnJhbWUqLCBEZWJ1Z0hvb2tJRCwgaW50IGZp
cnN0TGluZSwgaW50IGxhc3RMaW5lLCBpbnQgY29sdW1uKTsKKyAgICAgICAgTkVWRVJfSU5MSU5F
IHZvaWQgZGVidWcoQ2FsbEZyYW1lKiwgRGVidWdIb29rSUQsIGludCBmaXJzdExpbmUsIGludCBs
YXN0TGluZSwgaW50IGNoYXJQb3NpdGlvbik7CiAgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcg
Z2V0VHJhY2VMaW5lKENhbGxGcmFtZSosIFN0YWNrRnJhbWVDb2RlVHlwZSwgY29uc3QgU3RyaW5n
JiwgaW50KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RhY2tU
cmFjZShKU0dsb2JhbERhdGEqLCBWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMpOwogICAgICAg
ICBzdGF0aWMgdm9pZCBhZGRTdGFja1RyYWNlSWZOZWNlc3NhcnkoQ2FsbEZyYW1lKiwgSlNPYmpl
Y3QqIGVycm9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShy
ZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQ2OCw5ICszNDY4LDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3BfZGVidWcpCiAgICAgaW50IGRlYnVnSG9va0lEID0gc3RhY2tGcmFtZS5hcmdz
WzBdLmludDMyKCk7CiAgICAgaW50IGZpcnN0TGluZSA9IHN0YWNrRnJhbWUuYXJnc1sxXS5pbnQz
MigpOwogICAgIGludCBsYXN0TGluZSA9IHN0YWNrRnJhbWUuYXJnc1syXS5pbnQzMigpOwotICAg
IGludCBjb2x1bW4gPSBzdGFja0ZyYW1lLmFyZ3NbM10uaW50MzIoKTsKKyAgICBpbnQgY2hhclBv
c2l0aW9uID0gc3RhY2tGcmFtZS5hcmdzWzNdLmludDMyKCk7CiAKLSAgICBzdGFja0ZyYW1lLmds
b2JhbERhdGEtPmludGVycHJldGVyLT5kZWJ1ZyhjYWxsRnJhbWUsIHN0YXRpY19jYXN0PERlYnVn
SG9va0lEPihkZWJ1Z0hvb2tJRCksIGZpcnN0TGluZSwgbGFzdExpbmUsIGNvbHVtbik7CisgICAg
c3RhY2tGcmFtZS5nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+ZGVidWcoY2FsbEZyYW1lLCBzdGF0
aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBj
aGFyUG9zaXRpb24pOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fdGhyb3cp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHJldmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MzcsOSArMTYzNyw5
IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWJ1ZykKICAgICBpbnQgZGVidWdI
b29rSUQgPSBwY1sxXS51Lm9wZXJhbmQ7CiAgICAgaW50IGZpcnN0TGluZSA9IHBjWzJdLnUub3Bl
cmFuZDsKICAgICBpbnQgbGFzdExpbmUgPSBwY1szXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGNvbHVt
biA9IHBjWzRdLnUub3BlcmFuZDsKKyAgICBpbnQgY2hhclBvc2l0aW9uID0gcGNbNF0udS5vcGVy
YW5kOwogCi0gICAgZ2xvYmFsRGF0YS5pbnRlcnByZXRlci0+ZGVidWcoZXhlYywgc3RhdGljX2Nh
c3Q8RGVidWdIb29rSUQ+KGRlYnVnSG9va0lEKSwgZmlyc3RMaW5lLCBsYXN0TGluZSwgY29sdW1u
KTsKKyAgICBnbG9iYWxEYXRhLmludGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0aWNfY2FzdDxE
ZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpLCBmaXJzdExpbmUsIGxhc3RMaW5lLCBjaGFyUG9zaXRp
b24pOwogICAgIAogICAgIExMSU5UX0VORCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjUsMTMgKzI2
NSwxMyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUZ1bmN0aW9uRXhwcihj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyKiBuYW1lLCBG
dW5jdGlvbkJvZHlOb2RlKiBib2R5LCBQYXJhbWV0ZXJOb2RlKiBwYXJhbWV0ZXJzLCBpbnQgb3Bl
bkJyYWNlUG9zLCBpbnQgY2xvc2VCcmFjZVBvcywgaW50IGJvZHlTdGFydExpbmUsIGludCBib2R5
RW5kTGluZSkKICAgICB7CiAgICAgICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX2ds
b2JhbERhdGEpIEZ1bmNFeHByTm9kZShsb2NhdGlvbiwgKm5hbWUsIGJvZHksIG1fc291cmNlQ29k
ZS0+c3ViRXhwcmVzc2lvbihvcGVuQnJhY2VQb3MsIGNsb3NlQnJhY2VQb3MsIGJvZHlTdGFydExp
bmUpLCBwYXJhbWV0ZXJzKTsKLSAgICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJv
ZHlFbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICBib2R5LT5zZXRMb2MoYm9keVN0
YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgRnVuY3Rpb25Cb2R5Tm9kZSogY3JlYXRlRnVuY3Rp
b25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGJvb2wgaW5TdHJpY3RDb250
ZXh0KQorICAgIEZ1bmN0aW9uQm9keU5vZGUqIGNyZWF0ZUZ1bmN0aW9uQm9keShjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9j
YXRpb24sIGJvb2wgaW5TdHJpY3RDb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEZ1bmN0
aW9uQm9keU5vZGU6OmNyZWF0ZShtX2dsb2JhbERhdGEsIGxvY2F0aW9uLCBpblN0cmljdENvbnRl
eHQpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKG1fZ2xvYmFsRGF0
YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGluU3RyaWN0Q29udGV4dCk7CiAgICAgfQog
CiAgICAgdm9pZCBzZXRGdW5jdGlvblN0YXJ0KEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIGludCBm
dW5jdGlvblN0YXJ0KQpAQCAtMjgyLDE0ICsyODIsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRl
IDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIGNvbnN0
IElkZW50aWZpZXIqIG5hbWUsIFBhcmFtZXRlck5vZGUqIHBhcmFtcywgRnVuY3Rpb25Cb2R5Tm9k
ZSogYm9keSwgaW50IG9wZW5CcmFjZVBvcywgaW50IGNsb3NlQnJhY2VQb3MsIGludCBib2R5U3Rh
cnRMaW5lLCBpbnQgYm9keUVuZExpbmUpCiAgICAgewogICAgICAgICBBU1NFUlQobmFtZSk7Ci0g
ICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5kTGluZSwgbG9jYXRpb24u
Y29sdW1uKTsKKyAgICAgICAgYm9keS0+c2V0TG9jKGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5l
LCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICBib2R5LT5zZXRJbmZlcnJlZE5hbWUo
Km5hbWUpOwogICAgICAgICByZXR1cm4gbmV3IChtX2dsb2JhbERhdGEpIFByb3BlcnR5Tm9kZSht
X2dsb2JhbERhdGEsICpuYW1lLCBuZXcgKG1fZ2xvYmFsRGF0YSkgRnVuY0V4cHJOb2RlKGxvY2F0
aW9uLCBtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBib2R5LCBt
X3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24ob3BlbkJyYWNlUG9zLCBjbG9zZUJyYWNlUG9zLCBi
b2R5U3RhcnRMaW5lKSwgcGFyYW1zKSwgdHlwZSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRl
IDxib29sPiBQcm9wZXJ0eU5vZGUqIGNyZWF0ZUdldHRlck9yU2V0dGVyUHJvcGVydHkoSlNHbG9i
YWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlOb2RlOjpU
eXBlIHR5cGUsIGRvdWJsZSBuYW1lLCBQYXJhbWV0ZXJOb2RlKiBwYXJhbXMsIEZ1bmN0aW9uQm9k
eU5vZGUqIGJvZHksIGludCBvcGVuQnJhY2VQb3MsIGludCBjbG9zZUJyYWNlUG9zLCBpbnQgYm9k
eVN0YXJ0TGluZSwgaW50IGJvZHlFbmRMaW5lKQogICAgIHsKLSAgICAgICAgYm9keS0+c2V0TG9j
KGJvZHlTdGFydExpbmUsIGJvZHlFbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICBi
b2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3Np
dGlvbik7CiAgICAgICAgIHJldHVybiBuZXcgKG1fZ2xvYmFsRGF0YSkgUHJvcGVydHlOb2RlKG1f
Z2xvYmFsRGF0YSwgbmFtZSwgbmV3IChtX2dsb2JhbERhdGEpIEZ1bmNFeHByTm9kZShsb2NhdGlv
biwgbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgYm9keSwgbV9z
b3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKG9wZW5CcmFjZVBvcywgY2xvc2VCcmFjZVBvcywgYm9k
eVN0YXJ0TGluZSksIHBhcmFtcyksIHR5cGUpOwogICAgIH0KIApAQCAtMzI2LDQ5ICszMjYsNDkg
QEAgcHVibGljOgogICAgICAgICBpZiAoKm5hbWUgPT0gbV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5hcmd1bWVudHMpCiAgICAgICAgICAgICB1c2VzQXJndW1lbnRzKCk7CiAgICAgICAgIG1f
c2NvcGUubV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhLmFwcGVuZChkZWNsLT5ib2R5KCkpOwotICAg
ICAgICBib2R5LT5zZXRMb2MoYm9keVN0YXJ0TGluZSwgYm9keUVuZExpbmUsIGxvY2F0aW9uLmNv
bHVtbik7CisgICAgICAgIGJvZHktPnNldExvYyhib2R5U3RhcnRMaW5lLCBib2R5RW5kTGluZSwg
bG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIGRlY2w7CiAgICAgfQogCiAg
ICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlQmxvY2tTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgSlNDOjpTb3VyY2VFbGVtZW50cyogZWxlbWVudHMsIGludCBzdGFydExp
bmUsIGludCBlbmRMaW5lKQogICAgIHsKICAgICAgICAgQmxvY2tOb2RlKiBibG9jayA9IG5ldyAo
bV9nbG9iYWxEYXRhKSBCbG9ja05vZGUobG9jYXRpb24sIGVsZW1lbnRzKTsKLSAgICAgICAgYmxv
Y2stPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNvbHVtbik7CisgICAgICAg
IGJsb2NrLT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24p
OwogICAgICAgICByZXR1cm4gYmxvY2s7CiAgICAgfQogCiAgICAgU3RhdGVtZW50Tm9kZSogY3Jl
YXRlRXhwclN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgIHsKICAgICAgICAgRXhwclN0
YXRlbWVudE5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBFeHByU3RhdGVtZW50Tm9k
ZShsb2NhdGlvbiwgZXhwcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxv
Y2F0aW9uLmNvbHVtbik7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0
aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAg
U3RhdGVtZW50Tm9kZSogY3JlYXRlSWZTdGF0ZW1lbnQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGNvbmRpdGlvbiwgU3RhdGVtZW50Tm9kZSogdHJ1ZUJs
b2NrLCBpbnQgc3RhcnQsIGludCBlbmQpCiAgICAgewogICAgICAgICBJZk5vZGUqIHJlc3VsdCA9
IG5ldyAobV9nbG9iYWxEYXRhKSBJZk5vZGUobG9jYXRpb24sIGNvbmRpdGlvbiwgdHJ1ZUJsb2Nr
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY29sdW1uKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9u
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBj
cmVhdGVJZlN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNz
aW9uTm9kZSogY29uZGl0aW9uLCBTdGF0ZW1lbnROb2RlKiB0cnVlQmxvY2ssIFN0YXRlbWVudE5v
ZGUqIGZhbHNlQmxvY2ssIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7CiAgICAgICAgIElmTm9k
ZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIElmRWxzZU5vZGUobG9jYXRpb24sIGNvbmRp
dGlvbiwgdHJ1ZUJsb2NrLCBmYWxzZUJsb2NrKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnQsIGVuZCwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQs
IGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVGb3JMb29wKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplciwgRXhwcmVzc2lvbk5v
ZGUqIGNvbmRpdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGl0ZXIsIFN0YXRlbWVudE5vZGUqIHN0YXRl
bWVudHMsIGludCBzdGFydCwgaW50IGVuZCkKICAgICB7CiAgICAgICAgIEZvck5vZGUqIHJlc3Vs
dCA9IG5ldyAobV9nbG9iYWxEYXRhKSBGb3JOb2RlKGxvY2F0aW9uLCBpbml0aWFsaXplciwgY29u
ZGl0aW9uLCBpdGVyLCBzdGF0ZW1lbnRzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQs
IGVuZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0LCBlbmQsIGxvY2F0aW9uLmNoYXJQ
b3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgU3RhdGVtZW50
Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIsIEV4cHJl
c3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnROb2RlKiBzdGF0ZW1lbnRzLCBpbnQgc3RhcnQsIGlu
dCBkaXZvdCwgaW50IGVuZCwgaW50IGluaXRTdGFydCwgaW50IGluaXRFbmQsIGludCBzdGFydExp
bmUsIGludCBlbmRMaW5lKQogICAgIHsKICAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcg
KG1fZ2xvYmFsRGF0YSkgRm9ySW5Ob2RlKG1fZ2xvYmFsRGF0YSwgbG9jYXRpb24sICppZGVudCwg
aW5pdGlhbGl6ZXIsIGl0ZXIsIHN0YXRlbWVudHMsIGluaXRTdGFydCwgaW5pdFN0YXJ0IC0gc3Rh
cnQsIGluaXRFbmQgLSBpbml0U3RhcnQpOwotICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExp
bmUsIGVuZExpbmUsIGxvY2F0aW9uLmNvbHVtbik7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgc2V0RXhj
ZXB0aW9uTG9jYXRpb24ocmVzdWx0LCBzdGFydCwgZGl2b3QgKyAxLCBlbmQpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTM3Niw3ICszNzYsNyBAQCBwdWJsaWM6CiAgICAgU3Rh
dGVtZW50Tm9kZSogY3JlYXRlRm9ySW5Mb29wKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBsaHMsIEV4cHJlc3Npb25Ob2RlKiBpdGVyLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnRzLCBpbnQgZVN0YXJ0LCBpbnQgZURpdm90LCBpbnQgZUVuZCwgaW50IHN0
YXJ0LCBpbnQgZW5kKQogICAgIHsKICAgICAgICAgRm9ySW5Ob2RlKiByZXN1bHQgPSBuZXcgKG1f
Z2xvYmFsRGF0YSkgRm9ySW5Ob2RlKGxvY2F0aW9uLCBsaHMsIGl0ZXIsIHN0YXRlbWVudHMpOwot
ICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kLCBsb2NhdGlvbi5jb2x1bW4pOworICAg
ICAgICByZXN1bHQtPnNldExvYyhzdGFydCwgZW5kLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwog
ICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIGVTdGFydCwgZURpdm90LCBlRW5k
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0zOTAsNyArMzkwLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEVtcHR5U3RhdGVt
ZW50Tm9kZShsb2NhdGlvbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IG5l
dyAobV9nbG9iYWxEYXRhKSBWYXJTdGF0ZW1lbnROb2RlKGxvY2F0aW9uLCBleHByKTsKLSAgICAg
ICAgcmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRMb2Moc3RhcnQsIGVuZCwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTM5OCw3ICszOTgsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBSZXR1cm5Ob2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgUmV0
dXJuTm9kZShsb2NhdGlvbiwgZXhwcmVzc2lvbik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0
aW9uKHJlc3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
c3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICByZXN1bHQtPnNl
dExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00MDYsNyArNDA2LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgQnJlYWtOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQnJlYWtO
b2RlKG1fZ2xvYmFsRGF0YSwgbG9jYXRpb24pOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlv
bihyZXN1bHQsIGVTdGFydCwgZUVuZCwgZUVuZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0
YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDE0LDcgKzQxNCw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEJyZWFrTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIEJyZWFrTm9k
ZShsb2NhdGlvbiwgKmlkZW50KTsKICAgICAgICAgc2V0RXhjZXB0aW9uTG9jYXRpb24ocmVzdWx0
LCBlU3RhcnQsIGVFbmQsIGVFbmQpOwotICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUs
IGVuZExpbmUsIGxvY2F0aW9uLmNvbHVtbik7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0
TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKQEAgLTQyMiw3ICs0MjIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBDb250aW51ZU5vZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBDb250aW51ZU5vZGUo
bV9nbG9iYWxEYXRhLCBsb2NhdGlvbik7CiAgICAgICAgIHNldEV4Y2VwdGlvbkxvY2F0aW9uKHJl
c3VsdCwgZVN0YXJ0LCBlRW5kLCBlRW5kKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRM
aW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICByZXN1bHQtPnNldExvYyhz
dGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCkBAIC00MzAsNyArNDMwLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgQ29udGludWVOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgQ29udGludWVO
b2RlKGxvY2F0aW9uLCAqaWRlbnQpOwogICAgICAgICBzZXRFeGNlcHRpb25Mb2NhdGlvbihyZXN1
bHQsIGVTdGFydCwgZUVuZCwgZUVuZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGlu
ZSwgZW5kTGluZSwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtNDM5LDcgKzQzOSw3IEBAIHB1YmxpYzoKICAgICAgICAgVHJ5
Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFRyeU5vZGUobG9jYXRpb24sIHRyeUJs
b2NrLCAqaWRlbnQsIGNhdGNoQmxvY2ssIGZpbmFsbHlCbG9jayk7CiAgICAgICAgIGlmIChjYXRj
aEJsb2NrKQogICAgICAgICAgICAgdXNlc0NhdGNoKCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9j
KHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDQ3LDIxICs0NDcsMjEgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgQ2FzZUJsb2NrTm9kZSogY2FzZXMgPSBuZXcgKG1fZ2xvYmFsRGF0YSkg
Q2FzZUJsb2NrTm9kZShmaXJzdENsYXVzZXMsIGRlZmF1bHRDbGF1c2UsIHNlY29uZENsYXVzZXMp
OwogICAgICAgICBTd2l0Y2hOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgU3dpdGNo
Tm9kZShsb2NhdGlvbiwgZXhwciwgY2FzZXMpOwotICAgICAgICByZXN1bHQtPnNldExvYyhzdGFy
dExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNvbHVtbik7CisgICAgICAgIHJlc3VsdC0+c2V0TG9j
KHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVXaGlsZVN0YXRl
bWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhw
ciwgU3RhdGVtZW50Tm9kZSogc3RhdGVtZW50LCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGluZSkK
ICAgICB7CiAgICAgICAgIFdoaWxlTm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIFdo
aWxlTm9kZShsb2NhdGlvbiwgZXhwciwgc3RhdGVtZW50KTsKLSAgICAgICAgcmVzdWx0LT5zZXRM
b2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICByZXN1bHQt
PnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgU3RhdGVtZW50Tm9kZSogY3JlYXRlRG9X
aGlsZVN0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBTdGF0ZW1lbnRO
b2RlKiBzdGF0ZW1lbnQsIEV4cHJlc3Npb25Ob2RlKiBleHByLCBpbnQgc3RhcnRMaW5lLCBpbnQg
ZW5kTGluZSkKICAgICB7CiAgICAgICAgIERvV2hpbGVOb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xv
YmFsRGF0YSkgRG9XaGlsZU5vZGUobG9jYXRpb24sIHN0YXRlbWVudCwgZXhwcik7Ci0gICAgICAg
IHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY29sdW1uKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9z
aXRpb24pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDc2LDE0ICs0NzYs
MTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdXNlc1dpdGgoKTsKICAgICAgICAgV2l0aE5v
ZGUqIHJlc3VsdCA9IG5ldyAobV9nbG9iYWxEYXRhKSBXaXRoTm9kZShsb2NhdGlvbiwgZXhwciwg
c3RhdGVtZW50LCBlbmQsIGVuZCAtIHN0YXJ0KTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3Rh
cnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICByZXN1bHQtPnNldExv
YyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfSAgICAKICAgICAKICAgICBTdGF0ZW1lbnROb2RlKiBjcmVhdGVU
aHJvd1N0YXRlbWVudChjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9u
Tm9kZSogZXhwciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3RhcnRMaW5lLCBpbnQgZW5kTGlu
ZSkKICAgICB7CiAgICAgICAgIFRocm93Tm9kZSogcmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEp
IFRocm93Tm9kZShsb2NhdGlvbiwgZXhwcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0
TGluZSwgZW5kTGluZSwgbG9jYXRpb24uY29sdW1uKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2Mo
c3RhcnRMaW5lLCBlbmRMaW5lLCBsb2NhdGlvbi5jaGFyUG9zaXRpb24pOwogICAgICAgICBzZXRF
eGNlcHRpb25Mb2NhdGlvbihyZXN1bHQsIHN0YXJ0LCBlbmQsIGVuZCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtNDkxLDE0ICs0OTEsMTQgQEAgcHVibGljOgogICAgIFN0YXRl
bWVudE5vZGUqIGNyZWF0ZURlYnVnZ2VyKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IGludCBzdGFydExpbmUsIGludCBlbmRMaW5lKQogICAgIHsKICAgICAgICAgRGVidWdnZXJTdGF0
ZW1lbnROb2RlKiByZXN1bHQgPSBuZXcgKG1fZ2xvYmFsRGF0YSkgRGVidWdnZXJTdGF0ZW1lbnRO
b2RlKGxvY2F0aW9uKTsKLSAgICAgICAgcmVzdWx0LT5zZXRMb2Moc3RhcnRMaW5lLCBlbmRMaW5l
LCBsb2NhdGlvbi5jb2x1bW4pOworICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVu
ZExpbmUsIGxvY2F0aW9uLmNoYXJQb3NpdGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAogICAgIFN0YXRlbWVudE5vZGUqIGNyZWF0ZUNvbnN0U3RhdGVtZW50KGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIENvbnN0RGVjbE5vZGUqIGRlY2xzLCBpbnQgc3Rh
cnRMaW5lLCBpbnQgZW5kTGluZSkKICAgICB7CiAgICAgICAgIENvbnN0U3RhdGVtZW50Tm9kZSog
cmVzdWx0ID0gbmV3IChtX2dsb2JhbERhdGEpIENvbnN0U3RhdGVtZW50Tm9kZShsb2NhdGlvbiwg
ZGVjbHMpOwotICAgICAgICByZXN1bHQtPnNldExvYyhzdGFydExpbmUsIGVuZExpbmUsIGxvY2F0
aW9uLmNvbHVtbik7CisgICAgICAgIHJlc3VsdC0+c2V0TG9jKHN0YXJ0TGluZSwgZW5kTGluZSwg
bG9jYXRpb24uY2hhclBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiAxNDYy
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQg
KEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgKHpoZXJjemVnQGluZi51LXN6ZWdlZC5odSkKICAqICBD
b3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgKG1hdGhpYXNAcWl3aS5iZSkKQEAgLTU1
MCw3ICs1NTAsNyBAQCB2b2lkIExleGVyPFQ+OjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmCiAg
ICAgbV9jb2RlRW5kID0gbV9jb2RlU3RhcnQgKyBzb3VyY2UuZW5kT2Zmc2V0KCk7CiAgICAgbV9l
cnJvciA9IGZhbHNlOwogICAgIG1fYXRMaW5lU3RhcnQgPSB0cnVlOwotICAgIG1fY29sdW1uTnVt
YmVyID0gMDsKKyAgICBtX2NoYXJQb3NpdGlvbiA9IDA7CiAgICAgbV9sZXhFcnJvck1lc3NhZ2Ug
PSBTdHJpbmcoKTsKICAgICAKICAgICBtX2J1ZmZlcjgucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShp
bml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5KTsKQEAgLTU2Nyw3ICs1NjcsNyBAQCB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KIHRlbXBsYXRlIDxpbnQgc2hpZnRBbW91bnQ+IEFMV0FZU19JTkxJTkUgdm9p
ZCBMZXhlcjxUPjo6aW50ZXJuYWxTaGlmdCgpCiB7CiAgICAgbV9jb2RlICs9IHNoaWZ0QW1vdW50
OwotICAgIG1fY29sdW1uTnVtYmVyICs9IHNoaWZ0QW1vdW50OworICAgIG1fY2hhclBvc2l0aW9u
ICs9IHNoaWZ0QW1vdW50OwogICAgIG1fY3VycmVudCA9ICptX2NvZGU7CiB9CiAKQEAgLTU3OSw3
ICs1NzksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTGV4ZXI8VD46OnNoaWZ0KCkKICAgICArK21f
Y29kZTsKICAgICBpZiAoTElLRUxZKG1fY29kZSA8IG1fY29kZUVuZCkpCiAgICAgICAgIG1fY3Vy
cmVudCA9ICptX2NvZGU7Ci0gICAgKyttX2NvbHVtbk51bWJlcjsKKyAgICArK21fY2hhclBvc2l0
aW9uOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KQEAgLTEzMTksNyArMTMxOSw3IEBAIHN0
YXJ0OgogICAgICAgICByZXR1cm4gRU9GVE9LOwogICAgIAogICAgIHRva2VuTG9jYXRpb24tPnN0
YXJ0T2Zmc2V0ID0gY3VycmVudE9mZnNldCgpOwotICAgIHRva2VuTG9jYXRpb24tPmNvbHVtbiA9
IG1fY29sdW1uTnVtYmVyOworICAgIHRva2VuTG9jYXRpb24tPmNoYXJQb3NpdGlvbiA9IG1fY2hh
clBvc2l0aW9uOwogCiAgICAgQ2hhcmFjdGVyVHlwZSB0eXBlOwogICAgIGlmIChMSUtFTFkoaXNM
YXRpbjEobV9jdXJyZW50KSkpCkBAIC0xNjQyLDcgKzE2NDIsNiBAQCBpbk51bWJlckFmdGVyRGVj
aW1hbFBvaW50OgogICAgICAgICBzaGlmdExpbmVUZXJtaW5hdG9yKCk7CiAgICAgICAgIG1fYXRM
aW5lU3RhcnQgPSB0cnVlOwogICAgICAgICBtX3Rlcm1pbmF0b3IgPSB0cnVlOwotICAgICAgICBt
X2NvbHVtbk51bWJlciA9IDA7CiAgICAgICAgIGdvdG8gc3RhcnQ7CiAgICAgY2FzZSBDaGFyYWN0
ZXJJbnZhbGlkOgogICAgICAgICBtX2xleEVycm9yTWVzc2FnZSA9IGludmFsaWRDaGFyYWN0ZXJN
ZXNzYWdlKCk7CkBAIC0xNjY1LDcgKzE2NjQsNiBAQCBpblNpbmdsZUxpbmVDb21tZW50OgogICAg
IHNoaWZ0TGluZVRlcm1pbmF0b3IoKTsKICAgICBtX2F0TGluZVN0YXJ0ID0gdHJ1ZTsKICAgICBt
X3Rlcm1pbmF0b3IgPSB0cnVlOwotICAgIG1fY29sdW1uTnVtYmVyID0gMDsKICAgICBpZiAoIWxh
c3RUb2tlbldhc1Jlc3RyS2V5d29yZCgpKQogICAgICAgICBnb3RvIHN0YXJ0OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyAoemhlcmN6
ZWdAaW5mLnUtc3plZ2VkLmh1KQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC05MCw3ICs5MCw3IEBAIHB1Ymxp
YzoKICAgICBKU1Rva2VuVHlwZSBsZXgoSlNUb2tlbkRhdGEqLCBKU1Rva2VuTG9jYXRpb24qLCB1
bnNpZ25lZCwgYm9vbCBzdHJpY3RNb2RlKTsKICAgICBib29sIG5leHRUb2tlbklzQ29sb24oKTsK
ICAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQotICAg
IGludCBjdXJyZW50Q29sdW1uTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5OdW1iZXI7
IH0KKyAgICBpbnQgY3VycmVudENoYXJQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hhclBv
c2l0aW9uOyB9CiAgICAgdm9pZCBzZXRMYXN0TGluZU51bWJlcihpbnQgbGFzdExpbmVOdW1iZXIp
IHsgbV9sYXN0TGluZU51bWJlciA9IGxhc3RMaW5lTnVtYmVyOyB9CiAgICAgaW50IGxhc3RMaW5l
TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZU51bWJlcjsgfQogICAgIGJvb2wgcHJl
dlRlcm1pbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Rlcm1pbmF0b3I7IH0KQEAgLTE3MCw3ICsx
NzAsNyBAQCBwcml2YXRlOgogCiAgICAgaW50IG1fbGluZU51bWJlcjsKICAgICBpbnQgbV9sYXN0
TGluZU51bWJlcjsKLSAgICBpbnQgbV9jb2x1bW5OdW1iZXI7CisgICAgaW50IG1fY2hhclBvc2l0
aW9uOwogCiAgICAgVmVjdG9yPExDaGFyPiBtX2J1ZmZlcjg7CiAgICAgVmVjdG9yPFVDaGFyPiBt
X2J1ZmZlcjE2OwpAQCAtMzE3LDcgKzMxNyw3IEBAIEFMV0FZU19JTkxJTkUgSlNUb2tlblR5cGUg
TGV4ZXI8VD46OmxleEUKICAgICAgICAgbV9jdXJyZW50ID0gMDsKIAogICAgIG1fY29kZSA9IHB0
cjsKLSAgICBtX2NvbHVtbk51bWJlciA9IG1fY29sdW1uTnVtYmVyICsgKG1fY29kZSAtIHN0YXJ0
KTsKKyAgICBtX2NoYXJQb3NpdGlvbiA9IG1fY2hhclBvc2l0aW9uICsgKG1fY29kZSAtIHN0YXJ0
KTsKIAogICAgIC8vIENyZWF0ZSB0aGUgaWRlbnRpZmllciBpZiBuZWVkZWQKICAgICBpZiAobGV4
ZXJGbGFncyAmIExleGV4RmxhZ3NEb250QnVpbGRLZXl3b3JkcykKQEAgLTMyNyw3ICszMjcsNyBA
QCBBTFdBWVNfSU5MSU5FIEpTVG9rZW5UeXBlIExleGVyPFQ+OjpsZXhFCiAgICAgdG9rZW5Mb2Nh
dGlvbi0+bGluZSA9IG1fbGluZU51bWJlcjsKICAgICB0b2tlbkxvY2F0aW9uLT5zdGFydE9mZnNl
dCA9IHN0YXJ0IC0gbV9jb2RlU3RhcnQ7CiAgICAgdG9rZW5Mb2NhdGlvbi0+ZW5kT2Zmc2V0ID0g
Y3VycmVudE9mZnNldCgpOwotICAgIHRva2VuTG9jYXRpb24tPmNvbHVtbiA9IG1fY29sdW1uTnVt
YmVyOworICAgIHRva2VuTG9jYXRpb24tPmNoYXJQb3NpdGlvbiA9IG1fY2hhclBvc2l0aW9uOwog
ICAgIG1fbGFzdFRva2VuID0gSURFTlQ7CiAgICAgcmV0dXJuIElERU5UOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJl
dmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0
cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlu
bGluZSBOb2RlOjpOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgICAg
IDogbV9saW5lTnVtYmVyKGxvY2F0aW9uLmxpbmUpCi0gICAgICAgICwgbV9jb2x1bW5OdW1iZXIo
bG9jYXRpb24uY29sdW1uKQorICAgICAgICAsIG1fY2hhclBvc2l0aW9uKGxvY2F0aW9uLmNoYXJQ
b3NpdGlvbikKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmNwcAkocmV2aXNpb24gMTQ2MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdh
dGVybG9vLmNhKQogKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICogIENvcHly
aWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgpAQCAtNTIsMTggKzUy
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gU3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lk
IFN0YXRlbWVudE5vZGU6OnNldExvYyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBj
b2x1bW4pCit2b2lkIFN0YXRlbWVudE5vZGU6OnNldExvYyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFz
dExpbmUsIGludCBjaGFyUG9zaXRpb24pCiB7CiAgICAgbV9saW5lTnVtYmVyID0gZmlyc3RMaW5l
OwogICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKLSAgICBtX2NvbHVtbk51bWJlciA9IGNvbHVt
bjsKLX0KLQotdm9pZCBTdGF0ZW1lbnROb2RlOjpzZXRMb2MoaW50IGZpcnN0TGluZSwgaW50IGxh
c3RMaW5lKQotewotICAgIG1fbGluZU51bWJlciA9IGZpcnN0TGluZTsKLSAgICBtX2xhc3RMaW5l
ID0gbGFzdExpbmU7Ci0gICAgbV9jb2x1bW5OdW1iZXIgPSAwOworICAgIG1fY2hhclBvc2l0aW9u
ID0gY2hhclBvc2l0aW9uOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
U291cmNlRWxlbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgzLDE4
ICs3NiwyMiBAQCBTdGF0ZW1lbnROb2RlKiBTb3VyY2VFbGVtZW50czo6c2luZ2xlU3RhCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTY29wZU5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBib29sIGluU3RyaWN0Q29u
dGV4dCkKLSAgICA6IFN0YXRlbWVudE5vZGUobG9jYXRpb24pCitTY29wZU5vZGU6OlNjb3BlTm9k
ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRM
b2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgYm9vbCBpblN0cmlj
dENvbnRleHQpCisgICAgOiBTdGF0ZW1lbnROb2RlKGVuZExvY2F0aW9uKQogICAgICwgUGFyc2Vy
QXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCisgICAgLCBtX3N0YXJ0TGluZU51bWJlcihzdGFy
dExvY2F0aW9uLmxpbmUpCisgICAgLCBtX3N0YXJ0Q2hhclBvc2l0aW9uKHN0YXJ0TG9jYXRpb24u
Y2hhclBvc2l0aW9uKQogICAgICwgbV9mZWF0dXJlcyhpblN0cmljdENvbnRleHQgPyBTdHJpY3RN
b2RlRmVhdHVyZSA6IE5vRmVhdHVyZXMpCiAgICAgLCBtX251bUNvbnN0YW50cygwKQogICAgICwg
bV9zdGF0ZW1lbnRzKDApCiB7CiB9CiAKLVNjb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJT
dGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZh
cmlhYmxlcywgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDog
U3RhdGVtZW50Tm9kZShsb2NhdGlvbikKK1Njb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0
YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTdGF0ZW1lbnROb2RlKGVu
ZExvY2F0aW9uKQogICAgICwgUGFyc2VyQXJlbmFSZWZDb3VudGVkKGdsb2JhbERhdGEpCisgICAg
LCBtX3N0YXJ0TGluZU51bWJlcihzdGFydExvY2F0aW9uLmxpbmUpCisgICAgLCBtX3N0YXJ0Q2hh
clBvc2l0aW9uKHN0YXJ0TG9jYXRpb24uY2hhclBvc2l0aW9uKQogICAgICwgbV9mZWF0dXJlcyhm
ZWF0dXJlcykKICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fbnVtQ29uc3RhbnRzKG51
bUNvbnN0YW50cykKQEAgLTExNSwxNCArMTEyLDE0IEBAIFN0YXRlbWVudE5vZGUqIFNjb3BlTm9k
ZTo6c2luZ2xlU3RhdGVtZW4KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBy
b2dyYW1Ob2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWlubGluZSBQcm9ncmFt
Tm9kZTo6UHJvZ3JhbU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2
YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJl
ZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVhdHVy
ZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbG9jYXRp
b24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFi
bGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQoraW5saW5lIFByb2dyYW1Ob2RlOjpQcm9ncmFt
Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3Rh
cnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmRMb2NhdGlvbiwgU291cmNlRWxl
bWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNT
dGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIDog
U2NvcGVOb2RlKGdsb2JhbERhdGEsIHN0YXJ0TG9jYXRpb24sIGVuZExvY2F0aW9uLCBzb3VyY2Us
IGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgZmVhdHVy
ZXMsIG51bUNvbnN0YW50cykKIHsKIH0KIAotUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3Jh
bU5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgbG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0
YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFy
aWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywg
aW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpj
cmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0
YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIFNvdXJjZUVs
ZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5j
U3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKIHsKLSAg
ICBSZWZQdHI8UHJvZ3JhbU5vZGU+IG5vZGUgPSBuZXcgUHJvZ3JhbU5vZGUoZ2xvYmFsRGF0YSwg
bG9jYXRpb24sIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCAgY2FwdHVyZWRWYXJpYWJs
ZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPFByb2dyYW1O
b2RlPiBub2RlID0gbmV3IFByb2dyYW1Ob2RlKGdsb2JhbERhdGEsIHN0YXJ0TG9jYXRpb24sIGVu
ZExvY2F0aW9uLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgIGNhcHR1cmVkVmFyaWFi
bGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNTRVJUKG5vZGUt
Pm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPm1fYXJlbmEucmVtb3ZlTGFzdCgp
OwpAQCAtMTMzLDE0ICsxMzAsMTQgQEAgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gUHJvZ3JhbU5v
ZGU6OmNyZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZhbE5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotaW5saW5lIEV2YWxOb2RlOjpFdmFsTm9kZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0
YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50
cykKLSAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBsb2NhdGlvbiwgc291cmNlLCBjaGlsZHJl
biwgdmFyU3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1D
b25zdGFudHMpCitpbmxpbmUgRXZhbE5vZGU6OkV2YWxOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGVuZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNr
KiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0
dXJlZFZhcmlhYmxlcywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIGludCBudW1Db25zdGFudHMpCisgICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgc3Rh
cnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIHNvdXJjZSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5j
U3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKQogewogfQog
Ci1QYXNzUmVmUHRyPEV2YWxOb2RlPiBFdmFsTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywg
SWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKQorUGFzc1JlZlB0cjxF
dmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnRMb2NhdGlvbiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmRMb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ss
IEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJs
ZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9k
ZShnbG9iYWxEYXRhLCBsb2NhdGlvbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNh
cHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOworICAgIFJl
ZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5ldyBFdmFsTm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVk
VmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCiAgICAgQVNTRVJU
KG5vZGUtPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwogICAgIG5vZGUtPm1fYXJlbmEucmVtb3Zl
TGFzdCgpOwpAQCAtMTc2LDEzICsxNzMsMTMgQEAgRnVuY3Rpb25QYXJhbWV0ZXJzOjp+RnVuY3Rp
b25QYXJhbWV0ZXJzKAogICAgICAgICBpZGVudGlmaWVycygpW2ldLn5JZGVudGlmaWVyKCk7CiB9
CiAKLWlubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgYm9vbCBpblN0
cmljdENvbnRleHQpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbG9jYXRpb24sIGluU3Ry
aWN0Q29udGV4dCkKK2lubGluZSBGdW5jdGlvbkJvZHlOb2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0
aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExvY2F0aW9uLCBib29sIGluU3RyaWN0Q29u
dGV4dCkKKyAgICA6IFNjb3BlTm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2Nh
dGlvbiwgaW5TdHJpY3RDb250ZXh0KQogewogfQogCi1pbmxpbmUgRnVuY3Rpb25Cb2R5Tm9kZTo6
RnVuY3Rpb25Cb2R5Tm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZh
clN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVk
VmFyaWFibGVzLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIGludCBudW1Db25zdGFudHMpCi0gICAgOiBTY29wZU5vZGUoZ2xvYmFsRGF0YSwgbG9j
YXRpb24sIHNvdXJjZUNvZGUsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJl
ZFZhcmlhYmxlcywgZmVhdHVyZXMsIG51bUNvbnN0YW50cykKK2lubGluZSBGdW5jdGlvbkJvZHlO
b2RlOjpGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZExv
Y2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVu
Y3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxlcywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBpbnQg
bnVtQ29uc3RhbnRzKQorICAgIDogU2NvcGVOb2RlKGdsb2JhbERhdGEsIHN0YXJ0TG9jYXRpb24s
IGVuZExvY2F0aW9uLCBzb3VyY2VDb2RlLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1bmNTdGFjaywg
Y2FwdHVyZWRWYXJpYWJsZXMsIGZlYXR1cmVzLCBudW1Db25zdGFudHMpCiB7CiB9CiAKQEAgLTIw
MCwxNCArMTk3LDE0IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZmluaXNoUGFyc2luZyhQYXMK
ICAgICBtX2Z1bmN0aW9uTmFtZUlzSW5TY29wZVRvZ2dsZSA9IGZ1bmN0aW9uTmFtZUlzSW5TY29w
ZVRvZ2dsZTsKIH0KIAotRnVuY3Rpb25Cb2R5Tm9kZSogRnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRl
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlv
biwgYm9vbCBpblN0cmljdENvbnRleHQpCitGdW5jdGlvbkJvZHlOb2RlKiBGdW5jdGlvbkJvZHlO
b2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIHN0YXJ0TG9jYXRpb24sIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kTG9jYXRpb24sIGJv
b2wgaW5TdHJpY3RDb250ZXh0KQogewotICAgIHJldHVybiBuZXcgRnVuY3Rpb25Cb2R5Tm9kZShn
bG9iYWxEYXRhLCBsb2NhdGlvbiwgaW5TdHJpY3RDb250ZXh0KTsKKyAgICByZXR1cm4gbmV3IEZ1
bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgc3RhcnRMb2NhdGlvbiwgZW5kTG9jYXRpb24sIGlu
U3RyaWN0Q29udGV4dCk7CiB9CiAKLVBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gRnVuY3Rp
b25Cb2R5Tm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSlNUb2tl
bkxvY2F0aW9uJiBsb2NhdGlvbiwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayog
dmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVy
ZWRWYXJpYWJsZXMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIENvZGVGZWF0dXJlcyBm
ZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKK1Bhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4g
RnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBzdGFydExvY2F0aW9uLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVu
ZExvY2F0aW9uLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywg
RnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBJZGVudGlmaWVyU2V0JiBjYXB0dXJlZFZhcmlhYmxl
cywgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBp
bnQgbnVtQ29uc3RhbnRzKQogewotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2RlID0g
bmV3IEZ1bmN0aW9uQm9keU5vZGUoZ2xvYmFsRGF0YSwgbG9jYXRpb24sIGNoaWxkcmVuLCB2YXJT
dGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMs
IG51bUNvbnN0YW50cyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBuZXcg
RnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwg
Y2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2VD
b2RlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKIAogICAgIEFTU0VSVChub2RlLT5tX2FyZW5h
Lmxhc3QoKSA9PSBub2RlKTsKICAgICBub2RlLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE0NjIyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVy
b24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDcgTWFrcyBPcmxvdmljaAogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgpAQCAtMTI3LDExICsxMjcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgaW50IGxpbmVObygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQogCi0gICAg
ICAgIGludCBjb2x1bW5ObygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uTnVtYmVyOyB9CisgICAg
ICAgIGludCBjaGFyUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NoYXJQb3NpdGlvbjsgfQog
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBpbnQgbV9saW5lTnVtYmVyOwotICAgICAgICBpbnQg
bV9jb2x1bW5OdW1iZXI7CisgICAgICAgIGludCBtX2NoYXJQb3NpdGlvbjsKICAgICB9OwogCiAg
ICAgY2xhc3MgRXhwcmVzc2lvbk5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC0xNjksMTEgKzE2OSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdGF0ZW1lbnROb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYpOwogCiAgICAgcHVibGljOgotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHNldExvYyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpOwotICAgICAgICB2b2lkIHNldExv
YyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBjb2x1bW4pOworICAgICAgICB2b2lk
IHNldExvYyhpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBjaGFyUG9zaXRpb24pOwog
ICAgICAgICBpbnQgZmlyc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbGluZU5vKCk7IH0KICAgICAg
ICAgaW50IGxhc3RMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZTsgfQotICAgICAgICBp
bnQgY29sdW1uKCkgY29uc3QgeyByZXR1cm4gY29sdW1uTm8oKTt9CiAKICAgICAgICAgdmlydHVh
bCBib29sIGlzRW1wdHlTdGF0ZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZXR1cm5Ob2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAg
LTEyOTUsOCArMTI5Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIERlY2xh
cmF0aW9uU3RhY2tzOjpWYXJTdGFjayBWYXJTdGFjazsKICAgICAgICAgdHlwZWRlZiBEZWNsYXJh
dGlvblN0YWNrczo6RnVuY3Rpb25TdGFjayBGdW5jdGlvblN0YWNrOwogCi0gICAgICAgIFNjb3Bl
Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBib29sIGluU3RyaWN0
Q29udGV4dCk7Ci0gICAgICAgIFNjb3BlTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBjb25zdCBTb3VyY2VDb2RlJiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayos
IEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKKyAgICAgICAgU2NvcGVOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBib29sIGluU3RyaWN0
Q29udGV4dCk7CisgICAgICAgIFNjb3BlTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgY29uc3QgU291cmNl
Q29kZSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRp
ZmllclNldCYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAgdXNp
bmcgUGFyc2VyQXJlbmFSZWZDb3VudGVkOjpvcGVyYXRvciBuZXc7CiAKQEAgLTEzMTMsNiArMTMx
MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnByb3ZpZGVyKCktPnVybCgpOyB9CiAgICAgICAgIGlu
dHB0cl90IHNvdXJjZUlEKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UucHJvdmlkZXJJRCgpOyB9
CiAKKyAgICAgICAgaW50IHN0YXJ0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRMaW5lTnVt
YmVyOyB9CisgICAgICAgIGludCBzdGFydENoYXJQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnRDaGFyUG9zaXRpb247fQorCiAgICAgICAgIHZvaWQgc2V0RmVhdHVyZXMoQ29kZUZlYXR1
cmVzIGZlYXR1cmVzKSB7IG1fZmVhdHVyZXMgPSBmZWF0dXJlczsgfQogICAgICAgICBDb2RlRmVh
dHVyZXMgZmVhdHVyZXMoKSB7IHJldHVybiBtX2ZlYXR1cmVzOyB9CiAKQEAgLTEzNDUsNiArMTM0
Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldFNvdXJjZShjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UpIHsgbV9zb3VyY2UgPSBzb3VyY2U7IH0KICAgICAgICAgUGFyc2VyQXJl
bmEgbV9hcmVuYTsKIAorICAgICAgICBpbnQgbV9zdGFydExpbmVOdW1iZXI7CisgICAgICAgIGlu
dCBtX3N0YXJ0Q2hhclBvc2l0aW9uOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29kZUZlYXR1
cmVzIG1fZmVhdHVyZXM7CiAgICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CkBAIC0xMzU4LDEy
ICsxMzYyLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFByb2dyYW1Ob2RlIDogcHVi
bGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c0Z1bmN0aW9uTm9kZSA9IGZhbHNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmFt
Tm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFNvdXJj
ZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNv
bnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBT
b3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJTZXQm
LCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAog
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rpb24gPSBmYWxzZTsKIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIFByb2dyYW1Ob2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwg
SWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpOworICAgICAgICBQcm9ncmFtTm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rv
a2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIGVuZCwgU291cmNlRWxl
bWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3Qg
U291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CiAKICAgICAgICAg
dmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApOwogICAgIH07CkBAIC0xMzcxLDEyICsxMzc1LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEV2YWxOb2RlIDogcHVibGljIFNjb3BlTm9kZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1bmN0aW9uTm9kZSA9IGZhbHNlOwotICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4gY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlv
blN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBDb2RlRmVhdHVyZXMs
IGludCBudW1Db25zdGFudHMpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmFsTm9kZT4g
Y3JlYXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rp
b25TdGFjayosIElkZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlz
RnVuY3Rpb24gPSBmYWxzZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEV2YWxOb2RlKEpTR2xv
YmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFNvdXJjZUVsZW1lbnRzKiwgVmFyU3Rh
Y2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGNvbnN0IFNvdXJjZUNvZGUmLCBD
b2RlRmVhdHVyZXMsIGludCBudW1Db25zdGFudHMpOworICAgICAgICBFdmFsTm9kZShKU0dsb2Jh
bERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVu
dGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0
YW50cyk7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwogICAgIH07CkBAIC0xNDAzLDggKzE0MDcs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDogcHVibGlj
IFNjb3BlTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0Z1
bmN0aW9uTm9kZSA9IHRydWU7Ci0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkJvZHlOb2RlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgYm9vbCBpc1N0cmljdE1v
ZGUpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBjcmVhdGUo
SlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgU291cmNlRWxlbWVudHMqLCBW
YXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29k
ZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIHN0YXRpYyBGdW5j
dGlvbkJvZHlOb2RlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBlbmQsIGJvb2wgaXNTdHJpY3RNb2RlKTsK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gY3JlYXRlKEpTR2xv
YmFsRGF0YSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgc3RhcnQsIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYgZW5kLCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElk
ZW50aWZpZXJTZXQmLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKTsKIAogICAgICAgICBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX3BhcmFtZXRlcnMuZ2V0KCk7IH0KICAgICAgICAgc2l6ZV90IHBhcmFtZXRl
ckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0KQEAgLTE0Mjcs
OCArMTQzMSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBz
Y29wZUlzRnVuY3Rpb24gPSB0cnVlOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rpb25C
b2R5Tm9kZShKU0dsb2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBib29sIGluU3Ry
aWN0Q29udGV4dCk7Ci0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9u
U3RhY2sqLCBJZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywg
aW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRh
KiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBzdGFydCwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBl
bmQsIGJvb2wgaW5TdHJpY3RDb250ZXh0KTsKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZShKU0ds
b2JhbERhdGEqLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mIHN0YXJ0LCBjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGVuZCwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBJ
ZGVudGlmaWVyU2V0JiwgY29uc3QgU291cmNlQ29kZSYsIENvZGVGZWF0dXJlcywgaW50IG51bUNv
bnN0YW50cyk7CiAKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAgICAgICBJZGVudGlm
aWVyIG1faW5mZXJyZWROYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyLmNwcAkocmV2aXNpb24gMTQ2MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENv
cHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC05Nyw3ICs5Nyw2IEBAIFBhcnNlcjxMZXhlclR5cGU+OjpQYXJz
ZXIoSlNHbG9iYWxEYXRhKiAKICAgICBpZiAoIW5hbWUuaXNOdWxsKCkpCiAgICAgICAgIHNjb3Bl
LT5kZWNsYXJlQ2FsbGVlKCZuYW1lKTsKICAgICBuZXh0KCk7Ci0gICAgbV9sZXhlci0+c2V0TGFz
dExpbmVOdW1iZXIodG9rZW5MaW5lKCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJU
eXBlPgpAQCAtNzk0LDEzICs3OTMsMTYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlRm9ybWFsUAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZUZ1bmN0aW9uQm9keSBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VG
dW5jdGlvbkJvZHkoVHJlZUJ1aWxkZXImIGNvbnRleHQpCiB7CisgICAgSlNUb2tlbkxvY2F0aW9u
IHN0YXJ0TG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKKyAgICBuZXh0KCk7CisKICAgICBpZiAo
bWF0Y2goQ0xPU0VCUkFDRSkpCi0gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9u
Qm9keSh0b2tlbkxvY2F0aW9uKCksIHN0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0aW9uLCB0b2tlbkxvY2F0aW9uKCksIHN0
cmljdE1vZGUoKSk7CiAgICAgRGVwdGhNYW5hZ2VyIHN0YXRlbWVudERlcHRoKCZtX3N0YXRlbWVu
dERlcHRoKTsKICAgICBtX3N0YXRlbWVudERlcHRoID0gMDsKICAgICB0eXBlbmFtZSBUcmVlQnVp
bGRlcjo6RnVuY3Rpb25Cb2R5QnVpbGRlciBib2R5QnVpbGRlcihjb25zdF9jYXN0PEpTR2xvYmFs
RGF0YSo+KG1fZ2xvYmFsRGF0YSksIG1fbGV4ZXIuZ2V0KCkpOwogICAgIGZhaWxJZkZhbHNlKHBh
cnNlU291cmNlRWxlbWVudHM8Q2hlY2tGb3JTdHJpY3RNb2RlPihib2R5QnVpbGRlcikpOwotICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keSh0b2tlbkxvY2F0aW9uKCksIHN0cmlj
dE1vZGUoKSk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0YXJ0TG9j
YXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RyaWN0TW9kZSgpKTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIExleGVyVHlwZT4KQEAgLTgyNiwxMyArODI4LDE2IEBAIHRlbXBsYXRlIDxGdW5jdGlv
blJlcXVpcmVtZW50cyByZXF1aXJlbWUKICAgICAKICAgICBvcGVuQnJhY2VQb3MgPSBtX3Rva2Vu
Lm1fZGF0YS5pbnRWYWx1ZTsKICAgICBib2R5U3RhcnRMaW5lID0gdG9rZW5MaW5lKCk7Ci0gICAg
SlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CisgICAgSlNUb2tlbkxv
Y2F0aW9uIHN0YXJ0TG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKICAgICAKICAgICAvLyBJZiB3
ZSBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24gYWxyZWFkeSwgd2UgY2FuIHVzZSB0aGUgY2FjaGVk
IGluZm8gYW5kIHNraXAgdGhlIHBhcnNlciB0byB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbi4KICAg
ICBpZiAoY29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0qIGNhY2hlZEluZm8gPSBUcmVlQnVp
bGRlcjo6Q2FuVXNlRnVuY3Rpb25DYWNoZSA/IGZpbmRDYWNoZWRGdW5jdGlvbkluZm8ob3BlbkJy
YWNlUG9zKSA6IDApIHsKICAgICAgICAgLy8gSWYgd2UncmUgaW4gYSBzdHJpY3QgY29udGV4dCwg
dGhlIGNhY2hlZCBmdW5jdGlvbiBpbmZvIG11c3Qgc2F5IGl0IHdhcyBzdHJpY3QgdG9vLgogICAg
ICAgICBBU1NFUlQoIXN0cmljdE1vZGUoKSB8fCBjYWNoZWRJbmZvLT5zdHJpY3RNb2RlKTsKLSAg
ICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KGxvY2F0aW9uLCBjYWNoZWRJ
bmZvLT5zdHJpY3RNb2RlKTsKKyAgICAgICAgSlNUb2tlbkxvY2F0aW9uIGVuZExvY2F0aW9uOwor
ICAgICAgICBlbmRMb2NhdGlvbi5saW5lID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZUxpbmU7Cisg
ICAgICAgIGVuZExvY2F0aW9uLmNoYXJQb3NpdGlvbiA9IGNhY2hlZEluZm8tPmNsb3NlQnJhY2VQ
b3M7CisgICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdGFydExvY2F0
aW9uLCBlbmRMb2NhdGlvbiwgY2FjaGVkSW5mby0+c3RyaWN0TW9kZSk7CiAgICAgICAgIAogICAg
ICAgICBmdW5jdGlvblNjb3BlLT5yZXN0b3JlRnJvbVNvdXJjZVByb3ZpZGVyQ2FjaGUoY2FjaGVk
SW5mbyk7CiAgICAgICAgIGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVC
dWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pKTsKQEAgLTg0Nyw4ICs4NTIsNiBAQCB0ZW1w
bGF0ZSA8RnVuY3Rpb25SZXF1aXJlbWVudHMgcmVxdWlyZW1lCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAKLSAgICBuZXh0KCk7Ci0gICAgCiAgICAgYm9keSA9IHBhcnNlRnVuY3Rp
b25Cb2R5KGNvbnRleHQpOwogICAgIGZhaWxJZkZhbHNlKGJvZHkpOwogICAgIGlmIChmdW5jdGlv
blNjb3BlLT5zdHJpY3RNb2RlKCkgJiYgbmFtZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5oCShyZXZpc2lvbiAxNDYyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQog
ICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC05NTAsNiArOTUwLDggQEAgUGFz
c1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBlPgogICAgIGVyckxpbmUgPSAtMTsK
ICAgICBlcnJNc2cgPSBTdHJpbmcoKTsKIAorICAgIEpTVG9rZW5Mb2NhdGlvbiBzdGFydExvY2F0
aW9uKHRva2VuTG9jYXRpb24oKSk7CisKICAgICBTdHJpbmcgcGFyc2VFcnJvciA9IHBhcnNlSW5u
ZXIoKTsKIAogICAgIGludCBsaW5lTnVtYmVyID0gbV9sZXhlci0+bGluZU51bWJlcigpOwpAQCAt
OTY2LDExICs5NjgsMTIgQEAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI8TGV4ZXJUeXBl
PgogCiAgICAgUmVmUHRyPFBhcnNlZE5vZGU+IHJlc3VsdDsKICAgICBpZiAobV9zb3VyY2VFbGVt
ZW50cykgewotICAgICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb247Ci0gICAgICAgIGxvY2F0
aW9uLmxpbmUgPSBtX2xleGVyLT5sYXN0TGluZU51bWJlcigpOwotICAgICAgICBsb2NhdGlvbi5j
b2x1bW4gPSBtX2xleGVyLT5jdXJyZW50Q29sdW1uTnVtYmVyKCk7CisgICAgICAgIEpTVG9rZW5M
b2NhdGlvbiBlbmRMb2NhdGlvbjsKKyAgICAgICAgZW5kTG9jYXRpb24ubGluZSA9IG1fbGV4ZXIt
Pmxhc3RMaW5lTnVtYmVyKCk7CisgICAgICAgIGVuZExvY2F0aW9uLmNoYXJQb3NpdGlvbiA9IG1f
bGV4ZXItPmN1cnJlbnRDaGFyUG9zaXRpb24oKTsKICAgICAgICAgcmVzdWx0ID0gUGFyc2VkTm9k
ZTo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRM
b2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZExvY2F0aW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VFbGVtZW50cywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFyRGVjbGFyYXRpb25zID8g
Jm1fdmFyRGVjbGFyYXRpb25zLT5kYXRhIDogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA/ICZtX2Z1bmNEZWNsYXJhdGlvbnMtPmRhdGEg
OiAwLApAQCAtOTc4LDcgKzk4MSw3IEBAIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFyc2VyPExl
eGVyVHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptX3NvdXJjZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX251bUNvbnN0YW50cyk7Ci0gICAgICAgIHJl
c3VsdC0+c2V0TG9jKG1fc291cmNlLT5maXJzdExpbmUoKSwgbV9sYXN0TGluZSwgbV9sZXhlci0+
Y3VycmVudENvbHVtbk51bWJlcigpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRMb2MobV9zb3VyY2Ut
PmZpcnN0TGluZSgpLCBtX2xhc3RMaW5lLCBtX2xleGVyLT5jdXJyZW50Q2hhclBvc2l0aW9uKCkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIGNhbiBuZXZlciBzZWUgYSBzeW50YXggZXJy
b3Igd2hlbiByZXBhcnNpbmcgYSBmdW5jdGlvbiwgc2luY2Ugd2Ugc2hvdWxkIGhhdmUKICAgICAg
ICAgLy8gcmVwb3J0ZWQgdGhlIGVycm9yIHdoZW4gcGFyc2luZyB0aGUgY29udGFpbmluZyBwcm9n
cmFtIG9yIGV2YWwgY29kZS4gU28gaWYgd2UncmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyVG9rZW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAkocmV2aXNpb24gMTQ2MjI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJUb2tlbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQzLDE4
ICsxNDMsMTggQEAgdW5pb24gSlNUb2tlbkRhdGEgewogfTsKIAogc3RydWN0IEpTVG9rZW5Mb2Nh
dGlvbiB7Ci0gICAgSlNUb2tlbkxvY2F0aW9uKCkgOiBsaW5lKDApLCBjb2x1bW4oMCkgeyB9Cisg
ICAgSlNUb2tlbkxvY2F0aW9uKCkgOiBsaW5lKDApLCBjaGFyUG9zaXRpb24oMCkgeyB9CiAgICAg
SlNUb2tlbkxvY2F0aW9uKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgewog
ICAgICAgICBsaW5lID0gbG9jYXRpb24ubGluZTsKICAgICAgICAgc3RhcnRPZmZzZXQgPSBsb2Nh
dGlvbi5zdGFydE9mZnNldDsKICAgICAgICAgZW5kT2Zmc2V0ID0gbG9jYXRpb24uZW5kT2Zmc2V0
OwotICAgICAgICBjb2x1bW4gPSBsb2NhdGlvbi5jb2x1bW47CisgICAgICAgIGNoYXJQb3NpdGlv
biA9IGxvY2F0aW9uLmNoYXJQb3NpdGlvbjsKICAgICB9CiAgICAgaW50IGxpbmU7CiAgICAgaW50
IHN0YXJ0T2Zmc2V0OwogICAgIGludCBlbmRPZmZzZXQ7Ci0gICAgaW50IGNvbHVtbjsKKyAgICBp
bnQgY2hhclBvc2l0aW9uOwogfTsKIAogc3RydWN0IEpTVG9rZW4gewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHJldmlzaW9uIDE0NjIyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0
ZUNvbmRpdGlvbmFsRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwg
RXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBDb25kaXRpb25hbEV4cHI7
IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBc3NpZ25SZXNvbHZlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImLCBFeHByZXNzaW9uVHlwZSwgaW50LCBpbnQsIGlu
dCkgeyByZXR1cm4gQXNzaWdubWVudEV4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVG
dW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGlu
dCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQotICAg
IGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgYm9vbCkgeyBy
ZXR1cm4gMTsgfQorICAgIGludCBjcmVhdGVGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgYm9vbCkgeyByZXR1cm4gMTsgfQogICAgIHZv
aWQgc2V0RnVuY3Rpb25TdGFydChpbnQsIGludCkgeyB9CiAgICAgaW50IGNyZWF0ZUFyZ3VtZW50
cygpIHsgcmV0dXJuIDE7IH0KICAgICBpbnQgY3JlYXRlQXJndW1lbnRzKGludCkgeyByZXR1cm4g
MTsgfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NjMwMSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTMtMDMtMTkgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEludHJvZHVjaW5nIFN0cmluZzo6cmV2ZXJzZUZp
bmRMaW5lVGVybWluYXRvcigpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEyNzQxLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGJ5IHRoZSBKU0MgZGVidWdnZXIgY29kZSBmb3Ig
Y29tcHV0aW5nIGNvbHVtbiBudW1iZXJzLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1w
bC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJldmVyc2VGaW5kTGluZVRlcm1pbmF0
b3IpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFN0cmluZ0lt
cGwpOgorICAgICAgICAoV1RGOjpyZXZlcnNlRmluZExpbmVUZXJtaW5hdG9yKToKKyAgICAgICAg
KiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjpyZXZlcnNlRmlu
ZExpbmVUZXJtaW5hdG9yKToKKwogMjAxMy0wMy0xOSAgTWFydGluIFJvYmluc29uICA8bXJvYmlu
c29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgRml4IHRoZSBXVEYgZ3lwIGJ1aWxkIGZvciBHVEsr
LgpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAxNDYyMjUpCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICggbXVlbGxlckBrZGUub3Jn
ICkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBXZWxsaW5n
dG9uIChwcm90b25Ad2lyZXRhcHBlZC5uZXQpCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTExNiw2ICsxMTE2
LDEzIEBAIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kSWdub3JpbmdDYXNlKFN0cmkKICAgICByZXR1
cm4gZmluZElnbm9yaW5nQ2FzZUlubmVyKGNoYXJhY3RlcnMxNigpICsgaW5kZXgsIG1hdGNoU3Ry
aW5nLT5jaGFyYWN0ZXJzMTYoKSwgaW5kZXgsIHNlYXJjaExlbmd0aCwgbWF0Y2hMZW5ndGgpOwog
fQogCitzaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmRMaW5lVGVybWluYXRvcih1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBXVEY6OnJldmVy
c2VGaW5kTGluZVRlcm1pbmF0b3IoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIGluZGV4KTsKKyAg
ICByZXR1cm4gV1RGOjpyZXZlcnNlRmluZExpbmVUZXJtaW5hdG9yKGNoYXJhY3RlcnMxNigpLCBt
X2xlbmd0aCwgaW5kZXgpOworfQorCiBzaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoVUNo
YXIgYywgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgaWYgKGlzOEJpdCgpKQpJbmRleDogU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OTcsNiArNjk3LDcgQEAgcHVibGlj
OgogICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciog
cywgdW5zaWduZWQgaW5kZXggPSAwKSB7IHJldHVybiBmaW5kSWdub3JpbmdDYXNlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSwgaW5kZXgpOyB9OwogICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBzaXplX3QgZmluZElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5k
ZXggPSAwKTsKIAorICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBzaXplX3QgcmV2ZXJzZUZpbmRM
aW5lVGVybWluYXRvcih1bnNpZ25lZCBpbmRleCA9IFVJTlRfTUFYKTsKICAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgc2l6ZV90IHJldmVyc2VGaW5kKFVDaGFyLCB1bnNpZ25lZCBpbmRleCA9IFVJ
TlRfTUFYKTsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkgc2l6ZV90IHJldmVyc2VGaW5kKFN0
cmluZ0ltcGwqLCB1bnNpZ25lZCBpbmRleCA9IFVJTlRfTUFYKTsKICAgICBXVEZfRVhQT1JUX1NU
UklOR19BUEkgc2l6ZV90IHJldmVyc2VGaW5kSWdub3JpbmdDYXNlKFN0cmluZ0ltcGwqLCB1bnNp
Z25lZCBpbmRleCA9IFVJTlRfTUFYKTsKQEAgLTExMDcsNyArMTEwOCwyMyBAQCBpbmxpbmUgc2l6
ZV90IGZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlCiAgICAgcmV0dXJuIG5vdEZvdW5kOwogfQog
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+CitpbmxpbmUgc2l6ZV90IHJldmVyc2VGaW5kTGluZVRlcm1pbmF0b3IoY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBp
bmRleCA9IFVJTlRfTUFYKQoreworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gbm90
Rm91bmQ7CisgICAgaWYgKGluZGV4ID49IGxlbmd0aCkKKyAgICAgICAgaW5kZXggPSBsZW5ndGgg
LSAxOworICAgIENoYXJhY3RlclR5cGUgYyA9IGNoYXJhY3RlcnNbaW5kZXhdOworICAgIHdoaWxl
ICgoYyAhPSAnXG4nKSAmJiAoYyAhPSAnXHInKSkgeworICAgICAgICBpZiAoIWluZGV4LS0pCisg
ICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgICAgIGMgPSBjaGFyYWN0ZXJzW2luZGV4
XTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgogaW5saW5lIHNpemVfdCByZXZlcnNlRmluZChjb25zdCBDaGFyYWN0ZXJUeXBl
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENoYXJhY3RlclR5cGUgbWF0Y2hDaGFyYWN0
ZXIsIHVuc2lnbmVkIGluZGV4ID0gVUlOVF9NQVgpCiB7CiAgICAgaWYgKCFsZW5ndGgpCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJldmlzaW9uIDE0NjIyNSkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNjEsNiArMjYxLDkgQEAgcHVibGlj
OgogICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkg
Y29uc3QKICAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ciwgc3RhcnQp
IDogbm90Rm91bmQ7IH0KIAorICAgIHNpemVfdCByZXZlcnNlRmluZExpbmVUZXJtaW5hdG9yKHVu
c2lnbmVkIHN0YXJ0ID0gVUlOVF9NQVgpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/
IG1faW1wbC0+cmV2ZXJzZUZpbmRMaW5lVGVybWluYXRvcihzdGFydCkgOiBub3RGb3VuZDsgfQor
CiAgICAgLy8gRmluZCB0aGUgbGFzdCBpbnN0YW5jZSBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIgb3Ig
c3RyaW5nLgogICAgIHNpemVfdCByZXZlcnNlRmluZChVQ2hhciBjLCB1bnNpZ25lZCBzdGFydCA9
IFVJTlRfTUFYKSBjb25zdAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPnJldmVy
c2VGaW5kKGMsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9Cg==
</data>
<flag name="review"
          id="215683"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>