<?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>210492</bug_id>
          
          <creation_ts>2020-04-14 06:53:14 -0700</creation_ts>
          <short_desc>Make use of WeakHashSet for MediaStreamTrackPrivate and RealtimeMediaSource observers</short_desc>
          <delta_ts>2020-07-27 01:45:43 -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>WebRTC</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>hhafeez</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1641349</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-04-14 06:53:14 -0700</bug_when>
    <thetext>Make use of WeakHashSet for MediaStreamTrackPrivate and RealtimeMediaSource observers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641351</commentid>
    <comment_count>1</comment_count>
      <attachid>396410</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-04-14 06:59:13 -0700</bug_when>
    <thetext>Created attachment 396410
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641587</commentid>
    <comment_count>2</comment_count>
      <attachid>396410</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-14 16:04:57 -0700</bug_when>
    <thetext>Comment on attachment 396410
Patch

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

&gt; Source/WTF/wtf/WeakHashSet.h:144
&gt; +        for (auto&amp; item : map(m_set, [](auto&amp; item) { return makeWeakPtr(item-&gt;template get&lt;T&gt;()); })) {
&gt; +            if (item &amp;&amp; m_set.contains(*item.m_impl))

This doesn&apos;t look right to me.

The lambda shouldn&apos;t need to call makeWeakPtr. That&apos;s a needless cost. It can just return the pointer or null, depending on whether the WeakPtrImpl is truthy. 

Also, we shouldn&apos;t need to check contains(). We just need to check whether the pointer is non-null / the WeakPtrImpl is truthy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641741</commentid>
    <comment_count>3</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-04-15 05:23:06 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #2)
&gt; Comment on attachment 396410 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=396410&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/WeakHashSet.h:144
&gt; &gt; +        for (auto&amp; item : map(m_set, [](auto&amp; item) { return makeWeakPtr(item-&gt;template get&lt;T&gt;()); })) {
&gt; &gt; +            if (item &amp;&amp; m_set.contains(*item.m_impl))
&gt; 
&gt; This doesn&apos;t look right to me.
&gt; 
&gt; The lambda shouldn&apos;t need to call makeWeakPtr. That&apos;s a needless cost. It
&gt; can just return the pointer or null, depending on whether the WeakPtrImpl is
&gt; truthy. 

What is the guarantee that the vector pointers remain valid while looping over the vector and calling callback(item)?

WeakHashSet::add/remove could be made knowledgeable about the fact that a forEach call is ongoing to make sure m_set does not get modified during the forEach execution. Then we no longer need a vector at all. We would still probably need to check for any to-be-removed entry.

&gt; Also, we shouldn&apos;t need to check contains(). We just need to check whether
&gt; the pointer is non-null / the WeakPtrImpl is truthy.

This keeps parity with the existing code.
m_set can be modified as part of a callback(item) call and may no longer contain the next item in the vector.
We probably do not want an observer to be called after the observer removed itself from the set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642325</commentid>
    <comment_count>4</comment_count>
      <attachid>396410</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-04-16 10:38:40 -0700</bug_when>
    <thetext>Comment on attachment 396410
Patch

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

r=me

&gt;&gt;&gt; Source/WTF/wtf/WeakHashSet.h:144
&gt;&gt;&gt; +            if (item &amp;&amp; m_set.contains(*item.m_impl))
&gt;&gt; 
&gt;&gt; This doesn&apos;t look right to me.
&gt;&gt; 
&gt;&gt; The lambda shouldn&apos;t need to call makeWeakPtr. That&apos;s a needless cost. It can just return the pointer or null, depending on whether the WeakPtrImpl is truthy. 
&gt;&gt; 
&gt;&gt; Also, we shouldn&apos;t need to check contains(). We just need to check whether the pointer is non-null / the WeakPtrImpl is truthy.
&gt; 
&gt; What is the guarantee that the vector pointers remain valid while looping over the vector and calling callback(item)?
&gt; 
&gt; WeakHashSet::add/remove could be made knowledgeable about the fact that a forEach call is ongoing to make sure m_set does not get modified during the forEach execution. Then we no longer need a vector at all. We would still probably need to check for any to-be-removed entry.

I see. I guess I was imagining behavior more like other iteration and WTF::forEach, where modifying the set during iteration just isn&apos;t supported. But I don&apos;t object to supporting it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642605</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-17 01:40:57 -0700</bug_when>
    <thetext>Committed r260241: &lt;https://trac.webkit.org/changeset/260241&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 396410.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642606</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-17 01:41:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/61925770&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675183</commentid>
    <comment_count>7</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-07-27 01:45:43 -0700</bug_when>
    <thetext>*** Bug 213928 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396410</attachid>
            <date>2020-04-14 06:59:13 -0700</date>
            <delta_ts>2020-04-17 01:40:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210492-20200414155911.patch</filename>
            <type>text/plain</type>
            <size>15035</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBkNTQ5ZDE2NGExOTkwNjNmOTY3MzUw
ZDQ2Mzg4ZDk1MTQ2ZWViYTcuLjg2ZDNjMGE1ZGI4NThjODEyZWJlMWU1MDlhY2E3NTk0NTg2NDY0
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDQtMTQgIFlvdWVubiBGYWJsZXQgIDx5b3Vl
bm5AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgdXNlIG9mIFdlYWtIYXNoU2V0IGZvciBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZSBhbmQgUmVhbHRpbWVNZWRpYVNvdXJjZSBvYnNlcnZlcnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDQ5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1dlYWtI
YXNoU2V0Lmg6CisKIDIwMjAtMDQtMTMgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjYwMDUyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDY0NzQ2ZGUyNmUwZTYyZjBiNDc0ZGYwM2RmNWNmMTRkZTdkZmU3MDkuLmJhODZmYTYx
MWI3MWJlMDg2NTE0YmJjMjQ0ZjgyMWM4Zjk4YmUwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
OCBAQAorMjAyMC0wNC0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAg
ICAgICAgTWFrZSB1c2Ugb2YgV2Vha0hhc2hTZXQgZm9yIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
IGFuZCBSZWFsdGltZU1lZGlhU291cmNlIG9ic2VydmVycworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNDkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgYXJlIG1ha2luZyB1c2Ugb2YgV2Vha0hhc2hT
ZXQgdG8gaW1wcm92ZSB0aGUgcm9idXN0bmVzcyBvZiB0aGUgY29kZS4KKyAgICAgICAgRm9yIHRo
YXQgcHVycG9zZSB3ZSB1c2UgdGhlIG5ldyBXZWFrSGFzaFNldDo6Zm9yRWFjaCBtZXRob2QuCisg
ICAgICAgIE5vIGNoYW5nZSBvZiBiZWhhdmlvci4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFy
ZWNvcmRlci9NZWRpYVJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtUHJpdmF0ZTo6Zm9yRWFjaE9ic2VydmVyIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Zm9yRWFj
aE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjph
ZGRPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6
cmVtb3ZlT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU6OmZvckVhY2hPYnNlcnZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpoYXNPYnNlcnZlciBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlOjphZGRBdWRpb1NhbXBsZU9ic2Vy
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U6OnJlbW92ZUF1ZGlv
U2FtcGxlT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6
YWRkT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6cmVt
b3ZlT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6Zm9y
RWFjaE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U6Om5v
dGlmeU11dGVkT2JzZXJ2ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OnJlcXVlc3RUb0VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNl
Ojpmb3JFYWNoT2JzZXJ2ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVNZWRpYVNvdXJjZTo6bm90aWZ5TXV0ZWRPYnNlcnZlcnMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2Uu
aDoKKwogMjAyMC0wNC0xNCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUHJvdGVjdCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSBhbmQgUmVhbHRpbWVNZWRpYVNv
dXJjZSB3aGVuIGl0ZXJhdGluZyBpdHMgb2JzZXJ2ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9XZWFrSGFzaFNldC5oIGIvU291cmNlL1dURi93dGYvV2Vha0hhc2hTZXQuaAppbmRleCBj
MDAzNjhjMmVlZDEyOWRkYjYyNTk0NDg4MDczMTY2NGQyM2RhZGNkLi4xMTdjODlmY2I0Nzg1MDYw
ZjRiNWIyODQxMTMzOTUyMjk2ODg4YzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9XZWFr
SGFzaFNldC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dlYWtIYXNoU2V0LmgKQEAgLTEzOCw2ICsx
MzgsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zZXQuc2l6ZSgpOwogICAgIH0KIAor
ICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdGlvbjx2b2lkKFQmKT4mIGNhbGxiYWNrKQorICAg
IHsKKyAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogbWFwKG1fc2V0LCBbXShhdXRvJiBpdGVtKSB7
IHJldHVybiBtYWtlV2Vha1B0cihpdGVtLT50ZW1wbGF0ZSBnZXQ8VD4oKSk7IH0pKSB7CisgICAg
ICAgICAgICBpZiAoaXRlbSAmJiBtX3NldC5jb250YWlucygqaXRlbS5tX2ltcGwpKQorICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKCppdGVtKTsKKyAgICAgICAgfQorICAgIH0KKwogI2lmIEFTU0VS
VF9FTkFCTEVECiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QgeyBtX3NldC5jaGVj
a0NvbnNpc3RlbmN5KCk7IH0KICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhcmVjb3JkZXIvTWVkaWFSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXJlY29yZGVyL01lZGlhUmVjb3JkZXIuaAppbmRleCBjMjEwZDkxMzRjYTBkNzUwNzcw
ZDAzYzk0N2JhOTQ1MzRjODdhOWJlLi41MzJiMDM1ZGRiNTUwZjhmMGRkNjM1MDM3MjdhZDQzYzYw
ZjM0MWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhcmVjb3JkZXIv
TWVkaWFSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFyZWNvcmRl
ci9NZWRpYVJlY29yZGVyLmgKQEAgLTQyLDcgKzQyLDYgQEAgY2xhc3MgTWVkaWFSZWNvcmRlciBm
aW5hbAogICAgIDogcHVibGljIEFjdGl2ZURPTU9iamVjdAogICAgICwgcHVibGljIFJlZkNvdW50
ZWQ8TWVkaWFSZWNvcmRlcj4KICAgICAsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRh
Ci0gICAgLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TWVkaWFSZWNvcmRlcj4KICAgICAsIHByaXZh
dGUgTWVkaWFTdHJlYW06Ok9ic2VydmVyCiAgICAgLCBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlOjpPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChNZWRpYVJlY29y
ZGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgKaW5kZXggMTQ3NzZhY2RjZjIwOTlhOWMzOThh
YTFjOGFiYzQ4OTYwNjAyOTJiNC4uMDUxZGJiYjMzMjYzYjQyODdhNDY4NWEwMTBlZmJiZGM1MGEz
ZWI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgKQEAgLTUxLDcgKzUxLDcgQEAgY2xhc3Mg
UGl4ZWxCdWZmZXJDb25mb3JtZXJDVjsKIGNsYXNzIFZpZGVvTGF5ZXJNYW5hZ2VyT2JqQzsKIGNs
YXNzIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW07CiAKLWNsYXNzIE1lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQyBmaW5hbCA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2UsIHByaXZhdGUgTWVkaWFTdHJlYW1Qcml2YXRlOjpPYnNlcnZlciwgcHJpdmF0ZSBN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIsIHB1YmxpYyBTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXI6OkNsaWVudAorY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDIGZpbmFsIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSwgcHJpdmF0ZSBN
ZWRpYVN0cmVhbVByaXZhdGU6Ok9ic2VydmVyLCBwdWJsaWMgTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU6Ok9ic2VydmVyLCBwdWJsaWMgU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyOjpDbGllbnQKICAg
ICAsIHByaXZhdGUgTG9nZ2VySGVscGVyCiB7CiBwdWJsaWM6CkBAIC03OCw2ICs3OCw5IEBAIHB1
YmxpYzoKICAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4obV9sb2dJZGVudGlmaWVyKTsgfQogICAg
IFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBmaW5hbDsKIAorICAgIHVzaW5nIE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlcjo6d2Vha1B0ckZhY3Rvcnk7CisgICAgdXNp
bmcgV2Vha1ZhbHVlVHlwZSA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlcjo6V2Vh
a1ZhbHVlVHlwZTsKKwogcHJpdmF0ZToKICAgICBQbGF0Zm9ybUxheWVyKiByb290TGF5ZXIoKSBj
b25zdDsKICAgICB2b2lkIHJvb3RMYXllckJvdW5kc0RpZENoYW5nZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUuY3BwCmluZGV4IDM3M2EwNDU4MGE0YWFjODBiYWE3YzdiNTc0YjBjMjQ5ZDVm
ZjVmODcuLmQwNWI3ODc4MzNhOGZlYTRkN2I5N2Y2NTdjOGE4NTVmOGJhZmY3NjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKQEAgLTc4LDI3ICs3OCwyMyBAQCBNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6fk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlKCkKICAgICBtX3NvdXJjZS0+cmVt
b3ZlT2JzZXJ2ZXIoKnRoaXMpOwogfQogCi12b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpm
b3JFYWNoT2JzZXJ2ZXIoY29uc3QgRnVuY3Rpb248dm9pZChPYnNlcnZlciYpPiYgYXBwbHkpIGNv
bnN0Cit2b2lkIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpmb3JFYWNoT2JzZXJ2ZXIoY29uc3Qg
RnVuY3Rpb248dm9pZChPYnNlcnZlciYpPiYgYXBwbHkpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKLSAgICBm
b3IgKGF1dG8qIG9ic2VydmVyIDogY29weVRvVmVjdG9yKG1fb2JzZXJ2ZXJzKSkgewotICAgICAg
ICBpZiAoIW1fb2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBhcHBseSgqb2JzZXJ2ZXIpOwotICAgIH0KKyAgICBtX29ic2VydmVycy5m
b3JFYWNoKGFwcGx5KTsKIH0KIAogdm9pZCBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6YWRkT2Jz
ZXJ2ZXIoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyJiBvYnNlcnZlcikKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fb2JzZXJ2ZXJzLmFkZCgmb2JzZXJ2ZXIp
OworICAgIG1fb2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7CiB9CiAKIHZvaWQgTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU6OnJlbW92ZU9ic2VydmVyKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNl
cnZlciYgb2JzZXJ2ZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX29i
c2VydmVycy5yZW1vdmUoJm9ic2VydmVyKTsKKyAgICBtX29ic2VydmVycy5yZW1vdmUob2JzZXJ2
ZXIpOwogfQogCiBjb25zdCBTdHJpbmcmIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpsYWJlbCgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaAppbmRleCA1MTZlZWM3Njc1M2M2NzgxYjVm
YTdiMDFiMTNhMzg2ZTRhYTE0NWU5Li4yMmNhZGNlODdlZjJhYjhlZThhNTU1ZGE3ODkzMjYyYjli
MzhiNzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgKQEAgLTMyLDcgKzMyLDcgQEAKICNp
bmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL0xvZ2dlckhlbHBl
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC00NCwxNCArNDQsMTMgQEAgY2xhc3MgV2ViQXVkaW9Tb3VyY2VQcm92aWRlcjsKIAogY2xh
c3MgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUgZmluYWwKICAgICA6IHB1YmxpYyBSZWZDb3VudGVk
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPgotICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdl
cj4KICAgICAsIHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlOjpPYnNlcnZlcgogI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAogICAgICwgcHVibGljIExvZ2dlckhlbHBlcgogI2VuZGlmCiB7CiBw
dWJsaWM6Ci0gICAgY2xhc3MgT2JzZXJ2ZXIgeworICAgIGNsYXNzIE9ic2VydmVyIDogcHVibGlj
IENhbk1ha2VXZWFrUHRyPE9ic2VydmVyPiB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFs
IH5PYnNlcnZlcigpID0gZGVmYXVsdDsKIApAQCAtMTA0LDkgKzEwMyw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgYWRkT2JzZXJ2ZXIoT2JzZXJ2ZXImKTsKICAgICB2b2lkIHJlbW92ZU9ic2VydmVy
KE9ic2VydmVyJik7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIGhhc09ic2VydmVyKE9i
c2VydmVyJikgY29uc3Q7Ci0jZW5kaWYKKyAgICBib29sIGhhc09ic2VydmVyKE9ic2VydmVyJiBv
YnNlcnZlcikgY29uc3QgeyByZXR1cm4gbV9vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpOyB9
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mm
IHNldHRpbmdzKCkgY29uc3Q7CiAgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3Q7CkBAIC0xNDIsMTUgKzEzOSwxNCBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCB1cGRhdGVSZWFkeVN0YXRlKCk7CiAKLSAgICB2b2lkIGZvckVhY2hPYnNl
cnZlcihjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoT2JzZXJ2ZXImKT4mKSBjb25zdDsKKyAgICB2
b2lkIGZvckVhY2hPYnNlcnZlcihjb25zdCBGdW5jdGlvbjx2b2lkKE9ic2VydmVyJik+Jik7CiAK
ICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUiOyB9CiAgICAg
V1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKLSAgICBt
dXRhYmxlIFJlY3Vyc2l2ZUxvY2sgbV9vYnNlcnZlcnNMb2NrOwotICAgIEhhc2hTZXQ8T2JzZXJ2
ZXIqPiBtX29ic2VydmVyczsKKyAgICBXZWFrSGFzaFNldDxPYnNlcnZlcj4gbV9vYnNlcnZlcnM7
CiAgICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IG1fc291cmNlOwogCiAgICAgU3RyaW5nIG1f
aWQ7CkBAIC0xNjksMTQgKzE2NSw2IEBAIHByaXZhdGU6CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlVmVjdG9y
OwogCi0jaWYgQVNTRVJUX0VOQUJMRUQKLWlubGluZSBib29sIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpoYXNPYnNlcnZlcihPYnNlcnZlciYgb2JzZXJ2ZXIpIGNvbnN0Ci17Ci0gICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX29ic2VydmVyc0xvY2spOwotICAgIHJldHVybiBtX29ic2VydmVy
cy5jb250YWlucygmb2JzZXJ2ZXIpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3Bw
CmluZGV4IDU3MTE2MGYxNDc5ZTJmYTY2MjU1NTU1N2Y2MWZlNDIyZWFjNWNmNjguLmM4M2ViYWMz
NWM5ODQxMDg3MDA3ODc5MmYyZDA1NzFiNzM2OTcyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3Bw
CkBAIC02MCwzMSArNjAsMzEgQEAgUmVhbHRpbWVNZWRpYVNvdXJjZTo6UmVhbHRpbWVNZWRpYVNv
dXJjZShUeXBlIHR5cGUsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGRldmkKICAgICBtX2hhc2hl
ZElEID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuaGFzaFN0cmluZ1dp
dGhTYWx0KG1fcGVyc2lzdGVudElELCBtX2lkSGFzaFNhbHQpOwogfQogCi12b2lkIFJlYWx0aW1l
TWVkaWFTb3VyY2U6OmFkZEF1ZGlvU2FtcGxlT2JzZXJ2ZXIoUmVhbHRpbWVNZWRpYVNvdXJjZTo6
QXVkaW9TYW1wbGVPYnNlcnZlciYgb2JzZXJ2ZXIpCit2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OmFkZEF1ZGlvU2FtcGxlT2JzZXJ2ZXIoQXVkaW9TYW1wbGVPYnNlcnZlciYgb2JzZXJ2ZXIpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fYXVkaW9TYW1wbGVPYnNlcnZlcnNMb2NrKTsKICAgICBtX2F1ZGlvU2FtcGxlT2JzZXJ2ZXJz
LmFkZCgmb2JzZXJ2ZXIpOwogfQogCi12b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OnJlbW92ZUF1
ZGlvU2FtcGxlT2JzZXJ2ZXIoUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9TYW1wbGVPYnNlcnZl
ciYgb2JzZXJ2ZXIpCit2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OnJlbW92ZUF1ZGlvU2FtcGxl
T2JzZXJ2ZXIoQXVkaW9TYW1wbGVPYnNlcnZlciYgb2JzZXJ2ZXIpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fYXVkaW9TYW1wbGVP
YnNlcnZlcnNMb2NrKTsKICAgICBtX2F1ZGlvU2FtcGxlT2JzZXJ2ZXJzLnJlbW92ZSgmb2JzZXJ2
ZXIpOwogfQogCi12b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmFkZE9ic2VydmVyKFJlYWx0aW1l
TWVkaWFTb3VyY2U6Ok9ic2VydmVyJiBvYnNlcnZlcikKK3ZvaWQgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6YWRkT2JzZXJ2ZXIoT2JzZXJ2ZXImIG9ic2VydmVyKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgbV9vYnNlcnZlcnMuYWRkKCZvYnNlcnZlcik7CisgICAgbV9vYnNlcnZl
cnMuYWRkKG9ic2VydmVyKTsKIH0KIAotdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpyZW1vdmVP
YnNlcnZlcihSZWFsdGltZU1lZGlhU291cmNlOjpPYnNlcnZlciYgb2JzZXJ2ZXIpCit2b2lkIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OnJlbW92ZU9ic2VydmVyKE9ic2VydmVyJiBvYnNlcnZlcikKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fb2JzZXJ2ZXJzLnJlbW92ZSgmb2Jz
ZXJ2ZXIpOwotICAgIGlmIChtX29ic2VydmVycy5pc0VtcHR5KCkpCisgICAgbV9vYnNlcnZlcnMu
cmVtb3ZlKG9ic2VydmVyKTsKKyAgICBpZiAobV9vYnNlcnZlcnMuY29tcHV0ZXNFbXB0eSgpKQog
ICAgICAgICBzdG9wQmVpbmdPYnNlcnZlZCgpOwogfQogCkBAIC0xMzAsMTggKzEzMCwxNCBAQCB2
b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldEludGVycnVwdGVkRm9yVGVzdGluZyhib29sIGlu
dGVycnVwdGVkKQogICAgIG5vdGlmeU11dGVkQ2hhbmdlKGludGVycnVwdGVkKTsKIH0KIAotdm9p
ZCBSZWFsdGltZU1lZGlhU291cmNlOjpmb3JFYWNoT2JzZXJ2ZXIoY29uc3QgRnVuY3Rpb248dm9p
ZChPYnNlcnZlciYpPiYgYXBwbHkpIGNvbnN0Cit2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmZv
ckVhY2hPYnNlcnZlcihjb25zdCBGdW5jdGlvbjx2b2lkKE9ic2VydmVyJik+JiBhcHBseSkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpOwotICAgIGZvciAoYXV0byogb2JzZXJ2ZXIgOiBjb3B5VG9WZWN0b3IobV9v
YnNlcnZlcnMpKSB7Ci0gICAgICAgIGlmICghbV9vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGFwcGx5KCpvYnNlcnZlcik7Ci0gICAg
fQorICAgIG1fb2JzZXJ2ZXJzLmZvckVhY2goYXBwbHkpOwogfQogCi12b2lkIFJlYWx0aW1lTWVk
aWFTb3VyY2U6Om5vdGlmeU11dGVkT2JzZXJ2ZXJzKCkgY29uc3QKK3ZvaWQgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6bm90aWZ5TXV0ZWRPYnNlcnZlcnMoKQogewogICAgIGZvckVhY2hPYnNlcnZlcihb
XShhdXRvJiBvYnNlcnZlcikgewogICAgICAgICBvYnNlcnZlci5zb3VyY2VNdXRlZENoYW5nZWQo
KTsKQEAgLTI1Nyw3ICsyNTMsNyBAQCB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OnJlcXVlc3RU
b0VuZChPYnNlcnZlciYgY2FsbGluZ09ic2VydmVyKQogICAgIG1faXNFbmRlZCA9IHRydWU7CiAg
ICAgaGFzRW5kZWQoKTsKIAotICAgIGZvckVhY2hPYnNlcnZlcihbY2FsbGluZ09ic2VydmVyXShh
dXRvJiBvYnNlcnZlcikgeworICAgIGZvckVhY2hPYnNlcnZlcihbJmNhbGxpbmdPYnNlcnZlcl0o
YXV0byYgb2JzZXJ2ZXIpIHsKICAgICAgICAgaWYgKCZvYnNlcnZlciAhPSAmY2FsbGluZ09ic2Vy
dmVyKQogICAgICAgICAgICAgb2JzZXJ2ZXIuc291cmNlU3RvcHBlZCgpOwogICAgIH0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVN
ZWRpYVNvdXJjZS5oCmluZGV4IDU3NjA1Mzg3MzExZmQzMTcwOGUwY2VhZTFlMWViYTQ3MWExMGJm
MGIuLjY2YWEzNTA0YTcyMDUxNTliNTRlNTY0MDc5OWVmNjM1NWY5YmEwZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0Fk
YXB0ZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
V2Vha0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdURiB7CkBAIC03NSw3ICs3NSw3IEBAIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFJlYWx0aW1l
TWVkaWFTb3VyY2UKICNlbmRpZgogewogcHVibGljOgotICAgIGNsYXNzIE9ic2VydmVyIHsKKyAg
ICBjbGFzcyBPYnNlcnZlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxPYnNlcnZlcj4gewogICAg
IHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+T2JzZXJ2ZXIoKTsKIApAQCAtMjI4LDcgKzIyOCw3
IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTaXplQW5kRnJhbWVSYXRl
KE9wdGlvbmFsPGludD4gd2lkdGgsIE9wdGlvbmFsPGludD4gaGVpZ2h0LCBPcHRpb25hbDxkb3Vi
bGU+KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZUFuZEZyYW1lUmF0ZShPcHRpb25hbDxpbnQ+
IHdpZHRoLCBPcHRpb25hbDxpbnQ+IGhlaWdodCwgT3B0aW9uYWw8ZG91YmxlPik7CiAKLSAgICB2
b2lkIG5vdGlmeU11dGVkT2JzZXJ2ZXJzKCkgY29uc3Q7CisgICAgdm9pZCBub3RpZnlNdXRlZE9i
c2VydmVycygpOwogICAgIHZvaWQgbm90aWZ5TXV0ZWRDaGFuZ2UoYm9vbCBtdXRlZCk7CiAgICAg
dm9pZCBub3RpZnlTZXR0aW5nc0RpZENoYW5nZU9ic2VydmVycyhPcHRpb25TZXQ8UmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPik7CiAKQEAgLTIzOSw3ICsyMzksNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZSYpOwogICAgIHZv
aWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IFBsYXRmb3Jt
QXVkaW9EYXRhJiwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk7CiAKLSAg
ICB2b2lkIGZvckVhY2hPYnNlcnZlcihjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoT2JzZXJ2ZXIm
KT4mKSBjb25zdDsKKyAgICB2b2lkIGZvckVhY2hPYnNlcnZlcihjb25zdCBGdW5jdGlvbjx2b2lk
KE9ic2VydmVyJik+Jik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0UHJvZHVj
aW5nRGF0YSgpIHsgfQpAQCAtMjYyLDcgKzI2Miw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1f
cGVyc2lzdGVudElEOwogICAgIFR5cGUgbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAg
SGFzaFNldDxPYnNlcnZlcio+IG1fb2JzZXJ2ZXJzOworICAgIFdlYWtIYXNoU2V0PE9ic2VydmVy
PiBtX29ic2VydmVyczsKIAogICAgIG11dGFibGUgUmVjdXJzaXZlTG9jayBtX2F1ZGlvU2FtcGxl
T2JzZXJ2ZXJzTG9jazsKICAgICBIYXNoU2V0PEF1ZGlvU2FtcGxlT2JzZXJ2ZXIqPiBtX2F1ZGlv
U2FtcGxlT2JzZXJ2ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaAppbmRleCBh
NjY1NmNlZjkxMjhhNGIwZjYzYzU0YmNjZTdhMjYzYzgxYTdlODk5Li5jNjcxOTkzMzA5MmY5YTlh
MWY0MTY3OGU1YTNiNjdmNjg2ODFmYTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2UuaApAQCAtMTAxLDYgKzEwMSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBvYnNlcnZlU291cmNl
KCk7CiAgICAgdm9pZCB1bm9ic2VydmVTb3VyY2UoKTsKIAorICAgIHVzaW5nIE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpPYnNlcnZlcjo6d2Vha1B0ckZhY3Rvcnk7CisgICAgdXNpbmcgV2Vha1Zh
bHVlVHlwZSA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlcjo6V2Vha1ZhbHVlVHlw
ZTsKKwogICAgIC8vIE5vdGlmaWVyIEFQSQogICAgIHZvaWQgUmVnaXN0ZXJPYnNlcnZlcih3ZWJy
dGM6Ok9ic2VydmVySW50ZXJmYWNlKikgZmluYWwgeyB9CiAgICAgdm9pZCBVbnJlZ2lzdGVyT2Jz
ZXJ2ZXIod2VicnRjOjpPYnNlcnZlckludGVyZmFjZSopIGZpbmFsIHsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>