<?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>174973</bug_id>
          
          <creation_ts>2017-07-29 12:18:42 -0700</creation_ts>
          <short_desc>Use one Scavenger thread for all Heaps</short_desc>
          <delta_ts>2017-10-06 09:35:55 -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>bmalloc</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>174917</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1333244</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-29 12:18:42 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354912</commentid>
    <comment_count>1</comment_count>
      <attachid>322297</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-30 12:04:17 -0700</bug_when>
    <thetext>Created attachment 322297
work in progress

I&apos;m going to get rid of AsyncTask since it&apos;s only used for scavenging, and make Scavenger do the work of AsyncTask.  It&apos;ll also do the work of scheduling the scavenger (like the scavenger bytes count, and the growing flag).  Then all Heaps will use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354919</commentid>
    <comment_count>2</comment_count>
      <attachid>322300</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-30 14:03:57 -0700</bug_when>
    <thetext>Created attachment 322300
it is written

I haven&apos;t tried it yet though.

I want to first see if I can make bmalloc&apos;s mutex adaptive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357377</commentid>
    <comment_count>3</comment_count>
      <attachid>322957</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-05 18:30:52 -0700</bug_when>
    <thetext>Created attachment 322957
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357381</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-05 18:33:13 -0700</bug_when>
    <thetext>Attachment 322957 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Scavenger.cpp:139:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/bmalloc/bmalloc/Scavenger.cpp:144:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 5 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>1357599</commentid>
    <comment_count>5</comment_count>
      <attachid>322957</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-10-06 09:11:29 -0700</bug_when>
    <thetext>Comment on attachment 322957
the patch

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

r=me after a few fixes.

&gt; Source/bmalloc/bmalloc/Scavenger.cpp:78
&gt; +    m_isGrowing = true;

Can you call it &quot;m_isProbablyGrowing&quot; or something?

&gt; Source/bmalloc/bmalloc/Scavenger.cpp:87
&gt; +void Scavenger::scheduleIfUnderMemoryPressureHoldingLock(size_t bytes)

Shouldn&apos;t you pass in the lock here, to make sure it&apos;s actually holding it? Then the name can be shorter.

&gt; Source/bmalloc/bmalloc/Scavenger.cpp:102
&gt; +    runHoldingLock();

Ditto.

&gt; Source/bmalloc/bmalloc/Scavenger.cpp:139
&gt; +    auto truth = [] { return true; };

Wat?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357606</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-06 09:32:35 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #5)
&gt; Comment on attachment 322957 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=322957&amp;action=review
&gt; 
&gt; r=me after a few fixes.
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Scavenger.cpp:78
&gt; &gt; +    m_isGrowing = true;
&gt; 
&gt; Can you call it &quot;m_isProbablyGrowing&quot; or something?

Good idea.  That is a more accurate name.

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Scavenger.cpp:87
&gt; &gt; +void Scavenger::scheduleIfUnderMemoryPressureHoldingLock(size_t bytes)
&gt; 
&gt; Shouldn&apos;t you pass in the lock here, to make sure it&apos;s actually holding it?
&gt; Then the name can be shorter.

I can&apos;t because C++.  Some things in Scavenger use lock_guard, other things use unique_lock.  So there is no single type I could pass in.  Therefore, rather than trying to get too clever, I just used the &quot;HoldingLock&quot; suffix in the same way I would have ordinarily used &quot;const AbstractLocker&amp;&quot; in things that sit above WTF.

&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Scavenger.cpp:102
&gt; &gt; +    runHoldingLock();
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Scavenger.cpp:139
&gt; &gt; +    auto truth = [] { return true; };
&gt; 
&gt; Wat?

bmalloc does not have NO_RETURN macros.  I really hate those macros, but we have some warnings set that force us to use them.  Rather than do all that, I just made sure that the while loop would look like it might return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357611</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-06 09:35:01 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/222982/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357614</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-06 09:35:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/34857295&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322297</attachid>
            <date>2017-09-30 12:04:17 -0700</date>
            <delta_ts>2017-09-30 14:03:57 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>4193</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAkocmV2aXNpb24gMjIyNjgyKQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAkod29ya2luZyBjb3B5KQpAQCAtODks
MTggKzg5LDE4IEBAIEFzeW5jVGFzazxPYmplY3QsIEZ1bmN0aW9uPjo6fkFzeW5jVGFzaygKIHRl
bXBsYXRlPHR5cGVuYW1lIE9iamVjdCwgdHlwZW5hbWUgRnVuY3Rpb24+CiB2b2lkIEFzeW5jVGFz
azxPYmplY3QsIEZ1bmN0aW9uPjo6cnVuKCkKIHsKLSAgICBtX3N0YXRlID0gU3RhdGU6OlJ1bjsK
LSAgICAKICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+IGxvY2sobV9jb25kaXRpb25NdXRleCk7
CisgICAgbV9zdGF0ZSA9IFN0YXRlOjpSdW47CiAgICAgbV9jb25kaXRpb24ubm90aWZ5X2FsbCgp
OwogfQogICAgIAogdGVtcGxhdGU8dHlwZW5hbWUgT2JqZWN0LCB0eXBlbmFtZSBGdW5jdGlvbj4K
IHZvaWQgQXN5bmNUYXNrPE9iamVjdCwgRnVuY3Rpb24+OjpydW5Tb29uKCkKIHsKLSAgICBtX3N0
YXRlID0gU3RhdGU6OlJ1blNvb247Ci0gICAgCiAgICAgc3RkOjpsb2NrX2d1YXJkPE11dGV4PiBs
b2NrKG1fY29uZGl0aW9uTXV0ZXgpOworICAgIGlmICh3aWxsUnVuU29vbigpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zdGF0ZSA9IFN0YXRlOjpSdW5Tb29uOwogICAgIG1fY29uZGl0aW9uLm5v
dGlmeV9hbGwoKTsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcAko
cmV2aXNpb24gMjIyNjgyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIFNjYXZlbmdlcjo6U2NhdmVuZ2VyKHN0
ZDo6bG9ja19ndWFyZDxTdGEKICAgICBkaXNwYXRjaF9yZXN1bWUobV9wcmVzc3VyZUhhbmRsZXJE
aXNwYXRjaFNvdXJjZSk7CiAgICAgZGlzcGF0Y2hfcmVsZWFzZShxdWV1ZSk7CiAjZW5kaWYKKyAg
ICAKKyAgICBtX3RocmVhZCA9IHN0ZDo6dGhyZWFkKCZ0aHJlYWRFbnRyeVBvaW50LCB0aGlzKTsK
IH0KIAogdm9pZCBTY2F2ZW5nZXI6OnNjYXZlbmdlKCkKQEAgLTUwLDUgKzUyLDU1IEBAIHZvaWQg
U2NhdmVuZ2VyOjpzY2F2ZW5nZSgpCiAgICAgICAgIFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVh
cD4+OjpnZXQoKS0+YXQoaSkuc2NhdmVuZ2UobG9jayk7CiB9CiAKK3ZvaWQgU2NhdmVuZ2VyOjp0
aHJlYWRFbnRyeVBvaW50KFNjYXZlbmdlciogc2NhdmVuZ2VyKQoreworICAgIHNjYXZlbmdlci0+
dGhyZWFkQm9keSgpOworfQorCit2b2lkIFNjYXZlbmdlcjo6dGhyZWFkQm9keSgpCit7CisgICAg
c2V0U2VsZlFPU0NsYXNzKCk7CisgICAgCisgICAgLy8gVGhpcyBsb29wIHJhdGNoZXRzIGRvd253
YXJkIGZyb20gbW9zdCBhY3RpdmUgdG8gbGVhc3QgYWN0aXZlIHN0YXRlLiBXaGlsZQorICAgIC8v
IHdlIHJhdGNoZXQgZG93bndhcmQsIGFueSBvdGhlciB0aHJlYWQgbWF5IHJlc2V0IG91ciBzdGF0
ZS4KKyAgICAKKyAgICAvLyBXZSByZXF1aXJlIGFueSBzdGF0ZSBjaGFuZ2Ugd2hpbGUgd2UgYXJl
IHNsZWVwaW5nIHRvIHNpZ25hbCB0byBvdXIKKyAgICAvLyBjb25kaXRpb24gdmFyaWFibGUgYW5k
IHdha2UgdXMgdXAuCisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAobV9zdGF0ZSA9
PSBTdGF0ZTo6U2xlZXApIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+IGxv
Y2sobV9tdXRleCk7CisgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KGxvY2ssIFsmXSgpIHsg
cmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlNsZWVwOyB9KTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlJ1blNvb24pIHsKKyAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgICAgICAgICBtX2NvbmRp
dGlvbi53YWl0X2Zvcihsb2NrLCBhc3luY1Rhc2tTbGVlcER1cmF0aW9uLCBbJl0oKSB7IHJldHVy
biBtX3N0YXRlICE9IFN0YXRlOjpSdW5Tb29uOyB9KTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpTbGVlcDsKKyAgICAgICAgCisgICAgICAgIHNldFNlbGZR
T1NDbGFzcygpOworICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVf
bG9jazxNdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIGlmIChtX2lzR3Jvd2luZyAm
JiAhaXNVbmRlck1lbW9yeVByZXNzdXJlKCkpIHsKKyAgICAgICAgICAgICAgICBtX2lzR3Jvd2lu
ZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJ1blNvb24obG9jayk7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHNjYXZlbmdlKCk7CisgICAgfQorfQorCit2b2lkIFNjYXZlbmdlcjo6c2V0U2VsZlFPU0NsYXNz
KCkKK3sKKyNpZiBCT1MoREFSV0lOKQorICAgIHB0aHJlYWRfc2V0X3Fvc19jbGFzc19zZWxmX25w
KHJlcXVlc3RlZFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKCksIDApOworI2VuZGlmCit9CisKIH0g
Ly8gbmFtZXNwYWNlIGJtYWxsb2MKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2
ZW5nZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5o
CShyZXZpc2lvbiAyMjI2ODIpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSw2IEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsK
IAotLy8gRklYTUU6IFRoaXMgY2xhc3Mgc2hvdWxkIGJlY29tZSBhIGNvbW1vbiBzY2F2ZW5nZXIg
bWVjaGFuaXNtIGZvciBhbGwgaGVhcHMuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0OTczCi0KIGNsYXNzIFNjYXZlbmdlciB7CiBwdWJsaWM6CiAgICAgU2Nh
dmVuZ2VyKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKQEAgLTUwLDggKzQ3LDI4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKHFvc19jbGFzc190
IG92ZXJyaWRlQ2xhc3MpIHsgbV9yZXF1ZXN0ZWRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyA9IG92
ZXJyaWRlQ2xhc3M7IH0KICAgICBxb3NfY2xhc3NfdCByZXF1ZXN0ZWRTY2F2ZW5nZXJUaHJlYWRR
T1NDbGFzcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdGVkU2NhdmVuZ2VyVGhyZWFkUU9TQ2xh
c3M7IH0KICNlbmRpZgorICAgIAorICAgIHZvaWQgZGlkU3RhcnRHcm93aW5nKCk7CisgICAgdm9p
ZCBzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShzaXplX3QgYnl0ZXMpOworICAgIHZvaWQg
c2NoZWR1bGUoc2l6ZV90IGJ5dGVzKTsKIAogcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIFN0YXRl
IHsgU2xlZXAsIFJ1biwgUnVuU29vbiB9OworICAgIAorICAgIHN0YXRpYyB2b2lkIHRocmVhZEVu
dHJ5UG9pbnQoU2NhdmVuZ2VyKik7CisgICAgdm9pZCB0aHJlYWRCb2R5KCk7CisgICAgCisgICAg
dm9pZCBzZXRTZWxmUU9TQ2xhc3MoKTsKKyAgICAKKyAgICBzdGQ6OmF0b21pYzxTdGF0ZT4gbV9z
dGF0ZTsKKyAgICBzaXplX3QgbV9zY2F2ZW5nZXJCeXRlczsKKyAgICBib29sIG1faXNHcm93aW5n
OworICAgIAorICAgIE11dGV4IG1fbXV0ZXg7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUg
bV9jb25kaXRpb247CisKKyAgICBzdGQ6OnRocmVhZCBtX3RocmVhZDsKKyAgICAKICNpZiBCT1Mo
REFSV0lOKQogICAgIGRpc3BhdGNoX3NvdXJjZV90IG1fcHJlc3N1cmVIYW5kbGVyRGlzcGF0Y2hT
b3VyY2U7CiAgICAgcW9zX2NsYXNzX3QgbV9yZXF1ZXN0ZWRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFz
cyB7IFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322300</attachid>
            <date>2017-09-30 14:03:57 -0700</date>
            <delta_ts>2017-10-05 18:30:52 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19001</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIyMjY4MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQAogCQkx
