<?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>235085</bug_id>
          
          <creation_ts>2022-01-11 15:11:10 -0800</creation_ts>
          <short_desc>[JSC] Implement support for class static initialization blocks</short_desc>
          <delta_ts>2022-10-05 08:36:16 -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>WebKit 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="Devin Rousso">hi</reporter>
          <assigned_to name="Yijia Huang">yijia_huang</assigned_to>
          <cc>caitp</cc>
    
    <cc>darin</cc>
    
    <cc>dpaddock</cc>
    
    <cc>hi</cc>
    
    <cc>mark.lam</cc>
    
    <cc>rob.palmer2</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>yijia_huang</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1829932</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2022-01-11 15:11:10 -0800</bug_when>
    <thetext>&lt;https://github.com/tc39/proposal-class-static-block&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829933</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-11 15:11:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/87421954&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1896654</commentid>
    <comment_count>2</comment_count>
    <who name="Rob Palmer">rob.palmer2</who>
    <bug_when>2022-09-07 00:32:34 -0700</bug_when>
    <thetext>This feature went to Stage 4 one year ago (August 2021) and is now part of ES2022.

The consequence of not implementing this feature is that many users of the feature are forced to transpile/downlevel their code to ES2021.

This over-downlevelling has the unfortunate side-effect of causing all private fields to be stored in WeakMaps, which tend to be much slower than native private fields.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1900703</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-09-23 11:35:23 -0700</bug_when>
    <thetext>*** Bug 244280 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1901082</commentid>
    <comment_count>4</comment_count>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-09-25 21:22:06 -0700</bug_when>
    <thetext>FYI, Serakeri has been working on this offline</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1901084</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-09-25 21:58:37 -0700</bug_when>
    <thetext>(In reply to Caitlin Potter (:caitp) from comment #4)
&gt; FYI, Serakeri has been working on this offline

Yijia has also been working on this for a while.  Perhaps we should sync up and avoid duplicating work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1901678</commentid>
    <comment_count>6</comment_count>
      <attachid>462669</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2022-09-27 21:49:52 -0700</bug_when>
    <thetext>Created attachment 462669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1901684</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-09-27 22:26:48 -0700</bug_when>
    <thetext>@Caitlin, Yijia&apos;s patch is now uploaded for review / merge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1901688</commentid>
    <comment_count>8</comment_count>
      <attachid>462669</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-09-27 22:50:04 -0700</bug_when>
    <thetext>Comment on attachment 462669
Patch

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

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:1259
&gt; +    RegisterID* ret;

Use `RefPtr&lt;RegisterID&gt;`.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4994
&gt; +        RegisterID* res = generator.emitNewFunctionExpression(generator.finalDestination(dst), this);

Use `RefPtr&lt;RegisterID&gt;`.

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:133
&gt; +    ExpressionNode* makeFunctionCallNode(const JSTokenLocation&amp;, ExpressionNode* func, bool previousBaseWasSuper, ArgumentsNode* args, const JSTextPosition&amp; divotStart, const JSTextPosition&amp; divot, const JSTextPosition&amp; divotEnd, size_t callOrApplyChildDepth, bool isOptionalCall, bool isStaticClassBlockFunctionCall = false);

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:428
&gt; +    ExpressionNode* createFunctionExpr(const JSTokenLocation&amp; location, const ParserFunctionInfo&lt;ASTBuilder&gt;&amp; functionInfo, bool isStaticBlockFunction = false)

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:1424
&gt; +ExpressionNode* ASTBuilder::makeFunctionCallNode(const JSTokenLocation&amp; location, ExpressionNode* func, bool previousBaseWasSuper, ArgumentsNode* args, const JSTextPosition&amp; divotStart, const JSTextPosition&amp; divot, const JSTextPosition&amp; divotEnd, size_t callOrApplyChildDepth, bool isOptionalCall, bool isStaticBlockFunctionCall)

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; Source/JavaScriptCore/parser/NodeConstructors.h:412
&gt; +    inline FunctionCallValueNode::FunctionCallValueNode(const JSTokenLocation&amp; location, ExpressionNode* expr, ArgumentsNode* args, const JSTextPosition&amp; divot, const JSTextPosition&amp; divotStart, const JSTextPosition&amp; divotEnd, const bool isStaticBlockFunctionCall)

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; Source/JavaScriptCore/parser/NodeConstructors.h:1034
&gt; +    inline FuncExprNode::FuncExprNode(const JSTokenLocation&amp; location, const Identifier&amp; ident, FunctionMetadataNode* metadata, const SourceCode&amp; source, bool isStaticBlockFunction)

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; Source/JavaScriptCore/parser/Nodes.h:991
&gt; +        FunctionCallValueNode(const JSTokenLocation&amp;, ExpressionNode*, ArgumentsNode*, const JSTextPosition&amp; divot, const JSTextPosition&amp; divotStart, const JSTextPosition&amp; divotEnd, bool isStatic = false);

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; Source/JavaScriptCore/parser/Nodes.h:2343
&gt; +        FuncExprNode(const JSTokenLocation&amp;, const Identifier&amp;, FunctionMetadataNode*, const SourceCode&amp;, bool isStaticBlock = false);

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; Source/JavaScriptCore/parser/Parser.cpp:1899
&gt; +template &lt;class TreeBuilder&gt; TreeStatement Parser&lt;LexerType&gt;::parseBlockStatement(TreeBuilder&amp; context, bool isCatchBlock, bool isStaticBlock)

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; Source/JavaScriptCore/parser/Parser.h:1763
&gt; +    template &lt;class TreeBuilder&gt; TreeStatement parseBlockStatement(TreeBuilder&amp;, bool isCatchBlock = false, bool isStaticBlock = false);

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; Source/JavaScriptCore/parser/SyntaxChecker.h:151
&gt; +    ExpressionType makeFunctionCallNode(const JSTokenLocation&amp;, ExpressionType, bool, int, int, int, int, size_t, bool, bool = false) { return CallExpr; }

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; Source/JavaScriptCore/parser/SyntaxChecker.h:198
&gt; +    ExpressionType createFunctionExpr(const JSTokenLocation&amp;, const ParserFunctionInfo&lt;SyntaxChecker&gt;&amp;, bool = false) { return FunctionExpr; }

Avoid using `bool` for parameter since it is hard to know what it means from the callsite. Use enum instead.

&gt; JSTests/stress/class-static-block.js:1
&gt; +function assert(b) {

Enable test262 too to ensure that they are correctly implemented. See JSTests/test262/config.yaml to enable it for this feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1901811</commentid>
    <comment_count>9</comment_count>
      <attachid>462685</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2022-09-28 10:05:29 -0700</bug_when>
    <thetext>Created attachment 462685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1901835</commentid>
    <comment_count>10</comment_count>
      <attachid>462688</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2022-09-28 11:02:48 -0700</bug_when>
    <thetext>Created attachment 462688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1901865</commentid>
    <comment_count>11</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2022-09-28 14:26:56 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/4372</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1901890</commentid>
    <comment_count>12</comment_count>
      <attachid>462688</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-09-28 15:42:42 -0700</bug_when>
    <thetext>Comment on attachment 462688
Patch

Taking this bugzilla patch out of review.  A PR has been posted on WebKit Github.  Will continue reviewing there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1902375</commentid>
    <comment_count>13</comment_count>
      <attachid>462688</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-09-30 09:21:03 -0700</bug_when>
    <thetext>Comment on attachment 462688
Patch

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

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4994
&gt; +        RefPtr&lt;RegisterID&gt; homeObject = emitHomeObjectForCallee(generator);
&gt; +        RefPtr&lt;RegisterID&gt; res = generator.emitNewFunctionExpression(generator.finalDestination(dst), this);

Should be able to write just RefPtr here rather than RefPtr&lt;RegisterID&gt;.

Not sure if there are different traditions in this code, but typically in WebKit we prefer words, like result, rather than fragments, like res.

&gt; Source/JavaScriptCore/parser/NodeConstructors.h:256
&gt; +        , m_expression(nullptr)
&gt; +        , m_assign(nullptr)

These could be initialized in the class definition instead of the constructor.

&gt; Source/JavaScriptCore/parser/NodeConstructors.h:260
&gt; +        , m_isOverriddenByDuplicate(false)

This could be initialized in the class definition instead of the constructor.

&gt; Source/JavaScriptCore/parser/NodeConstructors.h:1042
&gt; +        , m_isStaticBlockFunction(false)

This could be initialized in the class definition instead of the constructor.

&gt; Source/JavaScriptCore/parser/Nodes.h:1002
&gt;          ExpressionNode* m_expr;
&gt;          ArgumentsNode* m_args;
&gt; +        bool m_isStaticBlockFunctionCall;

I suggest we initialize these to nullptr and false here in the class definition.

&gt; Source/JavaScriptCore/parser/Nodes.h:2354
&gt; +        bool m_isStaticBlockFunction;

I suggest we initialize this to false here in the class definition.

&gt; Source/JavaScriptCore/parser/Parser.cpp:3101
&gt; +        case OPENBRACE: {

No braces needed here.

&gt; Source/JavaScriptCore/parser/Parser.cpp:3318
&gt; +            case OPENBRACE: {
&gt; +                break;
&gt; +            }

No braces needed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1902379</commentid>
    <comment_count>14</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2022-09-30 09:27:40 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #13)

Thanks for your review, Darin. We&apos;ve already moved our review to the GitHub PR https://github.com/WebKit/WebKit/pull/4372.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1903432</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-10-05 08:36:13 -0700</bug_when>
    <thetext>Committed 255173@main (c33391001b54): &lt;https://commits.webkit.org/255173@main&gt;

Reviewed commits have been landed. Closing PR #4372 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>462669</attachid>
            <date>2022-09-27 21:49:52 -0700</date>
            <delta_ts>2022-09-28 10:49:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235085-20220927214951.patch</filename>
            <type>text/plain</type>
            <size>51894</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">RnJvbSBjYzVmZjY0OWFmODQ1ZDRjNGEwMGYzNjZhM2NiOTY5Njk2ZmU2Njc5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBZaWppYSBIdWFuZyA8aHlqb3JjMUBnbWFpbC5jb20+CkRhdGU6
IFR1ZSwgMjcgU2VwIDIwMjIgMjE6MjU6MzIgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbSlNDXSBJ
bXBsZW1lbnQgc3VwcG9ydCBmb3IgY2xhc3Mgc3RhdGljIGluaXRpYWxpemF0aW9uCiBibG9ja3Mg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTA4NSByZGFyOi8vOTkw
NTY4ODIKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0
PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKQ2xhc3Mgc3RhdGljIGluaXRpYWxpemF0aW9uIGJsb2NrIGlzIGEgbmV3IGZl
YXR1cmUgb2YgYSBjbGFzcyB0byBwZXJmb3JtCmFkZGl0aW9uYWwgc3RhdGljIGluaXRpYWxpemF0
aW9uIGR1cmluZyBjbGFzcyBkZWZpbml0aW9uIGV2YWx1YXRpb24uCgpgYGAKY2xhc3MgQyB7CiAg
ICBzdGF0aWMgeyAvKiDigKYgKi8gfQp9CmBgYAoKVEMzOSBTcGVjOiBodHRwczovL3RjMzkuZXMv
cHJvcG9zYWwtY2xhc3Mtc3RhdGljLWJsb2NrLwpUQzM5IFByb3Bvc2FsOiBodHRwczovL2dpdGh1
Yi5jb20vdGMzOS9wcm9wb3NhbC1jbGFzcy1zdGF0aWMtYmxvY2sKTUROIFdlYiBEb2M6IGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJl
bmNlL0NsYXNzZXMvQ2xhc3Nfc3RhdGljX2luaXRpYWxpemF0aW9uX2Jsb2NrcwoKSW4gdGhpcyBw
YXRjaCwgc3RhdGljIGJsb2NrcyBhcmUgaW1wbGVtZW50ZWQgYXMgZnVuY3Rpb25zIHdoaWNoIGFy
ZQpldmFsdWF0ZWQgYWxvbmcgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2Ygc3RhdGljIGNsYXNz
IGZpZWxkcyBkdXJpbmcKY2xhc3MgZGVmaW5pdGlvbiBldmFsdWF0aW9uLiBUaGlzIGNhbiBiZSBm
dXJ0aGVyIG9wdGltaXplZCBieSBpbmxpbmluZwpzdGF0aWMgYmxvY2sgZnVuY3Rpb25zIHRvIHRo
ZSBmaWVsZCBpbml0aWFsaXphdGlvbi4KCiogSlNUZXN0cy9zdHJlc3MvY2xhc3Mtc3RhdGljLWJs
b2NrLmpzOiBBZGRlZC4KKGFzc2VydCk6CihBKToKKGFzc2VydC5DKToKKGFzc2VydC5CKToKKGFz
c2VydC5EKToKKGFzc2VydC5BKToKKGFzc2VydC5BLmZyaWVuZEEucHJvdG90eXBlLmdldFgpOgoo
YXNzZXJ0LkEuZnJpZW5kQS5wcm90b3R5cGUuc2V0WCk6Cihhc3NlcnQuQS5wcm90b3R5cGUuZ2V0
WCk6Cihhc3NlcnQuaW5uZXIpOgooY2F0Y2guQy5wcm90b3R5cGUuYXN5bmMgaW5uZXIpOgooY2F0
Y2guQyk6CihjYXRjaCk6Cihhc3luYyBpbm5lci5DLnByb3RvdHlwZS5hc3luYyBpbm5lcik6Cihh
c3luYyBpbm5lci5DKToKKGFzeW5jIGlubmVyKToKKEMuaW5uZXIpOgooQyk6Cihhd2FpdC5DLmlu
bmVyKToKKGF3YWl0LkMpOgooYXdhaXQpOgooYXJndW1lbnRzLkMuaW5uZXIpOgooYXJndW1lbnRz
LkMpOgooYXJndW1lbnRzKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHA6CihKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZSk6CihK
U0M6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKEpTQzo6RnVuY0V4cHJO
b2RlOjplbWl0Qnl0ZWNvZGUpOgoqIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVp
bGRlci5oOgooSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGdW5jdGlvbkV4cHIpOgooSlNDOjpBU1RC
dWlsZGVyOjpjcmVhdGVQcm9wZXJ0eSk6CihKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNh
bGxOb2RlKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aDoKKEpTQzo6UHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUpOgooSlNDOjpGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSk6CihKU0M6OkZ1bmNFeHByTm9kZTo6RnVu
Y0V4cHJOb2RlKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmg6CihKU0M6
OkZ1bmNFeHByTm9kZTo6aXNTdGF0aWNCbG9ja0Z1bmN0aW9uIGNvbnN0KToKKiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpp
c0Fycm93RnVuY3Rpb25QYXJhbWV0ZXJzKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
U3RhdGVtZW50TGlzdEl0ZW0pOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uTGlzdCk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUJyZWFrU3Rh
dGVtZW50KToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ29udGludWVTdGF0ZW1lbnQp
OgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQpOgooSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VUcnlTdGF0ZW1lbnQpOgooSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VCbG9ja1N0YXRlbWVudCk6CihKU0M6OnN0cmluZ0FydGljbGVGb3JGdW5jdGlv
bk1vZGUpOgooSlNDOjpzdHJpbmdGb3JGdW5jdGlvbk1vZGUpOgooSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VGdW5jdGlvblBhcmFtZXRlcnMpOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VGdW5jdGlvbkluZm8pOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyk6
CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRmllbGRJbml0aWFsaXplclNvdXJj
ZUVsZW1lbnRzKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6
CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOgooSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgoqIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmg6CihKU0M6OlNjb3BlOjpzZXRTb3VyY2VQYXJzZU1vZGUp
OgooSlNDOjpTY29wZTo6c2V0SXNTdGF0aWNCbG9ja1Njb3BlKToKKEpTQzo6U2NvcGU6OmlzU3Rh
dGljQmxvY2tTY29wZSk6CihKU0M6OlBhcnNlcjo6Y2FuVXNlSWRlbnRpZmllckF3YWl0KToKKEpT
Qzo6UGFyc2VyOjpkaXNhbGxvd2VkSWRlbnRpZmllckF3YWl0UmVhc29uKToKKEpTQzo6UGFyc2Vy
OjpmaW5kQ2xvc2V0RnVuY3Rpb25TY29wZSk6CihKU0M6OlBhcnNlcjo6ZmluZENsb3NldEFzeW5j
RnVuY3Rpb25TY29wZSk6CihKU0M6OlBhcnNlcjo6ZmluZFNjb3BlVW50aWxTdGF0aWNCbG9jayk6
CiogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oOgooSlNDOjppc0Z1
bmN0aW9uUGFyc2VNb2RlKToKKEpTQzo6aXNNZXRob2RQYXJzZU1vZGUpOgoqIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oOgooSlNDOjpTeW50YXhDaGVja2VyOjpt
YWtlRnVuY3Rpb25DYWxsTm9kZSk6CihKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZ1bmN0aW9u
RXhwcik6CihKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVByb3BlcnR5KToKKiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgooSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OnRvU3RyaW5nU2xvdyk6Ci0tLQogLi4uL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwICAgICAgICAgICAgIHwgIDIzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0FTVEJ1aWxkZXIuaCAgICAgfCAgMTQgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oICAgICAgICAgIHwgIDI3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAgICAgICAgfCAgOTQgKysrKystLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaCAgICAgICAgIHwgIDM5ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJNb2Rlcy5oICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1N5bnRheENoZWNrZXIuaCAgfCAgIDggKy0KIC4uLi9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5jcHAgICAgICAgICAgICB8ICAgMSArCiBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1zdGF0aWMt
YmxvY2suanMgICAgICAgICAgfCAyNTEgKysrKysrKysrKysrKysrKysrCiAxMCBmaWxlcyBjaGFu
Z2VkLCA0NDQgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgSlNUZXN0cy9zdHJlc3MvY2xhc3Mtc3RhdGljLWJsb2NrLmpzCgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IGQwZDNi
YWYwZGIzMS4uZWZjNTk0MTMxNmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC02NDksNyArNjQ5LDcgQEAgUmVnaXN0
ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAgIGlmIChwLT5pc1N0
YXRpY0NsYXNzRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdGljRmllbGRMb2Nh
dGlvbnMpOwogICAgICAgICAgICAgc3RhdGljRmllbGRMb2NhdGlvbnMtPmFwcGVuZChwLT5wb3Np
dGlvbigpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNzE5LDcgKzcxOSw3IEBAIFJlZ2lz
dGVySUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmIChwLT5pc1N0YXRpY0NsYXNzRmllbGQoKSkgeworICAgICAg
ICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQoc3RhdGljRmllbGRMb2NhdGlvbnMpOwogICAgICAgICAgICAgICAgIHN0YXRpY0ZpZWxk
TG9jYXRpb25zLT5hcHBlbmQocC0+cG9zaXRpb24oKSk7CiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CkBAIC0xMjU2LDkgKzEyNTYsMTYgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmUKICAgICBp
ZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQogICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFs
Q2hlY2soZnVuYy5nZXQoKSk7CiAKLSAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2Vu
ZXJhdG9yLCBtX2FyZ3MpOwotICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5l
cmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOworICAgIFJlZ2lzdGVySUQqIHJl
dDsKKyAgICBpZiAoaXNTdGF0aWNCbG9ja0Z1bmN0aW9uQ2FsbCgpKSB7CisgICAgICAgIENhbGxB
cmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG51bGxwdHIpOworICAgICAgICBnZW5l
cmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBnZW5lcmF0b3IudGhpc1Jl
Z2lzdGVyKCkpOworICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlv
bihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVD
YWxsOjpZZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0ID0g
Z2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMu
Z2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsKKyAgICB9CiAgICAgZ2Vu
ZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2b3RTdGFydCgpLCBk
aXZvdEVuZCgpKTsKICAgICByZXR1cm4gcmV0OwogfQpAQCAtNDk4Miw2ICs0OTg5LDEyIEBAIHZv
aWQgRnVuY0RlY2xOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCopCiAKIFJlZ2lzdGVySUQqIEZ1bmNFeHByTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBp
ZiAoaXNTdGF0aWNCbG9ja0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGhvbWVPYmplY3QgPSBlbWl0SG9tZU9iamVjdEZvckNhbGxlZShnZW5lcmF0b3IpOworICAgICAg
ICBSZWdpc3RlcklEKiByZXMgPSBnZW5lcmF0b3IuZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbihn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB0aGlzKTsKKyAgICAgICAgZW1pdFB1dEhv
bWVPYmplY3QoZ2VuZXJhdG9yLCByZXMsIGhvbWVPYmplY3QuZ2V0KCkpOworICAgICAgICByZXR1
cm4gcmVzOworICAgIH0KICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROZXdGdW5jdGlvbkV4cHJl
c3Npb24oZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdGhpcyk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKaW5kZXggNDlkODE4NTkxYTQ0Li5l
MTRhZmIzYTAzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNU
QnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5o
CkBAIC0xMzAsNyArMTMwLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgT3B0aW9u
U2V0PExleGVyRmxhZ3M+IERvbnRCdWlsZFN0cmluZ3MgPSB7IH07CiAKICAgICBFeHByZXNzaW9u
Tm9kZSogbWFrZUJpbmFyeU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgaW50IHRva2VuLCBz
dGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+LCBzdGQ6OnBhaXI8RXhwcmVz
c2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+KTsKLSAgICBFeHByZXNzaW9uTm9kZSogbWFrZUZ1bmN0
aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMs
IGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFwcGx5Q2hpbGREZXB0
aCwgYm9vbCBpc09wdGlvbmFsQ2FsbCk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlv
bkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBi
b29sIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgs
IGJvb2wgaXNPcHRpb25hbENhbGwsIGJvb2wgaXNTdGF0aWNDbGFzc0Jsb2NrRnVuY3Rpb25DYWxs
ID0gZmFsc2UpOwogCiAgICAgSlNDOjpTb3VyY2VFbGVtZW50cyogY3JlYXRlU291cmNlRWxlbWVu
dHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEpTQzo6U291cmNlRWxlbWVudHMoKTsg
fQogCkBAIC00MjUsMTAgKzQyNSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBub2RlOwog
ICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxk
ZXI+JiBmdW5jdGlvbkluZm8pCisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZUZ1bmN0aW9uRXhw
cihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBQYXJzZXJGdW5jdGlvbklu
Zm88QVNUQnVpbGRlcj4mIGZ1bmN0aW9uSW5mbywgYm9vbCBpc1N0YXRpY0Jsb2NrRnVuY3Rpb24g
PSBmYWxzZSkKICAgICB7CiAgICAgICAgIEZ1bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX3Bh
cnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9jYXRpb24sICpmdW5jdGlvbkluZm8ubmFtZSwgZnVu
Y3Rpb25JbmZvLmJvZHksCi0gICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24o
ZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LCBmdW5jdGlvbkluZm8uZW5kT2Zmc2V0LCBmdW5jdGlv
bkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyc1N0YXJ0Q29sdW1uKSk7Cisg
ICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZvLnN0YXJ0
T2Zmc2V0LCBmdW5jdGlvbkluZm8uZW5kT2Zmc2V0LCBmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBm
dW5jdGlvbkluZm8ucGFyYW1ldGVyc1N0YXJ0Q29sdW1uKSwgaXNTdGF0aWNCbG9ja0Z1bmN0aW9u
KTsKICAgICAgICAgZnVuY3Rpb25JbmZvLmJvZHktPnNldExvYyhmdW5jdGlvbkluZm8uc3RhcnRM
aW5lLCBmdW5jdGlvbkluZm8uZW5kTGluZSwgbG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9u
LmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNTIw
LDYgKzUyMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IFByb3BlcnR5Tm9kZShpZGVudCwgbWV0aG9kRGVmLCB0eXBlLCBTdXBlckJpbmRpbmc6Ok5lZWRl
ZCwgdGFnKTsKICAgICB9CiAKKyAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KGNvbnN0
IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgUHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFN1cGVy
QmluZGluZyBzdXBlckJpbmRpbmcsIENsYXNzRWxlbWVudFRhZyB0YWcpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoKnByb3BlcnR5TmFtZSwg
dHlwZSwgc3VwZXJCaW5kaW5nLCB0YWcpOworICAgIH0KICAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0
ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUq
IG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5n
LCBJbmZlck5hbWUgaW5mZXJOYW1lLCBDbGFzc0VsZW1lbnRUYWcgdGFnKQogICAgIHsKICAgICAg
ICAgaWYgKGluZmVyTmFtZSA9PSBJbmZlck5hbWU6OkFsbG93ZWQpIHsKQEAgLTE0MTcsNyArMTQy
MSw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQ29hbGVzY2VOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgQ29hbGVzY2VOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhwcjIsIGhhc0Fic29yYmVkT3B0
aW9uYWxDaGFpbik7CiB9CiAKLUV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRnVuY3Rp
b25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgQXJndW1lbnRzTm9kZSogYXJncywg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBk
aXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3QgY2FsbE9yQXBwbHlD
aGlsZERlcHRoLCBib29sIGlzT3B0aW9uYWxDYWxsKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxk
ZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVu
dHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVf
dCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wgaXNPcHRpb25hbENhbGwsIGJvb2wgaXNTdGF0
aWNCbG9ja0Z1bmN0aW9uQ2FsbCkKIHsKICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90
LmxpbmVTdGFydE9mZnNldCk7CiAgICAgaWYgKGZ1bmMtPmlzU3VwZXJOb2RlKCkpCkBAIC0xNDQz
LDcgKzE0NDcsNyBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2Fs
bE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbgogICAgIH0KIAogICAgIGlmICgh
ZnVuYy0+aXNMb2NhdGlvbigpKQotICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBG
dW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0
YXJ0LCBkaXZvdEVuZCk7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0
aW9uQ2FsbFZhbHVlTm9kZShsb2NhdGlvbiwgZnVuYywgYXJncywgZGl2b3QsIGRpdm90U3RhcnQs
IGRpdm90RW5kLCBpc1N0YXRpY0Jsb2NrRnVuY3Rpb25DYWxsKTsKICAgICBpZiAoZnVuYy0+aXNS
ZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJlc29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nh
c3Q8UmVzb2x2ZU5vZGUqPihmdW5jKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRp
ZmllciA9IHJlc29sdmUtPmlkZW50aWZpZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKaW5kZXggYjRkZjI0NDU4OTI2Li5lMDlmYTA2ZTg4
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVj
dG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9y
cy5oCkBAIC0yNTAsNiArMjUwLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAK
KyAgICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgVHlwZSB0eXBlLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nLCBDbGFzc0VsZW1lbnRU
YWcgdGFnKQorICAgICAgICA6IG1fbmFtZSgmbmFtZSkKKyAgICAgICAgLCBtX2V4cHJlc3Npb24o
bnVsbHB0cikKKyAgICAgICAgLCBtX2Fzc2lnbihudWxscHRyKQorICAgICAgICAsIG1fdHlwZSh0
eXBlKQorICAgICAgICAsIG1fbmVlZHNTdXBlckJpbmRpbmcoc3VwZXJCaW5kaW5nID09IFN1cGVy
QmluZGluZzo6TmVlZGVkKQorICAgICAgICAsIG1fY2xhc3NFbGVtZW50VGFnKHN0YXRpY19jYXN0
PHVuc2lnbmVkPih0YWcpKQorICAgICAgICAsIG1faXNPdmVycmlkZGVuQnlEdXBsaWNhdGUoZmFs
c2UpCisgICAgeworICAgIH0KKwogICAgIGlubGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9k
ZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeHByZXNzaW9uTm9kZSogYXNzaWduLCBUeXBlIHR5
cGUsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIENsYXNzRWxlbWVudFRhZyB0YWcpCiAgICAg
ICAgIDogbV9uYW1lKCZuYW1lKQogICAgICAgICAsIG1fZXhwcmVzc2lvbihudWxscHRyKQpAQCAt
Mzk4LDExICs0MDksMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlu
bGluZSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRz
Tm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgIGlu
bGluZSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRz
Tm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBjb25zdCBi
b29sIGlzU3RhdGljQmxvY2tGdW5jdGlvbkNhbGwpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUo
bG9jYXRpb24pCiAgICAgICAgICwgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90
U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fZXhwcihleHByKQogICAgICAgICAsIG1fYXJn
cyhhcmdzKQorICAgICAgICAsIG1faXNTdGF0aWNCbG9ja0Z1bmN0aW9uQ2FsbChpc1N0YXRpY0Js
b2NrRnVuY3Rpb25DYWxsKQogICAgIHsKICAgICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBk
aXZvdFN0YXJ0Lm9mZnNldCk7CiAgICAgfQpAQCAtMTAxOSwxMyArMTAzMSwxNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgbV9tZXRhZGF0YS0+ZmluaXNoUGFyc2luZyhzb3VyY2UsIGlkZW50
LCBmdW5jdGlvbk1vZGUpOwogICAgIH0KIAotICAgIGlubGluZSBGdW5jRXhwck5vZGU6OkZ1bmNF
eHByTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG1ldGFkYXRhLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UpCisgICAgaW5saW5lIEZ1bmNFeHByTm9kZTo6RnVuY0V4cHJOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBGdW5jdGlv
bk1ldGFkYXRhTm9kZSogbWV0YWRhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBp
c1N0YXRpY0Jsb2NrRnVuY3Rpb24pCiAgICAgICAgIDogQmFzZUZ1bmNFeHByTm9kZShsb2NhdGlv
biwgaWRlbnQsIG1ldGFkYXRhLCBzb3VyY2UsIEZ1bmN0aW9uTW9kZTo6RnVuY3Rpb25FeHByZXNz
aW9uKQorICAgICAgICAsIG1faXNTdGF0aWNCbG9ja0Z1bmN0aW9uKGlzU3RhdGljQmxvY2tGdW5j
dGlvbikKICAgICB7CiAgICAgfQogCiAgICAgaW5saW5lIEZ1bmNFeHByTm9kZTo6RnVuY0V4cHJO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBGdW5jdGlvbk1ldGFkYXRhTm9kZSogbWV0YWRhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgRnVuY3Rpb25Nb2RlIGZ1bmN0aW9uTW9kZSkKICAgICAgICAgOiBCYXNlRnVuY0V4cHJO
b2RlKGxvY2F0aW9uLCBpZGVudCwgbWV0YWRhdGEsIHNvdXJjZSwgZnVuY3Rpb25Nb2RlKQorICAg
ICAgICAsIG1faXNTdGF0aWNCbG9ja0Z1bmN0aW9uKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggMjUzZTZkYWRlN2YyLi5mOTFm
ZmRhZTc5MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTczNiw4ICs3
MzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBlbnVtIGNsYXNzIENsYXNzRWxlbWVudFRhZyA6
IHVpbnQ4X3QgeyBObywgSW5zdGFuY2UsIFN0YXRpYywgTGFzdFRhZyB9OwogICAgIGNsYXNzIFBy
b3BlcnR5Tm9kZSBmaW5hbCA6IHB1YmxpYyBQYXJzZXJBcmVuYUZyZWVhYmxlIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIGVudW0gVHlwZSA6IHVpbnQxNl90IHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIg
PSAyLCBTZXR0ZXIgPSA0LCBDb21wdXRlZCA9IDgsIFNob3J0aGFuZCA9IDE2LCBTcHJlYWQgPSAz
MiwgUHJpdmF0ZUZpZWxkID0gNjQsIFByaXZhdGVNZXRob2QgPSAxMjgsIFByaXZhdGVTZXR0ZXIg
PSAyNTYsIFByaXZhdGVHZXR0ZXIgPSA1MTIgfTsKKyAgICAgICAgZW51bSBUeXBlIDogdWludDE2
X3QgeyBDb25zdGFudCA9IDEsIEdldHRlciA9IDIsIFNldHRlciA9IDQsIENvbXB1dGVkID0gOCwg
U2hvcnRoYW5kID0gMTYsIFNwcmVhZCA9IDMyLCBQcml2YXRlRmllbGQgPSA2NCwgUHJpdmF0ZU1l
dGhvZCA9IDEyOCwgUHJpdmF0ZVNldHRlciA9IDI1NiwgUHJpdmF0ZUdldHRlciA9IDUxMiwgQmxv
Y2sgPSAxMDI0IH07CiAKKyAgICAgICAgUHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImLCBU
eXBlLCBTdXBlckJpbmRpbmcsIENsYXNzRWxlbWVudFRhZyk7CiAgICAgICAgIFByb3BlcnR5Tm9k
ZShjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVzc2lvbk5vZGUqLCBUeXBlLCBTdXBlckJpbmRpbmcs
IENsYXNzRWxlbWVudFRhZyk7CiAgICAgICAgIFByb3BlcnR5Tm9kZShFeHByZXNzaW9uTm9kZSos
IFR5cGUsIFN1cGVyQmluZGluZywgQ2xhc3NFbGVtZW50VGFnKTsKICAgICAgICAgUHJvcGVydHlO
b2RlKEV4cHJlc3Npb25Ob2RlKiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSwg
U3VwZXJCaW5kaW5nLCBDbGFzc0VsZW1lbnRUYWcpOwpAQCAtNzU0LDYgKzc1NSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIGlzQ2xhc3NGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGlz
Q2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygpOyB9CiAgICAgICAgIGJvb2wg
aXNJbnN0YW5jZUNsYXNzRmllbGQoKSBjb25zdCB7IHJldHVybiBpc0luc3RhbmNlQ2xhc3NQcm9w
ZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygpOyB9CiAgICAgICAgIGJvb2wgaXNTdGF0aWND
bGFzc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gaXNTdGF0aWNDbGFzc1Byb3BlcnR5KCkgJiYgIW5l
ZWRzU3VwZXJCaW5kaW5nKCk7IH0KKyAgICAgICAgYm9vbCBpc1N0YXRpY0NsYXNzQmxvY2soKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgJiBCbG9jazsgfQorICAgICAgICBib29sIGlzU3RhdGljQ2xh
c3NFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gaXNTdGF0aWNDbGFzc0Jsb2NrKCkgfHwgaXNTdGF0
aWNDbGFzc0ZpZWxkKCk7IH0KICAgICAgICAgYm9vbCBpc092ZXJyaWRkZW5CeUR1cGxpY2F0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNPdmVycmlkZGVuQnlEdXBsaWNhdGU7IH0KICAgICAgICAgYm9v
bCBpc1ByaXZhdGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiAoUHJpdmF0ZUZpZWxkIHwgUHJp
dmF0ZU1ldGhvZCB8IFByaXZhdGVHZXR0ZXIgfCBQcml2YXRlU2V0dGVyKTsgfQogICAgICAgICBi
b29sIGhhc0NvbXB1dGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQpAQCAt
Nzc1LDcgKzc3OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBJZGVudGlmaWVy
KiBtX25hbWU7CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHJlc3Npb247CiAgICAgICAg
IEV4cHJlc3Npb25Ob2RlKiBtX2Fzc2lnbjsKLSAgICAgICAgdW5zaWduZWQgbV90eXBlIDogMTA7
CisgICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6IDExOwogICAgICAgICB1bnNpZ25lZCBtX25lZWRz
U3VwZXJCaW5kaW5nIDogMTsKICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDIgPiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oQ2xhc3NFbGVtZW50VGFnOjpMYXN0VGFnKSwgIkNsYXNzRWxlbWVudFRh
ZyBzaG91bGRuJ3QgdXNlIG1vcmUgdGhhbiB0d28gYml0cyIpOwogICAgICAgICB1bnNpZ25lZCBt
X2NsYXNzRWxlbWVudFRhZyA6IDI7CkBAIC04MDMsNiArODA2LDE2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIG1fbm9kZS0+aXNTdGF0aWNDbGFzc0ZpZWxkKCk7CiAgICAg
ICAgIH0KIAorICAgICAgICBib29sIGlzU3RhdGljQ2xhc3NCbG9jaygpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX25vZGUtPmlzU3RhdGljQ2xhc3NCbG9jaygpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBpc1N0YXRpY0NsYXNzRWxlbWVudCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX25vZGUtPmlzU3RhdGljQ2xhc3NFbGVtZW50KCk7
CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIHNldEhhc1ByaXZhdGVBY2Nlc3NvcnMoYm9vbCBo
YXNQcml2YXRlQWNjZXNzb3JzKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2hhc1ByaXZhdGVB
Y2Nlc3NvcnMgPSBoYXNQcml2YXRlQWNjZXNzb3JzOwpAQCAtOTc1LDcgKzk4OCw5IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rpb25DYWxsVmFsdWVOb2RlIGZpbmFsIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAg
IHB1YmxpYzoKLSAgICAgICAgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdEVuZCk7CisgICAgICAgIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIEFyZ3VtZW50c05vZGUqLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIGJvb2wgaXNTdGF0aWMgPSBmYWxzZSk7
CisKKyAgICAgICAgYm9vbCBpc1N0YXRpY0Jsb2NrRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1
cm4gbV9pc1N0YXRpY0Jsb2NrRnVuY3Rpb25DYWxsOyB9CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IG51bGxwdHIpIGZpbmFsOwpAQCAtOTg0LDYgKzk5OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHI7CiAgICAgICAgIEFyZ3VtZW50c05vZGUq
IG1fYXJnczsKKyAgICAgICAgYm9vbCBtX2lzU3RhdGljQmxvY2tGdW5jdGlvbkNhbGw7CiAgICAg
fTsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIGZpbmFsIDogcHVibGljIEV4
cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewpAQCAtMjMyNCw3
ICsyMzQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jRXhwck5vZGUgOiBw
dWJsaWMgQmFzZUZ1bmNFeHByTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBGdW5jRXhwck5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uTWV0
YWRhdGFOb2RlKiwgY29uc3QgU291cmNlQ29kZSYpOworICAgICAgICBGdW5jRXhwck5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uTWV0YWRhdGFO
b2RlKiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgaXNTdGF0aWNCbG9jayA9IGZhbHNlKTsKKwor
ICAgICAgICBib29sIGlzU3RhdGljQmxvY2tGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNT
dGF0aWNCbG9ja0Z1bmN0aW9uOyB9CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEZ1bmNFeHBy
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25N
ZXRhZGF0YU5vZGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25Nb2RlKTsKQEAgLTIzMzMs
NiArMjM1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IG51bGxwdHIpIG92ZXJyaWRl
OwogCiAgICAgICAgIGJvb2wgaXNGdW5jRXhwck5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisgICAgICAgIGJvb2wgbV9pc1N0YXRpY0Jsb2NrRnVuY3Rpb247CiAgICAgfTsK
IAogICAgIGNsYXNzIEFycm93RnVuY0V4cHJOb2RlIGZpbmFsIDogcHVibGljIEJhc2VGdW5jRXhw
ck5vZGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDNkMTRl
MTIwYmM2My4uOGVkYTQ1ODdmNGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuY3BwCkBAIC0zODYsNyArMzg2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBi
b29sIFBhcnNlcjxMZXhlclR5cGU+Ojppc0Fycm93RnVuY3Rpb25QYXJhbWV0ZXJzKFQKICAgICB9
CiAKICAgICBpZiAobWF0Y2hTcGVjSWRlbnRpZmllcigpKSB7Ci0gICAgICAgIHNlbWFudGljRmFp
bElmVHJ1ZShpc0Rpc2FsbG93ZWRJZGVudGlmaWVyQXdhaXQobV90b2tlbiksICJDYW5ub3QgdXNl
ICdhd2FpdCcgYXMgYSBwYXJhbWV0ZXIgbmFtZSBpbiBhbiBhc3luYyBmdW5jdGlvbiIpOworICAg
ICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNEaXNhbGxvd2VkSWRlbnRpZmllckF3YWl0KG1fdG9r
ZW4pLCAiQ2Fubm90IHVzZSAnYXdhaXQnIGFzIGEgcGFyYW1ldGVyIG5hbWUgIiwgZGlzYWxsb3dl
ZElkZW50aWZpZXJBd2FpdFJlYXNvbigpKTsKICAgICAgICAgU2F2ZVBvaW50IHNhdmVBcnJvd0Z1
bmN0aW9uUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQoY29udGV4dCk7CiAgICAgICAgIG5leHQoKTsK
ICAgICAgICAgYm9vbCBpc0Fycm93RnVuY3Rpb24gPSBtYXRjaChBUlJPV0ZVTkNUSU9OKTsKQEAg
LTc3OCw2ICs3NzgsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1l
bnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlU3RhdGVtZW50TGlzdAogICAgICAgICBGQUxMVEhS
T1VHSDsKICAgICBjYXNlIEFXQUlUOgogICAgIGNhc2UgWUlFTEQ6IHsKKyAgICAgICAgc2VtYW50
aWNGYWlsSWZUcnVlKG1hdGNoKFlJRUxEKSAmJiBtX3BhcnNlclN0YXRlLmlzUGFyc2luZ0NsYXNz
U3RhdGljQmxvY2ssICJDYW5ub3QgdXNlICd5aWVsZCcgd2l0aGluIGNsYXNzIHN0YXRpYyBibG9j
ayIpOworICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobWF0Y2goQVdBSVQpICYmICFmaW5kQ2xv
c2V0QXN5bmNGdW5jdGlvblNjb3BlKCksICJDYW5ub3QgdXNlICdhd2FpdCcgd2l0aGluIHN0YXRp
YyBibG9jayBzY29wZSIpOwogICAgICAgICAvLyBUaGlzIGlzIGEgY29udmVuaWVudCBwbGFjZSB0
byBub3RpY2UgbGFiZWxlZCBzdGF0ZW1lbnRzCiAgICAgICAgIC8vIChldmVuIHRob3VnaCB3ZSBh
bHNvIHBhcnNlIHRoZW0gYXMgbm9ybWFsIHN0YXRlbWVudHMpCiAgICAgICAgIC8vIGJlY2F1c2Ug
d2UgYWxsb3cgdGhlIGZvbGxvd2luZyB0eXBlIG9mIGNvZGUgaW4gc2xvcHB5IG1vZGU6CkBAIC04
OTcsNiArODk5LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lv
biBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VWYXJpYWJsZURlY2wKIAogICAgICAgICBmYWlsSWZU
cnVlKG1hdGNoKFBSSVZBVEVOQU1FKSwgIkNhbm5vdCB1c2UgYSBwcml2YXRlIG5hbWUgdG8gZGVj
bGFyZSBhIHZhcmlhYmxlIik7CiAgICAgICAgIGlmIChtYXRjaFNwZWNJZGVudGlmaWVyKCkpIHsK
KyAgICAgICAgICAgIGZhaWxJZlRydWUoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJv
cGVydHlOYW1lcy0+YXJndW1lbnRzICYmICFmaW5kQ2xvc2V0RnVuY3Rpb25TY29wZSgpLCAiQ2xh
c3Mgc3RhdGljIGJsb2NrIGNhbm5vdCB1c2UgJ2FyZ3VtZW50cycgYXMgYW4gaWRlbnRpZmllciIp
OwogICAgICAgICAgICAgZmFpbElmVHJ1ZShpc1Bvc3NpYmx5RXNjYXBlZExldChtX3Rva2VuKSAm
JiAoZGVjbGFyYXRpb25UeXBlID09IERlY2xhcmF0aW9uVHlwZTo6TGV0RGVjbGFyYXRpb24gfHwg
ZGVjbGFyYXRpb25UeXBlID09IERlY2xhcmF0aW9uVHlwZTo6Q29uc3REZWNsYXJhdGlvbiksIAog
ICAgICAgICAgICAgICAgICJDYW5ub3QgdXNlICdsZXQnIGFzIGFuIGlkZW50aWZpZXIgbmFtZSBm
b3IgYSBMZXhpY2FsRGVjbGFyYXRpb24iKTsKICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1
ZShpc0Rpc2FsbG93ZWRJZGVudGlmaWVyQXdhaXQobV90b2tlbiksICJDYW5ub3QgdXNlICdhd2Fp
dCcgYXMgYSAiLCBkZWNsYXJhdGlvblR5cGVUb1ZhcmlhYmxlS2luZChkZWNsYXJhdGlvblR5cGUp
LCAiICIsIGRpc2FsbG93ZWRJZGVudGlmaWVyQXdhaXRSZWFzb24oKSk7CkBAIC0xNjI0LDYgKzE2
MjcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlQnJlYWtTdGF0ZW1lbgogICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9
IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICBuZXh0KCk7CiAgICAgCisgICAgc2VtYW50aWNGYWls
SWZUcnVlKGN1cnJlbnRTY29wZSgpLT5pc1N0YXRpY0Jsb2NrU2NvcGUoKSwgIidicmVhaycgY2Fu
bm90IGNyb3NzIHN0YXRpYyBibG9jayBib3VuZGFyeSIpOwogICAgIGlmIChhdXRvU2VtaUNvbG9u
KCkpIHsKICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShicmVha0lzVmFsaWQoKSwgIidicmVh
aycgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBzd2l0Y2ggb3IgbG9vcCBzdGF0ZW1lbnQiKTsKICAg
ICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobG9jYXRpb24sICZtX3Zt
LnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBzdGFydCwgZW5kKTsKQEAgLTE2NDYsNiAr
MTY1MCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VDb250aW51ZVN0YXRlCiAgICAgSlNUZXh0UG9zaXRpb24gZW5k
ID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAgIG5leHQoKTsKICAgICAKKyAgICBzZW1hbnRpY0Zh
aWxJZlRydWUoY3VycmVudFNjb3BlKCktPmlzU3RhdGljQmxvY2tTY29wZSgpLCAiJ2NvbnRpbnVl
JyBjYW5ub3QgY3Jvc3Mgc3RhdGljIGJsb2NrIGJvdW5kYXJ5Iik7CiAgICAgaWYgKGF1dG9TZW1p
Q29sb24oKSkgewogICAgICAgICBzZW1hbnRpY0ZhaWxJZkZhbHNlKGNvbnRpbnVlSXNWYWxpZCgp
LCAiJ2NvbnRpbnVlJyBpcyBvbmx5IHZhbGlkIGluc2lkZSBhIGxvb3Agc3RhdGVtZW50Iik7CiAg
ICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxvY2F0aW9uLCAm
bV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgc3RhcnQsIGVuZCk7CkBAIC0xNjY2
LDcgKzE2NzEsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQg
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlUmV0dXJuU3RhdGVtZQogewogICAgIEFTU0VSVChtYXRj
aChSRVRVUk4pKTsKICAgICBKU1Rva2VuTG9jYXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigp
KTsKLSAgICBzZW1hbnRpY0ZhaWxJZkZhbHNlKGN1cnJlbnRTY29wZSgpLT5pc0Z1bmN0aW9uKCks
ICJSZXR1cm4gc3RhdGVtZW50cyBhcmUgb25seSB2YWxpZCBpbnNpZGUgZnVuY3Rpb25zIik7Cisg
ICAgc2VtYW50aWNGYWlsSWZGYWxzZShjdXJyZW50U2NvcGUoKS0+aXNGdW5jdGlvbigpICYmICFj
dXJyZW50U2NvcGUoKS0+aXNTdGF0aWNCbG9ja1Njb3BlKCksICJSZXR1cm4gc3RhdGVtZW50cyBh
cmUgb25seSB2YWxpZCBpbnNpZGUgZnVuY3Rpb25zIik7CiAgICAgSlNUZXh0UG9zaXRpb24gc3Rh
cnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKICAgICBKU1RleHRQb3NpdGlvbiBlbmQgPSB0b2tl
bkVuZFBvc2l0aW9uKCk7CiAgICAgbmV4dCgpOwpAQCAtMTg0NSw2ICsxODUwLDcgQEAgdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZVRyeVN0YXRlbWVudCgKICAgICAgICAgICAgIGNhdGNoU2NvcGUtPnByZXZlbnRWYXJEZWNs
YXJhdGlvbnMoKTsKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbnVsbHB0
cjsKICAgICAgICAgICAgIGlmIChtYXRjaFNwZWNJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobWF0Y2goQVdBSVQpICYmICFmaW5kQ2xvc2V0RnVuY3Rp
b25TY29wZSgpLCAiQ2Fubm90IHVzZSAnYXdhaXQnIGFzIGlkZW50aWZpZXIgd2l0aGluIGNsYXNz
IHN0YXRpYyBibG9jayBzY29wZSIpOwogICAgICAgICAgICAgICAgIGNhdGNoU2NvcGUtPnNldElz
U2ltcGxlQ2F0Y2hQYXJhbWV0ZXJTY29wZSgpOwogICAgICAgICAgICAgICAgIGlkZW50ID0gbV90
b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgICAgICAgICAgY2F0Y2hQYXR0ZXJuID0gY29udGV4
dC5jcmVhdGVCaW5kaW5nTG9jYXRpb24obV90b2tlbi5tX2xvY2F0aW9uLCAqaWRlbnQsIG1fdG9r
ZW4ubV9zdGFydFBvc2l0aW9uLCBtX3Rva2VuLm1fZW5kUG9zaXRpb24sIEFzc2lnbm1lbnRDb250
ZXh0OjpEZWNsYXJhdGlvblN0YXRlbWVudCk7CkBAIC0xODkwLDcgKzE4OTYsNyBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlRGVidWdnZXJTdGF0ZQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUJsb2NrU3RhdGVtZW50KFRyZWVCdWlsZGVyJiBjb250ZXh0LCBib29sIGlzQ2F0Y2hC
bG9jaykKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VCbG9ja1N0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCwgYm9v
bCBpc0NhdGNoQmxvY2ssIGJvb2wgaXNTdGF0aWNCbG9jaykKIHsKICAgICBBU1NFUlQobWF0Y2go
T1BFTkJSQUNFKSk7CiAKQEAgLTE5MDQsNiArMTkxMCw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VCbG9ja1N0YXRl
bWVuCiAgICAgICAgIG5ld1Njb3BlLT5wcmV2ZW50VmFyRGVjbGFyYXRpb25zKCk7CiAgICAgICAg
IGlmIChpc0NhdGNoQmxvY2spCiAgICAgICAgICAgICBuZXdTY29wZS0+c2V0SXNDYXRjaEJsb2Nr
U2NvcGUoKTsKKyAgICAgICAgaWYgKGlzU3RhdGljQmxvY2spCisgICAgICAgICAgICBuZXdTY29w
ZS0+c2V0SXNTdGF0aWNCbG9ja1Njb3BlKCk7CiAgICAgICAgIGxleGljYWxTY29wZS5zZXRJc1Zh
bGlkKG5ld1Njb3BlLCB0aGlzKTsKICAgICB9CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9u
KHRva2VuTG9jYXRpb24oKSk7CkBAIC0yMjIzLDYgKzIyMzEsNyBAQCBzdGF0aWMgY29uc3QgY2hh
ciogc3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZShTb3VyY2VQYXJzZU1vZGUgbW9kZSkKICAg
ICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlQW5hbHl6ZU1vZGU6CiAgICAgY2FzZSBTb3Vy
Y2VQYXJzZU1vZGU6Ok1vZHVsZUV2YWx1YXRlTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9k
ZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6
Q2xhc3NTdGF0aWNCbG9ja01vZGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9CkBAIC0yMjY1LDYgKzIyNzQsNyBAQCBzdGF0
aWMgY29uc3QgY2hhciogc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKFNvdXJjZVBhcnNlTW9kZSBtb2Rl
KQogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZToKICAgICBjYXNl
IFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlRXZhbHVhdGVNb2RlOgogICAgIGNhc2UgU291cmNlUGFy
c2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgIGNhc2UgU291cmNlUGFyc2VN
b2RlOjpDbGFzc1N0YXRpY0Jsb2NrTW9kZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuICIiOwogICAgIH0KQEAgLTIyNzcsNiArMjI4Nyw4IEBA
IHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
ciwgY2xhc3MgRnVuY3Rpb25JbmZvVHlwCiAgICAgYXV0byBtb2RlID0gc291cmNlUGFyc2VNb2Rl
KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIShTb3VyY2VQYXJzZU1vZGVTZXQoU291cmNlUGFyc2VN
b2RlOjpQcm9ncmFtTW9kZSwgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZSwgU291
cmNlUGFyc2VNb2RlOjpNb2R1bGVFdmFsdWF0ZU1vZGUpLmNvbnRhaW5zKG1vZGUpKSk7CiAgICAg
VHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFyYW1ldGVyTGlzdCA9IGNvbnRleHQuY3JlYXRlRm9y
bWFsUGFyYW1ldGVyTGlzdCgpOworICAgIGlmIChtb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xh
c3NTdGF0aWNCbG9ja01vZGUpCisgICAgICAgIHJldHVybiBwYXJhbWV0ZXJMaXN0OwogICAgIFNl
dEZvclNjb3BlIGZ1bmN0aW9uUGFyc2VQaGFzZVBvaXNvbmVyKG1fcGFyc2VyU3RhdGUuZnVuY3Rp
b25QYXJzZVBoYXNlLCBGdW5jdGlvblBhcnNlUGhhc2U6OlBhcmFtZXRlcnMpOwogICAgIAogICAg
IGlmIChVTkxJS0VMWSgoU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dG
dW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSkuY29u
dGFpbnMobW9kZSkpKSkgewpAQCAtMjY2MSw3ICsyNjczLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVl
QnVpbGQKICAgICBjb250ZXh0LnNldEVuZE9mZnNldChmdW5jdGlvbkluZm8uYm9keSwgbV9sZXhl
ci0+Y3VycmVudE9mZnNldCgpKTsKICAgICBpZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0TW9kZSgp
ICYmIHJlcXVpcmVtZW50cyAhPSBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQpIHsK
ICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5mby5uYW1lKTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6Tm9ybWFsRnVuY3Rpb25Nb2Rl
LCBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5j
dGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yQm9keU1vZGUsIFNvdXJjZVBhcnNl
TW9kZTo6R2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZSkuY29udGFpbnMobW9kZSkgfHwgaXNB
c3luY0Z1bmN0aW9uT3JBc3luY0dlbmVyYXRvcldyYXBwZXJQYXJzZU1vZGUobW9kZSkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChTb3VyY2VQYXJzZU1vZGVTZXQoU291cmNlUGFyc2VNb2RlOjpO
b3JtYWxGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9kZSwgU291cmNlUGFy
c2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JCb2R5
TW9kZSwgU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlLCBTb3Vy
Y2VQYXJzZU1vZGU6OkNsYXNzU3RhdGljQmxvY2tNb2RlKS5jb250YWlucyhtb2RlKSB8fCBpc0Fz
eW5jRnVuY3Rpb25PckFzeW5jR2VuZXJhdG9yV3JhcHBlclBhcnNlTW9kZShtb2RlKSk7CiAgICAg
ICAgIHNlbWFudGljRmFpbElmVHJ1ZShtX3ZtLnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAq
ZnVuY3Rpb25JbmZvLm5hbWUsICInIiwgZnVuY3Rpb25JbmZvLm5hbWUtPmltcGwoKSwgIicgaXMg
bm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwogICAgICAgICBzZW1h
bnRpY0ZhaWxJZlRydWUobV92bS5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICpmdW5jdGlvbkluZm8u
bmFtZSwgIiciLCBmdW5jdGlvbkluZm8ubmFtZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBm
dW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2RlIik7CiAgICAgfQpAQCAtMjkyOSw2ICsyOTQxLDcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9uIFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQKICAgICBjbGFzc0hlYWRTY29wZS0+cHJldmVudFZh
ckRlY2xhcmF0aW9ucygpOwogICAgIGNsYXNzSGVhZFNjb3BlLT5zZXRTdHJpY3RNb2RlKCk7CiAg
ICAgbmV4dCgpOworICAgIHNlbWFudGljRmFpbElmVHJ1ZShtYXRjaChBV0FJVCkgJiYgIWZpbmRD
bG9zZXRGdW5jdGlvblNjb3BlKCksICJDYW5ub3QgdXNlICdhd2FpdCcgYXMgYSBjbGFzcyBuYW1l
IHdpdGhpbiBjbGFzcyBzdGF0aWMgYmxvY2sgc2NvcGUiKTsKIAogICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UocmVxdWlyZW1lbnRzICE9IEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwg
IkN1cnJlbnRseSwgdGhlcmUgaXMgbm8gY2FsbGVyIHRoYXQgdXNlcyBGdW5jdGlvbk5hbWVSZXF1
aXJlbWVudHM6OlVubmFtZWQgZm9yIGNsYXNzIHN5bnRheC4iKTsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKCEocmVxdWlyZW1lbnRzID09IEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZSAm
JiAhaW5mby5jbGFzc05hbWUpLCAiV2hlbiBzcGVjaWZ5aW5nIEZ1bmN0aW9uTmFtZVJlcXVpcmVt
ZW50czo6Tm9uZSwgd2UgbmVlZCB0byBpbml0aWFsaXplIGluZm8uY2xhc3NOYW1lIHdpdGggdGhl
IGRlZmF1bHQgdmFsdWUgaW4gdGhlIGNhbGxlciBzaWRlLiIpOwpAQCAtMjk4Myw2ICsyOTk2LDcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9uIFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQKIAogICAgICAgICAvLyBGb3IgYmFja3dhcmRzIGNv
bXBhdGliaWxpdHksICJzdGF0aWMiIGlzIGEgbm9uLXJlc2VydmVkIGtleXdvcmQgaW4gbm9uLXN0
cmljdCBtb2RlLgogICAgICAgICBDbGFzc0VsZW1lbnRUYWcgdGFnID0gQ2xhc3NFbGVtZW50VGFn
OjpJbnN0YW5jZTsKKyAgICAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJjZVBh
cnNlTW9kZTo6TWV0aG9kTW9kZTsKICAgICAgICAgYXV0byB0eXBlID0gUHJvcGVydHlOb2RlOjpD
b25zdGFudDsKICAgICAgICAgaWYgKG1hdGNoKFJFU0VSVkVEX0lGX1NUUklDVCkgJiYgKm1fdG9r
ZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+c3RhdGljS2V5d29yZCkgewog
ICAgICAgICAgICAgU2F2ZVBvaW50IHNhdmVQb2ludCA9IGNyZWF0ZVNhdmVQb2ludChjb250ZXh0
KTsKQEAgLTI5OTAsOCArMzAwNCwxMSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgICAg
ICAgICAgaWYgKG1hdGNoKE9QRU5QQVJFTikgfHwgbWF0Y2goU0VNSUNPTE9OKSB8fCBtYXRjaChF
UVVBTCkpIHsKICAgICAgICAgICAgICAgICAvLyBSZXBhcnNlICJzdGF0aWMoKSIgYXMgYSBtZXRo
b2Qgb3IgInN0YXRpYyIgYXMgYSBjbGFzcyBmaWVsZC4KICAgICAgICAgICAgICAgICByZXN0b3Jl
U2F2ZVBvaW50KGNvbnRleHQsIHNhdmVQb2ludCk7Ci0gICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGFnID0gQ2xhc3NFbGVtZW50VGFnOjpT
dGF0aWM7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKE9QRU5CUkFDRSkpCisgICAgICAgICAg
ICAgICAgICAgIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNCbG9ja01v
ZGU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogRmlndXJl
IG91dCBhIHdheSB0byBzaGFyZSBtb3JlIGNvZGUgd2l0aCBwYXJzZVByb3BlcnR5LgpAQCAtMzAw
MCw3ICszMDE3LDYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeHBy
ZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQKICAgICAgICAgVHJlZUV4cHJl
c3Npb24gY29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSAwOwogICAgICAgICBib29sIGlzR2V0dGVyID0g
ZmFsc2U7CiAgICAgICAgIGJvb2wgaXNTZXR0ZXIgPSBmYWxzZTsKLSAgICAgICAgU291cmNlUGFy
c2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9kZTsKICAgICAgICAg
aWYgKGNvbnN1bWUoVElNRVMpKQogICAgICAgICAgICAgcGFyc2VNb2RlID0gU291cmNlUGFyc2VN
b2RlOjpHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZTsKIApAQCAtMzA1Myw2ICszMDY5LDcgQEAg
cGFyc2VNZXRob2Q6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBPUEVOQlJBQ0tF
VDoKICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGZhaWxJZlRydWUoKm1fdG9rZW4u
bV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzICYmICFmaW5kQ2xv
c2V0RnVuY3Rpb25TY29wZSgpLCAiQ2xhc3Mgc3RhdGljIGJsb2NrIGNhbm5vdCB1c2UgJ2FyZ3Vt
ZW50cycgYXMgYW4gaWRlbnRpZmllciIpOwogICAgICAgICAgICAgY29tcHV0ZWRQcm9wZXJ0eU5h
bWUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOwogICAgICAgICAgICAgdHlw
ZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5Tm9kZTo6VHlwZT4odHlwZSB8IFByb3BlcnR5Tm9kZTo6
Q29tcHV0ZWQpOwogICAgICAgICAgICAgZmFpbElmRmFsc2UoY29tcHV0ZWRQcm9wZXJ0eU5hbWUs
ICJDYW5ub3QgcGFyc2UgY29tcHV0ZWQgcHJvcGVydHkgbmFtZSIpOwpAQCAtMzA4MSw2ICszMDk4
LDEwIEBAIHBhcnNlTWV0aG9kOgogICAgICAgICAgICAgdHlwZSA9IHN0YXRpY19jYXN0PFByb3Bl
cnR5Tm9kZTo6VHlwZT4odHlwZSB8IFByb3BlcnR5Tm9kZTo6UHJpdmF0ZUZpZWxkKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgT1BFTkJSQUNFOiB7CisgICAg
ICAgICAgICB0eXBlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlOjpUeXBlPih0eXBlIHwgUHJv
cGVydHlOb2RlOjpCbG9jayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKG1fdG9rZW4ubV90eXBlICYgS2V5d29yZFRva2Vu
RmxhZykKICAgICAgICAgICAgICAgICBnb3RvIG5hbWVkS2V5d29yZDsKQEAgLTMxNDksNiArMzE3
MCwxNyBAQCBwYXJzZU1ldGhvZDoKICAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQu
Y3JlYXRlUHJvcGVydHkoaWRlbnQsIGNvbXB1dGVkUHJvcGVydHlOYW1lLCBpbml0aWFsaXplciwg
dHlwZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIHRhZyk7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgcHJvcGVydHkgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KGlkZW50LCBp
bml0aWFsaXplciwgdHlwZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGluZmVyTmFtZSwgdGFn
KTsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFz
c1N0YXRpY0Jsb2NrTW9kZSkgeworICAgICAgICAgICAgbWF0Y2hPckZhaWwoT1BFTkJSQUNFLCAi
RXhwZWN0ZWQgYmxvY2sgc3RhdGVtZW50IGZvciBjbGFzcyBzdGF0aWMgYmxvY2siKTsKKyAgICAg
ICAgICAgIHNpemVfdCB1c2VkVmFyaWFibGVzU2l6ZSA9IGN1cnJlbnRTY29wZSgpLT5jdXJyZW50
VXNlZFZhcmlhYmxlc1NpemUoKTsKKyAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT5wdXNoVXNl
ZFZhcmlhYmxlU2V0KCk7CisgICAgICAgICAgICBTZXRGb3JTY29wZSBwYXJzaW5nV2l0aENsYXNz
U3RhdGljQmxvY2tNb2RlKG1fcGFyc2VNb2RlLCBwYXJzZU1vZGUpOworICAgICAgICAgICAgU2V0
Rm9yU2NvcGUgcGFyc2luZ1dpdGhDbGFzc1N0YXRpY0Jsb2NrU3RhdGUobV9wYXJzZXJTdGF0ZS5p
c1BhcnNpbmdDbGFzc1N0YXRpY0Jsb2NrLCB0cnVlKTsKKyAgICAgICAgICAgIERlcHRoTWFuYWdl
ciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1lbnREZXB0aCk7CisgICAgICAgICAgICBtX3N0YXRl
bWVudERlcHRoID0gMTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNlQmxvY2tTdGF0ZW1l
bnQoY29udGV4dCwgZmFsc2UgLCB0cnVlKSwgIkNhbm5vdCBwYXJzZSBjbGFzcyBzdGF0aWMgYmxv
Y2siKTsKKyAgICAgICAgICAgIHByb3BlcnR5ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShpZGVu
dCwgdHlwZSwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIHRhZyk7CisgICAgICAgICAgICBjbGFzc1Nj
b3BlLT5tYXJrTGFzdFVzZWRWYXJpYWJsZXNTZXRBc0NhcHR1cmVkKHVzZWRWYXJpYWJsZXNTaXpl
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVl
QnVpbGRlcj4gbWV0aG9kSW5mbzsKICAgICAgICAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvciA9IHRh
ZyA9PSBDbGFzc0VsZW1lbnRUYWc6Okluc3RhbmNlICYmICppZGVudCA9PSBwcm9wZXJ0eU5hbWVz
LmNvbnN0cnVjdG9yOwpAQCAtMzI4MSw2ICszMzEzLDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVC
dWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NG
aWUKICAgICAgICAgICAgICAgICB0eXBlID0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpDb21wdXRl
ZE5hbWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIE9QRU5CUkFDRTogeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAobV90b2tlbi5tX3R5
cGUgJiBLZXl3b3JkVG9rZW5GbGFnKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG5hbWVkS2V5
d29yZDsKQEAgLTMyODksMTcgKzMzMjQsMzYgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NGaWUKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIE9ubHkgdmFsaWQgY2xhc3MgZmllbGRzIGFyZSBoYW5kbGVk
IGluIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgIEFTU0VSVChtYXRjaChFUVVBTCkgfHwgbWF0Y2go
U0VNSUNPTE9OKSB8fCBtYXRjaChDTE9TRUJSQUNFKSB8fCBtX2xleGVyLT5oYXNMaW5lVGVybWlu
YXRvckJlZm9yZVRva2VuKCkpOworICAgICAgICBBU1NFUlQobWF0Y2goRVFVQUwpIHx8IG1hdGNo
KFNFTUlDT0xPTikgfHwgbWF0Y2goQ0xPU0VCUkFDRSkgfHwgbWF0Y2goT1BFTkJSQUNFKSB8fCBt
X2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2VuKCkpOwogCi0gICAgICAgIFRyZWVF
eHByZXNzaW9uIGluaXRpYWxpemVyID0gMDsKLSAgICAgICAgaWYgKGNvbnN1bWUoRVFVQUwpKQot
ICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRl
eHQpOworICAgICAgICBUcmVlU3RhdGVtZW50IHN0YXRlbWVudDsKKyAgICAgICAgaWYgKG1hdGNo
KE9QRU5CUkFDRSkgJiYgaXNTdGF0aWNGaWVsZCkgeworICAgICAgICAgICAgSlNUZXh0UG9zaXRp
b24gc3RhcnRQb3NpdGlvbiA9IHRva2VuU3RhcnRQb3NpdGlvbigpOworICAgICAgICAgICAgSlNU
b2tlbkxvY2F0aW9uIHN0YXJ0TG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGV4cHJlc3Npb25TdGFydCA9IHRva2VuU3RhcnQoKTsKIAotICAgICAgICBpZiAo
dHlwZSA9PSBEZWZpbmVGaWVsZE5vZGU6OlR5cGU6OlByaXZhdGVOYW1lKQotICAgICAgICAgICAg
Y3VycmVudFNjb3BlKCktPnVzZVZhcmlhYmxlKGlkZW50LCBmYWxzZSk7CisgICAgICAgICAgICBQ
YXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGZ1bmN0aW9uSW5mbzsKKyAgICAgICAgICAg
IGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0ucHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7
CisgICAgICAgICAgICBTZXRGb3JTY29wZSBzZXRJbm5lclBhcnNlTW9kZShtX3BhcnNlTW9kZSwg
U291cmNlUGFyc2VNb2RlOjpDbGFzc1N0YXRpY0Jsb2NrTW9kZSk7CisgICAgICAgICAgICBmYWls
SWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8oY29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1l
bnRzOjpOb25lLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5l
ZWRlZCwgZXhwcmVzc2lvblN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5
cGU6OkV4cHJlc3Npb24pKSwgIkNhbm5vdCBwYXJzZSBzdGF0aWMgYmxvY2sgZnVuY3Rpb24iKTsK
KyAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBjb250ZXh0LmNyZWF0ZUZ1
bmN0aW9uRXhwcihzdGFydExvY2F0aW9uLCBmdW5jdGlvbkluZm8sIHRydWUpOwogCi0gICAgICAg
IFRyZWVTdGF0ZW1lbnQgZGVmaW5lRmllbGQgPSBjb250ZXh0LmNyZWF0ZURlZmluZUZpZWxkKGZp
ZWxkTG9jYXRpb24sIGlkZW50LCBpbml0aWFsaXplciwgdHlwZSk7Ci0gICAgICAgIGNvbnRleHQu
YXBwZW5kU3RhdGVtZW50KHNvdXJjZUVsZW1lbnRzLCBkZWZpbmVGaWVsZCk7CisgICAgICAgICAg
ICBKU1RleHRQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7Cisg
ICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFyZ3VtZW50cyA9IGNvbnRleHQuY3JlYXRlQXJndW1l
bnRzKCk7CisgICAgICAgICAgICBleHByZXNzaW9uID0gY29udGV4dC5tYWtlRnVuY3Rpb25DYWxs
Tm9kZShzdGFydExvY2F0aW9uLCBleHByZXNzaW9uLCBmYWxzZSwgYXJndW1lbnRzLCBzdGFydFBv
c2l0aW9uLCBlbmRQb3NpdGlvbiwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSwgMCwgZmFsc2UsIHRy
dWUpOworCisgICAgICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmNyZWF0ZUV4cHJTdGF0ZW1l
bnQoc3RhcnRMb2NhdGlvbiwgZXhwcmVzc2lvbiwgc3RhcnRQb3NpdGlvbiwgbV9sYXN0VG9rZW5F
bmRQb3NpdGlvbi5saW5lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFRyZWVFeHBy
ZXNzaW9uIGluaXRpYWxpemVyID0gMDsKKyAgICAgICAgICAgIGlmIChjb25zdW1lKEVRVUFMKSkK
KyAgICAgICAgICAgICAgICBpbml0aWFsaXplciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
Y29udGV4dCk7CisKKyAgICAgICAgICAgIGlmICh0eXBlID09IERlZmluZUZpZWxkTm9kZTo6VHlw
ZTo6UHJpdmF0ZU5hbWUpCisgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnVzZVZhcmlh
YmxlKGlkZW50LCBmYWxzZSk7CisKKyAgICAgICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuY3Jl
YXRlRGVmaW5lRmllbGQoZmllbGRMb2NhdGlvbiwgaWRlbnQsIGluaXRpYWxpemVyLCB0eXBlKTsK
KyAgICAgICAgfQorICAgICAgICBjb250ZXh0LmFwcGVuZFN0YXRlbWVudChzb3VyY2VFbGVtZW50
cywgc3RhdGVtZW50KTsKICAgICB9CiAKICAgICBBU1NFUlQoIWhhc0Vycm9yKCkpOwpAQCAtNDEx
NSw2ICs0MTY5LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVz
c2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3NpZ25tZW4KIAogICAgIFRyZWVFeHByZXNz
aW9uIGxocyA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKGNvbnRleHQpOwogCisgICAgaWYg
KCFsaHMgJiYgY3VycmVudFNjb3BlKCktPmlzU3RhdGljQmxvY2tTY29wZSgpICYmIG1hdGNoKEFX
QUlUKSkKKyAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKKwogICAgIGlmIChtYXliZVZhbGlkQXJy
b3dGdW5jdGlvblN0YXJ0ICYmICFtYXRjaChFT0ZUT0spKSB7CiAgICAgICAgIGJvb2wgaXNBcnJv
d0Z1bmN0aW9uVG9rZW4gPSBtYXRjaChBUlJPV0ZVTkNUSU9OKTsKICAgICAgICAgaWYgKCFsaHMg
fHwgaXNBcnJvd0Z1bmN0aW9uVG9rZW4pIHsKQEAgLTQ5NDAsNiArNDk5Nyw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlUHJpbWFyeUV4cHJlCiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVRoaXNFeHByKGxv
Y2F0aW9uKTsKICAgICB9CiAgICAgY2FzZSBBV0FJVDoKKyAgICAgICAgc2VtYW50aWNGYWlsSWZU
cnVlKGN1cnJlbnRTY29wZSgpLT5pc1N0YXRpY0Jsb2NrU2NvcGUoKSwgIlRoZSAnYXdhaXQnIGtl
eXdvcmQgaXMgZGlzYWxsb3dlZCBpbiB0aGUgSWRlbnRpZmllclJlZmVyZW5jZSBwb3NpdGlvbiBm
ZWF0dXJlcyB3aXRoaW4gY2xhc3Mgc3RhdGljIGJsb2NrIHNjb3BlIik7CiAgICAgICAgIGlmICht
X3BhcnNlclN0YXRlLmZ1bmN0aW9uUGFyc2VQaGFzZSA9PSBGdW5jdGlvblBhcnNlUGhhc2U6OlBh
cmFtZXRlcnMpCiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZkZhbHNlKG1fcGFyc2VyU3RhdGUu
YWxsb3dBd2FpdCwgIkNhbm5vdCB1c2UgJ2F3YWl0JyB3aXRoaW4gYSBwYXJhbWV0ZXIgZGVmYXVs
dCBleHByZXNzaW9uIik7CiAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRGdW5jdGlvblNjb3BlKCkt
PmlzQXN5bmNGdW5jdGlvbkJvdW5kYXJ5KCkgfHwgaXNNb2R1bGVQYXJzZU1vZGUoc291cmNlUGFy
c2VNb2RlKCkpKQpAQCAtNDk0Nyw2ICs1MDA1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmUK
IAogICAgICAgICBnb3RvIGlkZW50aWZpZXJFeHByZXNzaW9uOwogICAgIGNhc2UgSURFTlQ6IHsK
KyAgICAgICAgZmFpbElmVHJ1ZSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0
eU5hbWVzLT5hcmd1bWVudHMgJiYgIWZpbmRDbG9zZXRGdW5jdGlvblNjb3BlKCksICJDbGFzcyBz
dGF0aWMgYmxvY2sgY2Fubm90IHVzZSAnYXJndW1lbnRzJyBhcyBhbiBpZGVudGlmaWVyIik7CiAg
ICAgICAgIGlmIChVTkxJS0VMWSgqbV90b2tlbi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0
eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5tX2RhdGEuZXNjYXBlZCkpIHsKICAgICAgICAgICAg
IEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwpAQCAtNTE2
OCw4ICs1MjI3LDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lv
biBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VNZW1iZXJFeHByZXMKICAgICAgICAgaWYgKG1hdGNo
Q29udGV4dHVhbEtleXdvcmQobV92bS5wcm9wZXJ0eU5hbWVzLT50YXJnZXQpKSB7CiAgICAgICAg
ICAgICBTY29wZVJlZiBjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlID0gY2xvc2VzdFBhcmVu
dE9yZGluYXJ5RnVuY3Rpb25Ob25MZXhpY2FsU2NvcGUoKTsKICAgICAgICAgICAgIGJvb2wgaXND
bGFzc0ZpZWxkSW5pdGlhbGl6ZXIgPSBtX3BhcnNlclN0YXRlLmlzUGFyc2luZ0NsYXNzRmllbGRJ
bml0aWFsaXplcjsKKyAgICAgICAgICAgIGJvb2wgaXNQYXJzaW5nQ2xhc3NTdGF0aWNCbG9jayA9
IG1fcGFyc2VyU3RhdGUuaXNQYXJzaW5nQ2xhc3NTdGF0aWNCbG9jazsKICAgICAgICAgICAgIGJv
b2wgaXNGdW5jdGlvbkV2YWxDb250ZXh0VHlwZSA9IG1faXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9u
ICYmIChjbG9zZXN0T3JkaW5hcnlGdW5jdGlvblNjb3BlLT5ldmFsQ29udGV4dFR5cGUoKSA9PSBF
dmFsQ29udGV4dFR5cGU6OkZ1bmN0aW9uRXZhbENvbnRleHQgfHwgY2xvc2VzdE9yZGluYXJ5RnVu
Y3Rpb25TY29wZS0+ZXZhbENvbnRleHRUeXBlKCkgPT0gRXZhbENvbnRleHRUeXBlOjpJbnN0YW5j
ZUZpZWxkRXZhbENvbnRleHQpOwotICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShjdXJy
ZW50U2NvcGUoKS0+aXNGdW5jdGlvbigpIHx8IGlzRnVuY3Rpb25FdmFsQ29udGV4dFR5cGUgfHwg
aXNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsICJuZXcudGFyZ2V0IGlzIG9ubHkgdmFsaWQgaW5zaWRl
IGZ1bmN0aW9ucyIpOworICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShjdXJyZW50U2Nv
cGUoKS0+aXNGdW5jdGlvbigpIHx8IGlzRnVuY3Rpb25FdmFsQ29udGV4dFR5cGUgfHwgaXNQYXJz
aW5nQ2xhc3NTdGF0aWNCbG9jayB8fCBpc0NsYXNzRmllbGRJbml0aWFsaXplciwgIm5ldy50YXJn
ZXQgaXMgb25seSB2YWxpZCBpbnNpZGUgZnVuY3Rpb25zIik7CiAgICAgICAgICAgICBiYXNlSXNO
ZXdUYXJnZXQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29wZSgpLT5pc0Fycm93
RnVuY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UoIWNsb3Nl
c3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlzR2xvYmFsQ29kZVNjb3BlKCkgfHwgaXNGdW5jdGlv
bkV2YWxDb250ZXh0VHlwZSB8fCBpc0NsYXNzRmllbGRJbml0aWFsaXplciwgIm5ldy50YXJnZXQg
aXMgbm90IHZhbGlkIGluc2lkZSBhcnJvdyBmdW5jdGlvbnMgaW4gZ2xvYmFsIGNvZGUiKTsKQEAg
LTU0NTcsOCArNTUxNywxMCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHBy
ZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVVuYXJ5RXhwcmVzcwogICAgIGJvb2wgaGFz
UHJlZml4VXBkYXRlT3AgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBsYXN0T3BlcmF0b3IgPSAwOwog
Ci0gICAgaWYgKFVOTElLRUxZKG1hdGNoKEFXQUlUKSAmJiAoY3VycmVudEZ1bmN0aW9uU2NvcGUo
KS0+aXNBc3luY0Z1bmN0aW9uQm91bmRhcnkoKSB8fCBpc01vZHVsZVBhcnNlTW9kZShzb3VyY2VQ
YXJzZU1vZGUoKSkpKSkKKyAgICBpZiAoVU5MSUtFTFkobWF0Y2goQVdBSVQpICYmIChjdXJyZW50
RnVuY3Rpb25TY29wZSgpLT5pc0FzeW5jRnVuY3Rpb25Cb3VuZGFyeSgpIHx8IGlzTW9kdWxlUGFy
c2VNb2RlKHNvdXJjZVBhcnNlTW9kZSgpKSkpKSB7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1
ZSghZmluZENsb3NldEFzeW5jRnVuY3Rpb25TY29wZSgpLCAiQ2Fubm90IHVzZSAnYXdhaXQnIHdp
dGhpbiBzdGF0aWMgYmxvY2sgc2NvcGUiKTsKICAgICAgICAgcmV0dXJuIHBhcnNlQXdhaXRFeHBy
ZXNzaW9uKGNvbnRleHQpOworICAgIH0KIAogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0
b2tlbkxvY2F0aW9uKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRl
eCAyZjYwNjhiNmU1OTYuLmNmZmRhYmVhOThjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5oCkBAIC0yMzQsNiArMjM0LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFNvdXJj
ZVBhcnNlTW9kZTo6U2V0dGVyTW9kZToKICAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1l
dGhvZE1vZGU6CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlh
bGl6ZXJNb2RlOgorICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNCbG9j
a01vZGU6CiAgICAgICAgICAgICBzZXRJc0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsK
IApAQCAtMjc3LDYgKzI3OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzQ2F0Y2hCbG9ja1Nj
b3BlKCkgeyBtX2lzQ2F0Y2hCbG9ja1Njb3BlID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNDYXRjaEJs
b2NrU2NvcGUoKSB7IHJldHVybiBtX2lzQ2F0Y2hCbG9ja1Njb3BlOyB9CiAKKyAgICB2b2lkIHNl
dElzU3RhdGljQmxvY2tTY29wZSgpIHsgbV9pc1N0YXRpY0Jsb2NrU2NvcGUgPSB0cnVlOyB9Cisg
ICAgYm9vbCBpc1N0YXRpY0Jsb2NrU2NvcGUoKSB7IHJldHVybiBtX2lzU3RhdGljQmxvY2tTY29w
ZTsgfQorCiAgICAgdm9pZCBzZXRJc0xleGljYWxTY29wZSgpIAogICAgIHsgCiAgICAgICAgIG1f
aXNMZXhpY2FsU2NvcGUgPSB0cnVlOwpAQCAtODk1LDYgKzg5OSw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2lzR2xvYmFsQ29kZVNjb3BlIDogMSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU2lt
cGxlQ2F0Y2hQYXJhbWV0ZXJTY29wZSA6IDEgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0NhdGNo
QmxvY2tTY29wZSA6IDEgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1N0YXRpY0Jsb2NrU2NvcGUg
OiAxIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNGdW5jdGlvbkJvdW5kYXJ5IDogMSB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2lzVmFsaWRTdHJpY3RNb2RlIDogMSB7IHRydWUgfTsKICAgICBib29s
IG1faGFzQXJndW1lbnRzIDogMSB7IGZhbHNlIH07CkBAIC0xNzU1LDcgKzE3NjAsNyBAQCBwcml2
YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJz
ZUV4cHJlc3Npb25TdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVu
dChUcmVlQnVpbGRlciYsIGJvb2wgYWxsb3dGdW5jdGlvbkRlY2xhcmF0aW9uQXNTdGF0ZW1lbnQp
OwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUlm
U3RhdGVtZW50KFRyZWVCdWlsZGVyJik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlU3RhdGVtZW50IHBhcnNlQmxvY2tTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImLCBib29sIGlz
Q2F0Y2hCbG9jayA9IGZhbHNlKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVTdGF0ZW1lbnQgcGFyc2VCbG9ja1N0YXRlbWVudChUcmVlQnVpbGRlciYsIGJvb2wgaXNDYXRj
aEJsb2NrID0gZmFsc2UsIGJvb2wgaXNTdGF0aWNCbG9jayA9IGZhbHNlKTsKIAogICAgIGVudW0g
Y2xhc3MgSXNPbmx5Q2hpbGRPZlN0YXRlbWVudCB7IFllcywgTm8gfTsKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlRXhwcmVzc2lvbihUcmVlQnVp
bGRlciYsIElzT25seUNoaWxkT2ZTdGF0ZW1lbnQgPSBJc09ubHlDaGlsZE9mU3RhdGVtZW50OjpO
byk7CkBAIC0xODc4LDcgKzE4ODMsNyBAQCBwcml2YXRlOgogCiAgICAgQUxXQVlTX0lOTElORSBi
b29sIGNhblVzZUlkZW50aWZpZXJBd2FpdCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9wYXJz
ZXJTdGF0ZS5hbGxvd0F3YWl0ICYmICFjdXJyZW50U2NvcGUoKS0+aXNBc3luY0Z1bmN0aW9uKCkg
JiYgbV9zY3JpcHRNb2RlICE9IEpTUGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlOworICAgICAgICBy
ZXR1cm4gbV9wYXJzZXJTdGF0ZS5hbGxvd0F3YWl0ICYmICFjdXJyZW50U2NvcGUoKS0+aXNBc3lu
Y0Z1bmN0aW9uKCkgJiYgIWN1cnJlbnRTY29wZSgpLT5pc1N0YXRpY0Jsb2NrU2NvcGUoKSAmJiBt
X3NjcmlwdE1vZGUgIT0gSlNQYXJzZXJTY3JpcHRNb2RlOjpNb2R1bGU7CiAgICAgfQogCiAgICAg
Ym9vbCBpc0Rpc2FsbG93ZWRJZGVudGlmaWVyWWllbGQoY29uc3QgSlNUb2tlbiYgdG9rZW4pCkBA
IC0xOTM2LDYgKzE5NDEsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKCFtX3BhcnNl
clN0YXRlLmFsbG93QXdhaXQgfHwgY3VycmVudFNjb3BlKCktPmlzQXN5bmNGdW5jdGlvbigpKQog
ICAgICAgICAgICAgcmV0dXJuICJpbiBhbiBhc3luYyBmdW5jdGlvbiI7CisgICAgICAgIGlmIChj
dXJyZW50U2NvcGUoKS0+aXNTdGF0aWNCbG9ja1Njb3BlKCkpCisgICAgICAgICAgICByZXR1cm4g
ImNyb3NzIHN0YXRpYyBibG9jayBib3VuZGFyeSI7CiAgICAgICAgIGlmIChtX3NjcmlwdE1vZGUg
PT0gSlNQYXJzZXJTY3JpcHRNb2RlOjpNb2R1bGUpCiAgICAgICAgICAgICByZXR1cm4gImluIGEg
bW9kdWxlIjsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE5NTIs
NiArMTk1OSwzMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZmluZENsb3NldEZ1bmN0aW9uU2NvcGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZpbmRTY29wZVVudGlsU3RhdGljQmxvY2soWyZdKHVuc2lnbmVkIGkp
IHsKKyAgICAgICAgICAgIHJldHVybiBtX3Njb3BlU3RhY2tbaV0uaXNGdW5jdGlvbigpOworICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZmluZENsb3NldEFzeW5j
RnVuY3Rpb25TY29wZSgpCisgICAgeworICAgICAgICByZXR1cm4gZmluZFNjb3BlVW50aWxTdGF0
aWNCbG9jayhbJl0odW5zaWduZWQgaSkgeworICAgICAgICAgICAgcmV0dXJuIG1fc2NvcGVTdGFj
a1tpXS5pc0FzeW5jRnVuY3Rpb24oKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSXNTY29wZUZ1bmN0b3I+CisgICAgQUxXQVlTX0lOTElORSBib29sIGZpbmRT
Y29wZVVudGlsU3RhdGljQmxvY2soY29uc3QgSXNTY29wZUZ1bmN0b3ImIGlzU2NvcGVGdW5jdG9y
KSB7CisgICAgICAgIHVuc2lnbmVkIGkgPSBtX3Njb3BlU3RhY2suc2l6ZSgpIC0gMTsKKyAgICAg
ICAgd2hpbGUgKGkgPj0gMCkgeworICAgICAgICAgICAgaWYgKG1fc2NvcGVTdGFja1tpXS5pc1N0
YXRpY0Jsb2NrU2NvcGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoaXNTY29wZUZ1bmN0b3IoaSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAtLWk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCiAgICAgZW51bSBjbGFzcyBGdW5jdGlvblBhcnNlUGhhc2UgeyBQYXJhbWV0ZXJzLCBCb2R5
IH07CiAgICAgc3RydWN0IFBhcnNlclN0YXRlIHsKICAgICAgICAgaW50IGFzc2lnbm1lbnRDb3Vu
dCB7IDAgfTsKQEAgLTE5NjQsNiArMTk5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIqIGxhc3RQcml2YXRlTmFtZSB7IG51bGxwdHIgfTsKICAgICAgICAgYm9vbCBhbGxv
d0F3YWl0IHsgdHJ1ZSB9OwogICAgICAgICBib29sIGlzUGFyc2luZ0NsYXNzRmllbGRJbml0aWFs
aXplciB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaXNQYXJzaW5nQ2xhc3NTdGF0aWNCbG9jayB7
IGZhbHNlIH07CiAgICAgfTsKIAogICAgIC8vIElmIHlvdSdyZSB1c2luZyB0aGlzIGRpcmVjdGx5
LCB5b3UgcHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlck1vZGVzLmgKaW5kZXggN2EwNjZhNmM2YTk2Li45YmEwMzU0OGY3ZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmgKQEAgLTY5LDYgKzY5LDcg
QEAgZW51bSBjbGFzcyBTb3VyY2VQYXJzZU1vZGUgOiB1aW50OF90IHsKICAgICBBc3luY0dlbmVy
YXRvcldyYXBwZXJNZXRob2RNb2RlICAgPSAxNywKICAgICBHZW5lcmF0b3JXcmFwcGVyTWV0aG9k
TW9kZSAgICAgICAgPSAxOCwKICAgICBDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlICAgICAgICAg
PSAxOSwKKyAgICBDbGFzc1N0YXRpY0Jsb2NrTW9kZSAgICAgICAgICAgICAgPSAyMCwKIH07CiAK
IGNsYXNzIFNvdXJjZVBhcnNlTW9kZVNldCB7IApAQCAtMTE4LDcgKzExOSw4IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0Z1bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUp
CiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JCb2R5TW9kZSwKICAgICAg
ICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGUsCiAg
ICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZSwK
LSAgICAgICAgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKS5jb250
YWlucyhwYXJzZU1vZGUpOworICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0
aWFsaXplck1vZGUsCisgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNCbG9ja01v
ZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7CiB9IAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNBc3lu
Y0Z1bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpIApAQCAtMjA2LDcg
KzIwOCw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc01ldGhvZFBhcnNlTW9kZShTb3VyY2VQYXJz
ZU1vZGUgcGFyc2VNb2RlKQogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OlNldHRlck1vZGUsCiAg
ICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9kZSwKICAgICAgICAgU291cmNlUGFyc2VN
b2RlOjpBc3luY01ldGhvZE1vZGUsCi0gICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5l
cmF0b3JXcmFwcGVyTWV0aG9kTW9kZSkuY29udGFpbnMocGFyc2VNb2RlKTsKKyAgICAgICAgU291
cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlLAorICAgICAgICBT
b3VyY2VQYXJzZU1vZGU6OkNsYXNzU3RhdGljQmxvY2tNb2RlKS5jb250YWlucyhwYXJzZU1vZGUp
OwogfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNHZW5lcmF0b3JPckFzeW5jRnVuY3Rpb25Cb2R5
UGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCmluZGV4IGVkMGRhNWZlNTY2Ni4uYzI4NzllNWVh
YTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNr
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaApA
QCAtMTQ4LDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIE9wdGlvblNl
dDxMZXhlckZsYWdzPiBEb250QnVpbGRTdHJpbmdzID0gTGV4ZXJGbGFnczo6RG9udEJ1aWxkU3Ry
aW5nczsKIAogICAgIGludCBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIFNvdXJjZUVs
ZW1lbnRzUmVzdWx0OyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBp
bnQsIGludCwgc2l6ZV90LCBib29sKSB7IHJldHVybiBDYWxsRXhwcjsgfQorICAgIEV4cHJlc3Np
b25UeXBlIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25UeXBlLCBib29sLCBpbnQsIGludCwgaW50LCBpbnQsIHNpemVfdCwgYm9vbCwgYm9vbCA9
IGZhbHNlKSB7IHJldHVybiBDYWxsRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUNv
bW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4g
Q29tbWFFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgYXBwZW5kVG9Db21tYUV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNz
aW9uVHlwZSkgeyByZXR1cm4gQ29tbWFFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgbWFrZUFz
c2lnbk5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIE9wZXJhdG9y
LCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXNz
aWdubWVudEV4cHI7IH0KQEAgLTE5NSw3ICsxOTUsNyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lv
blR5cGUgY3JlYXRlWWllbGQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUs
IGJvb2wsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIFlpZWxkRXhwcjsgfQogICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZUF3YWl0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBl
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBBd2FpdEV4cHI7IH0KICAgICBDbGFzc0V4cHJlc3Np
b24gY3JlYXRlQ2xhc3NFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckNs
YXNzSW5mbzxTeW50YXhDaGVja2VyPiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmJiwgVmFyaWFibGVF
bnZpcm9ubWVudCYmLCBFeHByZXNzaW9uVHlwZSwgRXhwcmVzc2lvblR5cGUsIFByb3BlcnR5TGlz
dCwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQ2xhc3NFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5
cGUgY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNl
ckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQor
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCBib29sID0gZmFs
c2UpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUdl
bmVyYXRvckZ1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBjb25zdCBQYXJzZXJG
dW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mLCBjb25zdCBJZGVudGlmaWVyJikgeyByZXR1cm4g
RnVuY3Rpb25FeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXN5bmNGdW5jdGlvbkJv
ZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRh
eENoZWNrZXI+JikgeyByZXR1cm4gRnVuY3Rpb25FeHByOyB9CiAgICAgaW50IGNyZWF0ZUZ1bmN0
aW9uTWV0YWRhdGEoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBpbnQsIGludCwgaW50LCBJbXBsZW1lbnRhdGlvblZpc2li
aWxpdHksIExleGljYWxTY29wZUZlYXR1cmVzLCBDb25zdHJ1Y3RvcktpbmQsIFN1cGVyQmluZGlu
ZywgdW5zaWduZWQsIFNvdXJjZVBhcnNlTW9kZSwgYm9vbCkgeyByZXR1cm4gRnVuY3Rpb25Cb2R5
UmVzdWx0OyB9CkBAIC0yMzksNiArMjM5LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBQcm9wZXJ0eSh0eXBlKTsKICAgICB9CisgICAgUHJvcGVydHkgY3JlYXRlUHJvcGVydHko
Y29uc3QgSWRlbnRpZmllciosIFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBTdXBlckJpbmRpbmcs
IENsYXNzRWxlbWVudFRhZykKKyAgICB7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eSh0eXBlKTsK
KyAgICB9CiAgICAgaW50IGNyZWF0ZVByb3BlcnR5TGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBQcm9wZXJ0eSkgeyByZXR1cm4gUHJvcGVydHlMaXN0UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0
ZVByb3BlcnR5TGlzdChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBQcm9wZXJ0eSwgaW50KSB7IHJl
dHVybiBQcm9wZXJ0eUxpc3RSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlRWxlbWVudExpc3QoaW50
LCBpbnQpIHsgcmV0dXJuIEVsZW1lbnRzTGlzdFJlc3VsdDsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAKaW5kZXggMzc2NGU4
OTkzYjEwLi44Zjc5ZTQ2NmExMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApAQCAtMjA2LDYgKzIwNiw3IEBAIEpTU3Ry
aW5nKiBGdW5jdGlvbkV4ZWN1dGFibGU6OnRvU3RyaW5nU2xvdyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogCiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2Rl
OgogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOgor
ICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc1N0YXRpY0Jsb2NrTW9kZToKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbk1vZGU6CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9jbGFzcy1zdGF0aWMtYmxvY2suanMgYi9KU1Rlc3Rz
L3N0cmVzcy9jbGFzcy1zdGF0aWMtYmxvY2suanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi43OWM5YzQzMjg2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0
cmVzcy9jbGFzcy1zdGF0aWMtYmxvY2suanMKQEAgLTAsMCArMSwyNTEgQEAKK2Z1bmN0aW9uIGFz
c2VydChiKSB7CisgICAgaWYgKCFiKSB7CisgICAgICAgIHRocm93ICJXcm9uZyEiCisgICAgfQor
fQorCisvLyAtLS0tLS0tLS0tIHNpbmdsZSBzdGF0aWMgYmxvY2sgLS0tLS0tLS0tLSAKK3sKKyAg
ICB2YXIgeSA9ICdPdXRlciB5JzsKKworICAgIGNsYXNzIEEgeworICAgICAgICBzdGF0aWMgZmll
bGQgPSAnSW5uZXIgeSc7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAgICAgICB2YXIgeSA9IHRo
aXMuZmllbGQ7CisgICAgICAgIH0KKworICAgIH0KKworICAgIGFzc2VydCh5ID09ICdPdXRlciB5
Jyk7Cit9CisKKy8vICAtLS0tLS0tLS0tIG11bHRpcGxlIHN0YXRpYyBibG9ja3MgLS0tLS0tLS0t
LSAKK3sKKyAgICBjbGFzcyBDIHsKKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGFzc2Vy
dCh0aGlzLnggPT0gdW5kZWZpbmVkKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgeCA9IDEw
OworICAgICAgICBzdGF0aWMgeworICAgICAgICAgICAgYXNzZXJ0KHRoaXMueCA9PSAxMCk7Cisg
ICAgICAgICAgICBhc3NlcnQodGhpcy55ID09IHVuZGVmaW5lZCk7CisgICAgICAgIH0KKyAgICAg
ICAgc3RhdGljIHkgPSAyMDsKKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGFzc2VydCh0
aGlzLnkgPT0gMjApOworICAgICAgICB9CisgICAgfQorfQorCisvLyAgLS0tLS0tLS0tLSB1c2lu
ZyB0aGlzIC0tLS0tLS0tLS0gCit7CisgICAgY2xhc3MgQSB7CisgICAgICAgIHN0YXRpYyBmaWVs
ZCA9ICdBIHN0YXRpYyBmaWVsZCc7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAgICAgICBhc3Nl
cnQodGhpcy5maWVsZCA9PSAnQSBzdGF0aWMgZmllbGQnKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworLy8gIC0tLS0tLS0tLS0gdXNpbmcgc3VwZXIgLS0tLS0tLS0tLSAKK3sKKyAgICBjbGFzcyBB
IHsKKyAgICAgICAgc3RhdGljIGZpZWxkQSA9ICdBLmZpZWxkQSc7CisgICAgfQorICAgIGNsYXNz
IEIgZXh0ZW5kcyBBIHsKKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGFzc2VydChzdXBl
ci5maWVsZEEgPT0gJ0EuZmllbGRBJyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vICAtLS0t
LS0tLS0tIGFjY2VzcyB0byBwcml2YXRlIGZpZWxkcyAtLS0tLS0tLS0tIAoreworICAgIGxldCBn
ZXREUHJpdmF0ZUZpZWxkOworCisgICAgY2xhc3MgRCB7CisgICAgICAgICNwcml2YXRlRmllbGQ7
CisgICAgICAgIGNvbnN0cnVjdG9yKHYpIHsKKyAgICAgICAgICAgIHRoaXMuI3ByaXZhdGVGaWVs
ZCA9IHY7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGdldERQcml2
YXRlRmllbGQgPSAoZCkgPT4gZC4jcHJpdmF0ZUZpZWxkOworICAgICAgICB9CisgICAgfQorCisg
ICAgYXNzZXJ0KGdldERQcml2YXRlRmllbGQobmV3IEQoJ3ByaXZhdGUnKSkgPT0gJ3ByaXZhdGUn
KTsKK30KKworLy8gLS0tLS0tLS0tLSAiZnJpZW5kIiBhY2Nlc3MgLS0tLS0tLS0tLQoreworICAg
IGxldCBBLCBCOworCisgICAgbGV0IGZyaWVuZEE7CisKKyAgICBBID0gY2xhc3MgQSB7CisgICAg
ICAgICN4OworICAgICAgICBjb25zdHJ1Y3Rvcih4KSB7CisgICAgICAgICAgICB0aGlzLiN4ID0g
eDsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgeworICAgICAgICAgICAgZnJpZW5kQSA9IHsK
KyAgICAgICAgICAgICAgICBnZXRYKG9iaikgeyByZXR1cm4gb2JqLiN4IH0sCisgICAgICAgICAg
ICAgICAgc2V0WChvYmosIHZhbHVlKSB7IG9iai4jeCA9IHZhbHVlIH0KKyAgICAgICAgICAgIH07
CisgICAgICAgIH0KKyAgICAgICAgZ2V0WCgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLiN4
OworICAgICAgICB9CisgICAgfTsKKworICAgIEIgPSBjbGFzcyBCIHsKKyAgICAgICAgY29uc3Ry
dWN0b3IoYSkgeworICAgICAgICAgICAgY29uc3QgeCA9IGZyaWVuZEEuZ2V0WChhKTsKKyAgICAg
ICAgICAgIGZyaWVuZEEuc2V0WChhLCB4ICsgMzIpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGxldCBhID0gbmV3IEEoMTApOworICAgIG5ldyBCKGEpOworCisgICAgYXNzZXJ0KGEuZ2V0WCgp
ID09IDQyKTsKK30KKworLy8gLS0tLS0tLS0tLSBPdGhlcnMgLS0tLS0tLS0tLQoreworICAgIGZ1
bmN0aW9uIGRvU29tZXRoaW5nV2l0aCh4KSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICB5OiB4ICsgMSwKKyAgICAgICAgICAgIHo6IHggKyAyCisgICAgICAgIH07CisgICAgfQorCisg
ICAgY2xhc3MgQyB7CisgICAgICAgIHN0YXRpYyB4ID0gMTA7CisgICAgICAgIHN0YXRpYyB5Owor
ICAgICAgICBzdGF0aWMgejsKKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgY29uc3Qgb2JqID0gZG9Tb21ldGhpbmdXaXRoKHRoaXMueCk7CisgICAg
ICAgICAgICAgICAgdGhpcy55ID0gb2JqLnk7CisgICAgICAgICAgICAgICAgdGhpcy56ID0gb2Jq
Lno7CisgICAgICAgICAgICB9IGNhdGNoIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGFzc2VydChDLnkgPT0gMTEpOworICAgIGFzc2VydChDLnogPT0gMTIpOworfQor
Cit7CisgICAgY2xhc3MgQyB7CisgICAgICAgIHN0YXRpYyB5OworICAgICAgICBzdGF0aWMgejsK
KyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdGhy
b3cgImVyciI7CisgICAgICAgICAgICB9IGNhdGNoIHsKKyAgICAgICAgICAgICAgICB0aGlzLnkg
PSAxMzsKKyAgICAgICAgICAgICAgICB0aGlzLnogPSAxNDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGFzc2VydChDLnkgPT0gMTMpOworICAgIGFzc2VydChDLnogPT0g
MTQpOworfQorCit7CisgICAgY2xhc3MgQyB7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAgICAg
ICBmdW5jdGlvbiBpbm5lcigpIHsKKyAgICAgICAgICAgICAgICB0cnkgeyB9IGNhdGNoIChhd2Fp
dCkgeyB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBjbGFz
cyBDIHsKKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGlubmVy
KCkgeworICAgICAgICAgICAgICAgIGF3YWl0IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3sKKyAgICBhc3luYyBmdW5jdGlvbiBpbm5lcigpIHsKKyAgICAgICAgY2xh
c3MgQyB7CisgICAgICAgICAgICBzdGF0aWMgeworICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0
aW9uIGlubmVyKCkgeworICAgICAgICAgICAgICAgICAgICBhd2FpdCAwOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworeworICAgIHZhciB2
YWx1ZSA9IG51bGw7CisgICAgY2xhc3MgQyB7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAgICAg
ICBmdW5jdGlvbiBpbm5lcigpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldy50YXJnZXQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbm5lcigpOworICAgICAgICB9CisgICAgfQor
ICAgIGFzc2VydCh2YWx1ZSA9PSB1bmRlZmluZWQpOworfQorCit7CisgICAgY2xhc3MgQyB7Cisg
ICAgICAgIHN0YXRpYyB7CisgICAgICAgICAgICB2YWx1ZSA9IG5ldy50YXJnZXQ7CisgICAgICAg
IH0KKyAgICB9CisgICAgYXNzZXJ0KHZhbHVlID09IHVuZGVmaW5lZCk7Cit9CisKK3sKKyAgICBj
bGFzcyBDIHsKKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGlubmVyKCkg
eworICAgICAgICAgICAgICAgIGxldCBhd2FpdCA9IDEwOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCit7CisgICAgY2xhc3MgQyB7CisgICAgICAgIHN0YXRpYyB7CisgICAg
ICAgICAgICBmdW5jdGlvbiBpbm5lcigpIHsKKyAgICAgICAgICAgICAgICBbYXdhaXRdKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBjbGFzcyBDIHsKKyAg
ICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGlubmVyKCkgeworICAgICAgICAg
ICAgICAgIFthcmd1bWVudHNdKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3sKKyAgICBjbGFzcyBDIHsKKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGZ1bmN0
aW9uIGlubmVyKCkgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30K
</data>
<flag name="commit-queue"
          id="491271"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>462685</attachid>
            <date>2022-09-28 10:05:29 -0700</date>
            <delta_ts>2022-09-28 11:02:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235085-20220928100529.patch</filename>
            <type>text/plain</type>
            <size>52719</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">RnJvbSA2NWUyZDc2YjQ5ZWE0N2YzZTZhMWU3Yjg3MTM1Yjg4YzNlYjRlMzcwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBZaWppYSBIdWFuZyA8aHlqb3JjMUBnbWFpbC5jb20+CkRhdGU6
IFdlZCwgMjggU2VwIDIwMjIgMTA6MDI6MDcgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbSlNDXSBJ
bXBsZW1lbnQgc3VwcG9ydCBmb3IgY2xhc3Mgc3RhdGljIGluaXRpYWxpemF0aW9uCiBibG9ja3Mg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTA4NSByZGFyOi8vOTkw
NTY4ODIKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0
PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKQ2xhc3Mgc3RhdGljIGluaXRpYWxpemF0aW9uIGJsb2NrIGlzIGEgbmV3IGZl
YXR1cmUgb2YgYSBjbGFzcyB0byBwZXJmb3JtCmFkZGl0aW9uYWwgc3RhdGljIGluaXRpYWxpemF0
aW9uIGR1cmluZyBjbGFzcyBkZWZpbml0aW9uIGV2YWx1YXRpb24uCgpgYGAKY2xhc3MgQyB7CiAg
ICBzdGF0aWMgeyAvKiDigKYgKi8gfQp9CmBgYAoKVEMzOSBTcGVjOiBodHRwczovL3RjMzkuZXMv
cHJvcG9zYWwtY2xhc3Mtc3RhdGljLWJsb2NrLwpUQzM5IFByb3Bvc2FsOiBodHRwczovL2dpdGh1
Yi5jb20vdGMzOS9wcm9wb3NhbC1jbGFzcy1zdGF0aWMtYmxvY2sKTUROIFdlYiBEb2M6IGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJl
bmNlL0NsYXNzZXMvQ2xhc3Nfc3RhdGljX2luaXRpYWxpemF0aW9uX2Jsb2NrcwoKSW4gdGhpcyBw
YXRjaCwgc3RhdGljIGJsb2NrcyBhcmUgaW1wbGVtZW50ZWQgYXMgZnVuY3Rpb25zIHdoaWNoIGFy
ZQpldmFsdWF0ZWQgYWxvbmcgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2Ygc3RhdGljIGNsYXNz
IGZpZWxkcyBkdXJpbmcKY2xhc3MgZGVmaW5pdGlvbiBldmFsdWF0aW9uLiBUaGlzIGNhbiBiZSBm
dXJ0aGVyIG9wdGltaXplZCBieSBpbmxpbmluZwpzdGF0aWMgYmxvY2sgZnVuY3Rpb25zIHRvIHRo
ZSBmaWVsZCBpbml0aWFsaXphdGlvbi4KCiogSlNUZXN0cy9zdHJlc3MvY2xhc3Mtc3RhdGljLWJs
b2NrLmpzOiBBZGRlZC4KKGFzc2VydCk6CihBKToKKGFzc2VydC5DKToKKGFzc2VydC5CKToKKGFz
c2VydC5EKToKKGFzc2VydC5BKToKKGFzc2VydC5BLmZyaWVuZEEucHJvdG90eXBlLmdldFgpOgoo
YXNzZXJ0LkEuZnJpZW5kQS5wcm90b3R5cGUuc2V0WCk6Cihhc3NlcnQuQS5wcm90b3R5cGUuZ2V0
WCk6Cihhc3NlcnQuaW5uZXIpOgooY2F0Y2guQy5wcm90b3R5cGUuYXN5bmMgaW5uZXIpOgooY2F0
Y2guQyk6CihjYXRjaCk6Cihhc3luYyBpbm5lci5DLnByb3RvdHlwZS5hc3luYyBpbm5lcik6Cihh
c3luYyBpbm5lci5DKToKKGFzeW5jIGlubmVyKToKKEMuaW5uZXIpOgooQyk6Cihhd2FpdC5DLmlu
bmVyKToKKGF3YWl0LkMpOgooYXdhaXQpOgooYXJndW1lbnRzLkMuaW5uZXIpOgooYXJndW1lbnRz
LkMpOgooYXJndW1lbnRzKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHA6CihKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZSk6CihK
U0M6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKEpTQzo6RnVuY0V4cHJO
b2RlOjplbWl0Qnl0ZWNvZGUpOgoqIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVp
bGRlci5oOgooSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGdW5jdGlvbkV4cHIpOgooSlNDOjpBU1RC
dWlsZGVyOjpjcmVhdGVQcm9wZXJ0eSk6CihKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNh
bGxOb2RlKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aDoKKEpTQzo6UHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUpOgooSlNDOjpGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSk6CihKU0M6OkZ1bmNFeHByTm9kZTo6RnVu
Y0V4cHJOb2RlKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmg6CihKU0M6
OkZ1bmNFeHByTm9kZTo6aXNTdGF0aWNCbG9ja0Z1bmN0aW9uIGNvbnN0KToKKiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpp
c0Fycm93RnVuY3Rpb25QYXJhbWV0ZXJzKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
U3RhdGVtZW50TGlzdEl0ZW0pOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uTGlzdCk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUJyZWFrU3Rh
dGVtZW50KToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ29udGludWVTdGF0ZW1lbnQp
OgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQpOgooSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VUcnlTdGF0ZW1lbnQpOgooSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VCbG9ja1N0YXRlbWVudCk6CihKU0M6OnN0cmluZ0FydGljbGVGb3JGdW5jdGlv
bk1vZGUpOgooSlNDOjpzdHJpbmdGb3JGdW5jdGlvbk1vZGUpOgooSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VGdW5jdGlvblBhcmFtZXRlcnMpOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VGdW5jdGlvbkluZm8pOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyk6
CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRmllbGRJbml0aWFsaXplclNvdXJj
ZUVsZW1lbnRzKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6
CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOgooSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgoqIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmg6CihKU0M6OlNjb3BlOjpzZXRTb3VyY2VQYXJzZU1vZGUp
OgooSlNDOjpTY29wZTo6c2V0SXNTdGF0aWNCbG9ja1Njb3BlKToKKEpTQzo6U2NvcGU6OmlzU3Rh
dGljQmxvY2tTY29wZSk6CihKU0M6OlBhcnNlcjo6Y2FuVXNlSWRlbnRpZmllckF3YWl0KToKKEpT
Qzo6UGFyc2VyOjpkaXNhbGxvd2VkSWRlbnRpZmllckF3YWl0UmVhc29uKToKKEpTQzo6UGFyc2Vy
OjpmaW5kQ2xvc2V0RnVuY3Rpb25TY29wZSk6CihKU0M6OlBhcnNlcjo6ZmluZENsb3NldEFzeW5j
RnVuY3Rpb25TY29wZSk6CihKU0M6OlBhcnNlcjo6ZmluZFNjb3BlVW50aWxTdGF0aWNCbG9jayk6
CiogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oOgooSlNDOjppc0Z1
bmN0aW9uUGFyc2VNb2RlKToKKEpTQzo6aXNNZXRob2RQYXJzZU1vZGUpOgoqIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oOgooSlNDOjpTeW50YXhDaGVja2VyOjpt
YWtlRnVuY3Rpb25DYWxsTm9kZSk6CihKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZ1bmN0aW9u
RXhwcik6CihKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVByb3BlcnR5KToKKiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgooSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OnRvU3RyaW5nU2xvdyk6Ci0tLQogLi4uL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwICAgICAgICAgICAgIHwgIDI1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0FTVEJ1aWxkZXIuaCAgICAgfCAgMTQgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oICAgICAgICAgIHwgIDI3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAgICAgICAgfCAgOTQgKysrKystLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaCAgICAgICAgIHwgIDM5ICsrLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJNb2Rlcy5oICAgIHwgICA3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1N5bnRheENoZWNrZXIuaCAgfCAgIDggKy0KIC4uLi9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0
YWJsZS5jcHAgICAgICAgICAgICB8ICAgMSArCiBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1zdGF0aWMt
YmxvY2suanMgICAgICAgICAgfCAyNTEgKysrKysrKysrKysrKysrKysrCiBKU1Rlc3RzL3Rlc3Qy
NjIvY29uZmlnLnlhbWwgICAgICAgICAgICAgICAgICAgfCAgIDEgLQogMTEgZmlsZXMgY2hhbmdl
ZCwgNDQ1IGluc2VydGlvbnMoKyksIDQwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0
IEpTVGVzdHMvc3RyZXNzL2NsYXNzLXN0YXRpYy1ibG9jay5qcwoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCBkMGQzYmFm
MGRiMzEuLmMyMGM0MjgzNGIzMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtNjQ5LDcgKzY0OSw3IEBAIFJlZ2lzdGVy
SUQqIFByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChwLT5pc1N0YXRpY0NsYXNzRmllbGQoKSkgeworICAgICAgICBpZiAocC0+aXNTdGF0
aWNDbGFzc0VsZW1lbnQoKSkgewogICAgICAgICAgICAgQVNTRVJUKHN0YXRpY0ZpZWxkTG9jYXRp
b25zKTsKICAgICAgICAgICAgIHN0YXRpY0ZpZWxkTG9jYXRpb25zLT5hcHBlbmQocC0+cG9zaXRp
b24oKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTcxOSw3ICs3MTksNyBAQCBSZWdpc3Rl
cklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAocC0+aXNTdGF0aWNDbGFzc0ZpZWxkKCkpIHsKKyAgICAgICAg
ICAgIGlmIChwLT5pc1N0YXRpY0NsYXNzRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKHN0YXRpY0ZpZWxkTG9jYXRpb25zKTsKICAgICAgICAgICAgICAgICBzdGF0aWNGaWVsZExv
Y2F0aW9ucy0+YXBwZW5kKHAtPnBvc2l0aW9uKCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMTI1NiwxMSArMTI1NiwxOCBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZQogICAgIGlm
IChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0T3B0aW9uYWxD
aGVjayhmdW5jLmdldCgpKTsKIAotICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5l
cmF0b3IsIG1fYXJncyk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhp
c1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVy
YXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgp
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJldDsKKyAgICBpZiAoaXNTdGF0aWNCbG9ja0Z1bmN0aW9uQ2FsbCgpKSB7CisgICAgICAg
IENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG51bGxwdHIpOworICAgICAg
ICBnZW5lcmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBnZW5lcmF0b3Iu
dGhpc1JlZ2lzdGVyKCkpOworICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQ
b3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVn
Z2FibGVDYWxsOjpZZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9h
ZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
cmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCks
IGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsKKyAgICB9CiAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXQuZ2V0KCk7
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00OTgyLDYgKzQ5
ODksMTIgQEAgdm9pZCBGdW5jRGVjbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKIAogUmVnaXN0ZXJJRCogRnVuY0V4cHJOb2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogeworICAgIGlmIChpc1N0YXRpY0Jsb2NrRnVuY3Rpb24oKSkgeworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gaG9tZU9iamVjdCA9IGVtaXRIb21lT2JqZWN0Rm9yQ2FsbGVlKGdlbmVyYXRv
cik7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXMgPSBnZW5lcmF0b3IuZW1pdE5ld0Z1
bmN0aW9uRXhwcmVzc2lvbihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCB0aGlzKTsK
KyAgICAgICAgZW1pdFB1dEhvbWVPYmplY3QoZ2VuZXJhdG9yLCByZXMuZ2V0KCksIGhvbWVPYmpl
Y3QuZ2V0KCkpOworICAgICAgICByZXR1cm4gcmVzLmdldCgpOworICAgIH0KICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24oZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KSwgdGhpcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RC
dWlsZGVyLmgKaW5kZXggNDlkODE4NTkxYTQ0Li5lMTRhZmIzYTAzYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBAIC0xMzAsNyArMTMwLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgT3B0aW9uU2V0PExleGVyRmxhZ3M+IERvbnRCdWlsZFN0
cmluZ3MgPSB7IH07CiAKICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpbmFyeU5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgaW50IHRva2VuLCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBC
aW5hcnlPcEluZm8+LCBzdGQ6OnBhaXI8RXhwcmVzc2lvbk5vZGUqLCBCaW5hcnlPcEluZm8+KTsK
LSAgICBFeHByZXNzaW9uTm9kZSogbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIs
IEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVu
ZCwgc2l6ZV90IGNhbGxPckFwcGx5Q2hpbGREZXB0aCwgYm9vbCBpc09wdGlvbmFsQ2FsbCk7Cisg
ICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHByZXZpb3VzQmFzZVdhc1N1cGVyLCBB
cmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQs
IHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wgaXNPcHRpb25hbENhbGwsIGJvb2wg
aXNTdGF0aWNDbGFzc0Jsb2NrRnVuY3Rpb25DYWxsID0gZmFsc2UpOwogCiAgICAgSlNDOjpTb3Vy
Y2VFbGVtZW50cyogY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiBuZXcgKG1fcGFyc2Vy
QXJlbmEpIEpTQzo6U291cmNlRWxlbWVudHMoKTsgfQogCkBAIC00MjUsMTAgKzQyNSwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAotICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29u
c3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBmdW5jdGlvbkluZm8pCisgICAgRXhw
cmVzc2lvbk5vZGUqIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88QVNUQnVpbGRlcj4mIGZ1bmN0aW9uSW5m
bywgYm9vbCBpc1N0YXRpY0Jsb2NrRnVuY3Rpb24gPSBmYWxzZSkKICAgICB7CiAgICAgICAgIEZ1
bmNFeHByTm9kZSogcmVzdWx0ID0gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jRXhwck5vZGUobG9j
YXRpb24sICpmdW5jdGlvbkluZm8ubmFtZSwgZnVuY3Rpb25JbmZvLmJvZHksCi0gICAgICAgICAg
ICBtX3NvdXJjZUNvZGUtPnN1YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LCBm
dW5jdGlvbkluZm8uZW5kT2Zmc2V0LCBmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbklu
Zm8ucGFyYW1ldGVyc1N0YXJ0Q29sdW1uKSk7CisgICAgICAgICAgICBtX3NvdXJjZUNvZGUtPnN1
YkV4cHJlc3Npb24oZnVuY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LCBmdW5jdGlvbkluZm8uZW5kT2Zm
c2V0LCBmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8ucGFyYW1ldGVyc1N0YXJ0
Q29sdW1uKSwgaXNTdGF0aWNCbG9ja0Z1bmN0aW9uKTsKICAgICAgICAgZnVuY3Rpb25JbmZvLmJv
ZHktPnNldExvYyhmdW5jdGlvbkluZm8uc3RhcnRMaW5lLCBmdW5jdGlvbkluZm8uZW5kTGluZSwg
bG9jYXRpb24uc3RhcnRPZmZzZXQsIGxvY2F0aW9uLmxpbmVTdGFydE9mZnNldCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNTIwLDYgKzUyMCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFByb3BlcnR5Tm9kZShpZGVudCwgbWV0aG9k
RGVmLCB0eXBlLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgdGFnKTsKICAgICB9CiAKKyAgICBQcm9w
ZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlOb2RlOjpUeXBlIHR5cGUsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcsIENsYXNz
RWxlbWVudFRhZyB0YWcpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
KSBQcm9wZXJ0eU5vZGUoKnByb3BlcnR5TmFtZSwgdHlwZSwgc3VwZXJCaW5kaW5nLCB0YWcpOwor
ICAgIH0KICAgICBQcm9wZXJ0eU5vZGUqIGNyZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIq
IHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5vZGUqIG5vZGUsIFByb3BlcnR5Tm9kZTo6VHlwZSB0
eXBlLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nLCBJbmZlck5hbWUgaW5mZXJOYW1lLCBDbGFz
c0VsZW1lbnRUYWcgdGFnKQogICAgIHsKICAgICAgICAgaWYgKGluZmVyTmFtZSA9PSBJbmZlck5h
bWU6OkFsbG93ZWQpIHsKQEAgLTE0MTcsNyArMTQyMSw3IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RC
dWlsZGVyOjptYWtlQ29hbGVzY2VOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4CiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ29hbGVzY2VOb2RlKGxvY2F0aW9u
LCBleHByMSwgZXhwcjIsIGhhc0Fic29yYmVkT3B0aW9uYWxDaGFpbik7CiB9CiAKLUV4cHJlc3Np
b25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VX
YXNTdXBlciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90RW5kLCBzaXplX3QgY2FsbE9yQXBwbHlDaGlsZERlcHRoLCBib29sIGlzT3B0aW9uYWxD
YWxsKQorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29s
IHByZXZpb3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJv
b2wgaXNPcHRpb25hbENhbGwsIGJvb2wgaXNTdGF0aWNCbG9ja0Z1bmN0aW9uQ2FsbCkKIHsKICAg
ICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90LmxpbmVTdGFydE9mZnNldCk7CiAgICAgaWYg
KGZ1bmMtPmlzU3VwZXJOb2RlKCkpCkBAIC0xNDQzLDcgKzE0NDcsNyBAQCBFeHByZXNzaW9uTm9k
ZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiBsb2NhdGlvbgogICAgIH0KIAogICAgIGlmICghZnVuYy0+aXNMb2NhdGlvbigpKQotICAgICAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRp
b24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CisgICAgICAgIHJl
dHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShsb2NhdGlvbiwg
ZnVuYywgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kLCBpc1N0YXRpY0Jsb2NrRnVu
Y3Rpb25DYWxsKTsKICAgICBpZiAoZnVuYy0+aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIFJl
c29sdmVOb2RlKiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihmdW5jKTsKICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IHJlc29sdmUtPmlkZW50aWZpZXIo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVj
dG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgK
aW5kZXggYjRkZjI0NDU4OTI2Li5lMDlmYTA2ZTg4NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCkBAIC0yNTAsNiArMjUwLDE3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKKyAgICBpbmxpbmUgUHJvcGVydHlOb2RlOjpQ
cm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgVHlwZSB0eXBlLCBTdXBlckJpbmRp
bmcgc3VwZXJCaW5kaW5nLCBDbGFzc0VsZW1lbnRUYWcgdGFnKQorICAgICAgICA6IG1fbmFtZSgm
bmFtZSkKKyAgICAgICAgLCBtX2V4cHJlc3Npb24obnVsbHB0cikKKyAgICAgICAgLCBtX2Fzc2ln
bihudWxscHRyKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fbmVlZHNTdXBl
ckJpbmRpbmcoc3VwZXJCaW5kaW5nID09IFN1cGVyQmluZGluZzo6TmVlZGVkKQorICAgICAgICAs
IG1fY2xhc3NFbGVtZW50VGFnKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0YWcpKQorICAgICAgICAs
IG1faXNPdmVycmlkZGVuQnlEdXBsaWNhdGUoZmFsc2UpCisgICAgeworICAgIH0KKwogICAgIGlu
bGluZSBQcm9wZXJ0eU5vZGU6OlByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBF
eHByZXNzaW9uTm9kZSogYXNzaWduLCBUeXBlIHR5cGUsIFN1cGVyQmluZGluZyBzdXBlckJpbmRp
bmcsIENsYXNzRWxlbWVudFRhZyB0YWcpCiAgICAgICAgIDogbV9uYW1lKCZuYW1lKQogICAgICAg
ICAsIG1fZXhwcmVzc2lvbihudWxscHRyKQpAQCAtMzk4LDExICs0MDksMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGluZSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6
OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kKQorICAgIGlubGluZSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6
OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogZXhwciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mIGRpdm90RW5kLCBjb25zdCBib29sIGlzU3RhdGljQmxvY2tGdW5jdGlvbkNh
bGwpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgVGhyb3dh
YmxlRXhwcmVzc2lvbkRhdGEoZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAs
IG1fZXhwcihleHByKQogICAgICAgICAsIG1fYXJncyhhcmdzKQorICAgICAgICAsIG1faXNTdGF0
aWNCbG9ja0Z1bmN0aW9uQ2FsbChpc1N0YXRpY0Jsb2NrRnVuY3Rpb25DYWxsKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdFN0YXJ0Lm9mZnNldCk7CiAgICAgfQpA
QCAtMTAxOSwxMyArMTAzMSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbV9tZXRhZGF0
YS0+ZmluaXNoUGFyc2luZyhzb3VyY2UsIGlkZW50LCBmdW5jdGlvbk1vZGUpOwogICAgIH0KIAot
ICAgIGlubGluZSBGdW5jRXhwck5vZGU6OkZ1bmNFeHByTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRnVuY3Rpb25NZXRhZGF0YU5v
ZGUqIG1ldGFkYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAgaW5saW5lIEZ1bmNF
eHByTm9kZTo6RnVuY0V4cHJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBGdW5jdGlvbk1ldGFkYXRhTm9kZSogbWV0YWRhdGEsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc1N0YXRpY0Jsb2NrRnVuY3Rpb24pCiAgICAg
ICAgIDogQmFzZUZ1bmNFeHByTm9kZShsb2NhdGlvbiwgaWRlbnQsIG1ldGFkYXRhLCBzb3VyY2Us
IEZ1bmN0aW9uTW9kZTo6RnVuY3Rpb25FeHByZXNzaW9uKQorICAgICAgICAsIG1faXNTdGF0aWNC
bG9ja0Z1bmN0aW9uKGlzU3RhdGljQmxvY2tGdW5jdGlvbikKICAgICB7CiAgICAgfQogCiAgICAg
aW5saW5lIEZ1bmNFeHByTm9kZTo6RnVuY0V4cHJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYg
bG9jYXRpb24sIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBGdW5jdGlvbk1ldGFkYXRhTm9kZSog
bWV0YWRhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgRnVuY3Rpb25Nb2RlIGZ1bmN0aW9u
TW9kZSkKICAgICAgICAgOiBCYXNlRnVuY0V4cHJOb2RlKGxvY2F0aW9uLCBpZGVudCwgbWV0YWRh
dGEsIHNvdXJjZSwgZnVuY3Rpb25Nb2RlKQorICAgICAgICAsIG1faXNTdGF0aWNCbG9ja0Z1bmN0
aW9uKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmgKaW5kZXggMjUzZTZkYWRlN2YyLi5mOTFmZmRhZTc5MzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmgKQEAgLTczNiw4ICs3MzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBlbnVtIGNsYXNzIENsYXNzRWxlbWVudFRhZyA6IHVpbnQ4X3QgeyBObywgSW5zdGFuY2UsIFN0
YXRpYywgTGFzdFRhZyB9OwogICAgIGNsYXNzIFByb3BlcnR5Tm9kZSBmaW5hbCA6IHB1YmxpYyBQ
YXJzZXJBcmVuYUZyZWVhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gVHlwZSA6IHVp
bnQxNl90IHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIgPSAyLCBTZXR0ZXIgPSA0LCBDb21wdXRlZCA9
IDgsIFNob3J0aGFuZCA9IDE2LCBTcHJlYWQgPSAzMiwgUHJpdmF0ZUZpZWxkID0gNjQsIFByaXZh
dGVNZXRob2QgPSAxMjgsIFByaXZhdGVTZXR0ZXIgPSAyNTYsIFByaXZhdGVHZXR0ZXIgPSA1MTIg
fTsKKyAgICAgICAgZW51bSBUeXBlIDogdWludDE2X3QgeyBDb25zdGFudCA9IDEsIEdldHRlciA9
IDIsIFNldHRlciA9IDQsIENvbXB1dGVkID0gOCwgU2hvcnRoYW5kID0gMTYsIFNwcmVhZCA9IDMy
LCBQcml2YXRlRmllbGQgPSA2NCwgUHJpdmF0ZU1ldGhvZCA9IDEyOCwgUHJpdmF0ZVNldHRlciA9
IDI1NiwgUHJpdmF0ZUdldHRlciA9IDUxMiwgQmxvY2sgPSAxMDI0IH07CiAKKyAgICAgICAgUHJv
cGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImLCBUeXBlLCBTdXBlckJpbmRpbmcsIENsYXNzRWxl
bWVudFRhZyk7CiAgICAgICAgIFByb3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyJiwgRXhwcmVz
c2lvbk5vZGUqLCBUeXBlLCBTdXBlckJpbmRpbmcsIENsYXNzRWxlbWVudFRhZyk7CiAgICAgICAg
IFByb3BlcnR5Tm9kZShFeHByZXNzaW9uTm9kZSosIFR5cGUsIFN1cGVyQmluZGluZywgQ2xhc3NF
bGVtZW50VGFnKTsKICAgICAgICAgUHJvcGVydHlOb2RlKEV4cHJlc3Npb25Ob2RlKiBwcm9wZXJ0
eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSwgU3VwZXJCaW5kaW5nLCBDbGFzc0VsZW1lbnRU
YWcpOwpAQCAtNzU0LDYgKzc1NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlz
Q2xhc3NGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGlzQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1
cGVyQmluZGluZygpOyB9CiAgICAgICAgIGJvb2wgaXNJbnN0YW5jZUNsYXNzRmllbGQoKSBjb25z
dCB7IHJldHVybiBpc0luc3RhbmNlQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGlu
ZygpOyB9CiAgICAgICAgIGJvb2wgaXNTdGF0aWNDbGFzc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4g
aXNTdGF0aWNDbGFzc1Byb3BlcnR5KCkgJiYgIW5lZWRzU3VwZXJCaW5kaW5nKCk7IH0KKyAgICAg
ICAgYm9vbCBpc1N0YXRpY0NsYXNzQmxvY2soKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBCbG9j
azsgfQorICAgICAgICBib29sIGlzU3RhdGljQ2xhc3NFbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
aXNTdGF0aWNDbGFzc0Jsb2NrKCkgfHwgaXNTdGF0aWNDbGFzc0ZpZWxkKCk7IH0KICAgICAgICAg
Ym9vbCBpc092ZXJyaWRkZW5CeUR1cGxpY2F0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNPdmVycmlk
ZGVuQnlEdXBsaWNhdGU7IH0KICAgICAgICAgYm9vbCBpc1ByaXZhdGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGUgJiAoUHJpdmF0ZUZpZWxkIHwgUHJpdmF0ZU1ldGhvZCB8IFByaXZhdGVHZXR0ZXIg
fCBQcml2YXRlU2V0dGVyKTsgfQogICAgICAgICBib29sIGhhc0NvbXB1dGVkTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQpAQCAtNzc1LDcgKzc3OCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBtX25hbWU7CiAgICAgICAgIEV4cHJlc3Np
b25Ob2RlKiBtX2V4cHJlc3Npb247CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2Fzc2lnbjsK
LSAgICAgICAgdW5zaWduZWQgbV90eXBlIDogMTA7CisgICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6
IDExOwogICAgICAgICB1bnNpZ25lZCBtX25lZWRzU3VwZXJCaW5kaW5nIDogMTsKICAgICAgICAg
c3RhdGljX2Fzc2VydCgxIDw8IDIgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ2xhc3NFbGVtZW50
VGFnOjpMYXN0VGFnKSwgIkNsYXNzRWxlbWVudFRhZyBzaG91bGRuJ3QgdXNlIG1vcmUgdGhhbiB0
d28gYml0cyIpOwogICAgICAgICB1bnNpZ25lZCBtX2NsYXNzRWxlbWVudFRhZyA6IDI7CkBAIC04
MDMsNiArODA2LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1fbm9k
ZS0+aXNTdGF0aWNDbGFzc0ZpZWxkKCk7CiAgICAgICAgIH0KIAorICAgICAgICBib29sIGlzU3Rh
dGljQ2xhc3NCbG9jaygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX25v
ZGUtPmlzU3RhdGljQ2xhc3NCbG9jaygpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc1N0
YXRpY0NsYXNzRWxlbWVudCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X25vZGUtPmlzU3RhdGljQ2xhc3NFbGVtZW50KCk7CisgICAgICAgIH0KKwogICAgICAgICB2b2lk
IHNldEhhc1ByaXZhdGVBY2Nlc3NvcnMoYm9vbCBoYXNQcml2YXRlQWNjZXNzb3JzKQogICAgICAg
ICB7CiAgICAgICAgICAgICBtX2hhc1ByaXZhdGVBY2Nlc3NvcnMgPSBoYXNQcml2YXRlQWNjZXNz
b3JzOwpAQCAtOTc1LDcgKzk4OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVu
Y3Rpb25DYWxsVmFsdWVOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMg
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY3Rpb25D
YWxsVmFsdWVOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwgQXJn
dW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9z
aXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CisgICAg
ICAgIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uTm9kZSosIEFyZ3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQsIGJvb2wgaXNTdGF0aWMgPSBmYWxzZSk7CisKKyAgICAgICAgYm9vbCBpc1N0YXRpY0Js
b2NrRnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0YXRpY0Jsb2NrRnVuY3Rpb25D
YWxsOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IG51bGxwdHIpIGZpbmFsOwpAQCAtOTg0
LDYgKzk5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBt
X2V4cHI7CiAgICAgICAgIEFyZ3VtZW50c05vZGUqIG1fYXJnczsKKyAgICAgICAgYm9vbCBtX2lz
U3RhdGljQmxvY2tGdW5jdGlvbkNhbGw7CiAgICAgfTsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQ2Fs
bFJlc29sdmVOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJsaWMgVGhyb3dh
YmxlRXhwcmVzc2lvbkRhdGEgewpAQCAtMjMyNCw3ICsyMzQwLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBGdW5jRXhwck5vZGUgOiBwdWJsaWMgQmFzZUZ1bmNFeHByTm9kZSB7CiAg
ICAgcHVibGljOgotICAgICAgICBGdW5jRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
Y29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgY29uc3QgU291cmNlQ29k
ZSYpOworICAgICAgICBGdW5jRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29uc3Qg
SWRlbnRpZmllciYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgY29uc3QgU291cmNlQ29kZSYsIGJv
b2wgaXNTdGF0aWNCbG9jayA9IGZhbHNlKTsKKworICAgICAgICBib29sIGlzU3RhdGljQmxvY2tG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGF0aWNCbG9ja0Z1bmN0aW9uOyB9CiAKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIEZ1bmNFeHByTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBjb25zdCBTb3VyY2VD
b2RlJiwgRnVuY3Rpb25Nb2RlKTsKQEAgLTIzMzMsNiArMjM1MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IG51bGxwdHIpIG92ZXJyaWRlOwogCiAgICAgICAgIGJvb2wgaXNGdW5jRXhw
ck5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIGJvb2wgbV9p
c1N0YXRpY0Jsb2NrRnVuY3Rpb247CiAgICAgfTsKIAogICAgIGNsYXNzIEFycm93RnVuY0V4cHJO
b2RlIGZpbmFsIDogcHVibGljIEJhc2VGdW5jRXhwck5vZGUgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDNkMTRlMTIwYmM2My4uOGVkYTQ1ODdmNGIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCkBAIC0zODYsNyArMzg2LDcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+Ojppc0Fy
cm93RnVuY3Rpb25QYXJhbWV0ZXJzKFQKICAgICB9CiAKICAgICBpZiAobWF0Y2hTcGVjSWRlbnRp
ZmllcigpKSB7Ci0gICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShpc0Rpc2FsbG93ZWRJZGVudGlm
aWVyQXdhaXQobV90b2tlbiksICJDYW5ub3QgdXNlICdhd2FpdCcgYXMgYSBwYXJhbWV0ZXIgbmFt
ZSBpbiBhbiBhc3luYyBmdW5jdGlvbiIpOworICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNE
aXNhbGxvd2VkSWRlbnRpZmllckF3YWl0KG1fdG9rZW4pLCAiQ2Fubm90IHVzZSAnYXdhaXQnIGFz
IGEgcGFyYW1ldGVyIG5hbWUgIiwgZGlzYWxsb3dlZElkZW50aWZpZXJBd2FpdFJlYXNvbigpKTsK
ICAgICAgICAgU2F2ZVBvaW50IHNhdmVBcnJvd0Z1bmN0aW9uUG9pbnQgPSBjcmVhdGVTYXZlUG9p
bnQoY29udGV4dCk7CiAgICAgICAgIG5leHQoKTsKICAgICAgICAgYm9vbCBpc0Fycm93RnVuY3Rp
b24gPSBtYXRjaChBUlJPV0ZVTkNUSU9OKTsKQEAgLTc3OCw2ICs3NzgsOCBAQCB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
U3RhdGVtZW50TGlzdAogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEFXQUlUOgogICAg
IGNhc2UgWUlFTEQ6IHsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1hdGNoKFlJRUxEKSAm
JiBtX3BhcnNlclN0YXRlLmlzUGFyc2luZ0NsYXNzU3RhdGljQmxvY2ssICJDYW5ub3QgdXNlICd5
aWVsZCcgd2l0aGluIGNsYXNzIHN0YXRpYyBibG9jayIpOworICAgICAgICBzZW1hbnRpY0ZhaWxJ
ZlRydWUobWF0Y2goQVdBSVQpICYmICFmaW5kQ2xvc2V0QXN5bmNGdW5jdGlvblNjb3BlKCksICJD
YW5ub3QgdXNlICdhd2FpdCcgd2l0aGluIHN0YXRpYyBibG9jayBzY29wZSIpOwogICAgICAgICAv
LyBUaGlzIGlzIGEgY29udmVuaWVudCBwbGFjZSB0byBub3RpY2UgbGFiZWxlZCBzdGF0ZW1lbnRz
CiAgICAgICAgIC8vIChldmVuIHRob3VnaCB3ZSBhbHNvIHBhcnNlIHRoZW0gYXMgbm9ybWFsIHN0
YXRlbWVudHMpCiAgICAgICAgIC8vIGJlY2F1c2Ugd2UgYWxsb3cgdGhlIGZvbGxvd2luZyB0eXBl
IG9mIGNvZGUgaW4gc2xvcHB5IG1vZGU6CkBAIC04OTcsNiArODk5LDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VW
YXJpYWJsZURlY2wKIAogICAgICAgICBmYWlsSWZUcnVlKG1hdGNoKFBSSVZBVEVOQU1FKSwgIkNh
bm5vdCB1c2UgYSBwcml2YXRlIG5hbWUgdG8gZGVjbGFyZSBhIHZhcmlhYmxlIik7CiAgICAgICAg
IGlmIChtYXRjaFNwZWNJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgIGZhaWxJZlRydWUoKm1f
dG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzICYmICFm
aW5kQ2xvc2V0RnVuY3Rpb25TY29wZSgpLCAiQ2xhc3Mgc3RhdGljIGJsb2NrIGNhbm5vdCB1c2Ug
J2FyZ3VtZW50cycgYXMgYW4gaWRlbnRpZmllciIpOwogICAgICAgICAgICAgZmFpbElmVHJ1ZShp
c1Bvc3NpYmx5RXNjYXBlZExldChtX3Rva2VuKSAmJiAoZGVjbGFyYXRpb25UeXBlID09IERlY2xh
cmF0aW9uVHlwZTo6TGV0RGVjbGFyYXRpb24gfHwgZGVjbGFyYXRpb25UeXBlID09IERlY2xhcmF0
aW9uVHlwZTo6Q29uc3REZWNsYXJhdGlvbiksIAogICAgICAgICAgICAgICAgICJDYW5ub3QgdXNl
ICdsZXQnIGFzIGFuIGlkZW50aWZpZXIgbmFtZSBmb3IgYSBMZXhpY2FsRGVjbGFyYXRpb24iKTsK
ICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShpc0Rpc2FsbG93ZWRJZGVudGlmaWVyQXdh
aXQobV90b2tlbiksICJDYW5ub3QgdXNlICdhd2FpdCcgYXMgYSAiLCBkZWNsYXJhdGlvblR5cGVU
b1ZhcmlhYmxlS2luZChkZWNsYXJhdGlvblR5cGUpLCAiICIsIGRpc2FsbG93ZWRJZGVudGlmaWVy
QXdhaXRSZWFzb24oKSk7CkBAIC0xNjI0LDYgKzE2MjcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQnJlYWtTdGF0
ZW1lbgogICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IHRva2VuRW5kUG9zaXRpb24oKTsKICAgICBu
ZXh0KCk7CiAgICAgCisgICAgc2VtYW50aWNGYWlsSWZUcnVlKGN1cnJlbnRTY29wZSgpLT5pc1N0
YXRpY0Jsb2NrU2NvcGUoKSwgIidicmVhaycgY2Fubm90IGNyb3NzIHN0YXRpYyBibG9jayBib3Vu
ZGFyeSIpOwogICAgIGlmIChhdXRvU2VtaUNvbG9uKCkpIHsKICAgICAgICAgc2VtYW50aWNGYWls
SWZGYWxzZShicmVha0lzVmFsaWQoKSwgIidicmVhaycgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBz
d2l0Y2ggb3IgbG9vcCBzdGF0ZW1lbnQiKTsKICAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
QnJlYWtTdGF0ZW1lbnQobG9jYXRpb24sICZtX3ZtLnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlm
aWVyLCBzdGFydCwgZW5kKTsKQEAgLTE2NDYsNiArMTY1MCw3IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDb250aW51
ZVN0YXRlCiAgICAgSlNUZXh0UG9zaXRpb24gZW5kID0gdG9rZW5FbmRQb3NpdGlvbigpOwogICAg
IG5leHQoKTsKICAgICAKKyAgICBzZW1hbnRpY0ZhaWxJZlRydWUoY3VycmVudFNjb3BlKCktPmlz
U3RhdGljQmxvY2tTY29wZSgpLCAiJ2NvbnRpbnVlJyBjYW5ub3QgY3Jvc3Mgc3RhdGljIGJsb2Nr
IGJvdW5kYXJ5Iik7CiAgICAgaWYgKGF1dG9TZW1pQ29sb24oKSkgewogICAgICAgICBzZW1hbnRp
Y0ZhaWxJZkZhbHNlKGNvbnRpbnVlSXNWYWxpZCgpLCAiJ2NvbnRpbnVlJyBpcyBvbmx5IHZhbGlk
IGluc2lkZSBhIGxvb3Agc3RhdGVtZW50Iik7CiAgICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZUNvbnRpbnVlU3RhdGVtZW50KGxvY2F0aW9uLCAmbV92bS5wcm9wZXJ0eU5hbWVzLT5udWxsSWRl
bnRpZmllciwgc3RhcnQsIGVuZCk7CkBAIC0xNjY2LDcgKzE2NzEsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlUmV0
dXJuU3RhdGVtZQogewogICAgIEFTU0VSVChtYXRjaChSRVRVUk4pKTsKICAgICBKU1Rva2VuTG9j
YXRpb24gbG9jYXRpb24odG9rZW5Mb2NhdGlvbigpKTsKLSAgICBzZW1hbnRpY0ZhaWxJZkZhbHNl
KGN1cnJlbnRTY29wZSgpLT5pc0Z1bmN0aW9uKCksICJSZXR1cm4gc3RhdGVtZW50cyBhcmUgb25s
eSB2YWxpZCBpbnNpZGUgZnVuY3Rpb25zIik7CisgICAgc2VtYW50aWNGYWlsSWZGYWxzZShjdXJy
ZW50U2NvcGUoKS0+aXNGdW5jdGlvbigpICYmICFjdXJyZW50U2NvcGUoKS0+aXNTdGF0aWNCbG9j
a1Njb3BlKCksICJSZXR1cm4gc3RhdGVtZW50cyBhcmUgb25seSB2YWxpZCBpbnNpZGUgZnVuY3Rp
b25zIik7CiAgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsK
ICAgICBKU1RleHRQb3NpdGlvbiBlbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CiAgICAgbmV4dCgp
OwpAQCAtMTg0NSw2ICsxODUwLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVRyeVN0YXRlbWVudCgKICAgICAgICAg
ICAgIGNhdGNoU2NvcGUtPnByZXZlbnRWYXJEZWNsYXJhdGlvbnMoKTsKICAgICAgICAgICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChtYXRjaFNw
ZWNJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobWF0
Y2goQVdBSVQpICYmICFmaW5kQ2xvc2V0RnVuY3Rpb25TY29wZSgpLCAiQ2Fubm90IHVzZSAnYXdh
aXQnIGFzIGlkZW50aWZpZXIgd2l0aGluIGNsYXNzIHN0YXRpYyBibG9jayBzY29wZSIpOwogICAg
ICAgICAgICAgICAgIGNhdGNoU2NvcGUtPnNldElzU2ltcGxlQ2F0Y2hQYXJhbWV0ZXJTY29wZSgp
OwogICAgICAgICAgICAgICAgIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAg
ICAgICAgICAgY2F0Y2hQYXR0ZXJuID0gY29udGV4dC5jcmVhdGVCaW5kaW5nTG9jYXRpb24obV90
b2tlbi5tX2xvY2F0aW9uLCAqaWRlbnQsIG1fdG9rZW4ubV9zdGFydFBvc2l0aW9uLCBtX3Rva2Vu
Lm1fZW5kUG9zaXRpb24sIEFzc2lnbm1lbnRDb250ZXh0OjpEZWNsYXJhdGlvblN0YXRlbWVudCk7
CkBAIC0xODkwLDcgKzE4OTYsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVT
dGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlRGVidWdnZXJTdGF0ZQogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgotdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBU
cmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUJsb2NrU3RhdGVtZW50KFRyZWVC
dWlsZGVyJiBjb250ZXh0LCBib29sIGlzQ2F0Y2hCbG9jaykKK3RlbXBsYXRlIDxjbGFzcyBUcmVl
QnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VCbG9ja1N0YXRl
bWVudChUcmVlQnVpbGRlciYgY29udGV4dCwgYm9vbCBpc0NhdGNoQmxvY2ssIGJvb2wgaXNTdGF0
aWNCbG9jaykKIHsKICAgICBBU1NFUlQobWF0Y2goT1BFTkJSQUNFKSk7CiAKQEAgLTE5MDQsNiAr
MTkxMCw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VCbG9ja1N0YXRlbWVuCiAgICAgICAgIG5ld1Njb3BlLT5wcmV2
ZW50VmFyRGVjbGFyYXRpb25zKCk7CiAgICAgICAgIGlmIChpc0NhdGNoQmxvY2spCiAgICAgICAg
ICAgICBuZXdTY29wZS0+c2V0SXNDYXRjaEJsb2NrU2NvcGUoKTsKKyAgICAgICAgaWYgKGlzU3Rh
dGljQmxvY2spCisgICAgICAgICAgICBuZXdTY29wZS0+c2V0SXNTdGF0aWNCbG9ja1Njb3BlKCk7
CiAgICAgICAgIGxleGljYWxTY29wZS5zZXRJc1ZhbGlkKG5ld1Njb3BlLCB0aGlzKTsKICAgICB9
CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CkBAIC0yMjIz
LDYgKzIyMzEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogc3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9u
TW9kZShTb3VyY2VQYXJzZU1vZGUgbW9kZSkKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9k
dWxlQW5hbHl6ZU1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUV2YWx1YXRl
TW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9k
ZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNCbG9ja01vZGU6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAiIjsKICAg
ICB9CkBAIC0yMjY1LDYgKzIyNzQsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogc3RyaW5nRm9yRnVu
Y3Rpb25Nb2RlKFNvdXJjZVBhcnNlTW9kZSBtb2RlKQogICAgIGNhc2UgU291cmNlUGFyc2VNb2Rl
OjpNb2R1bGVBbmFseXplTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlRXZh
bHVhdGVNb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6
ZXJNb2RlOgorICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc1N0YXRpY0Jsb2NrTW9kZToK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuICIi
OwogICAgIH0KQEAgLTIyNzcsNiArMjI4Nyw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5
cGU+IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlciwgY2xhc3MgRnVuY3Rpb25JbmZvVHlwCiAg
ICAgYXV0byBtb2RlID0gc291cmNlUGFyc2VNb2RlKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIShT
b3VyY2VQYXJzZU1vZGVTZXQoU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZSwgU291cmNlUGFy
c2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZSwgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVFdmFsdWF0
ZU1vZGUpLmNvbnRhaW5zKG1vZGUpKSk7CiAgICAgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgcGFy
YW1ldGVyTGlzdCA9IGNvbnRleHQuY3JlYXRlRm9ybWFsUGFyYW1ldGVyTGlzdCgpOworICAgIGlm
IChtb2RlID09IFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNCbG9ja01vZGUpCisgICAgICAg
IHJldHVybiBwYXJhbWV0ZXJMaXN0OwogICAgIFNldEZvclNjb3BlIGZ1bmN0aW9uUGFyc2VQaGFz
ZVBvaXNvbmVyKG1fcGFyc2VyU3RhdGUuZnVuY3Rpb25QYXJzZVBoYXNlLCBGdW5jdGlvblBhcnNl
UGhhc2U6OlBhcmFtZXRlcnMpOwogICAgIAogICAgIGlmIChVTkxJS0VMWSgoU291cmNlUGFyc2VN
b2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9k
ZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSkuY29udGFpbnMobW9kZSkpKSkgewpAQCAtMjY2MSw3
ICsyNjczLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhUcmVlQnVpbGQKICAgICBjb250ZXh0LnNldEVuZE9m
ZnNldChmdW5jdGlvbkluZm8uYm9keSwgbV9sZXhlci0+Y3VycmVudE9mZnNldCgpKTsKICAgICBp
ZiAoZnVuY3Rpb25TY29wZS0+c3RyaWN0TW9kZSgpICYmIHJlcXVpcmVtZW50cyAhPSBGdW5jdGlv
bk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQpIHsKICAgICAgICAgQVNTRVJUKGZ1bmN0aW9uSW5m
by5uYW1lKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoU291cmNlUGFyc2VNb2RlU2V0KFNvdXJj
ZVBhcnNlTW9kZTo6Tm9ybWFsRnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1v
ZGUsIFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6
R2VuZXJhdG9yQm9keU1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yV3JhcHBlckZ1bmN0
aW9uTW9kZSkuY29udGFpbnMobW9kZSkgfHwgaXNBc3luY0Z1bmN0aW9uT3JBc3luY0dlbmVyYXRv
cldyYXBwZXJQYXJzZU1vZGUobW9kZSkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChTb3VyY2VQ
YXJzZU1vZGVTZXQoU291cmNlUGFyc2VNb2RlOjpOb3JtYWxGdW5jdGlvbk1vZGUsIFNvdXJjZVBh
cnNlTW9kZTo6TWV0aG9kTW9kZSwgU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSwg
U291cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JCb2R5TW9kZSwgU291cmNlUGFyc2VNb2RlOjpHZW5l
cmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzU3RhdGljQmxv
Y2tNb2RlKS5jb250YWlucyhtb2RlKSB8fCBpc0FzeW5jRnVuY3Rpb25PckFzeW5jR2VuZXJhdG9y
V3JhcHBlclBhcnNlTW9kZShtb2RlKSk7CiAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtX3Zt
LnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqZnVuY3Rpb25JbmZvLm5hbWUsICInIiwgZnVu
Y3Rpb25JbmZvLm5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24gbmFtZSBp
biBzdHJpY3QgbW9kZSIpOwogICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUobV92bS5wcm9wZXJ0
eU5hbWVzLT5ldmFsID09ICpmdW5jdGlvbkluZm8ubmFtZSwgIiciLCBmdW5jdGlvbkluZm8ubmFt
ZS0+aW1wbCgpLCAiJyBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBuYW1lIGluIHN0cmljdCBtb2Rl
Iik7CiAgICAgfQpAQCAtMjkyOSw2ICsyOTQxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQK
ICAgICBjbGFzc0hlYWRTY29wZS0+cHJldmVudFZhckRlY2xhcmF0aW9ucygpOwogICAgIGNsYXNz
SGVhZFNjb3BlLT5zZXRTdHJpY3RNb2RlKCk7CiAgICAgbmV4dCgpOworICAgIHNlbWFudGljRmFp
bElmVHJ1ZShtYXRjaChBV0FJVCkgJiYgIWZpbmRDbG9zZXRGdW5jdGlvblNjb3BlKCksICJDYW5u
b3QgdXNlICdhd2FpdCcgYXMgYSBjbGFzcyBuYW1lIHdpdGhpbiBjbGFzcyBzdGF0aWMgYmxvY2sg
c2NvcGUiKTsKIAogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocmVxdWlyZW1lbnRzICE9IEZ1bmN0
aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwgIkN1cnJlbnRseSwgdGhlcmUgaXMgbm8gY2Fs
bGVyIHRoYXQgdXNlcyBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQgZm9yIGNsYXNz
IHN5bnRheC4iKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEocmVxdWlyZW1lbnRzID09IEZ1
bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZSAmJiAhaW5mby5jbGFzc05hbWUpLCAiV2hlbiBz
cGVjaWZ5aW5nIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZSwgd2UgbmVlZCB0byBpbml0
aWFsaXplIGluZm8uY2xhc3NOYW1lIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUgaW4gdGhlIGNhbGxl
ciBzaWRlLiIpOwpAQCAtMjk4Myw2ICsyOTk2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQK
IAogICAgICAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksICJzdGF0aWMiIGlzIGEg
bm9uLXJlc2VydmVkIGtleXdvcmQgaW4gbm9uLXN0cmljdCBtb2RlLgogICAgICAgICBDbGFzc0Vs
ZW1lbnRUYWcgdGFnID0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZTsKKyAgICAgICAgU291cmNl
UGFyc2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9kZTsKICAgICAg
ICAgYXV0byB0eXBlID0gUHJvcGVydHlOb2RlOjpDb25zdGFudDsKICAgICAgICAgaWYgKG1hdGNo
KFJFU0VSVkVEX0lGX1NUUklDVCkgJiYgKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJv
cGVydHlOYW1lcy0+c3RhdGljS2V5d29yZCkgewogICAgICAgICAgICAgU2F2ZVBvaW50IHNhdmVQ
b2ludCA9IGNyZWF0ZVNhdmVQb2ludChjb250ZXh0KTsKQEAgLTI5OTAsOCArMzAwNCwxMSBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlQ2xhc3MoVAogICAgICAgICAgICAgaWYgKG1hdGNoKE9QRU5QQVJFTikg
fHwgbWF0Y2goU0VNSUNPTE9OKSB8fCBtYXRjaChFUVVBTCkpIHsKICAgICAgICAgICAgICAgICAv
LyBSZXBhcnNlICJzdGF0aWMoKSIgYXMgYSBtZXRob2Qgb3IgInN0YXRpYyIgYXMgYSBjbGFzcyBm
aWVsZC4KICAgICAgICAgICAgICAgICByZXN0b3JlU2F2ZVBvaW50KGNvbnRleHQsIHNhdmVQb2lu
dCk7Ci0gICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgdGFnID0gQ2xhc3NFbGVtZW50VGFnOjpTdGF0aWM7CisgICAgICAgICAgICAgICAgaWYg
KG1hdGNoKE9QRU5CUkFDRSkpCisgICAgICAgICAgICAgICAgICAgIHBhcnNlTW9kZSA9IFNvdXJj
ZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNCbG9ja01vZGU7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCBhIHdheSB0byBzaGFyZSBtb3JlIGNv
ZGUgd2l0aCBwYXJzZVByb3BlcnR5LgpAQCAtMzAwMCw3ICszMDE3LDYgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xhc3NFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUNsYXNzKFQKICAgICAgICAgVHJlZUV4cHJlc3Npb24gY29tcHV0ZWRQcm9wZXJ0eU5hbWUg
PSAwOwogICAgICAgICBib29sIGlzR2V0dGVyID0gZmFsc2U7CiAgICAgICAgIGJvb2wgaXNTZXR0
ZXIgPSBmYWxzZTsKLSAgICAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJjZVBh
cnNlTW9kZTo6TWV0aG9kTW9kZTsKICAgICAgICAgaWYgKGNvbnN1bWUoVElNRVMpKQogICAgICAg
ICAgICAgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JXcmFwcGVyTWV0aG9k
TW9kZTsKIApAQCAtMzA1Myw2ICszMDY5LDcgQEAgcGFyc2VNZXRob2Q6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBPUEVOQlJBQ0tFVDoKICAgICAgICAgICAgIG5leHQoKTsKKyAg
ICAgICAgICAgIGZhaWxJZlRydWUoKm1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVy
dHlOYW1lcy0+YXJndW1lbnRzICYmICFmaW5kQ2xvc2V0RnVuY3Rpb25TY29wZSgpLCAiQ2xhc3Mg
c3RhdGljIGJsb2NrIGNhbm5vdCB1c2UgJ2FyZ3VtZW50cycgYXMgYW4gaWRlbnRpZmllciIpOwog
ICAgICAgICAgICAgY29tcHV0ZWRQcm9wZXJ0eU5hbWUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKGNvbnRleHQpOwogICAgICAgICAgICAgdHlwZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5Tm9k
ZTo6VHlwZT4odHlwZSB8IFByb3BlcnR5Tm9kZTo6Q29tcHV0ZWQpOwogICAgICAgICAgICAgZmFp
bElmRmFsc2UoY29tcHV0ZWRQcm9wZXJ0eU5hbWUsICJDYW5ub3QgcGFyc2UgY29tcHV0ZWQgcHJv
cGVydHkgbmFtZSIpOwpAQCAtMzA4MSw2ICszMDk4LDEwIEBAIHBhcnNlTWV0aG9kOgogICAgICAg
ICAgICAgdHlwZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5Tm9kZTo6VHlwZT4odHlwZSB8IFByb3Bl
cnR5Tm9kZTo6UHJpdmF0ZUZpZWxkKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgIGNhc2UgT1BFTkJSQUNFOiB7CisgICAgICAgICAgICB0eXBlID0gc3RhdGljX2Nhc3Q8
UHJvcGVydHlOb2RlOjpUeXBlPih0eXBlIHwgUHJvcGVydHlOb2RlOjpCbG9jayk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYg
KG1fdG9rZW4ubV90eXBlICYgS2V5d29yZFRva2VuRmxhZykKICAgICAgICAgICAgICAgICBnb3Rv
IG5hbWVkS2V5d29yZDsKQEAgLTMxNDksNiArMzE3MCwxNyBAQCBwYXJzZU1ldGhvZDoKICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuY3JlYXRlUHJvcGVydHkoaWRlbnQsIGNvbXB1
dGVkUHJvcGVydHlOYW1lLCBpbml0aWFsaXplciwgdHlwZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVk
ZWQsIHRhZyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBj
b250ZXh0LmNyZWF0ZVByb3BlcnR5KGlkZW50LCBpbml0aWFsaXplciwgdHlwZSwgU3VwZXJCaW5k
aW5nOjpOb3ROZWVkZWQsIGluZmVyTmFtZSwgdGFnKTsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJz
ZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc1N0YXRpY0Jsb2NrTW9kZSkgeworICAgICAg
ICAgICAgbWF0Y2hPckZhaWwoT1BFTkJSQUNFLCAiRXhwZWN0ZWQgYmxvY2sgc3RhdGVtZW50IGZv
ciBjbGFzcyBzdGF0aWMgYmxvY2siKTsKKyAgICAgICAgICAgIHNpemVfdCB1c2VkVmFyaWFibGVz
U2l6ZSA9IGN1cnJlbnRTY29wZSgpLT5jdXJyZW50VXNlZFZhcmlhYmxlc1NpemUoKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRTY29wZSgpLT5wdXNoVXNlZFZhcmlhYmxlU2V0KCk7CisgICAgICAgICAg
ICBTZXRGb3JTY29wZSBwYXJzaW5nV2l0aENsYXNzU3RhdGljQmxvY2tNb2RlKG1fcGFyc2VNb2Rl
LCBwYXJzZU1vZGUpOworICAgICAgICAgICAgU2V0Rm9yU2NvcGUgcGFyc2luZ1dpdGhDbGFzc1N0
YXRpY0Jsb2NrU3RhdGUobV9wYXJzZXJTdGF0ZS5pc1BhcnNpbmdDbGFzc1N0YXRpY0Jsb2NrLCB0
cnVlKTsKKyAgICAgICAgICAgIERlcHRoTWFuYWdlciBzdGF0ZW1lbnREZXB0aCgmbV9zdGF0ZW1l
bnREZXB0aCk7CisgICAgICAgICAgICBtX3N0YXRlbWVudERlcHRoID0gMTsKKyAgICAgICAgICAg
IGZhaWxJZkZhbHNlKHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCwgZmFsc2UgLCB0cnVlKSwg
IkNhbm5vdCBwYXJzZSBjbGFzcyBzdGF0aWMgYmxvY2siKTsKKyAgICAgICAgICAgIHByb3BlcnR5
ID0gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShpZGVudCwgdHlwZSwgU3VwZXJCaW5kaW5nOjpOZWVk
ZWQsIHRhZyk7CisgICAgICAgICAgICBjbGFzc1Njb3BlLT5tYXJrTGFzdFVzZWRWYXJpYWJsZXNT
ZXRBc0NhcHR1cmVkKHVzZWRWYXJpYWJsZXNTaXplKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gbWV0aG9kSW5mbzsKICAgICAg
ICAgICAgIGJvb2wgaXNDb25zdHJ1Y3RvciA9IHRhZyA9PSBDbGFzc0VsZW1lbnRUYWc6Okluc3Rh
bmNlICYmICppZGVudCA9PSBwcm9wZXJ0eU5hbWVzLmNvbnN0cnVjdG9yOwpAQCAtMzI4MSw2ICsz
MzEzLDkgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMg
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ2xhc3NGaWUKICAgICAgICAgICAgICAgICB0eXBlID0g
RGVmaW5lRmllbGROb2RlOjpUeXBlOjpDb21wdXRlZE5hbWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIE9QRU5CUkFDRTogeworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBpZiAobV90b2tlbi5tX3R5cGUgJiBLZXl3b3JkVG9rZW5GbGFnKQogICAg
ICAgICAgICAgICAgICAgICBnb3RvIG5hbWVkS2V5d29yZDsKQEAgLTMyODksMTcgKzMzMjQsMzYg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2Vy
PExleGVyVHlwZT46OnBhcnNlQ2xhc3NGaWUKICAgICAgICAgfQogCiAgICAgICAgIC8vIE9ubHkg
dmFsaWQgY2xhc3MgZmllbGRzIGFyZSBoYW5kbGVkIGluIHRoaXMgZnVuY3Rpb24uCi0gICAgICAg
IEFTU0VSVChtYXRjaChFUVVBTCkgfHwgbWF0Y2goU0VNSUNPTE9OKSB8fCBtYXRjaChDTE9TRUJS
QUNFKSB8fCBtX2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJlZm9yZVRva2VuKCkpOworICAgICAg
ICBBU1NFUlQobWF0Y2goRVFVQUwpIHx8IG1hdGNoKFNFTUlDT0xPTikgfHwgbWF0Y2goQ0xPU0VC
UkFDRSkgfHwgbWF0Y2goT1BFTkJSQUNFKSB8fCBtX2xleGVyLT5oYXNMaW5lVGVybWluYXRvckJl
Zm9yZVRva2VuKCkpOwogCi0gICAgICAgIFRyZWVFeHByZXNzaW9uIGluaXRpYWxpemVyID0gMDsK
LSAgICAgICAgaWYgKGNvbnN1bWUoRVFVQUwpKQotICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSBw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOworICAgICAgICBUcmVlU3RhdGVtZW50
IHN0YXRlbWVudDsKKyAgICAgICAgaWYgKG1hdGNoKE9QRU5CUkFDRSkgJiYgaXNTdGF0aWNGaWVs
ZCkgeworICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHRva2VuU3Rh
cnRQb3NpdGlvbigpOworICAgICAgICAgICAgSlNUb2tlbkxvY2F0aW9uIHN0YXJ0TG9jYXRpb24o
dG9rZW5Mb2NhdGlvbigpKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGV4cHJlc3Npb25TdGFydCA9
IHRva2VuU3RhcnQoKTsKIAotICAgICAgICBpZiAodHlwZSA9PSBEZWZpbmVGaWVsZE5vZGU6OlR5
cGU6OlByaXZhdGVOYW1lKQotICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnVzZVZhcmlhYmxl
KGlkZW50LCBmYWxzZSk7CisgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxk
ZXI+IGZ1bmN0aW9uSW5mbzsKKyAgICAgICAgICAgIGZ1bmN0aW9uSW5mby5uYW1lID0gJm1fdm0u
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgICAgICAgICBTZXRGb3JTY29wZSBz
ZXRJbm5lclBhcnNlTW9kZShtX3BhcnNlTW9kZSwgU291cmNlUGFyc2VNb2RlOjpDbGFzc1N0YXRp
Y0Jsb2NrTW9kZSk7CisgICAgICAgICAgICBmYWlsSWZGYWxzZSgocGFyc2VGdW5jdGlvbkluZm8o
Y29udGV4dCwgRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpOb25lLCBmYWxzZSwgQ29uc3RydWN0
b3JLaW5kOjpOb25lLCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgZXhwcmVzc2lvblN0YXJ0LCBmdW5j
dGlvbkluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24pKSwgIkNhbm5vdCBw
YXJzZSBzdGF0aWMgYmxvY2sgZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIFRyZWVFeHByZXNzaW9u
IGV4cHJlc3Npb24gPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uRXhwcihzdGFydExvY2F0aW9uLCBm
dW5jdGlvbkluZm8sIHRydWUpOwogCi0gICAgICAgIFRyZWVTdGF0ZW1lbnQgZGVmaW5lRmllbGQg
PSBjb250ZXh0LmNyZWF0ZURlZmluZUZpZWxkKGZpZWxkTG9jYXRpb24sIGlkZW50LCBpbml0aWFs
aXplciwgdHlwZSk7Ci0gICAgICAgIGNvbnRleHQuYXBwZW5kU3RhdGVtZW50KHNvdXJjZUVsZW1l
bnRzLCBkZWZpbmVGaWVsZCk7CisgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBlbmRQb3NpdGlv
biA9IGxhc3RUb2tlbkVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICBUcmVlQXJndW1lbnRzIGFy
Z3VtZW50cyA9IGNvbnRleHQuY3JlYXRlQXJndW1lbnRzKCk7CisgICAgICAgICAgICBleHByZXNz
aW9uID0gY29udGV4dC5tYWtlRnVuY3Rpb25DYWxsTm9kZShzdGFydExvY2F0aW9uLCBleHByZXNz
aW9uLCBmYWxzZSwgYXJndW1lbnRzLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgbGFzdFRv
a2VuRW5kUG9zaXRpb24oKSwgMCwgZmFsc2UsIHRydWUpOworCisgICAgICAgICAgICBzdGF0ZW1l
bnQgPSBjb250ZXh0LmNyZWF0ZUV4cHJTdGF0ZW1lbnQoc3RhcnRMb2NhdGlvbiwgZXhwcmVzc2lv
biwgc3RhcnRQb3NpdGlvbiwgbV9sYXN0VG9rZW5FbmRQb3NpdGlvbi5saW5lKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIFRyZWVFeHByZXNzaW9uIGluaXRpYWxpemVyID0gMDsKKyAg
ICAgICAgICAgIGlmIChjb25zdW1lKEVRVUFMKSkKKyAgICAgICAgICAgICAgICBpbml0aWFsaXpl
ciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oY29udGV4dCk7CisKKyAgICAgICAgICAgIGlm
ICh0eXBlID09IERlZmluZUZpZWxkTm9kZTo6VHlwZTo6UHJpdmF0ZU5hbWUpCisgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlKCktPnVzZVZhcmlhYmxlKGlkZW50LCBmYWxzZSk7CisKKyAgICAg
ICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuY3JlYXRlRGVmaW5lRmllbGQoZmllbGRMb2NhdGlv
biwgaWRlbnQsIGluaXRpYWxpemVyLCB0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBjb250ZXh0
LmFwcGVuZFN0YXRlbWVudChzb3VyY2VFbGVtZW50cywgc3RhdGVtZW50KTsKICAgICB9CiAKICAg
ICBBU1NFUlQoIWhhc0Vycm9yKCkpOwpAQCAtNDExNSw2ICs0MTY5LDkgQEAgdGVtcGxhdGUgPHR5
cGVuYW1lIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VBc3NpZ25tZW4KIAogICAgIFRyZWVFeHByZXNzaW9uIGxocyA9IHBhcnNlQ29uZGl0aW9uYWxF
eHByZXNzaW9uKGNvbnRleHQpOwogCisgICAgaWYgKCFsaHMgJiYgY3VycmVudFNjb3BlKCktPmlz
U3RhdGljQmxvY2tTY29wZSgpICYmIG1hdGNoKEFXQUlUKSkKKyAgICAgICAgcHJvcGFnYXRlRXJy
b3IoKTsKKwogICAgIGlmIChtYXliZVZhbGlkQXJyb3dGdW5jdGlvblN0YXJ0ICYmICFtYXRjaChF
T0ZUT0spKSB7CiAgICAgICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uVG9rZW4gPSBtYXRjaChBUlJP
V0ZVTkNUSU9OKTsKICAgICAgICAgaWYgKCFsaHMgfHwgaXNBcnJvd0Z1bmN0aW9uVG9rZW4pIHsK
QEAgLTQ5NDAsNiArNDk5Nyw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4
cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlUHJpbWFyeUV4cHJlCiAgICAgICAgIHJl
dHVybiBjb250ZXh0LmNyZWF0ZVRoaXNFeHByKGxvY2F0aW9uKTsKICAgICB9CiAgICAgY2FzZSBB
V0FJVDoKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGN1cnJlbnRTY29wZSgpLT5pc1N0YXRp
Y0Jsb2NrU2NvcGUoKSwgIlRoZSAnYXdhaXQnIGtleXdvcmQgaXMgZGlzYWxsb3dlZCBpbiB0aGUg
SWRlbnRpZmllclJlZmVyZW5jZSBwb3NpdGlvbiBmZWF0dXJlcyB3aXRoaW4gY2xhc3Mgc3RhdGlj
IGJsb2NrIHNjb3BlIik7CiAgICAgICAgIGlmIChtX3BhcnNlclN0YXRlLmZ1bmN0aW9uUGFyc2VQ
aGFzZSA9PSBGdW5jdGlvblBhcnNlUGhhc2U6OlBhcmFtZXRlcnMpCiAgICAgICAgICAgICBzZW1h
bnRpY0ZhaWxJZkZhbHNlKG1fcGFyc2VyU3RhdGUuYWxsb3dBd2FpdCwgIkNhbm5vdCB1c2UgJ2F3
YWl0JyB3aXRoaW4gYSBwYXJhbWV0ZXIgZGVmYXVsdCBleHByZXNzaW9uIik7CiAgICAgICAgIGVs
c2UgaWYgKGN1cnJlbnRGdW5jdGlvblNjb3BlKCktPmlzQXN5bmNGdW5jdGlvbkJvdW5kYXJ5KCkg
fHwgaXNNb2R1bGVQYXJzZU1vZGUoc291cmNlUGFyc2VNb2RlKCkpKQpAQCAtNDk0Nyw2ICs1MDA1
LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmUKIAogICAgICAgICBnb3RvIGlkZW50aWZpZXJF
eHByZXNzaW9uOwogICAgIGNhc2UgSURFTlQ6IHsKKyAgICAgICAgZmFpbElmVHJ1ZSgqbV90b2tl
bi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgJiYgIWZpbmRD
bG9zZXRGdW5jdGlvblNjb3BlKCksICJDbGFzcyBzdGF0aWMgYmxvY2sgY2Fubm90IHVzZSAnYXJn
dW1lbnRzJyBhcyBhbiBpZGVudGlmaWVyIik7CiAgICAgICAgIGlmIChVTkxJS0VMWSgqbV90b2tl
bi5tX2RhdGEuaWRlbnQgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5hc3luYyAmJiAhbV90b2tlbi5t
X2RhdGEuZXNjYXBlZCkpIHsKICAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9r
ZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
IG1fdG9rZW4ubV9kYXRhLmlkZW50OwpAQCAtNTE2OCw4ICs1MjI3LDkgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzc2lvbiBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VN
ZW1iZXJFeHByZXMKICAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQobV92bS5wcm9w
ZXJ0eU5hbWVzLT50YXJnZXQpKSB7CiAgICAgICAgICAgICBTY29wZVJlZiBjbG9zZXN0T3JkaW5h
cnlGdW5jdGlvblNjb3BlID0gY2xvc2VzdFBhcmVudE9yZGluYXJ5RnVuY3Rpb25Ob25MZXhpY2Fs
U2NvcGUoKTsKICAgICAgICAgICAgIGJvb2wgaXNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgPSBtX3Bh
cnNlclN0YXRlLmlzUGFyc2luZ0NsYXNzRmllbGRJbml0aWFsaXplcjsKKyAgICAgICAgICAgIGJv
b2wgaXNQYXJzaW5nQ2xhc3NTdGF0aWNCbG9jayA9IG1fcGFyc2VyU3RhdGUuaXNQYXJzaW5nQ2xh
c3NTdGF0aWNCbG9jazsKICAgICAgICAgICAgIGJvb2wgaXNGdW5jdGlvbkV2YWxDb250ZXh0VHlw
ZSA9IG1faXNJbnNpZGVPcmRpbmFyeUZ1bmN0aW9uICYmIChjbG9zZXN0T3JkaW5hcnlGdW5jdGlv
blNjb3BlLT5ldmFsQ29udGV4dFR5cGUoKSA9PSBFdmFsQ29udGV4dFR5cGU6OkZ1bmN0aW9uRXZh
bENvbnRleHQgfHwgY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+ZXZhbENvbnRleHRUeXBl
KCkgPT0gRXZhbENvbnRleHRUeXBlOjpJbnN0YW5jZUZpZWxkRXZhbENvbnRleHQpOwotICAgICAg
ICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShjdXJyZW50U2NvcGUoKS0+aXNGdW5jdGlvbigpIHx8
IGlzRnVuY3Rpb25FdmFsQ29udGV4dFR5cGUgfHwgaXNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIsICJu
ZXcudGFyZ2V0IGlzIG9ubHkgdmFsaWQgaW5zaWRlIGZ1bmN0aW9ucyIpOworICAgICAgICAgICAg
c2VtYW50aWNGYWlsSWZGYWxzZShjdXJyZW50U2NvcGUoKS0+aXNGdW5jdGlvbigpIHx8IGlzRnVu
Y3Rpb25FdmFsQ29udGV4dFR5cGUgfHwgaXNQYXJzaW5nQ2xhc3NTdGF0aWNCbG9jayB8fCBpc0Ns
YXNzRmllbGRJbml0aWFsaXplciwgIm5ldy50YXJnZXQgaXMgb25seSB2YWxpZCBpbnNpZGUgZnVu
Y3Rpb25zIik7CiAgICAgICAgICAgICBiYXNlSXNOZXdUYXJnZXQgPSB0cnVlOwogICAgICAgICAg
ICAgaWYgKGN1cnJlbnRTY29wZSgpLT5pc0Fycm93RnVuY3Rpb24oKSkgewogICAgICAgICAgICAg
ICAgIHNlbWFudGljRmFpbElmRmFsc2UoIWNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmlz
R2xvYmFsQ29kZVNjb3BlKCkgfHwgaXNGdW5jdGlvbkV2YWxDb250ZXh0VHlwZSB8fCBpc0NsYXNz
RmllbGRJbml0aWFsaXplciwgIm5ldy50YXJnZXQgaXMgbm90IHZhbGlkIGluc2lkZSBhcnJvdyBm
dW5jdGlvbnMgaW4gZ2xvYmFsIGNvZGUiKTsKQEAgLTU0NTcsOCArNTUxNywxMCBAQCB0ZW1wbGF0
ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZVVuYXJ5RXhwcmVzcwogICAgIGJvb2wgaGFzUHJlZml4VXBkYXRlT3AgPSBmYWxzZTsKICAg
ICB1bnNpZ25lZCBsYXN0T3BlcmF0b3IgPSAwOwogCi0gICAgaWYgKFVOTElLRUxZKG1hdGNoKEFX
QUlUKSAmJiAoY3VycmVudEZ1bmN0aW9uU2NvcGUoKS0+aXNBc3luY0Z1bmN0aW9uQm91bmRhcnko
KSB8fCBpc01vZHVsZVBhcnNlTW9kZShzb3VyY2VQYXJzZU1vZGUoKSkpKSkKKyAgICBpZiAoVU5M
SUtFTFkobWF0Y2goQVdBSVQpICYmIChjdXJyZW50RnVuY3Rpb25TY29wZSgpLT5pc0FzeW5jRnVu
Y3Rpb25Cb3VuZGFyeSgpIHx8IGlzTW9kdWxlUGFyc2VNb2RlKHNvdXJjZVBhcnNlTW9kZSgpKSkp
KSB7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSghZmluZENsb3NldEFzeW5jRnVuY3Rpb25T
Y29wZSgpLCAiQ2Fubm90IHVzZSAnYXdhaXQnIHdpdGhpbiBzdGF0aWMgYmxvY2sgc2NvcGUiKTsK
ICAgICAgICAgcmV0dXJuIHBhcnNlQXdhaXRFeHByZXNzaW9uKGNvbnRleHQpOworICAgIH0KIAog
ICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCAyZjYwNjhiNmU1OTYuLjNmZTEyYTA2Nzcz
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVudC5oIgorI2luY2x1
ZGUgPGNzdGRkZWY+CiAjaW5jbHVkZSA8d3RmL0ZpeGVkVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSXRlcmF0aW9uU3RhdHVzLmg+CkBAIC0yMzQsNiAr
MjM1LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6U2V0dGVyTW9k
ZToKICAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGU6CiAgICAgICAgIGNh
c2UgU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlOgorICAgICAgICBj
YXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNCbG9ja01vZGU6CiAgICAgICAgICAgICBz
ZXRJc0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMjc3LDYgKzI3OSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldElzQ2F0Y2hCbG9ja1Njb3BlKCkgeyBtX2lzQ2F0Y2hCbG9j
a1Njb3BlID0gdHJ1ZTsgfQogICAgIGJvb2wgaXNDYXRjaEJsb2NrU2NvcGUoKSB7IHJldHVybiBt
X2lzQ2F0Y2hCbG9ja1Njb3BlOyB9CiAKKyAgICB2b2lkIHNldElzU3RhdGljQmxvY2tTY29wZSgp
IHsgbV9pc1N0YXRpY0Jsb2NrU2NvcGUgPSB0cnVlOyB9CisgICAgYm9vbCBpc1N0YXRpY0Jsb2Nr
U2NvcGUoKSB7IHJldHVybiBtX2lzU3RhdGljQmxvY2tTY29wZTsgfQorCiAgICAgdm9pZCBzZXRJ
c0xleGljYWxTY29wZSgpIAogICAgIHsgCiAgICAgICAgIG1faXNMZXhpY2FsU2NvcGUgPSB0cnVl
OwpAQCAtODk1LDYgKzkwMCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzR2xvYmFsQ29kZVNj
b3BlIDogMSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU2ltcGxlQ2F0Y2hQYXJhbWV0ZXJTY29w
ZSA6IDEgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0NhdGNoQmxvY2tTY29wZSA6IDEgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9pc1N0YXRpY0Jsb2NrU2NvcGUgOiAxIHsgZmFsc2UgfTsKICAgICBi
b29sIG1faXNGdW5jdGlvbkJvdW5kYXJ5IDogMSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzVmFs
aWRTdHJpY3RNb2RlIDogMSB7IHRydWUgfTsKICAgICBib29sIG1faGFzQXJndW1lbnRzIDogMSB7
IGZhbHNlIH07CkBAIC0xNzU1LDcgKzE3NjEsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQo
VHJlZUJ1aWxkZXImKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0
ZW1lbnQgcGFyc2VFeHByZXNzaW9uT3JMYWJlbFN0YXRlbWVudChUcmVlQnVpbGRlciYsIGJvb2wg
YWxsb3dGdW5jdGlvbkRlY2xhcmF0aW9uQXNTdGF0ZW1lbnQpOwogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUlmU3RhdGVtZW50KFRyZWVCdWlsZGVy
Jik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IHBhcnNl
QmxvY2tTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImLCBib29sIGlzQ2F0Y2hCbG9jayA9IGZhbHNlKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VCbG9j
a1N0YXRlbWVudChUcmVlQnVpbGRlciYsIGJvb2wgaXNDYXRjaEJsb2NrID0gZmFsc2UsIGJvb2wg
aXNTdGF0aWNCbG9jayA9IGZhbHNlKTsKIAogICAgIGVudW0gY2xhc3MgSXNPbmx5Q2hpbGRPZlN0
YXRlbWVudCB7IFllcywgTm8gfTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRy
ZWVFeHByZXNzaW9uIHBhcnNlRXhwcmVzc2lvbihUcmVlQnVpbGRlciYsIElzT25seUNoaWxkT2ZT
dGF0ZW1lbnQgPSBJc09ubHlDaGlsZE9mU3RhdGVtZW50OjpObyk7CkBAIC0xODc4LDcgKzE4ODQs
NyBAQCBwcml2YXRlOgogCiAgICAgQUxXQVlTX0lOTElORSBib29sIGNhblVzZUlkZW50aWZpZXJB
d2FpdCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9wYXJzZXJTdGF0ZS5hbGxvd0F3YWl0ICYm
ICFjdXJyZW50U2NvcGUoKS0+aXNBc3luY0Z1bmN0aW9uKCkgJiYgbV9zY3JpcHRNb2RlICE9IEpT
UGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlOworICAgICAgICByZXR1cm4gbV9wYXJzZXJTdGF0ZS5h
bGxvd0F3YWl0ICYmICFjdXJyZW50U2NvcGUoKS0+aXNBc3luY0Z1bmN0aW9uKCkgJiYgIWN1cnJl
bnRTY29wZSgpLT5pc1N0YXRpY0Jsb2NrU2NvcGUoKSAmJiBtX3NjcmlwdE1vZGUgIT0gSlNQYXJz
ZXJTY3JpcHRNb2RlOjpNb2R1bGU7CiAgICAgfQogCiAgICAgYm9vbCBpc0Rpc2FsbG93ZWRJZGVu
dGlmaWVyWWllbGQoY29uc3QgSlNUb2tlbiYgdG9rZW4pCkBAIC0xOTM2LDYgKzE5NDIsOCBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKCFtX3BhcnNlclN0YXRlLmFsbG93QXdhaXQgfHwg
Y3VycmVudFNjb3BlKCktPmlzQXN5bmNGdW5jdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuICJp
biBhbiBhc3luYyBmdW5jdGlvbiI7CisgICAgICAgIGlmIChjdXJyZW50U2NvcGUoKS0+aXNTdGF0
aWNCbG9ja1Njb3BlKCkpCisgICAgICAgICAgICByZXR1cm4gImNyb3NzIHN0YXRpYyBibG9jayBi
b3VuZGFyeSI7CiAgICAgICAgIGlmIChtX3NjcmlwdE1vZGUgPT0gSlNQYXJzZXJTY3JpcHRNb2Rl
OjpNb2R1bGUpCiAgICAgICAgICAgICByZXR1cm4gImluIGEgbW9kdWxlIjsKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE5NTIsNiArMTk2MCwzMiBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgZmluZENsb3NldEZ1bmN0aW9uU2NvcGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmRT
Y29wZVVudGlsU3RhdGljQmxvY2soWyZdKHNpemVfdCBpKSB7CisgICAgICAgICAgICByZXR1cm4g
bV9zY29wZVN0YWNrW2ldLmlzRnVuY3Rpb24oKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSBib29sIGZpbmRDbG9zZXRBc3luY0Z1bmN0aW9uU2NvcGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZpbmRTY29wZVVudGlsU3RhdGljQmxvY2soWyZdKHNpemVfdCBpKSB7
CisgICAgICAgICAgICByZXR1cm4gbV9zY29wZVN0YWNrW2ldLmlzQXN5bmNGdW5jdGlvbigpOwor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJc1Njb3BlRnVuY3Rv
cj4KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZmluZFNjb3BlVW50aWxTdGF0aWNCbG9jayhjb25z
dCBJc1Njb3BlRnVuY3RvciYgaXNTY29wZUZ1bmN0b3IpIHsKKyAgICAgICAgc2l6ZV90IGkgPSBt
X3Njb3BlU3RhY2suc2l6ZSgpIC0gMTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKG1f
c2NvcGVTdGFja1tpXS5pc1N0YXRpY0Jsb2NrU2NvcGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoaXNTY29wZUZ1bmN0b3IoaSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gd2hpbGUgKGktLSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKwogICAgIGVudW0gY2xhc3MgRnVuY3Rpb25QYXJzZVBoYXNlIHsgUGFy
YW1ldGVycywgQm9keSB9OwogICAgIHN0cnVjdCBQYXJzZXJTdGF0ZSB7CiAgICAgICAgIGludCBh
c3NpZ25tZW50Q291bnQgeyAwIH07CkBAIC0xOTY0LDYgKzE5OTgsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjb25zdCBJZGVudGlmaWVyKiBsYXN0UHJpdmF0ZU5hbWUgeyBudWxscHRyIH07CiAgICAg
ICAgIGJvb2wgYWxsb3dBd2FpdCB7IHRydWUgfTsKICAgICAgICAgYm9vbCBpc1BhcnNpbmdDbGFz
c0ZpZWxkSW5pdGlhbGl6ZXIgeyBmYWxzZSB9OworICAgICAgICBib29sIGlzUGFyc2luZ0NsYXNz
U3RhdGljQmxvY2sgeyBmYWxzZSB9OwogICAgIH07CiAKICAgICAvLyBJZiB5b3UncmUgdXNpbmcg
dGhpcyBkaXJlY3RseSwgeW91IHByb2JhYmx5IHNob3VsZCBiZSB1c2luZwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCmluZGV4IDdhMDY2YTZjNmE5Ni4uOWJhMDM1
NDhmN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1v
ZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCkBA
IC02OSw2ICs2OSw3IEBAIGVudW0gY2xhc3MgU291cmNlUGFyc2VNb2RlIDogdWludDhfdCB7CiAg
ICAgQXN5bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZSAgID0gMTcsCiAgICAgR2VuZXJhdG9y
V3JhcHBlck1ldGhvZE1vZGUgICAgICAgID0gMTgsCiAgICAgQ2xhc3NGaWVsZEluaXRpYWxpemVy
TW9kZSAgICAgICAgID0gMTksCisgICAgQ2xhc3NTdGF0aWNCbG9ja01vZGUgICAgICAgICAgICAg
ID0gMjAsCiB9OwogCiBjbGFzcyBTb3VyY2VQYXJzZU1vZGVTZXQgeyAKQEAgLTExOCw3ICsxMTks
OCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNGdW5jdGlvblBhcnNlTW9kZShTb3VyY2VQYXJzZU1v
ZGUgcGFyc2VNb2RlKQogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yQm9k
eU1vZGUsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyRnVu
Y3Rpb25Nb2RlLAogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBl
ck1ldGhvZE1vZGUsCi0gICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxp
emVyTW9kZSkuY29udGFpbnMocGFyc2VNb2RlKTsKKyAgICAgICAgU291cmNlUGFyc2VNb2RlOjpD
bGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlLAorICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkNsYXNz
U3RhdGljQmxvY2tNb2RlKS5jb250YWlucyhwYXJzZU1vZGUpOwogfSAKIAogQUxXQVlTX0lOTElO
RSBib29sIGlzQXN5bmNGdW5jdGlvblBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2Rl
KSAKQEAgLTIwNiw3ICsyMDgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNZXRob2RQYXJzZU1v
ZGUoU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpT
ZXR0ZXJNb2RlLAogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGUsCiAgICAgICAg
IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlLAotICAgICAgICBTb3VyY2VQYXJzZU1v
ZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7
CisgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9k
ZSwKKyAgICAgICAgU291cmNlUGFyc2VNb2RlOjpDbGFzc1N0YXRpY0Jsb2NrTW9kZSkuY29udGFp
bnMocGFyc2VNb2RlKTsKIH0KIAogQUxXQVlTX0lOTElORSBib29sIGlzR2VuZXJhdG9yT3JBc3lu
Y0Z1bmN0aW9uQm9keVBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAppbmRleCBlZDBkYTVmZTU2
NjYuLmMyODc5ZTVlYWE4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmgKQEAgLTE0OCw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBPcHRpb25TZXQ8TGV4ZXJGbGFncz4gRG9udEJ1aWxkU3RyaW5ncyA9IExleGVyRmxhZ3M6
OkRvbnRCdWlsZFN0cmluZ3M7CiAKICAgICBpbnQgY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJl
dHVybiBTb3VyY2VFbGVtZW50c1Jlc3VsdDsgfQotICAgIEV4cHJlc3Npb25UeXBlIG1ha2VGdW5j
dGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBib29s
LCBpbnQsIGludCwgaW50LCBpbnQsIHNpemVfdCwgYm9vbCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0K
KyAgICBFeHByZXNzaW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBzaXplX3Qs
IGJvb2wsIGJvb2wgPSBmYWxzZSkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KICAgICBFeHByZXNzaW9u
VHlwZSBjcmVhdGVDb21tYUV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5
cGUpIHsgcmV0dXJuIENvbW1hRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGFwcGVuZFRvQ29t
bWFFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlLCBFeHByZXNzaW9u
VHlwZSwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIENvbW1hRXhwcjsgfQogICAgIEV4cHJlc3Np
b25UeXBlIG1ha2VBc3NpZ25Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25U
eXBlLCBPcGVyYXRvciwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGJvb2wsIGludCwgaW50LCBpbnQp
IHsgcmV0dXJuIEFzc2lnbm1lbnRFeHByOyB9CkBAIC0xOTUsNyArMTk1LDcgQEAgcHVibGljOgog
ICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVlpZWxkKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25UeXBlLCBib29sLCBpbnQsIGludCwgaW50KSB7IHJldHVybiBZaWVsZEV4cHI7IH0K
ICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVBd2FpdChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uVHlwZSwgaW50LCBpbnQsIGludCkgeyByZXR1cm4gQXdhaXRFeHByOyB9CiAgICAg
Q2xhc3NFeHByZXNzaW9uIGNyZWF0ZUNsYXNzRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBj
b25zdCBQYXJzZXJDbGFzc0luZm88U3ludGF4Q2hlY2tlcj4mLCBWYXJpYWJsZUVudmlyb25tZW50
JiYsIFZhcmlhYmxlRW52aXJvbm1lbnQmJiwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBl
LCBQcm9wZXJ0eUxpc3QsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIENsYXNzRXhwcjsgfQotICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZUZ1bmN0aW9uRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBjb25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mKSB7IHJldHVybiBGdW5j
dGlvbkV4cHI7IH0KKyAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+
JiwgYm9vbCA9IGZhbHNlKSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KICAgICBFeHByZXNzaW9u
VHlwZSBjcmVhdGVHZW5lcmF0b3JGdW5jdGlvbkJvZHkoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
Y29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+JiwgY29uc3QgSWRlbnRpZmll
ciYpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUFz
eW5jRnVuY3Rpb25Cb2R5KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckZ1bmN0
aW9uSW5mbzxTeW50YXhDaGVja2VyPiYpIHsgcmV0dXJuIEZ1bmN0aW9uRXhwcjsgfQogICAgIGlu
dCBjcmVhdGVGdW5jdGlvbk1ldGFkYXRhKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50LCBpbnQsIGludCwgSW1wbGVt
ZW50YXRpb25WaXNpYmlsaXR5LCBMZXhpY2FsU2NvcGVGZWF0dXJlcywgQ29uc3RydWN0b3JLaW5k
LCBTdXBlckJpbmRpbmcsIHVuc2lnbmVkLCBTb3VyY2VQYXJzZU1vZGUsIGJvb2wpIHsgcmV0dXJu
IEZ1bmN0aW9uQm9keVJlc3VsdDsgfQpAQCAtMjM5LDYgKzIzOSwxMCBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICByZXR1cm4gUHJvcGVydHkodHlwZSk7CiAgICAgfQorICAgIFByb3BlcnR5IGNy
ZWF0ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXIqLCBQcm9wZXJ0eU5vZGU6OlR5cGUgdHlwZSwg
U3VwZXJCaW5kaW5nLCBDbGFzc0VsZW1lbnRUYWcpCisgICAgeworICAgICAgICByZXR1cm4gUHJv
cGVydHkodHlwZSk7CisgICAgfQogICAgIGludCBjcmVhdGVQcm9wZXJ0eUxpc3QoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgUHJvcGVydHkpIHsgcmV0dXJuIFByb3BlcnR5TGlzdFJlc3VsdDsgfQog
ICAgIGludCBjcmVhdGVQcm9wZXJ0eUxpc3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUHJvcGVy
dHksIGludCkgeyByZXR1cm4gUHJvcGVydHlMaXN0UmVzdWx0OyB9CiAgICAgaW50IGNyZWF0ZUVs
ZW1lbnRMaXN0KGludCwgaW50KSB7IHJldHVybiBFbGVtZW50c0xpc3RSZXN1bHQ7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3Bw
CmluZGV4IDM3NjRlODk5M2IxMC4uOGY3OWU0NjZhMTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAKQEAgLTIwNiw2ICsy
MDYsNyBAQCBKU1N0cmluZyogRnVuY3Rpb25FeGVjdXRhYmxlOjp0b1N0cmluZ1Nsb3coSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIAogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpBcnJv
d0Z1bmN0aW9uTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRp
YWxpemVyTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNCbG9ja01v
ZGU6CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jRnVu
Y3Rpb25Nb2RlOgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvY2xhc3Mtc3RhdGljLWJsb2Nr
LmpzIGIvSlNUZXN0cy9zdHJlc3MvY2xhc3Mtc3RhdGljLWJsb2NrLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzljOWM0MzI4NmFjCi0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy9zdHJlc3MvY2xhc3Mtc3RhdGljLWJsb2NrLmpzCkBAIC0wLDAgKzEsMjUxIEBA
CitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikgeworICAgICAgICB0aHJvdyAiV3Jv
bmchIgorICAgIH0KK30KKworLy8gLS0tLS0tLS0tLSBzaW5nbGUgc3RhdGljIGJsb2NrIC0tLS0t
LS0tLS0gCit7CisgICAgdmFyIHkgPSAnT3V0ZXIgeSc7CisKKyAgICBjbGFzcyBBIHsKKyAgICAg
ICAgc3RhdGljIGZpZWxkID0gJ0lubmVyIHknOworICAgICAgICBzdGF0aWMgeworICAgICAgICAg
ICAgdmFyIHkgPSB0aGlzLmZpZWxkOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBhc3NlcnQo
eSA9PSAnT3V0ZXIgeScpOworfQorCisvLyAgLS0tLS0tLS0tLSBtdWx0aXBsZSBzdGF0aWMgYmxv
Y2tzIC0tLS0tLS0tLS0gCit7CisgICAgY2xhc3MgQyB7CisgICAgICAgIHN0YXRpYyB7CisgICAg
ICAgICAgICBhc3NlcnQodGhpcy54ID09IHVuZGVmaW5lZCk7CisgICAgICAgIH0KKyAgICAgICAg
c3RhdGljIHggPSAxMDsKKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGFzc2VydCh0aGlz
LnggPT0gMTApOworICAgICAgICAgICAgYXNzZXJ0KHRoaXMueSA9PSB1bmRlZmluZWQpOworICAg
ICAgICB9CisgICAgICAgIHN0YXRpYyB5ID0gMjA7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAg
ICAgICBhc3NlcnQodGhpcy55ID09IDIwKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gIC0t
LS0tLS0tLS0gdXNpbmcgdGhpcyAtLS0tLS0tLS0tIAoreworICAgIGNsYXNzIEEgeworICAgICAg
ICBzdGF0aWMgZmllbGQgPSAnQSBzdGF0aWMgZmllbGQnOworICAgICAgICBzdGF0aWMgeworICAg
ICAgICAgICAgYXNzZXJ0KHRoaXMuZmllbGQgPT0gJ0Egc3RhdGljIGZpZWxkJyk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKKy8vICAtLS0tLS0tLS0tIHVzaW5nIHN1cGVyIC0tLS0tLS0tLS0gCit7
CisgICAgY2xhc3MgQSB7CisgICAgICAgIHN0YXRpYyBmaWVsZEEgPSAnQS5maWVsZEEnOworICAg
IH0KKyAgICBjbGFzcyBCIGV4dGVuZHMgQSB7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAgICAg
ICBhc3NlcnQoc3VwZXIuZmllbGRBID09ICdBLmZpZWxkQScpOworICAgICAgICB9CisgICAgfQor
fQorCisvLyAgLS0tLS0tLS0tLSBhY2Nlc3MgdG8gcHJpdmF0ZSBmaWVsZHMgLS0tLS0tLS0tLSAK
K3sKKyAgICBsZXQgZ2V0RFByaXZhdGVGaWVsZDsKKworICAgIGNsYXNzIEQgeworICAgICAgICAj
cHJpdmF0ZUZpZWxkOworICAgICAgICBjb25zdHJ1Y3Rvcih2KSB7CisgICAgICAgICAgICB0aGlz
LiNwcml2YXRlRmllbGQgPSB2OworICAgICAgICB9CisgICAgICAgIHN0YXRpYyB7CisgICAgICAg
ICAgICBnZXREUHJpdmF0ZUZpZWxkID0gKGQpID0+IGQuI3ByaXZhdGVGaWVsZDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGFzc2VydChnZXREUHJpdmF0ZUZpZWxkKG5ldyBEKCdwcml2YXRlJykp
ID09ICdwcml2YXRlJyk7Cit9CisKKy8vIC0tLS0tLS0tLS0gImZyaWVuZCIgYWNjZXNzIC0tLS0t
LS0tLS0KK3sKKyAgICBsZXQgQSwgQjsKKworICAgIGxldCBmcmllbmRBOworCisgICAgQSA9IGNs
YXNzIEEgeworICAgICAgICAjeDsKKyAgICAgICAgY29uc3RydWN0b3IoeCkgeworICAgICAgICAg
ICAgdGhpcy4jeCA9IHg7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAg
IGZyaWVuZEEgPSB7CisgICAgICAgICAgICAgICAgZ2V0WChvYmopIHsgcmV0dXJuIG9iai4jeCB9
LAorICAgICAgICAgICAgICAgIHNldFgob2JqLCB2YWx1ZSkgeyBvYmouI3ggPSB2YWx1ZSB9Cisg
ICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGdldFgoKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy4jeDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBCID0gY2xhc3MgQiB7Cisg
ICAgICAgIGNvbnN0cnVjdG9yKGEpIHsKKyAgICAgICAgICAgIGNvbnN0IHggPSBmcmllbmRBLmdl
dFgoYSk7CisgICAgICAgICAgICBmcmllbmRBLnNldFgoYSwgeCArIDMyKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBsZXQgYSA9IG5ldyBBKDEwKTsKKyAgICBuZXcgQihhKTsKKworICAgIGFz
c2VydChhLmdldFgoKSA9PSA0Mik7Cit9CisKKy8vIC0tLS0tLS0tLS0gT3RoZXJzIC0tLS0tLS0t
LS0KK3sKKyAgICBmdW5jdGlvbiBkb1NvbWV0aGluZ1dpdGgoeCkgeworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgeTogeCArIDEsCisgICAgICAgICAgICB6OiB4ICsgMgorICAgICAgICB9
OworICAgIH0KKworICAgIGNsYXNzIEMgeworICAgICAgICBzdGF0aWMgeCA9IDEwOworICAgICAg
ICBzdGF0aWMgeTsKKyAgICAgICAgc3RhdGljIHo7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IGRvU29tZXRoaW5nV2l0aCh0
aGlzLngpOworICAgICAgICAgICAgICAgIHRoaXMueSA9IG9iai55OworICAgICAgICAgICAgICAg
IHRoaXMueiA9IG9iai56OworICAgICAgICAgICAgfSBjYXRjaCB7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoQy55ID09IDExKTsKKyAgICBhc3NlcnQoQy56
ID09IDEyKTsKK30KKworeworICAgIGNsYXNzIEMgeworICAgICAgICBzdGF0aWMgeTsKKyAgICAg
ICAgc3RhdGljIHo7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIHRocm93ICJlcnIiOworICAgICAgICAgICAgfSBjYXRjaCB7CisgICAgICAgICAg
ICAgICAgdGhpcy55ID0gMTM7CisgICAgICAgICAgICAgICAgdGhpcy56ID0gMTQ7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoQy55ID09IDEzKTsKKyAgICBh
c3NlcnQoQy56ID09IDE0KTsKK30KKworeworICAgIGNsYXNzIEMgeworICAgICAgICBzdGF0aWMg
eworICAgICAgICAgICAgZnVuY3Rpb24gaW5uZXIoKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsg
fSBjYXRjaCAoYXdhaXQpIHsgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit7CisgICAgY2xhc3MgQyB7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAgICAgICBhc3luYyBm
dW5jdGlvbiBpbm5lcigpIHsKKyAgICAgICAgICAgICAgICBhd2FpdCAwOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCit7CisgICAgYXN5bmMgZnVuY3Rpb24gaW5uZXIoKSB7
CisgICAgICAgIGNsYXNzIEMgeworICAgICAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgICAg
ICBhc3luYyBmdW5jdGlvbiBpbm5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgYXdhaXQgMDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3sKKyAgICB2YXIgdmFsdWUgPSBudWxsOworICAgIGNsYXNzIEMgeworICAgICAgICBzdGF0aWMg
eworICAgICAgICAgICAgZnVuY3Rpb24gaW5uZXIoKSB7CisgICAgICAgICAgICAgICAgdmFsdWUg
PSBuZXcudGFyZ2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5uZXIoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBhc3NlcnQodmFsdWUgPT0gdW5kZWZpbmVkKTsKK30KKworeworICAg
IGNsYXNzIEMgeworICAgICAgICBzdGF0aWMgeworICAgICAgICAgICAgdmFsdWUgPSBuZXcudGFy
Z2V0OworICAgICAgICB9CisgICAgfQorICAgIGFzc2VydCh2YWx1ZSA9PSB1bmRlZmluZWQpOwor
fQorCit7CisgICAgY2xhc3MgQyB7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAgICAgICBmdW5j
dGlvbiBpbm5lcigpIHsKKyAgICAgICAgICAgICAgICBsZXQgYXdhaXQgPSAxMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworeworICAgIGNsYXNzIEMgeworICAgICAgICBz
dGF0aWMgeworICAgICAgICAgICAgZnVuY3Rpb24gaW5uZXIoKSB7CisgICAgICAgICAgICAgICAg
W2F3YWl0XSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit7CisgICAg
Y2xhc3MgQyB7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAgICAgICBmdW5jdGlvbiBpbm5lcigp
IHsKKyAgICAgICAgICAgICAgICBbYXJndW1lbnRzXSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCit7CisgICAgY2xhc3MgQyB7CisgICAgICAgIHN0YXRpYyB7CisgICAg
ICAgICAgICBmdW5jdGlvbiBpbm5lcigpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudHNbMF07
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3Rlc3QyNjIvY29uZmlnLnlhbWwgYi9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKaW5kZXgg
NGZlNzEwMDQ1MTc0Li43Mzg4ZjU2MmIzNDcgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvdGVzdDI2Mi9j
b25maWcueWFtbAorKysgYi9KU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKQEAgLTIwLDcgKzIw
LDYgQEAgc2tpcDoKICAgICAtIHJlZ2V4cC1sb29rYmVoaW5kCiAgICAgLSByZWdleHAtdi1mbGFn
CiAgICAgLSByZXNpemFibGUtYXJyYXlidWZmZXIKLSAgICAtIGNsYXNzLXN0YXRpYy1ibG9jawog
ICAgIC0gY2FsbGFibGUtYm91bmRhcnktcmVhbG1zCiAgICAgLSBGaW5hbGl6YXRpb25SZWdpc3Ry
eS5wcm90b3R5cGUuY2xlYW51cFNvbWUKICAgICAtIEludGwuRHVyYXRpb25Gb3JtYXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>462688</attachid>
            <date>2022-09-28 11:02:48 -0700</date>
            <delta_ts>2022-09-28 22:13:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235085-20220928110247.patch</filename>
            <type>text/plain</type>
            <size>53419</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">RnJvbSA2ODE2MmQ3M2E1MzkyZWMwYzJkMDdjYTk5YTRjZDczZjM3NWQ2YjE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBZaWppYSBIdWFuZyA8aHlqb3JjMUBnbWFpbC5jb20+CkRhdGU6
IFdlZCwgMjggU2VwIDIwMjIgMTE6MDA6MzcgLTA3MDAKU3ViamVjdDogW1BBVENIXSBbSlNDXSBJ
bXBsZW1lbnQgc3VwcG9ydCBmb3IgY2xhc3Mgc3RhdGljIGluaXRpYWxpemF0aW9uCiBibG9ja3Mg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTA4NSByZGFyOi8vOTkw
NTY4ODIKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0
PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgoKQ2xhc3Mgc3RhdGljIGluaXRpYWxpemF0aW9uIGJsb2NrIGlzIGEgbmV3IGZl
YXR1cmUgb2YgYSBjbGFzcyB0byBwZXJmb3JtCmFkZGl0aW9uYWwgc3RhdGljIGluaXRpYWxpemF0
aW9uIGR1cmluZyBjbGFzcyBkZWZpbml0aW9uIGV2YWx1YXRpb24uCgpgYGAKY2xhc3MgQyB7CiAg
ICBzdGF0aWMgeyAvKiDigKYgKi8gfQp9CmBgYAoKVEMzOSBTcGVjOiBodHRwczovL3RjMzkuZXMv
cHJvcG9zYWwtY2xhc3Mtc3RhdGljLWJsb2NrLwpUQzM5IFByb3Bvc2FsOiBodHRwczovL2dpdGh1
Yi5jb20vdGMzOS9wcm9wb3NhbC1jbGFzcy1zdGF0aWMtYmxvY2sKTUROIFdlYiBEb2M6IGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJl
bmNlL0NsYXNzZXMvQ2xhc3Nfc3RhdGljX2luaXRpYWxpemF0aW9uX2Jsb2NrcwoKSW4gdGhpcyBw
YXRjaCwgc3RhdGljIGJsb2NrcyBhcmUgaW1wbGVtZW50ZWQgYXMgZnVuY3Rpb25zIHdoaWNoIGFy
ZQpldmFsdWF0ZWQgYWxvbmcgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb2Ygc3RhdGljIGNsYXNz
IGZpZWxkcyBkdXJpbmcKY2xhc3MgZGVmaW5pdGlvbiBldmFsdWF0aW9uLiBUaGlzIGNhbiBiZSBm
dXJ0aGVyIG9wdGltaXplZCBieSBpbmxpbmluZwpzdGF0aWMgYmxvY2sgZnVuY3Rpb25zIHRvIHRo
ZSBmaWVsZCBpbml0aWFsaXphdGlvbi4KCiogSlNUZXN0cy9zdHJlc3MvY2xhc3Mtc3RhdGljLWJs
b2NrLmpzOiBBZGRlZC4KKGFzc2VydCk6CihBKToKKGFzc2VydC5DKToKKGFzc2VydC5CKToKKGFz
c2VydC5EKToKKGFzc2VydC5BKToKKGFzc2VydC5BLmZyaWVuZEEucHJvdG90eXBlLmdldFgpOgoo
YXNzZXJ0LkEuZnJpZW5kQS5wcm90b3R5cGUuc2V0WCk6Cihhc3NlcnQuQS5wcm90b3R5cGUuZ2V0
WCk6Cihhc3NlcnQuaW5uZXIpOgooY2F0Y2guQy5wcm90b3R5cGUuYXN5bmMgaW5uZXIpOgooY2F0
Y2guQyk6CihjYXRjaCk6Cihhc3luYyBpbm5lci5DLnByb3RvdHlwZS5hc3luYyBpbm5lcik6Cihh
c3luYyBpbm5lci5DKToKKGFzeW5jIGlubmVyKToKKEMuaW5uZXIpOgooQyk6Cihhd2FpdC5DLmlu
bmVyKToKKGF3YWl0LkMpOgooYXdhaXQpOgooYXJndW1lbnRzLkMuaW5uZXIpOgooYXJndW1lbnRz
LkMpOgooYXJndW1lbnRzKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHA6CihKU0M6OlByb3BlcnR5TGlzdE5vZGU6OmVtaXRCeXRlY29kZSk6CihK
U0M6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKEpTQzo6RnVuY0V4cHJO
b2RlOjplbWl0Qnl0ZWNvZGUpOgoqIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVp
bGRlci5oOgooSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVGdW5jdGlvbkV4cHIpOgooSlNDOjpBU1RC
dWlsZGVyOjpjcmVhdGVQcm9wZXJ0eSk6CihKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNh
bGxOb2RlKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aDoKKEpTQzo6UHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUpOgooSlNDOjpGdW5jdGlvbkNhbGxW
YWx1ZU5vZGU6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZSk6CihKU0M6OkZ1bmNFeHByTm9kZTo6RnVu
Y0V4cHJOb2RlKToKKiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmg6CihKU0M6
OkZ1bmNFeHByTm9kZTo6aXNTdGF0aWNCbG9ja0Z1bmN0aW9uIGNvbnN0KToKKiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHA6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+Ojpp
c0Fycm93RnVuY3Rpb25QYXJhbWV0ZXJzKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
U3RhdGVtZW50TGlzdEl0ZW0pOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uTGlzdCk6CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUJyZWFrU3Rh
dGVtZW50KToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQ29udGludWVTdGF0ZW1lbnQp
OgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQpOgooSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VUcnlTdGF0ZW1lbnQpOgooSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VCbG9ja1N0YXRlbWVudCk6CihKU0M6OnN0cmluZ0FydGljbGVGb3JGdW5jdGlv
bk1vZGUpOgooSlNDOjpzdHJpbmdGb3JGdW5jdGlvbk1vZGUpOgooSlNDOjpQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VGdW5jdGlvblBhcmFtZXRlcnMpOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6
cGFyc2VGdW5jdGlvbkluZm8pOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyk6
CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzRmllbGRJbml0aWFsaXplclNvdXJj
ZUVsZW1lbnRzKToKKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24pOgooSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6
CihKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlc3Npb24pOgooSlNDOjpQ
YXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VVbmFyeUV4cHJlc3Npb24pOgoqIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmg6CihKU0M6OlNjb3BlOjpzZXRTb3VyY2VQYXJzZU1vZGUp
OgooSlNDOjpTY29wZTo6c2V0SXNTdGF0aWNCbG9ja1Njb3BlKToKKEpTQzo6U2NvcGU6OmlzU3Rh
dGljQmxvY2tTY29wZSk6CihKU0M6OlBhcnNlcjo6Y2FuVXNlSWRlbnRpZmllckF3YWl0KToKKEpT
Qzo6UGFyc2VyOjpkaXNhbGxvd2VkSWRlbnRpZmllckF3YWl0UmVhc29uKToKKEpTQzo6UGFyc2Vy
OjpmaW5kQ2xvc2V0RnVuY3Rpb25TY29wZSk6CihKU0M6OlBhcnNlcjo6ZmluZENsb3NldEFzeW5j
RnVuY3Rpb25TY29wZSk6CihKU0M6OlBhcnNlcjo6ZmluZFNjb3BlVW50aWxTdGF0aWNCbG9jayk6
CiogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oOgooSlNDOjppc0Z1
bmN0aW9uUGFyc2VNb2RlKToKKEpTQzo6aXNNZXRob2RQYXJzZU1vZGUpOgoqIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oOgooSlNDOjpTeW50YXhDaGVja2VyOjpt
YWtlRnVuY3Rpb25DYWxsTm9kZSk6CihKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUZ1bmN0aW9u
RXhwcik6CihKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVByb3BlcnR5KToKKiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgooSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OnRvU3RyaW5nU2xvdyk6Ci0tLQogLi4uL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwICAgICAgICAgICAgIHwgIDI1ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0FTVEJ1aWxkZXIuaCAgICAgfCAgMTQgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oICB8ICAxOCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oICAgICAgICAgIHwgIDI3ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAgICAgICAgfCAgOTYgKysrKystLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaCAgICAgICAgIHwgIDQ1ICsrKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyTW9kZXMuaCAgICB8ICAgNyArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9TeW50YXhDaGVja2VyLmggIHwgICA4ICstCiAuLi4vcnVudGltZS9GdW5jdGlvbkV4ZWN1
dGFibGUuY3BwICAgICAgICAgICAgfCAgIDEgKwogSlNUZXN0cy9zdHJlc3MvY2xhc3Mtc3RhdGlj
LWJsb2NrLmpzICAgICAgICAgIHwgMjUxICsrKysrKysrKysrKysrKysrKwogSlNUZXN0cy90ZXN0
MjYyL2NvbmZpZy55YW1sICAgICAgICAgICAgICAgICAgIHwgICAxIC0KIDExIGZpbGVzIGNoYW5n
ZWQsIDQ1MiBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBKU1Rlc3RzL3N0cmVzcy9jbGFzcy1zdGF0aWMtYmxvY2suanMKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggZDBkM2Jh
ZjBkYjMxLi5jMjBjNDI4MzRiMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTY0OSw3ICs2NDksNyBAQCBSZWdpc3Rl
cklEKiBQcm9wZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAocC0+aXNTdGF0aWNDbGFzc0ZpZWxkKCkpIHsKKyAgICAgICAgaWYgKHAtPmlzU3Rh
dGljQ2xhc3NFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChzdGF0aWNGaWVsZExvY2F0
aW9ucyk7CiAgICAgICAgICAgICBzdGF0aWNGaWVsZExvY2F0aW9ucy0+YXBwZW5kKHAtPnBvc2l0
aW9uKCkpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC03MTksNyArNzE5LDcgQEAgUmVnaXN0
ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKHAtPmlzU3RhdGljQ2xhc3NGaWVsZCgpKSB7CisgICAgICAg
ICAgICBpZiAocC0+aXNTdGF0aWNDbGFzc0VsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIEFT
U0VSVChzdGF0aWNGaWVsZExvY2F0aW9ucyk7CiAgICAgICAgICAgICAgICAgc3RhdGljRmllbGRM
b2NhdGlvbnMtPmFwcGVuZChwLT5wb3NpdGlvbigpKTsKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTEyNTYsMTEgKzEyNTYsMTggQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmUKICAgICBp
ZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQogICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFs
Q2hlY2soZnVuYy5nZXQoKSk7CiAKLSAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2Vu
ZXJhdG9yLCBtX2FyZ3MpOwotICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5l
cmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZXQ7CisgICAgaWYgKGlzU3RhdGljQmxvY2tGdW5jdGlvbkNhbGwoKSkgeworICAgICAg
ICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBudWxscHRyKTsKKyAgICAg
ICAgZ2VuZXJhdG9yLm1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9y
LnRoaXNSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWls
UG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1
Z2dhYmxlQ2FsbDo6WWVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBDYWxsQXJndW1lbnRzIGNh
bGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExv
YWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CisgICAgICAg
IHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9uKHJldHVyblZhbHVlLmdldCgp
LCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CisgICAgfQog
ICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIGRpdm90U3Rh
cnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gcmV0LmdldCgp
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsUmVz
b2x2ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDk4Miw2ICs0
OTg5LDEyIEBAIHZvaWQgRnVuY0RlY2xOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiAKIFJlZ2lzdGVySUQqIEZ1bmNFeHByTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIHsKKyAgICBpZiAoaXNTdGF0aWNCbG9ja0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGhvbWVPYmplY3QgPSBlbWl0SG9tZU9iamVjdEZvckNhbGxlZShnZW5lcmF0
b3IpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzID0gZ2VuZXJhdG9yLmVtaXROZXdG
dW5jdGlvbkV4cHJlc3Npb24oZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdGhpcyk7
CisgICAgICAgIGVtaXRQdXRIb21lT2JqZWN0KGdlbmVyYXRvciwgcmVzLmdldCgpLCBob21lT2Jq
ZWN0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHJlcy5nZXQoKTsKKyAgICB9CiAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCksIHRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNU
QnVpbGRlci5oCmluZGV4IDQ5ZDgxODU5MWE0NC4uZTE0YWZiM2EwM2EzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaApAQCAtMTMwLDcgKzEzMCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3RleHByIE9wdGlvblNldDxMZXhlckZsYWdzPiBEb250QnVpbGRT
dHJpbmdzID0geyB9OwogCiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VCaW5hcnlOb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIGludCB0b2tlbiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2RlKiwg
QmluYXJ5T3BJbmZvPiwgc3RkOjpwYWlyPEV4cHJlc3Npb25Ob2RlKiwgQmluYXJ5T3BJbmZvPik7
Ci0gICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHByZXZpb3VzQmFzZVdhc1N1cGVy
LCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RF
bmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wgaXNPcHRpb25hbENhbGwpOwor
ICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBFeHByZXNzaW9uTm9kZSogZnVuYywgYm9vbCBwcmV2aW91c0Jhc2VXYXNTdXBlciwg
QXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5k
LCBzaXplX3QgY2FsbE9yQXBwbHlDaGlsZERlcHRoLCBib29sIGlzT3B0aW9uYWxDYWxsLCBib29s
IGlzU3RhdGljQ2xhc3NCbG9ja0Z1bmN0aW9uQ2FsbCA9IGZhbHNlKTsKIAogICAgIEpTQzo6U291
cmNlRWxlbWVudHMqIGNyZWF0ZVNvdXJjZUVsZW1lbnRzKCkgeyByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBKU0M6OlNvdXJjZUVsZW1lbnRzKCk7IH0KIApAQCAtNDI1LDEwICs0MjUsMTAgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKLSAgICBFeHByZXNzaW9uTm9k
ZSogY3JlYXRlRnVuY3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNv
bnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxBU1RCdWlsZGVyPiYgZnVuY3Rpb25JbmZvKQorICAgIEV4
cHJlc3Npb25Ob2RlKiBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1aWxkZXI+JiBmdW5jdGlvbklu
Zm8sIGJvb2wgaXNTdGF0aWNCbG9ja0Z1bmN0aW9uID0gZmFsc2UpCiAgICAgewogICAgICAgICBG
dW5jRXhwck5vZGUqIHJlc3VsdCA9IG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY0V4cHJOb2RlKGxv
Y2F0aW9uLCAqZnVuY3Rpb25JbmZvLm5hbWUsIGZ1bmN0aW9uSW5mby5ib2R5LAotICAgICAgICAg
ICAgbV9zb3VyY2VDb2RlLT5zdWJFeHByZXNzaW9uKGZ1bmN0aW9uSW5mby5zdGFydE9mZnNldCwg
ZnVuY3Rpb25JbmZvLmVuZE9mZnNldCwgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25J
bmZvLnBhcmFtZXRlcnNTdGFydENvbHVtbikpOworICAgICAgICAgICAgbV9zb3VyY2VDb2RlLT5z
dWJFeHByZXNzaW9uKGZ1bmN0aW9uSW5mby5zdGFydE9mZnNldCwgZnVuY3Rpb25JbmZvLmVuZE9m
ZnNldCwgZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLnBhcmFtZXRlcnNTdGFy
dENvbHVtbiksIGlzU3RhdGljQmxvY2tGdW5jdGlvbik7CiAgICAgICAgIGZ1bmN0aW9uSW5mby5i
b2R5LT5zZXRMb2MoZnVuY3Rpb25JbmZvLnN0YXJ0TGluZSwgZnVuY3Rpb25JbmZvLmVuZExpbmUs
IGxvY2F0aW9uLnN0YXJ0T2Zmc2V0LCBsb2NhdGlvbi5saW5lU3RhcnRPZmZzZXQpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTUyMCw2ICs1MjAsMTAgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBQcm9wZXJ0eU5vZGUoaWRlbnQsIG1ldGhv
ZERlZiwgdHlwZSwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIHRhZyk7CiAgICAgfQogCisgICAgUHJv
cGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5Tm9kZTo6VHlwZSB0eXBlLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nLCBDbGFz
c0VsZW1lbnRUYWcgdGFnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YSkgUHJvcGVydHlOb2RlKCpwcm9wZXJ0eU5hbWUsIHR5cGUsIHN1cGVyQmluZGluZywgdGFnKTsK
KyAgICB9CiAgICAgUHJvcGVydHlOb2RlKiBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVy
KiBwcm9wZXJ0eU5hbWUsIEV4cHJlc3Npb25Ob2RlKiBub2RlLCBQcm9wZXJ0eU5vZGU6OlR5cGUg
dHlwZSwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywgSW5mZXJOYW1lIGluZmVyTmFtZSwgQ2xh
c3NFbGVtZW50VGFnIHRhZykKICAgICB7CiAgICAgICAgIGlmIChpbmZlck5hbWUgPT0gSW5mZXJO
YW1lOjpBbGxvd2VkKSB7CkBAIC0xNDE3LDcgKzE0MjEsNyBAQCBFeHByZXNzaW9uTm9kZSogQVNU
QnVpbGRlcjo6bWFrZUNvYWxlc2NlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBFeAogICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIENvYWxlc2NlTm9kZShsb2NhdGlv
biwgZXhwcjEsIGV4cHIyLCBoYXNBYnNvcmJlZE9wdGlvbmFsQ2hhaW4pOwogfQogCi1FeHByZXNz
aW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNl
V2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFwcGx5Q2hpbGREZXB0aCwgYm9vbCBpc09wdGlvbmFs
Q2FsbCkKK0V4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlRnVuY3Rpb25DYWxsTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZnVuYywgYm9v
bCBwcmV2aW91c0Jhc2VXYXNTdXBlciwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3QgY2FsbE9yQXBwbHlDaGlsZERlcHRoLCBi
b29sIGlzT3B0aW9uYWxDYWxsLCBib29sIGlzU3RhdGljQmxvY2tGdW5jdGlvbkNhbGwpCiB7CiAg
ICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5lU3RhcnRPZmZzZXQpOwogICAgIGlm
IChmdW5jLT5pc1N1cGVyTm9kZSgpKQpAQCAtMTQ0Myw3ICsxNDQ3LDcgQEAgRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24KICAgICB9CiAKICAgICBpZiAoIWZ1bmMtPmlzTG9jYXRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25DYWxsVmFsdWVOb2RlKGxvY2F0
aW9uLCBmdW5jLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOworICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRpb24s
IGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgaXNTdGF0aWNCbG9ja0Z1
bmN0aW9uQ2FsbCk7CiAgICAgaWYgKGZ1bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBS
ZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZnVuYyk7CiAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSByZXNvbHZlLT5pZGVudGlmaWVy
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1
Y3RvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5o
CmluZGV4IGI0ZGYyNDQ1ODkyNi4uZTA5ZmEwNmU4ODQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaApAQCAtMjUwLDYgKzI1MCwxNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCisgICAgaW5saW5lIFByb3BlcnR5Tm9kZTo6
UHJvcGVydHlOb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIFR5cGUgdHlwZSwgU3VwZXJCaW5k
aW5nIHN1cGVyQmluZGluZywgQ2xhc3NFbGVtZW50VGFnIHRhZykKKyAgICAgICAgOiBtX25hbWUo
Jm5hbWUpCisgICAgICAgICwgbV9leHByZXNzaW9uKG51bGxwdHIpCisgICAgICAgICwgbV9hc3Np
Z24obnVsbHB0cikKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX25lZWRzU3Vw
ZXJCaW5kaW5nKHN1cGVyQmluZGluZyA9PSBTdXBlckJpbmRpbmc6Ok5lZWRlZCkKKyAgICAgICAg
LCBtX2NsYXNzRWxlbWVudFRhZyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGFnKSkKKyAgICAgICAg
LCBtX2lzT3ZlcnJpZGRlbkJ5RHVwbGljYXRlKGZhbHNlKQorICAgIHsKKyAgICB9CisKICAgICBp
bmxpbmUgUHJvcGVydHlOb2RlOjpQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
RXhwcmVzc2lvbk5vZGUqIGFzc2lnbiwgVHlwZSB0eXBlLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5k
aW5nLCBDbGFzc0VsZW1lbnRUYWcgdGFnKQogICAgICAgICA6IG1fbmFtZSgmbmFtZSkKICAgICAg
ICAgLCBtX2V4cHJlc3Npb24obnVsbHB0cikKQEAgLTM5OCwxMSArNDA5LDEyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgRnVuY3Rpb25DYWxsVmFsdWVOb2Rl
OjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKKyAgICBpbmxpbmUgRnVuY3Rpb25DYWxsVmFsdWVOb2Rl
OjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGV4cHIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgY29uc3QgYm9vbCBpc1N0YXRpY0Jsb2NrRnVuY3Rpb25D
YWxsKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAsIFRocm93
YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKICAgICAgICAg
LCBtX2V4cHIoZXhwcikKICAgICAgICAgLCBtX2FyZ3MoYXJncykKKyAgICAgICAgLCBtX2lzU3Rh
dGljQmxvY2tGdW5jdGlvbkNhbGwoaXNTdGF0aWNCbG9ja0Z1bmN0aW9uQ2FsbCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChkaXZvdC5vZmZzZXQgPj0gZGl2b3RTdGFydC5vZmZzZXQpOwogICAgIH0K
QEAgLTEwMTksMTMgKzEwMzEsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1fbWV0YWRh
dGEtPmZpbmlzaFBhcnNpbmcoc291cmNlLCBpZGVudCwgZnVuY3Rpb25Nb2RlKTsKICAgICB9CiAK
LSAgICBpbmxpbmUgRnVuY0V4cHJOb2RlOjpGdW5jRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEZ1bmN0aW9uTWV0YWRhdGFO
b2RlKiBtZXRhZGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgIGlubGluZSBGdW5j
RXhwck5vZGU6OkZ1bmNFeHByTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgRnVuY3Rpb25NZXRhZGF0YU5vZGUqIG1ldGFkYXRhLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNTdGF0aWNCbG9ja0Z1bmN0aW9uKQogICAg
ICAgICA6IEJhc2VGdW5jRXhwck5vZGUobG9jYXRpb24sIGlkZW50LCBtZXRhZGF0YSwgc291cmNl
LCBGdW5jdGlvbk1vZGU6OkZ1bmN0aW9uRXhwcmVzc2lvbikKKyAgICAgICAgLCBtX2lzU3RhdGlj
QmxvY2tGdW5jdGlvbihpc1N0YXRpY0Jsb2NrRnVuY3Rpb24pCiAgICAgewogICAgIH0KIAogICAg
IGlubGluZSBGdW5jRXhwck5vZGU6OkZ1bmNFeHByTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
IGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRnVuY3Rpb25NZXRhZGF0YU5vZGUq
IG1ldGFkYXRhLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEZ1bmN0aW9uTW9kZSBmdW5jdGlv
bk1vZGUpCiAgICAgICAgIDogQmFzZUZ1bmNFeHByTm9kZShsb2NhdGlvbiwgaWRlbnQsIG1ldGFk
YXRhLCBzb3VyY2UsIGZ1bmN0aW9uTW9kZSkKKyAgICAgICAgLCBtX2lzU3RhdGljQmxvY2tGdW5j
dGlvbihmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5oCmluZGV4IDI1M2U2ZGFkZTdmMi4uZjkxZmZkYWU3OTM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC03MzYsOCArNzM2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgZW51bSBjbGFzcyBDbGFzc0VsZW1lbnRUYWcgOiB1aW50OF90IHsgTm8sIEluc3RhbmNlLCBT
dGF0aWMsIExhc3RUYWcgfTsKICAgICBjbGFzcyBQcm9wZXJ0eU5vZGUgZmluYWwgOiBwdWJsaWMg
UGFyc2VyQXJlbmFGcmVlYWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBlbnVtIFR5cGUgOiB1
aW50MTZfdCB7IENvbnN0YW50ID0gMSwgR2V0dGVyID0gMiwgU2V0dGVyID0gNCwgQ29tcHV0ZWQg
PSA4LCBTaG9ydGhhbmQgPSAxNiwgU3ByZWFkID0gMzIsIFByaXZhdGVGaWVsZCA9IDY0LCBQcml2
YXRlTWV0aG9kID0gMTI4LCBQcml2YXRlU2V0dGVyID0gMjU2LCBQcml2YXRlR2V0dGVyID0gNTEy
IH07CisgICAgICAgIGVudW0gVHlwZSA6IHVpbnQxNl90IHsgQ29uc3RhbnQgPSAxLCBHZXR0ZXIg
PSAyLCBTZXR0ZXIgPSA0LCBDb21wdXRlZCA9IDgsIFNob3J0aGFuZCA9IDE2LCBTcHJlYWQgPSAz
MiwgUHJpdmF0ZUZpZWxkID0gNjQsIFByaXZhdGVNZXRob2QgPSAxMjgsIFByaXZhdGVTZXR0ZXIg
PSAyNTYsIFByaXZhdGVHZXR0ZXIgPSA1MTIsIEJsb2NrID0gMTAyNCB9OwogCisgICAgICAgIFBy
b3BlcnR5Tm9kZShjb25zdCBJZGVudGlmaWVyJiwgVHlwZSwgU3VwZXJCaW5kaW5nLCBDbGFzc0Vs
ZW1lbnRUYWcpOwogICAgICAgICBQcm9wZXJ0eU5vZGUoY29uc3QgSWRlbnRpZmllciYsIEV4cHJl
c3Npb25Ob2RlKiwgVHlwZSwgU3VwZXJCaW5kaW5nLCBDbGFzc0VsZW1lbnRUYWcpOwogICAgICAg
ICBQcm9wZXJ0eU5vZGUoRXhwcmVzc2lvbk5vZGUqLCBUeXBlLCBTdXBlckJpbmRpbmcsIENsYXNz
RWxlbWVudFRhZyk7CiAgICAgICAgIFByb3BlcnR5Tm9kZShFeHByZXNzaW9uTm9kZSogcHJvcGVy
dHlOYW1lLCBFeHByZXNzaW9uTm9kZSosIFR5cGUsIFN1cGVyQmluZGluZywgQ2xhc3NFbGVtZW50
VGFnKTsKQEAgLTc1NCw2ICs3NTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBp
c0NsYXNzRmllbGQoKSBjb25zdCB7IHJldHVybiBpc0NsYXNzUHJvcGVydHkoKSAmJiAhbmVlZHNT
dXBlckJpbmRpbmcoKTsgfQogICAgICAgICBib29sIGlzSW5zdGFuY2VDbGFzc0ZpZWxkKCkgY29u
c3QgeyByZXR1cm4gaXNJbnN0YW5jZUNsYXNzUHJvcGVydHkoKSAmJiAhbmVlZHNTdXBlckJpbmRp
bmcoKTsgfQogICAgICAgICBib29sIGlzU3RhdGljQ2xhc3NGaWVsZCgpIGNvbnN0IHsgcmV0dXJu
IGlzU3RhdGljQ2xhc3NQcm9wZXJ0eSgpICYmICFuZWVkc1N1cGVyQmluZGluZygpOyB9CisgICAg
ICAgIGJvb2wgaXNTdGF0aWNDbGFzc0Jsb2NrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgQmxv
Y2s7IH0KKyAgICAgICAgYm9vbCBpc1N0YXRpY0NsYXNzRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IGlzU3RhdGljQ2xhc3NCbG9jaygpIHx8IGlzU3RhdGljQ2xhc3NGaWVsZCgpOyB9CiAgICAgICAg
IGJvb2wgaXNPdmVycmlkZGVuQnlEdXBsaWNhdGUoKSBjb25zdCB7IHJldHVybiBtX2lzT3ZlcnJp
ZGRlbkJ5RHVwbGljYXRlOyB9CiAgICAgICAgIGJvb2wgaXNQcml2YXRlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlICYgKFByaXZhdGVGaWVsZCB8IFByaXZhdGVNZXRob2QgfCBQcml2YXRlR2V0dGVy
IHwgUHJpdmF0ZVNldHRlcik7IH0KICAgICAgICAgYm9vbCBoYXNDb21wdXRlZE5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2V4cHJlc3Npb247IH0KQEAgLTc3NSw3ICs3NzgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogbV9uYW1lOwogICAgICAgICBFeHByZXNz
aW9uTm9kZSogbV9leHByZXNzaW9uOwogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9hc3NpZ247
Ci0gICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6IDEwOworICAgICAgICB1bnNpZ25lZCBtX3R5cGUg
OiAxMTsKICAgICAgICAgdW5zaWduZWQgbV9uZWVkc1N1cGVyQmluZGluZyA6IDE7CiAgICAgICAg
IHN0YXRpY19hc3NlcnQoMSA8PCAyID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENsYXNzRWxlbWVu
dFRhZzo6TGFzdFRhZyksICJDbGFzc0VsZW1lbnRUYWcgc2hvdWxkbid0IHVzZSBtb3JlIHRoYW4g
dHdvIGJpdHMiKTsKICAgICAgICAgdW5zaWduZWQgbV9jbGFzc0VsZW1lbnRUYWcgOiAyOwpAQCAt
ODAzLDYgKzgwNiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBtX25v
ZGUtPmlzU3RhdGljQ2xhc3NGaWVsZCgpOwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBpc1N0
YXRpY0NsYXNzQmxvY2soKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9u
b2RlLT5pc1N0YXRpY0NsYXNzQmxvY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNT
dGF0aWNDbGFzc0VsZW1lbnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9ub2RlLT5pc1N0YXRpY0NsYXNzRWxlbWVudCgpOworICAgICAgICB9CisKICAgICAgICAgdm9p
ZCBzZXRIYXNQcml2YXRlQWNjZXNzb3JzKGJvb2wgaGFzUHJpdmF0ZUFjY2Vzc29ycykKICAgICAg
ICAgewogICAgICAgICAgICAgbV9oYXNQcml2YXRlQWNjZXNzb3JzID0gaGFzUHJpdmF0ZUFjY2Vz
c29yczsKQEAgLTk3NSw3ICs5ODgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1
bmN0aW9uQ2FsbFZhbHVlTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGlj
IFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1bmN0aW9u
Q2FsbFZhbHVlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSosIEFy
Z3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOworICAg
ICAgICBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVz
c2lvbk5vZGUqLCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90RW5kLCBib29sIGlzU3RhdGljID0gZmFsc2UpOworCisgICAgICAgIGJvb2wgaXNTdGF0aWNC
bG9ja0Z1bmN0aW9uQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGF0aWNCbG9ja0Z1bmN0aW9u
Q2FsbDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSBudWxscHRyKSBmaW5hbDsKQEAgLTk4
NCw2ICs5OTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBFeHByZXNzaW9uTm9kZSog
bV9leHByOwogICAgICAgICBBcmd1bWVudHNOb2RlKiBtX2FyZ3M7CisgICAgICAgIGJvb2wgbV9p
c1N0YXRpY0Jsb2NrRnVuY3Rpb25DYWxsOwogICAgIH07CiAKICAgICBjbGFzcyBGdW5jdGlvbkNh
bGxSZXNvbHZlTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93
YWJsZUV4cHJlc3Npb25EYXRhIHsKQEAgLTIzMjQsNyArMjM0MCw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgRnVuY0V4cHJOb2RlIDogcHVibGljIEJhc2VGdW5jRXhwck5vZGUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY0V4cHJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIGNvbnN0IFNvdXJjZUNv
ZGUmKTsKKyAgICAgICAgRnVuY0V4cHJOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0
IElkZW50aWZpZXImLCBGdW5jdGlvbk1ldGFkYXRhTm9kZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBi
b29sIGlzU3RhdGljQmxvY2sgPSBmYWxzZSk7CisKKyAgICAgICAgYm9vbCBpc1N0YXRpY0Jsb2Nr
RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzU3RhdGljQmxvY2tGdW5jdGlvbjsgfQogCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBGdW5jRXhwck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgY29uc3QgU291cmNl
Q29kZSYsIEZ1bmN0aW9uTW9kZSk7CkBAIC0yMzMzLDYgKzIzNTEsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSBudWxscHRyKSBvdmVycmlkZTsKIAogICAgICAgICBib29sIGlzRnVuY0V4
cHJOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICBib29sIG1f
aXNTdGF0aWNCbG9ja0Z1bmN0aW9uOwogICAgIH07CiAKICAgICBjbGFzcyBBcnJvd0Z1bmNFeHBy
Tm9kZSBmaW5hbCA6IHB1YmxpYyBCYXNlRnVuY0V4cHJOb2RlIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmNwcAppbmRleCAzZDE0ZTEyMGJjNjMuLmI3MWUyOTAzYjM5OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcApAQCAtMzg2LDcgKzM4Niw3IEBA
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6aXNB
cnJvd0Z1bmN0aW9uUGFyYW1ldGVycyhUCiAgICAgfQogCiAgICAgaWYgKG1hdGNoU3BlY0lkZW50
aWZpZXIoKSkgewotICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNEaXNhbGxvd2VkSWRlbnRp
ZmllckF3YWl0KG1fdG9rZW4pLCAiQ2Fubm90IHVzZSAnYXdhaXQnIGFzIGEgcGFyYW1ldGVyIG5h
bWUgaW4gYW4gYXN5bmMgZnVuY3Rpb24iKTsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGlz
RGlzYWxsb3dlZElkZW50aWZpZXJBd2FpdChtX3Rva2VuKSwgIkNhbm5vdCB1c2UgJ2F3YWl0JyBh
cyBhIHBhcmFtZXRlciBuYW1lICIsIGRpc2FsbG93ZWRJZGVudGlmaWVyQXdhaXRSZWFzb24oKSk7
CiAgICAgICAgIFNhdmVQb2ludCBzYXZlQXJyb3dGdW5jdGlvblBvaW50ID0gY3JlYXRlU2F2ZVBv
aW50KGNvbnRleHQpOwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGJvb2wgaXNBcnJvd0Z1bmN0
aW9uID0gbWF0Y2goQVJST1dGVU5DVElPTik7CkBAIC03NzgsNiArNzc4LDggQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZVN0YXRlbWVudExpc3QKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBBV0FJVDoKICAg
ICBjYXNlIFlJRUxEOiB7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtYXRjaChZSUVMRCkg
JiYgbV9wYXJzZXJTdGF0ZS5pc1BhcnNpbmdDbGFzc1N0YXRpY0Jsb2NrLCAiQ2Fubm90IHVzZSAn
eWllbGQnIHdpdGhpbiBjbGFzcyBzdGF0aWMgYmxvY2siKTsKKyAgICAgICAgc2VtYW50aWNGYWls
SWZUcnVlKG1hdGNoKEFXQUlUKSAmJiAhZmluZENsb3NldEFzeW5jRnVuY3Rpb25TY29wZSgpLCAi
Q2Fubm90IHVzZSAnYXdhaXQnIHdpdGhpbiBzdGF0aWMgYmxvY2sgc2NvcGUiKTsKICAgICAgICAg
Ly8gVGhpcyBpcyBhIGNvbnZlbmllbnQgcGxhY2UgdG8gbm90aWNlIGxhYmVsZWQgc3RhdGVtZW50
cwogICAgICAgICAvLyAoZXZlbiB0aG91Z2ggd2UgYWxzbyBwYXJzZSB0aGVtIGFzIG5vcm1hbCBz
dGF0ZW1lbnRzKQogICAgICAgICAvLyBiZWNhdXNlIHdlIGFsbG93IHRoZSBmb2xsb3dpbmcgdHlw
ZSBvZiBjb2RlIGluIHNsb3BweSBtb2RlOgpAQCAtODk3LDYgKzg5OSw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
VmFyaWFibGVEZWNsCiAKICAgICAgICAgZmFpbElmVHJ1ZShtYXRjaChQUklWQVRFTkFNRSksICJD
YW5ub3QgdXNlIGEgcHJpdmF0ZSBuYW1lIHRvIGRlY2xhcmUgYSB2YXJpYWJsZSIpOwogICAgICAg
ICBpZiAobWF0Y2hTcGVjSWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICBmYWlsSWZUcnVlKGlz
QXJndW1lbnRzVG9rZW4oKSAmJiAhZmluZENsb3NldEZ1bmN0aW9uU2NvcGUoKSwgIkNsYXNzIHN0
YXRpYyBibG9jayBjYW5ub3QgdXNlICdhcmd1bWVudHMnIGFzIGFuIGlkZW50aWZpZXIiKTsKICAg
ICAgICAgICAgIGZhaWxJZlRydWUoaXNQb3NzaWJseUVzY2FwZWRMZXQobV90b2tlbikgJiYgKGRl
Y2xhcmF0aW9uVHlwZSA9PSBEZWNsYXJhdGlvblR5cGU6OkxldERlY2xhcmF0aW9uIHx8IGRlY2xh
cmF0aW9uVHlwZSA9PSBEZWNsYXJhdGlvblR5cGU6OkNvbnN0RGVjbGFyYXRpb24pLCAKICAgICAg
ICAgICAgICAgICAiQ2Fubm90IHVzZSAnbGV0JyBhcyBhbiBpZGVudGlmaWVyIG5hbWUgZm9yIGEg
TGV4aWNhbERlY2xhcmF0aW9uIik7CiAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNE
aXNhbGxvd2VkSWRlbnRpZmllckF3YWl0KG1fdG9rZW4pLCAiQ2Fubm90IHVzZSAnYXdhaXQnIGFz
IGEgIiwgZGVjbGFyYXRpb25UeXBlVG9WYXJpYWJsZUtpbmQoZGVjbGFyYXRpb25UeXBlKSwgIiAi
LCBkaXNhbGxvd2VkSWRlbnRpZmllckF3YWl0UmVhc29uKCkpOwpAQCAtMTYyNCw2ICsxNjI3LDcg
QEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhl
clR5cGU+OjpwYXJzZUJyZWFrU3RhdGVtZW4KICAgICBKU1RleHRQb3NpdGlvbiBlbmQgPSB0b2tl
bkVuZFBvc2l0aW9uKCk7CiAgICAgbmV4dCgpOwogICAgIAorICAgIHNlbWFudGljRmFpbElmVHJ1
ZShjdXJyZW50U2NvcGUoKS0+aXNTdGF0aWNCbG9ja1Njb3BlKCksICInYnJlYWsnIGNhbm5vdCBj
cm9zcyBzdGF0aWMgYmxvY2sgYm91bmRhcnkiKTsKICAgICBpZiAoYXV0b1NlbWlDb2xvbigpKSB7
CiAgICAgICAgIHNlbWFudGljRmFpbElmRmFsc2UoYnJlYWtJc1ZhbGlkKCksICInYnJlYWsnIGlz
IG9ubHkgdmFsaWQgaW5zaWRlIGEgc3dpdGNoIG9yIGxvb3Agc3RhdGVtZW50Iik7CiAgICAgICAg
IHJldHVybiBjb250ZXh0LmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxvY2F0aW9uLCAmbV92bS5wcm9w
ZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgc3RhcnQsIGVuZCk7CkBAIC0xNjQ2LDYgKzE2NTAs
NyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlQ29udGludWVTdGF0ZQogICAgIEpTVGV4dFBvc2l0aW9uIGVuZCA9IHRv
a2VuRW5kUG9zaXRpb24oKTsKICAgICBuZXh0KCk7CiAgICAgCisgICAgc2VtYW50aWNGYWlsSWZU
cnVlKGN1cnJlbnRTY29wZSgpLT5pc1N0YXRpY0Jsb2NrU2NvcGUoKSwgIidjb250aW51ZScgY2Fu
bm90IGNyb3NzIHN0YXRpYyBibG9jayBib3VuZGFyeSIpOwogICAgIGlmIChhdXRvU2VtaUNvbG9u
KCkpIHsKICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxzZShjb250aW51ZUlzVmFsaWQoKSwgIidj
b250aW51ZScgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBsb29wIHN0YXRlbWVudCIpOwogICAgICAg
ICByZXR1cm4gY29udGV4dC5jcmVhdGVDb250aW51ZVN0YXRlbWVudChsb2NhdGlvbiwgJm1fdm0u
cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsIHN0YXJ0LCBlbmQpOwpAQCAtMTY2Niw3ICsx
NjcxLDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZVJldHVyblN0YXRlbWUKIHsKICAgICBBU1NFUlQobWF0Y2goUkVU
VVJOKSk7CiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7Ci0g
ICAgc2VtYW50aWNGYWlsSWZGYWxzZShjdXJyZW50U2NvcGUoKS0+aXNGdW5jdGlvbigpLCAiUmV0
dXJuIHN0YXRlbWVudHMgYXJlIG9ubHkgdmFsaWQgaW5zaWRlIGZ1bmN0aW9ucyIpOworICAgIHNl
bWFudGljRmFpbElmRmFsc2UoY3VycmVudFNjb3BlKCktPmlzRnVuY3Rpb24oKSAmJiAhY3VycmVu
dFNjb3BlKCktPmlzU3RhdGljQmxvY2tTY29wZSgpLCAiUmV0dXJuIHN0YXRlbWVudHMgYXJlIG9u
bHkgdmFsaWQgaW5zaWRlIGZ1bmN0aW9ucyIpOwogICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0g
dG9rZW5TdGFydFBvc2l0aW9uKCk7CiAgICAgSlNUZXh0UG9zaXRpb24gZW5kID0gdG9rZW5FbmRQ
b3NpdGlvbigpOwogICAgIG5leHQoKTsKQEAgLTE4NDUsNiArMTg1MCw3IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VU
cnlTdGF0ZW1lbnQoCiAgICAgICAgICAgICBjYXRjaFNjb3BlLT5wcmV2ZW50VmFyRGVjbGFyYXRp
b25zKCk7CiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG51bGxwdHI7CiAg
ICAgICAgICAgICBpZiAobWF0Y2hTcGVjSWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICAgICAg
c2VtYW50aWNGYWlsSWZUcnVlKG1hdGNoKEFXQUlUKSAmJiAhZmluZENsb3NldEZ1bmN0aW9uU2Nv
cGUoKSwgIkNhbm5vdCB1c2UgJ2F3YWl0JyBhcyBpZGVudGlmaWVyIHdpdGhpbiBjbGFzcyBzdGF0
aWMgYmxvY2sgc2NvcGUiKTsKICAgICAgICAgICAgICAgICBjYXRjaFNjb3BlLT5zZXRJc1NpbXBs
ZUNhdGNoUGFyYW1ldGVyU2NvcGUoKTsKICAgICAgICAgICAgICAgICBpZGVudCA9IG1fdG9rZW4u
bV9kYXRhLmlkZW50OwogICAgICAgICAgICAgICAgIGNhdGNoUGF0dGVybiA9IGNvbnRleHQuY3Jl
YXRlQmluZGluZ0xvY2F0aW9uKG1fdG9rZW4ubV9sb2NhdGlvbiwgKmlkZW50LCBtX3Rva2VuLm1f
c3RhcnRQb3NpdGlvbiwgbV90b2tlbi5tX2VuZFBvc2l0aW9uLCBBc3NpZ25tZW50Q29udGV4dDo6
RGVjbGFyYXRpb25TdGF0ZW1lbnQpOwpAQCAtMTg5MCw3ICsxODk2LDcgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZURl
YnVnZ2VyU3RhdGUKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KLXRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VCbG9ja1N0YXRlbWVudChUcmVlQnVpbGRlciYgY29udGV4dCwgYm9vbCBpc0NhdGNoQmxvY2sp
Cit0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlQmxvY2tTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGJvb2wgaXND
YXRjaEJsb2NrLCBib29sIGlzU3RhdGljQmxvY2spCiB7CiAgICAgQVNTRVJUKG1hdGNoKE9QRU5C
UkFDRSkpOwogCkBAIC0xOTA0LDYgKzE5MTAsOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxk
ZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQmxvY2tTdGF0ZW1lbgog
ICAgICAgICBuZXdTY29wZS0+cHJldmVudFZhckRlY2xhcmF0aW9ucygpOwogICAgICAgICBpZiAo
aXNDYXRjaEJsb2NrKQogICAgICAgICAgICAgbmV3U2NvcGUtPnNldElzQ2F0Y2hCbG9ja1Njb3Bl
KCk7CisgICAgICAgIGlmIChpc1N0YXRpY0Jsb2NrKQorICAgICAgICAgICAgbmV3U2NvcGUtPnNl
dElzU3RhdGljQmxvY2tTY29wZSgpOwogICAgICAgICBsZXhpY2FsU2NvcGUuc2V0SXNWYWxpZChu
ZXdTY29wZSwgdGhpcyk7CiAgICAgfQogICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tl
bkxvY2F0aW9uKCkpOwpAQCAtMjIyMyw2ICsyMjMxLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHN0
cmluZ0FydGljbGVGb3JGdW5jdGlvbk1vZGUoU291cmNlUGFyc2VNb2RlIG1vZGUpCiAgICAgY2Fz
ZSBTb3VyY2VQYXJzZU1vZGU6Ok1vZHVsZUFuYWx5emVNb2RlOgogICAgIGNhc2UgU291cmNlUGFy
c2VNb2RlOjpNb2R1bGVFdmFsdWF0ZU1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNs
YXNzRmllbGRJbml0aWFsaXplck1vZGU6CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNz
U3RhdGljQmxvY2tNb2RlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm4gIiI7CiAgICAgfQpAQCAtMjI2NSw2ICsyMjc0LDcgQEAgc3RhdGljIGNv
bnN0IGNoYXIqIHN0cmluZ0ZvckZ1bmN0aW9uTW9kZShTb3VyY2VQYXJzZU1vZGUgbW9kZSkKICAg
ICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlQW5hbHl6ZU1vZGU6CiAgICAgY2FzZSBTb3Vy
Y2VQYXJzZU1vZGU6Ok1vZHVsZUV2YWx1YXRlTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9k
ZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6
Q2xhc3NTdGF0aWNCbG9ja01vZGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9CkBAIC0yMjc3LDYgKzIyODcsOCBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXIsIGNs
YXNzIEZ1bmN0aW9uSW5mb1R5cAogICAgIGF1dG8gbW9kZSA9IHNvdXJjZVBhcnNlTW9kZSgpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKCEoU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6
UHJvZ3JhbU1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6TW9kdWxlQW5hbHl6ZU1vZGUsIFNvdXJjZVBh
cnNlTW9kZTo6TW9kdWxlRXZhbHVhdGVNb2RlKS5jb250YWlucyhtb2RlKSkpOwogICAgIFRyZWVG
b3JtYWxQYXJhbWV0ZXJMaXN0IHBhcmFtZXRlckxpc3QgPSBjb250ZXh0LmNyZWF0ZUZvcm1hbFBh
cmFtZXRlckxpc3QoKTsKKyAgICBpZiAobW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzU3Rh
dGljQmxvY2tNb2RlKQorICAgICAgICByZXR1cm4gcGFyYW1ldGVyTGlzdDsKICAgICBTZXRGb3JT
Y29wZSBmdW5jdGlvblBhcnNlUGhhc2VQb2lzb25lcihtX3BhcnNlclN0YXRlLmZ1bmN0aW9uUGFy
c2VQaGFzZSwgRnVuY3Rpb25QYXJzZVBoYXNlOjpQYXJhbWV0ZXJzKTsKICAgICAKICAgICBpZiAo
VU5MSUtFTFkoKFNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rp
b25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUpLmNvbnRhaW5z
KG1vZGUpKSkpIHsKQEAgLTI2NjEsNyArMjY3Myw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxk
CiAgICAgY29udGV4dC5zZXRFbmRPZmZzZXQoZnVuY3Rpb25JbmZvLmJvZHksIG1fbGV4ZXItPmN1
cnJlbnRPZmZzZXQoKSk7CiAgICAgaWYgKGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1vZGUoKSAmJiBy
ZXF1aXJlbWVudHMgIT0gRnVuY3Rpb25OYW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkKSB7CiAgICAg
ICAgIEFTU0VSVChmdW5jdGlvbkluZm8ubmFtZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNv
dXJjZVBhcnNlTW9kZVNldChTb3VyY2VQYXJzZU1vZGU6Ok5vcm1hbEZ1bmN0aW9uTW9kZSwgU291
cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25N
b2RlLCBTb3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvckJvZHlNb2RlLCBTb3VyY2VQYXJzZU1vZGU6
OkdlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGUpLmNvbnRhaW5zKG1vZGUpIHx8IGlzQXN5bmNG
dW5jdGlvbk9yQXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKG1vZGUpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoU291cmNlUGFyc2VNb2RlU2V0KFNvdXJjZVBhcnNlTW9kZTo6Tm9ybWFs
RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGUsIFNvdXJjZVBhcnNlTW9k
ZTo6QXJyb3dGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yQm9keU1vZGUs
IFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZSwgU291cmNlUGFy
c2VNb2RlOjpDbGFzc1N0YXRpY0Jsb2NrTW9kZSkuY29udGFpbnMobW9kZSkgfHwgaXNBc3luY0Z1
bmN0aW9uT3JBc3luY0dlbmVyYXRvcldyYXBwZXJQYXJzZU1vZGUobW9kZSkpOwogICAgICAgICBz
ZW1hbnRpY0ZhaWxJZlRydWUobV92bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmZ1bmN0
aW9uSW5mby5uYW1lLCAiJyIsIGZ1bmN0aW9uSW5mby5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBh
IHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgc2VtYW50aWNG
YWlsSWZUcnVlKG1fdm0ucHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqZnVuY3Rpb25JbmZvLm5hbWUs
ICInIiwgZnVuY3Rpb25JbmZvLm5hbWUtPmltcGwoKSwgIicgaXMgbm90IGEgdmFsaWQgZnVuY3Rp
b24gbmFtZSBpbiBzdHJpY3QgbW9kZSIpOwogICAgIH0KQEAgLTI5MjksNiArMjk0MSw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VDbGFzcyhUCiAgICAgY2xhc3NIZWFkU2NvcGUtPnByZXZlbnRWYXJEZWNs
YXJhdGlvbnMoKTsKICAgICBjbGFzc0hlYWRTY29wZS0+c2V0U3RyaWN0TW9kZSgpOwogICAgIG5l
eHQoKTsKKyAgICBzZW1hbnRpY0ZhaWxJZlRydWUobWF0Y2goQVdBSVQpICYmICFmaW5kQ2xvc2V0
RnVuY3Rpb25TY29wZSgpLCAiQ2Fubm90IHVzZSAnYXdhaXQnIGFzIGEgY2xhc3MgbmFtZSB3aXRo
aW4gY2xhc3Mgc3RhdGljIGJsb2NrIHNjb3BlIik7CiAKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KHJlcXVpcmVtZW50cyAhPSBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6OlVubmFtZWQsICJDdXJy
ZW50bHksIHRoZXJlIGlzIG5vIGNhbGxlciB0aGF0IHVzZXMgRnVuY3Rpb25OYW1lUmVxdWlyZW1l
bnRzOjpVbm5hbWVkIGZvciBjbGFzcyBzeW50YXguIik7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghKHJlcXVpcmVtZW50cyA9PSBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5vbmUgJiYgIWlu
Zm8uY2xhc3NOYW1lKSwgIldoZW4gc3BlY2lmeWluZyBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6
Ok5vbmUsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpbmZvLmNsYXNzTmFtZSB3aXRoIHRoZSBkZWZh
dWx0IHZhbHVlIGluIHRoZSBjYWxsZXIgc2lkZS4iKTsKQEAgLTI5ODMsNiArMjk5Niw3IEBAIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhwcmVzc2lvbiBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VDbGFzcyhUCiAKICAgICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRp
YmlsaXR5LCAic3RhdGljIiBpcyBhIG5vbi1yZXNlcnZlZCBrZXl3b3JkIGluIG5vbi1zdHJpY3Qg
bW9kZS4KICAgICAgICAgQ2xhc3NFbGVtZW50VGFnIHRhZyA9IENsYXNzRWxlbWVudFRhZzo6SW5z
dGFuY2U7CisgICAgICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUgPSBTb3VyY2VQYXJzZU1v
ZGU6Ok1ldGhvZE1vZGU7CiAgICAgICAgIGF1dG8gdHlwZSA9IFByb3BlcnR5Tm9kZTo6Q29uc3Rh
bnQ7CiAgICAgICAgIGlmIChtYXRjaChSRVNFUlZFRF9JRl9TVFJJQ1QpICYmICptX3Rva2VuLm1f
ZGF0YS5pZGVudCA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPnN0YXRpY0tleXdvcmQpIHsKICAgICAg
ICAgICAgIFNhdmVQb2ludCBzYXZlUG9pbnQgPSBjcmVhdGVTYXZlUG9pbnQoY29udGV4dCk7CkBA
IC0yOTkwLDggKzMwMDQsMTEgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlQ2xh
c3NFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKFQKICAgICAgICAgICAg
IGlmIChtYXRjaChPUEVOUEFSRU4pIHx8IG1hdGNoKFNFTUlDT0xPTikgfHwgbWF0Y2goRVFVQUwp
KSB7CiAgICAgICAgICAgICAgICAgLy8gUmVwYXJzZSAic3RhdGljKCkiIGFzIGEgbWV0aG9kIG9y
ICJzdGF0aWMiIGFzIGEgY2xhc3MgZmllbGQuCiAgICAgICAgICAgICAgICAgcmVzdG9yZVNhdmVQ
b2ludChjb250ZXh0LCBzYXZlUG9pbnQpOwotICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHRhZyA9IENsYXNzRWxlbWVudFRhZzo6U3RhdGlj
OworICAgICAgICAgICAgICAgIGlmIChtYXRjaChPUEVOQlJBQ0UpKQorICAgICAgICAgICAgICAg
ICAgICBwYXJzZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzU3RhdGljQmxvY2tNb2RlOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQg
YSB3YXkgdG8gc2hhcmUgbW9yZSBjb2RlIHdpdGggcGFyc2VQcm9wZXJ0eS4KQEAgLTMwMDAsNyAr
MzAxNyw2IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUNsYXNzRXhwcmVzc2lv
biBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VDbGFzcyhUCiAgICAgICAgIFRyZWVFeHByZXNzaW9u
IGNvbXB1dGVkUHJvcGVydHlOYW1lID0gMDsKICAgICAgICAgYm9vbCBpc0dldHRlciA9IGZhbHNl
OwogICAgICAgICBib29sIGlzU2V0dGVyID0gZmFsc2U7Ci0gICAgICAgIFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGU7CiAgICAgICAgIGlmIChj
b25zdW1lKFRJTUVTKSkKICAgICAgICAgICAgIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6
R2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGU7CiAKQEAgLTMwNTMsNiArMzA2OSw3IEBAIHBhcnNl
TWV0aG9kOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgT1BFTkJSQUNLRVQ6CiAg
ICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICBmYWlsSWZUcnVlKGlzQXJndW1lbnRzVG9r
ZW4oKSAmJiAhZmluZENsb3NldEZ1bmN0aW9uU2NvcGUoKSwgIkNsYXNzIHN0YXRpYyBibG9jayBj
YW5ub3QgdXNlICdhcmd1bWVudHMnIGFzIGFuIGlkZW50aWZpZXIiKTsKICAgICAgICAgICAgIGNv
bXB1dGVkUHJvcGVydHlOYW1lID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsK
ICAgICAgICAgICAgIHR5cGUgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eU5vZGU6OlR5cGU+KHR5cGUg
fCBQcm9wZXJ0eU5vZGU6OkNvbXB1dGVkKTsKICAgICAgICAgICAgIGZhaWxJZkZhbHNlKGNvbXB1
dGVkUHJvcGVydHlOYW1lLCAiQ2Fubm90IHBhcnNlIGNvbXB1dGVkIHByb3BlcnR5IG5hbWUiKTsK
QEAgLTMwODEsNiArMzA5OCwxMCBAQCBwYXJzZU1ldGhvZDoKICAgICAgICAgICAgIHR5cGUgPSBz
dGF0aWNfY2FzdDxQcm9wZXJ0eU5vZGU6OlR5cGU+KHR5cGUgfCBQcm9wZXJ0eU5vZGU6OlByaXZh
dGVGaWVsZCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIE9Q
RU5CUkFDRTogeworICAgICAgICAgICAgdHlwZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5Tm9kZTo6
VHlwZT4odHlwZSB8IFByb3BlcnR5Tm9kZTo6QmxvY2spOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChtX3Rva2VuLm1fdHlw
ZSAmIEtleXdvcmRUb2tlbkZsYWcpCiAgICAgICAgICAgICAgICAgZ290byBuYW1lZEtleXdvcmQ7
CkBAIC0zMTQ5LDYgKzMxNzAsMTcgQEAgcGFyc2VNZXRob2Q6CiAgICAgICAgICAgICAgICAgcHJv
cGVydHkgPSBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KGlkZW50LCBjb21wdXRlZFByb3BlcnR5TmFt
ZSwgaW5pdGlhbGl6ZXIsIHR5cGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCB0YWcpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gY29udGV4dC5jcmVhdGVQ
cm9wZXJ0eShpZGVudCwgaW5pdGlhbGl6ZXIsIHR5cGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVk
LCBpbmZlck5hbWUsIHRhZyk7CisgICAgICAgIH0gZWxzZSBpZiAocGFyc2VNb2RlID09IFNvdXJj
ZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNCbG9ja01vZGUpIHsKKyAgICAgICAgICAgIG1hdGNoT3JG
YWlsKE9QRU5CUkFDRSwgIkV4cGVjdGVkIGJsb2NrIHN0YXRlbWVudCBmb3IgY2xhc3Mgc3RhdGlj
IGJsb2NrIik7CisgICAgICAgICAgICBzaXplX3QgdXNlZFZhcmlhYmxlc1NpemUgPSBjdXJyZW50
U2NvcGUoKS0+Y3VycmVudFVzZWRWYXJpYWJsZXNTaXplKCk7CisgICAgICAgICAgICBjdXJyZW50
U2NvcGUoKS0+cHVzaFVzZWRWYXJpYWJsZVNldCgpOworICAgICAgICAgICAgU2V0Rm9yU2NvcGUg
cGFyc2luZ1dpdGhDbGFzc1N0YXRpY0Jsb2NrTW9kZShtX3BhcnNlTW9kZSwgcGFyc2VNb2RlKTsK
KyAgICAgICAgICAgIFNldEZvclNjb3BlIHBhcnNpbmdXaXRoQ2xhc3NTdGF0aWNCbG9ja1N0YXRl
KG1fcGFyc2VyU3RhdGUuaXNQYXJzaW5nQ2xhc3NTdGF0aWNCbG9jaywgdHJ1ZSk7CisgICAgICAg
ICAgICBEZXB0aE1hbmFnZXIgc3RhdGVtZW50RGVwdGgoJm1fc3RhdGVtZW50RGVwdGgpOworICAg
ICAgICAgICAgbV9zdGF0ZW1lbnREZXB0aCA9IDE7CisgICAgICAgICAgICBmYWlsSWZGYWxzZShw
YXJzZUJsb2NrU3RhdGVtZW50KGNvbnRleHQsIGZhbHNlICwgdHJ1ZSksICJDYW5ub3QgcGFyc2Ug
Y2xhc3Mgc3RhdGljIGJsb2NrIik7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IGNvbnRleHQuY3Jl
YXRlUHJvcGVydHkoaWRlbnQsIHR5cGUsIFN1cGVyQmluZGluZzo6TmVlZGVkLCB0YWcpOworICAg
ICAgICAgICAgY2xhc3NTY29wZS0+bWFya0xhc3RVc2VkVmFyaWFibGVzU2V0QXNDYXB0dXJlZCh1
c2VkVmFyaWFibGVzU2l6ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQYXJzZXJG
dW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87CiAgICAgICAgICAgICBib29sIGlz
Q29uc3RydWN0b3IgPSB0YWcgPT0gQ2xhc3NFbGVtZW50VGFnOjpJbnN0YW5jZSAmJiAqaWRlbnQg
PT0gcHJvcGVydHlOYW1lcy5jb25zdHJ1Y3RvcjsKQEAgLTMyODEsNiArMzMxMyw5IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5
cGU+OjpwYXJzZUNsYXNzRmllCiAgICAgICAgICAgICAgICAgdHlwZSA9IERlZmluZUZpZWxkTm9k
ZTo6VHlwZTo6Q29tcHV0ZWROYW1lOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBPUEVOQlJBQ0U6IHsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
aWYgKG1fdG9rZW4ubV90eXBlICYgS2V5d29yZFRva2VuRmxhZykKICAgICAgICAgICAgICAgICAg
ICAgZ290byBuYW1lZEtleXdvcmQ7CkBAIC0zMjg5LDE3ICszMzI0LDM2IEBAIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUNsYXNzRmllCiAgICAgICAgIH0KIAogICAgICAgICAvLyBPbmx5IHZhbGlkIGNsYXNzIGZp
ZWxkcyBhcmUgaGFuZGxlZCBpbiB0aGlzIGZ1bmN0aW9uLgotICAgICAgICBBU1NFUlQobWF0Y2go
RVFVQUwpIHx8IG1hdGNoKFNFTUlDT0xPTikgfHwgbWF0Y2goQ0xPU0VCUkFDRSkgfHwgbV9sZXhl
ci0+aGFzTGluZVRlcm1pbmF0b3JCZWZvcmVUb2tlbigpKTsKKyAgICAgICAgQVNTRVJUKG1hdGNo
KEVRVUFMKSB8fCBtYXRjaChTRU1JQ09MT04pIHx8IG1hdGNoKENMT1NFQlJBQ0UpIHx8IG1hdGNo
KE9QRU5CUkFDRSkgfHwgbV9sZXhlci0+aGFzTGluZVRlcm1pbmF0b3JCZWZvcmVUb2tlbigpKTsK
IAotICAgICAgICBUcmVlRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IDA7Ci0gICAgICAgIGlmIChj
b25zdW1lKEVRVUFMKSkKLSAgICAgICAgICAgIGluaXRpYWxpemVyID0gcGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbihjb250ZXh0KTsKKyAgICAgICAgVHJlZVN0YXRlbWVudCBzdGF0ZW1lbnQ7Cisg
ICAgICAgIGlmIChtYXRjaChPUEVOQlJBQ0UpICYmIGlzU3RhdGljRmllbGQpIHsKKyAgICAgICAg
ICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsK
KyAgICAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBzdGFydExvY2F0aW9uKHRva2VuTG9jYXRpb24o
KSk7CisgICAgICAgICAgICB1bnNpZ25lZCBleHByZXNzaW9uU3RhcnQgPSB0b2tlblN0YXJ0KCk7
CiAKLSAgICAgICAgaWYgKHR5cGUgPT0gRGVmaW5lRmllbGROb2RlOjpUeXBlOjpQcml2YXRlTmFt
ZSkKLSAgICAgICAgICAgIGN1cnJlbnRTY29wZSgpLT51c2VWYXJpYWJsZShpZGVudCwgZmFsc2Up
OworICAgICAgICAgICAgUGFyc2VyRnVuY3Rpb25JbmZvPFRyZWVCdWlsZGVyPiBmdW5jdGlvbklu
Zm87CisgICAgICAgICAgICBmdW5jdGlvbkluZm8ubmFtZSA9ICZtX3ZtLnByb3BlcnR5TmFtZXMt
Pm51bGxJZGVudGlmaWVyOworICAgICAgICAgICAgU2V0Rm9yU2NvcGUgc2V0SW5uZXJQYXJzZU1v
ZGUobV9wYXJzZU1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNCbG9ja01vZGUpOwor
ICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0
aW9uTmFtZVJlcXVpcmVtZW50czo6Tm9uZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwg
U3VwZXJCaW5kaW5nOjpOZWVkZWQsIGV4cHJlc3Npb25TdGFydCwgZnVuY3Rpb25JbmZvLCBGdW5j
dGlvbkRlZmluaXRpb25UeXBlOjpFeHByZXNzaW9uKSksICJDYW5ub3QgcGFyc2Ugc3RhdGljIGJs
b2NrIGZ1bmN0aW9uIik7CisgICAgICAgICAgICBUcmVlRXhwcmVzc2lvbiBleHByZXNzaW9uID0g
Y29udGV4dC5jcmVhdGVGdW5jdGlvbkV4cHIoc3RhcnRMb2NhdGlvbiwgZnVuY3Rpb25JbmZvLCB0
cnVlKTsKIAotICAgICAgICBUcmVlU3RhdGVtZW50IGRlZmluZUZpZWxkID0gY29udGV4dC5jcmVh
dGVEZWZpbmVGaWVsZChmaWVsZExvY2F0aW9uLCBpZGVudCwgaW5pdGlhbGl6ZXIsIHR5cGUpOwot
ICAgICAgICBjb250ZXh0LmFwcGVuZFN0YXRlbWVudChzb3VyY2VFbGVtZW50cywgZGVmaW5lRmll
bGQpOworICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gZW5kUG9zaXRpb24gPSBsYXN0VG9rZW5F
bmRQb3NpdGlvbigpOworICAgICAgICAgICAgVHJlZUFyZ3VtZW50cyBhcmd1bWVudHMgPSBjb250
ZXh0LmNyZWF0ZUFyZ3VtZW50cygpOworICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGNvbnRleHQu
bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoc3RhcnRMb2NhdGlvbiwgZXhwcmVzc2lvbiwgZmFsc2UsIGFy
Z3VtZW50cywgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGxhc3RUb2tlbkVuZFBvc2l0aW9u
KCksIDAsIGZhbHNlLCB0cnVlKTsKKworICAgICAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5j
cmVhdGVFeHByU3RhdGVtZW50KHN0YXJ0TG9jYXRpb24sIGV4cHJlc3Npb24sIHN0YXJ0UG9zaXRp
b24sIG1fbGFzdFRva2VuRW5kUG9zaXRpb24ubGluZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBUcmVlRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IDA7CisgICAgICAgICAgICBpZiAo
Y29uc3VtZShFUVVBTCkpCisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSBwYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKGNvbnRleHQpOworCisgICAgICAgICAgICBpZiAodHlwZSA9PSBEZWZp
bmVGaWVsZE5vZGU6OlR5cGU6OlByaXZhdGVOYW1lKQorICAgICAgICAgICAgICAgIGN1cnJlbnRT
Y29wZSgpLT51c2VWYXJpYWJsZShpZGVudCwgZmFsc2UpOworCisgICAgICAgICAgICBzdGF0ZW1l
bnQgPSBjb250ZXh0LmNyZWF0ZURlZmluZUZpZWxkKGZpZWxkTG9jYXRpb24sIGlkZW50LCBpbml0
aWFsaXplciwgdHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dC5hcHBlbmRTdGF0ZW1l
bnQoc291cmNlRWxlbWVudHMsIHN0YXRlbWVudCk7CiAgICAgfQogCiAgICAgQVNTRVJUKCFoYXNF
cnJvcigpKTsKQEAgLTQxMTUsNiArNDE2OSw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmVlQnVp
bGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXNzaWdubWVuCiAK
ICAgICBUcmVlRXhwcmVzc2lvbiBsaHMgPSBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihjb250
ZXh0KTsKIAorICAgIGlmICghbGhzICYmIGN1cnJlbnRTY29wZSgpLT5pc1N0YXRpY0Jsb2NrU2Nv
cGUoKSAmJiBtYXRjaChBV0FJVCkpCisgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7CisKICAgICBp
ZiAobWF5YmVWYWxpZEFycm93RnVuY3Rpb25TdGFydCAmJiAhbWF0Y2goRU9GVE9LKSkgewogICAg
ICAgICBib29sIGlzQXJyb3dGdW5jdGlvblRva2VuID0gbWF0Y2goQVJST1dGVU5DVElPTik7CiAg
ICAgICAgIGlmICghbGhzIHx8IGlzQXJyb3dGdW5jdGlvblRva2VuKSB7CkBAIC00OTQwLDYgKzQ5
OTcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIFBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZVByaW1hcnlFeHByZQogICAgICAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVUaGlzRXhwcihsb2NhdGlvbik7CiAgICAgfQogICAgIGNhc2UgQVdBSVQ6CisgICAgICAg
IHNlbWFudGljRmFpbElmVHJ1ZShjdXJyZW50U2NvcGUoKS0+aXNTdGF0aWNCbG9ja1Njb3BlKCks
ICJUaGUgJ2F3YWl0JyBrZXl3b3JkIGlzIGRpc2FsbG93ZWQgaW4gdGhlIElkZW50aWZpZXJSZWZl
cmVuY2UgcG9zaXRpb24gZmVhdHVyZXMgd2l0aGluIGNsYXNzIHN0YXRpYyBibG9jayBzY29wZSIp
OwogICAgICAgICBpZiAobV9wYXJzZXJTdGF0ZS5mdW5jdGlvblBhcnNlUGhhc2UgPT0gRnVuY3Rp
b25QYXJzZVBoYXNlOjpQYXJhbWV0ZXJzKQogICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxz
ZShtX3BhcnNlclN0YXRlLmFsbG93QXdhaXQsICJDYW5ub3QgdXNlICdhd2FpdCcgd2l0aGluIGEg
cGFyYW1ldGVyIGRlZmF1bHQgZXhwcmVzc2lvbiIpOwogICAgICAgICBlbHNlIGlmIChjdXJyZW50
RnVuY3Rpb25TY29wZSgpLT5pc0FzeW5jRnVuY3Rpb25Cb3VuZGFyeSgpIHx8IGlzTW9kdWxlUGFy
c2VNb2RlKHNvdXJjZVBhcnNlTW9kZSgpKSkKQEAgLTQ5NDcsNiArNTAwNSw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlUHJpbWFyeUV4cHJlCiAKICAgICAgICAgZ290byBpZGVudGlmaWVyRXhwcmVzc2lvbjsKICAg
ICBjYXNlIElERU5UOiB7CisgICAgICAgIGZhaWxJZlRydWUoaXNBcmd1bWVudHNUb2tlbigpICYm
ICFmaW5kQ2xvc2V0RnVuY3Rpb25TY29wZSgpLCAiQ2xhc3Mgc3RhdGljIGJsb2NrIGNhbm5vdCB1
c2UgJ2FyZ3VtZW50cycgYXMgYW4gaWRlbnRpZmllciIpOwogICAgICAgICBpZiAoVU5MSUtFTFko
Km1fdG9rZW4ubV9kYXRhLmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXN5bmMgJiYgIW1f
dG9rZW4ubV9kYXRhLmVzY2FwZWQpKSB7CiAgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBzdGFy
dCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSBtX3Rva2VuLm1fZGF0YS5pZGVudDsKQEAgLTQ5NjMsNyArNTAyMiw3IEBAIHRlbXBs
YXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46
OnBhcnNlUHJpbWFyeUV4cHJlCiAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVzb2x2ZUFuZFVz
ZVZhcmlhYmxlKGNvbnRleHQsIGlkZW50LCBpc0V2YWwsIHN0YXJ0LCBsb2NhdGlvbik7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKFVOTElLRUxZKG1fcGFyc2VyU3RhdGUuaXNQYXJzaW5nQ2xhc3NG
aWVsZEluaXRpYWxpemVyKSkKLSAgICAgICAgICAgIGZhaWxJZlRydWUoKm1fdG9rZW4ubV9kYXRh
LmlkZW50ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YXJndW1lbnRzLCAiQ2Fubm90IHJlZmVyZW5j
ZSAnYXJndW1lbnRzJyBpbiBjbGFzcyBmaWVsZCBpbml0aWFsaXplciIpOworICAgICAgICAgICAg
ZmFpbElmVHJ1ZShpc0FyZ3VtZW50c1Rva2VuKCksICJDYW5ub3QgcmVmZXJlbmNlICdhcmd1bWVu
dHMnIGluIGNsYXNzIGZpZWxkIGluaXRpYWxpemVyIik7CiAgICAgaWRlbnRpZmllckV4cHJlc3Np
b246CiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7
CkBAIC01MTY4LDggKzUyMjcsOSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVF
eHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZU1lbWJlckV4cHJlcwogICAgICAgICBp
ZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZChtX3ZtLnByb3BlcnR5TmFtZXMtPnRhcmdldCkpIHsK
ICAgICAgICAgICAgIFNjb3BlUmVmIGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUgPSBjbG9z
ZXN0UGFyZW50T3JkaW5hcnlGdW5jdGlvbk5vbkxleGljYWxTY29wZSgpOwogICAgICAgICAgICAg
Ym9vbCBpc0NsYXNzRmllbGRJbml0aWFsaXplciA9IG1fcGFyc2VyU3RhdGUuaXNQYXJzaW5nQ2xh
c3NGaWVsZEluaXRpYWxpemVyOworICAgICAgICAgICAgYm9vbCBpc1BhcnNpbmdDbGFzc1N0YXRp
Y0Jsb2NrID0gbV9wYXJzZXJTdGF0ZS5pc1BhcnNpbmdDbGFzc1N0YXRpY0Jsb2NrOwogICAgICAg
ICAgICAgYm9vbCBpc0Z1bmN0aW9uRXZhbENvbnRleHRUeXBlID0gbV9pc0luc2lkZU9yZGluYXJ5
RnVuY3Rpb24gJiYgKGNsb3Nlc3RPcmRpbmFyeUZ1bmN0aW9uU2NvcGUtPmV2YWxDb250ZXh0VHlw
ZSgpID09IEV2YWxDb250ZXh0VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dCB8fCBjbG9zZXN0T3Jk
aW5hcnlGdW5jdGlvblNjb3BlLT5ldmFsQ29udGV4dFR5cGUoKSA9PSBFdmFsQ29udGV4dFR5cGU6
Okluc3RhbmNlRmllbGRFdmFsQ29udGV4dCk7Ci0gICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZkZh
bHNlKGN1cnJlbnRTY29wZSgpLT5pc0Z1bmN0aW9uKCkgfHwgaXNGdW5jdGlvbkV2YWxDb250ZXh0
VHlwZSB8fCBpc0NsYXNzRmllbGRJbml0aWFsaXplciwgIm5ldy50YXJnZXQgaXMgb25seSB2YWxp
ZCBpbnNpZGUgZnVuY3Rpb25zIik7CisgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZkZhbHNlKGN1
cnJlbnRTY29wZSgpLT5pc0Z1bmN0aW9uKCkgfHwgaXNGdW5jdGlvbkV2YWxDb250ZXh0VHlwZSB8
fCBpc1BhcnNpbmdDbGFzc1N0YXRpY0Jsb2NrIHx8IGlzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCAi
bmV3LnRhcmdldCBpcyBvbmx5IHZhbGlkIGluc2lkZSBmdW5jdGlvbnMiKTsKICAgICAgICAgICAg
IGJhc2VJc05ld1RhcmdldCA9IHRydWU7CiAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3BlKCkt
PmlzQXJyb3dGdW5jdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZGYWxz
ZSghY2xvc2VzdE9yZGluYXJ5RnVuY3Rpb25TY29wZS0+aXNHbG9iYWxDb2RlU2NvcGUoKSB8fCBp
c0Z1bmN0aW9uRXZhbENvbnRleHRUeXBlIHx8IGlzQ2xhc3NGaWVsZEluaXRpYWxpemVyLCAibmV3
LnRhcmdldCBpcyBub3QgdmFsaWQgaW5zaWRlIGFycm93IGZ1bmN0aW9ucyBpbiBnbG9iYWwgY29k
ZSIpOwpAQCAtNTQ1Nyw4ICs1NTE3LDEwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4g
VHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlVW5hcnlFeHByZXNzCiAgICAg
Ym9vbCBoYXNQcmVmaXhVcGRhdGVPcCA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGxhc3RPcGVyYXRv
ciA9IDA7CiAKLSAgICBpZiAoVU5MSUtFTFkobWF0Y2goQVdBSVQpICYmIChjdXJyZW50RnVuY3Rp
b25TY29wZSgpLT5pc0FzeW5jRnVuY3Rpb25Cb3VuZGFyeSgpIHx8IGlzTW9kdWxlUGFyc2VNb2Rl
KHNvdXJjZVBhcnNlTW9kZSgpKSkpKQorICAgIGlmIChVTkxJS0VMWShtYXRjaChBV0FJVCkgJiYg
KGN1cnJlbnRGdW5jdGlvblNjb3BlKCktPmlzQXN5bmNGdW5jdGlvbkJvdW5kYXJ5KCkgfHwgaXNN
b2R1bGVQYXJzZU1vZGUoc291cmNlUGFyc2VNb2RlKCkpKSkpIHsKKyAgICAgICAgc2VtYW50aWNG
YWlsSWZUcnVlKCFmaW5kQ2xvc2V0QXN5bmNGdW5jdGlvblNjb3BlKCksICJDYW5ub3QgdXNlICdh
d2FpdCcgd2l0aGluIHN0YXRpYyBibG9jayBzY29wZSIpOwogICAgICAgICByZXR1cm4gcGFyc2VB
d2FpdEV4cHJlc3Npb24oY29udGV4dCk7CisgICAgfQogCiAgICAgSlNUb2tlbkxvY2F0aW9uIGxv
Y2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5oCmluZGV4IDJmNjA2OGI2ZTU5Ni4uMGFmNWE3MjZlNWJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJTb3VyY2VQcm92
aWRlckNhY2hlLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCIKICNpbmNs
dWRlICJWYXJpYWJsZUVudmlyb25tZW50LmgiCisjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNsdWRl
IDx3dGYvRml4ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9JdGVyYXRpb25TdGF0dXMuaD4KQEAgLTIzNCw2ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpTZXR0ZXJNb2RlOgogICAgICAgICBjYXNlIFNvdXJj
ZVBhcnNlTW9kZTo6TWV0aG9kTW9kZToKICAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNs
YXNzRmllbGRJbml0aWFsaXplck1vZGU6CisgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpD
bGFzc1N0YXRpY0Jsb2NrTW9kZToKICAgICAgICAgICAgIHNldElzRnVuY3Rpb24oKTsKICAgICAg
ICAgICAgIGJyZWFrOwogCkBAIC0yNzcsNiArMjc5LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
SXNDYXRjaEJsb2NrU2NvcGUoKSB7IG1faXNDYXRjaEJsb2NrU2NvcGUgPSB0cnVlOyB9CiAgICAg
Ym9vbCBpc0NhdGNoQmxvY2tTY29wZSgpIHsgcmV0dXJuIG1faXNDYXRjaEJsb2NrU2NvcGU7IH0K
IAorICAgIHZvaWQgc2V0SXNTdGF0aWNCbG9ja1Njb3BlKCkgeyBtX2lzU3RhdGljQmxvY2tTY29w
ZSA9IHRydWU7IH0KKyAgICBib29sIGlzU3RhdGljQmxvY2tTY29wZSgpIHsgcmV0dXJuIG1faXNT
dGF0aWNCbG9ja1Njb3BlOyB9CisKICAgICB2b2lkIHNldElzTGV4aWNhbFNjb3BlKCkgCiAgICAg
eyAKICAgICAgICAgbV9pc0xleGljYWxTY29wZSA9IHRydWU7CkBAIC04OTUsNiArOTAwLDcgQEAg
cHJpdmF0ZToKICAgICBib29sIG1faXNHbG9iYWxDb2RlU2NvcGUgOiAxIHsgZmFsc2UgfTsKICAg
ICBib29sIG1faXNTaW1wbGVDYXRjaFBhcmFtZXRlclNjb3BlIDogMSB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX2lzQ2F0Y2hCbG9ja1Njb3BlIDogMSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzU3Rh
dGljQmxvY2tTY29wZSA6IDEgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0Z1bmN0aW9uQm91bmRh
cnkgOiAxIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNWYWxpZFN0cmljdE1vZGUgOiAxIHsgdHJ1
ZSB9OwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHMgOiAxIHsgZmFsc2UgfTsKQEAgLTE3NTUsNyAr
MTc2MSw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
U3RhdGVtZW50IHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChUcmVlQnVpbGRlciYpOwogICAgIHRl
bXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUV4cHJlc3Npb25P
ckxhYmVsU3RhdGVtZW50KFRyZWVCdWlsZGVyJiwgYm9vbCBhbGxvd0Z1bmN0aW9uRGVjbGFyYXRp
b25Bc1N0YXRlbWVudCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3Rh
dGVtZW50IHBhcnNlSWZTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImKTsKLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VCbG9ja1N0YXRlbWVudChUcmVlQnVp
bGRlciYsIGJvb2wgaXNDYXRjaEJsb2NrID0gZmFsc2UpOworICAgIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZVN0YXRlbWVudCBwYXJzZUJsb2NrU3RhdGVtZW50KFRyZWVCdWlsZGVy
JiwgYm9vbCBpc0NhdGNoQmxvY2sgPSBmYWxzZSwgYm9vbCBpc1N0YXRpY0Jsb2NrID0gZmFsc2Up
OwogCiAgICAgZW51bSBjbGFzcyBJc09ubHlDaGlsZE9mU3RhdGVtZW50IHsgWWVzLCBObyB9Owog
ICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gcGFyc2VFeHBy
ZXNzaW9uKFRyZWVCdWlsZGVyJiwgSXNPbmx5Q2hpbGRPZlN0YXRlbWVudCA9IElzT25seUNoaWxk
T2ZTdGF0ZW1lbnQ6Ok5vKTsKQEAgLTE4NzgsNyArMTg4NCw3IEBAIHByaXZhdGU6CiAKICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgY2FuVXNlSWRlbnRpZmllckF3YWl0KCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX3BhcnNlclN0YXRlLmFsbG93QXdhaXQgJiYgIWN1cnJlbnRTY29wZSgpLT5pc0Fz
eW5jRnVuY3Rpb24oKSAmJiBtX3NjcmlwdE1vZGUgIT0gSlNQYXJzZXJTY3JpcHRNb2RlOjpNb2R1
bGU7CisgICAgICAgIHJldHVybiBtX3BhcnNlclN0YXRlLmFsbG93QXdhaXQgJiYgIWN1cnJlbnRT
Y29wZSgpLT5pc0FzeW5jRnVuY3Rpb24oKSAmJiAhY3VycmVudFNjb3BlKCktPmlzU3RhdGljQmxv
Y2tTY29wZSgpICYmIG1fc2NyaXB0TW9kZSAhPSBKU1BhcnNlclNjcmlwdE1vZGU6Ok1vZHVsZTsK
ICAgICB9CiAKICAgICBib29sIGlzRGlzYWxsb3dlZElkZW50aWZpZXJZaWVsZChjb25zdCBKU1Rv
a2VuJiB0b2tlbikKQEAgLTE5MzYsNiArMTk0Miw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBpZiAoIW1fcGFyc2VyU3RhdGUuYWxsb3dBd2FpdCB8fCBjdXJyZW50U2NvcGUoKS0+aXNBc3lu
Y0Z1bmN0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gImluIGFuIGFzeW5jIGZ1bmN0aW9uIjsK
KyAgICAgICAgaWYgKGN1cnJlbnRTY29wZSgpLT5pc1N0YXRpY0Jsb2NrU2NvcGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiAiY3Jvc3Mgc3RhdGljIGJsb2NrIGJvdW5kYXJ5IjsKICAgICAgICAgaWYg
KG1fc2NyaXB0TW9kZSA9PSBKU1BhcnNlclNjcmlwdE1vZGU6Ok1vZHVsZSkKICAgICAgICAgICAg
IHJldHVybiAiaW4gYSBtb2R1bGUiOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMTk1Miw2ICsxOTYwLDM4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBmaW5kQ2xvc2V0RnVuY3Rpb25T
Y29wZSgpCisgICAgeworICAgICAgICByZXR1cm4gZmluZFNjb3BlVW50aWxTdGF0aWNCbG9jayhb
Jl0oc2l6ZV90IGkpIHsKKyAgICAgICAgICAgIHJldHVybiBtX3Njb3BlU3RhY2tbaV0uaXNGdW5j
dGlvbigpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZmlu
ZENsb3NldEFzeW5jRnVuY3Rpb25TY29wZSgpCisgICAgeworICAgICAgICByZXR1cm4gZmluZFNj
b3BlVW50aWxTdGF0aWNCbG9jayhbJl0oc2l6ZV90IGkpIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3Njb3BlU3RhY2tbaV0uaXNBc3luY0Z1bmN0aW9uKCk7CisgICAgICAgIH0pOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElzU2NvcGVGdW5jdG9yPgorICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBmaW5kU2NvcGVVbnRpbFN0YXRpY0Jsb2NrKGNvbnN0IElzU2NvcGVGdW5jdG9yJiBpc1Nj
b3BlRnVuY3RvcikKKyAgICB7CisgICAgICAgIHNpemVfdCBpID0gbV9zY29wZVN0YWNrLnNpemUo
KSAtIDE7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChtX3Njb3BlU3RhY2tbaV0uaXNT
dGF0aWNCbG9ja1Njb3BlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaWYgKGlzU2NvcGVGdW5jdG9yKGkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9IHdoaWxlIChpLS0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNBcmd1bWVudHNUb2tlbigpCisgICAgeworICAgICAg
ICByZXR1cm4gbWF0Y2goSURFTlQpICYmICptX3Rva2VuLm1fZGF0YS5pZGVudCA9PSBtX3ZtLnBy
b3BlcnR5TmFtZXMtPmFyZ3VtZW50czsKKyAgICB9CisKICAgICBlbnVtIGNsYXNzIEZ1bmN0aW9u
UGFyc2VQaGFzZSB7IFBhcmFtZXRlcnMsIEJvZHkgfTsKICAgICBzdHJ1Y3QgUGFyc2VyU3RhdGUg
ewogICAgICAgICBpbnQgYXNzaWdubWVudENvdW50IHsgMCB9OwpAQCAtMTk2NCw2ICsyMDA0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgSWRlbnRpZmllciogbGFzdFByaXZhdGVOYW1lIHsg
bnVsbHB0ciB9OwogICAgICAgICBib29sIGFsbG93QXdhaXQgeyB0cnVlIH07CiAgICAgICAgIGJv
b2wgaXNQYXJzaW5nQ2xhc3NGaWVsZEluaXRpYWxpemVyIHsgZmFsc2UgfTsKKyAgICAgICAgYm9v
bCBpc1BhcnNpbmdDbGFzc1N0YXRpY0Jsb2NrIHsgZmFsc2UgfTsKICAgICB9OwogCiAgICAgLy8g
SWYgeW91J3JlIHVzaW5nIHRoaXMgZGlyZWN0bHksIHlvdSBwcm9iYWJseSBzaG91bGQgYmUgdXNp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAppbmRleCA3YTA2
NmE2YzZhOTYuLjliYTAzNTQ4ZjdlNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXJNb2Rlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyTW9kZXMuaApAQCAtNjksNiArNjksNyBAQCBlbnVtIGNsYXNzIFNvdXJjZVBhcnNlTW9k
ZSA6IHVpbnQ4X3QgewogICAgIEFzeW5jR2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGUgICA9IDE3
LAogICAgIEdlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlICAgICAgICA9IDE4LAogICAgIENsYXNz
RmllbGRJbml0aWFsaXplck1vZGUgICAgICAgICA9IDE5LAorICAgIENsYXNzU3RhdGljQmxvY2tN
b2RlICAgICAgICAgICAgICA9IDIwLAogfTsKIAogY2xhc3MgU291cmNlUGFyc2VNb2RlU2V0IHsg
CkBAIC0xMTgsNyArMTE5LDggQEAgQUxXQVlTX0lOTElORSBib29sIGlzRnVuY3Rpb25QYXJzZU1v
ZGUoU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpB
c3luY0dlbmVyYXRvckJvZHlNb2RlLAogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2Vu
ZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZSwKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3lu
Y0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlLAotICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkNs
YXNzRmllbGRJbml0aWFsaXplck1vZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7CisgICAgICAgIFNv
dXJjZVBhcnNlTW9kZTo6Q2xhc3NGaWVsZEluaXRpYWxpemVyTW9kZSwKKyAgICAgICAgU291cmNl
UGFyc2VNb2RlOjpDbGFzc1N0YXRpY0Jsb2NrTW9kZSkuY29udGFpbnMocGFyc2VNb2RlKTsKIH0g
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBpc0FzeW5jRnVuY3Rpb25QYXJzZU1vZGUoU291cmNlUGFy
c2VNb2RlIHBhcnNlTW9kZSkgCkBAIC0yMDYsNyArMjA4LDggQEAgQUxXQVlTX0lOTElORSBib29s
IGlzTWV0aG9kUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCiAgICAgICAgIFNv
dXJjZVBhcnNlTW9kZTo6U2V0dGVyTW9kZSwKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpNZXRo
b2RNb2RlLAogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jTWV0aG9kTW9kZSwKLSAgICAg
ICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlKS5jb250
YWlucyhwYXJzZU1vZGUpOworICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9y
V3JhcHBlck1ldGhvZE1vZGUsCisgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6Q2xhc3NTdGF0aWNC
bG9ja01vZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBp
c0dlbmVyYXRvck9yQXN5bmNGdW5jdGlvbkJvZHlQYXJzZU1vZGUoU291cmNlUGFyc2VNb2RlIHBh
cnNlTW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4
Q2hlY2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgK
aW5kZXggZWQwZGE1ZmU1NjY2Li5jMjg3OWU1ZWFhODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCkBAIC0xNDgsNyArMTQ4LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdGV4cHIgT3B0aW9uU2V0PExleGVyRmxhZ3M+IERvbnRCdWlsZFN0cmlu
Z3MgPSBMZXhlckZsYWdzOjpEb250QnVpbGRTdHJpbmdzOwogCiAgICAgaW50IGNyZWF0ZVNvdXJj
ZUVsZW1lbnRzKCkgeyByZXR1cm4gU291cmNlRWxlbWVudHNSZXN1bHQ7IH0KLSAgICBFeHByZXNz
aW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHBy
ZXNzaW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCwgaW50LCBzaXplX3QsIGJvb2wpIHsgcmV0
dXJuIENhbGxFeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGJvb2wsIGludCwgaW50LCBp
bnQsIGludCwgc2l6ZV90LCBib29sLCBib29sID0gZmFsc2UpIHsgcmV0dXJuIENhbGxFeHByOyB9
CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQ29tbWFFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBDb21tYUV4cHI7IH0KICAgICBFeHByZXNzaW9u
VHlwZSBhcHBlbmRUb0NvbW1hRXhwcihjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
VHlwZSwgRXhwcmVzc2lvblR5cGUsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBDb21tYUV4cHI7
IH0KICAgICBFeHByZXNzaW9uVHlwZSBtYWtlQXNzaWduTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uVHlwZSwgT3BlcmF0b3IsIEV4cHJlc3Npb25UeXBlLCBib29sLCBib29s
LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBBc3NpZ25tZW50RXhwcjsgfQpAQCAtMTk1LDcgKzE5
NSw3IEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVZaWVsZChjb25zdCBKU1Rv
a2VuTG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgaW50LCBpbnQsIGludCkgeyByZXR1
cm4gWWllbGRFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXdhaXQoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIEF3
YWl0RXhwcjsgfQogICAgIENsYXNzRXhwcmVzc2lvbiBjcmVhdGVDbGFzc0V4cHIoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgY29uc3QgUGFyc2VyQ2xhc3NJbmZvPFN5bnRheENoZWNrZXI+JiwgVmFy
aWFibGVFbnZpcm9ubWVudCYmLCBWYXJpYWJsZUVudmlyb25tZW50JiYsIEV4cHJlc3Npb25UeXBl
LCBFeHByZXNzaW9uVHlwZSwgUHJvcGVydHlMaXN0LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBD
bGFzc0V4cHI7IH0KLSAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVGdW5jdGlvbkV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPFN5bnRheENoZWNrZXI+
JikgeyByZXR1cm4gRnVuY3Rpb25FeHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlRnVu
Y3Rpb25FeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5m
bzxTeW50YXhDaGVja2VyPiYsIGJvb2wgPSBmYWxzZSkgeyByZXR1cm4gRnVuY3Rpb25FeHByOyB9
CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlR2VuZXJhdG9yRnVuY3Rpb25Cb2R5KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIGNvbnN0IFBhcnNlckZ1bmN0aW9uSW5mbzxTeW50YXhDaGVja2VyPiYs
IGNvbnN0IElkZW50aWZpZXImKSB7IHJldHVybiBGdW5jdGlvbkV4cHI7IH0KICAgICBFeHByZXNz
aW9uVHlwZSBjcmVhdGVBc3luY0Z1bmN0aW9uQm9keShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBj
b25zdCBQYXJzZXJGdW5jdGlvbkluZm88U3ludGF4Q2hlY2tlcj4mKSB7IHJldHVybiBGdW5jdGlv
bkV4cHI7IH0KICAgICBpbnQgY3JlYXRlRnVuY3Rpb25NZXRhZGF0YShjb25zdCBKU1Rva2VuTG9j
YXRpb24mLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludCwg
aW50LCBpbnQsIEltcGxlbWVudGF0aW9uVmlzaWJpbGl0eSwgTGV4aWNhbFNjb3BlRmVhdHVyZXMs
IENvbnN0cnVjdG9yS2luZCwgU3VwZXJCaW5kaW5nLCB1bnNpZ25lZCwgU291cmNlUGFyc2VNb2Rl
LCBib29sKSB7IHJldHVybiBGdW5jdGlvbkJvZHlSZXN1bHQ7IH0KQEAgLTIzOSw2ICsyMzksMTAg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOwogICAgIH0K
KyAgICBQcm9wZXJ0eSBjcmVhdGVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyKiwgUHJvcGVydHlO
b2RlOjpUeXBlIHR5cGUsIFN1cGVyQmluZGluZywgQ2xhc3NFbGVtZW50VGFnKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFByb3BlcnR5KHR5cGUpOworICAgIH0KICAgICBpbnQgY3JlYXRlUHJvcGVy
dHlMaXN0KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFByb3BlcnR5KSB7IHJldHVybiBQcm9wZXJ0
eUxpc3RSZXN1bHQ7IH0KICAgICBpbnQgY3JlYXRlUHJvcGVydHlMaXN0KGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYsIFByb3BlcnR5LCBpbnQpIHsgcmV0dXJuIFByb3BlcnR5TGlzdFJlc3VsdDsgfQog
ICAgIGludCBjcmVhdGVFbGVtZW50TGlzdChpbnQsIGludCkgeyByZXR1cm4gRWxlbWVudHNMaXN0
UmVzdWx0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkV4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25FeGVjdXRhYmxlLmNwcAppbmRleCAzNzY0ZTg5OTNiMTAuLjhmNzllNDY2YTEyYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGUu
Y3BwCkBAIC0yMDYsNiArMjA2LDcgQEAgSlNTdHJpbmcqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dG9T
dHJpbmdTbG93KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAKICAgICBjYXNlIFNvdXJj
ZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6
OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGU6CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkNs
YXNzU3RhdGljQmxvY2tNb2RlOgogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU291cmNlUGFy
c2VNb2RlOjpBc3luY0Z1bmN0aW9uTW9kZToKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Ns
YXNzLXN0YXRpYy1ibG9jay5qcyBiL0pTVGVzdHMvc3RyZXNzL2NsYXNzLXN0YXRpYy1ibG9jay5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjc5YzljNDMyODZhYwot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2NsYXNzLXN0YXRpYy1ibG9jay5qcwpA
QCAtMCwwICsxLDI1MSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpIHsKKyAg
ICAgICAgdGhyb3cgIldyb25nISIKKyAgICB9Cit9CisKKy8vIC0tLS0tLS0tLS0gc2luZ2xlIHN0
YXRpYyBibG9jayAtLS0tLS0tLS0tIAoreworICAgIHZhciB5ID0gJ091dGVyIHknOworCisgICAg
Y2xhc3MgQSB7CisgICAgICAgIHN0YXRpYyBmaWVsZCA9ICdJbm5lciB5JzsKKyAgICAgICAgc3Rh
dGljIHsKKyAgICAgICAgICAgIHZhciB5ID0gdGhpcy5maWVsZDsKKyAgICAgICAgfQorCisgICAg
fQorCisgICAgYXNzZXJ0KHkgPT0gJ091dGVyIHknKTsKK30KKworLy8gIC0tLS0tLS0tLS0gbXVs
dGlwbGUgc3RhdGljIGJsb2NrcyAtLS0tLS0tLS0tIAoreworICAgIGNsYXNzIEMgeworICAgICAg
ICBzdGF0aWMgeworICAgICAgICAgICAgYXNzZXJ0KHRoaXMueCA9PSB1bmRlZmluZWQpOworICAg
ICAgICB9CisgICAgICAgIHN0YXRpYyB4ID0gMTA7CisgICAgICAgIHN0YXRpYyB7CisgICAgICAg
ICAgICBhc3NlcnQodGhpcy54ID09IDEwKTsKKyAgICAgICAgICAgIGFzc2VydCh0aGlzLnkgPT0g
dW5kZWZpbmVkKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgeSA9IDIwOworICAgICAgICBz
dGF0aWMgeworICAgICAgICAgICAgYXNzZXJ0KHRoaXMueSA9PSAyMCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKKy8vICAtLS0tLS0tLS0tIHVzaW5nIHRoaXMgLS0tLS0tLS0tLSAKK3sKKyAgICBj
bGFzcyBBIHsKKyAgICAgICAgc3RhdGljIGZpZWxkID0gJ0Egc3RhdGljIGZpZWxkJzsKKyAgICAg
ICAgc3RhdGljIHsKKyAgICAgICAgICAgIGFzc2VydCh0aGlzLmZpZWxkID09ICdBIHN0YXRpYyBm
aWVsZCcpOworICAgICAgICB9CisgICAgfQorfQorCisvLyAgLS0tLS0tLS0tLSB1c2luZyBzdXBl
ciAtLS0tLS0tLS0tIAoreworICAgIGNsYXNzIEEgeworICAgICAgICBzdGF0aWMgZmllbGRBID0g
J0EuZmllbGRBJzsKKyAgICB9CisgICAgY2xhc3MgQiBleHRlbmRzIEEgeworICAgICAgICBzdGF0
aWMgeworICAgICAgICAgICAgYXNzZXJ0KHN1cGVyLmZpZWxkQSA9PSAnQS5maWVsZEEnKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworLy8gIC0tLS0tLS0tLS0gYWNjZXNzIHRvIHByaXZhdGUgZmll
bGRzIC0tLS0tLS0tLS0gCit7CisgICAgbGV0IGdldERQcml2YXRlRmllbGQ7CisKKyAgICBjbGFz
cyBEIHsKKyAgICAgICAgI3ByaXZhdGVGaWVsZDsKKyAgICAgICAgY29uc3RydWN0b3Iodikgewor
ICAgICAgICAgICAgdGhpcy4jcHJpdmF0ZUZpZWxkID0gdjsKKyAgICAgICAgfQorICAgICAgICBz
dGF0aWMgeworICAgICAgICAgICAgZ2V0RFByaXZhdGVGaWVsZCA9IChkKSA9PiBkLiNwcml2YXRl
RmllbGQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhc3NlcnQoZ2V0RFByaXZhdGVGaWVsZChu
ZXcgRCgncHJpdmF0ZScpKSA9PSAncHJpdmF0ZScpOworfQorCisvLyAtLS0tLS0tLS0tICJmcmll
bmQiIGFjY2VzcyAtLS0tLS0tLS0tCit7CisgICAgbGV0IEEsIEI7CisKKyAgICBsZXQgZnJpZW5k
QTsKKworICAgIEEgPSBjbGFzcyBBIHsKKyAgICAgICAgI3g7CisgICAgICAgIGNvbnN0cnVjdG9y
KHgpIHsKKyAgICAgICAgICAgIHRoaXMuI3ggPSB4OworICAgICAgICB9CisgICAgICAgIHN0YXRp
YyB7CisgICAgICAgICAgICBmcmllbmRBID0geworICAgICAgICAgICAgICAgIGdldFgob2JqKSB7
IHJldHVybiBvYmouI3ggfSwKKyAgICAgICAgICAgICAgICBzZXRYKG9iaiwgdmFsdWUpIHsgb2Jq
LiN4ID0gdmFsdWUgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBnZXRYKCkg
eworICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3g7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
QiA9IGNsYXNzIEIgeworICAgICAgICBjb25zdHJ1Y3RvcihhKSB7CisgICAgICAgICAgICBjb25z
dCB4ID0gZnJpZW5kQS5nZXRYKGEpOworICAgICAgICAgICAgZnJpZW5kQS5zZXRYKGEsIHggKyAz
Mik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IGEgPSBuZXcgQSgxMCk7CisgICAgbmV3
IEIoYSk7CisKKyAgICBhc3NlcnQoYS5nZXRYKCkgPT0gNDIpOworfQorCisvLyAtLS0tLS0tLS0t
IE90aGVycyAtLS0tLS0tLS0tCit7CisgICAgZnVuY3Rpb24gZG9Tb21ldGhpbmdXaXRoKHgpIHsK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHk6IHggKyAxLAorICAgICAgICAgICAgejog
eCArIDIKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBjbGFzcyBDIHsKKyAgICAgICAgc3RhdGlj
IHggPSAxMDsKKyAgICAgICAgc3RhdGljIHk7CisgICAgICAgIHN0YXRpYyB6OworICAgICAgICBz
dGF0aWMgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25zdCBvYmogPSBk
b1NvbWV0aGluZ1dpdGgodGhpcy54KTsKKyAgICAgICAgICAgICAgICB0aGlzLnkgPSBvYmoueTsK
KyAgICAgICAgICAgICAgICB0aGlzLnogPSBvYmouejsKKyAgICAgICAgICAgIH0gY2F0Y2ggewor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KEMueSA9PSAxMSk7
CisgICAgYXNzZXJ0KEMueiA9PSAxMik7Cit9CisKK3sKKyAgICBjbGFzcyBDIHsKKyAgICAgICAg
c3RhdGljIHk7CisgICAgICAgIHN0YXRpYyB6OworICAgICAgICBzdGF0aWMgeworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB0aHJvdyAiZXJyIjsKKyAgICAgICAgICAgIH0gY2F0
Y2ggeworICAgICAgICAgICAgICAgIHRoaXMueSA9IDEzOworICAgICAgICAgICAgICAgIHRoaXMu
eiA9IDE0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXNzZXJ0KEMu
eSA9PSAxMyk7CisgICAgYXNzZXJ0KEMueiA9PSAxNCk7Cit9CisKK3sKKyAgICBjbGFzcyBDIHsK
KyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGlubmVyKCkgeworICAgICAg
ICAgICAgICAgIHRyeSB7IH0gY2F0Y2ggKGF3YWl0KSB7IH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKworeworICAgIGNsYXNzIEMgeworICAgICAgICBzdGF0aWMgeworICAg
ICAgICAgICAgYXN5bmMgZnVuY3Rpb24gaW5uZXIoKSB7CisgICAgICAgICAgICAgICAgYXdhaXQg
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworeworICAgIGFzeW5jIGZ1
bmN0aW9uIGlubmVyKCkgeworICAgICAgICBjbGFzcyBDIHsKKyAgICAgICAgICAgIHN0YXRpYyB7
CisgICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gaW5uZXIoKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF3YWl0IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCit7CisgICAgdmFyIHZhbHVlID0gbnVsbDsKKyAgICBjbGFzcyBDIHsK
KyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGlubmVyKCkgeworICAgICAg
ICAgICAgICAgIHZhbHVlID0gbmV3LnRhcmdldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlubmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0KHZhbHVlID09IHVuZGVmaW5l
ZCk7Cit9CisKK3sKKyAgICBjbGFzcyBDIHsKKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAg
IHZhbHVlID0gbmV3LnRhcmdldDsKKyAgICAgICAgfQorICAgIH0KKyAgICBhc3NlcnQodmFsdWUg
PT0gdW5kZWZpbmVkKTsKK30KKworeworICAgIGNsYXNzIEMgeworICAgICAgICBzdGF0aWMgewor
ICAgICAgICAgICAgZnVuY3Rpb24gaW5uZXIoKSB7CisgICAgICAgICAgICAgICAgbGV0IGF3YWl0
ID0gMTA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBjbGFz
cyBDIHsKKyAgICAgICAgc3RhdGljIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGlubmVyKCkgewor
ICAgICAgICAgICAgICAgIFthd2FpdF0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKworeworICAgIGNsYXNzIEMgeworICAgICAgICBzdGF0aWMgeworICAgICAgICAgICAg
ZnVuY3Rpb24gaW5uZXIoKSB7CisgICAgICAgICAgICAgICAgW2FyZ3VtZW50c10oKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworeworICAgIGNsYXNzIEMgeworICAgICAg
ICBzdGF0aWMgeworICAgICAgICAgICAgZnVuY3Rpb24gaW5uZXIoKSB7CisgICAgICAgICAgICAg
ICAgYXJndW1lbnRzWzBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55YW1sIGIvSlNUZXN0cy90ZXN0MjYyL2Nv
bmZpZy55YW1sCmluZGV4IDRmZTcxMDA0NTE3NC4uNzM4OGY1NjJiMzQ3IDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwKKysrIGIvSlNUZXN0cy90ZXN0MjYyL2NvbmZpZy55
YW1sCkBAIC0yMCw3ICsyMCw2IEBAIHNraXA6CiAgICAgLSByZWdleHAtbG9va2JlaGluZAogICAg
IC0gcmVnZXhwLXYtZmxhZwogICAgIC0gcmVzaXphYmxlLWFycmF5YnVmZmVyCi0gICAgLSBjbGFz
cy1zdGF0aWMtYmxvY2sKICAgICAtIGNhbGxhYmxlLWJvdW5kYXJ5LXJlYWxtcwogICAgIC0gRmlu
YWxpemF0aW9uUmVnaXN0cnkucHJvdG90eXBlLmNsZWFudXBTb21lCiAgICAgLSBJbnRsLkR1cmF0
aW9uRm9ybWF0Cg==
</data>
<flag name="commit-queue"
          id="491281"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>