<?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>133683</bug_id>
          
          <creation_ts>2014-06-10 10:32:10 -0700</creation_ts>
          <short_desc>Inline caching should try to flatten uncacheable dictionaries</short_desc>
          <delta_ts>2014-06-11 15:56:09 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1014429</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-10 10:32:10 -0700</bug_when>
    <thetext>There exists a body of JS code that deletes properties off of objects (especially function/constructor objects), which puts them into an uncacheable dictionary state. This prevents all future inline caching for these objects. If properties are deleted out of the object during its initialization, we can enable caching for that object by attempting to flatten it when we see we&apos;re trying to do inline caching with that object. We then record that we performed this flattening optimization in the object&apos;s Structure. If it ever re-enters the uncacheable dictionary state then we can just give up on caching that object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014430</commentid>
    <comment_count>1</comment_count>
      <attachid>232793</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-10 10:34:29 -0700</bug_when>
    <thetext>Created attachment 232793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014435</commentid>
    <comment_count>2</comment_count>
      <attachid>232793</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-06-10 10:52:31 -0700</bug_when>
    <thetext>Comment on attachment 232793
Patch

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

r=me

&gt; Source/JavaScriptCore/jit/Repatch.cpp:727
&gt; +    if (structure-&gt;isUncacheableDictionary() &amp;&amp; !structure-&gt;hasBeenFlattenedBefore())
&gt; +        asObject(baseCell)-&gt;flattenDictionaryObject(*vm);

I think this line should precede the &quot;Optimize self access&quot; paragraph. If flattening works, there&apos;s no need to resort to building a polymorphic list right away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014438</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-10 10:54:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 232793 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=232793&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/Repatch.cpp:727
&gt; &gt; +    if (structure-&gt;isUncacheableDictionary() &amp;&amp; !structure-&gt;hasBeenFlattenedBefore())
&gt; &gt; +        asObject(baseCell)-&gt;flattenDictionaryObject(*vm);
&gt; 
&gt; I think this line should precede the &quot;Optimize self access&quot; paragraph. If flattening works, there&apos;s no need to resort to building a polymorphic list right away.

The problem with this approach is that flattening can potentially change the offset of the thing you just loaded. So we do it afterward so the next slow path will have the correct offset. We could also just re-do the lookup after flattening, but that seemed weirder to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014444</commentid>
    <comment_count>4</comment_count>
      <attachid>232793</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-06-10 11:07:26 -0700</bug_when>
    <thetext>Comment on attachment 232793
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/jit/Repatch.cpp:727
&gt;&gt;&gt; +        asObject(baseCell)-&gt;flattenDictionaryObject(*vm);
&gt;&gt; 
&gt;&gt; I think this line should precede the &quot;Optimize self access&quot; paragraph. If flattening works, there&apos;s no need to resort to building a polymorphic list right away.
&gt; 
&gt; The problem with this approach is that flattening can potentially change the offset of the thing you just loaded. So we do it afterward so the next slow path will have the correct offset. We could also just re-do the lookup after flattening, but that seemed weirder to me.

I see. I guess this needs to go into buildList, then. That way, we&apos;ll do the flattening even in polymorphic cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014588</commentid>
    <comment_count>5</comment_count>
      <attachid>232829</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-10 16:58:28 -0700</bug_when>
    <thetext>Created attachment 232829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014589</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-10 16:59:06 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=232829) [details]
&gt; Patch

I refactored some code to reduce duplication and make the logic of the inline caching stuff read more fluidly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014637</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-10 19:36:19 -0700</bug_when>
    <thetext>This seems like it can&apos;t possibly benefit anything other than microbenchmarks. If an object becomes an uncacheable dictionary then it gets a structure unique to it. Flattening the structure means that the structure is still unique to that one object.

This means that this optimization only benefits expressions &quot;o.f&quot; where &quot;o&quot; is always the same object. This is probably very rare except in meaningless microbenchmarks. On the other hand this seems like it introduces non-trivial risk. 

So, I&apos;m not sure we should do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014814</commentid>
    <comment_count>8</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-06-11 11:17:18 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; This seems like it can&apos;t possibly benefit anything other than microbenchmarks. If an object becomes an uncacheable dictionary then it gets a structure unique to it. Flattening the structure means that the structure is still unique to that one object.
&gt; 
&gt; This means that this optimization only benefits expressions &quot;o.f&quot; where &quot;o&quot; is always the same object. This is probably very rare except in meaningless microbenchmarks. On the other hand this seems like it introduces non-trivial risk. 
&gt; 
&gt; So, I&apos;m not sure we should do this.

This seems like a valid concern, it would be great to try to establish how real websites use this to provide evidence one way or the other. I wonder whether we could add logging &amp; gather stats on a real site that uses prototype – say, on apple.com? – are we repeatedly making accesses to uncachable dictionaries, and if so, is it the same one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014819</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-06-11 11:31:17 -0700</bug_when>
    <thetext>&gt; This means that this optimization only benefits expressions &quot;o.f&quot; where &quot;o&quot; is always the same object. 

This is true of constructor and namespace objects, which are pretty common. In this benchmark, the object is a constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014830</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-06-11 11:46:31 -0700</bug_when>
    <thetext>I did some browsing around apple.com, and it didn&apos;t take long to get over 500 property delete by id actions. So, that tells us that delete is reasonably common -- but it doesn&apos;t tell us if these were constructor / namespace objects.

Mark, can you set some breakpoints with this patch attached, and find out if the optimization ends up kicking in and sticking in a meaningful way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014920</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-11 14:34:26 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Mark, can you set some breakpoints with this patch attached, and find out if the optimization ends up kicking in and sticking in a meaningful way?

