<?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>224715</bug_id>
          
          <creation_ts>2021-04-17 01:07:10 -0700</creation_ts>
          <short_desc>[JSC] Do not use Bag&lt;&gt; for DFG / FTL watchpoints</short_desc>
          <delta_ts>2021-04-19 22:07:35 -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>New Bugs</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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1751396</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-17 01:07:10 -0700</bug_when>
    <thetext>[JSC] Do not use Bag&lt;&gt; for DFG / FTL watchpoints</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751397</commentid>
    <comment_count>1</comment_count>
      <attachid>426324</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-17 01:07:23 -0700</bug_when>
    <thetext>Created attachment 426324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751399</commentid>
    <comment_count>2</comment_count>
      <attachid>426325</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-17 01:29:06 -0700</bug_when>
    <thetext>Created attachment 426325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751400</commentid>
    <comment_count>3</comment_count>
      <attachid>426326</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-17 01:47:30 -0700</bug_when>
    <thetext>Created attachment 426326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751401</commentid>
    <comment_count>4</comment_count>
      <attachid>426327</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-17 01:56:27 -0700</bug_when>
    <thetext>Created attachment 426327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751487</commentid>
    <comment_count>5</comment_count>
      <attachid>426327</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-17 15:59:00 -0700</bug_when>
    <thetext>Comment on attachment 426327
Patch

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

Title should say &quot;for better memory efficiency&quot; or something like that.

While I’m not a deep expert on this code, it looks right to me.

&gt; Source/JavaScriptCore/bytecode/AdaptiveInferredPropertyValueWatchpointBase.cpp:43
&gt; +AdaptiveInferredPropertyValueWatchpointBase::AdaptiveInferredPropertyValueWatchpointBase()
&gt; +    : m_key()
&gt; +{
&gt; +}
&gt; +

Why is this needed? Isn’t this what the default constructor would do if we just wrote &quot;= default&quot;?

&gt; Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.h:45
&gt; +    CodeBlockJettisoningWatchpoint()
&gt; +        : CodeBlockJettisoningWatchpoint(nullptr)
&gt; +    {
&gt; +    }

We could achieve this more economically by just writing &quot;CodeBlock* codeBlock = nullptr&quot; in the other constructor.

&gt; Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:46
&gt; +AdaptiveInferredPropertyValueWatchpoint::AdaptiveInferredPropertyValueWatchpoint()
&gt; +    : Base()
&gt; +    , m_codeBlock(nullptr)
&gt; +{
&gt; +}

It would be more elegant to initialize m_codeBlock to nullptr in the header, and then use &quot;= default&quot; for this constructor.

&gt; Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:47
&gt; +    , m_codeBlock(nullptr)

Can we initialize m_codeBlock in the class definition, and then omit this line? Maybe not because of JSC_WATCHPOINT_FIELD?

&gt; Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:48
&gt; +    , m_key()

Can we omit this line? Pretty sure that this isn’t needed. Maybe not because of JSC_WATCHPOINT_FIELD?

&gt; Source/JavaScriptCore/dfg/DFGCommonData.cpp:151
&gt; +    for (AdaptiveStructureWatchpoint&amp; watchpoint : m_adaptiveStructureWatchpoints)

I think code like this is more readable with auto&amp; rather than writing out a type name. Using &quot;auto&amp;&quot; documents that the type is correct and does not slice or upcast.

&gt; Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.h:49
&gt; +    WatchpointCollector() = default;

I believe we can simply omit this entirely, and behavior should be the same.

&gt; Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.h:60
&gt; +    template&lt;typename Func&gt;
&gt; +    void addWatchpoint(const Func&amp; func)

Could we use a word instead of &quot;func&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751584</commentid>
    <comment_count>6</comment_count>
      <attachid>426327</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-18 00:58:03 -0700</bug_when>
    <thetext>Comment on attachment 426327
Patch

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

Thanks

&gt;&gt; Source/JavaScriptCore/bytecode/AdaptiveInferredPropertyValueWatchpointBase.cpp:43
&gt;&gt; +
&gt; 
&gt; Why is this needed? Isn’t this what the default constructor would do if we just wrote &quot;= default&quot;?

Yeah, replaced with = default;

&gt;&gt; Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.h:45
&gt;&gt; +    }
&gt; 
&gt; We could achieve this more economically by just writing &quot;CodeBlock* codeBlock = nullptr&quot; in the other constructor.

Replaced.

&gt;&gt; Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:46
&gt;&gt; +}
&gt; 
&gt; It would be more elegant to initialize m_codeBlock to nullptr in the header, and then use &quot;= default&quot; for this constructor.

Replaced.

&gt;&gt; Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:47
&gt;&gt; +    , m_codeBlock(nullptr)
&gt; 
&gt; Can we initialize m_codeBlock in the class definition, and then omit this line? Maybe not because of JSC_WATCHPOINT_FIELD?

Unfortunately it is not since JSC_WATCHPOINT_FIELD.

&gt;&gt; Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:48
&gt;&gt; +    , m_key()
&gt; 
&gt; Can we omit this line? Pretty sure that this isn’t needed. Maybe not because of JSC_WATCHPOINT_FIELD?

Yes, we can omit it.

&gt;&gt; Source/JavaScriptCore/dfg/DFGCommonData.cpp:151
&gt;&gt; +    for (AdaptiveStructureWatchpoint&amp; watchpoint : m_adaptiveStructureWatchpoints)
&gt; 
&gt; I think code like this is more readable with auto&amp; rather than writing out a type name. Using &quot;auto&amp;&quot; documents that the type is correct and does not slice or upcast.

Replaced.

&gt;&gt; Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.h:49
&gt;&gt; +    WatchpointCollector() = default;
&gt; 
&gt; I believe we can simply omit this entirely, and behavior should be the same.

Removed.

&gt;&gt; Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.h:60
&gt;&gt; +    void addWatchpoint(const Func&amp; func)
&gt; 
&gt; Could we use a word instead of &quot;func&quot;?

Replaced with function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751585</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-18 01:06:59 -0700</bug_when>
    <thetext>Committed r276226 (236708@main): &lt;https://commits.webkit.org/236708@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751586</commentid>
    <comment_count>8</comment_count>
      <attachid>426327</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-18 01:30:23 -0700</bug_when>
    <thetext>Comment on attachment 426327
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGDesiredWatchpoints.h:49
&gt;&gt;&gt; +    WatchpointCollector() = default;
&gt;&gt; 
&gt;&gt; I believe we can simply omit this entirely, and behavior should be the same.
&gt; 
&gt; Removed.

Ah, this was important. If we are using WTF_MAKE_NONCOPYABLE, we need this. Otherwise, this becomes compile error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1751588</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-18 01:35:39 -0700</bug_when>
    <thetext>Committed r276227 (236709@main): &lt;https://commits.webkit.org/236709@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752139</commentid>
    <comment_count>10</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2021-04-19 22:07:35 -0700</bug_when>
    <thetext>rdar://76810095</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426324</attachid>
            <date>2021-04-17 01:07:23 -0700</date>
            <delta_ts>2021-04-17 01:29:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224715-20210417010722.patch</filename>
            <type>text/plain</type>
            <size>28422</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
