<?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>234628</bug_id>
          
          <creation_ts>2021-12-22 20:16:52 -0800</creation_ts>
          <short_desc>Make DeferredWorkTimer::addPendingWork() return a Ticket.</short_desc>
          <delta_ts>2022-01-04 11:59:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=234855</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1826483</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-22 20:16:52 -0800</bug_when>
    <thetext>This is so that we can use the compiler to enforce that we always call DeferredWorkTimer::addPendingWork() before calling DeferredWorkTimer::scheduleWorkSoon().

rdar://84260429</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826484</commentid>
    <comment_count>1</comment_count>
      <attachid>447855</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-22 20:19:54 -0800</bug_when>
    <thetext>Created attachment 447855
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826486</commentid>
    <comment_count>2</comment_count>
      <attachid>447855</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-22 20:35:32 -0800</bug_when>
    <thetext>Comment on attachment 447855
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/runtime/DeferredWorkTimer.cpp:142
&gt; +    Vector&lt;Ticket, 16&gt; cancelledTickets;
&gt; +    for (auto&amp; it : m_pendingTickets) {
&gt; +        if (it.value-&gt;isCancelled())
&gt; +            cancelledTickets.append(it.key);
&gt; +    }
&gt; +    for (auto&amp; ticket : cancelledTickets)
&gt; +        m_pendingTickets.remove(ticket);

You can use `HashMap::removeIf` / `HashSet::removeIf`, which is more efficient.

&gt; Source/JavaScriptCore/runtime/DeferredWorkTimer.h:58
&gt;          Vector&lt;Strong&lt;JSCell&gt;&gt; dependencies;

It is good if we can use FixedVector&lt;Strong&lt;JSCell&gt;&gt; here, which allocates exact size, and it only has one pointer size.

&gt; Source/JavaScriptCore/runtime/DeferredWorkTimer.h:92
&gt; +    HashMap&lt;Ticket, std::unique_ptr&lt;TicketData&gt;&gt; m_pendingTickets;

Why not using `HashSet&lt;std::unique_ptr&lt;TicketData&gt;&gt;`? I think, because of GetPtr abstraction, we can still look up from it via TicketData*, a.k.a. Ticket.
And HashSet is 2x more space efficient.

&gt; Source/JavaScriptCore/wasm/WasmStreamingCompiler.cpp:210
&gt; +    // The pending work TicketData was keeping the promise alive. We  need to

Remove one space between We and need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826595</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-23 12:02:12 -0800</bug_when>
    <thetext>Thanks for the review.