After browsing around (for not very long), I found that apple.com triggers this optimization. I added some logging to tell us when we were triggering flattening (thus enabling inline caching) and when we were re-encountering an object that we had previously flattened but had re-entered uncacheable dictionary mode (thus causing us to give up on caching it). The code on apple.com seemed to have a high rate of success, meaning that we often able to flatten and we would rarely re-enter uncacheable dictionary mode.

apple.com uses the prototype framework, which is also the portion of dromaeo that this patch helps the most. Using prototype all but guarantees that you will encounter this case in our inline caches because it does exactly what Geoff described above--it deletes some properties off of some of its constructor objects during initialization. 

Additionally, going to other sites like facebook.com also trigger this code path constantly. So overall, I think this is a worthwhile improvement. It may not be on the hottest of hot paths, but it&apos;s common enough and it prevents us from otherwise totally giving up on caching when we encounter an uncacheable dictionary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014921</commentid>
    <comment_count>12</comment_count>
      <attachid>232829</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-06-11 14:37:30 -0700</bug_when>
    <thetext>Comment on attachment 232829
Patch

This data seems to resolve Phil&apos;s concern that this idiom only arises in meaningless microbenchmarks, so I&apos;ll say r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014969</commentid>
    <comment_count>13</comment_count>
      <attachid>232829</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-11 15:56:06 -0700</bug_when>
    <thetext>Comment on attachment 232829
Patch

Clearing flags on attachment: 232829

Committed r169853: &lt;http://trac.webkit.org/changeset/169853&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014970</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-11 15:56:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232793</attachid>
            <date>2014-06-10 10:34:29 -0700</date>
            <delta_ts>2014-06-10 16:58:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133683-20140610103404.patch</filename>
            <type>text/plain</type>
            <size>5913</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NzQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDE0LTA2LTEwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSW5saW5lIGNhY2hpbmcgc2hvdWxkIHRyeSB0byBmbGF0dGVuIHVuY2FjaGVhYmxl