OTI2ZGQwYWYyZTAxNTE5ZDc1MDY5MDYyYWNkMzQ4NTdmMTBkMmY0Li4zNjZjYzEzMTJjMWUyMzlh
Yzg0ZWVkYzVjN2I2ZmRhNWIzZjRkZDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MyBAQAorMjAyMS0wNC0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIERvIG5vdCB1c2UgQmFnPD4gZm9yIERGRyAvIEZUTCB3YXRjaHBv
aW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0
NzE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBi
eXRlY29kZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFz
ZTo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSk6CisgICAgICAg
IChKU0M6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2U6OmluaXRp
YWxpemUpOgorICAgICAgICAqIGJ5dGVjb2RlL0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuaDoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuaDoKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmg6CisgICAgICAgICogZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgICogZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb25EYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjp2YWxp
ZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmNsZWFyV2F0
Y2hwb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdE
ZXNpcmVkR2xvYmFsUHJvcGVydGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEds
b2JhbFByb3BlcnRpZXM6OnJlYWxseUFkZCk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRHbG9i
YWxQcm9wZXJ0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3ltYm9sVGFibGVBZGFwdG9yOjphZGQpOgorICAgICAg
ICAoSlNDOjpERkc6OkZ1bmN0aW9uRXhlY3V0YWJsZUFkYXB0b3I6OmFkZCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgICog
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OlNldFBvaW50
ZXJBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlBsYW46OnJlYWxseUFkZCk6CisKIDIwMjEtMDQtMTYgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIE1vcmUgY2hhbmdlcyB0byBzdXBwb3J0IHRoZSBU
ZXJtaW5hdGlvbkV4Y2VwdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnRCYXNlLmNwcAppbmRleCBiMjZmYmY2YWNjODYzYTJhZGZlNTIwMWJiNjJl
ZGViMjIwN2JiZDM5Li42MjlmYTBjMWZkZmFhOTQ4ODMwNTFmOGQ2MDljMTBkMzEwMTE5OTcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
Y3BwCkBAIC0zNiw2ICszNiwxOCBAQCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnRCYXNlOjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocAogICAgIFJFTEVB
U0VfQVNTRVJUKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsK
IH0KIAorQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZTo6QWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSgpCisgICAgOiBtX2tleSgpCit7
Cit9CisKKwordm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNl
Ojppbml0aWFsaXplKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCit7CisgICAg
bV9rZXkgPSBrZXk7CisgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNv
bmRpdGlvbjo6RXF1aXZhbGVuY2UpOworfQorCiB2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludEJhc2U6Omluc3RhbGwoVk0mIHZtKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKG1fa2V5LmlzV2F0Y2hhYmxlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2Uu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnRCYXNlLmgKaW5kZXggZmE0Nzk4YmE1NjhlMTRlYWQzMzZlNTk0MDY2
NDFlNTNhZmM2NGNhMC4uNTI0YzlhNzQ1OGUzNDk0OGJiNDQ1NTQzZDhhZTBiMjU5ZTQ5ZmY3NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5o
CkBAIC00MCw5ICs0MCwxMSBAQCBjbGFzcyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnRCYXNlIHsKIAogcHVibGljOgogICAgIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludEJhc2UoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKyAgICBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlKCk7CiAKICAgICBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0K
IAorICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYpOwog
ICAgIHZvaWQgaW5zdGFsbChWTSYpOwogCiAgICAgdmlydHVhbCB+QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSgpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQuaAppbmRleCA3ZTI4YjMwOWMwNzQ2MTM3MzA4MWQxMWU2MDQ0YmU4NzY4N2Y0NjU5
Li4wODdkNzQ5NjhlZDY1ODBjMjk0Yjc4YzUxNWVhZmE5ZGI5MzgyZjMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludC5oCkBAIC0zOCw2ICszOCwxNiBAQCBjbGFzcyBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgV2F0Y2hwb2ludCB7CiAgICAgICAgICwg
bV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgIHsKICAgICB9CisKKyAgICBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQoKQorICAgICAgICA6IENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludChudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGluaXRpYWxpemUoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBtX2NvZGVCbG9jayA9IGNvZGVCbG9jazsK
KyAgICB9CiAgICAgCiAgICAgdm9pZCBmaXJlSW50ZXJuYWwoVk0mLCBjb25zdCBGaXJlRGV0YWls
Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcAppbmRl
eCA4ODE2YWRmMWJiYjVmMGZjYTgxMGU3Yjc1N2Q2MmE4YjAzNzMyMWI5Li5kMjQ4YWEzZDIxZjg3
MjM2NjkwMWNiOThiYjM0MmU0MWQ2ZTIzNDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQuY3BwCkBAIC0zOSw2ICszOSwxOCBAQCBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludAogewogfQogCitBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6
OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCgpCisgICAgOiBCYXNlKCkK
KyAgICAsIG1fY29kZUJsb2NrKG51bGxwdHIpCit7Cit9CisKK3ZvaWQgQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Ojppbml0aWFsaXplKGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXksIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEJhc2U6OmluaXRp
YWxpemUoa2V5KTsKKyAgICBtX2NvZGVCbG9jayA9IGNvZGVCbG9jazsKK30KKwogdm9pZCBBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OmhhbmRsZUZpcmUoVk0mLCBjb25z
dCBGaXJlRGV0YWlsJiBkZXRhaWwpCiB7CiAgICAgaWYgKERGRzo6c2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAppbmRleCAy
Nzc2ZDkxY2FiNWFlNzFiNTVhNzViNzU5YTFkMmYzMGMwZmJkNTRlLi5mMmNjODM4ZmZjMmY4YTI1
ODhkZDJjYzkyMjczZGYxMjcyZDNkYzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50LmgKQEAgLTM1LDYgKzM1LDkgQEAgY2xhc3MgQWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm8K
IHB1YmxpYzoKICAgICB0eXBlZGVmIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludEJhc2UgQmFzZTsKICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb2RlQmxvY2sqKTsKKyAgICBBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoKTsKKworICAgIHZvaWQgaW5pdGlh
bGl6ZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvZGVCbG9jayopOwogCiBwcml2
YXRlOgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwCmluZGV4IDhhMmE3NjBmMDJmZDdlNzI4NzRkOTIwMmE3YWY1ZjZiMzg4ZGYyNGEuLjExOWZk
NzkxNjBlZDI5ZDMzN2E3ZWFjNDEyOTJjMmQ3ODE2ZWM1Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dC5jcHAKQEAgLTQyLDYgKzQyLDIxIEBAIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6QWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uCiAgICAgUkVM
RUFTRV9BU1NFUlQoIWtleS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkp
OwogfQogCitBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OkFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludCgpCisgICAgOiBXYXRjaHBvaW50KFdhdGNocG9pbnQ6OlR5cGU6OkFkYXB0aXZlU3Ry
dWN0dXJlKQorICAgICwgbV9jb2RlQmxvY2sobnVsbHB0cikKKyAgICAsIG1fa2V5KCkKK3sKK30K
Kwordm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OmluaXRpYWxpemUoY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAg
bV9jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgbV9rZXkgPSBrZXk7CisgICAgUkVMRUFTRV9B
U1NFUlQoa2V5LndhdGNoaW5nUmVxdWlyZXNTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCgha2V5LndhdGNoaW5nUmVxdWlyZXNSZXBsYWNlbWVudFdh
dGNocG9pbnQoKSk7Cit9CisKIHZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjppbnN0
YWxsKFZNJiB2bSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJsZSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludC5oCmluZGV4IGIyOWY4OWYyNTQzYjBiZTFmOGIxNTk0ZmQ5ZTUxZThi
ZTE5ZTk4ZjQuLjlhNGFiZGM1Y2Q1ZDM5YmFlYjcyOGNjY2MzYTMxOTk3ODFjMTdjN2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaApAQCAtMzcsOSArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogY2xhc3MgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50IGZpbmFsIDogcHVi
bGljIFdhdGNocG9pbnQgewogcHVibGljOgogICAgIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvZGVCbG9jayopOworICAgIEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludCgpOwogICAgIAogICAgIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQotICAgIAorCisgICAgdm9p
ZCBpbml0aWFsaXplKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgQ29kZUJsb2NrKik7
CisKICAgICB2b2lkIGluc3RhbGwoVk0mKTsKIAogICAgIHZvaWQgZmlyZUludGVybmFsKFZNJiwg
Y29uc3QgRmlyZURldGFpbCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5jcHAKaW5kZXggYjNlZmJlNWI1NmM2ZjFjZDY4MzYwZjU3NzJhZGIzNjFlNTMyYjVhMi4u
MzFlNGRlZTk2MGE2MWQwMmIwNjBhMjQ1OTgwNzk3YmE3ZGEyNmMxNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCkBAIC0xNDgsOCArMTQ4LDggQEAgdm9p
ZCBDb21tb25EYXRhOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMm
IHRyYWNrZWRSZWZlcmVuY2VzKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAoQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KiB3YXRjaHBvaW50IDogYWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50cykKLSAgICAgICAgd2F0Y2hwb2ludC0+a2V5KCkudmFsaWRhdGVSZWZlcmVuY2Vz
KHRyYWNrZWRSZWZlcmVuY2VzKTsKKyAgICBmb3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dCYgd2F0Y2hwb2ludCA6IG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cykKKyAgICAgICAg
d2F0Y2hwb2ludC5rZXkoKS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwog
fQogCiB2b2lkIENvbW1vbkRhdGE6OmZpbmFsaXplQ2F0Y2hFbnRyeXBvaW50cyhWZWN0b3I8Q2F0
Y2hFbnRyeXBvaW50RGF0YT4mJiBjYXRjaEVudHJ5cG9pbnRzKQpAQCAtMTY3LDkgKzE2NywxOCBA
QCB2b2lkIENvbW1vbkRhdGE6OmZpbmFsaXplQ2F0Y2hFbnRyeXBvaW50cyhWZWN0b3I8Q2F0Y2hF
bnRyeXBvaW50RGF0YT4mJiBjYXRjaEVudAogCiB2b2lkIENvbW1vbkRhdGE6OmNsZWFyV2F0Y2hw
b2ludHMoKQogewotICAgIHdhdGNocG9pbnRzLmNsZWFyKCk7Ci0gICAgYWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50cy5jbGVhcigpOwotICAgIGFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludHMuY2xlYXIoKTsKKyAgICBtX3dhdGNocG9pbnRzID0gRml4ZWRWZWN0b3I8Q29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PigpOworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50cyA9IEZpeGVkVmVjdG9yPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4oKTsK
KyAgICBtX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHMgPSBGaXhlZFZl
Y3RvcjxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+KCk7Cit9CisKKwor
dm9pZCBXYXRjaHBvaW50Q29sbGVjdG9yOjpmaW5hbGl6ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29tbW9uRGF0YSYgY29tbW9uKQoreworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2spOworICAgIGNvbW1vbi5tX3dhdGNocG9pbnRzID0gV1RGTW92ZShtX3dh
dGNocG9pbnRzKTsKKyAgICBjb21tb24ubV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzID0g
V1RGTW92ZShtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpOworICAgIGNvbW1vbi5tX2Fk
YXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHMgPSBXVEZNb3ZlKG1fYWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cyk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKaW5k
ZXggOTM2Nzc0NGYzNjVlM2I3ZDc5YzE5MDExMDM0NDc1ZTgzNzU4NjY3MC4uYTcxZTAyNTNlMGFl
MDRiNTUxYjFlZTgxNzhiNWNlZmY5ZDQ1NzFhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb25EYXRhLmgKQEAgLTExMyw5ICsxMTMsOSBAQCBjbGFzcyBDb21tb25EYXRhIHsK
ICAgICBGaXhlZFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gbV93ZWFrUmVmZXJlbmNlczsK
ICAgICBGaXhlZFZlY3RvcjxTdHJ1Y3R1cmVJRD4gbV93ZWFrU3RydWN0dXJlUmVmZXJlbmNlczsK
ICAgICBGaXhlZFZlY3RvcjxDYXRjaEVudHJ5cG9pbnREYXRhPiBtX2NhdGNoRW50cnlwb2ludHM7
Ci0gICAgQmFnPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gd2F0Y2hwb2ludHM7Ci0g
ICAgQmFnPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gYWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50czsKLSAgICBCYWc8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
PiBhZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIEZpeGVkVmVj
dG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50czsKKyAgICBG
aXhlZFZlY3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50czsKKyAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
czsKICAgICBSZWNvcmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1
bXBSZXBsYWNlbWVudD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApAQCAtMTM0LDYgKzEzNCw2
NiBAQCBjbGFzcyBDb21tb25EYXRhIHsKIAogQ29kZUJsb2NrKiBjb2RlQmxvY2tGb3JWTVRyYXBQ
Qyh2b2lkKiBwYyk7CiAKK2VudW0gY2xhc3MgV2F0Y2hwb2ludFJlZ2lzdHJhdGlvbk1vZGUgOiB1
aW50OF90IHsgQ29sbGVjdCwgQWRkIH07CitjbGFzcyBXYXRjaHBvaW50Q29sbGVjdG9yIGZpbmFs
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXYXRjaHBvaW50Q29sbGVjdG9yKTsKK3B1Ymxp
YzoKKyAgICBXYXRjaHBvaW50Q29sbGVjdG9yKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCBtYXRl
cmlhbGl6ZSgpCisgICAgeworICAgICAgICBtX3dhdGNocG9pbnRzID0gRml4ZWRWZWN0b3I8Q29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PihtX3dhdGNocG9pbnRDb3VudCk7CisgICAgICAg
IG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cyA9IEZpeGVkVmVjdG9yPEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludD4obV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRDb3VudCk7Cisg
ICAgICAgIG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cyA9IEZpeGVk
VmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4obV9hZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRDb3VudCk7CisgICAgICAgIG1fbW9kZSA9
IFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlOjpBZGQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29uc3QgRnVuYyYgZnVuYykK
KyAgICB7CisgICAgICAgIGlmIChtX21vZGUgPT0gV2F0Y2hwb2ludFJlZ2lzdHJhdGlvbk1vZGU6
OkFkZCkKKyAgICAgICAgICAgIGZ1bmMobV93YXRjaHBvaW50c1ttX3dhdGNocG9pbnRJbmRleCsr
XSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICsrbV93YXRjaHBvaW50Q291bnQ7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGFkZEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgaWYgKG1f
bW9kZSA9PSBXYXRjaHBvaW50UmVnaXN0cmF0aW9uTW9kZTo6QWRkKQorICAgICAgICAgICAgZnVu
YyhtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHNbbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnRzSW5kZXgrK10pOworICAgICAgICBlbHNlCisgICAgICAgICAgICArK21fYWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50Q291bnQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICB2b2lkIGFkZEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgaWYgKG1fbW9kZSA9PSBXYXRjaHBv
aW50UmVnaXN0cmF0aW9uTW9kZTo6QWRkKQorICAgICAgICAgICAgZnVuYyhtX2FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHNbbV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnRzSW5kZXgrK10pOworICAgICAgICBlbHNlCisgICAgICAgICAgICArK21f
YWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Q291bnQ7CisgICAgfQorCisg
ICAgdm9pZCBmaW5hbGl6ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tbW9uRGF0YSYgY29tbW9u
KTsKKworICAgIFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlIG1vZGUoKSBjb25zdCB7IHJldHVy
biBtX21vZGU7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3dhdGNocG9pbnRDb3VudCB7
IDAgfTsKKyAgICB1bnNpZ25lZCBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludENvdW50IHsg
MCB9OworICAgIHVuc2lnbmVkIG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50Q291bnQgeyAwIH07CisKKyAgICB1bnNpZ25lZCBtX3dhdGNocG9pbnRJbmRleCB7IDAgfTsK
KyAgICB1bnNpZ25lZCBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHNJbmRleCB7IDAgfTsK
KyAgICB1bnNpZ25lZCBtX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHNJ
bmRleCB7IDAgfTsKKworICAgIEZpeGVkVmVjdG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludD4gbV93YXRjaHBvaW50czsKKyAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQ+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsKKyAgICBGaXhlZFZlY3Rv
cjxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKKyAgICBXYXRjaHBvaW50UmVnaXN0cmF0aW9u
TW9kZSBtX21vZGUgeyBXYXRjaHBvaW50UmVnaXN0cmF0aW9uTW9kZTo6Q29sbGVjdCB9OworfTsK
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRHbG9iYWxQ
cm9wZXJ0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEdsb2Jh
bFByb3BlcnRpZXMuY3BwCmluZGV4IDZmMmU2YTI4NGVmZDlkZTkxZDQ2MzJkODgwY2M0OWUyODkw
ODM5ZTMuLjVkMGJiNTk1ZGQ5ZDRkMjJmYTBjNTFkNmJmNGUzMjIwNjdlOGVhZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEdsb2JhbFByb3Bl
cnRpZXMuY3BwCkBAIC01NCwxOCArNTQsMTkgQEAgYm9vbCBEZXNpcmVkR2xvYmFsUHJvcGVydGll
czo6aXNTdGlsbFZhbGlkT25NYWluVGhyZWFkKFZNJiB2bSwgRGVzaXJlZElkZW50aWZpZXIKICAg
ICByZXR1cm4gaXNTdGlsbFZhbGlkOwogfQogCi12b2lkIERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVz
OjpyZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlc2lyZWRJZGVudGlmaWVycyYgaWRl
bnRpZmllcnMsIENvbW1vbkRhdGEmIGNvbW1vbikKK3ZvaWQgRGVzaXJlZEdsb2JhbFByb3BlcnRp
ZXM6OnJlYWxseUFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVzaXJlZElkZW50aWZpZXJzJiBp
ZGVudGlmaWVycywgV2F0Y2hwb2ludENvbGxlY3RvciYgY29sbGVjdG9yKQogewogICAgIGZvciAo
Y29uc3QgYXV0byYgcHJvcGVydHkgOiBtX3NldCkgewotICAgICAgICBhdXRvKiB1aWQgPSBpZGVu
dGlmaWVycy5hdChwcm9wZXJ0eS5pZGVudGlmaWVyTnVtYmVyKCkpOwotICAgICAgICBhdXRvJiB3
YXRjaHBvaW50U2V0ID0gcHJvcGVydHkuZ2xvYmFsT2JqZWN0KCktPmVuc3VyZVJlZmVyZW5jZWRQ
cm9wZXJ0eVdhdGNocG9pbnRTZXQodWlkKTsKLSAgICAgICAgQVNTRVJUKHdhdGNocG9pbnRTZXQu
aXNTdGlsbFZhbGlkKCkpOwotICAgICAgICBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQq
IHdhdGNocG9pbnQgPSBudWxscHRyOwotICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIHdhdGNocG9p
bnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICAg
ICAgd2F0Y2hwb2ludFNldC5hZGQoV1RGTW92ZSh3YXRjaHBvaW50KSk7CisgICAgICAgIGNvbGxl
Y3Rvci5hZGRXYXRjaHBvaW50KFsmXShDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQmIHdh
dGNocG9pbnQpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICB3YXRjaHBv
aW50LmluaXRpYWxpemUoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1
dG8qIHVpZCA9IGlkZW50aWZpZXJzLmF0KHByb3BlcnR5LmlkZW50aWZpZXJOdW1iZXIoKSk7Cisg
ICAgICAgICAgICBhdXRvJiB3YXRjaHBvaW50U2V0ID0gcHJvcGVydHkuZ2xvYmFsT2JqZWN0KCkt
PmVuc3VyZVJlZmVyZW5jZWRQcm9wZXJ0eVdhdGNocG9pbnRTZXQodWlkKTsKKyAgICAgICAgICAg
IEFTU0VSVCh3YXRjaHBvaW50U2V0LmlzU3RpbGxWYWxpZCgpKTsKKyAgICAgICAgICAgIHdhdGNo
cG9pbnRTZXQuYWRkKCZ3YXRjaHBvaW50KTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0
aWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0
aWVzLmgKaW5kZXggNjliZDM2ZGE5YmZiY2NlMTZlYjUyMTVlZjkwMTlmNGQxNzE0NWY3Yi4uZmEw
ZGE5ZTYyNzg5YjJlOTEzNWM4YTUzNzFlZGE5YWI0ZTQ5NGIxZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkR2xvYmFsUHJvcGVydGllcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMuaApAQCAt
MzksNiArMzksNyBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgQ29tbW9uRGF0YTsKIGNsYXNz
IERlc2lyZWRJZGVudGlmaWVyczsKK2NsYXNzIFdhdGNocG9pbnRDb2xsZWN0b3I7CiAKIGNsYXNz
IERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzIHsKIHB1YmxpYzoKQEAgLTQ5LDcgKzUwLDcgQEAgY2xh
c3MgRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMgewogCiAgICAgYm9vbCBpc1N0aWxsVmFsaWRPbk1h
aW5UaHJlYWQoVk0mLCBEZXNpcmVkSWRlbnRpZmllcnMmKTsKIAotICAgIHZvaWQgcmVhbGx5QWRk
KENvZGVCbG9jayosIERlc2lyZWRJZGVudGlmaWVycyYsIENvbW1vbkRhdGEmKTsKKyAgICB2b2lk
IHJlYWxseUFkZChDb2RlQmxvY2sqLCBEZXNpcmVkSWRlbnRpZmllcnMmLCBXYXRjaHBvaW50Q29s
bGVjdG9yJik7CiAKIHByaXZhdGU6CiAgICAgSGFzaFNldDxEZXNpcmVkR2xvYmFsUHJvcGVydHk+
IG1fc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwCmluZGV4IDYzNzZkNTdlYTg3ZTA0ZWE1MjEyMjdkZDNhODhlZGI2Y2I0ZDg2
MTEuLjcwY2VkOTA1MjE2ZTMwNjYzNzdhZDA0NDI4NDQ4ZjVjZjM5YmEzY2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKQEAg
LTM0LDcxICszNCw3MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZv
aWQgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIENvbW1vbkRhdGEmIGNvbW1vbikK
K3ZvaWQgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFkZChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIFdhdGNocG9pbnRDb2xsZWN0b3ImIGNv
bGxlY3RvcikKIHsKLSAgICAvLyB2aWV3IGlzIGFscmVhZHkgZnJvemVuLiBJZiBpdCBpcyBkZWFs
bG9jYXRlZCwgamV0dGlzb25pbmcgaGFwcGVucy4KLSAgICBDb2RlQmxvY2tKZXR0aXNvbmluZ1dh
dGNocG9pbnQqIHdhdGNocG9pbnQgPSBudWxscHRyOwotICAgIHsKLSAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIHdhdGNocG9pbnQg
PSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7Ci0gICAgfQotICAgIEFycmF5QnVm
ZmVyKiBhcnJheUJ1ZmZlciA9IHZpZXctPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7Ci0gICAgaWYg
KCFhcnJheUJ1ZmZlcikgewotICAgICAgICB3YXRjaHBvaW50LT5maXJlKGNvZGVCbG9jay0+dm0o
KSwgU3RyaW5nRmlyZURldGFpbCgiQXJyYXlCdWZmZXIgY291bGQgbm90IGJlIGFsbG9jYXRlZCwg
cHJvYmFibHkgYmVjYXVzZSBvZiBPT00uIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGNvbGxlY3Rvci5hZGRXYXRjaHBvaW50KFsmXShDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9p
bnQmIHdhdGNocG9pbnQpIHsKKyAgICAgICAgLy8gdmlldyBpcyBhbHJlYWR5IGZyb3plbi4gSWYg
aXQgaXMgZGVhbGxvY2F0ZWQsIGpldHRpc29uaW5nIGhhcHBlbnMuCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAg
ICAgICAgICAgd2F0Y2hwb2ludC5pbml0aWFsaXplKGNvZGVCbG9jayk7CisgICAgICAgIH0KKyAg
ICAgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gdmlldy0+cG9zc2libHlTaGFyZWRCdWZm
ZXIoKTsKKyAgICAgICAgaWYgKCFhcnJheUJ1ZmZlcikgeworICAgICAgICAgICAgd2F0Y2hwb2lu
dC5maXJlKGNvZGVCbG9jay0+dm0oKSwgU3RyaW5nRmlyZURldGFpbCgiQXJyYXlCdWZmZXIgY291
bGQgbm90IGJlIGFsbG9jYXRlZCwgcHJvYmFibHkgYmVjYXVzZSBvZiBPT00uIikpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAvLyBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0
byBzZXQgdGhpcyB3YXRjaHBvaW50IGF0IGFsbCBmb3Igc2hhcmVkIGJ1ZmZlcnMuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEwOAotICAgIGFycmF5
QnVmZmVyLT5kZXRhY2hpbmdXYXRjaHBvaW50U2V0KCkuYWRkKFdURk1vdmUod2F0Y2hwb2ludCkp
OworICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0byBzZXQgdGhpcyB3YXRjaHBvaW50
IGF0IGFsbCBmb3Igc2hhcmVkIGJ1ZmZlcnMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMDgKKyAgICAgICAgYXJyYXlCdWZmZXItPmRldGFj
aGluZ1dhdGNocG9pbnRTZXQoKS5hZGQoJndhdGNocG9pbnQpOworICAgIH0pOwogfQogCi12b2lk
IFN5bWJvbFRhYmxlQWRhcHRvcjo6YWRkKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUsIENvbW1vbkRhdGEmIGNvbW1vbikKK3ZvaWQgU3ltYm9sVGFi
bGVBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSwgV2F0Y2hwb2ludENvbGxlY3RvciYgY29sbGVjdG9yKQogewotICAgIGNvZGVCbG9jay0+
YWRkQ29uc3RhbnQoQ29uY3VycmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSwgc3ltYm9s
VGFibGUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYg
aXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5
LCB0b28uCi0gICAgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0g
bnVsbHB0cjsKLSAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOwotICAgICAgICB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFk
ZChjb2RlQmxvY2spOwotICAgIH0KLSAgICBzeW1ib2xUYWJsZS0+c2luZ2xldG9uKCkuYWRkKFdU
Rk1vdmUod2F0Y2hwb2ludCkpOworICAgIGNvbGxlY3Rvci5hZGRXYXRjaHBvaW50KFsmXShDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQmIHdhdGNocG9pbnQpIHsKKyAgICAgICAgeworICAg
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgICAgICAgICB3YXRjaHBvaW50LmluaXRpYWxpemUoY29kZUJsb2NrKTsKKyAgICAgICAgfQor
ICAgICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KENvbmN1cnJlbnRKU0xvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayksIHN5bWJvbFRhYmxlKTsgLy8gRm9yIGNvbW1vbiB1c2VycywgaXQgZG9lc24n
dCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2VhayBvciBub3QuIElmIHJlZmVyZW5jZXMgdG8gaXQg
Z28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgorICAgICAgICBzeW1ib2xUYWJsZS0+c2luZ2xldG9u
KCkuYWRkKCZ3YXRjaHBvaW50KTsKKyAgICB9KTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFi
bGVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSwgQ29tbW9uRGF0YSYgY29tbW9uKQordm9pZCBGdW5jdGlvbkV4ZWN1
dGFibGVBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgV2F0Y2hwb2ludENvbGxlY3RvciYgY29sbGVjdG9yKQogewotICAgIGNv
ZGVCbG9jay0+YWRkQ29uc3RhbnQoQ29uY3VycmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
KSwgZXhlY3V0YWJsZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNuJ3QgcmVhbGx5IG1h
dHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0IGdvIGF3YXksIHdl
IGdvIGF3YXksIHRvby4KLSAgICBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQqIHdhdGNo
cG9pbnQgPSBudWxscHRyOwotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hw
b2ludHMuYWRkKGNvZGVCbG9jayk7Ci0gICAgfQotICAgIGV4ZWN1dGFibGUtPnNpbmdsZXRvbigp
LmFkZChXVEZNb3ZlKHdhdGNocG9pbnQpKTsKKyAgICBjb2xsZWN0b3IuYWRkV2F0Y2hwb2ludChb
Jl0oQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50JiB3YXRjaHBvaW50KSB7CisgICAgICAg
IHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOworICAgICAgICAgICAgd2F0Y2hwb2ludC5pbml0aWFsaXplKGNvZGVCbG9jayk7CisgICAg
ICAgIH0KKyAgICAgICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChDb25jdXJyZW50SlNMb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2spLCBleGVjdXRhYmxlKTsgLy8gRm9yIGNvbW1vbiB1c2VycywgaXQg
ZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2VhayBvciBub3QuIElmIHJlZmVyZW5jZXMg
dG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgorICAgICAgICBleGVjdXRhYmxlLT5zaW5n
bGV0b24oKS5hZGQoJndhdGNocG9pbnQpOworICAgIH0pOwogfQogCi12b2lkIEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgQ29tbW9uRGF0YSYgY29tbW9uKQor
dm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjphZGQoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIFdhdGNocG9pbnRD
b2xsZWN0b3ImIGNvbGxlY3RvcikKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAg
ICAgc3dpdGNoIChrZXkua2luZCgpKSB7CiAgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1
aXZhbGVuY2U6IHsKLSAgICAgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50KiB3YXRjaHBvaW50ID0gbnVsbHB0cjsKLSAgICAgICAgewotICAgICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICB3YXRj
aHBvaW50ID0gY29tbW9uLmFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHMu
YWRkKGtleSwgY29kZUJsb2NrKTsKLSAgICAgICAgfQotICAgICAgICB3YXRjaHBvaW50LT5pbnN0
YWxsKHZtKTsKKyAgICAgICAgY29sbGVjdG9yLmFkZEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludChbJl0oQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
JiB3YXRjaHBvaW50KSB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgd2F0
Y2hwb2ludC5pbml0aWFsaXplKGtleSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHdhdGNocG9pbnQuaW5zdGFsbCh2bSk7CisgICAgICAgIH0pOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgZGVmYXVsdDogewotICAgICAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQqIHdhdGNocG9pbnQgPSBudWxscHRyOwotICAgICAgICB7Ci0gICAgICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIHdh
dGNocG9pbnQgPSBjb21tb24uYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cy5hZGQoa2V5LCBj
b2RlQmxvY2spOwotICAgICAgICB9Ci0gICAgICAgIHdhdGNocG9pbnQtPmluc3RhbGwodm0pOwor
ICAgICAgICBjb2xsZWN0b3IuYWRkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KFsmXShBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQmIHdhdGNocG9pbnQpIHsKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
KTsKKyAgICAgICAgICAgICAgICB3YXRjaHBvaW50LmluaXRpYWxpemUoa2V5LCBjb2RlQmxvY2sp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2F0Y2hwb2ludC5pbnN0YWxsKHZtKTsKKyAg
ICAgICAgfSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CkBAIC0xNDUsMTQgKzE0Niwx
NCBAQCBib29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFs
bHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNvbW1vbkRhdGEpCit2b2lk
IERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBXYXRj
aHBvaW50Q29sbGVjdG9yJiBjb2xsZWN0b3IpCiB7Ci0gICAgbV9zZXRzLnJlYWxseUFkZChjb2Rl
QmxvY2ssIGNvbW1vbkRhdGEpOwotICAgIG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2Nr
LCBjb21tb25EYXRhKTsKLSAgICBtX3N5bWJvbFRhYmxlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBj
b21tb25EYXRhKTsKLSAgICBtX2Z1bmN0aW9uRXhlY3V0YWJsZXMucmVhbGx5QWRkKGNvZGVCbG9j
aywgY29tbW9uRGF0YSk7Ci0gICAgbV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBj
b21tb25EYXRhKTsKLSAgICBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJs
b2NrLCBjb21tb25EYXRhKTsKKyAgICBtX3NldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29sbGVj
dG9yKTsKKyAgICBtX2lubGluZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29sbGVjdG9yKTsK
KyAgICBtX3N5bWJvbFRhYmxlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOworICAg
IG1fZnVuY3Rpb25FeGVjdXRhYmxlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOwor
ICAgIG1fYnVmZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29sbGVjdG9yKTsKKyAgICBt
X2FkYXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOwog
fQogCiBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAppbmRl
eCA1ZmJhZWJjNWY1OTY5MWQzOWE3NjM4MDJhYWU2ZmRhMWU3NzcwMjE5Li5kMjRmNDBlNzMyYTEw
MjM0OWNkOTAzNDI2ZTExMTc2ZjNlNTdlYjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKQEAgLTQzLDE0ICs0MywxNSBAQCBzdHJ1
Y3QgUHJlZml4OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IFNldFBvaW50ZXJBZGFw
dG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBD
b21tb25EYXRhJiBjb21tb24pCisgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayogY29kZUJs
b2NrLCBUIHNldCwgV2F0Y2hwb2ludENvbGxlY3RvciYgY29sbGVjdG9yKQogICAgIHsKLSAgICAg
ICAgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gbnVsbHB0cjsK
LSAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgICAgICB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRz
LmFkZChjb2RlQmxvY2spOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzZXQtPmFkZChXVEZN
b3ZlKHdhdGNocG9pbnQpKTsKKyAgICAgICAgY29sbGVjdG9yLmFkZFdhdGNocG9pbnQoWyZdKENv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCYgd2F0Y2hwb2ludCkgeworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2spOworICAgICAgICAgICAgICAgIHdhdGNocG9pbnQuaW5pdGlhbGl6ZShjb2RlQmxvY2sp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0LT5hZGQoJndhdGNocG9pbnQpOworICAg
ICAgICB9KTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFQgc2V0
KQogICAgIHsKQEAgLTYzLDcgKzY0LDcgQEAgc3RydWN0IFNldFBvaW50ZXJBZGFwdG9yIHsKIH07
CiAKIHN0cnVjdCBTeW1ib2xUYWJsZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2Rl
QmxvY2sqLCBTeW1ib2xUYWJsZSosIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQo
Q29kZUJsb2NrKiwgU3ltYm9sVGFibGUqLCBXYXRjaHBvaW50Q29sbGVjdG9yJik7CiAgICAgc3Rh
dGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZS0+c2luZ2xldG9uKCkuaGFzQmVlbkludmFs
aWRhdGVkKCk7CkBAIC03NSw3ICs3Niw3IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUFkYXB0b3Igewog
fTsKIAogc3RydWN0IEZ1bmN0aW9uRXhlY3V0YWJsZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lk
IGFkZChDb2RlQmxvY2sqLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBDb21tb25EYXRhJik7CisgICAg
c3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEZ1bmN0aW9uRXhlY3V0YWJsZSosIFdhdGNocG9p
bnRDb2xsZWN0b3ImKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoRnVuY3Rp
b25FeGVjdXRhYmxlKiBleGVjdXRhYmxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGV4ZWN1dGFi
bGUtPnNpbmdsZXRvbigpLmhhc0JlZW5JbnZhbGlkYXRlZCgpOwpAQCAtODcsNyArODgsNyBAQCBz
dHJ1Y3QgRnVuY3Rpb25FeGVjdXRhYmxlQWRhcHRvciB7CiB9OwogCiBzdHJ1Y3QgQXJyYXlCdWZm
ZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sq
LCBKU0FycmF5QnVmZmVyVmlldyosIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQo
Q29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZlclZpZXcqLCBXYXRjaHBvaW50Q29sbGVjdG9yJik7CiAg
ICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3
KQogICAgIHsKICAgICAgICAgcmV0dXJuICF2aWV3LT5sZW5ndGgoKTsKQEAgLTk5LDcgKzEwMCw3
IEBAIHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvciB7CiB9OwogCiBzdHJ1
Y3QgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQg
YWRkKENvZGVCbG9jayosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgQ29tbW9uRGF0
YSYpOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYsIFdhdGNocG9pbnRDb2xsZWN0b3ImKTsKICAgICBzdGF0aWMgYm9vbCBoYXNC
ZWVuSW52YWxpZGF0ZWQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKICAgICB7
CiAgICAgICAgIHJldHVybiAha2V5LmlzV2F0Y2hhYmxlKCk7CkBAIC0xMjcsMTQgKzEyOCwxNiBA
QCBjbGFzcyBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzIHsKICAgICAgICAgbV9zZXRzLmFkZChz
ZXQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29tbW9uRGF0YSYgY29tbW9uKQorICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayogY29k
ZUJsb2NrLCBXYXRjaHBvaW50Q29sbGVjdG9yJiBjb2xsZWN0b3IpCiAgICAgewotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7CisgICAgICAgIGlmIChjb2xsZWN0b3IubW9k
ZSgpID09IFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlOjpBZGQpCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9yZWFsbHlBZGRlZCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGF1dG8m
IHNldCA6IG1fc2V0cykKLSAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwg
Y29tbW9uKTsKKyAgICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssIHNldCwgY29sbGVj
dG9yKTsKICAgICAgICAgCi0gICAgICAgIG1fcmVhbGx5QWRkZWQgPSB0cnVlOworICAgICAgICBp
ZiAoY29sbGVjdG9yLm1vZGUoKSA9PSBXYXRjaHBvaW50UmVnaXN0cmF0aW9uTW9kZTo6QWRkKQor
ICAgICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAgfQogICAgIAogICAgIGJvb2wg
YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC0xODMsNyArMTg2LDcgQEAgY2xhc3MgRGVzaXJlZFdh
dGNocG9pbnRzIHsKICAgICAKICAgICBib29sIGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIAot
ICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENvbW1vbkRhdGEmKTsKKyAgICB2b2lkIHJl
YWxseUFkZChDb2RlQmxvY2sqLCBXYXRjaHBvaW50Q29sbGVjdG9yJik7CiAgICAgCiAgICAgYm9v
bCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAppbmRleCBjNTcyYTU4ZmNhYmM0ZWFmZjE0M2QxYjRmOGQ0MWIyMDVjMmFlZTY5Li42
NjFjMGQwOTNjMmMyZjQ5NWI4NzIwNDA2ZDM4NDNiNmU2OTk1OGI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAKQEAgLTU3MSwxMSArNTcxLDE4IEBAIGJvb2wgUGxhbjo6aXNT
dGlsbFZhbGlkKCkKIHZvaWQgUGxhbjo6cmVhbGx5QWRkKENvbW1vbkRhdGEqIGNvbW1vbkRhdGEp
CiB7CiAgICAgQVNTRVJUKG1fdm0tPmhlYXAuaXNEZWZlcnJlZCgpKTsKLSAgICBtX3dhdGNocG9p
bnRzLnJlYWxseUFkZChtX2NvZGVCbG9jaywgKmNvbW1vbkRhdGEpOwogICAgIG1faWRlbnRpZmll
cnMucmVhbGx5QWRkKCptX3ZtLCBjb21tb25EYXRhKTsKICAgICBtX3dlYWtSZWZlcmVuY2VzLnJl
YWxseUFkZCgqbV92bSwgY29tbW9uRGF0YSk7CiAgICAgbV90cmFuc2l0aW9ucy5yZWFsbHlBZGQo
Km1fdm0sIGNvbW1vbkRhdGEpOwotICAgIG1fZ2xvYmFsUHJvcGVydGllcy5yZWFsbHlBZGQobV9j
b2RlQmxvY2ssIG1faWRlbnRpZmllcnMsICpjb21tb25EYXRhKTsKKworICAgIFdhdGNocG9pbnRD
b2xsZWN0b3IgY29sbGVjdG9yOworICAgIG1fd2F0Y2hwb2ludHMucmVhbGx5QWRkKG1fY29kZUJs
b2NrLCBjb2xsZWN0b3IpOworICAgIG1fZ2xvYmFsUHJvcGVydGllcy5yZWFsbHlBZGQobV9jb2Rl
QmxvY2ssIG1faWRlbnRpZmllcnMsIGNvbGxlY3Rvcik7CisgICAgY29sbGVjdG9yLm1hdGVyaWFs
aXplKCk7CisKKyAgICBtX3dhdGNocG9pbnRzLnJlYWxseUFkZChtX2NvZGVCbG9jaywgY29sbGVj
dG9yKTsKKyAgICBtX2dsb2JhbFByb3BlcnRpZXMucmVhbGx5QWRkKG1fY29kZUJsb2NrLCBtX2lk
ZW50aWZpZXJzLCBjb2xsZWN0b3IpOworICAgIGNvbGxlY3Rvci5maW5hbGl6ZShtX2NvZGVCbG9j
aywgKmNvbW1vbkRhdGEpOwogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihtX2NvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgY29tbW9uRGF0YS0+cmVjb3JkZWRTdGF0
dXNlcyA9IFdURk1vdmUobV9yZWNvcmRlZFN0YXR1c2VzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426325</attachid>
            <date>2021-04-17 01:29:06 -0700</date>
            <delta_ts>2021-04-17 01:47:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224715-20210417012906.patch</filename>
            <type>text/plain</type>
            <size>33900</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
