<?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>132522</bug_id>
          
          <creation_ts>2014-05-02 23:24:21 -0700</creation_ts>
          <short_desc>Clean up ProcessThrottler</short_desc>
          <delta_ts>2014-05-05 13:14:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1006319</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-05-02 23:24:21 -0700</bug_when>
    <thetext>Piggybacking on the setViewState reply to synchronize is a little hacky, and we&apos;ll want a to inform the process that it will suspend in cases other than visibility change. Add an explicit handshake for this purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006322</commentid>
    <comment_count>1</comment_count>
      <attachid>230749</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-05-02 23:50:06 -0700</bug_when>
    <thetext>Created attachment 230749
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006323</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-02 23:51:44 -0700</bug_when>
    <thetext>Attachment 230749 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/ios/ProcessThrottler.h:60:  The parameter name &quot;process&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006362</commentid>
    <comment_count>3</comment_count>
      <attachid>230749</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-03 12:42:15 -0700</bug_when>
    <thetext>Comment on attachment 230749
Fix

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

r=me, but I might have found a bug.

&gt; Source/WebKit2/ChangeLog:21
&gt; +        longer needs request a reply from SetViewState, and WebPageProxy can lose all the &apos;hiding&apos;

&quot;needs to&quot;

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1101
&gt; +    else if (!m_activityToken)
&gt; +        m_activityToken = std::make_unique&lt;ProcessThrottler::ForegroundActivityToken&gt;(m_process-&gt;throttler());

If I already have an activity token, but it is Background instead of Foreground, won&apos;t this !m_activityToken check prevent me from entering the Foreground state when I should?

Seems like you should check !m_activityToken || m_activityToken-&gt;isBackgroundActivityToken() or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006665</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-05-05 10:37:08 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 230749 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=230749&amp;action=review
&gt; 
&gt; r=me, but I might have found a bug.
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:21
&gt; &gt; +        longer needs request a reply from SetViewState, and WebPageProxy can lose all the &apos;hiding&apos;
&gt; 
&gt; &quot;needs to&quot;
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1101
&gt; &gt; +    else if (!m_activityToken)
&gt; &gt; +        m_activityToken = std::make_unique&lt;ProcessThrottler::ForegroundActivityToken&gt;(m_process-&gt;throttler());
&gt; 
&gt; If I already have an activity token, but it is Background instead of Foreground, won&apos;t this !m_activityToken check prevent me from entering the Foreground state when I should?
&gt; 
&gt; Seems like you should check !m_activityToken || m_activityToken-&gt;isBackgroundActivityToken() or something.

No – the WebPageProxy no longer has to know about keeping the page running the background state – that is now all invisible to it. WebPageProxy simply takes a ForegroundActivityToken when the page is visible, and releases it when the page is hidden. The ProcessThrottler is now responsible for transitioning from Foreground to Suspended via a Background state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006714</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-05-05 13:14:49 -0700</bug_when>
    <thetext>Transmitting file data ...............
Committed revision 168312.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230749</attachid>
            <date>2014-05-02 23:50:06 -0700</date>
            <delta_ts>2014-05-03 12:42:15 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>132522.1.patch</filename>
            <type>text/plain</type>
            <size>26153</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODIyMCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBAQAorMjAxNC0wNS0wMiAgR2F2aW4g