IGRpY3Rpb25hcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzNjgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlcmUgZXhpc3RzIGEgYm9keSBvZiBKUyBjb2RlIHRoYXQgZGVsZXRlcyBwcm9wZXJ0
aWVzIG9mZiBvZiBvYmplY3RzIChlc3BlY2lhbGx5IGZ1bmN0aW9uL2NvbnN0cnVjdG9yIG9iamVj
dHMpLCAKKyAgICAgICAgd2hpY2ggcHV0cyB0aGVtIGludG8gYW4gdW5jYWNoZWFibGUgZGljdGlv
bmFyeSBzdGF0ZS4gVGhpcyBwcmV2ZW50cyBhbGwgZnV0dXJlIGlubGluZSBjYWNoaW5nIGZvciB0
aGVzZSBvYmplY3RzLiAKKyAgICAgICAgSWYgcHJvcGVydGllcyBhcmUgZGVsZXRlZCBvdXQgb2Yg
dGhlIG9iamVjdCBkdXJpbmcgaXRzIGluaXRpYWxpemF0aW9uLCB3ZSBjYW4gZW5hYmxlIGNhY2hp
bmcgZm9yIHRoYXQgb2JqZWN0IGJ5IAorICAgICAgICBhdHRlbXB0aW5nIHRvIGZsYXR0ZW4gaXQg
d2hlbiB3ZSBzZWUgd2UncmUgdHJ5aW5nIHRvIGRvIGlubGluZSBjYWNoaW5nIHdpdGggdGhhdCBv
YmplY3QuIFdlIHRoZW4gcmVjb3JkIHRoYXQgd2UgCisgICAgICAgIHBlcmZvcm1lZCB0aGlzIGZs
YXR0ZW5pbmcgb3B0aW1pemF0aW9uIGluIHRoZSBvYmplY3QncyBTdHJ1Y3R1cmUuIElmIGl0IGV2
ZXIgcmUtZW50ZXJzIHRoZSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5IAorICAgICAgICBzdGF0ZSB0
aGVuIHdlIGNhbiBqdXN0IGdpdmUgdXAgb24gY2FjaGluZyB0aGF0IG9iamVjdC4KKworICAgICAg
ICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0
cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpoYXNCZWVuRmxhdHRlbmVkQmVmb3JlKToKKwogMjAxNC0wNi0wOSAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIEdsb2JhbCBIYXNo
VGFibGVzIGNvbnRhaW4gcmVmZXJlbmNlcyB0byBhdG9taWMgU3RyaW5nSW1wbHMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTY5NzQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA0
LDcgKzcwNCw5IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUoKTsKICAgICBpZiAo
IXNsb3QuaXNDYWNoZWFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghc3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgaWYgKHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgJiYg
c3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsKICAgICBp
ZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5l
d0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQpAQCAtNzEyLDYgKzcxNCw3IEBAIHN0
YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKIAogICAgIC8vIE9wdGltaXpl
IHNlbGYgYWNjZXNzLgogICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCisgICAg
ICAgICYmICFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkKICAgICAgICAgJiYg
c2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgp
CiAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09m
ZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQo
KSkpKSB7CkBAIC03MjAsNiArNzIzLDkgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4
ZWNTdGF0ZSogZQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgaWYgKHN0
cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSAmJiAhc3RydWN0dXJlLT5oYXNCZWVu
RmxhdHRlbmVkQmVmb3JlKCkpCisgICAgICAgIGFzT2JqZWN0KGJhc2VDZWxsKS0+ZmxhdHRlbkRp
Y3Rpb25hcnlPYmplY3QoKnZtKTsKKwogICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAkocmV2aXNpb24gMTY5NzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2Niw3IEBAIFN0
cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmoKICAgICAsIG1fb2Zmc2V0KGlu
dmFsaWRPZmZzZXQpCiAgICAgLCBtX2lubGluZUNhcGFjaXR5KGlubGluZUNhcGFjaXR5KQogICAg
ICwgbV9kaWN0aW9uYXJ5S2luZChOb25lRGljdGlvbmFyeUtpbmQpCisgICAgLCBtX2hhc0JlZW5G
bGF0dGVuZWRCZWZvcmUoZmFsc2UpCiAgICAgLCBtX2lzUGlubmVkUHJvcGVydHlUYWJsZShmYWxz
ZSkKICAgICAsIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcyhjbGFzc0luZm8tPmhhc1N0YXRp
Y1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKHZtKSkKICAgICAsIG1faGFzQ3VzdG9tR2V0dGVy
U2V0dGVyUHJvcGVydGllcyhmYWxzZSkKQEAgLTE5NCw2ICsxOTUsNyBAQCBTdHJ1Y3R1cmU6OlN0
cnVjdHVyZShWTSYgdm0pCiAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgICwgbV9p
bmxpbmVDYXBhY2l0eSgwKQogICAgICwgbV9kaWN0aW9uYXJ5S2luZChOb25lRGljdGlvbmFyeUtp
bmQpCisgICAgLCBtX2hhc0JlZW5GbGF0dGVuZWRCZWZvcmUoZmFsc2UpCiAgICAgLCBtX2lzUGlu
bmVkUHJvcGVydHlUYWJsZShmYWxzZSkKICAgICAsIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cyhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXModm0pKQog
ICAgICwgbV9oYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKGZhbHNlKQpAQCAtMjIxLDYg
KzIyMyw3IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiAKICAgICAs
IG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgLCBtX2lubGluZUNhcGFjaXR5KHByZXZpb3Vz
LT5tX2lubGluZUNhcGFjaXR5KQogICAgICwgbV9kaWN0aW9uYXJ5S2luZChwcmV2aW91cy0+bV9k
aWN0aW9uYXJ5S2luZCkKKyAgICAsIG1faGFzQmVlbkZsYXR0ZW5lZEJlZm9yZShwcmV2aW91cy0+
bV9oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKQogICAgICwgbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUo
ZmFsc2UpCiAgICAgLCBtX2hhc0dldHRlclNldHRlclByb3BlcnRpZXMocHJldmlvdXMtPm1faGFz
R2V0dGVyU2V0dGVyUHJvcGVydGllcykKICAgICAsIG1faGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJv
cGVydGllcyhwcmV2aW91cy0+bV9oYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKQpAQCAt
NzQ1LDYgKzc0OCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMK
ICAgICB9CiAKICAgICBtX2RpY3Rpb25hcnlLaW5kID0gTm9uZURpY3Rpb25hcnlLaW5kOworICAg
IG1faGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSA9IHRydWU7CiAKICAgICAvLyBJZiB0aGUgb2JqZWN0
IGhhZCBhIEJ1dHRlcmZseSBidXQgYWZ0ZXIgZmxhdHRlbmluZy9jb21wYWN0aW5nIHdlIG5vIGxv
bmdlciBoYXZlIG5lZWQgb2YgaXQsCiAgICAgLy8gd2UgbmVlZCB0byB6ZXJvIGl0IG91dCBiZWNh
dXNlIHRoZSBjb2xsZWN0b3IgZGVwZW5kcyBvbiB0aGUgU3RydWN0dXJlIHRvIGtub3cgdGhlIHNp
emUgZm9yIGNvcHlpbmcuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkocmV2aXNpb24gMTY5NzQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw2ICsxNDYsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX2RpY3Rpb25hcnlLaW5k
ICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQogICAgIGJvb2wgaXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSBjb25zdCB7IHJldHVybiBtX2RpY3Rpb25hcnlLaW5kID09IFVuY2FjaGVkRGljdGlvbmFy
eUtpbmQ7IH0KIAorICAgIGJvb2wgaGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQmVlbkZsYXR0ZW5lZEJlZm9yZTsgfQorCiAgICAgYm9vbCBwcm9wZXJ0eUFjY2Vz
c2VzQXJlQ2FjaGVhYmxlKCkgeyByZXR1cm4gbV9kaWN0aW9uYXJ5S2luZCAhPSBVbmNhY2hlZERp
Y3Rpb25hcnlLaW5kICYmICF0eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpOyB9
CiAKICAgICAvLyBXZSB1c2UgU2xvd1BhdGggaW4gR2V0QnlJZFN0YXR1cyBmb3Igc3RydWN0dXJl
cyB0aGF0IG1heSBnZXQgbmV3IGltcHVyZSBwcm9wZXJ0aWVzIGxhdGVyIHRvIHByZXZlbnQKQEAg
LTUyNCw2ICs1MjYsNyBAQCBwcml2YXRlOgogICAgIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsK
ICAgICAKICAgICB1bnNpZ25lZCBtX2RpY3Rpb25hcnlLaW5kIDogMjsKKyAgICBib29sIG1faGFz
QmVlbkZsYXR0ZW5lZEJlZm9yZSA6IDE7CiAgICAgYm9vbCBtX2lzUGlubmVkUHJvcGVydHlUYWJs
ZSA6IDE7CiAgICAgYm9vbCBtX2hhc0dldHRlclNldHRlclByb3BlcnRpZXMgOiAxOwogICAgIGJv
b2wgbV9oYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzIDogMTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232829</attachid>
            <date>2014-06-10 16:58:28 -0700</date>
            <delta_ts>2014-06-11 15:56:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133683-20140610165803.patch</filename>
            <type>text/plain</type>
            <size>24797</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NzgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE0LTA2LTEwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSW5saW5lIGNhY2hpbmcgc2hvdWxkIHRyeSB0byBmbGF0dGVuIHVuY2FjaGVhYmxl
