<?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>227034</bug_id>
          
          <creation_ts>2021-06-15 10:27:15 -0700</creation_ts>
          <short_desc>Use more SQL transactions in ResourceLoadStatisticsDatabaseStore</short_desc>
          <delta_ts>2021-06-15 17:57:18 -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>WebKit2</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1769858</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 10:27:15 -0700</bug_when>
    <thetext>Use more SQL transactions in ResourceLoadStatisticsDatabaseStore, for performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769862</commentid>
    <comment_count>1</comment_count>
      <attachid>431454</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 10:30:06 -0700</bug_when>
    <thetext>Created attachment 431454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769872</commentid>
    <comment_count>2</comment_count>
      <attachid>431457</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 11:03:12 -0700</bug_when>
    <thetext>Created attachment 431457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769913</commentid>
    <comment_count>3</comment_count>
      <attachid>431465</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 12:21:47 -0700</bug_when>
    <thetext>Created attachment 431465
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769921</commentid>
    <comment_count>4</comment_count>
      <attachid>431468</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 12:54:14 -0700</bug_when>
    <thetext>Created attachment 431468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769926</commentid>
    <comment_count>5</comment_count>
      <attachid>431470</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 13:01:29 -0700</bug_when>
    <thetext>Created attachment 431470
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769938</commentid>
    <comment_count>6</comment_count>
      <attachid>431474</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 13:30:44 -0700</bug_when>
    <thetext>Created attachment 431474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769939</commentid>
    <comment_count>7</comment_count>
      <attachid>431475</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 13:31:54 -0700</bug_when>
    <thetext>Created attachment 431475
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769987</commentid>
    <comment_count>8</comment_count>
      <attachid>431475</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-06-15 15:49:09 -0700</bug_when>
    <thetext>Comment on attachment 431475
Patch

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

I think this is a good idea. I&apos;m curious about the pattern. Do we want all functions that interact with the database to use transactions, or is it as-needed for now to improve performance?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:636
&gt; +        if (!transaction.inProgress())

It doesn&apos;t look like the code does anything if you call begin() on a transaction already in progress, you could probably remove this if you wanted.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1039
&gt; +String ResourceLoadStatisticsDatabaseStore::ensureAndMakeDomainList(const SQLiteTransaction&amp;, const HashSet&lt;RegistrableDomain&gt;&amp; domainList)

Did you mean to have ASSERT(m_database.transactionInProgress()); here? Otherwise I am not sure why we should include SQLiteTransaction in this function, unless it is to avoid unused parameter errors in release builds, but in that case I think it can be done in insertDomainRelationshipList.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1158
&gt;          updateDataRecordsRemoved(other.registrableDomain, other.dataRecordsRemoved);

Is there a pattern for which functions ASSERT transactions in progress? I notice a few functions in here that don&apos;t have them, like updateDataRecordsRemoved and setGrandfathered.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1457
&gt; +                transaction.begin();

Ditto, I think you can just call transaction.begin() with no consequences if it&apos;s already in progress.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1761
&gt; +                if (!transaction.inProgress())

Ditto.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1783
&gt; +            if (!transaction.inProgress())

Ditto.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2248
&gt;      auto result = ensureResourceStatisticsForRegistrableDomain(subresourceDomain);

I wonder if we want to pass transaction to ensureResourceStatisticsForRegistrableDomain and have a check in there for a transaction in progress in the function to match your existing pattern?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:3172
&gt;      updateOperatingDatesParameters();

