<?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>87223</bug_id>
          
          <creation_ts>2012-05-23 00:23:26 -0700</creation_ts>
          <short_desc>[Shadow DOM] Node distribution should be orthogonal from node attachment</short_desc>
          <delta_ts>2012-05-29 20:33:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>
          <dependson>87608</dependson>
    
    <dependson>87617</dependson>
          <blocked>85263</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>hayato</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>631316</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-05-23 00:23:26 -0700</bug_when>
    <thetext>We are computing node distribution during node attachment, which is horrible.
It should be orthogonal concept and should be able to happen independently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633683</commentid>
    <comment_count>1</comment_count>
      <attachid>144000</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-05-25 01:23:36 -0700</bug_when>
    <thetext>Created attachment 144000
WIP: passes tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633686</commentid>
    <comment_count>2</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-05-25 01:24:54 -0700</bug_when>
    <thetext>I&apos;m not ultra confident whether this lazy approach is better.
Maybe it&apos;s better to keep the structure fresh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633692</commentid>
    <comment_count>3</comment_count>
      <attachid>144000</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-25 01:30:26 -0700</bug_when>
    <thetext>Comment on attachment 144000
WIP: passes tests

Attachment 144000 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12801394</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633696</commentid>
    <comment_count>4</comment_count>
      <attachid>144000</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-25 01:33:02 -0700</bug_when>
    <thetext>Comment on attachment 144000
WIP: passes tests

Attachment 144000 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12808301</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633697</commentid>
    <comment_count>5</comment_count>
      <attachid>144000</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-25 01:33:48 -0700</bug_when>
    <thetext>Comment on attachment 144000
WIP: passes tests

Attachment 144000 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12807374</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633702</commentid>
    <comment_count>6</comment_count>
      <attachid>144000</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-25 01:37:57 -0700</bug_when>
    <thetext>Comment on attachment 144000
WIP: passes tests

Attachment 144000 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12803404</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633703</commentid>
    <comment_count>7</comment_count>
      <attachid>144000</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-25 01:38:55 -0700</bug_when>
    <thetext>Comment on attachment 144000
WIP: passes tests

Attachment 144000 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12793407</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633709</commentid>
    <comment_count>8</comment_count>
      <attachid>144000</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-25 01:45:33 -0700</bug_when>
    <thetext>Comment on attachment 144000
WIP: passes tests

Attachment 144000 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12791459</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633963</commentid>
    <comment_count>9</comment_count>
      <attachid>144000</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-25 08:44:15 -0700</bug_when>
    <thetext>Comment on attachment 144000
WIP: passes tests

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

I will need to re-read this patch several times to really understand all the stuff that&apos;s happening. I like the direction and encourage you to continue your work.

&gt; Source/WebCore/dom/Element.cpp:136
&gt; +        elementShadow-&gt;removeAllShadowRoots();

Curious why you decided to split this off from destructor.

&gt; Source/WebCore/html/HTMLFormControlElement.cpp:-75
&gt; -    m_validationMessage = nullptr;

Can this change be split off into a separate patch?

&gt; Source/WebCore/html/shadow/ContentDistributor.h:54
&gt; +        Dated = 1,
&gt; +        Spoiling = 2,

What do these two mean?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634829</commentid>
    <comment_count>10</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-05-27 17:29:56 -0700</bug_when>
    <thetext>Hi Dimitri, Thanks for taking a look!
I&apos;ll update the patch with more detailed explanation on its ChangeLog entry.

(In reply to comment #9)
&gt; (From update of attachment 144000 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144000&amp;action=review
&gt; 
&gt; I will need to re-read this patch several times to really understand all the stuff that&apos;s happening. I like the direction and encourage you to continue your work.
&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:136
&gt; &gt; +        elementShadow-&gt;removeAllShadowRoots();
&gt; 
&gt; Curious why you decided to split this off from destructor.
That&apos;s because InsertionPoint::detach(), which is called during this,
now touches its ascendants. But the shadow root is already disconnected 
from the host at the point of the destructor. 
We need to give a change to insertion point to notify its removal to the host,
to invalidate the distribution.

&gt; 
&gt; &gt; Source/WebCore/html/HTMLFormControlElement.cpp:-75
&gt; &gt; -    m_validationMessage = nullptr;
&gt; 
&gt; Can this change be split off into a separate patch?
Sure. I have no intention to land this patch at once.

&gt; 
&gt; &gt; Source/WebCore/html/shadow/ContentDistributor.h:54
&gt; &gt; +        Dated = 1,
&gt; &gt; +        Spoiling = 2,
&gt; 
&gt; What do these two mean?
Wel... Dated should be Invalid, and Spoiling could be Invalidating....
We need to distinguish these two because 
a tree-detach after invalidation can trigger ensureDistribution().
which we need to prevent. &quot;Spoiling&quot; (should be Invalidating) state lets the caller know 
the distribution is under invalidation and it shouldn&apos;t re-distribute there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635117</commentid>
    <comment_count>11</comment_count>
      <attachid>144327</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-05-28 04:15:56 -0700</bug_when>
    <thetext>Created attachment 144327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635131</commentid>
    <comment_count>12</comment_count>
      <attachid>144327</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-28 04:41:58 -0700</bug_when>
    <thetext>Comment on attachment 144327
Patch

Attachment 144327 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12844198</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635132</commentid>
    <comment_count>13</comment_count>
      <attachid>144327</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-28 04:42:07 -0700</bug_when>
    <thetext>Comment on attachment 144327
Patch

Attachment 144327 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12851143</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635133</commentid>
    <comment_count>14</comment_count>
      <attachid>144327</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-28 04:42:26 -0700</bug_when>
    <thetext>Comment on attachment 144327
Patch

Attachment 144327 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12842180</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635134</commentid>
    <comment_count>15</comment_count>
      <attachid>144327</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-28 04:45:26 -0700</bug_when>
    <thetext>Comment on attachment 144327
Patch

Attachment 144327 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12843191</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635136</commentid>
    <comment_count>16</comment_count>
      <attachid>144327</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-28 04:47:44 -0700</bug_when>
    <thetext>Comment on attachment 144327
Patch

Attachment 144327 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12841231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635138</commentid>
    <comment_count>17</comment_count>
      <attachid>144327</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-28 04:55:55 -0700</bug_when>
    <thetext>Comment on attachment 144327
Patch

Attachment 144327 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12845213</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635477</commentid>
    <comment_count>18</comment_count>
      <attachid>144415</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-05-28 17:50:46 -0700</bug_when>
    <thetext>Created attachment 144415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635485</commentid>
    <comment_count>19</comment_count>
      <attachid>144415</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-28 18:14:06 -0700</bug_when>
    <thetext>Comment on attachment 144415
Patch

Attachment 144415 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12852270</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635540</commentid>
    <comment_count>20</comment_count>
      <attachid>144436</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-05-28 20:42:29 -0700</bug_when>
    <thetext>Created attachment 144436
Fixing win build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636157</commentid>
    <comment_count>21</comment_count>
      <attachid>144436</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-05-29 10:01:57 -0700</bug_when>
    <thetext>Comment on attachment 144436
Fixing win build

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

This is a much cleaner design! I looked over the code a few times, and it seems to be workable. Let&apos;s give it a spin.

&gt; Source/WebCore/ChangeLog:14
&gt; +        This change extracts these code to a set of ContentDistributor methods, which are

&quot;these code&quot; is awkward. Maybe &quot;these bits of code&quot;?

&gt; Source/WebCore/ChangeLog:30
&gt; +        Here is such DOM mutations:

&quot;Here are&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636621</commentid>
    <comment_count>22</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-05-29 17:31:28 -0700</bug_when>
    <thetext>Thanks for reviewing this big chunk!
I&apos;ll land this after recovering from the syntax error ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636622</commentid>
    <comment_count>23</comment_count>
      <attachid>144655</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-05-29 17:31:49 -0700</bug_when>
    <thetext>Created attachment 144655
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636780</commentid>
    <comment_count>24</comment_count>
      <attachid>144655</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-29 20:33:37 -0700</bug_when>
    <thetext>Comment on attachment 144655
Patch for landing

Clearing flags on attachment: 144655

Committed r118886: &lt;http://trac.webkit.org/changeset/118886&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636781</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-29 20:33:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144000</attachid>
            <date>2012-05-25 01:23:36 -0700</date>
            <delta_ts>2012-05-28 04:15:50 -0700</delta_ts>
            <desc>WIP: passes tests</desc>
            <filename>bug-87223-20120525172334.patch</filename>
            <type>text/plain</type>
            <size>32611</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYjgw
YThjNDVjZjZkMmJiNTUwMzhmZjQ4Y2IzNGZmMzg4NjY2ZWZkYy4uZDI1ZGQ2ZTM2ZmJjMTI3MDlk
ZTU5ODJmZTQ5NzA2YmZmMTJmNDU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTMyLDgg
KzEzMiwxMCBAQCBFbGVtZW50Ojp+RWxlbWVudCgpCiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAo
c2hhZG93KCkpCisgICAgaWYgKEVsZW1lbnRTaGFkb3cqIGVsZW1lbnRTaGFkb3cgPSBzaGFkb3co
KSkgeworICAgICAgICBlbGVtZW50U2hhZG93LT5yZW1vdmVBbGxTaGFkb3dSb290cygpOwogICAg
ICAgICByYXJlRGF0YSgpLT5tX3NoYWRvdy5jbGVhcigpOworICAgIH0KIAogICAgIGlmIChoYXNB
dHRyTGlzdCgpKSB7CiAgICAgICAgIEFTU0VSVChtX2F0dHJpYnV0ZURhdGEpOwpAQCAtOTQ1LDcg
Kzk0Nyw5IEBAIHZvaWQgRWxlbWVudDo6YXR0YWNoKCkKICAgICAvLyBXaGVuIGEgc2hhZG93IHJv
b3QgZXhpc3RzLCBpdCBkb2VzIHRoZSB3b3JrIG9mIGF0dGFjaGluZyB0aGUgY2hpbGRyZW4uCiAg
ICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHRoaXMtPnNoYWRvdygpKSB7CiAgICAgICAg
IHBhcmVudFB1c2hlci5wdXNoKCk7Ci0gICAgICAgIHNoYWRvdy0+YXR0YWNoSG9zdCh0aGlzKTsK
KyAgICAgICAgc2hhZG93LT5hdHRhY2goKTsKKyAgICAgICAgYXR0YWNoQ2hpbGRyZW5JZk5lZWRl
ZCgpOworICAgICAgICBhdHRhY2hBc05vZGUoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
Zmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgcGFyZW50UHVzaGVyLnB1c2goKTsKQEAgLTk4MSw5
ICs5ODUsMTEgQEAgdm9pZCBFbGVtZW50OjpkZXRhY2goKQogICAgIGlmIChoYXNSYXJlRGF0YSgp
KQogICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1dGVkU3R5bGUoKTsKIAotICAgIGlmIChF
bGVtZW50U2hhZG93KiBzaGFkb3cgPSB0aGlzLT5zaGFkb3coKSkKLSAgICAgICAgc2hhZG93LT5k
ZXRhY2hIb3N0KHRoaXMpOwotICAgIGVsc2UKKyAgICBpZiAoRWxlbWVudFNoYWRvdyogc2hhZG93
ID0gdGhpcy0+c2hhZG93KCkpIHsKKyAgICAgICAgc2hhZG93LT5kZXRhY2goKTsKKyAgICAgICAg
ZGV0YWNoQ2hpbGRyZW5JZk5lZWRlZCgpOworICAgICAgICBkZXRhY2hBc05vZGUoKTsKKyAgICB9
IGVsc2UKICAgICAgICAgQ29udGFpbmVyTm9kZTo6ZGV0YWNoKCk7CiAKICAgICBSZW5kZXJXaWRn
ZXQ6OnJlc3VtZVdpZGdldEhpZXJhcmNoeVVwZGF0ZXMoKTsKQEAgLTEzMTYsNyArMTMyMiw3IEBA
IHZvaWQgRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2Rl
KiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmCiAgICAgICAgIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hh
bmdlcyh0aGlzLCByZW5kZXJTdHlsZSgpLCBmYWxzZSwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5n
ZSwgY2hpbGRDb3VudERlbHRhKTsKIAogICAgIGlmIChFbGVtZW50U2hhZG93ICogc2hhZG93ID0g
dGhpcy0+c2hhZG93KCkpCi0gICAgICAgIHNoYWRvdy0+aG9zdENoaWxkcmVuQ2hhbmdlZCgpOwor
ICAgICAgICBzaGFkb3ctPmludmFsaWRhdGVEaXN0cmlidXRpb24oKTsKIH0KIAogdm9pZCBFbGVt
ZW50OjpiZWdpblBhcnNpbmdDaGlsZHJlbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5j
cHAKaW5kZXggZDVlZmVmNmFmZjYxZGQ1ZThkOTgxZDY1NDk1ZDg3ZGY2ZjA4NDcwOC4uODczYTgz
OTE1MDJjNDJmMzQxYzZmZTY4YTQ0NzZjY2FlZTJhZjcyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50U2hhZG93LmNwcApAQCAtNDQsNyArNDQsNyBAQCBFbGVtZW50U2hhZG93OjpFbGVtZW50U2hh
ZG93KCkKIAogRWxlbWVudFNoYWRvdzo6fkVsZW1lbnRTaGFkb3coKQogewotICAgIHJlbW92ZUFs
bFNoYWRvd1Jvb3RzKCk7CisgICAgQVNTRVJUKG1fc2hhZG93Um9vdHMuaXNFbXB0eSgpKTsKIH0K
IAogc3RhdGljIGJvb2wgdmFsaWRhdGVTaGFkb3dSb290KERvY3VtZW50KiBkb2N1bWVudCwgU2hh
ZG93Um9vdCogc2hhZG93Um9vdCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC03NCwxNSArNzQsMTMg
QEAgdm9pZCBFbGVtZW50U2hhZG93OjphZGRTaGFkb3dSb290KEVsZW1lbnQqIHNoYWRvd0hvc3Qs
IFBhc3NSZWZQdHI8U2hhZG93Um9vdD4gc2gKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2hhZG93
Um9vdC0+c2V0SG9zdChzaGFkb3dIb3N0KTsKKyAgICBtX3NoYWRvd1Jvb3RzLnB1c2goc2hhZG93
Um9vdC5nZXQoKSk7CisgICAgaW52YWxpZGF0ZURpc3RyaWJ1dGlvbihzaGFkb3dIb3N0KTsKICAg
ICBDaGlsZE5vZGVJbnNlcnRpb25Ob3RpZmllcihzaGFkb3dIb3N0KS5ub3RpZnkoc2hhZG93Um9v
dC5nZXQoKSk7CiAKLSAgICBpZiAoc2hhZG93SG9zdC0+YXR0YWNoZWQoKSkgewotICAgICAgICBz
aGFkb3dSb290LT5sYXp5QXR0YWNoKCk7Ci0gICAgICAgIGRldGFjaCgpOwotICAgICAgICBzaGFk
b3dIb3N0LT5kZXRhY2hDaGlsZHJlbigpOwotICAgIH0KKyAgICBpZiAoc2hhZG93SG9zdC0+YXR0
YWNoZWQoKSAmJiAhc2hhZG93Um9vdC0+YXR0YWNoZWQoKSkKKyAgICAgICAgc2hhZG93Um9vdC0+
YXR0YWNoKCk7CiAKLSAgICBtX3NoYWRvd1Jvb3RzLnB1c2goc2hhZG93Um9vdC5nZXQoKSk7CiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQdXNoU2hhZG93Um9vdChzaGFkb3dIb3N0
LCBzaGFkb3dSb290LmdldCgpKTsKIH0KIApAQCAtOTEsMTMgKzg5LDE0IEBAIHZvaWQgRWxlbWVu
dFNoYWRvdzo6cmVtb3ZlQWxsU2hhZG93Um9vdHMoKQogICAgIC8vIERvbnQgcHJvdGVjdCB0aGlz
IHJlZiBjb3VudC4KICAgICBFbGVtZW50KiBzaGFkb3dIb3N0ID0gaG9zdCgpOwogCi0gICAgd2hp
bGUgKFJlZlB0cjxTaGFkb3dSb290PiBvbGRSb290ID0gbV9zaGFkb3dSb290cy5yZW1vdmVIZWFk
KCkpIHsKKyAgICB3aGlsZSAoUmVmUHRyPFNoYWRvd1Jvb3Q+IG9sZFJvb3QgPSBtX3NoYWRvd1Jv
b3RzLmhlYWQoKSkgewogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxQb3BT
aGFkb3dSb290KHNoYWRvd0hvc3QsIG9sZFJvb3QuZ2V0KCkpOwogICAgICAgICBzaGFkb3dIb3N0
LT5kb2N1bWVudCgpLT5yZW1vdmVGb2N1c2VkTm9kZU9mU3VidHJlZShvbGRSb290LmdldCgpKTsK
IAogICAgICAgICBpZiAob2xkUm9vdC0+YXR0YWNoZWQoKSkKICAgICAgICAgICAgIG9sZFJvb3Qt
PmRldGFjaCgpOwogCisgICAgICAgIG1fc2hhZG93Um9vdHMucmVtb3ZlSGVhZCgpOwogICAgICAg
ICBvbGRSb290LT5zZXRIb3N0KDApOwogICAgICAgICBvbGRSb290LT5zZXRQcmV2KDApOwogICAg
ICAgICBvbGRSb290LT5zZXROZXh0KDApOwpAQCAtMTA1LDI5ICsxMDQsMTcgQEAgdm9pZCBFbGVt
ZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dSb290cygpCiAgICAgICAgIENoaWxkTm9kZVJlbW92
YWxOb3RpZmllcihzaGFkb3dIb3N0KS5ub3RpZnkob2xkUm9vdC5nZXQoKSk7CiAgICAgfQogCi0g
ICAgaWYgKHNoYWRvd0hvc3QtPmF0dGFjaGVkKCkpCi0gICAgICAgIHNoYWRvd0hvc3QtPmF0dGFj
aENoaWxkcmVuTGF6aWx5KCk7CisgICAgaW52YWxpZGF0ZURpc3RyaWJ1dGlvbihzaGFkb3dIb3N0
KTsKIH0KIAogdm9pZCBFbGVtZW50U2hhZG93OjphdHRhY2goKQogewotICAgIC8vIFRoZSBwb29s
IG5vZGVzIGFyZSBwb3B1bGF0ZWQgbGF6aWx5IGluCi0gICAgLy8gZW5zdXJlRGlzdHJpYnV0b3Io
KSwgYW5kIGhlcmUgd2UganVzdCBlbnN1cmUgdGhhdCBpdCBpcyBpbiBjbGVhbiBzdGF0ZS4KLSAg
ICBBU1NFUlQoIWRpc3RyaWJ1dG9yKCkucG9vbElzUmVhZHkoKSk7CisgICAgZW5zdXJlRGlzdHJp
YnV0aW9uKCk7CiAKLSAgICBkaXN0cmlidXRvcigpLndpbGxEaXN0cmlidXRlKCk7CiAgICAgZm9y
IChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSBy
b290LT5vbGRlclNoYWRvd1Jvb3QoKSkgewogICAgICAgICBpZiAoIXJvb3QtPmF0dGFjaGVkKCkp
CiAgICAgICAgICAgICByb290LT5hdHRhY2goKTsKICAgICB9Ci0gICAgZGlzdHJpYnV0b3IoKS5k
aWREaXN0cmlidXRlKCk7Ci19Ci0KLXZvaWQgRWxlbWVudFNoYWRvdzo6YXR0YWNoSG9zdChFbGVt
ZW50KiBob3N0KQotewotICAgIGF0dGFjaCgpOwotICAgIGhvc3QtPmF0dGFjaENoaWxkcmVuSWZO
ZWVkZWQoKTsKLSAgICBob3N0LT5hdHRhY2hBc05vZGUoKTsKIH0KIAogdm9pZCBFbGVtZW50U2hh
ZG93OjpkZXRhY2goKQpAQCAtMTM4LDE4ICsxMjUsMTIgQEAgdm9pZCBFbGVtZW50U2hhZG93Ojpk
ZXRhY2goKQogICAgIH0KIH0KIAotdm9pZCBFbGVtZW50U2hhZG93OjpkZXRhY2hIb3N0KEVsZW1l
bnQqIGhvc3QpCi17Ci0gICAgaG9zdC0+ZGV0YWNoQ2hpbGRyZW5JZk5lZWRlZCgpOwotICAgIGRl
dGFjaCgpOwotICAgIGhvc3QtPmRldGFjaEFzTm9kZSgpOwotfQotCiBJbnNlcnRpb25Qb2ludCog
RWxlbWVudFNoYWRvdzo6aW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSogbm9kZSkgY29uc3QK
IHsKICAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5wYXJlbnROb2RlKCkpOwogCiAgICAgaWYgKG5v
ZGUtPnBhcmVudE5vZGUoKS0+aXNTaGFkb3dSb290KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2Rp
c3RyaWJ1dG9yLm5lZWRzRGlzdHJpYnV0aW9uKCkpOwogICAgICAgICBpZiAoSW5zZXJ0aW9uUG9p
bnQqIGluc2VydGlvblBvaW50ID0gdG9TaGFkb3dSb290KG5vZGUtPnBhcmVudE5vZGUoKSktPmFz
c2lnbmVkVG8oKSkKICAgICAgICAgICAgIHJldHVybiBpbnNlcnRpb25Qb2ludDsKIApAQCAtMTU5
LDEyICsxNDAsNiBAQCBJbnNlcnRpb25Qb2ludCogRWxlbWVudFNoYWRvdzo6aW5zZXJ0aW9uUG9p
bnRGb3IoY29uc3QgTm9kZSogbm9kZSkgY29uc3QKICAgICByZXR1cm4gZGlzdHJpYnV0b3IoKS5m
aW5kSW5zZXJ0aW9uUG9pbnRGb3Iobm9kZSk7CiB9CiAKLXZvaWQgRWxlbWVudFNoYWRvdzo6cmVh
dHRhY2goKQotewotICAgIGRldGFjaCgpOwotICAgIGF0dGFjaCgpOwotfQotCiBib29sIEVsZW1l
bnRTaGFkb3c6OmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpCiB7CiAgICAgQVNTRVJUKHlvdW5nZXN0
U2hhZG93Um9vdCgpKTsKQEAgLTE5MSw1OCArMTY2LDQ3IEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6
cmVjYWxjU3R5bGUoTm9kZTo6U3R5bGVDaGFuZ2UgY2hhbmdlKQogICAgIGlmICgheW91bmdlc3Qp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChuZWVkc1JlZGlzdHJpYnV0aW5nKCkpCi0gICAg
ICAgIHJlYXR0YWNoSG9zdENoaWxkcmVuQW5kU2hhZG93KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSB5b3VuZ2VzdC0+ZG9jdW1lbnQoKS0+c3R5
bGVSZXNvbHZlcigpOworICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSB5b3VuZ2Vz
dC0+ZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpOworICAgIHN0eWxlUmVzb2x2ZXItPnB1c2hQ
YXJlbnRTaGFkb3dSb290KHlvdW5nZXN0KTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5wdXNo
UGFyZW50U2hhZG93Um9vdCh5b3VuZ2VzdCk7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IHlvdW5n
ZXN0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChT
aGFkb3dSb290KiByb290ID0geW91bmdlc3Q7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRv
d1Jvb3QoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG4gPSByb290LT5maXJzdENoaWxkKCk7IG47
IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9k
ZSgpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+cmVjYWxjU3R5
bGUoY2hhbmdlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSkKICAgICAg
ICAgICAgICAgICB0b1RleHQobiktPnJlY2FsY1RleHRTdHlsZShjaGFuZ2UpOwogICAgICAgICB9
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnBvcFBhcmVudFNoYWRvd1Jvb3QoeW91bmdlc3QpOwot
ICAgIH0KIAotICAgIG1fZGlzdHJpYnV0b3IuY2xlYXJOZWVkc1JlZGlzdHJpYnV0aW5nKCk7Ci0g
ICAgZm9yIChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJv
b3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgewogICAgICAgICByb290LT5jbGVhck5lZWRz
U3R5bGVSZWNhbGMoKTsKICAgICAgICAgcm9vdC0+Y2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMo
KTsKICAgICB9Ci19CiAKLWJvb2wgRWxlbWVudFNoYWRvdzo6bmVlZHNSZWRpc3RyaWJ1dGluZygp
Ci17Ci0gICAgcmV0dXJuIG1fZGlzdHJpYnV0b3IubmVlZHNSZWRpc3RyaWJ1dGluZygpIHx8ICh5
b3VuZ2VzdFNoYWRvd1Jvb3QoKSAmJiB5b3VuZ2VzdFNoYWRvd1Jvb3QoKS0+aGFzSW5zZXJ0aW9u
UG9pbnQoKSk7CisgICAgc3R5bGVSZXNvbHZlci0+cG9wUGFyZW50U2hhZG93Um9vdCh5b3VuZ2Vz
dCk7CiB9CiAKLXZvaWQgRWxlbWVudFNoYWRvdzo6aG9zdENoaWxkcmVuQ2hhbmdlZCgpCit2b2lk
IEVsZW1lbnRTaGFkb3c6OmVuc3VyZURpc3RyaWJ1dGlvbigpCiB7Ci0gICAgQVNTRVJUKHlvdW5n
ZXN0U2hhZG93Um9vdCgpKTsKLQotICAgIGlmICgheW91bmdlc3RTaGFkb3dSb290KCktPmhhc0lu
c2VydGlvblBvaW50KCkpCisgICAgaWYgKCFtX2Rpc3RyaWJ1dG9yLm5lZWRzRGlzdHJpYnV0aW9u
KCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMgcmVzdWx0cyBpbiBmb3JjZWQgZGV0
YWNoaW5nL2F0dGFjaGluZyBvZiB0aGUgc2hhZG93IHJlbmRlciB0cmVlLiBTZWUgU2hhZG93Um9v
dDo6cmVjYWxjU3R5bGUoKS4KLSAgICBzZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7CisgICAgbV9k
aXN0cmlidXRvci5kaXN0cmlidXRlKGhvc3QoKSk7CiB9CiAKLXZvaWQgRWxlbWVudFNoYWRvdzo6
c2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpCit2b2lkIEVsZW1lbnRTaGFkb3c6OmludmFsaWRhdGVE
aXN0cmlidXRpb24oKQogewotICAgIG1fZGlzdHJpYnV0b3Iuc2V0TmVlZHNSZWRpc3RyaWJ1dGlu
ZygpOwotICAgIGhvc3QoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVE
aXN0cmlidXRpb24oaG9zdCgpKTsKIH0KIAotdm9pZCBFbGVtZW50U2hhZG93OjpyZWF0dGFjaEhv
c3RDaGlsZHJlbkFuZFNoYWRvdygpCit2b2lkIEVsZW1lbnRTaGFkb3c6OmludmFsaWRhdGVEaXN0
cmlidXRpb24oRWxlbWVudCogaG9zdCkKIHsKLSAgICBBU1NFUlQoeW91bmdlc3RTaGFkb3dSb290
KCkpOworICAgIGlmICghbV9kaXN0cmlidXRvci5uZWVkc0ludmFsaWRhdGlvbigpKQorICAgICAg
ICByZXR1cm47CisgICAgYm9vbCBuZWVkc1JlYXR0YWNoID0gbV9kaXN0cmlidXRvci5pbnZhbGlk
YXRlKGhvc3QpOworICAgIGlmIChuZWVkc1JlYXR0YWNoICYmIGhvc3QtPmF0dGFjaGVkKCkpIHsK
KyAgICAgICAgaG9zdC0+ZGV0YWNoKCk7CisgICAgICAgIGhvc3QtPmxhenlBdHRhY2goTm9kZTo6
RG9Ob3RTZXRBdHRhY2hlZCk7CisgICAgfQogCi0gICAgRWxlbWVudCogaG9zdE5vZGUgPSB5b3Vu
Z2VzdFNoYWRvd1Jvb3QoKS0+aG9zdCgpOwotICAgIGhvc3ROb2RlLT5kZXRhY2hDaGlsZHJlbklm
TmVlZGVkKCk7Ci0gICAgcmVhdHRhY2goKTsKLSAgICBob3N0Tm9kZS0+YXR0YWNoQ2hpbGRyZW5J
Zk5lZWRlZCgpOworICAgIG1fZGlzdHJpYnV0b3IuZmluaXNoSW5pdmFsaWRhdGlvbigpOwogfQog
CiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRT
aGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgKaW5kZXggODU2YzQ2
YzMxNGNlMTIxYWM2ZDQ0OGZmYjE2Zjk0NGMzYTJkM2I5Mi4uYTJmYmVkYmUxZjQxNGZhYjE2NWUx
MTRmNmZiZjE5NTBiN2IxNzc4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnRTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCkBAIC01
NiwyNSArNTYsMjMgQEAgcHVibGljOgogCiAgICAgdm9pZCBhdHRhY2goKTsKICAgICB2b2lkIGRl
dGFjaCgpOwotICAgIHZvaWQgcmVhdHRhY2goKTsKLSAgICB2b2lkIGF0dGFjaEhvc3QoRWxlbWVu
dCopOwotICAgIHZvaWQgZGV0YWNoSG9zdChFbGVtZW50Kik7CiAKICAgICBib29sIGNoaWxkTmVl
ZHNTdHlsZVJlY2FsYygpOwogICAgIGJvb2wgbmVlZHNTdHlsZVJlY2FsYygpOworICAgIHZvaWQg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIHZvaWQgcmVjYWxjU3R5bGUoTm9kZTo6U3R5bGVD
aGFuZ2UpOwotICAgIHZvaWQgc2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpOwotICAgIGJvb2wgbmVl
ZHNSZWRpc3RyaWJ1dGluZygpOwotICAgIHZvaWQgaG9zdENoaWxkcmVuQ2hhbmdlZCgpOwogCi0g
ICAgSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50Rm9yKGNvbnN0IE5vZGUqKSBjb25zdDsK
KyAgICB2b2lkIGVuc3VyZURpc3RyaWJ1dGlvbigpOworICAgIHZvaWQgaW52YWxpZGF0ZURpc3Ry
aWJ1dGlvbigpOwogCisgICAgSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50Rm9yKGNvbnN0
IE5vZGUqKSBjb25zdDsKICAgICBDb250ZW50RGlzdHJpYnV0b3ImIGRpc3RyaWJ1dG9yKCk7CiAg
ICAgY29uc3QgQ29udGVudERpc3RyaWJ1dG9yJiBkaXN0cmlidXRvcigpIGNvbnN0OwogCi1wcml2
YXRlOgogICAgIHZvaWQgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKLSAgICB2b2lkIHJlYXR0YWNo
SG9zdENoaWxkcmVuQW5kU2hhZG93KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbnZhbGlkYXRl
RGlzdHJpYnV0aW9uKEVsZW1lbnQqIGhvc3QpOwogCiAgICAgRG91Ymx5TGlua2VkTGlzdDxTaGFk
b3dSb290PiBtX3NoYWRvd1Jvb3RzOwogICAgIENvbnRlbnREaXN0cmlidXRvciBtX2Rpc3RyaWJ1
dG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXgg
Y2JhYmE0ODM4ZTIwYjc5ZWZlNDgyNGU3NmI0ZDhiNTczODVkNTRiZS4uN2Y3MGU3YzBmZjIwYzAz
NGI4NWI1YWM4YWUyNjkzZmE2NmY5MzU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGVSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJl
bmRlcmluZ0NvbnRleHQuY3BwCkBAIC03Nyw2ICs3Nyw4IEBAIE5vZGVSZW5kZXJpbmdDb250ZXh0
OjpOb2RlUmVuZGVyaW5nQ29udGV4dChOb2RlKiBub2RlKQogICAgICAgICAgICAgbV92aXN1YWxQ
YXJlbnRTaGFkb3cgPSB0b1NoYWRvd1Jvb3QocGFyZW50KS0+b3duZXIoKTsKIAogICAgICAgICBp
ZiAobV92aXN1YWxQYXJlbnRTaGFkb3cpIHsKKyAgICAgICAgICAgIG1fdmlzdWFsUGFyZW50U2hh
ZG93LT5lbnN1cmVEaXN0cmlidXRpb24oKTsKKwogICAgICAgICAgICAgaWYgKChtX2luc2VydGlv
blBvaW50ID0gbV92aXN1YWxQYXJlbnRTaGFkb3ctPmluc2VydGlvblBvaW50Rm9yKG1fbm9kZSkp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKG1faW5zZXJ0aW9uUG9pbnQtPnNoYWRvd1Jvb3QoKS0+
aXNVc2VkRm9yUmVuZGVyaW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9waGFzZSA9IEF0
dGFjaGluZ0Rpc3RyaWJ1dGVkOwpAQCAtOTEsNyArOTMsMTAgQEAgTm9kZVJlbmRlcmluZ0NvbnRl
eHQ6Ok5vZGVSZW5kZXJpbmdDb250ZXh0KE5vZGUqIG5vZGUpCiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoaXNTaGFkb3dCb3VuZGFyeShwYXJlbnQpKSB7Ci0gICAgICAgICAgICBpZiAoIXBhcmVu
dC0+c2hhZG93Um9vdCgpLT5pc1VzZWRGb3JSZW5kZXJpbmcoKSkgeworICAgICAgICAgICAgU2hh
ZG93Um9vdCogcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudC0+c2hhZG93Um9vdCgpOworICAgICAg
ICAgICAgcGFyZW50U2hhZG93Um9vdC0+b3duZXIoKS0+ZW5zdXJlRGlzdHJpYnV0aW9uKCk7CisK
KyAgICAgICAgICAgIGlmICghcGFyZW50U2hhZG93Um9vdC0+aXNVc2VkRm9yUmVuZGVyaW5nKCkp
IHsKICAgICAgICAgICAgICAgICBtX3BoYXNlID0gQXR0YWNoaW5nTm90RGlzdHJpYnV0ZWQ7CiAg
ICAgICAgICAgICAgICAgbV9wYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUgPSBwYXJlbnQ7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjg1LDEyICsyOTAsNiBAQCBSZW5kZXJPYmpl
Y3QqIE5vZGVSZW5kZXJpbmdDb250ZXh0OjpwYXJlbnRSZW5kZXJlcigpIGNvbnN0CiAgICAgcmV0
dXJuIG1fcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlID8gbV9wYXJlbnROb2RlRm9yUmVu
ZGVyaW5nQW5kU3R5bGUtPnJlbmRlcmVyKCkgOiAwOwogfQogCi12b2lkIE5vZGVSZW5kZXJpbmdD
b250ZXh0Ojpob3N0Q2hpbGRyZW5DaGFuZ2VkKCkKLXsKLSAgICBpZiAobV9waGFzZSA9PSBBdHRh
Y2hpbmdOb3REaXN0cmlidXRlZCAmJiBtX3Zpc3VhbFBhcmVudFNoYWRvdykKLSAgICAgICAgbV92
aXN1YWxQYXJlbnRTaGFkb3ctPmhvc3RDaGlsZHJlbkNoYW5nZWQoKTsKLX0KLQogYm9vbCBOb2Rl
UmVuZGVyaW5nQ29udGV4dDo6c2hvdWxkQ3JlYXRlUmVuZGVyZXIoKSBjb25zdAogewogICAgIEFT
U0VSVChtX3BoYXNlICE9IENhbGN1bGF0aW5nKTsKQEAgLTM2Niw5ICszNjUsNiBAQCB2b2lkIE5v
ZGVSZW5kZXJlckZhY3Rvcnk6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKQogICAgIEFTU0VSVCgh
bm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgQVNTRVJUKGRvY3VtZW50LT5zaG91bGRDcmVhdGVSZW5k
ZXJlcnMoKSk7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzaWRlIGVmZmVjdCBzaG91bGQgYmUgdmlz
aWJsZSBmcm9tIGF0dGFjaCgpIGNvZGUuCi0gICAgbV9jb250ZXh0Lmhvc3RDaGlsZHJlbkNoYW5n
ZWQoKTsKLQogICAgIGlmICghbV9jb250ZXh0LnNob3VsZENyZWF0ZVJlbmRlcmVyKCkpCiAgICAg
ICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJp
bmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuaApp
bmRleCAxZDNkYWYzZmM1NDI2N2QzYjQ3Y2RhMWJiOTE3MWUyYWEyMWEzOWE2Li43YjE0ZTAzZWRk
OWYxMWY5YWUwYjRkMzA5NjJhNTQ1MjY5MWY5ZWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVJlbmRlcmluZ0NvbnRleHQuaApAQCAtNjAsOCArNjAsNiBAQCBwdWJsaWM6CiAKICAgICBib29s
IHNob3VsZENyZWF0ZVJlbmRlcmVyKCkgY29uc3Q7CiAKLSAgICB2b2lkIGhvc3RDaGlsZHJlbkNo
YW5nZWQoKTsKLQogICAgIGJvb2wgaXNPblVwcGVyRW5jYXBzdWxhdGlvbkJvdW5kYXJ5KCkgY29u
c3Q7CiAgICAgYm9vbCBpc09uRW5jYXBzdWxhdGlvbkJvdW5kYXJ5KCkgY29uc3Q7CiAgICAgYm9v
bCBoYXNGbG93VGhyZWFkUGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRGbG93UmVuZGVy
ZXI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCBmZmM1OTUyN2QzNGRhZDA5NTYx
Y2JlOTU0ODg0YWI1YmI4NmJkZTQzLi42NTllMDQxODMzNzMwZjQwMmVhNTgxMWY4NDJhNjdiODA0
MjdhZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC0xOTAsOCArMTkwLDcgQEAg
dm9pZCBTaGFkb3dSb290OjpzZXRBcHBseUF1dGhvclN0eWxlcyhib29sIHZhbHVlKQogewogICAg
IGlmIChtX2FwcGx5QXV0aG9yU3R5bGVzICE9IHZhbHVlKSB7CiAgICAgICAgIG1fYXBwbHlBdXRo
b3JTdHlsZXMgPSB2YWx1ZTsKLSAgICAgICAgaWYgKGF0dGFjaGVkKCkgJiYgb3duZXIoKSkKLSAg
ICAgICAgICAgIG93bmVyKCktPnNldE5lZWRzUmVkaXN0cmlidXRpbmcoKTsKKyAgICAgICAgaG9z
dCgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfQogfQogCkBAIC0xOTksOCArMTk4LDE1
IEBAIHZvaWQgU2hhZG93Um9vdDo6YXR0YWNoKCkKIHsKICAgICBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyID0gZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpOwogICAgIHN0eWxlUmVzb2x2
ZXItPnB1c2hQYXJlbnRTaGFkb3dSb290KHRoaXMpOwotICAgIERvY3VtZW50RnJhZ21lbnQ6OmF0
dGFjaCgpOworICAgIGF0dGFjaENoaWxkcmVuSWZOZWVkZWQoKTsKKyAgICBhdHRhY2hBc05vZGUo
KTsKICAgICBzdHlsZVJlc29sdmVyLT5wb3BQYXJlbnRTaGFkb3dSb290KHRoaXMpOwogfQogCit2
b2lkIFNoYWRvd1Jvb3Q6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9k
ZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkK
K3sKKyAgICBDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBi
ZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOworICAgIG93bmVyKCkt
PmludmFsaWRhdGVEaXN0cmlidXRpb24oKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgK
aW5kZXggMTQxMWZhNTJhY2NhMTM2ZWMzYjQzMzdiYTQ5OTYzOTIzNjgxNzk1My4uMGI3ZmZhNWYy
ZGE4ZDdhNTQ2MDgzNjE5OTUzOTFjNThjZjg4ZDMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5o
CkBAIC02MCw3ICs2MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlY2FsY1NoYWRvd1RyZWVTdHls
ZShTdHlsZUNoYW5nZSk7CiAKICAgICBJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnRGb3Io
Tm9kZSopIGNvbnN0OwotICAgIHZvaWQgaG9zdENoaWxkcmVuQ2hhbmdlZCgpOwogCiAgICAgdmly
dHVhbCBib29sIGFwcGx5QXV0aG9yU3R5bGVzKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdm9pZCBz
ZXRBcHBseUF1dGhvclN0eWxlcyhib29sKTsKQEAgLTkxLDEwICs5MCwxMCBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIFNoYWRvd1Jvb3QoRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5TaGFkb3dS
b290KCk7Ci0KICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxOb2RlPiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIGJv
b2wgY2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNo
aWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBO
b2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkgT1ZFUlJJREU7CiAKICAgICBT
aGFkb3dSb290KiBtX3ByZXY7CiAgICAgU2hhZG93Um9vdCogbV9uZXh0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggMDNkYzczZmNkNDli
YmNmZWY1N2IwZGMwMjBmM2I4ZTczOGU4NmJkNi4uNWNhODlkNjM5MGRkNDlhNDlkNzA2OTRmNzli
ZTkwMWY2NjNmZmE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9s
RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiRWxlbWVudFNo
YWRvdy5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNzIsNyArNzMsNiBAQCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Ojp+SFRNTEZvcm1Db250cm9sRWxlbWVudCgpCiAKIHZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6ZGV0YWNoKCkKIHsKLSAgICBtX3ZhbGlkYXRpb25NZXNzYWdlID0gbnVsbHB0cjsK
ICAgICBIVE1MRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKQEAgLTIzMyw2ICsyMzMsNyBAQCBOb2Rl
OjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omlu
c2VydGVkSW50byhDb250YWluZQogCiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92
ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQogeworICAgIG1fdmFsaWRhdGlv
bk1lc3NhZ2UgPSBudWxscHRyOwogICAgIG1fZmllbGRTZXRBbmNlc3RvclZhbGlkID0gZmFsc2U7
CiAgICAgbV9kYXRhTGlzdEFuY2VzdG9yU3RhdGUgPSBVbmtub3duOwogICAgIEhUTUxFbGVtZW50
OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRh
dGlvbk1lc3NhZ2UuY3BwCmluZGV4IGExNDRiYWI1OTE5NzViMjMxYmJmN2Y2MGU1NjJlYmRjY2Y2
ZGYyM2UuLmVmNDQ1N2IzY2U0MTM1NTAyMDg2OGE2YzdiYmE5Y2UxZGMxM2FjNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEJSRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1Db250
cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgpAQCAtMTMyLDYgKzEzMyw3IEBAIHN0YXRpYyB2b2lk
IGFkanVzdEJ1YmJsZVBvc2l0aW9uKGNvbnN0IExheW91dFJlY3QmIGhvc3RSZWN0LCBIVE1MRWxl
bWVudCogYnViYmxlCiB2b2lkIFZhbGlkYXRpb25NZXNzYWdlOjpidWlsZEJ1YmJsZVRyZWUoVGlt
ZXI8VmFsaWRhdGlvbk1lc3NhZ2U+KikKIHsKICAgICBIVE1MRWxlbWVudCogaG9zdCA9IHRvSFRN
TEVsZW1lbnQobV9lbGVtZW50KTsKKwogICAgIERvY3VtZW50KiBkb2MgPSBob3N0LT5kb2N1bWVu
dCgpOwogICAgIG1fYnViYmxlID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShkb2MpOwogICAgIG1f
YnViYmxlLT5zZXRTaGFkb3dQc2V1ZG9JZCgiLXdlYmtpdC12YWxpZGF0aW9uLWJ1YmJsZSIpOwpA
QCAtMTQxLDYgKzE0Myw3IEBAIHZvaWQgVmFsaWRhdGlvbk1lc3NhZ2U6OmJ1aWxkQnViYmxlVHJl
ZShUaW1lcjxWYWxpZGF0aW9uTWVzc2FnZT4qKQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIGhvc3QtPmVuc3VyZVNoYWRvd1Jvb3QoKS0+YXBwZW5kQ2hpbGQobV9idWJibGUuZ2V0KCks
IGVjKTsKICAgICBBU1NFUlQoIWVjKTsKKyAgICBob3N0LT5kb2N1bWVudCgpLT51cGRhdGVMYXlv
dXQoKTsKICAgICBhZGp1c3RCdWJibGVQb3NpdGlvbihob3N0LT5nZXRSZWN0KCksIG1fYnViYmxl
LmdldCgpKTsKIAogICAgIFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gY2xpcHBlciA9IEhUTUxEaXZF
bGVtZW50OjpjcmVhdGUoZG9jKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9D
b250ZW50RGlzdHJpYnV0b3IuY3BwCmluZGV4IGFmNjUwYTNiZmE2ZDFkMDJhOGYwNjE4MzgyNzcz
M2ZlZWVkMzc1Y2UuLjE3NTcxMzliZTMwOTdlOTJmOTQzNGVkNTIxYzNjYzdhZTY0OWMyMTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNw
cApAQCAtMzUsNzIgKzM1LDExMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb250ZW50RGlz
dHJpYnV0b3I6OkNvbnRlbnREaXN0cmlidXRvcigpCi0gICAgOiBtX3BoYXNlKFByZXZlbnRlZCkK
LSAgICAsIG1fbmVlZHNSZWRpc3RyaWJ1dGluZyhmYWxzZSkKKyAgICA6IG1fZnJlc2huZXNzKFVu
ZGV0ZXJtaW5lZCkKIHsKIH0KIAogQ29udGVudERpc3RyaWJ1dG9yOjp+Q29udGVudERpc3RyaWJ1
dG9yKCkKIHsKLSAgICBBU1NFUlQobV9wb29sLmlzRW1wdHkoKSk7CiB9CiAKLXZvaWQgQ29udGVu
dERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlKEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludCwg
Q29udGVudERpc3RyaWJ1dGlvbiogZGlzdHJpYnV0aW9uKQorSW5zZXJ0aW9uUG9pbnQqIENvbnRl
bnREaXN0cmlidXRvcjo6ZmluZEluc2VydGlvblBvaW50Rm9yKGNvbnN0IE5vZGUqIGtleSkgY29u
c3QKIHsKLSAgICBBU1NFUlQobV9waGFzZSA9PSBQcmVwYXJlZCk7Ci0gICAgQVNTRVJUKGRpc3Ry
aWJ1dGlvbi0+aXNFbXB0eSgpKTsKKyAgICByZXR1cm4gbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5n
ZXQoa2V5KTsKK30KIAorCit2b2lkIENvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZShFbGVt
ZW50KiBob3N0KQoreworICAgIEFTU0VSVChuZWVkc0Rpc3RyaWJ1dGlvbigpKTsKKyAgICBBU1NF
UlQobV9ub2RlVG9JbnNlcnRpb25Qb2ludC5pc0VtcHR5KCkpOworCisgICAgbV9mcmVzaG5lc3Mg
PSBGcmVzaDsKKworICAgIENvbnRlbnREaXN0cmlidXRpb24gcG9vbDsKKyAgICBmb3IgKE5vZGUq
IG5vZGUgPSBob3N0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGlu
ZygpKQorICAgICAgICBwb29sLmFwcGVuZChub2RlKTsKKworICAgIGZvciAoU2hhZG93Um9vdCog
cm9vdCA9IGhvc3QtPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xk
ZXJTaGFkb3dSb290KCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdDsgbm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdCkpIHsKKyAgICAgICAgICAgIGlmICgh
aXNJbnNlcnRpb25Qb2ludChub2RlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIEluc2VydGlvblBvaW50KiBwb2ludCA9IHRvSW5zZXJ0aW9uUG9pbnQobm9kZSk7Cisg
ICAgICAgICAgICBpZiAoIXBvaW50LT5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgU2hhZG93Um9vdCogb2xkZXIgPSByb290LT5vbGRlclNoYWRvd1Jv
b3QoKTsKKyAgICAgICAgICAgIGlmIChwb2ludC0+ZG9lc1NlbGVjdEZyb21Ib3N0Q2hpbGRyZW4o
KSkKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRlU2VsZWN0aW9uVG8ocG9pbnQsIHBvb2wpOwor
ICAgICAgICAgICAgZWxzZSBpZiAob2xkZXIgJiYgIW9sZGVyLT5hc3NpZ25lZFRvKCkpIHsKKyAg
ICAgICAgICAgICAgICBkaXN0cmlidXRlU2hhZG93Q2hpbGRyZW5Ubyhwb2ludCwgb2xkZXIpOwor
ICAgICAgICAgICAgICAgIG9sZGVyLT5zZXRBc3NpZ25lZFRvKHBvaW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBDb250ZW50RGlzdHJpYnV0b3I6OmludmFs
aWRhdGUoRWxlbWVudCogaG9zdCkKK3sKKyAgICBBU1NFUlQobmVlZHNJbnZhbGlkYXRpb24oKSk7
CisgICAgYm9vbCBuZWVkc1JlYXR0YWNoID0gKG1fZnJlc2huZXNzID09IFVuZGV0ZXJtaW5lZCkg
fHwgIW1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQuaXNFbXB0eSgpOworCisgICAgZm9yIChTaGFkb3dS
b290KiByb290ID0gaG9zdC0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290
LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgICAgICByb290LT5zZXRBc3NpZ25lZFRvKDApOwor
CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2
ZXJzZU5leHROb2RlKHJvb3QpKSB7CisgICAgICAgICAgICBpZiAoIWlzSW5zZXJ0aW9uUG9pbnQo
bm9kZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBuZWVkc1JlYXR0
YWNoID0gbmVlZHNSZWF0dGFjaCB8fCB0cnVlOworICAgICAgICAgICAgSW5zZXJ0aW9uUG9pbnQq
IHBvaW50ID0gdG9JbnNlcnRpb25Qb2ludChub2RlKTsKKyAgICAgICAgICAgIHBvaW50LT5jbGVh
ckRpc3RyaWJ1dGlvbigpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9mcmVzaG5lc3MgPSBT
cG9pbGluZzsKKyAgICBtX25vZGVUb0luc2VydGlvblBvaW50LmNsZWFyKCk7CisgICAgcmV0dXJu
IG5lZWRzUmVhdHRhY2g7Cit9CisKK3ZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpmaW5pc2hJbml2
YWxpZGF0aW9uKCkKK3sKKyAgICBBU1NFUlQobV9mcmVzaG5lc3MgPT0gU3BvaWxpbmcpOworICAg
IG1fZnJlc2huZXNzID0gRGF0ZWQ7Cit9CisgICAgIAordm9pZCBDb250ZW50RGlzdHJpYnV0b3I6
OmRpc3RyaWJ1dGVTZWxlY3Rpb25UbyhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQsIENv
bnRlbnREaXN0cmlidXRpb24mIHBvb2wpCit7CisgICAgQ29udGVudERpc3RyaWJ1dGlvbiBkaXN0
cmlidXRpb247CiAgICAgQ29udGVudFNlbGVjdG9yUXVlcnkgcXVlcnkoaW5zZXJ0aW9uUG9pbnQp
OwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bvb2wuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgTm9kZSogY2hpbGQgPSBtX3Bvb2xbaV0uZ2V0KCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwb29sLnNpemUoKTsgKytpKSB7CisgICAgICAgIE5vZGUqIGNoaWxkID0gcG9vbFtp
XS5nZXQoKTsKICAgICAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBpZiAoIXF1ZXJ5Lm1hdGNoZXMoY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgZGlzdHJpYnV0aW9uLT5hcHBlbmQoY2hpbGQpOworICAgICAgICBkaXN0cmlidXRp
b24uYXBwZW5kKGNoaWxkKTsKICAgICAgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5hZGQoY2hp
bGQsIGluc2VydGlvblBvaW50KTsKLSAgICAgICAgbV9wb29sW2ldID0gMDsKKyAgICAgICAgcG9v
bFtpXSA9IDA7CiAgICAgfQotfQogCi12b2lkIENvbnRlbnREaXN0cmlidXRvcjo6Y2xlYXJEaXN0
cmlidXRpb24oQ29udGVudERpc3RyaWJ1dGlvbiogbGlzdCkKLXsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKQotICAgICAgICBtX25vZGVUb0luc2VydGlvblBv
aW50LnJlbW92ZShsaXN0LT5hdChpKS5nZXQoKSk7Ci0gICAgbGlzdC0+Y2xlYXIoKTsKLX0KLQot
SW5zZXJ0aW9uUG9pbnQqIENvbnRlbnREaXN0cmlidXRvcjo6ZmluZEluc2VydGlvblBvaW50Rm9y
KGNvbnN0IE5vZGUqIGtleSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ub2RlVG9JbnNlcnRpb25Q
b2ludC5nZXQoa2V5KTsKKyAgICBpbnNlcnRpb25Qb2ludC0+c2V0RGlzdHJpYnV0aW9uKGRpc3Ry
aWJ1dGlvbik7CiB9CiAKLXZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjp3aWxsRGlzdHJpYnV0ZSgp
Cit2b2lkIENvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZVNoYWRvd0NoaWxkcmVuVG8oSW5z
ZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50LCBTaGFkb3dSb290KiByb290KQogewotICAgIG1f
cGhhc2UgPSBTdGFydGVkOwotfQorICAgIENvbnRlbnREaXN0cmlidXRpb24gZGlzdHJpYnV0aW9u
OworICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9
IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgZGlzdHJpYnV0aW9uLmFwcGVuZChub2Rl
KTsKKyAgICAgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5hZGQobm9kZSwgaW5zZXJ0aW9uUG9p
bnQpOworICAgIH0KIAotdm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmRpZERpc3RyaWJ1dGUoKQot
ewotICAgIEFTU0VSVChtX3BoYXNlICE9IFByZXZlbnRlZCk7Ci0gICAgbV9waGFzZSA9IFByZXZl
bnRlZDsKLSAgICBtX3Bvb2wuY2xlYXIoKTsKKyAgICBpbnNlcnRpb25Qb2ludC0+c2V0RGlzdHJp
YnV0aW9uKGRpc3RyaWJ1dGlvbik7CiB9CiAKLXZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpwcmVw
YXJlUG9vbEZvcihFbGVtZW50KiBzaGFkb3dIb3N0KQordm9pZCBDb250ZW50RGlzdHJpYnV0b3I6
OmludmFsaWRhdGVEaXN0cmlidXRpb25JbihDb250ZW50RGlzdHJpYnV0aW9uKiBsaXN0KQogewot
ICAgIGlmIChwb29sSXNSZWFkeSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9w
b29sLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKHNoYWRvd0hvc3QpOwotICAgIEFTU0VSVChtX3Bo
YXNlID09IFN0YXJ0ZWQpOwotCi0gICAgbV9waGFzZSA9IFByZXBhcmVkOwotICAgIGZvciAoTm9k
ZSogbm9kZSA9IHNoYWRvd0hvc3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIG1fcG9vbC5hcHBlbmQobm9kZSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkKKyAgICAgICAgbV9ub2RlVG9JbnNlcnRp
b25Qb2ludC5yZW1vdmUobGlzdC0+YXQoaSkuZ2V0KCkpOworICAgIGxpc3QtPmNsZWFyKCk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0
cmlidXRvci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9y
LmgKaW5kZXggYTIwOTg1NGNlZGQ2ZTliOTkxMjM5MDMxNDBiOTEzNTdjNDMzOWI2My4uZGI4OTM1
NDJmMDExODYzODc5MzE3Y2YxMTdjMGRjMjVhZmYxMDkyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmgKQEAgLTQ4LDQ1ICs0OCwzMyBAQCB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBDb250ZW50RGlzdHJpYnV0aW9uOwogY2xhc3Mg
Q29udGVudERpc3RyaWJ1dG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb250ZW50RGlz
dHJpYnV0b3IpOwogcHVibGljOgorICAgIGVudW0gRnJlc2huZXNzIHsKKyAgICAgICAgRnJlc2gg
PSAwLAorICAgICAgICBEYXRlZCA9IDEsCisgICAgICAgIFNwb2lsaW5nID0gMiwKKyAgICAgICAg
VW5kZXRlcm1pbmVkID0gMworICAgIH07CisKICAgICBDb250ZW50RGlzdHJpYnV0b3IoKTsKICAg
ICB+Q29udGVudERpc3RyaWJ1dG9yKCk7CiAKLSAgICB2b2lkIGRpc3RyaWJ1dGUoSW5zZXJ0aW9u
UG9pbnQqLCBDb250ZW50RGlzdHJpYnV0aW9uKik7Ci0gICAgdm9pZCBjbGVhckRpc3RyaWJ1dGlv
bihDb250ZW50RGlzdHJpYnV0aW9uKik7CiAgICAgSW5zZXJ0aW9uUG9pbnQqIGZpbmRJbnNlcnRp
b25Qb2ludEZvcihjb25zdCBOb2RlKiBrZXkpIGNvbnN0OwogCi0gICAgdm9pZCB3aWxsRGlzdHJp
YnV0ZSgpOwotICAgIGJvb2wgaW5EaXN0cmlidXRpb24oKSBjb25zdDsKLSAgICB2b2lkIGRpZERp
c3RyaWJ1dGUoKTsKKyAgICB2b2lkIGRpc3RyaWJ1dGUoRWxlbWVudCogaG9zdCk7CisgICAgYm9v
bCBpbnZhbGlkYXRlKEVsZW1lbnQqIGhvc3QpOworICAgIHZvaWQgZmluaXNoSW5pdmFsaWRhdGlv
bigpOworICAgIGJvb2wgbmVlZHNEaXN0cmlidXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZyZXNo
bmVzcyAhPSBGcmVzaCAmJiBtX2ZyZXNobmVzcyAhPSBTcG9pbGluZzsgfQorICAgIGJvb2wgbmVl
ZHNJbnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZyZXNobmVzcyAhPSBEYXRlZDsgfQog
Ci0gICAgdm9pZCBwcmVwYXJlUG9vbEZvcihFbGVtZW50KiBzaGFkb3dIb3N0KTsKLSAgICBib29s
IHBvb2xJc1JlYWR5KCkgY29uc3Q7Ci0gICAgYm9vbCBuZWVkc1JlZGlzdHJpYnV0aW5nKCkgY29u
c3QgeyByZXR1cm4gbV9uZWVkc1JlZGlzdHJpYnV0aW5nOyB9Ci0gICAgdm9pZCBzZXROZWVkc1Jl
ZGlzdHJpYnV0aW5nKCkgeyBtX25lZWRzUmVkaXN0cmlidXRpbmcgPSB0cnVlOyB9Ci0gICAgdm9p
ZCBjbGVhck5lZWRzUmVkaXN0cmlidXRpbmcoKSB7IG1fbmVlZHNSZWRpc3RyaWJ1dGluZyA9IGZh
bHNlOyB9Ci1wcml2YXRlOgotICAgIGVudW0gRGlzdHJpYnV0aW9uUGhhc2UgewotICAgICAgICBQ
cmV2ZW50ZWQsCi0gICAgICAgIFN0YXJ0ZWQsCi0gICAgICAgIFByZXBhcmVkLAotICAgIH07Cisg
ICAgdm9pZCBkaXN0cmlidXRlU2VsZWN0aW9uVG8oSW5zZXJ0aW9uUG9pbnQqLCBDb250ZW50RGlz
dHJpYnV0aW9uJiBwb29sKTsKKyAgICB2b2lkIGRpc3RyaWJ1dGVTaGFkb3dDaGlsZHJlblRvKElu
c2VydGlvblBvaW50KiwgU2hhZG93Um9vdCopOworICAgIHZvaWQgaW52YWxpZGF0ZURpc3RyaWJ1
dGlvbkluKENvbnRlbnREaXN0cmlidXRpb24qKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiBtX3Bvb2w7Ci0gICAgRGlzdHJpYnV0aW9uUGhhc2UgbV9waGFzZTsKK3ByaXZhdGU6CiAgICAg
SGFzaE1hcDxjb25zdCBOb2RlKiwgSW5zZXJ0aW9uUG9pbnQqPiBtX25vZGVUb0luc2VydGlvblBv
aW50OwotICAgIGJvb2wgbV9uZWVkc1JlZGlzdHJpYnV0aW5nIDogMTsKKyAgICB1bnNpZ25lZCBt
X2ZyZXNobmVzcyA6IDI7CiB9OwogCi1pbmxpbmUgYm9vbCBDb250ZW50RGlzdHJpYnV0b3I6Omlu
RGlzdHJpYnV0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9waGFzZSAhPSBQcmV2ZW50ZWQ7
Ci19Ci0KLWlubGluZSBib29sIENvbnRlbnREaXN0cmlidXRvcjo6cG9vbElzUmVhZHkoKSBjb25z
dAotewotICAgIHJldHVybiBtX3BoYXNlID09IFByZXBhcmVkOwotfQotCiB9CiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAK
aW5kZXggYzc3MDZjYzE2Zjg2ODIzZTMxMzJlMTc3ZmQxMTRhYjhhZTU2MGM0ZS4uMDhiNDVkNGFi
ZjU5YmZjNzZlOGU3NDAwM2MxNzZkZGM5NjBlNGJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwCkBAIC05MSw3ICs5MSw3IEBAIHZv
aWQgSFRNTENvbnRlbnRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0
dHJpYnV0ZSkKIHsKICAgICBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBzZWxlY3RBdHRyKSB7CiAg
ICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpKQotICAgICAgICAgICAg
cm9vdC0+b3duZXIoKS0+c2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpOworICAgICAgICAgICAgcm9v
dC0+b3duZXIoKS0+aW52YWxpZGF0ZURpc3RyaWJ1dGlvbigpOwogICAgIH0gZWxzZQogICAgICAg
ICBJbnNlcnRpb25Qb2ludDo6cGFyc2VBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmNwcAppbmRleCBjYjQyM2JhZDJm
MDRkMWEwYjgyNDNmYjEzOTAzNWZjZGI2ZWI0NGU3Li5mMzBhMDdmNDg5ZGM4MGMxOGI4YzEwN2Fk
MzMxZmNlN2RlYTMxYTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9J
bnNlcnRpb25Qb2ludC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0
aW9uUG9pbnQuY3BwCkBAIC00Nyw1MyArNDcsMjIgQEAgSW5zZXJ0aW9uUG9pbnQ6On5JbnNlcnRp
b25Qb2ludCgpCiAKIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6OmF0dGFjaCgpCiB7Ci0gICAgaWYgKGlz
U2hhZG93Qm91bmRhcnkoKSkgewotICAgICAgICBTaGFkb3dSb290KiByb290ID0gdG9TaGFkb3dS
b290KHRyZWVTY29wZSgpLT5yb290Tm9kZSgpKTsKLSAgICAgICAgaWYgKGRvZXNTZWxlY3RGcm9t
SG9zdENoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgIGRpc3RyaWJ1dGVIb3N0Q2hpbGRyZW4ocm9v
dC0+b3duZXIoKSk7Ci0gICAgICAgICAgICBhdHRhY2hEaXN0cmlidXRlZE5vZGUoKTsKLSAgICAg
ICAgfSBlbHNlIGlmICghcm9vdC0+b2xkZXJTaGFkb3dSb290KCktPmFzc2lnbmVkVG8oKSkgewot
ICAgICAgICAgICAgQVNTRVJUKCFyb290LT5vbGRlclNoYWRvd1Jvb3QoKS0+YXR0YWNoZWQoKSk7
Ci0gICAgICAgICAgICBhc3NpZ25TaGFkb3dSb290KHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKTsK
LSAgICAgICAgICAgIHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpLT5hdHRhY2goKTsKLSAgICAgICAg
fQotICAgIH0KLQorICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpKQorICAg
ICAgICByb290LT5vd25lcigpLT5lbnN1cmVEaXN0cmlidXRpb24oKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZGlzdHJpYnV0aW9uLnNpemUoKTsgKytpKQorICAgICAgICBtX2Rpc3Ry
aWJ1dGlvbi5hdChpKS0+YXR0YWNoKCk7CiAgICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwogfQog
CiB2b2lkIEluc2VydGlvblBvaW50OjpkZXRhY2goKQogewotICAgIFNoYWRvd1Jvb3QqIHJvb3Qg
PSBzaGFkb3dSb290KCk7Ci0gICAgaWYgKHJvb3QgJiYgaXNBY3RpdmUoKSkgewotICAgICAgICBF
bGVtZW50U2hhZG93KiBzaGFkb3cgPSByb290LT5vd25lcigpOwotCi0gICAgICAgIGlmIChkb2Vz
U2VsZWN0RnJvbUhvc3RDaGlsZHJlbigpKQotICAgICAgICAgICAgY2xlYXJEaXN0cmlidXRpb24o
c2hhZG93KTsKLSAgICAgICAgZWxzZSBpZiAoU2hhZG93Um9vdCogYXNzaWduZWRTaGFkb3dSb290
ID0gYXNzaWduZWRGcm9tKCkpCi0gICAgICAgICAgICBjbGVhckFzc2lnbm1lbnQoYXNzaWduZWRT
aGFkb3dSb290KTsKLQotICAgICAgICAvLyBXaGVuIHNoYWRvdyBlbGVtZW50IGlzIGRldGFjaGVk
LCBzaGFkb3cgdHJlZSBzaG91bGQgYmUgcmVjcmVhdGVkIHRvIHJlLWNhbGN1bGF0ZSBzZWxlY3Rv
ciBmb3IKLSAgICAgICAgLy8gb3RoZXIgaW5zZXJ0aW9uIHBvaW50cy4KLSAgICAgICAgc2hhZG93
LT5zZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fZGlzdHJp
YnV0aW9uLmlzRW1wdHkoKSk7CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290
KCkpCisgICAgICAgIHJvb3QtPm93bmVyKCktPmVuc3VyZURpc3RyaWJ1dGlvbigpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kaXN0cmlidXRpb24uc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fZGlzdHJpYnV0aW9uLmF0KGkpLT5kZXRhY2goKTsKICAgICBIVE1MRWxlbWVudDo6ZGV0YWNo
KCk7CiB9CiAKLVNoYWRvd1Jvb3QqIEluc2VydGlvblBvaW50Ojphc3NpZ25lZEZyb20oKSBjb25z
dAotewotICAgIE5vZGUqIHRyZWVTY29wZVJvb3QgPSB0cmVlU2NvcGUoKS0+cm9vdE5vZGUoKTsK
LSAgICBpZiAoIXRyZWVTY29wZVJvb3QtPmlzU2hhZG93Um9vdCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIFNoYWRvd1Jvb3QqIG9sZGVyU2hhZG93Um9vdCA9IHRvU2hhZG93Um9vdCh0cmVl
U2NvcGVSb290KS0+b2xkZXJTaGFkb3dSb290KCk7Ci0gICAgaWYgKG9sZGVyU2hhZG93Um9vdCAm
JiBvbGRlclNoYWRvd1Jvb3QtPmFzc2lnbmVkVG8oKSA9PSB0aGlzKQotICAgICAgICByZXR1cm4g
b2xkZXJTaGFkb3dSb290OwotICAgIHJldHVybiAwOwotfQotCiBib29sIEluc2VydGlvblBvaW50
Ojppc1NoYWRvd0JvdW5kYXJ5KCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJlZVNjb3BlKCktPnJv
b3ROb2RlKCktPmlzU2hhZG93Um9vdCgpICYmIGlzQWN0aXZlKCk7CkBAIC0xMTgsNTkgKzg3LDU3
IEBAIGJvb2wgSW5zZXJ0aW9uUG9pbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29uc3QgTm9kZVJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQpCiAgICAgcmV0dXJuICFpc1NoYWRvd0JvdW5kYXJ5KCkgJiYg
SFRNTEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29udGV4dCk7CiB9CiAKLWlubGluZSB2b2lk
IEluc2VydGlvblBvaW50OjpkaXN0cmlidXRlSG9zdENoaWxkcmVuKEVsZW1lbnRTaGFkb3cqIHNo
YWRvdykKK05vZGUqIEluc2VydGlvblBvaW50OjpuZXh0VG8oY29uc3QgTm9kZSogbm9kZSkgY29u
c3QKIHsKLSAgICBpZiAoIXNoYWRvdy0+ZGlzdHJpYnV0b3IoKS5pbkRpc3RyaWJ1dGlvbigpKSB7
Ci0gICAgICAgIC8vIElmIENvbnRlbnREaXN0cmlidXRvciBpcyBub3QgaW50IHNlbGVjdGluZyBw
aGFzZSwgaXQgbWVhbnMgSW5zZXJ0aW9uUG9pbnQgaXMgYXR0YWNoZWQgZnJvbQotICAgICAgICAv
LyBub24tRWxlbWVudFNoYWRvdyBub2RlLiBUbyBydW4gZGlzdHJpYnV0ZSBhbGdvcml0aG0sIHdl
IGhhdmUgdG8gcmVhdHRhY2ggRWxlbWVudFNoYWRvdy4KLSAgICAgICAgc2hhZG93LT5zZXROZWVk
c1JlZGlzdHJpYnV0aW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzaGFkb3ct
PmRpc3RyaWJ1dG9yKCkucHJlcGFyZVBvb2xGb3Ioc2hhZG93LT5ob3N0KCkpOwotICAgIHNoYWRv
dy0+ZGlzdHJpYnV0b3IoKS5jbGVhckRpc3RyaWJ1dGlvbigmbV9kaXN0cmlidXRpb24pOwotICAg
IHNoYWRvdy0+ZGlzdHJpYnV0b3IoKS5kaXN0cmlidXRlKHRoaXMsICZtX2Rpc3RyaWJ1dGlvbik7
CisgICAgc2l6ZV90IGluZGV4ID0gbV9kaXN0cmlidXRpb24uZmluZChub2RlKTsKKyAgICBpZiAo
aW5kZXggPT0gbm90Rm91bmQgfHwgaW5kZXggKyAxID09IG1fZGlzdHJpYnV0aW9uLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZGlzdHJpYnV0aW9uLmF0KGluZGV4ICsg
MSkuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIEluc2VydGlvblBvaW50OjpjbGVhckRpc3RyaWJ1
dGlvbihFbGVtZW50U2hhZG93KiBzaGFkb3cpCitOb2RlKiBJbnNlcnRpb25Qb2ludDo6cHJldmlv
dXNUbyhjb25zdCBOb2RlKiBub2RlKSBjb25zdAogewotICAgIHNoYWRvdy0+ZGlzdHJpYnV0b3Io
KS5jbGVhckRpc3RyaWJ1dGlvbigmbV9kaXN0cmlidXRpb24pOworICAgIHNpemVfdCBpbmRleCA9
IG1fZGlzdHJpYnV0aW9uLmZpbmQobm9kZSk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kIHx8
ICFpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZGlzdHJpYnV0aW9uLmF0
KGluZGV4IC0gMSkuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIEluc2VydGlvblBvaW50OjphdHRh
Y2hEaXN0cmlidXRlZE5vZGUoKQordm9pZCBJbnNlcnRpb25Qb2ludDo6Y2hpbGRyZW5DaGFuZ2Vk
KGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hh
bmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9kaXN0cmlidXRpb24uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZGlzdHJpYnV0aW9uLmF0KGkp
LT5hdHRhY2goKTsKKyAgICBIVE1MRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBh
cnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKKyAgICBp
ZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkKKyAgICAgICAgcm9vdC0+b3duZXIo
KS0+aW52YWxpZGF0ZURpc3RyaWJ1dGlvbigpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNlcnRpb25Q
b2ludDo6YXNzaWduU2hhZG93Um9vdChTaGFkb3dSb290KiBzaGFkb3dSb290KQorTm9kZTo6SW5z
ZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBJbnNlcnRpb25Qb2ludDo6aW5zZXJ0ZWRJbnRvKENv
bnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KSBPVkVSUklERQogewotICAgIHNoYWRvd1Jvb3Qt
PnNldEFzc2lnbmVkVG8odGhpcyk7Ci0gICAgbV9kaXN0cmlidXRpb24uY2xlYXIoKTsKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSBzaGFkb3dSb290LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBu
b2RlLT5uZXh0U2libGluZygpKQotICAgICAgICBtX2Rpc3RyaWJ1dGlvbi5hcHBlbmQobm9kZSk7
Ci19CisgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisgICAg
aWYgKGluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3dSb290KCkpCisgICAgICAgICAgICByb290LT5vd25lcigpLT5pbnZh
bGlkYXRlRGlzdHJpYnV0aW9uKCk7CisgICAgfQogCi1pbmxpbmUgdm9pZCBJbnNlcnRpb25Qb2lu
dDo6Y2xlYXJBc3NpZ25tZW50KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCi17Ci0gICAgc2hhZG93
Um9vdC0+c2V0QXNzaWduZWRUbygwKTsKLSAgICBtX2Rpc3RyaWJ1dGlvbi5jbGVhcigpOworICAg
IHJldHVybiBJbnNlcnRpb25Eb25lOwogfQogCi1Ob2RlKiBJbnNlcnRpb25Qb2ludDo6bmV4dFRv
KGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0Cit2b2lkIEluc2VydGlvblBvaW50OjpyZW1vdmVkRnJv
bShDb250YWluZXJOb2RlKiBpbnNlcnRpb25Qb2ludCkgT1ZFUlJJREUKIHsKLSAgICBzaXplX3Qg
aW5kZXggPSBtX2Rpc3RyaWJ1dGlvbi5maW5kKG5vZGUpOwotICAgIGlmIChpbmRleCA9PSBub3RG
b3VuZCB8fCBpbmRleCArIDEgPT0gbV9kaXN0cmlidXRpb24uc2l6ZSgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gbV9kaXN0cmlidXRpb24uYXQoaW5kZXggKyAxKS5nZXQoKTsKLX0K
KyAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBOb2RlKiBw
YXJlbnQgPSBwYXJlbnROb2RlKCk7CisgICAgICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAg
cGFyZW50ID0gaW5zZXJ0aW9uUG9pbnQ7CisgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0g
cGFyZW50LT5zaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgIC8vIGhvc3QgY2FuIGJlIG51bGwg
d2hlbiByZW1vdmVkRnJvbSgpIGlzIGNhbGxlZCBmcm9tIEVsZW1lbnRTaGFkb3cgZGVzdHJ1Y3Rv
ci4KKyAgICAgICAgICAgIGlmIChyb290LT5ob3N0KCkpCisgICAgICAgICAgICAgICAgcm9vdC0+
b3duZXIoKS0+aW52YWxpZGF0ZURpc3RyaWJ1dGlvbigpOworICAgICAgICB9CiAKLU5vZGUqIElu
c2VydGlvblBvaW50OjpwcmV2aW91c1RvKGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0gICAg
c2l6ZV90IGluZGV4ID0gbV9kaXN0cmlidXRpb24uZmluZChub2RlKTsKLSAgICBpZiAoaW5kZXgg
PT0gbm90Rm91bmQgfHwgIWluZGV4KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9k
aXN0cmlidXRpb24uYXQoaW5kZXggLSAxKS5nZXQoKTsKKyAgICAgICAgLy8gU2luY2UgdGhpcyBp
bnNlcnRpb24gcG9pbnQgaXMgbm8gbG9uZ2VyIHZpc2libGUgZnJvbSB0aGUgc2hhZG93IHN1YnRy
ZWUsIGl0IG5lZWQgdG8gY2xlYW4gaXRzZWxmIHVwLgorICAgICAgICBjbGVhckRpc3RyaWJ1dGlv
bigpOworICAgIH0KKworICAgIEhUTUxFbGVtZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2lu
dCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0
aW9uUG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmgK
aW5kZXggMjk2ZjBiMjUzZDZmMzYyOTZiMTI5MGUxYjY0MmZiMjZmNzZlYjE3Ny4uZjQ2ZDNkNDgy
N2FlMTIzNjRiYTgzNTVlNDg3Yjc1MjRjOTZjNTRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5JbnNlcnRpb25Qb2ludCgpOwogCiAgICAgYm9vbCBoYXNEaXN0cmlidXRpb24oKSBj
b25zdCB7IHJldHVybiAhbV9kaXN0cmlidXRpb24uaXNFbXB0eSgpOyB9CisgICAgdm9pZCBzZXRE
aXN0cmlidXRpb24oQ29udGVudERpc3RyaWJ1dGlvbiYgZGlzdHJpYnV0aW9uKSB7IG1fZGlzdHJp
YnV0aW9uLnN3YXAoZGlzdHJpYnV0aW9uKTsgfQorICAgIHZvaWQgY2xlYXJEaXN0cmlidXRpb24o
KSB7IG1fZGlzdHJpYnV0aW9uLmNsZWFyKCk7IH0KICAgICBib29sIGlzU2hhZG93Qm91bmRhcnko
KSBjb25zdDsKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAKQEAgLTUyLDkgKzU0LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2goKTsKLQogICAgIHZpcnR1YWwgYm9vbCBpc0luc2VydGlvblBvaW50KCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIFNoYWRvd1Jvb3QqIGFzc2lnbmVkRnJvbSgpIGNv
bnN0OwogCiAgICAgc2l6ZV90IGluZGV4T2YoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gbV9k
aXN0cmlidXRpb24uZmluZChub2RlKTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9kaXN0cmlidXRpb24uc2l6ZSgpOyB9CkBAIC02NywxNSArNjcsMTEgQEAgcHVibGljOgog
cHJvdGVjdGVkOgogICAgIEluc2VydGlvblBvaW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IE5vZGVSZW5k
ZXJpbmdDb250ZXh0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdl
ZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNo
YW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlKikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqKSBPVkVSUklE
RTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGRpc3RyaWJ1dGVIb3N0Q2hpbGRyZW4oRWxlbWVudFNo
YWRvdyopOwotICAgIHZvaWQgY2xlYXJEaXN0cmlidXRpb24oRWxlbWVudFNoYWRvdyopOwotICAg
IHZvaWQgYXR0YWNoRGlzdHJpYnV0ZWROb2RlKCk7Ci0KLSAgICB2b2lkIGFzc2lnblNoYWRvd1Jv
b3QoU2hhZG93Um9vdCopOwotICAgIHZvaWQgY2xlYXJBc3NpZ25tZW50KFNoYWRvd1Jvb3QqKTsK
LQogICAgIENvbnRlbnREaXN0cmlidXRpb24gbV9kaXN0cmlidXRpb247CiB9OwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2h0bWwvZGV0YWlscy1hZGQtc3VtbWFyeS1jaGlsZC0yLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2h0bWwvZGV0YWlscy1hZGQtc3VtbWFyeS1jaGlsZC0yLmh0
bWwKaW5kZXggZmQxNTJiZDFmNWQxNDMwZGE4OGM5NzUxNTkyMTkzMzg0Y2U4ZTY2YS4uNmZiMDVl
NGRjM2ZjZWM5OWY5NmI1MDllNDZhMDQxZTI5MWYzNmUxOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9odG1sL2RldGFpbHMtYWRkLXN1bW1hcnktY2hpbGQtMi5odG1sCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvaHRtbC9kZXRhaWxzLWFkZC1zdW1tYXJ5LWNoaWxkLTIuaHRtbApAQCAtNiw3
ICs2LDE0IEBAIHZhciBjcmVhdGVOZXdFbGVtZW50ID0gZnVuY3Rpb24gKHRhZywgaWQsIHRleHQp
IHsKICAgICByZXR1cm4gcmVzdWx0OwogfTsKIAoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKIHZhciBy
dW5UZXN0cyA9IGZ1bmN0aW9uICgpIHsKKyAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0sIDEwMDApOwogICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b2FwcGVuZGVkIikuYXBwZW5kQ2hpbGQoY3JlYXRlTmV3
RWxlbWVudCgiYiIsICJ0b2FkZCIsICJzaG91bGQgaGF2ZSBib2xkIHRlc3QiKSk7CiB9OwogPC9z
Y3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144327</attachid>
            <date>2012-05-28 04:15:56 -0700</date>
            <delta_ts>2012-05-28 17:50:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87223-20120528201554.patch</filename>
            <type>text/plain</type>
            <size>34897</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NjY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGE0M2UwZTY2NDA3NjJh
Zjk1NTllYjBkY2Q3MDgxZjg4OGRiNDlkNC4uY2Q5N2U0YTEyNDU0Y2EyNzlhNDhhMzY2YzAwZTUy
NGQ3ZTU0N2EyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEwOCBAQAogMjAxMi0wNS0yOCAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAorICAgICAgICBbU2hhZG93IERPTV0g
Tm9kZSBkaXN0cmlidXRpb24gc2hvdWxkIGJlIG9ydGhvZ29uYWwgZnJvbSBub2RlIGF0dGFjaG1l
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MjIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
aGFnbmUgcmVvcmdhbml6ZXMgU2hhZG93IERPTSBzdWJ0cmVlIGRpc3RyaWJ1dGlvbiBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICBPcmlnaW5hbGx5LCBpdCB3YXMgaW50ZXJsZWF2ZWQgYWNyb3Nz
IGF0dGFjaCgpIG9mIHNldmVyYWwgY2xhc3NlcyBsaWtlCisgICAgICAgIEluc2VydGlvblBvaW50
IGFuZCBTaGFkb3dSb290LiBJdHMgaW52YWxpZGF0aW9uIHdhcyBhbHNvIG1peGVkIGFzIGEgcGFy
dCBvZgorICAgICAgICB0aGUgc3R5bGUgcmVjYWxjdWxhdGlvbiBhbmQgZGV0YWNoKCktZXMuCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgZXh0cmFjdHMgdGhlc2UgY29kZSB0byBhIHNldCBvZiBDb250
ZW50RGlzdHJpYnV0b3IgbWV0aG9kcywgd2hpY2ggYXJlCisgICAgICAgIGZhY2FkZWQgYnkgdHdv
IEVsZW1lbnRTaGFkb3cgQVBJLiBGb2xsb3dpbmcgdHdvIEFQSSBhcmUgdGhlIHByaW1hcnkgZW50
cnkgcG9pbnRzOgorCisgICAgICAgIC0gRWxlbWVudFNoYWRvdzo6ZW5zdXJlRGlzdHJpYnV0aW9u
KCkKKyAgICAgICAgLSBFbGVtZW50U2hhZG93OjppbnZhbGlkYXRlRGlzdHJpYnV0aW9uKCkKKwor
ICAgICAgICBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9ucyBhcmUgQ29udGVudERpc3RyaWJ1dG9y
OjpkaXN0cmlidXRlKCkgYW5kCisgICAgICAgIENvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0
ZSgpIHJlc3BlY3RpdmVseS4KKworICAgICAgICBXaGVuIGNsaWVudHMgbmVlZCB0byB0cmF2ZXJz
ZSBjb21wb3NlZCB0cmVlLCBiZWZvcmUgYXR0YWNoKCkgZm9yCisgICAgICAgIGV4YW1wbGUsIHRo
ZXkgc2hvdWxkIGNhbGwgZW5zdXJlRGlzdHJpYnV0aW9uKCkgdG8gbWFrZSBzdXJlIHRoYXQKKyAg
ICAgICAgdGhlIHRyYXZlcnNhbCBkYXRhIHN0cnVjdHVyZSAoInRoZSBkaXN0cmlidXRpb24iKSBp
cyByZWFkeS4gIFdoZW4KKyAgICAgICAgdGhlcmUgaXMgYW55IERPTSBtdXRhdGlvbiB3aGljaCBj
YW4gcmVzdWx0IGEgY29tcG9zZWQgdHJlZQorICAgICAgICBtdXRhdGlvbiwgdGhlbiBjbGllbnRz
IHNob3VsZCBjYWxsIGludmFsaWRhdGVEaXN0cmlidXRpb24oKSB0bworICAgICAgICBtYXJrIHRo
ZSBkaXN0cmlidXRpb24gYmVpbmcgZGF0ZWQuCisKKyAgICAgICAgSGVyZSBpcyBzdWNoIERPTSBt
dXRhdGlvbnM6CisKKyAgICAgICAgLSBUaGUgY2hpbGRyZW4gb2YgYW55IFNoYWRvd1Jvb3RzIGFy
ZSBjaGFuZ2VkLAorICAgICAgICAtIFRoZSBjaGlsZHJlbiBvZiBhbnkgSW5zZXJ0aW9uUG9pbnRz
IGFyZSBjaGFuZ2VkLAorICAgICAgICAtIFRoZSBjaGlsZHJlbiBvZiBhbnkgaG9zdCBlbGVtZW50
cyBhcmUgY2hhbmdlZCwKKyAgICAgICAgLSBBbnkgaW5zZXJ0aW9uIHBvaW50IGlzIGluc2VydGVk
IHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgc2hhZG93IHRyZWUsCisgICAgICAgIC0gQHNlbGVjdCBh
dHRyaWJ1dGUgb2YgPGNvbnRlbnQ+IGlzIG1vZGlmaWVkIGFuZAorICAgICAgICAtIE5ldyBTaGFk
b3dSb290IGlzIGFkZGVkIHRvIHRoZSBzaGFkb3cgdHJlZS4KKworICAgICAgICBOb3RlIHRoYXQg
dGhlIHZhbGlkaXR5IG9mIHRoZSBkaXN0cmlidXRpb24gaXMgdHJhY2tlZCBhbmQKKyAgICAgICAg
dW5uZWNlc3NhcnkgZGlzdHJpYnV0aW9uIHJlcXVlc3RzIGFyZSBpZ25vcmVkLgorCisgICAgICAg
IEFmdGVyIHRoZSBpbnZhbGlkYXRpb24sIHRoYXQgc2hhZG93IHN1YnRyZWVzIGFyZSBkZXRhY2hl
ZCBvbmNlIGFuZAorICAgICAgICByZXF1ZXN0ICB0aGVpciAgcmUtYXR0YWNobWVudCAgdGhyb3Vn
aCAgdGhlICBzdHlsZSAgcmVjYWxjdWxhdGlvbi4KKyAgICAgICAgVGhlbiwgIG9uIHRoZSAgcmVz
cG9uZGluZyAgc3R5bGUgcmVjYWxjdWxhdGlvbiAgYW5kIGF0dGFjaCgpLCAgbmV3CisgICAgICAg
IGRpc3RyaWJ1dGlvbiB3aWxsIGJlIGNvbXB1dGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6On5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgICogZG9tL0VsZW1lbnRTaGFkb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6fkVsZW1lbnRTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dSb290cyk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjphdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudFNoYWRvdzo6cmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRv
dzo6ZW5zdXJlRGlzdHJpYnV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6
OmludmFsaWRhdGVEaXN0cmlidXRpb24pOgorICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93Lmg6
CisgICAgICAgIChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKiBkb20vTm9kZVJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ0NvbnRleHQ6Ok5vZGVS
ZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSZW5kZXJlckZhY3Rvcnk6
OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQpOgorICAgICAgICAqIGRvbS9Ob2RlUmVuZGVyaW5nQ29u
dGV4dC5oOgorICAgICAgICAoTm9kZVJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIGRvbS9T
aGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnNldEFwcGx5QXV0
aG9yU3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmF0dGFjaCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAgICAgICAgKFNoYWRvd1Jvb3Qp
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgICog
aHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0aW9u
TWVzc2FnZTo6YnVpbGRCdWJibGVUcmVlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50
RGlzdHJpYnV0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9yOjpD
b250ZW50RGlzdHJpYnV0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9y
Ojp+Q29udGVudERpc3RyaWJ1dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmli
dXRvcjo6ZmluZEluc2VydGlvblBvaW50Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRE
aXN0cmlidXRvcjo6ZGlzdHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGlzdHJp
YnV0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9y
OjpmaW5pc2hJbml2YWxpZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmli
dXRvcjo6ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGVTaGFkb3dDaGlsZHJlblRvKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0ZURpc3RyaWJ1dGlvbkluKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnREaXN0cmlidXRvcjo6bmVlZHNJbnZhbGlkYXRpb24pOgorICAgICAgICAoQ29udGVu
dERpc3RyaWJ1dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmlidXRvcjo6bmVl
ZHNEaXN0cmlidXRpb24pOgorICAgICAgICAqIGh0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29udGVudEVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c2VydGlvblBvaW50OjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0aW9uUG9pbnQ6
Om5leHRUbyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6cHJldmlvdXNUbyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAg
ICAgICAgKiBodG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXJ0aW9uUG9pbnQ6OnNldERpc3RyaWJ1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRpb25Qb2ludDo6Y2xlYXJEaXN0cmlidXRpb24pOgorICAgICAgICAoSW5zZXJ0aW9uUG9pbnQp
OgorCisyMDEyLTA1LTI4ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgorCiAg
ICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Om1fdmFsaWRhdGlvbk1lc3NhZ2Ugc2hvdWxk
bid0IGJlIGNsZWFyZWQgb24gZGV0YWNoKCkKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg3NjA4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCAyNGEx
MTNmMWQxMzRhNThiNjdkNTQ3ZTY5MWZjNWM2OGEyNDc1MDY4Li4wZGY4NzdmMjg0Y2ZlNmY0OGFm
N2Q1NDk5MmJiZWZhYWM3NmFkNTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMzIsOCAr
MTMyLDEwIEBAIEVsZW1lbnQ6On5FbGVtZW50KCkKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChz
aGFkb3coKSkKKyAgICBpZiAoRWxlbWVudFNoYWRvdyogZWxlbWVudFNoYWRvdyA9IHNoYWRvdygp
KSB7CisgICAgICAgIGVsZW1lbnRTaGFkb3ctPnJlbW92ZUFsbFNoYWRvd1Jvb3RzKCk7CiAgICAg
ICAgIHJhcmVEYXRhKCktPm1fc2hhZG93LmNsZWFyKCk7CisgICAgfQogCiAgICAgaWYgKGhhc0F0
dHJMaXN0KCkpIHsKICAgICAgICAgQVNTRVJUKG1fYXR0cmlidXRlRGF0YSk7CkBAIC0xMzIyLDcg
KzEzMjQsNyBAQCB2b2lkIEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBh
cnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZgogICAgICAgICBjaGVja0ZvclNpYmxp
bmdTdHlsZUNoYW5nZXModGhpcywgcmVuZGVyU3R5bGUoKSwgZmFsc2UsIGJlZm9yZUNoYW5nZSwg
YWZ0ZXJDaGFuZ2UsIGNoaWxkQ291bnREZWx0YSk7CiAKICAgICBpZiAoRWxlbWVudFNoYWRvdyAq
IHNoYWRvdyA9IHRoaXMtPnNoYWRvdygpKQotICAgICAgICBzaGFkb3ctPmhvc3RDaGlsZHJlbkNo
YW5nZWQoKTsKKyAgICAgICAgc2hhZG93LT5pbnZhbGlkYXRlRGlzdHJpYnV0aW9uKCk7CiB9CiAK
IHZvaWQgRWxlbWVudDo6YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnRTaGFkb3cuY3BwCmluZGV4IGJkZjMxNGJmOGU0ZjljYjg2MTFjY2M2NjQ0OTlhY2JlYWIwNTE0
NmMuLjVhZTc4OWNlNTA5ZmNmMWJiNjgyNzk1NzU5MDE2ZGM3Zjg0OWVhM2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgRWxlbWVudFNoYWRvdzo6
RWxlbWVudFNoYWRvdygpCiAKIEVsZW1lbnRTaGFkb3c6On5FbGVtZW50U2hhZG93KCkKIHsKLSAg
ICByZW1vdmVBbGxTaGFkb3dSb290cygpOworICAgIEFTU0VSVChtX3NoYWRvd1Jvb3RzLmlzRW1w
dHkoKSk7CiB9CiAKIHN0YXRpYyBib29sIHZhbGlkYXRlU2hhZG93Um9vdChEb2N1bWVudCogZG9j
dW1lbnQsIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNzQs
MTUgKzc0LDEzIEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdChFbGVtZW50KiBz
aGFkb3dIb3N0LCBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IHNoCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHNoYWRvd1Jvb3QtPnNldEhvc3Qoc2hhZG93SG9zdCk7CisgICAgbV9zaGFkb3dSb290cy5w
dXNoKHNoYWRvd1Jvb3QuZ2V0KCkpOworICAgIGludmFsaWRhdGVEaXN0cmlidXRpb24oc2hhZG93
SG9zdCk7CiAgICAgQ2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXIoc2hhZG93SG9zdCkubm90aWZ5
KHNoYWRvd1Jvb3QuZ2V0KCkpOwogCi0gICAgaWYgKHNoYWRvd0hvc3QtPmF0dGFjaGVkKCkpIHsK
LSAgICAgICAgc2hhZG93Um9vdC0+bGF6eUF0dGFjaCgpOwotICAgICAgICBkZXRhY2goKTsKLSAg
ICAgICAgc2hhZG93SG9zdC0+ZGV0YWNoQ2hpbGRyZW4oKTsKLSAgICB9CisgICAgaWYgKHNoYWRv
d0hvc3QtPmF0dGFjaGVkKCkgJiYgIXNoYWRvd1Jvb3QtPmF0dGFjaGVkKCkpCisgICAgICAgIHNo
YWRvd1Jvb3QtPmF0dGFjaCgpOwogCi0gICAgbV9zaGFkb3dSb290cy5wdXNoKHNoYWRvd1Jvb3Qu
Z2V0KCkpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHVzaFNoYWRvd1Jvb3Qo
c2hhZG93SG9zdCwgc2hhZG93Um9vdC5nZXQoKSk7CiB9CiAKQEAgLTkxLDEzICs4OSwxNCBAQCB2
b2lkIEVsZW1lbnRTaGFkb3c6OnJlbW92ZUFsbFNoYWRvd1Jvb3RzKCkKICAgICAvLyBEb250IHBy
b3RlY3QgdGhpcyByZWYgY291bnQuCiAgICAgRWxlbWVudCogc2hhZG93SG9zdCA9IGhvc3QoKTsK
IAotICAgIHdoaWxlIChSZWZQdHI8U2hhZG93Um9vdD4gb2xkUm9vdCA9IG1fc2hhZG93Um9vdHMu
cmVtb3ZlSGVhZCgpKSB7CisgICAgd2hpbGUgKFJlZlB0cjxTaGFkb3dSb290PiBvbGRSb290ID0g
bV9zaGFkb3dSb290cy5oZWFkKCkpIHsKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsUG9wU2hhZG93Um9vdChzaGFkb3dIb3N0LCBvbGRSb290LmdldCgpKTsKICAgICAgICAg
c2hhZG93SG9zdC0+ZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVPZlN1YnRyZWUob2xkUm9v
dC5nZXQoKSk7CiAKICAgICAgICAgaWYgKG9sZFJvb3QtPmF0dGFjaGVkKCkpCiAgICAgICAgICAg
ICBvbGRSb290LT5kZXRhY2goKTsKIAorICAgICAgICBtX3NoYWRvd1Jvb3RzLnJlbW92ZUhlYWQo
KTsKICAgICAgICAgb2xkUm9vdC0+c2V0SG9zdCgwKTsKICAgICAgICAgb2xkUm9vdC0+c2V0UHJl
digwKTsKICAgICAgICAgb2xkUm9vdC0+c2V0TmV4dCgwKTsKQEAgLTEwNSwyMiArMTA0LDE2IEBA
IHZvaWQgRWxlbWVudFNoYWRvdzo6cmVtb3ZlQWxsU2hhZG93Um9vdHMoKQogICAgICAgICBDaGls
ZE5vZGVSZW1vdmFsTm90aWZpZXIoc2hhZG93SG9zdCkubm90aWZ5KG9sZFJvb3QuZ2V0KCkpOwog
ICAgIH0KIAotICAgIGlmIChzaGFkb3dIb3N0LT5hdHRhY2hlZCgpKQotICAgICAgICBzaGFkb3dI
b3N0LT5hdHRhY2hDaGlsZHJlbkxhemlseSgpOworICAgIGludmFsaWRhdGVEaXN0cmlidXRpb24o
c2hhZG93SG9zdCk7CiB9CiAKIHZvaWQgRWxlbWVudFNoYWRvdzo6YXR0YWNoKCkKIHsKLSAgICAv
LyBUaGUgcG9vbCBub2RlcyBhcmUgcG9wdWxhdGVkIGxhemlseSBpbgotICAgIC8vIGVuc3VyZURp
c3RyaWJ1dG9yKCksIGFuZCBoZXJlIHdlIGp1c3QgZW5zdXJlIHRoYXQgaXQgaXMgaW4gY2xlYW4g
c3RhdGUuCi0gICAgQVNTRVJUKCFkaXN0cmlidXRvcigpLnBvb2xJc1JlYWR5KCkpOwotCi0gICAg
ZGlzdHJpYnV0b3IoKS53aWxsRGlzdHJpYnV0ZSgpOworICAgIGVuc3VyZURpc3RyaWJ1dGlvbigp
OwogICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290
OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKICAgICAgICAgaWYgKCFyb290LT5h
dHRhY2hlZCgpKQogICAgICAgICAgICAgcm9vdC0+YXR0YWNoKCk7CiAgICAgfQotICAgIGRpc3Ry
aWJ1dG9yKCkuZGlkRGlzdHJpYnV0ZSgpOwogfQogCiB2b2lkIEVsZW1lbnRTaGFkb3c6OmRldGFj
aCgpCkBAIC0xNjcsNjMgKzE2MCw0NiBAQCBib29sIEVsZW1lbnRTaGFkb3c6Om5lZWRzU3R5bGVS
ZWNhbGMoKQogCiB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlY2FsY1N0eWxlKE5vZGU6OlN0eWxlQ2hh
bmdlIGNoYW5nZSkKIHsKLSAgICBTaGFkb3dSb290KiB5b3VuZ2VzdCA9IHlvdW5nZXN0U2hhZG93
Um9vdCgpOwotICAgIGlmICgheW91bmdlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChu
ZWVkc1JlZGlzdHJpYnV0aW5nKCkpCi0gICAgICAgIHJlYXR0YWNoSG9zdENoaWxkcmVuQW5kU2hh
ZG93KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIg
PSB5b3VuZ2VzdC0+ZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpOworICAgIGZvciAoU2hhZG93
Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xk
ZXJTaGFkb3dSb290KCkpIHsKKyAgICAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9
IHJvb3QtPmRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXIoKTsKKyAgICAgICAgc3R5bGVSZXNvbHZl
ci0+cHVzaFBhcmVudFNoYWRvd1Jvb3Qocm9vdCk7CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
cHVzaFBhcmVudFNoYWRvd1Jvb3QoeW91bmdlc3QpOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSB5
b3VuZ2VzdC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG4gPSByb290LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+cmVjYWxjU3R5bGUoY2hhbmdlKTsKICAgICAg
ICAgICAgIGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgICAgICB0b1RleHQo
biktPnJlY2FsY1RleHRTdHlsZShjaGFuZ2UpOwogICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnBvcFBhcmVudFNoYWRvd1Jvb3QoeW91bmdlc3QpOwotICAgIH0KIAotICAgIG1fZGlz
dHJpYnV0b3IuY2xlYXJOZWVkc1JlZGlzdHJpYnV0aW5nKCk7Ci0gICAgZm9yIChTaGFkb3dSb290
KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNo
YWRvd1Jvb3QoKSkgeworICAgICAgICBzdHlsZVJlc29sdmVyLT5wb3BQYXJlbnRTaGFkb3dSb290
KHJvb3QpOwogICAgICAgICByb290LT5jbGVhck5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAg
cm9vdC0+Y2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CiAKLWJvb2wgRWxl
bWVudFNoYWRvdzo6bmVlZHNSZWRpc3RyaWJ1dGluZygpCit2b2lkIEVsZW1lbnRTaGFkb3c6OmVu
c3VyZURpc3RyaWJ1dGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fZGlzdHJpYnV0b3IubmVlZHNSZWRp
c3RyaWJ1dGluZygpIHx8ICh5b3VuZ2VzdFNoYWRvd1Jvb3QoKSAmJiB5b3VuZ2VzdFNoYWRvd1Jv
b3QoKS0+aGFzSW5zZXJ0aW9uUG9pbnQoKSk7Ci19Ci0KLXZvaWQgRWxlbWVudFNoYWRvdzo6aG9z
dENoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUKHlvdW5nZXN0U2hhZG93Um9vdCgpKTsK
LQotICAgIGlmICgheW91bmdlc3RTaGFkb3dSb290KCktPmhhc0luc2VydGlvblBvaW50KCkpCisg
ICAgaWYgKCFtX2Rpc3RyaWJ1dG9yLm5lZWRzRGlzdHJpYnV0aW9uKCkpCiAgICAgICAgIHJldHVy
bjsKLQotICAgIC8vIFRoaXMgcmVzdWx0cyBpbiBmb3JjZWQgZGV0YWNoaW5nL2F0dGFjaGluZyBv
ZiB0aGUgc2hhZG93IHJlbmRlciB0cmVlLiBTZWUgU2hhZG93Um9vdDo6cmVjYWxjU3R5bGUoKS4K
LSAgICBzZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7CisgICAgbV9kaXN0cmlidXRvci5kaXN0cmli
dXRlKGhvc3QoKSk7CiB9CiAKLXZvaWQgRWxlbWVudFNoYWRvdzo6c2V0TmVlZHNSZWRpc3RyaWJ1
dGluZygpCit2b2lkIEVsZW1lbnRTaGFkb3c6OmludmFsaWRhdGVEaXN0cmlidXRpb24oKQogewot
ICAgIG1fZGlzdHJpYnV0b3Iuc2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpOwotICAgIGhvc3QoKS0+
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVEaXN0cmlidXRpb24oaG9zdCgp
KTsKIH0KIAotdm9pZCBFbGVtZW50U2hhZG93OjpyZWF0dGFjaEhvc3RDaGlsZHJlbkFuZFNoYWRv
dygpCit2b2lkIEVsZW1lbnRTaGFkb3c6OmludmFsaWRhdGVEaXN0cmlidXRpb24oRWxlbWVudCog
aG9zdCkKIHsKLSAgICBBU1NFUlQoeW91bmdlc3RTaGFkb3dSb290KCkpOworICAgIGlmICghbV9k
aXN0cmlidXRvci5uZWVkc0ludmFsaWRhdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgYm9v
bCBuZWVkc1JlYXR0YWNoID0gbV9kaXN0cmlidXRvci5pbnZhbGlkYXRlKGhvc3QpOworICAgIGlm
IChuZWVkc1JlYXR0YWNoICYmIGhvc3QtPmF0dGFjaGVkKCkpIHsKKyAgICAgICAgaG9zdC0+ZGV0
YWNoKCk7CisgICAgICAgIGhvc3QtPmxhenlBdHRhY2goTm9kZTo6RG9Ob3RTZXRBdHRhY2hlZCk7
CisgICAgfQogCi0gICAgRWxlbWVudCogaG9zdE5vZGUgPSB5b3VuZ2VzdFNoYWRvd1Jvb3QoKS0+
aG9zdCgpOwotICAgIGhvc3ROb2RlLT5kZXRhY2hDaGlsZHJlbklmTmVlZGVkKCk7Ci0gICAgZGV0
YWNoKCk7Ci0gICAgYXR0YWNoKCk7Ci0gICAgaG9zdE5vZGUtPmF0dGFjaENoaWxkcmVuSWZOZWVk
ZWQoKTsKKyAgICBtX2Rpc3RyaWJ1dG9yLmZpbmlzaEluaXZhbGlkYXRpb24oKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCmluZGV4IGI2MjExMTg1YjQ3
ZDcyZmRkZTNmZDBjZTYzYTM4YWFmNzA5YTk4ZjIuLjEzZGUxYzAyMTBkNTY3NDI2ODNjNGZlOTNl
MjYzYjMyOTc2N2M5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hh
ZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuaApAQCAtNTIsNiAr
NTIsNyBAQCBwdWJsaWM6CiAgICAgU2hhZG93Um9vdCogeW91bmdlc3RTaGFkb3dSb290KCkgY29u
c3Q7CiAgICAgU2hhZG93Um9vdCogb2xkZXN0U2hhZG93Um9vdCgpIGNvbnN0OwogCisgICAgdm9p
ZCByZW1vdmVBbGxTaGFkb3dSb290cygpOwogICAgIHZvaWQgYWRkU2hhZG93Um9vdChFbGVtZW50
KiBzaGFkb3dIb3N0LCBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+LCBFeGNlcHRpb25Db2RlJik7CiAK
ICAgICB2b2lkIGF0dGFjaCgpOwpAQCAtNjAsMTggKzYxLDE3IEBAIHB1YmxpYzoKICAgICBib29s
IGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwogICAgIGJvb2wgbmVlZHNTdHlsZVJlY2FsYygpOwog
ICAgIHZvaWQgcmVjYWxjU3R5bGUoTm9kZTo6U3R5bGVDaGFuZ2UpOwotICAgIHZvaWQgc2V0TmVl
ZHNSZWRpc3RyaWJ1dGluZygpOwotICAgIGJvb2wgbmVlZHNSZWRpc3RyaWJ1dGluZygpOwotICAg
IHZvaWQgaG9zdENoaWxkcmVuQ2hhbmdlZCgpOwogCisgICAgdm9pZCBlbnN1cmVEaXN0cmlidXRp
b24oKTsKKyAgICB2b2lkIGludmFsaWRhdGVEaXN0cmlidXRpb24oKTsKKyAKICAgICBJbnNlcnRp
b25Qb2ludCogaW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSopIGNvbnN0OwogCiAgICAgQ29u
dGVudERpc3RyaWJ1dG9yJiBkaXN0cmlidXRvcigpOwogICAgIGNvbnN0IENvbnRlbnREaXN0cmli
dXRvciYgZGlzdHJpYnV0b3IoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHJlbW92ZUFs
bFNoYWRvd1Jvb3RzKCk7Ci0gICAgdm9pZCByZWF0dGFjaEhvc3RDaGlsZHJlbkFuZFNoYWRvdygp
OworICAgIHZvaWQgaW52YWxpZGF0ZURpc3RyaWJ1dGlvbihFbGVtZW50KiBob3N0KTsKIAogICAg
IERvdWJseUxpbmtlZExpc3Q8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290czsKICAgICBDb250ZW50
RGlzdHJpYnV0b3IgbV9kaXN0cmlidXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRl
cmluZ0NvbnRleHQuY3BwCmluZGV4IGNiYWJhNDgzOGUyMGI3OWVmZTQ4MjRlNzZiNGQ4YjU3Mzg1
ZDU0YmUuLjdmNzBlN2MwZmYyMGMwMzRiODViNWFjOGFlMjY5M2ZhNjZmOTM1OGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtNzcsNiArNzcsOCBA
QCBOb2RlUmVuZGVyaW5nQ29udGV4dDo6Tm9kZVJlbmRlcmluZ0NvbnRleHQoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIG1fdmlzdWFsUGFyZW50U2hhZG93ID0gdG9TaGFkb3dSb290KHBhcmVudCkt
Pm93bmVyKCk7CiAKICAgICAgICAgaWYgKG1fdmlzdWFsUGFyZW50U2hhZG93KSB7CisgICAgICAg
ICAgICBtX3Zpc3VhbFBhcmVudFNoYWRvdy0+ZW5zdXJlRGlzdHJpYnV0aW9uKCk7CisKICAgICAg
ICAgICAgIGlmICgobV9pbnNlcnRpb25Qb2ludCA9IG1fdmlzdWFsUGFyZW50U2hhZG93LT5pbnNl
cnRpb25Qb2ludEZvcihtX25vZGUpKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2luc2VydGlv
blBvaW50LT5zaGFkb3dSb290KCktPmlzVXNlZEZvclJlbmRlcmluZygpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG1fcGhhc2UgPSBBdHRhY2hpbmdEaXN0cmlidXRlZDsKQEAgLTkxLDcgKzkzLDEw
IEBAIE5vZGVSZW5kZXJpbmdDb250ZXh0OjpOb2RlUmVuZGVyaW5nQ29udGV4dChOb2RlKiBub2Rl
KQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzU2hhZG93Qm91bmRhcnkocGFyZW50KSkgewot
ICAgICAgICAgICAgaWYgKCFwYXJlbnQtPnNoYWRvd1Jvb3QoKS0+aXNVc2VkRm9yUmVuZGVyaW5n
KCkpIHsKKyAgICAgICAgICAgIFNoYWRvd1Jvb3QqIHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnQt
PnNoYWRvd1Jvb3QoKTsKKyAgICAgICAgICAgIHBhcmVudFNoYWRvd1Jvb3QtPm93bmVyKCktPmVu
c3VyZURpc3RyaWJ1dGlvbigpOworCisgICAgICAgICAgICBpZiAoIXBhcmVudFNoYWRvd1Jvb3Qt
PmlzVXNlZEZvclJlbmRlcmluZygpKSB7CiAgICAgICAgICAgICAgICAgbV9waGFzZSA9IEF0dGFj
aGluZ05vdERpc3RyaWJ1dGVkOwogICAgICAgICAgICAgICAgIG1fcGFyZW50Tm9kZUZvclJlbmRl
cmluZ0FuZFN0eWxlID0gcGFyZW50OwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTI4NSwx
MiArMjkwLDYgQEAgUmVuZGVyT2JqZWN0KiBOb2RlUmVuZGVyaW5nQ29udGV4dDo6cGFyZW50UmVu
ZGVyZXIoKSBjb25zdAogICAgIHJldHVybiBtX3BhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHls
ZSA/IG1fcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlLT5yZW5kZXJlcigpIDogMDsKIH0K
IAotdm9pZCBOb2RlUmVuZGVyaW5nQ29udGV4dDo6aG9zdENoaWxkcmVuQ2hhbmdlZCgpCi17Ci0g
ICAgaWYgKG1fcGhhc2UgPT0gQXR0YWNoaW5nTm90RGlzdHJpYnV0ZWQgJiYgbV92aXN1YWxQYXJl
bnRTaGFkb3cpCi0gICAgICAgIG1fdmlzdWFsUGFyZW50U2hhZG93LT5ob3N0Q2hpbGRyZW5DaGFu
Z2VkKCk7Ci19Ci0KIGJvb2wgTm9kZVJlbmRlcmluZ0NvbnRleHQ6OnNob3VsZENyZWF0ZVJlbmRl
cmVyKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9waGFzZSAhPSBDYWxjdWxhdGluZyk7CkBAIC0z
NjYsOSArMzY1LDYgQEAgdm9pZCBOb2RlUmVuZGVyZXJGYWN0b3J5OjpjcmVhdGVSZW5kZXJlcklm
TmVlZGVkKCkKICAgICBBU1NFUlQoIW5vZGUtPnJlbmRlcmVyKCkpOwogICAgIEFTU0VSVChkb2N1
bWVudC0+c2hvdWxkQ3JlYXRlUmVuZGVyZXJzKCkpOwogCi0gICAgLy8gRklYTUU6IFRoaXMgc2lk
ZSBlZmZlY3Qgc2hvdWxkIGJlIHZpc2libGUgZnJvbSBhdHRhY2goKSBjb2RlLgotICAgIG1fY29u
dGV4dC5ob3N0Q2hpbGRyZW5DaGFuZ2VkKCk7Ci0KICAgICBpZiAoIW1fY29udGV4dC5zaG91bGRD
cmVhdGVSZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGVSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggMWQzZGFmM2ZjNTQyNjdkM2I0N2NkYTFiYjkxNzFl
MmFhMjFhMzlhNi4uN2IxNGUwM2VkZDlmMTFmOWFlMGI0ZDMwOTYyYTU0NTI2OTFmOWVmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTYwLDggKzYwLDYg
QEAgcHVibGljOgogCiAgICAgYm9vbCBzaG91bGRDcmVhdGVSZW5kZXJlcigpIGNvbnN0OwogCi0g
ICAgdm9pZCBob3N0Q2hpbGRyZW5DaGFuZ2VkKCk7Ci0KICAgICBib29sIGlzT25VcHBlckVuY2Fw
c3VsYXRpb25Cb3VuZGFyeSgpIGNvbnN0OwogICAgIGJvb2wgaXNPbkVuY2Fwc3VsYXRpb25Cb3Vu
ZGFyeSgpIGNvbnN0OwogICAgIGJvb2wgaGFzRmxvd1RocmVhZFBhcmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyZW50Rmxvd1JlbmRlcmVyOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2hhZG93Um9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKaW5k
ZXggM2ViYTgxMmZjMGY4ZDNkZDY5NzliOGE5MzkyNjFmMDRiMTdkZDg4MC4uNjcyM2EwZjZkZDMw
OTVkZDE2ZTk1MzM3YTliYmMyYWI5MDU2OGIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NoYWRvd1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNw
cApAQCAtMTg5LDggKzE4OSw3IEBAIHZvaWQgU2hhZG93Um9vdDo6c2V0QXBwbHlBdXRob3JTdHls
ZXMoYm9vbCB2YWx1ZSkKIHsKICAgICBpZiAobV9hcHBseUF1dGhvclN0eWxlcyAhPSB2YWx1ZSkg
ewogICAgICAgICBtX2FwcGx5QXV0aG9yU3R5bGVzID0gdmFsdWU7Ci0gICAgICAgIGlmIChhdHRh
Y2hlZCgpICYmIG93bmVyKCkpCi0gICAgICAgICAgICBvd25lcigpLT5zZXROZWVkc1JlZGlzdHJp
YnV0aW5nKCk7CisgICAgICAgIGhvc3QoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0K
IH0KIApAQCAtMTk4LDggKzE5NywxNSBAQCB2b2lkIFNoYWRvd1Jvb3Q6OmF0dGFjaCgpCiB7CiAg
ICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGRvY3VtZW50KCktPnN0eWxlUmVzb2x2
ZXIoKTsKICAgICBzdHlsZVJlc29sdmVyLT5wdXNoUGFyZW50U2hhZG93Um9vdCh0aGlzKTsKLSAg
ICBEb2N1bWVudEZyYWdtZW50OjphdHRhY2goKTsKKyAgICBhdHRhY2hDaGlsZHJlbklmTmVlZGVk
KCk7CisgICAgYXR0YWNoQXNOb2RlKCk7CiAgICAgc3R5bGVSZXNvbHZlci0+cG9wUGFyZW50U2hh
ZG93Um9vdCh0aGlzKTsKIH0KIAordm9pZCBTaGFkb3dSb290OjpjaGlsZHJlbkNoYW5nZWQoYm9v
bCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2Us
IGludCBjaGlsZENvdW50RGVsdGEpCit7CisgICAgQ29udGFpbmVyTm9kZTo6Y2hpbGRyZW5DaGFu
Z2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3Vu
dERlbHRhKTsKKyAgICBvd25lcigpLT5pbnZhbGlkYXRlRGlzdHJpYnV0aW9uKCk7Cit9CisKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2hhZG93Um9vdC5oCmluZGV4IDE0MTFmYTUyYWNjYTEzNmVjM2I0MzM3YmE0OTk2
MzkyMzY4MTc5NTMuLjBiN2ZmYTVmMmRhOGQ3YTU0NjA4MzYxOTk1MzkxYzU4Y2Y4OGQzM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NoYWRvd1Jvb3QuaApAQCAtNjAsNyArNjAsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZWNhbGNTaGFkb3dUcmVlU3R5bGUoU3R5bGVDaGFuZ2UpOwogCiAgICAgSW5zZXJ0aW9uUG9p
bnQqIGluc2VydGlvblBvaW50Rm9yKE5vZGUqKSBjb25zdDsKLSAgICB2b2lkIGhvc3RDaGlsZHJl
bkNoYW5nZWQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseUF1dGhvclN0eWxlcygpIGNvbnN0
IE9WRVJSSURFOwogICAgIHZvaWQgc2V0QXBwbHlBdXRob3JTdHlsZXMoYm9vbCk7CkBAIC05MSwx
MCArOTAsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTaGFkb3dSb290KERvY3VtZW50Kik7
CiAgICAgdmlydHVhbCB+U2hhZG93Um9vdCgpOwotCiAgICAgdmlydHVhbCBTdHJpbmcgbm9kZU5h
bWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gY2xvbmVOb2RlKGJvb2wg
ZGVlcCk7CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIs
IE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVs
dGEpIE9WRVJSSURFOwogCiAgICAgU2hhZG93Um9vdCogbV9wcmV2OwogICAgIFNoYWRvd1Jvb3Qq
IG1fbmV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCmluZGV4IGU1OTljZDE1MTk2NTJhNWFiZmU4ODBlMTY5Mjk1NjZlZWU5MjdiNjcuLmEzMTM2
NmRlZTJkZWEwZTY5NTBiMTliMjZiNWQxY2Q5NmMxMzUzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5o
IgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1
ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAKaW5kZXggYTE0NGJhYjU5MTk3NWIyMzFiYmY3
ZjYwZTU2MmViZGNjZjZkZjIzZS4uNDJiY2VkZDJiNjEwNjBhNmM4ZjgzMzM3ZTFlMjNjNjViODlj
YmQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAKQEAgLTEz
Miw2ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RCdWJibGVQb3NpdGlvbihjb25zdCBMYXlv
dXRSZWN0JiBob3N0UmVjdCwgSFRNTEVsZW1lbnQqIGJ1YmJsZQogdm9pZCBWYWxpZGF0aW9uTWVz
c2FnZTo6YnVpbGRCdWJibGVUcmVlKFRpbWVyPFZhbGlkYXRpb25NZXNzYWdlPiopCiB7CiAgICAg
SFRNTEVsZW1lbnQqIGhvc3QgPSB0b0hUTUxFbGVtZW50KG1fZWxlbWVudCk7CisKICAgICBEb2N1
bWVudCogZG9jID0gaG9zdC0+ZG9jdW1lbnQoKTsKICAgICBtX2J1YmJsZSA9IEhUTUxEaXZFbGVt
ZW50OjpjcmVhdGUoZG9jKTsKICAgICBtX2J1YmJsZS0+c2V0U2hhZG93UHNldWRvSWQoIi13ZWJr
aXQtdmFsaWRhdGlvbi1idWJibGUiKTsKQEAgLTE0MSw2ICsxNDIsNyBAQCB2b2lkIFZhbGlkYXRp
b25NZXNzYWdlOjpidWlsZEJ1YmJsZVRyZWUoVGltZXI8VmFsaWRhdGlvbk1lc3NhZ2U+KikKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBob3N0LT5lbnN1cmVTaGFkb3dSb290KCktPmFw
cGVuZENoaWxkKG1fYnViYmxlLmdldCgpLCBlYyk7CiAgICAgQVNTRVJUKCFlYyk7CisgICAgaG9z
dC0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgYWRqdXN0QnViYmxlUG9zaXRpb24o
aG9zdC0+Z2V0UmVjdCgpLCBtX2J1YmJsZS5nZXQoKSk7CiAKICAgICBSZWZQdHI8SFRNTERpdkVs
ZW1lbnQ+IGNsaXBwZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvYyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAppbmRleCBhZjY1
MGEzYmZhNmQxZDAyYThmMDYxODM4Mjc3MzNmZWVlZDM3NWNlLi43MzQzODc0YWE0OTdmOTI1ZThj
MWNlZGE3MzEzN2YzYzM0MjMyZGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKQEAgLTM1LDcyICszNSwxMTMgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQ29udGVudERpc3RyaWJ1dG9yOjpDb250ZW50RGlzdHJpYnV0b3IoKQot
ICAgIDogbV9waGFzZShQcmV2ZW50ZWQpCi0gICAgLCBtX25lZWRzUmVkaXN0cmlidXRpbmcoZmFs
c2UpCisgICAgOiBtX3ZhbGlkaXR5KFVuZGV0ZXJtaW5lZCkKIHsKIH0KIAogQ29udGVudERpc3Ry
aWJ1dG9yOjp+Q29udGVudERpc3RyaWJ1dG9yKCkKIHsKLSAgICBBU1NFUlQobV9wb29sLmlzRW1w
dHkoKSk7CiB9CiAKLXZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlKEluc2VydGlv
blBvaW50KiBpbnNlcnRpb25Qb2ludCwgQ29udGVudERpc3RyaWJ1dGlvbiogZGlzdHJpYnV0aW9u
KQorSW5zZXJ0aW9uUG9pbnQqIENvbnRlbnREaXN0cmlidXRvcjo6ZmluZEluc2VydGlvblBvaW50
Rm9yKGNvbnN0IE5vZGUqIGtleSkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9waGFzZSA9PSBQcmVw
YXJlZCk7Ci0gICAgQVNTRVJUKGRpc3RyaWJ1dGlvbi0+aXNFbXB0eSgpKTsKLQotICAgIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHF1ZXJ5KGluc2VydGlvblBvaW50KTsKKyAgICByZXR1cm4gbV9ub2Rl
VG9JbnNlcnRpb25Qb2ludC5nZXQoa2V5KTsKK30KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9wb29sLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGUqIGNoaWxkID0gbV9wb29sW2ld
LmdldCgpOwotICAgICAgICBpZiAoIWNoaWxkKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmICghcXVlcnkubWF0Y2hlcyhjaGlsZCkpCi0gICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBkaXN0cmlidXRpb24tPmFwcGVuZChjaGlsZCk7Ci0gICAgICAgIG1fbm9kZVRvSW5z
ZXJ0aW9uUG9pbnQuYWRkKGNoaWxkLCBpbnNlcnRpb25Qb2ludCk7Ci0gICAgICAgIG1fcG9vbFtp
XSA9IDA7Cit2b2lkIENvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZShFbGVtZW50KiBob3N0
KQoreworICAgIEFTU0VSVChuZWVkc0Rpc3RyaWJ1dGlvbigpKTsKKyAgICBBU1NFUlQobV9ub2Rl
VG9JbnNlcnRpb25Qb2ludC5pc0VtcHR5KCkpOworCisgICAgbV92YWxpZGl0eSA9IFZhbGlkOwor
CisgICAgQ29udGVudERpc3RyaWJ1dGlvbiBwb29sOworICAgIGZvciAoTm9kZSogbm9kZSA9IGhv
c3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpCisgICAg
ICAgIHBvb2wuYXBwZW5kKG5vZGUpOworCisgICAgZm9yIChTaGFkb3dSb290KiByb290ID0gaG9z
dC0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jv
b3QoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KSkgeworICAgICAgICAgICAgaWYgKCFpc0luc2VydGlv
blBvaW50KG5vZGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgSW5z
ZXJ0aW9uUG9pbnQqIHBvaW50ID0gdG9JbnNlcnRpb25Qb2ludChub2RlKTsKKyAgICAgICAgICAg
IGlmICghcG9pbnQtPmlzQWN0aXZlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBTaGFkb3dSb290KiBvbGRlciA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpOworICAg
ICAgICAgICAgaWYgKHBvaW50LT5kb2VzU2VsZWN0RnJvbUhvc3RDaGlsZHJlbigpKQorICAgICAg
ICAgICAgICAgIGRpc3RyaWJ1dGVTZWxlY3Rpb25zVG8ocG9pbnQsIHBvb2wpOworICAgICAgICAg
ICAgZWxzZSBpZiAob2xkZXIgJiYgIW9sZGVyLT5hc3NpZ25lZFRvKCkpIHsKKyAgICAgICAgICAg
ICAgICBkaXN0cmlidXRlU2hhZG93Q2hpbGRyZW5Ubyhwb2ludCwgb2xkZXIpOworICAgICAgICAg
ICAgICAgIG9sZGVyLT5zZXRBc3NpZ25lZFRvKHBvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQogICAgIH0KIH0KIAotdm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmNsZWFyRGlzdHJpYnV0
aW9uKENvbnRlbnREaXN0cmlidXRpb24qIGxpc3QpCitib29sIENvbnRlbnREaXN0cmlidXRvcjo6
aW52YWxpZGF0ZShFbGVtZW50KiBob3N0KQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGlzdC0+c2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQucmVtb3Zl
KGxpc3QtPmF0KGkpLmdldCgpKTsKLSAgICBsaXN0LT5jbGVhcigpOwotfQorICAgIEFTU0VSVChu
ZWVkc0ludmFsaWRhdGlvbigpKTsKKyAgICBib29sIG5lZWRzUmVhdHRhY2ggPSAobV92YWxpZGl0
eSA9PSBVbmRldGVybWluZWQpIHx8ICFtX25vZGVUb0luc2VydGlvblBvaW50LmlzRW1wdHkoKTsK
KworICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IGhvc3QtPnlvdW5nZXN0U2hhZG93Um9vdCgp
OyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKKyAgICAgICAgcm9vdC0+
c2V0QXNzaWduZWRUbygwKTsKKworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290OyBub2Rl
OyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KSkgeworICAgICAgICAgICAgaWYg
KCFpc0luc2VydGlvblBvaW50KG5vZGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgbmVlZHNSZWF0dGFjaCA9IG5lZWRzUmVhdHRhY2ggfHwgdHJ1ZTsKKyAgICAgICAg
ICAgIEluc2VydGlvblBvaW50KiBwb2ludCA9IHRvSW5zZXJ0aW9uUG9pbnQobm9kZSk7CisgICAg
ICAgICAgICBwb2ludC0+Y2xlYXJEaXN0cmlidXRpb24oKTsKKyAgICAgICAgfQorICAgIH0KIAot
SW5zZXJ0aW9uUG9pbnQqIENvbnRlbnREaXN0cmlidXRvcjo6ZmluZEluc2VydGlvblBvaW50Rm9y
KGNvbnN0IE5vZGUqIGtleSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ub2RlVG9JbnNlcnRpb25Q
b2ludC5nZXQoa2V5KTsKKyAgICBtX3ZhbGlkaXR5ID0gSW52YWxpZGF0aW5nOworICAgIG1fbm9k
ZVRvSW5zZXJ0aW9uUG9pbnQuY2xlYXIoKTsKKyAgICByZXR1cm4gbmVlZHNSZWF0dGFjaDsKIH0K
IAotdm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OndpbGxEaXN0cmlidXRlKCkKK3ZvaWQgQ29udGVu
dERpc3RyaWJ1dG9yOjpmaW5pc2hJbml2YWxpZGF0aW9uKCkKIHsKLSAgICBtX3BoYXNlID0gU3Rh
cnRlZDsKKyAgICBBU1NFUlQobV92YWxpZGl0eSA9PSBJbnZhbGlkYXRpbmcpOworICAgIG1fdmFs
aWRpdHkgPSBJbnZhbGlkYXRlZDsKIH0KIAotdm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmRpZERp
c3RyaWJ1dGUoKQordm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGVTZWxlY3Rpb25z
VG8oSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50LCBDb250ZW50RGlzdHJpYnV0aW9uJiBw
b29sKQogewotICAgIEFTU0VSVChtX3BoYXNlICE9IFByZXZlbnRlZCk7Ci0gICAgbV9waGFzZSA9
IFByZXZlbnRlZDsKLSAgICBtX3Bvb2wuY2xlYXIoKTsKKyAgICBDb250ZW50RGlzdHJpYnV0aW9u
IGRpc3RyaWJ1dGlvbjsKKyAgICBDb250ZW50U2VsZWN0b3JRdWVyeSBxdWVyeShpbnNlcnRpb25Q
b2ludCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvb2wuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgTm9kZSogY2hpbGQgPSBwb29sW2ldLmdldCgpOworICAgICAgICBpZiAoIWNoaWxk
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghcXVlcnkubWF0Y2hlcyhjaGls
ZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBkaXN0cmlidXRpb24uYXBwZW5k
KGNoaWxkKTsKKyAgICAgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5hZGQoY2hpbGQsIGluc2Vy
dGlvblBvaW50KTsKKyAgICAgICAgcG9vbFtpXSA9IDA7CisgICAgfQorCisgICAgaW5zZXJ0aW9u
UG9pbnQtPnNldERpc3RyaWJ1dGlvbihkaXN0cmlidXRpb24pOwogfQogCi12b2lkIENvbnRlbnRE
aXN0cmlidXRvcjo6cHJlcGFyZVBvb2xGb3IoRWxlbWVudCogc2hhZG93SG9zdCkKK3ZvaWQgQ29u
dGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2hhZG93Q2hpbGRyZW5UbyhJbnNlcnRpb25Qb2lu
dCogaW5zZXJ0aW9uUG9pbnQsIFNoYWRvd1Jvb3QqIHJvb3QpCiB7Ci0gICAgaWYgKHBvb2xJc1Jl
YWR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBDb250ZW50RGlzdHJpYnV0aW9uIGRpc3RyaWJ1
dGlvbjsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290LT5maXJzdENoaWxkKCk7IG5vZGU7IG5v
ZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGRpc3RyaWJ1dGlvbi5hcHBlbmQo
bm9kZSk7CisgICAgICAgIG1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQuYWRkKG5vZGUsIGluc2VydGlv
blBvaW50KTsKKyAgICB9CiAKLSAgICBBU1NFUlQobV9wb29sLmlzRW1wdHkoKSk7Ci0gICAgQVNT
RVJUKHNoYWRvd0hvc3QpOwotICAgIEFTU0VSVChtX3BoYXNlID09IFN0YXJ0ZWQpOworICAgIGlu
c2VydGlvblBvaW50LT5zZXREaXN0cmlidXRpb24oZGlzdHJpYnV0aW9uKTsKK30KIAotICAgIG1f
cGhhc2UgPSBQcmVwYXJlZDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzaGFkb3dIb3N0LT5maXJz
dENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKQotICAgICAgICBtX3Bv
b2wuYXBwZW5kKG5vZGUpOwordm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmludmFsaWRhdGVEaXN0
cmlidXRpb25JbihDb250ZW50RGlzdHJpYnV0aW9uKiBsaXN0KQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpCisgICAgICAgIG1fbm9kZVRvSW5zZXJ0aW9u
UG9pbnQucmVtb3ZlKGxpc3QtPmF0KGkpLmdldCgpKTsKKyAgICBsaXN0LT5jbGVhcigpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJp
YnV0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5o
CmluZGV4IGEyMDk4NTRjZWRkNmU5Yjk5MTIzOTAzMTQwYjkxMzU3YzQzMzliNjMuLjMwNzdjZmY0
MTQ1MmZmOWFiZDU0Y2ZmMGRhMTA5Mzc2NmQyZjUwN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5oCkBAIC00OCw0MyArNDgsMzcgQEAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gQ29udGVudERpc3RyaWJ1dGlvbjsKIGNsYXNzIENv
bnRlbnREaXN0cmlidXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29udGVudERpc3Ry
aWJ1dG9yKTsKIHB1YmxpYzoKKyAgICBlbnVtIFZhbGlkaXR5IHsKKyAgICAgICAgVmFsaWQgPSAw
LAorICAgICAgICBJbnZhbGlkYXRlZCA9IDEsCisgICAgICAgIEludmFsaWRhdGluZyA9IDIsCisg
ICAgICAgIFVuZGV0ZXJtaW5lZCA9IDMKKyAgICB9OworCiAgICAgQ29udGVudERpc3RyaWJ1dG9y
KCk7CiAgICAgfkNvbnRlbnREaXN0cmlidXRvcigpOwogCi0gICAgdm9pZCBkaXN0cmlidXRlKElu
c2VydGlvblBvaW50KiwgQ29udGVudERpc3RyaWJ1dGlvbiopOwotICAgIHZvaWQgY2xlYXJEaXN0
cmlidXRpb24oQ29udGVudERpc3RyaWJ1dGlvbiopOwogICAgIEluc2VydGlvblBvaW50KiBmaW5k
SW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSoga2V5KSBjb25zdDsKIAotICAgIHZvaWQgd2ls
bERpc3RyaWJ1dGUoKTsKLSAgICBib29sIGluRGlzdHJpYnV0aW9uKCkgY29uc3Q7Ci0gICAgdm9p
ZCBkaWREaXN0cmlidXRlKCk7CisgICAgdm9pZCBkaXN0cmlidXRlKEVsZW1lbnQqIGhvc3QpOwor
ICAgIGJvb2wgaW52YWxpZGF0ZShFbGVtZW50KiBob3N0KTsKKyAgICB2b2lkIGZpbmlzaEluaXZh
bGlkYXRpb24oKTsKKyAgICBib29sIG5lZWRzRGlzdHJpYnV0aW9uKCkgY29uc3Q7CisgICAgYm9v
bCBuZWVkc0ludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsaWRpdHkgIT0gSW52YWxp
ZGF0ZWQ7IH0KIAotICAgIHZvaWQgcHJlcGFyZVBvb2xGb3IoRWxlbWVudCogc2hhZG93SG9zdCk7
Ci0gICAgYm9vbCBwb29sSXNSZWFkeSgpIGNvbnN0OwotICAgIGJvb2wgbmVlZHNSZWRpc3RyaWJ1
dGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNSZWRpc3RyaWJ1dGluZzsgfQotICAgIHZvaWQg
c2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpIHsgbV9uZWVkc1JlZGlzdHJpYnV0aW5nID0gdHJ1ZTsg
fQotICAgIHZvaWQgY2xlYXJOZWVkc1JlZGlzdHJpYnV0aW5nKCkgeyBtX25lZWRzUmVkaXN0cmli
dXRpbmcgPSBmYWxzZTsgfQotcHJpdmF0ZToKLSAgICBlbnVtIERpc3RyaWJ1dGlvblBoYXNlIHsK
LSAgICAgICAgUHJldmVudGVkLAotICAgICAgICBTdGFydGVkLAotICAgICAgICBQcmVwYXJlZCwK
LSAgICB9OworICAgIHZvaWQgZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhJbnNlcnRpb25Qb2ludCos
IENvbnRlbnREaXN0cmlidXRpb24mIHBvb2wpOworICAgIHZvaWQgZGlzdHJpYnV0ZVNoYWRvd0No
aWxkcmVuVG8oSW5zZXJ0aW9uUG9pbnQqLCBTaGFkb3dSb290Kik7CisgICAgdm9pZCBpbnZhbGlk
YXRlRGlzdHJpYnV0aW9uSW4oQ29udGVudERpc3RyaWJ1dGlvbiopOwogCi0gICAgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+IG1fcG9vbDsKLSAgICBEaXN0cmlidXRpb25QaGFzZSBtX3BoYXNlOworcHJp
dmF0ZToKICAgICBIYXNoTWFwPGNvbnN0IE5vZGUqLCBJbnNlcnRpb25Qb2ludCo+IG1fbm9kZVRv
SW5zZXJ0aW9uUG9pbnQ7Ci0gICAgYm9vbCBtX25lZWRzUmVkaXN0cmlidXRpbmcgOiAxOworICAg
IHVuc2lnbmVkIG1fdmFsaWRpdHkgOiAyOwogfTsKIAotaW5saW5lIGJvb2wgQ29udGVudERpc3Ry
aWJ1dG9yOjppbkRpc3RyaWJ1dGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGhhc2UgIT0g
UHJldmVudGVkOwotfQotCi1pbmxpbmUgYm9vbCBDb250ZW50RGlzdHJpYnV0b3I6OnBvb2xJc1Jl
YWR5KCkgY29uc3QKK2lubGluZSBib29sIENvbnRlbnREaXN0cmlidXRvcjo6bmVlZHNEaXN0cmli
dXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX3BoYXNlID09IFByZXBhcmVkOworICAgIC8v
IER1cmluZyB0aGUgaW52YWxpZGF0aW9uLCByZS1kaXN0cmlidXRpb24gc2hvdWxkIGJlIHN1cHJl
c3NlZC4KKyAgICByZXR1cm4gbV92YWxpZGl0eSAhPSBWYWxpZCAmJiBtX3ZhbGlkaXR5ICE9IElu
dmFsaWRhdGluZzsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hU
TUxDb250ZW50RWxlbWVudC5jcHAKaW5kZXggYzc3MDZjYzE2Zjg2ODIzZTMxMzJlMTc3ZmQxMTRh
YjhhZTU2MGM0ZS4uMDhiNDVkNGFiZjU5YmZjNzZlOGU3NDAwM2MxNzZkZGM5NjBlNGJlZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3Bw
CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgSFRNTENvbnRlbnRFbGVtZW50OjpwYXJzZUF0dHJpYnV0
ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkKIHsKICAgICBpZiAoYXR0cmlidXRlLm5hbWUo
KSA9PSBzZWxlY3RBdHRyKSB7CiAgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93
Um9vdCgpKQotICAgICAgICAgICAgcm9vdC0+b3duZXIoKS0+c2V0TmVlZHNSZWRpc3RyaWJ1dGlu
ZygpOworICAgICAgICAgICAgcm9vdC0+b3duZXIoKS0+aW52YWxpZGF0ZURpc3RyaWJ1dGlvbigp
OwogICAgIH0gZWxzZQogICAgICAgICBJbnNlcnRpb25Qb2ludDo6cGFyc2VBdHRyaWJ1dGUoYXR0
cmlidXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2Vy
dGlvblBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50
LmNwcAppbmRleCBjYjQyM2JhZDJmMDRkMWEwYjgyNDNmYjEzOTAzNWZjZGI2ZWI0NGU3Li5mMzBh
MDdmNDg5ZGM4MGMxOGI4YzEwN2FkMzMxZmNlN2RlYTMxYTY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3BwCkBAIC00Nyw1MyArNDcsMjIgQEAgSW5z
ZXJ0aW9uUG9pbnQ6On5JbnNlcnRpb25Qb2ludCgpCiAKIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6OmF0
dGFjaCgpCiB7Ci0gICAgaWYgKGlzU2hhZG93Qm91bmRhcnkoKSkgewotICAgICAgICBTaGFkb3dS
b290KiByb290ID0gdG9TaGFkb3dSb290KHRyZWVTY29wZSgpLT5yb290Tm9kZSgpKTsKLSAgICAg
ICAgaWYgKGRvZXNTZWxlY3RGcm9tSG9zdENoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgIGRpc3Ry
aWJ1dGVIb3N0Q2hpbGRyZW4ocm9vdC0+b3duZXIoKSk7Ci0gICAgICAgICAgICBhdHRhY2hEaXN0
cmlidXRlZE5vZGUoKTsKLSAgICAgICAgfSBlbHNlIGlmICghcm9vdC0+b2xkZXJTaGFkb3dSb290
KCktPmFzc2lnbmVkVG8oKSkgewotICAgICAgICAgICAgQVNTRVJUKCFyb290LT5vbGRlclNoYWRv
d1Jvb3QoKS0+YXR0YWNoZWQoKSk7Ci0gICAgICAgICAgICBhc3NpZ25TaGFkb3dSb290KHJvb3Qt
Pm9sZGVyU2hhZG93Um9vdCgpKTsKLSAgICAgICAgICAgIHJvb3QtPm9sZGVyU2hhZG93Um9vdCgp
LT5hdHRhY2goKTsKLSAgICAgICAgfQotICAgIH0KLQorICAgIGlmIChTaGFkb3dSb290KiByb290
ID0gc2hhZG93Um9vdCgpKQorICAgICAgICByb290LT5vd25lcigpLT5lbnN1cmVEaXN0cmlidXRp
b24oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGlzdHJpYnV0aW9uLnNpemUoKTsg
KytpKQorICAgICAgICBtX2Rpc3RyaWJ1dGlvbi5hdChpKS0+YXR0YWNoKCk7CiAgICAgSFRNTEVs
ZW1lbnQ6OmF0dGFjaCgpOwogfQogCiB2b2lkIEluc2VydGlvblBvaW50OjpkZXRhY2goKQogewot
ICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCk7Ci0gICAgaWYgKHJvb3QgJiYgaXNB
Y3RpdmUoKSkgewotICAgICAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSByb290LT5vd25lcigp
OwotCi0gICAgICAgIGlmIChkb2VzU2VsZWN0RnJvbUhvc3RDaGlsZHJlbigpKQotICAgICAgICAg
ICAgY2xlYXJEaXN0cmlidXRpb24oc2hhZG93KTsKLSAgICAgICAgZWxzZSBpZiAoU2hhZG93Um9v
dCogYXNzaWduZWRTaGFkb3dSb290ID0gYXNzaWduZWRGcm9tKCkpCi0gICAgICAgICAgICBjbGVh
ckFzc2lnbm1lbnQoYXNzaWduZWRTaGFkb3dSb290KTsKLQotICAgICAgICAvLyBXaGVuIHNoYWRv
dyBlbGVtZW50IGlzIGRldGFjaGVkLCBzaGFkb3cgdHJlZSBzaG91bGQgYmUgcmVjcmVhdGVkIHRv
IHJlLWNhbGN1bGF0ZSBzZWxlY3RvciBmb3IKLSAgICAgICAgLy8gb3RoZXIgaW5zZXJ0aW9uIHBv
aW50cy4KLSAgICAgICAgc2hhZG93LT5zZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7Ci0gICAgfQot
Ci0gICAgQVNTRVJUKG1fZGlzdHJpYnV0aW9uLmlzRW1wdHkoKSk7CisgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3dSb290KCkpCisgICAgICAgIHJvb3QtPm93bmVyKCktPmVuc3VyZURp
c3RyaWJ1dGlvbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kaXN0cmlidXRpb24u
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fZGlzdHJpYnV0aW9uLmF0KGkpLT5kZXRhY2goKTsKICAg
ICBIVE1MRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKLVNoYWRvd1Jvb3QqIEluc2VydGlvblBvaW50
Ojphc3NpZ25lZEZyb20oKSBjb25zdAotewotICAgIE5vZGUqIHRyZWVTY29wZVJvb3QgPSB0cmVl
U2NvcGUoKS0+cm9vdE5vZGUoKTsKLSAgICBpZiAoIXRyZWVTY29wZVJvb3QtPmlzU2hhZG93Um9v
dCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFNoYWRvd1Jvb3QqIG9sZGVyU2hhZG93Um9v
dCA9IHRvU2hhZG93Um9vdCh0cmVlU2NvcGVSb290KS0+b2xkZXJTaGFkb3dSb290KCk7Ci0gICAg
aWYgKG9sZGVyU2hhZG93Um9vdCAmJiBvbGRlclNoYWRvd1Jvb3QtPmFzc2lnbmVkVG8oKSA9PSB0
aGlzKQotICAgICAgICByZXR1cm4gb2xkZXJTaGFkb3dSb290OwotICAgIHJldHVybiAwOwotfQot
CiBib29sIEluc2VydGlvblBvaW50Ojppc1NoYWRvd0JvdW5kYXJ5KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gdHJlZVNjb3BlKCktPnJvb3ROb2RlKCktPmlzU2hhZG93Um9vdCgpICYmIGlzQWN0aXZl
KCk7CkBAIC0xMTgsNTkgKzg3LDU3IEBAIGJvb2wgSW5zZXJ0aW9uUG9pbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCiAgICAgcmV0dXJuICFp
c1NoYWRvd0JvdW5kYXJ5KCkgJiYgSFRNTEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29udGV4
dCk7CiB9CiAKLWlubGluZSB2b2lkIEluc2VydGlvblBvaW50OjpkaXN0cmlidXRlSG9zdENoaWxk
cmVuKEVsZW1lbnRTaGFkb3cqIHNoYWRvdykKK05vZGUqIEluc2VydGlvblBvaW50OjpuZXh0VG8o
Y29uc3QgTm9kZSogbm9kZSkgY29uc3QKIHsKLSAgICBpZiAoIXNoYWRvdy0+ZGlzdHJpYnV0b3Io
KS5pbkRpc3RyaWJ1dGlvbigpKSB7Ci0gICAgICAgIC8vIElmIENvbnRlbnREaXN0cmlidXRvciBp
cyBub3QgaW50IHNlbGVjdGluZyBwaGFzZSwgaXQgbWVhbnMgSW5zZXJ0aW9uUG9pbnQgaXMgYXR0
YWNoZWQgZnJvbQotICAgICAgICAvLyBub24tRWxlbWVudFNoYWRvdyBub2RlLiBUbyBydW4gZGlz
dHJpYnV0ZSBhbGdvcml0aG0sIHdlIGhhdmUgdG8gcmVhdHRhY2ggRWxlbWVudFNoYWRvdy4KLSAg
ICAgICAgc2hhZG93LT5zZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBzaGFkb3ctPmRpc3RyaWJ1dG9yKCkucHJlcGFyZVBvb2xGb3Ioc2hhZG93
LT5ob3N0KCkpOwotICAgIHNoYWRvdy0+ZGlzdHJpYnV0b3IoKS5jbGVhckRpc3RyaWJ1dGlvbigm
bV9kaXN0cmlidXRpb24pOwotICAgIHNoYWRvdy0+ZGlzdHJpYnV0b3IoKS5kaXN0cmlidXRlKHRo
aXMsICZtX2Rpc3RyaWJ1dGlvbik7CisgICAgc2l6ZV90IGluZGV4ID0gbV9kaXN0cmlidXRpb24u
ZmluZChub2RlKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQgfHwgaW5kZXggKyAxID09IG1f
ZGlzdHJpYnV0aW9uLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZGlz
dHJpYnV0aW9uLmF0KGluZGV4ICsgMSkuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIEluc2VydGlv
blBvaW50OjpjbGVhckRpc3RyaWJ1dGlvbihFbGVtZW50U2hhZG93KiBzaGFkb3cpCitOb2RlKiBJ
bnNlcnRpb25Qb2ludDo6cHJldmlvdXNUbyhjb25zdCBOb2RlKiBub2RlKSBjb25zdAogewotICAg
IHNoYWRvdy0+ZGlzdHJpYnV0b3IoKS5jbGVhckRpc3RyaWJ1dGlvbigmbV9kaXN0cmlidXRpb24p
OworICAgIHNpemVfdCBpbmRleCA9IG1fZGlzdHJpYnV0aW9uLmZpbmQobm9kZSk7CisgICAgaWYg
KGluZGV4ID09IG5vdEZvdW5kIHx8ICFpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG1fZGlzdHJpYnV0aW9uLmF0KGluZGV4IC0gMSkuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lk
IEluc2VydGlvblBvaW50OjphdHRhY2hEaXN0cmlidXRlZE5vZGUoKQordm9pZCBJbnNlcnRpb25Q
b2ludDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVD
aGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQogewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kaXN0cmlidXRpb24uc2l6ZSgpOyArK2kpCi0gICAgICAg
IG1fZGlzdHJpYnV0aW9uLmF0KGkpLT5hdHRhY2goKTsKKyAgICBIVE1MRWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hp
bGRDb3VudERlbHRhKTsKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkK
KyAgICAgICAgcm9vdC0+b3duZXIoKS0+aW52YWxpZGF0ZURpc3RyaWJ1dGlvbigpOwogfQogCi1p
bmxpbmUgdm9pZCBJbnNlcnRpb25Qb2ludDo6YXNzaWduU2hhZG93Um9vdChTaGFkb3dSb290KiBz
aGFkb3dSb290KQorTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBJbnNlcnRpb25Q
b2ludDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KSBPVkVSUklE
RQogewotICAgIHNoYWRvd1Jvb3QtPnNldEFzc2lnbmVkVG8odGhpcyk7Ci0gICAgbV9kaXN0cmli
dXRpb24uY2xlYXIoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzaGFkb3dSb290LT5maXJzdENo
aWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKQotICAgICAgICBtX2Rpc3Ry
aWJ1dGlvbi5hcHBlbmQobm9kZSk7Ci19CisgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhp
bnNlcnRpb25Qb2ludCk7CisgICAgaWYgKGluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkpIHsK
KyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpCisgICAgICAgICAg
ICByb290LT5vd25lcigpLT5pbnZhbGlkYXRlRGlzdHJpYnV0aW9uKCk7CisgICAgfQogCi1pbmxp
bmUgdm9pZCBJbnNlcnRpb25Qb2ludDo6Y2xlYXJBc3NpZ25tZW50KFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QpCi17Ci0gICAgc2hhZG93Um9vdC0+c2V0QXNzaWduZWRUbygwKTsKLSAgICBtX2Rpc3Ry
aWJ1dGlvbi5jbGVhcigpOworICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwogfQogCi1Ob2RlKiBJ
bnNlcnRpb25Qb2ludDo6bmV4dFRvKGNvbnN0IE5vZGUqIG5vZGUpIGNvbnN0Cit2b2lkIEluc2Vy
dGlvblBvaW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiBpbnNlcnRpb25Qb2ludCkgT1ZF
UlJJREUKIHsKLSAgICBzaXplX3QgaW5kZXggPSBtX2Rpc3RyaWJ1dGlvbi5maW5kKG5vZGUpOwot
ICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCB8fCBpbmRleCArIDEgPT0gbV9kaXN0cmlidXRpb24u
c2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9kaXN0cmlidXRpb24uYXQo
aW5kZXggKyAxKS5nZXQoKTsKLX0KKyAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQo
KSkgeworICAgICAgICBOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CisgICAgICAgIGlmICgh
cGFyZW50KQorICAgICAgICAgICAgcGFyZW50ID0gaW5zZXJ0aW9uUG9pbnQ7CisgICAgICAgIGlm
IChTaGFkb3dSb290KiByb290ID0gcGFyZW50LT5zaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAg
IC8vIGhvc3QgY2FuIGJlIG51bGwgd2hlbiByZW1vdmVkRnJvbSgpIGlzIGNhbGxlZCBmcm9tIEVs
ZW1lbnRTaGFkb3cgZGVzdHJ1Y3Rvci4KKyAgICAgICAgICAgIGlmIChyb290LT5ob3N0KCkpCisg
ICAgICAgICAgICAgICAgcm9vdC0+b3duZXIoKS0+aW52YWxpZGF0ZURpc3RyaWJ1dGlvbigpOwor
ICAgICAgICB9CiAKLU5vZGUqIEluc2VydGlvblBvaW50OjpwcmV2aW91c1RvKGNvbnN0IE5vZGUq
IG5vZGUpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9kaXN0cmlidXRpb24uZmluZChu
b2RlKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQgfHwgIWluZGV4KQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gbV9kaXN0cmlidXRpb24uYXQoaW5kZXggLSAxKS5nZXQoKTsKKyAg
ICAgICAgLy8gU2luY2UgdGhpcyBpbnNlcnRpb24gcG9pbnQgaXMgbm8gbG9uZ2VyIHZpc2libGUg
ZnJvbSB0aGUgc2hhZG93IHN1YnRyZWUsIGl0IG5lZWQgdG8gY2xlYW4gaXRzZWxmIHVwLgorICAg
ICAgICBjbGVhckRpc3RyaWJ1dGlvbigpOworICAgIH0KKworICAgIEhUTUxFbGVtZW50OjpyZW1v
dmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0luc2VydGlvblBvaW50LmgKaW5kZXggMjk2ZjBiMjUzZDZmMzYyOTZiMTI5MGUxYjY0MmZi
MjZmNzZlYjE3Ny4uZjQ2ZDNkNDgyN2FlMTIzNjRiYTgzNTVlNDg3Yjc1MjRjOTZjNTRhZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oCkBAIC00Myw2ICs0
Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbnNlcnRpb25Qb2ludCgpOwogCiAgICAgYm9v
bCBoYXNEaXN0cmlidXRpb24oKSBjb25zdCB7IHJldHVybiAhbV9kaXN0cmlidXRpb24uaXNFbXB0
eSgpOyB9CisgICAgdm9pZCBzZXREaXN0cmlidXRpb24oQ29udGVudERpc3RyaWJ1dGlvbiYgZGlz
dHJpYnV0aW9uKSB7IG1fZGlzdHJpYnV0aW9uLnN3YXAoZGlzdHJpYnV0aW9uKTsgfQorICAgIHZv
aWQgY2xlYXJEaXN0cmlidXRpb24oKSB7IG1fZGlzdHJpYnV0aW9uLmNsZWFyKCk7IH0KICAgICBi
b29sIGlzU2hhZG93Qm91bmRhcnkoKSBjb25zdDsKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7
CiAKQEAgLTUyLDkgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgp
OwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLQogICAgIHZpcnR1YWwgYm9vbCBpc0luc2Vy
dGlvblBvaW50KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIFNoYWRvd1Jv
b3QqIGFzc2lnbmVkRnJvbSgpIGNvbnN0OwogCiAgICAgc2l6ZV90IGluZGV4T2YoTm9kZSogbm9k
ZSkgY29uc3QgeyByZXR1cm4gbV9kaXN0cmlidXRpb24uZmluZChub2RlKTsgfQogICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kaXN0cmlidXRpb24uc2l6ZSgpOyB9CkBAIC02Nywx
NSArNjcsMTEgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIEluc2VydGlvblBvaW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklz
TmVlZGVkKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0JikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3Jl
Q2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhD
b250YWluZXJOb2RlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKENv
bnRhaW5lck5vZGUqKSBPVkVSUklERTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGRpc3RyaWJ1dGVI
b3N0Q2hpbGRyZW4oRWxlbWVudFNoYWRvdyopOwotICAgIHZvaWQgY2xlYXJEaXN0cmlidXRpb24o
RWxlbWVudFNoYWRvdyopOwotICAgIHZvaWQgYXR0YWNoRGlzdHJpYnV0ZWROb2RlKCk7Ci0KLSAg
ICB2b2lkIGFzc2lnblNoYWRvd1Jvb3QoU2hhZG93Um9vdCopOwotICAgIHZvaWQgY2xlYXJBc3Np
Z25tZW50KFNoYWRvd1Jvb3QqKTsKLQogICAgIENvbnRlbnREaXN0cmlidXRpb24gbV9kaXN0cmli
dXRpb247CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144415</attachid>
            <date>2012-05-28 17:50:46 -0700</date>
            <delta_ts>2012-05-28 20:42:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87223-20120529095044.patch</filename>
            <type>text/plain</type>
            <size>35031</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjYmVjZTRjYmFkOGIy
ZGFkZWU3Njk5Y2M4MDRjMzczMTIyZmVkNS4uZjQzOGY0ZjdkYWE1NjFiNzdiOWFhMTJlNTE0NGMw
OGY1ZjNiNjIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wNS0yOCAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
Tm9kZSBkaXN0cmlidXRpb24gc2hvdWxkIGJlIG9ydGhvZ29uYWwgZnJvbSBub2RlIGF0dGFjaG1l
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MjIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
aGFnbmUgcmVvcmdhbml6ZXMgU2hhZG93IERPTSBzdWJ0cmVlIGRpc3RyaWJ1dGlvbiBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICBPcmlnaW5hbGx5LCBpdCB3YXMgaW50ZXJsZWF2ZWQgYWNyb3Nz
IGF0dGFjaCgpIG9mIHNldmVyYWwgY2xhc3NlcyBsaWtlCisgICAgICAgIEluc2VydGlvblBvaW50
IGFuZCBTaGFkb3dSb290LiBJdHMgaW52YWxpZGF0aW9uIHdhcyBhbHNvIG1peGVkIGFzIGEgcGFy
dCBvZgorICAgICAgICB0aGUgc3R5bGUgcmVjYWxjdWxhdGlvbiBhbmQgZGV0YWNoKCktZXMuCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgZXh0cmFjdHMgdGhlc2UgY29kZSB0byBhIHNldCBvZiBDb250
ZW50RGlzdHJpYnV0b3IgbWV0aG9kcywgd2hpY2ggYXJlCisgICAgICAgIGZhY2FkZWQgYnkgdHdv
IEVsZW1lbnRTaGFkb3cgQVBJLiBGb2xsb3dpbmcgdHdvIEFQSSBhcmUgdGhlIHByaW1hcnkgZW50
cnkgcG9pbnRzOgorCisgICAgICAgIC0gRWxlbWVudFNoYWRvdzo6ZW5zdXJlRGlzdHJpYnV0aW9u
KCkKKyAgICAgICAgLSBFbGVtZW50U2hhZG93OjppbnZhbGlkYXRlRGlzdHJpYnV0aW9uKCkKKwor
ICAgICAgICBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9ucyBhcmUgQ29udGVudERpc3RyaWJ1dG9y
OjpkaXN0cmlidXRlKCkgYW5kCisgICAgICAgIENvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0
ZSgpIHJlc3BlY3RpdmVseS4KKworICAgICAgICBXaGVuIGNsaWVudHMgbmVlZCB0byB0cmF2ZXJz
ZSBjb21wb3NlZCB0cmVlLCBiZWZvcmUgYXR0YWNoKCkgZm9yCisgICAgICAgIGV4YW1wbGUsIHRo
ZXkgc2hvdWxkIGNhbGwgZW5zdXJlRGlzdHJpYnV0aW9uKCkgdG8gbWFrZSBzdXJlIHRoYXQKKyAg
ICAgICAgdGhlIHRyYXZlcnNhbCBkYXRhIHN0cnVjdHVyZSAoInRoZSBkaXN0cmlidXRpb24iKSBp
cyByZWFkeS4gIFdoZW4KKyAgICAgICAgdGhlcmUgaXMgYW55IERPTSBtdXRhdGlvbiB3aGljaCBj
YW4gcmVzdWx0IGEgY29tcG9zZWQgdHJlZQorICAgICAgICBtdXRhdGlvbiwgdGhlbiBjbGllbnRz
IHNob3VsZCBjYWxsIGludmFsaWRhdGVEaXN0cmlidXRpb24oKSB0bworICAgICAgICBtYXJrIHRo
ZSBkaXN0cmlidXRpb24gYmVpbmcgZGF0ZWQuCisKKyAgICAgICAgSGVyZSBpcyBzdWNoIERPTSBt
dXRhdGlvbnM6CisKKyAgICAgICAgLSBUaGUgY2hpbGRyZW4gb2YgYW55IFNoYWRvd1Jvb3RzIGFy
ZSBjaGFuZ2VkLAorICAgICAgICAtIFRoZSBjaGlsZHJlbiBvZiBhbnkgSW5zZXJ0aW9uUG9pbnRz
IGFyZSBjaGFuZ2VkLAorICAgICAgICAtIFRoZSBjaGlsZHJlbiBvZiBhbnkgaG9zdCBlbGVtZW50
cyBhcmUgY2hhbmdlZCwKKyAgICAgICAgLSBBbnkgaW5zZXJ0aW9uIHBvaW50IGlzIGluc2VydGVk
IHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgc2hhZG93IHRyZWUsCisgICAgICAgIC0gQHNlbGVjdCBh
dHRyaWJ1dGUgb2YgPGNvbnRlbnQ+IGlzIG1vZGlmaWVkIGFuZAorICAgICAgICAtIE5ldyBTaGFk
b3dSb290IGlzIGFkZGVkIHRvIHRoZSBzaGFkb3cgdHJlZS4KKworICAgICAgICBOb3RlIHRoYXQg
dGhlIHZhbGlkaXR5IG9mIHRoZSBkaXN0cmlidXRpb24gaXMgdHJhY2tlZCBhbmQKKyAgICAgICAg
dW5uZWNlc3NhcnkgZGlzdHJpYnV0aW9uIHJlcXVlc3RzIGFyZSBpZ25vcmVkLgorCisgICAgICAg
IEFmdGVyIHRoZSBpbnZhbGlkYXRpb24sIHRoYXQgc2hhZG93IHN1YnRyZWVzIGFyZSBkZXRhY2hl
ZCBvbmNlIGFuZAorICAgICAgICByZXF1ZXN0ICB0aGVpciAgcmUtYXR0YWNobWVudCAgdGhyb3Vn
aCAgdGhlICBzdHlsZSAgcmVjYWxjdWxhdGlvbi4KKyAgICAgICAgVGhlbiwgIG9uIHRoZSAgcmVz
cG9uZGluZyAgc3R5bGUgcmVjYWxjdWxhdGlvbiAgYW5kIGF0dGFjaCgpLCAgbmV3CisgICAgICAg
IGRpc3RyaWJ1dGlvbiB3aWxsIGJlIGNvbXB1dGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6On5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgICogZG9tL0VsZW1lbnRTaGFkb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6fkVsZW1lbnRTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dSb290cyk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjphdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudFNoYWRvdzo6cmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRv
dzo6ZW5zdXJlRGlzdHJpYnV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6
OmludmFsaWRhdGVEaXN0cmlidXRpb24pOgorICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93Lmg6
CisgICAgICAgIChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKiBkb20vTm9kZVJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ0NvbnRleHQ6Ok5vZGVS
ZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSZW5kZXJlckZhY3Rvcnk6
OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQpOgorICAgICAgICAqIGRvbS9Ob2RlUmVuZGVyaW5nQ29u
dGV4dC5oOgorICAgICAgICAoTm9kZVJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIGRvbS9T
aGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnNldEFwcGx5QXV0
aG9yU3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmF0dGFjaCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAgICAgICAgKFNoYWRvd1Jvb3Qp
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgICog
aHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0aW9u
TWVzc2FnZTo6YnVpbGRCdWJibGVUcmVlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50
RGlzdHJpYnV0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9yOjpD
b250ZW50RGlzdHJpYnV0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9y
Ojp+Q29udGVudERpc3RyaWJ1dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmli
dXRvcjo6ZmluZEluc2VydGlvblBvaW50Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRE
aXN0cmlidXRvcjo6ZGlzdHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGlzdHJp
YnV0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9y
OjpmaW5pc2hJbml2YWxpZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmli
dXRvcjo6ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGVTaGFkb3dDaGlsZHJlblRvKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0ZURpc3RyaWJ1dGlvbkluKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnREaXN0cmlidXRvcjo6bmVlZHNJbnZhbGlkYXRpb24pOgorICAgICAgICAoQ29udGVu
dERpc3RyaWJ1dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmlidXRvcjo6bmVl
ZHNEaXN0cmlidXRpb24pOgorICAgICAgICAqIGh0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29udGVudEVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c2VydGlvblBvaW50OjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0aW9uUG9pbnQ6
Om5leHRUbyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6cHJldmlvdXNUbyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAg
ICAgICAgKiBodG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXJ0aW9uUG9pbnQ6OnNldERpc3RyaWJ1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRpb25Qb2ludDo6Y2xlYXJEaXN0cmlidXRpb24pOgorICAgICAgICAoSW5zZXJ0aW9uUG9pbnQp
OgorCiAyMDEyLTA1LTI4ICBMdWtlIE1hY3BoZXJzb24gIDxtYWNwaGVyc29uQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBNYWtlIENTU1BhcnNlcjo6ZmlsdGVyZWRQcm9wZXJ0aWVzKCkgTyhuKSBp
bnN0ZWFkIG9mIE8obl4yKSBhbmQgaW1wcm92ZSByZWFkYWJpbGl0eS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCAyNGExMTNmMWQxMzRhNThiNjdkNTQ3ZTY5MWZjNWM2OGEyNDc1MDY4Li4wZGY4
NzdmMjg0Y2ZlNmY0OGFmN2Q1NDk5MmJiZWZhYWM3NmFkNTFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC0xMzIsOCArMTMyLDEwIEBAIEVsZW1lbnQ6On5FbGVtZW50KCkKICAgICB9CiAjZW5k
aWYKIAotICAgIGlmIChzaGFkb3coKSkKKyAgICBpZiAoRWxlbWVudFNoYWRvdyogZWxlbWVudFNo
YWRvdyA9IHNoYWRvdygpKSB7CisgICAgICAgIGVsZW1lbnRTaGFkb3ctPnJlbW92ZUFsbFNoYWRv
d1Jvb3RzKCk7CiAgICAgICAgIHJhcmVEYXRhKCktPm1fc2hhZG93LmNsZWFyKCk7CisgICAgfQog
CiAgICAgaWYgKGhhc0F0dHJMaXN0KCkpIHsKICAgICAgICAgQVNTRVJUKG1fYXR0cmlidXRlRGF0
YSk7CkBAIC0xMzIyLDcgKzEzMjQsNyBAQCB2b2lkIEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChi
b29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZgogICAgICAg
ICBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXModGhpcywgcmVuZGVyU3R5bGUoKSwgZmFsc2Us
IGJlZm9yZUNoYW5nZSwgYWZ0ZXJDaGFuZ2UsIGNoaWxkQ291bnREZWx0YSk7CiAKICAgICBpZiAo
RWxlbWVudFNoYWRvdyAqIHNoYWRvdyA9IHRoaXMtPnNoYWRvdygpKQotICAgICAgICBzaGFkb3ct
Pmhvc3RDaGlsZHJlbkNoYW5nZWQoKTsKKyAgICAgICAgc2hhZG93LT5pbnZhbGlkYXRlRGlzdHJp
YnV0aW9uKCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCmluZGV4IGJkZjMxNGJmOGU0ZjljYjg2MTFjY2M2
NjQ0OTlhY2JlYWIwNTE0NmMuLjVhZTc4OWNlNTA5ZmNmMWJiNjgyNzk1NzU5MDE2ZGM3Zjg0OWVh
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAg
RWxlbWVudFNoYWRvdzo6RWxlbWVudFNoYWRvdygpCiAKIEVsZW1lbnRTaGFkb3c6On5FbGVtZW50
U2hhZG93KCkKIHsKLSAgICByZW1vdmVBbGxTaGFkb3dSb290cygpOworICAgIEFTU0VSVChtX3No
YWRvd1Jvb3RzLmlzRW1wdHkoKSk7CiB9CiAKIHN0YXRpYyBib29sIHZhbGlkYXRlU2hhZG93Um9v
dChEb2N1bWVudCogZG9jdW1lbnQsIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtNzQsMTUgKzc0LDEzIEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6YWRkU2hhZG93
Um9vdChFbGVtZW50KiBzaGFkb3dIb3N0LCBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IHNoCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHNoYWRvd1Jvb3QtPnNldEhvc3Qoc2hhZG93SG9zdCk7CisgICAg
bV9zaGFkb3dSb290cy5wdXNoKHNoYWRvd1Jvb3QuZ2V0KCkpOworICAgIGludmFsaWRhdGVEaXN0
cmlidXRpb24oc2hhZG93SG9zdCk7CiAgICAgQ2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXIoc2hh
ZG93SG9zdCkubm90aWZ5KHNoYWRvd1Jvb3QuZ2V0KCkpOwogCi0gICAgaWYgKHNoYWRvd0hvc3Qt
PmF0dGFjaGVkKCkpIHsKLSAgICAgICAgc2hhZG93Um9vdC0+bGF6eUF0dGFjaCgpOwotICAgICAg
ICBkZXRhY2goKTsKLSAgICAgICAgc2hhZG93SG9zdC0+ZGV0YWNoQ2hpbGRyZW4oKTsKLSAgICB9
CisgICAgaWYgKHNoYWRvd0hvc3QtPmF0dGFjaGVkKCkgJiYgIXNoYWRvd1Jvb3QtPmF0dGFjaGVk
KCkpCisgICAgICAgIHNoYWRvd1Jvb3QtPmF0dGFjaCgpOwogCi0gICAgbV9zaGFkb3dSb290cy5w
dXNoKHNoYWRvd1Jvb3QuZ2V0KCkpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UHVzaFNoYWRvd1Jvb3Qoc2hhZG93SG9zdCwgc2hhZG93Um9vdC5nZXQoKSk7CiB9CiAKQEAgLTkx
LDEzICs4OSwxNCBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlbW92ZUFsbFNoYWRvd1Jvb3RzKCkK
ICAgICAvLyBEb250IHByb3RlY3QgdGhpcyByZWYgY291bnQuCiAgICAgRWxlbWVudCogc2hhZG93
SG9zdCA9IGhvc3QoKTsKIAotICAgIHdoaWxlIChSZWZQdHI8U2hhZG93Um9vdD4gb2xkUm9vdCA9
IG1fc2hhZG93Um9vdHMucmVtb3ZlSGVhZCgpKSB7CisgICAgd2hpbGUgKFJlZlB0cjxTaGFkb3dS
b290PiBvbGRSb290ID0gbV9zaGFkb3dSb290cy5oZWFkKCkpIHsKICAgICAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUG9wU2hhZG93Um9vdChzaGFkb3dIb3N0LCBvbGRSb290Lmdl
dCgpKTsKICAgICAgICAgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVP
ZlN1YnRyZWUob2xkUm9vdC5nZXQoKSk7CiAKICAgICAgICAgaWYgKG9sZFJvb3QtPmF0dGFjaGVk
KCkpCiAgICAgICAgICAgICBvbGRSb290LT5kZXRhY2goKTsKIAorICAgICAgICBtX3NoYWRvd1Jv
b3RzLnJlbW92ZUhlYWQoKTsKICAgICAgICAgb2xkUm9vdC0+c2V0SG9zdCgwKTsKICAgICAgICAg
b2xkUm9vdC0+c2V0UHJldigwKTsKICAgICAgICAgb2xkUm9vdC0+c2V0TmV4dCgwKTsKQEAgLTEw
NSwyMiArMTA0LDE2IEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6cmVtb3ZlQWxsU2hhZG93Um9vdHMo
KQogICAgICAgICBDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXIoc2hhZG93SG9zdCkubm90aWZ5KG9s
ZFJvb3QuZ2V0KCkpOwogICAgIH0KIAotICAgIGlmIChzaGFkb3dIb3N0LT5hdHRhY2hlZCgpKQot
ICAgICAgICBzaGFkb3dIb3N0LT5hdHRhY2hDaGlsZHJlbkxhemlseSgpOworICAgIGludmFsaWRh
dGVEaXN0cmlidXRpb24oc2hhZG93SG9zdCk7CiB9CiAKIHZvaWQgRWxlbWVudFNoYWRvdzo6YXR0
YWNoKCkKIHsKLSAgICAvLyBUaGUgcG9vbCBub2RlcyBhcmUgcG9wdWxhdGVkIGxhemlseSBpbgot
ICAgIC8vIGVuc3VyZURpc3RyaWJ1dG9yKCksIGFuZCBoZXJlIHdlIGp1c3QgZW5zdXJlIHRoYXQg
aXQgaXMgaW4gY2xlYW4gc3RhdGUuCi0gICAgQVNTRVJUKCFkaXN0cmlidXRvcigpLnBvb2xJc1Jl
YWR5KCkpOwotCi0gICAgZGlzdHJpYnV0b3IoKS53aWxsRGlzdHJpYnV0ZSgpOworICAgIGVuc3Vy
ZURpc3RyaWJ1dGlvbigpOwogICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hh
ZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKICAgICAg
ICAgaWYgKCFyb290LT5hdHRhY2hlZCgpKQogICAgICAgICAgICAgcm9vdC0+YXR0YWNoKCk7CiAg
ICAgfQotICAgIGRpc3RyaWJ1dG9yKCkuZGlkRGlzdHJpYnV0ZSgpOwogfQogCiB2b2lkIEVsZW1l
bnRTaGFkb3c6OmRldGFjaCgpCkBAIC0xNjcsNjMgKzE2MCw0NiBAQCBib29sIEVsZW1lbnRTaGFk
b3c6Om5lZWRzU3R5bGVSZWNhbGMoKQogCiB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlY2FsY1N0eWxl
KE5vZGU6OlN0eWxlQ2hhbmdlIGNoYW5nZSkKIHsKLSAgICBTaGFkb3dSb290KiB5b3VuZ2VzdCA9
IHlvdW5nZXN0U2hhZG93Um9vdCgpOwotICAgIGlmICgheW91bmdlc3QpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChuZWVkc1JlZGlzdHJpYnV0aW5nKCkpCi0gICAgICAgIHJlYXR0YWNoSG9z
dENoaWxkcmVuQW5kU2hhZG93KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIgPSB5b3VuZ2VzdC0+ZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpOwor
ICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyBy
b290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKKyAgICAgICAgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciA9IHJvb3QtPmRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXIoKTsKKyAgICAg
ICAgc3R5bGVSZXNvbHZlci0+cHVzaFBhcmVudFNoYWRvd1Jvb3Qocm9vdCk7CiAKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+cHVzaFBhcmVudFNoYWRvd1Jvb3QoeW91bmdlc3QpOwotICAgICAgICBm
b3IgKE5vZGUqIG4gPSB5b3VuZ2VzdC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG4gPSByb290LT5maXJzdENoaWxkKCk7IG47IG4g
PSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgp
KQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+cmVjYWxjU3R5bGUo
Y2hhbmdlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSkKICAgICAgICAg
ICAgICAgICB0b1RleHQobiktPnJlY2FsY1RleHRTdHlsZShjaGFuZ2UpOwogICAgICAgICB9Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnBvcFBhcmVudFNoYWRvd1Jvb3QoeW91bmdlc3QpOwotICAg
IH0KIAotICAgIG1fZGlzdHJpYnV0b3IuY2xlYXJOZWVkc1JlZGlzdHJpYnV0aW5nKCk7Ci0gICAg
Zm9yIChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3Qg
PSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgICAgICBzdHlsZVJlc29sdmVyLT5wb3BQ
YXJlbnRTaGFkb3dSb290KHJvb3QpOwogICAgICAgICByb290LT5jbGVhck5lZWRzU3R5bGVSZWNh
bGMoKTsKICAgICAgICAgcm9vdC0+Y2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9
CiB9CiAKLWJvb2wgRWxlbWVudFNoYWRvdzo6bmVlZHNSZWRpc3RyaWJ1dGluZygpCit2b2lkIEVs
ZW1lbnRTaGFkb3c6OmVuc3VyZURpc3RyaWJ1dGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fZGlzdHJp
YnV0b3IubmVlZHNSZWRpc3RyaWJ1dGluZygpIHx8ICh5b3VuZ2VzdFNoYWRvd1Jvb3QoKSAmJiB5
b3VuZ2VzdFNoYWRvd1Jvb3QoKS0+aGFzSW5zZXJ0aW9uUG9pbnQoKSk7Ci19Ci0KLXZvaWQgRWxl
bWVudFNoYWRvdzo6aG9zdENoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUKHlvdW5nZXN0
U2hhZG93Um9vdCgpKTsKLQotICAgIGlmICgheW91bmdlc3RTaGFkb3dSb290KCktPmhhc0luc2Vy
dGlvblBvaW50KCkpCisgICAgaWYgKCFtX2Rpc3RyaWJ1dG9yLm5lZWRzRGlzdHJpYnV0aW9uKCkp
CiAgICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMgcmVzdWx0cyBpbiBmb3JjZWQgZGV0YWNo
aW5nL2F0dGFjaGluZyBvZiB0aGUgc2hhZG93IHJlbmRlciB0cmVlLiBTZWUgU2hhZG93Um9vdDo6
cmVjYWxjU3R5bGUoKS4KLSAgICBzZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7CisgICAgbV9kaXN0
cmlidXRvci5kaXN0cmlidXRlKGhvc3QoKSk7CiB9CiAKLXZvaWQgRWxlbWVudFNoYWRvdzo6c2V0
TmVlZHNSZWRpc3RyaWJ1dGluZygpCit2b2lkIEVsZW1lbnRTaGFkb3c6OmludmFsaWRhdGVEaXN0
cmlidXRpb24oKQogewotICAgIG1fZGlzdHJpYnV0b3Iuc2V0TmVlZHNSZWRpc3RyaWJ1dGluZygp
OwotICAgIGhvc3QoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVEaXN0
cmlidXRpb24oaG9zdCgpKTsKIH0KIAotdm9pZCBFbGVtZW50U2hhZG93OjpyZWF0dGFjaEhvc3RD
aGlsZHJlbkFuZFNoYWRvdygpCit2b2lkIEVsZW1lbnRTaGFkb3c6OmludmFsaWRhdGVEaXN0cmli
dXRpb24oRWxlbWVudCogaG9zdCkKIHsKLSAgICBBU1NFUlQoeW91bmdlc3RTaGFkb3dSb290KCkp
OworICAgIGlmICghbV9kaXN0cmlidXRvci5uZWVkc0ludmFsaWRhdGlvbigpKQorICAgICAgICBy
ZXR1cm47CisgICAgYm9vbCBuZWVkc1JlYXR0YWNoID0gbV9kaXN0cmlidXRvci5pbnZhbGlkYXRl
KGhvc3QpOworICAgIGlmIChuZWVkc1JlYXR0YWNoICYmIGhvc3QtPmF0dGFjaGVkKCkpIHsKKyAg
ICAgICAgaG9zdC0+ZGV0YWNoKCk7CisgICAgICAgIGhvc3QtPmxhenlBdHRhY2goTm9kZTo6RG9O
b3RTZXRBdHRhY2hlZCk7CisgICAgfQogCi0gICAgRWxlbWVudCogaG9zdE5vZGUgPSB5b3VuZ2Vz
dFNoYWRvd1Jvb3QoKS0+aG9zdCgpOwotICAgIGhvc3ROb2RlLT5kZXRhY2hDaGlsZHJlbklmTmVl
ZGVkKCk7Ci0gICAgZGV0YWNoKCk7Ci0gICAgYXR0YWNoKCk7Ci0gICAgaG9zdE5vZGUtPmF0dGFj
aENoaWxkcmVuSWZOZWVkZWQoKTsKKyAgICBtX2Rpc3RyaWJ1dG9yLmZpbmlzaEluaXZhbGlkYXRp
b24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50U2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCmlu
ZGV4IGI2MjExMTg1YjQ3ZDcyZmRkZTNmZDBjZTYzYTM4YWFmNzA5YTk4ZjIuLjEzZGUxYzAyMTBk
NTY3NDI2ODNjNGZlOTNlMjYzYjMyOTc2N2M5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50U2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFk
b3cuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgU2hhZG93Um9vdCogeW91bmdlc3RT
aGFkb3dSb290KCkgY29uc3Q7CiAgICAgU2hhZG93Um9vdCogb2xkZXN0U2hhZG93Um9vdCgpIGNv
bnN0OwogCisgICAgdm9pZCByZW1vdmVBbGxTaGFkb3dSb290cygpOwogICAgIHZvaWQgYWRkU2hh
ZG93Um9vdChFbGVtZW50KiBzaGFkb3dIb3N0LCBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+LCBFeGNl
cHRpb25Db2RlJik7CiAKICAgICB2b2lkIGF0dGFjaCgpOwpAQCAtNjAsMTggKzYxLDE3IEBAIHB1
YmxpYzoKICAgICBib29sIGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwogICAgIGJvb2wgbmVlZHNT
dHlsZVJlY2FsYygpOwogICAgIHZvaWQgcmVjYWxjU3R5bGUoTm9kZTo6U3R5bGVDaGFuZ2UpOwot
ICAgIHZvaWQgc2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpOwotICAgIGJvb2wgbmVlZHNSZWRpc3Ry
aWJ1dGluZygpOwotICAgIHZvaWQgaG9zdENoaWxkcmVuQ2hhbmdlZCgpOwogCisgICAgdm9pZCBl
bnN1cmVEaXN0cmlidXRpb24oKTsKKyAgICB2b2lkIGludmFsaWRhdGVEaXN0cmlidXRpb24oKTsK
KyAKICAgICBJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSopIGNv
bnN0OwogCiAgICAgQ29udGVudERpc3RyaWJ1dG9yJiBkaXN0cmlidXRvcigpOwogICAgIGNvbnN0
IENvbnRlbnREaXN0cmlidXRvciYgZGlzdHJpYnV0b3IoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAg
ICB2b2lkIHJlbW92ZUFsbFNoYWRvd1Jvb3RzKCk7Ci0gICAgdm9pZCByZWF0dGFjaEhvc3RDaGls
ZHJlbkFuZFNoYWRvdygpOworICAgIHZvaWQgaW52YWxpZGF0ZURpc3RyaWJ1dGlvbihFbGVtZW50
KiBob3N0KTsKIAogICAgIERvdWJseUxpbmtlZExpc3Q8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290
czsKICAgICBDb250ZW50RGlzdHJpYnV0b3IgbV9kaXN0cmlidXRvcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGNiYWJhNDgzOGUyMGI3OWVmZTQ4
MjRlNzZiNGQ4YjU3Mzg1ZDU0YmUuLjdmNzBlN2MwZmYyMGMwMzRiODViNWFjOGFlMjY5M2ZhNjZm
OTM1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmNwcApA
QCAtNzcsNiArNzcsOCBAQCBOb2RlUmVuZGVyaW5nQ29udGV4dDo6Tm9kZVJlbmRlcmluZ0NvbnRl
eHQoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1fdmlzdWFsUGFyZW50U2hhZG93ID0gdG9TaGFk
b3dSb290KHBhcmVudCktPm93bmVyKCk7CiAKICAgICAgICAgaWYgKG1fdmlzdWFsUGFyZW50U2hh
ZG93KSB7CisgICAgICAgICAgICBtX3Zpc3VhbFBhcmVudFNoYWRvdy0+ZW5zdXJlRGlzdHJpYnV0
aW9uKCk7CisKICAgICAgICAgICAgIGlmICgobV9pbnNlcnRpb25Qb2ludCA9IG1fdmlzdWFsUGFy
ZW50U2hhZG93LT5pbnNlcnRpb25Qb2ludEZvcihtX25vZGUpKSkgewogICAgICAgICAgICAgICAg
IGlmIChtX2luc2VydGlvblBvaW50LT5zaGFkb3dSb290KCktPmlzVXNlZEZvclJlbmRlcmluZygp
KSB7CiAgICAgICAgICAgICAgICAgICAgIG1fcGhhc2UgPSBBdHRhY2hpbmdEaXN0cmlidXRlZDsK
QEAgLTkxLDcgKzkzLDEwIEBAIE5vZGVSZW5kZXJpbmdDb250ZXh0OjpOb2RlUmVuZGVyaW5nQ29u
dGV4dChOb2RlKiBub2RlKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzU2hhZG93Qm91bmRh
cnkocGFyZW50KSkgewotICAgICAgICAgICAgaWYgKCFwYXJlbnQtPnNoYWRvd1Jvb3QoKS0+aXNV
c2VkRm9yUmVuZGVyaW5nKCkpIHsKKyAgICAgICAgICAgIFNoYWRvd1Jvb3QqIHBhcmVudFNoYWRv
d1Jvb3QgPSBwYXJlbnQtPnNoYWRvd1Jvb3QoKTsKKyAgICAgICAgICAgIHBhcmVudFNoYWRvd1Jv
b3QtPm93bmVyKCktPmVuc3VyZURpc3RyaWJ1dGlvbigpOworCisgICAgICAgICAgICBpZiAoIXBh
cmVudFNoYWRvd1Jvb3QtPmlzVXNlZEZvclJlbmRlcmluZygpKSB7CiAgICAgICAgICAgICAgICAg
bV9waGFzZSA9IEF0dGFjaGluZ05vdERpc3RyaWJ1dGVkOwogICAgICAgICAgICAgICAgIG1fcGFy
ZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlID0gcGFyZW50OwogICAgICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTI4NSwxMiArMjkwLDYgQEAgUmVuZGVyT2JqZWN0KiBOb2RlUmVuZGVyaW5nQ29u
dGV4dDo6cGFyZW50UmVuZGVyZXIoKSBjb25zdAogICAgIHJldHVybiBtX3BhcmVudE5vZGVGb3JS
ZW5kZXJpbmdBbmRTdHlsZSA/IG1fcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlLT5yZW5k
ZXJlcigpIDogMDsKIH0KIAotdm9pZCBOb2RlUmVuZGVyaW5nQ29udGV4dDo6aG9zdENoaWxkcmVu
Q2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fcGhhc2UgPT0gQXR0YWNoaW5nTm90RGlzdHJpYnV0ZWQg
JiYgbV92aXN1YWxQYXJlbnRTaGFkb3cpCi0gICAgICAgIG1fdmlzdWFsUGFyZW50U2hhZG93LT5o
b3N0Q2hpbGRyZW5DaGFuZ2VkKCk7Ci19Ci0KIGJvb2wgTm9kZVJlbmRlcmluZ0NvbnRleHQ6OnNo
b3VsZENyZWF0ZVJlbmRlcmVyKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9waGFzZSAhPSBDYWxj
dWxhdGluZyk7CkBAIC0zNjYsOSArMzY1LDYgQEAgdm9pZCBOb2RlUmVuZGVyZXJGYWN0b3J5Ojpj
cmVhdGVSZW5kZXJlcklmTmVlZGVkKCkKICAgICBBU1NFUlQoIW5vZGUtPnJlbmRlcmVyKCkpOwog
ICAgIEFTU0VSVChkb2N1bWVudC0+c2hvdWxkQ3JlYXRlUmVuZGVyZXJzKCkpOwogCi0gICAgLy8g
RklYTUU6IFRoaXMgc2lkZSBlZmZlY3Qgc2hvdWxkIGJlIHZpc2libGUgZnJvbSBhdHRhY2goKSBj
b2RlLgotICAgIG1fY29udGV4dC5ob3N0Q2hpbGRyZW5DaGFuZ2VkKCk7Ci0KICAgICBpZiAoIW1f
Y29udGV4dC5zaG91bGRDcmVhdGVSZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggMWQzZGFmM2ZjNTQyNjdk
M2I0N2NkYTFiYjkxNzFlMmFhMjFhMzlhNi4uN2IxNGUwM2VkZDlmMTFmOWFlMGI0ZDMwOTYyYTU0
NTI2OTFmOWVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmgK
QEAgLTYwLDggKzYwLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBzaG91bGRDcmVhdGVSZW5kZXJl
cigpIGNvbnN0OwogCi0gICAgdm9pZCBob3N0Q2hpbGRyZW5DaGFuZ2VkKCk7Ci0KICAgICBib29s
IGlzT25VcHBlckVuY2Fwc3VsYXRpb25Cb3VuZGFyeSgpIGNvbnN0OwogICAgIGJvb2wgaXNPbkVu
Y2Fwc3VsYXRpb25Cb3VuZGFyeSgpIGNvbnN0OwogICAgIGJvb2wgaGFzRmxvd1RocmVhZFBhcmVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Rmxvd1JlbmRlcmVyOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hh
ZG93Um9vdC5jcHAKaW5kZXggM2ViYTgxMmZjMGY4ZDNkZDY5NzliOGE5MzkyNjFmMDRiMTdkZDg4
MC4uNjcyM2EwZjZkZDMwOTVkZDE2ZTk1MzM3YTliYmMyYWI5MDU2OGIxYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmNwcApAQCAtMTg5LDggKzE4OSw3IEBAIHZvaWQgU2hhZG93Um9vdDo6c2V0
QXBwbHlBdXRob3JTdHlsZXMoYm9vbCB2YWx1ZSkKIHsKICAgICBpZiAobV9hcHBseUF1dGhvclN0
eWxlcyAhPSB2YWx1ZSkgewogICAgICAgICBtX2FwcGx5QXV0aG9yU3R5bGVzID0gdmFsdWU7Ci0g
ICAgICAgIGlmIChhdHRhY2hlZCgpICYmIG93bmVyKCkpCi0gICAgICAgICAgICBvd25lcigpLT5z
ZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7CisgICAgICAgIGhvc3QoKS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYygpOwogICAgIH0KIH0KIApAQCAtMTk4LDggKzE5NywxNSBAQCB2b2lkIFNoYWRvd1Jvb3Q6
OmF0dGFjaCgpCiB7CiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGRvY3VtZW50
KCktPnN0eWxlUmVzb2x2ZXIoKTsKICAgICBzdHlsZVJlc29sdmVyLT5wdXNoUGFyZW50U2hhZG93
Um9vdCh0aGlzKTsKLSAgICBEb2N1bWVudEZyYWdtZW50OjphdHRhY2goKTsKKyAgICBhdHRhY2hD
aGlsZHJlbklmTmVlZGVkKCk7CisgICAgYXR0YWNoQXNOb2RlKCk7CiAgICAgc3R5bGVSZXNvbHZl
ci0+cG9wUGFyZW50U2hhZG93Um9vdCh0aGlzKTsKIH0KIAordm9pZCBTaGFkb3dSb290OjpjaGls
ZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9k
ZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCit7CisgICAgQ29udGFpbmVyTm9k
ZTo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNo
YW5nZSwgY2hpbGRDb3VudERlbHRhKTsKKyAgICBvd25lcigpLT5pbnZhbGlkYXRlRGlzdHJpYnV0
aW9uKCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCmluZGV4IDE0MTFmYTUyYWNjYTEz
NmVjM2I0MzM3YmE0OTk2MzkyMzY4MTc5NTMuLjBiN2ZmYTVmMmRhOGQ3YTU0NjA4MzYxOTk1Mzkx
YzU4Y2Y4OGQzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaApAQCAtNjAsNyArNjAsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZWNhbGNTaGFkb3dUcmVlU3R5bGUoU3R5bGVDaGFuZ2UpOwogCiAg
ICAgSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50Rm9yKE5vZGUqKSBjb25zdDsKLSAgICB2
b2lkIGhvc3RDaGlsZHJlbkNoYW5nZWQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseUF1dGhv
clN0eWxlcygpIGNvbnN0IE9WRVJSSURFOwogICAgIHZvaWQgc2V0QXBwbHlBdXRob3JTdHlsZXMo
Ym9vbCk7CkBAIC05MSwxMCArOTAsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTaGFkb3dS
b290KERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+U2hhZG93Um9vdCgpOwotCiAgICAgdmlydHVh
bCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4g
Y2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQo
Tm9kZVR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBj
aGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGlu
dCBjaGlsZENvdW50RGVsdGEpIE9WRVJSSURFOwogCiAgICAgU2hhZG93Um9vdCogbV9wcmV2Owog
ICAgIFNoYWRvd1Jvb3QqIG1fbmV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCmluZGV4IGU1OTljZDE1MTk2NTJhNWFiZmU4ODBlMTY5Mjk1NjZl
ZWU5MjdiNjcuLmEzMTM2NmRlZTJkZWEwZTY5NTBiMTliMjZiNWQxY2Q5NmMxMzUzYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKIAogI2luY2x1
ZGUgIkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKICNpbmNsdWRlICJF
dmVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAKaW5kZXggYTE0NGJh
YjU5MTk3NWIyMzFiYmY3ZjYwZTU2MmViZGNjZjZkZjIzZS4uNDJiY2VkZDJiNjEwNjBhNmM4Zjgz
MzM3ZTFlMjNjNjViODljYmQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9WYWxp
ZGF0aW9uTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVz
c2FnZS5jcHAKQEAgLTEzMiw2ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RCdWJibGVQb3Np
dGlvbihjb25zdCBMYXlvdXRSZWN0JiBob3N0UmVjdCwgSFRNTEVsZW1lbnQqIGJ1YmJsZQogdm9p
ZCBWYWxpZGF0aW9uTWVzc2FnZTo6YnVpbGRCdWJibGVUcmVlKFRpbWVyPFZhbGlkYXRpb25NZXNz
YWdlPiopCiB7CiAgICAgSFRNTEVsZW1lbnQqIGhvc3QgPSB0b0hUTUxFbGVtZW50KG1fZWxlbWVu
dCk7CisKICAgICBEb2N1bWVudCogZG9jID0gaG9zdC0+ZG9jdW1lbnQoKTsKICAgICBtX2J1YmJs
ZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jKTsKICAgICBtX2J1YmJsZS0+c2V0U2hhZG93
UHNldWRvSWQoIi13ZWJraXQtdmFsaWRhdGlvbi1idWJibGUiKTsKQEAgLTE0MSw2ICsxNDIsNyBA
QCB2b2lkIFZhbGlkYXRpb25NZXNzYWdlOjpidWlsZEJ1YmJsZVRyZWUoVGltZXI8VmFsaWRhdGlv
bk1lc3NhZ2U+KikKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBob3N0LT5lbnN1cmVT
aGFkb3dSb290KCktPmFwcGVuZENoaWxkKG1fYnViYmxlLmdldCgpLCBlYyk7CiAgICAgQVNTRVJU
KCFlYyk7CisgICAgaG9zdC0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgYWRqdXN0
QnViYmxlUG9zaXRpb24oaG9zdC0+Z2V0UmVjdCgpLCBtX2J1YmJsZS5nZXQoKSk7CiAKICAgICBS
ZWZQdHI8SFRNTERpdkVsZW1lbnQ+IGNsaXBwZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRv
Yyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJp
YnV0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9y
LmNwcAppbmRleCBhZjY1MGEzYmZhNmQxZDAyYThmMDYxODM4Mjc3MzNmZWVlZDM3NWNlLi5iM2Zk
ZDMyYWRhNGE3ZmM0MDJhNWViOTJjNjEwYjMxMDhkNzYyNGMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJDb250ZW50RGlzdHJpYnV0b3IuaCIKIAogI2luY2x1ZGUgIkNvbnRlbnRT
ZWxlY3RvclF1ZXJ5LmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkhU
TUxDb250ZW50RWxlbWVudC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIApAQCAtMzUsNzIg
KzM2LDExMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb250ZW50RGlzdHJpYnV0b3I6OkNv
bnRlbnREaXN0cmlidXRvcigpCi0gICAgOiBtX3BoYXNlKFByZXZlbnRlZCkKLSAgICAsIG1fbmVl
ZHNSZWRpc3RyaWJ1dGluZyhmYWxzZSkKKyAgICA6IG1fdmFsaWRpdHkoVW5kZXRlcm1pbmVkKQog
ewogfQogCiBDb250ZW50RGlzdHJpYnV0b3I6On5Db250ZW50RGlzdHJpYnV0b3IoKQogewotICAg
IEFTU0VSVChtX3Bvb2wuaXNFbXB0eSgpKTsKIH0KIAotdm9pZCBDb250ZW50RGlzdHJpYnV0b3I6
OmRpc3RyaWJ1dGUoSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50LCBDb250ZW50RGlzdHJp
YnV0aW9uKiBkaXN0cmlidXRpb24pCitJbnNlcnRpb25Qb2ludCogQ29udGVudERpc3RyaWJ1dG9y
OjpmaW5kSW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSoga2V5KSBjb25zdAogewotICAgIEFT
U0VSVChtX3BoYXNlID09IFByZXBhcmVkKTsKLSAgICBBU1NFUlQoZGlzdHJpYnV0aW9uLT5pc0Vt
cHR5KCkpOwotCi0gICAgQ29udGVudFNlbGVjdG9yUXVlcnkgcXVlcnkoaW5zZXJ0aW9uUG9pbnQp
OworICAgIHJldHVybiBtX25vZGVUb0luc2VydGlvblBvaW50LmdldChrZXkpOworfQogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bvb2wuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9k
ZSogY2hpbGQgPSBtX3Bvb2xbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghY2hpbGQpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFxdWVyeS5tYXRjaGVzKGNoaWxkKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGRpc3RyaWJ1dGlvbi0+YXBwZW5kKGNoaWxkKTsK
LSAgICAgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5hZGQoY2hpbGQsIGluc2VydGlvblBvaW50
KTsKLSAgICAgICAgbV9wb29sW2ldID0gMDsKK3ZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpkaXN0
cmlidXRlKEVsZW1lbnQqIGhvc3QpCit7CisgICAgQVNTRVJUKG5lZWRzRGlzdHJpYnV0aW9uKCkp
OworICAgIEFTU0VSVChtX25vZGVUb0luc2VydGlvblBvaW50LmlzRW1wdHkoKSk7CisKKyAgICBt
X3ZhbGlkaXR5ID0gVmFsaWQ7CisKKyAgICBDb250ZW50RGlzdHJpYnV0aW9uIHBvb2w7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gaG9zdC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcG9vbC5hcHBlbmQobm9kZSk7CisKKyAgICBmb3IgKFNo
YWRvd1Jvb3QqIHJvb3QgPSBob3N0LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9
IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJv
b3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QpKSB7CisgICAgICAg
ICAgICBpZiAoIWlzSW5zZXJ0aW9uUG9pbnQobm9kZSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBJbnNlcnRpb25Qb2ludCogcG9pbnQgPSB0b0luc2VydGlvblBvaW50
KG5vZGUpOworICAgICAgICAgICAgaWYgKCFwb2ludC0+aXNBY3RpdmUoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFNoYWRvd1Jvb3QqIG9sZGVyID0gcm9vdC0+b2xk
ZXJTaGFkb3dSb290KCk7CisgICAgICAgICAgICBpZiAocG9pbnQtPmRvZXNTZWxlY3RGcm9tSG9z
dENoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhwb2lu
dCwgcG9vbCk7CisgICAgICAgICAgICBlbHNlIGlmIChvbGRlciAmJiAhb2xkZXItPmFzc2lnbmVk
VG8oKSkgeworICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVTaGFkb3dDaGlsZHJlblRvKHBvaW50
LCBvbGRlcik7CisgICAgICAgICAgICAgICAgb2xkZXItPnNldEFzc2lnbmVkVG8ocG9pbnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENvbnRlbnREaXN0cmli
dXRvcjo6Y2xlYXJEaXN0cmlidXRpb24oQ29udGVudERpc3RyaWJ1dGlvbiogbGlzdCkKK2Jvb2wg
Q29udGVudERpc3RyaWJ1dG9yOjppbnZhbGlkYXRlKEVsZW1lbnQqIGhvc3QpCiB7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkKLSAgICAgICAgbV9ub2RlVG9J
bnNlcnRpb25Qb2ludC5yZW1vdmUobGlzdC0+YXQoaSkuZ2V0KCkpOwotICAgIGxpc3QtPmNsZWFy
KCk7Ci19CisgICAgQVNTRVJUKG5lZWRzSW52YWxpZGF0aW9uKCkpOworICAgIGJvb2wgbmVlZHNS
ZWF0dGFjaCA9IChtX3ZhbGlkaXR5ID09IFVuZGV0ZXJtaW5lZCkgfHwgIW1fbm9kZVRvSW5zZXJ0
aW9uUG9pbnQuaXNFbXB0eSgpOworCisgICAgZm9yIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+
eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3Qo
KSkgeworICAgICAgICByb290LT5zZXRBc3NpZ25lZFRvKDApOworCisgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3Qp
KSB7CisgICAgICAgICAgICBpZiAoIWlzSW5zZXJ0aW9uUG9pbnQobm9kZSkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBuZWVkc1JlYXR0YWNoID0gbmVlZHNSZWF0dGFj
aCB8fCB0cnVlOworICAgICAgICAgICAgSW5zZXJ0aW9uUG9pbnQqIHBvaW50ID0gdG9JbnNlcnRp
b25Qb2ludChub2RlKTsKKyAgICAgICAgICAgIHBvaW50LT5jbGVhckRpc3RyaWJ1dGlvbigpOwor
ICAgICAgICB9CisgICAgfQogCi1JbnNlcnRpb25Qb2ludCogQ29udGVudERpc3RyaWJ1dG9yOjpm
aW5kSW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSoga2V5KSBjb25zdAotewotICAgIHJldHVy
biBtX25vZGVUb0luc2VydGlvblBvaW50LmdldChrZXkpOworICAgIG1fdmFsaWRpdHkgPSBJbnZh
bGlkYXRpbmc7CisgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5jbGVhcigpOworICAgIHJldHVy
biBuZWVkc1JlYXR0YWNoOwogfQogCi12b2lkIENvbnRlbnREaXN0cmlidXRvcjo6d2lsbERpc3Ry
aWJ1dGUoKQordm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmZpbmlzaEluaXZhbGlkYXRpb24oKQog
ewotICAgIG1fcGhhc2UgPSBTdGFydGVkOworICAgIEFTU0VSVChtX3ZhbGlkaXR5ID09IEludmFs
aWRhdGluZyk7CisgICAgbV92YWxpZGl0eSA9IEludmFsaWRhdGVkOwogfQogCi12b2lkIENvbnRl
bnREaXN0cmlidXRvcjo6ZGlkRGlzdHJpYnV0ZSgpCit2b2lkIENvbnRlbnREaXN0cmlidXRvcjo6
ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQsIENv
bnRlbnREaXN0cmlidXRpb24mIHBvb2wpCiB7Ci0gICAgQVNTRVJUKG1fcGhhc2UgIT0gUHJldmVu
dGVkKTsKLSAgICBtX3BoYXNlID0gUHJldmVudGVkOwotICAgIG1fcG9vbC5jbGVhcigpOworICAg
IENvbnRlbnREaXN0cmlidXRpb24gZGlzdHJpYnV0aW9uOworICAgIENvbnRlbnRTZWxlY3RvclF1
ZXJ5IHF1ZXJ5KGluc2VydGlvblBvaW50KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICBOb2RlKiBjaGlsZCA9IHBvb2xbaV0uZ2V0KCk7
CisgICAgICAgIGlmICghY2hpbGQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KCFxdWVyeS5tYXRjaGVzKGNoaWxkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGRpc3RyaWJ1dGlvbi5hcHBlbmQoY2hpbGQpOworICAgICAgICBtX25vZGVUb0luc2VydGlvblBv
aW50LmFkZChjaGlsZCwgaW5zZXJ0aW9uUG9pbnQpOworICAgICAgICBwb29sW2ldID0gMDsKKyAg
ICB9CisKKyAgICBpbnNlcnRpb25Qb2ludC0+c2V0RGlzdHJpYnV0aW9uKGRpc3RyaWJ1dGlvbik7
CiB9CiAKLXZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpwcmVwYXJlUG9vbEZvcihFbGVtZW50KiBz
aGFkb3dIb3N0KQordm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGVTaGFkb3dDaGls
ZHJlblRvKEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludCwgU2hhZG93Um9vdCogcm9vdCkK
IHsKLSAgICBpZiAocG9vbElzUmVhZHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENvbnRlbnRE
aXN0cmlidXRpb24gZGlzdHJpYnV0aW9uOworICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3QtPmZp
cnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAg
ZGlzdHJpYnV0aW9uLmFwcGVuZChub2RlKTsKKyAgICAgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2lu
dC5hZGQobm9kZSwgaW5zZXJ0aW9uUG9pbnQpOworICAgIH0KIAotICAgIEFTU0VSVChtX3Bvb2wu
aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoc2hhZG93SG9zdCk7Ci0gICAgQVNTRVJUKG1fcGhhc2Ug
PT0gU3RhcnRlZCk7CisgICAgaW5zZXJ0aW9uUG9pbnQtPnNldERpc3RyaWJ1dGlvbihkaXN0cmli
dXRpb24pOworfQogCi0gICAgbV9waGFzZSA9IFByZXBhcmVkOwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IHNoYWRvd0hvc3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJs
aW5nKCkpCi0gICAgICAgIG1fcG9vbC5hcHBlbmQobm9kZSk7Cit2b2lkIENvbnRlbnREaXN0cmli
dXRvcjo6aW52YWxpZGF0ZURpc3RyaWJ1dGlvbkluKENvbnRlbnREaXN0cmlidXRpb24qIGxpc3Qp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkKKyAgICAg
ICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5yZW1vdmUobGlzdC0+YXQoaSkuZ2V0KCkpOworICAg
IGxpc3QtPmNsZWFyKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
Q29udGVudERpc3RyaWJ1dG9yLmgKaW5kZXggYTIwOTg1NGNlZGQ2ZTliOTkxMjM5MDMxNDBiOTEz
NTdjNDMzOWI2My4uMzA3N2NmZjQxNDUyZmY5YWJkNTRjZmYwZGExMDkzNzY2ZDJmNTA3YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmgKQEAg
LTQ4LDQzICs0OCwzNyBAQCB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBDb250ZW50RGlz
dHJpYnV0aW9uOwogY2xhc3MgQ29udGVudERpc3RyaWJ1dG9yIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDb250ZW50RGlzdHJpYnV0b3IpOwogcHVibGljOgorICAgIGVudW0gVmFsaWRpdHkg
eworICAgICAgICBWYWxpZCA9IDAsCisgICAgICAgIEludmFsaWRhdGVkID0gMSwKKyAgICAgICAg
SW52YWxpZGF0aW5nID0gMiwKKyAgICAgICAgVW5kZXRlcm1pbmVkID0gMworICAgIH07CisKICAg
ICBDb250ZW50RGlzdHJpYnV0b3IoKTsKICAgICB+Q29udGVudERpc3RyaWJ1dG9yKCk7CiAKLSAg
ICB2b2lkIGRpc3RyaWJ1dGUoSW5zZXJ0aW9uUG9pbnQqLCBDb250ZW50RGlzdHJpYnV0aW9uKik7
Ci0gICAgdm9pZCBjbGVhckRpc3RyaWJ1dGlvbihDb250ZW50RGlzdHJpYnV0aW9uKik7CiAgICAg
SW5zZXJ0aW9uUG9pbnQqIGZpbmRJbnNlcnRpb25Qb2ludEZvcihjb25zdCBOb2RlKiBrZXkpIGNv
bnN0OwogCi0gICAgdm9pZCB3aWxsRGlzdHJpYnV0ZSgpOwotICAgIGJvb2wgaW5EaXN0cmlidXRp
b24oKSBjb25zdDsKLSAgICB2b2lkIGRpZERpc3RyaWJ1dGUoKTsKKyAgICB2b2lkIGRpc3RyaWJ1
dGUoRWxlbWVudCogaG9zdCk7CisgICAgYm9vbCBpbnZhbGlkYXRlKEVsZW1lbnQqIGhvc3QpOwor
ICAgIHZvaWQgZmluaXNoSW5pdmFsaWRhdGlvbigpOworICAgIGJvb2wgbmVlZHNEaXN0cmlidXRp
b24oKSBjb25zdDsKKyAgICBib29sIG5lZWRzSW52YWxpZGF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV92YWxpZGl0eSAhPSBJbnZhbGlkYXRlZDsgfQogCi0gICAgdm9pZCBwcmVwYXJlUG9vbEZvcihF
bGVtZW50KiBzaGFkb3dIb3N0KTsKLSAgICBib29sIHBvb2xJc1JlYWR5KCkgY29uc3Q7Ci0gICAg
Ym9vbCBuZWVkc1JlZGlzdHJpYnV0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1JlZGlzdHJp
YnV0aW5nOyB9Ci0gICAgdm9pZCBzZXROZWVkc1JlZGlzdHJpYnV0aW5nKCkgeyBtX25lZWRzUmVk
aXN0cmlidXRpbmcgPSB0cnVlOyB9Ci0gICAgdm9pZCBjbGVhck5lZWRzUmVkaXN0cmlidXRpbmco
KSB7IG1fbmVlZHNSZWRpc3RyaWJ1dGluZyA9IGZhbHNlOyB9Ci1wcml2YXRlOgotICAgIGVudW0g
RGlzdHJpYnV0aW9uUGhhc2UgewotICAgICAgICBQcmV2ZW50ZWQsCi0gICAgICAgIFN0YXJ0ZWQs
Ci0gICAgICAgIFByZXBhcmVkLAotICAgIH07CisgICAgdm9pZCBkaXN0cmlidXRlU2VsZWN0aW9u
c1RvKEluc2VydGlvblBvaW50KiwgQ29udGVudERpc3RyaWJ1dGlvbiYgcG9vbCk7CisgICAgdm9p
ZCBkaXN0cmlidXRlU2hhZG93Q2hpbGRyZW5UbyhJbnNlcnRpb25Qb2ludCosIFNoYWRvd1Jvb3Qq
KTsKKyAgICB2b2lkIGludmFsaWRhdGVEaXN0cmlidXRpb25JbihDb250ZW50RGlzdHJpYnV0aW9u
Kik7CiAKLSAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9wb29sOwotICAgIERpc3RyaWJ1dGlv
blBoYXNlIG1fcGhhc2U7Citwcml2YXRlOgogICAgIEhhc2hNYXA8Y29uc3QgTm9kZSosIEluc2Vy
dGlvblBvaW50Kj4gbV9ub2RlVG9JbnNlcnRpb25Qb2ludDsKLSAgICBib29sIG1fbmVlZHNSZWRp
c3RyaWJ1dGluZyA6IDE7CisgICAgdW5zaWduZWQgbV92YWxpZGl0eSA6IDI7CiB9OwogCi1pbmxp
bmUgYm9vbCBDb250ZW50RGlzdHJpYnV0b3I6OmluRGlzdHJpYnV0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9waGFzZSAhPSBQcmV2ZW50ZWQ7Ci19Ci0KLWlubGluZSBib29sIENvbnRlbnRE
aXN0cmlidXRvcjo6cG9vbElzUmVhZHkoKSBjb25zdAoraW5saW5lIGJvb2wgQ29udGVudERpc3Ry
aWJ1dG9yOjpuZWVkc0Rpc3RyaWJ1dGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGhhc2Ug
PT0gUHJlcGFyZWQ7CisgICAgLy8gRHVyaW5nIHRoZSBpbnZhbGlkYXRpb24sIHJlLWRpc3RyaWJ1
dGlvbiBzaG91bGQgYmUgc3VwcmVzc2VkLgorICAgIHJldHVybiBtX3ZhbGlkaXR5ICE9IFZhbGlk
ICYmIG1fdmFsaWRpdHkgIT0gSW52YWxpZGF0aW5nOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcAppbmRleCBjNzcwNmNjMTZm
ODY4MjNlMzEzMmUxNzdmZDExNGFiOGFlNTYwYzRlLi4wOGI0NWQ0YWJmNTliZmM3NmU4ZTc0MDAz
YzE3NmRkYzk2MGU0YmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9I
VE1MQ29udGVudEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hU
TUxDb250ZW50RWxlbWVudC5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBIVE1MQ29udGVudEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewogICAg
IGlmIChhdHRyaWJ1dGUubmFtZSgpID09IHNlbGVjdEF0dHIpIHsKICAgICAgICAgaWYgKFNoYWRv
d1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpCi0gICAgICAgICAgICByb290LT5vd25lcigpLT5z
ZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7CisgICAgICAgICAgICByb290LT5vd25lcigpLT5pbnZh
bGlkYXRlRGlzdHJpYnV0aW9uKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIEluc2VydGlvblBvaW50
OjpwYXJzZUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3BwCmluZGV4IGNiNDIzYmFkMmYwNGQxYTBiODI0M2ZiMTM5
MDM1ZmNkYjZlYjQ0ZTcuLmYzMGEwN2Y0ODlkYzgwYzE4YjhjMTA3YWQzMzFmY2U3ZGVhMzFhNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHAKQEAg
LTQ3LDUzICs0NywyMiBAQCBJbnNlcnRpb25Qb2ludDo6fkluc2VydGlvblBvaW50KCkKIAogdm9p
ZCBJbnNlcnRpb25Qb2ludDo6YXR0YWNoKCkKIHsKLSAgICBpZiAoaXNTaGFkb3dCb3VuZGFyeSgp
KSB7Ci0gICAgICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSB0b1NoYWRvd1Jvb3QodHJlZVNjb3BlKCkt
PnJvb3ROb2RlKCkpOwotICAgICAgICBpZiAoZG9lc1NlbGVjdEZyb21Ib3N0Q2hpbGRyZW4oKSkg
ewotICAgICAgICAgICAgZGlzdHJpYnV0ZUhvc3RDaGlsZHJlbihyb290LT5vd25lcigpKTsKLSAg
ICAgICAgICAgIGF0dGFjaERpc3RyaWJ1dGVkTm9kZSgpOwotICAgICAgICB9IGVsc2UgaWYgKCFy
b290LT5vbGRlclNoYWRvd1Jvb3QoKS0+YXNzaWduZWRUbygpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoIXJvb3QtPm9sZGVyU2hhZG93Um9vdCgpLT5hdHRhY2hlZCgpKTsKLSAgICAgICAgICAgIGFz
c2lnblNoYWRvd1Jvb3Qocm9vdC0+b2xkZXJTaGFkb3dSb290KCkpOwotICAgICAgICAgICAgcm9v
dC0+b2xkZXJTaGFkb3dSb290KCktPmF0dGFjaCgpOwotICAgICAgICB9Ci0gICAgfQotCisgICAg
aWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpCisgICAgICAgIHJvb3QtPm93bmVy
KCktPmVuc3VyZURpc3RyaWJ1dGlvbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9k
aXN0cmlidXRpb24uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZGlzdHJpYnV0aW9uLmF0KGkpLT5h
dHRhY2goKTsKICAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7CiB9CiAKIHZvaWQgSW5zZXJ0aW9u
UG9pbnQ6OmRldGFjaCgpCiB7Ci0gICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKTsK
LSAgICBpZiAocm9vdCAmJiBpc0FjdGl2ZSgpKSB7Ci0gICAgICAgIEVsZW1lbnRTaGFkb3cqIHNo
YWRvdyA9IHJvb3QtPm93bmVyKCk7Ci0KLSAgICAgICAgaWYgKGRvZXNTZWxlY3RGcm9tSG9zdENo
aWxkcmVuKCkpCi0gICAgICAgICAgICBjbGVhckRpc3RyaWJ1dGlvbihzaGFkb3cpOwotICAgICAg
ICBlbHNlIGlmIChTaGFkb3dSb290KiBhc3NpZ25lZFNoYWRvd1Jvb3QgPSBhc3NpZ25lZEZyb20o
KSkKLSAgICAgICAgICAgIGNsZWFyQXNzaWdubWVudChhc3NpZ25lZFNoYWRvd1Jvb3QpOwotCi0g
ICAgICAgIC8vIFdoZW4gc2hhZG93IGVsZW1lbnQgaXMgZGV0YWNoZWQsIHNoYWRvdyB0cmVlIHNo
b3VsZCBiZSByZWNyZWF0ZWQgdG8gcmUtY2FsY3VsYXRlIHNlbGVjdG9yIGZvcgotICAgICAgICAv
LyBvdGhlciBpbnNlcnRpb24gcG9pbnRzLgotICAgICAgICBzaGFkb3ctPnNldE5lZWRzUmVkaXN0
cmlidXRpbmcoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9kaXN0cmlidXRpb24uaXNFbXB0eSgp
KTsKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkKKyAgICAgICAgcm9v
dC0+b3duZXIoKS0+ZW5zdXJlRGlzdHJpYnV0aW9uKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2Rpc3RyaWJ1dGlvbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9kaXN0cmlidXRpb24u
YXQoaSktPmRldGFjaCgpOwogICAgIEhUTUxFbGVtZW50OjpkZXRhY2goKTsKIH0KIAotU2hhZG93
Um9vdCogSW5zZXJ0aW9uUG9pbnQ6OmFzc2lnbmVkRnJvbSgpIGNvbnN0Ci17Ci0gICAgTm9kZSog
dHJlZVNjb3BlUm9vdCA9IHRyZWVTY29wZSgpLT5yb290Tm9kZSgpOwotICAgIGlmICghdHJlZVNj
b3BlUm9vdC0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU2hhZG93
Um9vdCogb2xkZXJTaGFkb3dSb290ID0gdG9TaGFkb3dSb290KHRyZWVTY29wZVJvb3QpLT5vbGRl
clNoYWRvd1Jvb3QoKTsKLSAgICBpZiAob2xkZXJTaGFkb3dSb290ICYmIG9sZGVyU2hhZG93Um9v
dC0+YXNzaWduZWRUbygpID09IHRoaXMpCi0gICAgICAgIHJldHVybiBvbGRlclNoYWRvd1Jvb3Q7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIGJvb2wgSW5zZXJ0aW9uUG9pbnQ6OmlzU2hhZG93Qm91bmRh
cnkoKSBjb25zdAogewogICAgIHJldHVybiB0cmVlU2NvcGUoKS0+cm9vdE5vZGUoKS0+aXNTaGFk
b3dSb290KCkgJiYgaXNBY3RpdmUoKTsKQEAgLTExOCw1OSArODcsNTcgQEAgYm9vbCBJbnNlcnRp
b25Qb2ludDo6cmVuZGVyZXJJc05lZWRlZChjb25zdCBOb2RlUmVuZGVyaW5nQ29udGV4dCYgY29u
dGV4dCkKICAgICByZXR1cm4gIWlzU2hhZG93Qm91bmRhcnkoKSAmJiBIVE1MRWxlbWVudDo6cmVu
ZGVyZXJJc05lZWRlZChjb250ZXh0KTsKIH0KIAotaW5saW5lIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6
OmRpc3RyaWJ1dGVIb3N0Q2hpbGRyZW4oRWxlbWVudFNoYWRvdyogc2hhZG93KQorTm9kZSogSW5z
ZXJ0aW9uUG9pbnQ6Om5leHRUbyhjb25zdCBOb2RlKiBub2RlKSBjb25zdAogewotICAgIGlmICgh
c2hhZG93LT5kaXN0cmlidXRvcigpLmluRGlzdHJpYnV0aW9uKCkpIHsKLSAgICAgICAgLy8gSWYg
Q29udGVudERpc3RyaWJ1dG9yIGlzIG5vdCBpbnQgc2VsZWN0aW5nIHBoYXNlLCBpdCBtZWFucyBJ
bnNlcnRpb25Qb2ludCBpcyBhdHRhY2hlZCBmcm9tCi0gICAgICAgIC8vIG5vbi1FbGVtZW50U2hh
ZG93IG5vZGUuIFRvIHJ1biBkaXN0cmlidXRlIGFsZ29yaXRobSwgd2UgaGF2ZSB0byByZWF0dGFj
aCBFbGVtZW50U2hhZG93LgotICAgICAgICBzaGFkb3ctPnNldE5lZWRzUmVkaXN0cmlidXRpbmco
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNoYWRvdy0+ZGlzdHJpYnV0b3IoKS5w
cmVwYXJlUG9vbEZvcihzaGFkb3ctPmhvc3QoKSk7Ci0gICAgc2hhZG93LT5kaXN0cmlidXRvcigp
LmNsZWFyRGlzdHJpYnV0aW9uKCZtX2Rpc3RyaWJ1dGlvbik7Ci0gICAgc2hhZG93LT5kaXN0cmli
dXRvcigpLmRpc3RyaWJ1dGUodGhpcywgJm1fZGlzdHJpYnV0aW9uKTsKKyAgICBzaXplX3QgaW5k
ZXggPSBtX2Rpc3RyaWJ1dGlvbi5maW5kKG5vZGUpOworICAgIGlmIChpbmRleCA9PSBub3RGb3Vu
ZCB8fCBpbmRleCArIDEgPT0gbV9kaXN0cmlidXRpb24uc2l6ZSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbV9kaXN0cmlidXRpb24uYXQoaW5kZXggKyAxKS5nZXQoKTsKIH0KIAot
aW5saW5lIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6OmNsZWFyRGlzdHJpYnV0aW9uKEVsZW1lbnRTaGFk
b3cqIHNoYWRvdykKK05vZGUqIEluc2VydGlvblBvaW50OjpwcmV2aW91c1RvKGNvbnN0IE5vZGUq
IG5vZGUpIGNvbnN0CiB7Ci0gICAgc2hhZG93LT5kaXN0cmlidXRvcigpLmNsZWFyRGlzdHJpYnV0
aW9uKCZtX2Rpc3RyaWJ1dGlvbik7CisgICAgc2l6ZV90IGluZGV4ID0gbV9kaXN0cmlidXRpb24u
ZmluZChub2RlKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQgfHwgIWluZGV4KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9kaXN0cmlidXRpb24uYXQoaW5kZXggLSAxKS5nZXQo
KTsKIH0KIAotaW5saW5lIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6OmF0dGFjaERpc3RyaWJ1dGVkTm9k
ZSgpCit2b2lkIEluc2VydGlvblBvaW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQ
YXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENv
dW50RGVsdGEpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rpc3RyaWJ1dGlvbi5z
aXplKCk7ICsraSkKLSAgICAgICAgbV9kaXN0cmlidXRpb24uYXQoaSktPmF0dGFjaCgpOworICAg
IEhUTUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFu
Z2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOworICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gc2hhZG93Um9vdCgpKQorICAgICAgICByb290LT5vd25lcigpLT5pbnZhbGlkYXRlRGlz
dHJpYnV0aW9uKCk7CiB9CiAKLWlubGluZSB2b2lkIEluc2VydGlvblBvaW50Ojphc3NpZ25TaGFk
b3dSb290KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCitOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRp
b25SZXF1ZXN0IEluc2VydGlvblBvaW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogaW5z
ZXJ0aW9uUG9pbnQpIE9WRVJSSURFCiB7Ci0gICAgc2hhZG93Um9vdC0+c2V0QXNzaWduZWRUbyh0
aGlzKTsKLSAgICBtX2Rpc3RyaWJ1dGlvbi5jbGVhcigpOwotICAgIGZvciAoTm9kZSogbm9kZSA9
IHNoYWRvd1Jvb3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5n
KCkpCi0gICAgICAgIG1fZGlzdHJpYnV0aW9uLmFwcGVuZChub2RlKTsKLX0KKyAgICBIVE1MRWxl
bWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKKyAgICBpZiAoaW5zZXJ0aW9uUG9p
bnQtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRv
d1Jvb3QoKSkKKyAgICAgICAgICAgIHJvb3QtPm93bmVyKCktPmludmFsaWRhdGVEaXN0cmlidXRp
b24oKTsKKyAgICB9CiAKLWlubGluZSB2b2lkIEluc2VydGlvblBvaW50OjpjbGVhckFzc2lnbm1l
bnQoU2hhZG93Um9vdCogc2hhZG93Um9vdCkKLXsKLSAgICBzaGFkb3dSb290LT5zZXRBc3NpZ25l
ZFRvKDApOwotICAgIG1fZGlzdHJpYnV0aW9uLmNsZWFyKCk7CisgICAgcmV0dXJuIEluc2VydGlv
bkRvbmU7CiB9CiAKLU5vZGUqIEluc2VydGlvblBvaW50OjpuZXh0VG8oY29uc3QgTm9kZSogbm9k
ZSkgY29uc3QKK3ZvaWQgSW5zZXJ0aW9uUG9pbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUq
IGluc2VydGlvblBvaW50KSBPVkVSUklERQogewotICAgIHNpemVfdCBpbmRleCA9IG1fZGlzdHJp
YnV0aW9uLmZpbmQobm9kZSk7Ci0gICAgaWYgKGluZGV4ID09IG5vdEZvdW5kIHx8IGluZGV4ICsg
MSA9PSBtX2Rpc3RyaWJ1dGlvbi5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX2Rpc3RyaWJ1dGlvbi5hdChpbmRleCArIDEpLmdldCgpOwotfQorICAgIGlmIChpbnNlcnRp
b25Qb2ludC0+aW5Eb2N1bWVudCgpKSB7CisgICAgICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5v
ZGUoKTsKKyAgICAgICAgaWYgKCFwYXJlbnQpCisgICAgICAgICAgICBwYXJlbnQgPSBpbnNlcnRp
b25Qb2ludDsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBwYXJlbnQtPnNoYWRvd1Jv
b3QoKSkgeworICAgICAgICAgICAgLy8gaG9zdCBjYW4gYmUgbnVsbCB3aGVuIHJlbW92ZWRGcm9t
KCkgaXMgY2FsbGVkIGZyb20gRWxlbWVudFNoYWRvdyBkZXN0cnVjdG9yLgorICAgICAgICAgICAg
aWYgKHJvb3QtPmhvc3QoKSkKKyAgICAgICAgICAgICAgICByb290LT5vd25lcigpLT5pbnZhbGlk
YXRlRGlzdHJpYnV0aW9uKCk7CisgICAgICAgIH0KIAotTm9kZSogSW5zZXJ0aW9uUG9pbnQ6OnBy
ZXZpb3VzVG8oY29uc3QgTm9kZSogbm9kZSkgY29uc3QKLXsKLSAgICBzaXplX3QgaW5kZXggPSBt
X2Rpc3RyaWJ1dGlvbi5maW5kKG5vZGUpOwotICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCB8fCAh
aW5kZXgpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2Rpc3RyaWJ1dGlvbi5hdChp
bmRleCAtIDEpLmdldCgpOworICAgICAgICAvLyBTaW5jZSB0aGlzIGluc2VydGlvbiBwb2ludCBp
cyBubyBsb25nZXIgdmlzaWJsZSBmcm9tIHRoZSBzaGFkb3cgc3VidHJlZSwgaXQgbmVlZCB0byBj
bGVhbiBpdHNlbGYgdXAuCisgICAgICAgIGNsZWFyRGlzdHJpYnV0aW9uKCk7CisgICAgfQorCisg
ICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKIH0KIAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaAppbmRleCAyOTZmMGIyNTNk
NmYzNjI5NmIxMjkwZTFiNjQyZmIyNmY3NmViMTc3Li5mNDZkM2Q0ODI3YWUxMjM2NGJhODM1NWU0
ODdiNzUyNGM5NmM1NGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9J
bnNlcnRpb25Qb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlv
blBvaW50LmgKQEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkluc2VydGlv
blBvaW50KCk7CiAKICAgICBib29sIGhhc0Rpc3RyaWJ1dGlvbigpIGNvbnN0IHsgcmV0dXJuICFt
X2Rpc3RyaWJ1dGlvbi5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIHNldERpc3RyaWJ1dGlvbihDb250
ZW50RGlzdHJpYnV0aW9uJiBkaXN0cmlidXRpb24pIHsgbV9kaXN0cmlidXRpb24uc3dhcChkaXN0
cmlidXRpb24pOyB9CisgICAgdm9pZCBjbGVhckRpc3RyaWJ1dGlvbigpIHsgbV9kaXN0cmlidXRp
b24uY2xlYXIoKTsgfQogICAgIGJvb2wgaXNTaGFkb3dCb3VuZGFyeSgpIGNvbnN0OwogICAgIGJv
b2wgaXNBY3RpdmUoKSBjb25zdDsKIApAQCAtNTIsOSArNTQsNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotCiAgICAg
dmlydHVhbCBib29sIGlzSW5zZXJ0aW9uUG9pbnQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgU2hhZG93Um9vdCogYXNzaWduZWRGcm9tKCkgY29uc3Q7CiAKICAgICBzaXpl
X3QgaW5kZXhPZihOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBtX2Rpc3RyaWJ1dGlvbi5maW5k
KG5vZGUpOyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Rpc3RyaWJ1dGlv
bi5zaXplKCk7IH0KQEAgLTY3LDE1ICs2NywxMSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAg
SW5zZXJ0aW9uUG9pbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgdmly
dHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRleHQmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5
UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRD
b3VudERlbHRhKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJl
cXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSopIE9WRVJSSURFOwogCiBwcml2YXRlOgot
ICAgIHZvaWQgZGlzdHJpYnV0ZUhvc3RDaGlsZHJlbihFbGVtZW50U2hhZG93Kik7Ci0gICAgdm9p
ZCBjbGVhckRpc3RyaWJ1dGlvbihFbGVtZW50U2hhZG93Kik7Ci0gICAgdm9pZCBhdHRhY2hEaXN0
cmlidXRlZE5vZGUoKTsKLQotICAgIHZvaWQgYXNzaWduU2hhZG93Um9vdChTaGFkb3dSb290Kik7
Ci0gICAgdm9pZCBjbGVhckFzc2lnbm1lbnQoU2hhZG93Um9vdCopOwotCiAgICAgQ29udGVudERp
c3RyaWJ1dGlvbiBtX2Rpc3RyaWJ1dGlvbjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144436</attachid>
            <date>2012-05-28 20:42:29 -0700</date>
            <delta_ts>2012-05-29 17:31:43 -0700</delta_ts>
            <desc>Fixing win build</desc>
            <filename>bug-87223-20120529124228.patch</filename>
            <type>text/plain</type>
            <size>35013</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjYmVjZTRjYmFkOGIy
ZGFkZWU3Njk5Y2M4MDRjMzczMTIyZmVkNS4uZjQzOGY0ZjdkYWE1NjFiNzdiOWFhMTJlNTE0NGMw
OGY1ZjNiNjIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wNS0yOCAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
Tm9kZSBkaXN0cmlidXRpb24gc2hvdWxkIGJlIG9ydGhvZ29uYWwgZnJvbSBub2RlIGF0dGFjaG1l
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MjIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBj
aGFnbmUgcmVvcmdhbml6ZXMgU2hhZG93IERPTSBzdWJ0cmVlIGRpc3RyaWJ1dGlvbiBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICBPcmlnaW5hbGx5LCBpdCB3YXMgaW50ZXJsZWF2ZWQgYWNyb3Nz
IGF0dGFjaCgpIG9mIHNldmVyYWwgY2xhc3NlcyBsaWtlCisgICAgICAgIEluc2VydGlvblBvaW50
IGFuZCBTaGFkb3dSb290LiBJdHMgaW52YWxpZGF0aW9uIHdhcyBhbHNvIG1peGVkIGFzIGEgcGFy
dCBvZgorICAgICAgICB0aGUgc3R5bGUgcmVjYWxjdWxhdGlvbiBhbmQgZGV0YWNoKCktZXMuCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgZXh0cmFjdHMgdGhlc2UgY29kZSB0byBhIHNldCBvZiBDb250
ZW50RGlzdHJpYnV0b3IgbWV0aG9kcywgd2hpY2ggYXJlCisgICAgICAgIGZhY2FkZWQgYnkgdHdv
IEVsZW1lbnRTaGFkb3cgQVBJLiBGb2xsb3dpbmcgdHdvIEFQSSBhcmUgdGhlIHByaW1hcnkgZW50
cnkgcG9pbnRzOgorCisgICAgICAgIC0gRWxlbWVudFNoYWRvdzo6ZW5zdXJlRGlzdHJpYnV0aW9u
KCkKKyAgICAgICAgLSBFbGVtZW50U2hhZG93OjppbnZhbGlkYXRlRGlzdHJpYnV0aW9uKCkKKwor
ICAgICAgICBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9ucyBhcmUgQ29udGVudERpc3RyaWJ1dG9y
OjpkaXN0cmlidXRlKCkgYW5kCisgICAgICAgIENvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0
ZSgpIHJlc3BlY3RpdmVseS4KKworICAgICAgICBXaGVuIGNsaWVudHMgbmVlZCB0byB0cmF2ZXJz
ZSBjb21wb3NlZCB0cmVlLCBiZWZvcmUgYXR0YWNoKCkgZm9yCisgICAgICAgIGV4YW1wbGUsIHRo
ZXkgc2hvdWxkIGNhbGwgZW5zdXJlRGlzdHJpYnV0aW9uKCkgdG8gbWFrZSBzdXJlIHRoYXQKKyAg
ICAgICAgdGhlIHRyYXZlcnNhbCBkYXRhIHN0cnVjdHVyZSAoInRoZSBkaXN0cmlidXRpb24iKSBp
cyByZWFkeS4gIFdoZW4KKyAgICAgICAgdGhlcmUgaXMgYW55IERPTSBtdXRhdGlvbiB3aGljaCBj
YW4gcmVzdWx0IGEgY29tcG9zZWQgdHJlZQorICAgICAgICBtdXRhdGlvbiwgdGhlbiBjbGllbnRz
IHNob3VsZCBjYWxsIGludmFsaWRhdGVEaXN0cmlidXRpb24oKSB0bworICAgICAgICBtYXJrIHRo
ZSBkaXN0cmlidXRpb24gYmVpbmcgZGF0ZWQuCisKKyAgICAgICAgSGVyZSBpcyBzdWNoIERPTSBt
dXRhdGlvbnM6CisKKyAgICAgICAgLSBUaGUgY2hpbGRyZW4gb2YgYW55IFNoYWRvd1Jvb3RzIGFy
ZSBjaGFuZ2VkLAorICAgICAgICAtIFRoZSBjaGlsZHJlbiBvZiBhbnkgSW5zZXJ0aW9uUG9pbnRz
IGFyZSBjaGFuZ2VkLAorICAgICAgICAtIFRoZSBjaGlsZHJlbiBvZiBhbnkgaG9zdCBlbGVtZW50
cyBhcmUgY2hhbmdlZCwKKyAgICAgICAgLSBBbnkgaW5zZXJ0aW9uIHBvaW50IGlzIGluc2VydGVk
IHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgc2hhZG93IHRyZWUsCisgICAgICAgIC0gQHNlbGVjdCBh
dHRyaWJ1dGUgb2YgPGNvbnRlbnQ+IGlzIG1vZGlmaWVkIGFuZAorICAgICAgICAtIE5ldyBTaGFk
b3dSb290IGlzIGFkZGVkIHRvIHRoZSBzaGFkb3cgdHJlZS4KKworICAgICAgICBOb3RlIHRoYXQg
dGhlIHZhbGlkaXR5IG9mIHRoZSBkaXN0cmlidXRpb24gaXMgdHJhY2tlZCBhbmQKKyAgICAgICAg
dW5uZWNlc3NhcnkgZGlzdHJpYnV0aW9uIHJlcXVlc3RzIGFyZSBpZ25vcmVkLgorCisgICAgICAg
IEFmdGVyIHRoZSBpbnZhbGlkYXRpb24sIHRoYXQgc2hhZG93IHN1YnRyZWVzIGFyZSBkZXRhY2hl
ZCBvbmNlIGFuZAorICAgICAgICByZXF1ZXN0ICB0aGVpciAgcmUtYXR0YWNobWVudCAgdGhyb3Vn
aCAgdGhlICBzdHlsZSAgcmVjYWxjdWxhdGlvbi4KKyAgICAgICAgVGhlbiwgIG9uIHRoZSAgcmVz
cG9uZGluZyAgc3R5bGUgcmVjYWxjdWxhdGlvbiAgYW5kIGF0dGFjaCgpLCAgbmV3CisgICAgICAg
IGRpc3RyaWJ1dGlvbiB3aWxsIGJlIGNvbXB1dGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6On5FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgICogZG9tL0VsZW1lbnRTaGFkb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6fkVsZW1lbnRTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dSb290cyk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjphdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudFNoYWRvdzo6cmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRv
dzo6ZW5zdXJlRGlzdHJpYnV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6
OmludmFsaWRhdGVEaXN0cmlidXRpb24pOgorICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93Lmg6
CisgICAgICAgIChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKiBkb20vTm9kZVJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ0NvbnRleHQ6Ok5vZGVS
ZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSZW5kZXJlckZhY3Rvcnk6
OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQpOgorICAgICAgICAqIGRvbS9Ob2RlUmVuZGVyaW5nQ29u
dGV4dC5oOgorICAgICAgICAoTm9kZVJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIGRvbS9T
aGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnNldEFwcGx5QXV0
aG9yU3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmF0dGFjaCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAgICAgICAgKFNoYWRvd1Jvb3Qp
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgICog
aHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWYWxpZGF0aW9u
TWVzc2FnZTo6YnVpbGRCdWJibGVUcmVlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50
RGlzdHJpYnV0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9yOjpD
b250ZW50RGlzdHJpYnV0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9y
Ojp+Q29udGVudERpc3RyaWJ1dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmli
dXRvcjo6ZmluZEluc2VydGlvblBvaW50Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRE
aXN0cmlidXRvcjo6ZGlzdHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGlzdHJp
YnV0b3I6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9y
OjpmaW5pc2hJbml2YWxpZGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmli
dXRvcjo6ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGVTaGFkb3dDaGlsZHJlblRvKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0ZURpc3RyaWJ1dGlvbkluKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnREaXN0cmlidXRvcjo6bmVlZHNJbnZhbGlkYXRpb24pOgorICAgICAgICAoQ29udGVu
dERpc3RyaWJ1dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmlidXRvcjo6bmVl
ZHNEaXN0cmlidXRpb24pOgorICAgICAgICAqIGh0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29udGVudEVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6YXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c2VydGlvblBvaW50OjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0aW9uUG9pbnQ6
Om5leHRUbyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6cHJldmlvdXNUbyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAg
ICAgICAgKiBodG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXJ0aW9uUG9pbnQ6OnNldERpc3RyaWJ1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRpb25Qb2ludDo6Y2xlYXJEaXN0cmlidXRpb24pOgorICAgICAgICAoSW5zZXJ0aW9uUG9pbnQp
OgorCiAyMDEyLTA1LTI4ICBMdWtlIE1hY3BoZXJzb24gIDxtYWNwaGVyc29uQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBNYWtlIENTU1BhcnNlcjo6ZmlsdGVyZWRQcm9wZXJ0aWVzKCkgTyhuKSBp
bnN0ZWFkIG9mIE8obl4yKSBhbmQgaW1wcm92ZSByZWFkYWJpbGl0eS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAppbmRleCAyNGExMTNmMWQxMzRhNThiNjdkNTQ3ZTY5MWZjNWM2OGEyNDc1MDY4Li4wZGY4
NzdmMjg0Y2ZlNmY0OGFmN2Q1NDk5MmJiZWZhYWM3NmFkNTFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC0xMzIsOCArMTMyLDEwIEBAIEVsZW1lbnQ6On5FbGVtZW50KCkKICAgICB9CiAjZW5k
aWYKIAotICAgIGlmIChzaGFkb3coKSkKKyAgICBpZiAoRWxlbWVudFNoYWRvdyogZWxlbWVudFNo
YWRvdyA9IHNoYWRvdygpKSB7CisgICAgICAgIGVsZW1lbnRTaGFkb3ctPnJlbW92ZUFsbFNoYWRv
d1Jvb3RzKCk7CiAgICAgICAgIHJhcmVEYXRhKCktPm1fc2hhZG93LmNsZWFyKCk7CisgICAgfQog
CiAgICAgaWYgKGhhc0F0dHJMaXN0KCkpIHsKICAgICAgICAgQVNTRVJUKG1fYXR0cmlidXRlRGF0
YSk7CkBAIC0xMzIyLDcgKzEzMjQsNyBAQCB2b2lkIEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChi
b29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZgogICAgICAg
ICBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXModGhpcywgcmVuZGVyU3R5bGUoKSwgZmFsc2Us
IGJlZm9yZUNoYW5nZSwgYWZ0ZXJDaGFuZ2UsIGNoaWxkQ291bnREZWx0YSk7CiAKICAgICBpZiAo
RWxlbWVudFNoYWRvdyAqIHNoYWRvdyA9IHRoaXMtPnNoYWRvdygpKQotICAgICAgICBzaGFkb3ct
Pmhvc3RDaGlsZHJlbkNoYW5nZWQoKTsKKyAgICAgICAgc2hhZG93LT5pbnZhbGlkYXRlRGlzdHJp
YnV0aW9uKCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCmluZGV4IGJkZjMxNGJmOGU0ZjljYjg2MTFjY2M2
NjQ0OTlhY2JlYWIwNTE0NmMuLjVhZTc4OWNlNTA5ZmNmMWJiNjgyNzk1NzU5MDE2ZGM3Zjg0OWVh
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAg
RWxlbWVudFNoYWRvdzo6RWxlbWVudFNoYWRvdygpCiAKIEVsZW1lbnRTaGFkb3c6On5FbGVtZW50
U2hhZG93KCkKIHsKLSAgICByZW1vdmVBbGxTaGFkb3dSb290cygpOworICAgIEFTU0VSVChtX3No
YWRvd1Jvb3RzLmlzRW1wdHkoKSk7CiB9CiAKIHN0YXRpYyBib29sIHZhbGlkYXRlU2hhZG93Um9v
dChEb2N1bWVudCogZG9jdW1lbnQsIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtNzQsMTUgKzc0LDEzIEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6YWRkU2hhZG93
Um9vdChFbGVtZW50KiBzaGFkb3dIb3N0LCBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IHNoCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHNoYWRvd1Jvb3QtPnNldEhvc3Qoc2hhZG93SG9zdCk7CisgICAg
bV9zaGFkb3dSb290cy5wdXNoKHNoYWRvd1Jvb3QuZ2V0KCkpOworICAgIGludmFsaWRhdGVEaXN0
cmlidXRpb24oc2hhZG93SG9zdCk7CiAgICAgQ2hpbGROb2RlSW5zZXJ0aW9uTm90aWZpZXIoc2hh
ZG93SG9zdCkubm90aWZ5KHNoYWRvd1Jvb3QuZ2V0KCkpOwogCi0gICAgaWYgKHNoYWRvd0hvc3Qt
PmF0dGFjaGVkKCkpIHsKLSAgICAgICAgc2hhZG93Um9vdC0+bGF6eUF0dGFjaCgpOwotICAgICAg
ICBkZXRhY2goKTsKLSAgICAgICAgc2hhZG93SG9zdC0+ZGV0YWNoQ2hpbGRyZW4oKTsKLSAgICB9
CisgICAgaWYgKHNoYWRvd0hvc3QtPmF0dGFjaGVkKCkgJiYgIXNoYWRvd1Jvb3QtPmF0dGFjaGVk
KCkpCisgICAgICAgIHNoYWRvd1Jvb3QtPmF0dGFjaCgpOwogCi0gICAgbV9zaGFkb3dSb290cy5w
dXNoKHNoYWRvd1Jvb3QuZ2V0KCkpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UHVzaFNoYWRvd1Jvb3Qoc2hhZG93SG9zdCwgc2hhZG93Um9vdC5nZXQoKSk7CiB9CiAKQEAgLTkx
LDEzICs4OSwxNCBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlbW92ZUFsbFNoYWRvd1Jvb3RzKCkK
ICAgICAvLyBEb250IHByb3RlY3QgdGhpcyByZWYgY291bnQuCiAgICAgRWxlbWVudCogc2hhZG93
SG9zdCA9IGhvc3QoKTsKIAotICAgIHdoaWxlIChSZWZQdHI8U2hhZG93Um9vdD4gb2xkUm9vdCA9
IG1fc2hhZG93Um9vdHMucmVtb3ZlSGVhZCgpKSB7CisgICAgd2hpbGUgKFJlZlB0cjxTaGFkb3dS
b290PiBvbGRSb290ID0gbV9zaGFkb3dSb290cy5oZWFkKCkpIHsKICAgICAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsUG9wU2hhZG93Um9vdChzaGFkb3dIb3N0LCBvbGRSb290Lmdl
dCgpKTsKICAgICAgICAgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKS0+cmVtb3ZlRm9jdXNlZE5vZGVP
ZlN1YnRyZWUob2xkUm9vdC5nZXQoKSk7CiAKICAgICAgICAgaWYgKG9sZFJvb3QtPmF0dGFjaGVk
KCkpCiAgICAgICAgICAgICBvbGRSb290LT5kZXRhY2goKTsKIAorICAgICAgICBtX3NoYWRvd1Jv
b3RzLnJlbW92ZUhlYWQoKTsKICAgICAgICAgb2xkUm9vdC0+c2V0SG9zdCgwKTsKICAgICAgICAg
b2xkUm9vdC0+c2V0UHJldigwKTsKICAgICAgICAgb2xkUm9vdC0+c2V0TmV4dCgwKTsKQEAgLTEw
NSwyMiArMTA0LDE2IEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6cmVtb3ZlQWxsU2hhZG93Um9vdHMo
KQogICAgICAgICBDaGlsZE5vZGVSZW1vdmFsTm90aWZpZXIoc2hhZG93SG9zdCkubm90aWZ5KG9s
ZFJvb3QuZ2V0KCkpOwogICAgIH0KIAotICAgIGlmIChzaGFkb3dIb3N0LT5hdHRhY2hlZCgpKQot
ICAgICAgICBzaGFkb3dIb3N0LT5hdHRhY2hDaGlsZHJlbkxhemlseSgpOworICAgIGludmFsaWRh
dGVEaXN0cmlidXRpb24oc2hhZG93SG9zdCk7CiB9CiAKIHZvaWQgRWxlbWVudFNoYWRvdzo6YXR0
YWNoKCkKIHsKLSAgICAvLyBUaGUgcG9vbCBub2RlcyBhcmUgcG9wdWxhdGVkIGxhemlseSBpbgot
ICAgIC8vIGVuc3VyZURpc3RyaWJ1dG9yKCksIGFuZCBoZXJlIHdlIGp1c3QgZW5zdXJlIHRoYXQg
aXQgaXMgaW4gY2xlYW4gc3RhdGUuCi0gICAgQVNTRVJUKCFkaXN0cmlidXRvcigpLnBvb2xJc1Jl
YWR5KCkpOwotCi0gICAgZGlzdHJpYnV0b3IoKS53aWxsRGlzdHJpYnV0ZSgpOworICAgIGVuc3Vy
ZURpc3RyaWJ1dGlvbigpOwogICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hh
ZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKICAgICAg
ICAgaWYgKCFyb290LT5hdHRhY2hlZCgpKQogICAgICAgICAgICAgcm9vdC0+YXR0YWNoKCk7CiAg
ICAgfQotICAgIGRpc3RyaWJ1dG9yKCkuZGlkRGlzdHJpYnV0ZSgpOwogfQogCiB2b2lkIEVsZW1l
bnRTaGFkb3c6OmRldGFjaCgpCkBAIC0xNjcsNjMgKzE2MCw0NiBAQCBib29sIEVsZW1lbnRTaGFk
b3c6Om5lZWRzU3R5bGVSZWNhbGMoKQogCiB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlY2FsY1N0eWxl
KE5vZGU6OlN0eWxlQ2hhbmdlIGNoYW5nZSkKIHsKLSAgICBTaGFkb3dSb290KiB5b3VuZ2VzdCA9
IHlvdW5nZXN0U2hhZG93Um9vdCgpOwotICAgIGlmICgheW91bmdlc3QpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChuZWVkc1JlZGlzdHJpYnV0aW5nKCkpCi0gICAgICAgIHJlYXR0YWNoSG9z
dENoaWxkcmVuQW5kU2hhZG93KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIgPSB5b3VuZ2VzdC0+ZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpOwor
ICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyBy
b290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKKyAgICAgICAgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciA9IHJvb3QtPmRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXIoKTsKKyAgICAg
ICAgc3R5bGVSZXNvbHZlci0+cHVzaFBhcmVudFNoYWRvd1Jvb3Qocm9vdCk7CiAKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+cHVzaFBhcmVudFNoYWRvd1Jvb3QoeW91bmdlc3QpOwotICAgICAgICBm
b3IgKE5vZGUqIG4gPSB5b3VuZ2VzdC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxp
bmcoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG4gPSByb290LT5maXJzdENoaWxkKCk7IG47IG4g
PSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgp
KQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+cmVjYWxjU3R5bGUo
Y2hhbmdlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSkKICAgICAgICAg
ICAgICAgICB0b1RleHQobiktPnJlY2FsY1RleHRTdHlsZShjaGFuZ2UpOwogICAgICAgICB9Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnBvcFBhcmVudFNoYWRvd1Jvb3QoeW91bmdlc3QpOwotICAg
IH0KIAotICAgIG1fZGlzdHJpYnV0b3IuY2xlYXJOZWVkc1JlZGlzdHJpYnV0aW5nKCk7Ci0gICAg
Zm9yIChTaGFkb3dSb290KiByb290ID0geW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3Qg
PSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgICAgICBzdHlsZVJlc29sdmVyLT5wb3BQ
YXJlbnRTaGFkb3dSb290KHJvb3QpOwogICAgICAgICByb290LT5jbGVhck5lZWRzU3R5bGVSZWNh
bGMoKTsKICAgICAgICAgcm9vdC0+Y2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9
CiB9CiAKLWJvb2wgRWxlbWVudFNoYWRvdzo6bmVlZHNSZWRpc3RyaWJ1dGluZygpCit2b2lkIEVs
ZW1lbnRTaGFkb3c6OmVuc3VyZURpc3RyaWJ1dGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fZGlzdHJp
YnV0b3IubmVlZHNSZWRpc3RyaWJ1dGluZygpIHx8ICh5b3VuZ2VzdFNoYWRvd1Jvb3QoKSAmJiB5
b3VuZ2VzdFNoYWRvd1Jvb3QoKS0+aGFzSW5zZXJ0aW9uUG9pbnQoKSk7Ci19Ci0KLXZvaWQgRWxl
bWVudFNoYWRvdzo6aG9zdENoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgQVNTRVJUKHlvdW5nZXN0
U2hhZG93Um9vdCgpKTsKLQotICAgIGlmICgheW91bmdlc3RTaGFkb3dSb290KCktPmhhc0luc2Vy
dGlvblBvaW50KCkpCisgICAgaWYgKCFtX2Rpc3RyaWJ1dG9yLm5lZWRzRGlzdHJpYnV0aW9uKCkp
CiAgICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoaXMgcmVzdWx0cyBpbiBmb3JjZWQgZGV0YWNo
aW5nL2F0dGFjaGluZyBvZiB0aGUgc2hhZG93IHJlbmRlciB0cmVlLiBTZWUgU2hhZG93Um9vdDo6
cmVjYWxjU3R5bGUoKS4KLSAgICBzZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7CisgICAgbV9kaXN0
cmlidXRvci5kaXN0cmlidXRlKGhvc3QoKSk7CiB9CiAKLXZvaWQgRWxlbWVudFNoYWRvdzo6c2V0
TmVlZHNSZWRpc3RyaWJ1dGluZygpCit2b2lkIEVsZW1lbnRTaGFkb3c6OmludmFsaWRhdGVEaXN0
cmlidXRpb24oKQogewotICAgIG1fZGlzdHJpYnV0b3Iuc2V0TmVlZHNSZWRpc3RyaWJ1dGluZygp
OwotICAgIGhvc3QoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGludmFsaWRhdGVEaXN0
cmlidXRpb24oaG9zdCgpKTsKIH0KIAotdm9pZCBFbGVtZW50U2hhZG93OjpyZWF0dGFjaEhvc3RD
aGlsZHJlbkFuZFNoYWRvdygpCit2b2lkIEVsZW1lbnRTaGFkb3c6OmludmFsaWRhdGVEaXN0cmli
dXRpb24oRWxlbWVudCogaG9zdCkKIHsKLSAgICBBU1NFUlQoeW91bmdlc3RTaGFkb3dSb290KCkp
OworICAgIGlmICghbV9kaXN0cmlidXRvci5uZWVkc0ludmFsaWRhdGlvbigpKQorICAgICAgICBy
ZXR1cm47CisgICAgYm9vbCBuZWVkc1JlYXR0YWNoID0gbV9kaXN0cmlidXRvci5pbnZhbGlkYXRl
KGhvc3QpOworICAgIGlmIChuZWVkc1JlYXR0YWNoICYmIGhvc3QtPmF0dGFjaGVkKCkpIHsKKyAg
ICAgICAgaG9zdC0+ZGV0YWNoKCk7CisgICAgICAgIGhvc3QtPmxhenlBdHRhY2goTm9kZTo6RG9O
b3RTZXRBdHRhY2hlZCk7CisgICAgfQogCi0gICAgRWxlbWVudCogaG9zdE5vZGUgPSB5b3VuZ2Vz
dFNoYWRvd1Jvb3QoKS0+aG9zdCgpOwotICAgIGhvc3ROb2RlLT5kZXRhY2hDaGlsZHJlbklmTmVl
ZGVkKCk7Ci0gICAgZGV0YWNoKCk7Ci0gICAgYXR0YWNoKCk7Ci0gICAgaG9zdE5vZGUtPmF0dGFj
aENoaWxkcmVuSWZOZWVkZWQoKTsKKyAgICBtX2Rpc3RyaWJ1dG9yLmZpbmlzaEluaXZhbGlkYXRp
b24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50U2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCmlu
ZGV4IGI2MjExMTg1YjQ3ZDcyZmRkZTNmZDBjZTYzYTM4YWFmNzA5YTk4ZjIuLjEzZGUxYzAyMTBk
NTY3NDI2ODNjNGZlOTNlMjYzYjMyOTc2N2M5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50U2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFk
b3cuaApAQCAtNTIsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgU2hhZG93Um9vdCogeW91bmdlc3RT
aGFkb3dSb290KCkgY29uc3Q7CiAgICAgU2hhZG93Um9vdCogb2xkZXN0U2hhZG93Um9vdCgpIGNv
bnN0OwogCisgICAgdm9pZCByZW1vdmVBbGxTaGFkb3dSb290cygpOwogICAgIHZvaWQgYWRkU2hh
ZG93Um9vdChFbGVtZW50KiBzaGFkb3dIb3N0LCBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+LCBFeGNl
cHRpb25Db2RlJik7CiAKICAgICB2b2lkIGF0dGFjaCgpOwpAQCAtNjAsMTggKzYxLDE3IEBAIHB1
YmxpYzoKICAgICBib29sIGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpOwogICAgIGJvb2wgbmVlZHNT
dHlsZVJlY2FsYygpOwogICAgIHZvaWQgcmVjYWxjU3R5bGUoTm9kZTo6U3R5bGVDaGFuZ2UpOwot
ICAgIHZvaWQgc2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpOwotICAgIGJvb2wgbmVlZHNSZWRpc3Ry
aWJ1dGluZygpOwotICAgIHZvaWQgaG9zdENoaWxkcmVuQ2hhbmdlZCgpOwogCisgICAgdm9pZCBl
bnN1cmVEaXN0cmlidXRpb24oKTsKKyAgICB2b2lkIGludmFsaWRhdGVEaXN0cmlidXRpb24oKTsK
KyAKICAgICBJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSopIGNv
bnN0OwogCiAgICAgQ29udGVudERpc3RyaWJ1dG9yJiBkaXN0cmlidXRvcigpOwogICAgIGNvbnN0
IENvbnRlbnREaXN0cmlidXRvciYgZGlzdHJpYnV0b3IoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAg
ICB2b2lkIHJlbW92ZUFsbFNoYWRvd1Jvb3RzKCk7Ci0gICAgdm9pZCByZWF0dGFjaEhvc3RDaGls
ZHJlbkFuZFNoYWRvdygpOworICAgIHZvaWQgaW52YWxpZGF0ZURpc3RyaWJ1dGlvbihFbGVtZW50
KiBob3N0KTsKIAogICAgIERvdWJseUxpbmtlZExpc3Q8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290
czsKICAgICBDb250ZW50RGlzdHJpYnV0b3IgbV9kaXN0cmlidXRvcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGNiYWJhNDgzOGUyMGI3OWVmZTQ4
MjRlNzZiNGQ4YjU3Mzg1ZDU0YmUuLjdmNzBlN2MwZmYyMGMwMzRiODViNWFjOGFlMjY5M2ZhNjZm
OTM1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmNwcApA
QCAtNzcsNiArNzcsOCBAQCBOb2RlUmVuZGVyaW5nQ29udGV4dDo6Tm9kZVJlbmRlcmluZ0NvbnRl
eHQoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1fdmlzdWFsUGFyZW50U2hhZG93ID0gdG9TaGFk
b3dSb290KHBhcmVudCktPm93bmVyKCk7CiAKICAgICAgICAgaWYgKG1fdmlzdWFsUGFyZW50U2hh
ZG93KSB7CisgICAgICAgICAgICBtX3Zpc3VhbFBhcmVudFNoYWRvdy0+ZW5zdXJlRGlzdHJpYnV0
aW9uKCk7CisKICAgICAgICAgICAgIGlmICgobV9pbnNlcnRpb25Qb2ludCA9IG1fdmlzdWFsUGFy
ZW50U2hhZG93LT5pbnNlcnRpb25Qb2ludEZvcihtX25vZGUpKSkgewogICAgICAgICAgICAgICAg
IGlmIChtX2luc2VydGlvblBvaW50LT5zaGFkb3dSb290KCktPmlzVXNlZEZvclJlbmRlcmluZygp
KSB7CiAgICAgICAgICAgICAgICAgICAgIG1fcGhhc2UgPSBBdHRhY2hpbmdEaXN0cmlidXRlZDsK
QEAgLTkxLDcgKzkzLDEwIEBAIE5vZGVSZW5kZXJpbmdDb250ZXh0OjpOb2RlUmVuZGVyaW5nQ29u
dGV4dChOb2RlKiBub2RlKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzU2hhZG93Qm91bmRh
cnkocGFyZW50KSkgewotICAgICAgICAgICAgaWYgKCFwYXJlbnQtPnNoYWRvd1Jvb3QoKS0+aXNV
c2VkRm9yUmVuZGVyaW5nKCkpIHsKKyAgICAgICAgICAgIFNoYWRvd1Jvb3QqIHBhcmVudFNoYWRv
d1Jvb3QgPSBwYXJlbnQtPnNoYWRvd1Jvb3QoKTsKKyAgICAgICAgICAgIHBhcmVudFNoYWRvd1Jv
b3QtPm93bmVyKCktPmVuc3VyZURpc3RyaWJ1dGlvbigpOworCisgICAgICAgICAgICBpZiAoIXBh
cmVudFNoYWRvd1Jvb3QtPmlzVXNlZEZvclJlbmRlcmluZygpKSB7CiAgICAgICAgICAgICAgICAg
bV9waGFzZSA9IEF0dGFjaGluZ05vdERpc3RyaWJ1dGVkOwogICAgICAgICAgICAgICAgIG1fcGFy
ZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlID0gcGFyZW50OwogICAgICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTI4NSwxMiArMjkwLDYgQEAgUmVuZGVyT2JqZWN0KiBOb2RlUmVuZGVyaW5nQ29u
dGV4dDo6cGFyZW50UmVuZGVyZXIoKSBjb25zdAogICAgIHJldHVybiBtX3BhcmVudE5vZGVGb3JS
ZW5kZXJpbmdBbmRTdHlsZSA/IG1fcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlLT5yZW5k
ZXJlcigpIDogMDsKIH0KIAotdm9pZCBOb2RlUmVuZGVyaW5nQ29udGV4dDo6aG9zdENoaWxkcmVu
Q2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fcGhhc2UgPT0gQXR0YWNoaW5nTm90RGlzdHJpYnV0ZWQg
JiYgbV92aXN1YWxQYXJlbnRTaGFkb3cpCi0gICAgICAgIG1fdmlzdWFsUGFyZW50U2hhZG93LT5o
b3N0Q2hpbGRyZW5DaGFuZ2VkKCk7Ci19Ci0KIGJvb2wgTm9kZVJlbmRlcmluZ0NvbnRleHQ6OnNo
b3VsZENyZWF0ZVJlbmRlcmVyKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9waGFzZSAhPSBDYWxj
dWxhdGluZyk7CkBAIC0zNjYsOSArMzY1LDYgQEAgdm9pZCBOb2RlUmVuZGVyZXJGYWN0b3J5Ojpj
cmVhdGVSZW5kZXJlcklmTmVlZGVkKCkKICAgICBBU1NFUlQoIW5vZGUtPnJlbmRlcmVyKCkpOwog
ICAgIEFTU0VSVChkb2N1bWVudC0+c2hvdWxkQ3JlYXRlUmVuZGVyZXJzKCkpOwogCi0gICAgLy8g
RklYTUU6IFRoaXMgc2lkZSBlZmZlY3Qgc2hvdWxkIGJlIHZpc2libGUgZnJvbSBhdHRhY2goKSBj
b2RlLgotICAgIG1fY29udGV4dC5ob3N0Q2hpbGRyZW5DaGFuZ2VkKCk7Ci0KICAgICBpZiAoIW1f
Y29udGV4dC5zaG91bGRDcmVhdGVSZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggMWQzZGFmM2ZjNTQyNjdk
M2I0N2NkYTFiYjkxNzFlMmFhMjFhMzlhNi4uN2IxNGUwM2VkZDlmMTFmOWFlMGI0ZDMwOTYyYTU0
NTI2OTFmOWVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmgK
QEAgLTYwLDggKzYwLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBzaG91bGRDcmVhdGVSZW5kZXJl
cigpIGNvbnN0OwogCi0gICAgdm9pZCBob3N0Q2hpbGRyZW5DaGFuZ2VkKCk7Ci0KICAgICBib29s
IGlzT25VcHBlckVuY2Fwc3VsYXRpb25Cb3VuZGFyeSgpIGNvbnN0OwogICAgIGJvb2wgaXNPbkVu
Y2Fwc3VsYXRpb25Cb3VuZGFyeSgpIGNvbnN0OwogICAgIGJvb2wgaGFzRmxvd1RocmVhZFBhcmVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Rmxvd1JlbmRlcmVyOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hh
ZG93Um9vdC5jcHAKaW5kZXggM2ViYTgxMmZjMGY4ZDNkZDY5NzliOGE5MzkyNjFmMDRiMTdkZDg4
MC4uNjcyM2EwZjZkZDMwOTVkZDE2ZTk1MzM3YTliYmMyYWI5MDU2OGIxYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmNwcApAQCAtMTg5LDggKzE4OSw3IEBAIHZvaWQgU2hhZG93Um9vdDo6c2V0
QXBwbHlBdXRob3JTdHlsZXMoYm9vbCB2YWx1ZSkKIHsKICAgICBpZiAobV9hcHBseUF1dGhvclN0
eWxlcyAhPSB2YWx1ZSkgewogICAgICAgICBtX2FwcGx5QXV0aG9yU3R5bGVzID0gdmFsdWU7Ci0g
ICAgICAgIGlmIChhdHRhY2hlZCgpICYmIG93bmVyKCkpCi0gICAgICAgICAgICBvd25lcigpLT5z
ZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7CisgICAgICAgIGhvc3QoKS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYygpOwogICAgIH0KIH0KIApAQCAtMTk4LDggKzE5NywxNSBAQCB2b2lkIFNoYWRvd1Jvb3Q6
OmF0dGFjaCgpCiB7CiAgICAgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGRvY3VtZW50
KCktPnN0eWxlUmVzb2x2ZXIoKTsKICAgICBzdHlsZVJlc29sdmVyLT5wdXNoUGFyZW50U2hhZG93
Um9vdCh0aGlzKTsKLSAgICBEb2N1bWVudEZyYWdtZW50OjphdHRhY2goKTsKKyAgICBhdHRhY2hD
aGlsZHJlbklmTmVlZGVkKCk7CisgICAgYXR0YWNoQXNOb2RlKCk7CiAgICAgc3R5bGVSZXNvbHZl
ci0+cG9wUGFyZW50U2hhZG93Um9vdCh0aGlzKTsKIH0KIAordm9pZCBTaGFkb3dSb290OjpjaGls
ZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9k
ZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCit7CisgICAgQ29udGFpbmVyTm9k
ZTo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNo
YW5nZSwgY2hpbGRDb3VudERlbHRhKTsKKyAgICBvd25lcigpLT5pbnZhbGlkYXRlRGlzdHJpYnV0
aW9uKCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCmluZGV4IDE0MTFmYTUyYWNjYTEz
NmVjM2I0MzM3YmE0OTk2MzkyMzY4MTc5NTMuLjBiN2ZmYTVmMmRhOGQ3YTU0NjA4MzYxOTk1Mzkx
YzU4Y2Y4OGQzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaApAQCAtNjAsNyArNjAsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZWNhbGNTaGFkb3dUcmVlU3R5bGUoU3R5bGVDaGFuZ2UpOwogCiAg
ICAgSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50Rm9yKE5vZGUqKSBjb25zdDsKLSAgICB2
b2lkIGhvc3RDaGlsZHJlbkNoYW5nZWQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseUF1dGhv
clN0eWxlcygpIGNvbnN0IE9WRVJSSURFOwogICAgIHZvaWQgc2V0QXBwbHlBdXRob3JTdHlsZXMo
Ym9vbCk7CkBAIC05MSwxMCArOTAsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTaGFkb3dS
b290KERvY3VtZW50Kik7CiAgICAgdmlydHVhbCB+U2hhZG93Um9vdCgpOwotCiAgICAgdmlydHVh
bCBTdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4g
Y2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQo
Tm9kZVR5cGUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBj
aGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGlu
dCBjaGlsZENvdW50RGVsdGEpIE9WRVJSSURFOwogCiAgICAgU2hhZG93Um9vdCogbV9wcmV2Owog
ICAgIFNoYWRvd1Jvb3QqIG1fbmV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuY3BwCmluZGV4IGU1OTljZDE1MTk2NTJhNWFiZmU4ODBlMTY5Mjk1NjZl
ZWU5MjdiNjcuLmEzMTM2NmRlZTJkZWEwZTY5NTBiMTliMjZiNWQxY2Q5NmMxMzUzYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKIAogI2luY2x1
ZGUgIkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKICNpbmNsdWRlICJF
dmVudC5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAKaW5kZXggYTE0NGJh
YjU5MTk3NWIyMzFiYmY3ZjYwZTU2MmViZGNjZjZkZjIzZS4uNDJiY2VkZDJiNjEwNjBhNmM4Zjgz
MzM3ZTFlMjNjNjViODljYmQ2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9WYWxp
ZGF0aW9uTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVz
c2FnZS5jcHAKQEAgLTEzMiw2ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RCdWJibGVQb3Np
dGlvbihjb25zdCBMYXlvdXRSZWN0JiBob3N0UmVjdCwgSFRNTEVsZW1lbnQqIGJ1YmJsZQogdm9p
ZCBWYWxpZGF0aW9uTWVzc2FnZTo6YnVpbGRCdWJibGVUcmVlKFRpbWVyPFZhbGlkYXRpb25NZXNz
YWdlPiopCiB7CiAgICAgSFRNTEVsZW1lbnQqIGhvc3QgPSB0b0hUTUxFbGVtZW50KG1fZWxlbWVu
dCk7CisKICAgICBEb2N1bWVudCogZG9jID0gaG9zdC0+ZG9jdW1lbnQoKTsKICAgICBtX2J1YmJs
ZSA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoZG9jKTsKICAgICBtX2J1YmJsZS0+c2V0U2hhZG93
UHNldWRvSWQoIi13ZWJraXQtdmFsaWRhdGlvbi1idWJibGUiKTsKQEAgLTE0MSw2ICsxNDIsNyBA
QCB2b2lkIFZhbGlkYXRpb25NZXNzYWdlOjpidWlsZEJ1YmJsZVRyZWUoVGltZXI8VmFsaWRhdGlv
bk1lc3NhZ2U+KikKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBob3N0LT5lbnN1cmVT
aGFkb3dSb290KCktPmFwcGVuZENoaWxkKG1fYnViYmxlLmdldCgpLCBlYyk7CiAgICAgQVNTRVJU
KCFlYyk7CisgICAgaG9zdC0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgYWRqdXN0
QnViYmxlUG9zaXRpb24oaG9zdC0+Z2V0UmVjdCgpLCBtX2J1YmJsZS5nZXQoKSk7CiAKICAgICBS
ZWZQdHI8SFRNTERpdkVsZW1lbnQ+IGNsaXBwZXIgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRv
Yyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJp
YnV0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9y
LmNwcAppbmRleCBhZjY1MGEzYmZhNmQxZDAyYThmMDYxODM4Mjc3MzNmZWVlZDM3NWNlLi5iM2Zk
ZDMyYWRhNGE3ZmM0MDJhNWViOTJjNjEwYjMxMDhkNzYyNGMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJDb250ZW50RGlzdHJpYnV0b3IuaCIKIAogI2luY2x1ZGUgIkNvbnRlbnRT
ZWxlY3RvclF1ZXJ5LmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkhU
TUxDb250ZW50RWxlbWVudC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIApAQCAtMzUsNzIg
KzM2LDExMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb250ZW50RGlzdHJpYnV0b3I6OkNv
bnRlbnREaXN0cmlidXRvcigpCi0gICAgOiBtX3BoYXNlKFByZXZlbnRlZCkKLSAgICAsIG1fbmVl
ZHNSZWRpc3RyaWJ1dGluZyhmYWxzZSkKKyAgICA6IG1fdmFsaWRpdHkoVW5kZXRlcm1pbmVkKQog
ewogfQogCiBDb250ZW50RGlzdHJpYnV0b3I6On5Db250ZW50RGlzdHJpYnV0b3IoKQogewotICAg
IEFTU0VSVChtX3Bvb2wuaXNFbXB0eSgpKTsKIH0KIAotdm9pZCBDb250ZW50RGlzdHJpYnV0b3I6
OmRpc3RyaWJ1dGUoSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50LCBDb250ZW50RGlzdHJp
YnV0aW9uKiBkaXN0cmlidXRpb24pCitJbnNlcnRpb25Qb2ludCogQ29udGVudERpc3RyaWJ1dG9y
OjpmaW5kSW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSoga2V5KSBjb25zdAogewotICAgIEFT
U0VSVChtX3BoYXNlID09IFByZXBhcmVkKTsKLSAgICBBU1NFUlQoZGlzdHJpYnV0aW9uLT5pc0Vt
cHR5KCkpOwotCi0gICAgQ29udGVudFNlbGVjdG9yUXVlcnkgcXVlcnkoaW5zZXJ0aW9uUG9pbnQp
OworICAgIHJldHVybiBtX25vZGVUb0luc2VydGlvblBvaW50LmdldChrZXkpOworfQogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bvb2wuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9k
ZSogY2hpbGQgPSBtX3Bvb2xbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghY2hpbGQpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFxdWVyeS5tYXRjaGVzKGNoaWxkKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGRpc3RyaWJ1dGlvbi0+YXBwZW5kKGNoaWxkKTsK
LSAgICAgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5hZGQoY2hpbGQsIGluc2VydGlvblBvaW50
KTsKLSAgICAgICAgbV9wb29sW2ldID0gMDsKK3ZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpkaXN0
cmlidXRlKEVsZW1lbnQqIGhvc3QpCit7CisgICAgQVNTRVJUKG5lZWRzRGlzdHJpYnV0aW9uKCkp
OworICAgIEFTU0VSVChtX25vZGVUb0luc2VydGlvblBvaW50LmlzRW1wdHkoKSk7CisKKyAgICBt
X3ZhbGlkaXR5ID0gVmFsaWQ7CisKKyAgICBDb250ZW50RGlzdHJpYnV0aW9uIHBvb2w7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gaG9zdC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcG9vbC5hcHBlbmQobm9kZSk7CisKKyAgICBmb3IgKFNo
YWRvd1Jvb3QqIHJvb3QgPSBob3N0LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9
IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJv
b3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QpKSB7CisgICAgICAg
ICAgICBpZiAoIWlzSW5zZXJ0aW9uUG9pbnQobm9kZSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBJbnNlcnRpb25Qb2ludCogcG9pbnQgPSB0b0luc2VydGlvblBvaW50
KG5vZGUpOworICAgICAgICAgICAgaWYgKCFwb2ludC0+aXNBY3RpdmUoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFNoYWRvd1Jvb3QqIG9sZGVyID0gcm9vdC0+b2xk
ZXJTaGFkb3dSb290KCk7CisgICAgICAgICAgICBpZiAocG9pbnQtPmRvZXNTZWxlY3RGcm9tSG9z
dENoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhwb2lu
dCwgcG9vbCk7CisgICAgICAgICAgICBlbHNlIGlmIChvbGRlciAmJiAhb2xkZXItPmFzc2lnbmVk
VG8oKSkgeworICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVTaGFkb3dDaGlsZHJlblRvKHBvaW50
LCBvbGRlcik7CisgICAgICAgICAgICAgICAgb2xkZXItPnNldEFzc2lnbmVkVG8ocG9pbnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENvbnRlbnREaXN0cmli
dXRvcjo6Y2xlYXJEaXN0cmlidXRpb24oQ29udGVudERpc3RyaWJ1dGlvbiogbGlzdCkKK2Jvb2wg
Q29udGVudERpc3RyaWJ1dG9yOjppbnZhbGlkYXRlKEVsZW1lbnQqIGhvc3QpCiB7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkKLSAgICAgICAgbV9ub2RlVG9J
bnNlcnRpb25Qb2ludC5yZW1vdmUobGlzdC0+YXQoaSkuZ2V0KCkpOwotICAgIGxpc3QtPmNsZWFy
KCk7Ci19CisgICAgQVNTRVJUKG5lZWRzSW52YWxpZGF0aW9uKCkpOworICAgIGJvb2wgbmVlZHNS
ZWF0dGFjaCA9IChtX3ZhbGlkaXR5ID09IFVuZGV0ZXJtaW5lZCkgfHwgIW1fbm9kZVRvSW5zZXJ0
aW9uUG9pbnQuaXNFbXB0eSgpOworCisgICAgZm9yIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+
eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3Qo
KSkgeworICAgICAgICByb290LT5zZXRBc3NpZ25lZFRvKDApOworCisgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3Qp
KSB7CisgICAgICAgICAgICBpZiAoIWlzSW5zZXJ0aW9uUG9pbnQobm9kZSkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBuZWVkc1JlYXR0YWNoID0gbmVlZHNSZWF0dGFj
aCB8fCB0cnVlOworICAgICAgICAgICAgSW5zZXJ0aW9uUG9pbnQqIHBvaW50ID0gdG9JbnNlcnRp
b25Qb2ludChub2RlKTsKKyAgICAgICAgICAgIHBvaW50LT5jbGVhckRpc3RyaWJ1dGlvbigpOwor
ICAgICAgICB9CisgICAgfQogCi1JbnNlcnRpb25Qb2ludCogQ29udGVudERpc3RyaWJ1dG9yOjpm
aW5kSW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSoga2V5KSBjb25zdAotewotICAgIHJldHVy
biBtX25vZGVUb0luc2VydGlvblBvaW50LmdldChrZXkpOworICAgIG1fdmFsaWRpdHkgPSBJbnZh
bGlkYXRpbmc7CisgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5jbGVhcigpOworICAgIHJldHVy
biBuZWVkc1JlYXR0YWNoOwogfQogCi12b2lkIENvbnRlbnREaXN0cmlidXRvcjo6d2lsbERpc3Ry
aWJ1dGUoKQordm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmZpbmlzaEluaXZhbGlkYXRpb24oKQog
ewotICAgIG1fcGhhc2UgPSBTdGFydGVkOworICAgIEFTU0VSVChtX3ZhbGlkaXR5ID09IEludmFs
aWRhdGluZyk7CisgICAgbV92YWxpZGl0eSA9IEludmFsaWRhdGVkOwogfQogCi12b2lkIENvbnRl
bnREaXN0cmlidXRvcjo6ZGlkRGlzdHJpYnV0ZSgpCit2b2lkIENvbnRlbnREaXN0cmlidXRvcjo6
ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQsIENv
bnRlbnREaXN0cmlidXRpb24mIHBvb2wpCiB7Ci0gICAgQVNTRVJUKG1fcGhhc2UgIT0gUHJldmVu
dGVkKTsKLSAgICBtX3BoYXNlID0gUHJldmVudGVkOwotICAgIG1fcG9vbC5jbGVhcigpOworICAg
IENvbnRlbnREaXN0cmlidXRpb24gZGlzdHJpYnV0aW9uOworICAgIENvbnRlbnRTZWxlY3RvclF1
ZXJ5IHF1ZXJ5KGluc2VydGlvblBvaW50KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cG9vbC5zaXplKCk7ICsraSkgeworICAgICAgICBOb2RlKiBjaGlsZCA9IHBvb2xbaV0uZ2V0KCk7
CisgICAgICAgIGlmICghY2hpbGQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KCFxdWVyeS5tYXRjaGVzKGNoaWxkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGRpc3RyaWJ1dGlvbi5hcHBlbmQoY2hpbGQpOworICAgICAgICBtX25vZGVUb0luc2VydGlvblBv
aW50LmFkZChjaGlsZCwgaW5zZXJ0aW9uUG9pbnQpOworICAgICAgICBwb29sW2ldID0gMDsKKyAg
ICB9CisKKyAgICBpbnNlcnRpb25Qb2ludC0+c2V0RGlzdHJpYnV0aW9uKGRpc3RyaWJ1dGlvbik7
CiB9CiAKLXZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpwcmVwYXJlUG9vbEZvcihFbGVtZW50KiBz
aGFkb3dIb3N0KQordm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGVTaGFkb3dDaGls
ZHJlblRvKEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludCwgU2hhZG93Um9vdCogcm9vdCkK
IHsKLSAgICBpZiAocG9vbElzUmVhZHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENvbnRlbnRE
aXN0cmlidXRpb24gZGlzdHJpYnV0aW9uOworICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3QtPmZp
cnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAg
ZGlzdHJpYnV0aW9uLmFwcGVuZChub2RlKTsKKyAgICAgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2lu
dC5hZGQobm9kZSwgaW5zZXJ0aW9uUG9pbnQpOworICAgIH0KIAotICAgIEFTU0VSVChtX3Bvb2wu
aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoc2hhZG93SG9zdCk7Ci0gICAgQVNTRVJUKG1fcGhhc2Ug
PT0gU3RhcnRlZCk7CisgICAgaW5zZXJ0aW9uUG9pbnQtPnNldERpc3RyaWJ1dGlvbihkaXN0cmli
dXRpb24pOworfQogCi0gICAgbV9waGFzZSA9IFByZXBhcmVkOwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IHNoYWRvd0hvc3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJs
aW5nKCkpCi0gICAgICAgIG1fcG9vbC5hcHBlbmQobm9kZSk7Cit2b2lkIENvbnRlbnREaXN0cmli
dXRvcjo6aW52YWxpZGF0ZURpc3RyaWJ1dGlvbkluKENvbnRlbnREaXN0cmlidXRpb24qIGxpc3Qp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkKKyAgICAg
ICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5yZW1vdmUobGlzdC0+YXQoaSkuZ2V0KCkpOworICAg
IGxpc3QtPmNsZWFyKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
Q29udGVudERpc3RyaWJ1dG9yLmgKaW5kZXggYTIwOTg1NGNlZGQ2ZTliOTkxMjM5MDMxNDBiOTEz
NTdjNDMzOWI2My4uMzA3N2NmZjQxNDUyZmY5YWJkNTRjZmYwZGExMDkzNzY2ZDJmNTA3YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmgKQEAg
LTQ4LDQzICs0OCwzNyBAQCB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBDb250ZW50RGlz
dHJpYnV0aW9uOwogY2xhc3MgQ29udGVudERpc3RyaWJ1dG9yIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDb250ZW50RGlzdHJpYnV0b3IpOwogcHVibGljOgorICAgIGVudW0gVmFsaWRpdHkg
eworICAgICAgICBWYWxpZCA9IDAsCisgICAgICAgIEludmFsaWRhdGVkID0gMSwKKyAgICAgICAg
SW52YWxpZGF0aW5nID0gMiwKKyAgICAgICAgVW5kZXRlcm1pbmVkID0gMworICAgIH07CisKICAg
ICBDb250ZW50RGlzdHJpYnV0b3IoKTsKICAgICB+Q29udGVudERpc3RyaWJ1dG9yKCk7CiAKLSAg
ICB2b2lkIGRpc3RyaWJ1dGUoSW5zZXJ0aW9uUG9pbnQqLCBDb250ZW50RGlzdHJpYnV0aW9uKik7
Ci0gICAgdm9pZCBjbGVhckRpc3RyaWJ1dGlvbihDb250ZW50RGlzdHJpYnV0aW9uKik7CiAgICAg
SW5zZXJ0aW9uUG9pbnQqIGZpbmRJbnNlcnRpb25Qb2ludEZvcihjb25zdCBOb2RlKiBrZXkpIGNv
bnN0OwogCi0gICAgdm9pZCB3aWxsRGlzdHJpYnV0ZSgpOwotICAgIGJvb2wgaW5EaXN0cmlidXRp
b24oKSBjb25zdDsKLSAgICB2b2lkIGRpZERpc3RyaWJ1dGUoKTsKKyAgICB2b2lkIGRpc3RyaWJ1
dGUoRWxlbWVudCogaG9zdCk7CisgICAgYm9vbCBpbnZhbGlkYXRlKEVsZW1lbnQqIGhvc3QpOwor
ICAgIHZvaWQgZmluaXNoSW5pdmFsaWRhdGlvbigpOworICAgIGJvb2wgbmVlZHNEaXN0cmlidXRp
b24oKSBjb25zdDsKKyAgICBib29sIG5lZWRzSW52YWxpZGF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV92YWxpZGl0eSAhPSBJbnZhbGlkYXRlZDsgfQogCi0gICAgdm9pZCBwcmVwYXJlUG9vbEZvcihF
bGVtZW50KiBzaGFkb3dIb3N0KTsKLSAgICBib29sIHBvb2xJc1JlYWR5KCkgY29uc3Q7Ci0gICAg
Ym9vbCBuZWVkc1JlZGlzdHJpYnV0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1JlZGlzdHJp
YnV0aW5nOyB9Ci0gICAgdm9pZCBzZXROZWVkc1JlZGlzdHJpYnV0aW5nKCkgeyBtX25lZWRzUmVk
aXN0cmlidXRpbmcgPSB0cnVlOyB9Ci0gICAgdm9pZCBjbGVhck5lZWRzUmVkaXN0cmlidXRpbmco
KSB7IG1fbmVlZHNSZWRpc3RyaWJ1dGluZyA9IGZhbHNlOyB9Ci1wcml2YXRlOgotICAgIGVudW0g
RGlzdHJpYnV0aW9uUGhhc2UgewotICAgICAgICBQcmV2ZW50ZWQsCi0gICAgICAgIFN0YXJ0ZWQs
Ci0gICAgICAgIFByZXBhcmVkLAotICAgIH07CisgICAgdm9pZCBkaXN0cmlidXRlU2VsZWN0aW9u
c1RvKEluc2VydGlvblBvaW50KiwgQ29udGVudERpc3RyaWJ1dGlvbiYgcG9vbCk7CisgICAgdm9p
ZCBkaXN0cmlidXRlU2hhZG93Q2hpbGRyZW5UbyhJbnNlcnRpb25Qb2ludCosIFNoYWRvd1Jvb3Qq
KTsKKyAgICB2b2lkIGludmFsaWRhdGVEaXN0cmlidXRpb25JbihDb250ZW50RGlzdHJpYnV0aW9u
Kik7CiAKLSAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9wb29sOwotICAgIERpc3RyaWJ1dGlv
blBoYXNlIG1fcGhhc2U7Citwcml2YXRlOgogICAgIEhhc2hNYXA8Y29uc3QgTm9kZSosIEluc2Vy
dGlvblBvaW50Kj4gbV9ub2RlVG9JbnNlcnRpb25Qb2ludDsKLSAgICBib29sIG1fbmVlZHNSZWRp
c3RyaWJ1dGluZyA6IDE7CisgICAgdW5zaWduZWQgbV92YWxpZGl0eSA6IDI7CiB9OwogCi1pbmxp
bmUgYm9vbCBDb250ZW50RGlzdHJpYnV0b3I6OmluRGlzdHJpYnV0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9waGFzZSAhPSBQcmV2ZW50ZWQ7Ci19Ci0KLWlubGluZSBib29sIENvbnRlbnRE
aXN0cmlidXRvcjo6cG9vbElzUmVhZHkoKSBjb25zdAoraW5saW5lIGJvb2wgQ29udGVudERpc3Ry
aWJ1dG9yOjpuZWVkc0Rpc3RyaWJ1dGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGhhc2Ug
PT0gUHJlcGFyZWQ7CisgICAgLy8gRHVyaW5nIHRoZSBpbnZhbGlkYXRpb24sIHJlLWRpc3RyaWJ1
dGlvbiBzaG91bGQgYmUgc3VwcmVzc2VkLgorICAgIHJldHVybiBtX3ZhbGlkaXR5ICE9IFZhbGlk
ICYmIG1fdmFsaWRpdHkgIT0gSW52YWxpZGF0aW5nOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcAppbmRleCBjNzcwNmNjMTZm
ODY4MjNlMzEzMmUxNzdmZDExNGFiOGFlNTYwYzRlLi4wOGI0NWQ0YWJmNTliZmM3NmU4ZTc0MDAz
YzE3NmRkYzk2MGU0YmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9I
VE1MQ29udGVudEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hU
TUxDb250ZW50RWxlbWVudC5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBIVE1MQ29udGVudEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewogICAg
IGlmIChhdHRyaWJ1dGUubmFtZSgpID09IHNlbGVjdEF0dHIpIHsKICAgICAgICAgaWYgKFNoYWRv
d1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpCi0gICAgICAgICAgICByb290LT5vd25lcigpLT5z
ZXROZWVkc1JlZGlzdHJpYnV0aW5nKCk7CisgICAgICAgICAgICByb290LT5vd25lcigpLT5pbnZh
bGlkYXRlRGlzdHJpYnV0aW9uKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIEluc2VydGlvblBvaW50
OjpwYXJzZUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3BwCmluZGV4IGNiNDIzYmFkMmYwNGQxYTBiODI0M2ZiMTM5
MDM1ZmNkYjZlYjQ0ZTcuLjFjYTFlMzEwMWFkNWE3ODdhYjE5YWZkNWNkMGEyNzNkNzc3MmU1ZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHAKQEAg
LTQ3LDUzICs0NywyMiBAQCBJbnNlcnRpb25Qb2ludDo6fkluc2VydGlvblBvaW50KCkKIAogdm9p
ZCBJbnNlcnRpb25Qb2ludDo6YXR0YWNoKCkKIHsKLSAgICBpZiAoaXNTaGFkb3dCb3VuZGFyeSgp
KSB7Ci0gICAgICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSB0b1NoYWRvd1Jvb3QodHJlZVNjb3BlKCkt
PnJvb3ROb2RlKCkpOwotICAgICAgICBpZiAoZG9lc1NlbGVjdEZyb21Ib3N0Q2hpbGRyZW4oKSkg
ewotICAgICAgICAgICAgZGlzdHJpYnV0ZUhvc3RDaGlsZHJlbihyb290LT5vd25lcigpKTsKLSAg
ICAgICAgICAgIGF0dGFjaERpc3RyaWJ1dGVkTm9kZSgpOwotICAgICAgICB9IGVsc2UgaWYgKCFy
b290LT5vbGRlclNoYWRvd1Jvb3QoKS0+YXNzaWduZWRUbygpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoIXJvb3QtPm9sZGVyU2hhZG93Um9vdCgpLT5hdHRhY2hlZCgpKTsKLSAgICAgICAgICAgIGFz
c2lnblNoYWRvd1Jvb3Qocm9vdC0+b2xkZXJTaGFkb3dSb290KCkpOwotICAgICAgICAgICAgcm9v
dC0+b2xkZXJTaGFkb3dSb290KCktPmF0dGFjaCgpOwotICAgICAgICB9Ci0gICAgfQotCisgICAg
aWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpCisgICAgICAgIHJvb3QtPm93bmVy
KCktPmVuc3VyZURpc3RyaWJ1dGlvbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9k
aXN0cmlidXRpb24uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZGlzdHJpYnV0aW9uLmF0KGkpLT5h
dHRhY2goKTsKICAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7CiB9CiAKIHZvaWQgSW5zZXJ0aW9u
UG9pbnQ6OmRldGFjaCgpCiB7Ci0gICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKTsK
LSAgICBpZiAocm9vdCAmJiBpc0FjdGl2ZSgpKSB7Ci0gICAgICAgIEVsZW1lbnRTaGFkb3cqIHNo
YWRvdyA9IHJvb3QtPm93bmVyKCk7Ci0KLSAgICAgICAgaWYgKGRvZXNTZWxlY3RGcm9tSG9zdENo
aWxkcmVuKCkpCi0gICAgICAgICAgICBjbGVhckRpc3RyaWJ1dGlvbihzaGFkb3cpOwotICAgICAg
ICBlbHNlIGlmIChTaGFkb3dSb290KiBhc3NpZ25lZFNoYWRvd1Jvb3QgPSBhc3NpZ25lZEZyb20o
KSkKLSAgICAgICAgICAgIGNsZWFyQXNzaWdubWVudChhc3NpZ25lZFNoYWRvd1Jvb3QpOwotCi0g
ICAgICAgIC8vIFdoZW4gc2hhZG93IGVsZW1lbnQgaXMgZGV0YWNoZWQsIHNoYWRvdyB0cmVlIHNo
b3VsZCBiZSByZWNyZWF0ZWQgdG8gcmUtY2FsY3VsYXRlIHNlbGVjdG9yIGZvcgotICAgICAgICAv
LyBvdGhlciBpbnNlcnRpb24gcG9pbnRzLgotICAgICAgICBzaGFkb3ctPnNldE5lZWRzUmVkaXN0
cmlidXRpbmcoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9kaXN0cmlidXRpb24uaXNFbXB0eSgp
KTsKKyAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkKKyAgICAgICAgcm9v
dC0+b3duZXIoKS0+ZW5zdXJlRGlzdHJpYnV0aW9uKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2Rpc3RyaWJ1dGlvbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9kaXN0cmlidXRpb24u
YXQoaSktPmRldGFjaCgpOwogICAgIEhUTUxFbGVtZW50OjpkZXRhY2goKTsKIH0KIAotU2hhZG93
Um9vdCogSW5zZXJ0aW9uUG9pbnQ6OmFzc2lnbmVkRnJvbSgpIGNvbnN0Ci17Ci0gICAgTm9kZSog
dHJlZVNjb3BlUm9vdCA9IHRyZWVTY29wZSgpLT5yb290Tm9kZSgpOwotICAgIGlmICghdHJlZVNj
b3BlUm9vdC0+aXNTaGFkb3dSb290KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU2hhZG93
Um9vdCogb2xkZXJTaGFkb3dSb290ID0gdG9TaGFkb3dSb290KHRyZWVTY29wZVJvb3QpLT5vbGRl
clNoYWRvd1Jvb3QoKTsKLSAgICBpZiAob2xkZXJTaGFkb3dSb290ICYmIG9sZGVyU2hhZG93Um9v
dC0+YXNzaWduZWRUbygpID09IHRoaXMpCi0gICAgICAgIHJldHVybiBvbGRlclNoYWRvd1Jvb3Q7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIGJvb2wgSW5zZXJ0aW9uUG9pbnQ6OmlzU2hhZG93Qm91bmRh
cnkoKSBjb25zdAogewogICAgIHJldHVybiB0cmVlU2NvcGUoKS0+cm9vdE5vZGUoKS0+aXNTaGFk
b3dSb290KCkgJiYgaXNBY3RpdmUoKTsKQEAgLTExOCw1OSArODcsNTcgQEAgYm9vbCBJbnNlcnRp
b25Qb2ludDo6cmVuZGVyZXJJc05lZWRlZChjb25zdCBOb2RlUmVuZGVyaW5nQ29udGV4dCYgY29u
dGV4dCkKICAgICByZXR1cm4gIWlzU2hhZG93Qm91bmRhcnkoKSAmJiBIVE1MRWxlbWVudDo6cmVu
ZGVyZXJJc05lZWRlZChjb250ZXh0KTsKIH0KIAotaW5saW5lIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6
OmRpc3RyaWJ1dGVIb3N0Q2hpbGRyZW4oRWxlbWVudFNoYWRvdyogc2hhZG93KQorTm9kZSogSW5z
ZXJ0aW9uUG9pbnQ6Om5leHRUbyhjb25zdCBOb2RlKiBub2RlKSBjb25zdAogewotICAgIGlmICgh
c2hhZG93LT5kaXN0cmlidXRvcigpLmluRGlzdHJpYnV0aW9uKCkpIHsKLSAgICAgICAgLy8gSWYg
Q29udGVudERpc3RyaWJ1dG9yIGlzIG5vdCBpbnQgc2VsZWN0aW5nIHBoYXNlLCBpdCBtZWFucyBJ
bnNlcnRpb25Qb2ludCBpcyBhdHRhY2hlZCBmcm9tCi0gICAgICAgIC8vIG5vbi1FbGVtZW50U2hh
ZG93IG5vZGUuIFRvIHJ1biBkaXN0cmlidXRlIGFsZ29yaXRobSwgd2UgaGF2ZSB0byByZWF0dGFj
aCBFbGVtZW50U2hhZG93LgotICAgICAgICBzaGFkb3ctPnNldE5lZWRzUmVkaXN0cmlidXRpbmco
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNoYWRvdy0+ZGlzdHJpYnV0b3IoKS5w
cmVwYXJlUG9vbEZvcihzaGFkb3ctPmhvc3QoKSk7Ci0gICAgc2hhZG93LT5kaXN0cmlidXRvcigp
LmNsZWFyRGlzdHJpYnV0aW9uKCZtX2Rpc3RyaWJ1dGlvbik7Ci0gICAgc2hhZG93LT5kaXN0cmli
dXRvcigpLmRpc3RyaWJ1dGUodGhpcywgJm1fZGlzdHJpYnV0aW9uKTsKKyAgICBzaXplX3QgaW5k
ZXggPSBtX2Rpc3RyaWJ1dGlvbi5maW5kKG5vZGUpOworICAgIGlmIChpbmRleCA9PSBub3RGb3Vu
ZCB8fCBpbmRleCArIDEgPT0gbV9kaXN0cmlidXRpb24uc2l6ZSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbV9kaXN0cmlidXRpb24uYXQoaW5kZXggKyAxKS5nZXQoKTsKIH0KIAot
aW5saW5lIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6OmNsZWFyRGlzdHJpYnV0aW9uKEVsZW1lbnRTaGFk
b3cqIHNoYWRvdykKK05vZGUqIEluc2VydGlvblBvaW50OjpwcmV2aW91c1RvKGNvbnN0IE5vZGUq
IG5vZGUpIGNvbnN0CiB7Ci0gICAgc2hhZG93LT5kaXN0cmlidXRvcigpLmNsZWFyRGlzdHJpYnV0
aW9uKCZtX2Rpc3RyaWJ1dGlvbik7CisgICAgc2l6ZV90IGluZGV4ID0gbV9kaXN0cmlidXRpb24u
ZmluZChub2RlKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQgfHwgIWluZGV4KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9kaXN0cmlidXRpb24uYXQoaW5kZXggLSAxKS5nZXQo
KTsKIH0KIAotaW5saW5lIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6OmF0dGFjaERpc3RyaWJ1dGVkTm9k
ZSgpCit2b2lkIEluc2VydGlvblBvaW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQ
YXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENv
dW50RGVsdGEpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rpc3RyaWJ1dGlvbi5z
aXplKCk7ICsraSkKLSAgICAgICAgbV9kaXN0cmlidXRpb24uYXQoaSktPmF0dGFjaCgpOworICAg
IEhUTUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFu
Z2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOworICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gc2hhZG93Um9vdCgpKQorICAgICAgICByb290LT5vd25lcigpLT5pbnZhbGlkYXRlRGlz
dHJpYnV0aW9uKCk7CiB9CiAKLWlubGluZSB2b2lkIEluc2VydGlvblBvaW50Ojphc3NpZ25TaGFk
b3dSb290KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCitOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRp
b25SZXF1ZXN0IEluc2VydGlvblBvaW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogaW5z
ZXJ0aW9uUG9pbnQpCiB7Ci0gICAgc2hhZG93Um9vdC0+c2V0QXNzaWduZWRUbyh0aGlzKTsKLSAg
ICBtX2Rpc3RyaWJ1dGlvbi5jbGVhcigpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHNoYWRvd1Jv
b3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIG1fZGlzdHJpYnV0aW9uLmFwcGVuZChub2RlKTsKLX0KKyAgICBIVE1MRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKKyAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9j
dW1lbnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkK
KyAgICAgICAgICAgIHJvb3QtPm93bmVyKCktPmludmFsaWRhdGVEaXN0cmlidXRpb24oKTsKKyAg
ICB9CiAKLWlubGluZSB2b2lkIEluc2VydGlvblBvaW50OjpjbGVhckFzc2lnbm1lbnQoU2hhZG93
Um9vdCogc2hhZG93Um9vdCkKLXsKLSAgICBzaGFkb3dSb290LT5zZXRBc3NpZ25lZFRvKDApOwot
ICAgIG1fZGlzdHJpYnV0aW9uLmNsZWFyKCk7CisgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CiB9
CiAKLU5vZGUqIEluc2VydGlvblBvaW50OjpuZXh0VG8oY29uc3QgTm9kZSogbm9kZSkgY29uc3QK
K3ZvaWQgSW5zZXJ0aW9uUG9pbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlv
blBvaW50KQogewotICAgIHNpemVfdCBpbmRleCA9IG1fZGlzdHJpYnV0aW9uLmZpbmQobm9kZSk7
Ci0gICAgaWYgKGluZGV4ID09IG5vdEZvdW5kIHx8IGluZGV4ICsgMSA9PSBtX2Rpc3RyaWJ1dGlv
bi5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2Rpc3RyaWJ1dGlvbi5h
dChpbmRleCArIDEpLmdldCgpOwotfQorICAgIGlmIChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVu
dCgpKSB7CisgICAgICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICAgICAgaWYg
KCFwYXJlbnQpCisgICAgICAgICAgICBwYXJlbnQgPSBpbnNlcnRpb25Qb2ludDsKKyAgICAgICAg
aWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBwYXJlbnQtPnNoYWRvd1Jvb3QoKSkgeworICAgICAgICAg
ICAgLy8gaG9zdCBjYW4gYmUgbnVsbCB3aGVuIHJlbW92ZWRGcm9tKCkgaXMgY2FsbGVkIGZyb20g
RWxlbWVudFNoYWRvdyBkZXN0cnVjdG9yLgorICAgICAgICAgICAgaWYgKHJvb3QtPmhvc3QoKSkK
KyAgICAgICAgICAgICAgICByb290LT5vd25lcigpLT5pbnZhbGlkYXRlRGlzdHJpYnV0aW9uKCk7
CisgICAgICAgIH0KIAotTm9kZSogSW5zZXJ0aW9uUG9pbnQ6OnByZXZpb3VzVG8oY29uc3QgTm9k
ZSogbm9kZSkgY29uc3QKLXsKLSAgICBzaXplX3QgaW5kZXggPSBtX2Rpc3RyaWJ1dGlvbi5maW5k
KG5vZGUpOwotICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCB8fCAhaW5kZXgpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBtX2Rpc3RyaWJ1dGlvbi5hdChpbmRleCAtIDEpLmdldCgpOwor
ICAgICAgICAvLyBTaW5jZSB0aGlzIGluc2VydGlvbiBwb2ludCBpcyBubyBsb25nZXIgdmlzaWJs
ZSBmcm9tIHRoZSBzaGFkb3cgc3VidHJlZSwgaXQgbmVlZCB0byBjbGVhbiBpdHNlbGYgdXAuCisg
ICAgICAgIGNsZWFyRGlzdHJpYnV0aW9uKCk7CisgICAgfQorCisgICAgSFRNTEVsZW1lbnQ6OnJl
bW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvSW5zZXJ0aW9uUG9pbnQuaAppbmRleCAyOTZmMGIyNTNkNmYzNjI5NmIxMjkwZTFiNjQy
ZmIyNmY3NmViMTc3Li5mNDZkM2Q0ODI3YWUxMjM2NGJhODM1NWU0ODdiNzUyNGM5NmM1NGFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmgKQEAgLTQzLDYg
KzQzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkluc2VydGlvblBvaW50KCk7CiAKICAgICBi
b29sIGhhc0Rpc3RyaWJ1dGlvbigpIGNvbnN0IHsgcmV0dXJuICFtX2Rpc3RyaWJ1dGlvbi5pc0Vt
cHR5KCk7IH0KKyAgICB2b2lkIHNldERpc3RyaWJ1dGlvbihDb250ZW50RGlzdHJpYnV0aW9uJiBk
aXN0cmlidXRpb24pIHsgbV9kaXN0cmlidXRpb24uc3dhcChkaXN0cmlidXRpb24pOyB9CisgICAg
dm9pZCBjbGVhckRpc3RyaWJ1dGlvbigpIHsgbV9kaXN0cmlidXRpb24uY2xlYXIoKTsgfQogICAg
IGJvb2wgaXNTaGFkb3dCb3VuZGFyeSgpIGNvbnN0OwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25z
dDsKIApAQCAtNTIsOSArNTQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNo
KCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotCiAgICAgdmlydHVhbCBib29sIGlzSW5z
ZXJ0aW9uUG9pbnQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9Ci0gICAgU2hhZG93
Um9vdCogYXNzaWduZWRGcm9tKCkgY29uc3Q7CiAKICAgICBzaXplX3QgaW5kZXhPZihOb2RlKiBu
b2RlKSBjb25zdCB7IHJldHVybiBtX2Rpc3RyaWJ1dGlvbi5maW5kKG5vZGUpOyB9CiAgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Rpc3RyaWJ1dGlvbi5zaXplKCk7IH0KQEAgLTY3
LDE1ICs2NywxMSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgSW5zZXJ0aW9uUG9pbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVy
SXNOZWVkZWQoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRleHQmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZv
cmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRv
KENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb20o
Q29udGFpbmVyTm9kZSopIE9WRVJSSURFOwogCiBwcml2YXRlOgotICAgIHZvaWQgZGlzdHJpYnV0
ZUhvc3RDaGlsZHJlbihFbGVtZW50U2hhZG93Kik7Ci0gICAgdm9pZCBjbGVhckRpc3RyaWJ1dGlv
bihFbGVtZW50U2hhZG93Kik7Ci0gICAgdm9pZCBhdHRhY2hEaXN0cmlidXRlZE5vZGUoKTsKLQot
ICAgIHZvaWQgYXNzaWduU2hhZG93Um9vdChTaGFkb3dSb290Kik7Ci0gICAgdm9pZCBjbGVhckFz
c2lnbm1lbnQoU2hhZG93Um9vdCopOwotCiAgICAgQ29udGVudERpc3RyaWJ1dGlvbiBtX2Rpc3Ry
aWJ1dGlvbjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144655</attachid>
            <date>2012-05-29 17:31:49 -0700</date>
            <delta_ts>2012-05-29 20:33:37 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-87223-20120530093148.patch</filename>
            <type>text/plain</type>
            <size>35020</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2NkYmU4NjJkMmNiNWVm
NzlmYzExM2YwNjMyMDE1MjdjNDM3N2IxNy4uMmU5ZGY1ZDIxOWEzOGMzNmVkODg5NDRhNTBmNzBi
MDZkZjg3OWI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMi0wNS0yOCAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
Tm9kZSBkaXN0cmlidXRpb24gc2hvdWxkIGJlIG9ydGhvZ29uYWwgZnJvbSBub2RlIGF0dGFjaG1l
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MjIz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgorCisgICAgICAgIFRoaXMg
Y2hhZ25lIHJlb3JnYW5pemVzIFNoYWRvdyBET00gc3VidHJlZSBkaXN0cmlidXRpb24gaW1wbGVt
ZW50YXRpb24uCisKKyAgICAgICAgT3JpZ2luYWxseSwgaXQgd2FzIGludGVybGVhdmVkIGFjcm9z
cyBhdHRhY2goKSBvZiBzZXZlcmFsIGNsYXNzZXMgbGlrZQorICAgICAgICBJbnNlcnRpb25Qb2lu
dCBhbmQgU2hhZG93Um9vdC4gSXRzIGludmFsaWRhdGlvbiB3YXMgYWxzbyBtaXhlZCBhcyBhIHBh
cnQgb2YKKyAgICAgICAgdGhlIHN0eWxlIHJlY2FsY3VsYXRpb24gYW5kIGRldGFjaCgpLWVzLgor
CisgICAgICAgIFRoaXMgY2hhbmdlIGV4dHJhY3RzIHRoZXNlIGJpdHMgb2YgY29kZSB0byBhIHNl
dCBvZiBDb250ZW50RGlzdHJpYnV0b3IgbWV0aG9kcywgd2hpY2ggYXJlCisgICAgICAgIGZhY2Fk
ZWQgYnkgdHdvIEVsZW1lbnRTaGFkb3cgQVBJLiBGb2xsb3dpbmcgdHdvIEFQSSBhcmUgdGhlIHBy
aW1hcnkgZW50cnkgcG9pbnRzOgorCisgICAgICAgIC0gRWxlbWVudFNoYWRvdzo6ZW5zdXJlRGlz
dHJpYnV0aW9uKCkKKyAgICAgICAgLSBFbGVtZW50U2hhZG93OjppbnZhbGlkYXRlRGlzdHJpYnV0
aW9uKCkKKworICAgICAgICBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9ucyBhcmUgQ29udGVudERp
c3RyaWJ1dG9yOjpkaXN0cmlidXRlKCkgYW5kCisgICAgICAgIENvbnRlbnREaXN0cmlidXRvcjo6
aW52YWxpZGF0ZSgpIHJlc3BlY3RpdmVseS4KKworICAgICAgICBXaGVuIGNsaWVudHMgbmVlZCB0
byB0cmF2ZXJzZSBjb21wb3NlZCB0cmVlLCBiZWZvcmUgYXR0YWNoKCkgZm9yCisgICAgICAgIGV4
YW1wbGUsIHRoZXkgc2hvdWxkIGNhbGwgZW5zdXJlRGlzdHJpYnV0aW9uKCkgdG8gbWFrZSBzdXJl
IHRoYXQKKyAgICAgICAgdGhlIHRyYXZlcnNhbCBkYXRhIHN0cnVjdHVyZSAoInRoZSBkaXN0cmli
dXRpb24iKSBpcyByZWFkeS4gIFdoZW4KKyAgICAgICAgdGhlcmUgaXMgYW55IERPTSBtdXRhdGlv
biB3aGljaCBjYW4gcmVzdWx0IGEgY29tcG9zZWQgdHJlZQorICAgICAgICBtdXRhdGlvbiwgdGhl
biBjbGllbnRzIHNob3VsZCBjYWxsIGludmFsaWRhdGVEaXN0cmlidXRpb24oKSB0bworICAgICAg
ICBtYXJrIHRoZSBkaXN0cmlidXRpb24gYmVpbmcgZGF0ZWQuCisKKyAgICAgICAgSGVyZSBhcmUg
c3VjaCBET00gbXV0YXRpb25zOgorCisgICAgICAgIC0gVGhlIGNoaWxkcmVuIG9mIGFueSBTaGFk
b3dSb290cyBhcmUgY2hhbmdlZCwKKyAgICAgICAgLSBUaGUgY2hpbGRyZW4gb2YgYW55IEluc2Vy
dGlvblBvaW50cyBhcmUgY2hhbmdlZCwKKyAgICAgICAgLSBUaGUgY2hpbGRyZW4gb2YgYW55IGhv
c3QgZWxlbWVudHMgYXJlIGNoYW5nZWQsCisgICAgICAgIC0gQW55IGluc2VydGlvbiBwb2ludCBp
cyBpbnNlcnRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlIHNoYWRvdyB0cmVlLAorICAgICAgICAt
IEBzZWxlY3QgYXR0cmlidXRlIG9mIDxjb250ZW50PiBpcyBtb2RpZmllZCBhbmQKKyAgICAgICAg
LSBOZXcgU2hhZG93Um9vdCBpcyBhZGRlZCB0byB0aGUgc2hhZG93IHRyZWUuCisKKyAgICAgICAg
Tm90ZSB0aGF0IHRoZSB2YWxpZGl0eSBvZiB0aGUgZGlzdHJpYnV0aW9uIGlzIHRyYWNrZWQgYW5k
CisgICAgICAgIHVubmVjZXNzYXJ5IGRpc3RyaWJ1dGlvbiByZXF1ZXN0cyBhcmUgaWdub3JlZC4K
KworICAgICAgICBBZnRlciB0aGUgaW52YWxpZGF0aW9uLCB0aGF0IHNoYWRvdyBzdWJ0cmVlcyBh
cmUgZGV0YWNoZWQgb25jZSBhbmQKKyAgICAgICAgcmVxdWVzdCAgdGhlaXIgIHJlLWF0dGFjaG1l
bnQgIHRocm91Z2ggIHRoZSAgc3R5bGUgIHJlY2FsY3VsYXRpb24uCisgICAgICAgIFRoZW4sICBv
biB0aGUgIHJlc3BvbmRpbmcgIHN0eWxlIHJlY2FsY3VsYXRpb24gIGFuZCBhdHRhY2goKSwgIG5l
dworICAgICAgICBkaXN0cmlidXRpb24gd2lsbCBiZSBjb21wdXRlZC4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp+RWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6On5FbGVtZW50
U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OmFkZFNoYWRvd1Jvb3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6cmVtb3ZlQWxsU2hhZG93Um9vdHMp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6YXR0YWNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRTaGFkb3c6OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRTaGFkb3c6OmVuc3VyZURpc3RyaWJ1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50U2hhZG93OjppbnZhbGlkYXRlRGlzdHJpYnV0aW9uKToKKyAgICAgICAgKiBkb20vRWxlbWVu
dFNoYWRvdy5oOgorICAgICAgICAoRWxlbWVudFNoYWRvdyk6CisgICAgICAgICogZG9tL05vZGVS
ZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSZW5kZXJpbmdDb250
ZXh0OjpOb2RlUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmVuZGVy
ZXJGYWN0b3J5OjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKToKKyAgICAgICAgKiBkb20vTm9kZVJl
bmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKE5vZGVSZW5kZXJpbmdDb250ZXh0KToKKyAgICAg
ICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290Ojpz
ZXRBcHBseUF1dGhvclN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjphdHRh
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAgICAgIChT
aGFkb3dSb290KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgor
ICAgICAgICAqIGh0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VmFsaWRhdGlvbk1lc3NhZ2U6OmJ1aWxkQnViYmxlVHJlZSk6CisgICAgICAgICogaHRtbC9zaGFk
b3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0
cmlidXRvcjo6Q29udGVudERpc3RyaWJ1dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRE
aXN0cmlidXRvcjo6fkNvbnRlbnREaXN0cmlidXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RGlzdHJpYnV0b3I6OmZpbmRJbnNlcnRpb25Qb2ludEZvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudERpc3RyaWJ1dG9yOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRE
aXN0cmlidXRvcjo6ZmluaXNoSW5pdmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGVTZWxlY3Rpb25zVG8pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2hhZG93Q2hpbGRyZW5Ubyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RGlzdHJpYnV0b3I6OmludmFsaWRhdGVEaXN0cmlidXRpb25J
bik6CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RGlzdHJpYnV0b3I6Om5lZWRzSW52YWxpZGF0aW9uKToKKyAgICAg
ICAgKENvbnRlbnREaXN0cmlidXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGlzdHJp
YnV0b3I6Om5lZWRzRGlzdHJpYnV0aW9uKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MQ29u
dGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnRlbnRFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0aW9uUG9pbnQ6OmF0dGFjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRpb25Qb2ludDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2Vy
dGlvblBvaW50OjpuZXh0VG8pOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0aW9uUG9pbnQ6OnBy
ZXZpb3VzVG8pOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0aW9uUG9pbnQ6OmNoaWxkcmVuQ2hh
bmdlZCk6CisgICAgICAgICogaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc2VydGlvblBvaW50OjpzZXREaXN0cmlidXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0aW9uUG9pbnQ6OmNsZWFyRGlzdHJpYnV0aW9uKToKKyAgICAgICAgKEluc2Vy
dGlvblBvaW50KToKKwogMjAxMi0wNS0yOSAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUu
ZHVtZXpAaW50ZWwuY29tPgogCiAgICAgICAgIFNvbWUgQ29udGVudCBTZWN1cml0eSBQb2xpY3kg
Y29uc29sZSBtZXNzYWdlcyBhcmUgbWlzc2luZyBsaW5lIG51bWJlcnMgaW4gSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKaW5kZXggOTdhMjU1YTJmYTc3MzY0MzUwZDVlMGY1ZTVmYjAyMDNhNzA2MTYw
Mi4uMjIyY2E5MDk4NDI1ZWZiNTk2N2RmNzFkNjZhYjgwZTEwODVkZjNkMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcApAQCAtMTMyLDggKzEzMiwxMCBAQCBFbGVtZW50Ojp+RWxlbWVudCgpCiAgICAg
fQogI2VuZGlmCiAKLSAgICBpZiAoc2hhZG93KCkpCisgICAgaWYgKEVsZW1lbnRTaGFkb3cqIGVs
ZW1lbnRTaGFkb3cgPSBzaGFkb3coKSkgeworICAgICAgICBlbGVtZW50U2hhZG93LT5yZW1vdmVB
bGxTaGFkb3dSb290cygpOwogICAgICAgICByYXJlRGF0YSgpLT5tX3NoYWRvdy5jbGVhcigpOwor
ICAgIH0KIAogICAgIGlmIChoYXNBdHRyTGlzdCgpKSB7CiAgICAgICAgIEFTU0VSVChtX2F0dHJp
YnV0ZURhdGEpOwpAQCAtMTMzMCw3ICsxMzMyLDcgQEAgdm9pZCBFbGVtZW50OjpjaGlsZHJlbkNo
YW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWYK
ICAgICAgICAgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKHRoaXMsIHJlbmRlclN0eWxlKCks
IGZhbHNlLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogCiAg
ICAgaWYgKEVsZW1lbnRTaGFkb3cgKiBzaGFkb3cgPSB0aGlzLT5zaGFkb3coKSkKLSAgICAgICAg
c2hhZG93LT5ob3N0Q2hpbGRyZW5DaGFuZ2VkKCk7CisgICAgICAgIHNoYWRvdy0+aW52YWxpZGF0
ZURpc3RyaWJ1dGlvbigpOwogfQogCiB2b2lkIEVsZW1lbnQ6OmJlZ2luUGFyc2luZ0NoaWxkcmVu
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAppbmRleCBiZGYzMTRiZjhlNGY5Y2I4
NjExY2NjNjY0NDk5YWNiZWFiMDUxNDZjLi41YWU3ODljZTUwOWZjZjFiYjY4Mjc5NTc1OTAxNmRj
N2Y4NDllYTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCkBAIC00NCw3ICs0
NCw3IEBAIEVsZW1lbnRTaGFkb3c6OkVsZW1lbnRTaGFkb3coKQogCiBFbGVtZW50U2hhZG93Ojp+
RWxlbWVudFNoYWRvdygpCiB7Ci0gICAgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKKyAgICBBU1NF
UlQobV9zaGFkb3dSb290cy5pc0VtcHR5KCkpOwogfQogCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZVNo
YWRvd1Jvb3QoRG9jdW1lbnQqIGRvY3VtZW50LCBTaGFkb3dSb290KiBzaGFkb3dSb290LCBFeGNl
cHRpb25Db2RlJiBlYykKQEAgLTc0LDE1ICs3NCwxMyBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6OmFk
ZFNoYWRvd1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgUGFzc1JlZlB0cjxTaGFkb3dSb290PiBz
aAogICAgICAgICByZXR1cm47CiAKICAgICBzaGFkb3dSb290LT5zZXRIb3N0KHNoYWRvd0hvc3Qp
OworICAgIG1fc2hhZG93Um9vdHMucHVzaChzaGFkb3dSb290LmdldCgpKTsKKyAgICBpbnZhbGlk
YXRlRGlzdHJpYnV0aW9uKHNoYWRvd0hvc3QpOwogICAgIENoaWxkTm9kZUluc2VydGlvbk5vdGlm
aWVyKHNoYWRvd0hvc3QpLm5vdGlmeShzaGFkb3dSb290LmdldCgpKTsKIAotICAgIGlmIChzaGFk
b3dIb3N0LT5hdHRhY2hlZCgpKSB7Ci0gICAgICAgIHNoYWRvd1Jvb3QtPmxhenlBdHRhY2goKTsK
LSAgICAgICAgZGV0YWNoKCk7Ci0gICAgICAgIHNoYWRvd0hvc3QtPmRldGFjaENoaWxkcmVuKCk7
Ci0gICAgfQorICAgIGlmIChzaGFkb3dIb3N0LT5hdHRhY2hlZCgpICYmICFzaGFkb3dSb290LT5h
dHRhY2hlZCgpKQorICAgICAgICBzaGFkb3dSb290LT5hdHRhY2goKTsKIAotICAgIG1fc2hhZG93
Um9vdHMucHVzaChzaGFkb3dSb290LmdldCgpKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFB1c2hTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwogfQog
CkBAIC05MSwxMyArODksMTQgQEAgdm9pZCBFbGVtZW50U2hhZG93OjpyZW1vdmVBbGxTaGFkb3dS
b290cygpCiAgICAgLy8gRG9udCBwcm90ZWN0IHRoaXMgcmVmIGNvdW50LgogICAgIEVsZW1lbnQq
IHNoYWRvd0hvc3QgPSBob3N0KCk7CiAKLSAgICB3aGlsZSAoUmVmUHRyPFNoYWRvd1Jvb3Q+IG9s
ZFJvb3QgPSBtX3NoYWRvd1Jvb3RzLnJlbW92ZUhlYWQoKSkgeworICAgIHdoaWxlIChSZWZQdHI8
U2hhZG93Um9vdD4gb2xkUm9vdCA9IG1fc2hhZG93Um9vdHMuaGVhZCgpKSB7CiAgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBvcFNoYWRvd1Jvb3Qoc2hhZG93SG9zdCwgb2xk
Um9vdC5nZXQoKSk7CiAgICAgICAgIHNoYWRvd0hvc3QtPmRvY3VtZW50KCktPnJlbW92ZUZvY3Vz
ZWROb2RlT2ZTdWJ0cmVlKG9sZFJvb3QuZ2V0KCkpOwogCiAgICAgICAgIGlmIChvbGRSb290LT5h
dHRhY2hlZCgpKQogICAgICAgICAgICAgb2xkUm9vdC0+ZGV0YWNoKCk7CiAKKyAgICAgICAgbV9z
aGFkb3dSb290cy5yZW1vdmVIZWFkKCk7CiAgICAgICAgIG9sZFJvb3QtPnNldEhvc3QoMCk7CiAg
ICAgICAgIG9sZFJvb3QtPnNldFByZXYoMCk7CiAgICAgICAgIG9sZFJvb3QtPnNldE5leHQoMCk7
CkBAIC0xMDUsMjIgKzEwNCwxNiBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6OnJlbW92ZUFsbFNoYWRv
d1Jvb3RzKCkKICAgICAgICAgQ2hpbGROb2RlUmVtb3ZhbE5vdGlmaWVyKHNoYWRvd0hvc3QpLm5v
dGlmeShvbGRSb290LmdldCgpKTsKICAgICB9CiAKLSAgICBpZiAoc2hhZG93SG9zdC0+YXR0YWNo
ZWQoKSkKLSAgICAgICAgc2hhZG93SG9zdC0+YXR0YWNoQ2hpbGRyZW5MYXppbHkoKTsKKyAgICBp
bnZhbGlkYXRlRGlzdHJpYnV0aW9uKHNoYWRvd0hvc3QpOwogfQogCiB2b2lkIEVsZW1lbnRTaGFk
b3c6OmF0dGFjaCgpCiB7Ci0gICAgLy8gVGhlIHBvb2wgbm9kZXMgYXJlIHBvcHVsYXRlZCBsYXpp
bHkgaW4KLSAgICAvLyBlbnN1cmVEaXN0cmlidXRvcigpLCBhbmQgaGVyZSB3ZSBqdXN0IGVuc3Vy
ZSB0aGF0IGl0IGlzIGluIGNsZWFuIHN0YXRlLgotICAgIEFTU0VSVCghZGlzdHJpYnV0b3IoKS5w
b29sSXNSZWFkeSgpKTsKLQotICAgIGRpc3RyaWJ1dG9yKCkud2lsbERpc3RyaWJ1dGUoKTsKKyAg
ICBlbnN1cmVEaXN0cmlidXRpb24oKTsKICAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3Vu
Z2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7
CiAgICAgICAgIGlmICghcm9vdC0+YXR0YWNoZWQoKSkKICAgICAgICAgICAgIHJvb3QtPmF0dGFj
aCgpOwogICAgIH0KLSAgICBkaXN0cmlidXRvcigpLmRpZERpc3RyaWJ1dGUoKTsKIH0KIAogdm9p
ZCBFbGVtZW50U2hhZG93OjpkZXRhY2goKQpAQCAtMTY3LDYzICsxNjAsNDYgQEAgYm9vbCBFbGVt
ZW50U2hhZG93OjpuZWVkc1N0eWxlUmVjYWxjKCkKIAogdm9pZCBFbGVtZW50U2hhZG93OjpyZWNh
bGNTdHlsZShOb2RlOjpTdHlsZUNoYW5nZSBjaGFuZ2UpCiB7Ci0gICAgU2hhZG93Um9vdCogeW91
bmdlc3QgPSB5b3VuZ2VzdFNoYWRvd1Jvb3QoKTsKLSAgICBpZiAoIXlvdW5nZXN0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobmVlZHNSZWRpc3RyaWJ1dGluZygpKQotICAgICAgICByZWF0
dGFjaEhvc3RDaGlsZHJlbkFuZFNoYWRvdygpOwotICAgIGVsc2UgewotICAgICAgICBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyID0geW91bmdlc3QtPmRvY3VtZW50KCktPnN0eWxlUmVzb2x2
ZXIoKTsKKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSB5b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
cm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgICAgIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSByb290LT5kb2N1bWVudCgpLT5zdHlsZVJlc29sdmVyKCk7
CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnB1c2hQYXJlbnRTaGFkb3dSb290KHJvb3QpOwogCi0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnB1c2hQYXJlbnRTaGFkb3dSb290KHlvdW5nZXN0KTsKLSAg
ICAgICAgZm9yIChOb2RlKiBuID0geW91bmdlc3QtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBuID0gcm9vdC0+Zmlyc3RDaGlsZCgp
OyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKG4tPmlzRWxlbWVu
dE5vZGUoKSkKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPnJlY2Fs
Y1N0eWxlKGNoYW5nZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChuLT5pc1RleHROb2RlKCkpCiAg
ICAgICAgICAgICAgICAgdG9UZXh0KG4pLT5yZWNhbGNUZXh0U3R5bGUoY2hhbmdlKTsKICAgICAg
ICAgfQotICAgICAgICBzdHlsZVJlc29sdmVyLT5wb3BQYXJlbnRTaGFkb3dSb290KHlvdW5nZXN0
KTsKLSAgICB9CiAKLSAgICBtX2Rpc3RyaWJ1dG9yLmNsZWFyTmVlZHNSZWRpc3RyaWJ1dGluZygp
OwotICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290
OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKKyAgICAgICAgc3R5bGVSZXNvbHZl
ci0+cG9wUGFyZW50U2hhZG93Um9vdChyb290KTsKICAgICAgICAgcm9vdC0+Y2xlYXJOZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgICAgIHJvb3QtPmNsZWFyQ2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7
CiAgICAgfQogfQogCi1ib29sIEVsZW1lbnRTaGFkb3c6Om5lZWRzUmVkaXN0cmlidXRpbmcoKQor
dm9pZCBFbGVtZW50U2hhZG93OjplbnN1cmVEaXN0cmlidXRpb24oKQogewotICAgIHJldHVybiBt
X2Rpc3RyaWJ1dG9yLm5lZWRzUmVkaXN0cmlidXRpbmcoKSB8fCAoeW91bmdlc3RTaGFkb3dSb290
KCkgJiYgeW91bmdlc3RTaGFkb3dSb290KCktPmhhc0luc2VydGlvblBvaW50KCkpOwotfQotCi12
b2lkIEVsZW1lbnRTaGFkb3c6Omhvc3RDaGlsZHJlbkNoYW5nZWQoKQotewotICAgIEFTU0VSVCh5
b3VuZ2VzdFNoYWRvd1Jvb3QoKSk7Ci0KLSAgICBpZiAoIXlvdW5nZXN0U2hhZG93Um9vdCgpLT5o
YXNJbnNlcnRpb25Qb2ludCgpKQorICAgIGlmICghbV9kaXN0cmlidXRvci5uZWVkc0Rpc3RyaWJ1
dGlvbigpKQogICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGlzIHJlc3VsdHMgaW4gZm9yY2Vk
IGRldGFjaGluZy9hdHRhY2hpbmcgb2YgdGhlIHNoYWRvdyByZW5kZXIgdHJlZS4gU2VlIFNoYWRv
d1Jvb3Q6OnJlY2FsY1N0eWxlKCkuCi0gICAgc2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpOworICAg
IG1fZGlzdHJpYnV0b3IuZGlzdHJpYnV0ZShob3N0KCkpOwogfQogCi12b2lkIEVsZW1lbnRTaGFk
b3c6OnNldE5lZWRzUmVkaXN0cmlidXRpbmcoKQordm9pZCBFbGVtZW50U2hhZG93OjppbnZhbGlk
YXRlRGlzdHJpYnV0aW9uKCkKIHsKLSAgICBtX2Rpc3RyaWJ1dG9yLnNldE5lZWRzUmVkaXN0cmli
dXRpbmcoKTsKLSAgICBob3N0KCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpbnZhbGlk
YXRlRGlzdHJpYnV0aW9uKGhvc3QoKSk7CiB9CiAKLXZvaWQgRWxlbWVudFNoYWRvdzo6cmVhdHRh
Y2hIb3N0Q2hpbGRyZW5BbmRTaGFkb3coKQordm9pZCBFbGVtZW50U2hhZG93OjppbnZhbGlkYXRl
RGlzdHJpYnV0aW9uKEVsZW1lbnQqIGhvc3QpCiB7Ci0gICAgQVNTRVJUKHlvdW5nZXN0U2hhZG93
Um9vdCgpKTsKKyAgICBpZiAoIW1fZGlzdHJpYnV0b3IubmVlZHNJbnZhbGlkYXRpb24oKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGJvb2wgbmVlZHNSZWF0dGFjaCA9IG1fZGlzdHJpYnV0b3IuaW52
YWxpZGF0ZShob3N0KTsKKyAgICBpZiAobmVlZHNSZWF0dGFjaCAmJiBob3N0LT5hdHRhY2hlZCgp
KSB7CisgICAgICAgIGhvc3QtPmRldGFjaCgpOworICAgICAgICBob3N0LT5sYXp5QXR0YWNoKE5v
ZGU6OkRvTm90U2V0QXR0YWNoZWQpOworICAgIH0KIAotICAgIEVsZW1lbnQqIGhvc3ROb2RlID0g
eW91bmdlc3RTaGFkb3dSb290KCktPmhvc3QoKTsKLSAgICBob3N0Tm9kZS0+ZGV0YWNoQ2hpbGRy
ZW5JZk5lZWRlZCgpOwotICAgIGRldGFjaCgpOwotICAgIGF0dGFjaCgpOwotICAgIGhvc3ROb2Rl
LT5hdHRhY2hDaGlsZHJlbklmTmVlZGVkKCk7CisgICAgbV9kaXN0cmlidXRvci5maW5pc2hJbml2
YWxpZGF0aW9uKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFk
b3cuaAppbmRleCBiNjIxMTE4NWI0N2Q3MmZkZGUzZmQwY2U2M2EzOGFhZjcwOWE5OGYyLi4xM2Rl
MWMwMjEwZDU2NzQyNjgzYzRmZTkzZTI2M2IzMjk3NjdjOTE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50U2hhZG93LmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAgIFNoYWRvd1Jvb3QqIHlv
dW5nZXN0U2hhZG93Um9vdCgpIGNvbnN0OwogICAgIFNoYWRvd1Jvb3QqIG9sZGVzdFNoYWRvd1Jv
b3QoKSBjb25zdDsKIAorICAgIHZvaWQgcmVtb3ZlQWxsU2hhZG93Um9vdHMoKTsKICAgICB2b2lk
IGFkZFNoYWRvd1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgUGFzc1JlZlB0cjxTaGFkb3dSb290
PiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBhdHRhY2goKTsKQEAgLTYwLDE4ICs2MSwx
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBib29s
IG5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB2b2lkIHJlY2FsY1N0eWxlKE5vZGU6OlN0eWxlQ2hh
bmdlKTsKLSAgICB2b2lkIHNldE5lZWRzUmVkaXN0cmlidXRpbmcoKTsKLSAgICBib29sIG5lZWRz
UmVkaXN0cmlidXRpbmcoKTsKLSAgICB2b2lkIGhvc3RDaGlsZHJlbkNoYW5nZWQoKTsKIAorICAg
IHZvaWQgZW5zdXJlRGlzdHJpYnV0aW9uKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlRGlzdHJpYnV0
aW9uKCk7CisgCiAgICAgSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50Rm9yKGNvbnN0IE5v
ZGUqKSBjb25zdDsKIAogICAgIENvbnRlbnREaXN0cmlidXRvciYgZGlzdHJpYnV0b3IoKTsKICAg
ICBjb25zdCBDb250ZW50RGlzdHJpYnV0b3ImIGRpc3RyaWJ1dG9yKCkgY29uc3Q7CiAKIHByaXZh
dGU6Ci0gICAgdm9pZCByZW1vdmVBbGxTaGFkb3dSb290cygpOwotICAgIHZvaWQgcmVhdHRhY2hI
b3N0Q2hpbGRyZW5BbmRTaGFkb3coKTsKKyAgICB2b2lkIGludmFsaWRhdGVEaXN0cmlidXRpb24o
RWxlbWVudCogaG9zdCk7CiAKICAgICBEb3VibHlMaW5rZWRMaXN0PFNoYWRvd1Jvb3Q+IG1fc2hh
ZG93Um9vdHM7CiAgICAgQ29udGVudERpc3RyaWJ1dG9yIG1fZGlzdHJpYnV0b3I7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCBjYmFiYTQ4MzhlMjBi
NzllZmU0ODI0ZTc2YjRkOGI1NzM4NWQ1NGJlLi43ZjcwZTdjMGZmMjBjMDM0Yjg1YjVhYzhhZTI2
OTNmYTY2ZjkzNThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTc3LDYgKzc3LDggQEAgTm9kZVJlbmRlcmluZ0NvbnRleHQ6Ok5vZGVSZW5kZXJp
bmdDb250ZXh0KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX3Zpc3VhbFBhcmVudFNoYWRvdyA9
IHRvU2hhZG93Um9vdChwYXJlbnQpLT5vd25lcigpOwogCiAgICAgICAgIGlmIChtX3Zpc3VhbFBh
cmVudFNoYWRvdykgeworICAgICAgICAgICAgbV92aXN1YWxQYXJlbnRTaGFkb3ctPmVuc3VyZURp
c3RyaWJ1dGlvbigpOworCiAgICAgICAgICAgICBpZiAoKG1faW5zZXJ0aW9uUG9pbnQgPSBtX3Zp
c3VhbFBhcmVudFNoYWRvdy0+aW5zZXJ0aW9uUG9pbnRGb3IobV9ub2RlKSkpIHsKICAgICAgICAg
ICAgICAgICBpZiAobV9pbnNlcnRpb25Qb2ludC0+c2hhZG93Um9vdCgpLT5pc1VzZWRGb3JSZW5k
ZXJpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBtX3BoYXNlID0gQXR0YWNoaW5nRGlzdHJp
YnV0ZWQ7CkBAIC05MSw3ICs5MywxMCBAQCBOb2RlUmVuZGVyaW5nQ29udGV4dDo6Tm9kZVJlbmRl
cmluZ0NvbnRleHQoTm9kZSogbm9kZSkKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc1NoYWRv
d0JvdW5kYXJ5KHBhcmVudCkpIHsKLSAgICAgICAgICAgIGlmICghcGFyZW50LT5zaGFkb3dSb290
KCktPmlzVXNlZEZvclJlbmRlcmluZygpKSB7CisgICAgICAgICAgICBTaGFkb3dSb290KiBwYXJl
bnRTaGFkb3dSb290ID0gcGFyZW50LT5zaGFkb3dSb290KCk7CisgICAgICAgICAgICBwYXJlbnRT
aGFkb3dSb290LT5vd25lcigpLT5lbnN1cmVEaXN0cmlidXRpb24oKTsKKworICAgICAgICAgICAg
aWYgKCFwYXJlbnRTaGFkb3dSb290LT5pc1VzZWRGb3JSZW5kZXJpbmcoKSkgewogICAgICAgICAg
ICAgICAgIG1fcGhhc2UgPSBBdHRhY2hpbmdOb3REaXN0cmlidXRlZDsKICAgICAgICAgICAgICAg
ICBtX3BhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHlsZSA9IHBhcmVudDsKICAgICAgICAgICAg
ICAgICByZXR1cm47CkBAIC0yODUsMTIgKzI5MCw2IEBAIFJlbmRlck9iamVjdCogTm9kZVJlbmRl
cmluZ0NvbnRleHQ6OnBhcmVudFJlbmRlcmVyKCkgY29uc3QKICAgICByZXR1cm4gbV9wYXJlbnRO
b2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUgPyBtX3BhcmVudE5vZGVGb3JSZW5kZXJpbmdBbmRTdHls
ZS0+cmVuZGVyZXIoKSA6IDA7CiB9CiAKLXZvaWQgTm9kZVJlbmRlcmluZ0NvbnRleHQ6Omhvc3RD
aGlsZHJlbkNoYW5nZWQoKQotewotICAgIGlmIChtX3BoYXNlID09IEF0dGFjaGluZ05vdERpc3Ry
aWJ1dGVkICYmIG1fdmlzdWFsUGFyZW50U2hhZG93KQotICAgICAgICBtX3Zpc3VhbFBhcmVudFNo
YWRvdy0+aG9zdENoaWxkcmVuQ2hhbmdlZCgpOwotfQotCiBib29sIE5vZGVSZW5kZXJpbmdDb250
ZXh0OjpzaG91bGRDcmVhdGVSZW5kZXJlcigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcGhhc2Ug
IT0gQ2FsY3VsYXRpbmcpOwpAQCAtMzY2LDkgKzM2NSw2IEBAIHZvaWQgTm9kZVJlbmRlcmVyRmFj
dG9yeTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgQVNTRVJUKCFub2RlLT5yZW5kZXJl
cigpKTsKICAgICBBU1NFUlQoZG9jdW1lbnQtPnNob3VsZENyZWF0ZVJlbmRlcmVycygpKTsKIAot
ICAgIC8vIEZJWE1FOiBUaGlzIHNpZGUgZWZmZWN0IHNob3VsZCBiZSB2aXNpYmxlIGZyb20gYXR0
YWNoKCkgY29kZS4KLSAgICBtX2NvbnRleHQuaG9zdENoaWxkcmVuQ2hhbmdlZCgpOwotCiAgICAg
aWYgKCFtX2NvbnRleHQuc2hvdWxkQ3JlYXRlUmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDFkM2RhZjNm
YzU0MjY3ZDNiNDdjZGExYmI5MTcxZTJhYTIxYTM5YTYuLjdiMTRlMDNlZGQ5ZjExZjlhZTBiNGQz
MDk2MmE1NDUyNjkxZjllZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVu
ZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyaW5nQ29u
dGV4dC5oCkBAIC02MCw4ICs2MCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hvdWxkQ3JlYXRl
UmVuZGVyZXIoKSBjb25zdDsKIAotICAgIHZvaWQgaG9zdENoaWxkcmVuQ2hhbmdlZCgpOwotCiAg
ICAgYm9vbCBpc09uVXBwZXJFbmNhcHN1bGF0aW9uQm91bmRhcnkoKSBjb25zdDsKICAgICBib29s
IGlzT25FbmNhcHN1bGF0aW9uQm91bmRhcnkoKSBjb25zdDsKICAgICBib29sIGhhc0Zsb3dUaHJl
YWRQYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudEZsb3dSZW5kZXJlcjsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NoYWRvd1Jvb3QuY3BwCmluZGV4IDNlYmE4MTJmYzBmOGQzZGQ2OTc5YjhhOTM5MjYxZjA0
YjE3ZGQ4ODAuLjY3MjNhMGY2ZGQzMDk1ZGQxNmU5NTMzN2E5YmJjMmFiOTA1NjhiMWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2hhZG93Um9vdC5jcHAKQEAgLTE4OSw4ICsxODksNyBAQCB2b2lkIFNoYWRvd1Jv
b3Q6OnNldEFwcGx5QXV0aG9yU3R5bGVzKGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKG1fYXBwbHlB
dXRob3JTdHlsZXMgIT0gdmFsdWUpIHsKICAgICAgICAgbV9hcHBseUF1dGhvclN0eWxlcyA9IHZh
bHVlOwotICAgICAgICBpZiAoYXR0YWNoZWQoKSAmJiBvd25lcigpKQotICAgICAgICAgICAgb3du
ZXIoKS0+c2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpOworICAgICAgICBob3N0KCktPnNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CiAKQEAgLTE5OCw4ICsxOTcsMTUgQEAgdm9pZCBTaGFk
b3dSb290OjphdHRhY2goKQogewogICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSBk
b2N1bWVudCgpLT5zdHlsZVJlc29sdmVyKCk7CiAgICAgc3R5bGVSZXNvbHZlci0+cHVzaFBhcmVu
dFNoYWRvd1Jvb3QodGhpcyk7Ci0gICAgRG9jdW1lbnRGcmFnbWVudDo6YXR0YWNoKCk7CisgICAg
YXR0YWNoQ2hpbGRyZW5JZk5lZWRlZCgpOworICAgIGF0dGFjaEFzTm9kZSgpOwogICAgIHN0eWxl
UmVzb2x2ZXItPnBvcFBhcmVudFNoYWRvd1Jvb3QodGhpcyk7CiB9CiAKK3ZvaWQgU2hhZG93Um9v
dDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFu
Z2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQoreworICAgIENvbnRh
aW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdlZChjaGFuZ2VkQnlQYXJzZXIsIGJlZm9yZUNoYW5nZSwg
YWZ0ZXJDaGFuZ2UsIGNoaWxkQ291bnREZWx0YSk7CisgICAgb3duZXIoKS0+aW52YWxpZGF0ZURp
c3RyaWJ1dGlvbigpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hh
ZG93Um9vdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAppbmRleCAxNDExZmE1
MmFjY2ExMzZlYzNiNDMzN2JhNDk5NjM5MjM2ODE3OTUzLi4wYjdmZmE1ZjJkYThkN2E1NDYwODM2
MTk5NTM5MWM1OGNmODhkMzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93
Um9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKQEAgLTYwLDcgKzYw
LDYgQEAgcHVibGljOgogICAgIHZvaWQgcmVjYWxjU2hhZG93VHJlZVN0eWxlKFN0eWxlQ2hhbmdl
KTsKIAogICAgIEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludEZvcihOb2RlKikgY29uc3Q7
Ci0gICAgdm9pZCBob3N0Q2hpbGRyZW5DaGFuZ2VkKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBw
bHlBdXRob3JTdHlsZXMoKSBjb25zdCBPVkVSUklERTsKICAgICB2b2lkIHNldEFwcGx5QXV0aG9y
U3R5bGVzKGJvb2wpOwpAQCAtOTEsMTAgKzkwLDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
U2hhZG93Um9vdChEb2N1bWVudCopOwogICAgIHZpcnR1YWwgflNoYWRvd1Jvb3QoKTsKLQogICAg
IHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PE5vZGU+IGNsb25lTm9kZShib29sIGRlZXApOwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVB
bGxvd2VkKE5vZGVUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2Vk
KGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hh
bmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKSBPVkVSUklERTsKIAogICAgIFNoYWRvd1Jvb3QqIG1f
cHJldjsKICAgICBTaGFkb3dSb290KiBtX25leHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCA0OWI5NzdiMjVkNWM2ZmZlYjAzMmU1NjMz
YTU1OWU4ZmZiNmU5NGM3Li5kYWQ5Y2RjNjM1ZDI2YTY5Mzk0Y2NhZjUxYWQ3MjdmMDI1Mzc4M2U2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAK
ICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5j
bHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1ZhbGlkYXRpb25NZXNz
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCmluZGV4
IGExNDRiYWI1OTE5NzViMjMxYmJmN2Y2MGU1NjJlYmRjY2Y2ZGYyM2UuLjQyYmNlZGQyYjYxMDYw
YTZjOGY4MzMzN2UxZTIzYzY1Yjg5Y2JkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVmFsaWRhdGlvbk1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRh
dGlvbk1lc3NhZ2UuY3BwCkBAIC0xMzIsNiArMTMyLDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0QnVi
YmxlUG9zaXRpb24oY29uc3QgTGF5b3V0UmVjdCYgaG9zdFJlY3QsIEhUTUxFbGVtZW50KiBidWJi
bGUKIHZvaWQgVmFsaWRhdGlvbk1lc3NhZ2U6OmJ1aWxkQnViYmxlVHJlZShUaW1lcjxWYWxpZGF0
aW9uTWVzc2FnZT4qKQogewogICAgIEhUTUxFbGVtZW50KiBob3N0ID0gdG9IVE1MRWxlbWVudCht
X2VsZW1lbnQpOworCiAgICAgRG9jdW1lbnQqIGRvYyA9IGhvc3QtPmRvY3VtZW50KCk7CiAgICAg
bV9idWJibGUgPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRlKGRvYyk7CiAgICAgbV9idWJibGUtPnNl
dFNoYWRvd1BzZXVkb0lkKCItd2Via2l0LXZhbGlkYXRpb24tYnViYmxlIik7CkBAIC0xNDEsNiAr
MTQyLDcgQEAgdm9pZCBWYWxpZGF0aW9uTWVzc2FnZTo6YnVpbGRCdWJibGVUcmVlKFRpbWVyPFZh
bGlkYXRpb25NZXNzYWdlPiopCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaG9zdC0+
ZW5zdXJlU2hhZG93Um9vdCgpLT5hcHBlbmRDaGlsZChtX2J1YmJsZS5nZXQoKSwgZWMpOwogICAg
IEFTU0VSVCghZWMpOworICAgIGhvc3QtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAg
IGFkanVzdEJ1YmJsZVBvc2l0aW9uKGhvc3QtPmdldFJlY3QoKSwgbV9idWJibGUuZ2V0KCkpOwog
CiAgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBjbGlwcGVyID0gSFRNTERpdkVsZW1lbnQ6OmNy
ZWF0ZShkb2MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVu
dERpc3RyaWJ1dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0
cmlidXRvci5jcHAKaW5kZXggYWY2NTBhM2JmYTZkMWQwMmE4ZjA2MTgzODI3NzMzZmVlZWQzNzVj
ZS4uYjNmZGQzMmFkYTRhN2ZjNDAyYTVlYjkyYzYxMGIzMTA4ZDc2MjRjMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAjaW5jbHVkZSAiQ29udGVudERpc3RyaWJ1dG9yLmgiCiAKICNpbmNsdWRlICJD
b250ZW50U2VsZWN0b3JRdWVyeS5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKICNpbmNs
dWRlICJIVE1MQ29udGVudEVsZW1lbnQuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAKQEAg
LTM1LDcyICszNiwxMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29udGVudERpc3RyaWJ1
dG9yOjpDb250ZW50RGlzdHJpYnV0b3IoKQotICAgIDogbV9waGFzZShQcmV2ZW50ZWQpCi0gICAg
LCBtX25lZWRzUmVkaXN0cmlidXRpbmcoZmFsc2UpCisgICAgOiBtX3ZhbGlkaXR5KFVuZGV0ZXJt
aW5lZCkKIHsKIH0KIAogQ29udGVudERpc3RyaWJ1dG9yOjp+Q29udGVudERpc3RyaWJ1dG9yKCkK
IHsKLSAgICBBU1NFUlQobV9wb29sLmlzRW1wdHkoKSk7CiB9CiAKLXZvaWQgQ29udGVudERpc3Ry
aWJ1dG9yOjpkaXN0cmlidXRlKEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludCwgQ29udGVu
dERpc3RyaWJ1dGlvbiogZGlzdHJpYnV0aW9uKQorSW5zZXJ0aW9uUG9pbnQqIENvbnRlbnREaXN0
cmlidXRvcjo6ZmluZEluc2VydGlvblBvaW50Rm9yKGNvbnN0IE5vZGUqIGtleSkgY29uc3QKIHsK
LSAgICBBU1NFUlQobV9waGFzZSA9PSBQcmVwYXJlZCk7Ci0gICAgQVNTRVJUKGRpc3RyaWJ1dGlv
bi0+aXNFbXB0eSgpKTsKLQotICAgIENvbnRlbnRTZWxlY3RvclF1ZXJ5IHF1ZXJ5KGluc2VydGlv
blBvaW50KTsKKyAgICByZXR1cm4gbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5nZXQoa2V5KTsKK30K
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wb29sLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIE5vZGUqIGNoaWxkID0gbV9wb29sW2ldLmdldCgpOwotICAgICAgICBpZiAoIWNoaWxkKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghcXVlcnkubWF0Y2hlcyhjaGlsZCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBkaXN0cmlidXRpb24tPmFwcGVuZChj
aGlsZCk7Ci0gICAgICAgIG1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQuYWRkKGNoaWxkLCBpbnNlcnRp
b25Qb2ludCk7Ci0gICAgICAgIG1fcG9vbFtpXSA9IDA7Cit2b2lkIENvbnRlbnREaXN0cmlidXRv
cjo6ZGlzdHJpYnV0ZShFbGVtZW50KiBob3N0KQoreworICAgIEFTU0VSVChuZWVkc0Rpc3RyaWJ1
dGlvbigpKTsKKyAgICBBU1NFUlQobV9ub2RlVG9JbnNlcnRpb25Qb2ludC5pc0VtcHR5KCkpOwor
CisgICAgbV92YWxpZGl0eSA9IFZhbGlkOworCisgICAgQ29udGVudERpc3RyaWJ1dGlvbiBwb29s
OworICAgIGZvciAoTm9kZSogbm9kZSA9IGhvc3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9
IG5vZGUtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHBvb2wuYXBwZW5kKG5vZGUpOworCisgICAg
Zm9yIChTaGFkb3dSb290KiByb290ID0gaG9zdC0+eW91bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7
IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5v
ZGUgPSByb290OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KSkgewor
ICAgICAgICAgICAgaWYgKCFpc0luc2VydGlvblBvaW50KG5vZGUpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgSW5zZXJ0aW9uUG9pbnQqIHBvaW50ID0gdG9JbnNlcnRp
b25Qb2ludChub2RlKTsKKyAgICAgICAgICAgIGlmICghcG9pbnQtPmlzQWN0aXZlKCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBTaGFkb3dSb290KiBvbGRlciA9IHJv
b3QtPm9sZGVyU2hhZG93Um9vdCgpOworICAgICAgICAgICAgaWYgKHBvaW50LT5kb2VzU2VsZWN0
RnJvbUhvc3RDaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVTZWxlY3Rpb25z
VG8ocG9pbnQsIHBvb2wpOworICAgICAgICAgICAgZWxzZSBpZiAob2xkZXIgJiYgIW9sZGVyLT5h
c3NpZ25lZFRvKCkpIHsKKyAgICAgICAgICAgICAgICBkaXN0cmlidXRlU2hhZG93Q2hpbGRyZW5U
byhwb2ludCwgb2xkZXIpOworICAgICAgICAgICAgICAgIG9sZGVyLT5zZXRBc3NpZ25lZFRvKHBv
aW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDb250ZW50
RGlzdHJpYnV0b3I6OmNsZWFyRGlzdHJpYnV0aW9uKENvbnRlbnREaXN0cmlidXRpb24qIGxpc3Qp
Citib29sIENvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0ZShFbGVtZW50KiBob3N0KQogewot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpCi0gICAgICAgIG1f
bm9kZVRvSW5zZXJ0aW9uUG9pbnQucmVtb3ZlKGxpc3QtPmF0KGkpLmdldCgpKTsKLSAgICBsaXN0
LT5jbGVhcigpOwotfQorICAgIEFTU0VSVChuZWVkc0ludmFsaWRhdGlvbigpKTsKKyAgICBib29s
IG5lZWRzUmVhdHRhY2ggPSAobV92YWxpZGl0eSA9PSBVbmRldGVybWluZWQpIHx8ICFtX25vZGVU
b0luc2VydGlvblBvaW50LmlzRW1wdHkoKTsKKworICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9
IGhvc3QtPnlvdW5nZXN0U2hhZG93Um9vdCgpOyByb290OyByb290ID0gcm9vdC0+b2xkZXJTaGFk
b3dSb290KCkpIHsKKyAgICAgICAgcm9vdC0+c2V0QXNzaWduZWRUbygwKTsKKworICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZShyb290KSkgeworICAgICAgICAgICAgaWYgKCFpc0luc2VydGlvblBvaW50KG5vZGUpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbmVlZHNSZWF0dGFjaCA9IG5lZWRz
UmVhdHRhY2ggfHwgdHJ1ZTsKKyAgICAgICAgICAgIEluc2VydGlvblBvaW50KiBwb2ludCA9IHRv
SW5zZXJ0aW9uUG9pbnQobm9kZSk7CisgICAgICAgICAgICBwb2ludC0+Y2xlYXJEaXN0cmlidXRp
b24oKTsKKyAgICAgICAgfQorICAgIH0KIAotSW5zZXJ0aW9uUG9pbnQqIENvbnRlbnREaXN0cmli
dXRvcjo6ZmluZEluc2VydGlvblBvaW50Rm9yKGNvbnN0IE5vZGUqIGtleSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5nZXQoa2V5KTsKKyAgICBtX3ZhbGlkaXR5
ID0gSW52YWxpZGF0aW5nOworICAgIG1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQuY2xlYXIoKTsKKyAg
ICByZXR1cm4gbmVlZHNSZWF0dGFjaDsKIH0KIAotdm9pZCBDb250ZW50RGlzdHJpYnV0b3I6Ondp
bGxEaXN0cmlidXRlKCkKK3ZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpmaW5pc2hJbml2YWxpZGF0
aW9uKCkKIHsKLSAgICBtX3BoYXNlID0gU3RhcnRlZDsKKyAgICBBU1NFUlQobV92YWxpZGl0eSA9
PSBJbnZhbGlkYXRpbmcpOworICAgIG1fdmFsaWRpdHkgPSBJbnZhbGlkYXRlZDsKIH0KIAotdm9p
ZCBDb250ZW50RGlzdHJpYnV0b3I6OmRpZERpc3RyaWJ1dGUoKQordm9pZCBDb250ZW50RGlzdHJp
YnV0b3I6OmRpc3RyaWJ1dGVTZWxlY3Rpb25zVG8oSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBv
aW50LCBDb250ZW50RGlzdHJpYnV0aW9uJiBwb29sKQogewotICAgIEFTU0VSVChtX3BoYXNlICE9
IFByZXZlbnRlZCk7Ci0gICAgbV9waGFzZSA9IFByZXZlbnRlZDsKLSAgICBtX3Bvb2wuY2xlYXIo
KTsKKyAgICBDb250ZW50RGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbjsKKyAgICBDb250ZW50U2Vs
ZWN0b3JRdWVyeSBxdWVyeShpbnNlcnRpb25Qb2ludCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBvb2wuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBwb29sW2ld
LmdldCgpOworICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmICghcXVlcnkubWF0Y2hlcyhjaGlsZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBkaXN0cmlidXRpb24uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgbV9ub2RlVG9JbnNl
cnRpb25Qb2ludC5hZGQoY2hpbGQsIGluc2VydGlvblBvaW50KTsKKyAgICAgICAgcG9vbFtpXSA9
IDA7CisgICAgfQorCisgICAgaW5zZXJ0aW9uUG9pbnQtPnNldERpc3RyaWJ1dGlvbihkaXN0cmli
dXRpb24pOwogfQogCi12b2lkIENvbnRlbnREaXN0cmlidXRvcjo6cHJlcGFyZVBvb2xGb3IoRWxl
bWVudCogc2hhZG93SG9zdCkKK3ZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2hh
ZG93Q2hpbGRyZW5UbyhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQsIFNoYWRvd1Jvb3Qq
IHJvb3QpCiB7Ci0gICAgaWYgKHBvb2xJc1JlYWR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBD
b250ZW50RGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbjsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBy
b290LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7Cisg
ICAgICAgIGRpc3RyaWJ1dGlvbi5hcHBlbmQobm9kZSk7CisgICAgICAgIG1fbm9kZVRvSW5zZXJ0
aW9uUG9pbnQuYWRkKG5vZGUsIGluc2VydGlvblBvaW50KTsKKyAgICB9CiAKLSAgICBBU1NFUlQo
bV9wb29sLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKHNoYWRvd0hvc3QpOwotICAgIEFTU0VSVCht
X3BoYXNlID09IFN0YXJ0ZWQpOworICAgIGluc2VydGlvblBvaW50LT5zZXREaXN0cmlidXRpb24o
ZGlzdHJpYnV0aW9uKTsKK30KIAotICAgIG1fcGhhc2UgPSBQcmVwYXJlZDsKLSAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBzaGFkb3dIb3N0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5u
ZXh0U2libGluZygpKQotICAgICAgICBtX3Bvb2wuYXBwZW5kKG5vZGUpOwordm9pZCBDb250ZW50
RGlzdHJpYnV0b3I6OmludmFsaWRhdGVEaXN0cmlidXRpb25JbihDb250ZW50RGlzdHJpYnV0aW9u
KiBsaXN0KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kp
CisgICAgICAgIG1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQucmVtb3ZlKGxpc3QtPmF0KGkpLmdldCgp
KTsKKyAgICBsaXN0LT5jbGVhcigpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5oCmluZGV4IGEyMDk4NTRjZWRkNmU5Yjk5MTIzOTAz
MTQwYjkxMzU3YzQzMzliNjMuLjMwNzdjZmY0MTQ1MmZmOWFiZDU0Y2ZmMGRhMTA5Mzc2NmQyZjUw
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmli
dXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRv
ci5oCkBAIC00OCw0MyArNDgsMzcgQEAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gQ29u
dGVudERpc3RyaWJ1dGlvbjsKIGNsYXNzIENvbnRlbnREaXN0cmlidXRvciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ29udGVudERpc3RyaWJ1dG9yKTsKIHB1YmxpYzoKKyAgICBlbnVtIFZh
bGlkaXR5IHsKKyAgICAgICAgVmFsaWQgPSAwLAorICAgICAgICBJbnZhbGlkYXRlZCA9IDEsCisg
ICAgICAgIEludmFsaWRhdGluZyA9IDIsCisgICAgICAgIFVuZGV0ZXJtaW5lZCA9IDMKKyAgICB9
OworCiAgICAgQ29udGVudERpc3RyaWJ1dG9yKCk7CiAgICAgfkNvbnRlbnREaXN0cmlidXRvcigp
OwogCi0gICAgdm9pZCBkaXN0cmlidXRlKEluc2VydGlvblBvaW50KiwgQ29udGVudERpc3RyaWJ1
dGlvbiopOwotICAgIHZvaWQgY2xlYXJEaXN0cmlidXRpb24oQ29udGVudERpc3RyaWJ1dGlvbiop
OwogICAgIEluc2VydGlvblBvaW50KiBmaW5kSW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSog
a2V5KSBjb25zdDsKIAotICAgIHZvaWQgd2lsbERpc3RyaWJ1dGUoKTsKLSAgICBib29sIGluRGlz
dHJpYnV0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBkaWREaXN0cmlidXRlKCk7CisgICAgdm9pZCBk
aXN0cmlidXRlKEVsZW1lbnQqIGhvc3QpOworICAgIGJvb2wgaW52YWxpZGF0ZShFbGVtZW50KiBo
b3N0KTsKKyAgICB2b2lkIGZpbmlzaEluaXZhbGlkYXRpb24oKTsKKyAgICBib29sIG5lZWRzRGlz
dHJpYnV0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBuZWVkc0ludmFsaWRhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsaWRpdHkgIT0gSW52YWxpZGF0ZWQ7IH0KIAotICAgIHZvaWQgcHJlcGFyZVBv
b2xGb3IoRWxlbWVudCogc2hhZG93SG9zdCk7Ci0gICAgYm9vbCBwb29sSXNSZWFkeSgpIGNvbnN0
OwotICAgIGJvb2wgbmVlZHNSZWRpc3RyaWJ1dGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNS
ZWRpc3RyaWJ1dGluZzsgfQotICAgIHZvaWQgc2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpIHsgbV9u
ZWVkc1JlZGlzdHJpYnV0aW5nID0gdHJ1ZTsgfQotICAgIHZvaWQgY2xlYXJOZWVkc1JlZGlzdHJp
YnV0aW5nKCkgeyBtX25lZWRzUmVkaXN0cmlidXRpbmcgPSBmYWxzZTsgfQotcHJpdmF0ZToKLSAg
ICBlbnVtIERpc3RyaWJ1dGlvblBoYXNlIHsKLSAgICAgICAgUHJldmVudGVkLAotICAgICAgICBT
dGFydGVkLAotICAgICAgICBQcmVwYXJlZCwKLSAgICB9OworICAgIHZvaWQgZGlzdHJpYnV0ZVNl
bGVjdGlvbnNUbyhJbnNlcnRpb25Qb2ludCosIENvbnRlbnREaXN0cmlidXRpb24mIHBvb2wpOwor
ICAgIHZvaWQgZGlzdHJpYnV0ZVNoYWRvd0NoaWxkcmVuVG8oSW5zZXJ0aW9uUG9pbnQqLCBTaGFk
b3dSb290Kik7CisgICAgdm9pZCBpbnZhbGlkYXRlRGlzdHJpYnV0aW9uSW4oQ29udGVudERpc3Ry
aWJ1dGlvbiopOwogCi0gICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fcG9vbDsKLSAgICBEaXN0
cmlidXRpb25QaGFzZSBtX3BoYXNlOworcHJpdmF0ZToKICAgICBIYXNoTWFwPGNvbnN0IE5vZGUq
LCBJbnNlcnRpb25Qb2ludCo+IG1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQ7Ci0gICAgYm9vbCBtX25l
ZWRzUmVkaXN0cmlidXRpbmcgOiAxOworICAgIHVuc2lnbmVkIG1fdmFsaWRpdHkgOiAyOwogfTsK
IAotaW5saW5lIGJvb2wgQ29udGVudERpc3RyaWJ1dG9yOjppbkRpc3RyaWJ1dGlvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcGhhc2UgIT0gUHJldmVudGVkOwotfQotCi1pbmxpbmUgYm9vbCBD
b250ZW50RGlzdHJpYnV0b3I6OnBvb2xJc1JlYWR5KCkgY29uc3QKK2lubGluZSBib29sIENvbnRl
bnREaXN0cmlidXRvcjo6bmVlZHNEaXN0cmlidXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBt
X3BoYXNlID09IFByZXBhcmVkOworICAgIC8vIER1cmluZyB0aGUgaW52YWxpZGF0aW9uLCByZS1k
aXN0cmlidXRpb24gc2hvdWxkIGJlIHN1cHJlc3NlZC4KKyAgICByZXR1cm4gbV92YWxpZGl0eSAh
PSBWYWxpZCAmJiBtX3ZhbGlkaXR5ICE9IEludmFsaWRhdGluZzsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxDb250ZW50RWxlbWVudC5jcHAKaW5kZXggYzc3
MDZjYzE2Zjg2ODIzZTMxMzJlMTc3ZmQxMTRhYjhhZTU2MGM0ZS4uMDhiNDVkNGFiZjU5YmZjNzZl
OGU3NDAwM2MxNzZkZGM5NjBlNGJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvSFRNTENvbnRlbnRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9IVE1MQ29udGVudEVsZW1lbnQuY3BwCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgSFRNTENv
bnRlbnRFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkK
IHsKICAgICBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBzZWxlY3RBdHRyKSB7CiAgICAgICAgIGlm
IChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpKQotICAgICAgICAgICAgcm9vdC0+b3du
ZXIoKS0+c2V0TmVlZHNSZWRpc3RyaWJ1dGluZygpOworICAgICAgICAgICAgcm9vdC0+b3duZXIo
KS0+aW52YWxpZGF0ZURpc3RyaWJ1dGlvbigpOwogICAgIH0gZWxzZQogICAgICAgICBJbnNlcnRp
b25Qb2ludDo6cGFyc2VBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmNwcAppbmRleCBjYjQyM2JhZDJmMDRkMWEwYjgy
NDNmYjEzOTAzNWZjZGI2ZWI0NGU3Li4xY2ExZTMxMDFhZDVhNzg3YWIxOWFmZDVjZDBhMjczZDc3
NzJlNWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Q
b2ludC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQu
Y3BwCkBAIC00Nyw1MyArNDcsMjIgQEAgSW5zZXJ0aW9uUG9pbnQ6On5JbnNlcnRpb25Qb2ludCgp
CiAKIHZvaWQgSW5zZXJ0aW9uUG9pbnQ6OmF0dGFjaCgpCiB7Ci0gICAgaWYgKGlzU2hhZG93Qm91
bmRhcnkoKSkgewotICAgICAgICBTaGFkb3dSb290KiByb290ID0gdG9TaGFkb3dSb290KHRyZWVT
Y29wZSgpLT5yb290Tm9kZSgpKTsKLSAgICAgICAgaWYgKGRvZXNTZWxlY3RGcm9tSG9zdENoaWxk
cmVuKCkpIHsKLSAgICAgICAgICAgIGRpc3RyaWJ1dGVIb3N0Q2hpbGRyZW4ocm9vdC0+b3duZXIo
KSk7Ci0gICAgICAgICAgICBhdHRhY2hEaXN0cmlidXRlZE5vZGUoKTsKLSAgICAgICAgfSBlbHNl
IGlmICghcm9vdC0+b2xkZXJTaGFkb3dSb290KCktPmFzc2lnbmVkVG8oKSkgewotICAgICAgICAg
ICAgQVNTRVJUKCFyb290LT5vbGRlclNoYWRvd1Jvb3QoKS0+YXR0YWNoZWQoKSk7Ci0gICAgICAg
ICAgICBhc3NpZ25TaGFkb3dSb290KHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKTsKLSAgICAgICAg
ICAgIHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpLT5hdHRhY2goKTsKLSAgICAgICAgfQotICAgIH0K
LQorICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpKQorICAgICAgICByb290
LT5vd25lcigpLT5lbnN1cmVEaXN0cmlidXRpb24oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZGlzdHJpYnV0aW9uLnNpemUoKTsgKytpKQorICAgICAgICBtX2Rpc3RyaWJ1dGlvbi5h
dChpKS0+YXR0YWNoKCk7CiAgICAgSFRNTEVsZW1lbnQ6OmF0dGFjaCgpOwogfQogCiB2b2lkIElu
c2VydGlvblBvaW50OjpkZXRhY2goKQogewotICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dS
b290KCk7Ci0gICAgaWYgKHJvb3QgJiYgaXNBY3RpdmUoKSkgewotICAgICAgICBFbGVtZW50U2hh
ZG93KiBzaGFkb3cgPSByb290LT5vd25lcigpOwotCi0gICAgICAgIGlmIChkb2VzU2VsZWN0RnJv
bUhvc3RDaGlsZHJlbigpKQotICAgICAgICAgICAgY2xlYXJEaXN0cmlidXRpb24oc2hhZG93KTsK
LSAgICAgICAgZWxzZSBpZiAoU2hhZG93Um9vdCogYXNzaWduZWRTaGFkb3dSb290ID0gYXNzaWdu
ZWRGcm9tKCkpCi0gICAgICAgICAgICBjbGVhckFzc2lnbm1lbnQoYXNzaWduZWRTaGFkb3dSb290
KTsKLQotICAgICAgICAvLyBXaGVuIHNoYWRvdyBlbGVtZW50IGlzIGRldGFjaGVkLCBzaGFkb3cg
dHJlZSBzaG91bGQgYmUgcmVjcmVhdGVkIHRvIHJlLWNhbGN1bGF0ZSBzZWxlY3RvciBmb3IKLSAg
ICAgICAgLy8gb3RoZXIgaW5zZXJ0aW9uIHBvaW50cy4KLSAgICAgICAgc2hhZG93LT5zZXROZWVk
c1JlZGlzdHJpYnV0aW5nKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fZGlzdHJpYnV0aW9uLmlz
RW1wdHkoKSk7CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpCisgICAg
ICAgIHJvb3QtPm93bmVyKCktPmVuc3VyZURpc3RyaWJ1dGlvbigpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9kaXN0cmlidXRpb24uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZGlzdHJp
YnV0aW9uLmF0KGkpLT5kZXRhY2goKTsKICAgICBIVE1MRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAK
LVNoYWRvd1Jvb3QqIEluc2VydGlvblBvaW50Ojphc3NpZ25lZEZyb20oKSBjb25zdAotewotICAg
IE5vZGUqIHRyZWVTY29wZVJvb3QgPSB0cmVlU2NvcGUoKS0+cm9vdE5vZGUoKTsKLSAgICBpZiAo
IXRyZWVTY29wZVJvb3QtPmlzU2hhZG93Um9vdCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IFNoYWRvd1Jvb3QqIG9sZGVyU2hhZG93Um9vdCA9IHRvU2hhZG93Um9vdCh0cmVlU2NvcGVSb290
KS0+b2xkZXJTaGFkb3dSb290KCk7Ci0gICAgaWYgKG9sZGVyU2hhZG93Um9vdCAmJiBvbGRlclNo
YWRvd1Jvb3QtPmFzc2lnbmVkVG8oKSA9PSB0aGlzKQotICAgICAgICByZXR1cm4gb2xkZXJTaGFk
b3dSb290OwotICAgIHJldHVybiAwOwotfQotCiBib29sIEluc2VydGlvblBvaW50Ojppc1NoYWRv
d0JvdW5kYXJ5KCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJlZVNjb3BlKCktPnJvb3ROb2RlKCkt
PmlzU2hhZG93Um9vdCgpICYmIGlzQWN0aXZlKCk7CkBAIC0xMTgsNTkgKzg3LDU3IEBAIGJvb2wg
SW5zZXJ0aW9uUG9pbnQ6OnJlbmRlcmVySXNOZWVkZWQoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRl
eHQmIGNvbnRleHQpCiAgICAgcmV0dXJuICFpc1NoYWRvd0JvdW5kYXJ5KCkgJiYgSFRNTEVsZW1l
bnQ6OnJlbmRlcmVySXNOZWVkZWQoY29udGV4dCk7CiB9CiAKLWlubGluZSB2b2lkIEluc2VydGlv
blBvaW50OjpkaXN0cmlidXRlSG9zdENoaWxkcmVuKEVsZW1lbnRTaGFkb3cqIHNoYWRvdykKK05v
ZGUqIEluc2VydGlvblBvaW50OjpuZXh0VG8oY29uc3QgTm9kZSogbm9kZSkgY29uc3QKIHsKLSAg
ICBpZiAoIXNoYWRvdy0+ZGlzdHJpYnV0b3IoKS5pbkRpc3RyaWJ1dGlvbigpKSB7Ci0gICAgICAg
IC8vIElmIENvbnRlbnREaXN0cmlidXRvciBpcyBub3QgaW50IHNlbGVjdGluZyBwaGFzZSwgaXQg
bWVhbnMgSW5zZXJ0aW9uUG9pbnQgaXMgYXR0YWNoZWQgZnJvbQotICAgICAgICAvLyBub24tRWxl
bWVudFNoYWRvdyBub2RlLiBUbyBydW4gZGlzdHJpYnV0ZSBhbGdvcml0aG0sIHdlIGhhdmUgdG8g
cmVhdHRhY2ggRWxlbWVudFNoYWRvdy4KLSAgICAgICAgc2hhZG93LT5zZXROZWVkc1JlZGlzdHJp
YnV0aW5nKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzaGFkb3ctPmRpc3RyaWJ1
dG9yKCkucHJlcGFyZVBvb2xGb3Ioc2hhZG93LT5ob3N0KCkpOwotICAgIHNoYWRvdy0+ZGlzdHJp
YnV0b3IoKS5jbGVhckRpc3RyaWJ1dGlvbigmbV9kaXN0cmlidXRpb24pOwotICAgIHNoYWRvdy0+
ZGlzdHJpYnV0b3IoKS5kaXN0cmlidXRlKHRoaXMsICZtX2Rpc3RyaWJ1dGlvbik7CisgICAgc2l6
ZV90IGluZGV4ID0gbV9kaXN0cmlidXRpb24uZmluZChub2RlKTsKKyAgICBpZiAoaW5kZXggPT0g
bm90Rm91bmQgfHwgaW5kZXggKyAxID09IG1fZGlzdHJpYnV0aW9uLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZGlzdHJpYnV0aW9uLmF0KGluZGV4ICsgMSkuZ2V0KCk7
CiB9CiAKLWlubGluZSB2b2lkIEluc2VydGlvblBvaW50OjpjbGVhckRpc3RyaWJ1dGlvbihFbGVt
ZW50U2hhZG93KiBzaGFkb3cpCitOb2RlKiBJbnNlcnRpb25Qb2ludDo6cHJldmlvdXNUbyhjb25z
dCBOb2RlKiBub2RlKSBjb25zdAogewotICAgIHNoYWRvdy0+ZGlzdHJpYnV0b3IoKS5jbGVhckRp
c3RyaWJ1dGlvbigmbV9kaXN0cmlidXRpb24pOworICAgIHNpemVfdCBpbmRleCA9IG1fZGlzdHJp
YnV0aW9uLmZpbmQobm9kZSk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kIHx8ICFpbmRleCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZGlzdHJpYnV0aW9uLmF0KGluZGV4IC0g
MSkuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIEluc2VydGlvblBvaW50OjphdHRhY2hEaXN0cmli
dXRlZE5vZGUoKQordm9pZCBJbnNlcnRpb25Qb2ludDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hh
bmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVyQ2hhbmdlLCBpbnQg
Y2hpbGRDb3VudERlbHRhKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kaXN0cmli
dXRpb24uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZGlzdHJpYnV0aW9uLmF0KGkpLT5hdHRhY2go
KTsKKyAgICBIVE1MRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVm
b3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKKyAgICBpZiAoU2hhZG93
Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkKKyAgICAgICAgcm9vdC0+b3duZXIoKS0+aW52YWxp
ZGF0ZURpc3RyaWJ1dGlvbigpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNlcnRpb25Qb2ludDo6YXNz
aWduU2hhZG93Um9vdChTaGFkb3dSb290KiBzaGFkb3dSb290KQorTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBJbnNlcnRpb25Qb2ludDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5v
ZGUqIGluc2VydGlvblBvaW50KQogewotICAgIHNoYWRvd1Jvb3QtPnNldEFzc2lnbmVkVG8odGhp
cyk7Ci0gICAgbV9kaXN0cmlidXRpb24uY2xlYXIoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBz
aGFkb3dSb290LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygp
KQotICAgICAgICBtX2Rpc3RyaWJ1dGlvbi5hcHBlbmQobm9kZSk7Ci19CisgICAgSFRNTEVsZW1l
bnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisgICAgaWYgKGluc2VydGlvblBvaW50
LT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dS
b290KCkpCisgICAgICAgICAgICByb290LT5vd25lcigpLT5pbnZhbGlkYXRlRGlzdHJpYnV0aW9u
KCk7CisgICAgfQogCi1pbmxpbmUgdm9pZCBJbnNlcnRpb25Qb2ludDo6Y2xlYXJBc3NpZ25tZW50
KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCi17Ci0gICAgc2hhZG93Um9vdC0+c2V0QXNzaWduZWRU
bygwKTsKLSAgICBtX2Rpc3RyaWJ1dGlvbi5jbGVhcigpOworICAgIHJldHVybiBJbnNlcnRpb25E
b25lOwogfQogCi1Ob2RlKiBJbnNlcnRpb25Qb2ludDo6bmV4dFRvKGNvbnN0IE5vZGUqIG5vZGUp
IGNvbnN0Cit2b2lkIEluc2VydGlvblBvaW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiBp
bnNlcnRpb25Qb2ludCkKIHsKLSAgICBzaXplX3QgaW5kZXggPSBtX2Rpc3RyaWJ1dGlvbi5maW5k
KG5vZGUpOwotICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCB8fCBpbmRleCArIDEgPT0gbV9kaXN0
cmlidXRpb24uc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9kaXN0cmli
dXRpb24uYXQoaW5kZXggKyAxKS5nZXQoKTsKLX0KKyAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmlu
RG9jdW1lbnQoKSkgeworICAgICAgICBOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7CisgICAg
ICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgcGFyZW50ID0gaW5zZXJ0aW9uUG9pbnQ7Cisg
ICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gcGFyZW50LT5zaGFkb3dSb290KCkpIHsKKyAg
ICAgICAgICAgIC8vIGhvc3QgY2FuIGJlIG51bGwgd2hlbiByZW1vdmVkRnJvbSgpIGlzIGNhbGxl
ZCBmcm9tIEVsZW1lbnRTaGFkb3cgZGVzdHJ1Y3Rvci4KKyAgICAgICAgICAgIGlmIChyb290LT5o
b3N0KCkpCisgICAgICAgICAgICAgICAgcm9vdC0+b3duZXIoKS0+aW52YWxpZGF0ZURpc3RyaWJ1
dGlvbigpOworICAgICAgICB9CiAKLU5vZGUqIEluc2VydGlvblBvaW50OjpwcmV2aW91c1RvKGNv
bnN0IE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9kaXN0cmlidXRp
b24uZmluZChub2RlKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQgfHwgIWluZGV4KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9kaXN0cmlidXRpb24uYXQoaW5kZXggLSAxKS5n
ZXQoKTsKKyAgICAgICAgLy8gU2luY2UgdGhpcyBpbnNlcnRpb24gcG9pbnQgaXMgbm8gbG9uZ2Vy
IHZpc2libGUgZnJvbSB0aGUgc2hhZG93IHN1YnRyZWUsIGl0IG5lZWQgdG8gY2xlYW4gaXRzZWxm
IHVwLgorICAgICAgICBjbGVhckRpc3RyaWJ1dGlvbigpOworICAgIH0KKworICAgIEhUTUxFbGVt
ZW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9pbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmgKaW5kZXggMjk2ZjBiMjUzZDZmMzYyOTZiMTI5
MGUxYjY0MmZiMjZmNzZlYjE3Ny4uZjQ2ZDNkNDgyN2FlMTIzNjRiYTgzNTVlNDg3Yjc1MjRjOTZj
NTRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSW5zZXJ0aW9uUG9p
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oCkBA
IC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbnNlcnRpb25Qb2ludCgpOwog
CiAgICAgYm9vbCBoYXNEaXN0cmlidXRpb24oKSBjb25zdCB7IHJldHVybiAhbV9kaXN0cmlidXRp
b24uaXNFbXB0eSgpOyB9CisgICAgdm9pZCBzZXREaXN0cmlidXRpb24oQ29udGVudERpc3RyaWJ1
dGlvbiYgZGlzdHJpYnV0aW9uKSB7IG1fZGlzdHJpYnV0aW9uLnN3YXAoZGlzdHJpYnV0aW9uKTsg
fQorICAgIHZvaWQgY2xlYXJEaXN0cmlidXRpb24oKSB7IG1fZGlzdHJpYnV0aW9uLmNsZWFyKCk7
IH0KICAgICBib29sIGlzU2hhZG93Qm91bmRhcnkoKSBjb25zdDsKICAgICBib29sIGlzQWN0aXZl
KCkgY29uc3Q7CiAKQEAgLTUyLDkgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLQogICAgIHZpcnR1YWwgYm9v
bCBpc0luc2VydGlvblBvaW50KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IFNoYWRvd1Jvb3QqIGFzc2lnbmVkRnJvbSgpIGNvbnN0OwogCiAgICAgc2l6ZV90IGluZGV4T2Yo
Tm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gbV9kaXN0cmlidXRpb24uZmluZChub2RlKTsgfQog
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kaXN0cmlidXRpb24uc2l6ZSgpOyB9
CkBAIC02NywxNSArNjcsMTEgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIEluc2VydGlvblBv
aW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0JikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9k
ZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2Vy
dGVkSW50byhDb250YWluZXJOb2RlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZWRGcm9tKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGRp
c3RyaWJ1dGVIb3N0Q2hpbGRyZW4oRWxlbWVudFNoYWRvdyopOwotICAgIHZvaWQgY2xlYXJEaXN0
cmlidXRpb24oRWxlbWVudFNoYWRvdyopOwotICAgIHZvaWQgYXR0YWNoRGlzdHJpYnV0ZWROb2Rl
KCk7Ci0KLSAgICB2b2lkIGFzc2lnblNoYWRvd1Jvb3QoU2hhZG93Um9vdCopOwotICAgIHZvaWQg
Y2xlYXJBc3NpZ25tZW50KFNoYWRvd1Jvb3QqKTsKLQogICAgIENvbnRlbnREaXN0cmlidXRpb24g
bV9kaXN0cmlidXRpb247CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>