<?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>78740</bug_id>
          
          <creation_ts>2012-02-15 14:06:14 -0800</creation_ts>
          <short_desc>Made Weak&lt;T&gt; single-owner, adding PassWeak&lt;T&gt;</short_desc>
          <delta_ts>2012-02-16 17:56:19 -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>New Bugs</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>kling</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>557533</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-15 14:06:14 -0800</bug_when>
    <thetext>Made Weak&lt;T&gt; single-owner, adding PassWeak&lt;T&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557589</commentid>
    <comment_count>1</comment_count>
      <attachid>127241</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-15 14:52:37 -0800</bug_when>
    <thetext>Created attachment 127241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557597</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-15 14:58:26 -0800</bug_when>
    <thetext>*** Bug 76335 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557669</commentid>
    <comment_count>3</comment_count>
      <attachid>127241</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-02-15 15:51:13 -0800</bug_when>
    <thetext>Comment on attachment 127241
Patch

One idiom we have been adopting with other smart pointers in WebKit is that you never explicitly construct the Pass type, but rather have a friend function that does it, e.g. adoptPtr() and adoptRef().  Not sure that is necessary here but wanted to mention it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557804</commentid>
    <comment_count>4</comment_count>
      <attachid>127241</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-15 18:39:26 -0800</bug_when>
    <thetext>Comment on attachment 127241
Patch

Attachment 127241 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11529842</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558718</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-16 17:12:03 -0800</bug_when>
    <thetext>&gt; One idiom we have been adopting with other smart pointers in WebKit is that you never explicitly construct the Pass type, but rather have a friend function that does it, e.g. adoptPtr() and adoptRef().  Not sure that is necessary here but wanted to mention it.

Why do we do that? I might be able to replicate something similar for PassWeak&lt;T&gt; if I understand the intention. It&apos;s not trivial replicable, though, because a PassWeak&lt;T&gt; needs to allocate a backing handle, which the client doesn&apos;t initially have available for adoption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558738</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-16 17:26:47 -0800</bug_when>
    <thetext>... I might be able to make it work in a future patch that makes the backing for a *Weak&lt;T&gt; an explicit object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558766</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-16 17:56:19 -0800</bug_when>
    <thetext>Committed r108010: &lt;http://trac.webkit.org/changeset/108010&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127241</attachid>
            <date>2012-02-15 14:52:37 -0800</date>
            <delta_ts>2012-02-15 18:39:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78740-20120215145236.patch</filename>
            <type>text/plain</type>
            <size>28539</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA3ODM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDEyLTAyLTE1ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgTWFkZSBXZWFrPFQ+IHNpbmdsZS1vd25lciwgYWRkaW5nIFBhc3NXZWFrPFQ+CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODc0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgd29ya3MgYmFzaWNh