OTI2ZGQwYWYyZTAxNTE5ZDc1MDY5MDYyYWNkMzQ4NTdmMTBkMmY0Li42ZWFmNWRmZmVmOTc3OWJl
YTk0MmFhNDc0Yjk1MDUwZTBhNmE5OTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAyMS0wNC0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIERvIG5vdCB1c2UgQmFnPD4gZm9yIERGRyAvIEZUTCB3YXRjaHBv
aW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0
NzE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBi
eXRlY29kZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFz
ZTo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSk6CisgICAgICAg
IChKU0M6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2U6OmluaXRp
YWxpemUpOgorICAgICAgICAqIGJ5dGVjb2RlL0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuaDoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuaDoKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmg6CisgICAgICAgICogZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgICogZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb25EYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjp2YWxp
ZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmNsZWFyV2F0
Y2hwb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdE
ZXNpcmVkR2xvYmFsUHJvcGVydGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEds
b2JhbFByb3BlcnRpZXM6OnJlYWxseUFkZCk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRHbG9i
YWxQcm9wZXJ0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3ltYm9sVGFibGVBZGFwdG9yOjphZGQpOgorICAgICAg
ICAoSlNDOjpERkc6OkZ1bmN0aW9uRXhlY3V0YWJsZUFkYXB0b3I6OmFkZCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseSk6CisgICAgICAgIChK
U0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZE9uTWFpblRocmVhZCk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OlNl
dFBvaW50ZXJBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6d2F0Y2hHbG9iYWxQcm9wZXJ0eSk6CisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6aXNTdGls
bFZhbGlkT25NYWluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjYW5jZWwpOgor
ICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6dHJhbnNp
dGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Omdsb2JhbFByb3BlcnRpZXMpOiBEZWxl
dGVkLgorCiAyMDIxLTA0LTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNb3JlIGNoYW5nZXMgdG8gc3VwcG9ydCB0aGUgVGVybWluYXRpb25FeGNlcHRpb24uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAK
aW5kZXggYjI2ZmJmNmFjYzg2M2EyYWRmZTUyMDFiYjYyZWRlYjIyMDdiYmQzOS4uNjI5ZmEwYzFm
ZGZhYTk0ODgzMDUxZjhkNjA5YzEwZDMxMDExOTk3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcApAQCAtMzYsNiArMzYsMTggQEAg
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZTo6QWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHAKICAgICBSRUxFQVNFX0FTU0VSVChrZXkua2luZCgpID09
IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSk7CiB9CiAKK0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2U6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UoKQorICAgIDogbV9rZXkoKQoreworfQorCisKK3ZvaWQgQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZTo6aW5pdGlhbGl6ZShjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIG1fa2V5ID0ga2V5OworICAgIFJFTEVB
U0VfQVNTRVJUKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsK
K30KKwogdm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlOjpp
bnN0YWxsKFZNJiB2bSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJsZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5o
CmluZGV4IGZhNDc5OGJhNTY4ZTE0ZWFkMzM2ZTU5NDA2NjQxZTUzYWZjNjRjYTAuLjUyNGM5YTc0
NThlMzQ5NDhiYjQ0NTU0M2Q4YWUwYjI1OWU0OWZmNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaApAQCAtNDAsOSArNDAsMTEgQEAgY2xh
c3MgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSB7CiAKIHB1Ymxp
YzoKICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50QmFzZSgpOwogCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CiAKKyAgICB2b2lkIGluaXRpYWxpemUo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKICAgICB2b2lkIGluc3RhbGwoVk0mKTsK
IAogICAgIHZpcnR1YWwgfkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJh
c2UoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgKaW5kZXggN2UyOGIz
MDljMDc0NjEzNzMwODFkMTFlNjA0NGJlODc2ODdmNDY1OS4uMDg3ZDc0OTY4ZWQ2NTgwYzI5NGI3
OGM1MTVlYWZhOWRiOTM4MmYzMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaApAQCAt
MzgsNiArMzgsMTYgQEAgY2xhc3MgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50IGZpbmFs
IDogcHVibGljIFdhdGNocG9pbnQgewogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
ICAgICB7CiAgICAgfQorCisgICAgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KCkKKyAg
ICAgICAgOiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQobnVsbHB0cikKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsK
KyAgICAgICAgbV9jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgfQogICAgIAogICAgIHZvaWQg
ZmlyZUludGVybmFsKFZNJiwgY29uc3QgRmlyZURldGFpbCYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKaW5kZXggODgxNmFkZjFiYmI1ZjBmY2E4MTBl
N2I3NTdkNjJhOGIwMzczMjFiOS4uZDI0OGFhM2QyMWY4NzIzNjY5MDFjYjk4YmIzNDJlNDFkNmUy
MzQzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcApA
QCAtMzksNiArMzksMTggQEAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQKIHsKIH0KIAorQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQoKQorICAgIDogQmFzZSgpCisgICAgLCBtX2NvZGVCbG9jayhudWxs
cHRyKQoreworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dDo6aW5pdGlhbGl6ZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3sKKyAgICBCYXNlOjppbml0aWFsaXplKGtleSk7CisgICAgbV9jb2Rl
QmxvY2sgPSBjb2RlQmxvY2s7Cit9CisKIHZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50OjpoYW5kbGVGaXJlKFZNJiwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQog
ewogICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgKaW5kZXggMjc3NmQ5MWNhYjVhZTcxYjU1YTc1Yjc1
OWExZDJmMzBjMGZiZDU0ZS4uZjJjYzgzOGZmYzJmOGEyNTg4ZGQyY2M5MjI3M2RmMTI3MmQzZGMw
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCkBAIC0zNSw2
ICszNSw5IEBAIGNsYXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBm
aW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIEJhc2U7CiAgICAgQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiwgQ29kZUJsb2NrKik7CisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50KCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mLCBDb2RlQmxvY2sqKTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzVmFsaWQo
KSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAppbmRleCA4YTJhNzYwZjAyZmQ3
ZTcyODc0ZDkyMDJhN2FmNWY2YjM4OGRmMjRhLi4xMTlmZDc5MTYwZWQyOWQzMzdhN2VhYzQxMjky
YzJkNzgxNmVjNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCkBAIC00Miw2ICs0MiwyMSBA
QCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbgogICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hp
bmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpKTsKIH0KIAorQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoKQorICAgIDogV2F0Y2hw
b2ludChXYXRjaHBvaW50OjpUeXBlOjpBZGFwdGl2ZVN0cnVjdHVyZSkKKyAgICAsIG1fY29kZUJs
b2NrKG51bGxwdHIpCisgICAgLCBtX2tleSgpCit7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50Ojppbml0aWFsaXplKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXksIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIG1fY29kZUJsb2NrID0gY29kZUJsb2Nr
OworICAgIG1fa2V5ID0ga2V5OworICAgIFJFTEVBU0VfQVNTRVJUKGtleS53YXRjaGluZ1JlcXVp
cmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IWtleS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkpOworfQorCiB2b2lk
IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5zdGFsbChWTSYgdm0pCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9rZXkuaXNXYXRjaGFibGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAppbmRl
eCBiMjlmODlmMjU0M2IwYmUxZjhiMTU5NGZkOWU1MWU4YmUxOWU5OGY0Li45YTRhYmRjNWNkNWQz
OWJhZWI3MjhjY2NjM2EzMTk5NzgxYzE3YzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKQEAgLTM3
LDkgKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKIHB1Ymxp
YzoKICAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mLCBDb2RlQmxvY2sqKTsKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQo
KTsKICAgICAKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3Qg
eyByZXR1cm4gbV9rZXk7IH0KLSAgICAKKworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvZGVCbG9jayopOworCiAgICAgdm9pZCBpbnN0YWxsKFZN
Jik7CiAKICAgICB2b2lkIGZpcmVJbnRlcm5hbChWTSYsIGNvbnN0IEZpcmVEZXRhaWwmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCmluZGV4IGIzZWZiZTVi
NTZjNmYxY2Q2ODM2MGY1NzcyYWRiMzYxZTUzMmI1YTIuLjMxZTRkZWU5NjBhNjFkMDJiMDYwYTI0
NTk4MDc5N2JhN2RhMjZjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmNwcApAQCAtMTQ4LDggKzE0OCw4IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVS
ZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCi0gICAgICAgIHdh
dGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7Cisg
ICAgZm9yIChBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQmIHdhdGNocG9pbnQgOiBtX2FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQua2V5KCkudmFsaWRh
dGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAogdm9pZCBDb21tb25EYXRhOjpm
aW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoVmVjdG9yPENhdGNoRW50cnlwb2ludERhdGE+JiYgY2F0
Y2hFbnRyeXBvaW50cykKQEAgLTE2Nyw5ICsxNjcsMTggQEAgdm9pZCBDb21tb25EYXRhOjpmaW5h
bGl6ZUNhdGNoRW50cnlwb2ludHMoVmVjdG9yPENhdGNoRW50cnlwb2ludERhdGE+JiYgY2F0Y2hF
bnQKIAogdm9pZCBDb21tb25EYXRhOjpjbGVhcldhdGNocG9pbnRzKCkKIHsKLSAgICB3YXRjaHBv
aW50cy5jbGVhcigpOwotICAgIGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMuY2xlYXIoKTsK
LSAgICBhZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmNsZWFyKCk7Cisg
ICAgbV93YXRjaHBvaW50cyA9IEZpeGVkVmVjdG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludD4oKTsKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMgPSBGaXhlZFZlY3Rv
cjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+KCk7CisgICAgbV9hZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzID0gRml4ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50PigpOworfQorCisKK3ZvaWQgV2F0Y2hwb2ludENvbGxlY3Rv
cjo6ZmluYWxpemUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNvbW1vbikKK3sK
KyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBj
b21tb24ubV93YXRjaHBvaW50cyA9IFdURk1vdmUobV93YXRjaHBvaW50cyk7CisgICAgY29tbW9u
Lm1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cyA9IFdURk1vdmUobV9hZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRzKTsKKyAgICBjb21tb24ubV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnRzID0gV1RGTW92ZShtX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludHMpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCmluZGV4IDkzNjc3NDRmMzY1ZTNiN2Q3OWMx
OTAxMTAzNDQ3NWU4Mzc1ODY2NzAuLmU5NjZiMzUyNDhmMjczNWRkMmYxYzYwYTc0YmM3YzFjNjA5
NGE1NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCkBAIC0x
MTMsOSArMTEzLDkgQEAgY2xhc3MgQ29tbW9uRGF0YSB7CiAgICAgRml4ZWRWZWN0b3I8V3JpdGVC
YXJyaWVyPEpTQ2VsbD4+IG1fd2Vha1JlZmVyZW5jZXM7CiAgICAgRml4ZWRWZWN0b3I8U3RydWN0
dXJlSUQ+IG1fd2Vha1N0cnVjdHVyZVJlZmVyZW5jZXM7CiAgICAgRml4ZWRWZWN0b3I8Q2F0Y2hF
bnRyeXBvaW50RGF0YT4gbV9jYXRjaEVudHJ5cG9pbnRzOwotICAgIEJhZzxDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOwotICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7Ci0gICAgQmFnPEFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50czsKKyAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQ+IG1fd2F0Y2hwb2ludHM7CisgICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50PiBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAgRml4
ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBtX2FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CiAgICAgUmVjb3JkZWRTdGF0dXNl
cyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IG1fanVtcFJl
cGxhY2VtZW50czsKICAgICAKQEAgLTEzNCw2ICsxMzQsNjYgQEAgY2xhc3MgQ29tbW9uRGF0YSB7
CiAKIENvZGVCbG9jayogY29kZUJsb2NrRm9yVk1UcmFwUEModm9pZCogcGMpOwogCitlbnVtIGNs
YXNzIFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlIDogdWludDhfdCB7IENvbGxlY3QsIEFkZCB9
OworY2xhc3MgV2F0Y2hwb2ludENvbGxlY3RvciBmaW5hbCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoV2F0Y2hwb2ludENvbGxlY3Rvcik7CitwdWJsaWM6CisgICAgV2F0Y2hwb2ludENvbGxl
Y3RvcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgbWF0ZXJpYWxpemUoKQorICAgIHsKKyAgICAg
ICAgbV93YXRjaHBvaW50cyA9IEZpeGVkVmVjdG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludD4obV93YXRjaHBvaW50Q291bnQpOworICAgICAgICBtX2FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludHMgPSBGaXhlZFZlY3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+KG1fYWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Q291bnQpOworICAgICAgICBtX2FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHMgPSBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+KG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50Q291bnQpOworICAgICAgICBtX21vZGUgPSBXYXRjaHBvaW50UmVnaXN0cmF0aW9u
TW9kZTo6QWRkOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBhZGRXYXRjaHBvaW50KGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBpZiAobV9t
b2RlID09IFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlOjpBZGQpCisgICAgICAgICAgICBmdW5j
KG1fd2F0Y2hwb2ludHNbbV93YXRjaHBvaW50SW5kZXgrK10pOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICArK21fd2F0Y2hwb2ludENvdW50OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CisgICAgdm9pZCBhZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3Qg
RnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGlmIChtX21vZGUgPT0gV2F0Y2hwb2ludFJlZ2lz
dHJhdGlvbk1vZGU6OkFkZCkKKyAgICAgICAgICAgIGZ1bmMobV9hZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnRzW21fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50c0luZGV4KytdKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKyttX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludENvdW50
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBhZGRBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoY29uc3QgRnVuYyYgZnVuYykKKyAg
ICB7CisgICAgICAgIGlmIChtX21vZGUgPT0gV2F0Y2hwb2ludFJlZ2lzdHJhdGlvbk1vZGU6OkFk
ZCkKKyAgICAgICAgICAgIGZ1bmMobV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnRzW21fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50c0luZGV4Kytd
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKyttX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludENvdW50OworICAgIH0KKworICAgIHZvaWQgZmluYWxpemUoQ29kZUJs
b2NrKiwgQ29tbW9uRGF0YSYpOworCisgICAgV2F0Y2hwb2ludFJlZ2lzdHJhdGlvbk1vZGUgbW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1f
d2F0Y2hwb2ludENvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fYWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50Q291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9hZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnRDb3VudCB7IDAgfTsKKworICAgIHVuc2lnbmVkIG1fd2F0Y2hw
b2ludEluZGV4IHsgMCB9OworICAgIHVuc2lnbmVkIG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50c0luZGV4IHsgMCB9OworICAgIHVuc2lnbmVkIG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50c0luZGV4IHsgMCB9OworCisgICAgRml4ZWRWZWN0b3I8Q29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOworICAgIEZpeGVkVmVjdG9yPEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRz
OworICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dD4gbV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIFdhdGNo
cG9pbnRSZWdpc3RyYXRpb25Nb2RlIG1fbW9kZSB7IFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2Rl
OjpDb2xsZWN0IH07Cit9OworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkR2xvYmFsUHJvcGVydGllcy5jcHAKaW5kZXggNmYyZTZhMjg0ZWZkOWRlOTFk
NDYzMmQ4ODBjYzQ5ZTI4OTA4MzllMy4uNWQwYmI1OTVkZDlkNGQyMmZhMGM1MWQ2YmY0ZTMyMjA2
N2U4ZWFkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
R2xvYmFsUHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkR2xvYmFsUHJvcGVydGllcy5jcHAKQEAgLTU0LDE4ICs1NCwxOSBAQCBib29sIERlc2ly
ZWRHbG9iYWxQcm9wZXJ0aWVzOjppc1N0aWxsVmFsaWRPbk1haW5UaHJlYWQoVk0mIHZtLCBEZXNp
cmVkSWRlbnRpZmllcgogICAgIHJldHVybiBpc1N0aWxsVmFsaWQ7CiB9CiAKLXZvaWQgRGVzaXJl
ZEdsb2JhbFByb3BlcnRpZXM6OnJlYWxseUFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVzaXJl
ZElkZW50aWZpZXJzJiBpZGVudGlmaWVycywgQ29tbW9uRGF0YSYgY29tbW9uKQordm9pZCBEZXNp
cmVkR2xvYmFsUHJvcGVydGllczo6cmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBEZXNp
cmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzLCBXYXRjaHBvaW50Q29sbGVjdG9yJiBjb2xsZWN0
b3IpCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwcm9wZXJ0eSA6IG1fc2V0KSB7Ci0gICAgICAg
IGF1dG8qIHVpZCA9IGlkZW50aWZpZXJzLmF0KHByb3BlcnR5LmlkZW50aWZpZXJOdW1iZXIoKSk7
Ci0gICAgICAgIGF1dG8mIHdhdGNocG9pbnRTZXQgPSBwcm9wZXJ0eS5nbG9iYWxPYmplY3QoKS0+
ZW5zdXJlUmVmZXJlbmNlZFByb3BlcnR5V2F0Y2hwb2ludFNldCh1aWQpOwotICAgICAgICBBU1NF
UlQod2F0Y2hwb2ludFNldC5pc1N0aWxsVmFsaWQoKSk7Ci0gICAgICAgIENvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IG51bGxwdHI7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICAgICAgd2F0Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKTsK
LSAgICAgICAgfQotICAgICAgICB3YXRjaHBvaW50U2V0LmFkZChXVEZNb3ZlKHdhdGNocG9pbnQp
KTsKKyAgICAgICAgY29sbGVjdG9yLmFkZFdhdGNocG9pbnQoWyZdKENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludCYgd2F0Y2hwb2ludCkgeworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAg
ICAgICAgICAgIHdhdGNocG9pbnQuaW5pdGlhbGl6ZShjb2RlQmxvY2spOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYXV0byogdWlkID0gaWRlbnRpZmllcnMuYXQocHJvcGVydHkuaWRlbnRp
Zmllck51bWJlcigpKTsKKyAgICAgICAgICAgIGF1dG8mIHdhdGNocG9pbnRTZXQgPSBwcm9wZXJ0
eS5nbG9iYWxPYmplY3QoKS0+ZW5zdXJlUmVmZXJlbmNlZFByb3BlcnR5V2F0Y2hwb2ludFNldCh1
aWQpOworICAgICAgICAgICAgQVNTRVJUKHdhdGNocG9pbnRTZXQuaXNTdGlsbFZhbGlkKCkpOwor
ICAgICAgICAgICAgd2F0Y2hwb2ludFNldC5hZGQoJndhdGNocG9pbnQpOworICAgICAgICB9KTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZEdsb2JhbFByb3BlcnRpZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZEdsb2JhbFByb3BlcnRpZXMuaAppbmRleCA2OWJkMzZkYTliZmJjY2UxNmViNTIxNWVmOTAx
OWY0ZDE3MTQ1ZjdiLi5mYTBkYTllNjI3ODliMmU5MTM1YzhhNTM3MWVkYTlhYjRlNDk0YjFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRHbG9iYWxQcm9w
ZXJ0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkR2xvYmFs
UHJvcGVydGllcy5oCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBD
b21tb25EYXRhOwogY2xhc3MgRGVzaXJlZElkZW50aWZpZXJzOworY2xhc3MgV2F0Y2hwb2ludENv
bGxlY3RvcjsKIAogY2xhc3MgRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMgewogcHVibGljOgpAQCAt
NDksNyArNTAsNyBAQCBjbGFzcyBEZXNpcmVkR2xvYmFsUHJvcGVydGllcyB7CiAKICAgICBib29s
IGlzU3RpbGxWYWxpZE9uTWFpblRocmVhZChWTSYsIERlc2lyZWRJZGVudGlmaWVycyYpOwogCi0g
ICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwgRGVzaXJlZElkZW50aWZpZXJzJiwgQ29tbW9u
RGF0YSYpOworICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIERlc2lyZWRJZGVudGlmaWVy
cyYsIFdhdGNocG9pbnRDb2xsZWN0b3ImKTsKIAogcHJpdmF0ZToKICAgICBIYXNoU2V0PERlc2ly
ZWRHbG9iYWxQcm9wZXJ0eT4gbV9zZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKaW5kZXggNjM3NmQ1N2VhODdlMDRlYTUyMTIy
N2RkM2E4OGVkYjZjYjRkODYxMS4uY2NkYmY2MGVjNjRmZDk3Y2ViYTkxNGIwMWFkMzA2MGRhZTY1
MDhjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmNwcApAQCAtMzQsNzEgKzM0LDcyIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAotdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRk
KAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgQ29t
bW9uRGF0YSYgY29tbW9uKQotewotICAgIC8vIHZpZXcgaXMgYWxyZWFkeSBmcm96ZW4uIElmIGl0
IGlzIGRlYWxsb2NhdGVkLCBqZXR0aXNvbmluZyBoYXBwZW5zLgotICAgIENvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IG51bGxwdHI7Ci0gICAgewotICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgd2F0
Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKTsKLSAgICB9Ci0gICAg
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gdmlldy0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsK
LSAgICBpZiAoIWFycmF5QnVmZmVyKSB7Ci0gICAgICAgIHdhdGNocG9pbnQtPmZpcmUoY29kZUJs
b2NrLT52bSgpLCBTdHJpbmdGaXJlRGV0YWlsKCJBcnJheUJ1ZmZlciBjb3VsZCBub3QgYmUgYWxs
b2NhdGVkLCBwcm9iYWJseSBiZWNhdXNlIG9mIE9PTS4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Cit2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBXYXRjaHBvaW50Q29sbGVjdG9y
JiBjb2xsZWN0b3IpCit7CisgICAgY29sbGVjdG9yLmFkZFdhdGNocG9pbnQoWyZdKENvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludCYgd2F0Y2hwb2ludCkgeworICAgICAgICAvLyB2aWV3IGlz
IGFscmVhZHkgZnJvemVuLiBJZiBpdCBpcyBkZWFsbG9jYXRlZCwgamV0dGlzb25pbmcgaGFwcGVu
cy4KKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICB3YXRjaHBvaW50LmluaXRpYWxpemUoY29kZUJs
b2NrKTsKKyAgICAgICAgfQorICAgICAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB2aWV3
LT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOworICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSB7Cisg
ICAgICAgICAgICB3YXRjaHBvaW50LmZpcmUoY29kZUJsb2NrLT52bSgpLCBTdHJpbmdGaXJlRGV0
YWlsKCJBcnJheUJ1ZmZlciBjb3VsZCBub3QgYmUgYWxsb2NhdGVkLCBwcm9iYWJseSBiZWNhdXNl
IG9mIE9PTS4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIC8vIEZJ
WE1FOiBXZSBkb24ndCBuZWVkIHRvIHNldCB0aGlzIHdhdGNocG9pbnQgYXQgYWxsIGZvciBzaGFy
ZWQgYnVmZmVycy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0MTA4Ci0gICAgYXJyYXlCdWZmZXItPmRldGFjaGluZ1dhdGNocG9pbnRTZXQoKS5hZGQo
V1RGTW92ZSh3YXRjaHBvaW50KSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBuZWVkIHRv
IHNldCB0aGlzIHdhdGNocG9pbnQgYXQgYWxsIGZvciBzaGFyZWQgYnVmZmVycy4KKyAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEwOAorICAgICAg
ICBhcnJheUJ1ZmZlci0+ZGV0YWNoaW5nV2F0Y2hwb2ludFNldCgpLmFkZCgmd2F0Y2hwb2ludCk7
CisgICAgfSk7CiB9CiAKLXZvaWQgU3ltYm9sVGFibGVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgQ29tbW9uRGF0YSYgY29t
bW9uKQordm9pZCBTeW1ib2xUYWJsZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBXYXRjaHBvaW50Q29sbGVjdG9yJiBjb2xsZWN0b3Ip
CiB7Ci0gICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChDb25jdXJyZW50SlNMb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spLCBzeW1ib2xUYWJsZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNu
J3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0
IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KLSAgICBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQqIHdhdGNocG9pbnQgPSBudWxscHRyOwotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIHdhdGNocG9pbnQgPSBj
b21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7Ci0gICAgfQotICAgIHN5bWJvbFRhYmxl
LT5zaW5nbGV0b24oKS5hZGQoV1RGTW92ZSh3YXRjaHBvaW50KSk7CisgICAgY29sbGVjdG9yLmFk
ZFdhdGNocG9pbnQoWyZdKENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCYgd2F0Y2hwb2lu
dCkgeworICAgICAgICB7CisgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnQuaW5pdGlhbGl6ZShjb2Rl
QmxvY2spOworICAgICAgICB9CisgICAgICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQoQ29uY3Vy
cmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSwgc3ltYm9sVGFibGUpOyAvLyBGb3IgY29t
bW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4g
SWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCisgICAgICAgIHN5
bWJvbFRhYmxlLT5zaW5nbGV0b24oKS5hZGQoJndhdGNocG9pbnQpOworICAgIH0pOwogfQogCi12
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZUFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBDb21tb25EYXRhJiBjb21tb24p
Cit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBXYXRjaHBvaW50Q29sbGVjdG9yJiBj
b2xsZWN0b3IpCiB7Ci0gICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChDb25jdXJyZW50SlNMb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spLCBleGVjdXRhYmxlKTsgLy8gRm9yIGNvbW1vbiB1c2Vycywg
aXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2VhayBvciBub3QuIElmIHJlZmVyZW5j
ZXMgdG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgotICAgIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IG51bGxwdHI7Ci0gICAgewotICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgd2F0Y2hw
b2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKTsKLSAgICB9Ci0gICAgZXhl
Y3V0YWJsZS0+c2luZ2xldG9uKCkuYWRkKFdURk1vdmUod2F0Y2hwb2ludCkpOworICAgIGNvbGxl
Y3Rvci5hZGRXYXRjaHBvaW50KFsmXShDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQmIHdh
dGNocG9pbnQpIHsKKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICB3YXRjaHBvaW50LmluaXRpYWxp
emUoY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50
KENvbmN1cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1fbG9jayksIGV4ZWN1dGFibGUpOyAvLyBG
b3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9y
IG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCisgICAg
ICAgIGV4ZWN1dGFibGUtPnNpbmdsZXRvbigpLmFkZCgmd2F0Y2hwb2ludCk7CisgICAgfSk7CiB9
CiAKLXZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBD
b21tb25EYXRhJiBjb21tb24pCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0
b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSwgV2F0Y2hwb2ludENvbGxlY3RvciYgY29sbGVjdG9yKQogewogICAgIFZNJiB2bSA9
IGNvZGVCbG9jay0+dm0oKTsKICAgICBzd2l0Y2ggKGtleS5raW5kKCkpIHsKICAgICBjYXNlIFBy
b3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZTogewotICAgICAgICBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBudWxscHRyOwotICAgICAgICB7
Ci0gICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgICAgIHdhdGNocG9pbnQgPSBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spOwotICAgICAgICB9Ci0gICAg
ICAgIHdhdGNocG9pbnQtPmluc3RhbGwodm0pOworICAgICAgICBjb2xsZWN0b3IuYWRkQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KFsmXShBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQmIHdhdGNocG9pbnQpIHsKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgICAgICAgICB3YXRjaHBvaW50LmluaXRpYWxpemUoa2V5LCBjb2RlQmxvY2spOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgd2F0Y2hwb2ludC5pbnN0YWxsKHZtKTsKKyAgICAg
ICAgfSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IG51bGxwdHI7Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgd2F0Y2hwb2ludCA9IGNvbW1vbi5hZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgd2F0Y2hw
b2ludC0+aW5zdGFsbCh2bSk7CisgICAgICAgIGNvbGxlY3Rvci5hZGRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQoWyZdKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCYgd2F0Y2hwb2ludCkg
eworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIHdhdGNocG9pbnQuaW5pdGlh
bGl6ZShrZXksIGNvZGVCbG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3YXRjaHBv
aW50Lmluc3RhbGwodm0pOworICAgICAgICB9KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IH0KQEAgLTEzNyw2ICsxMzgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemls
eShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogICAgIG1fYWRhcHRpdmVTdHJ1
Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6
YWRkTGF6aWx5KERlc2lyZWRHbG9iYWxQcm9wZXJ0eSYmIHByb3BlcnR5KQoreworICAgIG1fZ2xv
YmFsUHJvcGVydGllcy5hZGRMYXppbHkoV1RGTW92ZShwcm9wZXJ0eSkpOworfQorCiBib29sIERl
c2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAg
aWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0xNDUsMTQgKzE1MSwyNCBAQCBi
b29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNvbW1vbkRhdGEpCit2b2lkIERlc2ly
ZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBEZXNpcmVkSWRl
bnRpZmllcnMmIGlkZW50aWZpZXJzLCBDb21tb25EYXRhKiBjb21tb25EYXRhKQogewotICAgIG1f
c2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKLSAgICBtX2lubGluZVNldHMu
cmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7Ci0gICAgbV9zeW1ib2xUYWJsZXMucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7Ci0gICAgbV9mdW5jdGlvbkV4ZWN1dGFibGVz
LnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwotICAgIG1fYnVmZmVyVmlld3MucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7Ci0gICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgV2F0Y2hwb2ludENvbGxl
Y3RvciBjb2xsZWN0b3I7CisKKyAgICBhdXRvIHJlYWxseUFkZCA9IFsmXSgpIHsKKyAgICAgICAg
bV9zZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbGxlY3Rvcik7CisgICAgICAgIG1faW5saW5l
U2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOworICAgICAgICBtX3N5bWJvbFRh
Ymxlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOworICAgICAgICBtX2Z1bmN0aW9u
RXhlY3V0YWJsZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29sbGVjdG9yKTsKKyAgICAgICAgbV9i
dWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOworICAgICAgICBtX2Fk
YXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOworICAg
ICAgICBtX2dsb2JhbFByb3BlcnRpZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgaWRlbnRpZmllcnMs
IGNvbGxlY3Rvcik7CisgICAgfTsKKyAgICByZWFsbHlBZGQoKTsKKyAgICBjb2xsZWN0b3IubWF0
ZXJpYWxpemUoKTsKKworICAgIHJlYWxseUFkZCgpOworICAgIGNvbGxlY3Rvci5maW5hbGl6ZShj
b2RlQmxvY2ssICpjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFy
ZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtMTY1LDYgKzE4MSwxMSBAQCBib29sIERlc2lyZWRXYXRj
aHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CiAgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1
Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAorYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmFyZVN0aWxsVmFsaWRPbk1haW5UaHJlYWQoVk0mIHZtLCBEZXNpcmVkSWRlbnRpZmllcnMmIGlk
ZW50aWZpZXJzKQoreworICAgIHJldHVybiBtX2dsb2JhbFByb3BlcnRpZXMuaXNTdGlsbFZhbGlk
T25NYWluVGhyZWFkKHZtLCBpZGVudGlmaWVycyk7Cit9CisKIHZvaWQgRGVzaXJlZFdhdGNocG9p
bnRzOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAogewogICAgIFByZWZpeCBub1ByZWZpeChQcmVmaXg6Ok5vSGVhZGVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCmluZGV4
IDVmYmFlYmM1ZjU5NjkxZDM5YTc2MzgwMmFhZTZmZGExZTc3NzAyMTkuLmQ0Y2NmNGQzYTI4OWU2
NzAwMGIyNWUyZjUxMWY1ZWEwMDNkYzg5NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVO
QUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgorI2luY2x1ZGUgIkRG
R0Rlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxl
LmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5oIgpAQCAtNDMsMTQgKzQ0LDE1IEBAIHN0cnVjdCBQcmVmaXg7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgU2V0UG9pbnRlckFkYXB0b3IgewotICAgIHN0YXRp
YyB2b2lkIGFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgVCBzZXQsIENvbW1vbkRhdGEmIGNvbW1v
bikKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBXYXRj
aHBvaW50Q29sbGVjdG9yJiBjb2xsZWN0b3IpCiAgICAgewotICAgICAgICBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBudWxscHRyOwotICAgICAgICB7Ci0gICAg
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgICAgIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNldC0+YWRkKFdURk1vdmUod2F0Y2hwb2ludCkp
OworICAgICAgICBjb2xsZWN0b3IuYWRkV2F0Y2hwb2ludChbJl0oQ29kZUJsb2NrSmV0dGlzb25p
bmdXYXRjaHBvaW50JiB3YXRjaHBvaW50KSB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
ICAgICAgICAgd2F0Y2hwb2ludC5pbml0aWFsaXplKGNvZGVCbG9jayk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBzZXQtPmFkZCgmd2F0Y2hwb2ludCk7CisgICAgICAgIH0pOwogICAgIH0K
ICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQpCiAgICAgewpAQCAtNjMs
NyArNjUsNyBAQCBzdHJ1Y3QgU2V0UG9pbnRlckFkYXB0b3IgewogfTsKIAogc3RydWN0IFN5bWJv
bFRhYmxlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIFN5bWJvbFRh
YmxlKiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBTeW1i
b2xUYWJsZSosIFdhdGNocG9pbnRDb2xsZWN0b3ImKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVu
SW52YWxpZGF0ZWQoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHN5bWJvbFRhYmxlLT5zaW5nbGV0b24oKS5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKQEAgLTc1
LDcgKzc3LDcgQEAgc3RydWN0IFN5bWJvbFRhYmxlQWRhcHRvciB7CiB9OwogCiBzdHJ1Y3QgRnVu
Y3Rpb25FeGVjdXRhYmxlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayos
IEZ1bmN0aW9uRXhlY3V0YWJsZSosIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQo
Q29kZUJsb2NrKiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgV2F0Y2hwb2ludENvbGxlY3RvciYpOwog
ICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUpCiAgICAgewogICAgICAgICByZXR1cm4gZXhlY3V0YWJsZS0+c2luZ2xldG9uKCku
aGFzQmVlbkludmFsaWRhdGVkKCk7CkBAIC04Nyw3ICs4OSw3IEBAIHN0cnVjdCBGdW5jdGlvbkV4
ZWN1dGFibGVBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50
QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJW
aWV3KiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0Fy
cmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnRDb2xsZWN0b3ImKTsKICAgICBzdGF0aWMgYm9vbCBo
YXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAgewogICAgICAg
ICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOwpAQCAtOTksNyArMTAxLDcgQEAgc3RydWN0IEFycmF5
QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3RhdGlj
IHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgV2F0
Y2hwb2ludENvbGxlY3RvciYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogICAgIHsKICAgICAgICAgcmV0dXJu
ICFrZXkuaXNXYXRjaGFibGUoKTsKQEAgLTEyNywxNCArMTI5LDE2IEBAIGNsYXNzIEdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHMgewogICAgICAgICBtX3NldHMuYWRkKHNldCk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBDb21tb25EYXRhJiBj
b21tb24pCisgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFdhdGNocG9p
bnRDb2xsZWN0b3ImIGNvbGxlY3RvcikKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3JlYWxseUFkZGVkKTsKKyAgICAgICAgaWYgKGNvbGxlY3Rvci5tb2RlKCkgPT0gV2F0Y2hwb2lu
dFJlZ2lzdHJhdGlvbk1vZGU6OkFkZCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Jl
YWxseUFkZGVkKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQot
ICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24pOworICAgICAg
ICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb2xsZWN0b3IpOwogICAgICAgICAK
LSAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CisgICAgICAgIGlmIChjb2xsZWN0b3IubW9k
ZSgpID09IFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlOjpBZGQpCisgICAgICAgICAgICBtX3Jl
YWxseUFkZGVkID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkg
Y29uc3QKQEAgLTE4MCwxMiArMTg0LDE1IEBAIGNsYXNzIERlc2lyZWRXYXRjaHBvaW50cyB7CiAg
ICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHku
IFVzZSBHcmFwaDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2ggZG9lcwogICAgIC8vIHRoZSByZXF1
aXJlZCBHQyBtYWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgYm9va2tlZXBpbmcuCiAgICAgdm9p
ZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKworICAgIHZvaWQg
YWRkTGF6aWx5KERlc2lyZWRHbG9iYWxQcm9wZXJ0eSYmKTsKICAgICAKICAgICBib29sIGNvbnNp
ZGVyKFN0cnVjdHVyZSopOwogICAgIAotICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENv
bW1vbkRhdGEmKTsKKyAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBEZXNpcmVkSWRlbnRp
ZmllcnMmLCBDb21tb25EYXRhKik7CiAgICAgCiAgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkgY29u
c3Q7CisgICAgYm9vbCBhcmVTdGlsbFZhbGlkT25NYWluVGhyZWFkKFZNJiwgRGVzaXJlZElkZW50
aWZpZXJzJik7CiAgICAgCiAgICAgYm9vbCBpc1dhdGNoZWQoV2F0Y2hwb2ludFNldCogc2V0KQog
ICAgIHsKQEAgLTIyMCw2ICsyMjcsNyBAQCBjbGFzcyBEZXNpcmVkV2F0Y2hwb2ludHMgewogICAg
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8RnVuY3Rpb25FeGVjdXRhYmxlKiwgRnVuY3Rpb25F
eGVjdXRhYmxlQWRhcHRvcj4gbV9mdW5jdGlvbkV4ZWN1dGFibGVzOwogICAgIEdlbmVyaWNEZXNp
cmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBv
aW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
PE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFw
dG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKKyAgICBEZXNpcmVkR2xvYmFsUHJvcGVydGll
cyBtX2dsb2JhbFByb3BlcnRpZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IDM2ODA2Zjk3ZGRlZjgxMzQx
NWVhMzZiNTdiMDM2MzgyYWM3ZmRjMDIuLjI1YWI5YzMzOTUxZjhlYjk5YjUwZDFjN2UwYTE0NGM4
NzgyZDZmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0xMTA0
LDcgKzExMDQsNyBAQCBib29sIEdyYXBoOjp3YXRjaEdsb2JhbFByb3BlcnR5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGlkZW50aWZpZQogICAgICAgICBpZiAoIXdhdGNo
cG9pbnQtPmlzU3RpbGxWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LSAgICBnbG9iYWxQcm9wZXJ0aWVzKCkuYWRkTGF6aWx5KERlc2lyZWRHbG9iYWxQcm9wZXJ0eShn
bG9iYWxPYmplY3QsIGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICB3YXRjaHBvaW50cygpLmFkZExh
emlseShEZXNpcmVkR2xvYmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyTnVtYmVy
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAppbmRleCA0Y2YzNmNmMjYxZGNjOTk0NWU3M2Q0MjJlYmU1OTljOGFiZjUyOTk3Li4xYTdiZGQy
OTAzMmMwOTZhMGQwYzdkMDY0OTU1ZjZiZGU2NWRlNjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCkBAIC04MzUsNyArODM1LDYgQEAgY2xhc3MgR3JhcGggZmluYWwgOiBwdWJs
aWMgdmlydHVhbCBTY2FubmFibGUgewogCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlm
aWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVycygpOyB9CiAgICAgRGVzaXJlZFdhdGNo
cG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50cygpOyB9Ci0g
ICAgRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMmIGdsb2JhbFByb3BlcnRpZXMoKSB7IHJldHVybiBt
X3BsYW4uZ2xvYmFsUHJvcGVydGllcygpOyB9CiAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRo
ZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlzIGEgUHJl
c2VuY2UgY29uZGl0aW9uLAogICAgIC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0byBxdWVy
eSBpZiB0aGUgY29uZGl0aW9uIGhvbGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgR0Mga25v
d3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCmluZGV4IGM1NzJhNThmY2FiYzRl
YWZmMTQzZDFiNGY4ZDQxYjIwNWMyYWVlNjkuLjM4NmY1ZmI4ZmQ0ODI3NmFlNjU5ZGI2YThjMmM2
ZDI2NDAwMTY3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcApAQCAtNTcx
LDExICs1NzEsMTAgQEAgYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQogdm9pZCBQbGFuOjpyZWFs
bHlBZGQoQ29tbW9uRGF0YSogY29tbW9uRGF0YSkKIHsKICAgICBBU1NFUlQobV92bS0+aGVhcC5p
c0RlZmVycmVkKCkpOwotICAgIG1fd2F0Y2hwb2ludHMucmVhbGx5QWRkKG1fY29kZUJsb2NrLCAq
Y29tbW9uRGF0YSk7CiAgICAgbV9pZGVudGlmaWVycy5yZWFsbHlBZGQoKm1fdm0sIGNvbW1vbkRh
dGEpOwogICAgIG1fd2Vha1JlZmVyZW5jZXMucmVhbGx5QWRkKCptX3ZtLCBjb21tb25EYXRhKTsK
ICAgICBtX3RyYW5zaXRpb25zLnJlYWxseUFkZCgqbV92bSwgY29tbW9uRGF0YSk7Ci0gICAgbV9n
bG9iYWxQcm9wZXJ0aWVzLnJlYWxseUFkZChtX2NvZGVCbG9jaywgbV9pZGVudGlmaWVycywgKmNv
bW1vbkRhdGEpOworICAgIG1fd2F0Y2hwb2ludHMucmVhbGx5QWRkKG1fY29kZUJsb2NrLCBtX2lk
ZW50aWZpZXJzLCBjb21tb25EYXRhKTsKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIGNvbW1vbkRhdGEtPnJlY29y
ZGVkU3RhdHVzZXMgPSBXVEZNb3ZlKG1fcmVjb3JkZWRTdGF0dXNlcyk7CkBAIC01OTUsNyArNTk0
LDcgQEAgdm9pZCBQbGFuOjpub3RpZnlSZWFkeSgpCiAKIGJvb2wgUGxhbjo6aXNTdGlsbFZhbGlk
T25NYWluVGhyZWFkKCkKIHsKLSAgICByZXR1cm4gbV9nbG9iYWxQcm9wZXJ0aWVzLmlzU3RpbGxW
YWxpZE9uTWFpblRocmVhZCgqbV92bSwgbV9pZGVudGlmaWVycyk7CisgICAgcmV0dXJuIG1fd2F0
Y2hwb2ludHMuYXJlU3RpbGxWYWxpZE9uTWFpblRocmVhZCgqbV92bSwgbV9pZGVudGlmaWVycyk7
CiB9CiAKIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0Nh
bGxiYWNrKCkKQEAgLTc1Nyw3ICs3NTYsNiBAQCB2b2lkIFBsYW46OmNhbmNlbCgpCiAgICAgbV9p
bmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKICAgICBtX3dhdGNocG9pbnRzID0gRGVzaXJlZFdh
dGNocG9pbnRzKCk7CiAgICAgbV9pZGVudGlmaWVycyA9IERlc2lyZWRJZGVudGlmaWVycygpOwot
ICAgIG1fZ2xvYmFsUHJvcGVydGllcyA9IERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzKCk7CiAgICAg
bV93ZWFrUmVmZXJlbmNlcyA9IERlc2lyZWRXZWFrUmVmZXJlbmNlcygpOwogICAgIG1fdHJhbnNp
dGlvbnMgPSBEZXNpcmVkVHJhbnNpdGlvbnMoKTsKICAgICBtX2NhbGxiYWNrID0gbnVsbHB0cjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKaW5kZXggMTMwOGZmNDg4MjMwYmU2Mjk3Zjgx
MTFlZjI2MDA0YzJhYmQ0YTRhYy4uMTcyYTcyZDljYjdiNTM3MTIzMDAyMjY0ZDM1MjA2NWM0NzUz
OGJmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKQEAgLTEwMCw3ICsxMDAsNiBA
QCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBE
ZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9pZGVudGlmaWVyczsg
fQogICAgIERlc2lyZWRXZWFrUmVmZXJlbmNlcyYgd2Vha1JlZmVyZW5jZXMoKSB7IHJldHVybiBt
X3dlYWtSZWZlcmVuY2VzOyB9CiAgICAgRGVzaXJlZFRyYW5zaXRpb25zJiB0cmFuc2l0aW9ucygp
IHsgcmV0dXJuIG1fdHJhbnNpdGlvbnM7IH0KLSAgICBEZXNpcmVkR2xvYmFsUHJvcGVydGllcyYg
Z2xvYmFsUHJvcGVydGllcygpIHsgcmV0dXJuIG1fZ2xvYmFsUHJvcGVydGllczsgfQogICAgIFJl
Y29yZGVkU3RhdHVzZXMmIHJlY29yZGVkU3RhdHVzZXMoKSB7IHJldHVybiBtX3JlY29yZGVkU3Rh
dHVzZXM7IH0KIAogICAgIGJvb2wgd2lsbFRyeVRvVGllclVwKCkgY29uc3QgeyByZXR1cm4gbV93
aWxsVHJ5VG9UaWVyVXA7IH0KQEAgLTE1Niw3ICsxNTUsNiBAQCBjbGFzcyBQbGFuIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBEZXNpcmVkSWRlbnRpZmllcnMgbV9p
ZGVudGlmaWVyczsKICAgICBEZXNpcmVkV2Vha1JlZmVyZW5jZXMgbV93ZWFrUmVmZXJlbmNlczsK
ICAgICBEZXNpcmVkVHJhbnNpdGlvbnMgbV90cmFuc2l0aW9uczsKLSAgICBEZXNpcmVkR2xvYmFs
UHJvcGVydGllcyBtX2dsb2JhbFByb3BlcnRpZXM7CiAgICAgUmVjb3JkZWRTdGF0dXNlcyBtX3Jl
Y29yZGVkU3RhdHVzZXM7CiAKICAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIEZpeGVkVmVjdG9y
PEJ5dGVjb2RlSW5kZXg+PiBtX3RpZXJVcEluTG9vcEhpZXJhcmNoeTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426326</attachid>
            <date>2021-04-17 01:47:30 -0700</date>
            <delta_ts>2021-04-17 01:56:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224715-20210417014730.patch</filename>
            <type>text/plain</type>
            <size>34926</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