(In reply to Yusuke Suzuki from comment #2)
&gt; You can use `HashMap::removeIf` / `HashSet::removeIf`, which is more
&gt; efficient.

Fixed.

&gt; &gt; Source/JavaScriptCore/runtime/DeferredWorkTimer.h:58
&gt; &gt;          Vector&lt;Strong&lt;JSCell&gt;&gt; dependencies;
&gt; 
&gt; It is good if we can use FixedVector&lt;Strong&lt;JSCell&gt;&gt; here, which allocates
&gt; exact size, and it only has one pointer size.

I can&apos;t do this yet.  Will need to add 2 APIs: FixedVector::clear() and FixedVector::contains().  It&apos;s not difficult to add these, but I&apos;ll do that in a separate patch, and make this change after that.

&gt; &gt; Source/JavaScriptCore/runtime/DeferredWorkTimer.h:92
&gt; &gt; +    HashMap&lt;Ticket, std::unique_ptr&lt;TicketData&gt;&gt; m_pendingTickets;
&gt; 
&gt; Why not using `HashSet&lt;std::unique_ptr&lt;TicketData&gt;&gt;`? I think, because of
&gt; GetPtr abstraction, we can still look up from it via TicketData*, a.k.a.
&gt; Ticket.
&gt; And HashSet is 2x more space efficient.

Fixed.

&gt; &gt; Source/JavaScriptCore/wasm/WasmStreamingCompiler.cpp:210
&gt; &gt; +    // The pending work TicketData was keeping the promise alive. We  need to
&gt; 
&gt; Remove one space between We and need.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826600</commentid>
    <comment_count>4</comment_count>
      <attachid>447899</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-23 12:23:51 -0800</bug_when>
    <thetext>Created attachment 447899
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826632</commentid>
    <comment_count>5</comment_count>
      <attachid>447905</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-23 13:58:57 -0800</bug_when>
    <thetext>Created attachment 447905
[fast-cq] patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826689</commentid>
    <comment_count>6</comment_count>
      <attachid>447905</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-12-23 21:56:52 -0800</bug_when>
    <thetext>Comment on attachment 447905
[fast-cq] patch for landing.

Landing now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826690</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-23 22:00:09 -0800</bug_when>
    <thetext>Committed r287421 (245556@main): &lt;https://commits.webkit.org/245556@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447905.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828028</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-01-04 11:59:32 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #3)
&gt; (In reply to Yusuke Suzuki from comment #2)
&gt; &gt; &gt; Source/JavaScriptCore/runtime/DeferredWorkTimer.h:58
&gt; &gt; &gt;          Vector&lt;Strong&lt;JSCell&gt;&gt; dependencies;
&gt; &gt; 
&gt; &gt; It is good if we can use FixedVector&lt;Strong&lt;JSCell&gt;&gt; here, which allocates
&gt; &gt; exact size, and it only has one pointer size.
&gt; 
&gt; I can&apos;t do this yet.  Will need to add 2 APIs: FixedVector::clear() and
&gt; FixedVector::contains().  It&apos;s not difficult to add these, but I&apos;ll do that
&gt; in a separate patch, and make this change after that.

Fixing this in https://bugs.webkit.org/show_bug.cgi?id=234855.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447855</attachid>
            <date>2021-12-22 20:19:54 -0800</date>
            <delta_ts>2021-12-22 20:35:32 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-234628.patch</filename>
            <type>text/plain</type>
            <size>30623</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3MzgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDIxLTEyLTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIERlZmVycmVkV29ya1RpbWVyOjphZGRQZW5kaW5nV29yaygpIHJldHVybiBhIFRpY2tldC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDYyOAor
ICAgICAgICByZGFyOi8vODQyNjA0MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAxLiBNYWtlIFRpY2tldCBhIHVuaXF1ZSB0b2tlbiBpbnN0ZWFkIG9m
IHRoZSBKU09iamVjdCogdGFyZ2V0IG9iamVjdC4KKyAgICAgICAgICAgVGhlIFRpY2tldCBpcyBu
b3cgYSBwb2ludGVyIHRvIHRoZSBUaWNrZXREYXRhIGluIHRoZSBwZW5kaW5nIHdvcmsgbGlzdC4K
KworICAgICAgICAyLiBJbnN0ZWFkIG9mIHRha2luZyBhIFRpY2tldCBhcmd1bWVudCwgRGVmZXJy
ZWRXb3JrVGltZXI6OmFkZFBlbmRpbmdXb3JrKCkgbm93CisgICAgICAgICAgIHRha2VzIGEgSlNP
YmplY3QqIGB0YXJnZXRgIGFyZ3VtZW50IGV4cGxpY2l0bHksIGFuZCByZXR1cm5zIHRoZSBUaWNr
ZXQgZm9yIHRoZQorICAgICAgICAgICBhZGRlZCBUaWNrZXREYXRhIGluc3RlYWQuCisKKyAgICAg
ICAgICAgQWxsIHRoZSByZWxldmFudCBEZWZlcnJlZFdvcmtUaW1lciBBUElTIGFscmVhZHkgdGFr
ZSBhIFRpY2tldCBhcyBhbiBhcmd1bWVudC4KKyAgICAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQg
YWRkUGVuZGluZ1dvcmsoKSBpcyBjYWxsZWQgYmVmb3JlIHdlIHN0YXJ0IGRvaW5nIHdvcmsgd2l0
aAorICAgICAgICAgICB0aGVzZSBBUElzIChlc3BlY2lhbGx5IHNjaGVkdWxlV29ya1Nvb24oKSku
CisKKyAgICAgICAgMy4gUHJldmlvdXNseSwgYWRkUGVuZGluZ1dvcmsoKSB3aWxsIG9ubHkgc2F2
ZSBvbmUgaW5zdGFuY2Ugb2YgVGlja2V0RGF0YSBmb3IKKyAgICAgICAgICAgYSBnaXZlbiBKU09i
amVjdCoga2V5LiAgV2l0aCB0aGlzIHBhdGNoLCB3ZSdsbCByZWdpc3RlciBhIG5ldyBUaWNrZXRE
YXRhCisgICAgICAgICAgIGluc3RhbmNlIGZvciBldmVyeSBjYWxsIHRvIGFkZFBlbmRpbmdXb3Jr
KCksIGFuZCByZXR1cm4gYSB1bmlxdWUgVGlja2V0IGZvciBpdC4KKworICAgICAgICAgICBUaGlz
IGlzIG5lZWRlZCBiZWNhdXNlIGl0IG1heSBiZSBwb3NzaWJsZSBmb3IgMiBkaWZmZXJlbnQgY2xp
ZW50cyB0byBjYWxsCisgICAgICAgICAgIGFkZFBlbmRpbmdXb3JrKCkgYW5kIHNjaGVkdWxlV29y
a1Nvb24oKSB3aXRoIHRoZSBzYW1lIHRhcmdldCBKU09iamVjdCogYnV0IHdpdGgKKyAgICAgICAg
ICAgZGlmZmVyZW50IHNldHMgb2YgZGVwZW5kZW5jaWVzLgorCisgICAgICAgICAgIFNlY29uZGx5
LCBldmVuIGlzIHRoZSBib3RoIHNldHMgb2YgZGVwZW5kZW5jaWVzIGFyZSBpZGVudGljYWwsIGEg
Y2xpZW50IG1heQorICAgICAgICAgICBjYWxsIGFkZFBlbmRpbmdXb3JrKCkgYW5kIHNjaGVkdWxl
V29ya1Nvb24oKSB3aXRoIHRoZSBzYW1lIEpTT2JqZWN0KiB0YXJnZXQKKyAgICAgICAgICAgbW9y
ZSB0aGFuIG9uY2UgYmVjYXVzZSBpdCBpbnRlbmRlZCB0byBzY2hlZHVsZSBtb3JlIHRoYW4gMSB0
YXNrIHRvIHJ1bi4KKworICAgICAgICAgICBOb3RlIHRoYXQgRGVmZXJyZWRXb3JrVGltZXI6OmRv
V29yaygpIGNvbnN1bWVzIHRoZSBjb3JyZXNwb25kaW5nIFRpY2tldERhdGEKKyAgICAgICAgICAg
KGkuZS4gcmVtb3ZlcyBpdCBmcm9tIHRoZSBtX3BlbmRpbmdUaWNrZXRzIGxpc3QpIGZvciBlYWNo
IHRhc2sgYXMgaXQgaXMgcnVuLgorICAgICAgICAgICBUbyBlbnN1cmUgdGhhdCB0aGUgZGVwZW5k
ZW5jaWVzIGZvciBlYWNoIHRhc2sgaXMgcHJvdGVjdGVkLCB3ZSdsbCBlaXRoZXIgbmVlZAorICAg
ICAgICAgICB0byByZWYgY291bnQgdGhlIFRpY2tldERhdGEgZm9yIHRoZSBzYW1lIHRhcmdldCBv
YmplY3QgKGFuZCBob2xkIG9mZiBvbiByZW1vdmluZworICAgICAgICAgICBpdCBmcm9tIHRoZSBs
aXN0KSwgb3Igd2UnbGwgbmVlZCB0byByZWdpc3RlciBhIGRpZmZlcmVudCBUaWNrZXREYXRhIGlu
c3RhbmNlCisgICAgICAgICAgIGZvciBlYWNoIHRhc2suICBSZWYgY291bnRpbmcgY2FuIHNvbHZl
IHRoZSBzZWNvbmQgaXNzdWUgYWJvdmUsIGJ1dCBkb2VzIG5vdAorICAgICAgICAgICBzb2x2ZSB0
aGUgZmlyc3QuICBTbywgdGhpcyBwYXRjaCBnb2VzIHdpdGggdGhlIG1vcmUgZ2VuZXJpYyBzb2x1
dGlvbiB0byBhbGxvdworICAgICAgICAgICBlYWNoIHRhc2sgdG8gaGF2ZSBpdHMgb3duIFRpY2tl
dERhdGEgaW5zdGFuY2UgKGFuZCwgaXRzIG93biB1bmlxdWUgVGlja2V0KS4KKworICAgICAgICA0
LiBQcmV2aW91c2x5LCBpZiB0aGUgY2xpZW50IGNhbmNlbHMgcGVuZGluZyB3b3JrLCB3ZSB3b3Vs
ZCByZW1vdmUgdGhlIFRpY2tldERhdGEKKyAgICAgICAgICAgaW1tZWRpYXRlbHkgZnJvbSB0aGUg
bV9wZW5kaW5nVGlja2V0cyBsaXN0LiAgVGhpcyBvcGVucyB1cCBhbiBvcHBvcnR1bml0eSBmb3IK
KyAgICAgICAgICAgdGhlIHNhbWUgVGlja2V0RGF0YSBtZW1vcnkgdG8gYmUgcmUtYWxsb2NhdGVk
IGJ5IGFub3RoZXIgY2xpZW50LiAgVGhpcywgaW4gdHVybiwKKyAgICAgICAgICAgd291bGQgbWFr
ZSB0aGUgVGlja2V0IHRva2VuIG5vdCB1bmlxdWUgYW5kIHBvdGVudGlhbGx5IGFsbG93IGEgY2Fu
Y2VsbGVkIHRpY2tldAorICAgICAgICAgICB0byBiZSByZXVzZWQgYmVmb3JlIERlZmVycmVkV29y
a1RpbWVyOjpkb1dvcmsoKSBpcyBjYWxsZWQuCisKKyAgICAgICAgICAgVGhpcyBwYXRjaCBjaGFu
Z2VzIERlZmVycmVkV29ya1RpbWVyOjpjYW5jZWxQZW5kaW5nV29yaygpIHRvIG9ubHkgY2xlYXIg
dGhlCisgICAgICAgICAgIGNvbnRlbnRzIG9mIHRoZSBUaWNrZXREYXRhIGluc3RlYWQuICBUaWNr
ZXREYXRhOjpzY3JpcHRFeGVjdXRpb25Pd25lciBiZWluZworICAgICAgICAgICBudWxsIGlzIHVz
ZWQgYXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSB0aWNrZXQgaGFzIGJlZW4gY2FuY2VsbGVkLiAg
U2luY2UgdGhlCisgICAgICAgICAgIFRpY2tldERhdGEgaXRzZWxmIGlzIG5vdCAiZnJlZWQiIHll
dCwgYWxsIFRpY2tldERhdGEgd2lsbCByZW1haW4gdW5pcXVlIHVudGlsCisgICAgICAgICAgIERl
ZmVycmVkV29ya1RpbWVyOjpkb1dvcmsoKS4KKworICAgICAgICAgICBDb25zZXF1ZW50bHksIERl
ZmVycmVkV29ya1RpbWVyOjpkb1dvcmsoKSB3aWxsIG5vdyBjaGVjayBmb3IgY2FuY2VsbGVkIHRp
Y2tldHMKKyAgICAgICAgICAgYW5kIHJlbW92ZSB0aGVtIGZyb20gdGhlIG1fcGVuZGluZ1RpY2tl
dHMgbGlzdC4KKworICAgICAgICA1LiBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5IHdhcyBwcmV2aW91
c2x5IGNhbGxpbmcgRGVmZXJyZWRXb3JrVGltZXI6Omhhc1BlbmRpbmdXb3JrKCkKKyAgICAgICAg
ICAgdG8gY2hlY2sgaWYgaXQgaGFzIGFscmVhZHkgc2NoZWR1bGVkIGEgdGFzaywgc28gYXMgbm90
IHRvIHJlc2NoZWR1bGUgYWdhaW4gdW50aWwKKyAgICAgICAgICAgYWZ0ZXIgdGhlIHByZXZpb3Vz
bHkgc2NoZWR1bGVkIHRhc2sgaGFzIGJlZW4gcnVuLiAgVGhpcyBkb2VzIG5vdCBwbGF5IG5pY2UK
KyAgICAgICAgICAgd2l0aCB0aGUgbmV3IFRpY2tldCBBUEksIGJlY2F1c2UgdGhpcyBoYXNQZW5k
aW5nV29yaygpIGNoZWNrIG5lZWRzIHRvIGJlIGRvbmUKKyAgICAgICAgICAgYmVmb3JlIGNhbGxp
bmcgYWRkUGVuZGluZ1dvcmsoKSwgYW5kIGhlbmNlLCB0aGUgVGlja2V0IGlzIG5vdCBhdmFpbGFi
bGUgeWV0LgorCisgICAgICAgICAgIEZvcnR1bmF0ZWx5LCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5
IHNob3VsZCBrbm93IGlmIGl0IGhhcyBhbHJlYWR5IHNjaGVkdWxlZAorICAgICAgICAgICBhIHRh
c2sgaXRzZWxmLiAgVGhpcyBwYXRjaCBhZGRzIGEgbV9oYXNBbHJlYWR5U2NoZWR1bGVkV29yayBm
bGFnIHRvIAorICAgICAgICAgICBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5IHRoYXQgY2FuIGJlIHVz
ZWQgZm9yIHRoaXMgY2hlY2sgaW5zdGVhZC4KKworICAgICAgICAqIGpzYy5jcHA6CisgICAgICAg
IChKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvRGVmZXJyZWRX
b3JrVGltZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0
YTo6VGlja2V0RGF0YSk6CisgICAgICAgIChKU0M6OkRlZmVycmVkV29ya1RpbWVyOjpUaWNrZXRE
YXRhOjp2bSk6CisgICAgICAgIChKU0M6OkRlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhOjpj
YW5jZWwpOgorICAgICAgICAoSlNDOjpEZWZlcnJlZFdvcmtUaW1lcjo6ZG9Xb3JrKToKKyAgICAg
ICAgKEpTQzo6RGVmZXJyZWRXb3JrVGltZXI6OmFkZFBlbmRpbmdXb3JrKToKKyAgICAgICAgKEpT
Qzo6RGVmZXJyZWRXb3JrVGltZXI6Omhhc1BlbmRpbmdXb3JrKToKKyAgICAgICAgKEpTQzo6RGVm
ZXJyZWRXb3JrVGltZXI6Omhhc0RlcGVuZGFuY3lJblBlbmRpbmdXb3JrKToKKyAgICAgICAgKEpT
Qzo6RGVmZXJyZWRXb3JrVGltZXI6OmNhbmNlbFBlbmRpbmdXb3JrKToKKyAgICAgICAgKiBydW50
aW1lL0RlZmVycmVkV29ya1RpbWVyLmg6CisgICAgICAgIChKU0M6OkRlZmVycmVkV29ya1RpbWVy
OjpUaWNrZXREYXRhOjp0YXJnZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGaW5hbGl6YXRpb25S
ZWdpc3RyeS5jcHA6CisgICAgICAgIChKU0M6OkpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0pTRmluYWxpemF0aW9uUmVn
aXN0cnkuaDoKKyAgICAgICAgKiB3YXNtL1dhc21TdHJlYW1pbmdDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OlN0cmVhbWluZ0NvbXBpbGVyOjpTdHJlYW1pbmdDb21waWxlcik6Cisg
ICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ0NvbXBpbGVyOjp+U3RyZWFtaW5nQ29tcGlsZXIp
OgorICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdDb21waWxlcjo6ZGlkQ29tcGxldGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTdHJlYW1pbmdDb21waWxlcjo6ZmFpbCk6CisgICAgICAgIChK
U0M6Oldhc206OlN0cmVhbWluZ0NvbXBpbGVyOjpjYW5jZWwpOgorICAgICAgICAqIHdhc20vV2Fz
bVN0cmVhbWluZ0NvbXBpbGVyLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseTo6d2ViQXNzZW1ibHlNb2R1bGVWYWxpZGF0
ZUFzeW5jKToKKyAgICAgICAgKEpTQzo6aW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjpjb21w
aWxlQW5kSW5zdGFudGlhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Ojp3ZWJBc3Nl
bWJseU1vZHVsZUluc3RhbnRpbmF0ZUFzeW5jKToKKwogMjAyMS0xMi0yMiAgU2FhbSBCYXJhdGkg
IDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBMTEludCBzaG91bGQgbG9vcCBPU1IgaW50
byBCQlEgYW5kIEJCUSBzaG91bGQgbG9vcCBPU1IgaW50byBPTUcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCShyZXZpc2lvbiAyODczODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUwNCw4ICsyNTA0LDggQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uU2V0VGltZQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiRmlyc3QgYXJndW1lbnQgaXMgbm90IGEgSlMgZnVuY3Rpb24i
X3MpOwogCiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGxvb2sgYXQgdGhlIHRpbWVvdXQgcGFyYW1l
dGVyIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIHNjaGVkdWxlIHdvcmsgbGF0ZXIgQVBJLgotICAg
IHZtLmRlZmVycmVkV29ya1RpbWVyLT5hZGRQZW5kaW5nV29yayh2bSwgY2FsbGJhY2ssIHsgfSk7
Ci0gICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVkdWxlV29ya1Nvb24oY2FsbGJhY2ssIFtj
YWxsYmFja10oRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCwgRGVmZXJyZWRXb3JrVGltZXI6OlRp
Y2tldERhdGEmJikgeworICAgIGF1dG8gdGlja2V0ID0gdm0uZGVmZXJyZWRXb3JrVGltZXItPmFk
ZFBlbmRpbmdXb3JrKHZtLCBjYWxsYmFjaywgeyB9KTsKKyAgICB2bS5kZWZlcnJlZFdvcmtUaW1l
ci0+c2NoZWR1bGVXb3JrU29vbih0aWNrZXQsIFtjYWxsYmFja10oRGVmZXJyZWRXb3JrVGltZXI6
OlRpY2tldCwgRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGEmJikgewogICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbGJhY2stPmdsb2JhbE9iamVjdCgpOwogICAg
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgICAgICBjYWxsKGdsb2JhbE9iamVj
dCwgY2FsbGJhY2ssIGpzVW5kZWZpbmVkKCksIGFyZ3MsICJZb3Ugc2hvdWxkbid0IHNlZSB0aGlz
Li4uIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EZWZlcnJlZFdvcmtU
aW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGVm
ZXJyZWRXb3JrVGltZXIuY3BwCShyZXZpc2lvbiAyODczODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EZWZlcnJlZFdvcmtUaW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Nyw2ICszNywyNSBAQCBuYW1lc3BhY2UgRGVmZXJyZWRXb3JrVGltZXJJbnRlcm5hbCB7CiBzdGF0
aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKK2lubGluZSBEZWZlcnJlZFdvcmtU
aW1lcjo6VGlja2V0RGF0YTo6VGlja2V0RGF0YShWTSYgdm0sIEpTT2JqZWN0KiBzY3JpcHRFeGVj
dXRpb25Pd25lciwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiYmIGRlcGVuZGVuY2llcykKKyAgICA6
IGRlcGVuZGVuY2llcyhXVEZNb3ZlKGRlcGVuZGVuY2llcykpCisgICAgLCBzY3JpcHRFeGVjdXRp
b25Pd25lcih2bSwgc2NyaXB0RXhlY3V0aW9uT3duZXIpCit7Cit9CisKK2lubGluZSBWTSYgRGVm
ZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGE6OnZtKCkKK3sKKyAgICBBU1NFUlQoIWlzQ2FuY2Vs
bGVkKCkpOworICAgIHJldHVybiB0YXJnZXQoKS0+dm0oKTsKK30KKworaW5saW5lIHZvaWQgRGVm
ZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGE6OmNhbmNlbCgpCit7CisgICAgc2NyaXB0RXhlY3V0
aW9uT3duZXIuY2xlYXIoKTsKKyAgICBkZXBlbmRlbmNpZXMuY2xlYXIoKTsKK30KKworCiBEZWZl
cnJlZFdvcmtUaW1lcjo6RGVmZXJyZWRXb3JrVGltZXIoVk0mIHZtKQogICAgIDogQmFzZSh2bSkK
IHsKQEAgLTU0LDE1ICs3MywyNCBAQCB2b2lkIERlZmVycmVkV29ya1RpbWVyOjpkb1dvcmsoVk0m
IHZtKQogCiAgICAgd2hpbGUgKCFtX3Rhc2tzLmlzRW1wdHkoKSkgewogICAgICAgICBhdXRvIFt0
aWNrZXQsIHRhc2tdID0gbV90YXNrcy50YWtlRmlyc3QoKTsKLSAgICAgICAgYXV0byBnbG9iYWxP
YmplY3QgPSB0aWNrZXQtPnN0cnVjdHVyZSh2bSktPmdsb2JhbE9iamVjdCgpOwogICAgICAgICBk
YXRhTG9nTG5JZihEZWZlcnJlZFdvcmtUaW1lckludGVybmFsOjp2ZXJib3NlLCAiRG9pbmcgd29y
ayBvbjogIiwgUmF3UG9pbnRlcih0aWNrZXQpKTsKIAogICAgICAgICBhdXRvIHBlbmRpbmdUaWNr
ZXQgPSBtX3BlbmRpbmdUaWNrZXRzLmZpbmQodGlja2V0KTsKICAgICAgICAgLy8gV2UgbWF5IGhh
dmUgYWxyZWFkeSBjYW5jZWxlZCB0aGlzIHRhc2sgb3IgaXRzIG93bmVyIG1heSBoYXZlIGJlZW4g
Y2FuY2VsZWQuCiAgICAgICAgIGlmIChwZW5kaW5nVGlja2V0ID09IG1fcGVuZGluZ1RpY2tldHMu
ZW5kKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQVNTRVJUKHRpY2tldCA9PSBw
ZW5kaW5nVGlja2V0LT5rZXkpOworICAgICAgICBBU1NFUlQodGlja2V0ID09IHBlbmRpbmdUaWNr
ZXQtPnZhbHVlLmdldCgpKTsKIAotICAgICAgICBzd2l0Y2ggKGdsb2JhbE9iamVjdC0+Z2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUoKS0+c2NyaXB0RXhlY3V0aW9uU3RhdHVzKGdsb2JhbE9iamVjdCwg
cGVuZGluZ1RpY2tldC0+dmFsdWUuc2NyaXB0RXhlY3V0aW9uT3duZXIuZ2V0KCkpKSB7CisgICAg
ICAgIGlmICh0aWNrZXQtPmlzQ2FuY2VsbGVkKCkpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ1Rp
Y2tldHMucmVtb3ZlKHBlbmRpbmdUaWNrZXQpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBXZSBzaG91bGRuJ3QgYWNjZXNzIHRoZSBUaWNrZXREYXRhIHRv
IGdldCB0aGlzIGdsb2JhbE9iamVjdCB1bnRpbAorICAgICAgICAvLyBhZnRlciB3ZSBjb25maXJt
IHRoYXQgdGhlIHRpY2tldCBpcyBzdGlsbCB2YWxpZCAod2hpY2ggd2UgZGlkIGFib3ZlKS4KKyAg
ICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSB0aWNrZXQtPnRhcmdldCgpLT5zdHJ1Y3R1cmUodm0p
LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgc3dpdGNoIChnbG9iYWxPYmplY3QtPmdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKCktPnNjcmlwdEV4ZWN1dGlvblN0YXR1cyhnbG9iYWxPYmplY3QsIHRp
Y2tldC0+c2NyaXB0RXhlY3V0aW9uT3duZXIuZ2V0KCkpKSB7CiAgICAgICAgIGNhc2UgU2NyaXB0
RXhlY3V0aW9uU3RhdHVzOjpTdXNwZW5kZWQ6CiAgICAgICAgICAgICBzdXNwZW5kZWRUYXNrcy5h
cHBlbmQoc3RkOjptYWtlX3R1cGxlKHRpY2tldCwgV1RGTW92ZSh0YXNrKSkpOwogICAgICAgICAg
ICAgY29udGludWU7CkBAIC04Nyw5ICsxMTUsOCBAQCB2b2lkIERlZmVycmVkV29ya1RpbWVyOjpk
b1dvcmsoVk0mIHZtKQogICAgICAgICAgICAgdm0uZmluYWxpemVTeW5jaHJvbm91c0pTRXhlY3V0
aW9uKCk7CiAKICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKLSAgICAgICAgICAgIHRhc2sodGlja2V0LCBXVEZNb3ZlKHRpY2tldERhdGEpKTsKKyAgICAg
ICAgICAgIHRhc2sodGlja2V0LCBXVEZNb3ZlKCp0aWNrZXREYXRhKSk7CiAgICAgICAgICAgICBp
ZiAoRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKSkgewotICAgICAgICAg
ICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRpY2tldC0+Z2xvYmFsT2JqZWN0KCk7CiAgICAg
ICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICBnbG9i
YWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlcG9ydFVuY2F1Z2h0RXhjZXB0
aW9uQXRFdmVudExvb3AoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24pOwogICAgICAgICAgICAgfQpA
QCAtMTAzLDYgKzEzMCwxNyBAQCB2b2lkIERlZmVycmVkV29ya1RpbWVyOjpkb1dvcmsoVk0mIHZt
KQogICAgIHdoaWxlICghc3VzcGVuZGVkVGFza3MuaXNFbXB0eSgpKQogICAgICAgICBtX3Rhc2tz
LnByZXBlbmQoc3VzcGVuZGVkVGFza3MudGFrZUxhc3QoKSk7CiAKKyAgICAvLyBJdCBpcyB0aGVv
cmV0aWNhbGx5IHBvc3NpYmxlIHRoYXQgYSBjbGllbnQgbWF5IGNhbmNlbCBhIHBlbmRpbmcgdGlj
a2V0IGFuZAorICAgIC8vIG5ldmVyIGNhbGwgc2NoZWR1bGVXb3JrU29vbigpIG9uIGl0LiBBcyBz
dWNoLCBpdCB3b3VsZCBub3QgYmUgZm91bmQgd2hlbgorICAgIC8vIHdlIGl0ZXJhdGVkIG1fdGFz
a3MgYWJvdmUuIFdlJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHB1cmdlIHRoZW0gaGVyZS4KKyAg
ICBWZWN0b3I8VGlja2V0LCAxNj4gY2FuY2VsbGVkVGlja2V0czsKKyAgICBmb3IgKGF1dG8mIGl0
IDogbV9wZW5kaW5nVGlja2V0cykgeworICAgICAgICBpZiAoaXQudmFsdWUtPmlzQ2FuY2VsbGVk
KCkpCisgICAgICAgICAgICBjYW5jZWxsZWRUaWNrZXRzLmFwcGVuZChpdC5rZXkpOworICAgIH0K
KyAgICBmb3IgKGF1dG8mIHRpY2tldCA6IGNhbmNlbGxlZFRpY2tldHMpCisgICAgICAgIG1fcGVu
ZGluZ1RpY2tldHMucmVtb3ZlKHRpY2tldCk7CisKICAgICBpZiAobV9wZW5kaW5nVGlja2V0cy5p
c0VtcHR5KCkgJiYgbV9zaG91bGRTdG9wUnVuTG9vcFdoZW5BbGxUaWNrZXRzRmluaXNoKSB7CiAg
ICAgICAgIEFTU0VSVChtX3Rhc2tzLmlzRW1wdHkoKSk7CiAgICAgICAgIFJ1bkxvb3A6OmN1cnJl
bnQoKS5zdG9wKCk7CkBAIC0xMTgsMzggKzE1Niw0MSBAQCB2b2lkIERlZmVycmVkV29ya1RpbWVy
OjpydW5SdW5Mb29wKCkKICAgICAgICAgUnVuTG9vcDo6cnVuKCk7CiB9CiAKLXZvaWQgRGVmZXJy
ZWRXb3JrVGltZXI6OmFkZFBlbmRpbmdXb3JrKFZNJiB2bSwgVGlja2V0IHRpY2tldCwgVmVjdG9y
PFN0cm9uZzxKU0NlbGw+PiYmIGRlcGVuZGVuY2llcykKK0RlZmVycmVkV29ya1RpbWVyOjpUaWNr
ZXQgRGVmZXJyZWRXb3JrVGltZXI6OmFkZFBlbmRpbmdXb3JrKFZNJiB2bSwgSlNPYmplY3QqIHRh
cmdldCwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiYmIGRlcGVuZGVuY2llcykKIHsKICAgICBBU1NF
UlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSB8fCAoVGhyZWFkOjptYXlCZUdD
VGhyZWFkKCkgJiYgdm0uaGVhcC53b3JsZElzU3RvcHBlZCgpKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5zaXplKCk7ICsraSkKLSAgICAgICAgQVNTRVJUKGRl
cGVuZGVuY2llc1tpXS5nZXQoKSAhPSB0aWNrZXQpOworICAgICAgICBBU1NFUlQoZGVwZW5kZW5j
aWVzW2ldLmdldCgpICE9IHRhcmdldCk7CiAKLSAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHRpY2tl
dC0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgYXV0byByZXN1bHQgPSBtX3BlbmRpbmdUaWNrZXRzLmVu
c3VyZSh0aWNrZXQsIFsmXSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKERlZmVycmVkV29ya1RpbWVy
SW50ZXJuYWw6OnZlcmJvc2UsICJBZGRpbmcgbmV3IHBlbmRpbmcgdGlja2V0OiAiLCBSYXdQb2lu
dGVyKHRpY2tldCkpOwotICAgICAgICBKU09iamVjdCogc2NyaXB0RXhlY3V0aW9uT3duZXIgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPmN1cnJlbnRTY3JpcHRFeGVj
dXRpb25Pd25lcihnbG9iYWxPYmplY3QpOwotICAgICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0
cm9uZzxKU0NlbGw+KHZtLCB0aWNrZXQpKTsKLSAgICAgICAgcmV0dXJuIFRpY2tldERhdGEgeyBX
VEZNb3ZlKGRlcGVuZGVuY2llcyksIFN0cm9uZzxKU09iamVjdD4odm0sIHNjcmlwdEV4ZWN1dGlv
bk93bmVyKSB9OwotICAgIH0pOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgZGF0YUxvZ0xuSWYoRGVmZXJyZWRXb3JrVGltZXJJbnRlcm5hbDo6dmVyYm9zZSwgIkFkZGlu
ZyBuZXcgZGVwZW5kZW5jaWVzIGZvciB0aWNrZXQ6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7Ci0g
ICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZGVwZW5kZW5jaWVzLmFwcGVuZFZlY3RvcihX
VEZNb3ZlKGRlcGVuZGVuY2llcykpOwotICAgIH0KKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0
YXJnZXQtPmdsb2JhbE9iamVjdCgpOworICAgIEpTT2JqZWN0KiBzY3JpcHRFeGVjdXRpb25Pd25l
ciA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+Y3VycmVudFNjcmlw
dEV4ZWN1dGlvbk93bmVyKGdsb2JhbE9iamVjdCk7CisgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChT
dHJvbmc8SlNDZWxsPih2bSwgdGFyZ2V0KSk7CisKKyAgICBhdXRvIHRpY2tldERhdGEgPSBtYWtl
VW5pcXVlPFRpY2tldERhdGE+KHZtLCBzY3JpcHRFeGVjdXRpb25Pd25lciwgV1RGTW92ZShkZXBl
bmRlbmNpZXMpKTsKKyAgICBUaWNrZXQgdGlja2V0ID0gdGlja2V0RGF0YS5nZXQoKTsKKworICAg
IGRhdGFMb2dMbklmKERlZmVycmVkV29ya1RpbWVySW50ZXJuYWw6OnZlcmJvc2UsICJBZGRpbmcg
bmV3IHBlbmRpbmcgdGlja2V0OiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworICAgIGF1dG8gcmVz
dWx0ID0gbV9wZW5kaW5nVGlja2V0cy5hZGQodGlja2V0LCBXVEZNb3ZlKHRpY2tldERhdGEpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICByZXR1cm4gdGlj
a2V0OwogfQogCiBib29sIERlZmVycmVkV29ya1RpbWVyOjpoYXNQZW5kaW5nV29yayhUaWNrZXQg
dGlja2V0KQogeworICAgIGlmICh0aWNrZXQtPmlzQ2FuY2VsbGVkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBBU1NFUlQodGlja2V0LT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdB
UElMb2NrKCkgfHwgKFRocmVhZDo6bWF5QmVHQ1RocmVhZCgpICYmIHRpY2tldC0+dm0oKS5oZWFw
LndvcmxkSXNTdG9wcGVkKCkpKTsKICAgICByZXR1cm4gbV9wZW5kaW5nVGlja2V0cy5jb250YWlu
cyh0aWNrZXQpOwogfQogCiBib29sIERlZmVycmVkV29ya1RpbWVyOjpoYXNEZXBlbmRhbmN5SW5Q
ZW5kaW5nV29yayhUaWNrZXQgdGlja2V0LCBKU0NlbGwqIGRlcGVuZGVuY3kpCiB7CisgICAgYXV0
byByZXN1bHQgPSBtX3BlbmRpbmdUaWNrZXRzLmZpbmQodGlja2V0KTsKKyAgICBpZiAocmVzdWx0
ID09IG1fcGVuZGluZ1RpY2tldHMuZW5kKCkgfHwgdGlja2V0LT5pc0NhbmNlbGxlZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKHRpY2tldC0+dm0oKS5jdXJyZW50VGhyZWFk
SXNIb2xkaW5nQVBJTG9jaygpIHx8IChUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSAmJiB0aWNrZXQt
PnZtKCkuaGVhcC53b3JsZElzU3RvcHBlZCgpKSk7Ci0gICAgQVNTRVJUKG1fcGVuZGluZ1RpY2tl
dHMuY29udGFpbnModGlja2V0KSk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1RpY2tl
dHMuZ2V0KHRpY2tldCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5kZXBlbmRlbmNpZXMuY29udGFpbnMo
ZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUtPmRlcGVuZGVuY2llcy5jb250
YWlucyhkZXBlbmRlbmN5KTsKIH0KIAogdm9pZCBEZWZlcnJlZFdvcmtUaW1lcjo6c2NoZWR1bGVX
b3JrU29vbihUaWNrZXQgdGlja2V0LCBUYXNrJiYgdGFzaykKQEAgLTE2MiwxMSArMjAzLDE1IEBA
IHZvaWQgRGVmZXJyZWRXb3JrVGltZXI6OnNjaGVkdWxlV29ya1Nvb24KIAogYm9vbCBEZWZlcnJl
ZFdvcmtUaW1lcjo6Y2FuY2VsUGVuZGluZ1dvcmsoVGlja2V0IHRpY2tldCkKIHsKLSAgICBBU1NF
UlQodGlja2V0LT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkgfHwgKFRocmVh
ZDo6bWF5QmVHQ1RocmVhZCgpICYmIHRpY2tldC0+dm0oKS5oZWFwLndvcmxkSXNTdG9wcGVkKCkp
KTsKLSAgICBib29sIHJlc3VsdCA9IG1fcGVuZGluZ1RpY2tldHMucmVtb3ZlKHRpY2tldCk7Cisg
ICAgQVNTRVJUKG1fcGVuZGluZ1RpY2tldHMuY29udGFpbnModGlja2V0KSk7CisgICAgQVNTRVJU
KHRpY2tldC0+aXNDYW5jZWxsZWQoKSB8fCB0aWNrZXQtPnZtKCkuY3VycmVudFRocmVhZElzSG9s
ZGluZ0FQSUxvY2soKSB8fCAoVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkgJiYgdGlja2V0LT52bSgp
LmhlYXAud29ybGRJc1N0b3BwZWQoKSkpOwogCi0gICAgaWYgKHJlc3VsdCkKKyAgICBib29sIHJl
c3VsdCA9IGZhbHNlOworICAgIGlmICghdGlja2V0LT5pc0NhbmNlbGxlZCgpKSB7CiAgICAgICAg
IGRhdGFMb2dMbklmKERlZmVycmVkV29ya1RpbWVySW50ZXJuYWw6OnZlcmJvc2UsICJDYW5jZWxp
bmcgdGlja2V0OiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOworICAgICAgICB0aWNrZXQtPmNhbmNl
bCgpOworICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EZWZlcnJlZFdvcmtUaW1l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RlZmVycmVk
V29ya1RpbWVyLmgJKHJldmlzaW9uIDI4NzM4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RlZmVycmVkV29ya1RpbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxNCArNDQs
MjYgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1J1bkxvb3BUaW1lcjsKIAogICAgIHN0
cnVjdCBUaWNrZXREYXRhIHsKKyAgICBwcml2YXRlOgorICAgICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFRpY2tldERhdGEoVk0mLCBKU09iamVjdCog
c2NyaXB0RXhlY3V0aW9uT3duZXIsIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4mJiBkZXBlbmRlbmNp
ZXMpOworCisgICAgICAgIFZNJiB2bSgpOworICAgICAgICBKU09iamVjdCogdGFyZ2V0KCk7CisK
KyAgICAgICAgdm9pZCBjYW5jZWwoKTsKKyAgICAgICAgYm9vbCBpc0NhbmNlbGxlZCgpIGNvbnN0
IHsgcmV0dXJuICFzY3JpcHRFeGVjdXRpb25Pd25lci5nZXQoKTsgfQorCiAgICAgICAgIFZlY3Rv
cjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOwogICAgICAgICBTdHJvbmc8SlNPYmplY3Q+
IHNjcmlwdEV4ZWN1dGlvbk93bmVyOwogICAgIH07CiAKKyAgICB1c2luZyBUaWNrZXQgPSBUaWNr
ZXREYXRhKjsKKwogICAgIHZvaWQgZG9Xb3JrKFZNJikgZmluYWw7CiAKLSAgICB1c2luZyBUaWNr
ZXQgPSBKU09iamVjdCo7Ci0gICAgdm9pZCBhZGRQZW5kaW5nV29yayhWTSYsIFRpY2tldCwgVmVj
dG9yPFN0cm9uZzxKU0NlbGw+PiYmIGRlcGVuZGVuY2llcyk7CisgICAgVGlja2V0IGFkZFBlbmRp
bmdXb3JrKFZNJiwgSlNPYmplY3QqIHRhcmdldCwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiYmIGRl
cGVuZGVuY2llcyk7CiAgICAgYm9vbCBoYXNQZW5kaW5nV29yayhUaWNrZXQpOwogICAgIGJvb2wg
aGFzRGVwZW5kYW5jeUluUGVuZGluZ1dvcmsoVGlja2V0LCBKU0NlbGwqIGRlcGVuZGVuY3kpOwog
ICAgIGJvb2wgY2FuY2VsUGVuZGluZ1dvcmsoVGlja2V0KTsKQEAgLTc3LDcgKzg5LDEzIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0b3BSdW5Mb29wV2hlbkFsbFRpY2tldHNGaW5pc2gg
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9jdXJyZW50bHlSdW5uaW5nVGFzayB7IGZhbHNlIH07CiAg
ICAgRGVxdWU8c3RkOjp0dXBsZTxUaWNrZXQsIFRhc2s+PiBtX3Rhc2tzIFdURl9HVUFSREVEX0JZ
X0xPQ0sobV90YXNrTG9jayk7Ci0gICAgSGFzaE1hcDxUaWNrZXQsIFRpY2tldERhdGE+IG1fcGVu
ZGluZ1RpY2tldHM7CisgICAgSGFzaE1hcDxUaWNrZXQsIHN0ZDo6dW5pcXVlX3B0cjxUaWNrZXRE
YXRhPj4gbV9wZW5kaW5nVGlja2V0czsKIH07CiAKK2lubGluZSBKU09iamVjdCogRGVmZXJyZWRX
b3JrVGltZXI6OlRpY2tldERhdGE6OnRhcmdldCgpCit7CisgICAgQVNTRVJUKCFpc0NhbmNlbGxl
ZCgpKTsKKyAgICByZXR1cm4ganNDYXN0PEpTT2JqZWN0Kj4oZGVwZW5kZW5jaWVzLmxhc3QoKS5n
ZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5jcHAJKHJl
dmlzaW9uIDI4NzM4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxp
emF0aW9uUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksMTMgKzE0OSwxNSBAQCB2
b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmFsaXplVW5jCiAgICAgICAgIHJldHVybiAh
YnVja2V0LnZhbHVlLnNpemUoKTsKICAgICB9KTsKIAotICAgIGlmICghdm0uZGVmZXJyZWRXb3Jr
VGltZXItPmhhc1BlbmRpbmdXb3JrKHRoaXMpICYmIChyZWFkaWVkQ2VsbCB8fCBkZWFkQ291bnQo
bG9ja2VyKSkpIHsKLSAgICAgICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPmFkZFBlbmRpbmdXb3Jr
KHZtLCB0aGlzLCB7IH0pOwotICAgICAgICBBU1NFUlQodm0uZGVmZXJyZWRXb3JrVGltZXItPmhh
c1BlbmRpbmdXb3JrKHRoaXMpKTsKLSAgICAgICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVk
dWxlV29ya1Nvb24odGhpcywgW3RoaXNdKERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXQsIERlZmVy
cmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIHsKKyAgICBpZiAoIW1faGFzQWxyZWFkeVNjaGVk
dWxlZFdvcmsgJiYgKHJlYWRpZWRDZWxsIHx8IGRlYWRDb3VudChsb2NrZXIpKSkgeworICAgICAg
ICBhdXRvIHRpY2tldCA9IHZtLmRlZmVycmVkV29ya1RpbWVyLT5hZGRQZW5kaW5nV29yayh2bSwg
dGhpcywgeyB9KTsKKyAgICAgICAgQVNTRVJUKHZtLmRlZmVycmVkV29ya1RpbWVyLT5oYXNQZW5k
aW5nV29yayh0aWNrZXQpKTsKKyAgICAgICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVkdWxl
V29ya1Nvb24odGlja2V0LCBbdGhpc10oRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCwgRGVmZXJy
ZWRXb3JrVGltZXI6OlRpY2tldERhdGEmJikgewogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgdGhpcy0+
bV9oYXNBbHJlYWR5U2NoZWR1bGVkV29yayA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy0+cnVu
RmluYWxpemF0aW9uQ2xlYW51cChnbG9iYWxPYmplY3QpOwogICAgICAgICB9KTsKKyAgICAgICAg
bV9oYXNBbHJlYWR5U2NoZWR1bGVkV29yayA9IHRydWU7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdp
c3RyeS5oCShyZXZpc2lvbiAyODczODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYs
NyBAQCBwcml2YXRlOgogICAgIC8vIFdlIHVzZSBhIHNlcGFyYXRlIGxpc3QgZm9yIG5vIHVucmVn
aXN0ZXIgdmFsdWVzIGluc3RlYWQgb2YgYSBzcGVjaWFsIGtleSBpbiB0aGUgdGFibGVzIGFib3Zl
IGJlY2F1c2UgdGhlIEhhc2hNYXAgaGFzIGEgdGVuZGVuY3kgdG8gcmVhbGxvY2F0ZSB1bmRlciB1
cyB3aGVuIGl0ZXJhdGluZy4uLgogICAgIExpdmVSZWdpc3RyYXRpb25zIG1fbm9VbnJlZ2lzdHJh
dGlvbkxpdmU7CiAgICAgRGVhZFJlZ2lzdHJhdGlvbnMgbV9ub1VucmVnaXN0cmF0aW9uRGVhZDsK
KyAgICBib29sIG1faGFzQWxyZWFkeVNjaGVkdWxlZFdvcmsgeyBmYWxzZSB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3Ry
ZWFtaW5nQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TdHJlYW1pbmdDb21waWxlci5jcHAJKHJldmlzaW9uIDI4NzM4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdDb21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
YXNtU3RyZWFtaW5nQ29tcGlsZXIuaCIKIAotI2luY2x1ZGUgIkRlZmVycmVkV29ya1RpbWVyLmgi
CiAjaW5jbHVkZSAiSlNCaWdJbnQuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgpAQCAtNDUsNyArNDQsNiBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogU3RyZWFtaW5nQ29tcGlsZXI6OlN0cmVhbWlu
Z0NvbXBpbGVyKFZNJiB2bSwgQ29tcGlsZXJNb2RlIGNvbXBpbGVyTW9kZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU09iamVjdCogaW1wb3J0T2Jq
ZWN0KQogICAgIDogbV92bSh2bSkKICAgICAsIG1fY29tcGlsZXJNb2RlKGNvbXBpbGVyTW9kZSkK
LSAgICAsIG1fcHJvbWlzZShwcm9taXNlKQogICAgICwgbV9pbmZvKFdhc206Ok1vZHVsZUluZm9y
bWF0aW9uOjpjcmVhdGUoKSkKICAgICAsIG1fcGFyc2VyKG1faW5mby5nZXQoKSwgKnRoaXMpCiB7
CkBAIC01MywxNyArNTEsMTcgQEAgU3RyZWFtaW5nQ29tcGlsZXI6OlN0cmVhbWluZ0NvbXBpbGVy
KFZNJgogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGdsb2JhbE9i
amVjdCkpOwogICAgIGlmIChpbXBvcnRPYmplY3QpCiAgICAgICAgIGRlcGVuZGVuY2llcy5hcHBl
bmQoU3Ryb25nPEpTQ2VsbD4odm0sIGltcG9ydE9iamVjdCkpOwotICAgIHZtLmRlZmVycmVkV29y
a1RpbWVyLT5hZGRQZW5kaW5nV29yayh2bSwgcHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMp
KTsKLSAgICBBU1NFUlQodm0uZGVmZXJyZWRXb3JrVGltZXItPmhhc1BlbmRpbmdXb3JrKHByb21p
c2UpKTsKLSAgICBBU1NFUlQodm0uZGVmZXJyZWRXb3JrVGltZXItPmhhc0RlcGVuZGFuY3lJblBl
bmRpbmdXb3JrKHByb21pc2UsIGdsb2JhbE9iamVjdCkpOwotICAgIEFTU0VSVCghaW1wb3J0T2Jq
ZWN0IHx8IHZtLmRlZmVycmVkV29ya1RpbWVyLT5oYXNEZXBlbmRhbmN5SW5QZW5kaW5nV29yayhw
cm9taXNlLCBpbXBvcnRPYmplY3QpKTsKKyAgICBtX3RpY2tldCA9IHZtLmRlZmVycmVkV29ya1Rp
bWVyLT5hZGRQZW5kaW5nV29yayh2bSwgcHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsK
KyAgICBBU1NFUlQodm0uZGVmZXJyZWRXb3JrVGltZXItPmhhc1BlbmRpbmdXb3JrKG1fdGlja2V0
KSk7CisgICAgQVNTRVJUKHZtLmRlZmVycmVkV29ya1RpbWVyLT5oYXNEZXBlbmRhbmN5SW5QZW5k
aW5nV29yayhtX3RpY2tldCwgZ2xvYmFsT2JqZWN0KSk7CisgICAgQVNTRVJUKCFpbXBvcnRPYmpl
Y3QgfHwgdm0uZGVmZXJyZWRXb3JrVGltZXItPmhhc0RlcGVuZGFuY3lJblBlbmRpbmdXb3JrKG1f
dGlja2V0LCBpbXBvcnRPYmplY3QpKTsKIH0KIAogU3RyZWFtaW5nQ29tcGlsZXI6On5TdHJlYW1p
bmdDb21waWxlcigpCiB7Ci0gICAgaWYgKG1fcHJvbWlzZSkgewotICAgICAgICBhdXRvKiBwcm9t
aXNlID0gc3RkOjpleGNoYW5nZShtX3Byb21pc2UsIG51bGxwdHIpOwotICAgICAgICBtX3ZtLmRl
ZmVycmVkV29ya1RpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtdKERlZmVycmVkV29y
a1RpbWVyOjpUaWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIG11dGFibGUg
eyB9KTsKKyAgICBpZiAobV90aWNrZXQpIHsKKyAgICAgICAgYXV0byB0aWNrZXQgPSBzdGQ6OmV4
Y2hhbmdlKG1fdGlja2V0LCBudWxscHRyKTsKKyAgICAgICAgbV92bS5kZWZlcnJlZFdvcmtUaW1l
ci0+c2NoZWR1bGVXb3JrU29vbih0aWNrZXQsIFtdKERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXQs
IERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIG11dGFibGUgeyB9KTsKICAgICB9CiB9
CiAKQEAgLTEzOCwxMSArMTM2LDExIEBAIHZvaWQgU3RyZWFtaW5nQ29tcGlsZXI6OmRpZENvbXBs
ZXRlKCkKICAgICB9OwogCiAgICAgYXV0byByZXN1bHQgPSBtYWtlVmFsaWRhdGlvblJlc3VsdCgq
bV9wbGFuKTsKLSAgICBhdXRvKiBwcm9taXNlID0gc3RkOjpleGNoYW5nZShtX3Byb21pc2UsIG51
bGxwdHIpOworICAgIGF1dG8gdGlja2V0ID0gc3RkOjpleGNoYW5nZShtX3RpY2tldCwgbnVsbHB0
cik7CiAgICAgc3dpdGNoIChtX2NvbXBpbGVyTW9kZSkgewogICAgIGNhc2UgQ29tcGlsZXJNb2Rl
OjpWYWxpZGF0aW9uOiB7Ci0gICAgICAgIG1fdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVkdWxl
V29ya1Nvb24ocHJvbWlzZSwgW3Jlc3VsdCA9IFdURk1vdmUocmVzdWx0KV0oRGVmZXJyZWRXb3Jr
VGltZXI6OlRpY2tldCB0aWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYgdGlj
a2V0RGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBKU1Byb21pc2UqIHByb21pc2UgPSBqc0Nh
c3Q8SlNQcm9taXNlKj4odGlja2V0KTsKKyAgICAgICAgbV92bS5kZWZlcnJlZFdvcmtUaW1lci0+
c2NoZWR1bGVXb3JrU29vbih0aWNrZXQsIFtyZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCldKERlZmVy
cmVkV29ya1RpbWVyOjpUaWNrZXQgdGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0
YSYmIHRpY2tldERhdGEpIG11dGFibGUgeworICAgICAgICAgICAgSlNQcm9taXNlKiBwcm9taXNl
ID0ganNDYXN0PEpTUHJvbWlzZSo+KHRpY2tldC0+dGFyZ2V0KCkpOwogICAgICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHRpY2tl
dERhdGEuZGVwZW5kZW5jaWVzWzBdLmdldCgpKTsKICAgICAgICAgICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTE2MCw4ICsxNTgsOCBAQCB2b2lkIFN0cmVhbWluZ0NvbXBpbGVyOjpkaWRD
b21wbGV0ZSgpCiAgICAgfQogCiAgICAgY2FzZSBDb21waWxlck1vZGU6OkZ1bGxDb21waWxlOiB7
Ci0gICAgICAgIG1fdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlz
ZSwgW3Jlc3VsdCA9IFdURk1vdmUocmVzdWx0KV0oRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCB0
aWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYgdGlja2V0RGF0YSkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICBKU1Byb21pc2UqIHByb21pc2UgPSBqc0Nhc3Q8SlNQcm9taXNlKj4o
dGlja2V0KTsKKyAgICAgICAgbV92bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1bGVXb3JrU29v
bih0aWNrZXQsIFtyZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCldKERlZmVycmVkV29ya1RpbWVyOjpU
aWNrZXQgdGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmIHRpY2tldERhdGEp
IG11dGFibGUgeworICAgICAgICAgICAgSlNQcm9taXNlKiBwcm9taXNlID0ganNDYXN0PEpTUHJv
bWlzZSo+KHRpY2tldC0+dGFyZ2V0KCkpOwogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHRpY2tldERhdGEuZGVwZW5kZW5j
aWVzWzBdLmdldCgpKTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QgPSBqc0Nh
c3Q8SlNPYmplY3QqPih0aWNrZXREYXRhLmRlcGVuZGVuY2llc1sxXS5nZXQoKSk7CiAgICAgICAg
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0yMDcsOCArMjA1LDE0IEBAIHZv
aWQgU3RyZWFtaW5nQ29tcGlsZXI6OmZhaWwoSlNHbG9iYWxPYmoKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgbV9lYWdlckZhaWxlZCA9IHRydWU7CiAgICAgfQotICAgIGF1dG8qIHByb21p
c2UgPSBzdGQ6OmV4Y2hhbmdlKG1fcHJvbWlzZSwgbnVsbHB0cik7Ci0gICAgbV92bS5kZWZlcnJl
ZFdvcmtUaW1lci0+Y2FuY2VsUGVuZGluZ1dvcmsocHJvbWlzZSk7CisgICAgYXV0byB0aWNrZXQg
PSBzdGQ6OmV4Y2hhbmdlKG1fdGlja2V0LCBudWxscHRyKTsKKyAgICBKU1Byb21pc2UqIHByb21p
c2UgPSBqc0Nhc3Q8SlNQcm9taXNlKj4odGlja2V0LT50YXJnZXQoKSk7CisgICAgLy8gVGhlIHBl
bmRpbmcgd29yayBUaWNrZXREYXRhIHdhcyBrZWVwaW5nIHRoZSBwcm9taXNlIGFsaXZlLiBXZSAg
bmVlZCB0bworICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyByZWFjaGFibGUgZnJvbSB0aGUgc3RhY2sg
YmVmb3JlIHdlIHJlbW92ZSBpdCBmcm9tIHRoZQorICAgIC8vIHBlbmRpbmcgd29yayBsaXN0LiBO
b3RlOiBtX3RpY2tldCBzdG9yZXMgaXQgYXMgYSBQYWNrZWRQdHIsIHdoaWNoIGlzIG5vdAorICAg
IC8vIHNjYW5uYWJsZSBieSB0aGUgR0MuCisgICAgV1RGOjpjb21waWxlckZlbmNlKCk7CisgICAg
bV92bS5kZWZlcnJlZFdvcmtUaW1lci0+Y2FuY2VsUGVuZGluZ1dvcmsodGlja2V0KTsKICAgICBw
cm9taXNlLT5yZWplY3QoZ2xvYmFsT2JqZWN0LCBlcnJvcik7CiB9CiAKQEAgLTIyMSw4ICsyMjUs
OCBAQCB2b2lkIFN0cmVhbWluZ0NvbXBpbGVyOjpjYW5jZWwoKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBtX2VhZ2VyRmFpbGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgYXV0byogcHJvbWlz
ZSA9IHN0ZDo6ZXhjaGFuZ2UobV9wcm9taXNlLCBudWxscHRyKTsKLSAgICBtX3ZtLmRlZmVycmVk
V29ya1RpbWVyLT5jYW5jZWxQZW5kaW5nV29yayhwcm9taXNlKTsKKyAgICBhdXRvIHRpY2tldCA9
IHN0ZDo6ZXhjaGFuZ2UobV90aWNrZXQsIG51bGxwdHIpOworICAgIG1fdm0uZGVmZXJyZWRXb3Jr
VGltZXItPmNhbmNlbFBlbmRpbmdXb3JrKHRpY2tldCk7CiB9CiAKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmgJKHJldmlz
aW9uIDI4NzM4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdD
b21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJEZWZlcnJlZFdvcmtUaW1lci5oIgogI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Miw3ICs3Myw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3RocmVhZGVkQ29tcGlsYXRpb25TdGFydGVkIHsgZmFsc2UgfTsKICAg
ICBMb2NrIG1fbG9jazsKICAgICB1bnNpZ25lZCBtX3JlbWFpbmluZ0NvbXBpbGF0aW9uUmVxdWVz
dHMgeyAwIH07Ci0gICAgSlNQcm9taXNlKiBtX3Byb21pc2U7IC8vIFJhdyBwb2ludGVyLCBidXQg
aGVsZCBieSBEZWZlcnJlZFdvcmtUaW1lci4KKyAgICBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0
IG1fdGlja2V0OwogICAgIFJlZjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbV9pbmZvOwogICAg
IFN0cmVhbWluZ1BhcnNlciBtX3BhcnNlcjsKICAgICBSZWZQdHI8TExJbnRQbGFuPiBtX3BsYW47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
LmNwcAkocmV2aXNpb24gMjg3MzgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw5ICsxNzAsOSBAQCB2b2lk
IEpTV2ViQXNzZW1ibHk6OndlYkFzc2VtYmx5TW9kdWxlVmFsCiAgICAgVmVjdG9yPFN0cm9uZzxK
U0NlbGw+PiBkZXBlbmRlbmNpZXM7CiAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlND
ZWxsPih2bSwgZ2xvYmFsT2JqZWN0KSk7CiAKLSAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+YWRk
UGVuZGluZ1dvcmsodm0sIHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7Ci0gICAgV2Fz
bTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RGTW92ZShzb3VyY2Up
LCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwg
Z2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1
bHQpIG11dGFibGUgewotICAgICAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1bGVXb3Jr
U29vbihwcm9taXNlLCBbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJl
c3VsdCksICZ2bV0oRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCwgRGVmZXJyZWRXb3JrVGltZXI6
OlRpY2tldERhdGEmJikgbXV0YWJsZSB7CisgICAgYXV0byB0aWNrZXQgPSB2bS5kZWZlcnJlZFdv
cmtUaW1lci0+YWRkUGVuZGluZ1dvcmsodm0sIHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVz
KSk7CisgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RG
TW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBl
PihbdGlja2V0LCBwcm9taXNlLCBnbG9iYWxPYmplY3QsICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFs
aWRhdGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIHZtLmRlZmVycmVkV29y
a1RpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHRpY2tldCwgW3Byb21pc2UsIGdsb2JhbE9iamVjdCwg
cmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpLCAmdm1dKERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXQs
IERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIG11dGFibGUgewogICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICAgICAgSlNWYWx1
ZSBtb2R1bGUgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSwgV1RGTW92ZShy
ZXN1bHQpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsK
QEAgLTIwMiwxMSArMjAyLDExIEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZNJiB2bSwgSlNH
bG9iYWwKICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBwcm9taXNl
KSk7CiAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwgaW1wb3J0T2Jq
ZWN0KSk7CiAKLSAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+YWRkUGVuZGluZ1dvcmsodm0sIGlu
c3RhbmNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworICAgIGF1dG8gdGlja2V0ID0gdm0uZGVm
ZXJyZWRXb3JrVGltZXItPmFkZFBlbmRpbmdXb3JrKHZtLCBpbnN0YW5jZSwgV1RGTW92ZShkZXBl
bmRlbmNpZXMpKTsKICAgICAvLyBOb3RlOiBUaGlzIGNvbXBsZXRpb24gdGFzayBtYXkgb3IgbWF5
IG5vdCBnZXQgY2FsbGVkIGltbWVkaWF0ZWx5LgotICAgIG1vZHVsZS0+bW9kdWxlKCkuY29tcGls
ZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgY3JlYXRlU2hh
cmVkVGFzazxXYXNtOjpDYWxsZWVHcm91cDo6Q2FsbGJhY2tUeXBlPihbcHJvbWlzZSwgaW5zdGFu
Y2UsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCByZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlLCAmdm1d
IChSZWY8V2FzbTo6Q2FsbGVlR3JvdXA+JiYgcmVmQ2FsbGVlR3JvdXApIG11dGFibGUgeworICAg
IG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2Ut
Pm1lbW9yeU1vZGUoKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpDYWxsZWVHcm91cDo6Q2FsbGJh
Y2tUeXBlPihbdGlja2V0LCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBpbXBvcnRPYmplY3Qs
IHJlc29sdmVLaW5kLCBjcmVhdGlvbk1vZGUsICZ2bV0gKFJlZjxXYXNtOjpDYWxsZWVHcm91cD4m
JiByZWZDYWxsZWVHcm91cCkgbXV0YWJsZSB7CiAgICAgICAgIFJlZlB0cjxXYXNtOjpDYWxsZWVH
cm91cD4gY2FsbGVlR3JvdXAgPSBXVEZNb3ZlKHJlZkNhbGxlZUdyb3VwKTsKLSAgICAgICAgdm0u
ZGVmZXJyZWRXb3JrVGltZXItPnNjaGVkdWxlV29ya1Nvb24oaW5zdGFuY2UsIFtwcm9taXNlLCBp
bnN0YW5jZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIHJlc29sdmVLaW5kLCBjcmVhdGlvbk1vZGUs
ICZ2bSwgY2FsbGVlR3JvdXAgPSBXVEZNb3ZlKGNhbGxlZUdyb3VwKV0oRGVmZXJyZWRXb3JrVGlt
ZXI6OlRpY2tldCwgRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGEmJikgbXV0YWJsZSB7Cisg
ICAgICAgIHZtLmRlZmVycmVkV29ya1RpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHRpY2tldCwgW3By
b21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgcmVzb2x2ZUtpbmQsIGNyZWF0
aW9uTW9kZSwgJnZtLCBjYWxsZWVHcm91cCA9IFdURk1vdmUoY2FsbGVlR3JvdXApXShEZWZlcnJl
ZFdvcmtUaW1lcjo6VGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5j
ZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgICAgICByZXNvbHZlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgY2FsbGVlR3JvdXAucmVs
ZWFzZU5vbk51bGwoKSwgcmVzb2x2ZUtpbmQsIGNyZWF0aW9uTW9kZSk7CiAgICAgICAgIH0pOwpA
QCAtMjI3LDkgKzIyNyw5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50aWF0ZShWTSYg
dm0KICAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKICAgICBkZXBlbmRl
bmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBpbXBvcnRPYmplY3QpKTsKICAgICBkZXBl
bmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBtb2R1bGVLZXlDZWxsKSk7Ci0gICAg
dm0uZGVmZXJyZWRXb3JrVGltZXItPmFkZFBlbmRpbmdXb3JrKHZtLCBwcm9taXNlLCBXVEZNb3Zl
KGRlcGVuZGVuY2llcykpOwotICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3luYygmdm0ud2Fz
bUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6
OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGltcG9ydE9iamVjdCwgbW9kdWxlS2V5Q2VsbCwgZ2xv
YmFsT2JqZWN0LCByZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlLCAmdm1dIChXYXNtOjpNb2R1bGU6
OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICB2bS5kZWZlcnJl
ZFdvcmtUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgaW1wb3J0T2Jq
ZWN0LCBtb2R1bGVLZXlDZWxsLCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0
KSwgcmVzb2x2ZUtpbmQsIGNyZWF0aW9uTW9kZSwgJnZtXShEZWZlcnJlZFdvcmtUaW1lcjo6VGlj
a2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmKSBtdXRhYmxlIHsKKyAgICBhdXRv
IHRpY2tldCA9IHZtLmRlZmVycmVkV29ya1RpbWVyLT5hZGRQZW5kaW5nV29yayh2bSwgcHJvbWlz
ZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKKyAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5
bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2Fz
bTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFt0aWNrZXQsIHByb21pc2UsIGltcG9ydE9iamVjdCwg
bW9kdWxlS2V5Q2VsbCwgZ2xvYmFsT2JqZWN0LCByZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlLCAm
dm1dIChXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewor
ICAgICAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1bGVXb3JrU29vbih0aWNrZXQsIFtw
cm9taXNlLCBpbXBvcnRPYmplY3QsIG1vZHVsZUtleUNlbGwsIGdsb2JhbE9iamVjdCwgcmVzdWx0
ID0gV1RGTW92ZShyZXN1bHQpLCByZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlLCAmdm1dKERlZmVy
cmVkV29ya1RpbWVyOjpUaWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIG11
dGFibGUgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gSlNXZWJBc3NlbWJs
eU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFz
c2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CkBAIC0yNzEsOSArMjcxLDkgQEAgdm9p
ZCBKU1dlYkFzc2VtYmx5Ojp3ZWJBc3NlbWJseU1vZHVsZUlucwogICAgIFZlY3RvcjxTdHJvbmc8
SlNDZWxsPj4gZGVwZW5kZW5jaWVzOwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpT
Q2VsbD4odm0sIGltcG9ydE9iamVjdCkpOwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25n
PEpTQ2VsbD4odm0sIGdsb2JhbE9iamVjdCkpOwotICAgIHZtLmRlZmVycmVkV29ya1RpbWVyLT5h
ZGRQZW5kaW5nV29yayh2bSwgcHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKLSAgICBX
YXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKHNvdXJj
ZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFtwcm9taXNl
LCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgJnZtXSAoV2FzbTo6TW9kdWxlOjpWYWxpZGF0
aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAgdm0uZGVmZXJyZWRXb3JrVGlt
ZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xv
YmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksICZ2bV0oRGVmZXJyZWRXb3JrVGlt
ZXI6OlRpY2tldCwgRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGEmJikgbXV0YWJsZSB7Cisg
ICAgYXV0byB0aWNrZXQgPSB2bS5kZWZlcnJlZFdvcmtUaW1lci0+YWRkUGVuZGluZ1dvcmsodm0s
IHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CisgICAgV2FzbTo6TW9kdWxlOjp2YWxp
ZGF0ZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRU
YXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbdGlja2V0LCBwcm9taXNlLCBpbXBvcnRP
YmplY3QsIGdsb2JhbE9iamVjdCwgJnZtXSAoV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0
JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVk
dWxlV29ya1Nvb24odGlja2V0LCBbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZtXShEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0
LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgICAgIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0dWIo
dm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVsZVN0cnVjdHVy
ZSgpLCBXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgewo=
</data>
<flag name="review"
          id="473595"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447899</attachid>
            <date>2021-12-23 12:23:51 -0800</date>
            <delta_ts>2021-12-23 13:58:57 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-234628.patch</filename>
            <type>text/plain</type>
            <size>31031</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3NDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDIxLTEyLTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIERlZmVycmVkV29ya1RpbWVyOjphZGRQZW5kaW5nV29yaygpIHJldHVybiBhIFRpY2tldC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDYyOAor
ICAgICAgICByZGFyOi8vODQyNjA0MjkKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6
dWtpLgorCisgICAgICAgIDEuIE1ha2UgVGlja2V0IGEgdW5pcXVlIHRva2VuIGluc3RlYWQgb2Yg
dGhlIEpTT2JqZWN0KiB0YXJnZXQgb2JqZWN0LgorICAgICAgICAgICBUaGUgVGlja2V0IGlzIG5v
dyBhIHBvaW50ZXIgdG8gdGhlIFRpY2tldERhdGEgaW4gdGhlIHBlbmRpbmcgd29yayBsaXN0Lgor
CisgICAgICAgIDIuIEluc3RlYWQgb2YgdGFraW5nIGEgVGlja2V0IGFyZ3VtZW50LCBEZWZlcnJl
ZFdvcmtUaW1lcjo6YWRkUGVuZGluZ1dvcmsoKSBub3cKKyAgICAgICAgICAgdGFrZXMgYSBKU09i
amVjdCogYHRhcmdldGAgYXJndW1lbnQgZXhwbGljaXRseSwgYW5kIHJldHVybnMgdGhlIFRpY2tl
dCBmb3IgdGhlCisgICAgICAgICAgIGFkZGVkIFRpY2tldERhdGEgaW5zdGVhZC4KKworICAgICAg
ICAgICBBbGwgdGhlIHJlbGV2YW50IERlZmVycmVkV29ya1RpbWVyIEFQSVMgYWxyZWFkeSB0YWtl
IGEgVGlja2V0IGFzIGFuIGFyZ3VtZW50LgorICAgICAgICAgICBUaGlzIGVuc3VyZXMgdGhhdCBh
ZGRQZW5kaW5nV29yaygpIGlzIGNhbGxlZCBiZWZvcmUgd2Ugc3RhcnQgZG9pbmcgd29yayB3aXRo
CisgICAgICAgICAgIHRoZXNlIEFQSXMgKGVzcGVjaWFsbHkgc2NoZWR1bGVXb3JrU29vbigpKS4K
KworICAgICAgICAzLiBQcmV2aW91c2x5LCBhZGRQZW5kaW5nV29yaygpIHdpbGwgb25seSBzYXZl
IG9uZSBpbnN0YW5jZSBvZiBUaWNrZXREYXRhIGZvcgorICAgICAgICAgICBhIGdpdmVuIEpTT2Jq
ZWN0KiBrZXkuICBXaXRoIHRoaXMgcGF0Y2gsIHdlJ2xsIHJlZ2lzdGVyIGEgbmV3IFRpY2tldERh
dGEKKyAgICAgICAgICAgaW5zdGFuY2UgZm9yIGV2ZXJ5IGNhbGwgdG8gYWRkUGVuZGluZ1dvcmso
KSwgYW5kIHJldHVybiBhIHVuaXF1ZSBUaWNrZXQgZm9yIGl0LgorCisgICAgICAgICAgIFRoaXMg
aXMgbmVlZGVkIGJlY2F1c2UgaXQgbWF5IGJlIHBvc3NpYmxlIGZvciAyIGRpZmZlcmVudCBjbGll
bnRzIHRvIGNhbGwKKyAgICAgICAgICAgYWRkUGVuZGluZ1dvcmsoKSBhbmQgc2NoZWR1bGVXb3Jr
U29vbigpIHdpdGggdGhlIHNhbWUgdGFyZ2V0IEpTT2JqZWN0KiBidXQgd2l0aAorICAgICAgICAg
ICBkaWZmZXJlbnQgc2V0cyBvZiBkZXBlbmRlbmNpZXMuCisKKyAgICAgICAgICAgU2Vjb25kbHks
IGV2ZW4gaXMgdGhlIGJvdGggc2V0cyBvZiBkZXBlbmRlbmNpZXMgYXJlIGlkZW50aWNhbCwgYSBj
bGllbnQgbWF5CisgICAgICAgICAgIGNhbGwgYWRkUGVuZGluZ1dvcmsoKSBhbmQgc2NoZWR1bGVX
b3JrU29vbigpIHdpdGggdGhlIHNhbWUgSlNPYmplY3QqIHRhcmdldAorICAgICAgICAgICBtb3Jl
IHRoYW4gb25jZSBiZWNhdXNlIGl0IGludGVuZGVkIHRvIHNjaGVkdWxlIG1vcmUgdGhhbiAxIHRh
c2sgdG8gcnVuLgorCisgICAgICAgICAgIE5vdGUgdGhhdCBEZWZlcnJlZFdvcmtUaW1lcjo6ZG9X
b3JrKCkgY29uc3VtZXMgdGhlIGNvcnJlc3BvbmRpbmcgVGlja2V0RGF0YQorICAgICAgICAgICAo
aS5lLiByZW1vdmVzIGl0IGZyb20gdGhlIG1fcGVuZGluZ1RpY2tldHMgbGlzdCkgZm9yIGVhY2gg
dGFzayBhcyBpdCBpcyBydW4uCisgICAgICAgICAgIFRvIGVuc3VyZSB0aGF0IHRoZSBkZXBlbmRl
bmNpZXMgZm9yIGVhY2ggdGFzayBpcyBwcm90ZWN0ZWQsIHdlJ2xsIGVpdGhlciBuZWVkCisgICAg
ICAgICAgIHRvIHJlZiBjb3VudCB0aGUgVGlja2V0RGF0YSBmb3IgdGhlIHNhbWUgdGFyZ2V0IG9i
amVjdCAoYW5kIGhvbGQgb2ZmIG9uIHJlbW92aW5nCisgICAgICAgICAgIGl0IGZyb20gdGhlIGxp
c3QpLCBvciB3ZSdsbCBuZWVkIHRvIHJlZ2lzdGVyIGEgZGlmZmVyZW50IFRpY2tldERhdGEgaW5z
dGFuY2UKKyAgICAgICAgICAgZm9yIGVhY2ggdGFzay4gIFJlZiBjb3VudGluZyBjYW4gc29sdmUg
dGhlIHNlY29uZCBpc3N1ZSBhYm92ZSwgYnV0IGRvZXMgbm90CisgICAgICAgICAgIHNvbHZlIHRo
ZSBmaXJzdC4gIFNvLCB0aGlzIHBhdGNoIGdvZXMgd2l0aCB0aGUgbW9yZSBnZW5lcmljIHNvbHV0
aW9uIHRvIGFsbG93CisgICAgICAgICAgIGVhY2ggdGFzayB0byBoYXZlIGl0cyBvd24gVGlja2V0
RGF0YSBpbnN0YW5jZSAoYW5kLCBpdHMgb3duIHVuaXF1ZSBUaWNrZXQpLgorCisgICAgICAgIDQu
IFByZXZpb3VzbHksIGlmIHRoZSBjbGllbnQgY2FuY2VscyBwZW5kaW5nIHdvcmssIHdlIHdvdWxk
IHJlbW92ZSB0aGUgVGlja2V0RGF0YQorICAgICAgICAgICBpbW1lZGlhdGVseSBmcm9tIHRoZSBt
X3BlbmRpbmdUaWNrZXRzIGxpc3QuICBUaGlzIG9wZW5zIHVwIGFuIG9wcG9ydHVuaXR5IGZvcgor
ICAgICAgICAgICB0aGUgc2FtZSBUaWNrZXREYXRhIG1lbW9yeSB0byBiZSByZS1hbGxvY2F0ZWQg
YnkgYW5vdGhlciBjbGllbnQuICBUaGlzLCBpbiB0dXJuLAorICAgICAgICAgICB3b3VsZCBtYWtl
IHRoZSBUaWNrZXQgdG9rZW4gbm90IHVuaXF1ZSBhbmQgcG90ZW50aWFsbHkgYWxsb3cgYSBjYW5j
ZWxsZWQgdGlja2V0CisgICAgICAgICAgIHRvIGJlIHJldXNlZCBiZWZvcmUgRGVmZXJyZWRXb3Jr
VGltZXI6OmRvV29yaygpIGlzIGNhbGxlZC4KKworICAgICAgICAgICBUaGlzIHBhdGNoIGNoYW5n
ZXMgRGVmZXJyZWRXb3JrVGltZXI6OmNhbmNlbFBlbmRpbmdXb3JrKCkgdG8gb25seSBjbGVhciB0
aGUKKyAgICAgICAgICAgY29udGVudHMgb2YgdGhlIFRpY2tldERhdGEgaW5zdGVhZC4gIFRpY2tl
dERhdGE6OnNjcmlwdEV4ZWN1dGlvbk93bmVyIGJlaW5nCisgICAgICAgICAgIG51bGwgaXMgdXNl
ZCBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIHRpY2tldCBoYXMgYmVlbiBjYW5jZWxsZWQuICBT
aW5jZSB0aGUKKyAgICAgICAgICAgVGlja2V0RGF0YSBpdHNlbGYgaXMgbm90ICJmcmVlZCIgeWV0
LCBhbGwgVGlja2V0RGF0YSB3aWxsIHJlbWFpbiB1bmlxdWUgdW50aWwKKyAgICAgICAgICAgRGVm
ZXJyZWRXb3JrVGltZXI6OmRvV29yaygpLgorCisgICAgICAgICAgIENvbnNlcXVlbnRseSwgRGVm
ZXJyZWRXb3JrVGltZXI6OmRvV29yaygpIHdpbGwgbm93IGNoZWNrIGZvciBjYW5jZWxsZWQgdGlj
a2V0cworICAgICAgICAgICBhbmQgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbV9wZW5kaW5nVGlja2V0
cyBsaXN0LgorCisgICAgICAgIDUuIEpTRmluYWxpemF0aW9uUmVnaXN0cnkgd2FzIHByZXZpb3Vz
bHkgY2FsbGluZyBEZWZlcnJlZFdvcmtUaW1lcjo6aGFzUGVuZGluZ1dvcmsoKQorICAgICAgICAg
ICB0byBjaGVjayBpZiBpdCBoYXMgYWxyZWFkeSBzY2hlZHVsZWQgYSB0YXNrLCBzbyBhcyBub3Qg
dG8gcmVzY2hlZHVsZSBhZ2FpbiB1bnRpbAorICAgICAgICAgICBhZnRlciB0aGUgcHJldmlvdXNs
eSBzY2hlZHVsZWQgdGFzayBoYXMgYmVlbiBydW4uICBUaGlzIGRvZXMgbm90IHBsYXkgbmljZQor
ICAgICAgICAgICB3aXRoIHRoZSBuZXcgVGlja2V0IEFQSSwgYmVjYXVzZSB0aGlzIGhhc1BlbmRp
bmdXb3JrKCkgY2hlY2sgbmVlZHMgdG8gYmUgZG9uZQorICAgICAgICAgICBiZWZvcmUgY2FsbGlu
ZyBhZGRQZW5kaW5nV29yaygpLCBhbmQgaGVuY2UsIHRoZSBUaWNrZXQgaXMgbm90IGF2YWlsYWJs
ZSB5ZXQuCisKKyAgICAgICAgICAgRm9ydHVuYXRlbHksIEpTRmluYWxpemF0aW9uUmVnaXN0cnkg
c2hvdWxkIGtub3cgaWYgaXQgaGFzIGFscmVhZHkgc2NoZWR1bGVkCisgICAgICAgICAgIGEgdGFz
ayBpdHNlbGYuICBUaGlzIHBhdGNoIGFkZHMgYSBtX2hhc0FscmVhZHlTY2hlZHVsZWRXb3JrIGZs
YWcgdG8gCisgICAgICAgICAgIEpTRmluYWxpemF0aW9uUmVnaXN0cnkgdGhhdCBjYW4gYmUgdXNl
ZCBmb3IgdGhpcyBjaGVjayBpbnN0ZWFkLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAg
KEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9EZWZlcnJlZFdv
cmtUaW1lci5jcHA6CisgICAgICAgIChKU0M6OkRlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRh
OjpUaWNrZXREYXRhKToKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERh
dGE6OnZtKToKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGE6OmNh
bmNlbCk6CisgICAgICAgIChKU0M6OkRlZmVycmVkV29ya1RpbWVyOjpkb1dvcmspOgorICAgICAg
ICAoSlNDOjpEZWZlcnJlZFdvcmtUaW1lcjo6YWRkUGVuZGluZ1dvcmspOgorICAgICAgICAoSlND
OjpEZWZlcnJlZFdvcmtUaW1lcjo6aGFzUGVuZGluZ1dvcmspOgorICAgICAgICAoSlNDOjpEZWZl
cnJlZFdvcmtUaW1lcjo6aGFzRGVwZW5kYW5jeUluUGVuZGluZ1dvcmspOgorICAgICAgICAoSlND
OjpEZWZlcnJlZFdvcmtUaW1lcjo6Y2FuY2VsUGVuZGluZ1dvcmspOgorICAgICAgICAqIHJ1bnRp
bWUvRGVmZXJyZWRXb3JrVGltZXIuaDoKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRXb3JrVGltZXI6
OlRpY2tldERhdGE6OnRhcmdldCk6CisgICAgICAgICogcnVudGltZS9KU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdp
c3RyeS5oOgorICAgICAgICAqIHdhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI6OlN0cmVhbWluZ0NvbXBpbGVyKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI6On5TdHJlYW1pbmdDb21waWxlcik6
CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ0NvbXBpbGVyOjpkaWRDb21wbGV0ZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ0NvbXBpbGVyOjpmYWlsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI6OmNhbmNlbCk6CisgICAgICAgICogd2FzbS9XYXNt
U3RyZWFtaW5nQ29tcGlsZXIuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3Bw
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Ojp3ZWJBc3NlbWJseU1vZHVsZVZhbGlkYXRl
QXN5bmMpOgorICAgICAgICAoSlNDOjppbnN0YW50aWF0ZSk6CisgICAgICAgIChKU0M6OmNvbXBp
bGVBbmRJbnN0YW50aWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHk6OndlYkFzc2Vt
Ymx5TW9kdWxlSW5zdGFudGluYXRlQXN5bmMpOgorCiAyMDIxLTEyLTIyICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIExMSW50IHNob3VsZCBsb29wIE9TUiBpbnRv
IEJCUSBhbmQgQkJRIHNob3VsZCBsb29wIE9TUiBpbnRvIE9NRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDI4NzQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTA0LDggKzI1MDQsOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25TZXRUaW1lCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJGaXJzdCBhcmd1bWVudCBpcyBub3QgYSBKUyBmdW5jdGlvbiJf
cyk7CiAKICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgbG9vayBhdCB0aGUgdGltZW91dCBwYXJhbWV0
ZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgc2NoZWR1bGUgd29yayBsYXRlciBBUEkuCi0gICAg
dm0uZGVmZXJyZWRXb3JrVGltZXItPmFkZFBlbmRpbmdXb3JrKHZtLCBjYWxsYmFjaywgeyB9KTsK
LSAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1bGVXb3JrU29vbihjYWxsYmFjaywgW2Nh
bGxiYWNrXShEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlj
a2V0RGF0YSYmKSB7CisgICAgYXV0byB0aWNrZXQgPSB2bS5kZWZlcnJlZFdvcmtUaW1lci0+YWRk
UGVuZGluZ1dvcmsodm0sIGNhbGxiYWNrLCB7IH0pOworICAgIHZtLmRlZmVycmVkV29ya1RpbWVy
LT5zY2hlZHVsZVdvcmtTb29uKHRpY2tldCwgW2NhbGxiYWNrXShEZWZlcnJlZFdvcmtUaW1lcjo6
VGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmKSB7CiAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsYmFjay0+Z2xvYmFsT2JqZWN0KCk7CiAgICAg
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgICAgIGNhbGwoZ2xvYmFsT2JqZWN0
LCBjYWxsYmFjaywganNVbmRlZmluZWQoKSwgYXJncywgIllvdSBzaG91bGRuJ3Qgc2VlIHRoaXMu
Li4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RlZmVycmVkV29ya1Rp
bWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EZWZl
cnJlZFdvcmtUaW1lci5jcHAJKHJldmlzaW9uIDI4NzQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RlZmVycmVkV29ya1RpbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3
LDYgKzM3LDI1IEBAIG5hbWVzcGFjZSBEZWZlcnJlZFdvcmtUaW1lckludGVybmFsIHsKIHN0YXRp
YyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAoraW5saW5lIERlZmVycmVkV29ya1Rp
bWVyOjpUaWNrZXREYXRhOjpUaWNrZXREYXRhKFZNJiB2bSwgSlNPYmplY3QqIHNjcmlwdEV4ZWN1
dGlvbk93bmVyLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+JiYgZGVwZW5kZW5jaWVzKQorICAgIDog
ZGVwZW5kZW5jaWVzKFdURk1vdmUoZGVwZW5kZW5jaWVzKSkKKyAgICAsIHNjcmlwdEV4ZWN1dGlv
bk93bmVyKHZtLCBzY3JpcHRFeGVjdXRpb25Pd25lcikKK3sKK30KKworaW5saW5lIFZNJiBEZWZl
cnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YTo6dm0oKQoreworICAgIEFTU0VSVCghaXNDYW5jZWxs
ZWQoKSk7CisgICAgcmV0dXJuIHRhcmdldCgpLT52bSgpOworfQorCitpbmxpbmUgdm9pZCBEZWZl
cnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YTo6Y2FuY2VsKCkKK3sKKyAgICBzY3JpcHRFeGVjdXRp
b25Pd25lci5jbGVhcigpOworICAgIGRlcGVuZGVuY2llcy5jbGVhcigpOworfQorCisKIERlZmVy
cmVkV29ya1RpbWVyOjpEZWZlcnJlZFdvcmtUaW1lcihWTSYgdm0pCiAgICAgOiBCYXNlKHZtKQog
ewpAQCAtNTQsMTUgKzczLDIzIEBAIHZvaWQgRGVmZXJyZWRXb3JrVGltZXI6OmRvV29yayhWTSYg
dm0pCiAKICAgICB3aGlsZSAoIW1fdGFza3MuaXNFbXB0eSgpKSB7CiAgICAgICAgIGF1dG8gW3Rp
Y2tldCwgdGFza10gPSBtX3Rhc2tzLnRha2VGaXJzdCgpOwotICAgICAgICBhdXRvIGdsb2JhbE9i
amVjdCA9IHRpY2tldC0+c3RydWN0dXJlKHZtKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIGRh
dGFMb2dMbklmKERlZmVycmVkV29ya1RpbWVySW50ZXJuYWw6OnZlcmJvc2UsICJEb2luZyB3b3Jr
IG9uOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOwogCiAgICAgICAgIGF1dG8gcGVuZGluZ1RpY2tl
dCA9IG1fcGVuZGluZ1RpY2tldHMuZmluZCh0aWNrZXQpOwogICAgICAgICAvLyBXZSBtYXkgaGF2
ZSBhbHJlYWR5IGNhbmNlbGVkIHRoaXMgdGFzayBvciBpdHMgb3duZXIgbWF5IGhhdmUgYmVlbiBj
YW5jZWxlZC4KICAgICAgICAgaWYgKHBlbmRpbmdUaWNrZXQgPT0gbV9wZW5kaW5nVGlja2V0cy5l
bmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQodGlja2V0ID09IHBl
bmRpbmdUaWNrZXQtPmdldCgpKTsKKworICAgICAgICBpZiAodGlja2V0LT5pc0NhbmNlbGxlZCgp
KSB7CisgICAgICAgICAgICBtX3BlbmRpbmdUaWNrZXRzLnJlbW92ZShwZW5kaW5nVGlja2V0KTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICAgICAgc3dpdGNoIChnbG9i
YWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnNjcmlwdEV4ZWN1dGlvblN0YXR1
cyhnbG9iYWxPYmplY3QsIHBlbmRpbmdUaWNrZXQtPnZhbHVlLnNjcmlwdEV4ZWN1dGlvbk93bmVy
LmdldCgpKSkgeworICAgICAgICAvLyBXZSBzaG91bGRuJ3QgYWNjZXNzIHRoZSBUaWNrZXREYXRh
IHRvIGdldCB0aGlzIGdsb2JhbE9iamVjdCB1bnRpbAorICAgICAgICAvLyBhZnRlciB3ZSBjb25m
aXJtIHRoYXQgdGhlIHRpY2tldCBpcyBzdGlsbCB2YWxpZCAod2hpY2ggd2UgZGlkIGFib3ZlKS4K
KyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSB0aWNrZXQtPnRhcmdldCgpLT5zdHJ1Y3R1cmUo
dm0pLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgc3dpdGNoIChnbG9iYWxPYmplY3QtPmdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKCktPnNjcmlwdEV4ZWN1dGlvblN0YXR1cyhnbG9iYWxPYmplY3Qs
IHRpY2tldC0+c2NyaXB0RXhlY3V0aW9uT3duZXIuZ2V0KCkpKSB7CiAgICAgICAgIGNhc2UgU2Ny
aXB0RXhlY3V0aW9uU3RhdHVzOjpTdXNwZW5kZWQ6CiAgICAgICAgICAgICBzdXNwZW5kZWRUYXNr
cy5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHRpY2tldCwgV1RGTW92ZSh0YXNrKSkpOwogICAgICAg
ICAgICAgY29udGludWU7CkBAIC03NSw3ICsxMDIsNyBAQCB2b2lkIERlZmVycmVkV29ya1RpbWVy
Ojpkb1dvcmsoVk0mIHZtKQogCiAgICAgICAgIC8vIFJlbW92ZSB0aWNrZXQgZnJvbSBtX3BlbmRp
bmdUaWNrZXRzIHNpbmNlIHdlIGFyZSBnb2luZyB0byBydW4gaXQuCiAgICAgICAgIC8vIEJ1dCB3
ZSB3YW50IHRvIGtlZXAgdGlja2V0RGF0YSB3aGlsZSBydW5uaW5nIHRhc2sgc2luY2UgaXQgZW5z
dXJlcyBkZXBlbmRlbmNpZXMgYXJlIHN0cm9uZ2x5IGhlbGQuCi0gICAgICAgIGF1dG8gdGlja2V0
RGF0YSA9IFdURk1vdmUocGVuZGluZ1RpY2tldC0+dmFsdWUpOworICAgICAgICBhdXRvIHRpY2tl
dERhdGEgPSBXVEZNb3ZlKCoqcGVuZGluZ1RpY2tldCk7CiAgICAgICAgIG1fcGVuZGluZ1RpY2tl
dHMucmVtb3ZlKHBlbmRpbmdUaWNrZXQpOwogCiAgICAgICAgIC8vIEFsbG93IHRhc2tzIHdlIGFy
ZSBhYm91dCB0byBydW4gdG8gc2NoZWR1bGUgd29yay4KQEAgLTg5LDcgKzExNiw2IEBAIHZvaWQg
RGVmZXJyZWRXb3JrVGltZXI6OmRvV29yayhWTSYgdm0pCiAgICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgICAgICAgICB0YXNrKHRpY2tldCwgV1RG
TW92ZSh0aWNrZXREYXRhKSk7CiAgICAgICAgICAgICBpZiAoRXhjZXB0aW9uKiBleGNlcHRpb24g
PSBzY29wZS5leGNlcHRpb24oKSkgewotICAgICAgICAgICAgICAgIGF1dG8qIGdsb2JhbE9iamVj
dCA9IHRpY2tldC0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnJlcG9ydFVuY2F1Z2h0RXhjZXB0aW9uQXRFdmVudExvb3AoZ2xvYmFsT2Jq
ZWN0LCBleGNlcHRpb24pOwogICAgICAgICAgICAgfQpAQCAtMTAzLDYgKzEyOSwxMyBAQCB2b2lk
IERlZmVycmVkV29ya1RpbWVyOjpkb1dvcmsoVk0mIHZtKQogICAgIHdoaWxlICghc3VzcGVuZGVk
VGFza3MuaXNFbXB0eSgpKQogICAgICAgICBtX3Rhc2tzLnByZXBlbmQoc3VzcGVuZGVkVGFza3Mu
dGFrZUxhc3QoKSk7CiAKKyAgICAvLyBJdCBpcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHRoYXQg
YSBjbGllbnQgbWF5IGNhbmNlbCBhIHBlbmRpbmcgdGlja2V0IGFuZAorICAgIC8vIG5ldmVyIGNh
bGwgc2NoZWR1bGVXb3JrU29vbigpIG9uIGl0LiBBcyBzdWNoLCBpdCB3b3VsZCBub3QgYmUgZm91
bmQgd2hlbgorICAgIC8vIHdlIGl0ZXJhdGVkIG1fdGFza3MgYWJvdmUuIFdlJ2xsIG5lZWQgdG8g
bWFrZSBzdXJlIHRvIHB1cmdlIHRoZW0gaGVyZS4KKyAgICBtX3BlbmRpbmdUaWNrZXRzLnJlbW92
ZUlmKFtdIChhdXRvJiB0aWNrZXQpIHsKKyAgICAgICAgcmV0dXJuIHRpY2tldC0+aXNDYW5jZWxs
ZWQoKTsKKyAgICB9KTsKKwogICAgIGlmIChtX3BlbmRpbmdUaWNrZXRzLmlzRW1wdHkoKSAmJiBt
X3Nob3VsZFN0b3BSdW5Mb29wV2hlbkFsbFRpY2tldHNGaW5pc2gpIHsKICAgICAgICAgQVNTRVJU
KG1fdGFza3MuaXNFbXB0eSgpKTsKICAgICAgICAgUnVuTG9vcDo6Y3VycmVudCgpLnN0b3AoKTsK
QEAgLTExOCwzOCArMTUxLDQyIEBAIHZvaWQgRGVmZXJyZWRXb3JrVGltZXI6OnJ1blJ1bkxvb3Ao
KQogICAgICAgICBSdW5Mb29wOjpydW4oKTsKIH0KIAotdm9pZCBEZWZlcnJlZFdvcmtUaW1lcjo6
YWRkUGVuZGluZ1dvcmsoVk0mIHZtLCBUaWNrZXQgdGlja2V0LCBWZWN0b3I8U3Ryb25nPEpTQ2Vs
bD4+JiYgZGVwZW5kZW5jaWVzKQorRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCBEZWZlcnJlZFdv
cmtUaW1lcjo6YWRkUGVuZGluZ1dvcmsoVk0mIHZtLCBKU09iamVjdCogdGFyZ2V0LCBWZWN0b3I8
U3Ryb25nPEpTQ2VsbD4+JiYgZGVwZW5kZW5jaWVzKQogewogICAgIEFTU0VSVCh2bS5jdXJyZW50
VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpIHx8IChUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSAmJiB2
bS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVwZW5kZW5jaWVzLnNpemUoKTsgKytpKQotICAgICAgICBBU1NFUlQoZGVwZW5kZW5jaWVzW2ld
LmdldCgpICE9IHRpY2tldCk7CisgICAgICAgIEFTU0VSVChkZXBlbmRlbmNpZXNbaV0uZ2V0KCkg
IT0gdGFyZ2V0KTsKIAotICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gdGlja2V0LT5nbG9iYWxPYmpl
Y3QoKTsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1RpY2tldHMuZW5zdXJlKHRpY2tldCwg
WyZdIHsKLSAgICAgICAgZGF0YUxvZ0xuSWYoRGVmZXJyZWRXb3JrVGltZXJJbnRlcm5hbDo6dmVy
Ym9zZSwgIkFkZGluZyBuZXcgcGVuZGluZyB0aWNrZXQ6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7
Ci0gICAgICAgIEpTT2JqZWN0KiBzY3JpcHRFeGVjdXRpb25Pd25lciA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+Y3VycmVudFNjcmlwdEV4ZWN1dGlvbk93bmVyKGds
b2JhbE9iamVjdCk7Ci0gICAgICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4o
dm0sIHRpY2tldCkpOwotICAgICAgICByZXR1cm4gVGlja2V0RGF0YSB7IFdURk1vdmUoZGVwZW5k
ZW5jaWVzKSwgU3Ryb25nPEpTT2JqZWN0Pih2bSwgc2NyaXB0RXhlY3V0aW9uT3duZXIpIH07Ci0g
ICAgfSk7Ci0gICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBkYXRhTG9nTG5J
ZihEZWZlcnJlZFdvcmtUaW1lckludGVybmFsOjp2ZXJib3NlLCAiQWRkaW5nIG5ldyBkZXBlbmRl
bmNpZXMgZm9yIHRpY2tldDogIiwgUmF3UG9pbnRlcih0aWNrZXQpKTsKLSAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5kZXBlbmRlbmNpZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUoZGVwZW5k
ZW5jaWVzKSk7Ci0gICAgfQorICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRhcmdldC0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgSlNPYmplY3QqIHNjcmlwdEV4ZWN1dGlvbk93bmVyID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5jdXJyZW50U2NyaXB0RXhlY3V0aW9uT3du
ZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+
KHZtLCB0YXJnZXQpKTsKKworICAgIGF1dG8gdGlja2V0RGF0YSA9IG1ha2VVbmlxdWU8VGlja2V0
RGF0YT4odm0sIHNjcmlwdEV4ZWN1dGlvbk93bmVyLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOwor
ICAgIFRpY2tldCB0aWNrZXQgPSB0aWNrZXREYXRhLmdldCgpOworCisgICAgZGF0YUxvZ0xuSWYo
RGVmZXJyZWRXb3JrVGltZXJJbnRlcm5hbDo6dmVyYm9zZSwgIkFkZGluZyBuZXcgcGVuZGluZyB0
aWNrZXQ6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7CisgICAgYXV0byByZXN1bHQgPSBtX3BlbmRp
bmdUaWNrZXRzLmFkZChXVEZNb3ZlKHRpY2tldERhdGEpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICByZXR1cm4gdGlja2V0OwogfQogCiBib29sIERlZmVy
cmVkV29ya1RpbWVyOjpoYXNQZW5kaW5nV29yayhUaWNrZXQgdGlja2V0KQogeworICAgIGF1dG8g
cmVzdWx0ID0gbV9wZW5kaW5nVGlja2V0cy5maW5kKHRpY2tldCk7CisgICAgaWYgKHJlc3VsdCA9
PSBtX3BlbmRpbmdUaWNrZXRzLmVuZCgpIHx8IHRpY2tldC0+aXNDYW5jZWxsZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIEFTU0VSVCh0aWNrZXQtPnZtKCkuY3VycmVudFRocmVhZElz
SG9sZGluZ0FQSUxvY2soKSB8fCAoVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkgJiYgdGlja2V0LT52
bSgpLmhlYXAud29ybGRJc1N0b3BwZWQoKSkpOwotICAgIHJldHVybiBtX3BlbmRpbmdUaWNrZXRz
LmNvbnRhaW5zKHRpY2tldCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgRGVmZXJyZWRX
b3JrVGltZXI6Omhhc0RlcGVuZGFuY3lJblBlbmRpbmdXb3JrKFRpY2tldCB0aWNrZXQsIEpTQ2Vs
bCogZGVwZW5kZW5jeSkKIHsKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1RpY2tldHMuZmlu
ZCh0aWNrZXQpOworICAgIGlmIChyZXN1bHQgPT0gbV9wZW5kaW5nVGlja2V0cy5lbmQoKSB8fCB0
aWNrZXQtPmlzQ2FuY2VsbGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQo
dGlja2V0LT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkgfHwgKFRocmVhZDo6
bWF5QmVHQ1RocmVhZCgpICYmIHRpY2tldC0+dm0oKS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpKTsK
LSAgICBBU1NFUlQobV9wZW5kaW5nVGlja2V0cy5jb250YWlucyh0aWNrZXQpKTsKLQotICAgIGF1
dG8gcmVzdWx0ID0gbV9wZW5kaW5nVGlja2V0cy5nZXQodGlja2V0KTsKLSAgICByZXR1cm4gcmVz
dWx0LmRlcGVuZGVuY2llcy5jb250YWlucyhkZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gKCpyZXN1
bHQpLT5kZXBlbmRlbmNpZXMuY29udGFpbnMoZGVwZW5kZW5jeSk7CiB9CiAKIHZvaWQgRGVmZXJy
ZWRXb3JrVGltZXI6OnNjaGVkdWxlV29ya1Nvb24oVGlja2V0IHRpY2tldCwgVGFzayYmIHRhc2sp
CkBAIC0xNjIsMTEgKzE5OSwxNSBAQCB2b2lkIERlZmVycmVkV29ya1RpbWVyOjpzY2hlZHVsZVdv
cmtTb29uCiAKIGJvb2wgRGVmZXJyZWRXb3JrVGltZXI6OmNhbmNlbFBlbmRpbmdXb3JrKFRpY2tl
dCB0aWNrZXQpCiB7Ci0gICAgQVNTRVJUKHRpY2tldC0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nQVBJTG9jaygpIHx8IChUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSAmJiB0aWNrZXQtPnZtKCku
aGVhcC53b3JsZElzU3RvcHBlZCgpKSk7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BlbmRpbmdUaWNr
ZXRzLnJlbW92ZSh0aWNrZXQpOworICAgIEFTU0VSVChtX3BlbmRpbmdUaWNrZXRzLmNvbnRhaW5z
KHRpY2tldCkpOworICAgIEFTU0VSVCh0aWNrZXQtPmlzQ2FuY2VsbGVkKCkgfHwgdGlja2V0LT52
bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkgfHwgKFRocmVhZDo6bWF5QmVHQ1Ro
cmVhZCgpICYmIHRpY2tldC0+dm0oKS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpKTsKIAotICAgIGlm
IChyZXN1bHQpCisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBpZiAoIXRpY2tldC0+aXND
YW5jZWxsZWQoKSkgewogICAgICAgICBkYXRhTG9nTG5JZihEZWZlcnJlZFdvcmtUaW1lckludGVy
bmFsOjp2ZXJib3NlLCAiQ2FuY2VsaW5nIHRpY2tldDogIiwgUmF3UG9pbnRlcih0aWNrZXQpKTsK
KyAgICAgICAgdGlja2V0LT5jYW5jZWwoKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICB9
CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGVmZXJyZWRXb3JrVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EZWZlcnJlZFdvcmtUaW1lci5oCShyZXZpc2lvbiAyODc0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EZWZlcnJlZFdvcmtUaW1lci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIlN0cm9uZy5oIgogCiAjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC00NCwxNCArNDQsMjYgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1J1bkxv
b3BUaW1lcjsKIAogICAgIHN0cnVjdCBUaWNrZXREYXRhIHsKKyAgICBwcml2YXRlOgorICAgICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFRpY2tldERh
dGEoVk0mLCBKU09iamVjdCogc2NyaXB0RXhlY3V0aW9uT3duZXIsIFZlY3RvcjxTdHJvbmc8SlND
ZWxsPj4mJiBkZXBlbmRlbmNpZXMpOworCisgICAgICAgIFZNJiB2bSgpOworICAgICAgICBKU09i
amVjdCogdGFyZ2V0KCk7CisKKyAgICAgICAgdm9pZCBjYW5jZWwoKTsKKyAgICAgICAgYm9vbCBp
c0NhbmNlbGxlZCgpIGNvbnN0IHsgcmV0dXJuICFzY3JpcHRFeGVjdXRpb25Pd25lci5nZXQoKTsg
fQorCiAgICAgICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOwogICAgICAg
ICBTdHJvbmc8SlNPYmplY3Q+IHNjcmlwdEV4ZWN1dGlvbk93bmVyOwogICAgIH07CiAKKyAgICB1
c2luZyBUaWNrZXQgPSBUaWNrZXREYXRhKjsKKwogICAgIHZvaWQgZG9Xb3JrKFZNJikgZmluYWw7
CiAKLSAgICB1c2luZyBUaWNrZXQgPSBKU09iamVjdCo7Ci0gICAgdm9pZCBhZGRQZW5kaW5nV29y
ayhWTSYsIFRpY2tldCwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiYmIGRlcGVuZGVuY2llcyk7Cisg
ICAgVGlja2V0IGFkZFBlbmRpbmdXb3JrKFZNJiwgSlNPYmplY3QqIHRhcmdldCwgVmVjdG9yPFN0
cm9uZzxKU0NlbGw+PiYmIGRlcGVuZGVuY2llcyk7CiAgICAgYm9vbCBoYXNQZW5kaW5nV29yayhU
aWNrZXQpOwogICAgIGJvb2wgaGFzRGVwZW5kYW5jeUluUGVuZGluZ1dvcmsoVGlja2V0LCBKU0Nl
bGwqIGRlcGVuZGVuY3kpOwogICAgIGJvb2wgY2FuY2VsUGVuZGluZ1dvcmsoVGlja2V0KTsKQEAg
LTc3LDcgKzg5LDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN0b3BSdW5Mb29wV2hl
bkFsbFRpY2tldHNGaW5pc2ggeyBmYWxzZSB9OwogICAgIGJvb2wgbV9jdXJyZW50bHlSdW5uaW5n
VGFzayB7IGZhbHNlIH07CiAgICAgRGVxdWU8c3RkOjp0dXBsZTxUaWNrZXQsIFRhc2s+PiBtX3Rh
c2tzIFdURl9HVUFSREVEX0JZX0xPQ0sobV90YXNrTG9jayk7Ci0gICAgSGFzaE1hcDxUaWNrZXQs
IFRpY2tldERhdGE+IG1fcGVuZGluZ1RpY2tldHM7CisgICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9w
dHI8VGlja2V0RGF0YT4+IG1fcGVuZGluZ1RpY2tldHM7CiB9OwogCitpbmxpbmUgSlNPYmplY3Qq
IERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhOjp0YXJnZXQoKQoreworICAgIEFTU0VSVCgh
aXNDYW5jZWxsZWQoKSk7CisgICAgcmV0dXJuIGpzQ2FzdDxKU09iamVjdCo+KGRlcGVuZGVuY2ll
cy5sYXN0KCkuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0
cnkuY3BwCShyZXZpc2lvbiAyODc0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDEzICsx
NDksMTUgQEAgdm9pZCBKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5OjpmaW5hbGl6ZVVuYwogICAgICAg
ICByZXR1cm4gIWJ1Y2tldC52YWx1ZS5zaXplKCk7CiAgICAgfSk7CiAKLSAgICBpZiAoIXZtLmRl
ZmVycmVkV29ya1RpbWVyLT5oYXNQZW5kaW5nV29yayh0aGlzKSAmJiAocmVhZGllZENlbGwgfHwg
ZGVhZENvdW50KGxvY2tlcikpKSB7Ci0gICAgICAgIHZtLmRlZmVycmVkV29ya1RpbWVyLT5hZGRQ
ZW5kaW5nV29yayh2bSwgdGhpcywgeyB9KTsKLSAgICAgICAgQVNTRVJUKHZtLmRlZmVycmVkV29y
a1RpbWVyLT5oYXNQZW5kaW5nV29yayh0aGlzKSk7Ci0gICAgICAgIHZtLmRlZmVycmVkV29ya1Rp
bWVyLT5zY2hlZHVsZVdvcmtTb29uKHRoaXMsIFt0aGlzXShEZWZlcnJlZFdvcmtUaW1lcjo6VGlj
a2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmKSB7CisgICAgaWYgKCFtX2hhc0Fs
cmVhZHlTY2hlZHVsZWRXb3JrICYmIChyZWFkaWVkQ2VsbCB8fCBkZWFkQ291bnQobG9ja2VyKSkp
IHsKKyAgICAgICAgYXV0byB0aWNrZXQgPSB2bS5kZWZlcnJlZFdvcmtUaW1lci0+YWRkUGVuZGlu
Z1dvcmsodm0sIHRoaXMsIHsgfSk7CisgICAgICAgIEFTU0VSVCh2bS5kZWZlcnJlZFdvcmtUaW1l
ci0+aGFzUGVuZGluZ1dvcmsodGlja2V0KSk7CisgICAgICAgIHZtLmRlZmVycmVkV29ya1RpbWVy
LT5zY2hlZHVsZVdvcmtTb29uKHRpY2tldCwgW3RoaXNdKERlZmVycmVkV29ya1RpbWVyOjpUaWNr
ZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIHsKICAgICAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAg
ICAgIHRoaXMtPm1faGFzQWxyZWFkeVNjaGVkdWxlZFdvcmsgPSBmYWxzZTsKICAgICAgICAgICAg
IHRoaXMtPnJ1bkZpbmFsaXphdGlvbkNsZWFudXAoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgfSk7
CisgICAgICAgIG1faGFzQWxyZWFkeVNjaGVkdWxlZFdvcmsgPSB0cnVlOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmluYWxp
emF0aW9uUmVnaXN0cnkuaAkocmV2aXNpb24gMjg3NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDYsNiArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAvLyBXZSB1c2UgYSBzZXBhcmF0ZSBsaXN0IGZv
ciBubyB1bnJlZ2lzdGVyIHZhbHVlcyBpbnN0ZWFkIG9mIGEgc3BlY2lhbCBrZXkgaW4gdGhlIHRh
YmxlcyBhYm92ZSBiZWNhdXNlIHRoZSBIYXNoTWFwIGhhcyBhIHRlbmRlbmN5IHRvIHJlYWxsb2Nh
dGUgdW5kZXIgdXMgd2hlbiBpdGVyYXRpbmcuLi4KICAgICBMaXZlUmVnaXN0cmF0aW9ucyBtX25v
VW5yZWdpc3RyYXRpb25MaXZlOwogICAgIERlYWRSZWdpc3RyYXRpb25zIG1fbm9VbnJlZ2lzdHJh
dGlvbkRlYWQ7CisgICAgYm9vbCBtX2hhc0FscmVhZHlTY2hlZHVsZWRXb3JrIHsgZmFsc2UgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAyODc0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmgiCiAKLSNpbmNsdWRlICJEZWZlcnJlZFdv
cmtUaW1lci5oIgogI2luY2x1ZGUgIkpTQmlnSW50LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKQEAgLTQ1LDcgKzQ0
LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIFN0cmVhbWluZ0NvbXBpbGVy
OjpTdHJlYW1pbmdDb21waWxlcihWTSYgdm0sIENvbXBpbGVyTW9kZSBjb21waWxlck1vZGUsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZSogcHJvbWlzZSwgSlNPYmplY3Qq
IGltcG9ydE9iamVjdCkKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX2NvbXBpbGVyTW9kZShjb21w
aWxlck1vZGUpCi0gICAgLCBtX3Byb21pc2UocHJvbWlzZSkKICAgICAsIG1faW5mbyhXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbjo6Y3JlYXRlKCkpCiAgICAgLCBtX3BhcnNlcihtX2luZm8uZ2V0KCks
ICp0aGlzKQogewpAQCAtNTMsMTcgKzUxLDE3IEBAIFN0cmVhbWluZ0NvbXBpbGVyOjpTdHJlYW1p
bmdDb21waWxlcihWTSYKICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZt
LCBnbG9iYWxPYmplY3QpKTsKICAgICBpZiAoaW1wb3J0T2JqZWN0KQogICAgICAgICBkZXBlbmRl
bmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBpbXBvcnRPYmplY3QpKTsKLSAgICB2bS5k
ZWZlcnJlZFdvcmtUaW1lci0+YWRkUGVuZGluZ1dvcmsodm0sIHByb21pc2UsIFdURk1vdmUoZGVw
ZW5kZW5jaWVzKSk7Ci0gICAgQVNTRVJUKHZtLmRlZmVycmVkV29ya1RpbWVyLT5oYXNQZW5kaW5n
V29yayhwcm9taXNlKSk7Ci0gICAgQVNTRVJUKHZtLmRlZmVycmVkV29ya1RpbWVyLT5oYXNEZXBl
bmRhbmN5SW5QZW5kaW5nV29yayhwcm9taXNlLCBnbG9iYWxPYmplY3QpKTsKLSAgICBBU1NFUlQo
IWltcG9ydE9iamVjdCB8fCB2bS5kZWZlcnJlZFdvcmtUaW1lci0+aGFzRGVwZW5kYW5jeUluUGVu
ZGluZ1dvcmsocHJvbWlzZSwgaW1wb3J0T2JqZWN0KSk7CisgICAgbV90aWNrZXQgPSB2bS5kZWZl
cnJlZFdvcmtUaW1lci0+YWRkUGVuZGluZ1dvcmsodm0sIHByb21pc2UsIFdURk1vdmUoZGVwZW5k
ZW5jaWVzKSk7CisgICAgQVNTRVJUKHZtLmRlZmVycmVkV29ya1RpbWVyLT5oYXNQZW5kaW5nV29y
ayhtX3RpY2tldCkpOworICAgIEFTU0VSVCh2bS5kZWZlcnJlZFdvcmtUaW1lci0+aGFzRGVwZW5k
YW5jeUluUGVuZGluZ1dvcmsobV90aWNrZXQsIGdsb2JhbE9iamVjdCkpOworICAgIEFTU0VSVCgh
aW1wb3J0T2JqZWN0IHx8IHZtLmRlZmVycmVkV29ya1RpbWVyLT5oYXNEZXBlbmRhbmN5SW5QZW5k
aW5nV29yayhtX3RpY2tldCwgaW1wb3J0T2JqZWN0KSk7CiB9CiAKIFN0cmVhbWluZ0NvbXBpbGVy
Ojp+U3RyZWFtaW5nQ29tcGlsZXIoKQogewotICAgIGlmIChtX3Byb21pc2UpIHsKLSAgICAgICAg
YXV0byogcHJvbWlzZSA9IHN0ZDo6ZXhjaGFuZ2UobV9wcm9taXNlLCBudWxscHRyKTsKLSAgICAg
ICAgbV92bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbXShE
ZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYm
KSBtdXRhYmxlIHsgfSk7CisgICAgaWYgKG1fdGlja2V0KSB7CisgICAgICAgIGF1dG8gdGlja2V0
ID0gc3RkOjpleGNoYW5nZShtX3RpY2tldCwgbnVsbHB0cik7CisgICAgICAgIG1fdm0uZGVmZXJy
ZWRXb3JrVGltZXItPnNjaGVkdWxlV29ya1Nvb24odGlja2V0LCBbXShEZWZlcnJlZFdvcmtUaW1l
cjo6VGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmKSBtdXRhYmxlIHsgfSk7
CiAgICAgfQogfQogCkBAIC0xMzgsMTEgKzEzNiwxMSBAQCB2b2lkIFN0cmVhbWluZ0NvbXBpbGVy
OjpkaWRDb21wbGV0ZSgpCiAgICAgfTsKIAogICAgIGF1dG8gcmVzdWx0ID0gbWFrZVZhbGlkYXRp
b25SZXN1bHQoKm1fcGxhbik7Ci0gICAgYXV0byogcHJvbWlzZSA9IHN0ZDo6ZXhjaGFuZ2UobV9w
cm9taXNlLCBudWxscHRyKTsKKyAgICBhdXRvIHRpY2tldCA9IHN0ZDo6ZXhjaGFuZ2UobV90aWNr
ZXQsIG51bGxwdHIpOwogICAgIHN3aXRjaCAobV9jb21waWxlck1vZGUpIHsKICAgICBjYXNlIENv
bXBpbGVyTW9kZTo6VmFsaWRhdGlvbjogewotICAgICAgICBtX3ZtLmRlZmVycmVkV29ya1RpbWVy
LT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtyZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCldKERl
ZmVycmVkV29ya1RpbWVyOjpUaWNrZXQgdGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0
RGF0YSYmIHRpY2tldERhdGEpIG11dGFibGUgewotICAgICAgICAgICAgSlNQcm9taXNlKiBwcm9t
aXNlID0ganNDYXN0PEpTUHJvbWlzZSo+KHRpY2tldCk7CisgICAgICAgIG1fdm0uZGVmZXJyZWRX
b3JrVGltZXItPnNjaGVkdWxlV29ya1Nvb24odGlja2V0LCBbcmVzdWx0ID0gV1RGTW92ZShyZXN1
bHQpXShEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0IHRpY2tldCwgRGVmZXJyZWRXb3JrVGltZXI6
OlRpY2tldERhdGEmJiB0aWNrZXREYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIEpTUHJvbWlz
ZSogcHJvbWlzZSA9IGpzQ2FzdDxKU1Byb21pc2UqPih0aWNrZXQtPnRhcmdldCgpKTsKICAgICAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPih0aWNrZXREYXRhLmRlcGVuZGVuY2llc1swXS5nZXQoKSk7CiAgICAgICAgICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNjAsOCArMTU4LDggQEAgdm9pZCBTdHJlYW1pbmdDb21w
aWxlcjo6ZGlkQ29tcGxldGUoKQogICAgIH0KIAogICAgIGNhc2UgQ29tcGlsZXJNb2RlOjpGdWxs
Q29tcGlsZTogewotICAgICAgICBtX3ZtLmRlZmVycmVkV29ya1RpbWVyLT5zY2hlZHVsZVdvcmtT
b29uKHByb21pc2UsIFtyZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCldKERlZmVycmVkV29ya1RpbWVy
OjpUaWNrZXQgdGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmIHRpY2tldERh
dGEpIG11dGFibGUgewotICAgICAgICAgICAgSlNQcm9taXNlKiBwcm9taXNlID0ganNDYXN0PEpT
UHJvbWlzZSo+KHRpY2tldCk7CisgICAgICAgIG1fdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVk
dWxlV29ya1Nvb24odGlja2V0LCBbcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpXShEZWZlcnJlZFdv
cmtUaW1lcjo6VGlja2V0IHRpY2tldCwgRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGEmJiB0
aWNrZXREYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IGpz
Q2FzdDxKU1Byb21pc2UqPih0aWNrZXQtPnRhcmdldCgpKTsKICAgICAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aWNrZXREYXRh
LmRlcGVuZGVuY2llc1swXS5nZXQoKSk7CiAgICAgICAgICAgICBKU09iamVjdCogaW1wb3J0T2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odGlja2V0RGF0YS5kZXBlbmRlbmNpZXNbMV0uZ2V0KCkp
OwogICAgICAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMjA3LDggKzIw
NSwxNCBAQCB2b2lkIFN0cmVhbWluZ0NvbXBpbGVyOjpmYWlsKEpTR2xvYmFsT2JqCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIG1fZWFnZXJGYWlsZWQgPSB0cnVlOwogICAgIH0KLSAgICBh
dXRvKiBwcm9taXNlID0gc3RkOjpleGNoYW5nZShtX3Byb21pc2UsIG51bGxwdHIpOwotICAgIG1f
dm0uZGVmZXJyZWRXb3JrVGltZXItPmNhbmNlbFBlbmRpbmdXb3JrKHByb21pc2UpOworICAgIGF1
dG8gdGlja2V0ID0gc3RkOjpleGNoYW5nZShtX3RpY2tldCwgbnVsbHB0cik7CisgICAgSlNQcm9t
aXNlKiBwcm9taXNlID0ganNDYXN0PEpTUHJvbWlzZSo+KHRpY2tldC0+dGFyZ2V0KCkpOworICAg
IC8vIFRoZSBwZW5kaW5nIHdvcmsgVGlja2V0RGF0YSB3YXMga2VlcGluZyB0aGUgcHJvbWlzZSBh
bGl2ZS4gV2UgbmVlZCB0bworICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyByZWFjaGFibGUgZnJvbSB0
aGUgc3RhY2sgYmVmb3JlIHdlIHJlbW92ZSBpdCBmcm9tIHRoZQorICAgIC8vIHBlbmRpbmcgd29y
ayBsaXN0LiBOb3RlOiBtX3RpY2tldCBzdG9yZXMgaXQgYXMgYSBQYWNrZWRQdHIsIHdoaWNoIGlz
IG5vdAorICAgIC8vIHNjYW5uYWJsZSBieSB0aGUgR0MuCisgICAgV1RGOjpjb21waWxlckZlbmNl
KCk7CisgICAgbV92bS5kZWZlcnJlZFdvcmtUaW1lci0+Y2FuY2VsUGVuZGluZ1dvcmsodGlja2V0
KTsKICAgICBwcm9taXNlLT5yZWplY3QoZ2xvYmFsT2JqZWN0LCBlcnJvcik7CiB9CiAKQEAgLTIy
MSw4ICsyMjUsOCBAQCB2b2lkIFN0cmVhbWluZ0NvbXBpbGVyOjpjYW5jZWwoKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBtX2VhZ2VyRmFpbGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgYXV0
byogcHJvbWlzZSA9IHN0ZDo6ZXhjaGFuZ2UobV9wcm9taXNlLCBudWxscHRyKTsKLSAgICBtX3Zt
LmRlZmVycmVkV29ya1RpbWVyLT5jYW5jZWxQZW5kaW5nV29yayhwcm9taXNlKTsKKyAgICBhdXRv
IHRpY2tldCA9IHN0ZDo6ZXhjaGFuZ2UobV90aWNrZXQsIG51bGxwdHIpOworICAgIG1fdm0uZGVm
ZXJyZWRXb3JrVGltZXItPmNhbmNlbFBlbmRpbmdXb3JrKHRpY2tldCk7CiB9CiAKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVy
LmgJKHJldmlzaW9uIDI4NzQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
dHJlYW1pbmdDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJEZWZlcnJlZFdvcmtUaW1lci5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Miw3ICs3Myw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3RocmVhZGVkQ29tcGlsYXRpb25TdGFydGVkIHsgZmFs
c2UgfTsKICAgICBMb2NrIG1fbG9jazsKICAgICB1bnNpZ25lZCBtX3JlbWFpbmluZ0NvbXBpbGF0
aW9uUmVxdWVzdHMgeyAwIH07Ci0gICAgSlNQcm9taXNlKiBtX3Byb21pc2U7IC8vIFJhdyBwb2lu
dGVyLCBidXQgaGVsZCBieSBEZWZlcnJlZFdvcmtUaW1lci4KKyAgICBEZWZlcnJlZFdvcmtUaW1l
cjo6VGlja2V0IG1fdGlja2V0OwogICAgIFJlZjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4gbV9p
bmZvOwogICAgIFN0cmVhbWluZ1BhcnNlciBtX3BhcnNlcjsKICAgICBSZWZQdHI8TExJbnRQbGFu
PiBtX3BsYW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5LmNwcAkocmV2aXNpb24gMjg3NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw5ICsxNzAs
OSBAQCB2b2lkIEpTV2ViQXNzZW1ibHk6OndlYkFzc2VtYmx5TW9kdWxlVmFsCiAgICAgVmVjdG9y
PFN0cm9uZzxKU0NlbGw+PiBkZXBlbmRlbmNpZXM7CiAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChT
dHJvbmc8SlNDZWxsPih2bSwgZ2xvYmFsT2JqZWN0KSk7CiAKLSAgICB2bS5kZWZlcnJlZFdvcmtU
aW1lci0+YWRkUGVuZGluZ1dvcmsodm0sIHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7
Ci0gICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RGTW92
ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihb
cHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1
bHQmJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+c2No
ZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBX
VEZNb3ZlKHJlc3VsdCksICZ2bV0oRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCwgRGVmZXJyZWRX
b3JrVGltZXI6OlRpY2tldERhdGEmJikgbXV0YWJsZSB7CisgICAgYXV0byB0aWNrZXQgPSB2bS5k
ZWZlcnJlZFdvcmtUaW1lci0+YWRkUGVuZGluZ1dvcmsodm0sIHByb21pc2UsIFdURk1vdmUoZGVw
ZW5kZW5jaWVzKSk7CisgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNtQ29u
dGV4dCwgV1RGTW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2Fs
bGJhY2tUeXBlPihbdGlja2V0LCBwcm9taXNlLCBnbG9iYWxPYmplY3QsICZ2bV0gKFdhc206Ok1v
ZHVsZTo6VmFsaWRhdGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIHZtLmRl
ZmVycmVkV29ya1RpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHRpY2tldCwgW3Byb21pc2UsIGdsb2Jh
bE9iamVjdCwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpLCAmdm1dKERlZmVycmVkV29ya1RpbWVy
OjpUaWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIG11dGFibGUgewogICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICAg
ICAgSlNWYWx1ZSBtb2R1bGUgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSwg
V1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpIHsKQEAgLTIwMiwxMSArMjAyLDExIEBAIHN0YXRpYyB2b2lkIGluc3RhbnRpYXRlKFZN
JiB2bSwgSlNHbG9iYWwKICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZt
LCBwcm9taXNlKSk7CiAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2bSwg
aW1wb3J0T2JqZWN0KSk7CiAKLSAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+YWRkUGVuZGluZ1dv
cmsodm0sIGluc3RhbmNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworICAgIGF1dG8gdGlja2V0
ID0gdm0uZGVmZXJyZWRXb3JrVGltZXItPmFkZFBlbmRpbmdXb3JrKHZtLCBpbnN0YW5jZSwgV1RG
TW92ZShkZXBlbmRlbmNpZXMpKTsKICAgICAvLyBOb3RlOiBUaGlzIGNvbXBsZXRpb24gdGFzayBt
YXkgb3IgbWF5IG5vdCBnZXQgY2FsbGVkIGltbWVkaWF0ZWx5LgotICAgIG1vZHVsZS0+bW9kdWxl
KCkuY29tcGlsZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgaW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwg
Y3JlYXRlU2hhcmVkVGFzazxXYXNtOjpDYWxsZWVHcm91cDo6Q2FsbGJhY2tUeXBlPihbcHJvbWlz
ZSwgaW5zdGFuY2UsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCByZXNvbHZlS2luZCwgY3JlYXRpb25N
b2RlLCAmdm1dIChSZWY8V2FzbTo6Q2FsbGVlR3JvdXA+JiYgcmVmQ2FsbGVlR3JvdXApIG11dGFi
bGUgeworICAgIG1vZHVsZS0+bW9kdWxlKCkuY29tcGlsZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwg
aW5zdGFuY2UtPm1lbW9yeU1vZGUoKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNtOjpDYWxsZWVHcm91
cDo6Q2FsbGJhY2tUeXBlPihbdGlja2V0LCBwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBpbXBv
cnRPYmplY3QsIHJlc29sdmVLaW5kLCBjcmVhdGlvbk1vZGUsICZ2bV0gKFJlZjxXYXNtOjpDYWxs
ZWVHcm91cD4mJiByZWZDYWxsZWVHcm91cCkgbXV0YWJsZSB7CiAgICAgICAgIFJlZlB0cjxXYXNt
OjpDYWxsZWVHcm91cD4gY2FsbGVlR3JvdXAgPSBXVEZNb3ZlKHJlZkNhbGxlZUdyb3VwKTsKLSAg
ICAgICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVkdWxlV29ya1Nvb24oaW5zdGFuY2UsIFtw
cm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIHJlc29sdmVLaW5kLCBjcmVh
dGlvbk1vZGUsICZ2bSwgY2FsbGVlR3JvdXAgPSBXVEZNb3ZlKGNhbGxlZUdyb3VwKV0oRGVmZXJy
ZWRXb3JrVGltZXI6OlRpY2tldCwgRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGEmJikgbXV0
YWJsZSB7CisgICAgICAgIHZtLmRlZmVycmVkV29ya1RpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHRp
Y2tldCwgW3Byb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgcmVzb2x2ZUtp
bmQsIGNyZWF0aW9uTW9kZSwgJnZtLCBjYWxsZWVHcm91cCA9IFdURk1vdmUoY2FsbGVlR3JvdXAp
XShEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0
YSYmKSBtdXRhYmxlIHsKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBpbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgICAgICByZXNvbHZlKHZtLCBnbG9i
YWxPYmplY3QsIHByb21pc2UsIGluc3RhbmNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgY2FsbGVl
R3JvdXAucmVsZWFzZU5vbk51bGwoKSwgcmVzb2x2ZUtpbmQsIGNyZWF0aW9uTW9kZSk7CiAgICAg
ICAgIH0pOwpAQCAtMjI3LDkgKzIyNyw5IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVBbmRJbnN0YW50
aWF0ZShWTSYgdm0KICAgICBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKICAg
ICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBpbXBvcnRPYmplY3QpKTsK
ICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCBtb2R1bGVLZXlDZWxs
KSk7Ci0gICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPmFkZFBlbmRpbmdXb3JrKHZtLCBwcm9taXNl
LCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOwotICAgIFdhc206Ok1vZHVsZTo6dmFsaWRhdGVBc3lu
Yygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVkVGFzazxXYXNt
OjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGltcG9ydE9iamVjdCwgbW9kdWxlS2V5
Q2VsbCwgZ2xvYmFsT2JqZWN0LCByZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlLCAmdm1dIChXYXNt
OjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICB2
bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1bGVXb3JrU29vbihwcm9taXNlLCBbcHJvbWlzZSwg
aW1wb3J0T2JqZWN0LCBtb2R1bGVLZXlDZWxsLCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1v
dmUocmVzdWx0KSwgcmVzb2x2ZUtpbmQsIGNyZWF0aW9uTW9kZSwgJnZtXShEZWZlcnJlZFdvcmtU
aW1lcjo6VGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmKSBtdXRhYmxlIHsK
KyAgICBhdXRvIHRpY2tldCA9IHZtLmRlZmVycmVkV29ya1RpbWVyLT5hZGRQZW5kaW5nV29yayh2
bSwgcHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKKyAgICBXYXNtOjpNb2R1bGU6OnZh
bGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJl
ZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFt0aWNrZXQsIHByb21pc2UsIGltcG9y
dE9iamVjdCwgbW9kdWxlS2V5Q2VsbCwgZ2xvYmFsT2JqZWN0LCByZXNvbHZlS2luZCwgY3JlYXRp
b25Nb2RlLCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQmJiByZXN1bHQpIG11
dGFibGUgeworICAgICAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1bGVXb3JrU29vbih0
aWNrZXQsIFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIG1vZHVsZUtleUNlbGwsIGdsb2JhbE9iamVj
dCwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpLCByZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlLCAm
dm1dKERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXRE
YXRhJiYpIG11dGFibGUgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgICAgICAgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gSlNX
ZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPndlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCksIFdURk1vdmUocmVzdWx0KSk7CiAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CkBAIC0yNzEsOSArMjcx
LDkgQEAgdm9pZCBKU1dlYkFzc2VtYmx5Ojp3ZWJBc3NlbWJseU1vZHVsZUlucwogICAgIFZlY3Rv
cjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQo
U3Ryb25nPEpTQ2VsbD4odm0sIGltcG9ydE9iamVjdCkpOwogICAgIGRlcGVuZGVuY2llcy5hcHBl
bmQoU3Ryb25nPEpTQ2VsbD4odm0sIGdsb2JhbE9iamVjdCkpOwotICAgIHZtLmRlZmVycmVkV29y
a1RpbWVyLT5hZGRQZW5kaW5nV29yayh2bSwgcHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMp
KTsKLSAgICBXYXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZN
b3ZlKHNvdXJjZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+
KFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgJnZtXSAoV2FzbTo6TW9kdWxl
OjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAgdm0uZGVmZXJy
ZWRXb3JrVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGltcG9ydE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksICZ2bV0oRGVmZXJy
ZWRXb3JrVGltZXI6OlRpY2tldCwgRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGEmJikgbXV0
YWJsZSB7CisgICAgYXV0byB0aWNrZXQgPSB2bS5kZWZlcnJlZFdvcmtUaW1lci0+YWRkUGVuZGlu
Z1dvcmsodm0sIHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7CisgICAgV2FzbTo6TW9k
dWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RGTW92ZShzb3VyY2UpLCBjcmVh
dGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbdGlja2V0LCBwcm9taXNl
LCBpbXBvcnRPYmplY3QsIGdsb2JhbE9iamVjdCwgJnZtXSAoV2FzbTo6TW9kdWxlOjpWYWxpZGF0
aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgdm0uZGVmZXJyZWRXb3JrVGlt
ZXItPnNjaGVkdWxlV29ya1Nvb24odGlja2V0LCBbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBnbG9i
YWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgJnZtXShEZWZlcnJlZFdvcmtUaW1l
cjo6VGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YSYmKSBtdXRhYmxlIHsKICAg
ICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAg
ICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNy
ZWF0ZVN0dWIodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseU1vZHVs
ZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447905</attachid>
            <date>2021-12-23 13:58:57 -0800</date>
            <delta_ts>2021-12-23 22:00:10 -0800</delta_ts>
            <desc>[fast-cq] patch for landing.</desc>
            <filename>bug-234628.patch</filename>
            <type>text/plain</type>
            <size>31674</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg3NDExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk3IEBA
CisyMDIxLTEyLTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIERlZmVycmVkV29ya1RpbWVyOjphZGRQZW5kaW5nV29yaygpIHJldHVybiBhIFRpY2tldC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDYyOAor
ICAgICAgICByZGFyOi8vODQyNjA0MjkKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6
dWtpLgorCisgICAgICAgIDEuIE1ha2UgVGlja2V0IGEgdW5pcXVlIHRva2VuIGluc3RlYWQgb2Yg
dGhlIEpTT2JqZWN0KiB0YXJnZXQgb2JqZWN0LgorICAgICAgICAgICBUaGUgVGlja2V0IGlzIG5v
dyBhIHBvaW50ZXIgdG8gdGhlIFRpY2tldERhdGEgaW4gdGhlIHBlbmRpbmcgd29yayBsaXN0Lgor
CisgICAgICAgIDIuIEluc3RlYWQgb2YgdGFraW5nIGEgVGlja2V0IGFyZ3VtZW50LCBEZWZlcnJl
ZFdvcmtUaW1lcjo6YWRkUGVuZGluZ1dvcmsoKSBub3cKKyAgICAgICAgICAgdGFrZXMgYSBKU09i
amVjdCogYHRhcmdldGAgYXJndW1lbnQgZXhwbGljaXRseSwgYW5kIHJldHVybnMgdGhlIFRpY2tl
dCBmb3IgdGhlCisgICAgICAgICAgIGFkZGVkIFRpY2tldERhdGEgaW5zdGVhZC4KKworICAgICAg
ICAgICBBbGwgdGhlIHJlbGV2YW50IERlZmVycmVkV29ya1RpbWVyIEFQSVMgYWxyZWFkeSB0YWtl
IGEgVGlja2V0IGFzIGFuIGFyZ3VtZW50LgorICAgICAgICAgICBUaGlzIGVuc3VyZXMgdGhhdCBh
ZGRQZW5kaW5nV29yaygpIGlzIGNhbGxlZCBiZWZvcmUgd2Ugc3RhcnQgZG9pbmcgd29yayB3aXRo
CisgICAgICAgICAgIHRoZXNlIEFQSXMgKGVzcGVjaWFsbHkgc2NoZWR1bGVXb3JrU29vbigpKS4K
KworICAgICAgICAzLiBQcmV2aW91c2x5LCBhZGRQZW5kaW5nV29yaygpIHdpbGwgb25seSBzYXZl
IG9uZSBpbnN0YW5jZSBvZiBUaWNrZXREYXRhIGZvcgorICAgICAgICAgICBhIGdpdmVuIEpTT2Jq
ZWN0KiBrZXkuICBXaXRoIHRoaXMgcGF0Y2gsIHdlJ2xsIHJlZ2lzdGVyIGEgbmV3IFRpY2tldERh
dGEKKyAgICAgICAgICAgaW5zdGFuY2UgZm9yIGV2ZXJ5IGNhbGwgdG8gYWRkUGVuZGluZ1dvcmso
KSwgYW5kIHJldHVybiBhIHVuaXF1ZSBUaWNrZXQgZm9yIGl0LgorCisgICAgICAgICAgIFRoaXMg
aXMgbmVlZGVkIGJlY2F1c2UgaXQgbWF5IGJlIHBvc3NpYmxlIGZvciAyIGRpZmZlcmVudCBjbGll
bnRzIHRvIGNhbGwKKyAgICAgICAgICAgYWRkUGVuZGluZ1dvcmsoKSBhbmQgc2NoZWR1bGVXb3Jr
U29vbigpIHdpdGggdGhlIHNhbWUgdGFyZ2V0IEpTT2JqZWN0KiBidXQgd2l0aAorICAgICAgICAg
ICBkaWZmZXJlbnQgc2V0cyBvZiBkZXBlbmRlbmNpZXMuCisKKyAgICAgICAgICAgU2Vjb25kbHks
IGV2ZW4gaXMgdGhlIGJvdGggc2V0cyBvZiBkZXBlbmRlbmNpZXMgYXJlIGlkZW50aWNhbCwgYSBj
bGllbnQgbWF5CisgICAgICAgICAgIGNhbGwgYWRkUGVuZGluZ1dvcmsoKSBhbmQgc2NoZWR1bGVX
b3JrU29vbigpIHdpdGggdGhlIHNhbWUgSlNPYmplY3QqIHRhcmdldAorICAgICAgICAgICBtb3Jl
IHRoYW4gb25jZSBiZWNhdXNlIGl0IGludGVuZGVkIHRvIHNjaGVkdWxlIG1vcmUgdGhhbiAxIHRh
c2sgdG8gcnVuLgorCisgICAgICAgICAgIE5vdGUgdGhhdCBEZWZlcnJlZFdvcmtUaW1lcjo6ZG9X
b3JrKCkgY29uc3VtZXMgdGhlIGNvcnJlc3BvbmRpbmcgVGlja2V0RGF0YQorICAgICAgICAgICAo
aS5lLiByZW1vdmVzIGl0IGZyb20gdGhlIG1fcGVuZGluZ1RpY2tldHMgbGlzdCkgZm9yIGVhY2gg
dGFzayBhcyBpdCBpcyBydW4uCisgICAgICAgICAgIFRvIGVuc3VyZSB0aGF0IHRoZSBkZXBlbmRl
bmNpZXMgZm9yIGVhY2ggdGFzayBpcyBwcm90ZWN0ZWQsIHdlJ2xsIGVpdGhlciBuZWVkCisgICAg
ICAgICAgIHRvIHJlZiBjb3VudCB0aGUgVGlja2V0RGF0YSBmb3IgdGhlIHNhbWUgdGFyZ2V0IG9i
amVjdCAoYW5kIGhvbGQgb2ZmIG9uIHJlbW92aW5nCisgICAgICAgICAgIGl0IGZyb20gdGhlIGxp
c3QpLCBvciB3ZSdsbCBuZWVkIHRvIHJlZ2lzdGVyIGEgZGlmZmVyZW50IFRpY2tldERhdGEgaW5z
dGFuY2UKKyAgICAgICAgICAgZm9yIGVhY2ggdGFzay4gIFJlZiBjb3VudGluZyBjYW4gc29sdmUg
dGhlIHNlY29uZCBpc3N1ZSBhYm92ZSwgYnV0IGRvZXMgbm90CisgICAgICAgICAgIHNvbHZlIHRo
ZSBmaXJzdC4gIFNvLCB0aGlzIHBhdGNoIGdvZXMgd2l0aCB0aGUgbW9yZSBnZW5lcmljIHNvbHV0
aW9uIHRvIGFsbG93CisgICAgICAgICAgIGVhY2ggdGFzayB0byBoYXZlIGl0cyBvd24gVGlja2V0
RGF0YSBpbnN0YW5jZSAoYW5kLCBpdHMgb3duIHVuaXF1ZSBUaWNrZXQpLgorCisgICAgICAgIDQu
IFByZXZpb3VzbHksIGlmIHRoZSBjbGllbnQgY2FuY2VscyBwZW5kaW5nIHdvcmssIHdlIHdvdWxk
IHJlbW92ZSB0aGUgVGlja2V0RGF0YQorICAgICAgICAgICBpbW1lZGlhdGVseSBmcm9tIHRoZSBt
X3BlbmRpbmdUaWNrZXRzIGxpc3QuICBUaGlzIG9wZW5zIHVwIGFuIG9wcG9ydHVuaXR5IGZvcgor
ICAgICAgICAgICB0aGUgc2FtZSBUaWNrZXREYXRhIG1lbW9yeSB0byBiZSByZS1hbGxvY2F0ZWQg
YnkgYW5vdGhlciBjbGllbnQuICBUaGlzLCBpbiB0dXJuLAorICAgICAgICAgICB3b3VsZCBtYWtl
IHRoZSBUaWNrZXQgdG9rZW4gbm90IHVuaXF1ZSBhbmQgcG90ZW50aWFsbHkgYWxsb3cgYSBjYW5j
ZWxsZWQgdGlja2V0CisgICAgICAgICAgIHRvIGJlIHJldXNlZCBiZWZvcmUgRGVmZXJyZWRXb3Jr
VGltZXI6OmRvV29yaygpIGlzIGNhbGxlZC4KKworICAgICAgICAgICBUaGlzIHBhdGNoIGNoYW5n
ZXMgRGVmZXJyZWRXb3JrVGltZXI6OmNhbmNlbFBlbmRpbmdXb3JrKCkgdG8gb25seSBjbGVhciB0
aGUKKyAgICAgICAgICAgY29udGVudHMgb2YgdGhlIFRpY2tldERhdGEgaW5zdGVhZC4gIFRpY2tl
dERhdGE6OnNjcmlwdEV4ZWN1dGlvbk93bmVyIGJlaW5nCisgICAgICAgICAgIG51bGwgaXMgdXNl
ZCBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIHRpY2tldCBoYXMgYmVlbiBjYW5jZWxsZWQuICBT
aW5jZSB0aGUKKyAgICAgICAgICAgVGlja2V0RGF0YSBpdHNlbGYgaXMgbm90ICJmcmVlZCIgeWV0
LCBhbGwgVGlja2V0RGF0YSB3aWxsIHJlbWFpbiB1bmlxdWUgdW50aWwKKyAgICAgICAgICAgRGVm
ZXJyZWRXb3JrVGltZXI6OmRvV29yaygpLgorCisgICAgICAgICAgIENvbnNlcXVlbnRseSwgRGVm
ZXJyZWRXb3JrVGltZXI6OmRvV29yaygpIHdpbGwgbm93IGNoZWNrIGZvciBjYW5jZWxsZWQgdGlj
a2V0cworICAgICAgICAgICBhbmQgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbV9wZW5kaW5nVGlja2V0
cyBsaXN0LgorCisgICAgICAgIDUuIEpTRmluYWxpemF0aW9uUmVnaXN0cnkgd2FzIHByZXZpb3Vz
bHkgY2FsbGluZyBEZWZlcnJlZFdvcmtUaW1lcjo6aGFzUGVuZGluZ1dvcmsoKQorICAgICAgICAg
ICB0byBjaGVjayBpZiBpdCBoYXMgYWxyZWFkeSBzY2hlZHVsZWQgYSB0YXNrLCBzbyBhcyBub3Qg
dG8gcmVzY2hlZHVsZSBhZ2FpbiB1bnRpbAorICAgICAgICAgICBhZnRlciB0aGUgcHJldmlvdXNs
eSBzY2hlZHVsZWQgdGFzayBoYXMgYmVlbiBydW4uICBUaGlzIGRvZXMgbm90IHBsYXkgbmljZQor
ICAgICAgICAgICB3aXRoIHRoZSBuZXcgVGlja2V0IEFQSSwgYmVjYXVzZSB0aGlzIGhhc1BlbmRp
bmdXb3JrKCkgY2hlY2sgbmVlZHMgdG8gYmUgZG9uZQorICAgICAgICAgICBiZWZvcmUgY2FsbGlu
ZyBhZGRQZW5kaW5nV29yaygpLCBhbmQgaGVuY2UsIHRoZSBUaWNrZXQgaXMgbm90IGF2YWlsYWJs
ZSB5ZXQuCisKKyAgICAgICAgICAgRm9ydHVuYXRlbHksIEpTRmluYWxpemF0aW9uUmVnaXN0cnkg
c2hvdWxkIGtub3cgaWYgaXQgaGFzIGFscmVhZHkgc2NoZWR1bGVkCisgICAgICAgICAgIGEgdGFz
ayBpdHNlbGYuICBUaGlzIHBhdGNoIGFkZHMgYSBtX2hhc0FscmVhZHlTY2hlZHVsZWRXb3JrIGZs
YWcgdG8gCisgICAgICAgICAgIEpTRmluYWxpemF0aW9uUmVnaXN0cnkgdGhhdCBjYW4gYmUgdXNl
ZCBmb3IgdGhpcyBjaGVjayBpbnN0ZWFkLgorCisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAg
KEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9EZWZlcnJlZFdv
cmtUaW1lci5jcHA6CisgICAgICAgIChKU0M6OkRlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRh
OjpUaWNrZXREYXRhKToKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERh
dGE6OnZtKToKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGE6OmNh
bmNlbCk6CisgICAgICAgIChKU0M6OkRlZmVycmVkV29ya1RpbWVyOjpkb1dvcmspOgorICAgICAg
ICAoSlNDOjpEZWZlcnJlZFdvcmtUaW1lcjo6YWRkUGVuZGluZ1dvcmspOgorICAgICAgICAoSlND
OjpEZWZlcnJlZFdvcmtUaW1lcjo6aGFzUGVuZGluZ1dvcmspOgorICAgICAgICAoSlNDOjpEZWZl
cnJlZFdvcmtUaW1lcjo6aGFzRGVwZW5kYW5jeUluUGVuZGluZ1dvcmspOgorICAgICAgICAoSlND
OjpEZWZlcnJlZFdvcmtUaW1lcjo6Y2FuY2VsUGVuZGluZ1dvcmspOgorICAgICAgICAqIHJ1bnRp
bWUvRGVmZXJyZWRXb3JrVGltZXIuaDoKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRXb3JrVGltZXI6
OlRpY2tldERhdGE6OnRhcmdldCk6CisgICAgICAgICogcnVudGltZS9KU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNGaW5hbGl6YXRpb25SZWdpc3RyeTo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdp
c3RyeS5oOgorICAgICAgICAqIHdhc20vV2FzbVN0cmVhbWluZ0NvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI6OlN0cmVhbWluZ0NvbXBpbGVyKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI6On5TdHJlYW1pbmdDb21waWxlcik6
CisgICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ0NvbXBpbGVyOjpkaWRDb21wbGV0ZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OlN0cmVhbWluZ0NvbXBpbGVyOjpmYWlsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6U3RyZWFtaW5nQ29tcGlsZXI6OmNhbmNlbCk6CisgICAgICAgICogd2FzbS9XYXNt
U3RyZWFtaW5nQ29tcGlsZXIuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3Bw
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5Ojp3ZWJBc3NlbWJseU1vZHVsZVZhbGlkYXRl
QXN5bmMpOgorICAgICAgICAoSlNDOjppbnN0YW50aWF0ZSk6CisgICAgICAgIChKU0M6OmNvbXBp
bGVBbmRJbnN0YW50aWF0ZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHk6OndlYkFzc2Vt
Ymx5TW9kdWxlSW5zdGFudGluYXRlQXN5bmMpOgorCiAyMDIxLTEyLTIyICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIExMSW50IHNob3VsZCBsb29wIE9TUiBpbnRv
IEJCUSBhbmQgQkJRIHNob3VsZCBsb29wIE9TUiBpbnRvIE9NRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDI4NzQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTA0LDggKzI1MDQsOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25TZXRUaW1lCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJGaXJzdCBhcmd1bWVudCBpcyBub3QgYSBKUyBmdW5jdGlvbiJf
cyk7CiAKICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgbG9vayBhdCB0aGUgdGltZW91dCBwYXJhbWV0
ZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgc2NoZWR1bGUgd29yayBsYXRlciBBUEkuCi0gICAg
dm0uZGVmZXJyZWRXb3JrVGltZXItPmFkZFBlbmRpbmdXb3JrKHZtLCBjYWxsYmFjaywgeyB9KTsK
LSAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1bGVXb3JrU29vbihjYWxsYmFjaywgW2Nh
bGxiYWNrXShEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0LCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlj
a2V0RGF0YSYmKSB7CisgICAgYXV0byB0aWNrZXQgPSB2bS5kZWZlcnJlZFdvcmtUaW1lci0+YWRk
UGVuZGluZ1dvcmsodm0sIGNhbGxiYWNrLCB7IH0pOworICAgIHZtLmRlZmVycmVkV29ya1RpbWVy
LT5zY2hlZHVsZVdvcmtTb29uKHRpY2tldCwgW2NhbGxiYWNrXShEZWZlcnJlZFdvcmtUaW1lcjo6
VGlja2V0KSB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsYmFj
ay0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAg
ICAgICAgIGNhbGwoZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaywganNVbmRlZmluZWQoKSwgYXJncywg
IllvdSBzaG91bGRuJ3Qgc2VlIHRoaXMuLi4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RlZmVycmVkV29ya1RpbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EZWZlcnJlZFdvcmtUaW1lci5jcHAJKHJldmlzaW9uIDI4NzQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RlZmVycmVkV29ya1RpbWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM3LDI1IEBAIG5hbWVzcGFjZSBEZWZlcnJlZFdv
cmtUaW1lckludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0K
IAoraW5saW5lIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhOjpUaWNrZXREYXRhKFZNJiB2
bSwgSlNPYmplY3QqIHNjcmlwdEV4ZWN1dGlvbk93bmVyLCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+
JiYgZGVwZW5kZW5jaWVzKQorICAgIDogZGVwZW5kZW5jaWVzKFdURk1vdmUoZGVwZW5kZW5jaWVz
KSkKKyAgICAsIHNjcmlwdEV4ZWN1dGlvbk93bmVyKHZtLCBzY3JpcHRFeGVjdXRpb25Pd25lcikK
K3sKK30KKworaW5saW5lIFZNJiBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YTo6dm0oKQor
eworICAgIEFTU0VSVCghaXNDYW5jZWxsZWQoKSk7CisgICAgcmV0dXJuIHRhcmdldCgpLT52bSgp
OworfQorCitpbmxpbmUgdm9pZCBEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0RGF0YTo6Y2FuY2Vs
KCkKK3sKKyAgICBzY3JpcHRFeGVjdXRpb25Pd25lci5jbGVhcigpOworICAgIGRlcGVuZGVuY2ll
cy5jbGVhcigpOworfQorCisKIERlZmVycmVkV29ya1RpbWVyOjpEZWZlcnJlZFdvcmtUaW1lcihW
TSYgdm0pCiAgICAgOiBCYXNlKHZtKQogewpAQCAtNTQsMTUgKzczLDIzIEBAIHZvaWQgRGVmZXJy
ZWRXb3JrVGltZXI6OmRvV29yayhWTSYgdm0pCiAKICAgICB3aGlsZSAoIW1fdGFza3MuaXNFbXB0
eSgpKSB7CiAgICAgICAgIGF1dG8gW3RpY2tldCwgdGFza10gPSBtX3Rhc2tzLnRha2VGaXJzdCgp
OwotICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHRpY2tldC0+c3RydWN0dXJlKHZtKS0+Z2xv
YmFsT2JqZWN0KCk7CiAgICAgICAgIGRhdGFMb2dMbklmKERlZmVycmVkV29ya1RpbWVySW50ZXJu
YWw6OnZlcmJvc2UsICJEb2luZyB3b3JrIG9uOiAiLCBSYXdQb2ludGVyKHRpY2tldCkpOwogCiAg
ICAgICAgIGF1dG8gcGVuZGluZ1RpY2tldCA9IG1fcGVuZGluZ1RpY2tldHMuZmluZCh0aWNrZXQp
OwogICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhbHJlYWR5IGNhbmNlbGVkIHRoaXMgdGFzayBvciBp
dHMgb3duZXIgbWF5IGhhdmUgYmVlbiBjYW5jZWxlZC4KICAgICAgICAgaWYgKHBlbmRpbmdUaWNr
ZXQgPT0gbV9wZW5kaW5nVGlja2V0cy5lbmQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBBU1NFUlQodGlja2V0ID09IHBlbmRpbmdUaWNrZXQtPmdldCgpKTsKKworICAgICAgICBp
ZiAodGlja2V0LT5pc0NhbmNlbGxlZCgpKSB7CisgICAgICAgICAgICBtX3BlbmRpbmdUaWNrZXRz
LnJlbW92ZShwZW5kaW5nVGlja2V0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CiAKLSAgICAgICAgc3dpdGNoIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KCktPnNjcmlwdEV4ZWN1dGlvblN0YXR1cyhnbG9iYWxPYmplY3QsIHBlbmRpbmdUaWNrZXQtPnZh
bHVlLnNjcmlwdEV4ZWN1dGlvbk93bmVyLmdldCgpKSkgeworICAgICAgICAvLyBXZSBzaG91bGRu
J3QgYWNjZXNzIHRoZSBUaWNrZXREYXRhIHRvIGdldCB0aGlzIGdsb2JhbE9iamVjdCB1bnRpbAor
ICAgICAgICAvLyBhZnRlciB3ZSBjb25maXJtIHRoYXQgdGhlIHRpY2tldCBpcyBzdGlsbCB2YWxp
ZCAod2hpY2ggd2UgZGlkIGFib3ZlKS4KKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSB0aWNr
ZXQtPnRhcmdldCgpLT5zdHJ1Y3R1cmUodm0pLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgc3dp
dGNoIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnNjcmlwdEV4ZWN1
dGlvblN0YXR1cyhnbG9iYWxPYmplY3QsIHRpY2tldC0+c2NyaXB0RXhlY3V0aW9uT3duZXIuZ2V0
KCkpKSB7CiAgICAgICAgIGNhc2UgU2NyaXB0RXhlY3V0aW9uU3RhdHVzOjpTdXNwZW5kZWQ6CiAg
ICAgICAgICAgICBzdXNwZW5kZWRUYXNrcy5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKHRpY2tldCwg
V1RGTW92ZSh0YXNrKSkpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC03NSw4ICsxMDIsNyBA
QCB2b2lkIERlZmVycmVkV29ya1RpbWVyOjpkb1dvcmsoVk0mIHZtKQogCiAgICAgICAgIC8vIFJl
bW92ZSB0aWNrZXQgZnJvbSBtX3BlbmRpbmdUaWNrZXRzIHNpbmNlIHdlIGFyZSBnb2luZyB0byBy
dW4gaXQuCiAgICAgICAgIC8vIEJ1dCB3ZSB3YW50IHRvIGtlZXAgdGlja2V0RGF0YSB3aGlsZSBy
dW5uaW5nIHRhc2sgc2luY2UgaXQgZW5zdXJlcyBkZXBlbmRlbmNpZXMgYXJlIHN0cm9uZ2x5IGhl
bGQuCi0gICAgICAgIGF1dG8gdGlja2V0RGF0YSA9IFdURk1vdmUocGVuZGluZ1RpY2tldC0+dmFs
dWUpOwotICAgICAgICBtX3BlbmRpbmdUaWNrZXRzLnJlbW92ZShwZW5kaW5nVGlja2V0KTsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFRpY2tldERhdGE+IHRpY2tldERhdGEgPSBtX3BlbmRpbmdU
aWNrZXRzLnRha2UocGVuZGluZ1RpY2tldCk7CiAKICAgICAgICAgLy8gQWxsb3cgdGFza3Mgd2Ug
YXJlIGFib3V0IHRvIHJ1biB0byBzY2hlZHVsZSB3b3JrLgogICAgICAgICBtX2N1cnJlbnRseVJ1
bm5pbmdUYXNrID0gdHJ1ZTsKQEAgLTg3LDkgKzExMyw5IEBAIHZvaWQgRGVmZXJyZWRXb3JrVGlt
ZXI6OmRvV29yayhWTSYgdm0pCiAgICAgICAgICAgICB2bS5maW5hbGl6ZVN5bmNocm9ub3VzSlNF
eGVjdXRpb24oKTsKIAogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOwotICAgICAgICAgICAgdGFzayh0aWNrZXQsIFdURk1vdmUodGlja2V0RGF0YSkpOwor
ICAgICAgICAgICAgdGFzayh0aWNrZXQpOworICAgICAgICAgICAgdGlja2V0RGF0YSA9IG51bGxw
dHI7CiAgICAgICAgICAgICBpZiAoRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRp
b24oKSkgewotICAgICAgICAgICAgICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRpY2tldC0+Z2xv
YmFsT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAg
ICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJl
cG9ydFVuY2F1Z2h0RXhjZXB0aW9uQXRFdmVudExvb3AoZ2xvYmFsT2JqZWN0LCBleGNlcHRpb24p
OwogICAgICAgICAgICAgfQpAQCAtMTAzLDYgKzEyOSwxMyBAQCB2b2lkIERlZmVycmVkV29ya1Rp
bWVyOjpkb1dvcmsoVk0mIHZtKQogICAgIHdoaWxlICghc3VzcGVuZGVkVGFza3MuaXNFbXB0eSgp
KQogICAgICAgICBtX3Rhc2tzLnByZXBlbmQoc3VzcGVuZGVkVGFza3MudGFrZUxhc3QoKSk7CiAK
KyAgICAvLyBJdCBpcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHRoYXQgYSBjbGllbnQgbWF5IGNh
bmNlbCBhIHBlbmRpbmcgdGlja2V0IGFuZAorICAgIC8vIG5ldmVyIGNhbGwgc2NoZWR1bGVXb3Jr
U29vbigpIG9uIGl0LiBBcyBzdWNoLCBpdCB3b3VsZCBub3QgYmUgZm91bmQgd2hlbgorICAgIC8v
IHdlIGl0ZXJhdGVkIG1fdGFza3MgYWJvdmUuIFdlJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHB1
cmdlIHRoZW0gaGVyZS4KKyAgICBtX3BlbmRpbmdUaWNrZXRzLnJlbW92ZUlmKFtdIChhdXRvJiB0
aWNrZXQpIHsKKyAgICAgICAgcmV0dXJuIHRpY2tldC0+aXNDYW5jZWxsZWQoKTsKKyAgICB9KTsK
KwogICAgIGlmIChtX3BlbmRpbmdUaWNrZXRzLmlzRW1wdHkoKSAmJiBtX3Nob3VsZFN0b3BSdW5M
b29wV2hlbkFsbFRpY2tldHNGaW5pc2gpIHsKICAgICAgICAgQVNTRVJUKG1fdGFza3MuaXNFbXB0
eSgpKTsKICAgICAgICAgUnVuTG9vcDo6Y3VycmVudCgpLnN0b3AoKTsKQEAgLTExOCwzOCArMTUx
LDQyIEBAIHZvaWQgRGVmZXJyZWRXb3JrVGltZXI6OnJ1blJ1bkxvb3AoKQogICAgICAgICBSdW5M
b29wOjpydW4oKTsKIH0KIAotdm9pZCBEZWZlcnJlZFdvcmtUaW1lcjo6YWRkUGVuZGluZ1dvcmso
Vk0mIHZtLCBUaWNrZXQgdGlja2V0LCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+JiYgZGVwZW5kZW5j
aWVzKQorRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCBEZWZlcnJlZFdvcmtUaW1lcjo6YWRkUGVu
ZGluZ1dvcmsoVk0mIHZtLCBKU09iamVjdCogdGFyZ2V0LCBWZWN0b3I8U3Ryb25nPEpTQ2VsbD4+
JiYgZGVwZW5kZW5jaWVzKQogewogICAgIEFTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpIHx8IChUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSAmJiB2bS5oZWFwLndvcmxkSXNT
dG9wcGVkKCkpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLnNp
emUoKTsgKytpKQotICAgICAgICBBU1NFUlQoZGVwZW5kZW5jaWVzW2ldLmdldCgpICE9IHRpY2tl
dCk7CisgICAgICAgIEFTU0VSVChkZXBlbmRlbmNpZXNbaV0uZ2V0KCkgIT0gdGFyZ2V0KTsKIAot
ICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gdGlja2V0LT5nbG9iYWxPYmplY3QoKTsKLSAgICBhdXRv
IHJlc3VsdCA9IG1fcGVuZGluZ1RpY2tldHMuZW5zdXJlKHRpY2tldCwgWyZdIHsKLSAgICAgICAg
ZGF0YUxvZ0xuSWYoRGVmZXJyZWRXb3JrVGltZXJJbnRlcm5hbDo6dmVyYm9zZSwgIkFkZGluZyBu
ZXcgcGVuZGluZyB0aWNrZXQ6ICIsIFJhd1BvaW50ZXIodGlja2V0KSk7Ci0gICAgICAgIEpTT2Jq
ZWN0KiBzY3JpcHRFeGVjdXRpb25Pd25lciA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUoKS0+Y3VycmVudFNjcmlwdEV4ZWN1dGlvbk93bmVyKGdsb2JhbE9iamVjdCk7Ci0g
ICAgICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIHRpY2tldCkpOwot
ICAgICAgICByZXR1cm4gVGlja2V0RGF0YSB7IFdURk1vdmUoZGVwZW5kZW5jaWVzKSwgU3Ryb25n
PEpTT2JqZWN0Pih2bSwgc2NyaXB0RXhlY3V0aW9uT3duZXIpIH07Ci0gICAgfSk7Ci0gICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBkYXRhTG9nTG5JZihEZWZlcnJlZFdvcmtU
aW1lckludGVybmFsOjp2ZXJib3NlLCAiQWRkaW5nIG5ldyBkZXBlbmRlbmNpZXMgZm9yIHRpY2tl
dDogIiwgUmF3UG9pbnRlcih0aWNrZXQpKTsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5kZXBlbmRlbmNpZXMuYXBwZW5kVmVjdG9yKFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7Ci0gICAg
fQorICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRhcmdldC0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
SlNPYmplY3QqIHNjcmlwdEV4ZWN1dGlvbk93bmVyID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5jdXJyZW50U2NyaXB0RXhlY3V0aW9uT3duZXIoZ2xvYmFsT2JqZWN0
KTsKKyAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxKU0NlbGw+KHZtLCB0YXJnZXQpKTsK
KworICAgIGF1dG8gdGlja2V0RGF0YSA9IG1ha2VVbmlxdWU8VGlja2V0RGF0YT4odm0sIHNjcmlw
dEV4ZWN1dGlvbk93bmVyLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworICAgIFRpY2tldCB0aWNr
ZXQgPSB0aWNrZXREYXRhLmdldCgpOworCisgICAgZGF0YUxvZ0xuSWYoRGVmZXJyZWRXb3JrVGlt
ZXJJbnRlcm5hbDo6dmVyYm9zZSwgIkFkZGluZyBuZXcgcGVuZGluZyB0aWNrZXQ6ICIsIFJhd1Bv
aW50ZXIodGlja2V0KSk7CisgICAgYXV0byByZXN1bHQgPSBtX3BlbmRpbmdUaWNrZXRzLmFkZChX
VEZNb3ZlKHRpY2tldERhdGEpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRy
eSk7CisKKyAgICByZXR1cm4gdGlja2V0OwogfQogCiBib29sIERlZmVycmVkV29ya1RpbWVyOjpo
YXNQZW5kaW5nV29yayhUaWNrZXQgdGlja2V0KQogeworICAgIGF1dG8gcmVzdWx0ID0gbV9wZW5k
aW5nVGlja2V0cy5maW5kKHRpY2tldCk7CisgICAgaWYgKHJlc3VsdCA9PSBtX3BlbmRpbmdUaWNr
ZXRzLmVuZCgpIHx8IHRpY2tldC0+aXNDYW5jZWxsZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIEFTU0VSVCh0aWNrZXQtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSB8fCAoVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkgJiYgdGlja2V0LT52bSgpLmhlYXAud29ybGRJ
c1N0b3BwZWQoKSkpOwotICAgIHJldHVybiBtX3BlbmRpbmdUaWNrZXRzLmNvbnRhaW5zKHRpY2tl
dCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgRGVmZXJyZWRXb3JrVGltZXI6Omhhc0Rl
cGVuZGFuY3lJblBlbmRpbmdXb3JrKFRpY2tldCB0aWNrZXQsIEpTQ2VsbCogZGVwZW5kZW5jeSkK
IHsKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGVuZGluZ1RpY2tldHMuZmluZCh0aWNrZXQpOworICAg
IGlmIChyZXN1bHQgPT0gbV9wZW5kaW5nVGlja2V0cy5lbmQoKSB8fCB0aWNrZXQtPmlzQ2FuY2Vs
bGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQodGlja2V0LT52bSgpLmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkgfHwgKFRocmVhZDo6bWF5QmVHQ1RocmVhZCgp
ICYmIHRpY2tldC0+dm0oKS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpKTsKLSAgICBBU1NFUlQobV9w
ZW5kaW5nVGlja2V0cy5jb250YWlucyh0aWNrZXQpKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gbV9w
ZW5kaW5nVGlja2V0cy5nZXQodGlja2V0KTsKLSAgICByZXR1cm4gcmVzdWx0LmRlcGVuZGVuY2ll
cy5jb250YWlucyhkZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gKCpyZXN1bHQpLT5kZXBlbmRlbmNp
ZXMuY29udGFpbnMoZGVwZW5kZW5jeSk7CiB9CiAKIHZvaWQgRGVmZXJyZWRXb3JrVGltZXI6OnNj
aGVkdWxlV29ya1Nvb24oVGlja2V0IHRpY2tldCwgVGFzayYmIHRhc2spCkBAIC0xNjIsMTEgKzE5
OSwxNSBAQCB2b2lkIERlZmVycmVkV29ya1RpbWVyOjpzY2hlZHVsZVdvcmtTb29uCiAKIGJvb2wg
RGVmZXJyZWRXb3JrVGltZXI6OmNhbmNlbFBlbmRpbmdXb3JrKFRpY2tldCB0aWNrZXQpCiB7Ci0g
ICAgQVNTRVJUKHRpY2tldC0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpIHx8
IChUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSAmJiB0aWNrZXQtPnZtKCkuaGVhcC53b3JsZElzU3Rv
cHBlZCgpKSk7Ci0gICAgYm9vbCByZXN1bHQgPSBtX3BlbmRpbmdUaWNrZXRzLnJlbW92ZSh0aWNr
ZXQpOworICAgIEFTU0VSVChtX3BlbmRpbmdUaWNrZXRzLmNvbnRhaW5zKHRpY2tldCkpOworICAg
IEFTU0VSVCh0aWNrZXQtPmlzQ2FuY2VsbGVkKCkgfHwgdGlja2V0LT52bSgpLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkgfHwgKFRocmVhZDo6bWF5QmVHQ1RocmVhZCgpICYmIHRpY2tl
dC0+dm0oKS5oZWFwLndvcmxkSXNTdG9wcGVkKCkpKTsKIAotICAgIGlmIChyZXN1bHQpCisgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICBpZiAoIXRpY2tldC0+aXNDYW5jZWxsZWQoKSkgewog
ICAgICAgICBkYXRhTG9nTG5JZihEZWZlcnJlZFdvcmtUaW1lckludGVybmFsOjp2ZXJib3NlLCAi
Q2FuY2VsaW5nIHRpY2tldDogIiwgUmF3UG9pbnRlcih0aWNrZXQpKTsKKyAgICAgICAgdGlja2V0
LT5jYW5jZWwoKTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICB9CiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGVmZXJyZWRX
b3JrVGltZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
ZWZlcnJlZFdvcmtUaW1lci5oCShyZXZpc2lvbiAyODc0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EZWZlcnJlZFdvcmtUaW1lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
NyArMjksNyBAQAogI2luY2x1ZGUgIlN0cm9uZy5oIgogCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00NCwxNCAr
NDQsMjYgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU1J1bkxvb3BUaW1lcjsKIAogICAg
IHN0cnVjdCBUaWNrZXREYXRhIHsKKyAgICBwcml2YXRlOgorICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFRpY2tldERhdGEoVk0mLCBKU09iamVj
dCogc2NyaXB0RXhlY3V0aW9uT3duZXIsIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4mJiBkZXBlbmRl
bmNpZXMpOworCisgICAgICAgIFZNJiB2bSgpOworICAgICAgICBKU09iamVjdCogdGFyZ2V0KCk7
CisKKyAgICAgICAgdm9pZCBjYW5jZWwoKTsKKyAgICAgICAgYm9vbCBpc0NhbmNlbGxlZCgpIGNv
bnN0IHsgcmV0dXJuICFzY3JpcHRFeGVjdXRpb25Pd25lci5nZXQoKTsgfQorCiAgICAgICAgIFZl
Y3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5kZW5jaWVzOwogICAgICAgICBTdHJvbmc8SlNPYmpl
Y3Q+IHNjcmlwdEV4ZWN1dGlvbk93bmVyOwogICAgIH07CiAKKyAgICB1c2luZyBUaWNrZXQgPSBU
aWNrZXREYXRhKjsKKwogICAgIHZvaWQgZG9Xb3JrKFZNJikgZmluYWw7CiAKLSAgICB1c2luZyBU
aWNrZXQgPSBKU09iamVjdCo7Ci0gICAgdm9pZCBhZGRQZW5kaW5nV29yayhWTSYsIFRpY2tldCwg
VmVjdG9yPFN0cm9uZzxKU0NlbGw+PiYmIGRlcGVuZGVuY2llcyk7CisgICAgVGlja2V0IGFkZFBl
bmRpbmdXb3JrKFZNJiwgSlNPYmplY3QqIHRhcmdldCwgVmVjdG9yPFN0cm9uZzxKU0NlbGw+PiYm
IGRlcGVuZGVuY2llcyk7CiAgICAgYm9vbCBoYXNQZW5kaW5nV29yayhUaWNrZXQpOwogICAgIGJv
b2wgaGFzRGVwZW5kYW5jeUluUGVuZGluZ1dvcmsoVGlja2V0LCBKU0NlbGwqIGRlcGVuZGVuY3kp
OwogICAgIGJvb2wgY2FuY2VsUGVuZGluZ1dvcmsoVGlja2V0KTsKQEAgLTYxLDcgKzczLDcgQEAg
cHVibGljOgogICAgIC8vIHRvIG1ha2Ugc3VyZSB5b3VyIG1lbW9yeSBvd25lcnNoaXAgbW9kZWwg
d29uJ3QgbGVhayBtZW1vcnkgd2hlbgogICAgIC8vIHRoaXMgb2NjdXJzLiBUaGUgZWFzaWVzdCB3
YXkgaXMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgZWl0aGVyIG93bmVkCiAgICAgLy8gYnkg
YSBHQydkIHZhbHVlIGluIGRlcGVuZGVuY2llcyBvciBieSB0aGUgVGFzayBsYW1iZGEuCi0gICAg
dXNpbmcgVGFzayA9IEZ1bmN0aW9uPHZvaWQoVGlja2V0LCBUaWNrZXREYXRhJiYpPjsKKyAgICB1
c2luZyBUYXNrID0gRnVuY3Rpb248dm9pZChUaWNrZXQpPjsKICAgICB2b2lkIHNjaGVkdWxlV29y
a1Nvb24oVGlja2V0LCBUYXNrJiYpOwogICAgIHZvaWQgZGlkUmVzdW1lU2NyaXB0RXhlY3V0aW9u
T3duZXIoKTsKIApAQCAtNzcsNyArODksMTMgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxk
U3RvcFJ1bkxvb3BXaGVuQWxsVGlja2V0c0ZpbmlzaCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2N1
cnJlbnRseVJ1bm5pbmdUYXNrIHsgZmFsc2UgfTsKICAgICBEZXF1ZTxzdGQ6OnR1cGxlPFRpY2tl
dCwgVGFzaz4+IG1fdGFza3MgV1RGX0dVQVJERURfQllfTE9DSyhtX3Rhc2tMb2NrKTsKLSAgICBI
YXNoTWFwPFRpY2tldCwgVGlja2V0RGF0YT4gbV9wZW5kaW5nVGlja2V0czsKKyAgICBIYXNoU2V0
PHN0ZDo6dW5pcXVlX3B0cjxUaWNrZXREYXRhPj4gbV9wZW5kaW5nVGlja2V0czsKIH07CiAKK2lu
bGluZSBKU09iamVjdCogRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldERhdGE6OnRhcmdldCgpCit7
CisgICAgQVNTRVJUKCFpc0NhbmNlbGxlZCgpKTsKKyAgICByZXR1cm4ganNDYXN0PEpTT2JqZWN0
Kj4oZGVwZW5kZW5jaWVzLmxhc3QoKS5nZXQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5h
bGl6YXRpb25SZWdpc3RyeS5jcHAJKHJldmlzaW9uIDI4NzQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRmluYWxpemF0aW9uUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDksMTMgKzE0OSwxNSBAQCB2b2lkIEpTRmluYWxpemF0aW9uUmVnaXN0cnk6OmZpbmFs
aXplVW5jCiAgICAgICAgIHJldHVybiAhYnVja2V0LnZhbHVlLnNpemUoKTsKICAgICB9KTsKIAot
ICAgIGlmICghdm0uZGVmZXJyZWRXb3JrVGltZXItPmhhc1BlbmRpbmdXb3JrKHRoaXMpICYmIChy
ZWFkaWVkQ2VsbCB8fCBkZWFkQ291bnQobG9ja2VyKSkpIHsKLSAgICAgICAgdm0uZGVmZXJyZWRX
b3JrVGltZXItPmFkZFBlbmRpbmdXb3JrKHZtLCB0aGlzLCB7IH0pOwotICAgICAgICBBU1NFUlQo
dm0uZGVmZXJyZWRXb3JrVGltZXItPmhhc1BlbmRpbmdXb3JrKHRoaXMpKTsKLSAgICAgICAgdm0u
ZGVmZXJyZWRXb3JrVGltZXItPnNjaGVkdWxlV29ya1Nvb24odGhpcywgW3RoaXNdKERlZmVycmVk
V29ya1RpbWVyOjpUaWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIHsKKyAg
ICBpZiAoIW1faGFzQWxyZWFkeVNjaGVkdWxlZFdvcmsgJiYgKHJlYWRpZWRDZWxsIHx8IGRlYWRD
b3VudChsb2NrZXIpKSkgeworICAgICAgICBhdXRvIHRpY2tldCA9IHZtLmRlZmVycmVkV29ya1Rp
bWVyLT5hZGRQZW5kaW5nV29yayh2bSwgdGhpcywgeyB9KTsKKyAgICAgICAgQVNTRVJUKHZtLmRl
ZmVycmVkV29ya1RpbWVyLT5oYXNQZW5kaW5nV29yayh0aWNrZXQpKTsKKyAgICAgICAgdm0uZGVm
ZXJyZWRXb3JrVGltZXItPnNjaGVkdWxlV29ya1Nvb24odGlja2V0LCBbdGhpc10oRGVmZXJyZWRX
b3JrVGltZXI6OlRpY2tldCkgewogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAgdGhpcy0+bV9oYXNBbHJl
YWR5U2NoZWR1bGVkV29yayA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy0+cnVuRmluYWxpemF0
aW9uQ2xlYW51cChnbG9iYWxPYmplY3QpOwogICAgICAgICB9KTsKKyAgICAgICAgbV9oYXNBbHJl
YWR5U2NoZWR1bGVkV29yayA9IHRydWU7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oCShy
ZXZpc2lvbiAyODc0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ZpbmFs
aXphdGlvblJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBwcml2
YXRlOgogICAgIC8vIFdlIHVzZSBhIHNlcGFyYXRlIGxpc3QgZm9yIG5vIHVucmVnaXN0ZXIgdmFs
dWVzIGluc3RlYWQgb2YgYSBzcGVjaWFsIGtleSBpbiB0aGUgdGFibGVzIGFib3ZlIGJlY2F1c2Ug
dGhlIEhhc2hNYXAgaGFzIGEgdGVuZGVuY3kgdG8gcmVhbGxvY2F0ZSB1bmRlciB1cyB3aGVuIGl0
ZXJhdGluZy4uLgogICAgIExpdmVSZWdpc3RyYXRpb25zIG1fbm9VbnJlZ2lzdHJhdGlvbkxpdmU7
CiAgICAgRGVhZFJlZ2lzdHJhdGlvbnMgbV9ub1VucmVnaXN0cmF0aW9uRGVhZDsKKyAgICBib29s
IG1faGFzQWxyZWFkeVNjaGVkdWxlZFdvcmsgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nQ29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21T
dHJlYW1pbmdDb21waWxlci5jcHAJKHJldmlzaW9uIDI4NzQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXYXNtU3RyZWFt
aW5nQ29tcGlsZXIuaCIKIAotI2luY2x1ZGUgIkRlZmVycmVkV29ya1RpbWVyLmgiCiAjaW5jbHVk
ZSAiSlNCaWdJbnQuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgpAQCAtNDUsNyArNDQsNiBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIFdhc20gewogU3RyZWFtaW5nQ29tcGlsZXI6OlN0cmVhbWluZ0NvbXBpbGVy
KFZNJiB2bSwgQ29tcGlsZXJNb2RlIGNvbXBpbGVyTW9kZSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNQcm9taXNlKiBwcm9taXNlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0KQogICAg
IDogbV92bSh2bSkKICAgICAsIG1fY29tcGlsZXJNb2RlKGNvbXBpbGVyTW9kZSkKLSAgICAsIG1f
cHJvbWlzZShwcm9taXNlKQogICAgICwgbV9pbmZvKFdhc206Ok1vZHVsZUluZm9ybWF0aW9uOjpj
cmVhdGUoKSkKICAgICAsIG1fcGFyc2VyKG1faW5mby5nZXQoKSwgKnRoaXMpCiB7CkBAIC01Mywx
NyArNTEsMTcgQEAgU3RyZWFtaW5nQ29tcGlsZXI6OlN0cmVhbWluZ0NvbXBpbGVyKFZNJgogICAg
IGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGdsb2JhbE9iamVjdCkpOwog
ICAgIGlmIChpbXBvcnRPYmplY3QpCiAgICAgICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25n
PEpTQ2VsbD4odm0sIGltcG9ydE9iamVjdCkpOwotICAgIHZtLmRlZmVycmVkV29ya1RpbWVyLT5h
ZGRQZW5kaW5nV29yayh2bSwgcHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKLSAgICBB
U1NFUlQodm0uZGVmZXJyZWRXb3JrVGltZXItPmhhc1BlbmRpbmdXb3JrKHByb21pc2UpKTsKLSAg
ICBBU1NFUlQodm0uZGVmZXJyZWRXb3JrVGltZXItPmhhc0RlcGVuZGFuY3lJblBlbmRpbmdXb3Jr
KHByb21pc2UsIGdsb2JhbE9iamVjdCkpOwotICAgIEFTU0VSVCghaW1wb3J0T2JqZWN0IHx8IHZt
LmRlZmVycmVkV29ya1RpbWVyLT5oYXNEZXBlbmRhbmN5SW5QZW5kaW5nV29yayhwcm9taXNlLCBp
bXBvcnRPYmplY3QpKTsKKyAgICBtX3RpY2tldCA9IHZtLmRlZmVycmVkV29ya1RpbWVyLT5hZGRQ
ZW5kaW5nV29yayh2bSwgcHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKKyAgICBBU1NF
UlQodm0uZGVmZXJyZWRXb3JrVGltZXItPmhhc1BlbmRpbmdXb3JrKG1fdGlja2V0KSk7CisgICAg
QVNTRVJUKHZtLmRlZmVycmVkV29ya1RpbWVyLT5oYXNEZXBlbmRhbmN5SW5QZW5kaW5nV29yayht
X3RpY2tldCwgZ2xvYmFsT2JqZWN0KSk7CisgICAgQVNTRVJUKCFpbXBvcnRPYmplY3QgfHwgdm0u
ZGVmZXJyZWRXb3JrVGltZXItPmhhc0RlcGVuZGFuY3lJblBlbmRpbmdXb3JrKG1fdGlja2V0LCBp
bXBvcnRPYmplY3QpKTsKIH0KIAogU3RyZWFtaW5nQ29tcGlsZXI6On5TdHJlYW1pbmdDb21waWxl
cigpCiB7Ci0gICAgaWYgKG1fcHJvbWlzZSkgewotICAgICAgICBhdXRvKiBwcm9taXNlID0gc3Rk
OjpleGNoYW5nZShtX3Byb21pc2UsIG51bGxwdHIpOwotICAgICAgICBtX3ZtLmRlZmVycmVkV29y
a1RpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtdKERlZmVycmVkV29ya1RpbWVyOjpU
aWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIG11dGFibGUgeyB9KTsKKyAg
ICBpZiAobV90aWNrZXQpIHsKKyAgICAgICAgYXV0byB0aWNrZXQgPSBzdGQ6OmV4Y2hhbmdlKG1f
dGlja2V0LCBudWxscHRyKTsKKyAgICAgICAgbV92bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1
bGVXb3JrU29vbih0aWNrZXQsIFtdKERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXQpIG11dGFibGUg
eyB9KTsKICAgICB9CiB9CiAKQEAgLTEzOCwxMiArMTM2LDEyIEBAIHZvaWQgU3RyZWFtaW5nQ29t
cGlsZXI6OmRpZENvbXBsZXRlKCkKICAgICB9OwogCiAgICAgYXV0byByZXN1bHQgPSBtYWtlVmFs
aWRhdGlvblJlc3VsdCgqbV9wbGFuKTsKLSAgICBhdXRvKiBwcm9taXNlID0gc3RkOjpleGNoYW5n
ZShtX3Byb21pc2UsIG51bGxwdHIpOworICAgIGF1dG8gdGlja2V0ID0gc3RkOjpleGNoYW5nZSht
X3RpY2tldCwgbnVsbHB0cik7CiAgICAgc3dpdGNoIChtX2NvbXBpbGVyTW9kZSkgewogICAgIGNh
c2UgQ29tcGlsZXJNb2RlOjpWYWxpZGF0aW9uOiB7Ci0gICAgICAgIG1fdm0uZGVmZXJyZWRXb3Jr
VGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwgW3Jlc3VsdCA9IFdURk1vdmUocmVzdWx0
KV0oRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCB0aWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpU
aWNrZXREYXRhJiYgdGlja2V0RGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBKU1Byb21pc2Uq
IHByb21pc2UgPSBqc0Nhc3Q8SlNQcm9taXNlKj4odGlja2V0KTsKLSAgICAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aWNrZXRE
YXRhLmRlcGVuZGVuY2llc1swXS5nZXQoKSk7CisgICAgICAgIG1fdm0uZGVmZXJyZWRXb3JrVGlt
ZXItPnNjaGVkdWxlV29ya1Nvb24odGlja2V0LCBbcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpXShE
ZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0IHRpY2tldCkgbXV0YWJsZSB7CisgICAgICAgICAgICBK
U1Byb21pc2UqIHByb21pc2UgPSBqc0Nhc3Q8SlNQcm9taXNlKj4odGlja2V0LT50YXJnZXQoKSk7
CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4odGlja2V0LT5kZXBlbmRlbmNpZXNbMF0uZ2V0KCkpOwogICAgICAgICAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCkBAIC0xNjAsMTAgKzE1OCwxMCBAQCB2b2lkIFN0cmVh
bWluZ0NvbXBpbGVyOjpkaWRDb21wbGV0ZSgpCiAgICAgfQogCiAgICAgY2FzZSBDb21waWxlck1v
ZGU6OkZ1bGxDb21waWxlOiB7Ci0gICAgICAgIG1fdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVk
dWxlV29ya1Nvb24ocHJvbWlzZSwgW3Jlc3VsdCA9IFdURk1vdmUocmVzdWx0KV0oRGVmZXJyZWRX
b3JrVGltZXI6OlRpY2tldCB0aWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYg
dGlja2V0RGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBKU1Byb21pc2UqIHByb21pc2UgPSBq
c0Nhc3Q8SlNQcm9taXNlKj4odGlja2V0KTsKLSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aWNrZXREYXRhLmRlcGVuZGVu
Y2llc1swXS5nZXQoKSk7Ci0gICAgICAgICAgICBKU09iamVjdCogaW1wb3J0T2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4odGlja2V0RGF0YS5kZXBlbmRlbmNpZXNbMV0uZ2V0KCkpOworICAgICAg
ICBtX3ZtLmRlZmVycmVkV29ya1RpbWVyLT5zY2hlZHVsZVdvcmtTb29uKHRpY2tldCwgW3Jlc3Vs
dCA9IFdURk1vdmUocmVzdWx0KV0oRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCB0aWNrZXQpIG11
dGFibGUgeworICAgICAgICAgICAgSlNQcm9taXNlKiBwcm9taXNlID0ganNDYXN0PEpTUHJvbWlz
ZSo+KHRpY2tldC0+dGFyZ2V0KCkpOworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHRpY2tldC0+ZGVwZW5kZW5jaWVzWzBd
LmdldCgpKTsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QgPSBqc0Nhc3Q8SlNP
YmplY3QqPih0aWNrZXQtPmRlcGVuZGVuY2llc1sxXS5nZXQoKSk7CiAgICAgICAgICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKQEAgLTIwNyw4ICsyMDUsMTQgQEAgdm9pZCBTdHJlYW1pbmdD
b21waWxlcjo6ZmFpbChKU0dsb2JhbE9iagogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBt
X2VhZ2VyRmFpbGVkID0gdHJ1ZTsKICAgICB9Ci0gICAgYXV0byogcHJvbWlzZSA9IHN0ZDo6ZXhj
aGFuZ2UobV9wcm9taXNlLCBudWxscHRyKTsKLSAgICBtX3ZtLmRlZmVycmVkV29ya1RpbWVyLT5j
YW5jZWxQZW5kaW5nV29yayhwcm9taXNlKTsKKyAgICBhdXRvIHRpY2tldCA9IHN0ZDo6ZXhjaGFu
Z2UobV90aWNrZXQsIG51bGxwdHIpOworICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IGpzQ2FzdDxK
U1Byb21pc2UqPih0aWNrZXQtPnRhcmdldCgpKTsKKyAgICAvLyBUaGUgcGVuZGluZyB3b3JrIFRp
Y2tldERhdGEgd2FzIGtlZXBpbmcgdGhlIHByb21pc2UgYWxpdmUuIFdlIG5lZWQgdG8KKyAgICAv
LyBtYWtlIHN1cmUgaXQgaXMgcmVhY2hhYmxlIGZyb20gdGhlIHN0YWNrIGJlZm9yZSB3ZSByZW1v
dmUgaXQgZnJvbSB0aGUKKyAgICAvLyBwZW5kaW5nIHdvcmsgbGlzdC4gTm90ZTogbV90aWNrZXQg
c3RvcmVzIGl0IGFzIGEgUGFja2VkUHRyLCB3aGljaCBpcyBub3QKKyAgICAvLyBzY2FubmFibGUg
YnkgdGhlIEdDLgorICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOworICAgIG1fdm0uZGVmZXJyZWRX
b3JrVGltZXItPmNhbmNlbFBlbmRpbmdXb3JrKHRpY2tldCk7CiAgICAgcHJvbWlzZS0+cmVqZWN0
KGdsb2JhbE9iamVjdCwgZXJyb3IpOwogfQogCkBAIC0yMjEsOCArMjI1LDggQEAgdm9pZCBTdHJl
YW1pbmdDb21waWxlcjo6Y2FuY2VsKCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9l
YWdlckZhaWxlZCA9IHRydWU7CiAgICAgfQotICAgIGF1dG8qIHByb21pc2UgPSBzdGQ6OmV4Y2hh
bmdlKG1fcHJvbWlzZSwgbnVsbHB0cik7Ci0gICAgbV92bS5kZWZlcnJlZFdvcmtUaW1lci0+Y2Fu
Y2VsUGVuZGluZ1dvcmsocHJvbWlzZSk7CisgICAgYXV0byB0aWNrZXQgPSBzdGQ6OmV4Y2hhbmdl
KG1fdGlja2V0LCBudWxscHRyKTsKKyAgICBtX3ZtLmRlZmVycmVkV29ya1RpbWVyLT5jYW5jZWxQ
ZW5kaW5nV29yayh0aWNrZXQpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21TdHJlYW1pbmdDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TdHJlYW1pbmdDb21waWxlci5oCShyZXZpc2lvbiAyODc0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU3RyZWFtaW5nQ29tcGlsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
CisjaW5jbHVkZSAiRGVmZXJyZWRXb3JrVGltZXIuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzIsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV90aHJlYWRlZENvbXBpbGF0aW9uU3RhcnRlZCB7IGZhbHNlIH07CiAgICAgTG9jayBtX2xvY2s7
CiAgICAgdW5zaWduZWQgbV9yZW1haW5pbmdDb21waWxhdGlvblJlcXVlc3RzIHsgMCB9OwotICAg
IEpTUHJvbWlzZSogbV9wcm9taXNlOyAvLyBSYXcgcG9pbnRlciwgYnV0IGhlbGQgYnkgRGVmZXJy
ZWRXb3JrVGltZXIuCisgICAgRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCBtX3RpY2tldDsKICAg
ICBSZWY8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+IG1faW5mbzsKICAgICBTdHJlYW1pbmdQYXJz
ZXIgbV9wYXJzZXI7CiAgICAgUmVmUHRyPExMSW50UGxhbj4gbV9wbGFuOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseS5jcHAJKHJldmlzaW9u
IDI4NzQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsOSArMTcwLDkgQEAgdm9pZCBKU1dlYkFzc2VtYmx5
Ojp3ZWJBc3NlbWJseU1vZHVsZVZhbAogICAgIFZlY3RvcjxTdHJvbmc8SlNDZWxsPj4gZGVwZW5k
ZW5jaWVzOwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0sIGdsb2Jh
bE9iamVjdCkpOwogCi0gICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPmFkZFBlbmRpbmdXb3JrKHZt
LCBwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOwotICAgIFdhc206Ok1vZHVsZTo6dmFs
aWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVk
VGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3Byb21pc2UsIGdsb2JhbE9iamVjdCwg
JnZtXSAoV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsK
LSAgICAgICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVkdWxlV29ya1Nvb24ocHJvbWlzZSwg
W3Byb21pc2UsIGdsb2JhbE9iamVjdCwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpLCAmdm1dKERl
ZmVycmVkV29ya1RpbWVyOjpUaWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYp
IG11dGFibGUgeworICAgIGF1dG8gdGlja2V0ID0gdm0uZGVmZXJyZWRXb3JrVGltZXItPmFkZFBl
bmRpbmdXb3JrKHZtLCBwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworICAgIFdhc206
Ok1vZHVsZTo6dmFsaWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwg
Y3JlYXRlU2hhcmVkVGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3RpY2tldCwgcHJv
bWlzZSwgZ2xvYmFsT2JqZWN0LCAmdm1dIChXYXNtOjpNb2R1bGU6OlZhbGlkYXRpb25SZXN1bHQm
JiByZXN1bHQpIG11dGFibGUgeworICAgICAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1
bGVXb3JrU29vbih0aWNrZXQsIFtwcm9taXNlLCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1v
dmUocmVzdWx0KSwgJnZtXShEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0KSBtdXRhYmxlIHsKICAg
ICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAg
ICAgIEpTVmFsdWUgbW9kdWxlID0gSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3R1Yih2bSwg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCks
IFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKSB7CkBAIC0yMDIsMTEgKzIwMiwxMSBAQCBzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZShW
TSYgdm0sIEpTR2xvYmFsCiAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlNDZWxsPih2
bSwgcHJvbWlzZSkpOwogICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoU3Ryb25nPEpTQ2VsbD4odm0s
IGltcG9ydE9iamVjdCkpOwogCi0gICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPmFkZFBlbmRpbmdX
b3JrKHZtLCBpbnN0YW5jZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKKyAgICBhdXRvIHRpY2tl
dCA9IHZtLmRlZmVycmVkV29ya1RpbWVyLT5hZGRQZW5kaW5nV29yayh2bSwgaW5zdGFuY2UsIFdU
Rk1vdmUoZGVwZW5kZW5jaWVzKSk7CiAgICAgLy8gTm90ZTogVGhpcyBjb21wbGV0aW9uIHRhc2sg
bWF5IG9yIG1heSBub3QgZ2V0IGNhbGxlZCBpbW1lZGlhdGVseS4KLSAgICBtb2R1bGUtPm1vZHVs
ZSgpLmNvbXBpbGVBc3luYygmdm0ud2FzbUNvbnRleHQsIGluc3RhbmNlLT5tZW1vcnlNb2RlKCks
IGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6Q2FsbGVlR3JvdXA6OkNhbGxiYWNrVHlwZT4oW3Byb21p
c2UsIGluc3RhbmNlLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgcmVzb2x2ZUtpbmQsIGNyZWF0aW9u
TW9kZSwgJnZtXSAoUmVmPFdhc206OkNhbGxlZUdyb3VwPiYmIHJlZkNhbGxlZUdyb3VwKSBtdXRh
YmxlIHsKKyAgICBtb2R1bGUtPm1vZHVsZSgpLmNvbXBpbGVBc3luYygmdm0ud2FzbUNvbnRleHQs
IGluc3RhbmNlLT5tZW1vcnlNb2RlKCksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6Q2FsbGVlR3Jv
dXA6OkNhbGxiYWNrVHlwZT4oW3RpY2tldCwgcHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgaW1w
b3J0T2JqZWN0LCByZXNvbHZlS2luZCwgY3JlYXRpb25Nb2RlLCAmdm1dIChSZWY8V2FzbTo6Q2Fs
bGVlR3JvdXA+JiYgcmVmQ2FsbGVlR3JvdXApIG11dGFibGUgewogICAgICAgICBSZWZQdHI8V2Fz
bTo6Q2FsbGVlR3JvdXA+IGNhbGxlZUdyb3VwID0gV1RGTW92ZShyZWZDYWxsZWVHcm91cCk7Ci0g
ICAgICAgIHZtLmRlZmVycmVkV29ya1RpbWVyLT5zY2hlZHVsZVdvcmtTb29uKGluc3RhbmNlLCBb
cHJvbWlzZSwgaW5zdGFuY2UsIG1vZHVsZSwgaW1wb3J0T2JqZWN0LCByZXNvbHZlS2luZCwgY3Jl
YXRpb25Nb2RlLCAmdm0sIGNhbGxlZUdyb3VwID0gV1RGTW92ZShjYWxsZWVHcm91cCldKERlZmVy
cmVkV29ya1RpbWVyOjpUaWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIG11
dGFibGUgeworICAgICAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+c2NoZWR1bGVXb3JrU29vbih0
aWNrZXQsIFtwcm9taXNlLCBpbnN0YW5jZSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIHJlc29sdmVL
aW5kLCBjcmVhdGlvbk1vZGUsICZ2bSwgY2FsbGVlR3JvdXAgPSBXVEZNb3ZlKGNhbGxlZUdyb3Vw
KV0oRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwogICAg
ICAgICAgICAgcmVzb2x2ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9taXNlLCBpbnN0YW5jZSwgbW9k
dWxlLCBpbXBvcnRPYmplY3QsIGNhbGxlZUdyb3VwLnJlbGVhc2VOb25OdWxsKCksIHJlc29sdmVL
aW5kLCBjcmVhdGlvbk1vZGUpOwogICAgICAgICB9KTsKQEAgLTIyNyw5ICsyMjcsOSBAQCBzdGF0
aWMgdm9pZCBjb21waWxlQW5kSW5zdGFudGlhdGUoVk0mIHZtCiAgICAgVmVjdG9yPFN0cm9uZzxK
U0NlbGw+PiBkZXBlbmRlbmNpZXM7CiAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8SlND
ZWxsPih2bSwgaW1wb3J0T2JqZWN0KSk7CiAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChTdHJvbmc8
SlNDZWxsPih2bSwgbW9kdWxlS2V5Q2VsbCkpOwotICAgIHZtLmRlZmVycmVkV29ya1RpbWVyLT5h
ZGRQZW5kaW5nV29yayh2bSwgcHJvbWlzZSwgV1RGTW92ZShkZXBlbmRlbmNpZXMpKTsKLSAgICBX
YXNtOjpNb2R1bGU6OnZhbGlkYXRlQXN5bmMoJnZtLndhc21Db250ZXh0LCBXVEZNb3ZlKHNvdXJj
ZSksIGNyZWF0ZVNoYXJlZFRhc2s8V2FzbTo6TW9kdWxlOjpDYWxsYmFja1R5cGU+KFtwcm9taXNl
LCBpbXBvcnRPYmplY3QsIG1vZHVsZUtleUNlbGwsIGdsb2JhbE9iamVjdCwgcmVzb2x2ZUtpbmQs
IGNyZWF0aW9uTW9kZSwgJnZtXSAoV2FzbTo6TW9kdWxlOjpWYWxpZGF0aW9uUmVzdWx0JiYgcmVz
dWx0KSBtdXRhYmxlIHsKLSAgICAgICAgdm0uZGVmZXJyZWRXb3JrVGltZXItPnNjaGVkdWxlV29y
a1Nvb24ocHJvbWlzZSwgW3Byb21pc2UsIGltcG9ydE9iamVjdCwgbW9kdWxlS2V5Q2VsbCwgZ2xv
YmFsT2JqZWN0LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksIHJlc29sdmVLaW5kLCBjcmVhdGlv
bk1vZGUsICZ2bV0oRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tldCwgRGVmZXJyZWRXb3JrVGltZXI6
OlRpY2tldERhdGEmJikgbXV0YWJsZSB7CisgICAgYXV0byB0aWNrZXQgPSB2bS5kZWZlcnJlZFdv
cmtUaW1lci0+YWRkUGVuZGluZ1dvcmsodm0sIHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVz
KSk7CisgICAgV2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RG
TW92ZShzb3VyY2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBl
PihbdGlja2V0LCBwcm9taXNlLCBpbXBvcnRPYmplY3QsIG1vZHVsZUtleUNlbGwsIGdsb2JhbE9i
amVjdCwgcmVzb2x2ZUtpbmQsIGNyZWF0aW9uTW9kZSwgJnZtXSAoV2FzbTo6TW9kdWxlOjpWYWxp
ZGF0aW9uUmVzdWx0JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgdm0uZGVmZXJyZWRXb3Jr
VGltZXItPnNjaGVkdWxlV29ya1Nvb24odGlja2V0LCBbcHJvbWlzZSwgaW1wb3J0T2JqZWN0LCBt
b2R1bGVLZXlDZWxsLCBnbG9iYWxPYmplY3QsIHJlc3VsdCA9IFdURk1vdmUocmVzdWx0KSwgcmVz
b2x2ZUtpbmQsIGNyZWF0aW9uTW9kZSwgJnZtXShEZWZlcnJlZFdvcmtUaW1lcjo6VGlja2V0KSBt
dXRhYmxlIHsKICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNyZWF0ZVN0dWIodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJB
c3NlbWJseU1vZHVsZVN0cnVjdHVyZSgpLCBXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewpAQCAtMjcxLDkgKzI3MSw5IEBAIHZv
aWQgSlNXZWJBc3NlbWJseTo6d2ViQXNzZW1ibHlNb2R1bGVJbnMKICAgICBWZWN0b3I8U3Ryb25n
PEpTQ2VsbD4+IGRlcGVuZGVuY2llczsKICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9uZzxK
U0NlbGw+KHZtLCBpbXBvcnRPYmplY3QpKTsKICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKFN0cm9u
ZzxKU0NlbGw+KHZtLCBnbG9iYWxPYmplY3QpKTsKLSAgICB2bS5kZWZlcnJlZFdvcmtUaW1lci0+
YWRkUGVuZGluZ1dvcmsodm0sIHByb21pc2UsIFdURk1vdmUoZGVwZW5kZW5jaWVzKSk7Ci0gICAg
V2FzbTo6TW9kdWxlOjp2YWxpZGF0ZUFzeW5jKCZ2bS53YXNtQ29udGV4dCwgV1RGTW92ZShzb3Vy
Y2UpLCBjcmVhdGVTaGFyZWRUYXNrPFdhc206Ok1vZHVsZTo6Q2FsbGJhY2tUeXBlPihbcHJvbWlz
ZSwgaW1wb3J0T2JqZWN0LCBnbG9iYWxPYmplY3QsICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFsaWRh
dGlvblJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIHZtLmRlZmVycmVkV29ya1Rp
bWVyLT5zY2hlZHVsZVdvcmtTb29uKHByb21pc2UsIFtwcm9taXNlLCBpbXBvcnRPYmplY3QsIGds
b2JhbE9iamVjdCwgcmVzdWx0ID0gV1RGTW92ZShyZXN1bHQpLCAmdm1dKERlZmVycmVkV29ya1Rp
bWVyOjpUaWNrZXQsIERlZmVycmVkV29ya1RpbWVyOjpUaWNrZXREYXRhJiYpIG11dGFibGUgewor
ICAgIGF1dG8gdGlja2V0ID0gdm0uZGVmZXJyZWRXb3JrVGltZXItPmFkZFBlbmRpbmdXb3JrKHZt
LCBwcm9taXNlLCBXVEZNb3ZlKGRlcGVuZGVuY2llcykpOworICAgIFdhc206Ok1vZHVsZTo6dmFs
aWRhdGVBc3luYygmdm0ud2FzbUNvbnRleHQsIFdURk1vdmUoc291cmNlKSwgY3JlYXRlU2hhcmVk
VGFzazxXYXNtOjpNb2R1bGU6OkNhbGxiYWNrVHlwZT4oW3RpY2tldCwgcHJvbWlzZSwgaW1wb3J0
T2JqZWN0LCBnbG9iYWxPYmplY3QsICZ2bV0gKFdhc206Ok1vZHVsZTo6VmFsaWRhdGlvblJlc3Vs
dCYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIHZtLmRlZmVycmVkV29ya1RpbWVyLT5zY2hl
ZHVsZVdvcmtTb29uKHRpY2tldCwgW3Byb21pc2UsIGltcG9ydE9iamVjdCwgZ2xvYmFsT2JqZWN0
LCByZXN1bHQgPSBXVEZNb3ZlKHJlc3VsdCksICZ2bV0oRGVmZXJyZWRXb3JrVGltZXI6OlRpY2tl
dCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBKU1dlYkFz
c2VtYmx5TW9kdWxlOjpjcmVhdGVTdHViKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
d2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSwgV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>