<?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>79963</bug_id>
          
          <creation_ts>2012-02-29 17:58:01 -0800</creation_ts>
          <short_desc>Make parser code not depend on NamedNodeMap</short_desc>
          <delta_ts>2012-04-24 09:26:23 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>75069</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Caio Marcelo de Oliveira Filho">cmarcelo</reporter>
          <assigned_to name="Caio Marcelo de Oliveira Filho">cmarcelo</assigned_to>
          <cc>abarth</cc>
    
    <cc>arv</cc>
    
    <cc>dglazkov</cc>
    
    <cc>rniwa</cc>
    
    <cc>rolandsteiner</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>568160</commentid>
    <comment_count>0</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-29 17:58:01 -0800</bug_when>
    <thetext>Make parser code not depend on NamedNodeMap</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568169</commentid>
    <comment_count>1</comment_count>
      <attachid>129571</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-02-29 18:04:09 -0800</bug_when>
    <thetext>Created attachment 129571
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568173</commentid>
    <comment_count>2</comment_count>
      <attachid>129571</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-29 18:22:46 -0800</bug_when>
    <thetext>Comment on attachment 129571
Patch

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

This looks great.  Thanks.

&gt; Source/WebCore/dom/ElementAttributeData.h:38
&gt; +class AttributeVector : public Vector&lt;RefPtr&lt;Attribute&gt;, 4&gt; {

It&apos;s slightly unclear to me whether having AttributeVector inherit from Vector is the best approach (over having AttributeVector just have a Vector as a member), but this seems to work fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568374</commentid>
    <comment_count>3</comment_count>
      <attachid>129571</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-29 23:20:12 -0800</bug_when>
    <thetext>Comment on attachment 129571
Patch

Attachment 129571 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11769215</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568588</commentid>
    <comment_count>4</comment_count>
      <attachid>129685</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-01 05:38:20 -0800</bug_when>
    <thetext>Created attachment 129685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568734</commentid>
    <comment_count>5</comment_count>
      <attachid>129718</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-01 09:52:20 -0800</bug_when>
    <thetext>Created attachment 129718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568737</commentid>
    <comment_count>6</comment_count>
      <attachid>129571</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-01 09:55:47 -0800</bug_when>
    <thetext>Comment on attachment 129571
Patch

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

&gt;&gt; Source/WebCore/dom/ElementAttributeData.h:38
&gt;&gt; +class AttributeVector : public Vector&lt;RefPtr&lt;Attribute&gt;, 4&gt; {
&gt; 
&gt; It&apos;s slightly unclear to me whether having AttributeVector inherit from Vector is the best approach (over having AttributeVector just have a Vector as a member), but this seems to work fine.

It&apos;s mostly because in ElementAttributeData, many vector methods are used in m_attributes, for now I preferred this than wrapping those methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568927</commentid>
    <comment_count>7</comment_count>
      <attachid>129746</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-01 14:30:56 -0800</bug_when>
    <thetext>Created attachment 129746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569610</commentid>
    <comment_count>8</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-02 06:08:27 -0800</bug_when>
    <thetext>Committed r109570: &lt;http://trac.webkit.org/changeset/109570&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570269</commentid>
    <comment_count>9</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-03-04 11:41:59 -0800</bug_when>
    <thetext>This seems to have regressed parsing (Parser/html5-full-render) by something like 24%

http://webkit-perf.appspot.com/graph.html#tests=[[3068,2001,32196]]&amp;sel=none&amp;displayrange=7&amp;datatype=running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570412</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-04 22:41:00 -0800</bug_when>
    <thetext>Should we revert this patch while we sort out the performance issues?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570610</commentid>
    <comment_count>11</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-05 06:04:50 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; This seems to have regressed parsing (Parser/html5-full-render) by something like 24%
&gt; 
&gt; http://webkit-perf.appspot.com/graph.html#tests=[[3068,2001,32196]]&amp;sel=none&amp;displayrange=7&amp;datatype=running

Looking at http://webkit-perf.appspot.com/graph.html#tests=[[3068,2001,3001]]&amp;sel=1330690990310.521,1330703206709.3306&amp;displayrange=7&amp;datatype=running it seems this patch (commited at r109570) is out of the range of the regression mentioned.

http://trac.webkit.org/log/?rev=109569&amp;stop_rev=109553&amp;verbose=on

Or am I misreading something here? I&apos;ll keep investigating here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570762</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-05 09:15:36 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; This seems to have regressed parsing (Parser/html5-full-render) by something like 24%
&gt; &gt; 
&gt; &gt; http://webkit-perf.appspot.com/graph.html#tests=[[3068,2001,32196]]&amp;sel=none&amp;displayrange=7&amp;datatype=running
&gt; 
&gt; Looking at http://webkit-perf.appspot.com/graph.html#tests=[[3068,2001,3001]]&amp;sel=1330690990310.521,1330703206709.3306&amp;displayrange=7&amp;datatype=running it seems this patch (commited at r109570) is out of the range of the regression mentioned.
&gt; 
&gt; http://trac.webkit.org/log/?rev=109569&amp;stop_rev=109553&amp;verbose=on
&gt; 
&gt; Or am I misreading something here? I&apos;ll keep investigating here.

It seems like http://trac.webkit.org/changeset/109563/ is the culprit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570771</commentid>
    <comment_count>13</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-05 09:23:10 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; This seems to have regressed parsing (Parser/html5-full-render) by something like 24%
&gt; &gt; &gt; 
&gt; &gt; &gt; http://webkit-perf.appspot.com/graph.html#tests=[[3068,2001,32196]]&amp;sel=none&amp;displayrange=7&amp;datatype=running
&gt; &gt; 
&gt; &gt; Looking at http://webkit-perf.appspot.com/graph.html#tests=[[3068,2001,3001]]&amp;sel=1330690990310.521,1330703206709.3306&amp;displayrange=7&amp;datatype=running it seems this patch (commited at r109570) is out of the range of the regression mentioned.
&gt; &gt; 
&gt; &gt; http://trac.webkit.org/log/?rev=109569&amp;stop_rev=109553&amp;verbose=on
&gt; &gt; 
&gt; &gt; Or am I misreading something here? I&apos;ll keep investigating here.
&gt; 
&gt; It seems like http://trac.webkit.org/changeset/109563/ is the culprit?

I gathered some data in my desktop machine. It seems r109563 caused the regression.

r109552 - [Qt] Compile WebCore without QtWidgets

Running Parser/html5-full-render.html (1 of 1)
RESULT Parser: html5-full-render= 26787.5 ms
median= 26787.5 ms, stdev= 125.5 ms, min= 26662.0 ms, max= 26913.0 ms
Finished: 81.913626 s


r109562 - [Forms] Make order of attribute/method in HTMLSelectElement.idl as same as specification https://bugs.webkit.org/show_bug.cgi?id=80097

Running Parser/html5-full-render.html (1 of 1)
RESULT Parser: html5-full-render= 26653.0 ms
median= 26653.0 ms, stdev= 25.0 ms, min= 26628.0 ms, max= 26678.0 ms
Finished: 81.626803 s


r109563 - Scoped stylesheets don&apos;t appear to work in Shadow DOM https://bugs.webkit.org/show_bug.cgi?id=79549

Running Parser/html5-full-render.html (1 of 1)
RESULT Parser: html5-full-render= 30961.5 ms
median= 30961.5 ms, stdev= 49.5 ms, min= 30912.0 ms, max= 31011.0 ms
Finished: 94.380568 s


r109569 - [Qt] Use &apos;all&apos; as default target when debug_and_release is in effect

Running Parser/html5-full-render.html (1 of 1)
RESULT Parser: html5-full-render= 30637.0 ms
median= 30637.0 ms, stdev= 64.0 ms, min= 30573.0 ms, max= 30701.0 ms
Finished: 93.113473 s


r109570 - Make parser code not depend on NamedNodeMap https://bugs.webkit.org/show_bug.cgi?id=79963

Running Parser/html5-full-render.html (1 of 1)
RESULT Parser: html5-full-render= 30487.5 ms
median= 30487.5 ms, stdev= 420.5 ms, min= 30067.0 ms, max= 30908.0 ms
Finished: 95.086763 s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570816</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-05 10:13:10 -0800</bug_when>
    <thetext>That makes more sense.  I wouldn&apos;t think this patch would cause a performance problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570817</commentid>
    <comment_count>15</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-03-05 10:13:43 -0800</bug_when>
    <thetext>Yeah, sorry for the false alarm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594517</commentid>
    <comment_count>16</comment_count>
      <attachid>129746</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-03 08:40:38 -0700</bug_when>
    <thetext>Comment on attachment 129746
Patch

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

&gt; Source/WebCore/dom/ElementAttributeData.h:39
&gt; +class AttributeVector : public Vector&lt;RefPtr&lt;Attribute&gt;, 4&gt; {
&gt; +    friend class ElementAttributeData;

We don&apos;t usually subclass basic types like Vector. The functionality over a Vector&lt;RefPtr&lt;Attribute&gt;&gt; looks minimal as well. I think it would be better to remove this class in favor of a plain Vector to reduce complexity and confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594551</commentid>
    <comment_count>17</comment_count>
      <attachid>129746</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-03 09:24:46 -0700</bug_when>
    <thetext>Comment on attachment 129746
Patch

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

&gt;&gt; Source/WebCore/dom/ElementAttributeData.h:39
&gt;&gt; +    friend class ElementAttributeData;
&gt; 
&gt; We don&apos;t usually subclass basic types like Vector. The functionality over a Vector&lt;RefPtr&lt;Attribute&gt;&gt; looks minimal as well. I think it would be better to remove this class in favor of a plain Vector to reduce complexity and confusion.

Or make this a wrapper so that the vector is a member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608751</commentid>
    <comment_count>18</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-04-24 09:26:23 -0700</bug_when>
    <thetext>&gt; We don&apos;t usually subclass basic types like Vector. The functionality over a Vector&lt;RefPtr&lt;Attribute&gt;&gt; looks minimal as well. I think it would be better to remove this class in favor of a plain Vector to reduce complexity and confusion.

Created bug 84413 for this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129571</attachid>
            <date>2012-02-29 18:04:09 -0800</date>
            <delta_ts>2012-03-01 09:55:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79963-20120229230408.patch</filename>
            <type>text/plain</type>
            <size>35559</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Q0NzU0MThlZjNlODM0
Yzc3ODI3NjZlOTljOWM2OGQ1OTYyZDZhZC4uMjM0ZDExMTFmNGVlNjE4MWZlYjZkMDhlZTU1ZTc4
ZWE0ZDY0NTNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDEyLTAyLTI5ICBDYWlv
IE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgTWFrZSBwYXJzZXIgY29kZSBub3QgZGVwZW5kIG9uIE5hbWVkTm9kZU1hcAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NjMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9m
IGNyZWF0aW5nIEVsZW1lbnQtbGVzcyBOYW1lZE5vZGVNYXBzLCB0aGUgcGFyc2luZyBjb2RlIG5v
dyBjcmVhdGVzCisgICAgICAgIEF0dHJpYnV0ZVZlY3RvcnMsIHRoYXQgYXJlIHVzZWQgdG8gZmls
bCBFbGVtZW50IHZpYSB0aGUgcGFyc2VyU2V0QXR0cmlidXRlcygpCisgICAgICAgIG1ldGhvZC4g
VGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIGV2ZW4gbW9yZSBtZXRob2RzIGZyb20gdGhlIE5hbWVk
Tm9kZU1hcC4KKworICAgICAgICBUaGUgQXR0cmlidXRlVmVjdG9yIGNsYXNzIGNvbnRhaW5zIGNv
bnZlbmllbmNlIG1ldGhvZHMgdGhhdCB0YWtlIHRoZSBhdHRyaWJ1dGUncworICAgICAgICBRdWFs
aWZpZWROYW1lIGFzIHBhcmFtZXRlci4gVGhpcyBjbGFzcyBpcyBhbHNvIHVzZWQgaW5zaWRlIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhLgorCisgICAgICAgICogZG9tL0F0dHIuaDoKKyAgICAgICAgKEF0
dHIpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpwYXJzZXJTZXRB
dHRyaWJ1dGVzKTogTm93IHdlIGhhdmUgdG8gY3JlYXRlIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAg
c3RvcmFnZSwgYW5kIGZpbGwgaXQgKGJ5IFZlY3Rvcjo6c3dhcCgpKSB3aXRoIHRoZSBwYXNzZWQg
YXR0cmlidXRlcy4gQWxzbyB1c2UgYW4KKyAgICAgICAgZWFybHkgcmV0dXJuIHRvIHJlZHVjZSBp
bmRlbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgor
ICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OmZhc3RIYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6ZmFzdEdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNB
dHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRy
aWJ1dGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZUl0ZW0p
OgorICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBdHRyaWJ1dGVWZWN0b3I6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaDoKKyAgICAgICAgKEF0dHJp
YnV0ZVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpBdHRyaWJ1dGVWZWN0b3I6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdHRyaWJ1dGVWZWN0b3I6OmF0dHJpYnV0ZUl0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6QXR0cmlidXRlVmVjdG9yOjpBdHRyaWJ1dGVWZWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBdHRyaWJ1dGVWZWN0b3I6OmdldEF0dHJp
YnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlVmVjdG9yOjpnZXRBdHRyaWJ1
dGVJdGVtSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlVmVjdG9yOjppbnNlcnRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmF0dHJp
YnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0
dHJpYnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6Omdl
dEF0dHJpYnV0ZUl0ZW1JbmRleCk6CisgICAgICAgIChFbGVtZW50QXR0cmlidXRlRGF0YSk6Cisg
ICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5v
ZGVNYXA6OmdldE5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnNl
dE5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVk
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6Om1hcHNFcXVpdmFsZW50KToK
KyAgICAgICAgKiBkb20vTmFtZWROb2RlTWFwLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRN
TENvbnN0cnVjdGlvblNpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlv
blNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2Ny
aXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3Jl
YXRlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3Jl
YXRlSFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFRva2VuLmg6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OkF0b21p
Y0hUTUxUb2tlbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFydFRhZyk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmF0dHJpYnV0ZXNGb3JJc2luZGV4
SW5wdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVs
ZW1lbnQpOgorICAgICAgICAqIHhtbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OkF0b21pY01hcmt1cFRva2VuQmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OmF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjp0YWtlQXR0cmlidXRlcyk6
CisgICAgICAgIChBdG9taWNNYXJrdXBUb2tlbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Ojpp
bml0aWFsaXplQXR0cmlidXRlcyk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxUb2tlbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6QXRvbWljWE1MVG9rZW46OkF0b21pY1hNTFRva2VuKToKKyAgICAg
ICAgKiB4bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzTmFtZXNwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0F0dHJpYnV0ZXMpOgorCiAyMDEyLTAyLTI5ICBKdWxpZW4gQ2hh
ZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0b3AgZG91Ymxpbmcg
bWF4aW1hbE91dGxpbmVTaXplIGR1cmluZyBwYWludGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0F0dHIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmgKaW5kZXggYjcwMzU3
NDk1OGEyZTQzNzFkY2M4ZGVhNWJhNmYxY2ZhMDE1ODc2MS4uMjg2Y2ZhZmIzODE3MzYyYzVhMDRj
MzQwMTMwY2IxNTI3YzUzYTAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oCkBAIC0zOSw4ICszOSw4IEBAIGNsYXNz
IENTU1N0eWxlRGVjbGFyYXRpb247CiAvLyBkZXN0cnVjdGlvbi4gaG93ZXZlciwgdGhpcyBpcyBu
b3QgeWV0IGltcGxlbWVudGVkLgogCiBjbGFzcyBBdHRyIDogcHVibGljIENvbnRhaW5lck5vZGUg
eworICAgIGZyaWVuZCBjbGFzcyBBdHRyaWJ1dGVWZWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZE5vZGVNYXA7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXR0cj4gY3JlYXRlKEVsZW1lbnQqLCBEb2N1bWVu
dCosIFBhc3NSZWZQdHI8QXR0cmlidXRlPik7CiAgICAgdmlydHVhbCB+QXR0cigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCmluZGV4IDk4YzI5MzE4NDZjNDJjMWVhOTg0YmU2NmIyMmQ3ZDIyYTViNDgy
MmEuLjFhYzZhOWYyYjZjMjlhY2E5Mzg1MDRmMzMxYWMyZGZjNzY2NGQzNmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKQEAgLTIyMSw3ICsyMjEsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1l
bnQ6OmdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogI2VuZGlm
CiAKICAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKLSAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0
cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCisgICAgICAg
IGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRh
KCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRl
LT52YWx1ZSgpOwogICAgIH0KICAgICByZXR1cm4gbnVsbEF0b207CkBAIC03MjUsNyArNzI1LDcg
QEAgc3RhdGljIGJvb2wgaXNBdHRyaWJ1dGVUb1JlbW92ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHYKICAgICByZXR1cm4gKG5hbWUubG9jYWxOYW1lKCku
ZW5kc1dpdGgoaHJlZkF0dHIubG9jYWxOYW1lKCkpIHx8IG5hbWUgPT0gc3JjQXR0ciB8fCBuYW1l
ID09IGFjdGlvbkF0dHIpICYmIHByb3RvY29sSXNKYXZhU2NyaXB0KHN0cmlwTGVhZGluZ0FuZFRy
YWlsaW5nSFRNTFNwYWNlcyh2YWx1ZSkpOyAgICAgICAKIH0KIAotdm9pZCBFbGVtZW50OjpwYXJz
ZXJTZXRBdHRyaWJ1dGVNYXAoUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGxpc3QsIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQordm9pZCBFbGVtZW50Ojpw
YXJzZXJTZXRBdHRyaWJ1dGVzKFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBhdHRyaWJ1dGVW
ZWN0b3IsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQog
ewogICAgIEFTU0VSVCghaW5Eb2N1bWVudCgpKTsKICAgICBBU1NFUlQoIXBhcmVudE5vZGUoKSk7
CkBAIC03MzMsMzQgKzczMywzOCBAQCB2b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZU1h
cChQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gbGlzdCwgRnJhZ21lbnRTY3JpcAogICAgIGRvY3Vt
ZW50KCktPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKICAgICBBU1NFUlQoIW1fYXR0cmlidXRlTWFw
KTsKLSAgICBtX2F0dHJpYnV0ZU1hcCA9IGxpc3Q7CiAKLSAgICBpZiAobV9hdHRyaWJ1dGVNYXAp
IHsKLSAgICAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSAmbV9hdHRy
aWJ1dGVNYXAtPm1fYXR0cmlidXRlRGF0YTsKLSAgICAgICAgbV9hdHRyaWJ1dGVNYXAtPm1fZWxl
bWVudCA9IHRoaXM7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgYXMgcmVz
dWx0IG9mIGEgcGFzdGUgb3IgZHJhZy1uLWRyb3Agb3BlcmF0aW9uCi0gICAgICAgIC8vIHdlIHdh
bnQgdG8gcmVtb3ZlIGFsbCB0aGUgc2NyaXB0IGFuZCBldmVudCBoYW5kbGVycy4KLSAgICAgICAg
aWYgKHNjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChpIDwgbV9h
dHRyaWJ1dGVNYXAtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+bmFt
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChpc0V2ZW50SGFuZGxlckF0dHJpYnV0ZShhdHRyaWJ1
dGVOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0
ZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNBdHRyaWJ1dGVUb1JlbW92ZShhdHRyaWJ1
dGVOYW1lLCBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXNbaV0tPnZhbHVlKCkpKQotICAgICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXNbaV0tPnNldFZhbHVlKG51
bGxBdG9tKTsKLSAgICAgICAgICAgICAgICBpKys7CisgICAgaWYgKCFhdHRyaWJ1dGVWZWN0b3Ip
CisgICAgICAgIHJldHVybjsKKworICAgIG1fYXR0cmlidXRlTWFwID0gTmFtZWROb2RlTWFwOjpj
cmVhdGUodGhpcyk7CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBt
X2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpOworICAgIGF0dHJpYnV0ZURhdGEtPm1fYXR0
cmlidXRlcy5zd2FwKCphdHRyaWJ1dGVWZWN0b3IpOworCisgICAgbV9hdHRyaWJ1dGVNYXAtPm1f
ZWxlbWVudCA9IHRoaXM7CisgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBhcyByZXN1
bHQgb2YgYSBwYXN0ZSBvciBkcmFnLW4tZHJvcCBvcGVyYXRpb24KKyAgICAvLyB3ZSB3YW50IHRv
IHJlbW92ZSBhbGwgdGhlIHNjcmlwdCBhbmQgZXZlbnQgaGFuZGxlcnMuCisgICAgaWYgKHNjcmlw
dGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSB7CisgICAgICAg
IHVuc2lnbmVkIGkgPSAwOworICAgICAgICB3aGlsZSAoaSA8IG1fYXR0cmlidXRlTWFwLT5sZW5n
dGgoKSkgeworICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9
IGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOworICAgICAgICAgICAgaWYg
KGlzRXZlbnRIYW5kbGVyQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7CisgICAgICAgICAgICAg
ICAgYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQXR0cmlidXRl
VG9SZW1vdmUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzW2ldLT52
YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXNbaV0t
PnNldFZhbHVlKG51bGxBdG9tKTsKKyAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQotICAgICAg
ICAvLyBTdG9yZSB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBjaGFuZ2VkIG9uIHRoZSBzdGFj
ayBpbiBjYXNlCi0gICAgICAgIC8vIGF0dHJpYnV0ZUNoYW5nZWQgbXV0YXRlcyBtX2F0dHJpYnV0
ZU1hcC4KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4gYXR0cmlidXRlczsKLSAg
ICAgICAgYXR0cmlidXRlRGF0YS0+Y29weUF0dHJpYnV0ZXNUb1ZlY3RvcihhdHRyaWJ1dGVzKTsK
LSAgICAgICAgZm9yIChWZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4gPjo6aXRlcmF0b3IgaXRlciA9
IGF0dHJpYnV0ZXMuYmVnaW4oKTsgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpCi0g
ICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGl0ZXItPmdldCgpKTsKICAgICB9CisKKyAgICAv
LyBTdG9yZSB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBjaGFuZ2VkIG9uIHRoZSBzdGFjayBp
biBjYXNlCisgICAgLy8gYXR0cmlidXRlQ2hhbmdlZCBtdXRhdGVzIG1fYXR0cmlidXRlTWFwLgor
ICAgIFZlY3RvcjxSZWZQdHI8QXR0cmlidXRlPiA+IGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRl
RGF0YS0+Y29weUF0dHJpYnV0ZXNUb1ZlY3RvcihhdHRyaWJ1dGVzKTsKKyAgICBmb3IgKFZlY3Rv
cjxSZWZQdHI8QXR0cmlidXRlPiA+OjppdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigp
OyBpdGVyICE9IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgYXR0cmlidXRlQ2hh
bmdlZChpdGVyLT5nZXQoKSk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlcygpIGNv
bnN0CkBAIC04NjQsMTIgKzg2OCwxMiBAQCB2b2lkIEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCkKIAogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewogICAgICAgICBpZiAoaGFzSUQoKSkg
ewotICAgICAgICAgICAgQXR0cmlidXRlKiBpZEl0ZW0gPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0
cmlidXRlSXRlbShkb2N1bWVudCgpLT5pZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAgICAgICAgICBB
dHRyaWJ1dGUqIGlkSXRlbSA9IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCktPmdldEF0
dHJpYnV0ZUl0ZW0oZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAg
aWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKICAgICAgICAgICAgICAgICB1cGRhdGVJ
ZChudWxsQXRvbSwgaWRJdGVtLT52YWx1ZSgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaGFz
TmFtZSgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIG5hbWVJdGVtID0gbV9hdHRyaWJ1dGVN
YXAtPmdldEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVzOjpuYW1lQXR0cik7CisgICAgICAgICAgICBB
dHRyaWJ1dGUqIG5hbWVJdGVtID0gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZURhdGEoKS0+Z2V0
QXR0cmlidXRlSXRlbShIVE1MTmFtZXM6Om5hbWVBdHRyKTsKICAgICAgICAgICAgIGlmIChuYW1l
SXRlbSAmJiAhbmFtZUl0ZW0tPmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZU5hbWUo
bnVsbEF0b20sIG5hbWVJdGVtLT52YWx1ZSgpKTsKICAgICAgICAgfQpAQCAtODgwLDEyICs4ODQs
MTIgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKICAgICBpZiAobV9h
dHRyaWJ1dGVNYXApIHsKICAgICAgICAgaWYgKGhhc0lEKCkpIHsKLSAgICAgICAgICAgIEF0dHJp
YnV0ZSogaWRJdGVtID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oZG9jdW1lbnQo
KS0+aWRBdHRyaWJ1dGVOYW1lKCkpOworICAgICAgICAgICAgQXR0cmlidXRlKiBpZEl0ZW0gPSBt
X2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKGRvY3VtZW50
KCktPmlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgICAgIGlmIChpZEl0ZW0gJiYgIWlkSXRl
bS0+aXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWQoaWRJdGVtLT52YWx1ZSgpLCBu
dWxsQXRvbSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGhhc05hbWUoKSkgewotICAgICAgICAg
ICAgQXR0cmlidXRlKiBuYW1lSXRlbSA9IG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVt
KEhUTUxOYW1lczo6bmFtZUF0dHIpOworICAgICAgICAgICAgQXR0cmlidXRlKiBuYW1lSXRlbSA9
IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0oSFRNTE5h
bWVzOjpuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAobmFtZUl0ZW0gJiYgIW5hbWVJdGVtLT5p
c051bGwoKSkKICAgICAgICAgICAgICAgICB1cGRhdGVOYW1lKG5hbWVJdGVtLT52YWx1ZSgpLCBu
dWxsQXRvbSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IGMyMzFjYmU3MTk5Y2Vi
ODM1YWU4NmNhMjgwZmFjOGQ2ZmM5YzE2YjkuLjMwNzZkNzg5ZTU4N2IxYjE5ZTZjNDRlYzM2MmNi
ZDM4N2E5YjkxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjM3LDcgKzIzNyw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqKTsKIAogICAg
IC8vIE9ubHkgY2FsbGVkIGJ5IHRoZSBwYXJzZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgZWxlbWVudCBj
b25zdHJ1Y3Rpb24uCi0gICAgdm9pZCBwYXJzZXJTZXRBdHRyaWJ1dGVNYXAoUGFzc093blB0cjxO
YW1lZE5vZGVNYXA+LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIHZvaWQgcGFy
c2VyU2V0QXR0cmlidXRlcyhQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4sIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbik7CiAKICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRl
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlTWFwID8gbV9hdHRyaWJ1dGVNYXAtPmF0
dHJpYnV0ZURhdGEoKSA6IDA7IH0KICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogZW5zdXJlQXR0
cmlidXRlRGF0YSgpIGNvbnN0OwpAQCAtNjA3LDE0ICs2MDcsMTQgQEAgaW5saW5lIHZvaWQgRWxl
bWVudDo6d2lsbFJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25z
dCBBdG9taWMKIGlubGluZSBib29sIEVsZW1lbnQ6OmZhc3RIYXNBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQoZmFzdEF0dHJpYnV0ZUxvb2t1
cEFsbG93ZWQobmFtZSkpOwotICAgIHJldHVybiBtX2F0dHJpYnV0ZU1hcCAmJiBtX2F0dHJpYnV0
ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKKyAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAg
JiYgbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1l
KTsKIH0KIAogaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6ZmFzdEdldEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogICAgIEFTU0VSVChmYXN0
QXR0cmlidXRlTG9va3VwQWxsb3dlZChuYW1lKSk7CiAgICAgaWYgKG1fYXR0cmlidXRlTWFwKSB7
Ci0gICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IG1fYXR0cmlidXRlTWFwLT5nZXRB
dHRyaWJ1dGVJdGVtKG5hbWUpKQorICAgICAgICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBt
X2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpKQog
ICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICB9CiAgICAgcmV0dXJu
IG51bGxBdG9tOwpAQCAtNjIyLDcgKzYyMiw3IEBAIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcm
IEVsZW1lbnQ6OmZhc3RHZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIAog
aW5saW5lIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2F0dHJpYnV0ZU1hcCAmJiAhbV9hdHRyaWJ1dGVNYXAtPmlzRW1wdHko
KTsKKyAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAgJiYgIW1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1
dGVEYXRhKCktPmlzRW1wdHkoKTsKIH0KIAogaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxl
bWVudDo6aWRGb3JTdHlsZVJlc29sdXRpb24oKSBjb25zdApAQCAtNjY0LDEzICs2NjQsMTMgQEAg
aW5saW5lIHNpemVfdCBFbGVtZW50OjphdHRyaWJ1dGVDb3VudCgpIGNvbnN0CiBpbmxpbmUgQXR0
cmlidXRlKiBFbGVtZW50OjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewog
ICAgIEFTU0VSVChtX2F0dHJpYnV0ZU1hcCk7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwLT5h
dHRyaWJ1dGVJdGVtKGluZGV4KTsKKyAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0
ZURhdGEoKS0+YXR0cmlidXRlSXRlbShpbmRleCk7CiB9CiAKIGlubGluZSBBdHRyaWJ1dGUqIEVs
ZW1lbnQ6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QK
IHsKICAgICBBU1NFUlQobV9hdHRyaWJ1dGVNYXApOwotICAgIHJldHVybiBtX2F0dHJpYnV0ZU1h
cC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKKyAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAtPmF0
dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIH0KIAogaW5saW5lIHZvaWQg
RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKHVuc2lnbmVkIGluZGV4KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKaW5kZXggNzE0NTdmNGIxMDMwYTNhZWMyYzMy
MmJmNTY5MjJiNWM0Mzk2MTA2Ny4uNzY5ZmViNDFlOWFjZmViYjUzMDYzYjAxYzQwNWY1MTAyNTQ0
ODc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCkBA
IC0zMSw2ICszMSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQgQXR0cmlidXRl
VmVjdG9yOjpyZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK3sKKyAg
ICBzaXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7CisgICAgaWYgKGlu
ZGV4ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8QXR0cmlidXRl
PiBhdHRyaWJ1dGUgPSBhdChpbmRleCk7CisgICAgaWYgKEF0dHIqIGF0dHIgPSBhdHRyaWJ1dGUt
PmF0dHIoKSkKKyAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gMDsKKyAgICByZW1vdmUoaW5kZXgp
OworfQorCiBFbGVtZW50QXR0cmlidXRlRGF0YTo6fkVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkKIHsK
ICAgICBkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnRBdHRyaWJ1dGVEYXRhLmgKaW5kZXggYmUxNDU2MTdjMWQ0YTAyZTI2MDFhZGY5MzYxMzQ1
ZGY5NGM4Y2JiMS4uM2Q5OTc2MWMxYzZlZGYyMWZlZGRjMDBiMzM3MTlmNjZjN2E4NDc1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgKQEAgLTM1LDYgKzM1LDUw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKIAorY2xhc3MgQXR0cmli
dXRlVmVjdG9yIDogcHVibGljIFZlY3RvcjxSZWZQdHI8QXR0cmlidXRlPiwgND4geworICAgIGZy
aWVuZCBjbGFzcyBFbGVtZW50QXR0cmlidXRlRGF0YTsKKworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQXR0cmlidXRlVmVjdG9yKCkpOworICAgIH0KKworICAgIEF0dHJpYnV0
ZSogYXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
LmdldCgpOyB9CisgICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBjb25zdDsKKyAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBjb25zdDsKKworICAgIC8vIFVzZWQgZHVyaW5nIHBhcnNpbmc6IG9ubHkg
aW5zZXJ0cyBpZiBub3QgYWxyZWFkeSB0aGVyZS4KKyAgICB2b2lkIGluc2VydEF0dHJpYnV0ZShQ
YXNzUmVmUHRyPEF0dHJpYnV0ZT4gbmV3QXR0cmlidXRlKTsKKyAgICB2b2lkIHJlbW92ZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CisKK3ByaXZhdGU6CisgICAgQXR0cmlidXRlVmVj
dG9yKCkgeyB9Cit9OworCitpbmxpbmUgQXR0cmlidXRlKiBBdHRyaWJ1dGVWZWN0b3I6OmdldEF0
dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK3sKKyAgICBzaXpl
X3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7CisgICAgaWYgKGluZGV4ICE9
IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gYXQoaW5kZXgpLmdldCgpOworICAgIHJldHVybiAw
OworfQorCitpbmxpbmUgc2l6ZV90IEF0dHJpYnV0ZVZlY3Rvcjo6Z2V0QXR0cmlidXRlSXRlbUlu
ZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhdChpKS0+bmFtZSgpLm1h
dGNoZXMobmFtZSkpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIG5v
dEZvdW5kOworfQorCitpbmxpbmUgdm9pZCBBdHRyaWJ1dGVWZWN0b3I6Omluc2VydEF0dHJpYnV0
ZShQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gbmV3QXR0cmlidXRlKQoreworICAgIGlmICghZ2V0QXR0
cmlidXRlSXRlbShuZXdBdHRyaWJ1dGUtPm5hbWUoKSkpCisgICAgICAgIGFwcGVuZChuZXdBdHRy
aWJ1dGUpOworfQorCiBjbGFzcyBFbGVtZW50QXR0cmlidXRlRGF0YSB7CiBwdWJsaWM6CiAgICAg
fkVsZW1lbnRBdHRyaWJ1dGVEYXRhKCk7CkBAIC01Nyw5ICsxMDEsOSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmlzRW1wdHkoKTsgfQog
CiAgICAgLy8gSW50ZXJuYWwgaW50ZXJmYWNlLgotICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlSXRl
bSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzW2luZGV4XS5nZXQo
KTsgfQotICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7Ci0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZp
ZWROYW1lJikgY29uc3Q7CisgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuYXR0cmlidXRlSXRlbShpbmRleCk7IH0K
KyAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7IH0K
KyAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFt
ZSk7IH0KIAogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBkbyBubyBlcnJvciBjaGVja2luZy4KICAg
ICB2b2lkIGFkZEF0dHJpYnV0ZShQYXNzUmVmUHRyPEF0dHJpYnV0ZT4sIEVsZW1lbnQqKTsKQEAg
LTkwLDcgKzEzNCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1f
YXR0cmlidXRlU3R5bGU7CiAgICAgU3BhY2VTcGxpdFN0cmluZyBtX2NsYXNzTmFtZXM7CiAgICAg
QXRvbWljU3RyaW5nIG1faWRGb3JTdHlsZVJlc29sdXRpb247Ci0gICAgVmVjdG9yPFJlZlB0cjxB
dHRyaWJ1dGU+LCA0PiBtX2F0dHJpYnV0ZXM7CisgICAgQXR0cmlidXRlVmVjdG9yIG1fYXR0cmli
dXRlczsKIH07CiAKIGlubGluZSB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpyZW1vdmVBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRWxlbWVudCogZWxlbWVudCkKQEAgLTEx
MCwyNiArMTU0LDggQEAgaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6Omdl
dEF0dHJpYnV0ZUl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBib28KICAgICByZXR1cm4gMDsKIH0K
IAotaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0
ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKLXsKLSAgICBzaXplX3QgaW5kZXgg
PSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7Ci0gICAgaWYgKGluZGV4ICE9IG5vdEZvdW5k
KQotICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzW2luZGV4XS5nZXQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQogLy8gV2UgdXNlIGEgYm9vbGVhbiBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBjYWxsaW5n
IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Ugc28gdGhhdCB0aGUgY2FsbGVyCiAvLyBjYW4gdHVu
ZSB0aGUgYmVoYXZpb3IgKGhhc0F0dHJpYnV0ZSBpcyBjYXNlIHNlbnNpdGl2ZSB3aGVyZWFzIGdl
dEF0dHJpYnV0ZSBpcyBub3QpLgotaW5saW5lIHNpemVfdCBFbGVtZW50QXR0cmlidXRlRGF0YTo6
Z2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Ci17
Ci0gICAgc2l6ZV90IGxlbiA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW47ICsraSkgewotICAgICAgICBpZiAobV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCkubWF0Y2hl
cyhuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLSAgICByZXR1cm4gbm90Rm91
bmQ7Ci19Ci0KIGlubGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0
ZUl0ZW1JbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRl
Q2FzZSkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L05hbWVkTm9kZU1hcC5jcHAKaW5kZXggNDcxNDU5NzBlYjU5MzJmMzYyN2M1NTg0ZGFiYzdiZjgx
ZWQ3ZDExYi4uODYwNTA0ZTk1NTM5MTY0MmY1MzI3ZDYxMjVkZTc1NzdiMGM4ZTZjMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgUGFzc1JlZlB0cjxO
b2RlPiBOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbU5TKGNvbnN0IFN0cmluZyYgbmFtZXNw
YWNlVVJJLCBjb24KIAogUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OmdldE5hbWVkSXRl
bShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewotICAgIEF0dHJpYnV0ZSogYSA9
IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CisgICAgQXR0cmlidXRlKiBhID0gbV9hdHRyaWJ1dGVE
YXRhLmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4g
MDsKIApAQCAtMTA2LDggKzEwNiw4IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpz
ZXROYW1lZEl0ZW0oTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgQXR0ciogYXR0
ciA9IHN0YXRpY19jYXN0PEF0dHIqPihub2RlKTsKIAogICAgIEF0dHJpYnV0ZSogYXR0cmlidXRl
ID0gYXR0ci0+YXR0cigpOwotICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChhdHRyaWJ1dGUtPm5hbWUoKSk7Ci0gICAgQXR0cmlidXRlKiBvbGRBdHRyaWJ1dGUgPSBpbmRl
eCAhPSBub3RGb3VuZCA/IGF0dHJpYnV0ZUl0ZW0oaW5kZXgpIDogMDsKKyAgICBzaXplX3QgaW5k
ZXggPSBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlSXRlbUluZGV4KGF0dHJpYnV0ZS0+bmFt
ZSgpKTsKKyAgICBBdHRyaWJ1dGUqIG9sZEF0dHJpYnV0ZSA9IGluZGV4ICE9IG5vdEZvdW5kID8g
bV9hdHRyaWJ1dGVEYXRhLmF0dHJpYnV0ZUl0ZW0oaW5kZXgpIDogMDsKICAgICBpZiAob2xkQXR0
cmlidXRlID09IGF0dHJpYnV0ZSkKICAgICAgICAgcmV0dXJuIG5vZGU7IC8vIHdlIGtub3cgYWJv
dXQgaXQgYWxyZWFkeQogCkBAIC0xMzcsNyArMTM3LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1l
ZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBFeGNl
cHQKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKIAotICAgIHNpemVfdCBpbmRleCA9IGdldEF0
dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsKKyAgICBzaXplX3QgaW5kZXggPSBtX2F0dHJpYnV0ZURh
dGEuZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOwogICAgIGlmIChpbmRleCA9PSBub3RGb3Vu
ZCkgewogICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAt
MTcxLDE1ICsxNzEsMTYgQEAgdm9pZCBOYW1lZE5vZGVNYXA6OmRldGFjaEZyb21FbGVtZW50KCkK
IGJvb2wgTmFtZWROb2RlTWFwOjptYXBzRXF1aXZhbGVudChjb25zdCBOYW1lZE5vZGVNYXAqIG90
aGVyTWFwKSBjb25zdAogewogICAgIGlmICghb3RoZXJNYXApCi0gICAgICAgIHJldHVybiBpc0Vt
cHR5KCk7CisgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZURhdGEuaXNFbXB0eSgpOwogICAgIAog
ICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwogICAgIGlmIChsZW4gIT0gb3RoZXJNYXAtPmxl
bmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgY29uc3QgRWxlbWVudEF0
dHJpYnV0ZURhdGEmIG90aGVyQXR0cmlidXRlRGF0YSA9IG90aGVyTWFwLT5tX2F0dHJpYnV0ZURh
dGE7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIEF0
dHJpYnV0ZSogYXR0ciA9IGF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgIEF0dHJpYnV0ZSogb3Ro
ZXJBdHRyID0gb3RoZXJNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oYXR0ci0+bmFtZSgpKTsKKyAgICAg
ICAgQXR0cmlidXRlKiBhdHRyID0gbV9hdHRyaWJ1dGVEYXRhLmF0dHJpYnV0ZUl0ZW0oaSk7Cisg
ICAgICAgIEF0dHJpYnV0ZSogb3RoZXJBdHRyID0gb3RoZXJBdHRyaWJ1dGVEYXRhLmdldEF0dHJp
YnV0ZUl0ZW0oYXR0ci0+bmFtZSgpKTsKICAgICAgICAgaWYgKCFvdGhlckF0dHIgfHwgYXR0ci0+
dmFsdWUoKSAhPSBvdGhlckF0dHItPnZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oCmluZGV4IDMyMDFmY2QwODAzNGUxZmUw
MjVjYWRkY2RjMjQyN2IxMTM5NzY3NzcuLjRkN2FkZmJlM2QwZWE3MjhjYWFkNTQ4ODlmZDUzM2Vi
MjQxZGI0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmgKQEAgLTYwLDI0ICs2MCw2IEBA
IHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8Tm9kZT4gaXRlbSh1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5s
ZW5ndGgoKTsgfQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
RGF0YS5pc0VtcHR5KCk7IH0KLQotICAgIC8vIEludGVybmFsIGludGVyZmFjZS4KLQotICAgIEF0
dHJpYnV0ZSogYXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyaWJ1dGVEYXRhLmF0dHJpYnV0ZUl0ZW0oaW5kZXgpOyB9Ci0gICAgQXR0cmlidXRlKiBnZXRB
dHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0cmlidXRlRGF0YS5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOyB9Ci0gICAgc2l6ZV90IGdldEF0
dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOyB9Ci0KLSAgICB2
b2lkIHNocmlua1RvTGVuZ3RoKCkgeyBtX2F0dHJpYnV0ZURhdGEubV9hdHRyaWJ1dGVzLnNocmlu
a0NhcGFjaXR5KGxlbmd0aCgpKTsgfQotICAgIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh1
bnNpZ25lZCBjYXBhY2l0eSkgeyBtX2F0dHJpYnV0ZURhdGEubV9hdHRyaWJ1dGVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoY2FwYWNpdHkpOyB9Ci0KLSAgICAvLyBVc2VkIGR1cmluZyBwYXJzaW5n
OiBvbmx5IGluc2VydHMgaWYgbm90IGFscmVhZHkgdGhlcmUuIE5vIGVycm9yIGNoZWNraW5nIQot
ICAgIHZvaWQgaW5zZXJ0QXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBuZXdBdHRyaWJ1
dGUsIGJvb2wgYWxsb3dEdXBsaWNhdGVzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX2VsZW1l
bnQpOwotICAgICAgICBpZiAoYWxsb3dEdXBsaWNhdGVzIHx8ICFnZXRBdHRyaWJ1dGVJdGVtKG5l
d0F0dHJpYnV0ZS0+bmFtZSgpKSkKLSAgICAgICAgICAgIGFkZEF0dHJpYnV0ZShuZXdBdHRyaWJ1
dGUpOwotICAgIH0KIAogICAgIGJvb2wgbWFwc0VxdWl2YWxlbnQoY29uc3QgTmFtZWROb2RlTWFw
KiBvdGhlck1hcCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCBlNTUxYzJmZjVlYjZmMTQ1MDE3NjZhYWM2
ODQzNjFkNmFkMzVhNGJmLi45ZmE1ZDM3NjBmMDhhNmQzN2E3ZGQ1OTg3NDgyMTc4ZTdlOWQ0N2E5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9u
U2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuY3BwCkBAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRlZCgpCiB2b2lkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogewogICAgIFJlZlB0cjxIVE1MSHRtbEVsZW1lbnQ+IGVsZW1lbnQgPSBI
VE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLSAgICBlbGVtZW50LT5wYXJzZXJT
ZXRBdHRyaWJ1dGVNYXAodG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGlu
Z1Blcm1pc3Npb24pOworICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4udGFr
ZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogICAgIGF0dGFj
aExhdGVyKG1fYXR0YWNobWVudFJvb3QsIGVsZW1lbnQpOwogICAgIG1fb3BlbkVsZW1lbnRzLnB1
c2hIVE1MSHRtbEVsZW1lbnQoZWxlbWVudCk7CiAKQEAgLTIwOCw4ICsyMDgsOCBAQCB2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChB
dG9taWNIVE1MVG9rZW4mCiAgICAgaWYgKCF0b2tlbi5hdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGVsZW1lbnQtPmVuc3VyZVVw
ZGF0ZWRBdHRyaWJ1dGVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2VuLmF0
dHJpYnV0ZXMoKS0+bGVuZ3RoKCk7ICsraSkgeworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBh
dHRyaWJ1dGVzID0gZWxlbWVudC0+ZW5zdXJlQXR0cmlidXRlRGF0YSgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0b2tlbi5hdHRyaWJ1dGVzKCktPnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gdG9rZW4uYXR0cmlidXRlcygpLT5hdHRyaWJ1dGVJ
dGVtKGkpOwogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMtPmdldEF0dHJpYnV0ZUl0ZW0oYXR0cmli
dXRlLT5uYW1lKCkpKQogICAgICAgICAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0
ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwpAQCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQg
SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKIHsKICAgICBSZWZQdHI8SFRNTFNjcmlwdEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1M
U2NyaXB0RWxlbWVudDo6Y3JlYXRlKHNjcmlwdFRhZywgY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQo
KSwgdHJ1ZSk7CiAgICAgaWYgKG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID09IEZyYWdt
ZW50U2NyaXB0aW5nQWxsb3dlZCkKLSAgICAgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRl
TWFwKHRva2VuLnRha2VBdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
KTsKKyAgICAgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi50YWtlQXR0cmli
dXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgYXR0YWNoTGF0ZXIo
Y3VycmVudE5vZGUoKSwgZWxlbWVudCk7CiAgICAgbV9vcGVuRWxlbWVudHMucHVzaChlbGVtZW50
LnJlbGVhc2UoKSk7CiB9CkBAIC0zOTksNyArMzk5LDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2Vu
LAogewogICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgdG9rZW4ubmFtZSgpLCBu
YW1lc3BhY2VVUkkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3VycmVudE5vZGUo
KS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudCh0YWdOYW1lLCB0cnVlKTsKLSAgICBlbGVtZW50
LT5wYXJzZXJTZXRBdHRyaWJ1dGVNYXAodG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZXMo
dG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwog
ICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKIH0KIApAQCAtNDEwLDcgKzQxMCw3IEBAIFBh
c3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50
KEF0b21pY0hUTUxUb2tlbiYgdG9rCiAgICAgLy8gaGF2ZSB0byBwYXNzIHRoZSBjdXJyZW50IGZv
cm0gZWxlbWVudC4gIFdlIHNob3VsZCByZXdvcmsgZm9ybSBhc3NvY2lhdGlvbgogICAgIC8vIHRv
IG9jY3VyIGFmdGVyIGNvbnN0cnVjdGlvbiB0byBhbGxvdyBiZXR0ZXIgY29kZSBzaGFyaW5nIGhl
cmUuCiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNy
ZWF0ZUhUTUxFbGVtZW50KHRhZ05hbWUsIGN1cnJlbnROb2RlKCktPmRvY3VtZW50KCksIGZvcm0o
KSwgdHJ1ZSk7Ci0gICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlTWFwKHRva2VuLnRha2VB
dHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBlbGVtZW50
LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLnRha2VBdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICBBU1NFUlQoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgp
KTsKICAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiB9CkBAIC00MjMsMTcgKzQyMywxNyBA
QCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxl
bWVudEZyb21FbGVtZW50UmVjb3JkKEhUTQogbmFtZXNwYWNlIHsKIAogLy8gRklYTUU6IE1vdmUg
dGhpcyBmdW5jdGlvbiB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLgotaW5saW5lIFBhc3NPd25QdHI8
TmFtZWROb2RlTWFwPiBjbG9uZUF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCkKK2lubGluZSBQ
YXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gY2xvbmVBdHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1l
bnQpCiB7Ci0gICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0
dHJpYnV0ZXMoKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IGVsZW1l
bnQtPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7CiAgICAgaWYgKCFhdHRyaWJ1dGVzKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE93blB0cjxOYW1lZE5vZGVNYXA+IG5ld0F0dHJpYnV0
ZXMgPSBOYW1lZE5vZGVNYXA6OmNyZWF0ZSgpOworICAgIE93blB0cjxBdHRyaWJ1dGVWZWN0b3I+
IG5ld0F0dHJpYnV0ZXMgPSBBdHRyaWJ1dGVWZWN0b3I6OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAg
IFJlZlB0cjxBdHRyaWJ1dGU+IGNsb25lID0gQXR0cmlidXRlOjpjcmVhdGUoYXR0cmlidXRlLT5u
YW1lKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSk7Ci0gICAgICAgIG5ld0F0dHJpYnV0ZXMtPmFkZEF0
dHJpYnV0ZShjbG9uZSk7CisgICAgICAgIG5ld0F0dHJpYnV0ZXMtPmFwcGVuZChjbG9uZSk7CiAg
ICAgfQogICAgIHJldHVybiBuZXdBdHRyaWJ1dGVzLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbi5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFRva2VuLmgKaW5kZXggYzE3ODI4NDM0NjBjNmMwNzk4OWZiYmJkNjdj
YjIwNDYyODY4ZDU3ZC4uYTM5MWQzNDA5MTgxYjQzYjdjZjlhYzk0MDdiZDk0ODY0YWJkOWExOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2VuLmgKQEAgLTg2LDcgKzg2LDcgQEAg
Y2xhc3MgQXRvbWljSFRNTFRva2VuIDogcHVibGljIEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1M
VG9rZW4+IHsKIHB1YmxpYzoKICAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuJiB0b2tlbikg
OiBBdG9taWNNYXJrdXBUb2tlbkJhc2U8SFRNTFRva2VuPigmdG9rZW4pIHsgfQogCi0gICAgQXRv
bWljSFRNTFRva2VuKEhUTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUsIEF0b21pY1N0cmluZyBuYW1l
LCBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IG51bGxwdHIpCisgICAgQXRv
bWljSFRNTFRva2VuKEhUTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUsIEF0b21pY1N0cmluZyBuYW1l
LCBQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gYXR0cmlidXRlcyA9IG51bGxwdHIpCiAgICAg
ICAgIDogQXRvbWljTWFya3VwVG9rZW5CYXNlPEhUTUxUb2tlbj4odHlwZSwgbmFtZSwgYXR0cmli
dXRlcykKICAgICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxU
cmVlQnVpbGRlci5jcHAKaW5kZXggM2I1NDE0OTEzMTdkNzc1ZTE5ZmVhNGU0MjljZmJkZGI3OTAy
NGVkMC4uNzk3ZTU4M2Q5MWFmN2U3OGFkMDZjOWJkZTk2NDZmZTE1MDg5YzhhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC01MzEsNyAr
NTMxLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4oQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICBwYXJzZUVycm9yKHRva2VuKTsKIH0KIAotdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlU3RhcnRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGF0dHJpYnV0ZXMpCit2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFydFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gYXR0cmlidXRlcykKIHsKICAgICAvLyBGSVhN
RTogV2UnbGwgbmVlZCBhIGZhbmNpZXIgY29udmVyc2lvbiB0aGFuIGp1c3QgImxvY2FsTmFtZSIg
Zm9yIFNWRy9NYXRoTUwgdGFncy4KICAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVRva2VuKEhUTUxU
b2tlblR5cGVzOjpTdGFydFRhZywgdGFnTmFtZS5sb2NhbE5hbWUoKSwgYXR0cmlidXRlcyk7CkBA
IC01NjAsMTEgKzU2MCwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VQRW5k
VGFnSWZQSW5CdXR0b25TY29wZSgpCiAgICAgcHJvY2Vzc0VuZFRhZyhlbmRQKTsKIH0KIAotUGFz
c093blB0cjxOYW1lZE5vZGVNYXA+IEhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5k
ZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQorUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0
b3I+IEhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogewotICAgIE93blB0cjxOYW1lZE5vZGVNYXA+IGF0dHJpYnV0ZXMgPSB0
b2tlbi50YWtlQXR0cmlidXRlcygpOworICAgIE93blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJp
YnV0ZXMgPSB0b2tlbi50YWtlQXR0cmlidXRlcygpOwogICAgIGlmICghYXR0cmlidXRlcykKLSAg
ICAgICAgYXR0cmlidXRlcyA9IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKCk7CisgICAgICAgIGF0dHJp
YnV0ZXMgPSBBdHRyaWJ1dGVWZWN0b3I6OmNyZWF0ZSgpOwogICAgIGVsc2UgewogICAgICAgICBh
dHRyaWJ1dGVzLT5yZW1vdmVBdHRyaWJ1dGUobmFtZUF0dHIpOwogICAgICAgICBhdHRyaWJ1dGVz
LT5yZW1vdmVBdHRyaWJ1dGUoYWN0aW9uQXR0cik7CkBAIC01NzIsNyArNTcyLDcgQEAgUGFzc093
blB0cjxOYW1lZE5vZGVNYXA+IEhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5kZXhJ
bnB1dChBdG9taWNIVE1MVG8KICAgICB9CiAKICAgICBSZWZQdHI8QXR0cmlidXRlPiBtYXBwZWRB
dHRyaWJ1dGUgPSBBdHRyaWJ1dGU6OmNyZWF0ZShuYW1lQXR0ciwgaXNpbmRleFRhZy5sb2NhbE5h
bWUoKSk7Ci0gICAgYXR0cmlidXRlcy0+aW5zZXJ0QXR0cmlidXRlKG1hcHBlZEF0dHJpYnV0ZS5y
ZWxlYXNlKCksIGZhbHNlKTsKKyAgICBhdHRyaWJ1dGVzLT5pbnNlcnRBdHRyaWJ1dGUobWFwcGVk
QXR0cmlidXRlLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIGF0dHJpYnV0ZXMucmVsZWFzZSgpOwog
fQogCkBAIC02NzksMTEgKzY3OSwxMSBAQCB2b2lkIGFkanVzdEF0dHJpYnV0ZXMoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICAgICAgbWFwTG93ZXJlZExvY2FsTmFtZVRvTmFtZShjYXNlTWFw
LCBhdHRycywgbGVuZ3RoKTsKICAgICB9CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMg
PSB0b2tlbi5hdHRyaWJ1dGVzKCk7CisgICAgQXR0cmlidXRlVmVjdG9yKiBhdHRyaWJ1dGVzID0g
dG9rZW4uYXR0cmlidXRlcygpOwogICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyAr
K3gpIHsKKyAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgYXR0cmlidXRlcy0+c2l6ZSgpOyAr
K3gpIHsKICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1
dGVJdGVtKHgpOwogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXNlZE5hbWUgPSBjYXNl
TWFwLT5nZXQoYXR0cmlidXRlLT5sb2NhbE5hbWUoKSk7CiAgICAgICAgIGlmICghY2FzZWROYW1l
LmxvY2FsTmFtZSgpLmlzTnVsbCgpKQpAQCAtNzI4LDExICs3MjgsMTEgQEAgdm9pZCBhZGp1c3RG
b3JlaWduQXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBtYXAtPmFk
ZCgieG1sbnM6eGxpbmsiLCBRdWFsaWZpZWROYW1lKCJ4bWxucyIsICJ4bGluayIsIFhNTE5TTmFt
ZXM6OnhtbG5zTmFtZXNwYWNlVVJJKSk7CiAgICAgfQogCi0gICAgTmFtZWROb2RlTWFwKiBhdHRy
aWJ1dGVzID0gdG9rZW4uYXR0cmlidXRlcygpOworICAgIEF0dHJpYnV0ZVZlY3RvciogYXR0cmli
dXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBhdHRyaWJ1dGVzLT5sZW5n
dGgoKTsgKyt4KSB7CisgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGF0dHJpYnV0ZXMtPnNp
emUoKTsgKyt4KSB7CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+
YXR0cmlidXRlSXRlbSh4KTsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9IG1h
cC0+Z2V0KGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCkpOwogICAgICAgICBpZiAoIW5hbWUubG9jYWxO
YW1lKCkuaXNOdWxsKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5oCmluZGV4IDAxODNkMjBjYWUxY2VhMjc5ZGZhOWZmNDczNGU4OGJjNGY2ZDY1YmIuLjM1
MDI0Zjg4OGM5YzliNDVmNTc0NjM1MzQ3YzY0NWYwZTExZTIxY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCkBAIC0xNTEsNyArMTUxLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHByb2Nlc3NDaGFyYWN0ZXJCdWZmZXIoRXh0ZXJuYWxDaGFyYWN0ZXJU
b2tlbkJ1ZmZlciYpOwogICAgIGlubGluZSB2b2lkIHByb2Nlc3NDaGFyYWN0ZXJCdWZmZXJGb3JJ
bkJvZHkoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlciYpOwogCi0gICAgdm9pZCBwcm9jZXNz
RmFrZVN0YXJ0VGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBQYXNzT3duUHRyPE5hbWVkTm9kZU1h
cD4gYXR0cmlidXRlcyA9IG51bGxwdHIpOworICAgIHZvaWQgcHJvY2Vzc0Zha2VTdGFydFRhZyhj
b25zdCBRdWFsaWZpZWROYW1lJiwgUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJpYnV0
ZXMgPSBudWxscHRyKTsKICAgICB2b2lkIHByb2Nlc3NGYWtlRW5kVGFnKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICB2b2lkIHByb2Nlc3NGYWtlQ2hhcmFjdGVycyhjb25zdCBTdHJpbmcmKTsK
ICAgICB2b2lkIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKQEAgLTE3Miw3
ICsxNzIsNyBAQCBwcml2YXRlOgogICAgIGlubGluZSBib29sIHNob3VsZFByb2Nlc3NUb2tlbklu
Rm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJik7CiAgICAgdm9pZCBwcm9jZXNzVG9rZW5J
bkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYpOwogCi0gICAgUGFzc093blB0cjxOYW1l
ZE5vZGVNYXA+IGF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuJik7Cisg
ICAgUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQo
QXRvbWljSFRNTFRva2VuJik7CiAKICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3Jk
KiBmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQg
Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKaW5kZXggZjQ2MDFkZTZh
YzM2MGIwOWI4NjdhODI0YjZkZTZkYTM2N2FiODM1Ni4uMzU4OWMzZjVmNTIzYjYzNGFkMDY2ZDMw
N2E3ZDk2ZTVhYTMxNjAzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
VGV4dERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9U
ZXh0RG9jdW1lbnRQYXJzZXIuY3BwCkBAIC02MSw4ICs2MSw4IEBAIHZvaWQgVGV4dERvY3VtZW50
UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVudCgpCiAgICAgLy8gZGlzdHJ1YmluZyB0aGUgbGlu
ZS9jb2x1bW4gbnVtYmVyIGNhbGN1bGF0aW9ucy4KIAogICAgIFJlZlB0cjxBdHRyaWJ1dGU+IHN0
eWxlQXR0cmlidXRlID0gQXR0cmlidXRlOjpjcmVhdGUoInN0eWxlIiwgIndvcmQtd3JhcDogYnJl
YWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyIpOwotICAgIE93blB0cjxOYW1lZE5vZGVN
YXA+IGF0dHJpYnV0ZXMgPSBOYW1lZE5vZGVNYXA6OmNyZWF0ZSgpOwotICAgIGF0dHJpYnV0ZXMt
Pmluc2VydEF0dHJpYnV0ZShzdHlsZUF0dHJpYnV0ZS5yZWxlYXNlKCksIGZhbHNlKTsKKyAgICBP
d25QdHI8QXR0cmlidXRlVmVjdG9yPiBhdHRyaWJ1dGVzID0gQXR0cmlidXRlVmVjdG9yOjpjcmVh
dGUoKTsKKyAgICBhdHRyaWJ1dGVzLT5pbnNlcnRBdHRyaWJ1dGUoc3R5bGVBdHRyaWJ1dGUucmVs
ZWFzZSgpKTsKICAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW5UeXBlczo6U3Rh
cnRUYWcsIHByZVRhZy5sb2NhbE5hbWUoKSwgYXR0cmlidXRlcy5yZWxlYXNlKCkpOwogCiAgICAg
dHJlZUJ1aWxkZXIoKS0+Y29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbihmYWtlUHJlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCmluZGV4IDk4NjUzOGI4
ZDcwMzVlMWUwMzE4Mzg0ZTIxY2JiZGRkODMwYTg2MDkuLjJhMGFhMzA1MDg0NTdhODkwZmVlMGU3
MWY0ZWRhNzVlYzMxM2RlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
TWFya3VwVG9rZW5CYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBU
b2tlbkJhc2UuaApAQCAtMjcsNyArMjcsNyBAQAogI2lmbmRlZiBNYXJrdXBUb2tlbkJhc2VfaAog
I2RlZmluZSBNYXJrdXBUb2tlbkJhc2VfaAogCi0jaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCisj
aW5jbHVkZSAiRWxlbWVudEF0dHJpYnV0ZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDEwLDcgKzQxMCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgIH0KIAotICAgIEF0b21pY01hcmt1cFRva2VuQmFzZSh0eXBlbmFt
ZSBUb2tlbjo6VHlwZTo6VHlwZSB0eXBlLCBBdG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxO
YW1lZE5vZGVNYXA+IGF0dHJpYnV0ZXMgPSBudWxscHRyKQorICAgIEF0b21pY01hcmt1cFRva2Vu
QmFzZSh0eXBlbmFtZSBUb2tlbjo6VHlwZTo6VHlwZSB0eXBlLCBBdG9taWNTdHJpbmcgbmFtZSwg
UGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJpYnV0ZXMgPSBudWxscHRyKQogICAgICAg
ICA6IG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fbmFtZShuYW1lKQogICAgICAgICAsIG1fYXR0
cmlidXRlcyhhdHRyaWJ1dGVzKQpAQCAtNDQ2LDEzICs0NDYsMTMgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9hdHRyaWJ1dGVzLT5nZXRBdHRyaWJ1dGVJdGVtKGF0dHJpYnV0ZU5hbWUpOwog
ICAgIH0KIAotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcygpIGNvbnN0CisgICAgQXR0cmli
dXRlVmVjdG9yKiBhdHRyaWJ1dGVzKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCh1c2Vz
QXR0cmlidXRlcygpKTsKICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlcy5nZXQoKTsKICAgICB9
CiAKLSAgICBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gdGFrZUF0dHJpYnV0ZXMoKQorICAgIFBh
c3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiB0YWtlQXR0cmlidXRlcygpCiAgICAgewogICAgICAg
ICBBU1NFUlQodXNlc0F0dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXMu
cmVsZWFzZSgpOwpAQCAtNTE2LDcgKzUxNiw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBGb3IgU3Rh
cnRUYWcgYW5kIEVuZFRhZwogICAgIGJvb2wgbV9zZWxmQ2xvc2luZzsKIAotICAgIE93blB0cjxO
YW1lZE5vZGVNYXA+IG1fYXR0cmlidXRlczsKKyAgICBPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBt
X2F0dHJpYnV0ZXM7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUb2tlbj4KQEAgLTUyNiw3ICs1
MjYsNyBAQCBpbmxpbmUgdm9pZCBBdG9taWNNYXJrdXBUb2tlbkJhc2U8VG9rZW4+Ojppbml0aWFs
aXplQXR0cmlidXRlcyhjb25zdCB0eXBlbmFtZSBUbwogICAgIGlmICghc2l6ZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9hdHRyaWJ1dGVzID0gTmFtZWROb2RlTWFwOjpjcmVhdGUoKTsKKyAg
ICBtX2F0dHJpYnV0ZXMgPSBBdHRyaWJ1dGVWZWN0b3I6OmNyZWF0ZSgpOwogICAgIG1fYXR0cmli
dXRlcy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBjb25zdCB0eXBlbmFtZSBUb2tlbjo6QXR0cmli
dXRlJiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2ldOwpAQCAtNTQxLDcgKzU0MSw3IEBAIGlubGlu
ZSB2b2lkIEF0b21pY01hcmt1cFRva2VuQmFzZTxUb2tlbj46OmluaXRpYWxpemVBdHRyaWJ1dGVz
KGNvbnN0IHR5cGVuYW1lIFRvCiAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGUubV92YWx1ZVJhbmdl
Lm1fZW5kKTsKIAogICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWUoYXR0cmlidXRlLm1fdmFsdWUu
ZGF0YSgpLCBhdHRyaWJ1dGUubV92YWx1ZS5zaXplKCkpOwotICAgICAgICBtX2F0dHJpYnV0ZXMt
Pmluc2VydEF0dHJpYnV0ZShBdHRyaWJ1dGU6OmNyZWF0ZShuYW1lRm9yQXR0cmlidXRlKGF0dHJp
YnV0ZSksIHZhbHVlKSwgZmFsc2UpOworICAgICAgICBtX2F0dHJpYnV0ZXMtPmluc2VydEF0dHJp
YnV0ZShBdHRyaWJ1dGU6OmNyZWF0ZShuYW1lRm9yQXR0cmlidXRlKGF0dHJpYnV0ZSksIHZhbHVl
KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuLmgKaW5kZXggZDFi
ZGMwZTZiOTkxM2NjZTgzZGQxZWU0ZGVlZjdmNzNhNGQyYzQ0Ny4uMWVkMTZjYTliY2JiNjdhZjIx
MjM1ZGI0Yzk2ZGNhYjQxNzYzNDliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxUb2tlbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW4u
aApAQCAtNDMxLDcgKzQzMSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIEF0
b21pY1hNTFRva2VuKFhNTFRva2VuVHlwZXM6OlR5cGUgdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUs
IFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzID0gbnVsbHB0cikKKyAgICBBdG9t
aWNYTUxUb2tlbihYTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUsIEF0b21pY1N0cmluZyBuYW1lLCBQ
YXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gYXR0cmlidXRlcyA9IG51bGxwdHIpCiAgICAgICAg
IDogQXRvbWljTWFya3VwVG9rZW5CYXNlPFhNTFRva2VuPih0eXBlLCBuYW1lLCBhdHRyaWJ1dGVz
KQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hN
TFRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxk
ZXIuY3BwCmluZGV4IDBjMmIyZDZhMGM3OWY0OGNiNmZkM2Y0NzAyNjZkZmU4OTFjYjhiM2EuLjgx
NzkzZWQ2ZDU3NmNhODFlYzRkMGU3ZTZjMDQyYWQxMmRiNzc1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0zMDEsNyArMzAxLDcgQEAgdm9p
ZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc05hbWVzcGFjZXMoY29uc3QgQXRvbWljWE1MVG9rZW4m
IHRva2VuLCBOb2RlU3RhY2tJdGUKICAgICBpZiAoIXRva2VuLmF0dHJpYnV0ZXMoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b2tlbi5hdHRyaWJ1dGVz
KCktPmxlbmd0aCgpOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRva2VuLmF0
dHJpYnV0ZXMoKS0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUg
PSB0b2tlbi5hdHRyaWJ1dGVzKCktPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGlmIChhdHRy
aWJ1dGUtPm5hbWUoKS5wcmVmaXgoKSA9PSB4bWxuc0F0b20pCiAgICAgICAgICAgICBzdGFja0l0
ZW0uc2V0TmFtZXNwYWNlVVJJKGF0dHJpYnV0ZS0+bmFtZSgpLmxvY2FsTmFtZSgpLCBhdHRyaWJ1
dGUtPnZhbHVlKCkpOwpAQCAtMzE1LDcgKzMxNSw3IEBAIHZvaWQgWE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NBdHRyaWJ1dGVzKGNvbnN0IEF0b21pY1hNTFRva2VuJiB0b2tlbiwgTm9kZVN0YWNrSXRl
CiAgICAgaWYgKCF0b2tlbi5hdHRyaWJ1dGVzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLT5sZW5ndGgoKTsgKytpKSB7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b2tlbi5hdHRyaWJ1dGVzKCktPnNpemUoKTsg
KytpKSB7CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gdG9rZW4uYXR0cmlidXRlcygp
LT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAg
ICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSgpLnByZWZpeCgpID09IHhtbG5zQXRvbSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129685</attachid>
            <date>2012-03-01 05:38:20 -0800</date>
            <delta_ts>2012-03-01 09:52:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79963-20120301103820.patch</filename>
            <type>text/plain</type>
            <size>37037</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGQ3YWEzNzEyZDc2YjJm
ZGE4ZDE2ZGIwNGZhMjM4N2RhMWQzMjQwNC4uMTkzMmYyMzg5MTc1NDI3NThjOTMwMTdkZmFjZmI4
OTBjNWRlY2JjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDEyLTAzLTAxICBDYWlv
IE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgTWFrZSBwYXJzZXIgY29kZSBub3QgZGVwZW5kIG9uIE5hbWVkTm9kZU1hcAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NjMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9m
IGNyZWF0aW5nIEVsZW1lbnQtbGVzcyBOYW1lZE5vZGVNYXBzLCB0aGUgcGFyc2luZyBjb2RlIG5v
dyBjcmVhdGVzCisgICAgICAgIEF0dHJpYnV0ZVZlY3RvcnMsIHRoYXQgYXJlIHVzZWQgdG8gZmls
bCBFbGVtZW50IHZpYSB0aGUgcGFyc2VyU2V0QXR0cmlidXRlcygpCisgICAgICAgIG1ldGhvZC4g
VGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIGV2ZW4gbW9yZSBtZXRob2RzIGZyb20gdGhlIE5hbWVk
Tm9kZU1hcC4KKworICAgICAgICBUaGUgQXR0cmlidXRlVmVjdG9yIGNsYXNzIGNvbnRhaW5zIGNv
bnZlbmllbmNlIG1ldGhvZHMgdGhhdCB0YWtlIHRoZSBhdHRyaWJ1dGUncworICAgICAgICBRdWFs
aWZpZWROYW1lIGFzIHBhcmFtZXRlci4gVGhpcyBjbGFzcyBpcyBhbHNvIHVzZWQgaW5zaWRlIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhLgorCisgICAgICAgICogZG9tL0F0dHIuaDoKKyAgICAgICAgKEF0
dHIpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpwYXJzZXJTZXRB
dHRyaWJ1dGVzKTogTm93IHdlIGhhdmUgdG8gY3JlYXRlIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAg
c3RvcmFnZSwgYW5kIGZpbGwgaXQgKGJ5IFZlY3Rvcjo6c3dhcCgpKSB3aXRoIHRoZSBwYXNzZWQg
YXR0cmlidXRlcy4gQWxzbyB1c2UgYW4KKyAgICAgICAgZWFybHkgcmV0dXJuIHRvIHJlZHVjZSBp
bmRlbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgor
ICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OmZhc3RIYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6ZmFzdEdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNB
dHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRy
aWJ1dGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZUl0ZW0p
OgorICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBdHRyaWJ1dGVWZWN0b3I6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaDoKKyAgICAgICAgKEF0dHJp
YnV0ZVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpBdHRyaWJ1dGVWZWN0b3I6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdHRyaWJ1dGVWZWN0b3I6OmF0dHJpYnV0ZUl0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6QXR0cmlidXRlVmVjdG9yOjpBdHRyaWJ1dGVWZWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBdHRyaWJ1dGVWZWN0b3I6OmdldEF0dHJp
YnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlVmVjdG9yOjpnZXRBdHRyaWJ1
dGVJdGVtSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlVmVjdG9yOjppbnNlcnRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmF0dHJp
YnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0
dHJpYnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6Omdl
dEF0dHJpYnV0ZUl0ZW1JbmRleCk6CisgICAgICAgIChFbGVtZW50QXR0cmlidXRlRGF0YSk6Cisg
ICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5v
ZGVNYXA6OmdldE5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnNl
dE5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVk
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6Om1hcHNFcXVpdmFsZW50KToK
KyAgICAgICAgKiBkb20vTmFtZWROb2RlTWFwLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRN
TENvbnN0cnVjdGlvblNpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlv
blNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2Ny
aXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3Jl
YXRlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3Jl
YXRlSFRNTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFRva2VuLmg6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNIVE1MVG9rZW46OkF0b21p
Y0hUTUxUb2tlbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFydFRhZyk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmF0dHJpYnV0ZXNGb3JJc2luZGV4
SW5wdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVs
ZW1lbnQpOgorICAgICAgICAqIHhtbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmg6CisgICAgICAg
IChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OkF0b21pY01hcmt1cFRva2VuQmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OmF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlOjp0YWtlQXR0cmlidXRlcyk6
CisgICAgICAgIChBdG9taWNNYXJrdXBUb2tlbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Ojpp
bml0aWFsaXplQXR0cmlidXRlcyk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxUb2tlbi5oOgor
ICAgICAgICAoV2ViQ29yZTo6QXRvbWljWE1MVG9rZW46OkF0b21pY1hNTFRva2VuKToKKyAgICAg
ICAgKiB4bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzTmFtZXNwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0F0dHJpYnV0ZXMpOgorCiAyMDEyLTAzLTAxICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRE9NV2luZG93IHNob3VsZG4ndCBoYXZl
IGFueSBJTkRFWEVEX0RBVEFCQVNFIGlmZGVmcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCA5NmUxY2IxOTM1M2I2NDVlNDFmNWYxODEyY2IxMjljNTQ2MjkxMzcwLi4zNTFkYWY4MzNkYzVk
YTIyYWI3NjUzOTExNzY0NjFmYmE3M2RjYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDEyLTAzLTAxICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmls
aG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgTWFrZSBwYXJzZXIg
Y29kZSBub3QgZGVwZW5kIG9uIE5hbWVkTm9kZU1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJOYW1lZE5vZGVNYXAuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJOYW1lZE5vZGVNYXA6OmF0dHJpYnV0ZUl0ZW0pOgorCiAyMDEyLTAyLTI5
ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVc2UgdGhl
IG5ldyBjcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEgQVBJIGZvciBGaWxlRW50cnku
ZmlsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0F0dHIuaAppbmRleCBiNzAzNTc0OTU4YTJlNDM3MWRjYzhkZWE1YmE2ZjFjZmEw
MTU4NzYxLi4yODZjZmFmYjM4MTczNjJjNWEwNGMzNDAxMzBjYjE1MjdjNTNhMDA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9B
dHRyLmgKQEAgLTM5LDggKzM5LDggQEAgY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIC8vIGRl
c3RydWN0aW9uLiBob3dldmVyLCB0aGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCiAKIGNsYXNz
IEF0dHIgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSB7CisgICAgZnJpZW5kIGNsYXNzIEF0dHJpYnV0
ZVZlY3RvcjsKICAgICBmcmllbmQgY2xhc3MgRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci0gICAgZnJp
ZW5kIGNsYXNzIE5hbWVkTm9kZU1hcDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
dHRyPiBjcmVhdGUoRWxlbWVudCosIERvY3VtZW50KiwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsK
ICAgICB2aXJ0dWFsIH5BdHRyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMTZmOTEzNTZh
ZmFkNjdlMDczZDlhOTI4YjhhZDg4NzhjYWRiZWJjOC4uNzQ0NjUxNDdhOTc4YWU4Y2YxOTQ1MDUw
MjU2OWRhMDJhN2JlNjI0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMjIxLDcgKzIyMSw3
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpIGNvbnN0CiAjZW5kaWYKIAogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkg
ewotICAgICAgICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0
QXR0cmlidXRlSXRlbShuYW1lKSkKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0g
bV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKSkK
ICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgfQogICAgIHJldHVy
biBudWxsQXRvbTsKQEAgLTcyNyw3ICs3MjcsNyBAQCBzdGF0aWMgYm9vbCBpc0F0dHJpYnV0ZVRv
UmVtb3ZlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdgog
ICAgIHJldHVybiAobmFtZS5sb2NhbE5hbWUoKS5lbmRzV2l0aChocmVmQXR0ci5sb2NhbE5hbWUo
KSkgfHwgbmFtZSA9PSBzcmNBdHRyIHx8IG5hbWUgPT0gYWN0aW9uQXR0cikgJiYgcHJvdG9jb2xJ
c0phdmFTY3JpcHQoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHZhbHVlKSk7ICAg
ICAgIAogfQogCi12b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZU1hcChQYXNzT3duUHRy
PE5hbWVkTm9kZU1hcD4gbGlzdCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGlu
Z1Blcm1pc3Npb24pCit2b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMoUGFzc093blB0
cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJpYnV0ZVZlY3RvciwgRnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7CiAgICAgQVNTRVJUKCFpbkRvY3VtZW50KCkp
OwogICAgIEFTU0VSVCghcGFyZW50Tm9kZSgpKTsKQEAgLTczNSwzNCArNzM1LDM4IEBAIHZvaWQg
RWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRlTWFwKFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBs
aXN0LCBGcmFnbWVudFNjcmlwCiAgICAgZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsK
IAogICAgIEFTU0VSVCghbV9hdHRyaWJ1dGVNYXApOwotICAgIG1fYXR0cmlidXRlTWFwID0gbGlz
dDsKIAotICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBFbGVtZW50QXR0cmlidXRl
RGF0YSogYXR0cmlidXRlRGF0YSA9ICZtX2F0dHJpYnV0ZU1hcC0+bV9hdHRyaWJ1dGVEYXRhOwot
ICAgICAgICBtX2F0dHJpYnV0ZU1hcC0+bV9lbGVtZW50ID0gdGhpczsKLSAgICAgICAgLy8gSWYg
dGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBhcyByZXN1bHQgb2YgYSBwYXN0ZSBvciBkcmFnLW4tZHJv
cCBvcGVyYXRpb24KLSAgICAgICAgLy8gd2Ugd2FudCB0byByZW1vdmUgYWxsIHRoZSBzY3JpcHQg
YW5kIGV2ZW50IGhhbmRsZXJzLgotICAgICAgICBpZiAoc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBG
cmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGkgPSAw
OwotICAgICAgICAgICAgd2hpbGUgKGkgPCBtX2F0dHJpYnV0ZU1hcC0+bGVuZ3RoKCkpIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gYXR0cmli
dXRlRGF0YS0+bV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlz
RXZlbnRIYW5kbGVyQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
IChpc0F0dHJpYnV0ZVRvUmVtb3ZlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZURhdGEtPm1fYXR0
cmlidXRlc1tpXS0+dmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZURhdGEt
Pm1fYXR0cmlidXRlc1tpXS0+c2V0VmFsdWUobnVsbEF0b20pOwotICAgICAgICAgICAgICAgIGkr
KzsKKyAgICBpZiAoIWF0dHJpYnV0ZVZlY3RvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9h
dHRyaWJ1dGVNYXAgPSBOYW1lZE5vZGVNYXA6OmNyZWF0ZSh0aGlzKTsKKyAgICBFbGVtZW50QXR0
cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRh
KCk7CisgICAgYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzLnN3YXAoKmF0dHJpYnV0ZVZlY3Rv
cik7CisKKyAgICBtX2F0dHJpYnV0ZU1hcC0+bV9lbGVtZW50ID0gdGhpczsKKyAgICAvLyBJZiB0
aGUgZWxlbWVudCBpcyBjcmVhdGVkIGFzIHJlc3VsdCBvZiBhIHBhc3RlIG9yIGRyYWctbi1kcm9w
IG9wZXJhdGlvbgorICAgIC8vIHdlIHdhbnQgdG8gcmVtb3ZlIGFsbCB0aGUgc2NyaXB0IGFuZCBl
dmVudCBoYW5kbGVycy4KKyAgICBpZiAoc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNj
cmlwdGluZ05vdEFsbG93ZWQpIHsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIHdo
aWxlIChpIDwgbV9hdHRyaWJ1dGVNYXAtPmxlbmd0aCgpKSB7CisgICAgICAgICAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVz
W2ldLT5uYW1lKCk7CisgICAgICAgICAgICBpZiAoaXNFdmVudEhhbmRsZXJBdHRyaWJ1dGUoYXR0
cmlidXRlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0
ZXMucmVtb3ZlKGkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaXNBdHRyaWJ1dGVUb1JlbW92ZShhdHRyaWJ1dGVOYW1lLCBhdHRy
aWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXNbaV0tPnZhbHVlKCkpKQorICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+c2V0VmFsdWUobnVsbEF0b20pOworICAgICAg
ICAgICAgaSsrOwogICAgICAgICB9Ci0gICAgICAgIC8vIFN0b3JlIHRoZSBzZXQgb2YgYXR0cmli
dXRlcyB0aGF0IGNoYW5nZWQgb24gdGhlIHN0YWNrIGluIGNhc2UKLSAgICAgICAgLy8gYXR0cmli
dXRlQ2hhbmdlZCBtdXRhdGVzIG1fYXR0cmlidXRlTWFwLgotICAgICAgICBWZWN0b3I8UmVmUHRy
PEF0dHJpYnV0ZT4gPiBhdHRyaWJ1dGVzOwotICAgICAgICBhdHRyaWJ1dGVEYXRhLT5jb3B5QXR0
cmlidXRlc1RvVmVjdG9yKGF0dHJpYnV0ZXMpOwotICAgICAgICBmb3IgKFZlY3RvcjxSZWZQdHI8
QXR0cmlidXRlPiA+OjppdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOyBpdGVyICE9
IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQo
aXRlci0+Z2V0KCkpOwogICAgIH0KKworICAgIC8vIFN0b3JlIHRoZSBzZXQgb2YgYXR0cmlidXRl
cyB0aGF0IGNoYW5nZWQgb24gdGhlIHN0YWNrIGluIGNhc2UKKyAgICAvLyBhdHRyaWJ1dGVDaGFu
Z2VkIG11dGF0ZXMgbV9hdHRyaWJ1dGVNYXAuCisgICAgVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+
ID4gYXR0cmlidXRlczsKKyAgICBhdHRyaWJ1dGVEYXRhLT5jb3B5QXR0cmlidXRlc1RvVmVjdG9y
KGF0dHJpYnV0ZXMpOworICAgIGZvciAoVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID46Oml0ZXJh
dG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQoKTsg
KytpdGVyKQorICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGl0ZXItPmdldCgpKTsKIH0KIAogYm9v
bCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKQEAgLTg2NiwxMiArODcwLDEyIEBAIHZv
aWQgRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogCiAgICAgaWYgKG1fYXR0cmlidXRl
TWFwKSB7CiAgICAgICAgIGlmIChoYXNJRCgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIGlk
SXRlbSA9IG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGRvY3VtZW50KCktPmlkQXR0
cmlidXRlTmFtZSgpKTsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0gbV9hdHRyaWJ1
dGVNYXAtPmF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShkb2N1bWVudCgpLT5pZEF0
dHJpYnV0ZU5hbWUoKSk7CiAgICAgICAgICAgICBpZiAoaWRJdGVtICYmICFpZEl0ZW0tPmlzTnVs
bCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZUlkKG51bGxBdG9tLCBpZEl0ZW0tPnZhbHVlKCkp
OwogICAgICAgICB9CiAgICAgICAgIGlmIChoYXNOYW1lKCkpIHsKLSAgICAgICAgICAgIEF0dHJp
YnV0ZSogbmFtZUl0ZW0gPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShIVE1MTmFt
ZXM6Om5hbWVBdHRyKTsKKyAgICAgICAgICAgIEF0dHJpYnV0ZSogbmFtZUl0ZW0gPSBtX2F0dHJp
YnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6bmFt
ZUF0dHIpOwogICAgICAgICAgICAgaWYgKG5hbWVJdGVtICYmICFuYW1lSXRlbS0+aXNOdWxsKCkp
CiAgICAgICAgICAgICAgICAgdXBkYXRlTmFtZShudWxsQXRvbSwgbmFtZUl0ZW0tPnZhbHVlKCkp
OwogICAgICAgICB9CkBAIC04ODIsMTIgKzg4NiwxMiBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRG
cm9tRG9jdW1lbnQoKQogewogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewogICAgICAgICBpZiAo
aGFzSUQoKSkgewotICAgICAgICAgICAgQXR0cmlidXRlKiBpZEl0ZW0gPSBtX2F0dHJpYnV0ZU1h
cC0+Z2V0QXR0cmlidXRlSXRlbShkb2N1bWVudCgpLT5pZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAg
ICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRh
KCktPmdldEF0dHJpYnV0ZUl0ZW0oZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAg
ICAgICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKICAgICAgICAgICAgICAg
ICB1cGRhdGVJZChpZEl0ZW0tPnZhbHVlKCksIG51bGxBdG9tKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaGFzTmFtZSgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIG5hbWVJdGVtID0gbV9h
dHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVzOjpuYW1lQXR0cik7CisgICAg
ICAgICAgICBBdHRyaWJ1dGUqIG5hbWVJdGVtID0gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZURh
dGEoKS0+Z2V0QXR0cmlidXRlSXRlbShIVE1MTmFtZXM6Om5hbWVBdHRyKTsKICAgICAgICAgICAg
IGlmIChuYW1lSXRlbSAmJiAhbmFtZUl0ZW0tPmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHVw
ZGF0ZU5hbWUobmFtZUl0ZW0tPnZhbHVlKCksIG51bGxBdG9tKTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKaW5kZXggZTM3YzAyZDAwYWFhMjBhMTQxNzgzYTI5MzQzNzcxNGIxNDRhNWUzMS4u
ODU4MzRhOTg0MGJjZjUxNDk2ODA1MmE3MzM5YTkyOWUxMzI3MDMxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCkBAIC0yMzcsNyArMjM3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1
dGVDaGFuZ2VkKEF0dHJpYnV0ZSopOwogCiAgICAgLy8gT25seSBjYWxsZWQgYnkgdGhlIHBhcnNl
ciBpbW1lZGlhdGVseSBhZnRlciBlbGVtZW50IGNvbnN0cnVjdGlvbi4KLSAgICB2b2lkIHBhcnNl
clNldEF0dHJpYnV0ZU1hcChQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4sIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbik7CisgICAgdm9pZCBwYXJzZXJTZXRBdHRyaWJ1dGVzKFBhc3NPd25QdHI8
QXR0cmlidXRlVmVjdG9yPiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKIAogICAgIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9hdHRy
aWJ1dGVNYXAgPyBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpIDogMDsgfQogICAgIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCkgY29uc3Q7CkBAIC02MDcs
MTQgKzYwNywxNCBAQCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp3aWxsUmVtb3ZlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pYwogaW5saW5lIGJvb2wgRWxlbWVu
dDo6ZmFzdEhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewog
ICAgIEFTU0VSVChmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZChuYW1lKSk7Ci0gICAgcmV0dXJu
IG1fYXR0cmlidXRlTWFwICYmIG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUp
OworICAgIHJldHVybiBtX2F0dHJpYnV0ZU1hcCAmJiBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRl
RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogfQogCiBpbmxpbmUgY29uc3QgQXRvbWlj
U3RyaW5nJiBFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKG5hbWUp
KTsKICAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKLSAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0
cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCisgICAgICAg
IGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRh
KCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRl
LT52YWx1ZSgpOwogICAgIH0KICAgICByZXR1cm4gbnVsbEF0b207CkBAIC02MjIsNyArNjIyLDcg
QEAgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6ZmFzdEdldEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpoYXNBdHRy
aWJ1dGVzV2l0aG91dFVwZGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlTWFw
ICYmICFtX2F0dHJpYnV0ZU1hcC0+aXNFbXB0eSgpOworICAgIHJldHVybiBtX2F0dHJpYnV0ZU1h
cCAmJiAhbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZURhdGEoKS0+aXNFbXB0eSgpOwogfQogCiBp
bmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjppZEZvclN0eWxlUmVzb2x1dGlvbigp
IGNvbnN0CkBAIC02NjQsMTMgKzY2NCwxMyBAQCBpbmxpbmUgc2l6ZV90IEVsZW1lbnQ6OmF0dHJp
YnV0ZUNvdW50KCkgY29uc3QKIGlubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnQ6OmF0dHJpYnV0ZUl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fYXR0cmlidXRlTWFwKTsK
LSAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpOworICAgIHJl
dHVybiBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5hdHRyaWJ1dGVJdGVtKGluZGV4
KTsKIH0KIAogaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudDo6Z2V0QXR0cmlidXRlSXRlbShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogICAgIEFTU0VSVChtX2F0dHJpYnV0ZU1h
cCk7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwor
ICAgIHJldHVybiBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJ
dGVtKG5hbWUpOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUodW5z
aWduZWQgaW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJp
YnV0ZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNw
cAppbmRleCA3MTQ1N2Y0YjEwMzBhM2FlYzJjMzIyYmY1NjkyMmI1YzQzOTYxMDY3Li43NjlmZWI0
MWU5YWNmZWJiNTMwNjNiMDFjNDA1ZjUxMDI1NDQ4NzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKQEAgLTMxLDYgKzMxLDE4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAordm9pZCBBdHRyaWJ1dGVWZWN0b3I6OnJlbW92ZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKQoreworICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0
ZUl0ZW1JbmRleChuYW1lKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IGF0KGluZGV4KTsKKyAg
ICBpZiAoQXR0ciogYXR0ciA9IGF0dHJpYnV0ZS0+YXR0cigpKQorICAgICAgICBhdHRyLT5tX2Vs
ZW1lbnQgPSAwOworICAgIHJlbW92ZShpbmRleCk7Cit9CisKIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
Ojp+RWxlbWVudEF0dHJpYnV0ZURhdGEoKQogewogICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxl
bWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaAppbmRleCBi
ZTE0NTYxN2MxZDRhMDJlMjYwMWFkZjkzNjEzNDVkZjk0YzhjYmIxLi4zZDk5NzYxYzFjNmVkZjIx
ZmVkZGMwMGIzMzcxOWY2NmM3YTg0NzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudEF0dHJpYnV0ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0
dHJpYnV0ZURhdGEuaApAQCAtMzUsNiArMzUsNTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBFbGVtZW50OwogCitjbGFzcyBBdHRyaWJ1dGVWZWN0b3IgOiBwdWJsaWMgVmVjdG9yPFJl
ZlB0cjxBdHRyaWJ1dGU+LCA0PiB7CisgICAgZnJpZW5kIGNsYXNzIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBdHRyaWJ1dGVWZWN0
b3IoKSk7CisgICAgfQorCisgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCkuZ2V0KCk7IH0KKyAgICBBdHRyaWJ1dGUqIGdl
dEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIHNpemVfdCBn
ZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworCisgICAg
Ly8gVXNlZCBkdXJpbmcgcGFyc2luZzogb25seSBpbnNlcnRzIGlmIG5vdCBhbHJlYWR5IHRoZXJl
LgorICAgIHZvaWQgaW5zZXJ0QXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBuZXdBdHRy
aWJ1dGUpOworICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
KworcHJpdmF0ZToKKyAgICBBdHRyaWJ1dGVWZWN0b3IoKSB7IH0KK307CisKK2lubGluZSBBdHRy
aWJ1dGUqIEF0dHJpYnV0ZVZlY3Rvcjo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKSBjb25zdAoreworICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1J
bmRleChuYW1lKTsKKyAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBh
dChpbmRleCkuZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2lubGluZSBzaXplX3QgQXR0cmli
dXRlVmVjdG9yOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKGF0KGkpLT5uYW1lKCkubWF0Y2hlcyhuYW1lKSkKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgIH0KKyAgICByZXR1cm4gbm90Rm91bmQ7Cit9CisKK2lubGluZSB2b2lkIEF0
dHJpYnV0ZVZlY3Rvcjo6aW5zZXJ0QXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBuZXdB
dHRyaWJ1dGUpCit7CisgICAgaWYgKCFnZXRBdHRyaWJ1dGVJdGVtKG5ld0F0dHJpYnV0ZS0+bmFt
ZSgpKSkKKyAgICAgICAgYXBwZW5kKG5ld0F0dHJpYnV0ZSk7Cit9CisKIGNsYXNzIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhIHsKIHB1YmxpYzoKICAgICB+RWxlbWVudEF0dHJpYnV0ZURhdGEoKTsKQEAg
LTU3LDkgKzEwMSw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZXMuaXNFbXB0eSgpOyB9CiAKICAgICAvLyBJbnRlcm5hbCBpbnRlcmZhY2Uu
Ci0gICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOyB9Ci0gICAgQXR0cmlidXRlKiBnZXRBdHRy
aWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKLSAgICBzaXplX3QgZ2V0QXR0
cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBBdHRyaWJ1
dGUqIGF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmli
dXRlcy5hdHRyaWJ1dGVJdGVtKGluZGV4KTsgfQorICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRl
SXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXMuZ2V0QXR0cmlidXRlSXRlbShuYW1lKTsgfQorICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVt
SW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzLmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsgfQogCiAgICAgLy8gVGhlc2UgZnVuY3Rp
b25zIGRvIG5vIGVycm9yIGNoZWNraW5nLgogICAgIHZvaWQgYWRkQXR0cmlidXRlKFBhc3NSZWZQ
dHI8QXR0cmlidXRlPiwgRWxlbWVudCopOwpAQCAtOTAsNyArMTM0LDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9hdHRyaWJ1dGVTdHlsZTsKICAgICBTcGFjZVNw
bGl0U3RyaW5nIG1fY2xhc3NOYW1lczsKICAgICBBdG9taWNTdHJpbmcgbV9pZEZvclN0eWxlUmVz
b2x1dGlvbjsKLSAgICBWZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4sIDQ+IG1fYXR0cmlidXRlczsK
KyAgICBBdHRyaWJ1dGVWZWN0b3IgbV9hdHRyaWJ1dGVzOwogfTsKIAogaW5saW5lIHZvaWQgRWxl
bWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBFbGVtZW50KiBlbGVtZW50KQpAQCAtMTEwLDI2ICsxNTQsOCBAQCBpbmxpbmUgQXR0cmli
dXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBTdHJpbmcm
IG5hbWUsIGJvbwogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50
QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
KSBjb25zdAotewotICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1l
KTsKLSAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBtX2F0dHJpYnV0
ZXNbaW5kZXhdLmdldCgpOwotICAgIHJldHVybiAwOwotfQotCiAvLyBXZSB1c2UgYSBib29sZWFu
IHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNhbGxpbmcgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSBz
byB0aGF0IHRoZSBjYWxsZXIKIC8vIGNhbiB0dW5lIHRoZSBiZWhhdmlvciAoaGFzQXR0cmlidXRl
IGlzIGNhc2Ugc2Vuc2l0aXZlIHdoZXJlYXMgZ2V0QXR0cmlidXRlIGlzIG5vdCkuCi1pbmxpbmUg
c2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKLXsKLSAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmICht
X2F0dHJpYnV0ZXNbaV0tPm5hbWUoKS5tYXRjaGVzKG5hbWUpKQotICAgICAgICAgICAgcmV0dXJu
IGk7Ci0gICAgfQotICAgIHJldHVybiBub3RGb3VuZDsKLX0KLQogaW5saW5lIHNpemVfdCBFbGVt
ZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAogewogICAgIHVuc2lnbmVk
IGxlbiA9IGxlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9k
ZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAppbmRleCA0NzE0
NTk3MGViNTkzMmYzNjI3YzU1ODRkYWJjN2JmODFlZDdkMTFiLi44NjA1MDRlOTU1MzkxNjQyZjUz
MjdkNjEyNWRlNzU3N2IwYzhlNmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFt
ZWROb2RlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcApA
QCAtODQsNyArODQsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFt
ZWRJdGVtTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbgogCiBQYXNzUmVmUHRyPE5v
ZGU+IE5hbWVkTm9kZU1hcDo6Z2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
IGNvbnN0CiB7Ci0gICAgQXR0cmlidXRlKiBhID0gZ2V0QXR0cmlidXRlSXRlbShuYW1lKTsKKyAg
ICBBdHRyaWJ1dGUqIGEgPSBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlSXRlbShuYW1lKTsK
ICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMDYsOCArMTA2LDggQEAgUGFz
c1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnNldE5hbWVkSXRlbShOb2RlKiBub2RlLCBFeGNl
cHRpb25Db2RlJiBlYykKICAgICBBdHRyKiBhdHRyID0gc3RhdGljX2Nhc3Q8QXR0cio+KG5vZGUp
OwogCiAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyLT5hdHRyKCk7Ci0gICAgc2l6ZV90
IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KGF0dHJpYnV0ZS0+bmFtZSgpKTsKLSAgICBB
dHRyaWJ1dGUqIG9sZEF0dHJpYnV0ZSA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0cmlidXRlSXRl
bShpbmRleCkgOiAwOworICAgIHNpemVfdCBpbmRleCA9IG1fYXR0cmlidXRlRGF0YS5nZXRBdHRy
aWJ1dGVJdGVtSW5kZXgoYXR0cmlidXRlLT5uYW1lKCkpOworICAgIEF0dHJpYnV0ZSogb2xkQXR0
cmlidXRlID0gaW5kZXggIT0gbm90Rm91bmQgPyBtX2F0dHJpYnV0ZURhdGEuYXR0cmlidXRlSXRl
bShpbmRleCkgOiAwOwogICAgIGlmIChvbGRBdHRyaWJ1dGUgPT0gYXR0cmlidXRlKQogICAgICAg
ICByZXR1cm4gbm9kZTsgLy8gd2Uga25vdyBhYm91dCBpdCBhbHJlYWR5CiAKQEAgLTEzNyw3ICsx
MzcsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIEV4Y2VwdAogewogICAgIEFTU0VSVChtX2VsZW1lbnQp
OwogCi0gICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOworICAg
IHNpemVfdCBpbmRleCA9IG1fYXR0cmlidXRlRGF0YS5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFt
ZSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGVjID0gTk9UX0ZPVU5E
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzEsMTUgKzE3MSwxNiBAQCB2b2lkIE5hbWVk
Tm9kZU1hcDo6ZGV0YWNoRnJvbUVsZW1lbnQoKQogYm9vbCBOYW1lZE5vZGVNYXA6Om1hcHNFcXVp
dmFsZW50KGNvbnN0IE5hbWVkTm9kZU1hcCogb3RoZXJNYXApIGNvbnN0CiB7CiAgICAgaWYgKCFv
dGhlck1hcCkKLSAgICAgICAgcmV0dXJuIGlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fYXR0
cmlidXRlRGF0YS5pc0VtcHR5KCk7CiAgICAgCiAgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7
CiAgICAgaWYgKGxlbiAhPSBvdGhlck1hcC0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKKyAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSYgb3RoZXJBdHRyaWJ1dGVE
YXRhID0gb3RoZXJNYXAtPm1fYXR0cmlidXRlRGF0YTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cmlidXRlSXRl
bShpKTsKLSAgICAgICAgQXR0cmlidXRlKiBvdGhlckF0dHIgPSBvdGhlck1hcC0+Z2V0QXR0cmli
dXRlSXRlbShhdHRyLT5uYW1lKCkpOworICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBtX2F0dHJp
YnV0ZURhdGEuYXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgQXR0cmlidXRlKiBvdGhlckF0dHIg
PSBvdGhlckF0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlSXRlbShhdHRyLT5uYW1lKCkpOwogICAg
ICAgICBpZiAoIW90aGVyQXR0ciB8fCBhdHRyLT52YWx1ZSgpICE9IG90aGVyQXR0ci0+dmFsdWUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2Rl
TWFwLmgKaW5kZXggMzIwMWZjZDA4MDM0ZTFmZTAyNWNhZGRjZGMyNDI3YjExMzk3Njc3Ny4uNGQ3
YWRmYmUzZDBlYTcyOGNhYWQ1NDg4OWZkNTMzZWIyNDFkYjQyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1l
ZE5vZGVNYXAuaApAQCAtNjAsMjQgKzYwLDYgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxO
b2RlPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBzaXplX3QgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmxlbmd0aCgpOyB9Ci0gICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmlzRW1wdHkoKTsgfQotCi0gICAgLy8g
SW50ZXJuYWwgaW50ZXJmYWNlLgotCi0gICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZURhdGEuYXR0cmlidXRlSXRlbShp
bmRleCk7IH0KLSAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmdldEF0dHJpYnV0ZUl0
ZW0obmFtZSk7IH0KLSAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5nZXRBdHRyaWJ1
dGVJdGVtSW5kZXgobmFtZSk7IH0KLQotICAgIHZvaWQgc2hyaW5rVG9MZW5ndGgoKSB7IG1fYXR0
cmlidXRlRGF0YS5tX2F0dHJpYnV0ZXMuc2hyaW5rQ2FwYWNpdHkobGVuZ3RoKCkpOyB9Ci0gICAg
dm9pZCByZXNlcnZlSW5pdGlhbENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KSB7IG1fYXR0cmli
dXRlRGF0YS5tX2F0dHJpYnV0ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjYXBhY2l0eSk7IH0K
LQotICAgIC8vIFVzZWQgZHVyaW5nIHBhcnNpbmc6IG9ubHkgaW5zZXJ0cyBpZiBub3QgYWxyZWFk
eSB0aGVyZS4gTm8gZXJyb3IgY2hlY2tpbmchCi0gICAgdm9pZCBpbnNlcnRBdHRyaWJ1dGUoUGFz
c1JlZlB0cjxBdHRyaWJ1dGU+IG5ld0F0dHJpYnV0ZSwgYm9vbCBhbGxvd0R1cGxpY2F0ZXMpCi0g
ICAgewotICAgICAgICBBU1NFUlQoIW1fZWxlbWVudCk7Ci0gICAgICAgIGlmIChhbGxvd0R1cGxp
Y2F0ZXMgfHwgIWdldEF0dHJpYnV0ZUl0ZW0obmV3QXR0cmlidXRlLT5uYW1lKCkpKQotICAgICAg
ICAgICAgYWRkQXR0cmlidXRlKG5ld0F0dHJpYnV0ZSk7Ci0gICAgfQogCiAgICAgYm9vbCBtYXBz
RXF1aXZhbGVudChjb25zdCBOYW1lZE5vZGVNYXAqIG90aGVyTWFwKSBjb25zdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCmlu
ZGV4IGU1NTFjMmZmNWViNmYxNDUwMTc2NmFhYzY4NDM2MWQ2YWQzNWE0YmYuLjlmYTVkMzc2MGYw
OGE2ZDM3YTdkZDU5ODc0ODIxNzhlN2U5ZDQ3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAgLTE5NCw3ICsxOTQsNyBA
QCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWls
YWJsZUlmTmVlZGVkKCkKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1s
U3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgUmVmUHRy
PEhUTUxIdG1sRWxlbWVudD4gZWxlbWVudCA9IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKG1fZG9j
dW1lbnQpOwotICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZU1hcCh0b2tlbi50YWtlQXR0
cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgZWxlbWVudC0+
cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi50YWtlQXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbik7CiAgICAgYXR0YWNoTGF0ZXIobV9hdHRhY2htZW50Um9vdCwgZWxl
bWVudCk7CiAgICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIdG1sRWxlbWVudChlbGVtZW50KTsK
IApAQCAtMjA4LDggKzIwOCw4IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0
cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYKICAgICBpZiAoIXRv
a2VuLmF0dHJpYnV0ZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTmFtZWROb2RlTWFwKiBh
dHRyaWJ1dGVzID0gZWxlbWVudC0+ZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLT5sZW5ndGgoKTsgKytpKSB7
CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT5lbnN1cmVB
dHRyaWJ1dGVEYXRhKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2VuLmF0dHJp
YnV0ZXMoKS0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSB0
b2tlbi5hdHRyaWJ1dGVzKCktPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGlmICghYXR0cmli
dXRlcy0+Z2V0QXR0cmlidXRlSXRlbShhdHRyaWJ1dGUtPm5hbWUoKSkpCiAgICAgICAgICAgICBl
bGVtZW50LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKCksIGF0dHJpYnV0ZS0+dmFsdWUo
KSk7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
U2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIFJlZlB0cjxIVE1M
U2NyaXB0RWxlbWVudD4gZWxlbWVudCA9IEhUTUxTY3JpcHRFbGVtZW50OjpjcmVhdGUoc2NyaXB0
VGFnLCBjdXJyZW50Tm9kZSgpLT5kb2N1bWVudCgpLCB0cnVlKTsKICAgICBpZiAobV9mcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQotICAgICAg
ICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVNYXAodG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwg
bV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgICAgICBlbGVtZW50LT5wYXJzZXJT
ZXRBdHRyaWJ1dGVzKHRva2VuLnRha2VBdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uKTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVtZW50KTsKICAg
ICBtX29wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQucmVsZWFzZSgpKTsKIH0KQEAgLTM5OSw3ICsz
OTksNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sCiB7CiAgICAgUXVhbGlmaWVkTmFtZSB0YWdO
YW1lKG51bGxBdG9tLCB0b2tlbi5uYW1lKCksIG5hbWVzcGFjZVVSSSk7CiAgICAgUmVmUHRyPEVs
ZW1lbnQ+IGVsZW1lbnQgPSBjdXJyZW50Tm9kZSgpLT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50
KHRhZ05hbWUsIHRydWUpOwotICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZU1hcCh0b2tl
bi50YWtlQXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAg
ZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi50YWtlQXR0cmlidXRlcygpLCBtX2Zy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgp
OwogfQogCkBAIC00MTAsNyArNDEwLDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2sKICAgICAv
LyBoYXZlIHRvIHBhc3MgdGhlIGN1cnJlbnQgZm9ybSBlbGVtZW50LiAgV2Ugc2hvdWxkIHJld29y
ayBmb3JtIGFzc29jaWF0aW9uCiAgICAgLy8gdG8gb2NjdXIgYWZ0ZXIgY29uc3RydWN0aW9uIHRv
IGFsbG93IGJldHRlciBjb2RlIHNoYXJpbmcgaGVyZS4KICAgICBSZWZQdHI8RWxlbWVudD4gZWxl
bWVudCA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQodGFnTmFtZSwgY3Vy
cmVudE5vZGUoKS0+ZG9jdW1lbnQoKSwgZm9ybSgpLCB0cnVlKTsKLSAgICBlbGVtZW50LT5wYXJz
ZXJTZXRBdHRyaWJ1dGVNYXAodG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24pOworICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4u
dGFrZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogICAgIEFT
U0VSVChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpOwogICAgIHJldHVybiBlbGVtZW50LnJlbGVh
c2UoKTsKIH0KQEAgLTQyMywxNyArNDIzLDE3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENv
bnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQoSFRNCiBu
YW1lc3BhY2UgewogCiAvLyBGSVhNRTogTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIHRoZSB0b3Agb2Yg
dGhlIGZpbGUuCi1pbmxpbmUgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGNsb25lQXR0cmlidXRl
cyhFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBj
bG9uZUF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0
dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOworICAgIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsK
ICAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgT3du
UHRyPE5hbWVkTm9kZU1hcD4gbmV3QXR0cmlidXRlcyA9IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKCk7
CisgICAgT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gbmV3QXR0cmlidXRlcyA9IEF0dHJpYnV0ZVZl
Y3Rvcjo6Y3JlYXRlKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5s
ZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRl
cy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gY2xvbmUgPSBB
dHRyaWJ1dGU6OmNyZWF0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpKTsK
LSAgICAgICAgbmV3QXR0cmlidXRlcy0+YWRkQXR0cmlidXRlKGNsb25lKTsKKyAgICAgICAgbmV3
QXR0cmlidXRlcy0+YXBwZW5kKGNsb25lKTsKICAgICB9CiAgICAgcmV0dXJuIG5ld0F0dHJpYnV0
ZXMucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4uaAppbmRl
eCBjMTc4Mjg0MzQ2MGM2YzA3OTg5ZmJiYmQ2N2NiMjA0NjI4NjhkNTdkLi5hMzkxZDM0MDkxODFi
NDNiN2NmOWFjOTQwN2JkOTQ4NjRhYmQ5YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVG9rZW4uaApAQCAtODYsNyArODYsNyBAQCBjbGFzcyBBdG9taWNIVE1MVG9rZW4gOiBwdWJs
aWMgQXRvbWljTWFya3VwVG9rZW5CYXNlPEhUTUxUb2tlbj4gewogcHVibGljOgogICAgIEF0b21p
Y0hUTUxUb2tlbihIVE1MVG9rZW4mIHRva2VuKSA6IEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1M
VG9rZW4+KCZ0b2tlbikgeyB9CiAKLSAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuVHlwZXM6
OlR5cGUgdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUsIFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBh
dHRyaWJ1dGVzID0gbnVsbHB0cikKKyAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuVHlwZXM6
OlR5cGUgdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUsIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9y
PiBhdHRyaWJ1dGVzID0gbnVsbHB0cikKICAgICAgICAgOiBBdG9taWNNYXJrdXBUb2tlbkJhc2U8
SFRNTFRva2VuPih0eXBlLCBuYW1lLCBhdHRyaWJ1dGVzKQogICAgIHsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCAzYjU0MTQ5
MTMxN2Q3NzVlMTlmZWE0ZTQyOWNmYmRkYjc5MDI0ZWQwLi43OTdlNTgzZDkxYWY3ZTc4YWQwNmM5
YmRlOTY0NmZlMTUwODljOGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5jcHAKQEAgLTUzMSw3ICs1MzEsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFy
dFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBQYXNzT3duUHRyPE5hbWVkTm9kZU1h
cD4gYXR0cmlidXRlcykKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0YXJ0VGFn
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9y
PiBhdHRyaWJ1dGVzKQogewogICAgIC8vIEZJWE1FOiBXZSdsbCBuZWVkIGEgZmFuY2llciBjb252
ZXJzaW9uIHRoYW4ganVzdCAibG9jYWxOYW1lIiBmb3IgU1ZHL01hdGhNTCB0YWdzLgogICAgIEF0
b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCB0YWdOYW1l
LmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsKQEAgLTU2MCwxMSArNTYwLDExIEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCkKICAgICBw
cm9jZXNzRW5kVGFnKGVuZFApOwogfQogCi1QYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gSFRNTFRy
ZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCitQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1
dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgT3duUHRy
PE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IHRva2VuLnRha2VBdHRyaWJ1dGVzKCk7CisgICAg
T3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gYXR0cmlidXRlcyA9IHRva2VuLnRha2VBdHRyaWJ1dGVz
KCk7CiAgICAgaWYgKCFhdHRyaWJ1dGVzKQotICAgICAgICBhdHRyaWJ1dGVzID0gTmFtZWROb2Rl
TWFwOjpjcmVhdGUoKTsKKyAgICAgICAgYXR0cmlidXRlcyA9IEF0dHJpYnV0ZVZlY3Rvcjo6Y3Jl
YXRlKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGF0dHJpYnV0ZXMtPnJlbW92ZUF0dHJpYnV0ZShu
YW1lQXR0cik7CiAgICAgICAgIGF0dHJpYnV0ZXMtPnJlbW92ZUF0dHJpYnV0ZShhY3Rpb25BdHRy
KTsKQEAgLTU3Miw3ICs1NzIsNyBAQCBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gSFRNTFRyZWVC
dWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUbwogICAgIH0KIAog
ICAgIFJlZlB0cjxBdHRyaWJ1dGU+IG1hcHBlZEF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3JlYXRl
KG5hbWVBdHRyLCBpc2luZGV4VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBhdHRyaWJ1dGVzLT5pbnNl
cnRBdHRyaWJ1dGUobWFwcGVkQXR0cmlidXRlLnJlbGVhc2UoKSwgZmFsc2UpOworICAgIGF0dHJp
YnV0ZXMtPmluc2VydEF0dHJpYnV0ZShtYXBwZWRBdHRyaWJ1dGUucmVsZWFzZSgpKTsKICAgICBy
ZXR1cm4gYXR0cmlidXRlcy5yZWxlYXNlKCk7CiB9CiAKQEAgLTY3OSwxMSArNjc5LDExIEBAIHZv
aWQgYWRqdXN0QXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBtYXBM
b3dlcmVkTG9jYWxOYW1lVG9OYW1lKGNhc2VNYXAsIGF0dHJzLCBsZW5ndGgpOwogICAgIH0KIAot
ICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKKyAgICBB
dHRyaWJ1dGVWZWN0b3IqIGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7CiAgICAgaWYg
KCFhdHRyaWJ1dGVzKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHVuc2lnbmVkIHggPSAw
OyB4IDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsreCkgeworICAgIGZvciAodW5zaWduZWQgeCA9
IDA7IHggPCBhdHRyaWJ1dGVzLT5zaXplKCk7ICsreCkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0
dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oeCk7CiAgICAgICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGNhc2VkTmFtZSA9IGNhc2VNYXAtPmdldChhdHRyaWJ1dGUtPmxvY2FsTmFt
ZSgpKTsKICAgICAgICAgaWYgKCFjYXNlZE5hbWUubG9jYWxOYW1lKCkuaXNOdWxsKCkpCkBAIC03
MjgsMTEgKzcyOCwxMSBAQCB2b2lkIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgICAgIG1hcC0+YWRkKCJ4bWxuczp4bGluayIsIFF1YWxpZmllZE5h
bWUoInhtbG5zIiwgInhsaW5rIiwgWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkkpKTsKICAg
ICB9CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7
CisgICAgQXR0cmlidXRlVmVjdG9yKiBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0cmlidXRlcygpOwog
ICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yICh1bnNpZ25l
ZCB4ID0gMDsgeCA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK3gpIHsKKyAgICBmb3IgKHVuc2ln
bmVkIHggPSAwOyB4IDwgYXR0cmlidXRlcy0+c2l6ZSgpOyArK3gpIHsKICAgICAgICAgQXR0cmli
dXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKHgpOwogICAgICAgICBj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0gbWFwLT5nZXQoYXR0cmlidXRlLT5sb2NhbE5hbWUo
KSk7CiAgICAgICAgIGlmICghbmFtZS5sb2NhbE5hbWUoKS5pc051bGwoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKaW5kZXggMDE4M2QyMGNhZTFjZWEy
NzlkZmE5ZmY0NzM0ZTg4YmM0ZjZkNjViYi4uMzUwMjRmODg4YzljOWI0NWY1NzQ2MzUzNDdjNjQ1
ZjBlMTFlMjFjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWls
ZGVyLmgKQEAgLTE1MSw3ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJvY2Vzc0NoYXJh
Y3RlckJ1ZmZlcihFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyJik7CiAgICAgaW5saW5lIHZv
aWQgcHJvY2Vzc0NoYXJhY3RlckJ1ZmZlckZvckluQm9keShFeHRlcm5hbENoYXJhY3RlclRva2Vu
QnVmZmVyJik7CiAKLSAgICB2b2lkIHByb2Nlc3NGYWtlU3RhcnRUYWcoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzID0gbnVsbHB0cik7Cisg
ICAgdm9pZCBwcm9jZXNzRmFrZVN0YXJ0VGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBQYXNzT3du
UHRyPEF0dHJpYnV0ZVZlY3Rvcj4gYXR0cmlidXRlcyA9IG51bGxwdHIpOwogICAgIHZvaWQgcHJv
Y2Vzc0Zha2VFbmRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgcHJvY2Vzc0Zh
a2VDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgcHJvY2Vzc0Zha2VQRW5kVGFn
SWZQSW5CdXR0b25TY29wZSgpOwpAQCAtMTcyLDcgKzE3Miw3IEBAIHByaXZhdGU6CiAgICAgaW5s
aW5lIGJvb2wgc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9r
ZW4mKTsKICAgICB2b2lkIHByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRv
a2VuJik7CiAKLSAgICBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlc0ZvcklzaW5k
ZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICBQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rv
cj4gYXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mKTsKIAogICAgIEhU
TUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5n
RWxlbWVudChFbGVtZW50Kik7CiAgICAgdm9pZCBjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWlj
SFRNTFRva2VuJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0
RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3Vt
ZW50UGFyc2VyLmNwcAppbmRleCBmNDYwMWRlNmFjMzYwYjA5Yjg2N2E4MjRiNmRlNmRhMzY3YWI4
MzU2Li4zNTg5YzNmNWY1MjNiNjM0YWQwNjZkMzA3YTdkOTZlNWFhMzE2MDM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKQEAgLTYx
LDggKzYxLDggQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQcmVFbGVtZW50
KCkKICAgICAvLyBkaXN0cnViaW5nIHRoZSBsaW5lL2NvbHVtbiBudW1iZXIgY2FsY3VsYXRpb25z
LgogCiAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gc3R5bGVBdHRyaWJ1dGUgPSBBdHRyaWJ1dGU6OmNy
ZWF0ZSgic3R5bGUiLCAid29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdy
YXA7Iik7Ci0gICAgT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IE5hbWVkTm9kZU1h
cDo6Y3JlYXRlKCk7Ci0gICAgYXR0cmlidXRlcy0+aW5zZXJ0QXR0cmlidXRlKHN0eWxlQXR0cmli
dXRlLnJlbGVhc2UoKSwgZmFsc2UpOworICAgIE93blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJp
YnV0ZXMgPSBBdHRyaWJ1dGVWZWN0b3I6OmNyZWF0ZSgpOworICAgIGF0dHJpYnV0ZXMtPmluc2Vy
dEF0dHJpYnV0ZShzdHlsZUF0dHJpYnV0ZS5yZWxlYXNlKCkpOwogICAgIEF0b21pY0hUTUxUb2tl
biBmYWtlUHJlKEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZywgcHJlVGFnLmxvY2FsTmFtZSgpLCBh
dHRyaWJ1dGVzLnJlbGVhc2UoKSk7CiAKICAgICB0cmVlQnVpbGRlcigpLT5jb25zdHJ1Y3RUcmVl
RnJvbUF0b21pY1Rva2VuKGZha2VQcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFy
a3VwVG9rZW5CYXNlLmgKaW5kZXggOTg2NTM4YjhkNzAzNWUxZTAzMTgzODRlMjFjYmJkZGQ4MzBh
ODYwOS4uMmEwYWEzMDUwODQ1N2E4OTBmZWUwZTcxZjRlZGE3NWVjMzEzZGVjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCkBAIC0yNyw3ICsyNyw3IEBA
CiAjaWZuZGVmIE1hcmt1cFRva2VuQmFzZV9oCiAjZGVmaW5lIE1hcmt1cFRva2VuQmFzZV9oCiAK
LSNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKKyNpbmNsdWRlICJFbGVtZW50QXR0cmlidXRlRGF0
YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC00MTAsNyArNDEwLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAg
QXRvbWljTWFya3VwVG9rZW5CYXNlKHR5cGVuYW1lIFRva2VuOjpUeXBlOjpUeXBlIHR5cGUsIEF0
b21pY1N0cmluZyBuYW1lLCBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IG51
bGxwdHIpCisgICAgQXRvbWljTWFya3VwVG9rZW5CYXNlKHR5cGVuYW1lIFRva2VuOjpUeXBlOjpU
eXBlIHR5cGUsIEF0b21pY1N0cmluZyBuYW1lLCBQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4g
YXR0cmlidXRlcyA9IG51bGxwdHIpCiAgICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAgICAgICwg
bV9uYW1lKG5hbWUpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCkBAIC00NDYs
MTMgKzQ0NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXMtPmdldEF0
dHJpYnV0ZUl0ZW0oYXR0cmlidXRlTmFtZSk7CiAgICAgfQogCi0gICAgTmFtZWROb2RlTWFwKiBh
dHRyaWJ1dGVzKCkgY29uc3QKKyAgICBBdHRyaWJ1dGVWZWN0b3IqIGF0dHJpYnV0ZXMoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKHVzZXNBdHRyaWJ1dGVzKCkpOwogICAgICAgICByZXR1
cm4gbV9hdHRyaWJ1dGVzLmdldCgpOwogICAgIH0KIAotICAgIFBhc3NPd25QdHI8TmFtZWROb2Rl
TWFwPiB0YWtlQXR0cmlidXRlcygpCisgICAgUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IHRh
a2VBdHRyaWJ1dGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh1c2VzQXR0cmlidXRlcygpKTsK
ICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlcy5yZWxlYXNlKCk7CkBAIC01MTYsNyArNTE2LDcg
QEAgcHJvdGVjdGVkOgogICAgIC8vIEZvciBTdGFydFRhZyBhbmQgRW5kVGFnCiAgICAgYm9vbCBt
X3NlbGZDbG9zaW5nOwogCi0gICAgT3duUHRyPE5hbWVkTm9kZU1hcD4gbV9hdHRyaWJ1dGVzOwor
ICAgIE93blB0cjxBdHRyaWJ1dGVWZWN0b3I+IG1fYXR0cmlidXRlczsKIH07CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFRva2VuPgpAQCAtNTI2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lkIEF0b21pY01h
cmt1cFRva2VuQmFzZTxUb2tlbj46OmluaXRpYWxpemVBdHRyaWJ1dGVzKGNvbnN0IHR5cGVuYW1l
IFRvCiAgICAgaWYgKCFzaXplKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2F0dHJpYnV0ZXMg
PSBOYW1lZE5vZGVNYXA6OmNyZWF0ZSgpOworICAgIG1fYXR0cmlidXRlcyA9IEF0dHJpYnV0ZVZl
Y3Rvcjo6Y3JlYXRlKCk7CiAgICAgbV9hdHRyaWJ1dGVzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHNpemUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAg
IGNvbnN0IHR5cGVuYW1lIFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNb
aV07CkBAIC01NDEsNyArNTQxLDcgQEAgaW5saW5lIHZvaWQgQXRvbWljTWFya3VwVG9rZW5CYXNl
PFRva2VuPjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMoY29uc3QgdHlwZW5hbWUgVG8KICAgICAgICAg
QVNTRVJUKGF0dHJpYnV0ZS5tX3ZhbHVlUmFuZ2UubV9lbmQpOwogCiAgICAgICAgIEF0b21pY1N0
cmluZyB2YWx1ZShhdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCksIGF0dHJpYnV0ZS5tX3ZhbHVlLnNp
emUoKSk7Ci0gICAgICAgIG1fYXR0cmlidXRlcy0+aW5zZXJ0QXR0cmlidXRlKEF0dHJpYnV0ZTo6
Y3JlYXRlKG5hbWVGb3JBdHRyaWJ1dGUoYXR0cmlidXRlKSwgdmFsdWUpLCBmYWxzZSk7CisgICAg
ICAgIG1fYXR0cmlidXRlcy0+aW5zZXJ0QXR0cmlidXRlKEF0dHJpYnV0ZTo6Y3JlYXRlKG5hbWVG
b3JBdHRyaWJ1dGUoYXR0cmlidXRlKSwgdmFsdWUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW4uaCBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MVG9rZW4uaAppbmRleCBkMWJkYzBlNmI5OTEzY2NlODNkZDFlZTRkZWVmN2Y3
M2E0ZDJjNDQ3Li4xZWQxNmNhOWJjYmI2N2FmMjEyMzVkYjRjOTZkY2FiNDE3NjM0OWJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuLmgKKysrIGIvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbi5oCkBAIC00MzEsNyArNDMxLDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogCi0gICAgQXRvbWljWE1MVG9rZW4oWE1MVG9rZW5UeXBlczo6
VHlwZSB0eXBlLCBBdG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGF0
dHJpYnV0ZXMgPSBudWxscHRyKQorICAgIEF0b21pY1hNTFRva2VuKFhNTFRva2VuVHlwZXM6OlR5
cGUgdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUsIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBh
dHRyaWJ1dGVzID0gbnVsbHB0cikKICAgICAgICAgOiBBdG9taWNNYXJrdXBUb2tlbkJhc2U8WE1M
VG9rZW4+KHR5cGUsIG5hbWUsIGF0dHJpYnV0ZXMpCiAgICAgewogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggMGMyYjJkNmEwYzc5ZjQ4
Y2I2ZmQzZjQ3MDI2NmRmZTg5MWNiOGIzYS4uODE3OTNlZDZkNTc2Y2E4MWVjNGQwZTdlNmMwNDJh
ZDEyZGI3NzU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVl
QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRl
ci5jcHAKQEAgLTMwMSw3ICszMDEsNyBAQCB2b2lkIFhNTFRyZWVCdWlsZGVyOjpwcm9jZXNzTmFt
ZXNwYWNlcyhjb25zdCBBdG9taWNYTUxUb2tlbiYgdG9rZW4sIE5vZGVTdGFja0l0ZQogICAgIGlm
ICghdG9rZW4uYXR0cmlidXRlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRva2VuLmF0dHJpYnV0ZXMoKS0+bGVuZ3RoKCk7ICsraSkgeworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLT5zaXplKCk7ICsraSkgewog
ICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHRva2VuLmF0dHJpYnV0ZXMoKS0+YXR0cmli
dXRlSXRlbShpKTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSgpLnByZWZpeCgpID09IHht
bG5zQXRvbSkKICAgICAgICAgICAgIHN0YWNrSXRlbS5zZXROYW1lc3BhY2VVUkkoYXR0cmlidXRl
LT5uYW1lKCkubG9jYWxOYW1lKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSk7CkBAIC0zMTUsNyArMzE1
LDcgQEAgdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0F0dHJpYnV0ZXMoY29uc3QgQXRvbWlj
WE1MVG9rZW4mIHRva2VuLCBOb2RlU3RhY2tJdGUKICAgICBpZiAoIXRva2VuLmF0dHJpYnV0ZXMo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b2tlbi5h
dHRyaWJ1dGVzKCktPmxlbmd0aCgpOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRva2VuLmF0dHJpYnV0ZXMoKS0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgQXR0cmlidXRlKiBh
dHRyaWJ1dGUgPSB0b2tlbi5hdHRyaWJ1dGVzKCktPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lKCkucHJl
Zml4KCkgPT0geG1sbnNBdG9tKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5h
bWVkTm9kZU1hcC5jcHAKaW5kZXggZTI0NTVlNmI5ZjdlMTI3ODljZGIwYzE3ZGZlNTI4ZGRjZmQ1
MWI1Zi4uYmE1ZjI5NjI1YjE0MTNjNjk2MDQ4ODJhOTdhZGM5YzU4OGExMmI4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTmFtZWROb2RlTWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOYW1lZE5vZGVNYXAuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViTmFtZWROb2RlTWFwLmgi
CiAKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5j
bHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIldlYkF0dHJpYnV0ZS5oIgpAQCAtNjMsNyArNjQsNyBA
QCB1bnNpZ25lZCBXZWJOYW1lZE5vZGVNYXA6Omxlbmd0aCgpIGNvbnN0CiAKIFdlYkF0dHJpYnV0
ZSBXZWJOYW1lZE5vZGVNYXA6OmF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFdlYkF0dHJpYnV0ZShtX3ByaXZhdGUtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgp
KTsKKyAgICByZXR1cm4gV2ViQXR0cmlidXRlKG1fcHJpdmF0ZS0+ZWxlbWVudCgpLT5hdHRyaWJ1
dGVJdGVtKGluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129718</attachid>
            <date>2012-03-01 09:52:20 -0800</date>
            <delta_ts>2012-03-01 14:30:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79963-20120301145219.patch</filename>
            <type>text/plain</type>
            <size>37996</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzdlMDEwNTIzYjZlZjUx
YTIxYjFlYThkOTA0N2FhNWY4NDI0NTViOS4uYTBhZDdhNWNkZTVjYjdiYWUwYTdhYzkwMGJiNzkw
YWY1YzQzZGJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDEyLTAzLTAxICBDYWlv
IE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgTWFrZSBwYXJzZXIgY29kZSBub3QgZGVwZW5kIG9uIE5hbWVkTm9kZU1hcAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NjMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9m
IGNyZWF0aW5nIEVsZW1lbnQtbGVzcyBOYW1lZE5vZGVNYXBzLCB0aGUgcGFyc2luZyBjb2RlIG5v
dyBjcmVhdGVzCisgICAgICAgIEF0dHJpYnV0ZVZlY3RvcnMsIHRoYXQgYXJlIHVzZWQgdG8gZmls
bCBFbGVtZW50IHZpYSB0aGUgcGFyc2VyU2V0QXR0cmlidXRlcygpCisgICAgICAgIG1ldGhvZC4g
VGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIGV2ZW4gbW9yZSBtZXRob2RzIGZyb20gdGhlIE5hbWVk
Tm9kZU1hcC4KKworICAgICAgICBUaGUgQXR0cmlidXRlVmVjdG9yIGNsYXNzIGNvbnRhaW5zIGNv
bnZlbmllbmNlIG1ldGhvZHMgdGhhdCB0YWtlIHRoZSBhdHRyaWJ1dGUncworICAgICAgICBRdWFs
aWZpZWROYW1lIGFzIHBhcmFtZXRlci4gVGhpcyBjbGFzcyBpcyBhbHNvIHVzZWQgaW5zaWRlIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhLgorCisgICAgICAgICogZG9tL0F0dHIuaDoKKyAgICAgICAgKEF0
dHIpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpwYXJzZXJTZXRB
dHRyaWJ1dGVzKTogTm93IHdlIGhhdmUgdG8gY3JlYXRlIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAg
c3RvcmFnZSwgYW5kIGZpbGwgaXQgKGJ5IFZlY3Rvcjo6c3dhcCgpKSB3aXRoIHRoZSBwYXNzZWQg
YXR0cmlidXRlcy4gQWxzbyB1c2UgYW4KKyAgICAgICAgZWFybHkgcmV0dXJuIHRvIHJlZHVjZSBp
bmRlbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0VVJMQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OmdldE5vbkVtcHR5VVJMQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20v
RWxlbWVudC5oOgorICAgICAgICAoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpmYXN0SGFzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZhc3RHZXRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlc1dpdGhv
dXRVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0cmlidXRlSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVJdGVtKToKKyAgICAgICAgKiBk
b20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRl
VmVjdG9yOjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
ZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmg6CisgICAgICAgIChBdHRyaWJ1dGVWZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlVmVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXR0cmlidXRlVmVjdG9yOjphdHRyaWJ1dGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkF0dHJpYnV0ZVZlY3Rvcjo6QXR0cmlidXRlVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlVmVjdG9yOjpnZXRBdHRyaWJ1dGVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF0dHJpYnV0ZVZlY3Rvcjo6Z2V0QXR0cmlidXRlSXRlbUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkF0dHJpYnV0ZVZlY3Rvcjo6aW5zZXJ0QXR0cmlidXRlKTogQm9v
bGVhbiBwYXJhbWV0ZXIgaXNuJ3QgbmVjZXNzYXJ5CisgICAgICAgIHNpbmNlIGFsbCB0aGUgY2Fs
bGVycyB1c2VkICdmYWxzZScsIGluZGljYXRpbmcgdGhhdCBkdXBsaWNhdGVzIHdlcmUgbm90IGFs
bG93ZWQuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6YXR0cmlidXRl
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmli
dXRlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0
cmlidXRlSXRlbUluZGV4KToKKyAgICAgICAgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKToKKyAgICAg
ICAgKiBkb20vTmFtZWROb2RlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1h
cDo6Z2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFt
ZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6bWFwc0VxdWl2YWxlbnQpOgorICAg
ICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29u
c3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVI
VE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MVG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6QXRvbWljSFRN
TFRva2VuKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0YXJ0VGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1
dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1
aWxkZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVu
dCk6CisgICAgICAgICogeG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6YXR0cmlidXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OnRha2VBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKEF0b21pY01hcmt1cFRva2VuQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjo6OmluaXRp
YWxpemVBdHRyaWJ1dGVzKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTFRva2VuLmg6CisgICAg
ICAgIChXZWJDb3JlOjpBdG9taWNYTUxUb2tlbjo6QXRvbWljWE1MVG9rZW4pOgorICAgICAgICAq
IHhtbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NOYW1lc3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzQXR0cmlidXRlcyk6CisKIDIwMTItMDItMjkgIERhdmlkIEh5YXR0ICA8
aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03OTk0MApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzODk0ZWU2NDRh
ZmI2YjM5MGJkNGU1ZGViNmZiMWM0NTJhMTgzZDNlLi5hOTA4MDBmZGFiMjRkN2MxOGNkOWU3ZTEy
YTE4ZGFlZmRiY2UyYmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDEyLTAzLTAxICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9s
aXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgTWFrZSBwYXJzZXIgY29kZSBub3QgZGVw
ZW5kIG9uIE5hbWVkTm9kZU1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzk5NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHNyYy9XZWJOYW1lZE5vZGVNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJOYW1lZE5vZGVNYXA6OmF0dHJpYnV0ZUl0ZW0pOgorCiAyMDEyLTAyLTI5ICBEYW5hIEphbnNl
bnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRG9uJ3QgbGV0
IGludmFsaWRhdGlvbiBmb3IgbmV4dCBmcmFtZSBwcmV2ZW50IHRpbGUgdXBsb2FkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIu
aAppbmRleCBiNzAzNTc0OTU4YTJlNDM3MWRjYzhkZWE1YmE2ZjFjZmEwMTU4NzYxLi4yODZjZmFm
YjM4MTczNjJjNWEwNGMzNDAxMzBjYjE1MjdjNTNhMDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQXR0ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmgKQEAgLTM5LDgg
KzM5LDggQEAgY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIC8vIGRlc3RydWN0aW9uLiBob3dl
dmVyLCB0aGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCiAKIGNsYXNzIEF0dHIgOiBwdWJsaWMg
Q29udGFpbmVyTm9kZSB7CisgICAgZnJpZW5kIGNsYXNzIEF0dHJpYnV0ZVZlY3RvcjsKICAgICBm
cmllbmQgY2xhc3MgRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci0gICAgZnJpZW5kIGNsYXNzIE5hbWVk
Tm9kZU1hcDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdHRyPiBjcmVhdGUoRWxl
bWVudCosIERvY3VtZW50KiwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsKICAgICB2aXJ0dWFsIH5B
dHRyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggOThjMjkzMTg0NmM0MmMxZWE5ODRiZTY2
YjIyZDdkMjJhNWI0ODIyYS4uOWNiM2QxN2JkNWJmNWNmNmYxZDc4OTA2OTVmNzBhNGE3NWIxOGJi
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMjIxLDcgKzIyMSw3IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
IGNvbnN0CiAjZW5kaWYKIAogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBpZiAo
QXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShu
YW1lKSkKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAt
PmF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgfQogICAgIHJldHVybiBudWxsQXRvbTsKQEAg
LTcyNSw3ICs3MjUsNyBAQCBzdGF0aWMgYm9vbCBpc0F0dHJpYnV0ZVRvUmVtb3ZlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdgogICAgIHJldHVybiAobmFt
ZS5sb2NhbE5hbWUoKS5lbmRzV2l0aChocmVmQXR0ci5sb2NhbE5hbWUoKSkgfHwgbmFtZSA9PSBz
cmNBdHRyIHx8IG5hbWUgPT0gYWN0aW9uQXR0cikgJiYgcHJvdG9jb2xJc0phdmFTY3JpcHQoc3Ry
aXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHZhbHVlKSk7ICAgICAgIAogfQogCi12b2lk
IEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZU1hcChQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4g
bGlzdCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCit2
b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMoUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0
b3I+IGF0dHJpYnV0ZVZlY3RvciwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGlu
Z1Blcm1pc3Npb24pCiB7CiAgICAgQVNTRVJUKCFpbkRvY3VtZW50KCkpOwogICAgIEFTU0VSVCgh
cGFyZW50Tm9kZSgpKTsKQEAgLTczMywzNCArNzMzLDM4IEBAIHZvaWQgRWxlbWVudDo6cGFyc2Vy
U2V0QXR0cmlidXRlTWFwKFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBsaXN0LCBGcmFnbWVudFNj
cmlwCiAgICAgZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAogICAgIEFTU0VSVCgh
bV9hdHRyaWJ1dGVNYXApOwotICAgIG1fYXR0cmlidXRlTWFwID0gbGlzdDsKIAotICAgIGlmICht
X2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRl
RGF0YSA9ICZtX2F0dHJpYnV0ZU1hcC0+bV9hdHRyaWJ1dGVEYXRhOwotICAgICAgICBtX2F0dHJp
YnV0ZU1hcC0+bV9lbGVtZW50ID0gdGhpczsKLSAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMg
Y3JlYXRlZCBhcyByZXN1bHQgb2YgYSBwYXN0ZSBvciBkcmFnLW4tZHJvcCBvcGVyYXRpb24KLSAg
ICAgICAgLy8gd2Ugd2FudCB0byByZW1vdmUgYWxsIHRoZSBzY3JpcHQgYW5kIGV2ZW50IGhhbmRs
ZXJzLgotICAgICAgICBpZiAoc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGlu
Z05vdEFsbG93ZWQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICAgICAg
d2hpbGUgKGkgPCBtX2F0dHJpYnV0ZU1hcC0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlRGF0YS0+bV9hdHRy
aWJ1dGVzW2ldLT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRXZlbnRIYW5kbGVyQXR0
cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZURh
dGEtPm1fYXR0cmlidXRlcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChpc0F0dHJpYnV0ZVRv
UmVtb3ZlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+dmFs
dWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tp
XS0+c2V0VmFsdWUobnVsbEF0b20pOwotICAgICAgICAgICAgICAgIGkrKzsKKyAgICBpZiAoIWF0
dHJpYnV0ZVZlY3RvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hdHRyaWJ1dGVNYXAgPSBO
YW1lZE5vZGVNYXA6OmNyZWF0ZSh0aGlzKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0
cmlidXRlRGF0YSA9IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCk7CisgICAgYXR0cmli
dXRlRGF0YS0+bV9hdHRyaWJ1dGVzLnN3YXAoKmF0dHJpYnV0ZVZlY3Rvcik7CisKKyAgICBtX2F0
dHJpYnV0ZU1hcC0+bV9lbGVtZW50ID0gdGhpczsKKyAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBj
cmVhdGVkIGFzIHJlc3VsdCBvZiBhIHBhc3RlIG9yIGRyYWctbi1kcm9wIG9wZXJhdGlvbgorICAg
IC8vIHdlIHdhbnQgdG8gcmVtb3ZlIGFsbCB0aGUgc2NyaXB0IGFuZCBldmVudCBoYW5kbGVycy4K
KyAgICBpZiAoc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93
ZWQpIHsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgbV9hdHRy
aWJ1dGVNYXAtPmxlbmd0aCgpKSB7CisgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCk7Cisg
ICAgICAgICAgICBpZiAoaXNFdmVudEhhbmRsZXJBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHsK
KyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXMucmVtb3ZlKGkpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaXNBdHRyaWJ1dGVUb1JlbW92ZShhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVEYXRhLT5tX2F0
dHJpYnV0ZXNbaV0tPnZhbHVlKCkpKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZURhdGEtPm1f
YXR0cmlidXRlc1tpXS0+c2V0VmFsdWUobnVsbEF0b20pOworICAgICAgICAgICAgaSsrOwogICAg
ICAgICB9Ci0gICAgICAgIC8vIFN0b3JlIHRoZSBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGNoYW5n
ZWQgb24gdGhlIHN0YWNrIGluIGNhc2UKLSAgICAgICAgLy8gYXR0cmlidXRlQ2hhbmdlZCBtdXRh
dGVzIG1fYXR0cmlidXRlTWFwLgotICAgICAgICBWZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4gPiBh
dHRyaWJ1dGVzOwotICAgICAgICBhdHRyaWJ1dGVEYXRhLT5jb3B5QXR0cmlidXRlc1RvVmVjdG9y
KGF0dHJpYnV0ZXMpOwotICAgICAgICBmb3IgKFZlY3RvcjxSZWZQdHI8QXR0cmlidXRlPiA+Ojpp
dGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOyBpdGVyICE9IGF0dHJpYnV0ZXMuZW5k
KCk7ICsraXRlcikKLSAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQoaXRlci0+Z2V0KCkpOwog
ICAgIH0KKworICAgIC8vIFN0b3JlIHRoZSBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGNoYW5nZWQg
b24gdGhlIHN0YWNrIGluIGNhc2UKKyAgICAvLyBhdHRyaWJ1dGVDaGFuZ2VkIG11dGF0ZXMgbV9h
dHRyaWJ1dGVNYXAuCisgICAgVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4gYXR0cmlidXRlczsK
KyAgICBhdHRyaWJ1dGVEYXRhLT5jb3B5QXR0cmlidXRlc1RvVmVjdG9yKGF0dHJpYnV0ZXMpOwor
ICAgIGZvciAoVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID46Oml0ZXJhdG9yIGl0ZXIgPSBhdHRy
aWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKQorICAgICAg
ICBhdHRyaWJ1dGVDaGFuZ2VkKGl0ZXItPmdldCgpKTsKIH0KIAogYm9vbCBFbGVtZW50OjpoYXNB
dHRyaWJ1dGVzKCkgY29uc3QKQEAgLTg2NCwxMiArODY4LDEyIEBAIHZvaWQgRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKQogCiAgICAgaWYgKG1fYXR0cmlidXRlTWFwKSB7CiAgICAgICAg
IGlmIChoYXNJRCgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IG1fYXR0cmli
dXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGRvY3VtZW50KCktPmlkQXR0cmlidXRlTmFtZSgpKTsK
KyAgICAgICAgICAgIEF0dHJpYnV0ZSogaWRJdGVtID0gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0
ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShkb2N1bWVudCgpLT5pZEF0dHJpYnV0ZU5hbWUoKSk7
CiAgICAgICAgICAgICBpZiAoaWRJdGVtICYmICFpZEl0ZW0tPmlzTnVsbCgpKQogICAgICAgICAg
ICAgICAgIHVwZGF0ZUlkKG51bGxBdG9tLCBpZEl0ZW0tPnZhbHVlKCkpOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChoYXNOYW1lKCkpIHsKLSAgICAgICAgICAgIEF0dHJpYnV0ZSogbmFtZUl0ZW0g
PSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShIVE1MTmFtZXM6Om5hbWVBdHRyKTsK
KyAgICAgICAgICAgIEF0dHJpYnV0ZSogbmFtZUl0ZW0gPSBtX2F0dHJpYnV0ZU1hcC0+YXR0cmli
dXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6bmFtZUF0dHIpOwogICAgICAg
ICAgICAgaWYgKG5hbWVJdGVtICYmICFuYW1lSXRlbS0+aXNOdWxsKCkpCiAgICAgICAgICAgICAg
ICAgdXBkYXRlTmFtZShudWxsQXRvbSwgbmFtZUl0ZW0tPnZhbHVlKCkpOwogICAgICAgICB9CkBA
IC04ODAsMTIgKzg4NCwxMiBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQog
ewogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewogICAgICAgICBpZiAoaGFzSUQoKSkgewotICAg
ICAgICAgICAgQXR0cmlidXRlKiBpZEl0ZW0gPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRl
SXRlbShkb2N1bWVudCgpLT5pZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAgICAgICAgICBBdHRyaWJ1
dGUqIGlkSXRlbSA9IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0
ZUl0ZW0oZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAgaWYgKGlk
SXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKICAgICAgICAgICAgICAgICB1cGRhdGVJZChpZEl0
ZW0tPnZhbHVlKCksIG51bGxBdG9tKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaGFzTmFtZSgp
KSB7Ci0gICAgICAgICAgICBBdHRyaWJ1dGUqIG5hbWVJdGVtID0gbV9hdHRyaWJ1dGVNYXAtPmdl
dEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVzOjpuYW1lQXR0cik7CisgICAgICAgICAgICBBdHRyaWJ1
dGUqIG5hbWVJdGVtID0gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmli
dXRlSXRlbShIVE1MTmFtZXM6Om5hbWVBdHRyKTsKICAgICAgICAgICAgIGlmIChuYW1lSXRlbSAm
JiAhbmFtZUl0ZW0tPmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZU5hbWUobmFtZUl0
ZW0tPnZhbHVlKCksIG51bGxBdG9tKTsKICAgICAgICAgfQpAQCAtMTc1MSw3ICsxNzU1LDcgQEAg
S1VSTCBFbGVtZW50OjpnZXRVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkg
Y29uc3QKIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgaWYgKG1fYXR0cmlidXRlTWFwKSB7
Ci0gICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IG1fYXR0cmlidXRlTWFwLT5nZXRB
dHRyaWJ1dGVJdGVtKG5hbWUpKQorICAgICAgICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBt
X2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpKQog
ICAgICAgICAgICAgQVNTRVJUKGlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkpOwogICAgIH0KICNl
bmRpZgpAQCAtMTc2Miw3ICsxNzY2LDcgQEAgS1VSTCBFbGVtZW50OjpnZXROb25FbXB0eVVSTEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKLSAgICAgICAgaWYgKEF0dHJpYnV0
ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCisg
ICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1
dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAgICAgICAgICBBU1NFUlQoaXNV
UkxBdHRyaWJ1dGUoYXR0cmlidXRlKSk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApp
bmRleCBjMjMxY2JlNzE5OWNlYjgzNWFlODZjYTI4MGZhYzhkNmZjOWMxNmI5Li4zMDc2ZDc4OWU1
ODdiMWIxOWU2YzQ0ZWMzNjJjYmQzODdhOWI5MTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTIz
Nyw3ICsyMzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQo
QXR0cmlidXRlKik7CiAKICAgICAvLyBPbmx5IGNhbGxlZCBieSB0aGUgcGFyc2VyIGltbWVkaWF0
ZWx5IGFmdGVyIGVsZW1lbnQgY29uc3RydWN0aW9uLgotICAgIHZvaWQgcGFyc2VyU2V0QXR0cmli
dXRlTWFwKFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNz
aW9uKTsKKyAgICB2b2lkIHBhcnNlclNldEF0dHJpYnV0ZXMoUGFzc093blB0cjxBdHRyaWJ1dGVW
ZWN0b3I+LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogCiAgICAgRWxlbWVudEF0dHJp
YnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZU1hcCA/
IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCkgOiAwOyB9CiAgICAgRWxlbWVudEF0dHJp
YnV0ZURhdGEqIGVuc3VyZUF0dHJpYnV0ZURhdGEoKSBjb25zdDsKQEAgLTYwNywxNCArNjA3LDE0
IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OndpbGxSZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpmYXN0SGFz
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKG5hbWUpKTsKLSAgICByZXR1cm4gbV9hdHRyaWJ1
dGVNYXAgJiYgbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CisgICAgcmV0
dXJuIG1fYXR0cmlidXRlTWFwICYmIG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCktPmdl
dEF0dHJpYnV0ZUl0ZW0obmFtZSk7CiB9CiAKIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIEVs
ZW1lbnQ6OmZhc3RHZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QK
IHsKICAgICBBU1NFUlQoZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQobmFtZSkpOwogICAgIGlm
IChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBt
X2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKSkKKyAgICAgICAgaWYgKEF0dHJp
YnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0
cmlidXRlSXRlbShuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7
CiAgICAgfQogICAgIHJldHVybiBudWxsQXRvbTsKQEAgLTYyMiw3ICs2MjIsNyBAQCBpbmxpbmUg
Y29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpCiAKIGlubGluZSBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZXNXaXRo
b3V0VXBkYXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAgJiYgIW1fYXR0
cmlidXRlTWFwLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwICYmICFtX2F0
dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5pc0VtcHR5KCk7CiB9CiAKIGlubGluZSBjb25z
dCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgY29uc3QKQEAg
LTY2NCwxMyArNjY0LDEzIEBAIGlubGluZSBzaXplX3QgRWxlbWVudDo6YXR0cmlidXRlQ291bnQo
KSBjb25zdAogaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudDo6YXR0cmlidXRlSXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9hdHRyaWJ1dGVNYXApOwotICAgIHJldHVy
biBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlSXRlbShpbmRleCk7CisgICAgcmV0dXJuIG1fYXR0
cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCktPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpOwogfQogCiBp
bmxpbmUgQXR0cmlidXRlKiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fYXR0cmlidXRlTWFwKTsKLSAgICBy
ZXR1cm4gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CisgICAgcmV0dXJu
IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7
CiB9CiAKIGlubGluZSB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZSh1bnNpZ25lZCBpbmRl
eCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCmluZGV4IDcx
NDU3ZjRiMTAzMGEzYWVjMmMzMjJiZjU2OTIyYjVjNDM5NjEwNjcuLjc2OWZlYjQxZTlhY2ZlYmI1
MzA2M2IwMWM0MDVmNTEwMjU0NDg3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50QXR0cmlidXRlRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRB
dHRyaWJ1dGVEYXRhLmNwcApAQCAtMzEsNiArMzEsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCit2b2lkIEF0dHJpYnV0ZVZlY3Rvcjo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUpCit7CisgICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4
KG5hbWUpOworICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gYXQoaW5kZXgpOworICAgIGlmIChBdHRy
KiBhdHRyID0gYXR0cmlidXRlLT5hdHRyKCkpCisgICAgICAgIGF0dHItPm1fZWxlbWVudCA9IDA7
CisgICAgcmVtb3ZlKGluZGV4KTsKK30KKwogRWxlbWVudEF0dHJpYnV0ZURhdGE6On5FbGVtZW50
QXR0cmlidXRlRGF0YSgpCiB7CiAgICAgZGV0YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCmluZGV4IGJlMTQ1NjE3YzFk
NGEwMmUyNjAxYWRmOTM2MTM0NWRmOTRjOGNiYjEuLjNkOTk3NjFjMWM2ZWRmMjFmZWRkYzAwYjMz
NzE5ZjY2YzdhODQ3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0
cmlidXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0
YS5oCkBAIC0zNSw2ICszNSw1MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVsZW1l
bnQ7CiAKK2NsYXNzIEF0dHJpYnV0ZVZlY3RvciA6IHB1YmxpYyBWZWN0b3I8UmVmUHRyPEF0dHJp
YnV0ZT4sIDQ+IHsKKyAgICBmcmllbmQgY2xhc3MgRWxlbWVudEF0dHJpYnV0ZURhdGE7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEF0dHJpYnV0ZVZlY3RvcigpKTsKKyAg
ICB9CisKKyAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KS5nZXQoKTsgfQorICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRl
SXRlbShjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgc2l6ZV90IGdldEF0dHJpYnV0
ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisKKyAgICAvLyBVc2VkIGR1
cmluZyBwYXJzaW5nOiBvbmx5IGluc2VydHMgaWYgbm90IGFscmVhZHkgdGhlcmUuCisgICAgdm9p
ZCBpbnNlcnRBdHRyaWJ1dGUoUGFzc1JlZlB0cjxBdHRyaWJ1dGU+IG5ld0F0dHJpYnV0ZSk7Cisg
ICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworCitwcml2YXRl
OgorICAgIEF0dHJpYnV0ZVZlY3RvcigpIHsgfQorfTsKKworaW5saW5lIEF0dHJpYnV0ZSogQXR0
cmlidXRlVmVjdG9yOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
IGNvbnN0Cit7CisgICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUp
OworICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KS5n
ZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW5saW5lIHNpemVfdCBBdHRyaWJ1dGVWZWN0b3I6
OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAoYXQoaSktPm5hbWUoKS5tYXRjaGVzKG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIGk7Cisg
ICAgfQorICAgIHJldHVybiBub3RGb3VuZDsKK30KKworaW5saW5lIHZvaWQgQXR0cmlidXRlVmVj
dG9yOjppbnNlcnRBdHRyaWJ1dGUoUGFzc1JlZlB0cjxBdHRyaWJ1dGU+IG5ld0F0dHJpYnV0ZSkK
K3sKKyAgICBpZiAoIWdldEF0dHJpYnV0ZUl0ZW0obmV3QXR0cmlidXRlLT5uYW1lKCkpKQorICAg
ICAgICBhcHBlbmQobmV3QXR0cmlidXRlKTsKK30KKwogY2xhc3MgRWxlbWVudEF0dHJpYnV0ZURh
dGEgewogcHVibGljOgogICAgIH5FbGVtZW50QXR0cmlidXRlRGF0YSgpOwpAQCAtNTcsOSArMTAx
LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmli
dXRlcy5pc0VtcHR5KCk7IH0KIAogICAgIC8vIEludGVybmFsIGludGVyZmFjZS4KLSAgICBBdHRy
aWJ1dGUqIGF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0
cmlidXRlc1tpbmRleF0uZ2V0KCk7IH0KLSAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0o
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwotICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVt
SW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIEF0dHJpYnV0ZSogYXR0cmli
dXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmF0dHJp
YnV0ZUl0ZW0oaW5kZXgpOyB9CisgICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5nZXRBdHRy
aWJ1dGVJdGVtKG5hbWUpOyB9CisgICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZ2V0QXR0
cmlidXRlSXRlbUluZGV4KG5hbWUpOyB9CiAKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgZG8gbm8g
ZXJyb3IgY2hlY2tpbmcuCiAgICAgdm9pZCBhZGRBdHRyaWJ1dGUoUGFzc1JlZlB0cjxBdHRyaWJ1
dGU+LCBFbGVtZW50Kik7CkBAIC05MCw3ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxT
dHlsZVByb3BlcnR5U2V0PiBtX2F0dHJpYnV0ZVN0eWxlOwogICAgIFNwYWNlU3BsaXRTdHJpbmcg
bV9jbGFzc05hbWVzOwogICAgIEF0b21pY1N0cmluZyBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uOwot
ICAgIFZlY3RvcjxSZWZQdHI8QXR0cmlidXRlPiwgND4gbV9hdHRyaWJ1dGVzOworICAgIEF0dHJp
YnV0ZVZlY3RvciBtX2F0dHJpYnV0ZXM7CiB9OwogCiBpbmxpbmUgdm9pZCBFbGVtZW50QXR0cmli
dXRlRGF0YTo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIEVsZW1l
bnQqIGVsZW1lbnQpCkBAIC0xMTAsMjYgKzE1NCw4IEBAIGlubGluZSBBdHRyaWJ1dGUqIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Ci17
Ci0gICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOwotICAgIGlm
IChpbmRleCAhPSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpbmRleF0u
Z2V0KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIC8vIFdlIHVzZSBhIGJvb2xlYW4gcGFyYW1ldGVy
IGluc3RlYWQgb2YgY2FsbGluZyBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlIHNvIHRoYXQgdGhl
IGNhbGxlcgogLy8gY2FuIHR1bmUgdGhlIGJlaGF2aW9yIChoYXNBdHRyaWJ1dGUgaXMgY2FzZSBz
ZW5zaXRpdmUgd2hlcmVhcyBnZXRBdHRyaWJ1dGUgaXMgbm90KS4KLWlubGluZSBzaXplX3QgRWxl
bWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKSBjb25zdAotewotICAgIHNpemVfdCBsZW4gPSBsZW5ndGgoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYXR0cmlidXRl
c1tpXS0+bmFtZSgpLm1hdGNoZXMobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9
Ci0gICAgcmV0dXJuIG5vdEZvdW5kOwotfQotCiBpbmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNo
b3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgbGVuID0gbGVu
Z3RoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCmluZGV4IDQ3MTQ1OTcwZWI1OTMy
ZjM2MjdjNTU4NGRhYmM3YmY4MWVkN2QxMWIuLjg2MDUwNGU5NTUzOTE2NDJmNTMyN2Q2MTI1ZGU3
NTc3YjBjOGU2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwCkBAIC04NCw3ICs4
NCw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW1OUyhj
b25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uCiAKIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWRO
b2RlTWFwOjpnZXROYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsK
LSAgICBBdHRyaWJ1dGUqIGEgPSBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOworICAgIEF0dHJpYnV0
ZSogYSA9IG1fYXR0cmlidXRlRGF0YS5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogICAgIGlmICgh
YSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwNiw4ICsxMDYsOCBAQCBQYXNzUmVmUHRyPE5v
ZGU+IE5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtKE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogICAgIEF0dHIqIGF0dHIgPSBzdGF0aWNfY2FzdDxBdHRyKj4obm9kZSk7CiAKICAgICBB
dHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHItPmF0dHIoKTsKLSAgICBzaXplX3QgaW5kZXggPSBn
ZXRBdHRyaWJ1dGVJdGVtSW5kZXgoYXR0cmlidXRlLT5uYW1lKCkpOwotICAgIEF0dHJpYnV0ZSog
b2xkQXR0cmlidXRlID0gaW5kZXggIT0gbm90Rm91bmQgPyBhdHRyaWJ1dGVJdGVtKGluZGV4KSA6
IDA7CisgICAgc2l6ZV90IGluZGV4ID0gbV9hdHRyaWJ1dGVEYXRhLmdldEF0dHJpYnV0ZUl0ZW1J
bmRleChhdHRyaWJ1dGUtPm5hbWUoKSk7CisgICAgQXR0cmlidXRlKiBvbGRBdHRyaWJ1dGUgPSBp
bmRleCAhPSBub3RGb3VuZCA/IG1fYXR0cmlidXRlRGF0YS5hdHRyaWJ1dGVJdGVtKGluZGV4KSA6
IDA7CiAgICAgaWYgKG9sZEF0dHJpYnV0ZSA9PSBhdHRyaWJ1dGUpCiAgICAgICAgIHJldHVybiBu
b2RlOyAvLyB3ZSBrbm93IGFib3V0IGl0IGFscmVhZHkKIApAQCAtMTM3LDcgKzEzNyw3IEBAIFBh
c3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgRXhjZXB0CiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CiAKLSAgICBz
aXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7CisgICAgc2l6ZV90IGlu
ZGV4ID0gbV9hdHRyaWJ1dGVEYXRhLmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsKICAgICBp
ZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKICAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKQEAgLTE3MSwxNSArMTcxLDE2IEBAIHZvaWQgTmFtZWROb2RlTWFwOjpk
ZXRhY2hGcm9tRWxlbWVudCgpCiBib29sIE5hbWVkTm9kZU1hcDo6bWFwc0VxdWl2YWxlbnQoY29u
c3QgTmFtZWROb2RlTWFwKiBvdGhlck1hcCkgY29uc3QKIHsKICAgICBpZiAoIW90aGVyTWFwKQot
ICAgICAgICByZXR1cm4gaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVEYXRh
LmlzRW1wdHkoKTsKICAgICAKICAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKICAgICBpZiAo
bGVuICE9IG90aGVyTWFwLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAor
ICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlckF0dHJpYnV0ZURhdGEgPSBvdGhl
ck1hcC0+bV9hdHRyaWJ1dGVEYXRhOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47
IGkrKykgewotICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRyaWJ1dGVJdGVtKGkpOwotICAg
ICAgICBBdHRyaWJ1dGUqIG90aGVyQXR0ciA9IG90aGVyTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGF0
dHItPm5hbWUoKSk7CisgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IG1fYXR0cmlidXRlRGF0YS5h
dHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBBdHRyaWJ1dGUqIG90aGVyQXR0ciA9IG90aGVyQXR0
cmlidXRlRGF0YS5nZXRBdHRyaWJ1dGVJdGVtKGF0dHItPm5hbWUoKSk7CiAgICAgICAgIGlmICgh
b3RoZXJBdHRyIHx8IGF0dHItPnZhbHVlKCkgIT0gb3RoZXJBdHRyLT52YWx1ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9OYW1lZE5vZGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAppbmRl
eCAzMjAxZmNkMDgwMzRlMWZlMDI1Y2FkZGNkYzI0MjdiMTEzOTc2Nzc3Li40ZDdhZGZiZTNkMGVh
NzI4Y2FhZDU0ODg5ZmQ1MzNlYjI0MWRiNDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTmFtZWROb2RlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5o
CkBAIC02MCwyNCArNjAsNiBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPE5vZGU+IGl0ZW0o
dW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZURhdGEubGVuZ3RoKCk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2F0dHJpYnV0ZURhdGEuaXNFbXB0eSgpOyB9Ci0KLSAgICAvLyBJbnRlcm5hbCBp
bnRlcmZhY2UuCi0KLSAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5hdHRyaWJ1dGVJdGVtKGluZGV4KTsgfQot
ICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
KSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlSXRlbShuYW1lKTsg
fQotICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChuYW1lKTsgfQotCi0gICAgdm9pZCBzaHJpbmtUb0xlbmd0aCgpIHsgbV9hdHRyaWJ1dGVEYXRh
Lm1fYXR0cmlidXRlcy5zaHJpbmtDYXBhY2l0eShsZW5ndGgoKSk7IH0KLSAgICB2b2lkIHJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHkpIHsgbV9hdHRyaWJ1dGVEYXRhLm1f
YXR0cmlidXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNhcGFjaXR5KTsgfQotCi0gICAgLy8g
VXNlZCBkdXJpbmcgcGFyc2luZzogb25seSBpbnNlcnRzIGlmIG5vdCBhbHJlYWR5IHRoZXJlLiBO
byBlcnJvciBjaGVja2luZyEKLSAgICB2b2lkIGluc2VydEF0dHJpYnV0ZShQYXNzUmVmUHRyPEF0
dHJpYnV0ZT4gbmV3QXR0cmlidXRlLCBib29sIGFsbG93RHVwbGljYXRlcykKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCghbV9lbGVtZW50KTsKLSAgICAgICAgaWYgKGFsbG93RHVwbGljYXRlcyB8fCAh
Z2V0QXR0cmlidXRlSXRlbShuZXdBdHRyaWJ1dGUtPm5hbWUoKSkpCi0gICAgICAgICAgICBhZGRB
dHRyaWJ1dGUobmV3QXR0cmlidXRlKTsKLSAgICB9CiAKICAgICBib29sIG1hcHNFcXVpdmFsZW50
KGNvbnN0IE5hbWVkTm9kZU1hcCogb3RoZXJNYXApIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggZTU1MWMy
ZmY1ZWI2ZjE0NTAxNzY2YWFjNjg0MzYxZDZhZDM1YTRiZi4uOWZhNWQzNzYwZjA4YTZkMzdhN2Rk
NTk4NzQ4MjE3OGU3ZTlkNDdhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQgSFRN
TENvbnN0cnVjdGlvblNpdGU6OmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVk
ZWQoKQogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0Jl
Zm9yZUhUTUwoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBSZWZQdHI8SFRNTEh0bWxF
bGVtZW50PiBlbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7Ci0g
ICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlTWFwKHRva2VuLnRha2VBdHRyaWJ1dGVzKCks
IG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBlbGVtZW50LT5wYXJzZXJTZXRB
dHRyaWJ1dGVzKHRva2VuLnRha2VBdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uKTsKICAgICBhdHRhY2hMYXRlcihtX2F0dGFjaG1lbnRSb290LCBlbGVtZW50KTsKICAg
ICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEh0bWxFbGVtZW50KGVsZW1lbnQpOwogCkBAIC0yMDgs
OCArMjA4LDggQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJv
bVRva2VuSW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJgogICAgIGlmICghdG9rZW4uYXR0cmli
dXRlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMg
PSBlbGVtZW50LT5lbnN1cmVVcGRhdGVkQXR0cmlidXRlcygpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0b2tlbi5hdHRyaWJ1dGVzKCktPmxlbmd0aCgpOyArK2kpIHsKKyAgICBFbGVt
ZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlcyA9IGVsZW1lbnQtPmVuc3VyZUF0dHJpYnV0ZURh
dGEoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLT5z
aXplKCk7ICsraSkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHRva2VuLmF0dHJp
YnV0ZXMoKS0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLT5nZXRB
dHRyaWJ1dGVJdGVtKGF0dHJpYnV0ZS0+bmFtZSgpKSkKICAgICAgICAgICAgIGVsZW1lbnQtPnNl
dEF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpKTsKQEAgLTMz
Niw3ICszMzYsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgUmVmUHRyPEhUTUxTY3JpcHRFbGVt
ZW50PiBlbGVtZW50ID0gSFRNTFNjcmlwdEVsZW1lbnQ6OmNyZWF0ZShzY3JpcHRUYWcsIGN1cnJl
bnROb2RlKCktPmRvY3VtZW50KCksIHRydWUpOwogICAgIGlmIChtX2ZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCi0gICAgICAgIGVsZW1lbnQt
PnBhcnNlclNldEF0dHJpYnV0ZU1hcCh0b2tlbi50YWtlQXR0cmlidXRlcygpLCBtX2ZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0
ZXModG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24p
OwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQpOwogICAgIG1fb3BlbkVs
ZW1lbnRzLnB1c2goZWxlbWVudC5yZWxlYXNlKCkpOwogfQpAQCAtMzk5LDcgKzM5OSw3IEBAIFBh
c3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVsZW1lbnQoQXRv
bWljSFRNTFRva2VuJiB0b2tlbiwKIHsKICAgICBRdWFsaWZpZWROYW1lIHRhZ05hbWUobnVsbEF0
b20sIHRva2VuLm5hbWUoKSwgbmFtZXNwYWNlVVJJKTsKICAgICBSZWZQdHI8RWxlbWVudD4gZWxl
bWVudCA9IGN1cnJlbnROb2RlKCktPmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwg
dHJ1ZSk7Ci0gICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlTWFwKHRva2VuLnRha2VBdHRy
aWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBlbGVtZW50LT5w
YXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLnRha2VBdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uKTsKICAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlKCk7CiB9CiAKQEAg
LTQxMCw3ICs0MTAsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjpjcmVhdGVIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRvawogICAgIC8vIGhhdmUgdG8g
cGFzcyB0aGUgY3VycmVudCBmb3JtIGVsZW1lbnQuICBXZSBzaG91bGQgcmV3b3JrIGZvcm0gYXNz
b2NpYXRpb24KICAgICAvLyB0byBvY2N1ciBhZnRlciBjb25zdHJ1Y3Rpb24gdG8gYWxsb3cgYmV0
dGVyIGNvZGUgc2hhcmluZyBoZXJlLgogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gSFRN
TEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudCh0YWdOYW1lLCBjdXJyZW50Tm9kZSgp
LT5kb2N1bWVudCgpLCBmb3JtKCksIHRydWUpOwotICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJp
YnV0ZU1hcCh0b2tlbi50YWtlQXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbik7CisgICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi50YWtlQXR0cmli
dXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgQVNTRVJUKGVsZW1l
bnQtPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgpOwogfQpA
QCAtNDIzLDE3ICs0MjMsMTcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChIVE0KIG5hbWVzcGFjZSB7
CiAKIC8vIEZJWE1FOiBNb3ZlIHRoaXMgZnVuY3Rpb24gdG8gdGhlIHRvcCBvZiB0aGUgZmlsZS4K
LWlubGluZSBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gY2xvbmVBdHRyaWJ1dGVzKEVsZW1lbnQq
IGVsZW1lbnQpCitpbmxpbmUgUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGNsb25lQXR0cmli
dXRlcyhFbGVtZW50KiBlbGVtZW50KQogewotICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9
IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOwogICAgIGlmICgh
YXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBPd25QdHI8TmFtZWRO
b2RlTWFwPiBuZXdBdHRyaWJ1dGVzID0gTmFtZWROb2RlTWFwOjpjcmVhdGUoKTsKKyAgICBPd25Q
dHI8QXR0cmlidXRlVmVjdG9yPiBuZXdBdHRyaWJ1dGVzID0gQXR0cmlidXRlVmVjdG9yOjpjcmVh
dGUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyAr
K2kpIHsKICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1
dGVJdGVtKGkpOwogICAgICAgICBSZWZQdHI8QXR0cmlidXRlPiBjbG9uZSA9IEF0dHJpYnV0ZTo6
Y3JlYXRlKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwotICAgICAgICBu
ZXdBdHRyaWJ1dGVzLT5hZGRBdHRyaWJ1dGUoY2xvbmUpOworICAgICAgICBuZXdBdHRyaWJ1dGVz
LT5hcHBlbmQoY2xvbmUpOwogICAgIH0KICAgICByZXR1cm4gbmV3QXR0cmlidXRlcy5yZWxlYXNl
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4u
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbi5oCmluZGV4IGMxNzgyODQz
NDYwYzZjMDc5ODlmYmJiZDY3Y2IyMDQ2Mjg2OGQ1N2QuLmEzOTFkMzQwOTE4MWI0M2I3Y2Y5YWM5
NDA3YmQ5NDg2NGFiZDlhMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUb2tlbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUb2tlbi5o
CkBAIC04Niw3ICs4Niw3IEBAIGNsYXNzIEF0b21pY0hUTUxUb2tlbiA6IHB1YmxpYyBBdG9taWNN
YXJrdXBUb2tlbkJhc2U8SFRNTFRva2VuPiB7CiBwdWJsaWM6CiAgICAgQXRvbWljSFRNTFRva2Vu
KEhUTUxUb2tlbiYgdG9rZW4pIDogQXRvbWljTWFya3VwVG9rZW5CYXNlPEhUTUxUb2tlbj4oJnRv
a2VuKSB7IH0KIAotICAgIEF0b21pY0hUTUxUb2tlbihIVE1MVG9rZW5UeXBlczo6VHlwZSB0eXBl
LCBBdG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGF0dHJpYnV0ZXMg
PSBudWxscHRyKQorICAgIEF0b21pY0hUTUxUb2tlbihIVE1MVG9rZW5UeXBlczo6VHlwZSB0eXBl
LCBBdG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJpYnV0
ZXMgPSBudWxscHRyKQogICAgICAgICA6IEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+
KHR5cGUsIG5hbWUsIGF0dHJpYnV0ZXMpCiAgICAgewogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDNiNTQxNDkxMzE3ZDc3NWUx
OWZlYTRlNDI5Y2ZiZGRiNzkwMjRlZDAuLjc5N2U1ODNkOTFhZjdlNzhhZDA2YzliZGU5NjQ2ZmUx
NTA4OWM4YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWls
ZGVyLmNwcApAQCAtNTMxLDcgKzUzMSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
RG9jdHlwZVRva2VuKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0YXJ0VGFnKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1
dGVzKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlU3RhcnRUYWcoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJpYnV0
ZXMpCiB7CiAgICAgLy8gRklYTUU6IFdlJ2xsIG5lZWQgYSBmYW5jaWVyIGNvbnZlcnNpb24gdGhh
biBqdXN0ICJsb2NhbE5hbWUiIGZvciBTVkcvTWF0aE1MIHRhZ3MuCiAgICAgQXRvbWljSFRNTFRv
a2VuIGZha2VUb2tlbihIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIHRhZ05hbWUubG9jYWxOYW1l
KCksIGF0dHJpYnV0ZXMpOwpAQCAtNTYwLDExICs1NjAsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKQogICAgIHByb2Nlc3NFbmRU
YWcoZW5kUCk7CiB9CiAKLVBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBIVE1MVHJlZUJ1aWxkZXI6
OmF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK1Bhc3NP
d25QdHI8QXR0cmlidXRlVmVjdG9yPiBIVE1MVHJlZUJ1aWxkZXI6OmF0dHJpYnV0ZXNGb3JJc2lu
ZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBPd25QdHI8TmFtZWROb2Rl
TWFwPiBhdHRyaWJ1dGVzID0gdG9rZW4udGFrZUF0dHJpYnV0ZXMoKTsKKyAgICBPd25QdHI8QXR0
cmlidXRlVmVjdG9yPiBhdHRyaWJ1dGVzID0gdG9rZW4udGFrZUF0dHJpYnV0ZXMoKTsKICAgICBp
ZiAoIWF0dHJpYnV0ZXMpCi0gICAgICAgIGF0dHJpYnV0ZXMgPSBOYW1lZE5vZGVNYXA6OmNyZWF0
ZSgpOworICAgICAgICBhdHRyaWJ1dGVzID0gQXR0cmlidXRlVmVjdG9yOjpjcmVhdGUoKTsKICAg
ICBlbHNlIHsKICAgICAgICAgYXR0cmlidXRlcy0+cmVtb3ZlQXR0cmlidXRlKG5hbWVBdHRyKTsK
ICAgICAgICAgYXR0cmlidXRlcy0+cmVtb3ZlQXR0cmlidXRlKGFjdGlvbkF0dHIpOwpAQCAtNTcy
LDcgKzU3Miw3IEBAIFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBIVE1MVHJlZUJ1aWxkZXI6OmF0
dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRvCiAgICAgfQogCiAgICAgUmVmUHRy
PEF0dHJpYnV0ZT4gbWFwcGVkQXR0cmlidXRlID0gQXR0cmlidXRlOjpjcmVhdGUobmFtZUF0dHIs
IGlzaW5kZXhUYWcubG9jYWxOYW1lKCkpOwotICAgIGF0dHJpYnV0ZXMtPmluc2VydEF0dHJpYnV0
ZShtYXBwZWRBdHRyaWJ1dGUucmVsZWFzZSgpLCBmYWxzZSk7CisgICAgYXR0cmlidXRlcy0+aW5z
ZXJ0QXR0cmlidXRlKG1hcHBlZEF0dHJpYnV0ZS5yZWxlYXNlKCkpOwogICAgIHJldHVybiBhdHRy
aWJ1dGVzLnJlbGVhc2UoKTsKIH0KIApAQCAtNjc5LDExICs2NzksMTEgQEAgdm9pZCBhZGp1c3RB
dHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1hcExvd2VyZWRMb2Nh
bE5hbWVUb05hbWUoY2FzZU1hcCwgYXR0cnMsIGxlbmd0aCk7CiAgICAgfQogCi0gICAgTmFtZWRO
b2RlTWFwKiBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0cmlidXRlcygpOworICAgIEF0dHJpYnV0ZVZl
Y3RvciogYXR0cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKICAgICBpZiAoIWF0dHJpYnV0
ZXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBhdHRy
aWJ1dGVzLT5sZW5ndGgoKTsgKyt4KSB7CisgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGF0
dHJpYnV0ZXMtPnNpemUoKTsgKyt4KSB7CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0g
YXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbSh4KTsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgY2FzZWROYW1lID0gY2FzZU1hcC0+Z2V0KGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCkpOwogICAg
ICAgICBpZiAoIWNhc2VkTmFtZS5sb2NhbE5hbWUoKS5pc051bGwoKSkKQEAgLTcyOCwxMSArNzI4
LDExIEBAIHZvaWQgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKICAgICAgICAgbWFwLT5hZGQoInhtbG5zOnhsaW5rIiwgUXVhbGlmaWVkTmFtZSgieG1sbnMi
LCAieGxpbmsiLCBYTUxOU05hbWVzOjp4bWxuc05hbWVzcGFjZVVSSSkpOwogICAgIH0KIAotICAg
IE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKKyAgICBBdHRy
aWJ1dGVWZWN0b3IqIGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFh
dHRyaWJ1dGVzKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4
IDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsreCkgeworICAgIGZvciAodW5zaWduZWQgeCA9IDA7
IHggPCBhdHRyaWJ1dGVzLT5zaXplKCk7ICsreCkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0dHJp
YnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oeCk7CiAgICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUgPSBtYXAtPmdldChhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpKTsKICAgICAg
ICAgaWYgKCFuYW1lLmxvY2FsTmFtZSgpLmlzTnVsbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaAppbmRleCAwMTgzZDIwY2FlMWNlYTI3OWRmYTlmZjQ3
MzRlODhiYzRmNmQ2NWJiLi4zNTAyNGY4ODhjOWM5YjQ1ZjU3NDYzNTM0N2M2NDVmMGUxMWUyMWNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaApAQCAt
MTUxLDcgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVy
KEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXImKTsKICAgICBpbmxpbmUgdm9pZCBwcm9jZXNz
Q2hhcmFjdGVyQnVmZmVyRm9ySW5Cb2R5KEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXImKTsK
IAotICAgIHZvaWQgcHJvY2Vzc0Zha2VTdGFydFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiwgUGFz
c093blB0cjxOYW1lZE5vZGVNYXA+IGF0dHJpYnV0ZXMgPSBudWxscHRyKTsKKyAgICB2b2lkIHBy
b2Nlc3NGYWtlU3RhcnRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYsIFBhc3NPd25QdHI8QXR0cmli
dXRlVmVjdG9yPiBhdHRyaWJ1dGVzID0gbnVsbHB0cik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZUVu
ZFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZUNoYXJhY3Rl
cnMoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRv
blNjb3BlKCk7CkBAIC0xNzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgYm9vbCBz
aG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYpOwogICAg
IHZvaWQgcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mKTsKIAot
ICAgIFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0
b21pY0hUTUxUb2tlbiYpOworICAgIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBhdHRyaWJ1
dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUb2tlbiYpOwogCiAgICAgSFRNTEVsZW1lbnRT
dGFjazo6RWxlbWVudFJlY29yZCogZnVydGhlc3RCbG9ja0ZvckZvcm1hdHRpbmdFbGVtZW50KEVs
ZW1lbnQqKTsKICAgICB2b2lkIGNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4m
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBh
cnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIu
Y3BwCmluZGV4IGY0NjAxZGU2YWMzNjBiMDliODY3YTgyNGI2ZGU2ZGEzNjdhYjgzNTYuLjM1ODlj
M2Y1ZjUyM2I2MzRhZDA2NmQzMDdhN2Q5NmU1YWEzMTYwMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcApAQCAtNjEsOCArNjEsOCBA
QCB2b2lkIFRleHREb2N1bWVudFBhcnNlcjo6aW5zZXJ0RmFrZVByZUVsZW1lbnQoKQogICAgIC8v
IGRpc3RydWJpbmcgdGhlIGxpbmUvY29sdW1uIG51bWJlciBjYWxjdWxhdGlvbnMuCiAKICAgICBS
ZWZQdHI8QXR0cmlidXRlPiBzdHlsZUF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3JlYXRlKCJzdHls
ZSIsICJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiKTsKLSAg
ICBPd25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzID0gTmFtZWROb2RlTWFwOjpjcmVhdGUo
KTsKLSAgICBhdHRyaWJ1dGVzLT5pbnNlcnRBdHRyaWJ1dGUoc3R5bGVBdHRyaWJ1dGUucmVsZWFz
ZSgpLCBmYWxzZSk7CisgICAgT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gYXR0cmlidXRlcyA9IEF0
dHJpYnV0ZVZlY3Rvcjo6Y3JlYXRlKCk7CisgICAgYXR0cmlidXRlcy0+aW5zZXJ0QXR0cmlidXRl
KHN0eWxlQXR0cmlidXRlLnJlbGVhc2UoKSk7CiAgICAgQXRvbWljSFRNTFRva2VuIGZha2VQcmUo
SFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBwcmVUYWcubG9jYWxOYW1lKCksIGF0dHJpYnV0ZXMu
cmVsZWFzZSgpKTsKIAogICAgIHRyZWVCdWlsZGVyKCktPmNvbnN0cnVjdFRyZWVGcm9tQXRvbWlj
VG9rZW4oZmFrZVByZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL01h
cmt1cFRva2VuQmFzZS5oIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJh
c2UuaAppbmRleCA5ODY1MzhiOGQ3MDM1ZTFlMDMxODM4NGUyMWNiYmRkZDgzMGE4NjA5Li4yYTBh
YTMwNTA4NDU3YTg5MGZlZTBlNzFmNGVkYTc1ZWMzMTNkZWM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvTWFya3VwVG9rZW5CYXNlLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYg
TWFya3VwVG9rZW5CYXNlX2gKICNkZWZpbmUgTWFya3VwVG9rZW5CYXNlX2gKIAotI2luY2x1ZGUg
Ik5hbWVkTm9kZU1hcC5oIgorI2luY2x1ZGUgIkVsZW1lbnRBdHRyaWJ1dGVEYXRhLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQx
MCw3ICs0MTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBdG9taWNNYXJr
dXBUb2tlbkJhc2UodHlwZW5hbWUgVG9rZW46OlR5cGU6OlR5cGUgdHlwZSwgQXRvbWljU3RyaW5n
IG5hbWUsIFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzID0gbnVsbHB0cikKKyAg
ICBBdG9taWNNYXJrdXBUb2tlbkJhc2UodHlwZW5hbWUgVG9rZW46OlR5cGU6OlR5cGUgdHlwZSwg
QXRvbWljU3RyaW5nIG5hbWUsIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBhdHRyaWJ1dGVz
ID0gbnVsbHB0cikKICAgICAgICAgOiBtX3R5cGUodHlwZSkKICAgICAgICAgLCBtX25hbWUobmFt
ZSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKQEAgLTQ0NiwxMyArNDQ2LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlcy0+Z2V0QXR0cmlidXRlSXRl
bShhdHRyaWJ1dGVOYW1lKTsKICAgICB9CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMo
KSBjb25zdAorICAgIEF0dHJpYnV0ZVZlY3RvciogYXR0cmlidXRlcygpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQodXNlc0F0dHJpYnV0ZXMoKSk7CiAgICAgICAgIHJldHVybiBtX2F0dHJp
YnV0ZXMuZ2V0KCk7CiAgICAgfQogCi0gICAgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IHRha2VB
dHRyaWJ1dGVzKCkKKyAgICBQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gdGFrZUF0dHJpYnV0
ZXMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKHVzZXNBdHRyaWJ1dGVzKCkpOwogICAgICAgICBy
ZXR1cm4gbV9hdHRyaWJ1dGVzLnJlbGVhc2UoKTsKQEAgLTUxNiw3ICs1MTYsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgLy8gRm9yIFN0YXJ0VGFnIGFuZCBFbmRUYWcKICAgICBib29sIG1fc2VsZkNsb3Np
bmc7CiAKLSAgICBPd25QdHI8TmFtZWROb2RlTWFwPiBtX2F0dHJpYnV0ZXM7CisgICAgT3duUHRy
PEF0dHJpYnV0ZVZlY3Rvcj4gbV9hdHRyaWJ1dGVzOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VG9rZW4+CkBAIC01MjYsNyArNTI2LDcgQEAgaW5saW5lIHZvaWQgQXRvbWljTWFya3VwVG9rZW5C
YXNlPFRva2VuPjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMoY29uc3QgdHlwZW5hbWUgVG8KICAgICBp
ZiAoIXNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYXR0cmlidXRlcyA9IE5hbWVkTm9k
ZU1hcDo6Y3JlYXRlKCk7CisgICAgbV9hdHRyaWJ1dGVzID0gQXR0cmlidXRlVmVjdG9yOjpjcmVh
dGUoKTsKICAgICBtX2F0dHJpYnV0ZXMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgY29uc3QgdHlw
ZW5hbWUgVG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpXTsKQEAgLTU0
MSw3ICs1NDEsNyBAQCBpbmxpbmUgdm9pZCBBdG9taWNNYXJrdXBUb2tlbkJhc2U8VG9rZW4+Ojpp
bml0aWFsaXplQXR0cmlidXRlcyhjb25zdCB0eXBlbmFtZSBUbwogICAgICAgICBBU1NFUlQoYXR0
cmlidXRlLm1fdmFsdWVSYW5nZS5tX2VuZCk7CiAKICAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVl
KGF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6ZSgpKTsKLSAg
ICAgICAgbV9hdHRyaWJ1dGVzLT5pbnNlcnRBdHRyaWJ1dGUoQXR0cmlidXRlOjpjcmVhdGUobmFt
ZUZvckF0dHJpYnV0ZShhdHRyaWJ1dGUpLCB2YWx1ZSksIGZhbHNlKTsKKyAgICAgICAgbV9hdHRy
aWJ1dGVzLT5pbnNlcnRBdHRyaWJ1dGUoQXR0cmlidXRlOjpjcmVhdGUobmFtZUZvckF0dHJpYnV0
ZShhdHRyaWJ1dGUpLCB2YWx1ZSkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbi5oIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9Y
TUxUb2tlbi5oCmluZGV4IGQxYmRjMGU2Yjk5MTNjY2U4M2RkMWVlNGRlZWY3ZjczYTRkMmM0NDcu
LjFlZDE2Y2E5YmNiYjY3YWYyMTIzNWRiNGM5NmRjYWI0MTc2MzQ5YmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTFRva2VuLmgKQEAgLTQzMSw3ICs0MzEsNyBAQCBwdWJsaWM6CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBBdG9taWNYTUxUb2tlbihYTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUs
IEF0b21pY1N0cmluZyBuYW1lLCBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9
IG51bGxwdHIpCisgICAgQXRvbWljWE1MVG9rZW4oWE1MVG9rZW5UeXBlczo6VHlwZSB0eXBlLCBB
dG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJpYnV0ZXMg
PSBudWxscHRyKQogICAgICAgICA6IEF0b21pY01hcmt1cFRva2VuQmFzZTxYTUxUb2tlbj4odHlw
ZSwgbmFtZSwgYXR0cmlidXRlcykKICAgICB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcAppbmRleCAwYzJiMmQ2YTBjNzlmNDhjYjZmZDNmNDcw
MjY2ZGZlODkxY2I4YjNhLi44MTc5M2VkNmQ1NzZjYTgxZWM0ZDBlN2U2YzA0MmFkMTJkYjc3NTZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRyZWVCdWlsZGVyLmNwcApAQCAt
MzAxLDcgKzMwMSw3IEBAIHZvaWQgWE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NOYW1lc3BhY2VzKGNv
bnN0IEF0b21pY1hNTFRva2VuJiB0b2tlbiwgTm9kZVN0YWNrSXRlCiAgICAgaWYgKCF0b2tlbi5h
dHRyaWJ1dGVzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdG9rZW4uYXR0cmlidXRlcygpLT5sZW5ndGgoKTsgKytpKSB7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB0b2tlbi5hdHRyaWJ1dGVzKCktPnNpemUoKTsgKytpKSB7CiAgICAgICAgIEF0
dHJpYnV0ZSogYXR0cmlidXRlID0gdG9rZW4uYXR0cmlidXRlcygpLT5hdHRyaWJ1dGVJdGVtKGkp
OwogICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lKCkucHJlZml4KCkgPT0geG1sbnNBdG9tKQog
ICAgICAgICAgICAgc3RhY2tJdGVtLnNldE5hbWVzcGFjZVVSSShhdHRyaWJ1dGUtPm5hbWUoKS5s
b2NhbE5hbWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpKTsKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lk
IFhNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQXR0cmlidXRlcyhjb25zdCBBdG9taWNYTUxUb2tlbiYg
dG9rZW4sIE5vZGVTdGFja0l0ZQogICAgIGlmICghdG9rZW4uYXR0cmlidXRlcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRva2VuLmF0dHJpYnV0ZXMo
KS0+bGVuZ3RoKCk7ICsraSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9rZW4uYXR0
cmlidXRlcygpLT5zaXplKCk7ICsraSkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IHRva2VuLmF0dHJpYnV0ZXMoKS0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUoKS5wcmVmaXgoKSA9PSB4
bWxuc0F0b20pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOYW1l
ZE5vZGVNYXAuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTmFtZWROb2RlTWFw
LmNwcAppbmRleCBlMjQ1NWU2YjlmN2UxMjc4OWNkYjBjMTdkZmU1MjhkZGNmZDUxYjVmLi5iYTVm
Mjk2MjViMTQxM2M2OTYwNDg4MmE5N2FkYzljNTg4YTEyYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOYW1lZE5vZGVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYk5hbWVkTm9kZU1hcC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJOYW1lZE5vZGVNYXAuaCIKIAorI2luY2x1
ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKICNpbmNsdWRlICJOb2Rl
LmgiCiAjaW5jbHVkZSAiV2ViQXR0cmlidXRlLmgiCkBAIC02Myw3ICs2NCw3IEBAIHVuc2lnbmVk
IFdlYk5hbWVkTm9kZU1hcDo6bGVuZ3RoKCkgY29uc3QKIAogV2ViQXR0cmlidXRlIFdlYk5hbWVk
Tm9kZU1hcDo6YXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICByZXR1
cm4gV2ViQXR0cmlidXRlKG1fcHJpdmF0ZS0+YXR0cmlidXRlSXRlbShpbmRleCkpOworICAgIHJl
dHVybiBXZWJBdHRyaWJ1dGUobV9wcml2YXRlLT5lbGVtZW50KCktPmF0dHJpYnV0ZUl0ZW0oaW5k
ZXgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129746</attachid>
            <date>2012-03-01 14:30:56 -0800</date>
            <delta_ts>2012-04-03 09:24:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79963-20120301193054.patch</filename>
            <type>text/plain</type>
            <size>38120</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5Mzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzk2YzQxNzFjMDA0ZDdi
ZmY4NDliNmY4ODg0ZDkzODBhYWRhNDkwZS4uMjBmZjI1NmVlNGI4Yjg0NDE3OGIzNWM1Y2ZlOGI2
ZDU1NjlmOGI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDEyLTAzLTAxICBDYWlv
IE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgTWFrZSBwYXJzZXIgY29kZSBub3QgZGVwZW5kIG9uIE5hbWVkTm9kZU1hcAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk5NjMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9m
IGNyZWF0aW5nIEVsZW1lbnQtbGVzcyBOYW1lZE5vZGVNYXBzLCB0aGUgcGFyc2luZyBjb2RlIG5v
dyBjcmVhdGVzCisgICAgICAgIEF0dHJpYnV0ZVZlY3RvcnMsIHRoYXQgYXJlIHVzZWQgdG8gZmls
bCBFbGVtZW50IHZpYSB0aGUgcGFyc2VyU2V0QXR0cmlidXRlcygpCisgICAgICAgIG1ldGhvZC4g
VGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIGV2ZW4gbW9yZSBtZXRob2RzIGZyb20gdGhlIE5hbWVk
Tm9kZU1hcC4KKworICAgICAgICBUaGUgQXR0cmlidXRlVmVjdG9yIGNsYXNzIGNvbnRhaW5zIGNv
bnZlbmllbmNlIG1ldGhvZHMgdGhhdCB0YWtlIHRoZSBhdHRyaWJ1dGUncworICAgICAgICBRdWFs
aWZpZWROYW1lIGFzIHBhcmFtZXRlci4gVGhpcyBjbGFzcyBpcyBhbHNvIHVzZWQgaW5zaWRlIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhLgorCisgICAgICAgICogZG9tL0F0dHIuaDoKKyAgICAgICAgKEF0
dHIpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpwYXJzZXJTZXRB
dHRyaWJ1dGVzKTogTm93IHdlIGhhdmUgdG8gY3JlYXRlIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAg
c3RvcmFnZSwgYW5kIGZpbGwgaXQgKGJ5IFZlY3Rvcjo6c3dhcCgpKSB3aXRoIHRoZSBwYXNzZWQg
YXR0cmlidXRlcy4gQWxzbyB1c2UgYW4KKyAgICAgICAgZWFybHkgcmV0dXJuIHRvIHJlZHVjZSBp
bmRlbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0VVJMQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OmdldE5vbkVtcHR5VVJMQXR0cmlidXRlKToKKyAgICAgICAgKiBkb20v
RWxlbWVudC5oOgorICAgICAgICAoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpmYXN0SGFzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZhc3RHZXRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlc1dpdGhv
dXRVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0cmlidXRlSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVJdGVtKToKKyAgICAgICAgKiBk
b20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRl
VmVjdG9yOjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
ZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmg6CisgICAgICAgIChBdHRyaWJ1dGVWZWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlVmVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXR0cmlidXRlVmVjdG9yOjphdHRyaWJ1dGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkF0dHJpYnV0ZVZlY3Rvcjo6QXR0cmlidXRlVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXR0cmlidXRlVmVjdG9yOjpnZXRBdHRyaWJ1dGVJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF0dHJpYnV0ZVZlY3Rvcjo6Z2V0QXR0cmlidXRlSXRlbUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkF0dHJpYnV0ZVZlY3Rvcjo6aW5zZXJ0QXR0cmlidXRlKTogQm9v
bGVhbiBwYXJhbWV0ZXIgaXNuJ3QgbmVjZXNzYXJ5CisgICAgICAgIHNpbmNlIGFsbCB0aGUgY2Fs
bGVycyB1c2VkICdmYWxzZScsIGluZGljYXRpbmcgdGhhdCBkdXBsaWNhdGVzIHdlcmUgbm90IGFs
bG93ZWQuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6YXR0cmlidXRl
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmli
dXRlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0
cmlidXRlSXRlbUluZGV4KToKKyAgICAgICAgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKToKKyAgICAg
ICAgKiBkb20vTmFtZWROb2RlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1h
cDo6Z2V0TmFtZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFt
ZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6bWFwc0VxdWl2YWxlbnQpOgorICAg
ICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29u
c3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVI
VE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MVG9rZW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY0hUTUxUb2tlbjo6QXRvbWljSFRN
TFRva2VuKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0YXJ0VGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1
dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1
aWxkZXIuaDoKKyAgICAgICAgKiBodG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dERvY3VtZW50UGFyc2VyOjppbnNlcnRGYWtlUHJlRWxlbWVu
dCk6CisgICAgICAgICogeG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6QXRvbWljTWFya3VwVG9rZW5CYXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF0b21pY01hcmt1cFRva2VuQmFzZTo6YXR0cmlidXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpBdG9taWNNYXJrdXBUb2tlbkJhc2U6OnRha2VBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKEF0b21pY01hcmt1cFRva2VuQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjo6OmluaXRp
YWxpemVBdHRyaWJ1dGVzKToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTFRva2VuLmg6CisgICAg
ICAgIChXZWJDb3JlOjpBdG9taWNYTUxUb2tlbjo6QXRvbWljWE1MVG9rZW4pOgorICAgICAgICAq
IHhtbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NOYW1lc3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzQXR0cmlidXRlcyk6CisKIDIwMTItMDMtMDEgIEFuZGVycyBDYXJsc3Nv
biAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBHbGl0Y2h5IHNjcm9sbGluZyBvbiBw
YWdlcyB3aGVyZSB0aGUgc2Nyb2xsIGxheWVyIG5lZWRzIHRvIGJlIHVwZGF0ZWQgb24gdGhlIG1h
aW4gdGhyZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDgxNTc0MDkwMzQ0MzMwM2Jh
YzhmZDM0YmJjOTJmZWFhZmM5ZTI0ZTEuLmZlZTIxY2EzNzE4NmMxY2ZkZGU3MWUwNmU1ZDczOGVi
ZTlmMmI4ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTItMDMtMDEgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8ub2xpdmVpcmFA
b3BlbmJvc3NhLm9yZz4KKworICAgICAgICBNYWtlIHBhcnNlciBjb2RlIG5vdCBkZXBlbmQgb24g
TmFtZWROb2RlTWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03OTk2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc3JjL1dlYk5hbWVkTm9kZU1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk5hbWVk
Tm9kZU1hcDo6YXR0cmlidXRlSXRlbSk6CisKIDIwMTItMDMtMDEgIEtlbnRhcm8gSGFyYSAgPGhh
cmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEwOTI4OCk6IFdlYlZp
ZXdJbXBsOjplbmFibGVBdXRvUmVzaXplTW9kZSBsb29wcyBpbmZpbml0ZWx5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuaApp
bmRleCBiNzAzNTc0OTU4YTJlNDM3MWRjYzhkZWE1YmE2ZjFjZmEwMTU4NzYxLi4yODZjZmFmYjM4
MTczNjJjNWEwNGMzNDAxMzBjYjE1MjdjNTNhMDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQXR0ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmgKQEAgLTM5LDggKzM5
LDggQEAgY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIC8vIGRlc3RydWN0aW9uLiBob3dldmVy
LCB0aGlzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCiAKIGNsYXNzIEF0dHIgOiBwdWJsaWMgQ29u
dGFpbmVyTm9kZSB7CisgICAgZnJpZW5kIGNsYXNzIEF0dHJpYnV0ZVZlY3RvcjsKICAgICBmcmll
bmQgY2xhc3MgRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci0gICAgZnJpZW5kIGNsYXNzIE5hbWVkTm9k
ZU1hcDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdHRyPiBjcmVhdGUoRWxlbWVu
dCosIERvY3VtZW50KiwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsKICAgICB2aXJ0dWFsIH5BdHRy
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggMTZmOTEzNTZhZmFkNjdlMDczZDlhOTI4Yjhh
ZDg4NzhjYWRiZWJjOC4uZDMwYzE3MDYyYjc5MTFkMjEzODIxYTc5NGU0Njk0YWY2YzA0ZTY4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMjIxLDcgKzIyMSw3IEBAIGNvbnN0IEF0b21pY1N0
cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNv
bnN0CiAjZW5kaWYKIAogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBpZiAoQXR0
cmlidXRlKiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1l
KSkKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZ2V0QXR0cmlidXRlSXRlbShu
YW1lKSkKICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgfQogICAg
IHJldHVybiBudWxsQXRvbTsKQEAgLTU5OCw3ICs1OTgsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcm
IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAjZW5kaWYK
IAogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBpZiAoQXR0cmlidXRlKiBhdHRy
aWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBpZ25vcmVDYXNl
KSkKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAtPmF0
dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBpZ25vcmVDYXNlKSkKICAgICAg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgfQogCkBAIC03MjcsNyArNzI3
LDcgQEAgc3RhdGljIGJvb2wgaXNBdHRyaWJ1dGVUb1JlbW92ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHYKICAgICByZXR1cm4gKG5hbWUubG9jYWxOYW1l
KCkuZW5kc1dpdGgoaHJlZkF0dHIubG9jYWxOYW1lKCkpIHx8IG5hbWUgPT0gc3JjQXR0ciB8fCBu
YW1lID09IGFjdGlvbkF0dHIpICYmIHByb3RvY29sSXNKYXZhU2NyaXB0KHN0cmlwTGVhZGluZ0Fu
ZFRyYWlsaW5nSFRNTFNwYWNlcyh2YWx1ZSkpOyAgICAgICAKIH0KIAotdm9pZCBFbGVtZW50Ojpw
YXJzZXJTZXRBdHRyaWJ1dGVNYXAoUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGxpc3QsIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQordm9pZCBFbGVtZW50
OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBhdHRyaWJ1
dGVWZWN0b3IsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9u
KQogewogICAgIEFTU0VSVCghaW5Eb2N1bWVudCgpKTsKICAgICBBU1NFUlQoIXBhcmVudE5vZGUo
KSk7CkBAIC03MzUsMzQgKzczNSwzOCBAQCB2b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0
ZU1hcChQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gbGlzdCwgRnJhZ21lbnRTY3JpcAogICAgIGRv
Y3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKICAgICBBU1NFUlQoIW1fYXR0cmlidXRl
TWFwKTsKLSAgICBtX2F0dHJpYnV0ZU1hcCA9IGxpc3Q7CiAKLSAgICBpZiAobV9hdHRyaWJ1dGVN
YXApIHsKLSAgICAgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSAmbV9h
dHRyaWJ1dGVNYXAtPm1fYXR0cmlidXRlRGF0YTsKLSAgICAgICAgbV9hdHRyaWJ1dGVNYXAtPm1f
ZWxlbWVudCA9IHRoaXM7Ci0gICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgYXMg
cmVzdWx0IG9mIGEgcGFzdGUgb3IgZHJhZy1uLWRyb3Agb3BlcmF0aW9uCi0gICAgICAgIC8vIHdl
IHdhbnQgdG8gcmVtb3ZlIGFsbCB0aGUgc2NyaXB0IGFuZCBldmVudCBoYW5kbGVycy4KLSAgICAg
ICAgaWYgKHNjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2Vk
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChpIDwg
bV9hdHRyaWJ1dGVNYXAtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+
bmFtZSgpOwotICAgICAgICAgICAgICAgIGlmIChpc0V2ZW50SGFuZGxlckF0dHJpYnV0ZShhdHRy
aWJ1dGVOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJp
YnV0ZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNBdHRyaWJ1dGVUb1JlbW92ZShhdHRy
aWJ1dGVOYW1lLCBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXNbaV0tPnZhbHVlKCkpKQotICAg
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXNbaV0tPnNldFZhbHVl
KG51bGxBdG9tKTsKLSAgICAgICAgICAgICAgICBpKys7CisgICAgaWYgKCFhdHRyaWJ1dGVWZWN0
b3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYXR0cmlidXRlTWFwID0gTmFtZWROb2RlTWFw
OjpjcmVhdGUodGhpcyk7CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEg
PSBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpOworICAgIGF0dHJpYnV0ZURhdGEtPm1f
YXR0cmlidXRlcy5zd2FwKCphdHRyaWJ1dGVWZWN0b3IpOworCisgICAgbV9hdHRyaWJ1dGVNYXAt
Pm1fZWxlbWVudCA9IHRoaXM7CisgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBhcyBy
ZXN1bHQgb2YgYSBwYXN0ZSBvciBkcmFnLW4tZHJvcCBvcGVyYXRpb24KKyAgICAvLyB3ZSB3YW50
IHRvIHJlbW92ZSBhbGwgdGhlIHNjcmlwdCBhbmQgZXZlbnQgaGFuZGxlcnMuCisgICAgaWYgKHNj
cmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSB7CisgICAg
ICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICB3aGlsZSAoaSA8IG1fYXR0cmlidXRlTWFwLT5s
ZW5ndGgoKSkgeworICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFt
ZSA9IGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOworICAgICAgICAgICAg
aWYgKGlzRXZlbnRIYW5kbGVyQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7CisgICAgICAgICAg
ICAgICAgYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzLnJlbW92ZShpKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzQXR0cmli
dXRlVG9SZW1vdmUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzW2ld
LT52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXNb
aV0tPnNldFZhbHVlKG51bGxBdG9tKTsKKyAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQotICAg
ICAgICAvLyBTdG9yZSB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBjaGFuZ2VkIG9uIHRoZSBz
dGFjayBpbiBjYXNlCi0gICAgICAgIC8vIGF0dHJpYnV0ZUNoYW5nZWQgbXV0YXRlcyBtX2F0dHJp
YnV0ZU1hcC4KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4gYXR0cmlidXRlczsK
LSAgICAgICAgYXR0cmlidXRlRGF0YS0+Y29weUF0dHJpYnV0ZXNUb1ZlY3RvcihhdHRyaWJ1dGVz
KTsKLSAgICAgICAgZm9yIChWZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4gPjo6aXRlcmF0b3IgaXRl
ciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIp
Ci0gICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGl0ZXItPmdldCgpKTsKICAgICB9CisKKyAg
ICAvLyBTdG9yZSB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgdGhhdCBjaGFuZ2VkIG9uIHRoZSBzdGFj
ayBpbiBjYXNlCisgICAgLy8gYXR0cmlidXRlQ2hhbmdlZCBtdXRhdGVzIG1fYXR0cmlidXRlTWFw
LgorICAgIFZlY3RvcjxSZWZQdHI8QXR0cmlidXRlPiA+IGF0dHJpYnV0ZXM7CisgICAgYXR0cmli
dXRlRGF0YS0+Y29weUF0dHJpYnV0ZXNUb1ZlY3RvcihhdHRyaWJ1dGVzKTsKKyAgICBmb3IgKFZl
Y3RvcjxSZWZQdHI8QXR0cmlidXRlPiA+OjppdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdp
bigpOyBpdGVyICE9IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgYXR0cmlidXRl
Q2hhbmdlZChpdGVyLT5nZXQoKSk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlcygp
IGNvbnN0CkBAIC04NjYsMTIgKzg3MCwxMiBAQCB2b2lkIEVsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCkKIAogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewogICAgICAgICBpZiAoaGFzSUQo
KSkgewotICAgICAgICAgICAgQXR0cmlidXRlKiBpZEl0ZW0gPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0
QXR0cmlidXRlSXRlbShkb2N1bWVudCgpLT5pZEF0dHJpYnV0ZU5hbWUoKSk7CisgICAgICAgICAg
ICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGdldEF0dHJpYnV0ZUl0ZW0oZG9jdW1lbnQoKS0+aWRBdHRy
aWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwo
KSkKICAgICAgICAgICAgICAgICB1cGRhdGVJZChudWxsQXRvbSwgaWRJdGVtLT52YWx1ZSgpKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoaGFzTmFtZSgpKSB7Ci0gICAgICAgICAgICBBdHRyaWJ1
dGUqIG5hbWVJdGVtID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVz
OjpuYW1lQXR0cik7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIG5hbWVJdGVtID0gZ2V0QXR0cmli
dXRlSXRlbShIVE1MTmFtZXM6Om5hbWVBdHRyKTsKICAgICAgICAgICAgIGlmIChuYW1lSXRlbSAm
JiAhbmFtZUl0ZW0tPmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZU5hbWUobnVsbEF0
b20sIG5hbWVJdGVtLT52YWx1ZSgpKTsKICAgICAgICAgfQpAQCAtODgyLDEyICs4ODYsMTIgQEAg
dm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKICAgICBpZiAobV9hdHRyaWJ1
dGVNYXApIHsKICAgICAgICAgaWYgKGhhc0lEKCkpIHsKLSAgICAgICAgICAgIEF0dHJpYnV0ZSog
aWRJdGVtID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oZG9jdW1lbnQoKS0+aWRB
dHRyaWJ1dGVOYW1lKCkpOworICAgICAgICAgICAgQXR0cmlidXRlKiBpZEl0ZW0gPSBnZXRBdHRy
aWJ1dGVJdGVtKGRvY3VtZW50KCktPmlkQXR0cmlidXRlTmFtZSgpKTsKICAgICAgICAgICAgIGlm
IChpZEl0ZW0gJiYgIWlkSXRlbS0+aXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlSWQo
aWRJdGVtLT52YWx1ZSgpLCBudWxsQXRvbSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGhhc05h
bWUoKSkgewotICAgICAgICAgICAgQXR0cmlidXRlKiBuYW1lSXRlbSA9IG1fYXR0cmlidXRlTWFw
LT5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6bmFtZUF0dHIpOworICAgICAgICAgICAgQXR0
cmlidXRlKiBuYW1lSXRlbSA9IGdldEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVzOjpuYW1lQXR0cik7
CiAgICAgICAgICAgICBpZiAobmFtZUl0ZW0gJiYgIW5hbWVJdGVtLT5pc051bGwoKSkKICAgICAg
ICAgICAgICAgICB1cGRhdGVOYW1lKG5hbWVJdGVtLT52YWx1ZSgpLCBudWxsQXRvbSk7CiAgICAg
ICAgIH0KQEAgLTE3NTMsNyArMTc1Nyw3IEBAIEtVUkwgRWxlbWVudDo6Z2V0VVJMQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBpZiAoQXR0cmlidXRlKiBhdHRy
aWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKSkKKyAgICAgICAg
aWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZ2V0QXR0cmlidXRlSXRlbShuYW1lKSkKICAgICAg
ICAgICAgIEFTU0VSVChpc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKICAgICB9CiAjZW5kaWYK
QEAgLTE3NjQsNyArMTc2OCw3IEBAIEtVUkwgRWxlbWVudDo6Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgaWYgKG1fYXR0cmlidXRlTWFwKSB7Ci0gICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0
dHJpYnV0ZSA9IG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpKQorICAgICAg
ICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpKQogICAg
ICAgICAgICAgQVNTRVJUKGlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkpOwogICAgIH0KICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmgKaW5kZXggZTM3YzAyZDAwYWFhMjBhMTQxNzgzYTI5MzQzNzcxNGIx
NDRhNWUzMS4uOTg1Mzc2YzczOWNiNTc1Y2VhNTI0NDM5MTFmNTg4ZDg3YjFhY2ZmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCkBAIC0yMzcsNyArMjM3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSopOwogCiAgICAgLy8gT25seSBjYWxsZWQgYnkg
dGhlIHBhcnNlciBpbW1lZGlhdGVseSBhZnRlciBlbGVtZW50IGNvbnN0cnVjdGlvbi4KLSAgICB2
b2lkIHBhcnNlclNldEF0dHJpYnV0ZU1hcChQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4sIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgdm9pZCBwYXJzZXJTZXRBdHRyaWJ1dGVzKFBh
c3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsK
IAogICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9hdHRyaWJ1dGVNYXAgPyBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpIDogMDsg
fQogICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCkgY29uc3Q7
CkBAIC02MDcsMTQgKzYwNywxNCBAQCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp3aWxsUmVtb3ZlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pYwogaW5saW5lIGJv
b2wgRWxlbWVudDo6ZmFzdEhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBj
b25zdAogewogICAgIEFTU0VSVChmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZChuYW1lKSk7Ci0g
ICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwICYmIG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJ
dGVtKG5hbWUpOworICAgIHJldHVybiBtX2F0dHJpYnV0ZU1hcCAmJiBnZXRBdHRyaWJ1dGVJdGVt
KG5hbWUpOwogfQogCiBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpmYXN0R2V0
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKG5hbWUpKTsKICAgICBpZiAobV9hdHRyaWJ1dGVN
YXApIHsKLSAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVNYXAt
PmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCisgICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0
ZSA9IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRl
LT52YWx1ZSgpOwogICAgIH0KICAgICByZXR1cm4gbnVsbEF0b207CkBAIC02MjIsNyArNjIyLDcg
QEAgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6ZmFzdEdldEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpoYXNBdHRy
aWJ1dGVzV2l0aG91dFVwZGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlTWFw
ICYmICFtX2F0dHJpYnV0ZU1hcC0+aXNFbXB0eSgpOworICAgIHJldHVybiBtX2F0dHJpYnV0ZU1h
cCAmJiAhbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZURhdGEoKS0+aXNFbXB0eSgpOwogfQogCiBp
bmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjppZEZvclN0eWxlUmVzb2x1dGlvbigp
IGNvbnN0CkBAIC02NjQsMTMgKzY2NCwxMyBAQCBpbmxpbmUgc2l6ZV90IEVsZW1lbnQ6OmF0dHJp
YnV0ZUNvdW50KCkgY29uc3QKIGlubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnQ6OmF0dHJpYnV0ZUl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fYXR0cmlidXRlTWFwKTsK
LSAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpOworICAgIHJl
dHVybiBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5hdHRyaWJ1dGVJdGVtKGluZGV4
KTsKIH0KIAogaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudDo6Z2V0QXR0cmlidXRlSXRlbShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogICAgIEFTU0VSVChtX2F0dHJpYnV0ZU1h
cCk7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwor
ICAgIHJldHVybiBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJ
dGVtKG5hbWUpOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUodW5z
aWduZWQgaW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJp
YnV0ZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNw
cAppbmRleCA3MTQ1N2Y0YjEwMzBhM2FlYzJjMzIyYmY1NjkyMmI1YzQzOTYxMDY3Li43NjlmZWI0
MWU5YWNmZWJiNTMwNjNiMDFjNDA1ZjUxMDI1NDQ4NzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKQEAgLTMxLDYgKzMxLDE4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAordm9pZCBBdHRyaWJ1dGVWZWN0b3I6OnJlbW92ZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKQoreworICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0
ZUl0ZW1JbmRleChuYW1lKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IGF0KGluZGV4KTsKKyAg
ICBpZiAoQXR0ciogYXR0ciA9IGF0dHJpYnV0ZS0+YXR0cigpKQorICAgICAgICBhdHRyLT5tX2Vs
ZW1lbnQgPSAwOworICAgIHJlbW92ZShpbmRleCk7Cit9CisKIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
Ojp+RWxlbWVudEF0dHJpYnV0ZURhdGEoKQogewogICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxl
bWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaAppbmRleCBi
ZTE0NTYxN2MxZDRhMDJlMjYwMWFkZjkzNjEzNDVkZjk0YzhjYmIxLi4zZDk5NzYxYzFjNmVkZjIx
ZmVkZGMwMGIzMzcxOWY2NmM3YTg0NzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudEF0dHJpYnV0ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0
dHJpYnV0ZURhdGEuaApAQCAtMzUsNiArMzUsNTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBFbGVtZW50OwogCitjbGFzcyBBdHRyaWJ1dGVWZWN0b3IgOiBwdWJsaWMgVmVjdG9yPFJl
ZlB0cjxBdHRyaWJ1dGU+LCA0PiB7CisgICAgZnJpZW5kIGNsYXNzIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBdHRyaWJ1dGVWZWN0
b3IoKSk7CisgICAgfQorCisgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCkuZ2V0KCk7IH0KKyAgICBBdHRyaWJ1dGUqIGdl
dEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIHNpemVfdCBn
ZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworCisgICAg
Ly8gVXNlZCBkdXJpbmcgcGFyc2luZzogb25seSBpbnNlcnRzIGlmIG5vdCBhbHJlYWR5IHRoZXJl
LgorICAgIHZvaWQgaW5zZXJ0QXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBuZXdBdHRy
aWJ1dGUpOworICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
KworcHJpdmF0ZToKKyAgICBBdHRyaWJ1dGVWZWN0b3IoKSB7IH0KK307CisKK2lubGluZSBBdHRy
aWJ1dGUqIEF0dHJpYnV0ZVZlY3Rvcjo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKSBjb25zdAoreworICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1J
bmRleChuYW1lKTsKKyAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBh
dChpbmRleCkuZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2lubGluZSBzaXplX3QgQXR0cmli
dXRlVmVjdG9yOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKGF0KGkpLT5uYW1lKCkubWF0Y2hlcyhuYW1lKSkKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgIH0KKyAgICByZXR1cm4gbm90Rm91bmQ7Cit9CisKK2lubGluZSB2b2lkIEF0
dHJpYnV0ZVZlY3Rvcjo6aW5zZXJ0QXR0cmlidXRlKFBhc3NSZWZQdHI8QXR0cmlidXRlPiBuZXdB
dHRyaWJ1dGUpCit7CisgICAgaWYgKCFnZXRBdHRyaWJ1dGVJdGVtKG5ld0F0dHJpYnV0ZS0+bmFt
ZSgpKSkKKyAgICAgICAgYXBwZW5kKG5ld0F0dHJpYnV0ZSk7Cit9CisKIGNsYXNzIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhIHsKIHB1YmxpYzoKICAgICB+RWxlbWVudEF0dHJpYnV0ZURhdGEoKTsKQEAg
LTU3LDkgKzEwMSw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZXMuaXNFbXB0eSgpOyB9CiAKICAgICAvLyBJbnRlcm5hbCBpbnRlcmZhY2Uu
Ci0gICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOyB9Ci0gICAgQXR0cmlidXRlKiBnZXRBdHRy
aWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKLSAgICBzaXplX3QgZ2V0QXR0
cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBBdHRyaWJ1
dGUqIGF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmli
dXRlcy5hdHRyaWJ1dGVJdGVtKGluZGV4KTsgfQorICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRl
SXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0
ZXMuZ2V0QXR0cmlidXRlSXRlbShuYW1lKTsgfQorICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVt
SW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzLmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsgfQogCiAgICAgLy8gVGhlc2UgZnVuY3Rp
b25zIGRvIG5vIGVycm9yIGNoZWNraW5nLgogICAgIHZvaWQgYWRkQXR0cmlidXRlKFBhc3NSZWZQ
dHI8QXR0cmlidXRlPiwgRWxlbWVudCopOwpAQCAtOTAsNyArMTM0LDcgQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9hdHRyaWJ1dGVTdHlsZTsKICAgICBTcGFjZVNw
bGl0U3RyaW5nIG1fY2xhc3NOYW1lczsKICAgICBBdG9taWNTdHJpbmcgbV9pZEZvclN0eWxlUmVz
b2x1dGlvbjsKLSAgICBWZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4sIDQ+IG1fYXR0cmlidXRlczsK
KyAgICBBdHRyaWJ1dGVWZWN0b3IgbV9hdHRyaWJ1dGVzOwogfTsKIAogaW5saW5lIHZvaWQgRWxl
bWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBFbGVtZW50KiBlbGVtZW50KQpAQCAtMTEwLDI2ICsxNTQsOCBAQCBpbmxpbmUgQXR0cmli
dXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBTdHJpbmcm
IG5hbWUsIGJvbwogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50
QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
KSBjb25zdAotewotICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1l
KTsKLSAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBtX2F0dHJpYnV0
ZXNbaW5kZXhdLmdldCgpOwotICAgIHJldHVybiAwOwotfQotCiAvLyBXZSB1c2UgYSBib29sZWFu
IHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNhbGxpbmcgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSBz
byB0aGF0IHRoZSBjYWxsZXIKIC8vIGNhbiB0dW5lIHRoZSBiZWhhdmlvciAoaGFzQXR0cmlidXRl
IGlzIGNhc2Ugc2Vuc2l0aXZlIHdoZXJlYXMgZ2V0QXR0cmlidXRlIGlzIG5vdCkuCi1pbmxpbmUg
c2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKLXsKLSAgICBzaXplX3QgbGVuID0gbGVuZ3RoKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmICht
X2F0dHJpYnV0ZXNbaV0tPm5hbWUoKS5tYXRjaGVzKG5hbWUpKQotICAgICAgICAgICAgcmV0dXJu
IGk7Ci0gICAgfQotICAgIHJldHVybiBub3RGb3VuZDsKLX0KLQogaW5saW5lIHNpemVfdCBFbGVt
ZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAogewogICAgIHVuc2lnbmVk
IGxlbiA9IGxlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9k
ZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAppbmRleCA0NzE0
NTk3MGViNTkzMmYzNjI3YzU1ODRkYWJjN2JmODFlZDdkMTFiLi44NjA1MDRlOTU1MzkxNjQyZjUz
MjdkNjEyNWRlNzU3N2IwYzhlNmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFt
ZWROb2RlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcApA
QCAtODQsNyArODQsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFt
ZWRJdGVtTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbgogCiBQYXNzUmVmUHRyPE5v
ZGU+IE5hbWVkTm9kZU1hcDo6Z2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
IGNvbnN0CiB7Ci0gICAgQXR0cmlidXRlKiBhID0gZ2V0QXR0cmlidXRlSXRlbShuYW1lKTsKKyAg
ICBBdHRyaWJ1dGUqIGEgPSBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlSXRlbShuYW1lKTsK
ICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMDYsOCArMTA2LDggQEAgUGFz
c1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnNldE5hbWVkSXRlbShOb2RlKiBub2RlLCBFeGNl
cHRpb25Db2RlJiBlYykKICAgICBBdHRyKiBhdHRyID0gc3RhdGljX2Nhc3Q8QXR0cio+KG5vZGUp
OwogCiAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyLT5hdHRyKCk7Ci0gICAgc2l6ZV90
IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KGF0dHJpYnV0ZS0+bmFtZSgpKTsKLSAgICBB
dHRyaWJ1dGUqIG9sZEF0dHJpYnV0ZSA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0cmlidXRlSXRl
bShpbmRleCkgOiAwOworICAgIHNpemVfdCBpbmRleCA9IG1fYXR0cmlidXRlRGF0YS5nZXRBdHRy
aWJ1dGVJdGVtSW5kZXgoYXR0cmlidXRlLT5uYW1lKCkpOworICAgIEF0dHJpYnV0ZSogb2xkQXR0
cmlidXRlID0gaW5kZXggIT0gbm90Rm91bmQgPyBtX2F0dHJpYnV0ZURhdGEuYXR0cmlidXRlSXRl
bShpbmRleCkgOiAwOwogICAgIGlmIChvbGRBdHRyaWJ1dGUgPT0gYXR0cmlidXRlKQogICAgICAg
ICByZXR1cm4gbm9kZTsgLy8gd2Uga25vdyBhYm91dCBpdCBhbHJlYWR5CiAKQEAgLTEzNyw3ICsx
MzcsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIEV4Y2VwdAogewogICAgIEFTU0VSVChtX2VsZW1lbnQp
OwogCi0gICAgc2l6ZV90IGluZGV4ID0gZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOworICAg
IHNpemVfdCBpbmRleCA9IG1fYXR0cmlidXRlRGF0YS5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFt
ZSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGVjID0gTk9UX0ZPVU5E
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzEsMTUgKzE3MSwxNiBAQCB2b2lkIE5hbWVk
Tm9kZU1hcDo6ZGV0YWNoRnJvbUVsZW1lbnQoKQogYm9vbCBOYW1lZE5vZGVNYXA6Om1hcHNFcXVp
dmFsZW50KGNvbnN0IE5hbWVkTm9kZU1hcCogb3RoZXJNYXApIGNvbnN0CiB7CiAgICAgaWYgKCFv
dGhlck1hcCkKLSAgICAgICAgcmV0dXJuIGlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fYXR0
cmlidXRlRGF0YS5pc0VtcHR5KCk7CiAgICAgCiAgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7
CiAgICAgaWYgKGxlbiAhPSBvdGhlck1hcC0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKKyAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSYgb3RoZXJBdHRyaWJ1dGVE
YXRhID0gb3RoZXJNYXAtPm1fYXR0cmlidXRlRGF0YTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cmlidXRlSXRl
bShpKTsKLSAgICAgICAgQXR0cmlidXRlKiBvdGhlckF0dHIgPSBvdGhlck1hcC0+Z2V0QXR0cmli
dXRlSXRlbShhdHRyLT5uYW1lKCkpOworICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBtX2F0dHJp
YnV0ZURhdGEuYXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAgQXR0cmlidXRlKiBvdGhlckF0dHIg
PSBvdGhlckF0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlSXRlbShhdHRyLT5uYW1lKCkpOwogICAg
ICAgICBpZiAoIW90aGVyQXR0ciB8fCBhdHRyLT52YWx1ZSgpICE9IG90aGVyQXR0ci0+dmFsdWUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2Rl
TWFwLmgKaW5kZXggMzIwMWZjZDA4MDM0ZTFmZTAyNWNhZGRjZGMyNDI3YjExMzk3Njc3Ny4uNGQ3
YWRmYmUzZDBlYTcyOGNhYWQ1NDg4OWZkNTMzZWIyNDFkYjQyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1l
ZE5vZGVNYXAuaApAQCAtNjAsMjQgKzYwLDYgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxO
b2RlPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBzaXplX3QgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmxlbmd0aCgpOyB9Ci0gICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmlzRW1wdHkoKTsgfQotCi0gICAgLy8g
SW50ZXJuYWwgaW50ZXJmYWNlLgotCi0gICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZURhdGEuYXR0cmlidXRlSXRlbShp
bmRleCk7IH0KLSAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmdldEF0dHJpYnV0ZUl0
ZW0obmFtZSk7IH0KLSAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5nZXRBdHRyaWJ1
dGVJdGVtSW5kZXgobmFtZSk7IH0KLQotICAgIHZvaWQgc2hyaW5rVG9MZW5ndGgoKSB7IG1fYXR0
cmlidXRlRGF0YS5tX2F0dHJpYnV0ZXMuc2hyaW5rQ2FwYWNpdHkobGVuZ3RoKCkpOyB9Ci0gICAg
dm9pZCByZXNlcnZlSW5pdGlhbENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KSB7IG1fYXR0cmli
dXRlRGF0YS5tX2F0dHJpYnV0ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjYXBhY2l0eSk7IH0K
LQotICAgIC8vIFVzZWQgZHVyaW5nIHBhcnNpbmc6IG9ubHkgaW5zZXJ0cyBpZiBub3QgYWxyZWFk
eSB0aGVyZS4gTm8gZXJyb3IgY2hlY2tpbmchCi0gICAgdm9pZCBpbnNlcnRBdHRyaWJ1dGUoUGFz
c1JlZlB0cjxBdHRyaWJ1dGU+IG5ld0F0dHJpYnV0ZSwgYm9vbCBhbGxvd0R1cGxpY2F0ZXMpCi0g
ICAgewotICAgICAgICBBU1NFUlQoIW1fZWxlbWVudCk7Ci0gICAgICAgIGlmIChhbGxvd0R1cGxp
Y2F0ZXMgfHwgIWdldEF0dHJpYnV0ZUl0ZW0obmV3QXR0cmlidXRlLT5uYW1lKCkpKQotICAgICAg
ICAgICAgYWRkQXR0cmlidXRlKG5ld0F0dHJpYnV0ZSk7Ci0gICAgfQogCiAgICAgYm9vbCBtYXBz
RXF1aXZhbGVudChjb25zdCBOYW1lZE5vZGVNYXAqIG90aGVyTWFwKSBjb25zdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCmlu
ZGV4IGU1NTFjMmZmNWViNmYxNDUwMTc2NmFhYzY4NDM2MWQ2YWQzNWE0YmYuLjlmYTVkMzc2MGYw
OGE2ZDM3YTdkZDU5ODc0ODIxNzhlN2U5ZDQ3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAgLTE5NCw3ICsxOTQsNyBA
QCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWls
YWJsZUlmTmVlZGVkKCkKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1s
U3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgUmVmUHRy
PEhUTUxIdG1sRWxlbWVudD4gZWxlbWVudCA9IEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKG1fZG9j
dW1lbnQpOwotICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZU1hcCh0b2tlbi50YWtlQXR0
cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgZWxlbWVudC0+
cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi50YWtlQXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbik7CiAgICAgYXR0YWNoTGF0ZXIobV9hdHRhY2htZW50Um9vdCwgZWxl
bWVudCk7CiAgICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIdG1sRWxlbWVudChlbGVtZW50KTsK
IApAQCAtMjA4LDggKzIwOCw4IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0
cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYKICAgICBpZiAoIXRv
a2VuLmF0dHJpYnV0ZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTmFtZWROb2RlTWFwKiBh
dHRyaWJ1dGVzID0gZWxlbWVudC0+ZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZXMoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLT5sZW5ndGgoKTsgKytpKSB7
CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT5lbnN1cmVB
dHRyaWJ1dGVEYXRhKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2VuLmF0dHJp
YnV0ZXMoKS0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSB0
b2tlbi5hdHRyaWJ1dGVzKCktPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGlmICghYXR0cmli
dXRlcy0+Z2V0QXR0cmlidXRlSXRlbShhdHRyaWJ1dGUtPm5hbWUoKSkpCiAgICAgICAgICAgICBl
bGVtZW50LT5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKCksIGF0dHJpYnV0ZS0+dmFsdWUo
KSk7CkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
U2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIFJlZlB0cjxIVE1M
U2NyaXB0RWxlbWVudD4gZWxlbWVudCA9IEhUTUxTY3JpcHRFbGVtZW50OjpjcmVhdGUoc2NyaXB0
VGFnLCBjdXJyZW50Tm9kZSgpLT5kb2N1bWVudCgpLCB0cnVlKTsKICAgICBpZiAobV9mcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQotICAgICAg
ICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVNYXAodG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwg
bV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgICAgICBlbGVtZW50LT5wYXJzZXJT
ZXRBdHRyaWJ1dGVzKHRva2VuLnRha2VBdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uKTsKICAgICBhdHRhY2hMYXRlcihjdXJyZW50Tm9kZSgpLCBlbGVtZW50KTsKICAg
ICBtX29wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQucmVsZWFzZSgpKTsKIH0KQEAgLTM5OSw3ICsz
OTksNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sCiB7CiAgICAgUXVhbGlmaWVkTmFtZSB0YWdO
YW1lKG51bGxBdG9tLCB0b2tlbi5uYW1lKCksIG5hbWVzcGFjZVVSSSk7CiAgICAgUmVmUHRyPEVs
ZW1lbnQ+IGVsZW1lbnQgPSBjdXJyZW50Tm9kZSgpLT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50
KHRhZ05hbWUsIHRydWUpOwotICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZU1hcCh0b2tl
bi50YWtlQXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAg
ZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi50YWtlQXR0cmlidXRlcygpLCBtX2Zy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgp
OwogfQogCkBAIC00MTAsNyArNDEwLDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2sKICAgICAv
LyBoYXZlIHRvIHBhc3MgdGhlIGN1cnJlbnQgZm9ybSBlbGVtZW50LiAgV2Ugc2hvdWxkIHJld29y
ayBmb3JtIGFzc29jaWF0aW9uCiAgICAgLy8gdG8gb2NjdXIgYWZ0ZXIgY29uc3RydWN0aW9uIHRv
IGFsbG93IGJldHRlciBjb2RlIHNoYXJpbmcgaGVyZS4KICAgICBSZWZQdHI8RWxlbWVudD4gZWxl
bWVudCA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQodGFnTmFtZSwgY3Vy
cmVudE5vZGUoKS0+ZG9jdW1lbnQoKSwgZm9ybSgpLCB0cnVlKTsKLSAgICBlbGVtZW50LT5wYXJz
ZXJTZXRBdHRyaWJ1dGVNYXAodG9rZW4udGFrZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24pOworICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4u
dGFrZUF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogICAgIEFT
U0VSVChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpOwogICAgIHJldHVybiBlbGVtZW50LnJlbGVh
c2UoKTsKIH0KQEAgLTQyMywxNyArNDIzLDE3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENv
bnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50RnJvbUVsZW1lbnRSZWNvcmQoSFRNCiBu
YW1lc3BhY2UgewogCiAvLyBGSVhNRTogTW92ZSB0aGlzIGZ1bmN0aW9uIHRvIHRoZSB0b3Agb2Yg
dGhlIGZpbGUuCi1pbmxpbmUgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGNsb25lQXR0cmlidXRl
cyhFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBj
bG9uZUF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBOYW1lZE5vZGVNYXAqIGF0
dHJpYnV0ZXMgPSBlbGVtZW50LT51cGRhdGVkQXR0cmlidXRlcygpOworICAgIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsK
ICAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgT3du
UHRyPE5hbWVkTm9kZU1hcD4gbmV3QXR0cmlidXRlcyA9IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKCk7
CisgICAgT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gbmV3QXR0cmlidXRlcyA9IEF0dHJpYnV0ZVZl
Y3Rvcjo6Y3JlYXRlKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5s
ZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRl
cy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gY2xvbmUgPSBB
dHRyaWJ1dGU6OmNyZWF0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpKTsK
LSAgICAgICAgbmV3QXR0cmlidXRlcy0+YWRkQXR0cmlidXRlKGNsb25lKTsKKyAgICAgICAgbmV3
QXR0cmlidXRlcy0+YXBwZW5kKGNsb25lKTsKICAgICB9CiAgICAgcmV0dXJuIG5ld0F0dHJpYnV0
ZXMucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4uaAppbmRl
eCBjMTc4Mjg0MzQ2MGM2YzA3OTg5ZmJiYmQ2N2NiMjA0NjI4NjhkNTdkLi5hMzkxZDM0MDkxODFi
NDNiN2NmOWFjOTQwN2JkOTQ4NjRhYmQ5YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVG9rZW4uaApAQCAtODYsNyArODYsNyBAQCBjbGFzcyBBdG9taWNIVE1MVG9rZW4gOiBwdWJs
aWMgQXRvbWljTWFya3VwVG9rZW5CYXNlPEhUTUxUb2tlbj4gewogcHVibGljOgogICAgIEF0b21p
Y0hUTUxUb2tlbihIVE1MVG9rZW4mIHRva2VuKSA6IEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1M
VG9rZW4+KCZ0b2tlbikgeyB9CiAKLSAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuVHlwZXM6
OlR5cGUgdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUsIFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBh
dHRyaWJ1dGVzID0gbnVsbHB0cikKKyAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuVHlwZXM6
OlR5cGUgdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUsIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9y
PiBhdHRyaWJ1dGVzID0gbnVsbHB0cikKICAgICAgICAgOiBBdG9taWNNYXJrdXBUb2tlbkJhc2U8
SFRNTFRva2VuPih0eXBlLCBuYW1lLCBhdHRyaWJ1dGVzKQogICAgIHsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCAzYjU0MTQ5
MTMxN2Q3NzVlMTlmZWE0ZTQyOWNmYmRkYjc5MDI0ZWQwLi43OTdlNTgzZDkxYWY3ZTc4YWQwNmM5
YmRlOTY0NmZlMTUwODljOGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5jcHAKQEAgLTUzMSw3ICs1MzEsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFy
dFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBQYXNzT3duUHRyPE5hbWVkTm9kZU1h
cD4gYXR0cmlidXRlcykKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0YXJ0VGFn
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9y
PiBhdHRyaWJ1dGVzKQogewogICAgIC8vIEZJWE1FOiBXZSdsbCBuZWVkIGEgZmFuY2llciBjb252
ZXJzaW9uIHRoYW4ganVzdCAibG9jYWxOYW1lIiBmb3IgU1ZHL01hdGhNTCB0YWdzLgogICAgIEF0
b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCB0YWdOYW1l
LmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsKQEAgLTU2MCwxMSArNTYwLDExIEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCkKICAgICBw
cm9jZXNzRW5kVGFnKGVuZFApOwogfQogCi1QYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gSFRNTFRy
ZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCitQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1
dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgT3duUHRy
PE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IHRva2VuLnRha2VBdHRyaWJ1dGVzKCk7CisgICAg
T3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gYXR0cmlidXRlcyA9IHRva2VuLnRha2VBdHRyaWJ1dGVz
KCk7CiAgICAgaWYgKCFhdHRyaWJ1dGVzKQotICAgICAgICBhdHRyaWJ1dGVzID0gTmFtZWROb2Rl
TWFwOjpjcmVhdGUoKTsKKyAgICAgICAgYXR0cmlidXRlcyA9IEF0dHJpYnV0ZVZlY3Rvcjo6Y3Jl
YXRlKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGF0dHJpYnV0ZXMtPnJlbW92ZUF0dHJpYnV0ZShu
YW1lQXR0cik7CiAgICAgICAgIGF0dHJpYnV0ZXMtPnJlbW92ZUF0dHJpYnV0ZShhY3Rpb25BdHRy
KTsKQEAgLTU3Miw3ICs1NzIsNyBAQCBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gSFRNTFRyZWVC
dWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUbwogICAgIH0KIAog
ICAgIFJlZlB0cjxBdHRyaWJ1dGU+IG1hcHBlZEF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3JlYXRl
KG5hbWVBdHRyLCBpc2luZGV4VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBhdHRyaWJ1dGVzLT5pbnNl
cnRBdHRyaWJ1dGUobWFwcGVkQXR0cmlidXRlLnJlbGVhc2UoKSwgZmFsc2UpOworICAgIGF0dHJp
YnV0ZXMtPmluc2VydEF0dHJpYnV0ZShtYXBwZWRBdHRyaWJ1dGUucmVsZWFzZSgpKTsKICAgICBy
ZXR1cm4gYXR0cmlidXRlcy5yZWxlYXNlKCk7CiB9CiAKQEAgLTY3OSwxMSArNjc5LDExIEBAIHZv
aWQgYWRqdXN0QXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBtYXBM
b3dlcmVkTG9jYWxOYW1lVG9OYW1lKGNhc2VNYXAsIGF0dHJzLCBsZW5ndGgpOwogICAgIH0KIAot
ICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKKyAgICBB
dHRyaWJ1dGVWZWN0b3IqIGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7CiAgICAgaWYg
KCFhdHRyaWJ1dGVzKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHVuc2lnbmVkIHggPSAw
OyB4IDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsreCkgeworICAgIGZvciAodW5zaWduZWQgeCA9
IDA7IHggPCBhdHRyaWJ1dGVzLT5zaXplKCk7ICsreCkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0
dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oeCk7CiAgICAgICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGNhc2VkTmFtZSA9IGNhc2VNYXAtPmdldChhdHRyaWJ1dGUtPmxvY2FsTmFt
ZSgpKTsKICAgICAgICAgaWYgKCFjYXNlZE5hbWUubG9jYWxOYW1lKCkuaXNOdWxsKCkpCkBAIC03
MjgsMTEgKzcyOCwxMSBAQCB2b2lkIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgICAgIG1hcC0+YWRkKCJ4bWxuczp4bGluayIsIFF1YWxpZmllZE5h
bWUoInhtbG5zIiwgInhsaW5rIiwgWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkkpKTsKICAg
ICB9CiAKLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7
CisgICAgQXR0cmlidXRlVmVjdG9yKiBhdHRyaWJ1dGVzID0gdG9rZW4uYXR0cmlidXRlcygpOwog
ICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yICh1bnNpZ25l
ZCB4ID0gMDsgeCA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK3gpIHsKKyAgICBmb3IgKHVuc2ln
bmVkIHggPSAwOyB4IDwgYXR0cmlidXRlcy0+c2l6ZSgpOyArK3gpIHsKICAgICAgICAgQXR0cmli
dXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKHgpOwogICAgICAgICBj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0gbWFwLT5nZXQoYXR0cmlidXRlLT5sb2NhbE5hbWUo
KSk7CiAgICAgICAgIGlmICghbmFtZS5sb2NhbE5hbWUoKS5pc051bGwoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKaW5kZXggMDE4M2QyMGNhZTFjZWEy
NzlkZmE5ZmY0NzM0ZTg4YmM0ZjZkNjViYi4uMzUwMjRmODg4YzljOWI0NWY1NzQ2MzUzNDdjNjQ1
ZjBlMTFlMjFjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWls
ZGVyLmgKQEAgLTE1MSw3ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJvY2Vzc0NoYXJh
Y3RlckJ1ZmZlcihFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyJik7CiAgICAgaW5saW5lIHZv
aWQgcHJvY2Vzc0NoYXJhY3RlckJ1ZmZlckZvckluQm9keShFeHRlcm5hbENoYXJhY3RlclRva2Vu
QnVmZmVyJik7CiAKLSAgICB2b2lkIHByb2Nlc3NGYWtlU3RhcnRUYWcoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIFBhc3NPd25QdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzID0gbnVsbHB0cik7Cisg
ICAgdm9pZCBwcm9jZXNzRmFrZVN0YXJ0VGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBQYXNzT3du
UHRyPEF0dHJpYnV0ZVZlY3Rvcj4gYXR0cmlidXRlcyA9IG51bGxwdHIpOwogICAgIHZvaWQgcHJv
Y2Vzc0Zha2VFbmRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgcHJvY2Vzc0Zh
a2VDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgcHJvY2Vzc0Zha2VQRW5kVGFn
SWZQSW5CdXR0b25TY29wZSgpOwpAQCAtMTcyLDcgKzE3Miw3IEBAIHByaXZhdGU6CiAgICAgaW5s
aW5lIGJvb2wgc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9r
ZW4mKTsKICAgICB2b2lkIHByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRv
a2VuJik7CiAKLSAgICBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlc0ZvcklzaW5k
ZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICBQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rv
cj4gYXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mKTsKIAogICAgIEhU
TUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5n
RWxlbWVudChFbGVtZW50Kik7CiAgICAgdm9pZCBjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWlj
SFRNTFRva2VuJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0
RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERvY3Vt
ZW50UGFyc2VyLmNwcAppbmRleCBmNDYwMWRlNmFjMzYwYjA5Yjg2N2E4MjRiNmRlNmRhMzY3YWI4
MzU2Li4zNTg5YzNmNWY1MjNiNjM0YWQwNjZkMzA3YTdkOTZlNWFhMzE2MDM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKQEAgLTYx
LDggKzYxLDggQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQcmVFbGVtZW50
KCkKICAgICAvLyBkaXN0cnViaW5nIHRoZSBsaW5lL2NvbHVtbiBudW1iZXIgY2FsY3VsYXRpb25z
LgogCiAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gc3R5bGVBdHRyaWJ1dGUgPSBBdHRyaWJ1dGU6OmNy
ZWF0ZSgic3R5bGUiLCAid29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdy
YXA7Iik7Ci0gICAgT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IE5hbWVkTm9kZU1h
cDo6Y3JlYXRlKCk7Ci0gICAgYXR0cmlidXRlcy0+aW5zZXJ0QXR0cmlidXRlKHN0eWxlQXR0cmli
dXRlLnJlbGVhc2UoKSwgZmFsc2UpOworICAgIE93blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJp
YnV0ZXMgPSBBdHRyaWJ1dGVWZWN0b3I6OmNyZWF0ZSgpOworICAgIGF0dHJpYnV0ZXMtPmluc2Vy
dEF0dHJpYnV0ZShzdHlsZUF0dHJpYnV0ZS5yZWxlYXNlKCkpOwogICAgIEF0b21pY0hUTUxUb2tl
biBmYWtlUHJlKEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZywgcHJlVGFnLmxvY2FsTmFtZSgpLCBh
dHRyaWJ1dGVzLnJlbGVhc2UoKSk7CiAKICAgICB0cmVlQnVpbGRlcigpLT5jb25zdHJ1Y3RUcmVl
RnJvbUF0b21pY1Rva2VuKGZha2VQcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvTWFy
a3VwVG9rZW5CYXNlLmgKaW5kZXggOTg2NTM4YjhkNzAzNWUxZTAzMTgzODRlMjFjYmJkZGQ4MzBh
ODYwOS4uMmEwYWEzMDUwODQ1N2E4OTBmZWUwZTcxZjRlZGE3NWVjMzEzZGVjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbkJhc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL01hcmt1cFRva2VuQmFzZS5oCkBAIC0yNyw3ICsyNyw3IEBA
CiAjaWZuZGVmIE1hcmt1cFRva2VuQmFzZV9oCiAjZGVmaW5lIE1hcmt1cFRva2VuQmFzZV9oCiAK
LSNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKKyNpbmNsdWRlICJFbGVtZW50QXR0cmlidXRlRGF0
YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC00MTAsNyArNDEwLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAg
QXRvbWljTWFya3VwVG9rZW5CYXNlKHR5cGVuYW1lIFRva2VuOjpUeXBlOjpUeXBlIHR5cGUsIEF0
b21pY1N0cmluZyBuYW1lLCBQYXNzT3duUHRyPE5hbWVkTm9kZU1hcD4gYXR0cmlidXRlcyA9IG51
bGxwdHIpCisgICAgQXRvbWljTWFya3VwVG9rZW5CYXNlKHR5cGVuYW1lIFRva2VuOjpUeXBlOjpU
eXBlIHR5cGUsIEF0b21pY1N0cmluZyBuYW1lLCBQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4g
YXR0cmlidXRlcyA9IG51bGxwdHIpCiAgICAgICAgIDogbV90eXBlKHR5cGUpCiAgICAgICAgICwg
bV9uYW1lKG5hbWUpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCkBAIC00NDYs
MTMgKzQ0NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXMtPmdldEF0
dHJpYnV0ZUl0ZW0oYXR0cmlidXRlTmFtZSk7CiAgICAgfQogCi0gICAgTmFtZWROb2RlTWFwKiBh
dHRyaWJ1dGVzKCkgY29uc3QKKyAgICBBdHRyaWJ1dGVWZWN0b3IqIGF0dHJpYnV0ZXMoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKHVzZXNBdHRyaWJ1dGVzKCkpOwogICAgICAgICByZXR1
cm4gbV9hdHRyaWJ1dGVzLmdldCgpOwogICAgIH0KIAotICAgIFBhc3NPd25QdHI8TmFtZWROb2Rl
TWFwPiB0YWtlQXR0cmlidXRlcygpCisgICAgUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IHRh
a2VBdHRyaWJ1dGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh1c2VzQXR0cmlidXRlcygpKTsK
ICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlcy5yZWxlYXNlKCk7CkBAIC01MTYsNyArNTE2LDcg
QEAgcHJvdGVjdGVkOgogICAgIC8vIEZvciBTdGFydFRhZyBhbmQgRW5kVGFnCiAgICAgYm9vbCBt
X3NlbGZDbG9zaW5nOwogCi0gICAgT3duUHRyPE5hbWVkTm9kZU1hcD4gbV9hdHRyaWJ1dGVzOwor
ICAgIE93blB0cjxBdHRyaWJ1dGVWZWN0b3I+IG1fYXR0cmlidXRlczsKIH07CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFRva2VuPgpAQCAtNTI2LDcgKzUyNiw3IEBAIGlubGluZSB2b2lkIEF0b21pY01h
cmt1cFRva2VuQmFzZTxUb2tlbj46OmluaXRpYWxpemVBdHRyaWJ1dGVzKGNvbnN0IHR5cGVuYW1l
IFRvCiAgICAgaWYgKCFzaXplKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2F0dHJpYnV0ZXMg
PSBOYW1lZE5vZGVNYXA6OmNyZWF0ZSgpOworICAgIG1fYXR0cmlidXRlcyA9IEF0dHJpYnV0ZVZl
Y3Rvcjo6Y3JlYXRlKCk7CiAgICAgbV9hdHRyaWJ1dGVzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHNpemUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAg
IGNvbnN0IHR5cGVuYW1lIFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNb
aV07CkBAIC01NDEsNyArNTQxLDcgQEAgaW5saW5lIHZvaWQgQXRvbWljTWFya3VwVG9rZW5CYXNl
PFRva2VuPjo6aW5pdGlhbGl6ZUF0dHJpYnV0ZXMoY29uc3QgdHlwZW5hbWUgVG8KICAgICAgICAg
QVNTRVJUKGF0dHJpYnV0ZS5tX3ZhbHVlUmFuZ2UubV9lbmQpOwogCiAgICAgICAgIEF0b21pY1N0
cmluZyB2YWx1ZShhdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCksIGF0dHJpYnV0ZS5tX3ZhbHVlLnNp
emUoKSk7Ci0gICAgICAgIG1fYXR0cmlidXRlcy0+aW5zZXJ0QXR0cmlidXRlKEF0dHJpYnV0ZTo6
Y3JlYXRlKG5hbWVGb3JBdHRyaWJ1dGUoYXR0cmlidXRlKSwgdmFsdWUpLCBmYWxzZSk7CisgICAg
ICAgIG1fYXR0cmlidXRlcy0+aW5zZXJ0QXR0cmlidXRlKEF0dHJpYnV0ZTo6Y3JlYXRlKG5hbWVG
b3JBdHRyaWJ1dGUoYXR0cmlidXRlKSwgdmFsdWUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVG9rZW4uaCBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MVG9rZW4uaAppbmRleCBkMWJkYzBlNmI5OTEzY2NlODNkZDFlZTRkZWVmN2Y3
M2E0ZDJjNDQ3Li4xZWQxNmNhOWJjYmI2N2FmMjEyMzVkYjRjOTZkY2FiNDE3NjM0OWJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTFRva2VuLmgKKysrIGIvU291cmNl
L1dlYkNvcmUveG1sL3BhcnNlci9YTUxUb2tlbi5oCkBAIC00MzEsNyArNDMxLDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfQogCi0gICAgQXRvbWljWE1MVG9rZW4oWE1MVG9rZW5UeXBlczo6
VHlwZSB0eXBlLCBBdG9taWNTdHJpbmcgbmFtZSwgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGF0
dHJpYnV0ZXMgPSBudWxscHRyKQorICAgIEF0b21pY1hNTFRva2VuKFhNTFRva2VuVHlwZXM6OlR5
cGUgdHlwZSwgQXRvbWljU3RyaW5nIG5hbWUsIFBhc3NPd25QdHI8QXR0cmlidXRlVmVjdG9yPiBh
dHRyaWJ1dGVzID0gbnVsbHB0cikKICAgICAgICAgOiBBdG9taWNNYXJrdXBUb2tlbkJhc2U8WE1M
VG9rZW4+KHR5cGUsIG5hbWUsIGF0dHJpYnV0ZXMpCiAgICAgewogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggMGMyYjJkNmEwYzc5ZjQ4
Y2I2ZmQzZjQ3MDI2NmRmZTg5MWNiOGIzYS4uODE3OTNlZDZkNTc2Y2E4MWVjNGQwZTdlNmMwNDJh
ZDEyZGI3NzU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVl
QnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxUcmVlQnVpbGRl
ci5jcHAKQEAgLTMwMSw3ICszMDEsNyBAQCB2b2lkIFhNTFRyZWVCdWlsZGVyOjpwcm9jZXNzTmFt
ZXNwYWNlcyhjb25zdCBBdG9taWNYTUxUb2tlbiYgdG9rZW4sIE5vZGVTdGFja0l0ZQogICAgIGlm
ICghdG9rZW4uYXR0cmlidXRlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRva2VuLmF0dHJpYnV0ZXMoKS0+bGVuZ3RoKCk7ICsraSkgeworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLT5zaXplKCk7ICsraSkgewog
ICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IHRva2VuLmF0dHJpYnV0ZXMoKS0+YXR0cmli
dXRlSXRlbShpKTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSgpLnByZWZpeCgpID09IHht
bG5zQXRvbSkKICAgICAgICAgICAgIHN0YWNrSXRlbS5zZXROYW1lc3BhY2VVUkkoYXR0cmlidXRl
LT5uYW1lKCkubG9jYWxOYW1lKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSk7CkBAIC0zMTUsNyArMzE1
LDcgQEAgdm9pZCBYTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0F0dHJpYnV0ZXMoY29uc3QgQXRvbWlj
WE1MVG9rZW4mIHRva2VuLCBOb2RlU3RhY2tJdGUKICAgICBpZiAoIXRva2VuLmF0dHJpYnV0ZXMo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b2tlbi5h
dHRyaWJ1dGVzKCktPmxlbmd0aCgpOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRva2VuLmF0dHJpYnV0ZXMoKS0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgQXR0cmlidXRlKiBh
dHRyaWJ1dGUgPSB0b2tlbi5hdHRyaWJ1dGVzKCktPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lKCkucHJl
Zml4KCkgPT0geG1sbnNBdG9tKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTmFtZWROb2RlTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5h
bWVkTm9kZU1hcC5jcHAKaW5kZXggZTI0NTVlNmI5ZjdlMTI3ODljZGIwYzE3ZGZlNTI4ZGRjZmQ1
MWI1Zi4uYmE1ZjI5NjI1YjE0MTNjNjk2MDQ4ODJhOTdhZGM5YzU4OGExMmI4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTmFtZWROb2RlTWFwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOYW1lZE5vZGVNYXAuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViTmFtZWROb2RlTWFwLmgi
CiAKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5j
bHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIldlYkF0dHJpYnV0ZS5oIgpAQCAtNjMsNyArNjQsNyBA
QCB1bnNpZ25lZCBXZWJOYW1lZE5vZGVNYXA6Omxlbmd0aCgpIGNvbnN0CiAKIFdlYkF0dHJpYnV0
ZSBXZWJOYW1lZE5vZGVNYXA6OmF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFdlYkF0dHJpYnV0ZShtX3ByaXZhdGUtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgp
KTsKKyAgICByZXR1cm4gV2ViQXR0cmlidXRlKG1fcHJpdmF0ZS0+ZWxlbWVudCgpLT5hdHRyaWJ1
dGVJdGVtKGluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="132511"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>