OTI2ZGQwYWYyZTAxNTE5ZDc1MDY5MDYyYWNkMzQ4NTdmMTBkMmY0Li43NGU4OTQxYjU5NmYzYTNh
NDdmODJlNGVhNWRmMTE5MDBlODdhNzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NyBAQAorMjAyMS0wNC0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIERvIG5vdCB1c2UgQmFnPD4gZm9yIERGRyAvIEZUTCB3YXRjaHBv
aW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0
NzE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hp
bGUgQmFnPD4gaXMgdXNlZnVsIHNpbmNlIGl0cyBhbGxvY2F0ZWQgbWVtb3J5IHdpbGwgbm90IGJl
IG1vdmVkLAorICAgICAgICB0aGlzIGlzIHJlYWxseSBtZW1vcnktaW5lZmZpY2llbnQgZGF0YSBz
dHJ1Y3R1cmUuIEVhY2ggZW50cnkgZ2V0cyBhCisgICAgICAgIHRhaWwgcG9pbnRlciAoc28gYWRk
aW5nIDggYnl0ZXMpIGFuZCB3ZSBhbGxvY2F0ZSBlYWNoIGVudHJ5IHNlcGFyYXRlbHkuCisKKyAg
ICAgICAgSW4gREZHIGFuZCBGVEwsIHdlIGFyZSB1c2luZyBCYWc8PiBmb3Igd2F0Y2hwb2ludHMu
IEJ1dCB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgYWN0dWFsbHk6IHRoYW5rcyB0bworICAgICAgICBj
b25jdXJyZW50IGNvbXBpbGVycywgb3VyIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIGlzIGJhdGNo
ZWQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbi4gVGhpcyBtZWFucworICAgICAgICB0aGF0IHdl
IGhhdmUgYSB3YXkgdG8ga25vdyBob3cgbWFueSB3YXRjaHBvaW50cyB3ZSBzaG91bGQgcmVnaXN0
ZXIgYXQgdGhhdCBwb2ludC4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBpbnRyb2R1Y2Ug
V2F0Y2hwb2ludENvbGxlY3Rvci4gSW4gRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMsIHdlIHJ1biBy
ZWFsbHlBZGQgdHdpY2UKKyAgICAgICAgd2l0aCBXYXRjaHBvaW50Q29sbGVjdG9yLiBGaXJzdCB0
aW1lLCB3ZSBqdXN0IGNvdW50ICMgb2Ygd2F0Y2hwb2ludHMuIFRoZW4gd2UgYWxsb2NhdGUgRml4
ZWRWZWN0b3I8WFhYV2F0Y2hwb2ludD4KKyAgICAgICAgYW5kIGluc3RhbGwgdGhlbS4gU2luY2Ug
d2UgZG8gbm90IChjYW5ub3QpIGdyb3cgdGhpcyBmaXhlZCB2ZWN0b3IsIHdhdGNocG9pbnQncyBh
ZGRyZXNzIHdpbGwgbm90IGJlIGNoYW5nZWQgYXMgcmVxdWlyZWQuCisKKyAgICAgICAgV2UgYWxz
byBtb3ZlIERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzIHVuZGVyIERlc2lyZWRXYXRjaHBvaW50cyBz
aW5jZSB0aGlzIGJhc2ljYWxseSByZWdpc3RlcnMgd2F0Y2hwb2ludHMuCisKKyAgICAgICAgKiBi
eXRlY29kZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFz
ZTo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSk6CisgICAgICAg
IChKU0M6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2U6OmluaXRp
YWxpemUpOgorICAgICAgICAqIGJ5dGVjb2RlL0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuaDoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuaDoKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmg6CisgICAgICAgICogZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgICogZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb25EYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjp2YWxp
ZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmNsZWFyV2F0
Y2hwb2ludHMpOgorICAgICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0b3I6OmZpbmFs
aXplKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAgICAqIGRmZy9ERkdE
ZXNpcmVkR2xvYmFsUHJvcGVydGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZEds
b2JhbFByb3BlcnRpZXM6OnJlYWxseUFkZCk6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRHbG9i
YWxQcm9wZXJ0aWVzLmg6CisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3ltYm9sVGFibGVBZGFwdG9yOjphZGQpOgorICAgICAg
ICAoSlNDOjpERkc6OkZ1bmN0aW9uRXhlY3V0YWJsZUFkYXB0b3I6OmFkZCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseSk6CisgICAgICAgIChK
U0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZE9uTWFpblRocmVhZCk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OlNl
dFBvaW50ZXJBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6d2F0Y2hHbG9iYWxQcm9wZXJ0eSk6CisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6aXNTdGls
bFZhbGlkT25NYWluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjYW5jZWwpOgor
ICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6dHJhbnNp
dGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Omdsb2JhbFByb3BlcnRpZXMpOiBEZWxl
dGVkLgorCiAyMDIxLTA0LTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNb3JlIGNoYW5nZXMgdG8gc3VwcG9ydCB0aGUgVGVybWluYXRpb25FeGNlcHRpb24uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAK
aW5kZXggYjI2ZmJmNmFjYzg2M2EyYWRmZTUyMDFiYjYyZWRlYjIyMDdiYmQzOS4uNjI5ZmEwYzFm
ZGZhYTk0ODgzMDUxZjhkNjA5YzEwZDMxMDExOTk3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcApAQCAtMzYsNiArMzYsMTggQEAg
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZTo6QWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHAKICAgICBSRUxFQVNFX0FTU0VSVChrZXkua2luZCgpID09
IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSk7CiB9CiAKK0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2U6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UoKQorICAgIDogbV9rZXkoKQoreworfQorCisKK3ZvaWQgQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZTo6aW5pdGlhbGl6ZShjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIG1fa2V5ID0ga2V5OworICAgIFJFTEVB
U0VfQVNTRVJUKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsK
K30KKwogdm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlOjpp
bnN0YWxsKFZNJiB2bSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJsZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5o
CmluZGV4IGZhNDc5OGJhNTY4ZTE0ZWFkMzM2ZTU5NDA2NjQxZTUzYWZjNjRjYTAuLjUyNGM5YTc0
NThlMzQ5NDhiYjQ0NTU0M2Q4YWUwYjI1OWU0OWZmNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaApAQCAtNDAsOSArNDAsMTEgQEAgY2xh
c3MgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSB7CiAKIHB1Ymxp
YzoKICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50QmFzZSgpOwogCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CiAKKyAgICB2b2lkIGluaXRpYWxpemUo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKICAgICB2b2lkIGluc3RhbGwoVk0mKTsK
IAogICAgIHZpcnR1YWwgfkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJh
c2UoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgKaW5kZXggN2UyOGIz
MDljMDc0NjEzNzMwODFkMTFlNjA0NGJlODc2ODdmNDY1OS4uMDg3ZDc0OTY4ZWQ2NTgwYzI5NGI3
OGM1MTVlYWZhOWRiOTM4MmYzMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaApAQCAt
MzgsNiArMzgsMTYgQEAgY2xhc3MgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50IGZpbmFs
IDogcHVibGljIFdhdGNocG9pbnQgewogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
ICAgICB7CiAgICAgfQorCisgICAgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KCkKKyAg
ICAgICAgOiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQobnVsbHB0cikKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsK
KyAgICAgICAgbV9jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgfQogICAgIAogICAgIHZvaWQg
ZmlyZUludGVybmFsKFZNJiwgY29uc3QgRmlyZURldGFpbCYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKaW5kZXggODgxNmFkZjFiYmI1ZjBmY2E4MTBl
N2I3NTdkNjJhOGIwMzczMjFiOS4uZDI0OGFhM2QyMWY4NzIzNjY5MDFjYjk4YmIzNDJlNDFkNmUy
MzQzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcApA
QCAtMzksNiArMzksMTggQEAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQKIHsKIH0KIAorQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQoKQorICAgIDogQmFzZSgpCisgICAgLCBtX2NvZGVCbG9jayhudWxs
cHRyKQoreworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dDo6aW5pdGlhbGl6ZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3sKKyAgICBCYXNlOjppbml0aWFsaXplKGtleSk7CisgICAgbV9jb2Rl
QmxvY2sgPSBjb2RlQmxvY2s7Cit9CisKIHZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50OjpoYW5kbGVGaXJlKFZNJiwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQog
ewogICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgKaW5kZXggMjc3NmQ5MWNhYjVhZTcxYjU1YTc1Yjc1
OWExZDJmMzBjMGZiZDU0ZS4uZjJjYzgzOGZmYzJmOGEyNTg4ZGQyY2M5MjI3M2RmMTI3MmQzZGMw
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCkBAIC0zNSw2
ICszNSw5IEBAIGNsYXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBm
aW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIEJhc2U7CiAgICAgQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiwgQ29kZUJsb2NrKik7CisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50KCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mLCBDb2RlQmxvY2sqKTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzVmFsaWQo
KSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAppbmRleCA4YTJhNzYwZjAyZmQ3
ZTcyODc0ZDkyMDJhN2FmNWY2YjM4OGRmMjRhLi4xMTlmZDc5MTYwZWQyOWQzMzdhN2VhYzQxMjky
YzJkNzgxNmVjNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCkBAIC00Miw2ICs0MiwyMSBA
QCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbgogICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hp
bmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpKTsKIH0KIAorQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoKQorICAgIDogV2F0Y2hw
b2ludChXYXRjaHBvaW50OjpUeXBlOjpBZGFwdGl2ZVN0cnVjdHVyZSkKKyAgICAsIG1fY29kZUJs
b2NrKG51bGxwdHIpCisgICAgLCBtX2tleSgpCit7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50Ojppbml0aWFsaXplKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXksIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIG1fY29kZUJsb2NrID0gY29kZUJsb2Nr
OworICAgIG1fa2V5ID0ga2V5OworICAgIFJFTEVBU0VfQVNTRVJUKGtleS53YXRjaGluZ1JlcXVp
cmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IWtleS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkpOworfQorCiB2b2lk
IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5zdGFsbChWTSYgdm0pCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9rZXkuaXNXYXRjaGFibGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAppbmRl
eCBiMjlmODlmMjU0M2IwYmUxZjhiMTU5NGZkOWU1MWU4YmUxOWU5OGY0Li45YTRhYmRjNWNkNWQz
OWJhZWI3MjhjY2NjM2EzMTk5NzgxYzE3YzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKQEAgLTM3
LDkgKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKIHB1Ymxp
YzoKICAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mLCBDb2RlQmxvY2sqKTsKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQo
KTsKICAgICAKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3Qg
eyByZXR1cm4gbV9rZXk7IH0KLSAgICAKKworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvZGVCbG9jayopOworCiAgICAgdm9pZCBpbnN0YWxsKFZN
Jik7CiAKICAgICB2b2lkIGZpcmVJbnRlcm5hbChWTSYsIGNvbnN0IEZpcmVEZXRhaWwmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCmluZGV4IGIzZWZiZTVi
NTZjNmYxY2Q2ODM2MGY1NzcyYWRiMzYxZTUzMmI1YTIuLjMxZTRkZWU5NjBhNjFkMDJiMDYwYTI0
NTk4MDc5N2JhN2RhMjZjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmNwcApAQCAtMTQ4LDggKzE0OCw4IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVS
ZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCi0gICAgICAgIHdh
dGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7Cisg
ICAgZm9yIChBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQmIHdhdGNocG9pbnQgOiBtX2FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQua2V5KCkudmFsaWRh
dGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAogdm9pZCBDb21tb25EYXRhOjpm
aW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoVmVjdG9yPENhdGNoRW50cnlwb2ludERhdGE+JiYgY2F0
Y2hFbnRyeXBvaW50cykKQEAgLTE2Nyw5ICsxNjcsMTggQEAgdm9pZCBDb21tb25EYXRhOjpmaW5h
bGl6ZUNhdGNoRW50cnlwb2ludHMoVmVjdG9yPENhdGNoRW50cnlwb2ludERhdGE+JiYgY2F0Y2hF
bnQKIAogdm9pZCBDb21tb25EYXRhOjpjbGVhcldhdGNocG9pbnRzKCkKIHsKLSAgICB3YXRjaHBv
aW50cy5jbGVhcigpOwotICAgIGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMuY2xlYXIoKTsK
LSAgICBhZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmNsZWFyKCk7Cisg
ICAgbV93YXRjaHBvaW50cyA9IEZpeGVkVmVjdG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludD4oKTsKKyAgICBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMgPSBGaXhlZFZlY3Rv
cjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+KCk7CisgICAgbV9hZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzID0gRml4ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFBy
b3BlcnR5VmFsdWVXYXRjaHBvaW50PigpOworfQorCisKK3ZvaWQgV2F0Y2hwb2ludENvbGxlY3Rv
cjo6ZmluYWxpemUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNvbW1vbikKK3sK
KyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBj
b21tb24ubV93YXRjaHBvaW50cyA9IFdURk1vdmUobV93YXRjaHBvaW50cyk7CisgICAgY29tbW9u
Lm1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cyA9IFdURk1vdmUobV9hZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRzKTsKKyAgICBjb21tb24ubV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnRzID0gV1RGTW92ZShtX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludHMpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCmluZGV4IDkzNjc3NDRmMzY1ZTNiN2Q3OWMx
OTAxMTAzNDQ3NWU4Mzc1ODY2NzAuLmU5NjZiMzUyNDhmMjczNWRkMmYxYzYwYTc0YmM3YzFjNjA5
NGE1NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCkBAIC0x
MTMsOSArMTEzLDkgQEAgY2xhc3MgQ29tbW9uRGF0YSB7CiAgICAgRml4ZWRWZWN0b3I8V3JpdGVC
YXJyaWVyPEpTQ2VsbD4+IG1fd2Vha1JlZmVyZW5jZXM7CiAgICAgRml4ZWRWZWN0b3I8U3RydWN0
dXJlSUQ+IG1fd2Vha1N0cnVjdHVyZVJlZmVyZW5jZXM7CiAgICAgRml4ZWRWZWN0b3I8Q2F0Y2hF
bnRyeXBvaW50RGF0YT4gbV9jYXRjaEVudHJ5cG9pbnRzOwotICAgIEJhZzxDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQ+IHdhdGNocG9pbnRzOwotICAgIEJhZzxBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQ+IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7Ci0gICAgQmFnPEFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludD4gYWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50czsKKyAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQ+IG1fd2F0Y2hwb2ludHM7CisgICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50PiBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAgRml4
ZWRWZWN0b3I8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBtX2FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CiAgICAgUmVjb3JkZWRTdGF0dXNl
cyByZWNvcmRlZFN0YXR1c2VzOwogICAgIFZlY3RvcjxKdW1wUmVwbGFjZW1lbnQ+IG1fanVtcFJl
cGxhY2VtZW50czsKICAgICAKQEAgLTEzNCw2ICsxMzQsNjYgQEAgY2xhc3MgQ29tbW9uRGF0YSB7
CiAKIENvZGVCbG9jayogY29kZUJsb2NrRm9yVk1UcmFwUEModm9pZCogcGMpOwogCitlbnVtIGNs
YXNzIFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlIDogdWludDhfdCB7IENvbGxlY3QsIEFkZCB9
OworY2xhc3MgV2F0Y2hwb2ludENvbGxlY3RvciBmaW5hbCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoV2F0Y2hwb2ludENvbGxlY3Rvcik7CitwdWJsaWM6CisgICAgV2F0Y2hwb2ludENvbGxl
Y3RvcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgbWF0ZXJpYWxpemUoKQorICAgIHsKKyAgICAg
ICAgbV93YXRjaHBvaW50cyA9IEZpeGVkVmVjdG9yPENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludD4obV93YXRjaHBvaW50Q291bnQpOworICAgICAgICBtX2FkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludHMgPSBGaXhlZFZlY3RvcjxBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+KG1fYWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Q291bnQpOworICAgICAgICBtX2FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHMgPSBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ+KG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVX
YXRjaHBvaW50Q291bnQpOworICAgICAgICBtX21vZGUgPSBXYXRjaHBvaW50UmVnaXN0cmF0aW9u
TW9kZTo6QWRkOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9p
ZCBhZGRXYXRjaHBvaW50KGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBpZiAobV9t
b2RlID09IFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlOjpBZGQpCisgICAgICAgICAgICBmdW5j
KG1fd2F0Y2hwb2ludHNbbV93YXRjaHBvaW50SW5kZXgrK10pOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICArK21fd2F0Y2hwb2ludENvdW50OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CisgICAgdm9pZCBhZGRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3Qg
RnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGlmIChtX21vZGUgPT0gV2F0Y2hwb2ludFJlZ2lz
dHJhdGlvbk1vZGU6OkFkZCkKKyAgICAgICAgICAgIGZ1bmMobV9hZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnRzW21fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50c0luZGV4KytdKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKyttX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludENvdW50
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBhZGRBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoY29uc3QgRnVuYyYgZnVuYykKKyAg
ICB7CisgICAgICAgIGlmIChtX21vZGUgPT0gV2F0Y2hwb2ludFJlZ2lzdHJhdGlvbk1vZGU6OkFk
ZCkKKyAgICAgICAgICAgIGZ1bmMobV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnRzW21fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50c0luZGV4Kytd
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKyttX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludENvdW50OworICAgIH0KKworICAgIHZvaWQgZmluYWxpemUoQ29kZUJs
b2NrKiwgQ29tbW9uRGF0YSYpOworCisgICAgV2F0Y2hwb2ludFJlZ2lzdHJhdGlvbk1vZGUgbW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1f
d2F0Y2hwb2ludENvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fYWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50Q291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9hZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnRDb3VudCB7IDAgfTsKKworICAgIHVuc2lnbmVkIG1fd2F0Y2hw
b2ludEluZGV4IHsgMCB9OworICAgIHVuc2lnbmVkIG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50c0luZGV4IHsgMCB9OworICAgIHVuc2lnbmVkIG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50c0luZGV4IHsgMCB9OworCisgICAgRml4ZWRWZWN0b3I8Q29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50PiBtX3dhdGNocG9pbnRzOworICAgIEZpeGVkVmVjdG9yPEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRz
OworICAgIEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dD4gbV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIFdhdGNo
cG9pbnRSZWdpc3RyYXRpb25Nb2RlIG1fbW9kZSB7IFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2Rl
OjpDb2xsZWN0IH07Cit9OworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEZXNpcmVkR2xvYmFsUHJvcGVydGllcy5jcHAKaW5kZXggNmYyZTZhMjg0ZWZkOWRlOTFk
NDYzMmQ4ODBjYzQ5ZTI4OTA4MzllMy4uNWQwYmI1OTVkZDlkNGQyMmZhMGM1MWQ2YmY0ZTMyMjA2
N2U4ZWFkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
R2xvYmFsUHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkR2xvYmFsUHJvcGVydGllcy5jcHAKQEAgLTU0LDE4ICs1NCwxOSBAQCBib29sIERlc2ly
ZWRHbG9iYWxQcm9wZXJ0aWVzOjppc1N0aWxsVmFsaWRPbk1haW5UaHJlYWQoVk0mIHZtLCBEZXNp
cmVkSWRlbnRpZmllcgogICAgIHJldHVybiBpc1N0aWxsVmFsaWQ7CiB9CiAKLXZvaWQgRGVzaXJl
ZEdsb2JhbFByb3BlcnRpZXM6OnJlYWxseUFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVzaXJl
ZElkZW50aWZpZXJzJiBpZGVudGlmaWVycywgQ29tbW9uRGF0YSYgY29tbW9uKQordm9pZCBEZXNp
cmVkR2xvYmFsUHJvcGVydGllczo6cmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBEZXNp
cmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzLCBXYXRjaHBvaW50Q29sbGVjdG9yJiBjb2xsZWN0
b3IpCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwcm9wZXJ0eSA6IG1fc2V0KSB7Ci0gICAgICAg
IGF1dG8qIHVpZCA9IGlkZW50aWZpZXJzLmF0KHByb3BlcnR5LmlkZW50aWZpZXJOdW1iZXIoKSk7
Ci0gICAgICAgIGF1dG8mIHdhdGNocG9pbnRTZXQgPSBwcm9wZXJ0eS5nbG9iYWxPYmplY3QoKS0+
ZW5zdXJlUmVmZXJlbmNlZFByb3BlcnR5V2F0Y2hwb2ludFNldCh1aWQpOwotICAgICAgICBBU1NF
UlQod2F0Y2hwb2ludFNldC5pc1N0aWxsVmFsaWQoKSk7Ci0gICAgICAgIENvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IG51bGxwdHI7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICAgICAgd2F0Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKTsK
LSAgICAgICAgfQotICAgICAgICB3YXRjaHBvaW50U2V0LmFkZChXVEZNb3ZlKHdhdGNocG9pbnQp
KTsKKyAgICAgICAgY29sbGVjdG9yLmFkZFdhdGNocG9pbnQoWyZdKENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludCYgd2F0Y2hwb2ludCkgeworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAg
ICAgICAgICAgIHdhdGNocG9pbnQuaW5pdGlhbGl6ZShjb2RlQmxvY2spOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYXV0byogdWlkID0gaWRlbnRpZmllcnMuYXQocHJvcGVydHkuaWRlbnRp
Zmllck51bWJlcigpKTsKKyAgICAgICAgICAgIGF1dG8mIHdhdGNocG9pbnRTZXQgPSBwcm9wZXJ0
eS5nbG9iYWxPYmplY3QoKS0+ZW5zdXJlUmVmZXJlbmNlZFByb3BlcnR5V2F0Y2hwb2ludFNldCh1
aWQpOworICAgICAgICAgICAgQVNTRVJUKHdhdGNocG9pbnRTZXQuaXNTdGlsbFZhbGlkKCkpOwor
ICAgICAgICAgICAgd2F0Y2hwb2ludFNldC5hZGQoJndhdGNocG9pbnQpOworICAgICAgICB9KTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZEdsb2JhbFByb3BlcnRpZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZEdsb2JhbFByb3BlcnRpZXMuaAppbmRleCA2OWJkMzZkYTliZmJjY2UxNmViNTIxNWVmOTAx
OWY0ZDE3MTQ1ZjdiLi5mYTBkYTllNjI3ODliMmU5MTM1YzhhNTM3MWVkYTlhYjRlNDk0YjFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRHbG9iYWxQcm9w
ZXJ0aWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkR2xvYmFs
UHJvcGVydGllcy5oCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBD
b21tb25EYXRhOwogY2xhc3MgRGVzaXJlZElkZW50aWZpZXJzOworY2xhc3MgV2F0Y2hwb2ludENv
bGxlY3RvcjsKIAogY2xhc3MgRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMgewogcHVibGljOgpAQCAt
NDksNyArNTAsNyBAQCBjbGFzcyBEZXNpcmVkR2xvYmFsUHJvcGVydGllcyB7CiAKICAgICBib29s
IGlzU3RpbGxWYWxpZE9uTWFpblRocmVhZChWTSYsIERlc2lyZWRJZGVudGlmaWVycyYpOwogCi0g
ICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwgRGVzaXJlZElkZW50aWZpZXJzJiwgQ29tbW9u
RGF0YSYpOworICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIERlc2lyZWRJZGVudGlmaWVy
cyYsIFdhdGNocG9pbnRDb2xsZWN0b3ImKTsKIAogcHJpdmF0ZToKICAgICBIYXNoU2V0PERlc2ly
ZWRHbG9iYWxQcm9wZXJ0eT4gbV9zZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKaW5kZXggNjM3NmQ1N2VhODdlMDRlYTUyMTIy
N2RkM2E4OGVkYjZjYjRkODYxMS4uY2NkYmY2MGVjNjRmZDk3Y2ViYTkxNGIwMWFkMzA2MGRhZTY1
MDhjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmNwcApAQCAtMzQsNzEgKzM0LDcyIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAotdm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YWRk
KAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBKU0FycmF5QnVmZmVyVmlldyogdmlldywgQ29t
bW9uRGF0YSYgY29tbW9uKQotewotICAgIC8vIHZpZXcgaXMgYWxyZWFkeSBmcm96ZW4uIElmIGl0
IGlzIGRlYWxsb2NhdGVkLCBqZXR0aXNvbmluZyBoYXBwZW5zLgotICAgIENvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IG51bGxwdHI7Ci0gICAgewotICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgd2F0
Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKTsKLSAgICB9Ci0gICAg
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gdmlldy0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsK
LSAgICBpZiAoIWFycmF5QnVmZmVyKSB7Ci0gICAgICAgIHdhdGNocG9pbnQtPmZpcmUoY29kZUJs
b2NrLT52bSgpLCBTdHJpbmdGaXJlRGV0YWlsKCJBcnJheUJ1ZmZlciBjb3VsZCBub3QgYmUgYWxs
b2NhdGVkLCBwcm9iYWJseSBiZWNhdXNlIG9mIE9PTS4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Cit2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphZGQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3LCBXYXRjaHBvaW50Q29sbGVjdG9y
JiBjb2xsZWN0b3IpCit7CisgICAgY29sbGVjdG9yLmFkZFdhdGNocG9pbnQoWyZdKENvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludCYgd2F0Y2hwb2ludCkgeworICAgICAgICAvLyB2aWV3IGlz
IGFscmVhZHkgZnJvemVuLiBJZiBpdCBpcyBkZWFsbG9jYXRlZCwgamV0dGlzb25pbmcgaGFwcGVu
cy4KKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICB3YXRjaHBvaW50LmluaXRpYWxpemUoY29kZUJs
b2NrKTsKKyAgICAgICAgfQorICAgICAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB2aWV3
LT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOworICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSB7Cisg
ICAgICAgICAgICB3YXRjaHBvaW50LmZpcmUoY29kZUJsb2NrLT52bSgpLCBTdHJpbmdGaXJlRGV0
YWlsKCJBcnJheUJ1ZmZlciBjb3VsZCBub3QgYmUgYWxsb2NhdGVkLCBwcm9iYWJseSBiZWNhdXNl
IG9mIE9PTS4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIC8vIEZJ
WE1FOiBXZSBkb24ndCBuZWVkIHRvIHNldCB0aGlzIHdhdGNocG9pbnQgYXQgYWxsIGZvciBzaGFy
ZWQgYnVmZmVycy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0MTA4Ci0gICAgYXJyYXlCdWZmZXItPmRldGFjaGluZ1dhdGNocG9pbnRTZXQoKS5hZGQo
V1RGTW92ZSh3YXRjaHBvaW50KSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBuZWVkIHRv
IHNldCB0aGlzIHdhdGNocG9pbnQgYXQgYWxsIGZvciBzaGFyZWQgYnVmZmVycy4KKyAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEwOAorICAgICAg
ICBhcnJheUJ1ZmZlci0+ZGV0YWNoaW5nV2F0Y2hwb2ludFNldCgpLmFkZCgmd2F0Y2hwb2ludCk7
CisgICAgfSk7CiB9CiAKLXZvaWQgU3ltYm9sVGFibGVBZGFwdG9yOjphZGQoCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgQ29tbW9uRGF0YSYgY29t
bW9uKQordm9pZCBTeW1ib2xUYWJsZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBXYXRjaHBvaW50Q29sbGVjdG9yJiBjb2xsZWN0b3Ip
CiB7Ci0gICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChDb25jdXJyZW50SlNMb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spLCBzeW1ib2xUYWJsZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNu
J3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0
IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KLSAgICBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQqIHdhdGNocG9pbnQgPSBudWxscHRyOwotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIHdhdGNocG9pbnQgPSBj
b21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7Ci0gICAgfQotICAgIHN5bWJvbFRhYmxl
LT5zaW5nbGV0b24oKS5hZGQoV1RGTW92ZSh3YXRjaHBvaW50KSk7CisgICAgY29sbGVjdG9yLmFk
ZFdhdGNocG9pbnQoWyZdKENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludCYgd2F0Y2hwb2lu
dCkgeworICAgICAgICB7CisgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnQuaW5pdGlhbGl6ZShjb2Rl
QmxvY2spOworICAgICAgICB9CisgICAgICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQoQ29uY3Vy
cmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSwgc3ltYm9sVGFibGUpOyAvLyBGb3IgY29t
bW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4g
SWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCisgICAgICAgIHN5
bWJvbFRhYmxlLT5zaW5nbGV0b24oKS5hZGQoJndhdGNocG9pbnQpOworICAgIH0pOwogfQogCi12
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZUFkYXB0b3I6OmFkZCgKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBDb21tb25EYXRhJiBjb21tb24p
Cit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZUFkYXB0b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBXYXRjaHBvaW50Q29sbGVjdG9yJiBj
b2xsZWN0b3IpCiB7Ci0gICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChDb25jdXJyZW50SlNMb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spLCBleGVjdXRhYmxlKTsgLy8gRm9yIGNvbW1vbiB1c2Vycywg
aXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2VhayBvciBub3QuIElmIHJlZmVyZW5j
ZXMgdG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgotICAgIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IG51bGxwdHI7Ci0gICAgewotICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgd2F0Y2hw
b2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKTsKLSAgICB9Ci0gICAgZXhl
Y3V0YWJsZS0+c2luZ2xldG9uKCkuYWRkKFdURk1vdmUod2F0Y2hwb2ludCkpOworICAgIGNvbGxl
Y3Rvci5hZGRXYXRjaHBvaW50KFsmXShDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQmIHdh
dGNocG9pbnQpIHsKKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICB3YXRjaHBvaW50LmluaXRpYWxp
emUoY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50
KENvbmN1cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1fbG9jayksIGV4ZWN1dGFibGUpOyAvLyBG
b3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9y
IG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCisgICAg
ICAgIGV4ZWN1dGFibGUtPnNpbmdsZXRvbigpLmFkZCgmd2F0Y2hwb2ludCk7CisgICAgfSk7CiB9
CiAKLXZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRvcjo6YWRkKAotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBD
b21tb25EYXRhJiBjb21tb24pCit2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0
b3I6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSwgV2F0Y2hwb2ludENvbGxlY3RvciYgY29sbGVjdG9yKQogewogICAgIFZNJiB2bSA9
IGNvZGVCbG9jay0+dm0oKTsKICAgICBzd2l0Y2ggKGtleS5raW5kKCkpIHsKICAgICBjYXNlIFBy
b3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZTogewotICAgICAgICBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBudWxscHRyOwotICAgICAgICB7
Ci0gICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgICAgIHdhdGNocG9pbnQgPSBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spOwotICAgICAgICB9Ci0gICAg
ICAgIHdhdGNocG9pbnQtPmluc3RhbGwodm0pOworICAgICAgICBjb2xsZWN0b3IuYWRkQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KFsmXShBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQmIHdhdGNocG9pbnQpIHsKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgICAgICAgICB3YXRjaHBvaW50LmluaXRpYWxpemUoa2V5LCBjb2RlQmxvY2spOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgd2F0Y2hwb2ludC5pbnN0YWxsKHZtKTsKKyAgICAg
ICAgfSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIEFk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IG51bGxwdHI7Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgd2F0Y2hwb2ludCA9IGNvbW1vbi5hZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgd2F0Y2hw
b2ludC0+aW5zdGFsbCh2bSk7CisgICAgICAgIGNvbGxlY3Rvci5hZGRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQoWyZdKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludCYgd2F0Y2hwb2ludCkg
eworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIHdhdGNocG9pbnQuaW5pdGlh
bGl6ZShrZXksIGNvZGVCbG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3YXRjaHBv
aW50Lmluc3RhbGwodm0pOworICAgICAgICB9KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IH0KQEAgLTEzNyw2ICsxMzgsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemls
eShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogICAgIG1fYWRhcHRpdmVTdHJ1
Y3R1cmVTZXRzLmFkZExhemlseShrZXkpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6
YWRkTGF6aWx5KERlc2lyZWRHbG9iYWxQcm9wZXJ0eSYmIHByb3BlcnR5KQoreworICAgIG1fZ2xv
YmFsUHJvcGVydGllcy5hZGRMYXppbHkoV1RGTW92ZShwcm9wZXJ0eSkpOworfQorCiBib29sIERl
c2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAg
aWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCkBAIC0xNDUsMTQgKzE1MSwyNCBAQCBi
b29sIERlc2lyZWRXYXRjaHBvaW50czo6Y29uc2lkZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNvbW1vbkRhdGEpCit2b2lkIERlc2ly
ZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBEZXNpcmVkSWRl
bnRpZmllcnMmIGlkZW50aWZpZXJzLCBDb21tb25EYXRhKiBjb21tb25EYXRhKQogewotICAgIG1f
c2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKLSAgICBtX2lubGluZVNldHMu
cmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7Ci0gICAgbV9zeW1ib2xUYWJsZXMucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7Ci0gICAgbV9mdW5jdGlvbkV4ZWN1dGFibGVz
LnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwotICAgIG1fYnVmZmVyVmlld3MucmVh
bGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7Ci0gICAgbV9hZGFwdGl2ZVN0cnVjdHVyZVNl
dHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgV2F0Y2hwb2ludENvbGxl
Y3RvciBjb2xsZWN0b3I7CisKKyAgICBhdXRvIHJlYWxseUFkZCA9IFsmXSgpIHsKKyAgICAgICAg
bV9zZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbGxlY3Rvcik7CisgICAgICAgIG1faW5saW5l
U2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOworICAgICAgICBtX3N5bWJvbFRh
Ymxlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOworICAgICAgICBtX2Z1bmN0aW9u
RXhlY3V0YWJsZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29sbGVjdG9yKTsKKyAgICAgICAgbV9i
dWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOworICAgICAgICBtX2Fk
YXB0aXZlU3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOworICAg
ICAgICBtX2dsb2JhbFByb3BlcnRpZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgaWRlbnRpZmllcnMs
IGNvbGxlY3Rvcik7CisgICAgfTsKKyAgICByZWFsbHlBZGQoKTsKKyAgICBjb2xsZWN0b3IubWF0
ZXJpYWxpemUoKTsKKworICAgIHJlYWxseUFkZCgpOworICAgIGNvbGxlY3Rvci5maW5hbGl6ZShj
b2RlQmxvY2ssICpjb21tb25EYXRhKTsKIH0KIAogYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFy
ZVN0aWxsVmFsaWQoKSBjb25zdApAQCAtMTY1LDYgKzE4MSwxMSBAQCBib29sIERlc2lyZWRXYXRj
aHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CiAgICAgICAgICYmIG1fYWRhcHRpdmVTdHJ1
Y3R1cmVTZXRzLmFyZVN0aWxsVmFsaWQoKTsKIH0KIAorYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6
OmFyZVN0aWxsVmFsaWRPbk1haW5UaHJlYWQoVk0mIHZtLCBEZXNpcmVkSWRlbnRpZmllcnMmIGlk
ZW50aWZpZXJzKQoreworICAgIHJldHVybiBtX2dsb2JhbFByb3BlcnRpZXMuaXNTdGlsbFZhbGlk
T25NYWluVGhyZWFkKHZtLCBpZGVudGlmaWVycyk7Cit9CisKIHZvaWQgRGVzaXJlZFdhdGNocG9p
bnRzOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAogewogICAgIFByZWZpeCBub1ByZWZpeChQcmVmaXg6Ok5vSGVhZGVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCmluZGV4
IDVmYmFlYmM1ZjU5NjkxZDM5YTc2MzgwMmFhZTZmZGExZTc3NzAyMTkuLmQ0Y2NmNGQzYTI4OWU2
NzAwMGIyNWUyZjUxMWY1ZWEwMDNkYzg5NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVO
QUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgorI2luY2x1ZGUgIkRG
R0Rlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxl
LmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5oIgpAQCAtNDMsMTQgKzQ0LDE1IEBAIHN0cnVjdCBQcmVmaXg7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgU2V0UG9pbnRlckFkYXB0b3IgewotICAgIHN0YXRp
YyB2b2lkIGFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgVCBzZXQsIENvbW1vbkRhdGEmIGNvbW1v
bikKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBXYXRj
aHBvaW50Q29sbGVjdG9yJiBjb2xsZWN0b3IpCiAgICAgewotICAgICAgICBDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBudWxscHRyOwotICAgICAgICB7Ci0gICAg
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgICAgIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9jayk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNldC0+YWRkKFdURk1vdmUod2F0Y2hwb2ludCkp
OworICAgICAgICBjb2xsZWN0b3IuYWRkV2F0Y2hwb2ludChbJl0oQ29kZUJsb2NrSmV0dGlzb25p
bmdXYXRjaHBvaW50JiB3YXRjaHBvaW50KSB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
ICAgICAgICAgd2F0Y2hwb2ludC5pbml0aWFsaXplKGNvZGVCbG9jayk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBzZXQtPmFkZCgmd2F0Y2hwb2ludCk7CisgICAgICAgIH0pOwogICAgIH0K
ICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQpCiAgICAgewpAQCAtNjMs
NyArNjUsNyBAQCBzdHJ1Y3QgU2V0UG9pbnRlckFkYXB0b3IgewogfTsKIAogc3RydWN0IFN5bWJv
bFRhYmxlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIFN5bWJvbFRh
YmxlKiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBTeW1i
b2xUYWJsZSosIFdhdGNocG9pbnRDb2xsZWN0b3ImKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVu
SW52YWxpZGF0ZWQoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHN5bWJvbFRhYmxlLT5zaW5nbGV0b24oKS5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKQEAgLTc1
LDcgKzc3LDcgQEAgc3RydWN0IFN5bWJvbFRhYmxlQWRhcHRvciB7CiB9OwogCiBzdHJ1Y3QgRnVu
Y3Rpb25FeGVjdXRhYmxlQWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayos
IEZ1bmN0aW9uRXhlY3V0YWJsZSosIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQo
Q29kZUJsb2NrKiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgV2F0Y2hwb2ludENvbGxlY3RvciYpOwog
ICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUpCiAgICAgewogICAgICAgICByZXR1cm4gZXhlY3V0YWJsZS0+c2luZ2xldG9uKCku
aGFzQmVlbkludmFsaWRhdGVkKCk7CkBAIC04Nyw3ICs4OSw3IEBAIHN0cnVjdCBGdW5jdGlvbkV4
ZWN1dGFibGVBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50
QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJW
aWV3KiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0Fy
cmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnRDb2xsZWN0b3ImKTsKICAgICBzdGF0aWMgYm9vbCBo
YXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAgewogICAgICAg
ICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOwpAQCAtOTksNyArMTAxLDcgQEAgc3RydWN0IEFycmF5
QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwg
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAgc3RhdGlj
IHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiwgV2F0
Y2hwb2ludENvbGxlY3RvciYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogICAgIHsKICAgICAgICAgcmV0dXJu
ICFrZXkuaXNXYXRjaGFibGUoKTsKQEAgLTEyNywxNCArMTI5LDE2IEBAIGNsYXNzIEdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHMgewogICAgICAgICBtX3NldHMuYWRkKHNldCk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBDb21tb25EYXRhJiBj
b21tb24pCisgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFdhdGNocG9p
bnRDb2xsZWN0b3ImIGNvbGxlY3RvcikKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFt
X3JlYWxseUFkZGVkKTsKKyAgICAgICAgaWYgKGNvbGxlY3Rvci5tb2RlKCkgPT0gV2F0Y2hwb2lu
dFJlZ2lzdHJhdGlvbk1vZGU6OkFkZCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Jl
YWxseUFkZGVkKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYgc2V0IDogbV9zZXRzKQot
ICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24pOworICAgICAg
ICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb2xsZWN0b3IpOwogICAgICAgICAK
LSAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CisgICAgICAgIGlmIChjb2xsZWN0b3IubW9k
ZSgpID09IFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlOjpBZGQpCisgICAgICAgICAgICBtX3Jl
YWxseUFkZGVkID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkg
Y29uc3QKQEAgLTE4MCwxMiArMTg0LDE1IEBAIGNsYXNzIERlc2lyZWRXYXRjaHBvaW50cyB7CiAg
ICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGlyZWN0bHku
IFVzZSBHcmFwaDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2ggZG9lcwogICAgIC8vIHRoZSByZXF1
aXJlZCBHQyBtYWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgYm9va2tlZXBpbmcuCiAgICAgdm9p
ZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKworICAgIHZvaWQg
YWRkTGF6aWx5KERlc2lyZWRHbG9iYWxQcm9wZXJ0eSYmKTsKICAgICAKICAgICBib29sIGNvbnNp
ZGVyKFN0cnVjdHVyZSopOwogICAgIAotICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayosIENv
bW1vbkRhdGEmKTsKKyAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBEZXNpcmVkSWRlbnRp
ZmllcnMmLCBDb21tb25EYXRhKik7CiAgICAgCiAgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkgY29u
c3Q7CisgICAgYm9vbCBhcmVTdGlsbFZhbGlkT25NYWluVGhyZWFkKFZNJiwgRGVzaXJlZElkZW50
aWZpZXJzJik7CiAgICAgCiAgICAgYm9vbCBpc1dhdGNoZWQoV2F0Y2hwb2ludFNldCogc2V0KQog
ICAgIHsKQEAgLTIyMCw2ICsyMjcsNyBAQCBjbGFzcyBEZXNpcmVkV2F0Y2hwb2ludHMgewogICAg
IEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8RnVuY3Rpb25FeGVjdXRhYmxlKiwgRnVuY3Rpb25F
eGVjdXRhYmxlQWRhcHRvcj4gbV9mdW5jdGlvbkV4ZWN1dGFibGVzOwogICAgIEdlbmVyaWNEZXNp
cmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBv
aW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
PE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFw
dG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKKyAgICBEZXNpcmVkR2xvYmFsUHJvcGVydGll
cyBtX2dsb2JhbFByb3BlcnRpZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IDM2ODA2Zjk3ZGRlZjgxMzQx
NWVhMzZiNTdiMDM2MzgyYWM3ZmRjMDIuLjI1YWI5YzMzOTUxZjhlYjk5YjUwZDFjN2UwYTE0NGM4
NzgyZDZmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0xMTA0
LDcgKzExMDQsNyBAQCBib29sIEdyYXBoOjp3YXRjaEdsb2JhbFByb3BlcnR5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGlkZW50aWZpZQogICAgICAgICBpZiAoIXdhdGNo
cG9pbnQtPmlzU3RpbGxWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LSAgICBnbG9iYWxQcm9wZXJ0aWVzKCkuYWRkTGF6aWx5KERlc2lyZWRHbG9iYWxQcm9wZXJ0eShn
bG9iYWxPYmplY3QsIGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICB3YXRjaHBvaW50cygpLmFkZExh
emlseShEZXNpcmVkR2xvYmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyTnVtYmVy
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAppbmRleCA0Y2YzNmNmMjYxZGNjOTk0NWU3M2Q0MjJlYmU1OTljOGFiZjUyOTk3Li4xYTdiZGQy
OTAzMmMwOTZhMGQwYzdkMDY0OTU1ZjZiZGU2NWRlNjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCkBAIC04MzUsNyArODM1LDYgQEAgY2xhc3MgR3JhcGggZmluYWwgOiBwdWJs
aWMgdmlydHVhbCBTY2FubmFibGUgewogCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBpZGVudGlm
aWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVycygpOyB9CiAgICAgRGVzaXJlZFdhdGNo
cG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50cygpOyB9Ci0g
ICAgRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMmIGdsb2JhbFByb3BlcnRpZXMoKSB7IHJldHVybiBt
X3BsYW4uZ2xvYmFsUHJvcGVydGllcygpOyB9CiAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRo
ZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlzIGEgUHJl
c2VuY2UgY29uZGl0aW9uLAogICAgIC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0byBxdWVy
eSBpZiB0aGUgY29uZGl0aW9uIGhvbGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgR0Mga25v
d3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCmluZGV4IGM1NzJhNThmY2FiYzRl
YWZmMTQzZDFiNGY4ZDQxYjIwNWMyYWVlNjkuLjM4NmY1ZmI4ZmQ0ODI3NmFlNjU5ZGI2YThjMmM2
ZDI2NDAwMTY3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcApAQCAtNTcx
LDExICs1NzEsMTAgQEAgYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQogdm9pZCBQbGFuOjpyZWFs
bHlBZGQoQ29tbW9uRGF0YSogY29tbW9uRGF0YSkKIHsKICAgICBBU1NFUlQobV92bS0+aGVhcC5p
c0RlZmVycmVkKCkpOwotICAgIG1fd2F0Y2hwb2ludHMucmVhbGx5QWRkKG1fY29kZUJsb2NrLCAq
Y29tbW9uRGF0YSk7CiAgICAgbV9pZGVudGlmaWVycy5yZWFsbHlBZGQoKm1fdm0sIGNvbW1vbkRh
dGEpOwogICAgIG1fd2Vha1JlZmVyZW5jZXMucmVhbGx5QWRkKCptX3ZtLCBjb21tb25EYXRhKTsK
ICAgICBtX3RyYW5zaXRpb25zLnJlYWxseUFkZCgqbV92bSwgY29tbW9uRGF0YSk7Ci0gICAgbV9n
bG9iYWxQcm9wZXJ0aWVzLnJlYWxseUFkZChtX2NvZGVCbG9jaywgbV9pZGVudGlmaWVycywgKmNv
bW1vbkRhdGEpOworICAgIG1fd2F0Y2hwb2ludHMucmVhbGx5QWRkKG1fY29kZUJsb2NrLCBtX2lk
ZW50aWZpZXJzLCBjb21tb25EYXRhKTsKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIGNvbW1vbkRhdGEtPnJlY29y
ZGVkU3RhdHVzZXMgPSBXVEZNb3ZlKG1fcmVjb3JkZWRTdGF0dXNlcyk7CkBAIC01OTUsNyArNTk0
LDcgQEAgdm9pZCBQbGFuOjpub3RpZnlSZWFkeSgpCiAKIGJvb2wgUGxhbjo6aXNTdGlsbFZhbGlk
T25NYWluVGhyZWFkKCkKIHsKLSAgICByZXR1cm4gbV9nbG9iYWxQcm9wZXJ0aWVzLmlzU3RpbGxW
YWxpZE9uTWFpblRocmVhZCgqbV92bSwgbV9pZGVudGlmaWVycyk7CisgICAgcmV0dXJuIG1fd2F0
Y2hwb2ludHMuYXJlU3RpbGxWYWxpZE9uTWFpblRocmVhZCgqbV92bSwgbV9pZGVudGlmaWVycyk7
CiB9CiAKIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0Nh
bGxiYWNrKCkKQEAgLTc1Nyw3ICs3NTYsNiBAQCB2b2lkIFBsYW46OmNhbmNlbCgpCiAgICAgbV9p
bmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKICAgICBtX3dhdGNocG9pbnRzID0gRGVzaXJlZFdh
dGNocG9pbnRzKCk7CiAgICAgbV9pZGVudGlmaWVycyA9IERlc2lyZWRJZGVudGlmaWVycygpOwot
ICAgIG1fZ2xvYmFsUHJvcGVydGllcyA9IERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzKCk7CiAgICAg
bV93ZWFrUmVmZXJlbmNlcyA9IERlc2lyZWRXZWFrUmVmZXJlbmNlcygpOwogICAgIG1fdHJhbnNp
dGlvbnMgPSBEZXNpcmVkVHJhbnNpdGlvbnMoKTsKICAgICBtX2NhbGxiYWNrID0gbnVsbHB0cjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKaW5kZXggMTMwOGZmNDg4MjMwYmU2Mjk3Zjgx
MTFlZjI2MDA0YzJhYmQ0YTRhYy4uMTcyYTcyZDljYjdiNTM3MTIzMDAyMjY0ZDM1MjA2NWM0NzUz
OGJmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKQEAgLTEwMCw3ICsxMDAsNiBA
QCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBE
ZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9pZGVudGlmaWVyczsg
fQogICAgIERlc2lyZWRXZWFrUmVmZXJlbmNlcyYgd2Vha1JlZmVyZW5jZXMoKSB7IHJldHVybiBt
X3dlYWtSZWZlcmVuY2VzOyB9CiAgICAgRGVzaXJlZFRyYW5zaXRpb25zJiB0cmFuc2l0aW9ucygp
IHsgcmV0dXJuIG1fdHJhbnNpdGlvbnM7IH0KLSAgICBEZXNpcmVkR2xvYmFsUHJvcGVydGllcyYg
Z2xvYmFsUHJvcGVydGllcygpIHsgcmV0dXJuIG1fZ2xvYmFsUHJvcGVydGllczsgfQogICAgIFJl
Y29yZGVkU3RhdHVzZXMmIHJlY29yZGVkU3RhdHVzZXMoKSB7IHJldHVybiBtX3JlY29yZGVkU3Rh
dHVzZXM7IH0KIAogICAgIGJvb2wgd2lsbFRyeVRvVGllclVwKCkgY29uc3QgeyByZXR1cm4gbV93
aWxsVHJ5VG9UaWVyVXA7IH0KQEAgLTE1Niw3ICsxNTUsNiBAQCBjbGFzcyBQbGFuIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBEZXNpcmVkSWRlbnRpZmllcnMgbV9p
ZGVudGlmaWVyczsKICAgICBEZXNpcmVkV2Vha1JlZmVyZW5jZXMgbV93ZWFrUmVmZXJlbmNlczsK
ICAgICBEZXNpcmVkVHJhbnNpdGlvbnMgbV90cmFuc2l0aW9uczsKLSAgICBEZXNpcmVkR2xvYmFs
UHJvcGVydGllcyBtX2dsb2JhbFByb3BlcnRpZXM7CiAgICAgUmVjb3JkZWRTdGF0dXNlcyBtX3Jl
Y29yZGVkU3RhdHVzZXM7CiAKICAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIEZpeGVkVmVjdG9y
PEJ5dGVjb2RlSW5kZXg+PiBtX3RpZXJVcEluTG9vcEhpZXJhcmNoeTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426327</attachid>
            <date>2021-04-17 01:56:27 -0700</date>
            <delta_ts>2021-04-17 15:59:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224715-20210417015626.patch</filename>
            <type>text/plain</type>
            <size>35103</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