updateOperatingDatesParameters() also interacts with the database, maybe we should move transaction.commit(); below that and pass transaction into the updateOperatingDatesParameters() function.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:3229
&gt;      updateOperatingDatesParameters();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769994</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 16:02:05 -0700</bug_when>
    <thetext>(In reply to katherine_cheney from comment #8)
&gt; Comment on attachment 431475 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=431475&amp;action=review
&gt; 
&gt; I think this is a good idea. I&apos;m curious about the pattern. Do we want all
&gt; functions that interact with the database to use transactions, or is it
&gt; as-needed for now to improve performance?

The pattern is that you should be using a transaction if you&apos;re doing several consecutive *write* statements.

&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:636
&gt; &gt; +        if (!transaction.inProgress())
&gt; 
&gt; It doesn&apos;t look like the code does anything if you call begin() on a
&gt; transaction already in progress, you could probably remove this if you
&gt; wanted.

I know but I felt this looked clearer and repeatedly calling begin(). Also transaction.inProgress() is very cheap since it is inlined.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1039
&gt; &gt; +String ResourceLoadStatisticsDatabaseStore::ensureAndMakeDomainList(const SQLiteTransaction&amp;, const HashSet&lt;RegistrableDomain&gt;&amp; domainList)
&gt; 
&gt; Did you mean to have ASSERT(m_database.transactionInProgress()); here?
&gt; Otherwise I am not sure why we should include SQLiteTransaction in this
&gt; function, unless it is to avoid unused parameter errors in release builds,
&gt; but in that case I think it can be done in insertDomainRelationshipList.

Yes, we should likely ASSERT(m_database.transactionInProgress());. I&apos;ll add it.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1158
&gt; &gt;          updateDataRecordsRemoved(other.registrableDomain, other.dataRecordsRemoved);
&gt; 
&gt; Is there a pattern for which functions ASSERT transactions in progress? I
&gt; notice a few functions in here that don&apos;t have them, like
&gt; updateDataRecordsRemoved and setGrandfathered.

I&apos;ll double check those two. I usually ASSERT there is a transaction is in progress if more than one write statement happens in a function and the function doesn&apos;t start a transaction (because the caller already has one). In such cases, I also add a SQLiteTransaction parameter to make it clear the caller needs to start a transaction.

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1457
&gt; &gt; +                transaction.begin();
&gt; 
&gt; Ditto, I think you can just call transaction.begin() with no consequences if
&gt; it&apos;s already in progress.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1761
&gt; &gt; +                if (!transaction.inProgress())
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1783
&gt; &gt; +            if (!transaction.inProgress())
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2248
&gt; &gt;      auto result = ensureResourceStatisticsForRegistrableDomain(subresourceDomain);
&gt; 
&gt; I wonder if we want to pass transaction to
&gt; ensureResourceStatisticsForRegistrableDomain and have a check in there for a
&gt; transaction in progress in the function to match your existing pattern?

ensureResourceStatisticsForRegistrableDomain() only does a single write statement so it doesn&apos;t technically require a transaction. Also, some of the call sites are not writers but readers so they don&apos;t currently have a transaction (even after my patch).

&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:3172
&gt; &gt;      updateOperatingDatesParameters();
&gt; 
&gt; updateOperatingDatesParameters() also interacts with the database, maybe we
&gt; should move transaction.commit(); below that and pass transaction into the
&gt; updateOperatingDatesParameters() function.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:3229
&gt; &gt;      updateOperatingDatesParameters();
&gt; 
&gt; Ditto.

Ok, I&apos;ll double check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769996</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 16:07:00 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt; (In reply to katherine_cheney from comment #8)
&gt; &gt; Comment on attachment 431475 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=431475&amp;action=review
&gt; &gt; 
&gt; &gt; I think this is a good idea. I&apos;m curious about the pattern. Do we want all
&gt; &gt; functions that interact with the database to use transactions, or is it
&gt; &gt; as-needed for now to improve performance?
&gt; 
&gt; The pattern is that you should be using a transaction if you&apos;re doing
&gt; several consecutive *write* statements.
&gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:636
&gt; &gt; &gt; +        if (!transaction.inProgress())
&gt; &gt; 
&gt; &gt; It doesn&apos;t look like the code does anything if you call begin() on a
&gt; &gt; transaction already in progress, you could probably remove this if you
&gt; &gt; wanted.
&gt; 
&gt; I know but I felt this looked clearer and repeatedly calling begin(). Also
&gt; transaction.inProgress() is very cheap since it is inlined.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1039
&gt; &gt; &gt; +String ResourceLoadStatisticsDatabaseStore::ensureAndMakeDomainList(const SQLiteTransaction&amp;, const HashSet&lt;RegistrableDomain&gt;&amp; domainList)
&gt; &gt; 
&gt; &gt; Did you mean to have ASSERT(m_database.transactionInProgress()); here?
&gt; &gt; Otherwise I am not sure why we should include SQLiteTransaction in this
&gt; &gt; function, unless it is to avoid unused parameter errors in release builds,
&gt; &gt; but in that case I think it can be done in insertDomainRelationshipList.
&gt; 
&gt; Yes, we should likely ASSERT(m_database.transactionInProgress());. I&apos;ll add
&gt; it.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1158
&gt; &gt; &gt;          updateDataRecordsRemoved(other.registrableDomain, other.dataRecordsRemoved);
&gt; &gt; 
&gt; &gt; Is there a pattern for which functions ASSERT transactions in progress? I
&gt; &gt; notice a few functions in here that don&apos;t have them, like
&gt; &gt; updateDataRecordsRemoved and setGrandfathered.
&gt; 
&gt; I&apos;ll double check those two. I usually ASSERT there is a transaction is in
&gt; progress if more than one write statement happens in a function and the
&gt; function doesn&apos;t start a transaction (because the caller already has one).
&gt; In such cases, I also add a SQLiteTransaction parameter to make it clear the
&gt; caller needs to start a transaction.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1457
&gt; &gt; &gt; +                transaction.begin();
&gt; &gt; 
&gt; &gt; Ditto, I think you can just call transaction.begin() with no consequences if
&gt; &gt; it&apos;s already in progress.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1761
&gt; &gt; &gt; +                if (!transaction.inProgress())
&gt; &gt; 
&gt; &gt; Ditto.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1783
&gt; &gt; &gt; +            if (!transaction.inProgress())
&gt; &gt; 
&gt; &gt; Ditto.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2248
&gt; &gt; &gt;      auto result = ensureResourceStatisticsForRegistrableDomain(subresourceDomain);
&gt; &gt; 
&gt; &gt; I wonder if we want to pass transaction to
&gt; &gt; ensureResourceStatisticsForRegistrableDomain and have a check in there for a
&gt; &gt; transaction in progress in the function to match your existing pattern?
&gt; 
&gt; ensureResourceStatisticsForRegistrableDomain() only does a single write
&gt; statement so it doesn&apos;t technically require a transaction. Also, some of the
&gt; call sites are not writers but readers so they don&apos;t currently have a
&gt; transaction (even after my patch).
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:3172
&gt; &gt; &gt;      updateOperatingDatesParameters();
&gt; &gt; 
&gt; &gt; updateOperatingDatesParameters() also interacts with the database, maybe we
&gt; &gt; should move transaction.commit(); below that and pass transaction into the
&gt; &gt; updateOperatingDatesParameters() function.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:3229
&gt; &gt; &gt;      updateOperatingDatesParameters();
&gt; &gt; 
&gt; &gt; Ditto.
&gt; 
&gt; Ok, I&apos;ll double check.

updateOperatingDatesParameters() only seems to be doing SELECT statements, not write statements. That said, it probably doesn&apos;t hurt to include them in the transaction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769998</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 16:12:20 -0700</bug_when>
    <thetext>(In reply to katherine_cheney from comment #8)
&gt; Comment on attachment 431475 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=431475&amp;action=review
&gt; 
&gt; I think this is a good idea. I&apos;m curious about the pattern. Do we want all
&gt; functions that interact with the database to use transactions, or is it
&gt; as-needed for now to improve performance?
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:636
&gt; &gt; +        if (!transaction.inProgress())
&gt; 
&gt; It doesn&apos;t look like the code does anything if you call begin() on a
&gt; transaction already in progress, you could probably remove this if you
&gt; wanted.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1039
&gt; &gt; +String ResourceLoadStatisticsDatabaseStore::ensureAndMakeDomainList(const SQLiteTransaction&amp;, const HashSet&lt;RegistrableDomain&gt;&amp; domainList)
&gt; 
&gt; Did you mean to have ASSERT(m_database.transactionInProgress()); here?
&gt; Otherwise I am not sure why we should include SQLiteTransaction in this
&gt; function, unless it is to avoid unused parameter errors in release builds,
&gt; but in that case I think it can be done in insertDomainRelationshipList.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1158
&gt; &gt;          updateDataRecordsRemoved(other.registrableDomain, other.dataRecordsRemoved);
&gt; 
&gt; Is there a pattern for which functions ASSERT transactions in progress? I
&gt; notice a few functions in here that don&apos;t have them, like
&gt; updateDataRecordsRemoved and setGrandfathered.

updateDataRecordsRemoved has a single write statement, therefore it doesn&apos;t require a transaction and I don&apos;t think we should add a transaction parameter. While it wouldn&apos;t hurt currently since there is a single call site and that call site does have a transaction, you could imagine another call site that calls it without a transaction and there would be no perf issue since there is a single write statement.

setGrandfathered() definitely needs a transaction parameter though, I&apos;ll add it.

&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1457
&gt; &gt; +                transaction.begin();
&gt; 
&gt; Ditto, I think you can just call transaction.begin() with no consequences if
&gt; it&apos;s already in progress.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1761
&gt; &gt; +                if (!transaction.inProgress())
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1783
&gt; &gt; +            if (!transaction.inProgress())
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:2248
&gt; &gt;      auto result = ensureResourceStatisticsForRegistrableDomain(subresourceDomain);
&gt; 
&gt; I wonder if we want to pass transaction to
&gt; ensureResourceStatisticsForRegistrableDomain and have a check in there for a
&gt; transaction in progress in the function to match your existing pattern?
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:3172
&gt; &gt;      updateOperatingDatesParameters();
&gt; 
&gt; updateOperatingDatesParameters() also interacts with the database, maybe we
&gt; should move transaction.commit(); below that and pass transaction into the
&gt; updateOperatingDatesParameters() function.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:3229
&gt; &gt;      updateOperatingDatesParameters();
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770001</commentid>
    <comment_count>12</comment_count>
      <attachid>431491</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 16:16:29 -0700</bug_when>
    <thetext>Created attachment 431491
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770003</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-15 16:19:02 -0700</bug_when>
    <thetext>I still check inProgress() before calling begin() in a few cases where we don&apos;t unconditionally call begin(). I feel it is clearer as I commented earlier but if you feel strongly about it, let me know and I&apos;ll make the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770004</commentid>
    <comment_count>14</comment_count>
      <attachid>431491</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-06-15 16:22:05 -0700</bug_when>
    <thetext>Comment on attachment 431491
Patch

I don&apos;t feel strongly, I think your logic makes sense. Thanks for explaining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770041</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-15 17:56:11 -0700</bug_when>
    <thetext>Committed r278916 (238847@main): &lt;https://commits.webkit.org/238847@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 431491.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770042</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-15 17:57:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/79372370&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431454</attachid>
            <date>2021-06-15 10:30:06 -0700</date>
            <delta_ts>2021-06-15 11:03:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227034-20210615103005.patch</filename>
            <type>text/plain</type>
            <size>8077</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDY1ZGExNTJjZGM0YjZhMGQ3
ZDU5OGFmZWFkMDE0MDI1OWI5NjVhMjAuLjQzMDdlM2I5MDdlYThjZDg0NmQ1NGQ4YjExMWJmZjdm
Zjc0ZGMwODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDYtMTUgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLCBmb3IgcGVyZm9ybWFu
Y2UuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNz
aW5nVGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0
aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRF
eHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisKIDIwMjEtMDYtMTUgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBIYXJkZW4gV2ViQXV0aG4g
cHJvY2VzcyBieSByZXN0cmljdGluZyB0byBicm93c2VyLWVudGl0bGVkIHByb2Nlc3NlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAK
aW5kZXggODQzYWNkY2I0YTRmNDQ5NzQ5MDJjM2NmYjVmMzcwMjJmYTg2NjgwMy4uN2UwZTI2ZTE4
MjU1NmE3MWM5YzU0ZTA5MjM4ZjA3Y2FjNTY1YTExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC02MjcsMTAgKzYyNywx
MyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5n
Q29sdW1uc1RvVGFibGUoU3RyaW5nJiYgdGFibAogewogICAgIEFTU0VSVChleGlzdGluZ0NvbHVt
bnMuc2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5zaXplKCkpOwogCisgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CiAgICAgZm9yIChhdXRvJiBjb2x1bW4gOiBl
eHBlY3RlZENvbHVtbnMpIHsKICAgICAgICAgaWYgKGV4aXN0aW5nQ29sdW1ucy5jb250YWlucyhj
b2x1bW4pKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAorICAgICAgICBpZiAoIXRy
YW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7
CiAgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xv
dyhtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgQUREIENPTFVNTiAiLCBj
b2x1bW4pKTsKICAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKICAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50
IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC02NDQs
NiArNjQ3LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRk
TWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmwKICAgICAgICAgfQogICAgICAgICBz
dGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQog
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29s
dW1uc0lmTmVjZXNzYXJ5KCkKQEAgLTcwMCw2ICs3MDQsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nVGFibGVzSWZOZWNlc3NhcnkoKQogICAg
IGlmICghbWlzc2luZ1RhYmxlcykKICAgICAgICAgcmV0dXJuOwogCisgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsK
ICAgICBmb3IgKGF1dG8mIHRhYmxlIDogKm1pc3NpbmdUYWJsZXMpIHsKICAgICAgICAgYXV0byBj
cmVhdGVUYWJsZVF1ZXJ5ID0gZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmdldCh0YWJs
ZSkuZmlyc3Q7CiAgICAgICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZFNsb3coY3Jl
YXRlVGFibGVRdWVyeSkpCkBAIC03MTEsNiArNzE3LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCkKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgdHJh
bnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpCkBAIC0xMDkwLDYgKzEw
OTcsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0
ZUZyb21NZW1vcnlTdG9yZShjb25zdCBSZXNvdXJjZQogICAgIGlmICghaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byYgc3RhdGlzdGljc01h
cCA9IG1lbW9yeVN0b3JlLmRhdGEoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRpc3RpYyA6
IHN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKICAgICAgICAgYXV0byByZXN1bHQgPSBpbnNlcnRP
YnNlcnZlZERvbWFpbihzdGF0aXN0aWMpOwpAQCAtMTEwNCw2ICsxMTE0LDggQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUo
Y29uc3QgUmVzb3VyY2UKICAgICAvLyBjYW4gcmVmZXIgdG8gdGhlIE9ic2VydmVkRG9tYWluIHRh
YmxlIGVudHJpZXMKICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3NNYXAudmFs
dWVzKCkpCiAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKKwor
ICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjptZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIGN1cnJlbnQs
IGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIG90aGVyKQpAQCAtMTE2Miw2ICsxMTc0LDEx
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlz
dGljKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+JiYgc3RhdGlzdGljcykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAg
ICBpZiAoc3RhdGlzdGljcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJl
Z2luKCk7CiAKICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpIHsKICAgICAg
ICAgaWYgKCFkb21haW5JRChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pKSB7CkBAIC0xMTc5
LDYgKzExOTYsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
ZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YQogICAgIC8vIGNhbiByZWZlciB0
byB0aGUgT2JzZXJ2ZWREb21haW4gdGFibGUgZW50cmllcy4KICAgICBmb3IgKGF1dG8mIHN0YXRp
c3RpYyA6IHN0YXRpc3RpY3MpCiAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3Rh
dGlzdGljKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiBzdGF0aWMgQVNDSUlM
aXRlcmFsIGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGluZygpCkBAIC0xNDE5LDE1ICsxNDM4LDIy
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlS
ZXNvdXJjZXMoKQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgYXV0byBu
b3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzID0gZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMo
KTsKKyAgICBpZiAobm90VmVyeVByZXZhbGVudFJlc291cmNlcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBub3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChzaG91bGRTa2lwKHJlc291cmNlU3RhdGlz
dGljLnJlZ2lzdHJhYmxlRG9tYWluKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IGF1dG8gbmV3UHJldmFsZW5jZSA9IGNsYXNzaWZpZXIoKS5jYWxjdWxhdGVSZXNvdXJjZVByZXZh
bGVuY2UocmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0Nv
dW50LCByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQs
IHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVz
b3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0
YXRpc3RpYy5wcmV2YWxlbmNlKTsKLSAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVzb3Vy
Y2VTdGF0aXN0aWMucHJldmFsZW5jZSkKKyAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVz
b3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSkgeworICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlv
bi5pblByb2dyZXNzKCkpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAg
ICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJh
YmxlRG9tYWluLCBuZXdQcmV2YWxlbmNlKTsKKyAgICAgICAgfQogICAgIH0KKyAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKQpAQCAtMTYyNCw3ICsxNjUwLDExIEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFj
Y2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0
cmFibGVEb21haW4+JiBkb21haW5zKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCisgICAgU1FM
aXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24u
YmVnaW4oKTsKICAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogZG9tYWlucykgewog
ICAgICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKHJlZ2lzdHJhYmxlRG9tYWluKTsKICAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25k
KQpAQCAtMTYzNiw2ICsxNjY2LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2UKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFp
bGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJl
c291cmNlc0ZvckRlYnVnTW9kZSgpCkBAIC0zMDI2LDYgKzMwNTcsOCBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVz
dGluZyhjb25zdAogewogICAgIC8vIFBvcHVsYXRlIHRoZSBPcGVyYXRpbmcgRGF0ZXMgdGFibGUg
d2l0aCBlbm91Z2ggZGF5cyB0byByZXF1aXJlIHBydW5pbmcuCiAgICAgZG91YmxlIGRheXNBZ29J
blNlY29uZHMgPSAwOworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJh
c2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8PSBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNzZWQ7IGkrKykgewogICAgICAgICBkb3VibGUg
ZGF5c1RvU3VidHJhY3QgPSBTZWNvbmRzOjpmcm9tSG91cnMoMjQgKiBpKS52YWx1ZSgpOwogICAg
ICAgICBkYXlzQWdvSW5TZWNvbmRzID0gV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSAtIGRheXNUb1N1YnRyYWN0OwpAQCAtMzA0Miw2ICszMDc1LDcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3Rp
Y0ZvclRlc3RpbmcoY29uc3QKICAgICAgICAgfQogICAgICAgICBpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50LT5yZXNldCgpOwogICAgIH0KKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIAog
ICAgIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431457</attachid>
            <date>2021-06-15 11:03:12 -0700</date>
            <delta_ts>2021-06-15 12:21:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227034-20210615110311.patch</filename>
            <type>text/plain</type>
            <size>29946</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDY1ZGExNTJjZGM0YjZhMGQ3
ZDU5OGFmZWFkMDE0MDI1OWI5NjVhMjAuLjQzMDdlM2I5MDdlYThjZDg0NmQ1NGQ4YjExMWJmZjdm
Zjc0ZGMwODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDYtMTUgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLCBmb3IgcGVyZm9ybWFu
Y2UuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNz
aW5nVGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0
aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRF
eHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisKIDIwMjEtMDYtMTUgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBIYXJkZW4gV2ViQXV0aG4g
cHJvY2VzcyBieSByZXN0cmljdGluZyB0byBicm93c2VyLWVudGl0bGVkIHByb2Nlc3NlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAK
aW5kZXggODQzYWNkY2I0YTRmNDQ5NzQ5MDJjM2NmYjVmMzcwMjJmYTg2NjgwMy4uOTNhY2QxODUy
M2JkOTI3NTA3MTg4ZWMzZTk1N2IyZTdlNzIwODI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC02MjcsMTAgKzYyNywx
NCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5n
Q29sdW1uc1RvVGFibGUoU3RyaW5nJiYgdGFibAogewogICAgIEFTU0VSVChleGlzdGluZ0NvbHVt
bnMuc2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5zaXplKCkpOwogCisgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CiAgICAgZm9yIChhdXRvJiBjb2x1bW4gOiBl
eHBlY3RlZENvbHVtbnMpIHsKICAgICAgICAgaWYgKGV4aXN0aW5nQ29sdW1ucy5jb250YWlucyhj
b2x1bW4pKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAorICAgICAgICBpZiAoIXRy
YW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7
CisKICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRT
bG93KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIs
IGNvbHVtbikpOwogICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTY0
NCw2ICs2NDgsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjph
ZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoU3RyaW5nJiYgdGFibAogICAgICAgICB9CiAgICAgICAg
IHN0YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9
CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdD
b2x1bW5zSWZOZWNlc3NhcnkoKQpAQCAtNzAwLDYgKzcwNSw4IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdUYWJsZXNJZk5lY2Vzc2FyeSgpCiAg
ICAgaWYgKCFtaXNzaW5nVGFibGVzKQogICAgICAgICByZXR1cm47CiAKKyAgICBTUUxpdGVUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OwogICAgIGZvciAoYXV0byYgdGFibGUgOiAqbWlzc2luZ1RhYmxlcykgewogICAgICAgICBhdXRv
IGNyZWF0ZVRhYmxlUXVlcnkgPSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0KHRh
YmxlKS5maXJzdDsKICAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kU2xvdyhj
cmVhdGVUYWJsZVF1ZXJ5KSkKQEAgLTcxMSw2ICs3MTgsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nVGFibGVzSWZOZWNlc3NhcnkoKQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICB0
cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkKQEAgLTEwNzEsNiAr
MTA3OSw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3VyCiAgICAgaWYgKCFyZWdpc3RyYWJsZURv
bWFpbklEKQogICAgICAgICByZXR1cm47CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2Fj
dGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNR
dWVyeSwgbG9hZFN0YXRpc3RpY3Muc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLCBy
ZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOwogICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOwogICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50LCByZWdpc3Ry
YWJsZURvbWFpbklELnZhbHVlKCkpOwpAQCAtMTA4MSw2ICsxMDkyLDggQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhj
b25zdCBSZXNvdXIKICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CiAgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21RdWVyeSwg
bG9hZFN0YXRpc3RpY3MudG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tLCByZWdpc3RyYWJsZURv
bWFpbklELnZhbHVlKCkpOwogICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJh
bWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BGcmFtZUxv
YWRlZFRoaXJkUGFydHlTY3JpcHRzLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworCisg
ICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYgbWVtb3J5U3RvcmUpCkBAIC0xMDkwLDYgKzExMDMsOSBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21N
ZW1vcnlTdG9yZShjb25zdCBSZXNvdXJjZQogICAgIGlmICghaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsK
KyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byYgc3RhdGlzdGljc01hcCA9IG1l
bW9yeVN0b3JlLmRhdGEoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRp
c3RpY3NNYXAudmFsdWVzKCkpIHsKICAgICAgICAgYXV0byByZXN1bHQgPSBpbnNlcnRPYnNlcnZl
ZERvbWFpbihzdGF0aXN0aWMpOwpAQCAtMTEwNCw2ICsxMTIwLDggQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3Qg
UmVzb3VyY2UKICAgICAvLyBjYW4gcmVmZXIgdG8gdGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVu
dHJpZXMKICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3NNYXAudmFsdWVzKCkp
CiAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKKworICAgIHRy
YW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIGN1cnJlbnQsIGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIG90aGVyKQpAQCAtMTE2Miw2ICsxMTgwLDExIEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGljKGNv
bnN0IFJlc291cmNlTG9hZFN0YXRpCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjptZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYg
c3RhdGlzdGljcykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAo
c3RhdGlzdGljcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNRTGl0ZVRyYW5z
YWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7
CiAKICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpIHsKICAgICAgICAgaWYg
KCFkb21haW5JRChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pKSB7CkBAIC0xMTc5LDYgKzEy
MDIsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0
YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YQogICAgIC8vIGNhbiByZWZlciB0byB0aGUg
T2JzZXJ2ZWREb21haW4gdGFibGUgZW50cmllcy4KICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6
IHN0YXRpc3RpY3MpCiAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGlj
KTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiBzdGF0aWMgQVNDSUlMaXRlcmFs
IGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGluZygpCkBAIC0xNDE5LDE1ICsxNDQ0LDIyIEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlSZXNvdXJj
ZXMoKQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgYXV0byBub3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzID0gZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAg
ICBpZiAobm90VmVyeVByZXZhbGVudFJlc291cmNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAg
IGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
LnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChzaG91bGRTa2lwKHJlc291cmNlU3RhdGlzdGljLnJl
Z2lzdHJhYmxlRG9tYWluKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8g
bmV3UHJldmFsZW5jZSA9IGNsYXNzaWZpZXIoKS5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2Uo
cmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCBy
ZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291
cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3VyY2VT
dGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRpc3Rp
Yy5wcmV2YWxlbmNlKTsKLSAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0
aXN0aWMucHJldmFsZW5jZSkKKyAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVzb3VyY2VT
dGF0aXN0aWMucHJldmFsZW5jZSkgeworICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblBy
b2dyZXNzKCkpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICAgICAg
ICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9t
YWluLCBuZXdQcmV2YWxlbmNlKTsKKyAgICAgICAgfQogICAgIH0KKyAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKQpAQCAtMTYyNCw3ICsxNjU2LDExIEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0lu
dGVybmFsKFN1YkZyYW1lRG9tCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JiBkb21haW5zKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IGlmIChkb21haW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCisgICAgU1FMaXRlVHJh
bnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKICAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogZG9tYWlucykgewogICAgICAg
ICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKHJlZ2lzdHJhYmxlRG9tYWluKTsKICAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQpAQCAt
MTYzNiw2ICsxNjcyLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2UKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CisgICAg
dHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNl
c0ZvckRlYnVnTW9kZSgpCkBAIC0xNjgyLDggKzE3MTksMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJh
YmxlRG8KICAgICBib29sIGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlID0gdGFy
Z2V0RG9tYWluID09IHRvcEZyYW1lRG9tYWluOwogICAgIGJvb2wgYXJlVGFyZ2V0QW5kU291cmNl
RG9tYWluc1NhbWVTaXRlID0gdGFyZ2V0RG9tYWluID09IHNvdXJjZURvbWFpbjsKIAorICAgIFNR
TGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworCiAgICAgYm9vbCBzdGF0
aXN0aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIWlzTWFpbkZyYW1lICYmICEoYXJl
VGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgfHwgYXJlVGFyZ2V0QW5kU291cmNlRG9t
YWluc1NhbWVTaXRlKSkgeworICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkK
KyAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICAgICAgYXV0byB0YXJnZXRS
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJn
ZXREb21haW4pOwogICAgICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24gd2FzIG5v
dCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBvZiB0YXJnZXQgZG9tYWlu
IiwgdGhpcyk7CkBAIC0xNjk4LDYgKzE3NDAsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEbwog
ICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsKICAgICAgICAgICAgIGJvb2wgd2FzTmF2aWdhdGVk
QWZ0ZXJTaG9ydERlbGF5V2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9ICF3YXNQb3RlbnRpYWxseUlu
aXRpYXRlZEJ5VXNlciAmJiBkZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkIDwgcGFyYW1l
dGVycygpLm1pbkRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWRUb05vdEJlQVJlZGlyZWN0
OwogICAgICAgICAgICAgaWYgKGlzUmVkaXJlY3QgfHwgd2FzTmF2aWdhdGVkQWZ0ZXJTaG9ydERl
bGF5V2l0aG91dFVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICAgICAgICAgIGlmICghdHJhbnNh
Y3Rpb24uaW5Qcm9ncmVzcygpKQorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOworCiAgICAgICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7
CiAgICAgICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwogICAgICAgICAgICAgICAg
IGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCB8fCAhcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vj
b25kKSB7CkBAIC0xNzE3LDYgKzE3NjIsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEbwogICAg
ICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNSZWRpcmVjdCkgeworICAgICAgICAgICAgaWYgKCF0cmFu
c2FjdGlvbi5pblByb2dyZXNzKCkpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKKwogICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7CiAgICAg
ICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CiAgICAgICAgICAgICBpZiAoIXRhcmdldFJl
c3VsdC5zZWNvbmQgfHwgIXJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCkgewpAQCAtMTcy
OCw2ICsxNzc2LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG8KICAgICAgICAgICAgIHN0YXRp
c3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CisgICAgdHJhbnNhY3Rp
b24uY29tbWl0KCk7CiAKICAgICBpZiAoc3RhdGlzdGljc1dlcmVVcGRhdGVkKQogICAgICAgICBz
Y2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CkBAIC0xNzM4
LDYgKzE3ODcsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjps
b2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uKGNvbgogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChmcm9tRG9tYWluICE9IHRvRG9tYWluKTsKIAorICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9Eb21haW4pOwogICAgIGlmICghdG9Eb21h
aW5SZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjps
b2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0
byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTE3NDcsMTIgKzE3OTksMTcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbihjb24KICAgICAKICAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJj
ZShmcm9tRG9tYWluKSkKICAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCh0b0RvbWFpbiwgdHJ1ZSk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0K
IAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCF0YXJnZXRSZXN1
bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgd2Fz
IG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAt
MTc2Nyw2ICsxODI0LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW0KICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNl
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorCisgICAgdHJhbnNhY3Rpb24u
Y29tbWl0KCk7CiAgICAgCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTE3OTEsNiAr
MTg1MCw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1Vz
ZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlm
ICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VE
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bG9nVXNlckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTE3OTgsNiArMTg2MCw5IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFt
ZURvbWFpCiAgICAgfQogICAgIGJvb2wgZGlkSGF2ZVByZXZpb3VzVXNlckludGVyYWN0aW9uID0g
aGFzSGFkVXNlckludGVyYWN0aW9uKGRvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6Okxvbmcp
OwogICAgIHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7
CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKwogICAgIGlmIChkaWRIYXZlUHJldmlvdXNV
c2VySW50ZXJhY3Rpb24pIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMTgwOSw2ICsxODc0LDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGUKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAg
ICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbiB3YXMg
bm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0x
ODI0LDYgKzE4OTIsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CiAKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKwogICAg
IC8vIFVwZGF0ZSBjb29raWUgYmxvY2tpbmcgdW5jb25kaXRpb25hbGx5IHNpbmNlIGEgY2FsbCB0
byBoYXNIYWRVc2VySW50ZXJhY3Rpb24oKQogICAgIC8vIHRvIGNoZWNrIHRoZSBwcmV2aW91cyB1
c2VyIGludGVyYWN0aW9uIHN0YXR1cyBjb3VsZCBjYWxsIGNsZWFyVXNlckludGVyYWN0aW9uKCks
CiAgICAgLy8gYmxvd2luZyB0aGUgY2FsbCBzdGFjay4KQEAgLTE4NjQsNiArMTkzNCw5IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291
cmNlKGNvbnN0IFJlZ2lzdHJhYmxlCiAgICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVnaXN0cmFibGVEb21h
aW5JRCA9IGRvbWFpbklEKGRvbWFpbik7CiAgICAgaWYgKCFyZWdpc3RyYWJsZURvbWFpbklEKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZSBkb21haW5JRCBzaG91bGQgZXhpc3QgYnV0IHdhcyBub3QgZm91bmQuIiwgdGhpcyk7CkBAIC0x
ODk2LDYgKzE5NjksOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZQogICAgIFN0ZFNldDx1bnNp
Z25lZD4gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzOwogICAgIHJlY3Vyc2l2ZWx5Rmlu
ZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbigqcmVnaXN0cmFi
bGVEb21haW5JRCwgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCAwKTsKICAgICBzZXRE
b21haW5zQXNQcmV2YWxlbnQoV1RGTW92ZShub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMp
KTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2ln
bmVkPiYmIGRvbWFpbnMpCkBAIC0yMDA2LDYgKzIwODEsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lz
dHJhYgogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJh
bnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2Ugd2FzIG5v
dCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAtMjAy
MSwxMiArMjA5OSwxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIHRyYW5zYWN0aW9u
LmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGJvb2wg
dmFsdWUpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVU
cmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0yMDQxLDEy
ICsyMTI0LDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNl
dEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21hCiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIGZhaWxlZCB0byBiaW5kLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CisKKyAgICB0cmFu
c2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbChjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZhbHVlKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9k
YXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAg
ICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgd2FzIG5vdCBjb21w
bGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAtMjA2MSw2ICsy
MTQ5LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0SXNT
Y2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3YKICAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgZmFp
bGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiBTZWNvbmRzIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGlt
ZXN0YW1wKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJEb21haW4sIGNvbnN0IFRvcEZyYW1l
RG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKQEAgLTIxMDUsNiArMjE5NSw5IEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbihjb25zdCBTCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
KyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CiAgICAgaWYgKCFyZXN1
bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBp
bnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAtMjExMiwxMiArMjIwNSwxNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW4oY29uc3QgUwogICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3
ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4K
ICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9
KSwgKnJlc3VsdC5zZWNvbmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21h
aW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKIHsKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9u
KG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3Vs
dCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291
cmNlRG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbiB3YXMg
bm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0y
MTI1LDEyICsyMjIzLDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zCiAgICAgfQogICAgIC8v
IEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50
cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgogICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3Qoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisKKyAg
ICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJl
ZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAg
U1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rp
b24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwogICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5z
ZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIxMzgsMTIgKzIyNDEsMTcgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFMKICAgICB9CiAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2Ug
YWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KICAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwg
KnJlc3VsdC5zZWNvbmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwg
Y29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9k
YXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VE
b21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20gd2FzIG5vdCBj
b21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAtMjE1MSwx
MiArMjI1OSwxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdAogICAgIH0KICAgICAvLyBGb3Ig
Y29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZv
ciB0aGUgcmVkaXJlY3QgZG9tYWluLgogICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qo
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5z
YWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4m
IHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlv
biB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAg
ICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbih0b3BGcmFtZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8g
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpA
QCAtMjE2NSwxMiArMjI3OCwxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRgogCiAgICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnks
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQu
c2Vjb25kKTsKICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRRdWVyeSwgSGFzaFNldDxS
ZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwor
CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRv
cEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGly
ZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FM
aXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24u
YmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29u
ZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0
ZW1wdCIsIHRoaXMpOwpAQCAtMjE3OCw2ICsyMjk2LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3Qg
VG8KICAgICB9CiAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZl
IGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KICAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBI
YXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNl
Y29uZCk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogc3RkOjpwYWlyPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpBZGRlZFJlY29yZCwgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgZG9tYWluKQpAQCAtMjYzNSw2ICsyNzU1LDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGQKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5z
YWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7
CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2VlbiB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0yNjQyLDYgKzI3NjUsOCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2Vlbihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZAogICAgIH0KICAgICAKICAgICB1cGRhdGVMYXN0U2Vl
bihkb21haW4sIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSkpOwor
CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBkb21haW4pCkBAIC0yNjUxLDYgKzI3NzYsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZQogICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCiAgICAgICAgIHJldHVybjsKICAgICAK
KyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29u
ZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVz
b3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRo
aXMpOwpAQCAtMjY1OCw2ICsyNzg2LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGUKICAgICB9
CiAKICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFByZXZhbGVu
Y2U6OkhpZ2gpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQpAQCAtMjY2Nyw2ICsyNzk3LDkgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJl
c291cmNlKGNvbnN0IFJlZ2lzdHIKICAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQogICAgICAg
ICByZXR1cm47CiAgICAgCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRh
YmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVk
IGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0yNjc0LDYgKzI4MDcsOCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgUmVnaXN0cgogICAgIH0KIAogICAgIHNldFByZXZhbGVudFJlc291cmNlKGRvbWFpbiwg
UmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVyeUhpZ2gpOworCisgICAgdHJhbnNhY3Rpb24uY29t
bWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVw
ZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBp
bnQgdmFsdWUpCkBAIC0yOTcxLDYgKzMxMDYsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBpbnQg
cm93c1RvUHJ1bmUgPSBtX29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJhdGluZ0RhdGVzV2luZG93
TG9uZyArIDE7CiAgICAgaWYgKHJvd3NUb1BydW5lID4gMCkgewogICAgICAgICBhdXRvIGRlbGV0
ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiREVMRVRFIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciwgbW9udGgs
IG1vbnRoRGF5IExJTUlUID87Il9zKTsKQEAgLTI5OTIsNiArMzEzMCw4IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0
ZUlmTmVjZXNzYXJ5CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAorICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCiAgICAgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0
ZXJzKCk7CiB9CiAKQEAgLTMwMjYsNiArMzE2NiwxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25z
dAogewogICAgIC8vIFBvcHVsYXRlIHRoZSBPcGVyYXRpbmcgRGF0ZXMgdGFibGUgd2l0aCBlbm91
Z2ggZGF5cyB0byByZXF1aXJlIHBydW5pbmcuCiAgICAgZG91YmxlIGRheXNBZ29JblNlY29uZHMg
PSAwOworCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Cisg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0g
bnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKICAgICAgICAgZG91YmxlIGRheXNU
b1N1YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSkudmFsdWUoKTsKICAgICAgICAg
ZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZh
bHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsKQEAgLTMwNDMsNiArMzE4Nyw4IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JU
ZXN0aW5nKGNvbnN0CiAgICAgICAgIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnJlc2V0
KCk7CiAgICAgfQogCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKICAgICB1cGRhdGVPcGVy
YXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKIAogICAgIC8vIE1ha2Ugc3VyZSBtb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZSBpcyB0aGUgbGVhc3QgcmVjZW50IG9mIGFsbCBlbnRyaWVzLgpAQCAt
MzMzMCw2ICszNDc2LDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChzdGQ6Om9wdGkKICAgICAgICAgYmluZFBh
cmFtZXRlciA9IFN0cmluZzo6bnVtYmVyKCpkb21haW5JRFRvTWF0Y2gpOwogICAgIH0KIAorICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIGNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFN0YXRlbWVudCwgY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFF1ZXJ5LCAiY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7CiAKICAgICBpZiAo
IWNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50CkBAIC0zMzQ5LDYgKzM0OTgsOCBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByaXZhdGVDbGlj
a01lYXN1cmVtZW50KHN0ZDo6b3B0aQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0
ZW1lbnQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dCgpCkBAIC0zNTQ0LDYgKzM2OTUsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50cwogewogICAg
IGF1dG8gZXhwaXJlZFRpbWVUb1NlbmQgPSBXYWxsVGltZTo6bm93KCkgLSAxX2g7CiAKKyAgICBT
UUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlv
bi5iZWdpbigpOworCiAgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSA/Il9zKTsK
ICAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBudWxsIl9zKTsK
IApAQCAtMzU1OSw2ICszNzEzLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHMKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7
CisKICAgICByZXR1cm47CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431465</attachid>
            <date>2021-06-15 12:21:47 -0700</date>
            <delta_ts>2021-06-15 12:54:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227034-20210615122147.patch</filename>
            <type>text/plain</type>
            <size>30428</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEyYTFjOTQ2OTI3MDhhNWNh
N2JiNzQyNzAwNTk5ZThiOTkzZTU2ZmYuLjRjY2ExZTBkMGM5NWU2N2MxYjMzYzBmMTkzYmQ0Yjc4
ZmQ3Njc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDYtMTUgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLCBmb3IgcGVyZm9ybWFu
Y2UuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNz
aW5nVGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0
aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRF
eHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisKIDIwMjEtMDYtMTUgIEpvbmF0aGFuIEJlZGFy
ZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb250ZXJleV0gU3VwcG9ydCBidWls
ZGluZyBXZWJLaXQgKEZvbGxvdy11cCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDg0M2FjZGNiNGE0ZjQ0OTc0OTAyYzNj
ZmI1ZjM3MDIyZmE4NjY4MDMuLjZjODQzYTg3NTVlN2Q4YTI0ODk2ZWFiZWU2YTMzZDU2NTg2MzUx
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmNwcApAQCAtNjI3LDEwICs2MjcsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmwK
IHsKICAgICBBU1NFUlQoZXhpc3RpbmdDb2x1bW5zLnNpemUoKSA8PSBleHBlY3RlZENvbHVtbnMu
c2l6ZSgpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OwogICAgIGZvciAoYXV0byYgY29sdW1uIDogZXhwZWN0ZWRDb2x1bW5zKSB7CiAgICAgICAgIGlm
IChleGlzdGluZ0NvbHVtbnMuY29udGFpbnMoY29sdW1uKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAKKyAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpCisgICAg
ICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAi
LCB0YWJsZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1bW4pKTsKICAgICAgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFi
bGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8g
dGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC02NDQsNiArNjQ4LDcgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmlu
ZyYmIHRhYmwKICAgICAgICAgfQogICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQor
ICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCkKQEAgLTcwMCw2
ICs3MDUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nVGFibGVzSWZOZWNlc3NhcnkoKQogICAgIGlmICghbWlzc2luZ1RhYmxlcykKICAgICAg
ICAgcmV0dXJuOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogKm1p
c3NpbmdUYWJsZXMpIHsKICAgICAgICAgYXV0byBjcmVhdGVUYWJsZVF1ZXJ5ID0gZXhwZWN0ZWRU
YWJsZUFuZEluZGV4UXVlcmllcygpLmdldCh0YWJsZSkuZmlyc3Q7CiAgICAgICAgIGlmICghbV9k
YXRhYmFzZS5leGVjdXRlQ29tbWFuZFNsb3coY3JlYXRlVGFibGVRdWVyeSkpCkBAIC03MTEsNiAr
NzE4LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlz
c2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hl
bWFJZk5lY2Vzc2FyeSgpCkBAIC0xMDcxLDYgKzEwNzksOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFJl
c291cgogICAgIGlmICghcmVnaXN0cmFibGVEb21haW5JRCkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNh
Y3Rpb24uYmVnaW4oKTsKKwogICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFn
ZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxvYWRTdGF0aXN0aWNzLnN0b3JhZ2VB
Y2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsK
ICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgcmVnaXN0
cmFibGVEb21haW5JRC52YWx1ZSgpKTsKICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRR
dWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudCwgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKQEAgLTEw
ODEsNiArMTA5Miw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3VyCiAgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9h
ZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURv
bWFpbklELnZhbHVlKCkpOwogICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJh
bWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTGlua0Rl
Y29yYXRpb25zRnJvbSwgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKICAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNRdWVy
eSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cywgcmVnaXN0
cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQog
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21N
ZW1vcnlTdG9yZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUmIG1lbW9y
eVN0b3JlKQpAQCAtMTA5MCw2ICsxMTAzLDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2UKICAg
ICBpZiAoIWlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgU1FMaXRlVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwog
ICAgIGF1dG8mIHN0YXRpc3RpY3NNYXAgPSBtZW1vcnlTdG9yZS5kYXRhKCk7CiAgICAgZm9yIChj
b25zdCBhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7CiAgICAgICAg
IGF1dG8gcmVzdWx0ID0gaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKQEAgLTExMDQs
MTIgKzExMjAsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2UKICAgICAvLyBjYW4gcmVmZXIg
dG8gdGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVudHJpZXMKICAgICBmb3IgKGF1dG8mIHN0YXRp
c3RpYyA6IHN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCiAgICAgICAgIGluc2VydERvbWFpblJlbGF0
aW9uc2hpcHMoc3RhdGlzdGljKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZShXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQqIGN1cnJlbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIG90
aGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJh
bnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKKwogICAgIGF1dG8gY3VycmVudFJlZ2lzdHJhYmxlRG9tYWluID0gY3VycmVudC0+Y29sdW1u
VGV4dChSZWdpc3RyYWJsZURvbWFpbkluZGV4KTsKICAgICBhdXRvIGN1cnJlbnRMYXN0U2VlbiA9
IGN1cnJlbnQtPmNvbHVtbkRvdWJsZShMYXN0U2VlbkluZGV4KTsKICAgICBhdXRvIGN1cnJlbnRN
b3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gY3VycmVudC0+Y29sdW1uRG91YmxlKE1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgpOwpAQCAtMTE0MSw2ICsxMTYyLDggQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2UoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50KiBjdXJyZW4KICAgICAgICAgdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkKG90aGVy
LnJlZ2lzdHJhYmxlRG9tYWluLCBvdGhlci5kYXRhUmVjb3Jkc1JlbW92ZWQpOwogICAgIGlmIChv
dGhlci5nb3RMaW5rRGVjb3JhdGlvbkZyb21QcmV2YWxlbnRSZXNvdXJjZSAmJiAhY3VycmVudElz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpCiAgICAgICAgIHNldElzU2NoZWR1
bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwob3RoZXIucmVnaXN0cmFibGVEb21haW4sIHRy
dWUpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGljKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmIHN0YXRpc3RpYykKQEAgLTExNjIsNiArMTE4NSwxMSBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBSZXNv
dXJjZUxvYWRTdGF0aQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmIHN0YXRpc3Rp
Y3MpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKHN0YXRpc3Rp
Y3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0
cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogCiAgICAg
Zm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzKSB7CiAgICAgICAgIGlmICghZG9tYWlu
SUQoc3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSkgewpAQCAtMTE3OSw2ICsxMjA3LDggQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNz
KFZlY3RvcjxSZXNvdXJjZUxvYWRTdGEKICAgICAvLyBjYW4gcmVmZXIgdG8gdGhlIE9ic2VydmVk
RG9tYWluIHRhYmxlIGVudHJpZXMuCiAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0
aWNzKQogICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHN0YXRpc3RpYyk7CisKKyAg
ICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogc3RhdGljIEFTQ0lJTGl0ZXJhbCBqb2luU3Vi
U3RhdGlzdGljc0ZvclNvcnRpbmcoKQpAQCAtMTQxOSwxNSArMTQ0OSwyMiBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIGF1dG8gbm90VmVyeVByZXZhbGVu
dFJlc291cmNlcyA9IGZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKCk7CisgICAgaWYgKG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKKyAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICBmb3IgKGF1
dG8mIHJlc291cmNlU3RhdGlzdGljIDogbm90VmVyeVByZXZhbGVudFJlc291cmNlcy52YWx1ZXMo
KSkgewogICAgICAgICBpZiAoc2hvdWxkU2tpcChyZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJs
ZURvbWFpbikpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvIG5ld1ByZXZh
bGVuY2UgPSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHJlc291cmNl
U3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3VyY2VT
dGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRp
c3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNlU3RhdGlzdGlj
LnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0aWMucHJldmFs
ZW5jZSk7Ci0gICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3RhdGlzdGljLnBy
ZXZhbGVuY2UpCisgICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3RhdGlzdGlj
LnByZXZhbGVuY2UpIHsKKyAgICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygp
KQorICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgICAgICAgICBzZXRQ
cmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgbmV3
UHJldmFsZW5jZSk7CisgICAgICAgIH0KICAgICB9CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7
CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsYXNzaWZ5
UHJldmFsZW50UmVzb3VyY2VzKCkKQEAgLTE2MjQsNyArMTY2MSwxMSBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChT
dWJGcmFtZURvbQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3Jh
bmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYg
ZG9tYWlucykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoZG9t
YWlucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAg
Zm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6IGRvbWFpbnMpIHsKICAgICAgICAgYXV0byBy
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdp
c3RyYWJsZURvbWFpbik7CiAgICAgICAgIGlmICghcmVzdWx0LnNlY29uZCkKQEAgLTE2MzYsNiAr
MTY3Nyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5k
ZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNlCiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorICAgIHRyYW5zYWN0
aW9uLmNvbW1pdCgpOwogfQogCiBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1
Z01vZGUoKQpAQCAtMTY0OCw2ICsxNjkwLDkgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmUKICAg
ICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHByaW1hcnlEb21haW5zVG9CbG9jazsKICAgICBw
cmltYXJ5RG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKIAorICAgIFNR
TGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9u
LmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7CiAgICAg
aWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjplbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUgd2FzIG5vdCBjb21wbGV0ZWQg
ZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBmb3IgZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNv
dXJjZSIsIHRoaXMpOwpAQCAtMTY3Miw2ICsxNzE3LDggQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50
UmUKICAgICAgICAgfQogICAgIH0KIAorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCiAgICAg
cmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9jazsKIH0KIApAQCAtMTY4Miw4ICsxNzI5LDEzIEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdh
dGlvbihjb25zdCBSZWdpc3RyYWJsZURvCiAgICAgYm9vbCBhcmVUYXJnZXRBbmRUb3BGcmFtZURv
bWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbjsKICAgICBib29s
IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSBzb3Vy
Y2VEb21haW47CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNl
KTsKKwogICAgIGJvb2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7CiAgICAgaWYgKCFp
c01haW5GcmFtZSAmJiAhKGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlIHx8IGFy
ZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkpIHsKKyAgICAgICAgaWYgKCF0cmFuc2Fj
dGlvbi5pblByb2dyZXNzKCkpCisgICAgICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAg
ICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKICAgICAgICAgaWYgKCF0YXJnZXRSZXN1bHQu
c2Vjb25kKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJh
bWVOYXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQgb2YgdGFyZ2V0IGRvbWFpbiIsIHRoaXMpOwpAQCAtMTY5OCw2ICsxNzUwLDkgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IFJlZ2lzdHJhYmxlRG8KICAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7CiAgICAgICAgICAg
ICBib29sIHdhc05hdmlnYXRlZEFmdGVyU2hvcnREZWxheVdpdGhvdXRVc2VySW50ZXJhY3Rpb24g
PSAhd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIgJiYgZGVsYXlBZnRlck1haW5GcmFtZURv
Y3VtZW50TG9hZCA8IHBhcmFtZXRlcnMoKS5taW5EZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRM
b2FkVG9Ob3RCZUFSZWRpcmVjdDsKICAgICAgICAgICAgIGlmIChpc1JlZGlyZWN0IHx8IHdhc05h
dmlnYXRlZEFmdGVyU2hvcnREZWxheVdpdGhvdXRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgICAgICAg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3Rp
bmdEb21haW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihzb3VyY2VEb21haW4pOwogICAgICAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWlu
KTsKICAgICAgICAgICAgICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQgfHwgIXJlZGlyZWN0
aW5nRG9tYWluUmVzdWx0LnNlY29uZCkgewpAQCAtMTcxNyw2ICsxNzcyLDkgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0
IFJlZ2lzdHJhYmxlRG8KICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKKyAg
ICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKQorICAgICAgICAgICAgICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21h
aW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihz
b3VyY2VEb21haW4pOwogICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwogICAgICAg
ICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFpblJlc3Vs
dC5zZWNvbmQpIHsKQEAgLTE3MjgsNiArMTc4Niw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURv
CiAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwogICAgICAgICB9CiAg
ICAgfQorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogCiAgICAgaWYgKHN0YXRpc3RpY3NXZXJl
VXBkYXRlZCkKICAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5l
Y2Vzc2FyeSgpOwpAQCAtMTczOCw2ICsxNzk3LDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbihjb24K
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQoZnJvbURvbWFpbiAh
PSB0b0RvbWFpbik7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byB0b0RvbWFpblJlc3Vs
dCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvRG9tYWlu
KTsKICAgICBpZiAoIXRvRG9tYWluUmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiB3YXMg
bm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0x
NzQ3LDEyICsxODA5LDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oY29uCiAgICAgCiAgICAgaWYg
KGlzUHJldmFsZW50UmVzb3VyY2UoZnJvbURvbWFpbikpCiAgICAgICAgIHNldElzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwodG9Eb21haW4sIHRydWUpOworCisgICAgdHJhbnNh
Y3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byB0YXJnZXRSZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwog
ICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0
cmljdEVuZm9yY2VtZW50IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0
dGVtcHQiLCB0aGlzKTsKQEAgLTE3NjcsNiArMTgzNCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNl
U2FtCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgZmFpbGVkIHRvIGJp
bmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
KworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogICAgIAogICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiB9CkBAIC0xNzkxLDYgKzE4NjAsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24g
dHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAg
IGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21h
aW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0xNzk4LDYgKzE4NzAsOSBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJh
Y3Rpb24oY29uc3QgVG9wRnJhbWVEb21haQogICAgIH0KICAgICBib29sIGRpZEhhdmVQcmV2aW91
c1VzZXJJbnRlcmFjdGlvbiA9IGhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4sIE9wZXJhdGlu
Z0RhdGVzV2luZG93OjpMb25nKTsKICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0cnVl
LCBXYWxsVGltZTo6bm93KCkpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKICAgICBp
ZiAoZGlkSGF2ZVByZXZpb3VzVXNlckludGVyYWN0aW9uKSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE4MDksNiArMTg4NCw5IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNv
bnN0IFJlZ2lzdHJhYmxlCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2Fj
dGlvbi5iZWdpbigpOworCiAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICghdGFyZ2V0UmVz
dWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJV
c2VySW50ZXJhY3Rpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0
ZW1wdCIsIHRoaXMpOwpAQCAtMTgyNCw2ICsxOTAyLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFi
bGUKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCisgICAgdHJhbnNhY3Rp
b24uY29tbWl0KCk7CisKICAgICAvLyBVcGRhdGUgY29va2llIGJsb2NraW5nIHVuY29uZGl0aW9u
YWxseSBzaW5jZSBhIGNhbGwgdG8gaGFzSGFkVXNlckludGVyYWN0aW9uKCkKICAgICAvLyB0byBj
aGVjayB0aGUgcHJldmlvdXMgdXNlciBpbnRlcmFjdGlvbiBzdGF0dXMgY291bGQgY2FsbCBjbGVh
clVzZXJJbnRlcmFjdGlvbigpLAogICAgIC8vIGJsb3dpbmcgdGhlIGNhbGwgc3RhY2suCkBAIC0x
ODYxLDYgKzE5NDEsOCBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibAogdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBuZXdQcmV2YWxl
bmNlKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChtX2Rh
dGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKwogICAgIGlmIChzaG91bGRTa2lwKGRv
bWFpbikpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjAwNiw2ICsyMDg4LDkgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBSZWdpc3RyYWIKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291
cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKQEAgLTIwMjEsMTIgKzIxMDYsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWIKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICB0
cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9t
YWluLCBib29sIHZhbHVlKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisg
ICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNh
Y3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQp
IHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQg
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpA
QCAtMjA0MSwxMiArMjEzMSwxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYQogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCBmYWlsZWQgdG8gYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQor
CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRv
bWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIHdh
cyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAg
LTIwNjEsNiArMjE1Niw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogU2Vj
b25kcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0TW9zdFJlY2VudGx5
VXBkYXRlZFRpbWVzdGFtcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRG9tYWluLCBjb25z
dCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0CkBAIC0yMTA1LDYgKzIyMDIs
OSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUwogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7
CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOwogICAg
IGlmICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0
byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIxMTIsMTIgKzIyMTIsMTcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluKGNvbnN0IFMKICAgICB9CiAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBt
YWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFt
ZSBkb21haW4uCiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJh
bWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgp
OwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJl
c291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0
cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAg
YXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bihzdWJyZXNvdXJjZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVE
b21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRo
aXMpOwpAQCAtMjEyNSwxMiArMjIzMCwxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29ucwogICAg
IH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0
aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4KICAgICBpbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNv
bmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhj
b25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0
RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKICAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dF
RChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8g
ZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0yMTM4LDEyICsyMjQ4LDE3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RUbyhjb25zdCBTCiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFr
ZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBk
b21haW4uCiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3RE
b21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwog
fQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3Vy
Y2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1
YnJlc291cmNlRG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9t
IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsK
QEAgLTIxNTEsMTIgKzIyNjYsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QKICAgICB9CiAg
ICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGlj
cyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisK
KyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZy
YW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0
RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRl
VHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkg
ewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdFRvIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQi
LCB0aGlzKTsKQEAgLTIxNjUsMTIgKzIyODUsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEYK
IAogICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0p
LCAqcmVzdWx0LnNlY29uZCk7CiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnks
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQu
c2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJv
bShjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9t
YWluJiByZWRpcmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
IAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRy
YW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKICAgICBpZiAoIXJl
c3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQg
aW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIxNzgsNiArMjMwMyw4IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RG
cm9tKGNvbnN0IFRvCiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdl
IGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCiAg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zy
b21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwg
KnJlc3VsdC5zZWNvbmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHN0ZDo6
cGFpcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6QWRkZWRSZWNvcmQsIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbikKQEAgLTI2MzUsNiArMjc2Miw5IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBT
UUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlv
bi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNlZW4gd2FzIG5vdCBj
b21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAtMjY0Miwx
NSArMjc3MiwxOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZAogICAgIH0KICAgICAKICAgICB1
cGRhdGVMYXN0U2Vlbihkb21haW4sIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNl
Y29uZHMoKSkpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwog
CiAgICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAg
ICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihkb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0
ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAtMjY2MywxMCArMjc5
NiwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Cisg
ICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogCiAgICAgaWYg
KHNob3VsZFNraXAoZG9tYWluKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgYXV0byBy
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21h
aW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1
ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTI5NzEsNiArMzEwNSw5IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFz
T3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCisg
ICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNh
Y3Rpb24uYmVnaW4oKTsKKwogICAgIGludCByb3dzVG9QcnVuZSA9IG1fb3BlcmF0aW5nRGF0ZXNT
aXplIC0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nICsgMTsKICAgICBpZiAocm93c1RvUHJ1bmUg
PiAwKSB7CiAgICAgICAgIGF1dG8gZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBPcGVyYXRpbmdE
YXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhEYXkgTElNSVQgPzsiX3MpOwpAQCAtMjk5
Miw2ICszMTI5LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKICAgICB1
cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKIH0KIApAQCAtMzAyNiw2ICszMTY1LDEw
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGly
ZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0CiB7CiAgICAgLy8gUG9wdWxhdGUgdGhlIE9wZXJh
dGluZyBEYXRlcyB0YWJsZSB3aXRoIGVub3VnaCBkYXlzIHRvIHJlcXVpcmUgcHJ1bmluZy4KICAg
ICBkb3VibGUgZGF5c0Fnb0luU2Vjb25kcyA9IDA7CisKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0
cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNzZWQ7IGkr
KykgewogICAgICAgICBkb3VibGUgZGF5c1RvU3VidHJhY3QgPSBTZWNvbmRzOjpmcm9tSG91cnMo
MjQgKiBpKS52YWx1ZSgpOwogICAgICAgICBkYXlzQWdvSW5TZWNvbmRzID0gV2FsbFRpbWU6Om5v
dygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSAtIGRheXNUb1N1YnRyYWN0OwpAQCAtMzA0
Myw2ICszMTg2LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QKICAgICAgICAgaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CiAKKyAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKKwogICAgIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpOwogCiAgICAg
Ly8gTWFrZSBzdXJlIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIGlzIHRoZSBsZWFzdCBy
ZWNlbnQgb2YgYWxsIGVudHJpZXMuCkBAIC0zMzMwLDYgKzM0NzUsOSBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50
KHN0ZDo6b3B0aQogICAgICAgICBiaW5kUGFyYW1ldGVyID0gU3RyaW5nOjpudW1iZXIoKmRvbWFp
bklEVG9NYXRjaCk7CiAgICAgfQogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24o
bV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gY2xlYXJV
bmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9jbGVh
clVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50LCBjbGVhclVuYXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhclByaXZhdGVDbGlja01l
YXN1cmVtZW50Il9zKTsKIAogICAgIGlmICghY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1l
bnQKQEAgLTMzNDksNiArMzQ5Nyw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc3RkOjpvcHRpCiAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50
IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7
CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyRXhw
aXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkKQEAgLTM1NDQsNiArMzY5NCw5IEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRzCiB7CiAgICAgYXV0byBleHBpcmVkVGltZVRvU2VuZCA9IFdhbGxU
aW1lOjpub3coKSAtIDFfaDsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1f
ZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIGVhcmxpZXN0
VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRp
bWVUb1NlbmRUb1NvdXJjZSA9ID8iX3MpOwogICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRF
IEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5k
VG9EZXN0aW5hdGlvbiA9IG51bGwiX3MpOwogCkBAIC0zNTU5LDYgKzM3MTIsOCBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50cwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAK
KyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKwogICAgIHJldHVybjsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431468</attachid>
            <date>2021-06-15 12:54:14 -0700</date>
            <delta_ts>2021-06-15 13:01:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227034-20210615125414.patch</filename>
            <type>text/plain</type>
            <size>36630</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEyYTFjOTQ2OTI3MDhhNWNh
N2JiNzQyNzAwNTk5ZThiOTkzZTU2ZmYuLjRjY2ExZTBkMGM5NWU2N2MxYjMzYzBmMTkzYmQ0Yjc4
ZmQ3Njc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDYtMTUgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLCBmb3IgcGVyZm9ybWFu
Y2UuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNz
aW5nVGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0
aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRF
eHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisKIDIwMjEtMDYtMTUgIEpvbmF0aGFuIEJlZGFy
ZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb250ZXJleV0gU3VwcG9ydCBidWls
ZGluZyBXZWJLaXQgKEZvbGxvdy11cCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDg0M2FjZGNiNGE0ZjQ0OTc0OTAyYzNj
ZmI1ZjM3MDIyZmE4NjY4MDMuLjQ2ZWE4MGM1MTJlOTgyMDAxZTIxZjY5ZDcxNGZkODZjMjk2ZjJi
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmNwcApAQCAtNjI3LDEwICs2MjcsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmwK
IHsKICAgICBBU1NFUlQoZXhpc3RpbmdDb2x1bW5zLnNpemUoKSA8PSBleHBlY3RlZENvbHVtbnMu
c2l6ZSgpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OwogICAgIGZvciAoYXV0byYgY29sdW1uIDogZXhwZWN0ZWRDb2x1bW5zKSB7CiAgICAgICAgIGlm
IChleGlzdGluZ0NvbHVtbnMuY29udGFpbnMoY29sdW1uKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAKKyAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpCisgICAg
ICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAi
LCB0YWJsZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1bW4pKTsKICAgICAgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFi
bGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8g
dGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC02NDQsNiArNjQ4LDcgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmlu
ZyYmIHRhYmwKICAgICAgICAgfQogICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQor
ICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCkKQEAgLTcwMCw2
ICs3MDUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nVGFibGVzSWZOZWNlc3NhcnkoKQogICAgIGlmICghbWlzc2luZ1RhYmxlcykKICAgICAg
ICAgcmV0dXJuOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogKm1p
c3NpbmdUYWJsZXMpIHsKICAgICAgICAgYXV0byBjcmVhdGVUYWJsZVF1ZXJ5ID0gZXhwZWN0ZWRU
YWJsZUFuZEluZGV4UXVlcmllcygpLmdldCh0YWJsZSkuZmlyc3Q7CiAgICAgICAgIGlmICghbV9k
YXRhYmFzZS5leGVjdXRlQ29tbWFuZFNsb3coY3JlYXRlVGFibGVRdWVyeSkpCkBAIC03MTEsNiAr
NzE4LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlz
c2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hl
bWFJZk5lY2Vzc2FyeSgpCkBAIC0xMDYzLDkgKzEwNzEsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25z
dCBTdHIKICAgICB9CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgbG9hZFN0YXRpc3RpY3MpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9uJiwg
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rp
b25JblByb2dyZXNzKCkpOworCiAgICAgYXV0byByZWdpc3RyYWJsZURvbWFpbklEID0gZG9tYWlu
SUQobG9hZFN0YXRpc3RpY3MucmVnaXN0cmFibGVEb21haW4pOwogICAgIAogICAgIGlmICghcmVn
aXN0cmFibGVEb21haW5JRCkKQEAgLTEwOTAsNiArMTEwMCw5IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJl
c291cmNlCiAgICAgaWYgKCFpc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJl
Z2luKCk7CisKICAgICBhdXRvJiBzdGF0aXN0aWNzTWFwID0gbWVtb3J5U3RvcmUuZGF0YSgpOwog
ICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcC52YWx1ZXMoKSkg
ewogICAgICAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9tYWluKHN0YXRpc3RpYyk7
CkBAIC0xMTAzLDEyICsxMTE2LDE1IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlCiAgICAgLy8g
TWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9yIGludGVyLWRvbWFpbiByZWxhdGlvbnNoaXBzIHNvIHdl
CiAgICAgLy8gY2FuIHJlZmVyIHRvIHRoZSBPYnNlcnZlZERvbWFpbiB0YWJsZSBlbnRyaWVzCiAg
ICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKQotICAgICAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHN0YXRpc3RpYyk7CisgICAgICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcHModHJhbnNhY3Rpb24sIHN0YXRpc3RpYyk7CisKKyAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bWVyZ2UoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiBjdXJyZW50LCBjb25zdCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJiBvdGhlcikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om1lcmdlKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiBjdXJyZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJiBvdGhlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBB
U1NFUlQobV9kYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAKICAgICBhdXRvIGN1
cnJlbnRSZWdpc3RyYWJsZURvbWFpbiA9IGN1cnJlbnQtPmNvbHVtblRleHQoUmVnaXN0cmFibGVE
b21haW5JbmRleCk7CiAgICAgYXV0byBjdXJyZW50TGFzdFNlZW4gPSBjdXJyZW50LT5jb2x1bW5E
b3VibGUoTGFzdFNlZW5JbmRleCk7CkBAIC0xMTM0LDE2ICsxMTUwLDE2IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlKFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudCogY3VycmVuCiAgICAgaWYgKG90aGVyLmdyYW5kZmF0aGVyZWQgJiYgIWN1cnJlbnRHcmFu
ZGZhdGhlcmVkKQogICAgICAgICBzZXRHcmFuZGZhdGhlcmVkKG90aGVyLnJlZ2lzdHJhYmxlRG9t
YWluLCB0cnVlKTsKICAgICBpZiAob3RoZXIuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiAhY3VycmVu
dElzUHJldmFsZW50KQotICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShvdGhlci5yZWdpc3Ry
YWJsZURvbWFpbik7CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCBv
dGhlci5yZWdpc3RyYWJsZURvbWFpbik7CiAgICAgaWYgKG90aGVyLmlzVmVyeVByZXZhbGVudFJl
c291cmNlICYmICFjdXJyZW50SXNWZXJ5UHJldmFsZW50KQotICAgICAgICBzZXRWZXJ5UHJldmFs
ZW50UmVzb3VyY2Uob3RoZXIucmVnaXN0cmFibGVEb21haW4pOworICAgICAgICBzZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluKTsKICAg
ICBpZiAob3RoZXIuZGF0YVJlY29yZHNSZW1vdmVkID4gY3VycmVudERhdGFSZWNvcmRzUmVtb3Zl
ZCkKICAgICAgICAgdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkKG90aGVyLnJlZ2lzdHJhYmxlRG9t
YWluLCBvdGhlci5kYXRhUmVjb3Jkc1JlbW92ZWQpOwogICAgIGlmIChvdGhlci5nb3RMaW5rRGVj
b3JhdGlvbkZyb21QcmV2YWxlbnRSZXNvdXJjZSAmJiAhY3VycmVudElzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWwpCiAgICAgICAgIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwob3RoZXIucmVnaXN0cmFibGVEb21haW4sIHRydWUpOwogfQogCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBTUUxpdGVUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3Rp
YykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTE1NiwxMiArMTE3
MiwxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0
YXRpc3RpYyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgbWVyZ2Uoc2NvcGVkU3RhdGVtZW50LmdldCgpLCBzdGF0aXN0aWMpOworICAgIG1lcmdl
KHRyYW5zYWN0aW9uLCBzY29wZWRTdGF0ZW1lbnQuZ2V0KCksIHN0YXRpc3RpYyk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGljcyhW
ZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChzdGF0aXN0aWNzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRh
YmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAogICAgIGZvciAoYXV0byYgc3RhdGlz
dGljIDogc3RhdGlzdGljcykgewogICAgICAgICBpZiAoIWRvbWFpbklEKHN0YXRpc3RpYy5yZWdp
c3RyYWJsZURvbWFpbikpIHsKQEAgLTExNzIsMTMgKzExOTMsMTUgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJj
ZUxvYWRTdGEKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgbWVyZ2VTdGF0aXN0aWMoc3RhdGlzdGljKTsKKyAgICAgICAg
ICAgIG1lcmdlU3RhdGlzdGljKHRyYW5zYWN0aW9uLCBzdGF0aXN0aWMpOwogICAgIH0KIAogICAg
IC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRpb25zaGlwcyBz
byB3ZQogICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFibGUgZW50cmll
cy4KICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpCi0gICAgICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwcyh0cmFuc2FjdGlvbiwgc3RhdGlzdGljKTsKKworICAgIHRyYW5zYWN0aW9uLmNv
bW1pdCgpOwogfQogCiBzdGF0aWMgQVNDSUlMaXRlcmFsIGpvaW5TdWJTdGF0aXN0aWNzRm9yU29y
dGluZygpCkBAIC0xNDE5LDE1ICsxNDQyLDIyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMoKQogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogCiAgICAgYXV0byBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzID0gZmlu
ZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICBpZiAobm90VmVyeVByZXZhbGVudFJl
c291cmNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0
aXN0aWMgOiBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzLnZhbHVlcygpKSB7CiAgICAgICAgIGlm
IChzaG91bGRTa2lwKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8gbmV3UHJldmFsZW5jZSA9IGNsYXNzaWZp
ZXIoKS5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMuc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKTsKLSAgICAgICAg
aWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSkKLSAgICAg
ICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxl
RG9tYWluLCBuZXdQcmV2YWxlbmNlKTsKKyAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVz
b3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSkgeworICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlv
bi5pblByb2dyZXNzKCkpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAg
ICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCByZXNvdXJjZVN0YXRp
c3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgbmV3UHJldmFsZW5jZSk7CisgICAgICAgIH0KICAgICB9
CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKCkKQEAgLTE2MjQs
NyArMTY1NCwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpn
cmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbQogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBI
YXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgZm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6
IGRvbWFpbnMpIHsKICAgICAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJsZURvbWFpbik7CiAgICAgICAgIGlmICgh
cmVzdWx0LnNlY29uZCkKQEAgLTE2MzYsNiArMTY3MCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFz
aFNlCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFG
b3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiBWZWN0b3I8UmVn
aXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1
cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKQpAQCAtMTY0OCwxMyArMTY4MywxNiBA
QCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZQogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
cHJpbWFyeURvbWFpbnNUb0Jsb2NrOwogICAgIHByaW1hcnlEb21haW5zVG9CbG9jay5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDIpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24o
bV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZGVidWdTdGF0
aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IGZvciBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlIiwgdGhpcyk7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCi0gICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZGVidWdTdGF0aWNQcmV2
YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAgICBzZXRQ
cmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJj
ZSgpLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKICAgICBwcmltYXJ5RG9tYWluc1Rv
QmxvY2sudW5jaGVja2VkQXBwZW5kKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7CiAK
ICAgICBpZiAoIWRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsKQEAg
LTE2NjMsNyArMTcwMSw3IEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlCiAgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVi
dWdNb2RlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQgZm9y
IGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UiLCB0aGlzKTsKICAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgIH0KLSAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAg
ICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRlYnVnTWFudWFsUHJldmFs
ZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CiAgICAgICAgIHBy
aW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSgpKTsKIAogICAgICAgICBpZiAoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSB7CkBAIC0x
NjcyLDYgKzE3MTAsOCBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZQogICAgICAgICB9CiAgICAg
fQogCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKICAgICByZXR1cm4gcHJpbWFyeURvbWFp
bnNUb0Jsb2NrOwogfQogCkBAIC0xNjgyLDggKzE3MjIsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJh
YmxlRG8KICAgICBib29sIGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlID0gdGFy
Z2V0RG9tYWluID09IHRvcEZyYW1lRG9tYWluOwogICAgIGJvb2wgYXJlVGFyZ2V0QW5kU291cmNl
RG9tYWluc1NhbWVTaXRlID0gdGFyZ2V0RG9tYWluID09IHNvdXJjZURvbWFpbjsKIAorICAgIFNR
TGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworCiAgICAgYm9vbCBzdGF0
aXN0aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIWlzTWFpbkZyYW1lICYmICEoYXJl
VGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgfHwgYXJlVGFyZ2V0QW5kU291cmNlRG9t
YWluc1NhbWVTaXRlKSkgeworICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkK
KyAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICAgICAgYXV0byB0YXJnZXRS
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJn
ZXREb21haW4pOwogICAgICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24gd2FzIG5v
dCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBvZiB0YXJnZXQgZG9tYWlu
IiwgdGhpcyk7CkBAIC0xNjk4LDYgKzE3NDMsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEbwog
ICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsKICAgICAgICAgICAgIGJvb2wgd2FzTmF2aWdhdGVk
QWZ0ZXJTaG9ydERlbGF5V2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9ICF3YXNQb3RlbnRpYWxseUlu
aXRpYXRlZEJ5VXNlciAmJiBkZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkIDwgcGFyYW1l
dGVycygpLm1pbkRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWRUb05vdEJlQVJlZGlyZWN0
OwogICAgICAgICAgICAgaWYgKGlzUmVkaXJlY3QgfHwgd2FzTmF2aWdhdGVkQWZ0ZXJTaG9ydERl
bGF5V2l0aG91dFVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICAgICAgICAgIGlmICghdHJhbnNh
Y3Rpb24uaW5Qcm9ncmVzcygpKQorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOworCiAgICAgICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7
CiAgICAgICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwogICAgICAgICAgICAgICAg
IGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCB8fCAhcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vj
b25kKSB7CkBAIC0xNzE3LDYgKzE3NjUsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEbwogICAg
ICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNSZWRpcmVjdCkgeworICAgICAgICAgICAgaWYgKCF0cmFu
c2FjdGlvbi5pblByb2dyZXNzKCkpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKKwogICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7CiAgICAg
ICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CiAgICAgICAgICAgICBpZiAoIXRhcmdldFJl
c3VsdC5zZWNvbmQgfHwgIXJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCkgewpAQCAtMTcy
OCw2ICsxNzc5LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG8KICAgICAgICAgICAgIHN0YXRp
c3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CisgICAgdHJhbnNhY3Rp
b24uY29tbWl0KCk7CiAKICAgICBpZiAoc3RhdGlzdGljc1dlcmVVcGRhdGVkKQogICAgICAgICBz
Y2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CkBAIC0xNzM4
LDYgKzE3OTAsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjps
b2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uKGNvbgogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChmcm9tRG9tYWluICE9IHRvRG9tYWluKTsKIAorICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9Eb21haW4pOwogICAgIGlmICghdG9Eb21h
aW5SZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjps
b2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0
byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTE3NDcsMTIgKzE4MDIsMTcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbihjb24KICAgICAKICAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJj
ZShmcm9tRG9tYWluKSkKICAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCh0b0RvbWFpbiwgdHJ1ZSk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0K
IAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCF0YXJnZXRSZXN1
bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgd2Fz
IG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAt
MTc2Nyw2ICsxODI3LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW0KICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNl
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorCisgICAgdHJhbnNhY3Rpb24u
Y29tbWl0KCk7CiAgICAgCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTE3OTEsNiAr
MTg1Myw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1Vz
ZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlm
ICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VE
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bG9nVXNlckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTE3OTgsNiArMTg2Myw5IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFt
ZURvbWFpCiAgICAgfQogICAgIGJvb2wgZGlkSGF2ZVByZXZpb3VzVXNlckludGVyYWN0aW9uID0g
aGFzSGFkVXNlckludGVyYWN0aW9uKGRvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6Okxvbmcp
OwogICAgIHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7
CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKwogICAgIGlmIChkaWRIYXZlUHJldmlvdXNV
c2VySW50ZXJhY3Rpb24pIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMTgwOSw2ICsxODc3LDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGUKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAg
ICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbiB3YXMg
bm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0x
ODI0LDYgKzE4OTUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CiAKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKwogICAg
IC8vIFVwZGF0ZSBjb29raWUgYmxvY2tpbmcgdW5jb25kaXRpb25hbGx5IHNpbmNlIGEgY2FsbCB0
byBoYXNIYWRVc2VySW50ZXJhY3Rpb24oKQogICAgIC8vIHRvIGNoZWNrIHRoZSBwcmV2aW91cyB1
c2VyIGludGVyYWN0aW9uIHN0YXR1cyBjb3VsZCBjYWxsIGNsZWFyVXNlckludGVyYWN0aW9uKCks
CiAgICAgLy8gYmxvd2luZyB0aGUgY2FsbCBzdGFjay4KQEAgLTE4NTgsOSArMTkzMSwxMSBAQCBi
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNIYWRVc2VySW50ZXJh
Y3Rpb24oY29uc3QgUmVnaXN0cmFibAogICAgIHJldHVybiBoYWRVc2VySW50ZXJhY3Rpb247CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2UgbmV3UHJldmFsZW5jZSkKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9uJiwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBu
ZXdQcmV2YWxlbmNlKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFT
U0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKwogICAgIGlmIChzaG91
bGRTa2lwKGRvbWFpbikpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjAwNiw2ICsyMDgxLDkgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBSZWdpc3RyYWIKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZh
bGVudFJlc291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKQEAgLTIwMjEsMTIgKzIwOTksMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWIKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgZG9tYWluLCBib29sIHZhbHVlKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Cisg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3Vs
dC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5k
ZmF0aGVyZWQgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIs
IHRoaXMpOwpAQCAtMjA0MSwxMiArMjEyNCwxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYQog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCBmYWls
ZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisK
ICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKQEAgLTIwNjEsNiArMjE0OSw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENv
b2tpZURhdGFSZW1vdmFsIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsK
IH0KIAogU2Vjb25kcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0TW9z
dFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRG9t
YWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0CkBAIC0yMTA1
LDYgKzIxOTUsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUwogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9k
YXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21h
aW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIxMTIsMTIgKzIy
MDUsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFMKICAgICB9CiAgICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHRvcCBmcmFtZSBkb21haW4uCiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+
KHsgdG9wRnJhbWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9u
LmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21h
aW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0
ZW1wdCIsIHRoaXMpOwpAQCAtMjEyNSwxMiArMjIyMywxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4o
Y29ucwogICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhh
dmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4KICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNR
dWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnJl
c3VsdC5zZWNvbmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0
IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJh
c2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWlu
KTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyB3YXMgbm90IGNvbXBsZXRl
ZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0yMTM4LDEyICsyMjQx
LDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTCiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0
ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSBy
ZWRpcmVjdCBkb21haW4uCiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsg
cmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNv
bW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYg
c3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisK
ICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RGcm9tIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQi
LCB0aGlzKTsKQEAgLTIxNTEsMTIgKzIyNTksMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QK
ICAgICB9CiAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEg
c3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KICAgICBpbnNlcnREb21h
aW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBI
YXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNl
Y29uZCk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4m
IHJlZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisg
ICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNh
Y3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOwogICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIxNjUsMTIgKzIyNzgsMTcgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFRvcEYKIAogICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0
RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSks
ICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKICAg
ICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0
byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIxNzgsNiArMjI5Niw4IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKGNvbnN0IFRvCiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFr
ZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBk
b21haW4uCiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERv
bWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9
CiAKIHN0ZDo6cGFpcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6QWRkZWRS
ZWNvcmQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKQEAgLTI2MzUsNiArMjc1NSw5IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICghcmVzdWx0LnNl
Y29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNlZW4g
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpA
QCAtMjY0Miw2ICsyNzY1LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGQKICAgICB9CiAgICAg
CiAgICAgdXBkYXRlTGFzdFNlZW4oZG9tYWluLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vj
b25kcy5zZWNvbmRzKCkpKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQpAQCAtMjY1MCwxNCArMjc3NSwyNyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZQogCiAgICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBzZXRQcmV2YWxl
bnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU1FMaXRl
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChtX2RhdGFi
YXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKworICAgIGlmIChzaG91bGRTa2lwKGRvbWFp
bikpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5z
ZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVu
dFJlc291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQi
LCB0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldFByZXZhbGVudFJlc291
cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgc2V0UHJldmFs
ZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6
SGlnaCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQpA
QCAtMjY2NiwxNCArMjgwNCwzMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cgogCiAgICAgaWYg
KHNob3VsZFNraXAoZG9tYWluKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgU1FMaXRl
VHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKKworICAgIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9tYWlu
KTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU1FM
aXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9t
YWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChtX2Rh
dGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKworICAgIGlmIChzaG91bGRTa2lwKGRv
bWFpbikpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3Vs
dC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBh
dHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXRQcmV2YWxl
bnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsKKyAg
ICBzZXRQcmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9tYWluLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpWZXJ5SGlnaCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZChjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgZG9tYWluLCBpbnQgdmFsdWUpCkBAIC0yOTcxLDYgKzMxMjUsOSBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0Rh
dGVJZk5lY2Vzc2FyeQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFNRTGl0ZVRy
YW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2lu
KCk7CisKICAgICBpbnQgcm93c1RvUHJ1bmUgPSBtX29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJh
dGluZ0RhdGVzV2luZG93TG9uZyArIDE7CiAgICAgaWYgKHJvd3NUb1BydW5lID4gMCkgewogICAg
ICAgICBhdXRvIGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0
YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIg
QlkgeWVhciwgbW9udGgsIG1vbnRoRGF5IExJTUlUID87Il9zKTsKQEAgLTI5OTIsNiArMzE0OSw4
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2Rh
eUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KIAorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCiAgICAgdXBkYXRlT3BlcmF0
aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CiB9CiAKQEAgLTMwMjYsNiArMzE4NSwxMCBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGlj
Rm9yVGVzdGluZyhjb25zdAogewogICAgIC8vIFBvcHVsYXRlIHRoZSBPcGVyYXRpbmcgRGF0ZXMg
dGFibGUgd2l0aCBlbm91Z2ggZGF5cyB0byByZXF1aXJlIHBydW5pbmcuCiAgICAgZG91YmxlIGRh
eXNBZ29JblNlY29uZHMgPSAwOworCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24o
bV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPD0gbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKICAgICAg
ICAgZG91YmxlIGRheXNUb1N1YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSkudmFs
dWUoKTsKICAgICAgICAgZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsKQEAgLTMwNDMsNiArMzIwNiw4
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGly
ZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0CiAgICAgICAgIGluc2VydE9wZXJhdGluZ0RhdGVT
dGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisK
ICAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBpcyB0aGUgbGVhc3QgcmVjZW50IG9mIGFs
bCBlbnRyaWVzLgpAQCAtMzMzMCw2ICszNDk1LDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChzdGQ6Om9wdGkK
ICAgICAgICAgYmluZFBhcmFtZXRlciA9IFN0cmluZzo6bnVtYmVyKCpkb21haW5JRFRvTWF0Y2gp
OwogICAgIH0KIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIGNsZWFyVW5hdHRyaWJ1dGVk
U2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fY2xlYXJVbmF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCwgY2xlYXJVbmF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5LCAiY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJf
cyk7CiAKICAgICBpZiAoIWNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50CkBAIC0zMzQ5
LDYgKzM1MTcsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
bGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50KHN0ZDo6b3B0aQogICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBjbGVhckF0dHJp
YnV0ZWRTY29wZWRTdGF0ZW1lbnQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCgpCkBAIC0zNTQ0LDYgKzM3MTQsOSBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50cwogewogICAgIGF1dG8gZXhwaXJlZFRpbWVUb1NlbmQgPSBXYWxsVGltZTo6bm93KCkg
LSAxX2g7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsK
KyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRU
b1NvdXJjZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9T
b3VyY2UgPSA/Il9zKTsKICAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25T
dGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRp
b24gPSBudWxsIl9zKTsKIApAQCAtMzU1OSw2ICszNzMyLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudHMKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCisgICAgdHJhbnNh
Y3Rpb24uY29tbWl0KCk7CisKICAgICByZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKaW5kZXggNTEzMzc2ZTMzMzY0ODJh
ZTVkYTkxZWFiZTBlZDU1YzA1ZmRiNTA1OS4uYTA1NDYyYzIyYWEyY2Q1MTExOTAzMWU5MTBhYjY3
ZTc2MTM3MDdmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmgKQEAgLTE3NywxNyArMTc3LDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBk
ZXN0cm95U3RhdGVtZW50cygpOwogICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNl
dFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50PiYsIEFTQ0lJTGl0ZXJhbCwgY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKKyAgICB2b2lk
IHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJik7CiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFRvcEZyYW1lRG9tYWlu
JiwgY29uc3QgU3ViRnJhbWVEb21haW4mKSBjb25zdDsKICAgICBWZWN0b3I8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eT4g
Z2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zKHVuc2lnbmVkLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwogICAgIHZvaWQgb3BlbkFuZFVwZGF0ZVNj
aGVtYUlmTmVjZXNzYXJ5KCk7CiAgICAgU3RyaW5nIGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5J
RCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgQVNDSUlMaXRlcmFsIGdldFN1YlN0YXRpc3RpY1N0YXRl
bWVudChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2b2lkIGFwcGVuZFN1YlN0YXRpc3RpY0xp
c3QoU3RyaW5nQnVpbGRlciYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcm
IGRvbWFpbikgY29uc3Q7Ci0gICAgdm9pZCBtZXJnZVN0YXRpc3RpYyhjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBtZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQq
LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBtZXJnZVN0YXRpc3Rp
Yyhjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmKTsKKyAgICB2b2lkIG1lcmdlKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0
aW9uJiwgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpOwogICAgIHZvaWQgY2xlYXJEYXRhYmFzZUNvbnRlbnRzKCk7CiAgICAgYm9vbCBpbnNl
cnRPYnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgV0FSTl9VTlVT
RURfUkVUVVJOOwotICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBz
KGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgY29uc3QgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYpOwogICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBT
dHJpbmcmLCBjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYsIHVuc2lnbmVkKTsKICAg
ICBib29sIHJlbGF0aW9uc2hpcEV4aXN0cyhXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVz
ZXRTY29wZSYsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGZpcnN0RG9tYWluSUQsIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4pIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IGRvbWFpbklEKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CkBAIC0y
MzUsNyArMjM3LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGFyZUFsbFRoaXJkUGFydHlDb29raWVz
QmxvY2tlZFVuZGVyKGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CiAgICAgQ29va2ll
QWNjZXNzIGNvb2tpZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZy
YW1lRG9tYWluJik7CiAKLSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSk7CisgICAgdm9pZCBzZXRQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSk7CiAgICAgdW5zaWduZWQg
cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9t
YWluKHVuc2lnbmVkIHByaW1hcnlEb21haW5JRCwgU3RkU2V0PHVuc2lnbmVkPiYgbm9uUHJldmFs
ZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsK
ICAgICB2b2lkIHNldERvbWFpbnNBc1ByZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+JiYpOwogICAg
IHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJh
bWVEb21haW4mJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+LCBXZWJD
b3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3du
LCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vi
Q29yZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431470</attachid>
            <date>2021-06-15 13:01:29 -0700</date>
            <delta_ts>2021-06-15 13:30:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227034-20210615130128.patch</filename>
            <type>text/plain</type>
            <size>36657</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEyYTFjOTQ2OTI3MDhhNWNh
N2JiNzQyNzAwNTk5ZThiOTkzZTU2ZmYuLjRjY2ExZTBkMGM5NWU2N2MxYjMzYzBmMTkzYmQ0Yjc4
ZmQ3Njc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDYtMTUgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLCBmb3IgcGVyZm9ybWFu
Y2UuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNz
aW5nVGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0
aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRF
eHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisKIDIwMjEtMDYtMTUgIEpvbmF0aGFuIEJlZGFy
ZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb250ZXJleV0gU3VwcG9ydCBidWls
ZGluZyBXZWJLaXQgKEZvbGxvdy11cCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDg0M2FjZGNiNGE0ZjQ0OTc0OTAyYzNj
ZmI1ZjM3MDIyZmE4NjY4MDMuLmViZDQ1YmU3ZTI5OTJhNjUxNjllMGI1NzIwNTM3ZjgzMWMzNWZk
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmNwcApAQCAtNjI3LDEwICs2MjcsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmwK
IHsKICAgICBBU1NFUlQoZXhpc3RpbmdDb2x1bW5zLnNpemUoKSA8PSBleHBlY3RlZENvbHVtbnMu
c2l6ZSgpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OwogICAgIGZvciAoYXV0byYgY29sdW1uIDogZXhwZWN0ZWRDb2x1bW5zKSB7CiAgICAgICAgIGlm
IChleGlzdGluZ0NvbHVtbnMuY29udGFpbnMoY29sdW1uKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAKKyAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpCisgICAg
ICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAi
LCB0YWJsZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1bW4pKTsKICAgICAgICAgaWYgKCFzdGF0
ZW1lbnQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFi
bGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8g
dGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CkBAIC02NDQsNiArNjQ4LDcgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmlu
ZyYmIHRhYmwKICAgICAgICAgfQogICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQor
ICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCkKQEAgLTcwMCw2
ICs3MDUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nVGFibGVzSWZOZWNlc3NhcnkoKQogICAgIGlmICghbWlzc2luZ1RhYmxlcykKICAgICAg
ICAgcmV0dXJuOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogKm1p
c3NpbmdUYWJsZXMpIHsKICAgICAgICAgYXV0byBjcmVhdGVUYWJsZVF1ZXJ5ID0gZXhwZWN0ZWRU
YWJsZUFuZEluZGV4UXVlcmllcygpLmdldCh0YWJsZSkuZmlyc3Q7CiAgICAgICAgIGlmICghbV9k
YXRhYmFzZS5leGVjdXRlQ29tbWFuZFNsb3coY3JlYXRlVGFibGVRdWVyeSkpCkBAIC03MTEsNiAr
NzE4LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlz
c2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hl
bWFJZk5lY2Vzc2FyeSgpCkBAIC0xMDYzLDkgKzEwNzEsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25z
dCBTdHIKICAgICB9CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgbG9hZFN0YXRpc3RpY3MpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9uJiwg
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rp
b25JblByb2dyZXNzKCkpOworCiAgICAgYXV0byByZWdpc3RyYWJsZURvbWFpbklEID0gZG9tYWlu
SUQobG9hZFN0YXRpc3RpY3MucmVnaXN0cmFibGVEb21haW4pOwogICAgIAogICAgIGlmICghcmVn
aXN0cmFibGVEb21haW5JRCkKQEAgLTEwOTAsNiArMTEwMCw5IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJl
c291cmNlCiAgICAgaWYgKCFpc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJl
Z2luKCk7CisKICAgICBhdXRvJiBzdGF0aXN0aWNzTWFwID0gbWVtb3J5U3RvcmUuZGF0YSgpOwog
ICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcC52YWx1ZXMoKSkg
ewogICAgICAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9tYWluKHN0YXRpc3RpYyk7
CkBAIC0xMTAzLDEyICsxMTE2LDE1IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlCiAgICAgLy8g
TWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9yIGludGVyLWRvbWFpbiByZWxhdGlvbnNoaXBzIHNvIHdl
CiAgICAgLy8gY2FuIHJlZmVyIHRvIHRoZSBPYnNlcnZlZERvbWFpbiB0YWJsZSBlbnRyaWVzCiAg
ICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKQotICAgICAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHN0YXRpc3RpYyk7CisgICAgICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcHModHJhbnNhY3Rpb24sIHN0YXRpc3RpYyk7CisKKyAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bWVyZ2UoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiBjdXJyZW50LCBjb25zdCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJiBvdGhlcikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om1lcmdlKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiBjdXJyZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJiBvdGhlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBB
U1NFUlQobV9kYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAKICAgICBhdXRvIGN1
cnJlbnRSZWdpc3RyYWJsZURvbWFpbiA9IGN1cnJlbnQtPmNvbHVtblRleHQoUmVnaXN0cmFibGVE
b21haW5JbmRleCk7CiAgICAgYXV0byBjdXJyZW50TGFzdFNlZW4gPSBjdXJyZW50LT5jb2x1bW5E
b3VibGUoTGFzdFNlZW5JbmRleCk7CkBAIC0xMTM0LDE2ICsxMTUwLDE2IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlKFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudCogY3VycmVuCiAgICAgaWYgKG90aGVyLmdyYW5kZmF0aGVyZWQgJiYgIWN1cnJlbnRHcmFu
ZGZhdGhlcmVkKQogICAgICAgICBzZXRHcmFuZGZhdGhlcmVkKG90aGVyLnJlZ2lzdHJhYmxlRG9t
YWluLCB0cnVlKTsKICAgICBpZiAob3RoZXIuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiAhY3VycmVu
dElzUHJldmFsZW50KQotICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShvdGhlci5yZWdpc3Ry
YWJsZURvbWFpbik7CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCBv
dGhlci5yZWdpc3RyYWJsZURvbWFpbik7CiAgICAgaWYgKG90aGVyLmlzVmVyeVByZXZhbGVudFJl
c291cmNlICYmICFjdXJyZW50SXNWZXJ5UHJldmFsZW50KQotICAgICAgICBzZXRWZXJ5UHJldmFs
ZW50UmVzb3VyY2Uob3RoZXIucmVnaXN0cmFibGVEb21haW4pOworICAgICAgICBzZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluKTsKICAg
ICBpZiAob3RoZXIuZGF0YVJlY29yZHNSZW1vdmVkID4gY3VycmVudERhdGFSZWNvcmRzUmVtb3Zl
ZCkKICAgICAgICAgdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkKG90aGVyLnJlZ2lzdHJhYmxlRG9t
YWluLCBvdGhlci5kYXRhUmVjb3Jkc1JlbW92ZWQpOwogICAgIGlmIChvdGhlci5nb3RMaW5rRGVj
b3JhdGlvbkZyb21QcmV2YWxlbnRSZXNvdXJjZSAmJiAhY3VycmVudElzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWwpCiAgICAgICAgIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwob3RoZXIucmVnaXN0cmFibGVEb21haW4sIHRydWUpOwogfQogCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBTUUxpdGVUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3Rp
YykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTE1NiwxMiArMTE3
MiwxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0
YXRpc3RpYyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgbWVyZ2Uoc2NvcGVkU3RhdGVtZW50LmdldCgpLCBzdGF0aXN0aWMpOworICAgIG1lcmdl
KHRyYW5zYWN0aW9uLCBzY29wZWRTdGF0ZW1lbnQuZ2V0KCksIHN0YXRpc3RpYyk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGljcyhW
ZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChzdGF0aXN0aWNzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRh
YmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAogICAgIGZvciAoYXV0byYgc3RhdGlz
dGljIDogc3RhdGlzdGljcykgewogICAgICAgICBpZiAoIWRvbWFpbklEKHN0YXRpc3RpYy5yZWdp
c3RyYWJsZURvbWFpbikpIHsKQEAgLTExNzIsMTMgKzExOTMsMTUgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJj
ZUxvYWRTdGEKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgbWVyZ2VTdGF0aXN0aWMoc3RhdGlzdGljKTsKKyAgICAgICAg
ICAgIG1lcmdlU3RhdGlzdGljKHRyYW5zYWN0aW9uLCBzdGF0aXN0aWMpOwogICAgIH0KIAogICAg
IC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRpb25zaGlwcyBz
byB3ZQogICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFibGUgZW50cmll
cy4KICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpCi0gICAgICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwcyh0cmFuc2FjdGlvbiwgc3RhdGlzdGljKTsKKworICAgIHRyYW5zYWN0aW9uLmNv
bW1pdCgpOwogfQogCiBzdGF0aWMgQVNDSUlMaXRlcmFsIGpvaW5TdWJTdGF0aXN0aWNzRm9yU29y
dGluZygpCkBAIC0xNDE5LDE1ICsxNDQyLDIyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMoKQogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogCiAgICAgYXV0byBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzID0gZmlu
ZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICBpZiAobm90VmVyeVByZXZhbGVudFJl
c291cmNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0
aXN0aWMgOiBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzLnZhbHVlcygpKSB7CiAgICAgICAgIGlm
IChzaG91bGRTa2lwKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGF1dG8gbmV3UHJldmFsZW5jZSA9IGNsYXNzaWZp
ZXIoKS5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMuc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKTsKLSAgICAgICAg
aWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSkKLSAgICAg
ICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxl
RG9tYWluLCBuZXdQcmV2YWxlbmNlKTsKKyAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVz
b3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSkgeworICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlv
bi5pblByb2dyZXNzKCkpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAg
ICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCByZXNvdXJjZVN0YXRp
c3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgbmV3UHJldmFsZW5jZSk7CisgICAgICAgIH0KICAgICB9
CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKCkKQEAgLTE2MjQs
NyArMTY1NCwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpn
cmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbQogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBI
YXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgZm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6
IGRvbWFpbnMpIHsKICAgICAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJsZURvbWFpbik7CiAgICAgICAgIGlmICgh
cmVzdWx0LnNlY29uZCkKQEAgLTE2MzYsNiArMTY3MCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFz
aFNlCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFG
b3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiBWZWN0b3I8UmVn
aXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1
cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKQpAQCAtMTY0OCwxMyArMTY4MywxNiBA
QCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZQogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
cHJpbWFyeURvbWFpbnNUb0Jsb2NrOwogICAgIHByaW1hcnlEb21haW5zVG9CbG9jay5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDIpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24o
bV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZGVidWdTdGF0
aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IGZvciBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlIiwgdGhpcyk7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCi0gICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZGVidWdTdGF0aWNQcmV2
YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAgICBzZXRQ
cmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJj
ZSgpLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKICAgICBwcmltYXJ5RG9tYWluc1Rv
QmxvY2sudW5jaGVja2VkQXBwZW5kKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7CiAK
ICAgICBpZiAoIWRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsKQEAg
LTE2NjMsNyArMTcwMSw3IEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlCiAgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVi
dWdNb2RlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQgZm9y
IGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UiLCB0aGlzKTsKICAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgIH0KLSAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAg
ICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRlYnVnTWFudWFsUHJldmFs
ZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CiAgICAgICAgIHBy
aW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSgpKTsKIAogICAgICAgICBpZiAoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSB7CkBAIC0x
NjcyLDYgKzE3MTAsOCBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZQogICAgICAgICB9CiAgICAg
fQogCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKICAgICByZXR1cm4gcHJpbWFyeURvbWFp
bnNUb0Jsb2NrOwogfQogCkBAIC0xNjgyLDggKzE3MjIsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJh
YmxlRG8KICAgICBib29sIGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlID0gdGFy
Z2V0RG9tYWluID09IHRvcEZyYW1lRG9tYWluOwogICAgIGJvb2wgYXJlVGFyZ2V0QW5kU291cmNl
RG9tYWluc1NhbWVTaXRlID0gdGFyZ2V0RG9tYWluID09IHNvdXJjZURvbWFpbjsKIAorICAgIFNR
TGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworCiAgICAgYm9vbCBzdGF0
aXN0aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIWlzTWFpbkZyYW1lICYmICEoYXJl
VGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgfHwgYXJlVGFyZ2V0QW5kU291cmNlRG9t
YWluc1NhbWVTaXRlKSkgeworICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkK
KyAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICAgICAgYXV0byB0YXJnZXRS
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJn
ZXREb21haW4pOwogICAgICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24gd2FzIG5v
dCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBvZiB0YXJnZXQgZG9tYWlu
IiwgdGhpcyk7CkBAIC0xNjk4LDYgKzE3NDMsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEbwog
ICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsKICAgICAgICAgICAgIGJvb2wgd2FzTmF2aWdhdGVk
QWZ0ZXJTaG9ydERlbGF5V2l0aG91dFVzZXJJbnRlcmFjdGlvbiA9ICF3YXNQb3RlbnRpYWxseUlu
aXRpYXRlZEJ5VXNlciAmJiBkZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkIDwgcGFyYW1l
dGVycygpLm1pbkRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWRUb05vdEJlQVJlZGlyZWN0
OwogICAgICAgICAgICAgaWYgKGlzUmVkaXJlY3QgfHwgd2FzTmF2aWdhdGVkQWZ0ZXJTaG9ydERl
bGF5V2l0aG91dFVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICAgICAgICAgIGlmICghdHJhbnNh
Y3Rpb24uaW5Qcm9ncmVzcygpKQorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOworCiAgICAgICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7
CiAgICAgICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwogICAgICAgICAgICAgICAg
IGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCB8fCAhcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vj
b25kKSB7CkBAIC0xNzE3LDYgKzE3NjUsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEbwogICAg
ICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNSZWRpcmVjdCkgeworICAgICAgICAgICAgaWYgKCF0cmFu
c2FjdGlvbi5pblByb2dyZXNzKCkpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4o
KTsKKwogICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7CiAgICAg
ICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CiAgICAgICAgICAgICBpZiAoIXRhcmdldFJl
c3VsdC5zZWNvbmQgfHwgIXJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCkgewpAQCAtMTcy
OCw2ICsxNzc5LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG8KICAgICAgICAgICAgIHN0YXRp
c3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CisgICAgdHJhbnNhY3Rp
b24uY29tbWl0KCk7CiAKICAgICBpZiAoc3RhdGlzdGljc1dlcmVVcGRhdGVkKQogICAgICAgICBz
Y2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CkBAIC0xNzM4
LDYgKzE3OTAsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjps
b2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uKGNvbgogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChmcm9tRG9tYWluICE9IHRvRG9tYWluKTsKIAorICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9Eb21haW4pOwogICAgIGlmICghdG9Eb21h
aW5SZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQo
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjps
b2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0
byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTE3NDcsMTIgKzE4MDIsMTcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9h
ZFdpdGhMaW5rRGVjb3JhdGlvbihjb24KICAgICAKICAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJj
ZShmcm9tRG9tYWluKSkKICAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCh0b0RvbWFpbiwgdHJ1ZSk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0K
IAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCF0YXJnZXRSZXN1
bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgd2Fz
IG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAt
MTc2Nyw2ICsxODI3LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW0KICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNl
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorCisgICAgdHJhbnNhY3Rpb24u
Y29tbWl0KCk7CiAgICAgCiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KQEAgLTE3OTEsNiAr
MTg1Myw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1Vz
ZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlm
ICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VE
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bG9nVXNlckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTE3OTgsNiArMTg2Myw5IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFt
ZURvbWFpCiAgICAgfQogICAgIGJvb2wgZGlkSGF2ZVByZXZpb3VzVXNlckludGVyYWN0aW9uID0g
aGFzSGFkVXNlckludGVyYWN0aW9uKGRvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6Okxvbmcp
OwogICAgIHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7
CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKwogICAgIGlmIChkaWRIYXZlUHJldmlvdXNV
c2VySW50ZXJhY3Rpb24pIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMTgwOSw2ICsxODc3LDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGUKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9u
IHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAg
ICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbiB3YXMg
bm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0x
ODI0LDYgKzE4OTUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CiAKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKwogICAg
IC8vIFVwZGF0ZSBjb29raWUgYmxvY2tpbmcgdW5jb25kaXRpb25hbGx5IHNpbmNlIGEgY2FsbCB0
byBoYXNIYWRVc2VySW50ZXJhY3Rpb24oKQogICAgIC8vIHRvIGNoZWNrIHRoZSBwcmV2aW91cyB1
c2VyIGludGVyYWN0aW9uIHN0YXR1cyBjb3VsZCBjYWxsIGNsZWFyVXNlckludGVyYWN0aW9uKCks
CiAgICAgLy8gYmxvd2luZyB0aGUgY2FsbCBzdGFjay4KQEAgLTE4NTgsOSArMTkzMSwxMSBAQCBi
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNIYWRVc2VySW50ZXJh
Y3Rpb24oY29uc3QgUmVnaXN0cmFibAogICAgIHJldHVybiBoYWRVc2VySW50ZXJhY3Rpb247CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2UgbmV3UHJldmFsZW5jZSkKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9uJiwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBu
ZXdQcmV2YWxlbmNlKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFT
U0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKwogICAgIGlmIChzaG91
bGRTa2lwKGRvbWFpbikpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjAwNiw2ICsyMDgxLDkgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBSZWdpc3RyYWIKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZh
bGVudFJlc291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKQEAgLTIwMjEsMTIgKzIwOTksMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWIKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgZG9tYWluLCBib29sIHZhbHVlKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Cisg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3Vs
dC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5k
ZmF0aGVyZWQgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIs
IHRoaXMpOwpAQCAtMjA0MSwxMiArMjEyNCwxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYQog
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCBmYWls
ZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisK
ICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKQEAgLTIwNjEsNiArMjE0OSw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENv
b2tpZURhdGFSZW1vdmFsIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsK
IH0KIAogU2Vjb25kcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0TW9z
dFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRG9t
YWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0CkBAIC0yMTA1
LDYgKzIxOTUsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUwogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9k
YXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21h
aW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJP
Ul9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIxMTIsMTIgKzIy
MDUsMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFMKICAgICB9CiAgICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHRvcCBmcmFtZSBkb21haW4uCiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+
KHsgdG9wRnJhbWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9u
LmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21h
aW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0
ZW1wdCIsIHRoaXMpOwpAQCAtMjEyNSwxMiArMjIyMywxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4o
Y29ucwogICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhh
dmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4KICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNR
dWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnJl
c3VsdC5zZWNvbmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0
IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJh
c2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWlu
KTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyB3YXMgbm90IGNvbXBsZXRl
ZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0yMTM4LDEyICsyMjQx
LDE3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTCiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0
ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSBy
ZWRpcmVjdCBkb21haW4uCiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsg
cmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNv
bW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYg
c3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisK
ICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RGcm9tIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQi
LCB0aGlzKTsKQEAgLTIxNTEsMTIgKzIyNTksMTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QK
ICAgICB9CiAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEg
c3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KICAgICBpbnNlcnREb21h
aW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBI
YXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNl
Y29uZCk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4m
IHJlZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisg
ICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNh
Y3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOwogICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIxNjUsMTIgKzIyNzgsMTcgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFRvcEYKIAogICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0
RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSks
ICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKICAg
ICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0
byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIxNzgsNiArMjI5Niw4IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKGNvbnN0IFRvCiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFr
ZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBk
b21haW4uCiAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERv
bWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9
CiAKIHN0ZDo6cGFpcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6QWRkZWRS
ZWNvcmQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKQEAgLTI2MzUsNiArMjc1NSw5IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICghcmVzdWx0LnNl
Y29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNlZW4g
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpA
QCAtMjY0Miw2ICsyNzY1LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGQKICAgICB9CiAgICAg
CiAgICAgdXBkYXRlTGFzdFNlZW4oZG9tYWluLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vj
b25kcy5zZWNvbmRzKCkpKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQpAQCAtMjY1MCwxNCArMjc3NSwyOCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZQogCiAgICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBzZXRQcmV2YWxl
bnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9tYWluKTsKKyAgICB0cmFuc2FjdGlvbi5jb21taXQo
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgU1FMaXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIEFTU0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsK
KworICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1
dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
ZG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1
ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHNldFByZXZhbGVudFJlc291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFs
ZW5jZTo6SGlnaCk7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRvbWFp
biwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQpAQCAtMjY2NiwxNCArMjgwNSwzMCBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgUmVnaXN0cgogCiAgICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKICAgICAgICAg
cmV0dXJuOwotICAgIAorCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRh
YmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAgIHNldFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9tYWluKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU1FMaXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIEFTU0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygp
KTsKKworICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCisgICAgICAgIHJldHVybjsKKwogICAg
IGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21h
aW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSB3YXMgbm90IGNvbXBs
ZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9h
ZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZSh0cmFuc2Fj
dGlvbiwgZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZURhdGFSZWNvcmRz
UmVtb3ZlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBpbnQgdmFsdWUpCkBAIC0y
OTcxLDYgKzMxMjYsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJh
c2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBpbnQgcm93c1RvUHJ1bmUgPSBt
X29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyArIDE7CiAgICAg
aWYgKHJvd3NUb1BydW5lID4gMCkgewogICAgICAgICBhdXRvIGRlbGV0ZUxlYXN0UmVjZW50T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRF
IEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciwgbW9udGgsIG1vbnRoRGF5IExJTUlU
ID87Il9zKTsKQEAgLTI5OTIsNiArMzE1MCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAorICAgIHRyYW5zYWN0aW9uLmNv
bW1pdCgpOworCiAgICAgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CiB9CiAKQEAg
LTMwMjYsNiArMzE4NiwxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdAogewogICAgIC8vIFBv
cHVsYXRlIHRoZSBPcGVyYXRpbmcgRGF0ZXMgdGFibGUgd2l0aCBlbm91Z2ggZGF5cyB0byByZXF1
aXJlIHBydW5pbmcuCiAgICAgZG91YmxlIGRheXNBZ29JblNlY29uZHMgPSAwOworCisgICAgU1FM
aXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24u
YmVnaW4oKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtYmVyT2ZPcGVyYXRp
bmdEYXlzUGFzc2VkOyBpKyspIHsKICAgICAgICAgZG91YmxlIGRheXNUb1N1YnRyYWN0ID0gU2Vj
b25kczo6ZnJvbUhvdXJzKDI0ICogaSkudmFsdWUoKTsKICAgICAgICAgZGF5c0Fnb0luU2Vjb25k
cyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlzVG9T
dWJ0cmFjdDsKQEAgLTMwNDMsNiArMzIwNyw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0CiAg
ICAgICAgIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogCisg
ICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKICAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFt
ZXRlcnMoKTsKIAogICAgIC8vIE1ha2Ugc3VyZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZSBpcyB0aGUgbGVhc3QgcmVjZW50IG9mIGFsbCBlbnRyaWVzLgpAQCAtMzMzMCw2ICszNDk2LDkg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudChzdGQ6Om9wdGkKICAgICAgICAgYmluZFBhcmFtZXRlciA9IFN0cmlu
Zzo6bnVtYmVyKCpkb21haW5JRFRvTWF0Y2gpOwogICAgIH0KIAorICAgIFNRTGl0ZVRyYW5zYWN0
aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisK
ICAgICBhdXRvIGNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVk
U3RhdGVtZW50KG1fY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRl
bWVudCwgY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5LCAiY2xl
YXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7CiAKICAgICBpZiAoIWNsZWFyVW5hdHRyaWJ1
dGVkU2NvcGVkU3RhdGVtZW50CkBAIC0zMzQ5LDYgKzM1MTgsOCBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50KHN0
ZDo6b3B0aQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KKworICAgIHRyYW5z
YWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpCkBAIC0zNTQ0LDYg
KzM3MTUsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJr
QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50cwogewogICAgIGF1dG8gZXhwaXJlZFRp
bWVUb1NlbmQgPSBXYWxsVGltZTo6bm93KCkgLSAxX2g7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlv
biB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAg
ICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZVN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSA/Il9zKTsKICAgICBhdXRvIGVhcmxp
ZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBudWxsIl9zKTsKIApAQCAtMzU1OSw2ICsz
NzMzLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0F0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHMKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKICAgICByZXR1cm47
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmgKaW5kZXggNTEzMzc2ZTMzMzY0ODJhZTVkYTkxZWFiZTBlZDU1YzA1ZmRiNTA1OS4uYTA1
NDYyYzIyYWEyY2Q1MTExOTAzMWU5MTBhYjY3ZTc2MTM3MDdmNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKQEAgLTE3NywxNyArMTc3
LDE5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95U3RhdGVtZW50cygpOwogICAgIFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYsIEFTQ0lJTGl0ZXJhbCwgY29uc3Qg
U3RyaW5nJikgY29uc3Q7CiAKKyAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFdl
YkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAg
ICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFu
c2FjdGlvbiYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CiAgICAgYm9vbCBoYXNTdG9yYWdl
QWNjZXNzKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgU3ViRnJhbWVEb21haW4mKSBjb25z
dDsKICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eT4gZ2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0Zp
cnN0UGFydHlEb21haW5zKHVuc2lnbmVkLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0
OwogICAgIHZvaWQgb3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCk7CiAgICAgU3RyaW5n
IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgQVNDSUlM
aXRlcmFsIGdldFN1YlN0YXRpc3RpY1N0YXRlbWVudChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAg
ICB2b2lkIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoU3RyaW5nQnVpbGRlciYsIGNvbnN0IFN0cmlu
ZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbikgY29uc3Q7Ci0gICAgdm9pZCBtZXJn
ZVN0YXRpc3RpYyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBtZXJn
ZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqLCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Jik7CisgICAgdm9pZCBtZXJnZVN0YXRpc3RpYyhjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2Fj
dGlvbiYsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIG1lcmdlKGNv
bnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
KiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIHZvaWQgY2xlYXJEYXRhYmFz
ZUNvbnRlbnRzKCk7CiAgICAgYm9vbCBpbnNlcnRPYnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZvaWQgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9p
ZCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0
aW9uJiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIHZvaWQgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmLCBjb25zdCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYsIHVuc2lnbmVkKTsKICAgICBib29sIHJlbGF0aW9uc2hpcEV4aXN0cyhXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSYsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IGZpcnN0RG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4p
IGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGRvbWFpbklEKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJikgY29uc3Q7CkBAIC0yMzUsNyArMjM3LDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIGFyZUFsbFRoaXJkUGFydHlDb29raWVzQmxvY2tlZFVuZGVyKGNvbnN0IFRvcEZyYW1lRG9t
YWluJikgb3ZlcnJpZGU7CiAgICAgQ29va2llQWNjZXNzIGNvb2tpZUFjY2Vzcyhjb25zdCBTdWJS
ZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJik7CiAKLSAgICB2b2lkIHNldFBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZSk7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpT
UUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZSk7CiAgICAgdW5zaWduZWQgcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9t
YWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKHVuc2lnbmVkIHByaW1hcnlEb21haW5JRCwg
U3RkU2V0PHVuc2lnbmVkPiYgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCB1bnNpZ25l
ZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKICAgICB2b2lkIHNldERvbWFpbnNBc1ByZXZhbGVu
dChTdGRTZXQ8dW5zaWduZWQ+JiYpOwogICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJu
YWwoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXI+LCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6
U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duLCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQp
PiYmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431474</attachid>
            <date>2021-06-15 13:30:44 -0700</date>
            <delta_ts>2021-06-15 13:31:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227034-20210615133043.patch</filename>
            <type>text/plain</type>
            <size>54307</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEyYTFjOTQ2OTI3MDhhNWNh
N2JiNzQyNzAwNTk5ZThiOTkzZTU2ZmYuLjRjY2ExZTBkMGM5NWU2N2MxYjMzYzBmMTkzYmQ0Yjc4
ZmQ3Njc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDYtMTUgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLCBmb3IgcGVyZm9ybWFu
Y2UuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNz
aW5nVGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0
aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRF
eHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisKIDIwMjEtMDYtMTUgIEpvbmF0aGFuIEJlZGFy
ZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb250ZXJleV0gU3VwcG9ydCBidWls
ZGluZyBXZWJLaXQgKEZvbGxvdy11cCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDg0M2FjZGNiNGE0ZjQ0OTc0OTAyYzNj
ZmI1ZjM3MDIyZmE4NjY4MDMuLmVlYTVjNzVjOGNjODQ5ZGUwZTg2NTEwNDU0MTVlYjI5ZDUwNjI1
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC02MjcsMTAgKzYyOCwxNCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29s
dW1uc1RvVGFibGUoU3RyaW5nJiYgdGFibAogewogICAgIEFTU0VSVChleGlzdGluZ0NvbHVtbnMu
c2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5zaXplKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CiAgICAgZm9yIChhdXRvJiBjb2x1bW4gOiBleHBl
Y3RlZENvbHVtbnMpIHsKICAgICAgICAgaWYgKGV4aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1
bW4pKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAorICAgICAgICBpZiAoIXRyYW5z
YWN0aW9uLmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisK
ICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIsIGNv
bHVtbikpOwogICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQg
dG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTY0NCw2
ICs2NDksNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nQ29sdW1uc1RvVGFibGUoU3RyaW5nJiYgdGFibAogICAgICAgICB9CiAgICAgICAgIHN0
YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAK
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1
bW5zSWZOZWNlc3NhcnkoKQpAQCAtNzAwLDYgKzcwNiw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdUYWJsZXNJZk5lY2Vzc2FyeSgpCiAgICAg
aWYgKCFtaXNzaW5nVGFibGVzKQogICAgICAgICByZXR1cm47CiAKKyAgICBTUUxpdGVUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwog
ICAgIGZvciAoYXV0byYgdGFibGUgOiAqbWlzc2luZ1RhYmxlcykgewogICAgICAgICBhdXRvIGNy
ZWF0ZVRhYmxlUXVlcnkgPSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0KHRhYmxl
KS5maXJzdDsKICAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kU2xvdyhjcmVh
dGVUYWJsZVF1ZXJ5KSkKQEAgLTcxMSw2ICs3MTksNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nVGFibGVzSWZOZWNlc3NhcnkoKQogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICB0cmFu
c2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkKQEAgLTEwMjcsNyArMTAz
Niw3IEBAIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5JRChjb25zdCBSZWdpCiAgICAgcmV0dXJuIHNjb3BlZFN0YXRlbWVu
dC0+Y29sdW1uSW50KDApOwogfQogCi1TdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5MaXN0KQorU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBTUUxpdGVUcmFuc2FjdGlv
biYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5MaXN0KQogewogICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBmb3IgKGF1dG8mIHRvcEZyYW1lUmVzb3VyY2Ug
OiBkb21haW5MaXN0KSB7CkBAIC0xMDM4LDkgKzEwNDcsOSBAQCBTdHJpbmcgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNvbnN0IEhh
c2hTZQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qo
Y29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+
JiBkb21haW5MaXN0LCB1bnNpZ25lZCBkb21haW5JRCkKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QoY29uc3QgU1FM
aXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29u
c3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFp
bklEKQogewotICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFr
ZURvbWFpbkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgYXV0byBpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJp
bmcoc3RhdGVtZW50LCBlbnN1cmVBbmRNYWtlRG9tYWluTGlzdCh0cmFuc2FjdGlvbiwgZG9tYWlu
TGlzdCksICIgKTsiKSk7CiAgICAgCiAgICAgaWYgKCFpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1l
bnQKICAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kSW50KDEsIGRv
bWFpbklEKSAhPSBTUUxJVEVfT0spIHsKQEAgLTEwNjMsMjQgKzEwNzIsMjYgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdChjb25zdCBTdHIKICAgICB9CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFNRTGl0ZVRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0
YXRpc3RpY3MpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJU
KG1fZGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworCiAgICAgYXV0byByZWdpc3Ry
YWJsZURvbWFpbklEID0gZG9tYWluSUQobG9hZFN0YXRpc3RpY3MucmVnaXN0cmFibGVEb21haW4p
OwogICAgIAogICAgIGlmICghcmVnaXN0cmFibGVEb21haW5JRCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdG9yYWdlQWNjZXNzVW5kZXJUb3BG
cmFtZURvbWFpbnNRdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJh
bWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOwotICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3Rh
dGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZh
bHVlKCkpOwotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBsb2FkU3RhdGlz
dGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50LCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOwotICAgIGluc2VydERvbWFpblJlbGF0
aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIGxvYWRTdGF0aXN0
aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVnaXN0cmFibGVEb21haW5JRC52YWx1
ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnNRdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxh
dGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgbG9hZFN0
YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFibGVEb21h
aW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5
LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20sIHJlZ2lzdHJh
YmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0
b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVM
aW5rRGVjb3JhdGlvbnNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOwotICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0
c1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzLCBy
ZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodHJhbnNhY3Rpb24sIHN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5
LCBsb2FkU3RhdGlzdGljcy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lz
dHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlz
dCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3RhdGlz
dGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVl
KCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRRdWVyeSwg
bG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudCwgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLCBy
ZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodHJhbnNhY3Rpb24sIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgbG9h
ZFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFibGVEb21h
aW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0
aW9uLCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxvYWRTdGF0aXN0aWNz
LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFs
dWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9t
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSwgcmVnaXN0
cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KHRyYW5zYWN0aW9uLCB0b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzUXVlcnksIGxvYWRT
dGF0aXN0aWNzLnRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHMsIHJlZ2lzdHJhYmxlRG9t
YWluSUQudmFsdWUoKSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZSYgbWVtb3J5U3RvcmUpCkBAIC0xMDkwLDYgKzExMDEsOSBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9y
ZShjb25zdCBSZXNvdXJjZQogICAgIGlmICghaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
KyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byYgc3RhdGlzdGljc01hcCA9IG1lbW9yeVN0b3Jl
LmRhdGEoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3NNYXAu
dmFsdWVzKCkpIHsKICAgICAgICAgYXV0byByZXN1bHQgPSBpbnNlcnRPYnNlcnZlZERvbWFpbihz
dGF0aXN0aWMpOwpAQCAtMTEwMywxMiArMTExNywxNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9yZShjb25zdCBSZXNvdXJj
ZQogICAgIC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRpb25z
aGlwcyBzbyB3ZQogICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFibGUg
ZW50cmllcwogICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcC52YWx1ZXMo
KSkKLSAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhzdGF0aXN0aWMpOworICAgICAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHRyYW5zYWN0aW9uLCBzdGF0aXN0aWMpOworCisg
ICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Om1lcmdlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCogY3VycmVudCwg
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgb3RoZXIpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZShjb25zdCBTUUxpdGVUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCogY3VycmVudCwgY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgb3RoZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogCiAg
ICAgYXV0byBjdXJyZW50UmVnaXN0cmFibGVEb21haW4gPSBjdXJyZW50LT5jb2x1bW5UZXh0KFJl
Z2lzdHJhYmxlRG9tYWluSW5kZXgpOwogICAgIGF1dG8gY3VycmVudExhc3RTZWVuID0gY3VycmVu
dC0+Y29sdW1uRG91YmxlKExhc3RTZWVuSW5kZXgpOwpAQCAtMTEzNCwxNiArMTE1MSwxNiBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZShXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQqIGN1cnJlbgogICAgIGlmIChvdGhlci5ncmFuZGZhdGhlcmVkICYmICFj
dXJyZW50R3JhbmRmYXRoZXJlZCkKICAgICAgICAgc2V0R3JhbmRmYXRoZXJlZChvdGhlci5yZWdp
c3RyYWJsZURvbWFpbiwgdHJ1ZSk7CiAgICAgaWYgKG90aGVyLmlzUHJldmFsZW50UmVzb3VyY2Ug
JiYgIWN1cnJlbnRJc1ByZXZhbGVudCkKLSAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2Uob3Ro
ZXIucmVnaXN0cmFibGVEb21haW4pOworICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZSh0cmFu
c2FjdGlvbiwgb3RoZXIucmVnaXN0cmFibGVEb21haW4pOwogICAgIGlmIChvdGhlci5pc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSAmJiAhY3VycmVudElzVmVyeVByZXZhbGVudCkKLSAgICAgICAgc2V0
VmVyeVByZXZhbGVudFJlc291cmNlKG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAg
c2V0VmVyeVByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCBvdGhlci5yZWdpc3RyYWJsZURv
bWFpbik7CiAgICAgaWYgKG90aGVyLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IGN1cnJlbnREYXRhUmVj
b3Jkc1JlbW92ZWQpCiAgICAgICAgIHVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZChvdGhlci5yZWdp
c3RyYWJsZURvbWFpbiwgb3RoZXIuZGF0YVJlY29yZHNSZW1vdmVkKTsKICAgICBpZiAob3RoZXIu
Z290TGlua0RlY29yYXRpb25Gcm9tUHJldmFsZW50UmVzb3VyY2UgJiYgIWN1cnJlbnRJc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKQotICAgICAgICBzZXRJc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlKTsK
KyAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCh0cmFuc2Fj
dGlvbiwgb3RoZXIucmVnaXN0cmFibGVEb21haW4sIHRydWUpOwogfQogCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBTUUxpdGVUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpYykKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTE1NiwxMiArMTE3MywxNyBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbWVy
Z2Uoc2NvcGVkU3RhdGVtZW50LmdldCgpLCBzdGF0aXN0aWMpOworICAgIG1lcmdlKHRyYW5zYWN0
aW9uLCBzY29wZWRTdGF0ZW1lbnQuZ2V0KCksIHN0YXRpc3RpYyk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVz
b3VyY2VMb2FkU3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQogewogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworICAgIGlmIChzdGF0aXN0aWNzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Cisg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAogICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3Rh
dGlzdGljcykgewogICAgICAgICBpZiAoIWRvbWFpbklEKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURv
bWFpbikpIHsKQEAgLTExNzIsMTMgKzExOTQsMTUgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGEK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgbWVyZ2VTdGF0aXN0aWMoc3RhdGlzdGljKTsKKyAgICAgICAgICAgIG1lcmdl
U3RhdGlzdGljKHRyYW5zYWN0aW9uLCBzdGF0aXN0aWMpOwogICAgIH0KIAogICAgIC8vIE1ha2Ug
YSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRpb25zaGlwcyBzbyB3ZQogICAg
IC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFibGUgZW50cmllcy4KICAgICBm
b3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpCi0gICAgICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
cyh0cmFuc2FjdGlvbiwgc3RhdGlzdGljKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwog
fQogCiBzdGF0aWMgQVNDSUlMaXRlcmFsIGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGluZygpCkBA
IC0xNDE5LDE1ICsxNDQzLDIyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMoKQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogCiAgICAgYXV0byBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzID0gZmluZE5vdFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICBpZiAobm90VmVyeVByZXZhbGVudFJlc291cmNlcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBu
b3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChzaG91bGRT
a2lwKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIGF1dG8gbmV3UHJldmFsZW5jZSA9IGNsYXNzaWZpZXIoKS5jYWxj
dWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKTsKLSAgICAgICAgaWYgKG5ld1By
ZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSkKLSAgICAgICAgICAgIHNl
dFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBu
ZXdQcmV2YWxlbmNlKTsKKyAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0
aXN0aWMucHJldmFsZW5jZSkgeworICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dy
ZXNzKCkpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICAgICAgICAg
IHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCByZXNvdXJjZVN0YXRpc3RpYy5yZWdp
c3RyYWJsZURvbWFpbiwgbmV3UHJldmFsZW5jZSk7CisgICAgICAgIH0KICAgICB9CisgICAgdHJh
bnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKCkKQEAgLTE1MzQsNiArMTU2NSw5
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9y
YWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAgfQogICAgIH0KIAorICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJl
Z2luKCk7CisKICAgICBhdXRvIGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRB
c0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBh
cnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJICsgMSBXSEVSRSBkb21haW5JRCA9ID8iX3MpOwogICAg
IGlmICghaW5jcmVtZW50U3RvcmFnZUFjY2VzcwogICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdl
QWNjZXNzLT5iaW5kSW50KDEsICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpICE9IFNRTElURV9PSwpA
QCAtMTU0Myw5ICsxNTc3LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3Zl
KHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJ
RCwgdXNlcldhc1Byb21wdGVkRWFybGllciwgc2NvcGUsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQgd2FzR3Jh
bnRlZCkgbXV0YWJsZSB7CisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwodHJhbnNhY3Rp
b24sIFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJh
bWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyLCBzY29wZSwgW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTdG9yYWdlQWNjZXNzV2FzR3Jh
bnRlZCB3YXNHcmFudGVkKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Fz
R3JhbnRlZCA9PSBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzID8gU3RvcmFnZUFjY2Vzc1N0
YXR1czo6SGFzQWNjZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vz
cyk7CiAgICAgfSk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRl
ck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiBkb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MsIFBhZ2VJZGVudGlmaWVyIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYgb3Bl
bmVyRG9tYWluKQpAQCAtMTU2MSwxMyArMTU5NywxOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFp
bgogICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklU
UERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltJVFBdIFN0b3JhZ2UgYWNj
ZXNzIHdhcyBncmFudGVkIGZvciAnIl9zLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Muc3Ry
aW5nKCksICInIHVuZGVyIG9wZW5lciBwYWdlIGZyb20gJyJfcywgb3BlbmVyRG9tYWluLnN0cmlu
ZygpLCAiJywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVuZWQgd2luZG93LiJfcykp
OwogICAgIH0KIAotICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoZG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgV1RGTW92ZShvcGVuZXJEb21haW4pLCBzdGQ6Om51bGxv
cHQsIG9wZW5lclBhZ2VJRCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObywgU3RvcmFn
ZUFjY2Vzc1Njb3BlOjpQZXJQYWdlLCBbXShTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCkgeyB9KTsK
KyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKHRyYW5zYWN0
aW9uLCBXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVy
RG9tYWluKSwgc3RkOjpudWxsb3B0LCBvcGVuZXJQYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93bjo6Tm8sIFN0b3JhZ2VBY2Nlc3NTY29wZTo6UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vz
c1dhc0dyYW50ZWQpIHsgfSk7CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhT
dWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1l
RG9tYWluLCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgUGFnZUlkZW50aWZpZXIgcGFnZUlELCBT
dG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gcHJvbXB0V2FzU2hvd24sIFN0b3JhZ2VBY2Nlc3NT
Y29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzV2FzR3JhbnRl
ZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgaWYgKHByb21wdFdhc1Nob3duID09IFN0b3Jh
Z2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7CiAgICAgICAgIGF1dG8gc3ViRnJhbWVTdGF0
dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFt
ZURvbWFpbik7CiAgICAgICAgIGlmICghc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSB7CkBAIC0xNTc5
LDE1ICsxNjIxLDE4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1CiAgICAgICAgIGlmICghTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjYW5SZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21w
YXRpYmlsaXR5UHVycG9zZXNXaXRob3V0UHJpb3JVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21h
aW4sIHRvcEZyYW1lRG9tYWluKSkKICAgICAgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJh
Y3Rpb24oc3ViRnJhbWVEb21haW4sIE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKSk7CiAjZW5k
aWYKLSAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BG
cmFtZURvbWFpbiB9KSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCk7CisgICAgICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9t
YWluIH0pLCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKTsKICAgICB9CiAKLSAgICBncmFudFN0b3Jh
Z2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFt
ZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0V2FzU2hvd24sIHNjb3BlLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwodHJh
bnNhY3Rpb24sIFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWlu
KSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRXYXNTaG93biwgc2NvcGUsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRl
cm5hbChTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRv
cEZyYW1lRG9tYWluLCBzdGQ6Om9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgUGFn
ZUlkZW50aWZpZXIgcGFnZUlELCBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gcHJvbXB0V2Fz
U2hvd25Ob3dPckVhcmxpZXIsIFN0b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VB
Y2Nlc3NJbnRlcm5hbChjb25zdCBTUUxpdGVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFN1YkZy
YW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21h
aW4sIHN0ZDo6b3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBQYWdlSWRlbnRpZmll
ciBwYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBwcm9tcHRXYXNTaG93bk5vd09y
RWFybGllciwgU3RvcmFnZUFjY2Vzc1Njb3BlIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZS50cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSk7CiAKICAgICBpZiAoc3ViRnJhbWVEb21haW4gPT0gdG9wRnJhbWVE
b21haW4pIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1dhc0dyYW50
ZWQ6Olllcyk7CkBAIC0xNjI0LDcgKzE2NjksMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb20K
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0
YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKGRvbWFpbnMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGZvciAoYXV0byYg
cmVnaXN0cmFibGVEb21haW4gOiBkb21haW5zKSB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVnaXN0cmFibGVEb21h
aW4pOwogICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCkBAIC0xNjM2LDYgKzE2ODUsNyBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFG
b3JEb21haW5zKGNvbnN0IEhhc2hTZQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KKyAgICB0cmFuc2FjdGlvbi5jb21taXQo
KTsKIH0KIAogVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKQEAg
LTE2NDgsMTMgKzE2OTgsMTYgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmUKICAgICBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+IHByaW1hcnlEb21haW5zVG9CbG9jazsKICAgICBwcmltYXJ5RG9t
YWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKIAorICAgIFNRTGl0ZVRyYW5z
YWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7
CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7CiAgICAgaWYgKCFyZXN1
bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQ
cmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZh
aWxlZCBpbnNlcnQgYXR0ZW1wdCBmb3IgZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSIsIHRo
aXMpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHNldFByZXZhbGVudFJlc291
cmNlKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5j
ZTo6SGlnaCk7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRlYnVnU3Rh
dGljUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CiAg
ICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZh
bGVudFJlc291cmNlKCkpOwogCiAgICAgaWYgKCFkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNl
KCkuaXNFbXB0eSgpKSB7CkBAIC0xNjYzLDcgKzE3MTYsNyBAQCBWZWN0b3I8UmVnaXN0cmFibGVE
b21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxl
bnRSZQogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZh
bGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVk
IGluc2VydCBhdHRlbXB0IGZvciBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlIiwgdGhpcyk7
CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIHNldFByZXZhbGVu
dFJlc291cmNlKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZTo6SGlnaCk7CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9u
LCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkhpZ2gpOwogICAgICAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSk7CiAKICAgICAgICAgaWYgKGRlYnVnTG9nZ2lu
Z0VuYWJsZWQoKSkgewpAQCAtMTY3Miw2ICsxNzI1LDggQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50
UmUKICAgICAgICAgfQogICAgIH0KIAorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCiAgICAg
cmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9jazsKIH0KIApAQCAtMTY4MiwxNSArMTczNywyMCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmln
YXRpb24oY29uc3QgUmVnaXN0cmFibGVEbwogICAgIGJvb2wgYXJlVGFyZ2V0QW5kVG9wRnJhbWVE
b21haW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4gPT0gdG9wRnJhbWVEb21haW47CiAgICAgYm9v
bCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4gPT0gc291
cmNlRG9tYWluOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CisKICAgICBib29sIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IGZhbHNlOwogICAgIGlmICgh
aXNNYWluRnJhbWUgJiYgIShhcmVUYXJnZXRBbmRUb3BGcmFtZURvbWFpbnNTYW1lU2l0ZSB8fCBh
cmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUpKSB7CisgICAgICAgIGlmICghdHJhbnNh
Y3Rpb24uaW5Qcm9ncmVzcygpKQorICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwog
ICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CiAgICAgICAgIGlmICghdGFyZ2V0UmVzdWx0
LnNlY29uZCkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Zy
YW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRl
bXB0IG9mIHRhcmdldCBkb21haW4iLCB0aGlzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICB1cGRhdGVMYXN0U2Vlbih0YXJnZXREb21haW4sIFJlc291cmNlTG9hZFN0
YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSkpOwotICAgICAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwg
KnRhcmdldFJlc3VsdC5zZWNvbmQpOworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRyYW5zYWN0aW9uLCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4gfSksICp0YXJnZXRSZXN1bHQu
c2Vjb25kKTsKICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKICAgICB9CiAK
QEAgLTE2OTgsMzYgKzE3NTgsNDMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG8KICAgICAgICAg
aWYgKGlzTWFpbkZyYW1lKSB7CiAgICAgICAgICAgICBib29sIHdhc05hdmlnYXRlZEFmdGVyU2hv
cnREZWxheVdpdGhvdXRVc2VySW50ZXJhY3Rpb24gPSAhd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRC
eVVzZXIgJiYgZGVsYXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCA8IHBhcmFtZXRlcnMoKS5t
aW5EZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkVG9Ob3RCZUFSZWRpcmVjdDsKICAgICAg
ICAgICAgIGlmIChpc1JlZGlyZWN0IHx8IHdhc05hdmlnYXRlZEFmdGVyU2hvcnREZWxheVdpdGhv
dXRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmlu
UHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwog
ICAgICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21haW5SZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21haW4pOwogICAgICAg
ICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKICAgICAgICAgICAgICAgICBpZiAoIXRh
cmdldFJlc3VsdC5zZWNvbmQgfHwgIXJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCkgewog
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVO
YXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQg
b2YgdGFyZ2V0IG9yIHJlZGlyZWN0aW5nIGRvbWFpbiAoaXNNYWluRnJhbWUpIiwgdGhpcyk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAq
cmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAq
cmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKICAgICAgICAgICAgICAgICBpZiAoaXNS
ZWRpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpy
ZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0
cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQu
c2Vjb25kKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5n
RW5hYmxlZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJ
VFBEZWJ1ZywgIkRpZCBzZXQgJSIgUFVCTElDX0xPR19TVFJJTkcgIiBhcyBtYWtpbmcgYSB0b3Ag
ZnJhbWUgcmVkaXJlY3QgdG8gJSIgUFVCTElDX0xPR19TVFJJTkcgIi4iLCBzb3VyY2VEb21haW4u
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGFyZ2V0RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5n
KCJEaWQgc2V0ICciLCBzb3VyY2VEb21haW4uc3RyaW5nKCksICInIGFzIG1ha2luZyBhIHRvcCBm
cmFtZSByZWRpcmVjdCB0byAnIiwgdGFyZ2V0RG9tYWluLnN0cmluZygpLCAiJy4iKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVy
eSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRS
ZXN1bHQuc2Vjb25kKTsKKyAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNl
dDxSZWdpc3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vj
b25kKTsKICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICAgICAgICAg
IGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKQorICAgICAgICAgICAgICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21haW5SZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21h
aW4pOwogICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwogICAgICAgICAgICAgaWYg
KCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQp
IHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVO
YXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQg
b2YgdGFyZ2V0IG9yIHJlZGlyZWN0aW5nIGRvbWFpbiAoaXNSZWRpcmVjdCkiLCB0aGlzKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwg
SGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpyZWRpcmVjdGlu
Z0RvbWFpblJlc3VsdC5zZWNvbmQpOwotICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdp
c3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsK
KyAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4oeyB0YXJnZXREb21haW4gfSksICpyZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOwor
ICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+KHsgc291cmNlRG9tYWluIH0pLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCk7CiAgICAgICAgICAg
ICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQorICAgIHRy
YW5zYWN0aW9uLmNvbW1pdCgpOwogCiAgICAgaWYgKHN0YXRpc3RpY3NXZXJlVXBkYXRlZCkKICAg
ICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwpA
QCAtMTczOCwyMSArMTgwNSwyOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uKGNvbgogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChmcm9tRG9tYWluICE9IHRvRG9tYWlu
KTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9Eb21haW4pOwogICAgIGlm
ICghdG9Eb21haW5SZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lTGlua0Rl
Y29yYXRpb25zRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IGZyb21Eb21h
aW4gfSksICp0b0RvbWFpblJlc3VsdC5zZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3QodHJhbnNhY3Rpb24sIHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5LCBI
YXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IGZyb21Eb21haW4gfSksICp0b0RvbWFpblJlc3Vs
dC5zZWNvbmQpOwogICAgIAogICAgIGlmIChpc1ByZXZhbGVudFJlc291cmNlKGZyb21Eb21haW4p
KQotICAgICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKHRvRG9t
YWluLCB0cnVlKTsKKyAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCh0cmFuc2FjdGlvbiwgdG9Eb21haW4sIHRydWUpOworCisgICAgdHJhbnNhY3Rpb24uY29t
bWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICgh
dGFyZ2V0UmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKQEAgLTE3NjcsNiArMTg0Miw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtCiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KKworICAgIHRy
YW5zYWN0aW9uLmNvbW1pdCgpOwogICAgIAogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBA
IC0xNzkxLDYgKzE4NjgsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWlu
KTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFp
bGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0xNzk4LDYgKzE4NzgsOSBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29u
c3QgVG9wRnJhbWVEb21haQogICAgIH0KICAgICBib29sIGRpZEhhdmVQcmV2aW91c1VzZXJJbnRl
cmFjdGlvbiA9IGhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4sIE9wZXJhdGluZ0RhdGVzV2lu
ZG93OjpMb25nKTsKICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0cnVlLCBXYWxsVGlt
ZTo6bm93KCkpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKICAgICBpZiAoZGlkSGF2
ZVByZXZpb3VzVXNlckludGVyYWN0aW9uKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTE4MDksNiArMTg5Miw5IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lz
dHJhYmxlCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVU
cmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOworCiAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29u
ZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJh
Y3Rpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRo
aXMpOwpAQCAtMTgyNCw2ICsxOTEwLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGUKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCisgICAgdHJhbnNhY3Rpb24uY29tbWl0
KCk7CisKICAgICAvLyBVcGRhdGUgY29va2llIGJsb2NraW5nIHVuY29uZGl0aW9uYWxseSBzaW5j
ZSBhIGNhbGwgdG8gaGFzSGFkVXNlckludGVyYWN0aW9uKCkKICAgICAvLyB0byBjaGVjayB0aGUg
cHJldmlvdXMgdXNlciBpbnRlcmFjdGlvbiBzdGF0dXMgY291bGQgY2FsbCBjbGVhclVzZXJJbnRl
cmFjdGlvbigpLAogICAgIC8vIGJsb3dpbmcgdGhlIGNhbGwgc3RhY2suCkBAIC0xODU4LDkgKzE5
NDYsMTEgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmwKICAgICByZXR1cm4gaGFkVXNlckludGVy
YWN0aW9uOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlIG5ld1ByZXZhbGVuY2UpCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTUUxpdGVUcmFu
c2FjdGlvbiYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2UgbmV3UHJldmFsZW5jZSkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisKICAg
ICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQogICAgICAgICByZXR1cm47CiAKQEAgLTIwMDYsNiAr
MjA5Niw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFiCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlm
ICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VE
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGlu
c2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0yMDIxLDEyICsyMTE0LDE3IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFiCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0
YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAg
aWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIwNDEsMTEgKzIxMzksMTQgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3Ry
YWJsZURvbWEKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0
aGVyZWQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGJv
b2wgdmFsdWUpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJ
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFNRTGl0ZVRyYW5zYWN0
aW9uJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZS50cmFu
c2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKSB7CkBAIC0yMTA1LDg0ICsyMjA2LDExNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
UwogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsK
KwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oc3ViRnJhbWVEb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1h
a2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1l
IGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFt
ZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodHJhbnNhY3Rpb24sIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNv
bmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFRvcEZy
YW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwor
ICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKICAg
ICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbiB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3Rh
dGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFtZSBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhh
c2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4gfSksICpyZXN1bHQuc2Vj
b25kKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+KHsgdG9wRnJhbWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0
aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21h
aW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCIsIHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5j
eSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRp
cmVjdCBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVk
aXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnks
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQu
c2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsK
ICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tIHdhcyBub3QgY29tcGxldGVk
IGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBz
dGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgotICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIEhh
c2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vj
b25kKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworCisgICAgdHJhbnNhY3Rp
b24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRy
YW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHRvcEZyYW1lRG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyB3YXMg
bm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwotICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0
RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7
CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNo
U2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29u
ZCk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29u
c3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYg
cmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2Fj
dGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2Vy
dCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gRm9yIGNv
bnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3Ig
dGhlIHJlZGlyZWN0IGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpy
ZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiBzdGQ6OnBh
aXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OkFkZGVkUmVjb3JkLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogCiAgICAg
ewogICAgICAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudCht
X2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnksICJl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbiJfcyk7CkBAIC0yNTM4
LDYgKzI2NzAsOCBAQCBSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRl
RGF0YUZvciBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhcwogICAgIGF1dG8gb2xkZXN0VXNl
ckludGVyYWN0aW9uID0gbm93OwogICAgIFJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0
cmljdFdlYnNpdGVEYXRhRm9yIHRvRGVsZXRlT3JSZXN0cmljdEZvcjsKIAorICAgIFNRTGl0ZVRy
YW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworCiAgICAgVmVjdG9yPERvbWFpbkRh
dGE+IGRvbWFpbnMgPSB0aGlzLT5kb21haW5zKCk7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBkb21h
aW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmc7CiAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBk
b21haW5zKSB7CkBAIC0yNTUxLDcgKzI2ODUsOSBAQCBSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0
ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhcwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUFsbEJ1dENvb2tp
ZXNGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSkgewogICAgICAg
ICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29r
aWVXZWJzaXRlRGF0YUZvci5hcHBlbmQoc3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAg
ICAgICAgICAgICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKHN0
YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgZmFsc2UpOworICAgICAgICAgICAgICAgIGlmICgh
dHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKQorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlv
bi5iZWdpbigpOworICAgICAgICAgICAgICAgIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwodHJhbnNhY3Rpb24sIHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgZmFs
c2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHNob3VsZEVuZm9yY2VTYW1lU2l0
ZVN0cmljdEZvcihzdGF0aXN0aWMsIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7CiAg
ICAgICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0VuZm9yY2VTYW1l
U2l0ZVN0cmljdEZvci5hcHBlbmQoc3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKTsKQEAgLTI1
NzEsNiArMjcwNyw4IEBAIFJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNp
dGVEYXRhRm9yIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzCiAgICAgICAgIHRvRGVsZXRl
T3JSZXN0cmljdEZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvci5j
bGVhcigpOwogCiAgICAgY2xlYXJHcmFuZGZhdGhlcmluZyhXVEZNb3ZlKGRvbWFpbklEc1RvQ2xl
YXJHcmFuZGZhdGhlcmluZykpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiAgICAgCiAg
ICAgcmV0dXJuIHRvRGVsZXRlT3JSZXN0cmljdEZvcjsKIH0KQEAgLTI2MzUsNiArMjc3Myw5IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNl
ZW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMp
OwpAQCAtMjY0Miw2ICsyNzgzLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGQKICAgICB9CiAg
ICAgCiAgICAgdXBkYXRlTGFzdFNlZW4oZG9tYWluLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMo
c2Vjb25kcy5zZWNvbmRzKCkpKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQpAQCAtMjY1MCwxNCArMjc5Mywy
OCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZQogCiAgICAgaWYgKHNob3VsZFNraXAoZG9tYWlu
KSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNh
Y3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBzZXRQcmV2
YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9tYWluKTsKKyAgICB0cmFuc2FjdGlvbi5jb21t
aXQoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU1FMaXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIEFTU0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygp
KTsKKworICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCisgICAgICAgIHJldHVybjsKKwogICAg
IGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21h
aW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlIHdhcyBub3QgY29tcGxldGVk
IGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHNldFByZXZhbGVudFJlc291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZTo6SGlnaCk7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRv
bWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQpAQCAtMjY2NiwxNCArMjgyMywzMCBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgUmVnaXN0cgogCiAgICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIAorCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9k
YXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAgIHNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9tYWluKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1p
dCgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU1FMaXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworICAgIEFTU0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVz
cygpKTsKKworICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNl
TG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZSh0cmFu
c2FjdGlvbiwgZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7CiB9CiAK
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZURhdGFSZWNv
cmRzUmVtb3ZlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBpbnQgdmFsdWUpCkBA
IC0yOTcxLDYgKzMxNDQsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0
YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBpbnQgcm93c1RvUHJ1bmUg
PSBtX29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyArIDE7CiAg
ICAgaWYgKHJvd3NUb1BydW5lID4gMCkgewogICAgICAgICBhdXRvIGRlbGV0ZUxlYXN0UmVjZW50
T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVM
RVRFIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIgQlkgeWVhciwgbW9udGgsIG1vbnRoRGF5IExJ
TUlUID87Il9zKTsKQEAgLTI5OTIsNiArMzE2OCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAorICAgIHRyYW5zYWN0aW9u
LmNvbW1pdCgpOworCiAgICAgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CiB9CiAK
QEAgLTMwMjYsNiArMzIwNCwxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdAogewogICAgIC8v
IFBvcHVsYXRlIHRoZSBPcGVyYXRpbmcgRGF0ZXMgdGFibGUgd2l0aCBlbm91Z2ggZGF5cyB0byBy
ZXF1aXJlIHBydW5pbmcuCiAgICAgZG91YmxlIGRheXNBZ29JblNlY29uZHMgPSAwOworCisgICAg
U1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rp
b24uYmVnaW4oKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtYmVyT2ZPcGVy
YXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKICAgICAgICAgZG91YmxlIGRheXNUb1N1YnRyYWN0ID0g
U2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSkudmFsdWUoKTsKICAgICAgICAgZGF5c0Fnb0luU2Vj
b25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlz
VG9TdWJ0cmFjdDsKQEAgLTMwNDMsNiArMzIyNSw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0
CiAgICAgICAgIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQog
CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKICAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1Bh
cmFtZXRlcnMoKTsKIAogICAgIC8vIE1ha2Ugc3VyZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSBpcyB0aGUgbGVhc3QgcmVjZW50IG9mIGFsbCBlbnRyaWVzLgpAQCAtMzE0Nyw2ICszMzMx
LDEwIEBAIHN0ZDo6cGFpcjxzdGQ6Om9wdGlvbmFsPFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50Piwgc3RkOjpvcHRpb25hbDxBdHRyCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFByaXZhdGVD
bGlja01lYXN1cmVtZW50JiYgYXR0cmlidXRpb24sIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0
cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlwZSkKIHsKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0
cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGF1
dG8gY29tbWl0VHJhbnNhY3Rpb24gPSBtYWtlU2NvcGVFeGl0KFsmdHJhbnNhY3Rpb25dIHsgdHJh
bnNhY3Rpb24uY29tbWl0KCk7IH0pOworCiAgICAgYXV0byBzb3VyY2VEYXRhID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oYXR0cmlidXRpb24uc291cmNlU2l0
ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKICAgICBhdXRvIGF0dHJpYnV0aW9uRGVzdGluYXRpb25E
YXRhID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oYXR0cmli
dXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0cmFibGVEb21haW4pOwogCkBAIC0zMzMwLDYg
KzM1MTgsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
clByaXZhdGVDbGlja01lYXN1cmVtZW50KHN0ZDo6b3B0aQogICAgICAgICBiaW5kUGFyYW1ldGVy
ID0gU3RyaW5nOjpudW1iZXIoKmRvbWFpbklEVG9NYXRjaCk7CiAgICAgfQogCisgICAgU1FMaXRl
VHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKKwogICAgIGF1dG8gY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlz
LT5zY29wZWRTdGF0ZW1lbnQobV9jbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50U3RhdGVtZW50LCBjbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVl
cnksICJjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKIAogICAgIGlmICghY2xlYXJV
bmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKQEAgLTMzNDksNiArMzU0MCw4IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQoc3RkOjpvcHRpCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
clByaXZhdGVDbGlja01lYXN1cmVtZW50IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorCisg
ICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkKQEAg
LTM1NDQsNiArMzczNyw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzCiB7CiAgICAgYXV0byBl
eHBpcmVkVGltZVRvU2VuZCA9IFdhbGxUaW1lOjpub3coKSAtIDFfaDsKIAorICAgIFNRTGl0ZVRy
YW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2lu
KCk7CisKICAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9ID8iX3MpOwogICAgIGF1
dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudCA9IG1fZGF0YWJhc2Uu
cHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IG51bGwiX3MpOwogCkBAIC0z
NTU5LDYgKzM3NTUsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50cwogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CiAKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKwogICAg
IHJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuaAppbmRleCA1MTMzNzZlMzMzNjQ4MmFlNWRhOTFlYWJlMGVkNTVjMDVmZGI1
MDU5Li45MzBiMWQ1ODQ3MWRkM2UxMGY1YWU3ZTI4Y2ZlMTRjNmUyNTcyYjM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApAQCAtMTA4
LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKSBvdmVycmlkZTsKICAgICBib29sIGlzR3JhbmRm
YXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
dm9pZCBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzZXRJc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKICAgICB2b2lkIHNldFN1YmZy
YW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZy
YW1lRG9tYWluJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKQEAg
LTE3NywxOCArMTc3LDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95U3RhdGVtZW50cygp
OwogICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHNjb3BlZFN0YXRl
bWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYsIEFTQ0lJTGl0
ZXJhbCwgY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKKyAgICB2b2lkIHNldFByZXZhbGVudFJlc291
cmNlKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgY29uc3QgUmVnaXN0cmFibGVE
b21haW4mKTsKKyAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3Jl
OjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CiAgICAgYm9v
bCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgU3ViRnJhbWVE
b21haW4mKSBjb25zdDsKICAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eT4gZ2V0VGhpcmRQYXJ0eURhdGFG
b3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zKHVuc2lnbmVkLCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpIGNvbnN0OwogICAgIHZvaWQgb3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCk7
CiAgICAgU3RyaW5nIGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCh1bnNpZ25lZCkgY29uc3Q7
CiAgICAgQVNDSUlMaXRlcmFsIGdldFN1YlN0YXRpc3RpY1N0YXRlbWVudChjb25zdCBTdHJpbmcm
KSBjb25zdDsKICAgICB2b2lkIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoU3RyaW5nQnVpbGRlciYs
IGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbikgY29uc3Q7Ci0g
ICAgdm9pZCBtZXJnZVN0YXRpc3RpYyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0g
ICAgdm9pZCBtZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqLCBjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBtZXJnZVN0YXRpc3RpYyhjb25zdCBXZWJDb3JlOjpT
UUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2
b2lkIG1lcmdlKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50KiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIHZvaWQg
Y2xlYXJEYXRhYmFzZUNvbnRlbnRzKCk7CiAgICAgYm9vbCBpbnNlcnRPYnNlcnZlZERvbWFpbihj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZv
aWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Jik7Ci0gICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiwgdW5zaWduZWQpOworICAgIHZvaWQg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlv
biYsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3QoY29uc3QgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24mLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYsIHVuc2lnbmVkKTsK
ICAgICBib29sIHJlbGF0aW9uc2hpcEV4aXN0cyhXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRv
UmVzZXRTY29wZSYsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGZpcnN0RG9tYWluSUQsIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4pIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IGRvbWFpbklEKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CiAg
ICAgYm9vbCBkb21haW5FeGlzdHMoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKQEAg
LTIzNSwxMCArMjM3LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBhcmVBbGxUaGlyZFBhcnR5Q29v
a2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwogICAgIENv
b2tpZUFjY2VzcyBjb29raWVBY2Nlc3MoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYpOwogCi0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOworICAgIHZvaWQgc2V0
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24mLCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOwogICAgIHVuc2ln
bmVkIHJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhp
c0RvbWFpbih1bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNpZ25lZD4mIG5vblBy
ZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxs
cyk7CiAgICAgdm9pZCBzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPiYmKTsK
LSAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYsIFRv
cEZyYW1lRG9tYWluJiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwg
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNT
aG93biwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJik7CisgICAgdm9pZCBncmFudFN0
b3JhZ2VBY2Nlc3NJbnRlcm5hbChjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIFN1
YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
RnJhbWVJZGVudGlmaWVyPiwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3Jh
Z2VBY2Nlc3NQcm9tcHRXYXNTaG93biwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJik7
CiAgICAgdm9pZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpOwog
ICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9y
RGVidWdNb2RlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwpAQCAtMjUzLDcgKzI1NSw3IEBAIHByaXZhdGU6CiAKICAg
ICBib29sIGNyZWF0ZVVuaXF1ZUluZGljZXMoKTsKICAgICBib29sIGNyZWF0ZVNjaGVtYSgpOwot
ICAgIFN0cmluZyBlbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYpOworICAgIFN0cmluZyBlbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBX
ZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+Jik7CiAgICAgc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gbW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvblRpbWUoY29uc3QgRG9tYWluRGF0YSYpOwogICAgIAogICAgIHZvaWQgcmVtb3ZlVW5hdHRy
aWJ1dGVkKFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50Jik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431475</attachid>
            <date>2021-06-15 13:31:54 -0700</date>
            <delta_ts>2021-06-15 16:16:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227034-20210615133153.patch</filename>
            <type>text/plain</type>
            <size>54052</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDEyYTFjOTQ2OTI3MDhhNWNh
N2JiNzQyNzAwNTk5ZThiOTkzZTU2ZmYuLjRjY2ExZTBkMGM5NWU2N2MxYjMzYzBmMTkzYmQ0Yjc4
ZmQ3Njc4YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDYtMTUgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLCBmb3IgcGVyZm9ybWFu
Y2UuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNz
aW5nVGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0
aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRF
eHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisKIDIwMjEtMDYtMTUgIEpvbmF0aGFuIEJlZGFy
ZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb250ZXJleV0gU3VwcG9ydCBidWls
ZGluZyBXZWJLaXQgKEZvbGxvdy11cCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IDg0M2FjZGNiNGE0ZjQ0OTc0OTAyYzNj
ZmI1ZjM3MDIyZmE4NjY4MDMuLjBhZGRkMGVlMjFhODljZjI3MDViMzBiOWE0Mjg3YTI0NTRiMzVl
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1JvYmluSG9vZEhhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC02MjcsMTAgKzYyOCwxNCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29s
dW1uc1RvVGFibGUoU3RyaW5nJiYgdGFibAogewogICAgIEFTU0VSVChleGlzdGluZ0NvbHVtbnMu
c2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5zaXplKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CiAgICAgZm9yIChhdXRvJiBjb2x1bW4gOiBleHBl
Y3RlZENvbHVtbnMpIHsKICAgICAgICAgaWYgKGV4aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1
bW4pKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAorICAgICAgICBpZiAoIXRyYW5z
YWN0aW9uLmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisK
ICAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIsIGNv
bHVtbikpOwogICAgICAgICBpZiAoIXN0YXRlbWVudCkgewogICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQg
dG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKQEAgLTY0NCw2
ICs2NDksNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nQ29sdW1uc1RvVGFibGUoU3RyaW5nJiYgdGFibAogICAgICAgICB9CiAgICAgICAgIHN0
YXRlbWVudC0+cmVzZXQoKTsKICAgICB9CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAK
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1
bW5zSWZOZWNlc3NhcnkoKQpAQCAtNzAwLDYgKzcwNiw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdUYWJsZXNJZk5lY2Vzc2FyeSgpCiAgICAg
aWYgKCFtaXNzaW5nVGFibGVzKQogICAgICAgICByZXR1cm47CiAKKyAgICBTUUxpdGVUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwog
ICAgIGZvciAoYXV0byYgdGFibGUgOiAqbWlzc2luZ1RhYmxlcykgewogICAgICAgICBhdXRvIGNy
ZWF0ZVRhYmxlUXVlcnkgPSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0KHRhYmxl
KS5maXJzdDsKICAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kU2xvdyhjcmVh
dGVUYWJsZVF1ZXJ5KSkKQEAgLTcxMSw2ICs3MTksNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nVGFibGVzSWZOZWNlc3NhcnkoKQogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICB0cmFu
c2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCkKQEAgLTEwMjcsNyArMTAz
Niw3IEBAIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5JRChjb25zdCBSZWdpCiAgICAgcmV0dXJuIHNjb3BlZFN0YXRlbWVu
dC0+Y29sdW1uSW50KDApOwogfQogCi1TdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5MaXN0KQorU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBTUUxpdGVUcmFuc2FjdGlv
biYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5MaXN0KQogewogICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBmb3IgKGF1dG8mIHRvcEZyYW1lUmVzb3VyY2Ug
OiBkb21haW5MaXN0KSB7CkBAIC0xMDM4LDkgKzEwNDcsOSBAQCBTdHJpbmcgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNvbnN0IEhh
c2hTZQogICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qo
Y29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+
JiBkb21haW5MaXN0LCB1bnNpZ25lZCBkb21haW5JRCkKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QoY29uc3QgU1FM
aXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29u
c3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFp
bklEKQogewotICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFr
ZURvbWFpbkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgYXV0byBpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJp
bmcoc3RhdGVtZW50LCBlbnN1cmVBbmRNYWtlRG9tYWluTGlzdCh0cmFuc2FjdGlvbiwgZG9tYWlu
TGlzdCksICIgKTsiKSk7CiAgICAgCiAgICAgaWYgKCFpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1l
bnQKICAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kSW50KDEsIGRv
bWFpbklEKSAhPSBTUUxJVEVfT0spIHsKQEAgLTEwNjMsMjQgKzEwNzIsMjYgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdChjb25zdCBTdHIKICAgICB9CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFNRTGl0ZVRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0
YXRpc3RpY3MpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJU
KG1fZGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworCiAgICAgYXV0byByZWdpc3Ry
YWJsZURvbWFpbklEID0gZG9tYWluSUQobG9hZFN0YXRpc3RpY3MucmVnaXN0cmFibGVEb21haW4p
OwogICAgIAogICAgIGlmICghcmVnaXN0cmFibGVEb21haW5JRCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdG9yYWdlQWNjZXNzVW5kZXJUb3BG
cmFtZURvbWFpbnNRdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJh
bWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOwotICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3Rh
dGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZh
bHVlKCkpOwotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBsb2FkU3RhdGlz
dGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50LCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOwotICAgIGluc2VydERvbWFpblJlbGF0
aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIGxvYWRTdGF0aXN0
aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVnaXN0cmFibGVEb21haW5JRC52YWx1
ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnNRdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxh
dGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgbG9hZFN0
YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFibGVEb21h
aW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5
LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20sIHJlZ2lzdHJh
YmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0
b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVM
aW5rRGVjb3JhdGlvbnNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOwotICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0
c1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzLCBy
ZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodHJhbnNhY3Rpb24sIHN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5
LCBsb2FkU3RhdGlzdGljcy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lz
dHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlz
dCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3RhdGlz
dGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVl
KCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRRdWVyeSwg
bG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudCwgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLCBy
ZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodHJhbnNhY3Rpb24sIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgbG9h
ZFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFibGVEb21h
aW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0
aW9uLCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxvYWRTdGF0aXN0aWNz
LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFs
dWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9t
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSwgcmVnaXN0
cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KHRyYW5zYWN0aW9uLCB0b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzUXVlcnksIGxvYWRT
dGF0aXN0aWNzLnRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHMsIHJlZ2lzdHJhYmxlRG9t
YWluSUQudmFsdWUoKSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZSYgbWVtb3J5U3RvcmUpCkBAIC0xMDkwLDYgKzExMDEsOSBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9y
ZShjb25zdCBSZXNvdXJjZQogICAgIGlmICghaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
KyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byYgc3RhdGlzdGljc01hcCA9IG1lbW9yeVN0b3Jl
LmRhdGEoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3NNYXAu
dmFsdWVzKCkpIHsKICAgICAgICAgYXV0byByZXN1bHQgPSBpbnNlcnRPYnNlcnZlZERvbWFpbihz
dGF0aXN0aWMpOwpAQCAtMTEwMywxMiArMTExNywxNSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9yZShjb25zdCBSZXNvdXJj
ZQogICAgIC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRpb25z
aGlwcyBzbyB3ZQogICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFibGUg
ZW50cmllcwogICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcC52YWx1ZXMo
KSkKLSAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhzdGF0aXN0aWMpOworICAgICAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHRyYW5zYWN0aW9uLCBzdGF0aXN0aWMpOworCisg
ICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Om1lcmdlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCogY3VycmVudCwg
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgb3RoZXIpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZShjb25zdCBTUUxpdGVUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCogY3VycmVudCwgY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgb3RoZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogCiAg
ICAgYXV0byBjdXJyZW50UmVnaXN0cmFibGVEb21haW4gPSBjdXJyZW50LT5jb2x1bW5UZXh0KFJl
Z2lzdHJhYmxlRG9tYWluSW5kZXgpOwogICAgIGF1dG8gY3VycmVudExhc3RTZWVuID0gY3VycmVu
dC0+Y29sdW1uRG91YmxlKExhc3RTZWVuSW5kZXgpOwpAQCAtMTEzNCwxNiArMTE1MSwxNiBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZShXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQqIGN1cnJlbgogICAgIGlmIChvdGhlci5ncmFuZGZhdGhlcmVkICYmICFj
dXJyZW50R3JhbmRmYXRoZXJlZCkKICAgICAgICAgc2V0R3JhbmRmYXRoZXJlZChvdGhlci5yZWdp
c3RyYWJsZURvbWFpbiwgdHJ1ZSk7CiAgICAgaWYgKG90aGVyLmlzUHJldmFsZW50UmVzb3VyY2Ug
JiYgIWN1cnJlbnRJc1ByZXZhbGVudCkKLSAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2Uob3Ro
ZXIucmVnaXN0cmFibGVEb21haW4pOworICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZSh0cmFu
c2FjdGlvbiwgb3RoZXIucmVnaXN0cmFibGVEb21haW4pOwogICAgIGlmIChvdGhlci5pc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSAmJiAhY3VycmVudElzVmVyeVByZXZhbGVudCkKLSAgICAgICAgc2V0
VmVyeVByZXZhbGVudFJlc291cmNlKG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAg
c2V0VmVyeVByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCBvdGhlci5yZWdpc3RyYWJsZURv
bWFpbik7CiAgICAgaWYgKG90aGVyLmRhdGFSZWNvcmRzUmVtb3ZlZCA+IGN1cnJlbnREYXRhUmVj
b3Jkc1JlbW92ZWQpCiAgICAgICAgIHVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZChvdGhlci5yZWdp
c3RyYWJsZURvbWFpbiwgb3RoZXIuZGF0YVJlY29yZHNSZW1vdmVkKTsKICAgICBpZiAob3RoZXIu
Z290TGlua0RlY29yYXRpb25Gcm9tUHJldmFsZW50UmVzb3VyY2UgJiYgIWN1cnJlbnRJc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKQotICAgICAgICBzZXRJc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlKTsK
KyAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCh0cmFuc2Fj
dGlvbiwgb3RoZXIucmVnaXN0cmFibGVEb21haW4sIHRydWUpOwogfQogCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBTUUxpdGVUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpYykKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMTE1NiwxMiArMTE3MywxNyBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpYyhj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbWVy
Z2Uoc2NvcGVkU3RhdGVtZW50LmdldCgpLCBzdGF0aXN0aWMpOworICAgIG1lcmdlKHRyYW5zYWN0
aW9uLCBzY29wZWRTdGF0ZW1lbnQuZ2V0KCksIHN0YXRpc3RpYyk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVz
b3VyY2VMb2FkU3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQogewogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworICAgIGlmIChzdGF0aXN0aWNzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Cisg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKIAogICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3Rh
dGlzdGljcykgewogICAgICAgICBpZiAoIWRvbWFpbklEKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURv
bWFpbikpIHsKQEAgLTExNzIsMTMgKzExOTQsMTUgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGEK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgbWVyZ2VTdGF0aXN0aWMoc3RhdGlzdGljKTsKKyAgICAgICAgICAgIG1lcmdl
U3RhdGlzdGljKHRyYW5zYWN0aW9uLCBzdGF0aXN0aWMpOwogICAgIH0KIAogICAgIC8vIE1ha2Ug
YSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRpb25zaGlwcyBzbyB3ZQogICAg
IC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFibGUgZW50cmllcy4KICAgICBm
b3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpCi0gICAgICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
cyh0cmFuc2FjdGlvbiwgc3RhdGlzdGljKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwog
fQogCiBzdGF0aWMgQVNDSUlMaXRlcmFsIGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGluZygpCkBA
IC0xNDE5LDE1ICsxNDQzLDIyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMoKQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogCiAgICAgYXV0byBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzID0gZmluZE5vdFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICBpZiAobm90VmVyeVByZXZhbGVudFJlc291cmNlcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKG1fZGF0YWJhc2UpOwogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBu
b3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChzaG91bGRT
a2lwKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIGF1dG8gbmV3UHJldmFsZW5jZSA9IGNsYXNzaWZpZXIoKS5jYWxj
dWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKTsKLSAgICAgICAgaWYgKG5ld1By
ZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSkKLSAgICAgICAgICAgIHNl
dFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBu
ZXdQcmV2YWxlbmNlKTsKKyAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0
aXN0aWMucHJldmFsZW5jZSkgeworICAgICAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dy
ZXNzKCkpCisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICAgICAgICAg
IHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCByZXNvdXJjZVN0YXRpc3RpYy5yZWdp
c3RyYWJsZURvbWFpbiwgbmV3UHJldmFsZW5jZSk7CisgICAgICAgIH0KICAgICB9CisgICAgdHJh
bnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKCkKQEAgLTE1MzQsNiArMTU2NSw5
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9y
YWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAgfQogICAgIH0KIAorICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJl
Z2luKCk7CisKICAgICBhdXRvIGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRB
c0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBh
cnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJICsgMSBXSEVSRSBkb21haW5JRCA9ID8iX3MpOwogICAg
IGlmICghaW5jcmVtZW50U3RvcmFnZUFjY2VzcwogICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdl
QWNjZXNzLT5iaW5kSW50KDEsICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpICE9IFNRTElURV9PSwpA
QCAtMTU0Myw5ICsxNTc3LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3Zl
KHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJ
RCwgdXNlcldhc1Byb21wdGVkRWFybGllciwgc2NvcGUsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQgd2FzR3Jh
bnRlZCkgbXV0YWJsZSB7CisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwodHJhbnNhY3Rp
b24sIFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJh
bWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyLCBzY29wZSwgW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTdG9yYWdlQWNjZXNzV2FzR3Jh
bnRlZCB3YXNHcmFudGVkKSBtdXRhYmxlIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Fz
R3JhbnRlZCA9PSBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzID8gU3RvcmFnZUFjY2Vzc1N0
YXR1czo6SGFzQWNjZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vz
cyk7CiAgICAgfSk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRl
ck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiBkb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MsIFBhZ2VJZGVudGlmaWVyIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYgb3Bl
bmVyRG9tYWluKQpAQCAtMTU2MSwxMyArMTU5NywxOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFp
bgogICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklU
UERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltJVFBdIFN0b3JhZ2UgYWNj
ZXNzIHdhcyBncmFudGVkIGZvciAnIl9zLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Muc3Ry
aW5nKCksICInIHVuZGVyIG9wZW5lciBwYWdlIGZyb20gJyJfcywgb3BlbmVyRG9tYWluLnN0cmlu
ZygpLCAiJywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVuZWQgd2luZG93LiJfcykp
OwogICAgIH0KIAotICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoZG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgV1RGTW92ZShvcGVuZXJEb21haW4pLCBzdGQ6Om51bGxv
cHQsIG9wZW5lclBhZ2VJRCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObywgU3RvcmFn
ZUFjY2Vzc1Njb3BlOjpQZXJQYWdlLCBbXShTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCkgeyB9KTsK
KyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKHRyYW5zYWN0
aW9uLCBXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVy
RG9tYWluKSwgc3RkOjpudWxsb3B0LCBvcGVuZXJQYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93bjo6Tm8sIFN0b3JhZ2VBY2Nlc3NTY29wZTo6UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vz
c1dhc0dyYW50ZWQpIHsgfSk7CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhT
dWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1l
RG9tYWluLCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgUGFnZUlkZW50aWZpZXIgcGFnZUlELCBT
dG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gcHJvbXB0V2FzU2hvd24sIFN0b3JhZ2VBY2Nlc3NT
Y29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzV2FzR3JhbnRl
ZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgaWYgKHByb21wdFdhc1Nob3duID09IFN0b3Jh
Z2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7CiAgICAgICAgIGF1dG8gc3ViRnJhbWVTdGF0
dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFt
ZURvbWFpbik7CiAgICAgICAgIGlmICghc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSB7CkBAIC0xNTc5
LDE1ICsxNjIxLDE4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1CiAgICAgICAgIGlmICghTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjYW5SZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21w
YXRpYmlsaXR5UHVycG9zZXNXaXRob3V0UHJpb3JVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21h
aW4sIHRvcEZyYW1lRG9tYWluKSkKICAgICAgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJh
Y3Rpb24oc3ViRnJhbWVEb21haW4sIE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKSk7CiAjZW5k
aWYKLSAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BG
cmFtZURvbWFpbiB9KSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCk7CisgICAgICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9t
YWluIH0pLCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKTsKICAgICB9CiAKLSAgICBncmFudFN0b3Jh
Z2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFt
ZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0V2FzU2hvd24sIHNjb3BlLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwodHJh
bnNhY3Rpb24sIFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWlu
KSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRXYXNTaG93biwgc2NvcGUsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRl
cm5hbChTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRv
cEZyYW1lRG9tYWluLCBzdGQ6Om9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgUGFn
ZUlkZW50aWZpZXIgcGFnZUlELCBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gcHJvbXB0V2Fz
U2hvd25Ob3dPckVhcmxpZXIsIFN0b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VB
Y2Nlc3NJbnRlcm5hbChjb25zdCBTUUxpdGVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFN1YkZy
YW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21h
aW4sIHN0ZDo6b3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBQYWdlSWRlbnRpZmll
ciBwYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBwcm9tcHRXYXNTaG93bk5vd09y
RWFybGllciwgU3RvcmFnZUFjY2Vzc1Njb3BlIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZS50cmFuc2Fj
dGlvbkluUHJvZ3Jlc3MoKSk7CiAKICAgICBpZiAoc3ViRnJhbWVEb21haW4gPT0gdG9wRnJhbWVE
b21haW4pIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1dhc0dyYW50
ZWQ6Olllcyk7CkBAIC0xNjI0LDcgKzE2NjksMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb20K
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0
YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYgKGRvbWFpbnMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlv
bihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwogICAgIGZvciAoYXV0byYg
cmVnaXN0cmFibGVEb21haW4gOiBkb21haW5zKSB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVnaXN0cmFibGVEb21h
aW4pOwogICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCkBAIC0xNjM2LDYgKzE2ODUsNyBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFG
b3JEb21haW5zKGNvbnN0IEhhc2hTZQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KKyAgICB0cmFuc2FjdGlvbi5jb21taXQo
KTsKIH0KIAogVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKQEAg
LTE2NDgsMTMgKzE2OTgsMTYgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmUKICAgICBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+IHByaW1hcnlEb21haW5zVG9CbG9jazsKICAgICBwcmltYXJ5RG9t
YWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKIAorICAgIFNRTGl0ZVRyYW5z
YWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7
CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7CiAgICAgaWYgKCFyZXN1
bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQ
cmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZh
aWxlZCBpbnNlcnQgYXR0ZW1wdCBmb3IgZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSIsIHRo
aXMpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHNldFByZXZhbGVudFJlc291
cmNlKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5j
ZTo6SGlnaCk7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRlYnVnU3Rh
dGljUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CiAg
ICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZh
bGVudFJlc291cmNlKCkpOwogCiAgICAgaWYgKCFkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNl
KCkuaXNFbXB0eSgpKSB7CkBAIC0xNjYzLDcgKzE3MTYsNyBAQCBWZWN0b3I8UmVnaXN0cmFibGVE
b21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxl
bnRSZQogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZh
bGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVk
IGluc2VydCBhdHRlbXB0IGZvciBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlIiwgdGhpcyk7
CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIHNldFByZXZhbGVu
dFJlc291cmNlKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZTo6SGlnaCk7CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9u
LCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkhpZ2gpOwogICAgICAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSk7CiAKICAgICAgICAgaWYgKGRlYnVnTG9nZ2lu
Z0VuYWJsZWQoKSkgewpAQCAtMTY3Miw2ICsxNzI1LDggQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50
UmUKICAgICAgICAgfQogICAgIH0KIAorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCiAgICAg
cmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9jazsKIH0KIApAQCAtMTY4MiwxNSArMTczNywyMCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmln
YXRpb24oY29uc3QgUmVnaXN0cmFibGVEbwogICAgIGJvb2wgYXJlVGFyZ2V0QW5kVG9wRnJhbWVE
b21haW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4gPT0gdG9wRnJhbWVEb21haW47CiAgICAgYm9v
bCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4gPT0gc291
cmNlRG9tYWluOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CisKICAgICBib29sIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IGZhbHNlOwogICAgIGlmICgh
aXNNYWluRnJhbWUgJiYgIShhcmVUYXJnZXRBbmRUb3BGcmFtZURvbWFpbnNTYW1lU2l0ZSB8fCBh
cmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUpKSB7CisgICAgICAgIGlmICghdHJhbnNh
Y3Rpb24uaW5Qcm9ncmVzcygpKQorICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwog
ICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CiAgICAgICAgIGlmICghdGFyZ2V0UmVzdWx0
LnNlY29uZCkgewogICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Zy
YW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRl
bXB0IG9mIHRhcmdldCBkb21haW4iLCB0aGlzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICB1cGRhdGVMYXN0U2Vlbih0YXJnZXREb21haW4sIFJlc291cmNlTG9hZFN0
YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSkpOwotICAgICAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwg
KnRhcmdldFJlc3VsdC5zZWNvbmQpOworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRyYW5zYWN0aW9uLCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4gfSksICp0YXJnZXRSZXN1bHQu
c2Vjb25kKTsKICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKICAgICB9CiAK
QEAgLTE2OTgsMzYgKzE3NTgsNDMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG8KICAgICAgICAg
aWYgKGlzTWFpbkZyYW1lKSB7CiAgICAgICAgICAgICBib29sIHdhc05hdmlnYXRlZEFmdGVyU2hv
cnREZWxheVdpdGhvdXRVc2VySW50ZXJhY3Rpb24gPSAhd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRC
eVVzZXIgJiYgZGVsYXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCA8IHBhcmFtZXRlcnMoKS5t
aW5EZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkVG9Ob3RCZUFSZWRpcmVjdDsKICAgICAg
ICAgICAgIGlmIChpc1JlZGlyZWN0IHx8IHdhc05hdmlnYXRlZEFmdGVyU2hvcnREZWxheVdpdGhv
dXRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmlu
UHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwog
ICAgICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21haW5SZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21haW4pOwogICAgICAg
ICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKICAgICAgICAgICAgICAgICBpZiAoIXRh
cmdldFJlc3VsdC5zZWNvbmQgfHwgIXJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCkgewog
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVO
YXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQg
b2YgdGFyZ2V0IG9yIHJlZGlyZWN0aW5nIGRvbWFpbiAoaXNNYWluRnJhbWUpIiwgdGhpcyk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAq
cmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAq
cmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKICAgICAgICAgICAgICAgICBpZiAoaXNS
ZWRpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpy
ZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0
cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQu
c2Vjb25kKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5n
RW5hYmxlZCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJ
VFBEZWJ1ZywgIkRpZCBzZXQgJSIgUFVCTElDX0xPR19TVFJJTkcgIiBhcyBtYWtpbmcgYSB0b3Ag
ZnJhbWUgcmVkaXJlY3QgdG8gJSIgUFVCTElDX0xPR19TVFJJTkcgIi4iLCBzb3VyY2VEb21haW4u
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGFyZ2V0RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5n
KCJEaWQgc2V0ICciLCBzb3VyY2VEb21haW4uc3RyaW5nKCksICInIGFzIG1ha2luZyBhIHRvcCBm
cmFtZSByZWRpcmVjdCB0byAnIiwgdGFyZ2V0RG9tYWluLnN0cmluZygpLCAiJy4iKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVy
eSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRS
ZXN1bHQuc2Vjb25kKTsKKyAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNl
dDxSZWdpc3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vj
b25kKTsKICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICAgICAgICAg
IGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKQorICAgICAgICAgICAgICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21haW5SZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21h
aW4pOwogICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwogICAgICAgICAgICAgaWYg
KCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQp
IHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVO
YXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQg
b2YgdGFyZ2V0IG9yIHJlZGlyZWN0aW5nIGRvbWFpbiAoaXNSZWRpcmVjdCkiLCB0aGlzKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwg
SGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpyZWRpcmVjdGlu
Z0RvbWFpblJlc3VsdC5zZWNvbmQpOwotICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdp
c3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsK
KyAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4oeyB0YXJnZXREb21haW4gfSksICpyZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOwor
ICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+KHsgc291cmNlRG9tYWluIH0pLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCk7CiAgICAgICAgICAg
ICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQorICAgIHRy
YW5zYWN0aW9uLmNvbW1pdCgpOwogCiAgICAgaWYgKHN0YXRpc3RpY3NXZXJlVXBkYXRlZCkKICAg
ICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwpA
QCAtMTczOCwyMSArMTgwNSwyOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uKGNvbgogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIEFTU0VSVChmcm9tRG9tYWluICE9IHRvRG9tYWlu
KTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAg
IHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9Eb21haW4pOwogICAgIGlm
ICghdG9Eb21haW5SZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lG
X0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lTGlua0Rl
Y29yYXRpb25zRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IGZyb21Eb21h
aW4gfSksICp0b0RvbWFpblJlc3VsdC5zZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3QodHJhbnNhY3Rpb24sIHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5LCBI
YXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IGZyb21Eb21haW4gfSksICp0b0RvbWFpblJlc3Vs
dC5zZWNvbmQpOwogICAgIAogICAgIGlmIChpc1ByZXZhbGVudFJlc291cmNlKGZyb21Eb21haW4p
KQotICAgICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKHRvRG9t
YWluLCB0cnVlKTsKKyAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCh0cmFuc2FjdGlvbiwgdG9Eb21haW4sIHRydWUpOworCisgICAgdHJhbnNhY3Rpb24uY29t
bWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICgh
dGFyZ2V0UmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExP
V0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKQEAgLTE3NjcsNiArMTg0Miw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtCiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KKworICAgIHRy
YW5zYWN0aW9uLmNvbW1pdCgpOwogICAgIAogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CkBA
IC0xNzkxLDYgKzE4NjgsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWlu
KTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFp
bGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0xNzk4LDYgKzE4NzgsOSBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29u
c3QgVG9wRnJhbWVEb21haQogICAgIH0KICAgICBib29sIGRpZEhhdmVQcmV2aW91c1VzZXJJbnRl
cmFjdGlvbiA9IGhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4sIE9wZXJhdGluZ0RhdGVzV2lu
ZG93OjpMb25nKTsKICAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0cnVlLCBXYWxsVGlt
ZTo6bm93KCkpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKICAgICBpZiAoZGlkSGF2
ZVByZXZpb3VzVXNlckludGVyYWN0aW9uKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTE4MDksNiArMTg5Miw5IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lz
dHJhYmxlCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVU
cmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdp
bigpOworCiAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29u
ZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJh
Y3Rpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRo
aXMpOwpAQCAtMTgyNCw2ICsxOTEwLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGUKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCisgICAgdHJhbnNhY3Rpb24uY29tbWl0
KCk7CisKICAgICAvLyBVcGRhdGUgY29va2llIGJsb2NraW5nIHVuY29uZGl0aW9uYWxseSBzaW5j
ZSBhIGNhbGwgdG8gaGFzSGFkVXNlckludGVyYWN0aW9uKCkKICAgICAvLyB0byBjaGVjayB0aGUg
cHJldmlvdXMgdXNlciBpbnRlcmFjdGlvbiBzdGF0dXMgY291bGQgY2FsbCBjbGVhclVzZXJJbnRl
cmFjdGlvbigpLAogICAgIC8vIGJsb3dpbmcgdGhlIGNhbGwgc3RhY2suCkBAIC0xODU4LDkgKzE5
NDYsMTEgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmwKICAgICByZXR1cm4gaGFkVXNlckludGVy
YWN0aW9uOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlIG5ld1ByZXZhbGVuY2UpCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTUUxpdGVUcmFu
c2FjdGlvbiYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2UgbmV3UHJldmFsZW5jZSkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CisKICAg
ICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQogICAgICAgICByZXR1cm47CiAKQEAgLTIwMDYsNiAr
MjA5Niw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFiCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFi
YXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwogICAgIGlm
ICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VE
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGlu
c2VydCBhdHRlbXB0IiwgdGhpcyk7CkBAIC0yMDIxLDEyICsyMTE0LDE3IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFiCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0
YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAg
aWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKQEAgLTIwNDEsMTEgKzIxMzksMTQgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3Ry
YWJsZURvbWEKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0
aGVyZWQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGJv
b2wgdmFsdWUpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJ
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFNRTGl0ZVRyYW5zYWN0
aW9uJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZS50cmFu
c2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKSB7CkBAIC0yMTA1LDc5ICsyMjA2LDEwOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
UwogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsK
KwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oc3ViRnJhbWVEb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1h
a2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1l
IGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFt
ZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodHJhbnNhY3Rpb24sIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNv
bmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFRvcEZy
YW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwor
ICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKICAg
ICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbiB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3Rh
dGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFtZSBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhh
c2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4gfSksICpyZXN1bHQuc2Vj
b25kKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+KHsgdG9wRnJhbWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0
aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21h
aW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCIsIHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5j
eSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRp
cmVjdCBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVk
aXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnks
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQu
c2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsK
ICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tIHdhcyBub3QgY29tcGxldGVk
IGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBz
dGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgotICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIEhh
c2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vj
b25kKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworCisgICAgdHJhbnNhY3Rp
b24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRy
YW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHRvcEZyYW1lRG9tYWluKTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyB3YXMg
bm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwotICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0
RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7
CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNo
U2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29u
ZCk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29u
c3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYg
cmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2Fj
dGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQu
c2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2Vy
dCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gRm9yIGNv
bnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3Ig
dGhlIHJlZGlyZWN0IGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpy
ZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiBzdGQ6OnBh
aXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OkFkZGVkUmVjb3JkLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pCkBAIC0yNTM4LDYgKzI2NjksOCBAQCBSZWdpc3RyYWJsZURv
bWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhcwogICAgIGF1dG8gb2xkZXN0VXNlckludGVyYWN0aW9uID0gbm93OwogICAgIFJl
Z2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIHRvRGVsZXRl
T3JSZXN0cmljdEZvcjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0
YWJhc2UpOworCiAgICAgVmVjdG9yPERvbWFpbkRhdGE+IGRvbWFpbnMgPSB0aGlzLT5kb21haW5z
KCk7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmc7
CiAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBkb21haW5zKSB7CkBAIC0yNTUxLDcgKzI2ODQs
OSBAQCBSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhcwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgaWYgKHNob3VsZFJlbW92ZUFsbEJ1dENvb2tpZXNGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVj
a0ZvckdyYW5kZmF0aGVyaW5nKSkgewogICAgICAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmlj
dEZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvci5hcHBlbmQoc3Rh
dGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICAgICAgICAgICAgICBzZXRJc1NjaGVkdWxl
ZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwg
ZmFsc2UpOworICAgICAgICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKQor
ICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgICAgICAgICAgICAg
IHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwodHJhbnNhY3Rpb24sIHN0
YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihzdGF0aXN0aWMsIHNob3Vs
ZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7CiAgICAgICAgICAgICAgICAgdG9EZWxldGVPclJl
c3RyaWN0Rm9yLmRvbWFpbnNUb0VuZm9yY2VTYW1lU2l0ZVN0cmljdEZvci5hcHBlbmQoc3RhdGlz
dGljLnJlZ2lzdHJhYmxlRG9tYWluKTsKQEAgLTI1NzEsNiArMjcwNiw4IEBAIFJlZ2lzdHJhYmxl
RG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzCiAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9EZWxl
dGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvci5jbGVhcigpOwogCiAgICAgY2xlYXJHcmFuZGZh
dGhlcmluZyhXVEZNb3ZlKGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZykpOworCisgICAg
dHJhbnNhY3Rpb24uY29tbWl0KCk7CiAgICAgCiAgICAgcmV0dXJuIHRvRGVsZXRlT3JSZXN0cmlj
dEZvcjsKIH0KQEAgLTI2MzUsNiArMjc3Miw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlv
biB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAg
ICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihkb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNlZW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAtMjY0Miw2ICsyNzgyLDggQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIGQKICAgICB9CiAgICAgCiAgICAgdXBkYXRlTGFzdFNlZW4oZG9t
YWluLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkpKTsKKworICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluKQpAQCAtMjY1MCwxNCArMjc5MiwyOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJs
ZQogCiAgICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKICAgICAgICAgcmV0dXJuOwotICAgIAor
CisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJh
bnNhY3Rpb24uYmVnaW4oKTsKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwg
ZG9tYWluKTsKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU1FM
aXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9t
YWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChtX2Rh
dGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKworICAgIGlmIChzaG91bGRTa2lwKGRv
bWFpbikpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3Vs
dC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZh
bGVudFJlc291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNldFByZXZhbGVudFJl
c291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgc2V0UHJl
dmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5j
ZTo6SGlnaCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
KQpAQCAtMjY2NiwxNCArMjgyMiwzMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cgogCiAgICAg
aWYgKHNob3VsZFNraXAoZG9tYWluKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgU1FM
aXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24u
YmVnaW4oKTsKKworICAgIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9t
YWluKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
U1FMaXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVCht
X2RhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKworICAgIGlmIChzaG91bGRTa2lw
KGRvbWFpbikpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXJl
c3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZl
cnlQcmV2YWxlbnRSZXNvdXJjZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2Vy
dCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZXRQcmV2
YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsK
KyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgZG9tYWluLCBSZXNvdXJjZUxv
YWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZChjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgZG9tYWluLCBpbnQgdmFsdWUpCkBAIC0yOTcxLDYgKzMxNDMsOSBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGlu
Z0RhdGVJZk5lY2Vzc2FyeQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFNRTGl0
ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJl
Z2luKCk7CisKICAgICBpbnQgcm93c1RvUHJ1bmUgPSBtX29wZXJhdGluZ0RhdGVzU2l6ZSAtIG9w
ZXJhdGluZ0RhdGVzV2luZG93TG9uZyArIDE7CiAgICAgaWYgKHJvd3NUb1BydW5lID4gMCkgewog
ICAgICAgICBhdXRvIGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JE
RVIgQlkgeWVhciwgbW9udGgsIG1vbnRoRGF5IExJTUlUID87Il9zKTsKQEAgLTI5OTIsNiArMzE2
Nyw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVU
b2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KIAorICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCiAgICAgdXBkYXRlT3Bl
cmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CiB9CiAKQEAgLTMwMjYsNiArMzIwMywxMCBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlz
dGljRm9yVGVzdGluZyhjb25zdAogewogICAgIC8vIFBvcHVsYXRlIHRoZSBPcGVyYXRpbmcgRGF0
ZXMgdGFibGUgd2l0aCBlbm91Z2ggZGF5cyB0byByZXF1aXJlIHBydW5pbmcuCiAgICAgZG91Ymxl
IGRheXNBZ29JblNlY29uZHMgPSAwOworCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPD0gbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKICAg
ICAgICAgZG91YmxlIGRheXNUb1N1YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSku
dmFsdWUoKTsKICAgICAgICAgZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsKQEAgLTMwNDMsNiArMzIy
NCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4
cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0CiAgICAgICAgIGluc2VydE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQogCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7
CisKICAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKIAogICAgIC8vIE1ha2Ug
c3VyZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBpcyB0aGUgbGVhc3QgcmVjZW50IG9m
IGFsbCBlbnRyaWVzLgpAQCAtMzE0Nyw2ICszMzMwLDEwIEBAIHN0ZDo6cGFpcjxzdGQ6Om9wdGlv
bmFsPFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Piwgc3RkOjpvcHRpb25hbDxB
dHRyCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydFBy
aXZhdGVDbGlja01lYXN1cmVtZW50KFByaXZhdGVDbGlja01lYXN1cmVtZW50JiYgYXR0cmlidXRp
b24sIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlw
ZSkKIHsKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAg
ICB0cmFuc2FjdGlvbi5iZWdpbigpOworICAgIGF1dG8gY29tbWl0VHJhbnNhY3Rpb24gPSBtYWtl
U2NvcGVFeGl0KFsmdHJhbnNhY3Rpb25dIHsgdHJhbnNhY3Rpb24uY29tbWl0KCk7IH0pOworCiAg
ICAgYXV0byBzb3VyY2VEYXRhID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oYXR0cmlidXRpb24uc291cmNlU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKICAg
ICBhdXRvIGF0dHJpYnV0aW9uRGVzdGluYXRpb25EYXRhID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVn
aXN0cmFibGVEb21haW4pOwogCkBAIC0zMzMwLDYgKzM1MTcsOSBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50KHN0
ZDo6b3B0aQogICAgICAgICBiaW5kUGFyYW1ldGVyID0gU3RyaW5nOjpudW1iZXIoKmRvbWFpbklE
VG9NYXRjaCk7CiAgICAgfQogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9k
YXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gY2xlYXJVbmF0
dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9jbGVhclVu
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50LCBjbGVhclVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhclByaXZhdGVDbGlja01lYXN1
cmVtZW50Il9zKTsKIAogICAgIGlmICghY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQK
QEAgLTMzNDksNiArMzUzOSw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc3RkOjpvcHRpCiAgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50IGNs
ZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9
CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyRXhwaXJl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkKQEAgLTM1NDQsNiArMzczNiw5IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzCiB7CiAgICAgYXV0byBleHBpcmVkVGltZVRvU2VuZCA9IFdhbGxUaW1l
Ojpub3coKSAtIDFfaDsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0
YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIGVhcmxpZXN0VGlt
ZVRvU2VuZFRvU291cmNlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJV
UERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVU
b1NlbmRUb1NvdXJjZSA9ID8iX3MpOwogICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0
aW5hdGlvblN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbiA9IG51bGwiX3MpOwogCkBAIC0zNTU5LDYgKzM3NTQsOCBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50cwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKKyAg
ICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKwogICAgIHJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAppbmRleCA1MTMzNzZl
MzMzNjQ4MmFlNWRhOTFlYWJlMGVkNTVjMDVmZGI1MDU5Li45MzBiMWQ1ODQ3MWRkM2UxMGY1YWU3
ZTI4Y2ZlMTRjNmUyNTcyYjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuaApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVl
KSBvdmVycmlkZTsKICAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCB2YWx1ZSk7
CisgICAgdm9pZCBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0
IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBi
b29sIHZhbHVlKTsKICAgICB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25z
dCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VE
b21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKQEAgLTE3NywxOCArMTc3LDIwIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkZXN0cm95U3RhdGVtZW50cygpOwogICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudEF1dG9SZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiYsIEFTQ0lJTGl0ZXJhbCwgY29uc3QgU3RyaW5nJikgY29uc3Q7
CiAKKyAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRy
YW5zYWN0aW9uJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIHNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJik7CiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFRv
cEZyYW1lRG9tYWluJiwgY29uc3QgU3ViRnJhbWVEb21haW4mKSBjb25zdDsKICAgICBWZWN0b3I8
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmlj
Rmlyc3RQYXJ0eT4gZ2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5z
KHVuc2lnbmVkLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwogICAgIHZvaWQgb3Bl
bkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCk7CiAgICAgU3RyaW5nIGdldERvbWFpblN0cmlu
Z0Zyb21Eb21haW5JRCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgQVNDSUlMaXRlcmFsIGdldFN1YlN0
YXRpc3RpY1N0YXRlbWVudChjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2b2lkIGFwcGVuZFN1
YlN0YXRpc3RpY0xpc3QoU3RyaW5nQnVpbGRlciYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBj
b25zdCBTdHJpbmcmIGRvbWFpbikgY29uc3Q7Ci0gICAgdm9pZCBtZXJnZVN0YXRpc3RpYyhjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBtZXJnZShXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQqLCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBt
ZXJnZVN0YXRpc3RpYyhjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIG1lcmdlKGNvbnN0IFdlYkNvcmU6OlNR
TGl0ZVRyYW5zYWN0aW9uJiwgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiwgY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYpOwogICAgIHZvaWQgY2xlYXJEYXRhYmFzZUNvbnRlbnRzKCk7CiAg
ICAgYm9vbCBpbnNlcnRPYnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JikgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
cyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBpbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBMaXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JiwgdW5zaWduZWQpOworICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhj
b25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmKTsKKyAgICB2b2lkIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QoY29uc3QgV2Vi
Q29yZTo6U1FMaXRlVHJhbnNhY3Rpb24mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPiYsIHVuc2lnbmVkKTsKICAgICBib29sIHJlbGF0aW9uc2hpcEV4aXN0
cyhXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSYsIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IGZpcnN0RG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmRE
b21haW4pIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGRvbWFpbklEKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CiAgICAgYm9vbCBkb21haW5FeGlzdHMoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKQEAgLTIzNSwxMCArMjM3LDEwIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBhcmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BG
cmFtZURvbWFpbiYpIG92ZXJyaWRlOwogICAgIENvb2tpZUFjY2VzcyBjb29raWVBY2Nlc3MoY29u
c3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpOwogCi0gICAgdm9p
ZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFJlc291cmNl
TG9hZFByZXZhbGVuY2UpOworICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgV2Vi
Q29yZTo6U1FMaXRlVHJhbnNhY3Rpb24mLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFJlc291
cmNlTG9hZFByZXZhbGVuY2UpOwogICAgIHVuc2lnbmVkIHJlY3Vyc2l2ZWx5RmluZE5vblByZXZh
bGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbih1bnNpZ25lZCBwcmltYXJ5RG9t
YWluSUQsIFN0ZFNldDx1bnNpZ25lZD4mIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywg
dW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7CiAgICAgdm9pZCBzZXREb21haW5zQXNQ
cmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPiYmKTsKLSAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2Vz
c0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdl
YkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vz
c1Njb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NXYXNH
cmFudGVkKT4mJik7CisgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChjb25zdCBX
ZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9t
YWluJiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwgV2ViQ29yZTo6
UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biwgV2Vi
Q29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
OlN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJik7CiAgICAgdm9pZCBtYXJrQXNQcmV2YWxlbnRJ
Zkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpOwogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwpAQCAt
MjUzLDcgKzI1NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGNyZWF0ZVVuaXF1ZUluZGljZXMo
KTsKICAgICBib29sIGNyZWF0ZVNjaGVtYSgpOwotICAgIFN0cmluZyBlbnN1cmVBbmRNYWtlRG9t
YWluTGlzdChjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYpOworICAgIFN0cmluZyBl
bnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYs
IGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jik7CiAgICAgc3RkOjpvcHRpb25hbDxX
YWxsVGltZT4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUoY29uc3QgRG9tYWluRGF0YSYp
OwogICAgIAogICAgIHZvaWQgcmVtb3ZlVW5hdHRyaWJ1dGVkKFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50Jik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431491</attachid>
            <date>2021-06-15 16:16:29 -0700</date>
            <delta_ts>2021-06-15 17:56:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227034-20210615161628.patch</filename>
            <type>text/plain</type>
            <size>54816</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4OTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ2MTYwZmMyNzEzNzA5ODk2
MDU4ZjdkNzYyYzg3YjcwZmY1YWM4ODkuLjBlM2Y5Y2U2YTgxN2VkMDgyZjgzMGQ4YjVmMzMwYzhh
NTA3ZGI2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjEtMDYtMTUgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwMzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgbW9yZSBTUUwgdHJhbnNhY3Rp
b25zIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLCBmb3IgcGVyZm9ybWFu
Y2UuCisKKyAgICAgICAgSSB1cGRhdGVkIHRoZSBjb2RlIHNvIHRoYXQgd2Ugc3RhcnQgYSBTUUwg
dHJhbnNhY3Rpb24gd2hlbmV2ZXIgd2UgZG8gbW9yZSB0aGFuIG9uZQorICAgICAgICBjb25zZWN1
dGl2ZSAid3JpdGUiIHN0YXRlbWVudC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0Nv
bHVtbnNUb1RhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdUYWJsZXNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1v
cnlTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjptZXJnZVN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjbGFzc2lmeVJlc291cmNlcyk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRh
dGFGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKToKKwogMjAyMS0w
Ni0xNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBiYXNp
YyBkZXRlY3Rpb24gb2YgdW5yZXNwb25zaXZlIE5ldHdvcmsgLyBHUFUgUHJvY2Vzc2VzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApp
bmRleCA4NDNhY2RjYjRhNGY0NDk3NDkwMmMzY2ZiNWYzNzAyMmZhODY2ODAzLi5mZjE0Mzc3MTRj
MDg1Mjc3YTVkYzA0YjU4MDA5ZTQ2MWI4YTU5MWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTUxLDYgKzUxLDcgQEAK
ICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIApAQCAtNjI3LDEwICs2MjgsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmwKIHsK
ICAgICBBU1NFUlQoZXhpc3RpbmdDb2x1bW5zLnNpemUoKSA8PSBleHBlY3RlZENvbHVtbnMuc2l6
ZSgpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOwog
ICAgIGZvciAoYXV0byYgY29sdW1uIDogZXhwZWN0ZWRDb2x1bW5zKSB7CiAgICAgICAgIGlmIChl
eGlzdGluZ0NvbHVtbnMuY29udGFpbnMoY29sdW1uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAKKyAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpCisgICAgICAg
ICAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0
YWJsZU5hbWUsICIgQUREIENPTFVNTiAiLCBjb2x1bW4pKTsKICAgICAgICAgaWYgKCFzdGF0ZW1l
bnQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUg
VW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFi
bGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CkBAIC02NDQsNiArNjQ5LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmluZyYm
IHRhYmwKICAgICAgICAgfQogICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CiAgICAgfQorICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCkKQEAgLTcwMCw2ICs3
MDYsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNz
aW5nVGFibGVzSWZOZWNlc3NhcnkoKQogICAgIGlmICghbWlzc2luZ1RhYmxlcykKICAgICAgICAg
cmV0dXJuOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7
CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBmb3IgKGF1dG8mIHRhYmxlIDogKm1pc3Np
bmdUYWJsZXMpIHsKICAgICAgICAgYXV0byBjcmVhdGVUYWJsZVF1ZXJ5ID0gZXhwZWN0ZWRUYWJs
ZUFuZEluZGV4UXVlcmllcygpLmdldCh0YWJsZSkuZmlyc3Q7CiAgICAgICAgIGlmICghbV9kYXRh
YmFzZS5leGVjdXRlQ29tbWFuZFNsb3coY3JlYXRlVGFibGVRdWVyeSkpCkBAIC03MTEsNiArNzE5
LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2lu
Z1RhYmxlc0lmTmVjZXNzYXJ5KCkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5BbmRVcGRhdGVTY2hlbWFJ
Zk5lY2Vzc2FyeSgpCkBAIC0xMDI3LDggKzEwMzYsMTAgQEAgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJl
Z2kKICAgICByZXR1cm4gc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7CiB9CiAKLVN0cmlu
ZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlQW5kTWFrZURvbWFp
bkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QpCitTdHJp
bmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZUFuZE1ha2VEb21h
aW5MaXN0KGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9uJiwgY29uc3QgSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4mIGRvbWFpbkxpc3QpCiB7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rp
b25JblByb2dyZXNzKCkpOworCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGZvciAo
YXV0byYgdG9wRnJhbWVSZXNvdXJjZSA6IGRvbWFpbkxpc3QpIHsKICAgICAgICAgLy8gSW5zZXJ0
IHF1ZXJ5IHdpbGwgZmFpbCBpZiB0b3AgZnJhbWUgZG9tYWluIGlzIG5vdCBhbHJlYWR5IGluIHRo
ZSBkYXRhYmFzZQpAQCAtMTAzOCw5ICsxMDQ5LDkgQEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2UK
ICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0
IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9t
YWluTGlzdCwgdW5zaWduZWQgZG9tYWluSUQpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KGNvbnN0IFNRTGl0ZVRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IEhh
c2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5MaXN0LCB1bnNpZ25lZCBkb21haW5JRCkK
IHsKLSAgICBhdXRvIGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZyhzdGF0ZW1lbnQsIGVuc3VyZUFuZE1ha2VEb21h
aW5MaXN0KGRvbWFpbkxpc3QpLCAiICk7IikpOworICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlw
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0
YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QodHJhbnNhY3Rpb24sIGRvbWFpbkxpc3Qp
LCAiICk7IikpOwogICAgIAogICAgIGlmICghaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50CiAg
ICAgICAgIHx8IGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+YmluZEludCgxLCBkb21haW5J
RCkgIT0gU1FMSVRFX09LKSB7CkBAIC0xMDYzLDI0ICsxMDc0LDI2IEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qo
Y29uc3QgU3RyCiAgICAgfQogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmIGxvYWRTdGF0aXN0aWNzKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBTUUxpdGVUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0
aWNzKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChtX2Rh
dGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKwogICAgIGF1dG8gcmVnaXN0cmFibGVE
b21haW5JRCA9IGRvbWFpbklEKGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKTsKICAg
ICAKICAgICBpZiAoIXJlZ2lzdHJhYmxlRG9tYWluSUQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVE
b21haW5zUXVlcnksIGxvYWRTdGF0aXN0aWNzLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxh
dGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgbG9hZFN0YXRpc3Rp
Y3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgp
KTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRRdWVyeSwgbG9hZFN0YXRpc3RpY3Mu
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCwg
cmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7
Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zUXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMs
IHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxvYWRTdGF0aXN0
aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQu
dmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvUXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9h
ZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURv
bWFpbklELnZhbHVlKCkpOwotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJh
bWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTGlua0Rl
Y29yYXRpb25zRnJvbSwgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNRdWVy
eSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cywgcmVnaXN0
cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KHRyYW5zYWN0aW9uLCBzdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgbG9h
ZFN0YXRpc3RpY3Muc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLCByZWdpc3RyYWJs
ZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJh
bnNhY3Rpb24sIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgbG9hZFN0YXRpc3RpY3Mu
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsK
KyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIGxvYWRT
dGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVnaXN0
cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KHRyYW5zYWN0aW9uLCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxvYWRTdGF0
aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQu
dmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwg
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkp
OworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNG
cm9tLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0
aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5
LCBsb2FkU3RhdGlzdGljcy50b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20sIHJlZ2lzdHJhYmxl
RG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFu
c2FjdGlvbiwgdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c1F1ZXJ5LCBsb2FkU3RhdGlz
dGljcy50b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzLCByZWdpc3RyYWJsZURvbWFpbklE
LnZhbHVlKCkpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpwb3B1bGF0ZUZyb21NZW1vcnlTdG9yZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmUmIG1lbW9yeVN0b3JlKQpAQCAtMTA5MCw2ICsxMTAzLDkgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29u
c3QgUmVzb3VyY2UKICAgICBpZiAoIWlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAg
U1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rp
b24uYmVnaW4oKTsKKwogICAgIGF1dG8mIHN0YXRpc3RpY3NNYXAgPSBtZW1vcnlTdG9yZS5kYXRh
KCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwLnZhbHVl
cygpKSB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlz
dGljKTsKQEAgLTExMDMsMTIgKzExMTksMTUgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2UKICAg
ICAvLyBNYWtlIGEgc2VwYXJhdGUgcGFzcyBmb3IgaW50ZXItZG9tYWluIHJlbGF0aW9uc2hpcHMg
c28gd2UKICAgICAvLyBjYW4gcmVmZXIgdG8gdGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVudHJp
ZXMKICAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCi0g
ICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKKyAgICAgICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwcyh0cmFuc2FjdGlvbiwgc3RhdGlzdGljKTsKKworICAgIHRy
YW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIGN1cnJlbnQsIGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIG90aGVyKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2UoY29uc3QgU1FMaXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIGN1cnJlbnQsIGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmIG90aGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIEFTU0VSVChtX2RhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKIAogICAgIGF1
dG8gY3VycmVudFJlZ2lzdHJhYmxlRG9tYWluID0gY3VycmVudC0+Y29sdW1uVGV4dChSZWdpc3Ry
YWJsZURvbWFpbkluZGV4KTsKICAgICBhdXRvIGN1cnJlbnRMYXN0U2VlbiA9IGN1cnJlbnQtPmNv
bHVtbkRvdWJsZShMYXN0U2VlbkluZGV4KTsKQEAgLTExMzIsMTggKzExNTEsMTggQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2UoV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50KiBjdXJyZW4KICAgICAgICAgc2V0VXNlckludGVyYWN0aW9uKG90aGVyLnJlZ2lz
dHJhYmxlRG9tYWluLCB0cnVlLCBzdGQ6Om1heChXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoY3Vy
cmVudE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pLCBvdGhlci5tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSkpOwogCiAgICAgaWYgKG90aGVyLmdyYW5kZmF0aGVyZWQgJiYgIWN1cnJlbnRH
cmFuZGZhdGhlcmVkKQotICAgICAgICBzZXRHcmFuZGZhdGhlcmVkKG90aGVyLnJlZ2lzdHJhYmxl
RG9tYWluLCB0cnVlKTsKKyAgICAgICAgc2V0R3JhbmRmYXRoZXJlZCh0cmFuc2FjdGlvbiwgb3Ro
ZXIucmVnaXN0cmFibGVEb21haW4sIHRydWUpOwogICAgIGlmIChvdGhlci5pc1ByZXZhbGVudFJl
c291cmNlICYmICFjdXJyZW50SXNQcmV2YWxlbnQpCi0gICAgICAgIHNldFByZXZhbGVudFJlc291
cmNlKG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAgc2V0UHJldmFsZW50UmVzb3Vy
Y2UodHJhbnNhY3Rpb24sIG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluKTsKICAgICBpZiAob3RoZXIu
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UgJiYgIWN1cnJlbnRJc1ZlcnlQcmV2YWxlbnQpCi0gICAg
ICAgIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShvdGhlci5yZWdpc3RyYWJsZURvbWFpbik7Cisg
ICAgICAgIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgb3RoZXIucmVnaXN0
cmFibGVEb21haW4pOwogICAgIGlmIChvdGhlci5kYXRhUmVjb3Jkc1JlbW92ZWQgPiBjdXJyZW50
RGF0YVJlY29yZHNSZW1vdmVkKQogICAgICAgICB1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQob3Ro
ZXIucmVnaXN0cmFibGVEb21haW4sIG90aGVyLmRhdGFSZWNvcmRzUmVtb3ZlZCk7CiAgICAgaWYg
KG90aGVyLmdvdExpbmtEZWNvcmF0aW9uRnJvbVByZXZhbGVudFJlc291cmNlICYmICFjdXJyZW50
SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCkKLSAgICAgICAgc2V0SXNTY2hl
ZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwg
dHJ1ZSk7CisgICAgICAgIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwo
dHJhbnNhY3Rpb24sIG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlKTsKIH0KIAotdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWMoY29uc3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWMoY29uc3QgU1FMaXRlVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMp
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTExNTYsMTIgKzExNzUs
MTcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0
aXN0aWMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIG1lcmdlKHNjb3BlZFN0YXRlbWVudC5nZXQoKSwgc3RhdGlzdGljKTsKKyAgICBtZXJnZSh0
cmFuc2FjdGlvbiwgc2NvcGVkU3RhdGVtZW50LmdldCgpLCBzdGF0aXN0aWMpOwogfQogCiB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZVN0YXRpc3RpY3MoVmVj
dG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYgc3RhdGlzdGljcykKIHsKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoc3RhdGlzdGljcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJh
c2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CiAKICAgICBmb3IgKGF1dG8mIHN0YXRpc3Rp
YyA6IHN0YXRpc3RpY3MpIHsKICAgICAgICAgaWYgKCFkb21haW5JRChzdGF0aXN0aWMucmVnaXN0
cmFibGVEb21haW4pKSB7CkBAIC0xMTcyLDEzICsxMTk2LDE1IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVzb3VyY2VM
b2FkU3RhCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIG1lcmdlU3RhdGlzdGljKHN0YXRpc3RpYyk7CisgICAgICAgICAg
ICBtZXJnZVN0YXRpc3RpYyh0cmFuc2FjdGlvbiwgc3RhdGlzdGljKTsKICAgICB9CiAKICAgICAv
LyBNYWtlIGEgc2VwYXJhdGUgcGFzcyBmb3IgaW50ZXItZG9tYWluIHJlbGF0aW9uc2hpcHMgc28g
d2UKICAgICAvLyBjYW4gcmVmZXIgdG8gdGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVudHJpZXMu
CiAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzKQotICAgICAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBzKHN0YXRpc3RpYyk7CisgICAgICAgIGluc2VydERvbWFpblJlbGF0
aW9uc2hpcHModHJhbnNhY3Rpb24sIHN0YXRpc3RpYyk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21t
aXQoKTsKIH0KIAogc3RhdGljIEFTQ0lJTGl0ZXJhbCBqb2luU3ViU3RhdGlzdGljc0ZvclNvcnRp
bmcoKQpAQCAtMTQxOSwxNSArMTQ0NSwyMiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIAogICAgIGF1dG8gbm90VmVyeVByZXZhbGVudFJlc291cmNlcyA9IGZpbmRO
b3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKCk7CisgICAgaWYgKG5vdFZlcnlQcmV2YWxlbnRSZXNv
dXJjZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlv
biB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKICAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlz
dGljIDogbm90VmVyeVByZXZhbGVudFJlc291cmNlcy52YWx1ZXMoKSkgewogICAgICAgICBpZiAo
c2hvdWxkU2tpcChyZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbikpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBjbGFzc2lmaWVy
KCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5zdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSk7Ci0gICAgICAgIGlm
IChuZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3RhdGlzdGljLnByZXZhbGVuY2UpCi0gICAgICAg
ICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURv
bWFpbiwgbmV3UHJldmFsZW5jZSk7CisgICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IHJlc291
cmNlU3RhdGlzdGljLnByZXZhbGVuY2UpIHsKKyAgICAgICAgICAgIGlmICghdHJhbnNhY3Rpb24u
aW5Qcm9ncmVzcygpKQorICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAg
ICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZSh0cmFuc2FjdGlvbiwgcmVzb3VyY2VTdGF0aXN0
aWMucmVnaXN0cmFibGVEb21haW4sIG5ld1ByZXZhbGVuY2UpOworICAgICAgICB9CiAgICAgfQor
ICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpCkBAIC0xNTM0LDYg
KzE1NjcsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmCiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2Fj
dGlvbi5iZWdpbigpOworCiAgICAgYXV0byBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0Fj
Y2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Il9z
KTsKICAgICBpZiAoIWluY3JlbWVudFN0b3JhZ2VBY2Nlc3MKICAgICAgICAgfHwgaW5jcmVtZW50
U3RvcmFnZUFjY2Vzcy0+YmluZEludCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJ
VEVfT0sKQEAgLTE1NDMsOSArMTU3OSwxMSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwo
V1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlE
LCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIsIHNjb3BlLCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVk
IHdhc0dyYW50ZWQpIG11dGFibGUgeworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKHRy
YW5zYWN0aW9uLCBXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFp
biksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkRWFybGllciwgc2NvcGUsIFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoU3RvcmFnZUFjY2Vz
c1dhc0dyYW50ZWQgd2FzR3JhbnRlZCkgbXV0YWJsZSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHdhc0dyYW50ZWQgPT0gU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQ6OlllcyA/IFN0b3JhZ2VB
Y2Nlc3NTdGF0dXM6Okhhc0FjY2VzcyA6IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OkNhbm5vdFJlcXVl
c3RBY2Nlc3MpOwogICAgIH0pOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNj
ZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzLCBQYWdlSWRlbnRpZmllciBvcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFp
biYmIG9wZW5lckRvbWFpbikKQEAgLTE1NjEsMTMgKzE1OTksMTkgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5l
cihEb21haW4KICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBTdG9y
YWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJyJfcywgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNj
ZXNzLnN0cmluZygpLCAiJyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICciX3MsIG9wZW5lckRvbWFp
bi5zdHJpbmcoKSwgIicsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRv
dy4iX3MpKTsKICAgICB9CiAKLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3Zl
KGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgc3Rk
OjpudWxsb3B0LCBvcGVuZXJQYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8s
IFN0b3JhZ2VBY2Nlc3NTY29wZTo6UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQp
IHsgfSk7CisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Cisg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKyAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbCh0
cmFuc2FjdGlvbiwgV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBXVEZNb3Zl
KG9wZW5lckRvbWFpbiksIHN0ZDo6bnVsbG9wdCwgb3BlbmVyUGFnZUlELCBTdG9yYWdlQWNjZXNz
UHJvbXB0V2FzU2hvd246Ok5vLCBTdG9yYWdlQWNjZXNzU2NvcGU6OlBlclBhZ2UsIFtdKFN0b3Jh
Z2VBY2Nlc3NXYXNHcmFudGVkKSB7IH0pOworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQog
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VB
Y2Nlc3MoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0
b3BGcmFtZURvbWFpbiwgRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBh
Z2VJRCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIHByb21wdFdhc1Nob3duLCBTdG9yYWdl
QWNjZXNzU2NvcGUgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1dh
c0dyYW50ZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGlmIChwcm9tcHRXYXNTaG93biA9
PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcykgewogICAgICAgICBhdXRvIHN1YkZy
YW1lU3RhdHVzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
c3ViRnJhbWVEb21haW4pOwogICAgICAgICBpZiAoIXN1YkZyYW1lU3RhdHVzLnNlY29uZCkgewpA
QCAtMTU3OSwxNSArMTYyMywxOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiBzdQogICAgICAgICBp
ZiAoIU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dp
bk9yQ29tcGF0aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZy
YW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikpCiAgICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNl
ckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykp
OwogI2VuZGlmCi0gICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFj
Y2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+
KHsgdG9wRnJhbWVEb21haW4gfSksICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpOworICAgICAgICBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BG
cmFtZURvbWFpbiB9KSwgKnN1YkZyYW1lU3RhdHVzLnNlY29uZCk7CiAgICAgfQogCi0gICAgZ3Jh
bnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUo
dG9wRnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHByb21wdFdhc1Nob3duLCBzY29wZSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVy
bmFsKHRyYW5zYWN0aW9uLCBXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFt
ZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0V2FzU2hvd24sIHNjb3BlLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNj
ZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21h
aW4mJiB0b3BGcmFtZURvbWFpbiwgc3RkOjpvcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1l
SUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIHBy
b21wdFdhc1Nob3duTm93T3JFYXJsaWVyLCBTdG9yYWdlQWNjZXNzU2NvcGUgc2NvcGUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwoY29uc3QgU1FMaXRlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
LCBTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZy
YW1lRG9tYWluLCBzdGQ6Om9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgUGFnZUlk
ZW50aWZpZXIgcGFnZUlELCBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gcHJvbXB0V2FzU2hv
d25Ob3dPckVhcmxpZXIsIFN0b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2Uu
dHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogCiAgICAgaWYgKHN1YkZyYW1lRG9tYWluID09IHRv
cEZyYW1lRG9tYWluKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NX
YXNHcmFudGVkOjpZZXMpOwpAQCAtMTYyNCw3ICsxNjcxLDExIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZy
YW1lRG9tCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZh
dGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21h
aW5zKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChkb21haW5z
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJh
bnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICBmb3Ig
KGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogZG9tYWlucykgewogICAgICAgICBhdXRvIHJlc3Vs
dCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lzdHJh
YmxlRG9tYWluKTsKICAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQpAQCAtMTYzNiw2ICsxNjg3
LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRo
ZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2UKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CisgICAgdHJhbnNhY3Rpb24u
Y29tbWl0KCk7CiB9CiAKIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9k
ZSgpCkBAIC0xNjQ4LDEzICsxNzAwLDE2IEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlCiAgICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBwcmltYXJ5RG9tYWluc1RvQmxvY2s7CiAgICAgcHJp
bWFyeURvbWFpbnNUb0Jsb2NrLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CiAKKyAgICBTUUxp
dGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5i
ZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOwogICAgIGlm
ICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VE
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlIHdhcyBub3QgY29tcGxldGVkIGR1
ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQgZm9yIGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3Vy
Y2UiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBzZXRQcmV2YWxl
bnRSZXNvdXJjZShkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2U6OkhpZ2gpOworICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCBk
ZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNlTG9hZFByZXZhbGVuY2U6Okhp
Z2gpOwogICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdTdGF0
aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsKIAogICAgIGlmICghZGVidWdNYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSgpLmlzRW1wdHkoKSkgewpAQCAtMTY2Myw3ICsxNzE4LDcgQEAgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJl
UHJldmFsZW50UmUKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1
cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBmb3IgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSIs
IHRoaXMpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQotICAgICAgICBzZXRQ
cmV2YWxlbnRSZXNvdXJjZShkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNl
TG9hZFByZXZhbGVuY2U6OkhpZ2gpOworICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZSh0cmFu
c2FjdGlvbiwgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlOjpIaWdoKTsKICAgICAgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFw
cGVuZChkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkpOwogCiAgICAgICAgIGlmIChkZWJ1
Z0xvZ2dpbmdFbmFibGVkKCkpIHsKQEAgLTE2NzIsNiArMTcyNyw4IEBAIFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVBy
ZXZhbGVudFJlCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsK
KwogICAgIHJldHVybiBwcmltYXJ5RG9tYWluc1RvQmxvY2s7CiB9CiAKQEAgLTE2ODIsMTUgKzE3
MzksMjAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJh
bWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG8KICAgICBib29sIGFyZVRhcmdldEFuZFRv
cEZyYW1lRG9tYWluc1NhbWVTaXRlID0gdGFyZ2V0RG9tYWluID09IHRvcEZyYW1lRG9tYWluOwog
ICAgIGJvb2wgYXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1NhbWVTaXRlID0gdGFyZ2V0RG9tYWlu
ID09IHNvdXJjZURvbWFpbjsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1f
ZGF0YWJhc2UpOworCiAgICAgYm9vbCBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsKICAg
ICBpZiAoIWlzTWFpbkZyYW1lICYmICEoYXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNp
dGUgfHwgYXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1NhbWVTaXRlKSkgeworICAgICAgICBpZiAo
IXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2lu
KCk7CisKICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwogICAgICAgICBpZiAoIXRhcmdl
dFJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9X
RUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpsb2dGcmFtZU5hdmlnYXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNl
cnQgYXR0ZW1wdCBvZiB0YXJnZXQgZG9tYWluIiwgdGhpcyk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgdXBkYXRlTGFzdFNlZW4odGFyZ2V0RG9tYWluLCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpKTsK
LSAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21h
aW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5
LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAqdGFyZ2V0
UmVzdWx0LnNlY29uZCk7CiAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CiAg
ICAgfQogCkBAIC0xNjk4LDM2ICsxNzYwLDQzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvCiAg
ICAgICAgIGlmIChpc01haW5GcmFtZSkgewogICAgICAgICAgICAgYm9vbCB3YXNOYXZpZ2F0ZWRB
ZnRlclNob3J0RGVsYXlXaXRob3V0VXNlckludGVyYWN0aW9uID0gIXdhc1BvdGVudGlhbGx5SW5p
dGlhdGVkQnlVc2VyICYmIGRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQgPCBwYXJhbWV0
ZXJzKCkubWluRGVsYXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZFRvTm90QmVBUmVkaXJlY3Q7
CiAgICAgICAgICAgICBpZiAoaXNSZWRpcmVjdCB8fCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0RGVs
YXlXaXRob3V0VXNlckludGVyYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0cmFuc2Fj
dGlvbi5pblByb2dyZXNzKCkpCisgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLmJlZ2lu
KCk7CisKICAgICAgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc291cmNlRG9tYWluKTsK
ICAgICAgICAgICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CiAgICAgICAgICAgICAgICAg
aWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNv
bmQpIHsKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omxv
Z0ZyYW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBh
dHRlbXB0IG9mIHRhcmdldCBvciByZWRpcmVjdGluZyBkb21haW4gKGlzTWFpbkZyYW1lKSIsIHRo
aXMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFp
biB9KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7CisgICAgICAgICAgICAgICAg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFp
biB9KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7CiAgICAgICAgICAgICAgICAg
aWYgKGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWlu
IH0pLCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0aW5nRG9tYWlu
UmVzdWx0LnNlY29uZCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVn
TG9nZ2luZ0VuYWJsZWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0lORk8oSVRQRGVidWcsICJEaWQgc2V0ICUiIFBVQkxJQ19MT0dfU1RSSU5HICIgYXMgbWFraW5n
IGEgdG9wIGZyYW1lIHJlZGlyZWN0IHRvICUiIFBVQkxJQ19MT0dfU1RSSU5HICIuIiwgc291cmNl
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRhcmdldERvbWFpbi5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29s
ZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFr
ZVN0cmluZygiRGlkIHNldCAnIiwgc291cmNlRG9tYWluLnN0cmluZygpLCAiJyBhcyBtYWtpbmcg
YSB0b3AgZnJhbWUgcmVkaXJlY3QgdG8gJyIsIHRhcmdldERvbWFpbi5zdHJpbmcoKSwgIicuIikp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNG
cm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgc291cmNlRG9tYWluIH0pLCAq
dGFyZ2V0UmVzdWx0LnNlY29uZCk7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnks
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgc291cmNlRG9tYWluIH0pLCAqdGFyZ2V0UmVz
dWx0LnNlY29uZCk7CiAgICAgICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpc1JlZGlyZWN0KSB7CisgICAg
ICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgICAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9tYWlu
UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc291
cmNlRG9tYWluKTsKICAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKICAgICAgICAg
ICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCB8fCAhcmVkaXJlY3RpbmdEb21haW5SZXN1bHQu
c2Vjb25kKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRCht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omxv
Z0ZyYW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBh
dHRlbXB0IG9mIHRhcmdldCBvciByZWRpcmVjdGluZyBkb21haW4gKGlzUmVkaXJlY3QpIiwgdGhp
cyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAqcmVk
aXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKLSAgICAgICAgICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgc291cmNlRG9tYWluIH0pLCAqdGFyZ2V0UmVzdWx0LnNl
Y29uZCk7CisgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0
aW9uLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vj
b25kKTsKKyAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rp
b24sIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPih7IHNvdXJjZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpOwogICAg
ICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
KyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIAogICAgIGlmIChzdGF0aXN0aWNzV2VyZVVwZGF0
ZWQpCiAgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3Nh
cnkoKTsKQEAgLTE3MzgsMjEgKzE4MDcsMjkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbihjb24KICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBBU1NFUlQoZnJvbURvbWFpbiAhPSB0
b0RvbWFpbik7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNl
KTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byB0b0RvbWFpblJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvRG9tYWluKTsK
ICAgICBpZiAoIXRvRG9tYWluUmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiB3YXMgbm90
IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFt
ZUxpbmtEZWNvcmF0aW9uc0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBm
cm9tRG9tYWluIH0pLCAqdG9Eb21haW5SZXN1bHQuc2Vjb25kKTsKKyAgICBpbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCB0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21R
dWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBmcm9tRG9tYWluIH0pLCAqdG9Eb21h
aW5SZXN1bHQuc2Vjb25kKTsKICAgICAKICAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJjZShmcm9t
RG9tYWluKSkKLSAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bCh0b0RvbWFpbiwgdHJ1ZSk7CisgICAgICAgIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWwodHJhbnNhY3Rpb24sIHRvRG9tYWluLCB0cnVlKTsKKworICAgIHRyYW5zYWN0
aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAg
ICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Jf
SUZfQUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRl
bXB0IiwgdGhpcyk7CkBAIC0xNzY3LDYgKzE4NDQsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNh
bQogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CisK
KyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKICAgICAKICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwogfQpAQCAtMTc5MSw2ICsxODcwLDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWkKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRy
YW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVl
IHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAtMTc5OCw2ICsxODgwLDkgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0
aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWkKICAgICB9CiAgICAgYm9vbCBkaWRIYXZlUHJldmlvdXNV
c2VySW50ZXJhY3Rpb24gPSBoYXNIYWRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBPcGVyYXRpbmdE
YXRlc1dpbmRvdzo6TG9uZyk7CiAgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgdHJ1ZSwg
V2FsbFRpbWU6Om5vdygpKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCiAgICAgaWYg
KGRpZEhhdmVQcmV2aW91c1VzZXJJbnRlcmFjdGlvbikgewogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOwogICAgICAgICByZXR1cm47CkBAIC0xODA5LDYgKzE4OTQsOSBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25z
dCBSZWdpc3RyYWJsZQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAg
U1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rp
b24uYmVnaW4oKTsKKwogICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXRhcmdldFJlc3Vs
dC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNl
ckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKQEAgLTE4MjQsNiArMTkxMiw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxl
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAorICAgIHRyYW5zYWN0aW9u
LmNvbW1pdCgpOworCiAgICAgLy8gVXBkYXRlIGNvb2tpZSBibG9ja2luZyB1bmNvbmRpdGlvbmFs
bHkgc2luY2UgYSBjYWxsIHRvIGhhc0hhZFVzZXJJbnRlcmFjdGlvbigpCiAgICAgLy8gdG8gY2hl
Y2sgdGhlIHByZXZpb3VzIHVzZXIgaW50ZXJhY3Rpb24gc3RhdHVzIGNvdWxkIGNhbGwgY2xlYXJV
c2VySW50ZXJhY3Rpb24oKSwKICAgICAvLyBibG93aW5nIHRoZSBjYWxsIHN0YWNrLgpAQCAtMTg1
OCw5ICsxOTQ4LDExIEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsCiAgICAgcmV0dXJuIGhhZFVz
ZXJJbnRlcmFjdGlvbjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFp
biwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBuZXdQcmV2YWxlbmNlKQordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU1FM
aXRlVHJhbnNhY3Rpb24mLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNvdXJj
ZUxvYWRQcmV2YWxlbmNlIG5ld1ByZXZhbGVuY2UpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisgICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OworCiAgICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
MDA2LDYgKzIwOTgsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYgogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24o
bV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsK
ICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZf
QUxMT1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZh
aWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwpAQCAtMjAyMSwxMSArMjExNiwyNCBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291
cmNlKGNvbnN0IFJlZ2lzdHJhYgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGJvb2wgdmFsdWUpCit7CisgICAgU1FMaXRl
VHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVn
aW4oKTsKKworICAgIHNldEdyYW5kZmF0aGVyZWQodHJhbnNhY3Rpb24sIGRvbWFpbiwgdmFsdWUp
OworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgV2ViQ29yZTo6U1FM
aXRlVHJhbnNhY3Rpb24mLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZh
bHVlKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChtX2Rh
dGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKQEAgLTIwNDMsOSArMjE1MSwxMCBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYQogICAgIH0KIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbChjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZhbHVlKQordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbChjb25zdCBTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiBkb21haW4sIGJvb2wgdmFsdWUpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgQVNTRVJUKG1fZGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogCiAgICAg
YXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bihkb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewpAQCAtMjEwNSw3OSArMjIxNCwx
MDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFMKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2Up
OworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKICAg
ICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxM
T1dFRChtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUg
dG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlz
dGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFtZSBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8
UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsK
KyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRyYW5zYWN0aW9uLCBzdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9w
RnJhbWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1p
dCgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1
YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlv
biB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAg
ICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihzdWJyZXNvdXJjZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIs
IHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwg
bWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJh
bWUgZG9tYWluLgotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRv
cEZyYW1lRG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1
ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAqcmVz
dWx0LnNlY29uZCk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAogdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3Qg
UmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFz
ZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4p
OwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xPR19FUlJPUl9J
Rl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIHdhcyBub3QgY29tcGxldGVk
IGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBz
dGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgotICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNo
U2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29u
ZCk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7
IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisKKyAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4m
IHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4p
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBTUUxpdGVUcmFuc2Fj
dGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOwor
CiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IiwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gRm9yIGNvbnNpc3RlbmN5
LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGly
ZWN0IGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJl
ZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwTGlzdCh0cmFuc2FjdGlvbiwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVl
cnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1
bHQuc2Vjb25kKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogfQogCiB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERv
bWFpbiYgcmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0
cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7CiAgICAgaWYgKCFy
ZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBp
bnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnks
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQu
c2Vjb25kKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRRdWVyeSwgSGFzaFNldDxS
ZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwor
ICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24sIHRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVj
dERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodHJhbnNhY3Rpb24sIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnRRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRp
cmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworCisgICAgdHJhbnNhY3Rpb24uY29tbWl0
KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURv
bWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rp
b24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJh
bWVEb21haW4pOwogICAgIGlmICghcmVzdWx0LnNlY29uZCkgewogICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUl9JRl9BTExPV0VEKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20gd2FzIG5vdCBj
b21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28g
aGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCi0gICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVy
eSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3Vs
dC5zZWNvbmQpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodHJhbnNhY3Rpb24s
IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9t
YWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisKKyAgICB0cmFuc2Fj
dGlvbi5jb21taXQoKTsKIH0KIAogc3RkOjpwYWlyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpBZGRlZFJlY29yZCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQpAQCAtMjUz
OCw2ICsyNjc3LDggQEAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0
ZURhdGFGb3IgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXMKICAgICBhdXRvIG9sZGVzdFVz
ZXJJbnRlcmFjdGlvbiA9IG5vdzsKICAgICBSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVz
dHJpY3RXZWJzaXRlRGF0YUZvciB0b0RlbGV0ZU9yUmVzdHJpY3RGb3I7CiAKKyAgICBTUUxpdGVU
cmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKwogICAgIFZlY3RvcjxEb21haW5E
YXRhPiBkb21haW5zID0gdGhpcy0+ZG9tYWlucygpOwogICAgIFZlY3Rvcjx1bnNpZ25lZD4gZG9t
YWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nOwogICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDog
ZG9tYWlucykgewpAQCAtMjU1MSw3ICsyNjkyLDkgQEAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxl
dGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXMK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVBbGxCdXRDb29r
aWVzRm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZykpIHsKICAgICAg
ICAgICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29v
a2llV2Vic2l0ZURhdGFGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7Ci0g
ICAgICAgICAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbChz
dGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rp
b24uYmVnaW4oKTsKKyAgICAgICAgICAgICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsKHRyYW5zYWN0aW9uLCBzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIGZh
bHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzaG91bGRFbmZvcmNlU2FtZVNp
dGVTdHJpY3RGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSkgewog
ICAgICAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9FbmZvcmNlU2Ft
ZVNpdGVTdHJpY3RGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7CkBAIC0y
NTcxLDYgKzI3MTQsOCBAQCBSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJz
aXRlRGF0YUZvciBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhcwogICAgICAgICB0b0RlbGV0
ZU9yUmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3Iu
Y2xlYXIoKTsKIAogICAgIGNsZWFyR3JhbmRmYXRoZXJpbmcoV1RGTW92ZShkb21haW5JRHNUb0Ns
ZWFyR3JhbmRmYXRoZXJpbmcpKTsKKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwogICAgIAog
ICAgIHJldHVybiB0b0RlbGV0ZU9yUmVzdHJpY3RGb3I7CiB9CkBAIC0yNjM1LDYgKzI3ODAsOSBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2Vlbihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7Cisg
ICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKICAgICBpZiAoIXJlc3Vs
dC5zZWNvbmQpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RT
ZWVuIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKQEAgLTI2NDIsNiArMjc5MCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkCiAgICAgfQog
ICAgIAogICAgIHVwZGF0ZUxhc3RTZWVuKGRvbWFpbiwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KHNlY29uZHMuc2Vjb25kcygpKSk7CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKIH0KIAog
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKQEAgLTI2NTAsMTQgKzI4MDAs
MjggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGUKIAogICAgIGlmIChzaG91bGRTa2lwKGRvbWFp
bikpCiAgICAgICAgIHJldHVybjsKLSAgICAKKworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5z
YWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisgICAgc2V0UHJl
dmFsZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRvbWFpbik7CisgICAgdHJhbnNhY3Rpb24uY29t
bWl0KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSk7CisKKyAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQorICAgICAgICByZXR1cm47CisKICAg
ICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSB3YXMgbm90IGNvbXBsZXRl
ZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2U6OkhpZ2gpOworICAgIHNldFByZXZhbGVudFJlc291cmNlKHRyYW5zYWN0aW9uLCBk
b21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwogfQogCiB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKQEAgLTI2NjYsMTQgKzI4MzAsMzAgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJl
c291cmNlKGNvbnN0IFJlZ2lzdHIKIAogICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCiAgICAg
ICAgIHJldHVybjsKLSAgICAKKworICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1f
ZGF0YWJhc2UpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7CisKKyAgICBzZXRWZXJ5UHJldmFs
ZW50UmVzb3VyY2UodHJhbnNhY3Rpb24sIGRvbWFpbik7CisKKyAgICB0cmFuc2FjdGlvbi5jb21t
aXQoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0
VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFNRTGl0ZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQobV9kYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jl
c3MoKSk7CisKKyAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQorICAgICAgICByZXR1cm47CisK
ICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKGRvbWFpbik7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBj
b21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJj
ZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UodHJh
bnNhY3Rpb24sIGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVyeUhpZ2gpOwogfQog
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVEYXRhUmVj
b3Jkc1JlbW92ZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgaW50IHZhbHVlKQpA
QCAtMjk3MSw2ICszMTUxLDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAKKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihtX2Rh
dGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCiAgICAgaW50IHJvd3NUb1BydW5l
ID0gbV9vcGVyYXRpbmdEYXRlc1NpemUgLSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgKyAxOwog
ICAgIGlmIChyb3dzVG9QcnVuZSA+IDApIHsKICAgICAgICAgYXV0byBkZWxldGVMZWFzdFJlY2Vu
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRF
TEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRoLCBtb250aERheSBM
SU1JVCA/OyJfcyk7CkBAIC0yOTkzLDYgKzMxNzYsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2Fy
eQogICAgIH0KIAogICAgIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpOworCisgICAg
dHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omhhc1N0YXRpc3RpY3NFeHBpcmVkKFdhbGxUaW1lIG1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25UaW1lLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRlc1dpbmRv
dykgY29uc3QKQEAgLTMwMjYsNiArMzIxMSwxMCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdAog
ewogICAgIC8vIFBvcHVsYXRlIHRoZSBPcGVyYXRpbmcgRGF0ZXMgdGFibGUgd2l0aCBlbm91Z2gg
ZGF5cyB0byByZXF1aXJlIHBydW5pbmcuCiAgICAgZG91YmxlIGRheXNBZ29JblNlY29uZHMgPSAw
OworCisgICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAg
dHJhbnNhY3Rpb24uYmVnaW4oKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVt
YmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKICAgICAgICAgZG91YmxlIGRheXNUb1N1
YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSkudmFsdWUoKTsKICAgICAgICAgZGF5
c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVl
KCkgLSBkYXlzVG9TdWJ0cmFjdDsKQEAgLTMwNDUsNiArMzIzNCw4IEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0
aW5nKGNvbnN0CiAKICAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKIAorICAg
IHRyYW5zYWN0aW9uLmNvbW1pdCgpOworCiAgICAgLy8gTWFrZSBzdXJlIG1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25UaW1lIGlzIHRoZSBsZWFzdCByZWNlbnQgb2YgYWxsIGVudHJpZXMuCiAgICAg
ZGF5c0Fnb0luU2Vjb25kcyAtPSBTZWNvbmRzOjpmcm9tSG91cnMoMjQpLnZhbHVlKCk7CiAgICAg
YXV0byBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0
YXRlbWVudChtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LCBpbnNlcnRPYnNlcnZlZERv
bWFpblF1ZXJ5LCAiaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmciX3MpOwpAQCAtMzE0
Nyw2ICszMzM4LDEwIEBAIHN0ZDo6cGFpcjxzdGQ6Om9wdGlvbmFsPFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50Piwgc3RkOjpvcHRpb25hbDxBdHRyCiAKIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50
KFByaXZhdGVDbGlja01lYXN1cmVtZW50JiYgYXR0cmlidXRpb24sIFByaXZhdGVDbGlja01lYXN1
cmVtZW50QXR0cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlwZSkKIHsKKyAgICBTUUxpdGVUcmFu
c2FjdGlvbiB0cmFuc2FjdGlvbihtX2RhdGFiYXNlKTsKKyAgICB0cmFuc2FjdGlvbi5iZWdpbigp
OworICAgIGF1dG8gY29tbWl0VHJhbnNhY3Rpb24gPSBtYWtlU2NvcGVFeGl0KFsmdHJhbnNhY3Rp
b25dIHsgdHJhbnNhY3Rpb24uY29tbWl0KCk7IH0pOworCiAgICAgYXV0byBzb3VyY2VEYXRhID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oYXR0cmlidXRpb24u
c291cmNlU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKICAgICBhdXRvIGF0dHJpYnV0aW9uRGVz
dGluYXRpb25EYXRhID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21h
aW4oYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0cmFibGVEb21haW4pOwogCkBA
IC0zMzMwLDYgKzM1MjUsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50KHN0ZDo6b3B0aQogICAgICAgICBiaW5k
UGFyYW1ldGVyID0gU3RyaW5nOjpudW1iZXIoKmRvbWFpbklEVG9NYXRjaCk7CiAgICAgfQogCisg
ICAgU1FMaXRlVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24obV9kYXRhYmFzZSk7CisgICAgdHJhbnNh
Y3Rpb24uYmVnaW4oKTsKKwogICAgIGF1dG8gY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1l
bnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9jbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50U3RhdGVtZW50LCBjbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50UXVlcnksICJjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKIAogICAgIGlm
ICghY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKQEAgLTMzNDksNiArMzU0Nyw4IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQoc3RkOjpvcHRpCiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FM
TE9XRUQobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50KCkKQEAgLTM1NDQsNiArMzc0NCw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzCiB7CiAg
ICAgYXV0byBleHBpcmVkVGltZVRvU2VuZCA9IFdhbGxUaW1lOjpub3coKSAtIDFfaDsKIAorICAg
IFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKG1fZGF0YWJhc2UpOworICAgIHRyYW5zYWN0
aW9uLmJlZ2luKCk7CisKICAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9ID8iX3Mp
OwogICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudCA9IG1f
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IG51bGwiX3Mp
OwogCkBAIC0zNTU5LDYgKzM3NjIsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50cwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKKyAgICB0cmFuc2FjdGlvbi5jb21taXQo
KTsKKwogICAgIHJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuaAppbmRleCA1MTMzNzZlMzMzNjQ4MmFlNWRhOTFlYWJlMGVk
NTVjMDVmZGI1MDU5Li41Yzc4NGYzMDc5MzI2NjUwMmRlZjJiZGU4NDBmNzkwZTE3MGZiNWY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUu
aApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKSBvdmVycmlkZTsKICAgICBib29s
IGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgdm9pZCBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzZXRJc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5z
YWN0aW9uJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKICAgICB2b2lk
IHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNv
bnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVy
cmlkZTsKQEAgLTE3NywxOCArMTc3LDIxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95U3Rh
dGVtZW50cygpOwogICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlIHNj
b3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYs
IEFTQ0lJTGl0ZXJhbCwgY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKKyAgICB2b2lkIHNldFByZXZh
bGVudFJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7
CisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0
aW9uJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKICAgICBib29sIGhh
c1N0b3JhZ2VBY2Nlc3MoY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBTdWJGcmFtZURvbWFp
biYpIGNvbnN0OwogICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRo
aXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5PiBnZXRUaGlyZFBhcnR5RGF0YUZvclNw
ZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModW5zaWduZWQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgY29uc3Q7CiAgICAgdm9pZCBvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkoKTsKICAg
ICBTdHJpbmcgZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHVuc2lnbmVkKSBjb25zdDsKICAg
ICBBU0NJSUxpdGVyYWwgZ2V0U3ViU3RhdGlzdGljU3RhdGVtZW50KGNvbnN0IFN0cmluZyYpIGNv
bnN0OwogICAgIHZvaWQgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJiwgY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKSBjb25zdDsKLSAgICB2
b2lkIG1lcmdlU3RhdGlzdGljKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICB2
b2lkIG1lcmdlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCosIGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmKTsKKyAgICB2b2lkIG1lcmdlU3RhdGlzdGljKGNvbnN0IFdlYkNvcmU6OlNRTGl0
ZVRyYW5zYWN0aW9uJiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIHZvaWQg
bWVyZ2UoY29uc3QgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rpb24mLCBXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQqLCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgdm9pZCBjbGVh
ckRhdGFiYXNlQ29udGVudHMoKTsKICAgICBib29sIGluc2VydE9ic2VydmVkRG9tYWluKGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdm9pZCBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsK
LSAgICB2b2lkIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QoY29uc3QgU3RyaW5nJiwgY29u
c3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mLCB1bnNpZ25lZCk7CisgICAgdm9pZCBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwg
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwTGlzdChjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiwgdW5zaWduZWQpOwogICAg
IGJvb2wgcmVsYXRpb25zaGlwRXhpc3RzKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNl
dFNjb3BlJiwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZmlyc3REb21haW5JRCwgY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIHNlY29uZERvbWFpbikgY29uc3Q7CiAgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKICAgICBi
b29sIGRvbWFpbkV4aXN0cyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwpAQCAtMjM1
LDEwICsyMzgsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIGFyZUFsbFRoaXJkUGFydHlDb29raWVz
QmxvY2tlZFVuZGVyKGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CiAgICAgQ29va2ll
QWNjZXNzIGNvb2tpZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZy
YW1lRG9tYWluJik7CiAKLSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSk7CisgICAgdm9pZCBzZXRQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpTUUxpdGVUcmFuc2FjdGlvbiYsIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSk7CiAgICAgdW5zaWduZWQg
cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9t
YWluKHVuc2lnbmVkIHByaW1hcnlEb21haW5JRCwgU3RkU2V0PHVuc2lnbmVkPiYgbm9uUHJldmFs
ZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsK
ICAgICB2b2lkIHNldERvbWFpbnNBc1ByZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+JiYpOwotICAg
IHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJh
bWVEb21haW4mJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+LCBXZWJD
b3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3du
LCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vi
Q29yZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmKTsKKyAgICB2b2lkIGdyYW50U3RvcmFn
ZUFjY2Vzc0ludGVybmFsKGNvbnN0IFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgU3ViRnJh
bWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGcmFt
ZUlkZW50aWZpZXI+LCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFj
Y2Vzc1Byb21wdFdhc1Nob3duLCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmKTsKICAg
ICB2b2lkIG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CiAgICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1
Z01vZGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CkBAIC0yNTMsNyArMjU2LDcgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgY3JlYXRlVW5pcXVlSW5kaWNlcygpOwogICAgIGJvb2wgY3JlYXRlU2NoZW1hKCk7Ci0gICAg
U3RyaW5nIGVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+Jik7CisgICAgU3RyaW5nIGVuc3VyZUFuZE1ha2VEb21haW5MaXN0KGNvbnN0IFdlYkNv
cmU6OlNRTGl0ZVRyYW5zYWN0aW9uJiwgY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4m
KTsKICAgICBzdGQ6Om9wdGlvbmFsPFdhbGxUaW1lPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZShjb25zdCBEb21haW5EYXRhJik7CiAgICAgCiAgICAgdm9pZCByZW1vdmVVbmF0dHJpYnV0
ZWQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>