IGRpY3Rpb25hcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzNjgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlcmUgZXhpc3RzIGEgYm9keSBvZiBKUyBjb2RlIHRoYXQgZGVsZXRlcyBwcm9wZXJ0
aWVzIG9mZiBvZiBvYmplY3RzIChlc3BlY2lhbGx5IGZ1bmN0aW9uL2NvbnN0cnVjdG9yIG9iamVj
dHMpLCAKKyAgICAgICAgd2hpY2ggcHV0cyB0aGVtIGludG8gYW4gdW5jYWNoZWFibGUgZGljdGlv
bmFyeSBzdGF0ZS4gVGhpcyBwcmV2ZW50cyBhbGwgZnV0dXJlIGlubGluZSBjYWNoaW5nIGZvciB0
aGVzZSBvYmplY3RzLiAKKyAgICAgICAgSWYgcHJvcGVydGllcyBhcmUgZGVsZXRlZCBvdXQgb2Yg
dGhlIG9iamVjdCBkdXJpbmcgaXRzIGluaXRpYWxpemF0aW9uLCB3ZSBjYW4gZW5hYmxlIGNhY2hp
bmcgZm9yIHRoYXQgb2JqZWN0IGJ5IAorICAgICAgICBhdHRlbXB0aW5nIHRvIGZsYXR0ZW4gaXQg
d2hlbiB3ZSBzZWUgd2UncmUgdHJ5aW5nIHRvIGRvIGlubGluZSBjYWNoaW5nIHdpdGggdGhhdCBv
YmplY3QuIFdlIHRoZW4gcmVjb3JkIHRoYXQgd2UgCisgICAgICAgIHBlcmZvcm1lZCB0aGlzIGZs
YXR0ZW5pbmcgb3B0aW1pemF0aW9uIGluIHRoZSBvYmplY3QncyBTdHJ1Y3R1cmUuIElmIGl0IGV2
ZXIgcmUtZW50ZXJzIHRoZSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5IAorICAgICAgICBzdGF0ZSB0
aGVuIHdlIGNhbiBqdXN0IGdpdmUgdXAgb24gY2FjaGluZyB0aGF0IG9iamVjdC4KKworICAgICAg
ICBJbiByZWZhY3RvcmluZyBzb21lIG9mIHRoZSBjb2RlIGluIHRyeUNhY2hlR2V0QnlJZCBhbmQg
dHJ5QnVpbGRHZXRCeUlkTGlzdCB0byByZWR1Y2Ugc29tZSBkdXBsaWNhdGlvbiwgSSBhZGRlZAor
ICAgICAgICB0aGUgSW5saW5lQ2FjaGVBY3Rpb24gZW51bSwgYSBuZXcgd2F5IHRvIGluZGljYXRl
IHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgYW4gaW5saW5lIGNhY2hpbmcgYXR0ZW1wdC4gSSBj
aGFuZ2VkCisgICAgICAgIHRoZSBvdGhlciBpbmxpbmUgY2FjaGluZyBmdW5jdGlvbnMgdG8gcmV0
dXJuIHRoaXMgZW51bSByYXRoZXIgdGhhbiB0aGUgb3BhcXVlIGJvb2xlYW5zIHRoYXQgd2Ugd2Vy
ZSBwcmV2aW91c2x5IAorICAgICAgICByZXR1cm5pbmcuCisKKyAgICAgICAgKiBqaXQvUmVwYXRj
aC5jcHA6CisgICAgICAgIChKU0M6OmFjdGlvbkZvckNlbGwpOgorICAgICAgICAoSlNDOjp0cnlD
YWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6CisgICAgICAgIChK
U0M6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpidWlsZEdldEJ5SURMaXN0
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVwYXRj
aFB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAg
KEpTQzo6YnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0Y2hJbik6Cisg
ICAgICAgIChKU0M6OnJlcGF0Y2hJbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aGFzQmVlbkZsYXR0ZW5lZEJl
Zm9yZSk6CisKIDIwMTQtMDYtMTAgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIEFzc2VydGlvbiBmYWlsdXJlIGF0IEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNldENv
bnNpc3RlbmN5KCkgY29uc3QgKyAyMzQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDE2OTc0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5NCwxMCArNTk0LDM5IEBAIHN0YXRpYyB2
b2lkIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgICAgIHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1
YlJvdXRpbmUoY29kZSwgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCB0cnVlKTsK
IH0KIAotc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCitlbnVtIElubGluZUNh
Y2hlQWN0aW9uIHsKKyAgICBHaXZlVXBPbkNhY2hlLAorICAgIFJldHJ5Q2FjaGVMYXRlciwKKyAg
ICBBdHRlbXB0VG9DYWNoZQorfTsKKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZv
ckNlbGwoVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBjZWxsLT5zdHJ1Y3R1cmUodm0pOworCisgICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCk7CisgICAgaWYgKHR5cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZygpKQorICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIGlmIChzdHJ1Y3R1cmUt
PmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFz
QmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgIC8vIEZsYXR0ZW5pbmcgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBvZmZzZXQsIHNv
IHJldHVybiBlYXJseSBmb3IgYW5vdGhlciB0cnkuCisgICAgICAgIGFzT2JqZWN0KGNlbGwpLT5m
bGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CisgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7CisgICAgfQorICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFy
eSgpKTsKKyAgICAKKyAgICBpZiAodHlwZUluZm8uaGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90
KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygpKQorICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIHJldHVybiBBdHRlbXB0VG9DYWNoZTsK
K30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQog
ewogICAgIGlmIChPcHRpb25zOjpmb3JjZUlDRmFpbHVyZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgIAogICAgIC8vIEZJWE1FOiBX
cml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhl
cmUganVzdAogICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hl
Y2sgZm9yIHJlY3Vyc2lvbi4KQEAgLTY2Myw3ICs2OTIsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNo
ZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRj
aEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsK
ICAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiAKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIFN0cmluZy5sZW5ndGggY2FzZQpAQCAtNjk0LDIxICs3MjMsMjAgQEAgc3RhdGljIGJv
b2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICByZXBsYWNlV2l0aEp1bXAo
cmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKTsKICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIAotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9CiAKICAgICAvLyBGSVhNRTog
Q2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgogICAgIGlmICghYmFzZVZhbHVl
LmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOwogICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CiAgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXN0cnVj
dHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0gICAg
aWYgKHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgpICYmICF0eXBlSW5mby5u
ZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgIElubGluZUNhY2hlQWN0aW9u
IGFjdGlvbiA9IGFjdGlvbkZvckNlbGwoKnZtLCBiYXNlQ2VsbCk7CisgICAgaWYgKGFjdGlvbiAh
PSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgcmV0dXJuIGFjdGlvbjsKIAogICAgIC8vIE9wdGlt
aXplIHNlbGYgYWNjZXNzLgogICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCkBA
IC03MTcsMTkgKzc0NSwxOCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRl
KiBlCiAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVz
c09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZz
ZXQoKSkpKSB7CiAgICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7CiAgICAgICAgICAgICBzdHViSW5m
by5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwogICAgIH0KIAogICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogfQogCiB2b2lkIHJlcGF0
Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAKLSAg
ICBib29sIGNhY2hlZCA9IHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSwgc2xvdCwgc3R1YkluZm8pOwotICAgIGlmICghY2FjaGVkKQorICAgIGlmICh0cnlDYWNo
ZUdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvKSA9
PSBHaXZlVXBPbkNhY2hlKQogICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKIH0KIApAQCAt
NzQ4LDExICs3NzUsMTEgQEAgc3RhdGljIHZvaWQgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1YihDb2Rl
QgogICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpOwogfQogCi1zdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAg
ICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKQogICAgICAgICB8fCAhc2xvdC5pc0NhY2hlYWJsZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwog
CiAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKICAgICBib29sIGxv
YWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKQEAgLTc2NCwyMSArNzkxLDIwIEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKIAogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCp2bSk7CiAKLSAgICBp
ZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2Vs
bCgqdm0sIGJhc2VDZWxsKTsKKyAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0NhY2hlKQorICAg
ICAgICByZXR1cm4gYWN0aW9uOwogCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2Vs
bC0+c3RydWN0dXJlKCp2bSk7CiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCk7Ci0gICAgaWYgKHR5cGVJbmZvLmhhc0ltcHVyZUdldE93blByb3BlcnR5U2xvdCgp
ICYmICF0eXBlSW5mby5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHN0dWJJbmZvLnBhdGNoLnNwaWxsTW9kZSA9PSBO
ZWVkVG9TcGlsbCkgewogICAgICAgICAvLyBXZSBjYW5ub3QgZG8gYXMgbXVjaCBpbmxpbmUgY2Fj
aGluZyBpZiB0aGUgcmVnaXN0ZXJzIHdlcmUgbm90IGZsdXNoZWQgcHJpb3IgdG8gdGhpcyBHZXRC
eUlkLiBJbiBwYXJ0aWN1bGFyLAogICAgICAgICAvLyBub24tVmFsdWUgY2FjaGVkIHByb3BlcnRp
ZXMgcmVxdWlyZSBwbGFudGluZyBjYWxscywgd2hpY2ggcmVxdWlyZXMgcmVnaXN0ZXJzIHRvIGhh
dmUgYmVlbiBmbHVzaGVkLiBUaHVzLAogICAgICAgICAvLyBpZiByZWdpc3RlcnMgd2VyZSBub3Qg
Zmx1c2hlZCwgZG9uJ3QgZG8gbm9uLVZhbHVlIGNhY2hpbmcuCiAgICAgICAgIGlmICghc2xvdC5p
c0NhY2hlYWJsZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICB9CiAgICAgCiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKQEAgLTc4NywxOSArODEzLDE5IEBAIHN0YXRp
YyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAKICAgICBpZiAoc2xvdC5z
bG90QmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICBpZiAodHlwZUluZm8ucHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nKCkgfHwgc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAg
ICAgICAKICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNj
ZXNzKAogICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBzbG90LnNsb3RCYXNlKCksIGlkZW50
LCBvZmZzZXQpOwogICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CiAgICAgICAgIHByb3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihl
eGVjKTsKICAgICB9CiAgICAgCiAgICAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogbGlzdCA9IFBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20oc3R1YkluZm8pOwogICAgIGlmIChsaXN0LT5pc0Z1
bGwoKSkgewogICAgICAgICAvLyBXZSBuZWVkIHRoaXMgZXh0cmEgY2hlY2sgYmVjYXVzZSBvZiBy
ZWN1cnNpb24uCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CiAgICAgfQogICAgIAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRp
bmU7CkBAIC04MjMsMTUgKzg0OSwxNCBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0
KEV4ZWNTdGF0CiAgICAgCiAgICAgcGF0Y2hKdW1wVG9HZXRCeUlkU3R1Yihjb2RlQmxvY2ssIHN0
dWJJbmZvLCBzdHViUm91dGluZS5nZXQoKSk7CiAgICAgCi0gICAgcmV0dXJuICFsaXN0LT5pc0Z1
bGwoKTsKKyAgICByZXR1cm4gbGlzdC0+aXNGdWxsKCkgPyBHaXZlVXBPbkNhY2hlIDogUmV0cnlD
YWNoZUxhdGVyOwogfQogCiB2b2lkIGJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBH
Q1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2Nr
LCBleGVjLT52bSgpLmhlYXApOwogICAgIAotICAgIGJvb2wgZG9udENoYW5nZUNhbGwgPSB0cnlC
dWlsZEdldEJ5SURMaXN0KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHVi
SW5mbyk7Ci0gICAgaWYgKCFkb250Q2hhbmdlQ2FsbCkKKyAgICBpZiAodHJ5QnVpbGRHZXRCeUlE
TGlzdChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8pID09IEdp
dmVVcE9uQ2FjaGUpCiAgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogfQogCkBAIC0xMTM2
LDQ3ICsxMTYxLDQ3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAg
ICAgICAgIHN0cnVjdHVyZSk7CiB9CiAKLXN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Y29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQgcHV0S2luZCkKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlSUNGYWls
dXJlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKIAogICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwog
ICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7CiAgICAgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKTsKICAgICAKICAgICBpZiAoIXNsb3Qu
aXNDYWNoZWFibGVQdXQoKSAmJiAhc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmICFzbG90Lmlz
Q2FjaGVhYmxlU2V0dGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKIAogICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgogICAgIGlmIChzbG90LmJh
c2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CiAgICAgICAgIGlm
IChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSB3ZSBu
ZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAgICAgICAgICAgLy8gZW5vdWdoIHJl
Z2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KICAgICAgICAgICAgIGlmIChHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyA8IDYKICAgICAgICAgICAgICAgICAmJiBvbGRTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAg
ICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNo
ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gU2tpcCBvcHRpbWl6aW5nIHRoZSBjYXNl
IHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1Y3R1cmUgaGFzCiAgICAgICAgICAg
ICAvLyBpbmRleGluZyBzdG9yYWdlLgogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBza2lwIHRoaXMhICBJbXBsZW1lbnQgaXQhCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTE0CiAgICAgICAgICAgICBpZiAob2xkU3Ry
dWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2VD
ZWxsKSA9PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgCkBAIC0xMTk1LDE1ICsxMjIwLDE1
IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgICAg
IAogICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCp2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlw
ZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAg
fQogCiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZz
ZXQob2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogCiAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1
YkluZm8sIHN0cnVjdHVyZSwgaWRlbnQsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRl
TGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CiAgICAg
ICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkUmVwbGFjZSgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KICAgICBpZiAoKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpCiAgICAgICAgICYmIHN0dWJJbmZvLnBh
dGNoLnNwaWxsTW9kZSA9PSBEb250U3BpbGwpIHsKQEAgLTEyMTUsNyArMTI0MCw3IEBAIHN0YXRp
YyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgaWYgKGJhc2VWYWx1
ZSAhPSBzbG90LmJhc2UoKSkgewogICAgICAgICAgICAgY291bnQgPSBub3JtYWxpemVQcm90b3R5
cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSwgaWRlbnQs
IG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoY291bnQgPT0gSW52YWxpZFByb3RvdHlwZUNoYWlu
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKIAogICAgICAgICAgICAgcHJvdG90eXBlQ2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICB9CkBAIC0xMjM4LDM4ICsxMjYzLDM3IEBA
IHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0p1bXApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVy
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxp
c3QtPmlzRnVsbCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBSZXRy
eUNhY2hlTGF0ZXI7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwogfQogCiB2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQg
cHV0S2luZCkKIHsKICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5j
b2RlQmxvY2soKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwogICAgIAotICAgIGJvb2wgY2Fj
aGVkID0gdHJ5Q2FjaGVQdXRCeUlEKGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90
LCBzdHViSW5mbywgcHV0S2luZCk7Ci0gICAgaWYgKCFjYWNoZWQpCisgICAgaWYgKHRyeUNhY2hl
UHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1
dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpCiAgICAgICAgIHJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKLXN0YXRpYyBib29sIHRyeUJ1aWxk
UHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQorc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5k
KQogewogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAKICAgICBpZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICBK
U0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOwogICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCk7CiAgICAgCiAgICAgCiAgICAgaWYgKCFzbG90
LmlzQ2FjaGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSAmJiAhc2xvdC5p
c0NhY2hlYWJsZVNldHRlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwogCiAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNB
cmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKIAogICAgIC8vIE9wdGltaXplIHNlbGYgYWNjZXNzLgogICAgIGlmIChzbG90
LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7CkBAIC0xMjc4
LDI4ICsxMzAyLDI4IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQK
ICAgICAgICAgCiAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5l
d1Byb3BlcnR5KSB7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFNraXAgb3B0aW1pemlu
ZyB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIGEgcmVhbGxvYywgaWYgd2UgZG9uJ3QgaGF2ZQogICAg
ICAgICAgICAgLy8gZW5vdWdoIHJlZ2lzdGVycyB0byBtYWtlIGl0IGhhcHBlbi4KICAgICAgICAg
ICAgIGlmIChHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA8IDYKICAgICAgICAgICAgICAgICAm
JiBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpCiAgICAgICAgICAgICAgICAgJiYgb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gU2tp
cCBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgcmVhbGxvYywgYW5kIHRoZSBzdHJ1
Y3R1cmUgaGFzCiAgICAgICAgICAgICAvLyBpbmRleGluZyBzdG9yYWdlLgogICAgICAgICAgICAg
aWYgKG9sZFN0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChub3JtYWxpemVQcm90b3R5cGVDaGFpbihl
eGVjLCBiYXNlQ2VsbCkgPT0gSW52YWxpZFByb3RvdHlwZUNoYWluKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluID0g
c3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1YkluZm8p
OwogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUgdG8gcmVjdXJzaW9uLgorICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOyAvLyBXaWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNp
b24uCiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0ZWQgdG8g
Y3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmdseS4KICAg
ICAgICAgICAgIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKQEAgLTEzMTYsNyArMTM0MCw3IEBAIHN0
YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGxpc3QgPSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQs
IHN0dWJJbmZvKTsKICAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KKyAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUg
dG8gcmVjdXJzaW9uLgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29t
bWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3Jk
aW5nbHkuCiAgICAgICAgICAgICBlbWl0UHV0UmVwbGFjZVN0dWIoCkBAIC0xMzM1LDcgKzEzNTks
NyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAgIGlm
IChsaXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgIH0KIAogICAgIGlmICgoc2xvdC5p
c0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKQEAgLTEzNDcs
NyArMTM3MSw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAg
ICAgICAgaWYgKGJhc2VWYWx1ZSAhPSBzbG90LmJhc2UoKSkgewogICAgICAgICAgICAgY291bnQg
PSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2VDZWxsLCBz
bG90LmJhc2UoKSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpOwogICAgICAgICAgICAgaWYgKGNvdW50
ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICAgICAgICAgIHBy
b3RvdHlwZUNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKTsKICAgICAgICAg
fQpAQCAtMTM3MSwzMyArMTM5NSwzMiBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0
KEV4ZWNTdGF0CiAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgIHJlcGF0
Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9w
cmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKIAotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogfQogCiB2b2lkIGJ1aWxk
UHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0S2luZCBwdXRLaW5kKQogewogICAgIEdDU2FmZUNv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2ssIGV4ZWMt
PnZtKCkuaGVhcCk7CiAgICAgCi0gICAgYm9vbCBjYWNoZWQgPSB0cnlCdWlsZFB1dEJ5SWRMaXN0
KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCk7
Ci0gICAgaWYgKCFjYWNoZWQpCisgICAgaWYgKHRyeUJ1aWxkUHV0QnlJZExpc3QoZXhlYywgYmFz
ZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQogICAgICAgICByZXBhdGNoQ2FsbChleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xv
dCwgcHV0S2luZCkpOwogfQogCi1zdGF0aWMgYm9vbCB0cnlSZXBhdGNoSW4oCitzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3YXNGb3VuZCwKICAgICBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAg
ICBpZiAoT3B0aW9uczo6Zm9yY2VJQ0ZhaWx1cmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKICAgICBpZiAoIWJhc2UtPnN0cnVj
dHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgaWYgKHdhc0Zv
dW5kKSB7CiAgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgfQogICAg
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CkBAIC0xNDA3
LDcgKzE0MzAsNyBAQCBzdGF0aWMgYm9vbCB0cnlSZXBhdGNoSW4oCiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0SWdub3JlZDsKICAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVD
aGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2UsIHdhc0ZvdW5kID8gc2xvdC5zbG90QmFzZSgp
IDogSlNWYWx1ZSgpLCBpZGVudCwgb2Zmc2V0SWdub3JlZCk7CiAgICAgaWYgKGNvdW50ID09IElu
dmFsaWRQcm90b3R5cGVDaGFpbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QqIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdDsKICAgICBpbnQgbGlzdEluZGV4OwpAQCAtMTQy
OCw3ICsxNDUxLDcgQEAgc3RhdGljIGJvb2wgdHJ5UmVwYXRjaEluKAogICAgICAgICBzbG93Q2Fz
ZUxhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0
W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVjdHVyZS0+cHJv
dG90eXBlQ2hhaW4oZXhlYyk7CkBAIC0xNTAyLDE2ICsxNTI1LDE1IEBAIHN0YXRpYyBib29sIHRy
eVJlcGF0Y2hJbigKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsK
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVt
cEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCksIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgCi0gICAgcmV0dXJuIGxpc3RJ
bmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKTsKKyAgICByZXR1cm4gbGlz
dEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpID8gUmV0cnlDYWNoZUxh
dGVyIDogR2l2ZVVwT25DYWNoZTsKIH0KIAogdm9pZCByZXBhdGNoSW4oCiAgICAgRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIHdhc0Zv
dW5kLAogICAgIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQogewotICAgIGlmICh0cnlSZXBhdGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHdhc0Zv
dW5kLCBzbG90LCBzdHViSW5mbykpCi0gICAgICAgIHJldHVybjsKLSAgICByZXBhdGNoQ2FsbChl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25J
bik7CisgICAgaWYgKHRyeVJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgd2FzRm91bmQsIHNs
b3QsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoQ2FsbChleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25Jbik7
CiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxNjk3NDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjYsNiArMTY2LDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iagog
ICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAsIG1faW5saW5lQ2FwYWNpdHkoaW5s
aW5lQ2FwYWNpdHkpCiAgICAgLCBtX2RpY3Rpb25hcnlLaW5kKE5vbmVEaWN0aW9uYXJ5S2luZCkK
KyAgICAsIG1faGFzQmVlbkZsYXR0ZW5lZEJlZm9yZShmYWxzZSkKICAgICAsIG1faXNQaW5uZWRQ
cm9wZXJ0eVRhYmxlKGZhbHNlKQogICAgICwgbV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKGNs
YXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXModm0pKQogICAgICwg
bV9oYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKGZhbHNlKQpAQCAtMTk0LDYgKzE5NSw3
IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAgICAsIG1fb2Zmc2V0KGludmFsaWRP
ZmZzZXQpCiAgICAgLCBtX2lubGluZUNhcGFjaXR5KDApCiAgICAgLCBtX2RpY3Rpb25hcnlLaW5k
KE5vbmVEaWN0aW9uYXJ5S2luZCkKKyAgICAsIG1faGFzQmVlbkZsYXR0ZW5lZEJlZm9yZShmYWxz
ZSkKICAgICAsIG1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKGZhbHNlKQogICAgICwgbV9oYXNHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKG1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5
UHJvcGVydGllcyh2bSkpCiAgICAgLCBtX2hhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMo
ZmFsc2UpCkBAIC0yMjEsNiArMjIzLDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIAogICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICAsIG1faW5saW5l
Q2FwYWNpdHkocHJldmlvdXMtPm1faW5saW5lQ2FwYWNpdHkpCiAgICAgLCBtX2RpY3Rpb25hcnlL
aW5kKHByZXZpb3VzLT5tX2RpY3Rpb25hcnlLaW5kKQorICAgICwgbV9oYXNCZWVuRmxhdHRlbmVk
QmVmb3JlKHByZXZpb3VzLT5tX2hhc0JlZW5GbGF0dGVuZWRCZWZvcmUpCiAgICAgLCBtX2lzUGlu
bmVkUHJvcGVydHlUYWJsZShmYWxzZSkKICAgICAsIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cyhwcmV2aW91cy0+bV9oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKQogICAgICwgbV9oYXNDdXN0
b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKHByZXZpb3VzLT5tX2hhc0N1c3RvbUdldHRlclNldHRl
clByb3BlcnRpZXMpCkBAIC03NDUsNiArNzQ4LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZs
YXR0ZW5EaWN0aW9uYXJ5UwogICAgIH0KIAogICAgIG1fZGljdGlvbmFyeUtpbmQgPSBOb25lRGlj
dGlvbmFyeUtpbmQ7CisgICAgbV9oYXNCZWVuRmxhdHRlbmVkQmVmb3JlID0gdHJ1ZTsKIAogICAg
IC8vIElmIHRoZSBvYmplY3QgaGFkIGEgQnV0dGVyZmx5IGJ1dCBhZnRlciBmbGF0dGVuaW5nL2Nv
bXBhY3Rpbmcgd2Ugbm8gbG9uZ2VyIGhhdmUgbmVlZCBvZiBpdCwKICAgICAvLyB3ZSBuZWVkIHRv
IHplcm8gaXQgb3V0IGJlY2F1c2UgdGhlIGNvbGxlY3RvciBkZXBlbmRzIG9uIHRoZSBTdHJ1Y3R1
cmUgdG8ga25vdyB0aGUgc2l6ZSBmb3IgY29weWluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNjk3NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYg
KzE0Niw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGljdGlvbmFyeUtpbmQgIT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9CiAgICAgYm9vbCBpc1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGljdGlvbmFyeUtpbmQgPT0g
VW5jYWNoZWREaWN0aW9uYXJ5S2luZDsgfQogCisgICAgYm9vbCBoYXNCZWVuRmxhdHRlbmVkQmVm
b3JlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNCZWVuRmxhdHRlbmVkQmVmb3JlOyB9CisKICAgICBi
b29sIHByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB7IHJldHVybiBtX2RpY3Rpb25hcnlL
aW5kICE9IFVuY2FjaGVkRGljdGlvbmFyeUtpbmQgJiYgIXR5cGVJbmZvKCkucHJvaGliaXRzUHJv
cGVydHlDYWNoaW5nKCk7IH0KIAogICAgIC8vIFdlIHVzZSBTbG93UGF0aCBpbiBHZXRCeUlkU3Rh
dHVzIGZvciBzdHJ1Y3R1cmVzIHRoYXQgbWF5IGdldCBuZXcgaW1wdXJlIHByb3BlcnRpZXMgbGF0
ZXIgdG8gcHJldmVudApAQCAtNTI0LDYgKzUyNiw3IEBAIHByaXZhdGU6CiAgICAgQ29uY3VycmVu
dEpJVExvY2sgbV9sb2NrOwogICAgIAogICAgIHVuc2lnbmVkIG1fZGljdGlvbmFyeUtpbmQgOiAy
OworICAgIGJvb2wgbV9oYXNCZWVuRmxhdHRlbmVkQmVmb3JlIDogMTsKICAgICBib29sIG1faXNQ
aW5uZWRQcm9wZXJ0eVRhYmxlIDogMTsKICAgICBib29sIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllcyA6IDE7CiAgICAgYm9vbCBtX2hhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMgOiAx
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>