OTI2ZGQwYWYyZTAxNTE5ZDc1MDY5MDYyYWNkMzQ4NTdmMTBkMmY0Li4yMTI5N2U2YjExNDcxYWY4
NDc1MWFhMmE2Njk5ZWJkZDZlMjgyODRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NyBAQAorMjAyMS0wNC0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIERvIG5vdCB1c2UgQmFnPD4gZm9yIERGRyAvIEZUTCB3YXRjaHBv
aW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0
NzE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hp
bGUgQmFnPD4gaXMgdXNlZnVsIHNpbmNlIGl0cyBhbGxvY2F0ZWQgbWVtb3J5IHdpbGwgbm90IGJl
IG1vdmVkLAorICAgICAgICB0aGlzIGlzIHJlYWxseSBtZW1vcnktaW5lZmZpY2llbnQgZGF0YSBz
dHJ1Y3R1cmUuIEVhY2ggZW50cnkgZ2V0cyBhCisgICAgICAgIHRhaWwgcG9pbnRlciAoc28gYWRk
aW5nIDggYnl0ZXMpIGFuZCB3ZSBhbGxvY2F0ZSBlYWNoIGVudHJ5IHNlcGFyYXRlbHkuCisKKyAg
ICAgICAgSW4gREZHIGFuZCBGVEwsIHdlIGFyZSB1c2luZyBCYWc8PiBmb3Igd2F0Y2hwb2ludHMu
IEJ1dCB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgYWN0dWFsbHk6IHRoYW5rcyB0bworICAgICAgICBj
b25jdXJyZW50IGNvbXBpbGVycywgb3VyIHdhdGNocG9pbnQgcmVnaXN0cmF0aW9uIGlzIGJhdGNo
ZWQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbi4gVGhpcyBtZWFucworICAgICAgICB0aGF0IHdl
IGhhdmUgYSB3YXkgdG8ga25vdyBob3cgbWFueSB3YXRjaHBvaW50cyB3ZSBzaG91bGQgcmVnaXN0
ZXIgYXQgdGhhdCBwb2ludC4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBpbnRyb2R1Y2Ug
V2F0Y2hwb2ludENvbGxlY3Rvci4gSW4gRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMsIHdlIHJ1biBy
ZWFsbHlBZGQgdHdpY2UKKyAgICAgICAgd2l0aCBXYXRjaHBvaW50Q29sbGVjdG9yLiBGaXJzdCB0
aW1lLCB3ZSBqdXN0IGNvdW50ICMgb2Ygd2F0Y2hwb2ludHMuIFRoZW4gd2UgYWxsb2NhdGUgRml4
ZWRWZWN0b3I8WFhYV2F0Y2hwb2ludD4KKyAgICAgICAgYW5kIGluc3RhbGwgdGhlbS4gU2luY2Ug
d2UgZG8gbm90IChjYW5ub3QpIGdyb3cgdGhpcyBmaXhlZCB2ZWN0b3IsIHdhdGNocG9pbnQncyBh
ZGRyZXNzIHdpbGwgbm90IGJlIGNoYW5nZWQgYXMgcmVxdWlyZWQuCisKKyAgICAgICAgV2UgYWxz
byBtb3ZlIERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzIHVuZGVyIERlc2lyZWRXYXRjaHBvaW50cyBz
aW5jZSB0aGlzIGJhc2ljYWxseSByZWdpc3RlcnMgd2F0Y2hwb2ludHMuCisKKyAgICAgICAgKiBi
eXRlY29kZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFz
ZTo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSk6CisgICAgICAg
IChKU0M6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2U6OmluaXRp
YWxpemUpOgorICAgICAgICAqIGJ5dGVjb2RlL0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UuaDoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuaDoKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnQ6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBkZmcvREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Lmg6CisgICAgICAgICogZGZnL0RGR0FkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWRhcHRpdmVTdHJ1
Y3R1cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgICogZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb25EYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjp2YWxp
ZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OmNsZWFyV2F0
Y2hwb2ludHMpOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmg6CisgICAgICAgICogZGZn
L0RGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEZXNp
cmVkR2xvYmFsUHJvcGVydGllczo6cmVhbGx5QWRkKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJl
ZEdsb2JhbFByb3BlcnRpZXMuaDoKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRv
cjo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTeW1ib2xUYWJsZUFkYXB0b3I6OmFkZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RnVuY3Rpb25FeGVjdXRhYmxlQWRhcHRvcjo6YWRkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjphZGQpOgor
ICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KToKKyAgICAg
ICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgIChK
U0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkT25NYWluVGhyZWFkKToK
KyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29sbGVjdG9yOjpmaW5hbGl6ZSk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OlNl
dFBvaW50ZXJBZGFwdG9yOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVk
V2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6d2F0Y2hHbG9iYWxQcm9wZXJ0eSk6CisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6aXNTdGls
bFZhbGlkT25NYWluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjYW5jZWwpOgor
ICAgICAgICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6dHJhbnNp
dGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Omdsb2JhbFByb3BlcnRpZXMpOiBEZWxl
dGVkLgorCiAyMDIxLTA0LTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNb3JlIGNoYW5nZXMgdG8gc3VwcG9ydCB0aGUgVGVybWluYXRpb25FeGNlcHRpb24uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5jcHAK
aW5kZXggYjI2ZmJmNmFjYzg2M2EyYWRmZTUyMDFiYjYyZWRlYjIyMDdiYmQzOS4uNjI5ZmEwYzFm
ZGZhYTk0ODgzMDUxZjhkNjA5YzEwZDMxMDExOTk3MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmNwcApAQCAtMzYsNiArMzYsMTggQEAg
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZTo6QWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHAKICAgICBSRUxFQVNFX0FTU0VSVChrZXkua2luZCgpID09
IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSk7CiB9CiAKK0FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2U6OkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2UoKQorICAgIDogbV9rZXkoKQoreworfQorCisKK3ZvaWQgQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZTo6aW5pdGlhbGl6ZShjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQoreworICAgIG1fa2V5ID0ga2V5OworICAgIFJFTEVB
U0VfQVNTRVJUKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsK
K30KKwogdm9pZCBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlOjpp
bnN0YWxsKFZNJiB2bSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2tleS5pc1dhdGNoYWJsZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZS5o
CmluZGV4IGZhNDc5OGJhNTY4ZTE0ZWFkMzM2ZTU5NDA2NjQxZTUzYWZjNjRjYTAuLjUyNGM5YTc0
NThlMzQ5NDhiYjQ0NTU0M2Q4YWUwYjI1OWU0OWZmNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FkYXB0aXZlSW5m
ZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaApAQCAtNDAsOSArNDAsMTEgQEAgY2xh
c3MgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSB7CiAKIHB1Ymxp
YzoKICAgICBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5
VmFsdWVXYXRjaHBvaW50QmFzZSgpOwogCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRp
b24mIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CiAKKyAgICB2b2lkIGluaXRpYWxpemUo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKICAgICB2b2lkIGluc3RhbGwoVk0mKTsK
IAogICAgIHZpcnR1YWwgfkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJh
c2UoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgKaW5kZXggN2UyOGIz
MDljMDc0NjEzNzMwODFkMTFlNjA0NGJlODc2ODdmNDY1OS4uMDg3ZDc0OTY4ZWQ2NTgwYzI5NGI3
OGM1MTVlYWZhOWRiOTM4MmYzMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaApAQCAt
MzgsNiArMzgsMTYgQEAgY2xhc3MgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50IGZpbmFs
IDogcHVibGljIFdhdGNocG9pbnQgewogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykK
ICAgICB7CiAgICAgfQorCisgICAgQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KCkKKyAg
ICAgICAgOiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQobnVsbHB0cikKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsK
KyAgICAgICAgbV9jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgfQogICAgIAogICAgIHZvaWQg
ZmlyZUludGVybmFsKFZNJiwgY29uc3QgRmlyZURldGFpbCYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAKaW5kZXggODgxNmFkZjFiYmI1ZjBmY2E4MTBl
N2I3NTdkNjJhOGIwMzczMjFiOS4uZDI0OGFhM2QyMWY4NzIzNjY5MDFjYjk4YmIzNDJlNDFkNmUy
MzQzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcApA
QCAtMzksNiArMzksMTggQEAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQKIHsKIH0KIAorQWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50OjpBZGFwdGl2ZUluZmVycmVkUHJvcGVy
dHlWYWx1ZVdhdGNocG9pbnQoKQorICAgIDogQmFzZSgpCisgICAgLCBtX2NvZGVCbG9jayhudWxs
cHRyKQoreworfQorCit2b2lkIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dDo6aW5pdGlhbGl6ZShjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3sKKyAgICBCYXNlOjppbml0aWFsaXplKGtleSk7CisgICAgbV9jb2Rl
QmxvY2sgPSBjb2RlQmxvY2s7Cit9CisKIHZvaWQgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50OjpoYW5kbGVGaXJlKFZNJiwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQog
ewogICAgIGlmIChERkc6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmgKaW5kZXggMjc3NmQ5MWNhYjVhZTcxYjU1YTc1Yjc1
OWExZDJmMzBjMGZiZDU0ZS4uZjJjYzgzOGZmYzJmOGEyNTg4ZGQyY2M5MjI3M2RmMTI3MmQzZGMw
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5oCkBAIC0zNSw2
ICszNSw5IEBAIGNsYXNzIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCBm
aW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIEJhc2U7CiAgICAgQWRh
cHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiwgQ29kZUJsb2NrKik7CisgICAgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50KCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mLCBDb2RlQmxvY2sqKTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzVmFsaWQo
KSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcAppbmRleCA4YTJhNzYwZjAyZmQ3
ZTcyODc0ZDkyMDJhN2FmNWY2YjM4OGRmMjRhLi4xMTlmZDc5MTYwZWQyOWQzMzdhN2VhYzQxMjky
YzJkNzgxNmVjNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fk
YXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCkBAIC00Miw2ICs0MiwyMSBA
QCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ6OkFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbgogICAgIFJFTEVBU0VfQVNTRVJUKCFrZXkud2F0Y2hp
bmdSZXF1aXJlc1JlcGxhY2VtZW50V2F0Y2hwb2ludCgpKTsKIH0KIAorQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50OjpBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoKQorICAgIDogV2F0Y2hw
b2ludChXYXRjaHBvaW50OjpUeXBlOjpBZGFwdGl2ZVN0cnVjdHVyZSkKKyAgICAsIG1fY29kZUJs
b2NrKG51bGxwdHIpCisgICAgLCBtX2tleSgpCit7Cit9CisKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50Ojppbml0aWFsaXplKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXksIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIG1fY29kZUJsb2NrID0gY29kZUJsb2Nr
OworICAgIG1fa2V5ID0ga2V5OworICAgIFJFTEVBU0VfQVNTRVJUKGtleS53YXRjaGluZ1JlcXVp
cmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IWtleS53YXRjaGluZ1JlcXVpcmVzUmVwbGFjZW1lbnRXYXRjaHBvaW50KCkpOworfQorCiB2b2lk
IEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6aW5zdGFsbChWTSYgdm0pCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9rZXkuaXNXYXRjaGFibGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaAppbmRl
eCBiMjlmODlmMjU0M2IwYmUxZjhiMTU5NGZkOWU1MWU4YmUxOWU5OGY0Li45YTRhYmRjNWNkNWQz
OWJhZWI3MjhjY2NjM2EzMTk5NzgxYzE3YzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmgKQEAgLTM3
LDkgKzM3LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKIHB1Ymxp
YzoKICAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mLCBDb2RlQmxvY2sqKTsKKyAgICBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQo
KTsKICAgICAKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KCkgY29uc3Qg
eyByZXR1cm4gbV9rZXk7IH0KLSAgICAKKworICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYsIENvZGVCbG9jayopOworCiAgICAgdm9pZCBpbnN0YWxsKFZN
Jik7CiAKICAgICB2b2lkIGZpcmVJbnRlcm5hbChWTSYsIGNvbnN0IEZpcmVEZXRhaWwmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCmluZGV4IGIzZWZiZTVi
NTZjNmYxY2Q2ODM2MGY1NzcyYWRiMzYxZTUzMmI1YTIuLjYxMDcwMjIzOGY5YjFiMGY0NjU3MWQw
ZWY2YzJjMmQ3NzdlYmIxODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b25EYXRhLmNwcApAQCAtMTQ4LDggKzE0OCw4IEBAIHZvaWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVS
ZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3IgKEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2lu
dCogd2F0Y2hwb2ludCA6IGFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCi0gICAgICAgIHdh
dGNocG9pbnQtPmtleSgpLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7Cisg
ICAgZm9yIChBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQmIHdhdGNocG9pbnQgOiBtX2FkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMpCisgICAgICAgIHdhdGNocG9pbnQua2V5KCkudmFsaWRh
dGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKIH0KIAogdm9pZCBDb21tb25EYXRhOjpm
aW5hbGl6ZUNhdGNoRW50cnlwb2ludHMoVmVjdG9yPENhdGNoRW50cnlwb2ludERhdGE+JiYgY2F0
Y2hFbnRyeXBvaW50cykKQEAgLTE2Nyw5ICsxNjcsOSBAQCB2b2lkIENvbW1vbkRhdGE6OmZpbmFs
aXplQ2F0Y2hFbnRyeXBvaW50cyhWZWN0b3I8Q2F0Y2hFbnRyeXBvaW50RGF0YT4mJiBjYXRjaEVu
dAogCiB2b2lkIENvbW1vbkRhdGE6OmNsZWFyV2F0Y2hwb2ludHMoKQogewotICAgIHdhdGNocG9p
bnRzLmNsZWFyKCk7Ci0gICAgYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cy5jbGVhcigpOwot
ICAgIGFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHMuY2xlYXIoKTsKKyAg
ICBtX3dhdGNocG9pbnRzID0gRml4ZWRWZWN0b3I8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50PigpOworICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cyA9IEZpeGVkVmVjdG9y
PEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4oKTsKKyAgICBtX2FkYXB0aXZlSW5mZXJyZWRQ
cm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHMgPSBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnQ+KCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKaW5kZXggOTM2Nzc0NGYz
NjVlM2I3ZDc5YzE5MDExMDM0NDc1ZTgzNzU4NjY3MC4uZTBiODFmMjllM2NhZjMxOTY0OWVjNmVh
NTQwZDBlMjhlOWY5M2QxNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgKQEAgLTExMyw5ICsxMTMsOSBAQCBjbGFzcyBDb21tb25EYXRhIHsKICAgICBGaXhlZFZl
Y3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gbV93ZWFrUmVmZXJlbmNlczsKICAgICBGaXhlZFZl
Y3RvcjxTdHJ1Y3R1cmVJRD4gbV93ZWFrU3RydWN0dXJlUmVmZXJlbmNlczsKICAgICBGaXhlZFZl
Y3RvcjxDYXRjaEVudHJ5cG9pbnREYXRhPiBtX2NhdGNoRW50cnlwb2ludHM7Ci0gICAgQmFnPENv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludD4gd2F0Y2hwb2ludHM7Ci0gICAgQmFnPEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4gYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50czsKLSAg
ICBCYWc8QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBhZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzOworICAgIEZpeGVkVmVjdG9yPENvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50czsKKyAgICBGaXhlZFZlY3RvcjxB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQ+IG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
czsKKyAgICBGaXhlZFZlY3RvcjxBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnQ+IG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50czsKICAgICBSZWNv
cmRlZFN0YXR1c2VzIHJlY29yZGVkU3RhdHVzZXM7CiAgICAgVmVjdG9yPEp1bXBSZXBsYWNlbWVu
dD4gbV9qdW1wUmVwbGFjZW1lbnRzOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkR2xvYmFsUHJvcGVydGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzLmNwcAppbmRleCA2ZjJlNmEy
ODRlZmQ5ZGU5MWQ0NjMyZDg4MGNjNDllMjg5MDgzOWUzLi41ZDBiYjU5NWRkOWQ0ZDIyZmEwYzUx
ZDZiZjRlMzIyMDY3ZThlYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzLmNwcApAQCAtNTQsMTggKzU0LDE5IEBA
IGJvb2wgRGVzaXJlZEdsb2JhbFByb3BlcnRpZXM6OmlzU3RpbGxWYWxpZE9uTWFpblRocmVhZChW
TSYgdm0sIERlc2lyZWRJZGVudGlmaWVyCiAgICAgcmV0dXJuIGlzU3RpbGxWYWxpZDsKIH0KIAot
dm9pZCBEZXNpcmVkR2xvYmFsUHJvcGVydGllczo6cmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJs
b2NrLCBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzLCBDb21tb25EYXRhJiBjb21tb24p
Cit2b2lkIERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzOjpyZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMsIFdhdGNocG9pbnRDb2xsZWN0
b3ImIGNvbGxlY3RvcikKIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHByb3BlcnR5IDogbV9zZXQp
IHsKLSAgICAgICAgYXV0byogdWlkID0gaWRlbnRpZmllcnMuYXQocHJvcGVydHkuaWRlbnRpZmll
ck51bWJlcigpKTsKLSAgICAgICAgYXV0byYgd2F0Y2hwb2ludFNldCA9IHByb3BlcnR5Lmdsb2Jh
bE9iamVjdCgpLT5lbnN1cmVSZWZlcmVuY2VkUHJvcGVydHlXYXRjaHBvaW50U2V0KHVpZCk7Ci0g
ICAgICAgIEFTU0VSVCh3YXRjaHBvaW50U2V0LmlzU3RpbGxWYWxpZCgpKTsKLSAgICAgICAgQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gbnVsbHB0cjsKLSAgICAg
ICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgICAgICB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChj
b2RlQmxvY2spOwotICAgICAgICB9Ci0gICAgICAgIHdhdGNocG9pbnRTZXQuYWRkKFdURk1vdmUo
d2F0Y2hwb2ludCkpOworICAgICAgICBjb2xsZWN0b3IuYWRkV2F0Y2hwb2ludChbJl0oQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50JiB3YXRjaHBvaW50KSB7CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7CisgICAgICAgICAgICAgICAgd2F0Y2hwb2ludC5pbml0aWFsaXplKGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvKiB1aWQgPSBpZGVudGlmaWVycy5hdChwcm9w
ZXJ0eS5pZGVudGlmaWVyTnVtYmVyKCkpOworICAgICAgICAgICAgYXV0byYgd2F0Y2hwb2ludFNl
dCA9IHByb3BlcnR5Lmdsb2JhbE9iamVjdCgpLT5lbnN1cmVSZWZlcmVuY2VkUHJvcGVydHlXYXRj
aHBvaW50U2V0KHVpZCk7CisgICAgICAgICAgICBBU1NFUlQod2F0Y2hwb2ludFNldC5pc1N0aWxs
VmFsaWQoKSk7CisgICAgICAgICAgICB3YXRjaHBvaW50U2V0LmFkZCgmd2F0Y2hwb2ludCk7Cisg
ICAgICAgIH0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkR2xvYmFsUHJvcGVydGllcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkR2xvYmFsUHJvcGVydGllcy5oCmluZGV4IDY5YmQzNmRhOWJmYmNjZTE2
ZWI1MjE1ZWY5MDE5ZjRkMTcxNDVmN2IuLmZhMGRhOWU2Mjc4OWIyZTkxMzVjOGE1MzcxZWRhOWFi
NGU0OTRiMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZEdsb2JhbFByb3BlcnRpZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRHbG9iYWxQcm9wZXJ0aWVzLmgKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIERGRyB7
CiAKIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBEZXNpcmVkSWRlbnRpZmllcnM7CitjbGFzcyBX
YXRjaHBvaW50Q29sbGVjdG9yOwogCiBjbGFzcyBEZXNpcmVkR2xvYmFsUHJvcGVydGllcyB7CiBw
dWJsaWM6CkBAIC00OSw3ICs1MCw3IEBAIGNsYXNzIERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzIHsK
IAogICAgIGJvb2wgaXNTdGlsbFZhbGlkT25NYWluVGhyZWFkKFZNJiwgRGVzaXJlZElkZW50aWZp
ZXJzJik7CiAKLSAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBEZXNpcmVkSWRlbnRpZmll
cnMmLCBDb21tb25EYXRhJik7CisgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwgRGVzaXJl
ZElkZW50aWZpZXJzJiwgV2F0Y2hwb2ludENvbGxlY3RvciYpOwogCiBwcml2YXRlOgogICAgIEhh
c2hTZXQ8RGVzaXJlZEdsb2JhbFByb3BlcnR5PiBtX3NldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAppbmRleCA2Mzc2ZDU3ZWE4
N2UwNGVhNTIxMjI3ZGQzYTg4ZWRiNmNiNGQ4NjExLi41YWI5NzE4ZjI4NzY2ZDY1NjVjZThiOWJi
ODQ5OTMyNDg0NzdkMzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCkBAIC0zNCw3MSArMzQsNzIgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi12b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRB
ZGFwdG9yOjphZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTQXJyYXlCdWZmZXJWaWV3
KiB2aWV3LCBDb21tb25EYXRhJiBjb21tb24pCi17Ci0gICAgLy8gdmlldyBpcyBhbHJlYWR5IGZy
b3plbi4gSWYgaXQgaXMgZGVhbGxvY2F0ZWQsIGpldHRpc29uaW5nIGhhcHBlbnMuCi0gICAgQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gbnVsbHB0cjsKLSAgICB7
Ci0gICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwot
ICAgICAgICB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwot
ICAgIH0KLSAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB2aWV3LT5wb3NzaWJseVNoYXJl
ZEJ1ZmZlcigpOwotICAgIGlmICghYXJyYXlCdWZmZXIpIHsKLSAgICAgICAgd2F0Y2hwb2ludC0+
ZmlyZShjb2RlQmxvY2stPnZtKCksIFN0cmluZ0ZpcmVEZXRhaWwoIkFycmF5QnVmZmVyIGNvdWxk
IG5vdCBiZSBhbGxvY2F0ZWQsIHByb2JhYmx5IGJlY2F1c2Ugb2YgT09NLiIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KK3ZvaWQgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmFk
ZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcsIFdhdGNocG9p
bnRDb2xsZWN0b3ImIGNvbGxlY3RvcikKK3sKKyAgICBjb2xsZWN0b3IuYWRkV2F0Y2hwb2ludChb
Jl0oQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50JiB3YXRjaHBvaW50KSB7CisgICAgICAg
IC8vIHZpZXcgaXMgYWxyZWFkeSBmcm96ZW4uIElmIGl0IGlzIGRlYWxsb2NhdGVkLCBqZXR0aXNv
bmluZyBoYXBwZW5zLgorICAgICAgICB7CisgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIg
bG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIHdhdGNocG9pbnQuaW5pdGlh
bGl6ZShjb2RlQmxvY2spOworICAgICAgICB9CisgICAgICAgIEFycmF5QnVmZmVyKiBhcnJheUJ1
ZmZlciA9IHZpZXctPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CisgICAgICAgIGlmICghYXJyYXlC
dWZmZXIpIHsKKyAgICAgICAgICAgIHdhdGNocG9pbnQuZmlyZShjb2RlQmxvY2stPnZtKCksIFN0
cmluZ0ZpcmVEZXRhaWwoIkFycmF5QnVmZmVyIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQsIHByb2Jh
Ymx5IGJlY2F1c2Ugb2YgT09NLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
Ci0gICAgLy8gRklYTUU6IFdlIGRvbid0IG5lZWQgdG8gc2V0IHRoaXMgd2F0Y2hwb2ludCBhdCBh
bGwgZm9yIHNoYXJlZCBidWZmZXJzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQxMDgKLSAgICBhcnJheUJ1ZmZlci0+ZGV0YWNoaW5nV2F0Y2hwb2lu
dFNldCgpLmFkZChXVEZNb3ZlKHdhdGNocG9pbnQpKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGRv
bid0IG5lZWQgdG8gc2V0IHRoaXMgd2F0Y2hwb2ludCBhdCBhbGwgZm9yIHNoYXJlZCBidWZmZXJz
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
MTA4CisgICAgICAgIGFycmF5QnVmZmVyLT5kZXRhY2hpbmdXYXRjaHBvaW50U2V0KCkuYWRkKCZ3
YXRjaHBvaW50KTsKKyAgICB9KTsKIH0KIAotdm9pZCBTeW1ib2xUYWJsZUFkYXB0b3I6OmFkZCgK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb21t
b25EYXRhJiBjb21tb24pCit2b2lkIFN5bWJvbFRhYmxlQWRhcHRvcjo6YWRkKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFdhdGNocG9pbnRDb2xsZWN0b3Im
IGNvbGxlY3RvcikKIHsKLSAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KENvbmN1cnJlbnRKU0xv
Y2tlcihjb2RlQmxvY2stPm1fbG9jayksIHN5bWJvbFRhYmxlKTsgLy8gRm9yIGNvbW1vbiB1c2Vy
cywgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2VhayBvciBub3QuIElmIHJlZmVy
ZW5jZXMgdG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgotICAgIENvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IG51bGxwdHI7Ci0gICAgewotICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgd2F0
Y2hwb2ludCA9IGNvbW1vbi53YXRjaHBvaW50cy5hZGQoY29kZUJsb2NrKTsKLSAgICB9Ci0gICAg
c3ltYm9sVGFibGUtPnNpbmdsZXRvbigpLmFkZChXVEZNb3ZlKHdhdGNocG9pbnQpKTsKKyAgICBj
b2xsZWN0b3IuYWRkV2F0Y2hwb2ludChbJl0oQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50
JiB3YXRjaHBvaW50KSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgd2F0Y2hwb2ludC5pbml0
aWFsaXplKGNvZGVCbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgY29kZUJsb2NrLT5hZGRDb25z
dGFudChDb25jdXJyZW50SlNMb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spLCBzeW1ib2xUYWJsZSk7
IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdl
YWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4K
KyAgICAgICAgc3ltYm9sVGFibGUtPnNpbmdsZXRvbigpLmFkZCgmd2F0Y2hwb2ludCk7CisgICAg
fSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlQWRhcHRvcjo6YWRkKAotICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIENvbW1vbkRh
dGEmIGNvbW1vbikKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlQWRhcHRvcjo6YWRkKENvZGVCbG9j
ayogY29kZUJsb2NrLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIFdhdGNocG9pbnRD
b2xsZWN0b3ImIGNvbGxlY3RvcikKIHsKLSAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KENvbmN1
cnJlbnRKU0xvY2tlcihjb2RlQmxvY2stPm1fbG9jayksIGV4ZWN1dGFibGUpOyAvLyBGb3IgY29t
bW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgaXQncyB3ZWFrIG9yIG5vdC4g
SWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBhd2F5LCB0b28uCi0gICAgQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gbnVsbHB0cjsKLSAgICB7Ci0g
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAg
ICAgICB3YXRjaHBvaW50ID0gY29tbW9uLndhdGNocG9pbnRzLmFkZChjb2RlQmxvY2spOwotICAg
IH0KLSAgICBleGVjdXRhYmxlLT5zaW5nbGV0b24oKS5hZGQoV1RGTW92ZSh3YXRjaHBvaW50KSk7
CisgICAgY29sbGVjdG9yLmFkZFdhdGNocG9pbnQoWyZdKENvZGVCbG9ja0pldHRpc29uaW5nV2F0
Y2hwb2ludCYgd2F0Y2hwb2ludCkgeworICAgICAgICB7CisgICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIHdhdGNocG9p
bnQuaW5pdGlhbGl6ZShjb2RlQmxvY2spOworICAgICAgICB9CisgICAgICAgIGNvZGVCbG9jay0+
YWRkQ29uc3RhbnQoQ29uY3VycmVudEpTTG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKSwgZXhlY3V0
YWJsZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBp
dCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3YXks
IHRvby4KKyAgICAgICAgZXhlY3V0YWJsZS0+c2luZ2xldG9uKCkuYWRkKCZ3YXRjaHBvaW50KTsK
KyAgICB9KTsKIH0KIAotdm9pZCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yOjph
ZGQoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBrZXksIENvbW1vbkRhdGEmIGNvbW1vbikKK3ZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50QWRhcHRvcjo6YWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYga2V5LCBXYXRjaHBvaW50Q29sbGVjdG9yJiBjb2xsZWN0b3IpCiB7CiAg
ICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIHN3aXRjaCAoa2V5LmtpbmQoKSkgewog
ICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOiB7Ci0gICAgICAgIEFkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCogd2F0Y2hwb2ludCA9IG51bGxwdHI7
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOwotICAgICAgICAgICAgd2F0Y2hwb2ludCA9IGNvbW1vbi5hZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayk7Ci0gICAg
ICAgIH0KLSAgICAgICAgd2F0Y2hwb2ludC0+aW5zdGFsbCh2bSk7CisgICAgICAgIGNvbGxlY3Rv
ci5hZGRBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQoWyZdKEFkYXB0aXZl
SW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludCYgd2F0Y2hwb2ludCkgeworICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOworICAgICAgICAgICAgICAgIHdhdGNocG9pbnQuaW5pdGlhbGl6ZShrZXksIGNv
ZGVCbG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3YXRjaHBvaW50Lmluc3RhbGwo
dm0pOworICAgICAgICB9KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6IHsK
LSAgICAgICAgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0gbnVsbHB0
cjsKLSAgICAgICAgewotICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2Rl
QmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICB3YXRjaHBvaW50ID0gY29tbW9uLmFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludHMuYWRkKGtleSwgY29kZUJsb2NrKTsKLSAgICAgICAgfQotICAg
ICAgICB3YXRjaHBvaW50LT5pbnN0YWxsKHZtKTsKKyAgICAgICAgY29sbGVjdG9yLmFkZEFkYXB0
aXZlU3RydWN0dXJlV2F0Y2hwb2ludChbJl0oQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50JiB3
YXRjaHBvaW50KSB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgd2F0Y2hw
b2ludC5pbml0aWFsaXplKGtleSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHdhdGNocG9pbnQuaW5zdGFsbCh2bSk7CisgICAgICAgIH0pOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgfQpAQCAtMTM3LDYgKzEzOCwxMSBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50
czo6YWRkTGF6aWx5KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiAgICAgbV9h
ZGFwdGl2ZVN0cnVjdHVyZVNldHMuYWRkTGF6aWx5KGtleSk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdh
dGNocG9pbnRzOjphZGRMYXppbHkoRGVzaXJlZEdsb2JhbFByb3BlcnR5JiYgcHJvcGVydHkpCit7
CisgICAgbV9nbG9iYWxQcm9wZXJ0aWVzLmFkZExhemlseShXVEZNb3ZlKHByb3BlcnR5KSk7Cit9
CisKIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKQEAgLTE0NSwxNCAr
MTUxLDI0IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6
OnJlYWxseUFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tbW9uRGF0YSYgY29tbW9uRGF0YSkK
K3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IERlc2lyZWRJZGVudGlmaWVycyYgaWRlbnRpZmllcnMsIENvbW1vbkRhdGEqIGNvbW1vbkRhdGEp
CiB7Ci0gICAgbV9zZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwotICAgIG1f
aW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKLSAgICBtX3N5bWJv
bFRhYmxlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKLSAgICBtX2Z1bmN0aW9u
RXhlY3V0YWJsZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7Ci0gICAgbV9idWZm
ZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKLSAgICBtX2FkYXB0aXZl
U3RydWN0dXJlU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBXYXRj
aHBvaW50Q29sbGVjdG9yIGNvbGxlY3RvcjsKKworICAgIGF1dG8gcmVhbGx5QWRkID0gWyZdKCkg
eworICAgICAgICBtX3NldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29sbGVjdG9yKTsKKyAgICAg
ICAgbV9pbmxpbmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbGxlY3Rvcik7CisgICAgICAg
IG1fc3ltYm9sVGFibGVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbGxlY3Rvcik7CisgICAgICAg
IG1fZnVuY3Rpb25FeGVjdXRhYmxlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb2xsZWN0b3IpOwor
ICAgICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbGxlY3Rvcik7Cisg
ICAgICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbGxl
Y3Rvcik7CisgICAgICAgIG1fZ2xvYmFsUHJvcGVydGllcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBp
ZGVudGlmaWVycywgY29sbGVjdG9yKTsKKyAgICB9OworICAgIHJlYWxseUFkZCgpOworICAgIGNv
bGxlY3Rvci5tYXRlcmlhbGl6ZSgpOworCisgICAgcmVhbGx5QWRkKCk7CisgICAgY29sbGVjdG9y
LmZpbmFsaXplKGNvZGVCbG9jaywgKmNvbW1vbkRhdGEpOwogfQogCiBib29sIERlc2lyZWRXYXRj
aHBvaW50czo6YXJlU3RpbGxWYWxpZCgpIGNvbnN0CkBAIC0xNjUsNiArMTgxLDExIEBAIGJvb2wg
RGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkgY29uc3QKICAgICAgICAgJiYgbV9h
ZGFwdGl2ZVN0cnVjdHVyZVNldHMuYXJlU3RpbGxWYWxpZCgpOwogfQogCitib29sIERlc2lyZWRX
YXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZE9uTWFpblRocmVhZChWTSYgdm0sIERlc2lyZWRJZGVu
dGlmaWVycyYgaWRlbnRpZmllcnMpCit7CisgICAgcmV0dXJuIG1fZ2xvYmFsUHJvcGVydGllcy5p
c1N0aWxsVmFsaWRPbk1haW5UaHJlYWQodm0sIGlkZW50aWZpZXJzKTsKK30KKwogdm9pZCBEZXNp
cmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRl
eHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgUHJlZml4IG5vUHJlZml4KFByZWZpeDo6Tm9IZWFk
ZXIpOwpAQCAtMTc4LDYgKzE5OSwxNCBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6ZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgYwogICAgIG91
dC5wcmludChwcmVmaXgsICIgICAgT2JqZWN0IHByb3BlcnR5IGNvbmRpdGlvbnM6ICIsIGluQ29u
dGV4dChtX2FkYXB0aXZlU3RydWN0dXJlU2V0cywgY29udGV4dCksICJcbiIpOwogfQogCit2b2lk
IFdhdGNocG9pbnRDb2xsZWN0b3I6OmZpbmFsaXplKENvZGVCbG9jayogY29kZUJsb2NrLCBDb21t
b25EYXRhJiBjb21tb24pCit7CisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayk7CisgICAgY29tbW9uLm1fd2F0Y2hwb2ludHMgPSBXVEZNb3ZlKG1fd2F0Y2hw
b2ludHMpOworICAgIGNvbW1vbi5tX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHMgPSBXVEZN
b3ZlKG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cyk7CisgICAgY29tbW9uLm1fYWRhcHRp
dmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50cyA9IFdURk1vdmUobV9hZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAppbmRleCA1ZmJhZWJjNWY1OTY5
MWQzOWE3NjM4MDJhYWU2ZmRhMWU3NzcwMjE5Li5kOGM3MWU1ZjdiMTEzOWQ2MzljNWMxYzgzNWNl
Nzg2N2MxNjMwMDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKyNpbmNsdWRlICJERkdEZXNpcmVkR2xvYmFs
UHJvcGVydGllcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb24u
aCIKQEAgLTQxLDE2ICs0Miw3NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBj
bGFzcyBHcmFwaDsKIHN0cnVjdCBQcmVmaXg7CiAKK2VudW0gY2xhc3MgV2F0Y2hwb2ludFJlZ2lz
dHJhdGlvbk1vZGUgOiB1aW50OF90IHsgQ29sbGVjdCwgQWRkIH07CitjbGFzcyBXYXRjaHBvaW50
Q29sbGVjdG9yIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXYXRjaHBvaW50Q29s
bGVjdG9yKTsKK3B1YmxpYzoKKyAgICBXYXRjaHBvaW50Q29sbGVjdG9yKCkgPSBkZWZhdWx0Owor
CisgICAgdm9pZCBtYXRlcmlhbGl6ZSgpCisgICAgeworICAgICAgICBtX3dhdGNocG9pbnRzID0g
Rml4ZWRWZWN0b3I8Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50PihtX3dhdGNocG9pbnRD
b3VudCk7CisgICAgICAgIG1fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50cyA9IEZpeGVkVmVj
dG9yPEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludD4obV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnRDb3VudCk7CisgICAgICAgIG1fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50cyA9IEZpeGVkVmVjdG9yPEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hw
b2ludD4obV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRDb3VudCk7Cisg
ICAgICAgIG1fbW9kZSA9IFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlOjpBZGQ7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGFkZFdhdGNocG9pbnQoY29u
c3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGlmIChtX21vZGUgPT0gV2F0Y2hwb2ludFJl
Z2lzdHJhdGlvbk1vZGU6OkFkZCkKKyAgICAgICAgICAgIGZ1bmMobV93YXRjaHBvaW50c1ttX3dh
dGNocG9pbnRJbmRleCsrXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICsrbV93YXRjaHBv
aW50Q291bnQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lk
IGFkZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsK
KyAgICAgICAgaWYgKG1fbW9kZSA9PSBXYXRjaHBvaW50UmVnaXN0cmF0aW9uTW9kZTo6QWRkKQor
ICAgICAgICAgICAgZnVuYyhtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHNbbV9hZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnRzSW5kZXgrK10pOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICArK21fYWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Q291bnQ7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICB2b2lkIGFkZEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgaWYgKG1f
bW9kZSA9PSBXYXRjaHBvaW50UmVnaXN0cmF0aW9uTW9kZTo6QWRkKQorICAgICAgICAgICAgZnVu
YyhtX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHNbbV9hZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzSW5kZXgrK10pOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICArK21fYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50Q291
bnQ7CisgICAgfQorCisgICAgdm9pZCBmaW5hbGl6ZShDb2RlQmxvY2sqLCBDb21tb25EYXRhJik7
CisKKyAgICBXYXRjaHBvaW50UmVnaXN0cmF0aW9uTW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9tb2RlOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV93YXRjaHBvaW50Q291bnQgeyAw
IH07CisgICAgdW5zaWduZWQgbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRDb3VudCB7IDAg
fTsKKyAgICB1bnNpZ25lZCBtX2FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2lu
dENvdW50IHsgMCB9OworCisgICAgdW5zaWduZWQgbV93YXRjaHBvaW50SW5kZXggeyAwIH07Cisg
ICAgdW5zaWduZWQgbV9hZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnRzSW5kZXggeyAwIH07Cisg
ICAgdW5zaWduZWQgbV9hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRzSW5k
ZXggeyAwIH07CisKKyAgICBGaXhlZFZlY3RvcjxDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9p
bnQ+IG1fd2F0Y2hwb2ludHM7CisgICAgRml4ZWRWZWN0b3I8QWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50PiBtX2FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludHM7CisgICAgRml4ZWRWZWN0b3I8
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50PiBtX2FkYXB0aXZlSW5mZXJy
ZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludHM7CisgICAgV2F0Y2hwb2ludFJlZ2lzdHJhdGlvbk1v
ZGUgbV9tb2RlIHsgV2F0Y2hwb2ludFJlZ2lzdHJhdGlvbk1vZGU6OkNvbGxlY3QgfTsKK307CisK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgU2V0UG9pbnRlckFkYXB0b3IgewotICAgIHN0
YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgVCBzZXQsIENvbW1vbkRhdGEmIGNv
bW1vbikKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFQgc2V0LCBX
YXRjaHBvaW50Q29sbGVjdG9yJiBjb2xsZWN0b3IpCiAgICAgewotICAgICAgICBDb2RlQmxvY2tK
ZXR0aXNvbmluZ1dhdGNocG9pbnQqIHdhdGNocG9pbnQgPSBudWxscHRyOwotICAgICAgICB7Ci0g
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
LSAgICAgICAgICAgIHdhdGNocG9pbnQgPSBjb21tb24ud2F0Y2hwb2ludHMuYWRkKGNvZGVCbG9j
ayk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNldC0+YWRkKFdURk1vdmUod2F0Y2hwb2lu
dCkpOworICAgICAgICBjb2xsZWN0b3IuYWRkV2F0Y2hwb2ludChbJl0oQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50JiB3YXRjaHBvaW50KSB7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAg
ICAgICAgICAgICAgd2F0Y2hwb2ludC5pbml0aWFsaXplKGNvZGVCbG9jayk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBzZXQtPmFkZCgmd2F0Y2hwb2ludCk7CisgICAgICAgIH0pOwogICAg
IH0KICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoVCBzZXQpCiAgICAgewpAQCAt
NjMsNyArMTI1LDcgQEAgc3RydWN0IFNldFBvaW50ZXJBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBT
eW1ib2xUYWJsZUFkYXB0b3IgewotICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBTeW1i
b2xUYWJsZSosIENvbW1vbkRhdGEmKTsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwg
U3ltYm9sVGFibGUqLCBXYXRjaHBvaW50Q29sbGVjdG9yJik7CiAgICAgc3RhdGljIGJvb2wgaGFz
QmVlbkludmFsaWRhdGVkKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKICAgICB7CiAgICAgICAg
IHJldHVybiBzeW1ib2xUYWJsZS0+c2luZ2xldG9uKCkuaGFzQmVlbkludmFsaWRhdGVkKCk7CkBA
IC03NSw3ICsxMzcsNyBAQCBzdHJ1Y3QgU3ltYm9sVGFibGVBZGFwdG9yIHsKIH07CiAKIHN0cnVj
dCBGdW5jdGlvbkV4ZWN1dGFibGVBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJs
b2NrKiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyB2b2lk
IGFkZChDb2RlQmxvY2sqLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBXYXRjaHBvaW50Q29sbGVjdG9y
Jik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSkKICAgICB7CiAgICAgICAgIHJldHVybiBleGVjdXRhYmxlLT5zaW5nbGV0
b24oKS5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKQEAgLTg3LDcgKzE0OSw3IEBAIHN0cnVjdCBGdW5j
dGlvbkV4ZWN1dGFibGVBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRj
aHBvaW50QWRhcHRvciB7Ci0gICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlC
dWZmZXJWaWV3KiwgQ29tbW9uRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sq
LCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnRDb2xsZWN0b3ImKTsKICAgICBzdGF0aWMg
Ym9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAgewog
ICAgICAgICByZXR1cm4gIXZpZXctPmxlbmd0aCgpOwpAQCAtOTksNyArMTYxLDcgQEAgc3RydWN0
IEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yIHsKIH07CiAKIHN0cnVjdCBBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnRBZGFwdG9yIHsKLSAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJs
b2NrKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mLCBDb21tb25EYXRhJik7CisgICAg
c3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
JiwgV2F0Y2hwb2ludENvbGxlY3RvciYpOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlk
YXRlZChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogICAgIHsKICAgICAgICAg
cmV0dXJuICFrZXkuaXNXYXRjaGFibGUoKTsKQEAgLTEyNywxNCArMTg5LDE2IEBAIGNsYXNzIEdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHMgewogICAgICAgICBtX3NldHMuYWRkKHNldCk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBDb21tb25E
YXRhJiBjb21tb24pCisgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFdh
dGNocG9pbnRDb2xsZWN0b3ImIGNvbGxlY3RvcikKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtX3JlYWxseUFkZGVkKTsKKyAgICAgICAgaWYgKGNvbGxlY3Rvci5tb2RlKCkgPT0gV2F0
Y2hwb2ludFJlZ2lzdHJhdGlvbk1vZGU6OkFkZCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX3JlYWxseUFkZGVkKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoYXV0byYgc2V0IDogbV9z
ZXRzKQotICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb21tb24pOwor
ICAgICAgICAgICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgc2V0LCBjb2xsZWN0b3IpOwogICAg
ICAgICAKLSAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CisgICAgICAgIGlmIChjb2xsZWN0
b3IubW9kZSgpID09IFdhdGNocG9pbnRSZWdpc3RyYXRpb25Nb2RlOjpBZGQpCisgICAgICAgICAg
ICBtX3JlYWxseUFkZGVkID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBhcmVTdGlsbFZh
bGlkKCkgY29uc3QKQEAgLTE4MCwxMiArMjQ0LDE1IEBAIGNsYXNzIERlc2lyZWRXYXRjaHBvaW50
cyB7CiAgICAgLy8gSXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkb24ndCBjYWxsIHRoaXMgZGly
ZWN0bHkuIFVzZSBHcmFwaDo6d2F0Y2hDb25kaXRpb24oKSwgd2hpY2ggZG9lcwogICAgIC8vIHRo
ZSByZXF1aXJlZCBHQyBtYWdpYyBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgYm9va2tlZXBpbmcuCiAg
ICAgdm9pZCBhZGRMYXppbHkoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKKworICAg
IHZvaWQgYWRkTGF6aWx5KERlc2lyZWRHbG9iYWxQcm9wZXJ0eSYmKTsKICAgICAKICAgICBib29s
IGNvbnNpZGVyKFN0cnVjdHVyZSopOwogICAgIAotICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9j
ayosIENvbW1vbkRhdGEmKTsKKyAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBEZXNpcmVk
SWRlbnRpZmllcnMmLCBDb21tb25EYXRhKik7CiAgICAgCiAgICAgYm9vbCBhcmVTdGlsbFZhbGlk
KCkgY29uc3Q7CisgICAgYm9vbCBhcmVTdGlsbFZhbGlkT25NYWluVGhyZWFkKFZNJiwgRGVzaXJl
ZElkZW50aWZpZXJzJik7CiAgICAgCiAgICAgYm9vbCBpc1dhdGNoZWQoV2F0Y2hwb2ludFNldCog
c2V0KQogICAgIHsKQEAgLTIyMCw2ICsyODcsNyBAQCBjbGFzcyBEZXNpcmVkV2F0Y2hwb2ludHMg
ewogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8RnVuY3Rpb25FeGVjdXRhYmxlKiwgRnVu
Y3Rpb25FeGVjdXRhYmxlQWRhcHRvcj4gbV9mdW5jdGlvbkV4ZWN1dGFibGVzOwogICAgIEdlbmVy
aWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcqLCBBcnJheUJ1ZmZlclZpZXdX
YXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNo
cG9pbnRzPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnRBZGFwdG9yPiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0czsKKyAgICBEZXNpcmVkR2xvYmFsUHJv
cGVydGllcyBtX2dsb2JhbFByb3BlcnRpZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IDM2ODA2Zjk3ZGRl
ZjgxMzQxNWVhMzZiNTdiMDM2MzgyYWM3ZmRjMDIuLjI1YWI5YzMzOTUxZjhlYjk5YjUwZDFjN2Uw
YTE0NGM4NzgyZDZmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBA
IC0xMTA0LDcgKzExMDQsNyBAQCBib29sIEdyYXBoOjp3YXRjaEdsb2JhbFByb3BlcnR5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGlkZW50aWZpZQogICAgICAgICBpZiAo
IXdhdGNocG9pbnQtPmlzU3RpbGxWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KLSAgICBnbG9iYWxQcm9wZXJ0aWVzKCkuYWRkTGF6aWx5KERlc2lyZWRHbG9iYWxQcm9w
ZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICB3YXRjaHBvaW50cygp
LmFkZExhemlseShEZXNpcmVkR2xvYmFsUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZGVudGlmaWVy
TnVtYmVyKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAppbmRleCA0Y2YzNmNmMjYxZGNjOTk0NWU3M2Q0MjJlYmU1OTljOGFiZjUyOTk3Li4x
YTdiZGQyOTAzMmMwOTZhMGQwYzdkMDY0OTU1ZjZiZGU2NWRlNjI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCkBAIC04MzUsNyArODM1LDYgQEAgY2xhc3MgR3JhcGggZmluYWwg
OiBwdWJsaWMgdmlydHVhbCBTY2FubmFibGUgewogCiAgICAgRGVzaXJlZElkZW50aWZpZXJzJiBp
ZGVudGlmaWVycygpIHsgcmV0dXJuIG1fcGxhbi5pZGVudGlmaWVycygpOyB9CiAgICAgRGVzaXJl
ZFdhdGNocG9pbnRzJiB3YXRjaHBvaW50cygpIHsgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50cygp
OyB9Ci0gICAgRGVzaXJlZEdsb2JhbFByb3BlcnRpZXMmIGdsb2JhbFByb3BlcnRpZXMoKSB7IHJl
dHVybiBtX3BsYW4uZ2xvYmFsUHJvcGVydGllcygpOyB9CiAKICAgICAvLyBSZXR1cm5zIGZhbHNl
IGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbnZhbGlkIG9yIHVud2F0Y2hhYmxlLiBJZiB0aGlzIGlz
IGEgUHJlc2VuY2UgY29uZGl0aW9uLAogICAgIC8vIHRoaXMgYWxzbyBtYWtlcyBpdCBjaGVhcCB0
byBxdWVyeSBpZiB0aGUgY29uZGl0aW9uIGhvbGRzLiBBbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUg
R0Mga25vd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCmluZGV4IGM1NzJhNThm
Y2FiYzRlYWZmMTQzZDFiNGY4ZDQxYjIwNWMyYWVlNjkuLjM4NmY1ZmI4ZmQ0ODI3NmFlNjU5ZGI2
YThjMmM2ZDI2NDAwMTY3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcApA
QCAtNTcxLDExICs1NzEsMTAgQEAgYm9vbCBQbGFuOjppc1N0aWxsVmFsaWQoKQogdm9pZCBQbGFu
OjpyZWFsbHlBZGQoQ29tbW9uRGF0YSogY29tbW9uRGF0YSkKIHsKICAgICBBU1NFUlQobV92bS0+
aGVhcC5pc0RlZmVycmVkKCkpOwotICAgIG1fd2F0Y2hwb2ludHMucmVhbGx5QWRkKG1fY29kZUJs
b2NrLCAqY29tbW9uRGF0YSk7CiAgICAgbV9pZGVudGlmaWVycy5yZWFsbHlBZGQoKm1fdm0sIGNv
bW1vbkRhdGEpOwogICAgIG1fd2Vha1JlZmVyZW5jZXMucmVhbGx5QWRkKCptX3ZtLCBjb21tb25E
YXRhKTsKICAgICBtX3RyYW5zaXRpb25zLnJlYWxseUFkZCgqbV92bSwgY29tbW9uRGF0YSk7Ci0g
ICAgbV9nbG9iYWxQcm9wZXJ0aWVzLnJlYWxseUFkZChtX2NvZGVCbG9jaywgbV9pZGVudGlmaWVy
cywgKmNvbW1vbkRhdGEpOworICAgIG1fd2F0Y2hwb2ludHMucmVhbGx5QWRkKG1fY29kZUJsb2Nr
LCBtX2lkZW50aWZpZXJzLCBjb21tb25EYXRhKTsKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIGNvbW1vbkRhdGEt
PnJlY29yZGVkU3RhdHVzZXMgPSBXVEZNb3ZlKG1fcmVjb3JkZWRTdGF0dXNlcyk7CkBAIC01OTUs
NyArNTk0LDcgQEAgdm9pZCBQbGFuOjpub3RpZnlSZWFkeSgpCiAKIGJvb2wgUGxhbjo6aXNTdGls
bFZhbGlkT25NYWluVGhyZWFkKCkKIHsKLSAgICByZXR1cm4gbV9nbG9iYWxQcm9wZXJ0aWVzLmlz
U3RpbGxWYWxpZE9uTWFpblRocmVhZCgqbV92bSwgbV9pZGVudGlmaWVycyk7CisgICAgcmV0dXJu
IG1fd2F0Y2hwb2ludHMuYXJlU3RpbGxWYWxpZE9uTWFpblRocmVhZCgqbV92bSwgbV9pZGVudGlm
aWVycyk7CiB9CiAKIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlm
eWluZ0NhbGxiYWNrKCkKQEAgLTc1Nyw3ICs3NTYsNiBAQCB2b2lkIFBsYW46OmNhbmNlbCgpCiAg
ICAgbV9pbmxpbmVDYWxsRnJhbWVzID0gbnVsbHB0cjsKICAgICBtX3dhdGNocG9pbnRzID0gRGVz
aXJlZFdhdGNocG9pbnRzKCk7CiAgICAgbV9pZGVudGlmaWVycyA9IERlc2lyZWRJZGVudGlmaWVy
cygpOwotICAgIG1fZ2xvYmFsUHJvcGVydGllcyA9IERlc2lyZWRHbG9iYWxQcm9wZXJ0aWVzKCk7
CiAgICAgbV93ZWFrUmVmZXJlbmNlcyA9IERlc2lyZWRXZWFrUmVmZXJlbmNlcygpOwogICAgIG1f
dHJhbnNpdGlvbnMgPSBEZXNpcmVkVHJhbnNpdGlvbnMoKTsKICAgICBtX2NhbGxiYWNrID0gbnVs
bHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKaW5kZXggMTMwOGZmNDg4MjMwYmU2
Mjk3ZjgxMTFlZjI2MDA0YzJhYmQ0YTRhYy4uMTcyYTcyZDljYjdiNTM3MTIzMDAyMjY0ZDM1MjA2
NWM0NzUzOGJmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKQEAgLTEwMCw3ICsx
MDAsNiBAQCBjbGFzcyBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsK
ICAgICBEZXNpcmVkSWRlbnRpZmllcnMmIGlkZW50aWZpZXJzKCkgeyByZXR1cm4gbV9pZGVudGlm
aWVyczsgfQogICAgIERlc2lyZWRXZWFrUmVmZXJlbmNlcyYgd2Vha1JlZmVyZW5jZXMoKSB7IHJl
dHVybiBtX3dlYWtSZWZlcmVuY2VzOyB9CiAgICAgRGVzaXJlZFRyYW5zaXRpb25zJiB0cmFuc2l0
aW9ucygpIHsgcmV0dXJuIG1fdHJhbnNpdGlvbnM7IH0KLSAgICBEZXNpcmVkR2xvYmFsUHJvcGVy
dGllcyYgZ2xvYmFsUHJvcGVydGllcygpIHsgcmV0dXJuIG1fZ2xvYmFsUHJvcGVydGllczsgfQog
ICAgIFJlY29yZGVkU3RhdHVzZXMmIHJlY29yZGVkU3RhdHVzZXMoKSB7IHJldHVybiBtX3JlY29y
ZGVkU3RhdHVzZXM7IH0KIAogICAgIGJvb2wgd2lsbFRyeVRvVGllclVwKCkgY29uc3QgeyByZXR1
cm4gbV93aWxsVHJ5VG9UaWVyVXA7IH0KQEAgLTE1Niw3ICsxNTUsNiBAQCBjbGFzcyBQbGFuIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBEZXNpcmVkSWRlbnRpZmll
cnMgbV9pZGVudGlmaWVyczsKICAgICBEZXNpcmVkV2Vha1JlZmVyZW5jZXMgbV93ZWFrUmVmZXJl
bmNlczsKICAgICBEZXNpcmVkVHJhbnNpdGlvbnMgbV90cmFuc2l0aW9uczsKLSAgICBEZXNpcmVk
R2xvYmFsUHJvcGVydGllcyBtX2dsb2JhbFByb3BlcnRpZXM7CiAgICAgUmVjb3JkZWRTdGF0dXNl
cyBtX3JlY29yZGVkU3RhdHVzZXM7CiAKICAgICBIYXNoTWFwPEJ5dGVjb2RlSW5kZXgsIEZpeGVk
VmVjdG9yPEJ5dGVjb2RlSW5kZXg+PiBtX3RpZXJVcEluTG9vcEhpZXJhcmNoeTsK
</data>
<flag name="review"
          id="446578"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>