bGx5IHRoZSBzYW1lIHdheSBhcyBPd25QdHI8VD4gYW5kIFBhc3NPd25QdHI8VD4uCisKKyAgICAg
ICAgVGhpcyBjbGFyaWZpZXMgdGhlIHNlbWFudGljcyBvZiBmaW5hbGl6ZXJzOiBJdCdzIGFtYmln
dW91cyBhbmQgcHJvYmFibHkKKyAgICAgICAgYSBidWcgdG8gY29weSBhIGZpbmFsaXplciAoaS5l
LiwgaXQncyBhIGJ1ZyB0byBydW4gYSBDKysgZGVzdHJ1Y3RvcgorICAgICAgICB0d2ljZSksIHNv
IEkndmUgbWFkZSBXZWFrPFQ+IG5vbi1jb3B5YWJsZS4gQW55d2hlcmUgd2UgdXNlZCB0byBjb3B5
IGEgCisgICAgICAgIFdlYWs8VD4sIHdlIG5vdyB1c2UgUGFzc1dlYWs8VD4uCisKKyAgICAgICAg
VGhpcyBhbHNvIG1ha2VzIFdlYWs8VD4gSGFzaE1hcHMgbW9yZSBlZmZpY2llbnQuCisKKyAgICAg
ICAgKiBBUEkvSlNDbGFzc1JlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjpwcm90b3R5
cGUpOiBVc2UgUGFzc1dlYWs8VD4gaW5zdGVhZCBvZiBzZXQoKSwgc2luY2UgCisgICAgICAgIHNl
dCgpIGlzIGdvbmUgbm93LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRXhwb3J0IQorCisgICAgICAgICogaGVhcC9QYXNzV2Vhay5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChQYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlBh
c3NXZWFrOjpQYXNzV2Vhayk6CisgICAgICAgIChKU0M6OlBhc3NXZWFrOjp+UGFzc1dlYWspOgor
ICAgICAgICAoSlNDOjpQYXNzV2Vhazo6Z2V0KToKKyAgICAgICAgKEpTQzo6OjpsZWFrSGFuZGxl
KToKKyAgICAgICAgKEpTQzo6YWRvcHRXZWFrKToKKyAgICAgICAgKEpTQzo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChKU0M6Om9wZXJhdG9yIT0pOiBUaGlzIGlzIHRoZSBXZWFrPFQ+IHZlcnNpb24g
b2YgUGFzc093blB0cjxUPi4KKworICAgICAgICAqIGhlYXAvV2Vhay5oOgorICAgICAgICAoV2Vh
ayk6CisgICAgICAgIChKU0M6OldlYWs6OldlYWspOgorICAgICAgICAoSlNDOjpXZWFrOjpyZWxl
YXNlKToKKyAgICAgICAgKEpTQzo6V2Vhazo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6PSk6CisgICAgICAgIChKU0MpOiBDaGFuZ2VkIHRvIGJlIG5vbi1jb3B5YWJsZSwg
cmVtb3ZpbmcgYSBsb3Qgb2YgY29weWluZy1yZWxhdGVkCisgICAgICAgIEFQSXMuIEFkZGVkIGhh
c2ggdHJhaXRzIHNvIGhhc2ggbWFwcyBzdGlsbCB3b3JrLgorCisgICAgICAgICogaml0L0pJVFN0
dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cENhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2Fj
aGU6Omxvb2t1cE9yQ3JlYXRlKTogVXNlIFBhc3NXZWFrPFQ+LCBhcyByZXF1aXJlZCBieQorICAg
ICAgICBvdXIgbmV3IGhhc2ggbWFwIEFQSS4KKwogMjAxMi0wMi0xNCAgT2xpdmVyIEh1bnQgIDxv
bGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBJbnRlcnByZXRlci4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAkocmV2aXNpb24gMTA3Nzc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIyLDcgKzIyMiw3IEBAIEpTT2JqZWN0KiBPcGFxdWVKU0NsYXNzOjpwcm90b3R5cGUoRXhl
Y1MKIAogICAgIGlmICghanNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlKSB7CiAgICAgICAgIC8v
IFJlY3Vyc2l2ZSwgYnV0IHNob3VsZCBiZSBnb29kIGVub3VnaCBmb3Igb3VyIHB1cnBvc2VzCi0g
ICAgICAgIGpzQ2xhc3NEYXRhLmNhY2hlZFByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBKU0NhbGxiYWNrT2JqZWN0PEpTTm9uRmluYWxPYmplY3Q+OjpjcmVhdGUoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxi
YWNrT2JqZWN0U3RydWN0dXJlKCksIHByb3RvdHlwZUNsYXNzLCAmanNDbGFzc0RhdGEpLCAwKTsg
Ly8gc2V0IGpzQ2xhc3NEYXRhIGFzIHRoZSBvYmplY3QncyBwcml2YXRlIGRhdGEsIHNvIGl0IGNh
biBjbGVhciBvdXIgcmVmZXJlbmNlIG9uIGRlc3RydWN0aW9uCisgICAgICAgIGpzQ2xhc3NEYXRh
LmNhY2hlZFByb3RvdHlwZSA9IFBhc3NXZWFrPEpTT2JqZWN0PihleGVjLT5nbG9iYWxEYXRhKCks
IEpTQ2FsbGJhY2tPYmplY3Q8SlNOb25GaW5hbE9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJh
Y2tPYmplY3RTdHJ1Y3R1cmUoKSwgcHJvdG90eXBlQ2xhc3MsICZqc0NsYXNzRGF0YSksIDApOyAv
LyBzZXQganNDbGFzc0RhdGEgYXMgdGhlIG9iamVjdCdzIHByaXZhdGUgZGF0YSwgc28gaXQgY2Fu
IGNsZWFyIG91ciByZWZlcmVuY2Ugb24gZGVzdHJ1Y3Rpb24KICAgICAgICAgaWYgKHBhcmVudENs
YXNzKSB7CiAgICAgICAgICAgICBpZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IHBhcmVudENsYXNz
LT5wcm90b3R5cGUoZXhlYykpCiAgICAgICAgICAgICAgICAganNDbGFzc0RhdGEuY2FjaGVkUHJv
dG90eXBlLT5zZXRQcm90b3R5cGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm90b3R5cGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwNzc3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDcgQEAKIAkJMTQ4RjIxQjcxMDdFQzU0NzAw
NDJFQzJDIC8qIE5vZGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY2OTJBODZEMDI1NTU5N0QwMUZGNjBGNyAvKiBOb2Rlcy5jcHAgKi87IH07CiAJ
CTE0OEYyMUJDMTA3RUM1NEQwMDQyRUMyQyAvKiBQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGMEIzQTkwOUJCNERDMDAwNjhGQ0UzIC8q
IFBhcnNlci5jcHAgKi87IH07CiAJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dl
ckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDk1NTlFRDBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwICov
OyB9OworCQkxNDk3MjA5MTE0RUI4MzE1MDBGRUIxQjcgLyogUGFzc1dlYWsuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTcyMDkwMTRFQjgzMTUwMEZF
QjFCNyAvKiBQYXNzV2Vhay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0QTE1NjMyMTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFuY2VDYWNo
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBMTU2
MzAxMDk2NjM2NTAwNkZBMjYwIC8qIERhdGVJbnN0YW5jZUNhY2hlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRBMjNENzUwRjRFMUFCQjAwMjND
REFEIC8qIEpJVFN0dWJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0QTIzRDZDMEY0RTE5Q0UwMDIzQ0RBRCAvKiBKSVRTdHVicy5jcHAgKi87IH07
CiAJCTE0QTQyRTNGMEY0RjYwRUUwMDU5OTA5OSAvKiBUaW1lb3V0Q2hlY2tlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEE0MkUzRDBGNEY2MEVF
MDA1OTkwOTkgLyogVGltZW91dENoZWNrZXIuY3BwICovOyB9OwpAQCAtMTAzMCw2ICsxMDMxLDcg
QEAKIAkJMTQ4QTFFQ0QwRDEwQzIzQjAwNjlBNDdDIC8qIFJlZlB0ckhhc2hNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmUHRySGFzaE1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDhDRDFENzEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVm
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NvbnRleHRSZWZQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0OTU1OUVEMEREQ0RERjcw
MDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWJ1Z2dlckNhbGxGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTE0OTcyMDkwMTRFQjgzMTUwMEZFQjFCNyAvKiBQYXNzV2Vhay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXNzV2Vhay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDlCMjRGRjBEOEFGNkQxMDA5Q0I4QzcgLyogUmVnaXN0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJCIC8qIENvbnNlcnZhdGl2ZVJvb3Rz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnNlcnZhdGl2ZVJvb3RzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QTE1NjMwMTA5NjYzNjUwMDZGQTI2MCAv
KiBEYXRlSW5zdGFuY2VDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
YXRlSW5zdGFuY2VDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg1Niw2
ICsxODU4LDcgQEAKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2Uu
aCAqLywKIAkJCQkxNDJENkYwRTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCAqLywK
IAkJCQkxNDJENkYwRjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggKi8sCisJCQkJMTQ5
NzIwOTAxNEVCODMxNTAwRkVCMUI3IC8qIFBhc3NXZWFrLmggKi8sCiAJCQkJMTRCQTc4RjAxM0FB
Qjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMTQyRTMxMzIxMzRGRjBBNjAw
QUZBREI1IC8qIFN0cm9uZy5oICovLAogCQkJCTE0NTcyMjg1MTQzN0UxNDAwMDVGREUyNiAvKiBT
dHJvbmdJbmxpbmVzLmggKi8sCkBAIC0zMjI2LDYgKzMyMjksNyBAQAogCQkJCTBGOUZDOEM0MTRF
MUI2MDAwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNCRTJDQUUxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMTQ5NzIwOTExNEVCODMxNTAwRkVCMUI3IC8qIFBhc3NXZWFrLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NXZWFrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUGFzc1dlYWsuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Bhc3NXZWFrLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgUGFzc1dlYWtfaAorI2RlZmluZSBQYXNzV2Vha19oCisKKyNp
bmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiSGFuZGxlLmgiCisjaW5jbHVkZSAiTnVs
bFB0ci5oIgorI2luY2x1ZGUgIlR5cGVUcmFpdHMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFz
cyBQYXNzV2VhazsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFBhc3NXZWFrPFQ+IGFkb3B0V2VhayhI
YW5kbGVTbG90KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1dlYWsgOiBwdWJs
aWMgSGFuZGxlPFQ+IHsKKyAgICB1c2luZyBIYW5kbGU8VD46OnNsb3Q7CisgICAgdXNpbmcgSGFu
ZGxlPFQ+OjpzZXRTbG90OworCitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBIYW5kbGU8
VD46OkV4dGVybmFsVHlwZSBFeHRlcm5hbFR5cGU7CisKKyAgICBQYXNzV2VhaygpIDogSGFuZGxl
PFQ+KCkgeyB9CisKKyAgICBQYXNzV2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4dGVy
bmFsVHlwZSBleHRlcm5hbFR5cGUgPSBFeHRlcm5hbFR5cGUoKSwgV2Vha0hhbmRsZU93bmVyKiB3
ZWFrT3duZXIgPSAwLCB2b2lkKiBjb250ZXh0ID0gMCkKKyAgICAgICAgOiBIYW5kbGU8VD4oZ2xv
YmFsRGF0YS5oZWFwLmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKSkKKyAgICB7CisgICAgICAgIEhh
bmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+bWFrZVdlYWsoc2xvdCgpLCB3ZWFrT3duZXIsIGNv
bnRleHQpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSGFuZGxlVHlwZXM8VD46OnRvSlNWYWx1
ZShleHRlcm5hbFR5cGUpOworICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QoKSktPndy
aXRlQmFycmllcihzbG90KCksIHZhbHVlKTsKKyAgICAgICAgKnNsb3QoKSA9IHZhbHVlOworICAg
IH0KKworICAgIC8vIEl0IHNvbWV3aGF0IGJyZWFrcyB0aGUgdHlwZSBzeXN0ZW0gdG8gYWxsb3cg
dHJhbnNmZXIgb2Ygb3duZXJzaGlwIG91dCBvZgorICAgIC8vIGEgY29uc3QgUGFzc1dlYWsuIEhv
d2V2ZXIsIGl0IG1ha2VzIGl0IG11Y2ggZWFzaWVyIHRvIHdvcmsgd2l0aCBQYXNzV2VhaworICAg
IC8vIHRlbXBvcmFyaWVzLCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIG5lZWQgdG8gdXNlIHJlYWwgY29u
c3QgUGFzc1dlYWtzIGFueXdheS4KKyAgICBQYXNzV2Vhayhjb25zdCBQYXNzV2VhayYgbykgOiBI
YW5kbGU8VD4oby5sZWFrSGFuZGxlKCkpIHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFBh
c3NXZWFrKGNvbnN0IFBhc3NXZWFrPFU+JiBvKSA6IEhhbmRsZTxUPihvLmxlYWtIYW5kbGUoKSkg
eyB9CisKKyAgICB+UGFzc1dlYWsoKQorICAgIHsKKyAgICAgICAgaWYgKCFzbG90KCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+ZGVh
bGxvY2F0ZShzbG90KCkpOworICAgICAgICBzZXRTbG90KDApOworICAgIH0KKworICAgIEV4dGVy
bmFsVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiAgSGFuZGxlVHlwZXM8VD46OmdldEZyb21TbG90
KHNsb3QoKSk7IH0KKworICAgIEhhbmRsZVNsb3QgbGVha0hhbmRsZSgpIGNvbnN0IFdBUk5fVU5V
U0VEX1JFVFVSTjsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgUGFzc1dlYWsgYWRvcHRXZWFrPFQ+
KEhhbmRsZVNsb3QpOworCisgICAgZXhwbGljaXQgUGFzc1dlYWsoSGFuZGxlU2xvdCBzbG90KSA6
IEhhbmRsZTxUPihzbG90KSB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBI
YW5kbGVTbG90IFBhc3NXZWFrPFQ+OjpsZWFrSGFuZGxlKCkgY29uc3QKK3sKKyAgICBIYW5kbGVT
bG90IHNsb3QgPSB0aGlzLT5zbG90KCk7CisgICAgY29uc3RfY2FzdDxQYXNzV2VhazxUPio+KHRo
aXMpLT5zZXRTbG90KDApOworICAgIHJldHVybiBzbG90OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBQYXNzV2VhazxUPiBhZG9wdFdlYWsoSGFuZGxlU2xvdCBzbG90KQoreworICAgIHJldHVy
biBQYXNzV2VhazxUPihzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYXNzV2VhazxUPiYgYSwgY29uc3QgUGFz
c1dlYWs8VT4mIGIpIAoreworICAgIHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7IAorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFBhc3NXZWFrPFQ+JiBhLCBjb25zdCBXZWFrPFU+JiBiKSAKK3sKKyAgICByZXR1cm4gYS5n
ZXQoKSA9PSBiLmdldCgpOyAKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWFrPFQ+JiBhLCBjb25zdCBQYXNzV2VhazxV
PiYgYikgCit7CisgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYi5nZXQoKTsgCit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFz
c1dlYWs8VD4mIGEsIFUqIGIpIAoreworICAgIHJldHVybiBhLmdldCgpID09IGI7IAorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFQq
IGEsIGNvbnN0IFBhc3NXZWFrPFU+JiBiKSAKK3sKKyAgICByZXR1cm4gYSA9PSBiLmdldCgpOyAK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBQYXNzV2VhazxUPiYgYSwgY29uc3QgUGFzc1dlYWs8VT4mIGIpIAoreworICAg
IHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7IAorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBhc3NXZWFrPFQ+JiBhLCBj
b25zdCBXZWFrPFU+JiBiKSAKK3sKKyAgICByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOyAKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBXZWFrPFQ+JiBhLCBjb25zdCBQYXNzV2VhazxVPiYgYikgCit7CisgICAgcmV0dXJu
IGEuZ2V0KCkgIT0gYi5nZXQoKTsgCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUGFzc1dlYWs8VD4mIGEsIFUqIGIpCit7
CisgICAgcmV0dXJuIGEuZ2V0KCkgIT0gYjsgCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oVCogYSwgY29uc3QgUGFzc1dlYWs8VT4m
IGIpIAoreworICAgIHJldHVybiBhICE9IGIuZ2V0KCk7IAorfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIFBhc3NXZWFrX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
LmgJKHJldmlzaW9uIDEwNzc3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzAsMTEgKzMwLDE0IEBACiAjaW5jbHVkZSAiSGFuZGxlLmgiCiAj
aW5jbHVkZSAiSGFuZGxlSGVhcC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1
ZGUgIlBhc3NXZWFrLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiAvLyBBIHdlYWtseSByZWZlcmVu
Y2VkIGhhbmRsZSB0aGF0IGJlY29tZXMgMCB3aGVuIHRoZSB2YWx1ZSBpdCBwb2ludHMgdG8gaXMg
Z2FyYmFnZSBjb2xsZWN0ZWQuCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2VhayA6IHB1
YmxpYyBIYW5kbGU8VD4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOworCiAgICAg
dXNpbmcgSGFuZGxlPFQ+OjpzbG90OwogICAgIHVzaW5nIEhhbmRsZTxUPjo6c2V0U2xvdDsKIApA
QCAtNDYsMTEgKzQ5LDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgV2VhayhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEV4dGVybmFsVHlwZSB2YWx1ZSA9IEV4dGVybmFsVHlwZSgp
LCBXZWFrSGFuZGxlT3duZXIqIHdlYWtPd25lciA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKQorICAg
IFdlYWsoc3RkOjpudWxscHRyX3QpCisgICAgICAgIDogSGFuZGxlPFQ+KCkKKyAgICB7CisgICAg
fQorCisgICAgV2VhayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4dGVybmFsVHlwZSBleHRl
cm5hbFR5cGUgPSBFeHRlcm5hbFR5cGUoKSwgV2Vha0hhbmRsZU93bmVyKiB3ZWFrT3duZXIgPSAw
LCB2b2lkKiBjb250ZXh0ID0gMCkKICAgICAgICAgOiBIYW5kbGU8VD4oZ2xvYmFsRGF0YS5oZWFw
LmhhbmRsZUhlYXAoKS0+YWxsb2NhdGUoKSkKICAgICB7CiAgICAgICAgIEhhbmRsZUhlYXA6Omhl
YXBGb3Ioc2xvdCgpKS0+bWFrZVdlYWsoc2xvdCgpLCB3ZWFrT3duZXIsIGNvbnRleHQpOwotICAg
ICAgICBzZXQodmFsdWUpOworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSGFuZGxlVHlwZXM8VD46
OnRvSlNWYWx1ZShleHRlcm5hbFR5cGUpOworICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNs
b3QoKSktPndyaXRlQmFycmllcihzbG90KCksIHZhbHVlKTsKKyAgICAgICAgKnNsb3QoKSA9IHZh
bHVlOwogICAgIH0KIAogICAgIGVudW0gQWRvcHRUYWcgeyBBZG9wdCB9OwpAQCAtNTksMjMgKzY5
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdmFsaWRhdGVDZWxsKGdldCgpKTsKICAgICB9
Ci0gICAgCi0gICAgV2Vhayhjb25zdCBXZWFrJiBvdGhlcikKLSAgICAgICAgOiBIYW5kbGU8VD4o
KQotICAgIHsKLSAgICAgICAgaWYgKCFvdGhlci5zbG90KCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIHNldFNsb3QoSGFuZGxlSGVhcDo6aGVhcEZvcihvdGhlci5zbG90KCkpLT5jb3B5
V2VhayhvdGhlci5zbG90KCkpKTsKLSAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4g
V2Vhayhjb25zdCBXZWFrPFU+JiBvdGhlcikKLSAgICAgICAgOiBIYW5kbGU8VD4oKQotICAgIHsK
LSAgICAgICAgaWYgKCFvdGhlci5zbG90KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IHNldFNsb3QoSGFuZGxlSGVhcDo6aGVhcEZvcihvdGhlci5zbG90KCkpLT5jb3B5V2VhayhvdGhl
ci5zbG90KCkpKTsKLSAgICB9Ci0gICAgCiAgICAgZW51bSBIYXNoVGFibGVEZWxldGVkVmFsdWVU
YWcgeyBIYXNoVGFibGVEZWxldGVkVmFsdWUgfTsKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc2xvdCgpID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
OyB9CiAgICAgV2VhayhIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpCkBAIC04Myw2ICs3NywxMSBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFdlYWso
Y29uc3QgUGFzc1dlYWs8VT4mIG90aGVyKQorICAgICAgICA6IEhhbmRsZTxUPihvdGhlci5sZWFr
SGFuZGxlKCkpCisgICAgeworICAgIH0KKwogICAgIH5XZWFrKCkKICAgICB7CiAgICAgICAgIGNs
ZWFyKCk7CkBAIC05Myw4ICs5MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEhhbmRsZTxUPjo6c3dh
cChvdGhlcik7CiAgICAgfQogCisgICAgV2VhayYgb3BlcmF0b3I9KGNvbnN0IFBhc3NXZWFrPFQ+
Jik7CisKICAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29uc3QgeyByZXR1cm4gIEhhbmRsZVR5cGVz
PFQ+OjpnZXRGcm9tU2xvdChzbG90KCkpOyB9CiAgICAgCisgICAgUGFzc1dlYWs8VD4gcmVsZWFz
ZSgpIHsgUGFzc1dlYWs8VD4gdG1wID0gYWRvcHRXZWFrPFQ+KHNsb3QoKSk7IHNldFNsb3QoMCk7
IHJldHVybiB0bXA7IH0KKwogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgaWYgKCFz
bG90KCkpCkBAIC0xMDMsMzIgKzEwNiw2IEBAIHB1YmxpYzoKICAgICAgICAgc2V0U2xvdCgwKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeHRl
cm5hbFR5cGUgdmFsdWUsIFdlYWtIYW5kbGVPd25lciogd2Vha093bmVyID0gMCwgdm9pZCogY29u
dGV4dCA9IDApCi0gICAgewotICAgICAgICBpZiAoIXNsb3QoKSkgewotICAgICAgICAgICAgc2V0
U2xvdChnbG9iYWxEYXRhLmhlYXAuaGFuZGxlSGVhcCgpLT5hbGxvY2F0ZSgpKTsKLSAgICAgICAg
ICAgIEhhbmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+bWFrZVdlYWsoc2xvdCgpLCB3ZWFrT3du
ZXIsIGNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChIYW5kbGVIZWFwOjpoZWFw
Rm9yKHNsb3QoKSktPmhhc1dlYWtPd25lcihzbG90KCksIHdlYWtPd25lcikpOwotICAgICAgICBz
ZXQodmFsdWUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBXZWFrJiBvcGVy
YXRvcj0oY29uc3QgV2VhazxVPiYgb3RoZXIpCi0gICAgewotICAgICAgICBjbGVhcigpOwotICAg
ICAgICBpZiAob3RoZXIuc2xvdCgpKQotICAgICAgICAgICAgc2V0U2xvdChIYW5kbGVIZWFwOjpo
ZWFwRm9yKG90aGVyLnNsb3QoKSktPmNvcHlXZWFrKG90aGVyLnNsb3QoKSkpOwotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgV2VhayYgb3BlcmF0b3I9KGNvbnN0IFdlYWsmIG90
aGVyKQotICAgIHsKLSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgaWYgKG90aGVyLnNsb3QoKSkK
LSAgICAgICAgICAgIHNldFNsb3QoSGFuZGxlSGVhcDo6aGVhcEZvcihvdGhlci5zbG90KCkpLT5j
b3B5V2VhayhvdGhlci5zbG90KCkpKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAg
ICAKICAgICBIYW5kbGVTbG90IGxlYWtIYW5kbGUoKQogICAgIHsKICAgICAgICAgQVNTRVJUKEhh
bmRsZUhlYXA6OmhlYXBGb3Ioc2xvdCgpKS0+aGFzRmluYWxpemVyKHNsb3QoKSkpOwpAQCAtMTM5
LDE0ICsxMTYsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIEhhbmRsZVNsb3Qg
aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxIYW5kbGVT
bG90PigtMSk7IH0KLQotICAgIHZvaWQgc2V0KEV4dGVybmFsVHlwZSBleHRlcm5hbFR5cGUpCi0g
ICAgewotICAgICAgICBBU1NFUlQoc2xvdCgpKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEhh
bmRsZVR5cGVzPFQ+Ojp0b0pTVmFsdWUoZXh0ZXJuYWxUeXBlKTsKLSAgICAgICAgSGFuZGxlSGVh
cDo6aGVhcEZvcihzbG90KCkpLT53cml0ZUJhcnJpZXIoc2xvdCgpLCB2YWx1ZSk7Ci0gICAgICAg
ICpzbG90KCkgPSB2YWx1ZTsKLSAgICB9CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUg
dm9pZCBzd2FwKFdlYWs8VD4mIGEsIFdlYWs8VD4mIGIpCkBAIC0xNTQsNiArMTIzLDEzIEBAIHRl
bXBsYXRlPGNsYXNzIFQ+IGlubGluZSB2b2lkIHN3YXAoV2VhazwKICAgICBhLnN3YXAoYik7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBXZWFrPFQ+JiBXZWFrPFQ+OjpvcGVyYXRv
cj0oY29uc3QgUGFzc1dlYWs8VD4mIG8pCit7CisgICAgY2xlYXIoKTsKKyAgICBzZXRTbG90KG8u
bGVha0hhbmRsZSgpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTE2Miw3ICsxMzgsMjMgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IFZlY3RvclRyYWl0cwogICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkNvbXBh
cmVXaXRoTWVtY21wID0gZmFsc2U7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3Qg
SGFzaFRyYWl0czxKU0M6OldlYWs8UD4gPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6Oldl
YWs8UD4gPiB7IH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
OldlYWs8VD4gPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OldlYWs8VD4gPiB7CisgICAg
dHlwZWRlZiBKU0M6OldlYWs8VD4gU3RvcmFnZVR5cGU7CisKKyAgICB0eXBlZGVmIHN0ZDo6bnVs
bHB0cl90IEVtcHR5VmFsdWVUeXBlOworICAgIHN0YXRpYyBFbXB0eVZhbHVlVHlwZSBlbXB0eVZh
bHVlKCkgeyByZXR1cm4gRW1wdHlWYWx1ZVR5cGUoKTsgfQorCisgICAgdHlwZWRlZiBKU0M6OlBh
c3NXZWFrPFQ+IFBhc3NJblR5cGU7CisgICAgc3RhdGljIHZvaWQgc3RvcmUoUGFzc0luVHlwZSB2
YWx1ZSwgU3RvcmFnZVR5cGUmIHN0b3JhZ2UpIHsgc3RvcmFnZSA9IHZhbHVlOyB9CisKKyAgICB0
eXBlZGVmIEpTQzo6UGFzc1dlYWs8VD4gUGFzc091dFR5cGU7CisgICAgc3RhdGljIFBhc3NPdXRU
eXBlIHBhc3NPdXQoU3RvcmFnZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7
IH0KKyAgICBzdGF0aWMgUGFzc091dFR5cGUgcGFzc091dChFbXB0eVZhbHVlVHlwZSkgeyByZXR1
cm4gUGFzc091dFR5cGUoKTsgfQorCisgICAgdHlwZWRlZiB0eXBlbmFtZSBTdG9yYWdlVHlwZTo6
RXh0ZXJuYWxUeXBlIFBlZWtUeXBlOworICAgIHN0YXRpYyBQZWVrVHlwZSBwZWVrKGNvbnN0IFN0
b3JhZ2VUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCk7IH0KKyAgICBzdGF0aWMgUGVl
a1R5cGUgcGVlayhFbXB0eVZhbHVlVHlwZSkgeyByZXR1cm4gUGVla1R5cGUoKTsgfQorfTsKIAog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24g
MTA3Nzc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2MDAsMTUgKzM2MDAsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJ
VFRodW5rczo6Y3RpU3R1YgogCiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5j
dGlvblN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlv
biwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCiB7Ci0gICAgc3RkOjpwYWlyPEhvc3RGdW5j
dGlvblN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1h
cC0+YWRkKGZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkpOwotICAgIGlmICghKmVu
dHJ5LmZpcnN0LT5zZWNvbmQpCi0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9i
YWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGls
ZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0
KCkpLCBjb25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMpKTsKLSAgICByZXR1cm4gZW50cnkuZmlyc3Qt
PnNlY29uZC5nZXQoKTsKKyAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0
b3IsIGJvb2w+IHJlc3VsdCA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBQ
YXNzV2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKKyAgICBpZiAoIXJlc3VsdC5maXJzdC0+c2Vj
b25kKQorICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1
dGFibGU+KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEs
IEpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlv
biwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0
aXZlQ29uc3RydWN0KCkpLCBjb25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMpKTsKKyAgICByZXR1cm4g
cmVzdWx0LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CiB9CiAKIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRo
dW5rczo6aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1
bmN0aW9uIGZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIEludHJpbnNpYyBpbnRy
aW5zaWMpCiB7Ci0gICAgc3RkOjpwYWlyPEhvc3RGdW5jdGlvblN0dWJNYXA6Oml0ZXJhdG9yLCBi
b29sPiBlbnRyeSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBXZWFrPE5h
dGl2ZUV4ZWN1dGFibGU+KCkpOworICAgIHN0ZDo6cGFpcjxIb3N0RnVuY3Rpb25TdHViTWFwOjpp
dGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmFkZChmdW5jdGlv
biwgUGFzc1dlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3Qt
PnNlY29uZCkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZTsKICAgICAgICAg
aWYgKGdlbmVyYXRvcikgewpAQCAtMzYxOCw3ICszNjE4LDcgQEAgTmF0aXZlRXhlY3V0YWJsZSog
SklUVGh1bmtzOjpob3N0RnVuY3RpbwogICAgICAgICAgICAgICAgIGNvZGUgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBjb2RlID0gSklUOjpj
b21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbik7Ci0gICAgICAgIGVudHJ5
LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUo
Kmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rp
b25Bc0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMpKTsKKyAgICAgICAgZW50cnkuZmlyc3QtPnNlY29u
ZCA9IFBhc3NXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRh
YmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNh
bGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBpbnRyaW5zaWMpKTsKICAgICB9CiAgICAgcmV0
dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCShyZXZpc2lvbiAxMDc3NzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgUmVnRXhwKiBSZWdFeHBDYWNoZTo6bG9va3VwT3JDcmVhdGUo
Y29ucwogICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBzZWNvbmQgbG9va3VwIHRvIGFkZCB0aGUgUmVn
RXhwIGFzCiAgICAgLy8gYWxsb2NhdGluZyBpdCBtYXkgaGF2ZSBjYXVzZWQgYSBnYyBjeWNsZSwg
d2hpY2ggaW4KICAgICAvLyB0dXJuIG1heSBoYXZlIHJlbW92ZWQgaXRlbXMgZnJvbSB0aGUgY2Fj
aGUuCi0gICAgbV93ZWFrQ2FjaGUuYWRkKGtleSwgV2VhazxSZWdFeHA+KCptX2dsb2JhbERhdGEs
IHJlZ0V4cCwgdGhpcykpOworICAgIG1fd2Vha0NhY2hlLmFkZChrZXksIFBhc3NXZWFrPFJlZ0V4
cD4oKm1fZ2xvYmFsRGF0YSwgcmVnRXhwLCB0aGlzKSk7CiAgICAgcmV0dXJuIHJlZ0V4cDsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA3ODM3KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTItMDItMTUgIEdlb2Zm
cmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBNYWRlIFdlYWs8VD4gc2lu
Z2xlLW93bmVyLCBhZGRpbmcgUGFzc1dlYWs8VD4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNTdHJpbmdT
bG93Q2FzZSk6IFVzZSBQYXNzV2VhazxUPiwgYXMgcmVxdWlyZWQgYnkgb3VyIG5ldworICAgICAg
ICBoYXNoIG1hcCBBUEkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoK
KyAgICAgICAgKFdlYkNvcmU6OmdldENhY2hlZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FjaGVXcmFwcGVyKTogVXNlIFBhc3NXZWFrPFQ+IGFuZCByYXcgcG9pbnRlciwgYXMgcmVxdWly
ZWQgYnkKKyAgICAgICAgb3VyIG5ldyBoYXNoIG1hcCBBUEkuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5l
cjo6c2V0V3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRXcmFwcGFibGU6OnNldFdyYXBwZXIpOgorICAgICAg
ICAqIGJyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Oklu
c3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9y
b290LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q6OmFkZFJ1bnRpbWVP
YmplY3QpOiBVc2UgUGFzc1dlYWs8VD4sIGFzCisgICAgICAgIHJlcXVpcmVkIGJ5IG91ciBuZXcg
aGFzaCBtYXAgYW5kIFdlYWs8VD4gQVBJcy4KKwogMjAxMi0wMi0xNSAgTWFyayBIYWhuZW5iZXJn
ICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJvb3RPYmplY3Q6OmZpbmFsaXpl
IGNhbiBjYXVzZSBhIGNyYXNoIGluIG9iamVjdC0+aW52YWxpZGF0ZSgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDEwNzc3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgY29uc3QgSlNDOjpIYXNoVGFibGUqIGdldEhhc2hUYWJs
ZUZvckdsbwogSlNWYWx1ZSBqc1N0cmluZ1Nsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmdDYWNoZSYgc3RyaW5nQ2FjaGUsIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwpCiB7CiAgICAgSlNT
dHJpbmcqIHdyYXBwZXIgPSBqc1N0cmluZyhleGVjLCBVU3RyaW5nKHN0cmluZ0ltcGwpKTsKLSAg
ICBzdHJpbmdDYWNoZS5hZGQoc3RyaW5nSW1wbCwgV2VhazxKU1N0cmluZz4oZXhlYy0+Z2xvYmFs
RGF0YSgpLCB3cmFwcGVyLCBjdXJyZW50V29ybGQoZXhlYyktPnN0cmluZ1dyYXBwZXJPd25lcigp
LCBzdHJpbmdJbXBsKSk7CisgICAgc3RyaW5nQ2FjaGUuYWRkKHN0cmluZ0ltcGwsIFBhc3NXZWFr
PEpTU3RyaW5nPihleGVjLT5nbG9iYWxEYXRhKCksIHdyYXBwZXIsIGN1cnJlbnRXb3JsZChleGVj
KS0+c3RyaW5nV3JhcHBlck93bmVyKCksIHN0cmluZ0ltcGwpKTsKICAgICByZXR1cm4gd3JhcHBl
cjsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJ
KHJldmlzaW9uIDEwNzc3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTcgKzEzMSwxNiBAQCBlbnVtIFBhcmFtZXRl
ckRlZmF1bHRQb2xpY3kgewogICAgIHsKICAgICAgICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBl
ciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCkpCiAgICAgICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKLSAgICAgICAgcmV0dXJuIHdvcmxkLT5tX3dyYXBwZXJzLmdldChk
b21PYmplY3QpLmdldCgpOworICAgICAgICByZXR1cm4gd29ybGQtPm1fd3JhcHBlcnMuZ2V0KGRv
bU9iamVjdCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxp
bmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRv
bU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgaWYgKHNldElu
bGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHBhaXI8RE9NT2JqZWN0V3JhcHBlck1hcDo6aXRlcmF0b3IsIGJv
b2w+IGVudHJ5ID0gd29ybGQtPm1fd3JhcHBlcnMuYWRkKGRvbU9iamVjdCwgSlNDOjpXZWFrPEpT
RE9NV3JhcHBlcj4oKSk7Ci0gICAgICAgIEFTU0VSVChlbnRyeS5zZWNvbmQpOwotICAgICAgICBK
U0M6OldlYWs8SlNET01XcmFwcGVyPiBoYW5kbGUoKndvcmxkLT5nbG9iYWxEYXRhKCksIHdyYXBw
ZXIsIHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KSwgd3JhcHBlckNvbnRleHQod29ybGQs
IGRvbU9iamVjdCkpOwotICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnN3YXAoaGFuZGxlKTsK
KyAgICAgICAgSlNDOjpQYXNzV2VhazxKU0RPTVdyYXBwZXI+IHBhc3NXZWFrKCp3b3JsZC0+Z2xv
YmFsRGF0YSgpLCB3cmFwcGVyLCB3cmFwcGVyT3duZXIod29ybGQsIGRvbU9iamVjdCksIHdyYXBw
ZXJDb250ZXh0KHdvcmxkLCBkb21PYmplY3QpKTsKKyAgICAgICAgcGFpcjxET01PYmplY3RXcmFw
cGVyTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gd29ybGQtPm1fd3JhcHBlcnMuYWRkKGRv
bU9iamVjdCwgcGFzc1dlYWspOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LnNlY29uZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxp
bmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFzcyog
ZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMTA3Nzc4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBET01XcmFwcGVy
V29ybGQqIGlzb2xhdGVkV29ybGQoKSBjb25zdCB7IHJldHVybiBtX2lzb2xhdGVkV29ybGQuZ2V0
KCk7IH0KIAogICAgICAgICBKU0M6OkpTT2JqZWN0KiB3cmFwcGVyKCkgY29uc3QgeyByZXR1cm4g
bV93cmFwcGVyLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgc2V0V3JhcHBlcihKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU09iamVjdCogd3JhcHBlcikgY29uc3QgeyBtX3dyYXBw
ZXIuc2V0KGdsb2JhbERhdGEsIHdyYXBwZXIsIDApOyB9CisgICAgICAgIHZvaWQgc2V0V3JhcHBl
cihKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU09iamVjdCogd3JhcHBlcikg
Y29uc3QgeyBtX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpTQzo6SlNPYmplY3Q+KGdsb2JhbERh
dGEsIHdyYXBwZXIsIDApOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIEpTQzo6
SlNPYmplY3QqIGluaXRpYWxpemVKU0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJs
ZS5oCShyZXZpc2lvbiAxMDc3NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRXcmFwcGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldFdyYXBwZXIoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTRE9N
V3JhcHBlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lciwgdm9p
ZCogY29udGV4dCkKICAgICB7Ci0gICAgICAgIG1fd3JhcHBlci5zZXQoZ2xvYmFsRGF0YSwgd3Jh
cHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKKyAgICAgICAgbV93cmFwcGVyID0gSlNDOjpQ
YXNzV2VhazxKU0RPTVdyYXBwZXI+KGdsb2JhbERhdGEsIHdyYXBwZXIsIHdyYXBwZXJPd25lciwg
Y29udGV4dCk7CiAgICAgfQogCiAgICAgdm9pZCBjbGVhcldyYXBwZXIoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAJKHJldmlzaW9uIDEwNzc3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEs
NyArMTgxLDcgQEAgdm9pZCBSb290T2JqZWN0OjphZGRSdW50aW1lT2JqZWN0KEpTR2xvYgogICAg
IEFTU0VSVChtX2lzVmFsaWQpOwogICAgIEFTU0VSVCghbV9ydW50aW1lT2JqZWN0cy5nZXQob2Jq
ZWN0KSk7CiAKLSAgICBtX3J1bnRpbWVPYmplY3RzLnNldChvYmplY3QsIEpTQzo6V2VhazxSdW50
aW1lT2JqZWN0PihnbG9iYWxEYXRhLCBvYmplY3QsIHRoaXMpKTsKKyAgICBtX3J1bnRpbWVPYmpl
Y3RzLnNldChvYmplY3QsIEpTQzo6UGFzc1dlYWs8UnVudGltZU9iamVjdD4oZ2xvYmFsRGF0YSwg
b2JqZWN0LCB0aGlzKSk7CiB9CiAKIHZvaWQgUm9vdE9iamVjdDo6cmVtb3ZlUnVudGltZU9iamVj
dChSdW50aW1lT2JqZWN0KiBvYmplY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNj
L0JyaWRnZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2pzYy9C
cmlkZ2VKU0MuY3BwCShyZXZpc2lvbiAxMDc3NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
anNjL0JyaWRnZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgSlNPYmpl
Y3QqIEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KAogCiAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBSdW50aW1lT2JqZWN0KiBuZXdPYmplY3QgPSBuZXdS
dW50aW1lT2JqZWN0KGV4ZWMpOwotICAgIG1fcnVudGltZU9iamVjdC5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBuZXdPYmplY3QsIDApOworICAgIG1fcnVudGltZU9iamVjdCA9IFBhc3NXZWFrPFJ1
bnRpbWVPYmplY3Q+KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3T2JqZWN0KTsKICAgICBtX3Jvb3RP
YmplY3QtPmFkZFJ1bnRpbWVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXdPYmplY3QpOwog
ICAgIHJldHVybiBuZXdPYmplY3Q7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDc4Mzcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NCBAQAorMjAxMi0wMi0xNSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisg
ICAgICAgIE1hZGUgV2VhazxUPiBzaW5nbGUtb3duZXIsIGFkZGluZyBQYXNzV2VhazxUPgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg3NDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmdldE9yQ3JlYXRlSlNPYmplY3QpOiBVc2UgcmF3IHBvaW50
ZXIgYW5kCisgICAgICAgIFBhc3NXZWFrPFQ+LCBhcyByZXF1aXJlZCBieSBvdXIgbmV3IGhhc2gg
bWFwIEFQSS4KKwogMjAxMi0wMi0xNSAgU2FkcnVsIEhhYmliIENob3dkaHVyeSAgPHNhZHJ1bEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90aWZ5IENocm9tZUNsaWVudCB3aGVuIHRvdWNoLWV2
ZW50IGhhbmRsZXJzIGFyZSBpbnN0YWxsZWQvcmVtb3ZlZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1
bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiAxMDc3NzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsMTEgKzk4LDExIEBAIEpTT2JqZWN0KiBOUFJ1bnRpbWVPYmplY3RNYXA6
OmdldE9yQ3JlYXQKICAgICBpZiAoTlBKU09iamVjdDo6aXNOUEpTT2JqZWN0KG5wT2JqZWN0KSkK
ICAgICAgICAgcmV0dXJuIE5QSlNPYmplY3Q6OnRvTlBKU09iamVjdChucE9iamVjdCktPmpzT2Jq
ZWN0KCk7CiAgICAgCi0gICAgaWYgKEpTQzo6V2VhazxKU05QT2JqZWN0PiBqc05QT2JqZWN0ID0g
bV9qc05QT2JqZWN0cy5nZXQobnBPYmplY3QpKQotICAgICAgICByZXR1cm4ganNOUE9iamVjdC5n
ZXQoKTsKKyAgICBpZiAoSlNOUE9iamVjdCoganNOUE9iamVjdCA9IG1fanNOUE9iamVjdHMuZ2V0
KG5wT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGpzTlBPYmplY3Q7CiAKICAgICBKU05QT2JqZWN0
KiBqc05QT2JqZWN0ID0gSlNOUE9iamVjdDo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdGhpcywgbnBP
YmplY3QpOwotICAgIG1fanNOUE9iamVjdHMuc2V0KG5wT2JqZWN0LCBKU0M6OldlYWs8SlNOUE9i
amVjdD4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGpzTlBPYmplY3QsIHRoaXMsIG5wT2Jq
ZWN0KSk7CisgICAgbV9qc05QT2JqZWN0cy5zZXQobnBPYmplY3QsIEpTQzo6UGFzc1dlYWs8SlNO
UE9iamVjdD4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGpzTlBPYmplY3QsIHRoaXMsIG5w
T2JqZWN0KSk7CiAKICAgICByZXR1cm4ganNOUE9iamVjdDsKIH0K
</data>
<flag name="review"
          id="129319"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="129384"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>