QmFycmFjbG91Z2ggIDxiYXJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMyNTIyCisgICAgICAgIENsZWFuIHVwIFBy
b2Nlc3NUaHJvdHRsZXIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBQcm9jZXNzVGhyb3R0bGVyIHJl
bGllZCBvbiB0aGUgcmVwbHkgZnJvbSB0aGUKKyAgICAgICAgU2V0Vmlld1N0YXRlIG1lc3NhZ2Ug
dG8gZW5zdXJlIHRoZSBwYWdlIHZpc2liaWxpdHkgbm90aWZpY2F0aW9ucyBoYXZlIGEgY2hhbmNl
CisgICAgICAgIHRvIGJlIGRlbGl2ZXJlZC4gVGhpcyByZXN1bHRlZCBpbjoKKyAgICAgICAgICAg
IC0gdW5uZWNlc3NhcmlseSBjb21wbGljYXRlZCBpbnRlcmZhY2UgdG8gUHJvY2Vzc1Rocm90dGxl
ciAoaW4gVmlzaWJpbGl0eVN0YXRlIGNsYXNzKQorICAgICAgICAgICAgLSBjb21wbGV4aXR5IGJs
ZWVkaW5nIG91dCBpbnRvIFdlYlBhZ2VQcm94eSAoaGFuZGxpbmcgJ2hpZGluZycgc3RhdGUpLgor
ICAgICAgICAgICAgLSBmb3IgY2FzZXMgb3RoZXIgdGhhbiB2aWV3IGhpZGluZywgbm8gc3VzcGVu
c2lvbiBub3RpZmljYXRpb24gaW4gdGhlIFdlYkNvbnRlbnQuCisKKyAgICAgICAgVG8gZml4IHRo
ZXNlIGlzc3VlcyBhZGQgYW4gZXhwbGljaXQgaGFuZHNoYWtlIGZyb20gdGhlIFByb2Nlc3NUaHJv
dHRsZXIgdG8gdGhlIFdlYlBhZ2UuCisgICAgICAgIFRoaXMgZ2l2ZXMgdXMgdHdvIHRoaW5nczoK
KyAgICAgICAgICAgIC0gQWxsIHByZXZpb3VzbHkgcG9zdGVkIG1lc3NhZ2VzIChlLmcuIFNldFZp
ZXdTdGF0ZSkgd2lsbCBiZSBwcm9jZXNzZWQgYmVmb3JlIHN1c3BlbnNpb24uCisgICAgICAgICAg
ICAtIFdlYkNvbnRlbnQgaXMgYWx3YXlzIChiYXIgdGltZW91dCkgbm90aWZpZWQgYmVmb3JlIHN1
c3BlbnNpb24uCisKKyAgICAgICAgU2luY2UgdGhpcyBpbnRlcmxvY2sgZW5zdXJlcyB0aGUgU2V0
Vmlld1N0YXRlIG1lc3NhZ2Ugd2lsbCBiZSBwcm9jZXNzZWQsIHRoZSBXS0NvbnRlbnRWaWV3IG5v
CisgICAgICAgIGxvbmdlciBuZWVkcyByZXF1ZXN0IGEgcmVwbHkgZnJvbSBTZXRWaWV3U3RhdGUs
IGFuZCBXZWJQYWdlUHJveHkgY2FuIGxvc2UgYWxsIHRoZSAnaGlkaW5nJworICAgICAgICBzdGF0
ZSB0cmFja2luZy4gSW4gdHVybiwgd2UgY2FuIHNpbXBsaWZ5IFZpc2liaWxpdHlUb2tlbiB0byBh
IGNvdXBsZSBvZiBzaW1wbGVyIHR5cGVzLCB3aXRob3V0CisgICAgICAgIHRoZSBpbnRlcmZhY2Ug
dG8gY2hhbmdlIHN0YXRlIC0ganVzdCBhY3F1aXJlL3JlbGVhc2UgdG8ga2VlcCB0aGUgcHJvY2Vz
cyBydW5uYWJsZSBvciBwZXJtaXQKKyAgICAgICAgc3VzcGVuc2lvbi4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX3Nu
YXBzaG90UmVjdDppbnRvSW1hZ2VPZldpZHRoOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAg
ICAgICAgLSBWaXNpYmlsaXR5VG9rZW4gLT4gQmFja2dyb3VuZEFjdGl2aXR5VG9rZW4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpXZWJQYWdlUHJveHkpOgorICAgICAgICAgICAgLSBtX3Zpc2liaWxpdHlUb2tlbiAt
PiBtX2FjdGl2aXR5VG9rZW4sIHJlbW92ZSBtX3BlbmRpbmdWaWV3U3RhdGVVcGRhdGVzCisgICAg
ICAgICAgICAgIHVwZGF0ZVZpc2liaWxpdHlUb2tlbiAtPiB1cGRhdGVBY3Rpdml0eVRva2VuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nlc3MpOgorICAg
ICAgICAgICAgLSB1cGRhdGVWaXNpYmlsaXR5VG9rZW4gLT4gdXBkYXRlQWN0aXZpdHlUb2tlbgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnZpZXdTdGF0ZURpZENoYW5nZSk6CisgICAg
ICAgICAgICAtIHJlbW92ZSBtX3BlbmRpbmdWaWV3U3RhdGVVcGRhdGVzLCB1cGRhdGVBY3Rpdml0
eVRva2VuIGFmdGVyIHNlbmRpbmcgU2V0Vmlld1N0YXRlCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6dXBkYXRlQWN0aXZpdHlUb2tlbik6CisgICAgICAgICAgICAtIG1fdmlzaWJpbGl0
eVRva2VuIC0+IG1fYWN0aXZpdHlUb2tlbiwgbm8gbmVlZCB0byBoYW5kbGUgJ2hpZGluZycgc3Rh
dGUuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBkYXRlVmlzaWJpbGl0eVRva2Vu
KTogRGVsZXRlZC4KKyAgICAgICAgICAgIC0gcmVuYW1lZCB0byB1cGRhdGVBY3Rpdml0eVRva2Vu
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkVXBkYXRlVmlld1N0YXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgICAgIC0gaW1wbGVtZW50YXRpb24gbW92ZWQgYmFjayBpbnRvIGhlYWRl
ci4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZGlkVXBkYXRlVmlld1N0YXRlKToKKyAgICAgICAgICAgIC0gaW1wbGVt
ZW50YXRpb24gbW92ZWQgYmFjayBpbnRvIGhlYWRlci4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpXZWJQ
cm9jZXNzUHJveHkpOgorICAgICAgICAgICAgLSBQcm9jZXNzVGhyb3R0bGVyIGNvbnN0cnVjdG9y
IG5vdyBwYXNzZWQgV2ViUHJvY2Vzc1Byb3h5LgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuaDoKKyAgICAgICAgICAgIC0gYWRkZWQgUHJvY2Vzc1dpbGxTdXNwZW5kL1Byb2Nl
c3NSZWFkeVRvU3VzcGVuZAorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVz
c2FnZXMuaW46CisgICAgICAgICAgICAtIGFkZGVkIFByb2Nlc3NXaWxsU3VzcGVuZC9Qcm9jZXNz
UmVhZHlUb1N1c3BlbmQKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1Byb2Nlc3NBc3NlcnRpb24u
aDoKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc0Fzc2VydGlvbjo6c3RhdGUpOgorICAgICAgICAg
ICAgLSBhY2Nlc3NvcgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUHJvY2Vzc1Rocm90dGxlci5o
OgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzVGhyb3R0bGVyOjpWaXNpYmlsaXR5VG9rZW46OnZp
c2liaWxpdHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzVGhyb3R0bGVyOjpW
aXNpYmlsaXR5VG9rZW46OnNldFZpc2liaWxpdHkpOiBEZWxldGVkLgorICAgICAgICAgICAgLSBy
ZW1vdmVkIFZpc2liaWxpdHlUb2tlbiBjbGFzcywgcmVwbGFjZWQgd2l0aCBGb3JlZ3JvdW5kQWN0
aXZpdHlUb2tlbi9CYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbi4KKyAgICAgICAgKFdlYktpdDo6UHJv
Y2Vzc1Rocm90dGxlcjo6UHJvY2Vzc1Rocm90dGxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlByb2Nlc3NUaHJvdHRsZXI6OnZpc2liaWxpdHlUb2tlbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlByb2Nlc3NUaHJvdHRsZXI6OmRpZENvbm5uZWN0VG9Qcm9jZXNzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc1Rocm90dGxlcjo6YXNzZXJ0aW9uU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzVGhyb3R0bGVyOjp1cGRhdGVBc3NlcnRp
b24pOiBEZWxldGVkLgorICAgICAgICAgICAgLSBtb3ZlZCBpbXBsZW1lbnRhdGlvbnMgdG8gLm1t
LgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUHJvY2Vzc1Rocm90dGxlci5tbToKKyAgICAgICAg
KFdlYktpdDo6UHJvY2Vzc1Rocm90dGxlcjo6Rm9yZWdyb3VuZEFjdGl2aXR5VG9rZW46OkZvcmVn
cm91bmRBY3Rpdml0eVRva2VuKToKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc1Rocm90dGxlcjo6
Rm9yZWdyb3VuZEFjdGl2aXR5VG9rZW46On5Gb3JlZ3JvdW5kQWN0aXZpdHlUb2tlbik6CisgICAg
ICAgIChXZWJLaXQ6OlByb2Nlc3NUaHJvdHRsZXI6OkJhY2tncm91bmRBY3Rpdml0eVRva2VuOjpC
YWNrZ3JvdW5kQWN0aXZpdHlUb2tlbik6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NUaHJvdHRs
ZXI6OkJhY2tncm91bmRBY3Rpdml0eVRva2VuOjp+QmFja2dyb3VuZEFjdGl2aXR5VG9rZW4pOgor
ICAgICAgICAgICAgLSBuZXcsIHNpbXBsZXIgcmVwbGFjZW1lbnQgZm9yIFZpc2liaWxpdHlUb2tl
bi4gSW5zdGFudGlhdGUgdG8ga2VlcCBhIHByb2Nlc3NlcyBydW5uaW5nLCByZWxlYXNlIHRvIHN1
c3BlbmQuCisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NUaHJvdHRsZXI6OlByb2Nlc3NUaHJvdHRs
ZXIpOgorICAgICAgICAgICAgLSBjb25zdHJ1Y3Rvciwgbm93IGluaXRpYWxpemVzIFdlYlByb2Nl
c3NQcm94eSBwb2ludGVyICYgdGltZXIgbWVjaGFuaXNtCisgICAgICAgIChXZWJLaXQ6OlByb2Nl
c3NUaHJvdHRsZXI6OmFzc2VydGlvblN0YXRlKToKKyAgICAgICAgICAgIC0gc2VsZWN0IHRoZSBh
cHByb3ByaWF0ZSBBc3NlcnRpb25TdGF0ZSBnaXZlIGN1cnJlbnQgQWN0aXZpdHlUb2tlbnMuCisg
ICAgICAgIChXZWJLaXQ6OlByb2Nlc3NUaHJvdHRsZXI6OnVwZGF0ZUFzc2VydGlvbk5vdyk6Cisg
ICAgICAgICAgICAtIHVwZGF0ZSB0aGUgY3VycmVudCBQcm9jZXNzQXNzZXJ0aW9uLgorICAgICAg
ICAoV2ViS2l0OjpQcm9jZXNzVGhyb3R0bGVyOjp1cGRhdGVBc3NlcnRpb24pOgorICAgICAgICAg
ICAgLSB1cGRhdGUgdGhlIGN1cnJlbnQgUHJvY2Vzc0Fzc2VydGlvbiwgZGVsYXkgcnVubmluZy0+
c3VzcGVuZGVkIHRyYW5zaXRpb25zIHRvIGdpdmUgdGhlIHByb2Nlc3MgYSBjaGFuY2UgdG8gY2xl
YW4gdXAuCisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NUaHJvdHRsZXI6OmRpZENvbm5uZWN0VG9Q
cm9jZXNzKToKKyAgICAgICAgICAgIC0gbW92ZWQgZnJvbSBoZWFkZXIuCisgICAgICAgIChXZWJL
aXQ6OlByb2Nlc3NUaHJvdHRsZXI6OnN1c3BlbmRUaW1lckZpcmVkKToKKyAgICAgICAgICAgIC0g
dGltZW91dCB0byBwcmV2ZW50IHByb2Nlc3NlcyBmcm9tIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91
bmQgZm9yIHRvbyBsb25nLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzVGhyb3R0bGVyOjpwcm9j
ZXNzUmVhZHlUb1N1c3BlbmQpOgorICAgICAgICAgICAgLSBoYW5kc2hha2UgZnJvbSB0aGUgV2Vi
Q29udGVudCBwcm9jZXNzIHRvIGFja25vd2xlZGdlIGl0IGlzIHJlYWR5IHRvIHN1c3BlbmQuCisg
ICAgICAgIChXZWJLaXQ6OlByb2Nlc3NUaHJvdHRsZXI6OlZpc2liaWxpdHlUb2tlbjo6VmlzaWJp
bGl0eVRva2VuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc1Rocm90dGxlcjo6
VmlzaWJpbGl0eVRva2VuOjp+VmlzaWJpbGl0eVRva2VuKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UHJvY2Vzc1Rocm90dGxlcjo6VmlzaWJpbGl0eVRva2VuOjpoaWRlVGltZXJGaXJlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NUaHJvdHRsZXI6OlZpc2liaWxpdHlU
b2tlbjo6c2V0VmlzaWJpbGl0eUludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgICAgIC0gcmVt
b3ZlZCBWaXNpYmlsaXR5VG9rZW4gY2xhc3MsIHJlcGxhY2VkIHdpdGggRm9yZWdyb3VuZEFjdGl2
aXR5VG9rZW4vQmFja2dyb3VuZEFjdGl2aXR5VG9rZW4uCisgICAgICAgICogVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3Lm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRpZE1vdmVUb1dp
bmRvd10pOgorICAgICAgICAgICAgLSBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJlcXVlc3QgYSBy
ZXNwb25zZSBmcm9tIFNldFZpZXdTdGF0ZTsgdGhpcyBpbnRlcmxvY2sgaXMgbm93IG1hbmFnZWQg
YnkgdGhlIFByb2Nlc3NUaHJvdHRsZXIuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQcm9j
ZXNzUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6c2VuZFBy
b2Nlc3NXaWxsU3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6cHJv
Y2Vzc1JlYWR5VG9TdXNwZW5kKToKKyAgICAgICAgICAgIC0gYWRkZWQgUHJvY2Vzc1dpbGxTdXNw
ZW5kL1Byb2Nlc3NSZWFkeVRvU3VzcGVuZAorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnByb2Nlc3NXaWxsU3VzcGVuZCk6
CisgICAgICAgICAgICAtIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSBXZWJDb250ZW50IHByb2Nlc3Mg
dGhhdCB3ZSB3aWxsIGJlIHN1c3BlbmRlZDsgZm9yIG5vdyBqdXN0IHNlbmQgYmFjayBhbiBhY2su
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisgICAgICAgICAgICAtIGFkZGVk
IFByb2Nlc3NXaWxsU3VzcGVuZC9Qcm9jZXNzUmVhZHlUb1N1c3BlbmQKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICAgICAtIGFkZGVkIFByb2Nl
c3NXaWxsU3VzcGVuZC9Qcm9jZXNzUmVhZHlUb1N1c3BlbmQKKwogMjAxNC0wNS0wMiAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gUmVtb3ZlIHVudXNl
ZCBXS0Vycm9yUmVjb3ZlcnlBdHRlbXB0aW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMTY4MTc1KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw3ICsyNzAs
NyBAQCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwCiAgICAgLCBtX25v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcigqdGhpcykKICAgICAsIG1fdmlld1N0
YXRlKFZpZXdTdGF0ZTo6Tm9GbGFncykKICNpZiBQTEFURk9STShJT1MpCi0gICAgLCBtX3Zpc2li
aWxpdHlUb2tlbihwcm9jZXNzLnRocm90dGxlcigpLnZpc2liaWxpdHlUb2tlbihQcm9jZXNzVGhy
b3R0bGVyOjpWaXNpYmlsaXR5OjpIaWRkZW4pKQorICAgICwgbV9hY3Rpdml0eVRva2VuKG51bGxw
dHIpCiAjZW5kaWYKICAgICAsIG1fYmFja0ZvcndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlzdDo6
Y3JlYXRlKCp0aGlzKSkKICAgICAsIG1fbG9hZFN0YXRlQXRQcm9jZXNzRXhpdChGcmFtZUxvYWRT
dGF0ZTo6U3RhdGU6OkZpbmlzaGVkKQpAQCAtMzU1LDcgKzM1NSw2IEBAIFdlYlBhZ2VQcm94eTo6
V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmIHAKICAgICAsIG1fbWVkaWFWb2x1bWUoMSkKICAgICAs
IG1fbWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdyh0cnVlKQogICAgICwgbV93YWl0aW5nRm9yRGlk
VXBkYXRlVmlld1N0YXRlKGZhbHNlKQotICAgICwgbV9wZW5kaW5nVmlld1N0YXRlVXBkYXRlcygw
KQogICAgICwgbV9zY3JvbGxQaW5uaW5nQmVoYXZpb3IoRG9Ob3RQaW4pCiAgICAgLCBtX25hdmln
YXRpb25JRCgwKQogewpAQCAtMzYzLDcgKzM2Miw3IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFnZVBy
b3h5KFBhZ2VDbGllbnQmIHAKICAgICAgICAgbV92aXNpdGVkTGlua1Byb3ZpZGVyLT5hZGRQcm9j
ZXNzKG1fcHJvY2Vzcy5nZXQoKSk7CiAKICAgICB1cGRhdGVWaWV3U3RhdGUoKTsKLSAgICB1cGRh
dGVWaXNpYmlsaXR5VG9rZW4oKTsKKyAgICB1cGRhdGVBY3Rpdml0eVRva2VuKCk7CiAgICAgCiAj
aWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQogICAgIG1fbGF5ZXJIb3N0aW5n
TW9kZSA9IG1fdmlld1N0YXRlICYgVmlld1N0YXRlOjpJc0luV2luZG93ID8gbV9wYWdlQ2xpZW50
LnZpZXdMYXllckhvc3RpbmdNb2RlKCkgOiBMYXllckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M7
CkBAIC01MjIsNyArNTIxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlYXR0YWNoVG9XZWJQcm9j
ZXNzKAogICAgIEFTU0VSVChtX3Byb2Nlc3MtPnN0YXRlKCkgPT0gV2ViUHJvY2Vzc1Byb3h5OjpT
dGF0ZTo6VGVybWluYXRlZCk7CiAKICAgICB1cGRhdGVWaWV3U3RhdGUoKTsKLSAgICB1cGRhdGVW
aXNpYmlsaXR5VG9rZW4oKTsKKyAgICB1cGRhdGVBY3Rpdml0eVRva2VuKCk7CiAgICAgCiAgICAg
bV9pc1ZhbGlkID0gdHJ1ZTsKIApAQCAtMTA1OSwxNiArMTA1OCwxMiBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6dmlld1N0YXRlRGlkQ2hhbmdlKFZpCiAgICAgdXBkYXRlVmlld1N0YXRlKG1heUhhdmVD
aGFuZ2VkKTsKICAgICBWaWV3U3RhdGU6OkZsYWdzIGNoYW5nZWQgPSBtX3ZpZXdTdGF0ZSBeIHBy
ZXZpb3VzVmlld1N0YXRlOwogCi0gICAgaWYgKGNoYW5nZWQpIHsKLSAgICAgICAgYm9vbCByZXF1
ZXN0UmVwbHkgPSB3YW50c1JlcGx5ID09IFdhbnRzUmVwbHlPck5vdDo6RG9lc1dhbnRSZXBseTsK
LSAgICAgICAgaWYgKHJlcXVlc3RSZXBseSkKLSAgICAgICAgICAgICsrbV9wZW5kaW5nVmlld1N0
YXRlVXBkYXRlczsKLSAgICAKLSAgICAgICAgdXBkYXRlVmlzaWJpbGl0eVRva2VuKCk7Ci0gICAg
ICAgIAotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFZpZXdT
dGF0ZShtX3ZpZXdTdGF0ZSwgcmVxdWVzdFJlcGx5KSwgbV9wYWdlSUQpOwotICAgIH0KLQorICAg
IGlmIChjaGFuZ2VkKQorICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNldFZpZXdTdGF0ZShtX3ZpZXdTdGF0ZSwgd2FudHNSZXBseSA9PSBXYW50c1JlcGx5T3JOb3Q6
OkRvZXNXYW50UmVwbHkpLCBtX3BhZ2VJRCk7CisgICAgCisgICAgLy8gVGhpcyBtdXN0IGhhcHBl
biBhZnRlciB0aGUgU2V0Vmlld1N0YXRlIG1lc3NhZ2UgaXMgc2VudCwgdG8gZW5zdXJlIHRoZSBw
YWdlIHZpc2liaWxpdHkgZXZlbnQgY2FuIGZpcmUuCisgICAgdXBkYXRlQWN0aXZpdHlUb2tlbigp
OworICAgIAogICAgIGlmIChjaGFuZ2VkICYgVmlld1N0YXRlOjpJc1Zpc3VhbGx5SWRsZSkKICAg
ICAgICAgbV9wcm9jZXNzLT5wYWdlU3VwcHJlc3NpYmlsaXR5Q2hhbmdlZCh0aGlzKTsKIApAQCAt
MTA5NywyNSArMTA5MiwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dmlld1N0YXRlRGlkQ2hhbmdl
KFZpCiAgICAgdXBkYXRlQmFja2luZ1N0b3JlRGlzY2FyZGFibGVTdGF0ZSgpOwogfQogICAgIAot
dm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVZpc2liaWxpdHlUb2tlbigpCit2b2lkIFdlYlBhZ2VQ
cm94eTo6dXBkYXRlQWN0aXZpdHlUb2tlbigpCiB7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIGlm
IChpc1ZpZXdWaXNpYmxlKCkpCi0gICAgICAgIG1fdmlzaWJpbGl0eVRva2VuLT5zZXRWaXNpYmls
aXR5KFByb2Nlc3NUaHJvdHRsZXI6OlZpc2liaWxpdHk6OlZpc2libGUpOwotICAgIGVsc2UgaWYg
KG1fdmlzaWJpbGl0eVRva2VuLT52aXNpYmlsaXR5KCkgIT0gUHJvY2Vzc1Rocm90dGxlcjo6Vmlz
aWJpbGl0eTo6SGlkZGVuICYmIG1fcGVuZGluZ1ZpZXdTdGF0ZVVwZGF0ZXMpCi0gICAgICAgIG1f
dmlzaWJpbGl0eVRva2VuLT5zZXRWaXNpYmlsaXR5KFByb2Nlc3NUaHJvdHRsZXI6OlZpc2liaWxp
dHk6OkhpZGluZyk7Ci0gICAgZWxzZQotICAgICAgICBtX3Zpc2liaWxpdHlUb2tlbi0+c2V0Vmlz
aWJpbGl0eShQcm9jZXNzVGhyb3R0bGVyOjpWaXNpYmlsaXR5OjpIaWRkZW4pOworICAgIGlmICgh
aXNWaWV3VmlzaWJsZSgpKQorICAgICAgICBtX2FjdGl2aXR5VG9rZW4gPSBudWxscHRyOworICAg
IGVsc2UgaWYgKCFtX2FjdGl2aXR5VG9rZW4pCisgICAgICAgIG1fYWN0aXZpdHlUb2tlbiA9IHN0
ZDo6bWFrZV91bmlxdWU8UHJvY2Vzc1Rocm90dGxlcjo6Rm9yZWdyb3VuZEFjdGl2aXR5VG9rZW4+
KG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkpOwogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpkaWRVcGRhdGVWaWV3U3RhdGUoKQotewotICAgIG1fd2FpdGluZ0ZvckRpZFVwZGF0ZVZpZXdT
dGF0ZSA9IGZhbHNlOwotICAgIC0tbV9wZW5kaW5nVmlld1N0YXRlVXBkYXRlczsKLSAgICB1cGRh
dGVWaXNpYmlsaXR5VG9rZW4oKTsKLX0KLSAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpsYXllckhv
c3RpbmdNb2RlRGlkQ2hhbmdlKCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE2ODE3NSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
NzYzLDcgKzc2Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbGlzdGVuRm9yTGF5b3V0TWlsZXN0
b25lcyhXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmVzKTsKIAotICAgIHZvaWQgZGlkVXBkYXRlVmll
d1N0YXRlKCk7CisgICAgdm9pZCBkaWRVcGRhdGVWaWV3U3RhdGUoKSB7IG1fd2FpdGluZ0ZvckRp
ZFVwZGF0ZVZpZXdTdGF0ZSA9IGZhbHNlOyB9CiAKICAgICBib29sIGhhc0hvcml6b250YWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBtX21haW5GcmFtZUhhc0hvcml6b250YWxTY3JvbGxiYXI7
IH0KICAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9tYWlu
RnJhbWVIYXNWZXJ0aWNhbFNjcm9sbGJhcjsgfQpAQCAtMTA4MCw3ICsxMDgwLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCiAgICAgdm9pZCB1cGRhdGVWaWV3
U3RhdGUoV2ViQ29yZTo6Vmlld1N0YXRlOjpGbGFncyBmbGFnc1RvVXBkYXRlID0gV2ViQ29yZTo6
Vmlld1N0YXRlOjpBbGxGbGFncyk7Ci0gICAgdm9pZCB1cGRhdGVWaXNpYmlsaXR5VG9rZW4oKTsK
KyAgICB2b2lkIHVwZGF0ZUFjdGl2aXR5VG9rZW4oKTsKICAgICAgICAgCiAgICAgdm9pZCByZXNl
dFN0YXRlKCk7CiAgICAgdm9pZCByZXNldFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKCk7CkBAIC0x
NTEwLDcgKzE1MTAsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlZpZXdTdGF0ZTo6RmxhZ3Mg
bV92aWV3U3RhdGU7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBy
b2Nlc3NUaHJvdHRsZXI6OlZpc2liaWxpdHlUb2tlbj4gbV92aXNpYmlsaXR5VG9rZW47CisgICAg
c3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NUaHJvdHRsZXI6OkZvcmVncm91bmRBY3Rpdml0eVRva2Vu
PiBtX2FjdGl2aXR5VG9rZW47CiAjZW5kaWYKICAgICAgICAgCiAgICAgYm9vbCBtX2NhbkdvQmFj
azsKQEAgLTE2NzIsNyArMTY3Miw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21heVN0YXJ0TWVk
aWFXaGVuSW5XaW5kb3c7CiAKICAgICBib29sIG1fd2FpdGluZ0ZvckRpZFVwZGF0ZVZpZXdTdGF0
ZTsKLSAgICB1bnNpZ25lZCBtX3BlbmRpbmdWaWV3U3RhdGVVcGRhdGVzOwogICAgICAgICAKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3RlbXBvcmFy
eVBERkZpbGVzOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHAJKHJldmlzaW9uIDE2ODE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIFdlYlBy
b2Nlc3NQcm94eTo6V2ViUHJvY2Vzc1Byb3h5KFdlYkNvbnQKICNlbmRpZgogICAgICwgbV9udW1i
ZXJPZlRpbWVzU3VkZGVuVGVybWluYXRpb25XYXNEaXNhYmxlZCgwKQogI2lmIFBMQVRGT1JNKElP
UykKLSAgICAsIG1fdGhyb3R0bGVyKHN0ZDo6bWFrZV91bmlxdWU8UHJvY2Vzc1Rocm90dGxlcj4o
KSkKKyAgICAsIG1fdGhyb3R0bGVyKHN0ZDo6bWFrZV91bmlxdWU8UHJvY2Vzc1Rocm90dGxlcj4o
dGhpcykpCiAjZW5kaWYKIHsKICAgICBjb25uZWN0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAxNjgxNzUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Niw2ICsxMzYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aW5kb3dTZXJ2ZXJDb25uZWN0aW9uU3Rh
dGVDaGFuZ2VkKCk7CiAKICNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBzZW5kUHJvY2Vzc1dp
bGxTdXNwZW5kKCk7CisgICAgdm9pZCBwcm9jZXNzUmVhZHlUb1N1c3BlbmQoKTsKKyAgICAKICAg
ICBQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIoKSB7IHJldHVybiAqbV90aHJvdHRsZXI7IH0K
ICNlbmRpZgogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNjgxNzUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw0ICs0Nyw3IEBAIG1lc3NhZ2VzIC0+IFdlYlByb2Nlc3NQcm94eSBMZWdhY3lS
ZWNlaXYKICNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKICAgICBHZXREYXRhYmFzZVByb2Nl
c3NDb25uZWN0aW9uKCkgLT4gKElQQzo6QXR0YWNobWVudCBjb25uZWN0aW9uSGFuZGxlKSBEZWxh
eWVkCiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgUHJvY2Vzc1JlYWR5VG9TdXNwZW5k
KCkKKyNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDE2ODE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTExLDE0
ICsxNTExLDE0IEBAIC0gKHZvaWQpX3NuYXBzaG90UmVjdDooQ0dSZWN0KXJlY3RJblZpZXcKICAg
ICBDR1NpemUgaW1hZ2VTaXplID0gQ0dTaXplTWFrZShpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCk7
CiAgICAgCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIFdlYktpdDo6UHJvY2Vzc1Rocm90dGxlcjo6
VmlzaWJpbGl0eVRva2VuKiB2aXNpYmlsaXR5VG9rZW4gPSBuZXcgV2ViS2l0OjpQcm9jZXNzVGhy
b3R0bGVyOjpWaXNpYmlsaXR5VG9rZW4oX3BhZ2UtPnByb2Nlc3MoKS50aHJvdHRsZXIoKSwgV2Vi
S2l0OjpQcm9jZXNzVGhyb3R0bGVyOjpWaXNpYmlsaXR5OjpIaWRpbmcpOworICAgIFdlYktpdDo6
UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5VG9rZW4qIGFjdGl2aXR5VG9rZW4g
PSBuZXcgV2ViS2l0OjpQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbihf
cGFnZS0+cHJvY2VzcygpLnRocm90dGxlcigpKTsKICNlbmRpZgogICAgIAogICAgIHZvaWQoXmNv
cGllZENvbXBsZXRpb25IYW5kbGVyKShDR0ltYWdlUmVmKSA9IFtjb21wbGV0aW9uSGFuZGxlciBj
b3B5XTsKICAgICBfcGFnZS0+dGFrZVNuYXBzaG90KFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3Qo
c25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMpLCBXZWJDb3JlOjpleHBhbmRlZEludFNp
emUoV2ViQ29yZTo6RmxvYXRTaXplKGltYWdlU2l6ZSkpLCBXZWJLaXQ6OlNuYXBzaG90T3B0aW9u
c0V4Y2x1ZGVEZXZpY2VTY2FsZUZhY3RvciwgWz1dKGJvb2wsIGNvbnN0IFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmIGltYWdlSGFuZGxlKSB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAg
ICAgICAvLyBBdXRvbWF0aWNhbGx5IGRlbGV0ZSB3aGVuIHRoaXMgZ29lcyBvdXQgb2Ygc2NvcGUu
Ci0gICAgICAgIGF1dG8gdW5pcXVlVmlzaWJpbGl0eVRva2VuID0gc3RkOjp1bmlxdWVfcHRyPFdl
YktpdDo6UHJvY2Vzc1Rocm90dGxlcjo6VmlzaWJpbGl0eVRva2VuPih2aXNpYmlsaXR5VG9rZW4p
OworICAgICAgICBhdXRvIHVuaXF1ZUFjdGl2aXR5VG9rZW4gPSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
S2l0OjpQcm9jZXNzVGhyb3R0bGVyOjpCYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbj4oYWN0aXZpdHlU
b2tlbik7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIGlmIChpbWFnZUhhbmRsZS5pc051bGwo
KSkgewpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9Qcm9jZXNzQXNzZXJ0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9Qcm9jZXNzQXNz
ZXJ0aW9uLmgJKHJldmlzaW9uIDE2ODE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvUHJvY2Vzc0Fzc2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIGNs
YXNzIFByb2Nlc3NBc3NlcnRpb24gewogcHVibGljOgogICAgIFByb2Nlc3NBc3NlcnRpb24ocGlk
X3QsIEFzc2VydGlvblN0YXRlKTsKICAgICAKKyAgICBBc3NlcnRpb25TdGF0ZSBzdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXNzZXJ0aW9uU3RhdGU7IH0KKyAgICAKICAgICB2b2lkIHNldFN0YXRl
KEFzc2VydGlvblN0YXRlKTsKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1Byb2Nlc3NUaHJvdHRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1Byb2Nlc3NUaHJvdHRsZXIuaAkocmV2aXNpb24gMTY4MTc1KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9Qcm9jZXNzVGhyb3R0bGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDg0ICszNSw1MCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAK
K2NsYXNzIFdlYlByb2Nlc3NQcm94eTsKKyAgICAKIGNsYXNzIFByb2Nlc3NUaHJvdHRsZXIgewog
cHVibGljOgotICAgIGVudW0gY2xhc3MgVmlzaWJpbGl0eSB7Ci0gICAgICAgIFZpc2libGUsCi0g
ICAgICAgIEhpZGluZywKLSAgICAgICAgSGlkZGVuCisgICAgY2xhc3MgRm9yZWdyb3VuZEFjdGl2
aXR5VG9rZW4geworICAgIHB1YmxpYzoKKyAgICAgICAgRm9yZWdyb3VuZEFjdGl2aXR5VG9rZW4o
UHJvY2Vzc1Rocm90dGxlciYpOworICAgICAgICB+Rm9yZWdyb3VuZEFjdGl2aXR5VG9rZW4oKTsK
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgV2Vha1B0cjxQcm9jZXNzVGhyb3R0bGVy
PiBtX3Rocm90dGxlcjsKICAgICB9OwogICAgIAotICAgIGNsYXNzIFZpc2liaWxpdHlUb2tlbiB7
CisgICAgY2xhc3MgQmFja2dyb3VuZEFjdGl2aXR5VG9rZW4gewogICAgIHB1YmxpYzoKLSAgICAg
ICAgVmlzaWJpbGl0eVRva2VuKFByb2Nlc3NUaHJvdHRsZXImLCBWaXNpYmlsaXR5KTsKLSAgICAg
ICAgflZpc2liaWxpdHlUb2tlbigpOwotICAgICAgICAKLSAgICAgICAgVmlzaWJpbGl0eSB2aXNp
YmlsaXR5KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fdmlzaWJpbGl0
eTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRWaXNpYmlsaXR5KFZpc2li
aWxpdHkgdmlzaWJpbGl0eSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fdmlzaWJpbGl0
eSAhPSB2aXNpYmlsaXR5KQotICAgICAgICAgICAgICAgIHNldFZpc2liaWxpdHlJbnRlcm5hbCh2
aXNpYmlsaXR5KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZpc2liaWxpdHkgPT0g
VmlzaWJpbGl0eTo6SGlkaW5nKQotICAgICAgICAgICAgICAgIG1faGlkZVRpbWVyLnN0YXJ0T25l
U2hvdCgzMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9oaWRlVGltZXIu
c3RvcCgpOwotICAgICAgICB9CisgICAgICAgIEJhY2tncm91bmRBY3Rpdml0eVRva2VuKFByb2Nl
c3NUaHJvdHRsZXImKTsKKyAgICAgICAgfkJhY2tncm91bmRBY3Rpdml0eVRva2VuKCk7CiAgICAg
ICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgaGlkZVRpbWVyRmlyZWQoV2ViQ29yZTo6
VGltZXI8VmlzaWJpbGl0eVRva2VuPiopOwotICAgICAgICB2b2lkIHNldFZpc2liaWxpdHlJbnRl
cm5hbChWaXNpYmlsaXR5KTsKLSAgICAgICAgCiAgICAgICAgIFdlYWtQdHI8UHJvY2Vzc1Rocm90
dGxlcj4gbV90aHJvdHRsZXI7Ci0gICAgICAgIFZpc2liaWxpdHkgbV92aXNpYmlsaXR5OwotICAg
ICAgICBXZWJDb3JlOjpUaW1lcjxWaXNpYmlsaXR5VG9rZW4+IG1faGlkZVRpbWVyOwogICAgIH07
CiAgICAgCi0gICAgUHJvY2Vzc1Rocm90dGxlcigpCi0gICAgICAgIDogbV93ZWFrUHRyRmFjdG9y
eSh0aGlzKQotICAgICAgICAsIG1fdmlzaWJsZUNvdW50KDApCi0gICAgICAgICwgbV9oaWRpbmdD
b3VudCgwKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFZpc2liaWxp
dHlUb2tlbj4gdmlzaWJpbGl0eVRva2VuKFZpc2liaWxpdHkgdmlzaWJpbGl0eSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFZpc2liaWxpdHlUb2tlbj4oKnRoaXMsIHZp
c2liaWxpdHkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGRpZENvbm5uZWN0VG9Qcm9jZXNzKHBp
ZF90IHBpZCkKLSAgICB7Ci0gICAgICAgIG1fYXNzZXJ0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxQ
cm9jZXNzQXNzZXJ0aW9uPihwaWQsIGFzc2VydGlvblN0YXRlKCkpOwotICAgIH0KKyAgICBQcm9j
ZXNzVGhyb3R0bGVyKFdlYlByb2Nlc3NQcm94eSogcHJvY2Vzcyk7CisgICAgCisgICAgdm9pZCBk
aWRDb25ubmVjdFRvUHJvY2VzcyhwaWRfdCk7CisgICAgdm9pZCBwcm9jZXNzUmVhZHlUb1N1c3Bl
bmQoKTsKICAgICAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFZpc2liaWxpdHlUb2tlbjsK
KyAgICBmcmllbmQgY2xhc3MgRm9yZWdyb3VuZEFjdGl2aXR5VG9rZW47CisgICAgZnJpZW5kIGNs
YXNzIEJhY2tncm91bmRBY3Rpdml0eVRva2VuOwogICAgIFdlYWtQdHI8UHJvY2Vzc1Rocm90dGxl
cj4gd2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9
CiAgICAgCi0gICAgQXNzZXJ0aW9uU3RhdGUgYXNzZXJ0aW9uU3RhdGUoKQotICAgIHsKLSAgICAg
ICAgaWYgKG1fdmlzaWJsZUNvdW50KQotICAgICAgICAgICAgcmV0dXJuIEFzc2VydGlvblN0YXRl
OjpGb3JlZ3JvdW5kOwotICAgICAgICBpZiAobV9oaWRpbmdDb3VudCkKLSAgICAgICAgICAgIHJl
dHVybiBBc3NlcnRpb25TdGF0ZTo6QmFja2dyb3VuZDsKLSAgICAgICAgcmV0dXJuIEFzc2VydGlv
blN0YXRlOjpTdXNwZW5kZWQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdXBkYXRlQXNzZXJ0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2Fzc2VydGlvbikKLSAgICAgICAgICAgIG1fYXNzZXJ0
aW9uLT5zZXRTdGF0ZShhc3NlcnRpb25TdGF0ZSgpKTsKLSAgICB9CisgICAgQXNzZXJ0aW9uU3Rh
dGUgYXNzZXJ0aW9uU3RhdGUoKTsKKyAgICB2b2lkIHVwZGF0ZUFzc2VydGlvbigpOworICAgIHZv
aWQgdXBkYXRlQXNzZXJ0aW9uTm93KCk7CisgICAgdm9pZCBzdXNwZW5kVGltZXJGaXJlZChXZWJD
b3JlOjpUaW1lcjxQcm9jZXNzVGhyb3R0bGVyPiopOwogICAgIAorICAgIFdlYlByb2Nlc3NQcm94
eSogbV9wcm9jZXNzOwogICAgIFdlYWtQdHJGYWN0b3J5PFByb2Nlc3NUaHJvdHRsZXI+IG1fd2Vh
a1B0ckZhY3Rvcnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb2Nlc3NBc3NlcnRpb24+IG1fYXNz
ZXJ0aW9uOwotICAgIHVuc2lnbmVkIG1fdmlzaWJsZUNvdW50OwotICAgIHVuc2lnbmVkIG1faGlk
aW5nQ291bnQ7CisgICAgV2ViQ29yZTo6VGltZXI8UHJvY2Vzc1Rocm90dGxlcj4gbV9zdXNwZW5k
VGltZXI7CisgICAgdW5zaWduZWQgbV9mb3JlZ3JvdW5kQ291bnQ7CisgICAgdW5zaWduZWQgbV9i
YWNrZ3JvdW5kQ291bnQ7CisgICAgdW5zaWduZWQgbV9zdXNwZW5kTWVzc2FnZUNvdW50OwogfTsK
ICAgICAKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUHJvY2Vzc1Rocm90
dGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1Byb2Nl
c3NUaHJvdHRsZXIubW0JKHJldmlzaW9uIDE2ODE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvUHJvY2Vzc1Rocm90dGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNTAgKzI4
LDEwMSBAQAogCiAjaWYgUExBVEZPUk0oSU9TKQogCi1uYW1lc3BhY2UgV2ViS2l0IHsKKyNpbXBv
cnQgIldlYlByb2Nlc3NQcm94eS5oIgogCi1Qcm9jZXNzVGhyb3R0bGVyOjpWaXNpYmlsaXR5VG9r
ZW46OlZpc2liaWxpdHlUb2tlbihQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIsIFZpc2liaWxp
dHkgdmlzaWJpbGl0eSkKK25hbWVzcGFjZSBXZWJLaXQgeworICAgIAorc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHByb2Nlc3NTdXNwZW5zaW9uVGltZW91dCA9IDMwOworICAgIAorUHJvY2Vzc1Rocm90
dGxlcjo6Rm9yZWdyb3VuZEFjdGl2aXR5VG9rZW46OkZvcmVncm91bmRBY3Rpdml0eVRva2VuKFBy
b2Nlc3NUaHJvdHRsZXImIHRocm90dGxlcikKICAgICA6IG1fdGhyb3R0bGVyKHRocm90dGxlci53
ZWFrUHRyKCkpCi0gICAgLCBtX3Zpc2liaWxpdHkoVmlzaWJpbGl0eTo6SGlkZGVuKQotICAgICwg
bV9oaWRlVGltZXIodGhpcywgJlZpc2liaWxpdHlUb2tlbjo6aGlkZVRpbWVyRmlyZWQpCiB7Ci0g
ICAgc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKKyAgICB0aHJvdHRsZXIubV9mb3JlZ3JvdW5k
Q291bnQrKzsKKyAgICB0aHJvdHRsZXIudXBkYXRlQXNzZXJ0aW9uKCk7CiB9CiAKLVByb2Nlc3NU
aHJvdHRsZXI6OlZpc2liaWxpdHlUb2tlbjo6flZpc2liaWxpdHlUb2tlbigpCitQcm9jZXNzVGhy
b3R0bGVyOjpGb3JlZ3JvdW5kQWN0aXZpdHlUb2tlbjo6fkZvcmVncm91bmRBY3Rpdml0eVRva2Vu
KCkKIHsKLSAgICBzZXRWaXNpYmlsaXR5KFZpc2liaWxpdHk6OkhpZGRlbik7CisgICAgaWYgKFBy
b2Nlc3NUaHJvdHRsZXIqIHRocm90dGxlciA9IG1fdGhyb3R0bGVyLmdldCgpKSB7CisgICAgICAg
IHRocm90dGxlci0+bV9mb3JlZ3JvdW5kQ291bnQtLTsKKyAgICAgICAgdGhyb3R0bGVyLT51cGRh
dGVBc3NlcnRpb24oKTsKKyAgICB9CiB9CiAKLXZvaWQgUHJvY2Vzc1Rocm90dGxlcjo6VmlzaWJp
bGl0eVRva2VuOjpoaWRlVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxWaXNpYmlsaXR5VG9rZW4+
KikKK1Byb2Nlc3NUaHJvdHRsZXI6OkJhY2tncm91bmRBY3Rpdml0eVRva2VuOjpCYWNrZ3JvdW5k
QWN0aXZpdHlUb2tlbihQcm9jZXNzVGhyb3R0bGVyJiB0aHJvdHRsZXIpCisgICAgOiBtX3Rocm90
dGxlcih0aHJvdHRsZXIud2Vha1B0cigpKQogewotICAgIEFTU0VSVChtX3Zpc2liaWxpdHkgPT0g
VmlzaWJpbGl0eTo6SGlkaW5nKTsKLSAgICBtX3Zpc2liaWxpdHkgPSBWaXNpYmlsaXR5OjpIaWRk
ZW47CisgICAgdGhyb3R0bGVyLm1fYmFja2dyb3VuZENvdW50Kys7CisgICAgdGhyb3R0bGVyLnVw
ZGF0ZUFzc2VydGlvbigpOwogfQogCi12b2lkIFByb2Nlc3NUaHJvdHRsZXI6OlZpc2liaWxpdHlU
b2tlbjo6c2V0VmlzaWJpbGl0eUludGVybmFsKFZpc2liaWxpdHkgdmlzaWJpbGl0eSkKK1Byb2Nl
c3NUaHJvdHRsZXI6OkJhY2tncm91bmRBY3Rpdml0eVRva2VuOjp+QmFja2dyb3VuZEFjdGl2aXR5
VG9rZW4oKQogewotICAgIFByb2Nlc3NUaHJvdHRsZXIqIHRocm90dGxlciA9IG1fdGhyb3R0bGVy
LmdldCgpOwotICAgIGlmICghdGhyb3R0bGVyKSB7Ci0gICAgICAgIG1fdmlzaWJpbGl0eSA9IHZp
c2liaWxpdHk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoUHJvY2Vzc1Rocm90dGxlciogdGhy
b3R0bGVyID0gbV90aHJvdHRsZXIuZ2V0KCkpIHsKKyAgICAgICAgdGhyb3R0bGVyLT5tX2JhY2tn
cm91bmRDb3VudC0tOworICAgICAgICB0aHJvdHRsZXItPnVwZGF0ZUFzc2VydGlvbigpOwogICAg
IH0KK30KKworUHJvY2Vzc1Rocm90dGxlcjo6UHJvY2Vzc1Rocm90dGxlcihXZWJQcm9jZXNzUHJv
eHkqIHByb2Nlc3MpCisgICAgOiBtX3Byb2Nlc3MocHJvY2VzcykKKyAgICAsIG1fd2Vha1B0ckZh
Y3RvcnkodGhpcykKKyAgICAsIG1fc3VzcGVuZFRpbWVyKHRoaXMsICZQcm9jZXNzVGhyb3R0bGVy
OjpzdXNwZW5kVGltZXJGaXJlZCkKKyAgICAsIG1fZm9yZWdyb3VuZENvdW50KDApCisgICAgLCBt
X2JhY2tncm91bmRDb3VudCgwKQorICAgICwgbV9zdXNwZW5kTWVzc2FnZUNvdW50KDApCit7Cit9
CisgICAgCitBc3NlcnRpb25TdGF0ZSBQcm9jZXNzVGhyb3R0bGVyOjphc3NlcnRpb25TdGF0ZSgp
Cit7CisgICAgQVNTRVJUKCFtX3N1c3BlbmRUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICAKKyAgICBp
ZiAobV9mb3JlZ3JvdW5kQ291bnQpCisgICAgICAgIHJldHVybiBBc3NlcnRpb25TdGF0ZTo6Rm9y
ZWdyb3VuZDsKKyAgICBpZiAobV9iYWNrZ3JvdW5kQ291bnQpCisgICAgICAgIHJldHVybiBBc3Nl
cnRpb25TdGF0ZTo6QmFja2dyb3VuZDsKKyAgICByZXR1cm4gQXNzZXJ0aW9uU3RhdGU6OlN1c3Bl
bmRlZDsKK30KICAgICAKLSAgICBpZiAobV92aXNpYmlsaXR5ID09IFZpc2liaWxpdHk6OlZpc2li
bGUpCi0gICAgICAgIHRocm90dGxlci0+bV92aXNpYmxlQ291bnQtLTsKLSAgICBlbHNlIGlmICht
X3Zpc2liaWxpdHkgPT0gVmlzaWJpbGl0eTo6SGlkaW5nKQotICAgICAgICB0aHJvdHRsZXItPm1f
aGlkaW5nQ291bnQtLTsKLSAgICAKLSAgICBtX3Zpc2liaWxpdHkgPSB2aXNpYmlsaXR5OwotICAg
IAotICAgIGlmIChtX3Zpc2liaWxpdHkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSkKLSAgICAgICAg
dGhyb3R0bGVyLT5tX3Zpc2libGVDb3VudCsrOwotICAgIGVsc2UgaWYgKG1fdmlzaWJpbGl0eSA9
PSBWaXNpYmlsaXR5OjpIaWRpbmcpCi0gICAgICAgIHRocm90dGxlci0+bV9oaWRpbmdDb3VudCsr
Owordm9pZCBQcm9jZXNzVGhyb3R0bGVyOjp1cGRhdGVBc3NlcnRpb25Ob3coKQoreworICAgIG1f
c3VzcGVuZFRpbWVyLnN0b3AoKTsKKyAgICBpZiAobV9hc3NlcnRpb24pCisgICAgICAgIG1fYXNz
ZXJ0aW9uLT5zZXRTdGF0ZShhc3NlcnRpb25TdGF0ZSgpKTsKK30KICAgICAKLSAgICB0aHJvdHRs
ZXItPnVwZGF0ZUFzc2VydGlvbigpOwordm9pZCBQcm9jZXNzVGhyb3R0bGVyOjp1cGRhdGVBc3Nl
cnRpb24oKQoreworICAgIC8vIElmIHRoZSBwcm9jZXNzIGlzIGN1cnJlbnRseSBydW5uYWJsZSBi
dXQgd2lsbCBiZSBzdXNwZW5kZWQgdGhlbiBmaXJzdCBnaXZlIGl0IGEgY2hhbmNlIHRvIGNvbXBs
ZXRlIHdoYXQgaXQgd2FzIGRvaW5nCisgICAgLy8gYW5kIGNsZWFuIHVwIC0gbW92ZSBpdCB0byB0
aGUgYmFja2dyb3VuZCBhbmQgc2VuZCBpdCBhIG1lc3NhZ2UgdG8gbm90aWZ5LiBTY2hlZHVsZSBh
IHRpbWVvdXQgc28gaXQgY2FuJ3Qgc3RheSBydW5uaW5nCisgICAgLy8gaW4gdGhlIGJhY2tncm91
bmQgZm9yIHRvbyBsb25nLgorICAgIGlmIChtX2Fzc2VydGlvbiAmJiBtX2Fzc2VydGlvbi0+c3Rh
dGUoKSAhPSBBc3NlcnRpb25TdGF0ZTo6U3VzcGVuZGVkICYmICFtX2ZvcmVncm91bmRDb3VudCAm
JiAhbV9iYWNrZ3JvdW5kQ291bnQpIHsKKyAgICAgICAgKyttX3N1c3BlbmRNZXNzYWdlQ291bnQ7
CisgICAgICAgIG1fcHJvY2Vzcy0+c2VuZFByb2Nlc3NXaWxsU3VzcGVuZCgpOworICAgICAgICBt
X3N1c3BlbmRUaW1lci5zdGFydE9uZVNob3QocHJvY2Vzc1N1c3BlbnNpb25UaW1lb3V0KTsKKyAg
ICAgICAgbV9hc3NlcnRpb24tPnNldFN0YXRlKEFzc2VydGlvblN0YXRlOjpCYWNrZ3JvdW5kKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgdXBkYXRlQXNzZXJ0aW9uTm93KCk7Cit9CisKK3ZvaWQgUHJv
Y2Vzc1Rocm90dGxlcjo6ZGlkQ29ubm5lY3RUb1Byb2Nlc3MocGlkX3QgcGlkKQoreworICAgIG1f
c3VzcGVuZFRpbWVyLnN0b3AoKTsKKyAgICBtX2Fzc2VydGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8
UHJvY2Vzc0Fzc2VydGlvbj4ocGlkLCBhc3NlcnRpb25TdGF0ZSgpKTsKIH0KICAgICAKK3ZvaWQg
UHJvY2Vzc1Rocm90dGxlcjo6c3VzcGVuZFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8UHJvY2Vz
c1Rocm90dGxlcj4qKQoreworICAgIHVwZGF0ZUFzc2VydGlvbk5vdygpOworfQorICAgIAordm9p
ZCBQcm9jZXNzVGhyb3R0bGVyOjpwcm9jZXNzUmVhZHlUb1N1c3BlbmQoKQoreworICAgIGlmICgh
LS1tX3N1c3BlbmRNZXNzYWdlQ291bnQpCisgICAgICAgIHVwZGF0ZUFzc2VydGlvbk5vdygpOwor
fQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCShyZXZpc2lvbiAxNjgxNzUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI1MSw3ICsyNTEsNyBAQCAtICh2b2lkKWRpZE1vdmVUb1dpbmRvdwogewogICAgIGlm
IChzZWxmLndpbmRvdykKICAgICAgICAgW3NlbGYgX3VwZGF0ZUZvclNjcmVlbjpzZWxmLndpbmRv
dy5zY3JlZW5dOwotICAgIF9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpBbGxG
bGFncywgc2VsZi53aW5kb3cgPyBXZWJQYWdlUHJveHk6OldhbnRzUmVwbHlPck5vdDo6RG9lc05v
dFdhbnRSZXBseSA6IFdlYlBhZ2VQcm94eTo6V2FudHNSZXBseU9yTm90OjpEb2VzV2FudFJlcGx5
KTsKKyAgICBfcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFZpZXdTdGF0ZTo6QWxsRmxhZ3MpOwog
fQogCiAtIChXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilicm93c2luZ0NvbnRleHRDb250
cm9sbGVyCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlByb2Nlc3NQcm94
eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBy
b2Nlc3NQcm94eUlPUy5tbQkocmV2aXNpb24gMTY4MTc1KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XZWJQcm9jZXNzUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDggQEAKIAogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogCisjaW1wb3J0
ICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGJvb2wgV2Vi
UHJvY2Vzc1Byb3h5OjpmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKCkKQEAgLTcwLDYgKzcyLDE3
IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojp1cGRhdGVQcm9jZXNzU3VwcHIKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogICAgIAordm9pZCBXZWJQcm9jZXNzUHJveHk6OnNlbmRQcm9jZXNzV2ls
bFN1c3BlbmQoKQoreworICAgIGlmIChjYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpQcm9jZXNzV2lsbFN1c3BlbmQoKSwgMCk7Cit9CisgICAgCit2
b2lkIFdlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc1JlYWR5VG9TdXNwZW5kKCkKK3sKKyAgICBtX3Ro
cm90dGxlci0+cHJvY2Vzc1JlYWR5VG9TdXNwZW5kKCk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMTY4MTc1KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyNCw2
ICsxMTI0LDEyIEBAIHZvaWQgV2ViUHJvY2Vzczo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm0KICAg
ICAgICAgICAgIG1haW5GcmFtZS0+cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKTsKICAg
ICB9CiB9CisgICAgCit2b2lkIFdlYlByb2Nlc3M6OnByb2Nlc3NXaWxsU3VzcGVuZCgpCit7Cisg
ICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpQcm9jZXNzUmVhZHlUb1N1c3BlbmQoKSwgMCk7Cit9CisgICAgCiAjZW5kaWYgLy8gUExB
VEZPUk0oSU9TKQogCiB2b2lkIFdlYlByb2Nlc3M6OnBhZ2VEaWRFbnRlcldpbmRvdyh1aW50NjRf
dCBwYWdlSUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAkocmV2
aXNpb24gMTY4MTc1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgdm9pZCByZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbnMoKTsKKyAgICB2
b2lkIHByb2Nlc3NXaWxsU3VzcGVuZCgpOwogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKIAogICAg
IFJlZlB0cjxBUEk6Ok9iamVjdD4gYXBpT2JqZWN0QnlDb252ZXJ0aW5nRnJvbUhhbmRsZXMoQVBJ
OjpPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE2ODE3NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtOTEsNCAr
OTEsOCBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICNpZiBFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykKICAgICBTZXRFbmFibGVkU2VydmljZXMoYm9vbCBoYXNJbWFn
ZVNlcnZpY2VzLCBib29sIGhhc1NlbGVjdGlvblNlcnZpY2VzKQogI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgUHJvY2Vzc1dpbGxTdXNwZW5kKCkKKyNlbmRpZgogfQo=
</data>
<flag name="review"
          id="255132"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>