NERENzhCQzE4RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDUyNDc4NjE4QkM3NTdDMDBGODAwOTggLyog
U21hbGxMaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTRERDc4QkQxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsUGFnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRTI5RUQxOENBRTkwNTAwRkU4
QTBGIC8qIFNtYWxsUGFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0REQ3OEM1MThGNDhENzUwMDk1MDcwMiAvKiBBbGdvcml0aG0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MjFBODc3MThFRTQ2
MkEwMEI0REQ2OCAvKiBBbGdvcml0aG0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkxNERENzhDNjE4RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE3RjY1
MjE4QkE4OEEwMDA3NkZBM0YgLyogQXN5bmNUYXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJB
c3NlcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4QzgxOEY0OEQ3NTAwOTUwNzAyIC8q
IEZpeGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNEQ5REI0NTE3RjI0NDcxMDBFQUFCNzkgLyogRml4ZWRWZWN0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDOTE4RjQ4RDc1
MDA5NTA3MDIgLyogQklubGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4IC8qIEJJbmxpbmUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTgsNyArOTcsNiBA
QAogCQkxNDEzRTQ2MjE4OURFMUNEMDA1NDZENjggLyogQnVtcEFsbG9jYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gQnVtcEFsbG9jYXRvci5o
OyBwYXRoID0gYm1hbGxvYy9CdW1wQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJBc3NlcnQuaDsgcGF0aCA9IGJtYWxsb2MvQkFzc2VydC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0Yg
LyogU3lzY2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTeXNjYWxsLmg7
IHBhdGggPSBibWFsbG9jL1N5c2NhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MTQxN0Y2NTIxOEJBODhBMDAwNzZGQTNGIC8qIEFzeW5jVGFzay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBc3luY1Rhc2suaDsgcGF0aCA9IGJtYWxsb2MvQXN5bmNUYXNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MUQ5QUZGMUM4RTUxQzAwMDBBQkJBMCAv
KiBMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpc3QuaDsgcGF0aCA9
IGJtYWxsb2MvTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDIxQTg3NzE4
RUU0NjJBMDBCNERENjggLyogQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFsZ29yaXRobS5o
OyBwYXRoID0gYm1hbGxvYy9BbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQyQjQ0MzQxRTI4MzlFNzAwMURBNkU5IC8qIERlYnVnSGVhcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEZWJ1Z0hlYXAuY3BwOyBwYXRoID0gYm1hbGxvYy9E
ZWJ1Z0hlYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjgyLDcgKzI4MCw2
IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk0NDA4RjI5NjFDOTg5NkM0MDAxMkVDNjQgLyogZGFy
d2luICovLAogCQkJCTE0MjFBODc3MThFRTQ2MkEwMEI0REQ2OCAvKiBBbGdvcml0aG0uaCAqLywK
LQkJCQkxNDE3RjY1MjE4QkE4OEEwMDA3NkZBM0YgLyogQXN5bmNUYXNrLmggKi8sCiAJCQkJNjU5
OUM1Q0ExRUMzRjE1OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5jcHAgKi8sCiAJCQkJNjU5
OUM1Q0IxRUMzRjE1OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5oICovLAogCQkJCTE0MTNF
NDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi8sCkBAIC0zMzYsNyArMzMzLDYgQEAK
IAkJCQkxNERENzg5ODE4RjQ4RDRBMDA5NTA3MDIgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjVCRjE1MzFGMjJFMTU3MDAyOUQ5MUQgLyogU2NhdmVuZ2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjVCRjE0NzFGMjJBOEIxMDAyOUQ5MUQgLyogSGVhcEtpbmQuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTE0REQ3OEM2MThGNDhENzUwMDk1MDcwMiAvKiBBc3luY1Rhc2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTY1OTlDNUNEMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1v
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM3MThGNDhENzUwMDk1MDcwMiAvKiBCQXNz
ZXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4QzMwMTE4RjM3NTRDMDA1MDI4MzkgLyogYm1h
bGxvYy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FzeW5j
VGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgJ
KHJldmlzaW9uIDIyMjY4MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEFzeW5jVGFza19oCi0jZGVmaW5l
IEFzeW5jVGFza19oCi0KLSNpbmNsdWRlICJCQXNzZXJ0LmgiCi0jaW5jbHVkZSAiQklubGluZS5o
IgotI2luY2x1ZGUgIk11dGV4LmgiCi0jaW5jbHVkZSAiU2l6ZXMuaCIKLSNpbmNsdWRlIDxhdG9t
aWM+Ci0jaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgotI2luY2x1ZGUgPHRocmVhZD4KLQot
bmFtZXNwYWNlIGJtYWxsb2MgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmplY3QsIHR5cGVuYW1l
IEZ1bmN0aW9uPgotY2xhc3MgQXN5bmNUYXNrIHsKLXB1YmxpYzoKLSAgICBBc3luY1Rhc2soT2Jq
ZWN0JiwgY29uc3QgRnVuY3Rpb24mKTsKLSAgICB+QXN5bmNUYXNrKCk7Ci0gICAgCi0gICAgYm9v
bCB3aWxsUnVuKCkgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6UnVuOyB9Ci0gICAgdm9pZCBy
dW4oKTsKLSAgICAKLSAgICBib29sIHdpbGxSdW5Tb29uKCkgeyByZXR1cm4gbV9zdGF0ZSA+IFN0
YXRlOjpTbGVlcDsgfQotICAgIHZvaWQgcnVuU29vbigpOwotICAgIAotcHJpdmF0ZToKLSAgICBl
bnVtIGNsYXNzIFN0YXRlIHsgU2xlZXAsIFJ1biwgUnVuU29vbiB9OwotICAgIAotICAgIHZvaWQg
cnVuU2xvd0Nhc2UoKTsKLSAgICB2b2lkIHJ1blNvb25TbG93Q2FzZSgpOwotICAgIAotICAgIHN0
YXRpYyB2b2lkIHRocmVhZEVudHJ5UG9pbnQoQXN5bmNUYXNrKik7Ci0gICAgdm9pZCB0aHJlYWRS
dW5Mb29wKCk7Ci0KLSAgICBzdGQ6OmF0b21pYzxTdGF0ZT4gbV9zdGF0ZTsKLQotICAgIE11dGV4
IG1fY29uZGl0aW9uTXV0ZXg7Ci0gICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGVfYW55IG1fY29u
ZGl0aW9uOwotCi0gICAgc3RkOjp0aHJlYWQgbV90aHJlYWQ7Ci0KLSAgICBPYmplY3QmIG1fb2Jq
ZWN0OwotICAgIEZ1bmN0aW9uIG1fZnVuY3Rpb247Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBP
YmplY3QsIHR5cGVuYW1lIEZ1bmN0aW9uPgotQXN5bmNUYXNrPE9iamVjdCwgRnVuY3Rpb24+OjpB
c3luY1Rhc2soT2JqZWN0JiBvYmplY3QsIGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKLSAgICA6
IG1fc3RhdGUoU3RhdGU6OlNsZWVwKQotICAgICwgbV9jb25kaXRpb24oKQotICAgICwgbV90aHJl
YWQoc3RkOjp0aHJlYWQoJkFzeW5jVGFzazo6dGhyZWFkRW50cnlQb2ludCwgdGhpcykpCi0gICAg
LCBtX29iamVjdChvYmplY3QpCi0gICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotewotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBPYmplY3QsIHR5cGVuYW1lIEZ1bmN0aW9uPgotQXN5bmNUYXNrPE9i
amVjdCwgRnVuY3Rpb24+Ojp+QXN5bmNUYXNrKCkKLXsKLSAgICAvLyBXZSdkIGxpa2UgdG8gbWFy
ayBvdXIgZGVzdHJ1Y3RvciBkZWxldGVkIGJ1dCBDKysgd29uJ3QgYWxsb3cgaXQgYmVjYXVzZQot
ICAgIC8vIHdlIGFyZSBhbiBhdXRvbWF0aWMgbWVtYmVyIG9mIEhlYXAuCi0gICAgUkVMRUFTRV9C
QVNTRVJUKDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmplY3QsIHR5cGVuYW1lIEZ1bmN0
aW9uPgotdm9pZCBBc3luY1Rhc2s8T2JqZWN0LCBGdW5jdGlvbj46OnJ1bigpCi17Ci0gICAgbV9z
dGF0ZSA9IFN0YXRlOjpSdW47Ci0gICAgCi0gICAgc3RkOjpsb2NrX2d1YXJkPE11dGV4PiBsb2Nr
KG1fY29uZGl0aW9uTXV0ZXgpOwotICAgIG1fY29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKLX0KLSAg
ICAKLXRlbXBsYXRlPHR5cGVuYW1lIE9iamVjdCwgdHlwZW5hbWUgRnVuY3Rpb24+Ci12b2lkIEFz
eW5jVGFzazxPYmplY3QsIEZ1bmN0aW9uPjo6cnVuU29vbigpCi17Ci0gICAgbV9zdGF0ZSA9IFN0
YXRlOjpSdW5Tb29uOwotICAgIAotICAgIHN0ZDo6bG9ja19ndWFyZDxNdXRleD4gbG9jayhtX2Nv
bmRpdGlvbk11dGV4KTsKLSAgICBtX2NvbmRpdGlvbi5ub3RpZnlfYWxsKCk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIE9iamVjdCwgdHlwZW5hbWUgRnVuY3Rpb24+Ci12b2lkIEFzeW5jVGFzazxP
YmplY3QsIEZ1bmN0aW9uPjo6dGhyZWFkRW50cnlQb2ludChBc3luY1Rhc2sqIGFzeW5jVGFzaykK
LXsKLSNpZiBCT1MoREFSV0lOKQotICAgIHB0aHJlYWRfc2V0X3Fvc19jbGFzc19zZWxmX25wKFFP
U19DTEFTU19VU0VSX0lOVEVSQUNUSVZFLCAwKTsKLSNlbmRpZgotCi0gICAgYXN5bmNUYXNrLT50
aHJlYWRSdW5Mb29wKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iamVjdCwgdHlwZW5hbWUg
RnVuY3Rpb24+Ci12b2lkIEFzeW5jVGFzazxPYmplY3QsIEZ1bmN0aW9uPjo6dGhyZWFkUnVuTG9v
cCgpCi17Ci0gICAgLy8gVGhpcyBsb29wIHJhdGNoZXRzIGRvd253YXJkIGZyb20gbW9zdCBhY3Rp
dmUgdG8gbGVhc3QgYWN0aXZlIHN0YXRlLiBXaGlsZQotICAgIC8vIHdlIHJhdGNoZXQgZG93bndh
cmQsIGFueSBvdGhlciB0aHJlYWQgbWF5IHJlc2V0IG91ciBzdGF0ZS4KLSAgICAKLSAgICAvLyBX
ZSByZXF1aXJlIGFueSBzdGF0ZSBjaGFuZ2Ugd2hpbGUgd2UgYXJlIHNsZWVwaW5nIHRvIHNpZ25h
bCB0byBvdXIKLSAgICAvLyBjb25kaXRpb24gdmFyaWFibGUgYW5kIHdha2UgdXMgdXAuCi0gICAg
Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlNsZWVwKSB7
Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiBsb2NrKG1fY29uZGl0aW9uTXV0
ZXgpOwotICAgICAgICAgICAgbV9jb25kaXRpb24ud2FpdChsb2NrLCBbJl0oKSB7IHJldHVybiBt
X3N0YXRlICE9IFN0YXRlOjpTbGVlcDsgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpSdW5Tb29uKSB7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9sb2NrPE11dGV4PiBsb2NrKG1fY29uZGl0aW9uTXV0ZXgpOwotICAgICAgICAgICAgbV9jb25k
aXRpb24ud2FpdF9mb3IobG9jaywgYXN5bmNUYXNrU2xlZXBEdXJhdGlvbiwgWyZdKCkgeyByZXR1
cm4gbV9zdGF0ZSAhPSBTdGF0ZTo6UnVuU29vbjsgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6U2xlZXA7Ci0gICAgICAgIChtX29iamVjdC4qbV9mdW5j
dGlvbikoKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8v
IEFzeW5jVGFza19oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDIyMjY4
MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDYgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogSGVhcDo6SGVhcChIZWFwS2luZCBr
aW5kLCBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikKICAgICA6IG1fa2luZChraW5kKQog
ICAgICwgbV92bVBhZ2VTaXplUGh5c2ljYWwodm1QYWdlU2l6ZVBoeXNpY2FsKCkpCi0gICAgLCBt
X3NjYXZlbmdlcigqdGhpcywgJkhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSkKICAgICAsIG1fZGVi
dWdIZWFwKG51bGxwdHIpCiB7CiAgICAgUkVMRUFTRV9CQVNTRVJUKHZtUGFnZVNpemVQaHlzaWNh
bCgpID49IHNtYWxsUGFnZVNpemUpOwpAQCAtNjUsNyArNjQsNyBAQCBIZWFwOjpIZWFwKEhlYXBL
aW5kIGtpbmQsIHN0ZDo6bG9ja19ndWFyCiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgUGVyUHJv
Y2VzczxTY2F2ZW5nZXI+OjpnZXQoKTsKKyAgICBtX3NjYXZlbmdlciA9IFBlclByb2Nlc3M8U2Nh
dmVuZ2VyPjo6Z2V0KCk7CiB9CiAKIGJvb2wgSGVhcDo6dXNpbmdHaWdhY2FnZSgpCkBAIC0xMzks
MjMgKzEzOCw2IEBAIHZvaWQgSGVhcDo6aW5pdGlhbGl6ZVBhZ2VNZXRhZGF0YSgpCiAgICAgICAg
IG1fcGFnZUNsYXNzZXNbaV0gPSAoY29tcHV0ZVBhZ2VTaXplKGkpIC0gMSkgLyBzbWFsbFBhZ2VT
aXplOwogfQogCi12b2lkIEhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSgpCi17Ci0gICAgc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKG11dGV4KCkpOwotCi0jaWYgQk9TKERBUldJTikK
LSAgICBwdGhyZWFkX3NldF9xb3NfY2xhc3Nfc2VsZl9ucChQZXJQcm9jZXNzPFNjYXZlbmdlcj46
OmdldEZhc3RDYXNlKCktPnJlcXVlc3RlZFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKCksIDApOwot
I2VuZGlmCi0KLSAgICBpZiAobV9pc0dyb3dpbmcgJiYgIWlzVW5kZXJNZW1vcnlQcmVzc3VyZSgp
KSB7Ci0gICAgICAgIG1faXNHcm93aW5nID0gZmFsc2U7Ci0gICAgICAgIG1fc2NhdmVuZ2VyLnJ1
blNvb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBzY2F2ZW5nZShsb2Nr
KTsKLX0KLQogdm9pZCBIZWFwOjpzY2F2ZW5nZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JikKIHsKICAgICBmb3IgKGF1dG8mIGxpc3QgOiBtX2ZyZWVQYWdlcykgewpAQCAtMTgzLDM1ICsx
NjUsNiBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0CiAgICAgfQog
fQogCi12b2lkIEhlYXA6OnNjaGVkdWxlU2NhdmVuZ2VySWZVbmRlck1lbW9yeVByZXNzdXJlKHNp
emVfdCBieXRlcykKLXsKLSAgICBtX3NjYXZlbmdlckJ5dGVzICs9IGJ5dGVzOwotICAgIGlmICht
X3NjYXZlbmdlckJ5dGVzIDwgc2NhdmVuZ2VyQnl0ZXNQZXJNZW1vcnlQcmVzc3VyZUNoZWNrKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NjYXZlbmdlckJ5dGVzID0gMDsKLQotICAgIGlmICht
X3NjYXZlbmdlci53aWxsUnVuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghaXNVbmRl
ck1lbW9yeVByZXNzdXJlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNHcm93aW5nID0g
ZmFsc2U7Ci0gICAgbV9zY2F2ZW5nZXIucnVuKCk7Ci19Ci0KLXZvaWQgSGVhcDo6c2NoZWR1bGVT
Y2F2ZW5nZXIoc2l6ZV90IGJ5dGVzKQotewotICAgIHNjaGVkdWxlU2NhdmVuZ2VySWZVbmRlck1l
bW9yeVByZXNzdXJlKGJ5dGVzKTsKLQotICAgIGlmIChtX3NjYXZlbmdlci53aWxsUnVuU29vbigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzR3Jvd2luZyA9IGZhbHNlOwotICAgIG1fc2Nh
dmVuZ2VyLnJ1blNvb24oKTsKLX0KLQogdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hlKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKIHsKICAg
ICBmb3IgKGF1dG8mIGxpc3QgOiBsaW5lQ2FjaGUpIHsKQEAgLTI0Miw3ICsxOTUsNyBAQCB2b2lk
IEhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayhzdGQ6OmxvY2tfCiAgICAgICAgICAgICBjaHVuay0+
ZnJlZVBhZ2VzKCkucHVzaChwYWdlKTsKICAgICAgICAgfSk7CiAgICAgICAgIAotICAgICAgICBz
Y2hlZHVsZVNjYXZlbmdlcigwKTsKKyAgICAgICAgbV9zY2F2ZW5nZXItPnNjaGVkdWxlKDApOwog
CiAgICAgICAgIHJldHVybiBjaHVuazsKICAgICB9KCk7CkBAIC0yOTEsNyArMjQ0LDcgQEAgU21h
bGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OgogICAgICAgICAgICAgbV9mcmVl
UGFnZXNbcGFnZUNsYXNzXS5yZW1vdmUoY2h1bmspOwogCiAgICAgICAgIGlmICghcGFnZS0+aGFz
UGh5c2ljYWxQYWdlcygpKSB7Ci0gICAgICAgICAgICBzY2hlZHVsZVNjYXZlbmdlcklmVW5kZXJN
ZW1vcnlQcmVzc3VyZShwYWdlU2l6ZShwYWdlQ2xhc3MpKTsKKyAgICAgICAgICAgIG1fc2NhdmVu
Z2VyLT5zY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShwYWdlU2l6ZShwYWdlQ2xhc3MpKTsK
IAogICAgICAgICAgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkocGFnZS0+YmVnaW4o
KS0+YmVnaW4oKSwgcGFnZVNpemUocGFnZUNsYXNzKSk7CiAgICAgICAgICAgICBwYWdlLT5zZXRI
YXNQaHlzaWNhbFBhZ2VzKHRydWUpOwpAQCAtMzM5LDcgKzI5Miw3IEBAIHZvaWQgSGVhcDo6ZGVh
bGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2sKICAgICAgICAgbV9jaHVua0NhY2hlW3BhZ2VDbGFz
c10ucHVzaChjaHVuayk7CiAgICAgfQogICAgIAotICAgIHNjaGVkdWxlU2NhdmVuZ2VyKHBhZ2VT
aXplKHBhZ2VDbGFzcykpOworICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZShwYWdlU2l6ZShwYWdl
Q2xhc3MpKTsKIH0KIAogdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlc0J5TWV0YWRh
dGEoCkBAIC00ODYsNyArNDM5LDcgQEAgTGFyZ2VSYW5nZSBIZWFwOjpzcGxpdEFuZEFsbG9jYXRl
KExhcmdlUgogICAgICAgICAKICAgICBjYXNlIEFsbG9jYXRpb25LaW5kOjpQaHlzaWNhbDoKICAg
ICAgICAgaWYgKHJhbmdlLnBoeXNpY2FsU2l6ZSgpIDwgcmFuZ2Uuc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBzY2hlZHVsZVNjYXZlbmdlcklmVW5kZXJNZW1vcnlQcmVzc3VyZShyYW5nZS5zaXplKCkp
OworICAgICAgICAgICAgbV9zY2F2ZW5nZXItPnNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJl
KHJhbmdlLnNpemUoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZtQWxsb2NhdGVQaHlz
aWNhbFBhZ2VzU2xvcHB5KHJhbmdlLmJlZ2luKCkgKyByYW5nZS5waHlzaWNhbFNpemUoKSwgcmFu
Z2Uuc2l6ZSgpIC0gcmFuZ2UucGh5c2ljYWxTaXplKCkpOwogICAgICAgICAgICAgcmFuZ2Uuc2V0
UGh5c2ljYWxTaXplKHJhbmdlLnNpemUoKSk7CkBAIC01NjcsNyArNTIwLDcgQEAgdm9pZCBIZWFw
OjpzaHJpbmtMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8UwogICAgIExhcmdlUmFuZ2UgcmFuZ2UgPSBM
YXJnZVJhbmdlKG9iamVjdCwgc2l6ZSk7CiAgICAgc3BsaXRBbmRBbGxvY2F0ZShyYW5nZSwgYWxp
Z25tZW50LCBuZXdTaXplLCBBbGxvY2F0aW9uS2luZDo6UGh5c2ljYWwpOwogCi0gICAgc2NoZWR1
bGVTY2F2ZW5nZXIoc2l6ZSk7CisgICAgbV9zY2F2ZW5nZXItPnNjaGVkdWxlKHNpemUpOwogfQog
CiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
Jiwgdm9pZCogb2JqZWN0LCBBbGxvY2F0aW9uS2luZCBhbGxvY2F0aW9uS2luZCkKQEAgLTU3Nyw3
ICs1MzAsNyBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhCiAKICAg
ICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3ZlKG9iamVjdCk7CiAgICAgbV9s
YXJnZUZyZWUuYWRkKExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBhbGxvY2F0aW9uS2luZCA9PSBB
bGxvY2F0aW9uS2luZDo6UGh5c2ljYWwgPyBzaXplIDogMCkpOwotICAgIHNjaGVkdWxlU2NhdmVu
Z2VyKHNpemUpOworICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZShzaXplKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJldmlzaW9uIDIyMjY4
MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw2IEBACiAjZGVmaW5lIEhlYXBfaAogCiAjaW5jbHVkZSAiQWxsb2NhdGlvbktpbmQu
aCIKLSNpbmNsdWRlICJBc3luY1Rhc2suaCIKICNpbmNsdWRlICJCdW1wUmFuZ2UuaCIKICNpbmNs
dWRlICJDaHVuay5oIgogI2luY2x1ZGUgIkhlYXBLaW5kLmgiCkBAIC0xMTIsMTEgKzExMSw2IEBA
IHByaXZhdGU6CiAKICAgICBMYXJnZVJhbmdlIHNwbGl0QW5kQWxsb2NhdGUoTGFyZ2VSYW5nZSYs
IHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgQWxsb2NhdGlvbktpbmQpOwogCi0gICAgdm9pZCBz
Y2hlZHVsZVNjYXZlbmdlcihzaXplX3QpOwotICAgIHZvaWQgc2NoZWR1bGVTY2F2ZW5nZXJJZlVu
ZGVyTWVtb3J5UHJlc3N1cmUoc2l6ZV90KTsKLSAgICAKLSAgICB2b2lkIGNvbmN1cnJlbnRTY2F2
ZW5nZSgpOwotICAgIAogICAgIEhlYXBLaW5kIG1fa2luZDsKICAgICAKICAgICBzaXplX3QgbV92
bVBhZ2VTaXplUGh5c2ljYWw7CkBAIC0xMzIsMTIgKzEyNiw4IEBAIHByaXZhdGU6CiAKICAgICBN
YXA8Q2h1bmsqLCBPYmplY3RUeXBlLCBDaHVua0hhc2g+IG1fb2JqZWN0VHlwZXM7CiAKLSAgICBz
aXplX3QgbV9zY2F2ZW5nZXJCeXRlcyB7IDAgfTsKLSAgICBib29sIG1faXNHcm93aW5nIHsgZmFs
c2UgfTsKLSAgICAKLSAgICBBc3luY1Rhc2s8SGVhcCwgZGVjbHR5cGUoJkhlYXA6OmNvbmN1cnJl
bnRTY2F2ZW5nZSk+IG1fc2NhdmVuZ2VyOwotCi0gICAgRGVidWdIZWFwKiBtX2RlYnVnSGVhcDsK
KyAgICBTY2F2ZW5nZXIqIG1fc2NhdmVuZ2VyIHsgbnVsbHB0ciB9OworICAgIERlYnVnSGVhcCog
bV9kZWJ1Z0hlYXAgeyBudWxscHRyIH07CiB9OwogCiBpbmxpbmUgdm9pZCBIZWFwOjphbGxvY2F0
ZVNtYWxsQnVtcFJhbmdlcygKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAJ
KHJldmlzaW9uIDIyMjY4MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNzcgQEAgU2NhdmVuZ2VyOjpTY2F2ZW5nZXIo
c3RkOjpsb2NrX2d1YXJkPFN0YQogICAgIGRpc3BhdGNoX3Jlc3VtZShtX3ByZXNzdXJlSGFuZGxl
ckRpc3BhdGNoU291cmNlKTsKICAgICBkaXNwYXRjaF9yZWxlYXNlKHF1ZXVlKTsKICNlbmRpZgor
ICAgIAorICAgIG1fdGhyZWFkID0gc3RkOjp0aHJlYWQoJnRocmVhZEVudHJ5UG9pbnQsIHRoaXMp
OworfQorCit2b2lkIFNjYXZlbmdlcjo6cnVuKCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TXV0
ZXg+IGxvY2sobV9tdXRleCk7CisgICAgcnVuKGxvY2spOworfQorCit2b2lkIFNjYXZlbmdlcjo6
cnVuKGNvbnN0IHN0ZDo6bG9ja19ndWFyZDxNdXRleD4mKQoreworICAgIG1fc3RhdGUgPSBTdGF0
ZTo6UnVuOworICAgIG1fY29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKK30KKwordm9pZCBTY2F2ZW5n
ZXI6OnJ1blNvb24oKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxNdXRleD4gbG9jayhtX211dGV4
KTsKKyAgICBydW5Tb29uKGxvY2spOworfQorCit2b2lkIFNjYXZlbmdlcjo6cnVuU29vbihjb25z
dCBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+JikKK3sKKyAgICBpZiAod2lsbFJ1blNvb24oKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUgPSBTdGF0ZTo6UnVuU29vbjsKKyAgICBtX2NvbmRp
dGlvbi5ub3RpZnlfYWxsKCk7Cit9CisKK3ZvaWQgU2NhdmVuZ2VyOjpkaWRTdGFydEdyb3dpbmco
KQoreworICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGxvY2sgaGVyZSwgc2luY2UgdGhp
cyBpcyBqdXN0IGEgaGV1cmlzdGljLgorICAgIG1faXNHcm93aW5nID0gdHJ1ZTsKK30KKwordm9p
ZCBTY2F2ZW5nZXI6OnNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKHNpemVfdCBieXRlcykK
K3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgc2NoZWR1
bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmUobG9jaywgYnl0ZXMpOworfQorCit2b2lkIFNjYXZlbmdl
cjo6c2NoZWR1bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmUoY29uc3Qgc3RkOjpsb2NrX2d1YXJkPE11
dGV4PiYgbG9jaywgc2l6ZV90IGJ5dGVzKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxNdXRleD4g
bG9jayhtX211dGV4KTsKKyAgICBtX3NjYXZlbmdlckJ5dGVzICs9IGJ5dGVzOworICAgIGlmICht
X3NjYXZlbmdlckJ5dGVzIDwgc2NhdmVuZ2VyQnl0ZXNQZXJNZW1vcnlQcmVzc3VyZUNoZWNrKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3NjYXZlbmdlckJ5dGVzID0gMDsKKworICAgIGlmICht
X3NjYXZlbmdlci53aWxsUnVuKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghaXNVbmRl
ck1lbW9yeVByZXNzdXJlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNHcm93aW5nID0g
ZmFsc2U7CisgICAgbV9zY2F2ZW5nZXIucnVuKGxvY2spOworfQorCit2b2lkIFNjYXZlbmdlcjo6
c2NoZWR1bGVTY2F2ZW5nZXIoc2l6ZV90IGJ5dGVzKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxN
dXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShs
b2NrLCBieXRlcyk7CisgICAgCisgICAgaWYgKHdpbGxSdW5Tb29uKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBtX2lzR3Jvd2luZyA9IGZhbHNlOworICAgIHJ1blNvb24obG9jayk7CiB9
CiAKIHZvaWQgU2NhdmVuZ2VyOjpzY2F2ZW5nZSgpCkBAIC01MCw1ICsxMjEsNTUgQEAgdm9pZCBT
Y2F2ZW5nZXI6OnNjYXZlbmdlKCkKICAgICAgICAgUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFw
Pj46OmdldCgpLT5hdChpKS5zY2F2ZW5nZShsb2NrKTsKIH0KIAordm9pZCBTY2F2ZW5nZXI6OnRo
cmVhZEVudHJ5UG9pbnQoU2NhdmVuZ2VyKiBzY2F2ZW5nZXIpCit7CisgICAgc2NhdmVuZ2VyLT50
aHJlYWRCb2R5KCk7Cit9CisKK3ZvaWQgU2NhdmVuZ2VyOjp0aHJlYWRSdW5Mb29wKCkKK3sKKyAg
ICBzZXRTZWxmUU9TQ2xhc3MoKTsKKyAgICAKKyAgICAvLyBUaGlzIGxvb3AgcmF0Y2hldHMgZG93
bndhcmQgZnJvbSBtb3N0IGFjdGl2ZSB0byBsZWFzdCBhY3RpdmUgc3RhdGUuIFdoaWxlCisgICAg
Ly8gd2UgcmF0Y2hldCBkb3dud2FyZCwgYW55IG90aGVyIHRocmVhZCBtYXkgcmVzZXQgb3VyIHN0
YXRlLgorICAgIAorICAgIC8vIFdlIHJlcXVpcmUgYW55IHN0YXRlIGNoYW5nZSB3aGlsZSB3ZSBh
cmUgc2xlZXBpbmcgdG8gc2lnbmFsIHRvIG91cgorICAgIC8vIGNvbmRpdGlvbiB2YXJpYWJsZSBh
bmQgd2FrZSB1cyB1cC4KKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpTbGVlcCkgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxNdXRleD4g
bG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobG9jaywgWyZdKCkg
eyByZXR1cm4gbV9zdGF0ZSAhPSBTdGF0ZTo6U2xlZXA7IH0pOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6UnVuU29vbikgeworICAgICAgICAgICAg
c3RkOjp1bmlxdWVfbG9jazxNdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIG1fY29u
ZGl0aW9uLndhaXRfZm9yKGxvY2ssIGFzeW5jVGFza1NsZWVwRHVyYXRpb24sIFsmXSgpIHsgcmV0
dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlJ1blNvb247IH0pOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlNsZWVwOworICAgICAgICAKKyAgICAgICAgc2V0U2Vs
ZlFPU0NsYXNzKCk7CisgICAgICAgIAorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9sb2NrPE11dGV4PiBsb2NrKG1fbXV0ZXgpOworICAgICAgICAgICAgaWYgKG1faXNHcm93aW5n
ICYmICFpc1VuZGVyTWVtb3J5UHJlc3N1cmUoKSkgeworICAgICAgICAgICAgICAgIG1faXNHcm93
aW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcnVuU29vbihsb2NrKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgc2NhdmVuZ2UoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2NhdmVuZ2VyOjpzZXRTZWxmUU9TQ2xh
c3MoKQoreworI2lmIEJPUyhEQVJXSU4pCisgICAgcHRocmVhZF9zZXRfcW9zX2NsYXNzX3NlbGZf
bnAocmVxdWVzdGVkU2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MoKSwgMCk7CisjZW5kaWYKK30KKwog
fSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Nj
YXZlbmdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2Vy
LmgJKHJldmlzaW9uIDIyMjY4MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDYgQEAKIAogbmFtZXNwYWNlIGJtYWxsb2Mg
ewogCi0vLyBGSVhNRTogVGhpcyBjbGFzcyBzaG91bGQgYmVjb21lIGEgY29tbW9uIHNjYXZlbmdl
ciBtZWNoYW5pc20gZm9yIGFsbCBoZWFwcy4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzQ5NzMKLQogY2xhc3MgU2NhdmVuZ2VyIHsKIHB1YmxpYzoKICAgICBT
Y2F2ZW5nZXIoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwpAQCAtNTAsOCArNDcsMzkg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MocW9zX2NsYXNz
X3Qgb3ZlcnJpZGVDbGFzcykgeyBtX3JlcXVlc3RlZFNjYXZlbmdlclRocmVhZFFPU0NsYXNzID0g
b3ZlcnJpZGVDbGFzczsgfQogICAgIHFvc19jbGFzc190IHJlcXVlc3RlZFNjYXZlbmdlclRocmVh
ZFFPU0NsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0ZWRTY2F2ZW5nZXJUaHJlYWRRT1ND
bGFzczsgfQogI2VuZGlmCisgICAgCisgICAgYm9vbCB3aWxsUnVuKCkgeyByZXR1cm4gbV9zdGF0
ZSA9PSBTdGF0ZTo6UnVuOyB9CisgICAgdm9pZCBydW4oKTsKKyAgICAKKyAgICBib29sIHdpbGxS
dW5Tb29uKCkgeyByZXR1cm4gbV9zdGF0ZSA+IFN0YXRlOjpTbGVlcDsgfQorICAgIHZvaWQgcnVu
U29vbigpOworICAgIAorICAgIHZvaWQgZGlkU3RhcnRHcm93aW5nKCk7CisgICAgdm9pZCBzY2hl
ZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShzaXplX3QgYnl0ZXMpOworICAgIHZvaWQgc2NoZWR1
bGUoc2l6ZV90IGJ5dGVzKTsKIAogcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIFN0YXRlIHsgU2xl
ZXAsIFJ1biwgUnVuU29vbiB9OworICAgIAorICAgIHZvaWQgcnVuKGNvbnN0IHN0ZDo6bG9ja19n
dWFyZDxNdXRleD4mKTsKKyAgICB2b2lkIHJ1blNvb24oY29uc3Qgc3RkOjpsb2NrX2d1YXJkPE11
dGV4PiYpOworCisgICAgdm9pZCBzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShjb25zdCBz
dGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+Jiwgc2l6ZV90IGJ5dGVzKTsKKworICAgIHN0YXRpYyB2b2lk
IHRocmVhZEVudHJ5UG9pbnQoU2NhdmVuZ2VyKik7CisgICAgdm9pZCB0aHJlYWRSdW5Mb29wKCk7
CisgICAgCisgICAgdm9pZCBzZXRTZWxmUU9TQ2xhc3MoKTsKKyAgICAKKyAgICBzdGQ6OmF0b21p
YzxTdGF0ZT4gbV9zdGF0ZSB7IFN0YXRlOjpTbGVlcCB9OworICAgIHNpemVfdCBtX3NjYXZlbmdl
ckJ5dGVzIHsgMCB9OworICAgIGJvb2wgbV9pc0dyb3dpbmcgeyBmYWxzZSB9OworICAgIAorICAg
IE11dGV4IG1fbXV0ZXg7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgbV9jb25kaXRpb247
CisKKyAgICBzdGQ6OnRocmVhZCBtX3RocmVhZDsKKyAgICAKICNpZiBCT1MoREFSV0lOKQogICAg
IGRpc3BhdGNoX3NvdXJjZV90IG1fcHJlc3N1cmVIYW5kbGVyRGlzcGF0Y2hTb3VyY2U7CiAgICAg
cW9zX2NsYXNzX3QgbV9yZXF1ZXN0ZWRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyB7IFFPU19DTEFT
U19VU0VSX0lOSVRJQVRFRCB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322957</attachid>
            <date>2017-10-05 18:30:52 -0700</date>
            <delta_ts>2017-10-06 09:11:29 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22504</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjk0OSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDE3LTEwLTA1ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIG9uZSBTY2F2ZW5nZXIgdGhy
ZWFkIGZvciBhbGwgSGVhcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDk3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBjb21iaW5lcyB0aGUgc2NhdmVuZ2VycyBmcm9tIGFsbCBI
ZWFwIGluc3RhbmNlcyBpbnRvIGEgc2luZ2xlIHNjYXZlbmdlci4gSXQgYWxzbyBjb21iaW5lcwor
ICAgICAgICB0aGUgYWNjb3VudGluZyBmb3IgZGVjaWRpbmcgd2hlbiB0byBydW4uIEVhY2ggSGVh
cCBzdGlsbCBjb250cm9scyB3aGF0IGl0IG1lYW5zIHRvIHNjYXZlbmdlCisgICAgICAgIGl0c2Vs
ZiAoaXQncyBhbGwgaW4gSGVhcDo6c2NhdmVuZ2UpIGJ1dCB0aGUgcG9saWN5IGRlY2lzaW9ucyBh
cmUgYWxsIGNvbnRyb2xsZWQgYnkgU2NhdmVuZ2VyLgorICAgICAgICBCZWNhdXNlIFNjYXZlbmdl
ciBpcyBhbHNvIHRoZSBvbmx5IHRoaW5nIHRoYXQgbmVlZHMgYW4gQXN5bmNUYXNrLCB0aGlzIHJl
bW92ZXMgQXN5bmNUYXNrIGFuZAorICAgICAgICBtb3ZlcyBhbGwgb2YgQXN5bmNUYXNrJ3MgbG9n
aWMgaW50byBTY2F2ZW5nZXIuCisgICAgICAgIAorICAgICAgICBUaGlzIGFwcGVhcnMgdG8gYmUg
YSAxJSBwcm9ncmVzc2lvbiBvbiBKZXRTdHJlYW0gKHdpdGggaGlnaCBzdGF0aXN0aWNhbCBjb25m
aWRlbmNlOiBwID0gMC4wMDQ5KS4KKworICAgICAgICAqIGJtYWxsb2MueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBibWFsbG9jL0FzeW5jVGFzay5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpIZWFwKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFw
OjpkZWFsbG9jYXRlU21hbGxMaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNwbGl0QW5k
QWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5QWxsb2NhdGVMYXJnZSk6Cisg
ICAgICAgIChibWFsbG9jOjpIZWFwOjpzaHJpbmtMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjpkZWFsbG9jYXRlTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6Y29uY3VycmVu
dFNjYXZlbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNjaGVkdWxlU2Nh
dmVuZ2VySWZVbmRlck1lbW9yeVByZXNzdXJlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OnNjaGVkdWxlU2NhdmVuZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL0hl
YXAuaDoKKyAgICAgICAgKiBibWFsbG9jL1NjYXZlbmdlci5jcHA6CisgICAgICAgIChibWFsbG9j
OjpTY2F2ZW5nZXI6OlNjYXZlbmdlcik6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnJ1
bik6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnJ1bkhvbGRpbmdMb2NrKToKKyAgICAg
ICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6cnVuU29vbik6CisgICAgICAgIChibWFsbG9jOjpTY2F2
ZW5nZXI6OnJ1blNvb25Ib2xkaW5nTG9jayk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6
OmRpZFN0YXJ0R3Jvd2luZyk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnNjaGVkdWxl
SWZVbmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6c2No
ZWR1bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmVIb2xkaW5nTG9jayk6CisgICAgICAgIChibWFsbG9j
OjpTY2F2ZW5nZXI6OnNjaGVkdWxlKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6dGhy
ZWFkRW50cnlQb2ludCk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnRocmVhZFJ1bkxv
b3ApOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjpzZXRTZWxmUU9TQ2xhc3MpOgorICAg
ICAgICAqIGJtYWxsb2MvU2NhdmVuZ2VyLmg6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6
OndpbGxSdW4pOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjp3aWxsUnVuU29vbik6CisK
IDIwMTctMTAtMDQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBi
bWFsbG9jIG11dGV4IHNob3VsZCBiZSBhZGFwdGl2ZQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIyOTExKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBACiAJCTE0REQ3OEJDMThGNDhENkIwMDk1MDcwMiAv
KiBTbWFsbExpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0NTI0Nzg2MThCQzc1N0MwMEY4MDA5OCAvKiBTbWFsbExpbmUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhCRDE4RjQ4RDZCMDA5
NTA3MDIgLyogU21hbGxQYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDNFMjlFRDE4Q0FFOTA1MDBGRThBMEYgLyogU21hbGxQYWdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4QzUxOEY0
OEQ3NTAwOTUwNzAyIC8qIEFsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQyMUE4NzcxOEVFNDYyQTAwQjRERDY4IC8qIEFsZ29yaXRobS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0REQ3
OEM2MThGNDhENzUwMDk1MDcwMiAvKiBBc3luY1Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTdGNjUyMThCQTg4QTAwMDc2RkEzRiAvKiBBc3lu
Y1Rhc2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNERENzhDNzE4RjQ4RDc1MDA5NTA3MDIgLyogQkFzc2VydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0NjgxODlFRURFNDAwNTQ2RDY4IC8q
IEJBc3NlcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNERENzhDODE4RjQ4RDc1MDA5NTA3MDIgLyogRml4ZWRWZWN0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDlEQjQ1MTdGMjQ0NzEwMEVB
QUI3OSAvKiBGaXhlZFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0REQ3OEM5MThGNDhENzUwMDk1MDcwMiAvKiBCSW5saW5lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ2MDE4OURD
RTFFMDA1NDZENjggLyogQklubGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC05OCw3ICs5Nyw2IEBACiAJCTE0MTNFNDYyMTg5REUxQ0QwMDU0
NkQ2OCAvKiBCdW1wQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVu
ZGluZyA9IDA7IG5hbWUgPSBCdW1wQWxsb2NhdG9yLmg7IHBhdGggPSBibWFsbG9jL0J1bXBBbGxv
Y2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxM0U0NjgxODlFRURFNDAw
NTQ2RDY4IC8qIEJBc3NlcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQkFz
c2VydC5oOyBwYXRoID0gYm1hbGxvYy9CQXNzZXJ0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN5c2NhbGwuaDsgcGF0aCA9IGJtYWxsb2MvU3lzY2FsbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDE3RjY1MjE4QkE4OEEwMDA3NkZBM0Yg
LyogQXN5bmNUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFzeW5jVGFz
ay5oOyBwYXRoID0gYm1hbGxvYy9Bc3luY1Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQxRDlBRkYxQzhFNTFDMDAwMEFCQkEwIC8qIExpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTGlzdC5oOyBwYXRoID0gYm1hbGxvYy9MaXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MjFBODc3MThFRTQ2MkEwMEI0REQ2OCAvKiBBbGdvcml0
aG0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWxnb3JpdGhtLmg7IHBhdGggPSBibWFsbG9jL0FsZ29yaXRo
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDJCNDQzNDFFMjgzOUU3MDAxREE2
RTkgLyogRGVidWdIZWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERlYnVnSGVhcC5jcHA7IHBhdGggPSBibWFsbG9jL0RlYnVnSGVhcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yODIsNyArMjgwLDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CTQ0MDhGMjk2MUM5ODk2QzQwMDEyRUM2NCAvKiBkYXJ3aW4gKi8sCiAJCQkJMTQyMUE4NzcxOEVF
NDYyQTAwQjRERDY4IC8qIEFsZ29yaXRobS5oICovLAotCQkJCTE0MTdGNjUyMThCQTg4QTAwMDc2
RkEzRiAvKiBBc3luY1Rhc2suaCAqLywKIAkJCQk2NTk5QzVDQTFFQzNGMTU5MDBBMkY3QkIgLyog
QXZhaWxhYmxlTWVtb3J5LmNwcCAqLywKIAkJCQk2NTk5QzVDQjFFQzNGMTU5MDBBMkY3QkIgLyog
QXZhaWxhYmxlTWVtb3J5LmggKi8sCiAJCQkJMTQxM0U0NjgxODlFRURFNDAwNTQ2RDY4IC8qIEJB
c3NlcnQuaCAqLywKQEAgLTMzNiw3ICszMzMsNiBAQAogCQkJCTE0REQ3ODk4MThGNDhENEEwMDk1
MDcwMiAvKiBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUJGMTUzMUYyMkUxNTcw
MDI5RDkxRCAvKiBTY2F2ZW5nZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUJGMTQ3MUYyMkE4
QjEwMDI5RDkxRCAvKiBIZWFwS2luZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRERDc4QzYxOEY0
OEQ3NTAwOTUwNzAyIC8qIEFzeW5jVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU5OUM1Q0Qx
RUMzRjE1OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0NDhDMzAxMThGMzc1NEMwMDUwMjgzOSAvKiBibWFsbG9jLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQXN5bmNUYXNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAkocmV2aXNpb24gMjIyOTExKQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9Bc3luY1Rhc2suaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgQXN5bmNUYXNrX2gKLSNkZWZpbmUgQXN5bmNUYXNrX2gKLQotI2luY2x1ZGUg
IkJBc3NlcnQuaCIKLSNpbmNsdWRlICJCSW5saW5lLmgiCi0jaW5jbHVkZSAiTXV0ZXguaCIKLSNp
bmNsdWRlICJTaXplcy5oIgotI2luY2x1ZGUgPGF0b21pYz4KLSNpbmNsdWRlIDxjb25kaXRpb25f
dmFyaWFibGU+Ci0jaW5jbHVkZSA8dGhyZWFkPgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIE9iamVjdCwgdHlwZW5hbWUgRnVuY3Rpb24+Ci1jbGFzcyBBc3luY1Rh
c2sgewotcHVibGljOgotICAgIEFzeW5jVGFzayhPYmplY3QmLCBjb25zdCBGdW5jdGlvbiYpOwot
ICAgIH5Bc3luY1Rhc2soKTsKLSAgICAKLSAgICBib29sIHdpbGxSdW4oKSB7IHJldHVybiBtX3N0
YXRlID09IFN0YXRlOjpSdW47IH0KLSAgICB2b2lkIHJ1bigpOwotICAgIAotICAgIGJvb2wgd2ls
bFJ1blNvb24oKSB7IHJldHVybiBtX3N0YXRlID4gU3RhdGU6OlNsZWVwOyB9Ci0gICAgdm9pZCBy
dW5Tb29uKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIGVudW0gY2xhc3MgU3RhdGUgeyBTbGVlcCwg
UnVuLCBSdW5Tb29uIH07Ci0gICAgCi0gICAgdm9pZCBydW5TbG93Q2FzZSgpOwotICAgIHZvaWQg
cnVuU29vblNsb3dDYXNlKCk7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgdGhyZWFkRW50cnlQb2lu
dChBc3luY1Rhc2sqKTsKLSAgICB2b2lkIHRocmVhZFJ1bkxvb3AoKTsKLQotICAgIHN0ZDo6YXRv
bWljPFN0YXRlPiBtX3N0YXRlOwotCi0gICAgTXV0ZXggbV9jb25kaXRpb25NdXRleDsKLSAgICBz
dGQ6OmNvbmRpdGlvbl92YXJpYWJsZV9hbnkgbV9jb25kaXRpb247Ci0KLSAgICBzdGQ6OnRocmVh
ZCBtX3RocmVhZDsKLQotICAgIE9iamVjdCYgbV9vYmplY3Q7Ci0gICAgRnVuY3Rpb24gbV9mdW5j
dGlvbjsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iamVjdCwgdHlwZW5hbWUgRnVuY3Rpb24+
Ci1Bc3luY1Rhc2s8T2JqZWN0LCBGdW5jdGlvbj46OkFzeW5jVGFzayhPYmplY3QmIG9iamVjdCwg
Y29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQotICAgIDogbV9zdGF0ZShTdGF0ZTo6U2xlZXApCi0g
ICAgLCBtX2NvbmRpdGlvbigpCi0gICAgLCBtX3RocmVhZChzdGQ6OnRocmVhZCgmQXN5bmNUYXNr
Ojp0aHJlYWRFbnRyeVBvaW50LCB0aGlzKSkKLSAgICAsIG1fb2JqZWN0KG9iamVjdCkKLSAgICAs
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCi17Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iamVjdCwg
dHlwZW5hbWUgRnVuY3Rpb24+Ci1Bc3luY1Rhc2s8T2JqZWN0LCBGdW5jdGlvbj46On5Bc3luY1Rh
c2soKQotewotICAgIC8vIFdlJ2QgbGlrZSB0byBtYXJrIG91ciBkZXN0cnVjdG9yIGRlbGV0ZWQg
YnV0IEMrKyB3b24ndCBhbGxvdyBpdCBiZWNhdXNlCi0gICAgLy8gd2UgYXJlIGFuIGF1dG9tYXRp
YyBtZW1iZXIgb2YgSGVhcC4KLSAgICBSRUxFQVNFX0JBU1NFUlQoMCk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIE9iamVjdCwgdHlwZW5hbWUgRnVuY3Rpb24+Ci12b2lkIEFzeW5jVGFzazxPYmpl
Y3QsIEZ1bmN0aW9uPjo6cnVuKCkKLXsKLSAgICBtX3N0YXRlID0gU3RhdGU6OlJ1bjsKLSAgICAK
LSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+IGxvY2sobV9jb25kaXRpb25NdXRleCk7Ci0gICAg
bV9jb25kaXRpb24ubm90aWZ5X2FsbCgpOwotfQotICAgIAotdGVtcGxhdGU8dHlwZW5hbWUgT2Jq
ZWN0LCB0eXBlbmFtZSBGdW5jdGlvbj4KLXZvaWQgQXN5bmNUYXNrPE9iamVjdCwgRnVuY3Rpb24+
OjpydW5Tb29uKCkKLXsKLSAgICBtX3N0YXRlID0gU3RhdGU6OlJ1blNvb247Ci0gICAgCi0gICAg
c3RkOjpsb2NrX2d1YXJkPE11dGV4PiBsb2NrKG1fY29uZGl0aW9uTXV0ZXgpOwotICAgIG1fY29u
ZGl0aW9uLm5vdGlmeV9hbGwoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqZWN0LCB0eXBl
bmFtZSBGdW5jdGlvbj4KLXZvaWQgQXN5bmNUYXNrPE9iamVjdCwgRnVuY3Rpb24+Ojp0aHJlYWRF
bnRyeVBvaW50KEFzeW5jVGFzayogYXN5bmNUYXNrKQotewotI2lmIEJPUyhEQVJXSU4pCi0gICAg
cHRocmVhZF9zZXRfcW9zX2NsYXNzX3NlbGZfbnAoUU9TX0NMQVNTX1VTRVJfSU5URVJBQ1RJVkUs
IDApOwotI2VuZGlmCi0KLSAgICBhc3luY1Rhc2stPnRocmVhZFJ1bkxvb3AoKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgT2JqZWN0LCB0eXBlbmFtZSBGdW5jdGlvbj4KLXZvaWQgQXN5bmNUYXNr
PE9iamVjdCwgRnVuY3Rpb24+Ojp0aHJlYWRSdW5Mb29wKCkKLXsKLSAgICAvLyBUaGlzIGxvb3Ag
cmF0Y2hldHMgZG93bndhcmQgZnJvbSBtb3N0IGFjdGl2ZSB0byBsZWFzdCBhY3RpdmUgc3RhdGUu
IFdoaWxlCi0gICAgLy8gd2UgcmF0Y2hldCBkb3dud2FyZCwgYW55IG90aGVyIHRocmVhZCBtYXkg
cmVzZXQgb3VyIHN0YXRlLgotICAgIAotICAgIC8vIFdlIHJlcXVpcmUgYW55IHN0YXRlIGNoYW5n
ZSB3aGlsZSB3ZSBhcmUgc2xlZXBpbmcgdG8gc2lnbmFsIHRvIG91cgotICAgIC8vIGNvbmRpdGlv
biB2YXJpYWJsZSBhbmQgd2FrZSB1cyB1cC4KLSAgICAKLSAgICB3aGlsZSAoMSkgewotICAgICAg
ICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U2xlZXApIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8TXV0ZXg+IGxvY2sobV9jb25kaXRpb25NdXRleCk7Ci0gICAgICAgICAgICBtX2NvbmRp
dGlvbi53YWl0KGxvY2ssIFsmXSgpIHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlNsZWVwOyB9
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlJ1
blNvb24pIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+IGxvY2sobV9jb25k
aXRpb25NdXRleCk7Ci0gICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0X2Zvcihsb2NrLCBhc3lu
Y1Rhc2tTbGVlcER1cmF0aW9uLCBbJl0oKSB7IHJldHVybiBtX3N0YXRlICE9IFN0YXRlOjpSdW5T
b29uOyB9KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpT
bGVlcDsKLSAgICAgICAgKG1fb2JqZWN0LiptX2Z1bmN0aW9uKSgpOwotICAgIH0KLX0KLQotfSAv
LyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gQXN5bmNUYXNrX2gKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwLmNwcAkocmV2aXNpb24gMjIyOTExKQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQCBuYW1lc3BhY2Ug
Ym1hbGxvYyB7CiBIZWFwOjpIZWFwKEhlYXBLaW5kIGtpbmQsIHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mKQogICAgIDogbV9raW5kKGtpbmQpCiAgICAgLCBtX3ZtUGFnZVNpemVQaHlzaWNh
bCh2bVBhZ2VTaXplUGh5c2ljYWwoKSkKLSAgICAsIG1fc2NhdmVuZ2VyKCp0aGlzLCAmSGVhcDo6
Y29uY3VycmVudFNjYXZlbmdlKQogICAgICwgbV9kZWJ1Z0hlYXAobnVsbHB0cikKIHsKICAgICBS
RUxFQVNFX0JBU1NFUlQodm1QYWdlU2l6ZVBoeXNpY2FsKCkgPj0gc21hbGxQYWdlU2l6ZSk7CkBA
IC02NSw3ICs2NCw3IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgc3RkOjpsb2NrX2d1YXIK
ICNlbmRpZgogICAgIH0KICAgICAKLSAgICBQZXJQcm9jZXNzPFNjYXZlbmdlcj46OmdldCgpOwor
ICAgIG1fc2NhdmVuZ2VyID0gUGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKTsKIH0KIAogYm9v
bCBIZWFwOjp1c2luZ0dpZ2FjYWdlKCkKQEAgLTEzOSwyMyArMTM4LDYgQEAgdm9pZCBIZWFwOjpp
bml0aWFsaXplUGFnZU1ldGFkYXRhKCkKICAgICAgICAgbV9wYWdlQ2xhc3Nlc1tpXSA9IChjb21w
dXRlUGFnZVNpemUoaSkgLSAxKSAvIHNtYWxsUGFnZVNpemU7CiB9CiAKLXZvaWQgSGVhcDo6Y29u
Y3VycmVudFNjYXZlbmdlKCkKLXsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxv
Y2sobXV0ZXgoKSk7Ci0KLSNpZiBCT1MoREFSV0lOKQotICAgIHB0aHJlYWRfc2V0X3Fvc19jbGFz
c19zZWxmX25wKFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0RmFzdENhc2UoKS0+cmVxdWVzdGVk
U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MoKSwgMCk7Ci0jZW5kaWYKLQotICAgIGlmIChtX2lzR3Jv
d2luZyAmJiAhaXNVbmRlck1lbW9yeVByZXNzdXJlKCkpIHsKLSAgICAgICAgbV9pc0dyb3dpbmcg
PSBmYWxzZTsKLSAgICAgICAgbV9zY2F2ZW5nZXIucnVuU29vbigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIHNjYXZlbmdlKGxvY2spOwotfQotCiB2b2lkIEhlYXA6OnNjYXZl
bmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKQogewogICAgIGZvciAoYXV0byYgbGlz
dCA6IG1fZnJlZVBhZ2VzKSB7CkBAIC0xODMsMzUgKzE2NSw2IEBAIHZvaWQgSGVhcDo6c2NhdmVu
Z2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXQKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6c2NoZWR1bGVT
Y2F2ZW5nZXJJZlVuZGVyTWVtb3J5UHJlc3N1cmUoc2l6ZV90IGJ5dGVzKQotewotICAgIG1fc2Nh
dmVuZ2VyQnl0ZXMgKz0gYnl0ZXM7Ci0gICAgaWYgKG1fc2NhdmVuZ2VyQnl0ZXMgPCBzY2F2ZW5n
ZXJCeXRlc1Blck1lbW9yeVByZXNzdXJlQ2hlY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c2NhdmVuZ2VyQnl0ZXMgPSAwOwotCi0gICAgaWYgKG1fc2NhdmVuZ2VyLndpbGxSdW4oKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpc1VuZGVyTWVtb3J5UHJlc3N1cmUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9pc0dyb3dpbmcgPSBmYWxzZTsKLSAgICBtX3NjYXZlbmdlci5y
dW4oKTsKLX0KLQotdm9pZCBIZWFwOjpzY2hlZHVsZVNjYXZlbmdlcihzaXplX3QgYnl0ZXMpCi17
Ci0gICAgc2NoZWR1bGVTY2F2ZW5nZXJJZlVuZGVyTWVtb3J5UHJlc3N1cmUoYnl0ZXMpOwotCi0g
ICAgaWYgKG1fc2NhdmVuZ2VyLndpbGxSdW5Tb29uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1faXNHcm93aW5nID0gZmFsc2U7Ci0gICAgbV9zY2F2ZW5nZXIucnVuU29vbigpOwotfQotCiB2
b2lkIEhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYsIExpbmVDYWNoZSYgbGluZUNhY2hlKQogewogICAgIGZvciAoYXV0byYgbGlzdCA6IGxpbmVD
YWNoZSkgewpAQCAtMjQyLDcgKzE5NSw3IEBAIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbENodW5r
KHN0ZDo6bG9ja18KICAgICAgICAgICAgIGNodW5rLT5mcmVlUGFnZXMoKS5wdXNoKHBhZ2UpOwog
ICAgICAgICB9KTsKICAgICAgICAgCi0gICAgICAgIHNjaGVkdWxlU2NhdmVuZ2VyKDApOworICAg
ICAgICBtX3NjYXZlbmdlci0+c2NoZWR1bGUoMCk7CiAKICAgICAgICAgcmV0dXJuIGNodW5rOwog
ICAgIH0oKTsKQEAgLTI3NCw3ICsyMjcsNyBAQCBTbWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRlU21h
bGxQYWdlKHN0ZDo6CiAgICAgaWYgKCFtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIG1fbGluZUNhY2hlW3NpemVDbGFzc10ucG9wRnJvbnQoKTsKIAotICAg
IG1faXNHcm93aW5nID0gdHJ1ZTsKKyAgICBtX3NjYXZlbmdlci0+ZGlkU3RhcnRHcm93aW5nKCk7
CiAgICAgCiAgICAgU21hbGxQYWdlKiBwYWdlID0gWyZdKCkgewogICAgICAgICBzaXplX3QgcGFn
ZUNsYXNzID0gbV9wYWdlQ2xhc3Nlc1tzaXplQ2xhc3NdOwpAQCAtMjkxLDcgKzI0NCw3IEBAIFNt
YWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjoKICAgICAgICAgICAgIG1fZnJl
ZVBhZ2VzW3BhZ2VDbGFzc10ucmVtb3ZlKGNodW5rKTsKIAogICAgICAgICBpZiAoIXBhZ2UtPmhh
c1BoeXNpY2FsUGFnZXMoKSkgewotICAgICAgICAgICAgc2NoZWR1bGVTY2F2ZW5nZXJJZlVuZGVy
TWVtb3J5UHJlc3N1cmUocGFnZVNpemUocGFnZUNsYXNzKSk7CisgICAgICAgICAgICBtX3NjYXZl
bmdlci0+c2NoZWR1bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmUocGFnZVNpemUocGFnZUNsYXNzKSk7
CiAKICAgICAgICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHBhZ2UtPmJlZ2lu
KCktPmJlZ2luKCksIHBhZ2VTaXplKHBhZ2VDbGFzcykpOwogICAgICAgICAgICAgcGFnZS0+c2V0
SGFzUGh5c2ljYWxQYWdlcyh0cnVlKTsKQEAgLTMzOSw3ICsyOTIsNyBAQCB2b2lkIEhlYXA6OmRl
YWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrCiAgICAgICAgIG1fY2h1bmtDYWNoZVtwYWdlQ2xh
c3NdLnB1c2goY2h1bmspOwogICAgIH0KICAgICAKLSAgICBzY2hlZHVsZVNjYXZlbmdlcihwYWdl
U2l6ZShwYWdlQ2xhc3MpKTsKKyAgICBtX3NjYXZlbmdlci0+c2NoZWR1bGUocGFnZVNpemUocGFn
ZUNsYXNzKSk7CiB9CiAKIHZvaWQgSGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU1ldGFk
YXRhKApAQCAtNDg2LDcgKzQzOSw3IEBAIExhcmdlUmFuZ2UgSGVhcDo6c3BsaXRBbmRBbGxvY2F0
ZShMYXJnZVIKICAgICAgICAgCiAgICAgY2FzZSBBbGxvY2F0aW9uS2luZDo6UGh5c2ljYWw6CiAg
ICAgICAgIGlmIChyYW5nZS5waHlzaWNhbFNpemUoKSA8IHJhbmdlLnNpemUoKSkgewotICAgICAg
ICAgICAgc2NoZWR1bGVTY2F2ZW5nZXJJZlVuZGVyTWVtb3J5UHJlc3N1cmUocmFuZ2Uuc2l6ZSgp
KTsKKyAgICAgICAgICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3Vy
ZShyYW5nZS5zaXplKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB2bUFsbG9jYXRlUGh5
c2ljYWxQYWdlc1Nsb3BweShyYW5nZS5iZWdpbigpICsgcmFuZ2UucGh5c2ljYWxTaXplKCksIHJh
bmdlLnNpemUoKSAtIHJhbmdlLnBoeXNpY2FsU2l6ZSgpKTsKICAgICAgICAgICAgIHJhbmdlLnNl
dFBoeXNpY2FsU2l6ZShyYW5nZS5zaXplKCkpOwpAQCAtNTEzLDcgKzQ2Niw3IEBAIHZvaWQqIEhl
YXA6OnRyeUFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2cKICAgICBpZiAobV9kZWJ1Z0hlYXApCiAg
ICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+bWVtYWxpZ25MYXJnZShhbGlnbm1lbnQsIHNpemUs
IGFsbG9jYXRpb25LaW5kKTsKICAgICAKLSAgICBtX2lzR3Jvd2luZyA9IHRydWU7CisgICAgbV9z
Y2F2ZW5nZXItPmRpZFN0YXJ0R3Jvd2luZygpOwogICAgIAogICAgIHNpemVfdCByb3VuZGVkU2l6
ZSA9IHNpemUgPyByb3VuZFVwVG9NdWx0aXBsZU9mKGxhcmdlQWxpZ25tZW50LCBzaXplKSA6IGxh
cmdlQWxpZ25tZW50OwogICAgIGlmIChyb3VuZGVkU2l6ZSA8IHNpemUpIC8vIENoZWNrIGZvciBv
dmVyZmxvdwpAQCAtNTY3LDcgKzUyMCw3IEBAIHZvaWQgSGVhcDo6c2hyaW5rTGFyZ2Uoc3RkOjps
b2NrX2d1YXJkPFMKICAgICBMYXJnZVJhbmdlIHJhbmdlID0gTGFyZ2VSYW5nZShvYmplY3QsIHNp
emUpOwogICAgIHNwbGl0QW5kQWxsb2NhdGUocmFuZ2UsIGFsaWdubWVudCwgbmV3U2l6ZSwgQWxs
b2NhdGlvbktpbmQ6OlBoeXNpY2FsKTsKIAotICAgIHNjaGVkdWxlU2NhdmVuZ2VyKHNpemUpOwor
ICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZShzaXplKTsKIH0KIAogdm9pZCBIZWFwOjpkZWFsbG9j
YXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHZvaWQqIG9iamVjdCwgQWxs
b2NhdGlvbktpbmQgYWxsb2NhdGlvbktpbmQpCkBAIC01NzcsNyArNTMwLDcgQEAgdm9pZCBIZWFw
OjpkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YQogCiAgICAgc2l6ZV90IHNpemUgPSBtX2xh
cmdlQWxsb2NhdGVkLnJlbW92ZShvYmplY3QpOwogICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJh
bmdlKG9iamVjdCwgc2l6ZSwgYWxsb2NhdGlvbktpbmQgPT0gQWxsb2NhdGlvbktpbmQ6OlBoeXNp
Y2FsID8gc2l6ZSA6IDApKTsKLSAgICBzY2hlZHVsZVNjYXZlbmdlcihzaXplKTsKKyAgICBtX3Nj
YXZlbmdlci0+c2NoZWR1bGUoc2l6ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5k
ZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSGVhcC5oCShyZXZpc2lvbiAyMjI5MTEpCisrKyBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2RlZmlu
ZSBIZWFwX2gKIAogI2luY2x1ZGUgIkFsbG9jYXRpb25LaW5kLmgiCi0jaW5jbHVkZSAiQXN5bmNU
YXNrLmgiCiAjaW5jbHVkZSAiQnVtcFJhbmdlLmgiCiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNs
dWRlICJIZWFwS2luZC5oIgpAQCAtNTEsNiArNTAsNyBAQCBjbGFzcyBCZWdpblRhZzsKIGNsYXNz
IEJ1bXBBbGxvY2F0b3I7CiBjbGFzcyBEZWJ1Z0hlYXA7CiBjbGFzcyBFbmRUYWc7CitjbGFzcyBT
Y2F2ZW5nZXI7CiAKIGNsYXNzIEhlYXAgewogcHVibGljOgpAQCAtMTEyLDExICsxMTIsNiBAQCBw
cml2YXRlOgogCiAgICAgTGFyZ2VSYW5nZSBzcGxpdEFuZEFsbG9jYXRlKExhcmdlUmFuZ2UmLCBz
aXplX3QgYWxpZ25tZW50LCBzaXplX3QsIEFsbG9jYXRpb25LaW5kKTsKIAotICAgIHZvaWQgc2No
ZWR1bGVTY2F2ZW5nZXIoc2l6ZV90KTsKLSAgICB2b2lkIHNjaGVkdWxlU2NhdmVuZ2VySWZVbmRl
ck1lbW9yeVByZXNzdXJlKHNpemVfdCk7Ci0gICAgCi0gICAgdm9pZCBjb25jdXJyZW50U2NhdmVu
Z2UoKTsKLSAgICAKICAgICBIZWFwS2luZCBtX2tpbmQ7CiAgICAgCiAgICAgc2l6ZV90IG1fdm1Q
YWdlU2l6ZVBoeXNpY2FsOwpAQCAtMTMyLDEyICsxMjcsOCBAQCBwcml2YXRlOgogCiAgICAgTWFw
PENodW5rKiwgT2JqZWN0VHlwZSwgQ2h1bmtIYXNoPiBtX29iamVjdFR5cGVzOwogCi0gICAgc2l6
ZV90IG1fc2NhdmVuZ2VyQnl0ZXMgeyAwIH07Ci0gICAgYm9vbCBtX2lzR3Jvd2luZyB7IGZhbHNl
IH07Ci0gICAgCi0gICAgQXN5bmNUYXNrPEhlYXAsIGRlY2x0eXBlKCZIZWFwOjpjb25jdXJyZW50
U2NhdmVuZ2UpPiBtX3NjYXZlbmdlcjsKLQotICAgIERlYnVnSGVhcCogbV9kZWJ1Z0hlYXA7Cisg
ICAgU2NhdmVuZ2VyKiBtX3NjYXZlbmdlciB7IG51bGxwdHIgfTsKKyAgICBEZWJ1Z0hlYXAqIG1f
ZGVidWdIZWFwIHsgbnVsbHB0ciB9OwogfTsKIAogaW5saW5lIHZvaWQgSGVhcDo6YWxsb2NhdGVT
bWFsbEJ1bXBSYW5nZXMoCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCShy
ZXZpc2lvbiAyMjI5MTEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIlNjYXZlbmdlci5o
IgogCisjaW5jbHVkZSAiQXZhaWxhYmxlTWVtb3J5LmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2lu
Y2x1ZGUgPHRocmVhZD4KIApAQCAtNDEsNiArNDIsNzYgQEAgU2NhdmVuZ2VyOjpTY2F2ZW5nZXIo
c3RkOjpsb2NrX2d1YXJkPFN0YQogICAgIGRpc3BhdGNoX3Jlc3VtZShtX3ByZXNzdXJlSGFuZGxl
ckRpc3BhdGNoU291cmNlKTsKICAgICBkaXNwYXRjaF9yZWxlYXNlKHF1ZXVlKTsKICNlbmRpZgor
ICAgIAorICAgIG1fdGhyZWFkID0gc3RkOjp0aHJlYWQoJnRocmVhZEVudHJ5UG9pbnQsIHRoaXMp
OworfQorCit2b2lkIFNjYXZlbmdlcjo6cnVuKCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TXV0
ZXg+IGxvY2sobV9tdXRleCk7CisgICAgcnVuSG9sZGluZ0xvY2soKTsKK30KKwordm9pZCBTY2F2
ZW5nZXI6OnJ1bkhvbGRpbmdMb2NrKCkKK3sKKyAgICBtX3N0YXRlID0gU3RhdGU6OlJ1bjsKKyAg
ICBtX2NvbmRpdGlvbi5ub3RpZnlfYWxsKCk7Cit9CisKK3ZvaWQgU2NhdmVuZ2VyOjpydW5Tb29u
KCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgcnVu
U29vbkhvbGRpbmdMb2NrKCk7Cit9CisKK3ZvaWQgU2NhdmVuZ2VyOjpydW5Tb29uSG9sZGluZ0xv
Y2soKQoreworICAgIGlmICh3aWxsUnVuU29vbigpKQorICAgICAgICByZXR1cm47CisgICAgbV9z
dGF0ZSA9IFN0YXRlOjpSdW5Tb29uOworICAgIG1fY29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKK30K
Kwordm9pZCBTY2F2ZW5nZXI6OmRpZFN0YXJ0R3Jvd2luZygpCit7CisgICAgLy8gV2UgZG9uJ3Qg
cmVhbGx5IG5lZWQgdG8gbG9jayBoZXJlLCBzaW5jZSB0aGlzIGlzIGp1c3QgYSBoZXVyaXN0aWMu
CisgICAgbV9pc0dyb3dpbmcgPSB0cnVlOworfQorCit2b2lkIFNjYXZlbmdlcjo6c2NoZWR1bGVJ
ZlVuZGVyTWVtb3J5UHJlc3N1cmUoc2l6ZV90IGJ5dGVzKQoreworICAgIHN0ZDo6bG9ja19ndWFy
ZDxNdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3Vy
ZUhvbGRpbmdMb2NrKGJ5dGVzKTsKK30KKwordm9pZCBTY2F2ZW5nZXI6OnNjaGVkdWxlSWZVbmRl
ck1lbW9yeVByZXNzdXJlSG9sZGluZ0xvY2soc2l6ZV90IGJ5dGVzKQoreworICAgIG1fc2NhdmVu
Z2VyQnl0ZXMgKz0gYnl0ZXM7CisgICAgaWYgKG1fc2NhdmVuZ2VyQnl0ZXMgPCBzY2F2ZW5nZXJC
eXRlc1Blck1lbW9yeVByZXNzdXJlQ2hlY2spCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Nh
dmVuZ2VyQnl0ZXMgPSAwOworCisgICAgaWYgKHdpbGxSdW4oKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFpc1VuZGVyTWVtb3J5UHJlc3N1cmUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pc0dyb3dpbmcgPSBmYWxzZTsKKyAgICBydW5Ib2xkaW5nTG9jaygpOworfQorCit2b2lk
IFNjYXZlbmdlcjo6c2NoZWR1bGUoc2l6ZV90IGJ5dGVzKQoreworICAgIHN0ZDo6bG9ja19ndWFy
ZDxNdXRleD4gbG9jayhtX211dGV4KTsKKyAgICBzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3Vy
ZUhvbGRpbmdMb2NrKGJ5dGVzKTsKKyAgICAKKyAgICBpZiAod2lsbFJ1blNvb24oKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIG1faXNHcm93aW5nID0gZmFsc2U7CisgICAgcnVuU29vbkhv
bGRpbmdMb2NrKCk7CiB9CiAKIHZvaWQgU2NhdmVuZ2VyOjpzY2F2ZW5nZSgpCkBAIC01MCw1ICsx
MjEsNTcgQEAgdm9pZCBTY2F2ZW5nZXI6OnNjYXZlbmdlKCkKICAgICAgICAgUGVyUHJvY2VzczxQ
ZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5zY2F2ZW5nZShsb2NrKTsKIH0KIAordm9p
ZCBTY2F2ZW5nZXI6OnRocmVhZEVudHJ5UG9pbnQoU2NhdmVuZ2VyKiBzY2F2ZW5nZXIpCit7Cisg
ICAgc2NhdmVuZ2VyLT50aHJlYWRSdW5Mb29wKCk7Cit9CisKK3ZvaWQgU2NhdmVuZ2VyOjp0aHJl
YWRSdW5Mb29wKCkKK3sKKyAgICBzZXRTZWxmUU9TQ2xhc3MoKTsKKyAgICAKKyAgICAvLyBUaGlz
IGxvb3AgcmF0Y2hldHMgZG93bndhcmQgZnJvbSBtb3N0IGFjdGl2ZSB0byBsZWFzdCBhY3RpdmUg
c3RhdGUuIFdoaWxlCisgICAgLy8gd2UgcmF0Y2hldCBkb3dud2FyZCwgYW55IG90aGVyIHRocmVh
ZCBtYXkgcmVzZXQgb3VyIHN0YXRlLgorICAgIAorICAgIC8vIFdlIHJlcXVpcmUgYW55IHN0YXRl
IGNoYW5nZSB3aGlsZSB3ZSBhcmUgc2xlZXBpbmcgdG8gc2lnbmFsIHRvIG91cgorICAgIC8vIGNv
bmRpdGlvbiB2YXJpYWJsZSBhbmQgd2FrZSB1cyB1cC4KKyAgICAKKyAgICBhdXRvIHRydXRoID0g
W10geyByZXR1cm4gdHJ1ZTsgfTsKKyAgICAKKyAgICB3aGlsZSAodHJ1dGgoKSkgeworICAgICAg
ICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U2xlZXApIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8TXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0
KGxvY2ssIFsmXSgpIHsgcmV0dXJuIG1fc3RhdGUgIT0gU3RhdGU6OlNsZWVwOyB9KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlJ1blNvb24pIHsK
KyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+IGxvY2sobV9tdXRleCk7CisgICAg
ICAgICAgICBtX2NvbmRpdGlvbi53YWl0X2Zvcihsb2NrLCBhc3luY1Rhc2tTbGVlcER1cmF0aW9u
LCBbJl0oKSB7IHJldHVybiBtX3N0YXRlICE9IFN0YXRlOjpSdW5Tb29uOyB9KTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpTbGVlcDsKKyAgICAgICAgCisg
ICAgICAgIHNldFNlbGZRT1NDbGFzcygpOworICAgICAgICAKKyAgICAgICAgeworICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxNdXRleD4gbG9jayhtX211dGV4KTsKKyAgICAgICAgICAgIGlm
IChtX2lzR3Jvd2luZyAmJiAhaXNVbmRlck1lbW9yeVByZXNzdXJlKCkpIHsKKyAgICAgICAgICAg
ICAgICBtX2lzR3Jvd2luZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJ1blNvb25Ib2xkaW5n
TG9jaygpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBzY2F2ZW5nZSgpOworICAgIH0KK30KKwordm9pZCBTY2F2
ZW5nZXI6OnNldFNlbGZRT1NDbGFzcygpCit7CisjaWYgQk9TKERBUldJTikKKyAgICBwdGhyZWFk
X3NldF9xb3NfY2xhc3Nfc2VsZl9ucChyZXF1ZXN0ZWRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcygp
LCAwKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9TY2F2ZW5nZXIuaAkocmV2aXNpb24gMjIyOTExKQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9TY2F2ZW5nZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCUGxhdGZvcm0uaCIKLSNpbmNsdWRlICJTdGF0aWNN
dXRleC5oIgorI2luY2x1ZGUgIk11dGV4LmgiCisjaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxl
PgogI2luY2x1ZGUgPG11dGV4PgogCiAjaWYgQk9TKERBUldJTikKQEAgLTM1LDkgKzM2LDYgQEAK
IAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi0vLyBGSVhNRTogVGhpcyBjbGFzcyBzaG91bGQgYmVj
b21lIGEgY29tbW9uIHNjYXZlbmdlciBtZWNoYW5pc20gZm9yIGFsbCBoZWFwcy4KLS8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ5NzMKLQogY2xhc3MgU2NhdmVu
Z2VyIHsKIHB1YmxpYzoKICAgICBTY2F2ZW5nZXIoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYpOwpAQCAtNTAsOCArNDgsMzkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2NhdmVuZ2VyVGhy
ZWFkUU9TQ2xhc3MocW9zX2NsYXNzX3Qgb3ZlcnJpZGVDbGFzcykgeyBtX3JlcXVlc3RlZFNjYXZl
bmdlclRocmVhZFFPU0NsYXNzID0gb3ZlcnJpZGVDbGFzczsgfQogICAgIHFvc19jbGFzc190IHJl
cXVlc3RlZFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0
ZWRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzczsgfQogI2VuZGlmCisgICAgCisgICAgYm9vbCB3aWxs
UnVuKCkgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6UnVuOyB9CisgICAgdm9pZCBydW4oKTsK
KyAgICAKKyAgICBib29sIHdpbGxSdW5Tb29uKCkgeyByZXR1cm4gbV9zdGF0ZSA+IFN0YXRlOjpT
bGVlcDsgfQorICAgIHZvaWQgcnVuU29vbigpOworICAgIAorICAgIHZvaWQgZGlkU3RhcnRHcm93
aW5nKCk7CisgICAgdm9pZCBzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShzaXplX3QgYnl0
ZXMpOworICAgIHZvaWQgc2NoZWR1bGUoc2l6ZV90IGJ5dGVzKTsKIAogcHJpdmF0ZToKKyAgICBl
bnVtIGNsYXNzIFN0YXRlIHsgU2xlZXAsIFJ1biwgUnVuU29vbiB9OworICAgIAorICAgIHZvaWQg
cnVuSG9sZGluZ0xvY2soKTsKKyAgICB2b2lkIHJ1blNvb25Ib2xkaW5nTG9jaygpOworCisgICAg
dm9pZCBzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZUhvbGRpbmdMb2NrKHNpemVfdCBieXRl
cyk7CisKKyAgICBzdGF0aWMgdm9pZCB0aHJlYWRFbnRyeVBvaW50KFNjYXZlbmdlciopOworICAg
IHZvaWQgdGhyZWFkUnVuTG9vcCgpOworICAgIAorICAgIHZvaWQgc2V0U2VsZlFPU0NsYXNzKCk7
CisgICAgCisgICAgc3RkOjphdG9taWM8U3RhdGU+IG1fc3RhdGUgeyBTdGF0ZTo6U2xlZXAgfTsK
KyAgICBzaXplX3QgbV9zY2F2ZW5nZXJCeXRlcyB7IDAgfTsKKyAgICBib29sIG1faXNHcm93aW5n
IHsgZmFsc2UgfTsKKyAgICAKKyAgICBNdXRleCBtX211dGV4OworICAgIHN0ZDo6Y29uZGl0aW9u
X3ZhcmlhYmxlX2FueSBtX2NvbmRpdGlvbjsKKworICAgIHN0ZDo6dGhyZWFkIG1fdGhyZWFkOwor
ICAgIAogI2lmIEJPUyhEQVJXSU4pCiAgICAgZGlzcGF0Y2hfc291cmNlX3QgbV9wcmVzc3VyZUhh
bmRsZXJEaXNwYXRjaFNvdXJjZTsKICAgICBxb3NfY2xhc3NfdCBtX3JlcXVlc3RlZFNjYXZlbmdl
clRocmVhZFFPU0NsYXNzIHsgUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEIH07Cg==
</data>
<flag name="review"
          id="342763"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
      

    </bug>

</bugzilla>