<?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>75223</bug_id>
          
          <creation_ts>2011-12-25 22:51:08 -0800</creation_ts>
          <short_desc>StyleResolver need not allocate each MediaQueryResult on the heap</short_desc>
          <delta_ts>2016-11-11 08:56:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>87639</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gustavo</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>527149</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-25 22:51:08 -0800</bug_when>
    <thetext>Update CSSStyleSelector so it does not keep a vector of MediaQueryResult pointers that need to be deleted</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527150</commentid>
    <comment_count>1</comment_count>
      <attachid>120528</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-25 23:01:05 -0800</bug_when>
    <thetext>Created attachment 120528
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527154</commentid>
    <comment_count>2</comment_count>
      <attachid>120528</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-25 23:10:57 -0800</bug_when>
    <thetext>Comment on attachment 120528
Patch

Attachment 120528 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11017953</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527155</commentid>
    <comment_count>3</comment_count>
      <attachid>120528</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-25 23:11:58 -0800</bug_when>
    <thetext>Comment on attachment 120528
Patch

Attachment 120528 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11017000</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527156</commentid>
    <comment_count>4</comment_count>
      <attachid>120528</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-12-25 23:14:15 -0800</bug_when>
    <thetext>Comment on attachment 120528
Patch

Attachment 120528 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11019988</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527159</commentid>
    <comment_count>5</comment_count>
      <attachid>120531</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-25 23:24:30 -0800</bug_when>
    <thetext>Created attachment 120531
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527161</commentid>
    <comment_count>6</comment_count>
      <attachid>120531</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-26 00:12:15 -0800</bug_when>
    <thetext>Comment on attachment 120531
Patch

Attachment 120531 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11018986

New failing tests:
fast/media/media-query-invalid-value.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527217</commentid>
    <comment_count>7</comment_count>
      <attachid>120556</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-26 08:32:48 -0800</bug_when>
    <thetext>Created attachment 120556
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527725</commentid>
    <comment_count>8</comment_count>
      <attachid>120556</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-12-28 12:05:58 -0800</bug_when>
    <thetext>Comment on attachment 120556
Patch

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

This patch looks good. I have some minor nits.

&gt; Source/WebCore/ChangeLog:21
&gt; +        to be a vector of values rather tha of pointers.

Nit: tha =&gt; than

&gt; Source/WebCore/css/CSSStyleSelector.cpp:144
&gt; +    

Nit: There is whitespace at the beginning of this line.

&gt; Source/WebCore/css/MediaQuery.cpp:120
&gt; +} // namespace

Nit: This comment should read &quot;namespace WebCore&quot;.

&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:NaN
&gt;  static bool aspect_ratioMediaFeatureEval

I know that this isn&apos;t part of your patch. We should consider renaming this function so that its name conforms to the WebKit style guide. Similarly, the names of many static functions in this file don&apos;t conform to the style guide. We can do such renames in a separate patch.

&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:512
&gt;  #define ADD_TO_FUNCTIONMAP(name, str)  \

I know that this isn&apos;t part of your patch. From my understanding of (15) of section Names of the WebKit style guide (http://www.webkit.org/coding/coding-style.html), macro functions should be named like functions. In particular, they should use CamelCase, where the first letter is capitalized. That being said, I&apos;ve seen macro functions, like this one, that use an all-caps naming notation with underscores for spaces in our code base.

&gt; Source/WebCore/css/MediaQueryEvaluator.h:78
&gt;  } // namespace

Nit: This comment should read &quot;namespace WebCore&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530782</commentid>
    <comment_count>9</comment_count>
      <attachid>120556</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2012-01-05 16:54:47 -0800</bug_when>
    <thetext>Comment on attachment 120556
Patch

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

&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:64
&gt; +// FIXME: color_index, min-color-index, and max_color_index are not implemented.

dashes or underscores? I&apos;m guessing these should be consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634909</commentid>
    <comment_count>10</comment_count>
      <attachid>144274</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-27 23:04:04 -0700</bug_when>
    <thetext>Created attachment 144274
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634950</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-28 00:11:27 -0700</bug_when>
    <thetext>Committed r118650: &lt;http://trac.webkit.org/changeset/118650&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635002</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-05-28 01:50:02 -0700</bug_when>
    <thetext>This patch caused more than 300 failures on EFL and GTK bots:
http://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release/builds/24372</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635012</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-28 01:58:34 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 87639</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635051</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-28 02:47:31 -0700</bug_when>
    <thetext>Thanks for rolling this out for me. I’ll retest and find out what I screwed up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250245</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-11 08:56:26 -0800</bug_when>
    <thetext>At some point, we fixed the style resolver to not allocate these on the heap, so closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120528</attachid>
            <date>2011-12-25 23:01:05 -0800</date>
            <delta_ts>2011-12-25 23:24:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75223-20111225230104.patch</filename>
            <type>text/plain</type>
            <size>25212</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDExLTEyLTI1ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQ1NTU3R5bGVTZWxlY3Rv
ciBzbyBpdCBkb2VzIG5vdCBrZWVwIGEgdmVjdG9yIG9mIE1lZGlhUXVlcnlSZXN1bHQgcG9pbnRl
cnMgdGhhdCBuZWVkIHRvIGJlIGRlbGV0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc1MjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6IE1vdmVkIHRoZSBN
ZWRpYVF1ZXJ5UmVzdWx0IGNsYXNzIGludG8gdGhpcyBmaWxlCisgICAgICAgIGFuZCBtYWRlIGl0
IGEgc3RydWN0dXJlIHJhdGhlciB0aGFuIGEgY2xhc3MuCisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3Rvcik6IFJlbW92ZWQgdGhlIGNhbGwgdG8KKyAg
ICAgICAgZGVsZXRlQWxsVmFsdWVzLCB1bm5lZWRlZCBub3cgdGhhdCB3ZSB1c2UgYSB2ZWN0b3Ig
b2YgdmFsdWVzLCBub3QgcG9pbnRlcnMuCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQpOiBVcGRhdGVkCisgICAg
ICAgIHRvIGtlZXAgdGhlIG1lZGlhIHF1ZXJ5IGluIHRoZSB2ZWN0b3IuCisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UpOiBVcGRhdGVk
IGZvciBhYm92ZQorICAgICAgICBjaGFuZ2VzIGFuZCB0byB1c2Ugc2l6ZV90IGNvbnNpc3RlbnRs
eS4KKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6IFJlbW92ZWQgbWFueSB1bm5l
ZWRlZCBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBjbGFzc2VzLgorICAgICAgICBSZW1vdmVkIG5v
dy11bm5lZWRlZCBpbmNsdWRlIG9mIE1lZGlhUXVlcnlFeHAuaC4gUmVwbGFjZWQgTWVkaWFRdWVy
eVJlc3VsdAorICAgICAgICBkZWZpbml0aW9uIHdpdGggYSBmb3J3YXJkIGRlY2xhcmF0aW9uLiBD
aGFuZ2VkIGFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdAorICAgICAgICB0byB0
YWtlIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLiBDaGFuZ2VkIG1fdmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cworICAgICAgICB0byBiZSBhIHZlY3RvciBvZiB2YWx1
ZXMgcmF0aGVyIHRoYSBvZiBwb2ludGVycy4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5LmNw
cDogUmVtb3ZlZCBzb21lIGNvbW1lbnRzIHRoYXQgcG9pbnRlZCB0byBDU1MgZG9jdW1lbnRzLgor
ICAgICAgICBUaGVyZSBpcyBubyBndWFyYW50dGUgdGhpcyBsaW5rcyB3aWxsIGJlIHZhbGlkIG92
ZXIgdGltZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnk6Ok1lZGlhUXVlcnkpOiBSZXdy
b3RlIGZvciBjbGFyaXR5LCBjb2Rpbmcgc3R5bGUsIGFuZAorICAgICAgICBzaW1wbGljaXR5Lgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6Y3NzVGV4dCk6IFVwZGF0ZWQgZm9yIGNoYW5n
ZSB0byBkYXRhIG1lbWJlciBuYW1lLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuaDogUmVt
b3ZlZCBkZWNsYXJhdGlvbiBvZiB1bm5lZWRlZCBkZXN0cnVjdG9yLiBSZW1vdmVkIG5vbi1oZWxw
ZnVsCisgICAgICAgIGFyZ3VtZW50IG5hbWUgImV4cHJzIi4gQ2hhbmdlZCBleHByZXNzaW9ucyBm
dW5jdGlvbiB0byByZXR1cm4gYSByZWZlcmVuY2UgaW5zdGVhZCBvZgorICAgICAgICBhIHBvaW50
ZXIuIENoYW5nZWQgbWVkaWFUeXBlIGFuZCBjc3NUZXh0IGZ1bmN0aW9ucyB0byByZXR1cm4gYSBy
ZWZlcmVuY2UuIFJlbmFtZWQKKyAgICAgICAgbV9zZXJpYWxpemF0aW9uQ2FjaGUgdG8gbV9zZXJp
YWxpemVkUXVlcnkuCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6IFJl
bmFtZWQgRXZhbEZ1bmMgdG8gTWVkaWFGZWF0dXJlRXZhbHVhdGlvbkZ1bmN0aW9uLgorICAgICAg
ICBCcm9rZSBhIEZJWE1FIGludG8gdGhyZWUgYW5kIHJld29yZGVkIGZvciBjbGFyaXR5LgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeUV2YWx1YXRvcik6IFVwZGF0ZWQgZm9yIG5hbWUgY2hh
bmdlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWwpOiBSZXdy
b3RlIHRoaXMgZm9yIGNsYXJpdHkgYW5kIHRvIHJlZ3VsYXJpemUKKyAgICAgICAgdGhlIGxvZ2lj
IGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbCk6
IEdvdCByaWQgb2YgYSAhPSAwIHRoYXQgaXMgY29udHJhcnkgdG8gdGhlCisgICAgICAgIG5vcm1h
bCBXZWJLaXQgc3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VfYXNwZWN0X3JhdGlvTWVk
aWFGZWF0dXJlRXZhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtXzNkTWVk
aWFGZWF0dXJlRXZhbCk6IEZpeGVkIG1hbmdsZWQgI2lmIHRoYXQgd2FzIGhlcmUuCisgICAgICAg
IChXZWJDb3JlOjp2aWV3X21vZGVNZWRpYUZlYXR1cmVFdmFsKTogUmVwbGFjZWQgVU5VU0VEX1BB
UkFNIHVzYWdlIHdpdGggQVNTRVJUX1VOVVNFRC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZ1
bmN0aW9uTWFwKTogQ2hhbmdlZCB0aGlzIHNvIGl0IHJldHVybnMgdGhlIG1hcCBzbyB3ZSBjYW4g
dXNlIGEKKyAgICAgICAgY2xlYW5lciBzdHlsZSBpbiB0aGUgY2FsbGVyLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbCk6IFVwZGF0ZWQgdG8gdGFrZSBhIHJlZmVy
ZW5jZSBhbmQgaW1wcm92ZWQgdGhlCisgICAgICAgIGNvbW1lbnRzIGFuZCBjb2Rpbmcgc3R5bGUg
YSBiaXQuCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oOiBVcGRhdGVkIGNv
bW1lbnQgc3R5bGUuIFJlbW92ZWQgdW51c2VkIGNvbnN0cnVjdG9yLgorICAgICAgICBSZW1vdmVk
IHVubmVlZGVkIGRlc3RydWN0b3IgZGVjbGFyYXRpb24uIFJlbmFtZWQgbV9leHBSZXN1bHQgdG8g
bV9tZWRpYUZlYXR1cmVSZXN1bHQuCisKIDIwMTEtMTItMjUgIEtlbnRhcm8gSGFyYSAgPGhhcmFr
ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEwMjk4Nyk6IEZpeCB0aGUg
ZmlsZW5hbWUgcHJlZml4IG9mIHRoZSBnZW5lcmF0ZWQgZW1wdHkgLmgKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDEwMzY2OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQs
NiArNzQsNyBAQAogI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIk1lZGlhTGlzdC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNs
dWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgpAQCAtMTM3LDYgKzEzOCwxNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK3N0
cnVjdCBNZWRpYVF1ZXJ5UmVzdWx0IHsKKyAgICBNZWRpYVF1ZXJ5RXhwIGV4cHJlc3Npb247Cisg
ICAgYm9vbCByZXN1bHQ7CisgICAgCisgICAgTWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1
ZXJ5RXhwJiBleHByZXNzaW9uLCBib29sIHJlc3VsdCkKKyAgICAgICAgOiBleHByZXNzaW9uKGV4
cHJlc3Npb24pCisgICAgICAgICwgcmVzdWx0KHJlc3VsdCkKKyAgICB7CisgICAgfSAgICAKK307
CisgICAgCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVy
aXQpIHsgXAogICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBc
CkBAIC00NjEsNyArNDczLDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRLZXlmcmFtZVN0
eWxlKAogQ1NTU3R5bGVTZWxlY3Rvcjo6fkNTU1N0eWxlU2VsZWN0b3IoKQogewogICAgIG1fZm9u
dFNlbGVjdG9yLT5jbGVhckRvY3VtZW50KCk7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fdmlld3Bv
cnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CiB9CiAKIENTU1N0eWxlU2VsZWN0b3I6OkZl
YXR1cmVzOjpGZWF0dXJlcygpCkBAIC00NzAyLDE2ICs0NzEzLDE2IEBAIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6aGFzU2VsZWN0b3JGb3JBdHQKICAgICByZXR1cm4gbV9mZWF0dXJlcy5hdHRyc0lu
UnVsZXMuY29udGFpbnMoYXR0cm5hbWUuaW1wbCgpKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVy
eUV4cCogZXhwciwgYm9vbCByZXN1bHQpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZFZpZXdw
b3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwJiBleHByZXNz
aW9uLCBib29sIHJlc3VsdCkKIHsKLSAgICBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJl
c3VsdHMuYXBwZW5kKG5ldyBNZWRpYVF1ZXJ5UmVzdWx0KCpleHByLCByZXN1bHQpKTsKKyAgICBt
X3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuYXBwZW5kKE1lZGlhUXVlcnlSZXN1
bHQoZXhwcmVzc2lvbiwgcmVzdWx0KSk7CiB9CiAKIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6YWZm
ZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBzID0gbV92aWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgczsgaSsrKSB7Ci0gICAgICAgIGlmIChtX21lZGl1bS0+ZXZhbCgmbV92aWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX2V4cHJlc3Npb24pICE9IG1fdmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9yZXN1bHQpCisgICAgc2l6ZV90
IHNpemUgPSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuc2l6ZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGlmIChtX21lZGl1
bS0+ZXZhbChtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0uZXhwcmVzc2lv
bikgIT0gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLnJlc3VsdCkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDEwMzY2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5o
IgotI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBA
IC0zNSw0MiArMzQsMzEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIEVTbWFydE1p
bmltdW1Gb3JGb250U2l6ZSB7IERvTm90VXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUsIFVzZVNt
YXJ0TWluaW11bUZvckZvbnRGaXplIH07Ci0KIGNsYXNzIENTU0ZvbnRTZWxlY3RvcjsKIGNsYXNz
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTUGFnZVJ1bGU7CiBjbGFzcyBD
U1NQcmltaXRpdmVWYWx1ZTsKLWNsYXNzIENTU1Byb3BlcnR5OwotY2xhc3MgQ1NTRm9udEZhY2U7
Ci1jbGFzcyBDU1NGb250RmFjZVJ1bGU7CiBjbGFzcyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOwog
Y2xhc3MgQ1NTSW1hZ2VWYWx1ZTsKIGNsYXNzIENTU1J1bGVMaXN0OwotY2xhc3MgQ1NTU2VsZWN0
b3I7CiBjbGFzcyBDU1NTdHlsZUFwcGx5UHJvcGVydHk7Ci1jbGFzcyBDU1NTdHlsZVJ1bGU7CiBj
bGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgQ1NTVmFsdWU7CiBjbGFzcyBDb250YWluZXJOb2Rl
OwogY2xhc3MgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBF
bGVtZW50OwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBLVVJMOwogY2xh
c3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgS2V5ZnJhbWVWYWx1ZTsKIGNsYXNzIE1lZGlhUXVlcnlF
dmFsdWF0b3I7CitjbGFzcyBNZWRpYVF1ZXJ5RXhwOwogY2xhc3MgTm9kZTsKIGNsYXNzIFJlbmRl
clJlZ2lvbjsKIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsKLWNsYXNzIFNldHRpbmdz
OwogY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwogY2xhc3MgU3R5
bGVTaGFkZXI7Ci1jbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFz
cyBTdHlsZWRFbGVtZW50OwogY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOwpAQCAtNzksMTkg
KzY3LDEwIEBAIGNsYXNzIFdlYktpdENTU0ZpbHRlclZhbHVlOwogY2xhc3MgV2ViS2l0Q1NTUmVn
aW9uUnVsZTsKIGNsYXNzIFdlYktpdENTU1NoYWRlclZhbHVlOwogCi1jbGFzcyBNZWRpYVF1ZXJ5
UmVzdWx0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVF1ZXJ5UmVzdWx0KTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgTWVkaWFRdWVyeVJlc3VsdChjb25z
dCBNZWRpYVF1ZXJ5RXhwJiBleHByLCBib29sIHJlc3VsdCkKLSAgICAgICAgOiBtX2V4cHJlc3Np
b24oZXhwcikKLSAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCi0gICAgewotICAgIH0KLQotICAg
IE1lZGlhUXVlcnlFeHAgbV9leHByZXNzaW9uOwotICAgIGJvb2wgbV9yZXN1bHQ7Ci19Oworc3Ry
dWN0IE1lZGlhUXVlcnlSZXN1bHQ7CiAKK2VudW0gRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHsg
RG9Ob3RVc2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5pbXVtRm9yRm9udEZp
emUgfTsKKyAgICAKIC8vIFRoaXMgY2xhc3Mgc2VsZWN0cyBhIFJlbmRlclN0eWxlIGZvciBhIGdp
dmVuIGVsZW1lbnQgYmFzZWQgb24gYSBjb2xsZWN0aW9uIG9mIHN0eWxlc2hlZXRzLgogY2xhc3Mg
Q1NTU3R5bGVTZWxlY3RvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTU3R5bGVTZWxl
Y3Rvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTg5LDcgKzE2OCw3IEBAIHB1Ymxp
YzoKIAogICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9mb250U2VsZWN0b3IuZ2V0KCk7IH0KIAotICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqLCBib29sIHJlc3VsdCk7CisgICAg
dm9pZCBhZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVy
eUV4cCYsIGJvb2wgcmVzdWx0KTsKIAogICAgIGJvb2wgYWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdl
KCkgY29uc3Q7CiAKQEAgLTQwMCw3ICszNzksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zYW1l
T3JpZ2luT25seTsKIAogICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9y
OwotICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0Kj4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcnlSZXN1bHRzOworICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0PiBtX3ZpZXdwb3J0RGVw
ZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CiAKICAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlOwogICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAkocmV2aXNpb24gMTAzNjY5KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gaHR0cDovL2Rldi53My5vcmcvY3Nz
d2cvY3Nzb20vI3NlcmlhbGl6ZS1hLW1lZGlhLXF1ZXJ5CiBTdHJpbmcgTWVkaWFRdWVyeTo6c2Vy
aWFsaXplKCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKQEAgLTc1LDUxICs3
NCw0NyBAQCBzdGF0aWMgYm9vbCBleHByZXNzaW9uQ29tcGFyZShjb25zdCBPd25QCiB9CiAKIAot
TWVkaWFRdWVyeTo6TWVkaWFRdWVyeShSZXN0cmljdG9yIHIsIGNvbnN0IFN0cmluZyYgbWVkaWFU
eXBlLCBQYXNzT3duUHRyPFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeUV4cD4gPiA+IGV4cHJzKQot
ICAgIDogbV9yZXN0cmljdG9yKHIpCitNZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5KFJlc3RyaWN0b3Ig
cmVzdHJpY3RvciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8RXhwcmVzc2lv
blZlY3Rvcj4gZXhwcmVzc2lvbnMpCisgICAgOiBtX3Jlc3RyaWN0b3IocmVzdHJpY3RvcikKICAg
ICAsIG1fbWVkaWFUeXBlKG1lZGlhVHlwZS5sb3dlcigpKQotICAgICwgbV9leHByZXNzaW9ucyhl
eHBycykKKyAgICAsIG1fZXhwcmVzc2lvbnMoZXhwcmVzc2lvbnMpCiAgICAgLCBtX2lnbm9yZWQo
ZmFsc2UpCiB7CiAgICAgaWYgKCFtX2V4cHJlc3Npb25zKSB7Ci0gICAgICAgIG1fZXhwcmVzc2lv
bnMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5RXhwPiA+KTsKKyAgICAg
ICAgbV9leHByZXNzaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHByZXNzaW9uVmVjdG9yKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG5vbkNvcHlpbmdTb3J0KG1fZXhwcmVzc2lvbnMtPmJl
Z2luKCksIG1fZXhwcmVzc2lvbnMtPmVuZCgpLCBleHByZXNzaW9uQ29tcGFyZSk7CisgICAgRXhw
cmVzc2lvblZlY3RvciYgdmVjdG9yID0gKm1fZXhwcmVzc2lvbnM7CisgICAgCisgICAgbm9uQ29w
eWluZ1NvcnQodmVjdG9yLmJlZ2luKCksIHZlY3Rvci5lbmQoKSwgZXhwcmVzc2lvbkNvbXBhcmUp
OworCisgICAgLy8gUmVtb3ZlIGFsbCBkdXBsaWNhdGVkIGV4cHJlc3Npb25zLgorICAgIFN0cmlu
ZyBwcmV2aW91c1NlcmlhbGl6ZWRFeHByZXNzaW9uOworICAgIGZvciAoc2l6ZV90IGkgPSB2ZWN0
b3Iuc2l6ZSgpOyBpOyApIHsKKyAgICAgICAgLS1pOwogCi0gICAgLy8gcmVtb3ZlIGFsbCBkdXBs
aWNhdGVkIGV4cHJlc3Npb25zCi0gICAgU3RyaW5nIGtleTsKLSAgICBmb3IgKGludCBpID0gbV9l
eHByZXNzaW9ucy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLQotICAgICAgICAvLyBpZiBu
b3QgYWxsIG9mIHRoZSBleHByZXNzaW9ucyBpcyB2YWxpZCB0aGUgbWVkaWEgcXVlcnkgbXVzdCBi
ZSBpZ25vcmVkLgorICAgICAgICAvLyBJZiBub3QgYWxsIG9mIHRoZSBleHByZXNzaW9ucyBhcmUg
dmFsaWQsIHRoZSBtZWRpYSBxdWVyeSBtdXN0IGJlIGlnbm9yZWQuCiAgICAgICAgIGlmICghbV9p
Z25vcmVkKQotICAgICAgICAgICAgbV9pZ25vcmVkID0gIW1fZXhwcmVzc2lvbnMtPmF0KGkpLT5p
c1ZhbGlkKCk7CisgICAgICAgICAgICBtX2lnbm9yZWQgPSAhdmVjdG9yW2ldLT5pc1ZhbGlkKCk7
CiAKLSAgICAgICAgaWYgKG1fZXhwcmVzc2lvbnMtPmF0KGkpLT5zZXJpYWxpemUoKSA9PSBrZXkp
Ci0gICAgICAgICAgICBtX2V4cHJlc3Npb25zLT5yZW1vdmUoaSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGtleSA9IG1fZXhwcmVzc2lvbnMtPmF0KGkpLT5zZXJpYWxpemUoKTsKKyAgICAg
ICAgU3RyaW5nIHNlcmlhbGl6ZWRFeHByZXNzaW9uID0gdmVjdG9yW2ldLT5zZXJpYWxpemUoKTsK
KyAgICAgICAgaWYgKHNlcmlhbGl6ZWRFeHByZXNzaW9uID09IHByZXZpb3VzU2VyaWFsaXplZEV4
cHJlc3Npb24pCisgICAgICAgICAgICB2ZWN0b3IucmVtb3ZlKGkpOworICAgICAgICBwcmV2aW91
c1NlcmlhbGl6ZWRFeHByZXNzaW9uID0gc2VyaWFsaXplZEV4cHJlc3Npb247CiAgICAgfQogfQog
Ci1NZWRpYVF1ZXJ5Ojp+TWVkaWFRdWVyeSgpCi17Ci19Ci0KLS8vIGh0dHA6Ly9kZXYudzMub3Jn
L2Nzc3dnL2Nzc29tLyNjb21wYXJlLW1lZGlhLXF1ZXJpZXMKIGJvb2wgTWVkaWFRdWVyeTo6b3Bl
cmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5JiBvdGhlcikgY29uc3QKIHsKICAgICByZXR1cm4gY3Nz
VGV4dCgpID09IG90aGVyLmNzc1RleHQoKTsKIH0KIAotLy8gaHR0cDovL2Rldi53My5vcmcvY3Nz
d2cvY3Nzb20vI3NlcmlhbGl6ZS1hLWxpc3Qtb2YtbWVkaWEtcXVlcmllcwotU3RyaW5nIE1lZGlh
UXVlcnk6OmNzc1RleHQoKSBjb25zdAorY29uc3QgU3RyaW5nJiBNZWRpYVF1ZXJ5Ojpjc3NUZXh0
KCkgY29uc3QKIHsKLSAgICBpZiAobV9zZXJpYWxpemF0aW9uQ2FjaGUuaXNOdWxsKCkpCi0gICAg
ICAgIGNvbnN0X2Nhc3Q8TWVkaWFRdWVyeSo+KHRoaXMpLT5tX3NlcmlhbGl6YXRpb25DYWNoZSA9
IHNlcmlhbGl6ZSgpOwotCi0gICAgcmV0dXJuIG1fc2VyaWFsaXphdGlvbkNhY2hlOworICAgIGlm
IChtX3NlcmlhbGl6ZWRRdWVyeS5pc051bGwoKSkKKyAgICAgICAgY29uc3RfY2FzdDxNZWRpYVF1
ZXJ5Kj4odGhpcyktPm1fc2VyaWFsaXplZFF1ZXJ5ID0gc2VyaWFsaXplKCk7CisgICAgcmV0dXJu
IG1fc2VyaWFsaXplZFF1ZXJ5OwogfQogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCShyZXZpc2lvbiAxMDM2NjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyMCArNDAsMTgg
QEAgY2xhc3MgTWVkaWFRdWVyeUV4cDsKIGNsYXNzIE1lZGlhUXVlcnkgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE1lZGlhUXVlcnkpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBlbnVtIFJlc3RyaWN0b3IgewotICAgICAgICBPbmx5LCBOb3QsIE5vbmUKLSAgICB9
OworICAgIGVudW0gUmVzdHJpY3RvciB7IE9ubHksIE5vdCwgTm9uZSB9OwogCiAgICAgdHlwZWRl
ZiBWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4gRXhwcmVzc2lvblZlY3RvcjsKIAotICAg
IE1lZGlhUXVlcnkoUmVzdHJpY3RvciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25Q
dHI8RXhwcmVzc2lvblZlY3Rvcj4gZXhwcnMpOwotICAgIH5NZWRpYVF1ZXJ5KCk7CisgICAgTWVk
aWFRdWVyeShSZXN0cmljdG9yLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgUGFzc093blB0cjxF
eHByZXNzaW9uVmVjdG9yPik7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVy
eSYpIGNvbnN0OwogCiAgICAgUmVzdHJpY3RvciByZXN0cmljdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9yZXN0cmljdG9yOyB9Ci0gICAgY29uc3QgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5RXhwPiA+
KiBleHByZXNzaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbnMuZ2V0KCk7IH0KLSAg
ICBTdHJpbmcgbWVkaWFUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVR5cGU7IH0KLSAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeSYgb3RoZXIpIGNvbnN0OwotICAgIFN0cmlu
ZyBjc3NUZXh0KCkgY29uc3Q7CisgICAgY29uc3QgRXhwcmVzc2lvblZlY3RvciYgZXhwcmVzc2lv
bnMoKSBjb25zdCB7IHJldHVybiAqbV9leHByZXNzaW9uczsgfQorICAgIGNvbnN0IFN0cmluZyYg
bWVkaWFUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVR5cGU7IH0KKyAgICBjb25zdCBTdHJp
bmcmIGNzc1RleHQoKSBjb25zdDsKICAgICBib29sIGlnbm9yZWQoKSBjb25zdCB7IHJldHVybiBt
X2lnbm9yZWQ7IH0KIAogIHByaXZhdGU6CkBAIC02MSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBT
dHJpbmcgbV9tZWRpYVR5cGU7CiAgICAgT3duUHRyPEV4cHJlc3Npb25WZWN0b3I+IG1fZXhwcmVz
c2lvbnM7CiAgICAgYm9vbCBtX2lnbm9yZWQ7Ci0gICAgU3RyaW5nIG1fc2VyaWFsaXphdGlvbkNh
Y2hlOworICAgIFN0cmluZyBtX3NlcmlhbGl6ZWRRdWVyeTsKIAogICAgIFN0cmluZyBzZXJpYWxp
emUoKSBjb25zdDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFs
dWF0b3IuY3BwCShyZXZpc2lvbiAxMDM2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeUV2YWx1YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDM0ICs1OCwyNCBAQCB1c2lu
ZyBuYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFtZXM7CiAKIGVudW0gTWVkaWFGZWF0dXJlUHJlZml4
IHsgTWluUHJlZml4LCBNYXhQcmVmaXgsIE5vUHJlZml4IH07CiAKLXR5cGVkZWYgYm9vbCAoKkV2
YWxGdW5jKShDU1NWYWx1ZSosIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVm
aXgpOwotdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBFdmFsRnVuYz4gRnVuY3Rp
b25NYXA7Ci1zdGF0aWMgRnVuY3Rpb25NYXAqIGdGdW5jdGlvbk1hcDsKLQotLyoKLSAqIEZJWE1F
OiBmb2xsb3dpbmcgbWVkaWEgZmVhdHVyZXMgYXJlIG5vdCBpbXBsZW1lbnRlZDogY29sb3JfaW5k
ZXgsIHNjYW4sIHJlc29sdXRpb24KLSAqCi0gKiBjb2xvcl9pbmRleCwgbWluLWNvbG9yLWluZGV4
LCBtYXhfY29sb3JfaW5kZXg6IEl0J3MgdW5rbm93biBob3cgdG8gcmV0cmlldmUKLSAqIHRoZSBp
bmZvcm1hdGlvbiBpZiB0aGUgZGlzcGxheSBtb2RlIGlzIGluZGV4ZWQKLSAqIHNjYW46IFRoZSAi
c2NhbiIgbWVkaWEgZmVhdHVyZSBkZXNjcmliZXMgdGhlIHNjYW5uaW5nIHByb2Nlc3Mgb2YKLSAq
IHR2IG91dHB1dCBkZXZpY2VzLiBJdCdzIHVua25vd24gaG93IHRvIHJldHJpZXZlIHRoaXMgaW5m
b3JtYXRpb24gZnJvbQotICogdGhlIHBsYXRmb3JtCi0gKiByZXNvbHV0aW9uLCBtaW4tcmVzb2x1
dGlvbiwgbWF4LXJlc29sdXRpb246IGNzcyBwYXJzZXIgZG9lc24ndCBzZWVtIHRvCi0gKiBzdXBw
b3J0IENTU19ESU1FTlNJT04KLSAqLwordHlwZWRlZiBib29sICgqTWVkaWFGZWF0dXJlRXZhbHVh
dGlvbkZ1bmN0aW9uKShDU1NWYWx1ZSosIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBNZWRpYUZlYXR1
cmVQcmVmaXgpOwordHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBNZWRpYUZlYXR1
cmVFdmFsdWF0aW9uRnVuY3Rpb24+IEZ1bmN0aW9uTWFwOwogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9y
OjpNZWRpYVF1ZXJ5RXZhbHVhdG9yKGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0KQotICAgIDogbV9m
cmFtZSgwKQotICAgICwgbV9zdHlsZSgwKQotICAgICwgbV9leHBSZXN1bHQobWVkaWFGZWF0dXJl
UmVzdWx0KQotewotfQorLy8gRklYTUU6IGNvbG9yX2luZGV4LCBtaW4tY29sb3ItaW5kZXgsIGFu
ZCBtYXhfY29sb3JfaW5kZXggYXJlIG5vdCBpbXBsZW1lbnRlZC4KKy8vIFRvIGltcGxlbWVudCB0
aGVtIHdlJ2QgaGF2ZSB0byBhZGQgaW5mb3JtYXRpb24gYWJvdXQgaW5kZXhlZCBjb2xvciB0byB0
aGUgV2ViQ29yZSBwbGF0Zm9ybTsKKy8vIG1vc3QgbW9kZXJuIHBsYXRmb3JtcyBkb24ndCBtYWtl
IHVzZSBvZiBpbmRleGVkIGNvbG9yLgorCisvLyBGSVhNRTogc2NhbiBpcyBub3QgaW1wbGVtZW50
ZWQ6IFRoaXMgbWVkaWEgZmVhdHVyZSBkZXNjcmliZXMgdGhlIHNjYW5uaW5nIHByb2Nlc3Mgb2YK
Ky8vIFRWIG91dHB1dCBkZXZpY2VzLiBUbyBpbXBsZW1lbnQgdGhpcyB3ZSdkIGhhdmUgdG8gYWRk
IGluZm9ybWF0aW9uIHRvIHRoZSBXZWJDb3JlIHBsYXRmb3JtLgorCisvLyBGSVhNRTogcmVzb2x1
dGlvbiwgbWluLXJlc29sdXRpb24sIG1heC1yZXNvbHV0aW9uIGFyZSBub3QgaW1wbGVtZW50ZWQ6
IEF0IHRoZSB0aW1lIHRoaXMKKy8vIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gdGhlIENTUyBwYXJz
ZXIgImRpZG4ndCBzZWVtIHRvIHN1cHBvcnQgQ1NTX0RJTUVOU0lPTiIuCiAKIE1lZGlhUXVlcnlF
dmFsdWF0b3I6OiBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRp
YVR5cGUsIGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0KQogICAgIDogbV9tZWRpYVR5cGUoYWNjZXB0
ZWRNZWRpYVR5cGUpCiAgICAgLCBtX2ZyYW1lKDApCiAgICAgLCBtX3N0eWxlKDApCi0gICAgLCBt
X2V4cFJlc3VsdChtZWRpYUZlYXR1cmVSZXN1bHQpCisgICAgLCBtX21lZGlhRmVhdHVyZVJlc3Vs
dChtZWRpYUZlYXR1cmVSZXN1bHQpCiB7CiB9CiAKQEAgLTkzLDcgKzgzLDcgQEAgTWVkaWFRdWVy
eUV2YWx1YXRvcjo6IE1lZGlhUXVlcnlFdmFsdWF0bwogICAgIDogbV9tZWRpYVR5cGUoYWNjZXB0
ZWRNZWRpYVR5cGUpCiAgICAgLCBtX2ZyYW1lKDApCiAgICAgLCBtX3N0eWxlKDApCi0gICAgLCBt
X2V4cFJlc3VsdChtZWRpYUZlYXR1cmVSZXN1bHQpCisgICAgLCBtX21lZGlhRmVhdHVyZVJlc3Vs
dChtZWRpYUZlYXR1cmVSZXN1bHQpCiB7CiB9CiAKQEAgLTEwMSwxMSArOTEsNyBAQCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yOjogTWVkaWFRdWVyeUV2YWx1YXRvCiAgICAgOiBtX21lZGlhVHlwZShhY2Nl
cHRlZE1lZGlhVHlwZSkKICAgICAsIG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3N0eWxlKHN0eWxl
KQotICAgICwgbV9leHBSZXN1bHQoZmFsc2UpIC8vIGRvZXNuJ3QgbWF0dGVyIHdoZW4gd2UgaGF2
ZSBtX2ZyYW1lIGFuZCBtX3N0eWxlCi17Ci19Ci0KLU1lZGlhUXVlcnlFdmFsdWF0b3I6On5NZWRp
YVF1ZXJ5RXZhbHVhdG9yKCkKKyAgICAsIG1fbWVkaWFGZWF0dXJlUmVzdWx0KGZhbHNlKSAvLyBJ
Z25vcmVkIGlmIGJvdGggbV9mcmFtZSBhbmQgbV9zdHlsZSBhcmUgbm9uLW51bGwuCiB7CiB9CiAK
QEAgLTEzNiwzNSArMTIyLDMzIEBAIGJvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbChjb25z
dCBNZWQKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjb25zdCBWZWN0b3I8TWVkaWFRdWVy
eSo+JiBxdWVyaWVzID0gbWVkaWFMaXN0LT5tZWRpYVF1ZXJpZXMoKTsKLSAgICBpZiAoIXF1ZXJp
ZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZW1wdHkgcXVlcnkgbGlzdCBldmFs
dWF0ZXMgdG8gdHJ1ZQogCi0gICAgLy8gaXRlcmF0ZSBvdmVyIHF1ZXJpZXMsIHN0b3AgaWYgYW55
IG9mIHRoZW0gZXZhbCB0byB0cnVlIChPUiBzZW1hbnRpY3MpCi0gICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1ZXJpZXMuc2l6ZSgpICYmICFyZXN1
bHQ7ICsraSkgewotICAgICAgICBNZWRpYVF1ZXJ5KiBxdWVyeSA9IHF1ZXJpZXMuYXQoaSk7Cisg
ICAgYm9vbCByZXN1bHQgPSB0cnVlOwogCi0gICAgICAgIGlmIChxdWVyeS0+aWdub3JlZCgpKQor
ICAgIC8vIEl0ZXJhdGUgb3ZlciBxdWVyaWVzIGFuZCBzdG9wIGlmIGFueSBvZiB0aGVtIGV2YWwg
dG8gdHJ1ZSAoIm9yIiBzZW1hbnRpY3MpLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVl
cmllcy5zaXplKCk7ICsraSkgeworICAgICAgICBNZWRpYVF1ZXJ5JiBxdWVyeSA9ICpxdWVyaWVz
W2ldOworCisgICAgICAgIGlmIChxdWVyeS5pZ25vcmVkKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBpZiAobWVkaWFUeXBlTWF0Y2gocXVlcnktPm1lZGlhVHlwZSgpKSkgewot
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5RXhwPiA+KiBleHBzID0g
cXVlcnktPmV4cHJlc3Npb25zKCk7Ci0gICAgICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2ggZXhw
cmVzc2lvbnMsIHN0b3AgaWYgYW55IG9mIHRoZW0gZXZhbCB0byBmYWxzZQotICAgICAgICAgICAg
Ly8gKEFORCBzZW1hbnRpY3MpCi0gICAgICAgICAgICBzaXplX3QgaiA9IDA7Ci0gICAgICAgICAg
ICBmb3IgKDsgaiA8IGV4cHMtPnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBl
eHByUmVzdWx0ID0gZXZhbChleHBzLT5hdChqKS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHN0eWxlU2VsZWN0b3IgJiYgZXhwcy0+YXQoaiktPmlzVmlld3BvcnREZXBlbmRlbnQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkVmlld3BvcnREZXBlbmRlbnRNZWRp
YVF1ZXJ5UmVzdWx0KGV4cHMtPmF0KGopLmdldCgpLCBleHByUmVzdWx0KTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWV4cHJSZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBp
ZiAobWVkaWFUeXBlTWF0Y2gocXVlcnkubWVkaWFUeXBlKCkpKSB7CisgICAgICAgICAgICAvLyBJ
dGVyYXRlIHRocm91Z2ggZXhwcmVzc2lvbnMgYW5kIHN0b3AgaWYgYW55IG9mIHRoZW0gZXZhbCB0
byBmYWxzZSAoImFuZCIgc2VtYW50aWNzKS4KKyAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7Cisg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4mIGV4cHJlc3Np
b25zID0gcXVlcnkuZXhwcmVzc2lvbnMoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAw
OyBqIDwgZXhwcmVzc2lvbnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBldmFsKCpleHByZXNzaW9uc1tqXSk7CisgICAgICAgICAgICAgICAgaWYgKHN0eWxlU2VsZWN0
b3IgJiYgZXhwcmVzc2lvbnNbal0tPmlzVmlld3BvcnREZXBlbmRlbnQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVz
dWx0KCpleHByZXNzaW9uc1tqXSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3Vs
dCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgIH0K
IAotICAgICAgICAgICAgLy8gYXNzdW1lIHRydWUgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhl
IGxpc3QsCi0gICAgICAgICAgICAvLyBvdGhlcndpc2UgYXNzdW1lIGZhbHNlCi0gICAgICAgICAg
ICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnktPnJlc3RyaWN0b3IoKSwgZXhwcy0+c2l6
ZSgpID09IGopOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVz
dHJpY3RvcihxdWVyeS0+cmVzdHJpY3RvcigpLCBmYWxzZSk7CisgICAgICAgIHJlc3VsdCA9IGFw
cGx5UmVzdHJpY3RvcihxdWVyeS5yZXN0cmljdG9yKCksIHJlc3VsdCk7CisgICAgICAgIGlmIChy
ZXN1bHQpCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMjYzLDcgKzI0Nyw3IEBAIHN0YXRpYyBib29sIGFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2
YWwKICAgICAgICAgaW50IGggPSAwOwogICAgICAgICBpbnQgdiA9IDA7CiAgICAgICAgIGlmIChw
YXJzZUFzcGVjdFJhdGlvKHZhbHVlLCBoLCB2KSkKLSAgICAgICAgICAgIHJldHVybiB2ICE9IDAg
JiYgY29tcGFyZVZhbHVlKHdpZHRoICogdiwgaGVpZ2h0ICogaCwgb3ApOworICAgICAgICAgICAg
cmV0dXJuIHYgJiYgY29tcGFyZVZhbHVlKHdpZHRoICogdiwgaGVpZ2h0ICogaCwgb3ApOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0yNzksNyArMjYzLDcgQEAgc3RhdGljIGJv
b2wgZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdAogICAgICAgICBpbnQgaCA9IDA7CiAgICAg
ICAgIGludCB2ID0gMDsKICAgICAgICAgaWYgKHBhcnNlQXNwZWN0UmF0aW8odmFsdWUsIGgsIHYp
KQotICAgICAgICAgICAgcmV0dXJuIHYgIT0gMCAgJiYgY29tcGFyZVZhbHVlKHN0YXRpY19jYXN0
PGludD4oc2cud2lkdGgoKSkgKiB2LCBzdGF0aWNfY2FzdDxpbnQ+KHNnLmhlaWdodCgpKSAqIGgs
IG9wKTsKKyAgICAgICAgICAgIHJldHVybiB2ICYmIGNvbXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxp
bnQ+KHNnLndpZHRoKCkpICogdiwgc3RhdGljX2Nhc3Q8aW50PihzZy5oZWlnaHQoKSkgKiBoLCBv
cCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQ5OSw2OCArNDgzLDUxIEBA
IHN0YXRpYyBib29sIHRyYW5zZm9ybV8yZE1lZGlhRmVhdHVyZUV2YWwKIAogc3RhdGljIGJvb2wg
dHJhbnNmb3JtXzNkTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxl
KiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgYm9vbCByZXR1
cm5WYWx1ZUlmTm9QYXJhbWV0ZXI7Ci0gICAgaW50IGhhdmUzZFJlbmRlcmluZzsKLQotI2lmIEVO
QUJMRSgzRF9SRU5ERVJJTkcpCiAgICAgYm9vbCB0aHJlZURFbmFibGVkID0gZmFsc2U7Ci0jaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpICYm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9
IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgdGhyZWVERW5hYmxlZCA9IHZpZXct
PmNvbXBvc2l0b3IoKS0+Y2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCk7Ci0jZW5kaWYKLQotICAgIHJl
dHVyblZhbHVlSWZOb1BhcmFtZXRlciA9IHRocmVlREVuYWJsZWQ7Ci0gICAgaGF2ZTNkUmVuZGVy
aW5nID0gdGhyZWVERW5hYmxlZCA/IDEgOiAwOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZnJh
bWUpOwotICAgIHJldHVyblZhbHVlSWZOb1BhcmFtZXRlciA9IGZhbHNlOwotICAgIGhhdmUzZFJl
bmRlcmluZyA9IDA7CiAjZW5kaWYKLQogICAgIGlmICh2YWx1ZSkgewogICAgICAgICBmbG9hdCBu
dW1iZXI7Ci0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAmJiBjb21w
YXJlVmFsdWUoaGF2ZTNkUmVuZGVyaW5nLCBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsK
KyAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBhcmVWYWx1
ZShzdGF0aWNfY2FzdDxpbnQ+KHRocmVlREVuYWJsZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KG51bWJl
ciksIG9wKTsKICAgICB9Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlSWZOb1BhcmFtZXRlcjsKKyAg
ICByZXR1cm4gdGhyZWVERW5hYmxlZDsKIH0KIAogc3RhdGljIGJvb2wgdmlld19tb2RlTWVkaWFG
ZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqIGZyYW1lLCBN
ZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICBBU1NF
UlRfVU5VU0VEKG9wLCBvcCA9PSBOb1ByZWZpeCk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFBhZ2U6OnN0cmluZ1RvVmlld01vZGUoc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSktPmdldFN0cmluZ1ZhbHVlKCkpID09IGZyYW1l
LT5wYWdlKCktPnZpZXdNb2RlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNyZWF0ZUZ1bmN0aW9uTWFw
KCkKK3N0YXRpYyBGdW5jdGlvbk1hcCogY3JlYXRlRnVuY3Rpb25NYXAoKQogewotICAgIC8vIENy
ZWF0ZSB0aGUgdGFibGUuCi0gICAgZ0Z1bmN0aW9uTWFwID0gbmV3IEZ1bmN0aW9uTWFwOworICAg
IEZ1bmN0aW9uTWFwKiBmdW5jdGlvbk1hcCA9IG5ldyBGdW5jdGlvbk1hcDsKICNkZWZpbmUgQURE
X1RPX0ZVTkNUSU9OTUFQKG5hbWUsIHN0cikgIFwKLSAgICBnRnVuY3Rpb25NYXAtPnNldChuYW1l
IyNNZWRpYUZlYXR1cmUuaW1wbCgpLCBuYW1lIyNNZWRpYUZlYXR1cmVFdmFsKTsKKyAgICBmdW5j
dGlvbk1hcC0+c2V0KG5hbWUjI01lZGlhRmVhdHVyZS5pbXBsKCksIG5hbWUjI01lZGlhRmVhdHVy
ZUV2YWwpOwogICAgIENTU19NRURJQVFVRVJZX05BTUVTX0ZPUl9FQUNIX01FRElBRkVBVFVSRShB
RERfVE9fRlVOQ1RJT05NQVApOwogI3VuZGVmIEFERF9UT19GVU5DVElPTk1BUAorICAgIHJldHVy
biBmdW5jdGlvbk1hcDsKIH0KIAotYm9vbCBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpldmFsKGNvbnN0
IE1lZGlhUXVlcnlFeHAqIGV4cHIpIGNvbnN0Citib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2
YWwoY29uc3QgTWVkaWFRdWVyeUV4cCYgZXhwcmVzc2lvbikgY29uc3QKIHsKICAgICBpZiAoIW1f
ZnJhbWUgfHwgIW1fc3R5bGUpCi0gICAgICAgIHJldHVybiBtX2V4cFJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIG1fbWVkaWFGZWF0dXJlUmVzdWx0OwogCi0gICAgaWYgKCFleHByLT5pc1ZhbGlkKCkp
CisgICAgaWYgKCFleHByZXNzaW9uLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKCFnRnVuY3Rpb25NYXApCi0gICAgICAgIGNyZWF0ZUZ1bmN0aW9uTWFwKCk7Cisg
ICAgc3RhdGljIEZ1bmN0aW9uTWFwKiBmdW5jdGlvbk1hcCA9IGNyZWF0ZUZ1bmN0aW9uTWFwKCk7
CisgICAgTWVkaWFGZWF0dXJlRXZhbHVhdGlvbkZ1bmN0aW9uIGZ1bmN0aW9uID0gZnVuY3Rpb25N
YXAtPmdldChleHByZXNzaW9uLm1lZGlhRmVhdHVyZSgpLmltcGwoKSk7CiAKLSAgICAvLyBjYWxs
IHRoZSBtZWRpYSBmZWF0dXJlIGV2YWx1YXRpb24gZnVuY3Rpb24uIEFzc3VtZSBubyBwcmVmaXgK
LSAgICAvLyBhbmQgbGV0IHRyYW1wb2xpbmUgZnVuY3Rpb25zIG92ZXJyaWRlIHRoZSBwcmVmaXgg
aWYgcHJlZml4IGlzCi0gICAgLy8gdXNlZAotICAgIEV2YWxGdW5jIGZ1bmMgPSBnRnVuY3Rpb25N
YXAtPmdldChleHByLT5tZWRpYUZlYXR1cmUoKS5pbXBsKCkpOwotICAgIGlmIChmdW5jKQotICAg
ICAgICByZXR1cm4gZnVuYyhleHByLT52YWx1ZSgpLCBtX3N0eWxlLmdldCgpLCBtX2ZyYW1lLCBO
b1ByZWZpeCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gU3RhcnQgd2l0aCBubyBwcmVm
aXg6IFNvbWUgdHJhbXBvbGluZSBmdW5jdGlvbnMgYWRkIHRoZSBwcmVmaXggYW5kIGNhbGwgb3Ro
ZXIgbWVkaWEgZmVhdHVyZSBmdW5jdGlvbnMuCisgICAgcmV0dXJuIGZ1bmN0aW9uICYmIGZ1bmN0
aW9uKGV4cHJlc3Npb24udmFsdWUoKSwgbV9zdHlsZS5nZXQoKSwgbV9mcmFtZSwgTm9QcmVmaXgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlFdmFsdWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eUV2YWx1YXRvci5oCShyZXZpc2lvbiAxMDM2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFRdWVyeUV2YWx1YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2MSArMzEsNTAgQEAKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKIGNsYXNz
IENTU1N0eWxlU2VsZWN0b3I7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xh
c3MgTWVkaWFMaXN0OwogY2xhc3MgTWVkaWFRdWVyeUV4cDsKIAotLyoqCi0gKiBDbGFzcyB0aGF0
IGV2YWx1YXRlcyBjc3MgbWVkaWEgcXVlcmllcyBhcyBkZWZpbmVkIGluCi0gKiBDU1MzIE1vZHVs
ZSAiTWVkaWEgUXVlcmllcyIgKGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtbWVkaWFxdWVyaWVz
LykKLSAqIFNwZWNpYWwgY29uc3RydWN0b3JzIGFyZSBuZWVkZWQsIGlmIHNpbXBsZSBtZWRpYSBx
dWVyaWVzIGFyZSB0byBiZQotICogZXZhbHVhdGVkIHdpdGhvdXQga25vd2xlZGdlIG9mIHRoZSBt
ZWRpdW0gZmVhdHVyZXMuIFRoaXMgY2FuIGhhcHBlbgotICogZm9yIGV4YW1wbGUgd2hlbiBwYXJz
aW5nIFVBIHN0eWxlc2hlZXRzLCBpZiBldmFsdWF0aW9uIGlzIGRvbmUKLSAqIHJpZ2h0IGFmdGVy
IHBhcnNpbmcuCi0gKgotICogdGhlIGJvb2xlYW4gcGFyYW1ldGVyIGlzIHVzZWQgdG8gYXBwcm94
aW1hdGUgcmVzdWx0cyBvZiBldmFsdWF0aW9uLCBpZgotICogdGhlIGRldmljZSBjaGFyYWN0ZXJp
c3RpY3MgYXJlIG5vdCBrbm93bi4gVGhpcyBjYW4gYmUgdXNlZCB0byBwcnVuZSB0aGUgbG9hZGlu
ZwotICogb2Ygc3R5bGVzaGVldHMgdG8gb25seSB0aG9zZSB3aGljaCBhcmUgcHJvYmFibGUgdG8g
bWF0Y2guCi0gKi8KKy8vIENsYXNzIHRoYXQgZXZhbHVhdGVzIENTUyBtZWRpYSBxdWVyaWVzIGFz
IGRlZmluZWQgaW4gQ1NTMyBNb2R1bGUgIk1lZGlhIFF1ZXJpZXMiLgorLy8KKy8vIFNwZWNpYWwg
Y29uc3RydWN0b3JzIGFyZSBzdXBwbGllZCBzbyB0aGF0IHNpbXBsZSBtZWRpYSBxdWVyaWVzIGNh
biB0byBiZQorLy8gZXZhbHVhdGVkIHdpdGhvdXQga25vd2xlZGdlIG9mIHRoZSBtZWRpdW0gZmVh
dHVyZXMuIFRoaXMgaXMgdXNlZCwgZm9yIGV4YW1wbGUsCisvLyB3aGVuIHBhcnNpbmcgdXNlciBh
Z2VudCBzdHlsZXNoZWV0cy4KKy8vCisvLyBUaGUgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gdGhlIGNv
bnN0cnVjdG9yIGlzIHVzZWQgdG8gYXBwcm94aW1hdGUgcmVzdWx0cyBvZiBldmFsdWF0aW9uLAor
Ly8gaWYgdGhlIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgYXJlIG5vdCBrbm93bi4gVGhpcyBjYW4g
YmUgdXNlZCB0byBwcnVuZSB0aGUgbG9hZGluZworLy8gb2Ygc3R5bGVzaGVldHMgdG8gcmVtb3Zl
IHRob3NlIHRoYXQgZGVmaW5pdGVseSB3b24ndCBtYXRjaC4KKwogY2xhc3MgTWVkaWFRdWVyeUV2
YWx1YXRvciB7CiAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lZGlhUXVlcnlFdmFsdWF0b3Ip
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICAvKiogQ3JlYXRlcyBldmFs
dWF0b3Igd2hpY2ggZXZhbHVhdGVzIG9ubHkgc2ltcGxlIG1lZGlhIHF1ZXJpZXMKLSAgICAgKiAg
RXZhbHVhdG9yIHJldHVybnMgdHJ1ZSBmb3IgImFsbCIsIGFuZCByZXR1cm5zIHZhbHVlIG9mIFxt
ZWRpYUZlYXR1cmVSZXN1bHQKLSAgICAgKiAgZm9yIGFueSBtZWRpYSBmZWF0dXJlcwotICAgICAq
LwotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IoYm9vbCBtZWRpYUZlYXR1cmVSZXN1bHQgPSBmYWxz
ZSk7Ci0KLSAgICAvKiogQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIG9ubHkgc2lt
cGxlIG1lZGlhIHF1ZXJpZXMKLSAgICAgKiAgRXZhbHVhdG9yICByZXR1cm5zIHRydWUgZm9yIGFj
Y2VwdGVkTWVkaWFUeXBlIGFuZCByZXR1cm5zIHZhbHVlIG9mIFxtZWRpYWZlYXR1cmVSZXN1bHQK
LSAgICAgKiAgZm9yIGFueSBtZWRpYSBmZWF0dXJlcwotICAgICAqLworICAgIC8vIENyZWF0ZXMg
ZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBxdWVyaWVzLgorICAg
IC8vIEV2YWx1YXRvciByZXR1cm5zIHRydWUgZm9yIGFjY2VwdGVkTWVkaWFUeXBlIGFuZCB1c2Ug
bWVkaWFGZWF0dXJlUmVzdWx0IGZvciBhbnkgbWVkaWEgZmVhdHVyZXMuCiAgICAgTWVkaWFRdWVy
eUV2YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBib29sIG1lZGlhRmVh
dHVyZVJlc3VsdCA9IGZhbHNlKTsKICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IGNoYXIq
IGFjY2VwdGVkTWVkaWFUeXBlLCBib29sIG1lZGlhRmVhdHVyZVJlc3VsdCA9IGZhbHNlKTsKIAot
ICAgIC8qKiBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0ZXMgZnVsbCBtZWRpYSBxdWVy
aWVzCi0gICAgICovCisgICAgLy8gQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIGZ1
bGwgbWVkaWEgcXVlcmllcy4KICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYg
YWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiwgUmVuZGVyU3R5bGUqKTsKIAotICAgIH5NZWRpYVF1
ZXJ5RXZhbHVhdG9yKCk7Ci0KICAgICBib29sIG1lZGlhVHlwZU1hdGNoKGNvbnN0IFN0cmluZyYg
bWVkaWFUeXBlVG9NYXRjaCkgY29uc3Q7CiAgICAgYm9vbCBtZWRpYVR5cGVNYXRjaFNwZWNpZmlj
KGNvbnN0IGNoYXIqIG1lZGlhVHlwZVRvTWF0Y2gpIGNvbnN0OwogCi0gICAgLyoqIEV2YWx1YXRl
cyBhIGxpc3Qgb2YgbWVkaWEgcXVlcmllcyAqLworICAgIC8vIEV2YWx1YXRlcyBhIGxpc3Qgb2Yg
bWVkaWEgcXVlcmllcy4KICAgICBib29sIGV2YWwoY29uc3QgTWVkaWFMaXN0KiwgQ1NTU3R5bGVT
ZWxlY3RvciogPSAwKSBjb25zdDsKIAotICAgIC8qKiBFdmFsdWF0ZXMgbWVkaWEgcXVlcnkgc3Vi
ZXhwcmVzc2lvbiwgaWUgImFuZCAobWVkaWEtZmVhdHVyZTogdmFsdWUpIiBwYXJ0ICovCi0gICAg
Ym9vbCBldmFsKGNvbnN0IE1lZGlhUXVlcnlFeHAqKSBjb25zdDsKKyAgICAvLyBFdmFsdWF0ZXMg
bWVkaWEgcXVlcnkgc3ViZXhwcmVzc2lvbiwgaS5lLiAiYW5kIChtZWRpYS1mZWF0dXJlOiB2YWx1
ZSkiIHBhcnQuCisgICAgYm9vbCBldmFsKGNvbnN0IE1lZGlhUXVlcnlFeHAmKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBTdHJpbmcgbV9tZWRpYVR5cGU7CiAgICAgRnJhbWUqIG1fZnJhbWU7IC8v
IG5vdCBvd25lZAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKLSAgICBib29sIG1f
ZXhwUmVzdWx0OworICAgIGJvb2wgbV9tZWRpYUZlYXR1cmVSZXN1bHQ7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZQorCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120531</attachid>
            <date>2011-12-25 23:24:30 -0800</date>
            <delta_ts>2011-12-26 08:32:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75223-20111225232429.patch</filename>
            <type>text/plain</type>
            <size>25248</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDExLTEyLTI1ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQ1NTU3R5bGVTZWxlY3Rv
ciBzbyBpdCBkb2VzIG5vdCBrZWVwIGEgdmVjdG9yIG9mIE1lZGlhUXVlcnlSZXN1bHQgcG9pbnRl
cnMgdGhhdCBuZWVkIHRvIGJlIGRlbGV0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc1MjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6IE1vdmVkIHRoZSBN
ZWRpYVF1ZXJ5UmVzdWx0IGNsYXNzIGludG8gdGhpcyBmaWxlCisgICAgICAgIGFuZCBtYWRlIGl0
IGEgc3RydWN0dXJlIHJhdGhlciB0aGFuIGEgY2xhc3MuCisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3Rvcik6IFJlbW92ZWQgdGhlIGNhbGwgdG8KKyAg
ICAgICAgZGVsZXRlQWxsVmFsdWVzLCB1bm5lZWRlZCBub3cgdGhhdCB3ZSB1c2UgYSB2ZWN0b3Ig
b2YgdmFsdWVzLCBub3QgcG9pbnRlcnMuCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQpOiBVcGRhdGVkCisgICAg
ICAgIHRvIGtlZXAgdGhlIG1lZGlhIHF1ZXJ5IGluIHRoZSB2ZWN0b3IuCisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UpOiBVcGRhdGVk
IGZvciBhYm92ZQorICAgICAgICBjaGFuZ2VzIGFuZCB0byB1c2Ugc2l6ZV90IGNvbnNpc3RlbnRs
eS4KKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6IFJlbW92ZWQgbWFueSB1bm5l
ZWRlZCBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBjbGFzc2VzLgorICAgICAgICBSZW1vdmVkIG5v
dy11bm5lZWRlZCBpbmNsdWRlIG9mIE1lZGlhUXVlcnlFeHAuaC4gUmVwbGFjZWQgTWVkaWFRdWVy
eVJlc3VsdAorICAgICAgICBkZWZpbml0aW9uIHdpdGggYSBmb3J3YXJkIGRlY2xhcmF0aW9uLiBD
aGFuZ2VkIGFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdAorICAgICAgICB0byB0
YWtlIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLiBDaGFuZ2VkIG1fdmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cworICAgICAgICB0byBiZSBhIHZlY3RvciBvZiB2YWx1
ZXMgcmF0aGVyIHRoYSBvZiBwb2ludGVycy4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5LmNw
cDogUmVtb3ZlZCBzb21lIGNvbW1lbnRzIHRoYXQgcG9pbnRlZCB0byBDU1MgZG9jdW1lbnRzLgor
ICAgICAgICBUaGVyZSBpcyBubyBndWFyYW50dGUgdGhpcyBsaW5rcyB3aWxsIGJlIHZhbGlkIG92
ZXIgdGltZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnk6Ok1lZGlhUXVlcnkpOiBSZXdy
b3RlIGZvciBjbGFyaXR5LCBjb2Rpbmcgc3R5bGUsIGFuZAorICAgICAgICBzaW1wbGljaXR5Lgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6Y3NzVGV4dCk6IFVwZGF0ZWQgZm9yIGNoYW5n
ZSB0byBkYXRhIG1lbWJlciBuYW1lLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuaDogUmVt
b3ZlZCBkZWNsYXJhdGlvbiBvZiB1bm5lZWRlZCBkZXN0cnVjdG9yLiBSZW1vdmVkIG5vbi1oZWxw
ZnVsCisgICAgICAgIGFyZ3VtZW50IG5hbWUgImV4cHJzIi4gQ2hhbmdlZCBleHByZXNzaW9ucyBm
dW5jdGlvbiB0byByZXR1cm4gYSByZWZlcmVuY2UgaW5zdGVhZCBvZgorICAgICAgICBhIHBvaW50
ZXIuIENoYW5nZWQgbWVkaWFUeXBlIGFuZCBjc3NUZXh0IGZ1bmN0aW9ucyB0byByZXR1cm4gYSBy
ZWZlcmVuY2UuIFJlbmFtZWQKKyAgICAgICAgbV9zZXJpYWxpemF0aW9uQ2FjaGUgdG8gbV9zZXJp
YWxpemVkUXVlcnkuCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6IFJl
bmFtZWQgRXZhbEZ1bmMgdG8gTWVkaWFGZWF0dXJlRXZhbHVhdGlvbkZ1bmN0aW9uLgorICAgICAg
ICBCcm9rZSBhIEZJWE1FIGludG8gdGhyZWUgYW5kIHJld29yZGVkIGZvciBjbGFyaXR5LgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeUV2YWx1YXRvcik6IFVwZGF0ZWQgZm9yIG5hbWUgY2hh
bmdlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWwpOiBSZXdy
b3RlIHRoaXMgZm9yIGNsYXJpdHkgYW5kIHRvIHJlZ3VsYXJpemUKKyAgICAgICAgdGhlIGxvZ2lj
IGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbCk6
IEdvdCByaWQgb2YgYSAhPSAwIHRoYXQgaXMgY29udHJhcnkgdG8gdGhlCisgICAgICAgIG5vcm1h
bCBXZWJLaXQgc3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VfYXNwZWN0X3JhdGlvTWVk
aWFGZWF0dXJlRXZhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtXzNkTWVk
aWFGZWF0dXJlRXZhbCk6IEZpeGVkIG1hbmdsZWQgI2lmIHRoYXQgd2FzIGhlcmUuCisgICAgICAg
IChXZWJDb3JlOjp2aWV3X21vZGVNZWRpYUZlYXR1cmVFdmFsKTogUmVwbGFjZWQgVU5VU0VEX1BB
UkFNIHVzYWdlIHdpdGggQVNTRVJUX1VOVVNFRC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZ1
bmN0aW9uTWFwKTogQ2hhbmdlZCB0aGlzIHNvIGl0IHJldHVybnMgdGhlIG1hcCBzbyB3ZSBjYW4g
dXNlIGEKKyAgICAgICAgY2xlYW5lciBzdHlsZSBpbiB0aGUgY2FsbGVyLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbCk6IFVwZGF0ZWQgdG8gdGFrZSBhIHJlZmVy
ZW5jZSBhbmQgaW1wcm92ZWQgdGhlCisgICAgICAgIGNvbW1lbnRzIGFuZCBjb2Rpbmcgc3R5bGUg
YSBiaXQuCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oOiBVcGRhdGVkIGNv
bW1lbnQgc3R5bGUuIFJlbW92ZWQgdW51c2VkIGNvbnN0cnVjdG9yLgorICAgICAgICBSZW1vdmVk
IHVubmVlZGVkIGRlc3RydWN0b3IgZGVjbGFyYXRpb24uIFJlbmFtZWQgbV9leHBSZXN1bHQgdG8g
bV9tZWRpYUZlYXR1cmVSZXN1bHQuCisKIDIwMTEtMTItMjUgIEhhamltZSBNb3JyaXRhICA8bW9y
cml0YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc0MDY3CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCShyZXZpc2lvbiAxMDM2NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlICJN
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNs
dWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgog
I2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYWdlR3JvdXAuaCIKQEAgLTEzNyw2ICsxMzgsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitzdHJ1Y3QgTWVkaWFRdWVyeVJlc3VsdCB7
CisgICAgTWVkaWFRdWVyeUV4cCBleHByZXNzaW9uOworICAgIGJvb2wgcmVzdWx0OworICAgIAor
ICAgIE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCYgZXhwcmVzc2lvbiwgYm9v
bCByZXN1bHQpCisgICAgICAgIDogZXhwcmVzc2lvbihleHByZXNzaW9uKQorICAgICAgICAsIHJl
c3VsdChyZXN1bHQpCisgICAgeworICAgIH0gICAgCit9OworICAgIAogI2RlZmluZSBIQU5ETEVf
SU5IRVJJVChwcm9wLCBQcm9wKSBcCiBpZiAoaXNJbmhlcml0KSB7IFwKICAgICBtX3N0eWxlLT5z
ZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+cHJvcCgpKTsgXApAQCAtNDYxLDcgKzQ3Myw2IEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkS2V5ZnJhbWVTdHlsZSgKIENTU1N0eWxlU2VsZWN0b3I6
On5DU1NTdHlsZVNlbGVjdG9yKCkKIHsKICAgICBtX2ZvbnRTZWxlY3Rvci0+Y2xlYXJEb2N1bWVu
dCgpOwotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJl
c3VsdHMpOwogfQogCiBDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlczo6RmVhdHVyZXMoKQpAQCAt
NDcwMiwxNiArNDcxMywxNiBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6Omhhc1NlbGVjdG9yRm9y
QXR0CiAgICAgcmV0dXJuIG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVzLmNvbnRhaW5zKGF0dHJuYW1l
LmltcGwoKSk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkVmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqIGV4cHIsIGJvb2wgcmVzdWx0
KQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlS
ZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCYgZXhwcmVzc2lvbiwgYm9vbCByZXN1bHQpCiB7Ci0g
ICAgbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVuZChuZXcgTWVkaWFR
dWVyeVJlc3VsdCgqZXhwciwgcmVzdWx0KSk7CisgICAgbV92aWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcnlSZXN1bHRzLmFwcGVuZChNZWRpYVF1ZXJ5UmVzdWx0KGV4cHJlc3Npb24sIHJlc3VsdCkp
OwogfQogCiBib29sIENTU1N0eWxlU2VsZWN0b3I6OmFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgp
IGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgcyA9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5
UmVzdWx0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHM7IGkrKykgewot
ICAgICAgICBpZiAobV9tZWRpdW0tPmV2YWwoJm1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5
UmVzdWx0c1tpXS0+bV9leHByZXNzaW9uKSAhPSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
eVJlc3VsdHNbaV0tPm1fcmVzdWx0KQorICAgIHNpemVfdCBzaXplID0gbV92aWV3cG9ydERlcGVu
ZGVudE1lZGlhUXVlcnlSZXN1bHRzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7IGkrKykgeworICAgICAgICBpZiAobV9tZWRpdW0tPmV2YWwobV92aWV3cG9ydERlcGVu
ZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLmV4cHJlc3Npb24pICE9IG1fdmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS5yZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oCShyZXZpc2lvbiAxMDM2NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAKICNpbmNsdWRl
ICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiTGlua0hhc2guaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5
RXhwLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNr
ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMzUsNDIgKzM0LDMxIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgeyBEb05v
dFVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplLCBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSB9
OwotCiBjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjsKIGNsYXNzIENTU1BhZ2VSdWxlOwogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7Ci1jbGFz
cyBDU1NQcm9wZXJ0eTsKLWNsYXNzIENTU0ZvbnRGYWNlOwotY2xhc3MgQ1NTRm9udEZhY2VSdWxl
OwogY2xhc3MgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTsKIGNsYXNzIENTU0ltYWdlVmFsdWU7CiBj
bGFzcyBDU1NSdWxlTGlzdDsKLWNsYXNzIENTU1NlbGVjdG9yOwogY2xhc3MgQ1NTU3R5bGVBcHBs
eVByb3BlcnR5OwotY2xhc3MgQ1NTU3R5bGVSdWxlOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNs
YXNzIENTU1ZhbHVlOwogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIEN1c3RvbUZpbHRlck9w
ZXJhdGlvbjsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZyYW1lOwot
Y2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgS1VSTDsKIGNsYXNzIEtleWZyYW1lTGlzdDsKIGNsYXNz
IEtleWZyYW1lVmFsdWU7CiBjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOworY2xhc3MgTWVkaWFR
dWVyeUV4cDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBSZW5kZXJSZWdpb247CiBjbGFzcyBSdWxlRGF0
YTsKIGNsYXNzIFJ1bGVTZXQ7Ci1jbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0eWxlSW1hZ2U7CiBj
bGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKIGNsYXNzIFN0eWxlU2hhZGVyOwotY2xhc3MgU3R5bGVT
aGVldDsKIGNsYXNzIFN0eWxlU2hlZXRMaXN0OwogY2xhc3MgU3R5bGVkRWxlbWVudDsKIGNsYXNz
IFdlYktpdENTU0tleWZyYW1lUnVsZTsKQEAgLTc5LDE5ICs2NywxMCBAQCBjbGFzcyBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTsKIGNsYXNzIFdlYktpdENTU1JlZ2lvblJ1bGU7CiBjbGFzcyBXZWJLaXRD
U1NTaGFkZXJWYWx1ZTsKIAotY2xhc3MgTWVkaWFRdWVyeVJlc3VsdCB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoTWVkaWFRdWVyeVJlc3VsdCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCYgZXhwciwg
Ym9vbCByZXN1bHQpCi0gICAgICAgIDogbV9leHByZXNzaW9uKGV4cHIpCi0gICAgICAgICwgbV9y
ZXN1bHQocmVzdWx0KQotICAgIHsKLSAgICB9Ci0KLSAgICBNZWRpYVF1ZXJ5RXhwIG1fZXhwcmVz
c2lvbjsKLSAgICBib29sIG1fcmVzdWx0OwotfTsKK3N0cnVjdCBNZWRpYVF1ZXJ5UmVzdWx0Owog
CitlbnVtIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSB7IERvTm90VXNlU21hcnRNaW5pbXVtRm9y
Rm9udFNpemUsIFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplIH07CisgICAgCiAvLyBUaGlzIGNs
YXNzIHNlbGVjdHMgYSBSZW5kZXJTdHlsZSBmb3IgYSBnaXZlbiBlbGVtZW50IGJhc2VkIG9uIGEg
Y29sbGVjdGlvbiBvZiBzdHlsZXNoZWV0cy4KIGNsYXNzIENTU1N0eWxlU2VsZWN0b3IgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENTU1N0eWxlU2VsZWN0b3IpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKQEAgLTE4OSw3ICsxNjgsNyBAQCBwdWJsaWM6CiAKICAgICBDU1NGb250U2VsZWN0
b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9
CiAKLSAgICB2b2lkIGFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBN
ZWRpYVF1ZXJ5RXhwKiwgYm9vbCByZXN1bHQpOworICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAmLCBib29sIHJlc3VsdCk7CiAK
ICAgICBib29sIGFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0OwogCkBAIC00MDAsNyAr
Mzc5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2FtZU9yaWdpbk9ubHk7CiAKICAgICBSZWZQ
dHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKLSAgICBWZWN0b3I8TWVkaWFRdWVy
eVJlc3VsdCo+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKKyAgICBWZWN0
b3I8TWVkaWFRdWVyeVJlc3VsdD4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRz
OwogCiAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKICAgICBib29sIG1f
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeS5jcHAJKHJldmlzaW9uIDEwMzY3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1
ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLS8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNzZXJpYWxpemUtYS1t
ZWRpYS1xdWVyeQogU3RyaW5nIE1lZGlhUXVlcnk6OnNlcmlhbGl6ZSgpIGNvbnN0CiB7CiAgICAg
U3RyaW5nQnVpbGRlciByZXN1bHQ7CkBAIC03NSw1MSArNzQsNDcgQEAgc3RhdGljIGJvb2wgZXhw
cmVzc2lvbkNvbXBhcmUoY29uc3QgT3duUAogfQogCiAKLU1lZGlhUXVlcnk6Ok1lZGlhUXVlcnko
UmVzdHJpY3RvciByLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgUGFzc093blB0cjxWZWN0b3I8
T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4gPiBleHBycykKLSAgICA6IG1fcmVzdHJpY3RvcihyKQor
TWVkaWFRdWVyeTo6TWVkaWFRdWVyeShSZXN0cmljdG9yIHJlc3RyaWN0b3IsIGNvbnN0IFN0cmlu
ZyYgbWVkaWFUeXBlLCBQYXNzT3duUHRyPEV4cHJlc3Npb25WZWN0b3I+IGV4cHJlc3Npb25zKQor
ICAgIDogbV9yZXN0cmljdG9yKHJlc3RyaWN0b3IpCiAgICAgLCBtX21lZGlhVHlwZShtZWRpYVR5
cGUubG93ZXIoKSkKLSAgICAsIG1fZXhwcmVzc2lvbnMoZXhwcnMpCisgICAgLCBtX2V4cHJlc3Np
b25zKGV4cHJlc3Npb25zKQogICAgICwgbV9pZ25vcmVkKGZhbHNlKQogewogICAgIGlmICghbV9l
eHByZXNzaW9ucykgewotICAgICAgICBtX2V4cHJlc3Npb25zID0gYWRvcHRQdHIobmV3IFZlY3Rv
cjxPd25QdHI8TWVkaWFRdWVyeUV4cD4gPik7CisgICAgICAgIG1fZXhwcmVzc2lvbnMgPSBhZG9w
dFB0cihuZXcgRXhwcmVzc2lvblZlY3Rvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBub25Db3B5aW5nU29ydChtX2V4cHJlc3Npb25zLT5iZWdpbigpLCBtX2V4cHJlc3Npb25zLT5l
bmQoKSwgZXhwcmVzc2lvbkNvbXBhcmUpOworICAgIEV4cHJlc3Npb25WZWN0b3ImIHZlY3RvciA9
ICptX2V4cHJlc3Npb25zOworICAgIAorICAgIG5vbkNvcHlpbmdTb3J0KHZlY3Rvci5iZWdpbigp
LCB2ZWN0b3IuZW5kKCksIGV4cHJlc3Npb25Db21wYXJlKTsKKworICAgIC8vIFJlbW92ZSBhbGwg
ZHVwbGljYXRlZCBleHByZXNzaW9ucy4KKyAgICBTdHJpbmcgcHJldmlvdXNTZXJpYWxpemVkRXhw
cmVzc2lvbjsKKyAgICBmb3IgKHNpemVfdCBpID0gdmVjdG9yLnNpemUoKTsgaTsgKSB7CisgICAg
ICAgIC0taTsKIAotICAgIC8vIHJlbW92ZSBhbGwgZHVwbGljYXRlZCBleHByZXNzaW9ucwotICAg
IFN0cmluZyBrZXk7Ci0gICAgZm9yIChpbnQgaSA9IG1fZXhwcmVzc2lvbnMtPnNpemUoKSAtIDE7
IGkgPj0gMDsgLS1pKSB7Ci0KLSAgICAgICAgLy8gaWYgbm90IGFsbCBvZiB0aGUgZXhwcmVzc2lv
bnMgaXMgdmFsaWQgdGhlIG1lZGlhIHF1ZXJ5IG11c3QgYmUgaWdub3JlZC4KKyAgICAgICAgLy8g
SWYgbm90IGFsbCBvZiB0aGUgZXhwcmVzc2lvbnMgYXJlIHZhbGlkLCB0aGUgbWVkaWEgcXVlcnkg
bXVzdCBiZSBpZ25vcmVkLgogICAgICAgICBpZiAoIW1faWdub3JlZCkKLSAgICAgICAgICAgIG1f
aWdub3JlZCA9ICFtX2V4cHJlc3Npb25zLT5hdChpKS0+aXNWYWxpZCgpOworICAgICAgICAgICAg
bV9pZ25vcmVkID0gIXZlY3RvcltpXS0+aXNWYWxpZCgpOwogCi0gICAgICAgIGlmIChtX2V4cHJl
c3Npb25zLT5hdChpKS0+c2VyaWFsaXplKCkgPT0ga2V5KQotICAgICAgICAgICAgbV9leHByZXNz
aW9ucy0+cmVtb3ZlKGkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBrZXkgPSBtX2V4cHJl
c3Npb25zLT5hdChpKS0+c2VyaWFsaXplKCk7CisgICAgICAgIFN0cmluZyBzZXJpYWxpemVkRXhw
cmVzc2lvbiA9IHZlY3RvcltpXS0+c2VyaWFsaXplKCk7CisgICAgICAgIGlmIChzZXJpYWxpemVk
RXhwcmVzc2lvbiA9PSBwcmV2aW91c1NlcmlhbGl6ZWRFeHByZXNzaW9uKQorICAgICAgICAgICAg
dmVjdG9yLnJlbW92ZShpKTsKKyAgICAgICAgcHJldmlvdXNTZXJpYWxpemVkRXhwcmVzc2lvbiA9
IHNlcmlhbGl6ZWRFeHByZXNzaW9uOwogICAgIH0KIH0KIAotTWVkaWFRdWVyeTo6fk1lZGlhUXVl
cnkoKQotewotfQotCi0vLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jY29tcGFyZS1t
ZWRpYS1xdWVyaWVzCiBib29sIE1lZGlhUXVlcnk6Om9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVy
eSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNzc1RleHQoKSA9PSBvdGhlci5jc3NUZXh0
KCk7CiB9CiAKLS8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNzZXJpYWxpemUtYS1s
aXN0LW9mLW1lZGlhLXF1ZXJpZXMKLVN0cmluZyBNZWRpYVF1ZXJ5Ojpjc3NUZXh0KCkgY29uc3QK
K2NvbnN0IFN0cmluZyYgTWVkaWFRdWVyeTo6Y3NzVGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1f
c2VyaWFsaXphdGlvbkNhY2hlLmlzTnVsbCgpKQotICAgICAgICBjb25zdF9jYXN0PE1lZGlhUXVl
cnkqPih0aGlzKS0+bV9zZXJpYWxpemF0aW9uQ2FjaGUgPSBzZXJpYWxpemUoKTsKLQotICAgIHJl
dHVybiBtX3NlcmlhbGl6YXRpb25DYWNoZTsKKyAgICBpZiAobV9zZXJpYWxpemVkUXVlcnkuaXNO
dWxsKCkpCisgICAgICAgIGNvbnN0X2Nhc3Q8TWVkaWFRdWVyeSo+KHRoaXMpLT5tX3NlcmlhbGl6
ZWRRdWVyeSA9IHNlcmlhbGl6ZSgpOworICAgIHJldHVybiBtX3NlcmlhbGl6ZWRRdWVyeTsKIH0K
IAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnkuaAkocmV2aXNpb24gMTAzNjc5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnku
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjAgKzQwLDE4IEBAIGNsYXNzIE1lZGlhUXVlcnlFeHA7
CiBjbGFzcyBNZWRpYVF1ZXJ5IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVF1ZXJ5
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZW51bSBSZXN0cmljdG9y
IHsKLSAgICAgICAgT25seSwgTm90LCBOb25lCi0gICAgfTsKKyAgICBlbnVtIFJlc3RyaWN0b3Ig
eyBPbmx5LCBOb3QsIE5vbmUgfTsKIAogICAgIHR5cGVkZWYgVmVjdG9yPE93blB0cjxNZWRpYVF1
ZXJ5RXhwPiA+IEV4cHJlc3Npb25WZWN0b3I7CiAKLSAgICBNZWRpYVF1ZXJ5KFJlc3RyaWN0b3Is
IGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCBQYXNzT3duUHRyPEV4cHJlc3Npb25WZWN0b3I+IGV4
cHJzKTsKLSAgICB+TWVkaWFRdWVyeSgpOworICAgIE1lZGlhUXVlcnkoUmVzdHJpY3RvciwgY29u
c3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8RXhwcmVzc2lvblZlY3Rvcj4pOworCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1lZGlhUXVlcnkmKSBjb25zdDsKIAogICAgIFJlc3Ry
aWN0b3IgcmVzdHJpY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RvcjsgfQotICAgIGNv
bnN0IFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeUV4cD4gPiogZXhwcmVzc2lvbnMoKSBjb25zdCB7
IHJldHVybiBtX2V4cHJlc3Npb25zLmdldCgpOyB9Ci0gICAgU3RyaW5nIG1lZGlhVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVkaWFUeXBlOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1l
ZGlhUXVlcnkmIG90aGVyKSBjb25zdDsKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OworICAg
IGNvbnN0IEV4cHJlc3Npb25WZWN0b3ImIGV4cHJlc3Npb25zKCkgY29uc3QgeyByZXR1cm4gKm1f
ZXhwcmVzc2lvbnM7IH0KKyAgICBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVkaWFUeXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBjc3NUZXh0KCkgY29uc3Q7CiAg
ICAgYm9vbCBpZ25vcmVkKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVkOyB9CiAKICBwcml2YXRl
OgpAQCAtNjEsNyArNTksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIG1fbWVkaWFUeXBlOwogICAg
IE93blB0cjxFeHByZXNzaW9uVmVjdG9yPiBtX2V4cHJlc3Npb25zOwogICAgIGJvb2wgbV9pZ25v
cmVkOwotICAgIFN0cmluZyBtX3NlcmlhbGl6YXRpb25DYWNoZTsKKyAgICBTdHJpbmcgbV9zZXJp
YWxpemVkUXVlcnk7CiAKICAgICBTdHJpbmcgc2VyaWFsaXplKCkgY29uc3Q7CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAkocmV2aXNpb24gMTAz
Njc5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCwzNCArNTgsMjQgQEAgdXNpbmcgbmFtZXNwYWNlIE1lZGlhRmVhdHVy
ZU5hbWVzOwogCiBlbnVtIE1lZGlhRmVhdHVyZVByZWZpeCB7IE1pblByZWZpeCwgTWF4UHJlZml4
LCBOb1ByZWZpeCB9OwogCi10eXBlZGVmIGJvb2wgKCpFdmFsRnVuYykoQ1NTVmFsdWUqLCBSZW5k
ZXJTdHlsZSosIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4KTsKLXR5cGVkZWYgSGFzaE1hcDxB
dG9taWNTdHJpbmdJbXBsKiwgRXZhbEZ1bmM+IEZ1bmN0aW9uTWFwOwotc3RhdGljIEZ1bmN0aW9u
TWFwKiBnRnVuY3Rpb25NYXA7Ci0KLS8qCi0gKiBGSVhNRTogZm9sbG93aW5nIG1lZGlhIGZlYXR1
cmVzIGFyZSBub3QgaW1wbGVtZW50ZWQ6IGNvbG9yX2luZGV4LCBzY2FuLCByZXNvbHV0aW9uCi0g
KgotICogY29sb3JfaW5kZXgsIG1pbi1jb2xvci1pbmRleCwgbWF4X2NvbG9yX2luZGV4OiBJdCdz
IHVua25vd24gaG93IHRvIHJldHJpZXZlCi0gKiB0aGUgaW5mb3JtYXRpb24gaWYgdGhlIGRpc3Bs
YXkgbW9kZSBpcyBpbmRleGVkCi0gKiBzY2FuOiBUaGUgInNjYW4iIG1lZGlhIGZlYXR1cmUgZGVz
Y3JpYmVzIHRoZSBzY2FubmluZyBwcm9jZXNzIG9mCi0gKiB0diBvdXRwdXQgZGV2aWNlcy4gSXQn
cyB1bmtub3duIGhvdyB0byByZXRyaWV2ZSB0aGlzIGluZm9ybWF0aW9uIGZyb20KLSAqIHRoZSBw
bGF0Zm9ybQotICogcmVzb2x1dGlvbiwgbWluLXJlc29sdXRpb24sIG1heC1yZXNvbHV0aW9uOiBj
c3MgcGFyc2VyIGRvZXNuJ3Qgc2VlbSB0bwotICogc3VwcG9ydCBDU1NfRElNRU5TSU9OCi0gKi8K
K3R5cGVkZWYgYm9vbCAoKk1lZGlhRmVhdHVyZUV2YWx1YXRpb25GdW5jdGlvbikoQ1NTVmFsdWUq
LCBSZW5kZXJTdHlsZSosIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4KTsKK3R5cGVkZWYgSGFz
aE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgTWVkaWFGZWF0dXJlRXZhbHVhdGlvbkZ1bmN0aW9uPiBG
dW5jdGlvbk1hcDsKIAotTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihi
b29sIG1lZGlhRmVhdHVyZVJlc3VsdCkKLSAgICA6IG1fZnJhbWUoMCkKLSAgICAsIG1fc3R5bGUo
MCkKLSAgICAsIG1fZXhwUmVzdWx0KG1lZGlhRmVhdHVyZVJlc3VsdCkKLXsKLX0KKy8vIEZJWE1F
OiBjb2xvcl9pbmRleCwgbWluLWNvbG9yLWluZGV4LCBhbmQgbWF4X2NvbG9yX2luZGV4IGFyZSBu
b3QgaW1wbGVtZW50ZWQuCisvLyBUbyBpbXBsZW1lbnQgdGhlbSB3ZSdkIGhhdmUgdG8gYWRkIGlu
Zm9ybWF0aW9uIGFib3V0IGluZGV4ZWQgY29sb3IgdG8gdGhlIFdlYkNvcmUgcGxhdGZvcm07Cisv
LyBtb3N0IG1vZGVybiBwbGF0Zm9ybXMgZG9uJ3QgbWFrZSB1c2Ugb2YgaW5kZXhlZCBjb2xvci4K
KworLy8gRklYTUU6IHNjYW4gaXMgbm90IGltcGxlbWVudGVkOiBUaGlzIG1lZGlhIGZlYXR1cmUg
ZGVzY3JpYmVzIHRoZSBzY2FubmluZyBwcm9jZXNzIG9mCisvLyBUViBvdXRwdXQgZGV2aWNlcy4g
VG8gaW1wbGVtZW50IHRoaXMgd2UnZCBoYXZlIHRvIGFkZCBpbmZvcm1hdGlvbiB0byB0aGUgV2Vi
Q29yZSBwbGF0Zm9ybS4KKworLy8gRklYTUU6IHJlc29sdXRpb24sIG1pbi1yZXNvbHV0aW9uLCBt
YXgtcmVzb2x1dGlvbiBhcmUgbm90IGltcGxlbWVudGVkOiBBdCB0aGUgdGltZSB0aGlzCisvLyB3
YXMgb3JpZ2luYWxseSB3cml0dGVuIHRoZSBDU1MgcGFyc2VyICJkaWRuJ3Qgc2VlbSB0byBzdXBw
b3J0IENTU19ESU1FTlNJT04iLgogCiBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjogTWVkaWFRdWVyeUV2
YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBib29sIG1lZGlhRmVhdHVy
ZVJlc3VsdCkKICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVkTWVkaWFUeXBlKQogICAgICwgbV9m
cmFtZSgwKQogICAgICwgbV9zdHlsZSgwKQotICAgICwgbV9leHBSZXN1bHQobWVkaWFGZWF0dXJl
UmVzdWx0KQorICAgICwgbV9tZWRpYUZlYXR1cmVSZXN1bHQobWVkaWFGZWF0dXJlUmVzdWx0KQog
ewogfQogCkBAIC05Myw3ICs4Myw3IEBAIE1lZGlhUXVlcnlFdmFsdWF0b3I6OiBNZWRpYVF1ZXJ5
RXZhbHVhdG8KICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVkTWVkaWFUeXBlKQogICAgICwgbV9m
cmFtZSgwKQogICAgICwgbV9zdHlsZSgwKQotICAgICwgbV9leHBSZXN1bHQobWVkaWFGZWF0dXJl
UmVzdWx0KQorICAgICwgbV9tZWRpYUZlYXR1cmVSZXN1bHQobWVkaWFGZWF0dXJlUmVzdWx0KQog
ewogfQogCkBAIC0xMDEsMTEgKzkxLDcgQEAgTWVkaWFRdWVyeUV2YWx1YXRvcjo6IE1lZGlhUXVl
cnlFdmFsdWF0bwogICAgIDogbV9tZWRpYVR5cGUoYWNjZXB0ZWRNZWRpYVR5cGUpCiAgICAgLCBt
X2ZyYW1lKGZyYW1lKQogICAgICwgbV9zdHlsZShzdHlsZSkKLSAgICAsIG1fZXhwUmVzdWx0KGZh
bHNlKSAvLyBkb2Vzbid0IG1hdHRlciB3aGVuIHdlIGhhdmUgbV9mcmFtZSBhbmQgbV9zdHlsZQot
ewotfQotCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjp+TWVkaWFRdWVyeUV2YWx1YXRvcigpCisgICAg
LCBtX21lZGlhRmVhdHVyZVJlc3VsdChmYWxzZSkgLy8gSWdub3JlZCBpZiBib3RoIG1fZnJhbWUg
YW5kIG1fc3R5bGUgYXJlIG5vbi1udWxsLgogewogfQogCkBAIC0xMzYsMzUgKzEyMiwzMyBAQCBi
b29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWwoY29uc3QgTWVkCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgY29uc3QgVmVjdG9yPE1lZGlhUXVlcnkqPiYgcXVlcmllcyA9IG1lZGlhTGlz
dC0+bWVkaWFRdWVyaWVzKCk7Ci0gICAgaWYgKCFxdWVyaWVzLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7IC8vIGVtcHR5IHF1ZXJ5IGxpc3QgZXZhbHVhdGVzIHRvIHRydWUKIAotICAgIC8v
IGl0ZXJhdGUgb3ZlciBxdWVyaWVzLCBzdG9wIGlmIGFueSBvZiB0aGVtIGV2YWwgdG8gdHJ1ZSAo
T1Igc2VtYW50aWNzKQotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBxdWVyaWVzLnNpemUoKSAmJiAhcmVzdWx0OyArK2kpIHsKLSAgICAgICAgTWVk
aWFRdWVyeSogcXVlcnkgPSBxdWVyaWVzLmF0KGkpOworICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsK
IAotICAgICAgICBpZiAocXVlcnktPmlnbm9yZWQoKSkKKyAgICAvLyBJdGVyYXRlIG92ZXIgcXVl
cmllcyBhbmQgc3RvcCBpZiBhbnkgb2YgdGhlbSBldmFsIHRvIHRydWUgKCJvciIgc2VtYW50aWNz
KS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1ZXJpZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgTWVkaWFRdWVyeSYgcXVlcnkgPSAqcXVlcmllc1tpXTsKKworICAgICAgICBpZiAocXVl
cnkuaWdub3JlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKG1lZGlh
VHlwZU1hdGNoKHF1ZXJ5LT5tZWRpYVR5cGUoKSkpIHsKLSAgICAgICAgICAgIGNvbnN0IFZlY3Rv
cjxPd25QdHI8TWVkaWFRdWVyeUV4cD4gPiogZXhwcyA9IHF1ZXJ5LT5leHByZXNzaW9ucygpOwot
ICAgICAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIGV4cHJlc3Npb25zLCBzdG9wIGlmIGFueSBv
ZiB0aGVtIGV2YWwgdG8gZmFsc2UKLSAgICAgICAgICAgIC8vIChBTkQgc2VtYW50aWNzKQotICAg
ICAgICAgICAgc2l6ZV90IGogPSAwOwotICAgICAgICAgICAgZm9yICg7IGogPCBleHBzLT5zaXpl
KCk7ICsraikgewotICAgICAgICAgICAgICAgIGJvb2wgZXhwclJlc3VsdCA9IGV2YWwoZXhwcy0+
YXQoaikuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZVNlbGVjdG9yICYmIGV4cHMt
PmF0KGopLT5pc1ZpZXdwb3J0RGVwZW5kZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHN0eWxl
U2VsZWN0b3ItPmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChleHBzLT5hdChq
KS5nZXQoKSwgZXhwclJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFleHByUmVzdWx0KQor
ICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1lZGlhVHlwZU1hdGNoKHF1ZXJ5
Lm1lZGlhVHlwZSgpKSkgeworICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGV4cHJlc3Np
b25zIGFuZCBzdG9wIGlmIGFueSBvZiB0aGVtIGV2YWwgdG8gZmFsc2UgKCJhbmQiIHNlbWFudGlj
cykuCisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgY29uc3QgVmVjdG9y
PE93blB0cjxNZWRpYVF1ZXJ5RXhwPiA+JiBleHByZXNzaW9ucyA9IHF1ZXJ5LmV4cHJlc3Npb25z
KCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGV4cHJlc3Npb25zLnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZXZhbCgqZXhwcmVzc2lvbnNbal0p
OworICAgICAgICAgICAgICAgIGlmIChzdHlsZVNlbGVjdG9yICYmIGV4cHJlc3Npb25zW2pdLT5p
c1ZpZXdwb3J0RGVwZW5kZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3It
PmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdCgqZXhwcmVzc2lvbnNbal0sIHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIGFzc3Vt
ZSB0cnVlIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LAotICAgICAgICAgICAgLy8g
b3RoZXJ3aXNlIGFzc3VtZSBmYWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0cmlj
dG9yKHF1ZXJ5LT5yZXN0cmljdG9yKCksIGV4cHMtPnNpemUoKSA9PSBqKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnktPnJlc3RyaWN0
b3IoKSwgZmFsc2UpOworICAgICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnkucmVz
dHJpY3RvcigpLCByZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI2Myw3ICsyNDcsNyBAQCBzdGF0
aWMgYm9vbCBhc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsCiAgICAgICAgIGludCBoID0gMDsK
ICAgICAgICAgaW50IHYgPSAwOwogICAgICAgICBpZiAocGFyc2VBc3BlY3RSYXRpbyh2YWx1ZSwg
aCwgdikpCi0gICAgICAgICAgICByZXR1cm4gdiAhPSAwICYmIGNvbXBhcmVWYWx1ZSh3aWR0aCAq
IHYsIGhlaWdodCAqIGgsIG9wKTsKKyAgICAgICAgICAgIHJldHVybiB2ICYmIGNvbXBhcmVWYWx1
ZSh3aWR0aCAqIHYsIGhlaWdodCAqIGgsIG9wKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtMjc5LDcgKzI2Myw3IEBAIHN0YXRpYyBib29sIGRldmljZV9hc3BlY3RfcmF0aW9N
ZWRpYUZlYXQKICAgICAgICAgaW50IGggPSAwOwogICAgICAgICBpbnQgdiA9IDA7CiAgICAgICAg
IGlmIChwYXJzZUFzcGVjdFJhdGlvKHZhbHVlLCBoLCB2KSkKLSAgICAgICAgICAgIHJldHVybiB2
ICE9IDAgICYmIGNvbXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHNnLndpZHRoKCkpICogdiwg
c3RhdGljX2Nhc3Q8aW50PihzZy5oZWlnaHQoKSkgKiBoLCBvcCk7CisgICAgICAgICAgICByZXR1
cm4gdiAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihzZy53aWR0aCgpKSAqIHYsIHN0
YXRpY19jYXN0PGludD4oc2cuaGVpZ2h0KCkpICogaCwgb3ApOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC00OTksNjggKzQ4Myw1MSBAQCBzdGF0aWMgYm9vbCB0cmFuc2Zvcm1f
MmRNZWRpYUZlYXR1cmVFdmFsCiAKIHN0YXRpYyBib29sIHRyYW5zZm9ybV8zZE1lZGlhRmVhdHVy
ZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSosIEZyYW1lKiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4IG9wKQogewotICAgIGJvb2wgcmV0dXJuVmFsdWVJZk5vUGFyYW1ldGVyOwot
ICAgIGludCBoYXZlM2RSZW5kZXJpbmc7Ci0KLSNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKQogICAg
IGJvb2wgdGhyZWVERW5hYmxlZCA9IGZhbHNlOwotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyNpZiBFTkFCTEUoM0RfUkVOREVSSU5HKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVy
KCkpCiAgICAgICAgIHRocmVlREVuYWJsZWQgPSB2aWV3LT5jb21wb3NpdG9yKCktPmNhblJlbmRl
cjNEVHJhbnNmb3JtcygpOwotI2VuZGlmCi0KLSAgICByZXR1cm5WYWx1ZUlmTm9QYXJhbWV0ZXIg
PSB0aHJlZURFbmFibGVkOwotICAgIGhhdmUzZFJlbmRlcmluZyA9IHRocmVlREVuYWJsZWQgPyAx
IDogMDsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKLSAgICByZXR1cm5WYWx1ZUlm
Tm9QYXJhbWV0ZXIgPSBmYWxzZTsKLSAgICBoYXZlM2RSZW5kZXJpbmcgPSAwOwogI2VuZGlmCi0K
ICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgZmxvYXQgbnVtYmVyOwotICAgICAgICByZXR1cm4g
bnVtYmVyVmFsdWUodmFsdWUsIG51bWJlcikgJiYgY29tcGFyZVZhbHVlKGhhdmUzZFJlbmRlcmlu
Zywgc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpLCBvcCk7CisgICAgICAgIHJldHVybiBudW1iZXJW
YWx1ZSh2YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih0aHJl
ZURFbmFibGVkKSwgc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpLCBvcCk7CiAgICAgfQotICAgIHJl
dHVybiByZXR1cm5WYWx1ZUlmTm9QYXJhbWV0ZXI7CisgICAgcmV0dXJuIHRocmVlREVuYWJsZWQ7
CiB9CiAKIHN0YXRpYyBib29sIHZpZXdfbW9kZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZh
bHVlLCBSZW5kZXJTdHlsZSosIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQog
ewotICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgQVNTRVJUX1VOVVNFRChvcCwgb3AgPT0gTm9Q
cmVmaXgpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVy
biBQYWdlOjpzdHJpbmdUb1ZpZXdNb2RlKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpLT5nZXRTdHJpbmdWYWx1ZSgpKSA9PSBmcmFtZS0+cGFnZSgpLT52aWV3TW9kZSgpOwog
fQogCi1zdGF0aWMgdm9pZCBjcmVhdGVGdW5jdGlvbk1hcCgpCitzdGF0aWMgRnVuY3Rpb25NYXAq
IGNyZWF0ZUZ1bmN0aW9uTWFwKCkKIHsKLSAgICAvLyBDcmVhdGUgdGhlIHRhYmxlLgotICAgIGdG
dW5jdGlvbk1hcCA9IG5ldyBGdW5jdGlvbk1hcDsKKyAgICBGdW5jdGlvbk1hcCogZnVuY3Rpb25N
YXAgPSBuZXcgRnVuY3Rpb25NYXA7CiAjZGVmaW5lIEFERF9UT19GVU5DVElPTk1BUChuYW1lLCBz
dHIpICBcCi0gICAgZ0Z1bmN0aW9uTWFwLT5zZXQobmFtZSMjTWVkaWFGZWF0dXJlLmltcGwoKSwg
bmFtZSMjTWVkaWFGZWF0dXJlRXZhbCk7CisgICAgZnVuY3Rpb25NYXAtPnNldChuYW1lIyNNZWRp
YUZlYXR1cmUuaW1wbCgpLCBuYW1lIyNNZWRpYUZlYXR1cmVFdmFsKTsKICAgICBDU1NfTUVESUFR
VUVSWV9OQU1FU19GT1JfRUFDSF9NRURJQUZFQVRVUkUoQUREX1RPX0ZVTkNUSU9OTUFQKTsKICN1
bmRlZiBBRERfVE9fRlVOQ1RJT05NQVAKKyAgICByZXR1cm4gZnVuY3Rpb25NYXA7CiB9CiAKLWJv
b2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbChjb25zdCBNZWRpYVF1ZXJ5RXhwKiBleHByKSBj
b25zdAorYm9vbCBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpldmFsKGNvbnN0IE1lZGlhUXVlcnlFeHAm
IGV4cHJlc3Npb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX3N0eWxlKQotICAg
ICAgICByZXR1cm4gbV9leHBSZXN1bHQ7CisgICAgICAgIHJldHVybiBtX21lZGlhRmVhdHVyZVJl
c3VsdDsKIAotICAgIGlmICghZXhwci0+aXNWYWxpZCgpKQorICAgIGlmICghZXhwcmVzc2lvbi5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghZ0Z1bmN0aW9uTWFw
KQotICAgICAgICBjcmVhdGVGdW5jdGlvbk1hcCgpOworICAgIHN0YXRpYyBGdW5jdGlvbk1hcCog
ZnVuY3Rpb25NYXAgPSBjcmVhdGVGdW5jdGlvbk1hcCgpOworICAgIE1lZGlhRmVhdHVyZUV2YWx1
YXRpb25GdW5jdGlvbiBmdW5jdGlvbiA9IGZ1bmN0aW9uTWFwLT5nZXQoZXhwcmVzc2lvbi5tZWRp
YUZlYXR1cmUoKS5pbXBsKCkpOwogCi0gICAgLy8gY2FsbCB0aGUgbWVkaWEgZmVhdHVyZSBldmFs
dWF0aW9uIGZ1bmN0aW9uLiBBc3N1bWUgbm8gcHJlZml4Ci0gICAgLy8gYW5kIGxldCB0cmFtcG9s
aW5lIGZ1bmN0aW9ucyBvdmVycmlkZSB0aGUgcHJlZml4IGlmIHByZWZpeCBpcwotICAgIC8vIHVz
ZWQKLSAgICBFdmFsRnVuYyBmdW5jID0gZ0Z1bmN0aW9uTWFwLT5nZXQoZXhwci0+bWVkaWFGZWF0
dXJlKCkuaW1wbCgpKTsKLSAgICBpZiAoZnVuYykKLSAgICAgICAgcmV0dXJuIGZ1bmMoZXhwci0+
dmFsdWUoKSwgbV9zdHlsZS5nZXQoKSwgbV9mcmFtZSwgTm9QcmVmaXgpOwotCi0gICAgcmV0dXJu
IGZhbHNlOworICAgIC8vIFN0YXJ0IHdpdGggbm8gcHJlZml4OiBTb21lIHRyYW1wb2xpbmUgZnVu
Y3Rpb25zIGFkZCB0aGUgcHJlZml4IGFuZCBjYWxsIG90aGVyIG1lZGlhIGZlYXR1cmUgZnVuY3Rp
b25zLgorICAgIHJldHVybiBmdW5jdGlvbiAmJiBmdW5jdGlvbihleHByZXNzaW9uLnZhbHVlKCks
IG1fc3R5bGUuZ2V0KCksIG1fZnJhbWUsIE5vUHJlZml4KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAkocmV2aXNpb24g
MTAzNjc5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNjMgKzI5LDUyIEBACiAjZGVmaW5lIE1lZGlhUXVlcnlFdmFsdWF0
b3JfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKIGNsYXNzIENTU1N0eWxlU2VsZWN0b3I7CiBj
bGFzcyBGcmFtZTsKLWNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgTWVkaWFMaXN0OwogY2xhc3Mg
TWVkaWFRdWVyeUV4cDsKIAotLyoqCi0gKiBDbGFzcyB0aGF0IGV2YWx1YXRlcyBjc3MgbWVkaWEg
cXVlcmllcyBhcyBkZWZpbmVkIGluCi0gKiBDU1MzIE1vZHVsZSAiTWVkaWEgUXVlcmllcyIgKGh0
dHA6Ly93d3cudzMub3JnL1RSL2NzczMtbWVkaWFxdWVyaWVzLykKLSAqIFNwZWNpYWwgY29uc3Ry
dWN0b3JzIGFyZSBuZWVkZWQsIGlmIHNpbXBsZSBtZWRpYSBxdWVyaWVzIGFyZSB0byBiZQotICog
ZXZhbHVhdGVkIHdpdGhvdXQga25vd2xlZGdlIG9mIHRoZSBtZWRpdW0gZmVhdHVyZXMuIFRoaXMg
Y2FuIGhhcHBlbgotICogZm9yIGV4YW1wbGUgd2hlbiBwYXJzaW5nIFVBIHN0eWxlc2hlZXRzLCBp
ZiBldmFsdWF0aW9uIGlzIGRvbmUKLSAqIHJpZ2h0IGFmdGVyIHBhcnNpbmcuCi0gKgotICogdGhl
IGJvb2xlYW4gcGFyYW1ldGVyIGlzIHVzZWQgdG8gYXBwcm94aW1hdGUgcmVzdWx0cyBvZiBldmFs
dWF0aW9uLCBpZgotICogdGhlIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgYXJlIG5vdCBrbm93bi4g
VGhpcyBjYW4gYmUgdXNlZCB0byBwcnVuZSB0aGUgbG9hZGluZwotICogb2Ygc3R5bGVzaGVldHMg
dG8gb25seSB0aG9zZSB3aGljaCBhcmUgcHJvYmFibGUgdG8gbWF0Y2guCi0gKi8KKy8vIENsYXNz
IHRoYXQgZXZhbHVhdGVzIENTUyBtZWRpYSBxdWVyaWVzIGFzIGRlZmluZWQgaW4gQ1NTMyBNb2R1
bGUgIk1lZGlhIFF1ZXJpZXMiLgorLy8KKy8vIFNwZWNpYWwgY29uc3RydWN0b3JzIGFyZSBzdXBw
bGllZCBzbyB0aGF0IHNpbXBsZSBtZWRpYSBxdWVyaWVzIGNhbiB0byBiZQorLy8gZXZhbHVhdGVk
IHdpdGhvdXQga25vd2xlZGdlIG9mIHRoZSBtZWRpdW0gZmVhdHVyZXMuIFRoaXMgaXMgdXNlZCwg
Zm9yIGV4YW1wbGUsCisvLyB3aGVuIHBhcnNpbmcgdXNlciBhZ2VudCBzdHlsZXNoZWV0cy4KKy8v
CisvLyBUaGUgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGlzIHVzZWQgdG8g
YXBwcm94aW1hdGUgcmVzdWx0cyBvZiBldmFsdWF0aW9uLAorLy8gaWYgdGhlIGRldmljZSBjaGFy
YWN0ZXJpc3RpY3MgYXJlIG5vdCBrbm93bi4gVGhpcyBjYW4gYmUgdXNlZCB0byBwcnVuZSB0aGUg
bG9hZGluZworLy8gb2Ygc3R5bGVzaGVldHMgdG8gcmVtb3ZlIHRob3NlIHRoYXQgZGVmaW5pdGVs
eSB3b24ndCBtYXRjaC4KKwogY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvciB7CiAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKE1lZGlhUXVlcnlFdmFsdWF0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICAvKiogQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVz
IG9ubHkgc2ltcGxlIG1lZGlhIHF1ZXJpZXMKLSAgICAgKiAgRXZhbHVhdG9yIHJldHVybnMgdHJ1
ZSBmb3IgImFsbCIsIGFuZCByZXR1cm5zIHZhbHVlIG9mIFxtZWRpYUZlYXR1cmVSZXN1bHQKLSAg
ICAgKiAgZm9yIGFueSBtZWRpYSBmZWF0dXJlcwotICAgICAqLwotICAgIE1lZGlhUXVlcnlFdmFs
dWF0b3IoYm9vbCBtZWRpYUZlYXR1cmVSZXN1bHQgPSBmYWxzZSk7Ci0KLSAgICAvKiogQ3JlYXRl
cyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIG9ubHkgc2ltcGxlIG1lZGlhIHF1ZXJpZXMKLSAg
ICAgKiAgRXZhbHVhdG9yICByZXR1cm5zIHRydWUgZm9yIGFjY2VwdGVkTWVkaWFUeXBlIGFuZCBy
ZXR1cm5zIHZhbHVlIG9mIFxtZWRpYWZlYXR1cmVSZXN1bHQKLSAgICAgKiAgZm9yIGFueSBtZWRp
YSBmZWF0dXJlcwotICAgICAqLworICAgIC8vIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1
YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBxdWVyaWVzLgorICAgIC8vIEV2YWx1YXRvciByZXR1cm5z
IHRydWUgZm9yIGFjY2VwdGVkTWVkaWFUeXBlIGFuZCB1c2UgbWVkaWFGZWF0dXJlUmVzdWx0IGZv
ciBhbnkgbWVkaWEgZmVhdHVyZXMuCiAgICAgTWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBTdHJp
bmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBib29sIG1lZGlhRmVhdHVyZVJlc3VsdCA9IGZhbHNlKTsK
ICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IGNoYXIqIGFjY2VwdGVkTWVkaWFUeXBlLCBi
b29sIG1lZGlhRmVhdHVyZVJlc3VsdCA9IGZhbHNlKTsKIAotICAgIC8qKiBDcmVhdGVzIGV2YWx1
YXRvciB3aGljaCBldmFsdWF0ZXMgZnVsbCBtZWRpYSBxdWVyaWVzCi0gICAgICovCisgICAgLy8g
Q3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIGZ1bGwgbWVkaWEgcXVlcmllcy4KICAg
ICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZy
YW1lKiwgUmVuZGVyU3R5bGUqKTsKIAotICAgIH5NZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7Ci0KICAg
ICBib29sIG1lZGlhVHlwZU1hdGNoKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlVG9NYXRjaCkgY29u
c3Q7CiAgICAgYm9vbCBtZWRpYVR5cGVNYXRjaFNwZWNpZmljKGNvbnN0IGNoYXIqIG1lZGlhVHlw
ZVRvTWF0Y2gpIGNvbnN0OwogCi0gICAgLyoqIEV2YWx1YXRlcyBhIGxpc3Qgb2YgbWVkaWEgcXVl
cmllcyAqLworICAgIC8vIEV2YWx1YXRlcyBhIGxpc3Qgb2YgbWVkaWEgcXVlcmllcy4KICAgICBi
b29sIGV2YWwoY29uc3QgTWVkaWFMaXN0KiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwKSBjb25zdDsK
IAotICAgIC8qKiBFdmFsdWF0ZXMgbWVkaWEgcXVlcnkgc3ViZXhwcmVzc2lvbiwgaWUgImFuZCAo
bWVkaWEtZmVhdHVyZTogdmFsdWUpIiBwYXJ0ICovCi0gICAgYm9vbCBldmFsKGNvbnN0IE1lZGlh
UXVlcnlFeHAqKSBjb25zdDsKKyAgICAvLyBFdmFsdWF0ZXMgbWVkaWEgcXVlcnkgc3ViZXhwcmVz
c2lvbiwgaS5lLiAiYW5kIChtZWRpYS1mZWF0dXJlOiB2YWx1ZSkiIHBhcnQuCisgICAgYm9vbCBl
dmFsKGNvbnN0IE1lZGlhUXVlcnlFeHAmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9tZWRpYVR5cGU7CiAgICAgRnJhbWUqIG1fZnJhbWU7IC8vIG5vdCBvd25lZAogICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKLSAgICBib29sIG1fZXhwUmVzdWx0OworICAgIGJvb2wg
bV9tZWRpYUZlYXR1cmVSZXN1bHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZQorCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120556</attachid>
            <date>2011-12-26 08:32:48 -0800</date>
            <delta_ts>2012-05-27 23:03:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75223-20111226083247.patch</filename>
            <type>text/plain</type>
            <size>25258</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzY4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDExLTEyLTI2ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgQ1NTU3R5bGVTZWxlY3Rv
ciBzbyBpdCBkb2VzIG5vdCBrZWVwIGEgdmVjdG9yIG9mIE1lZGlhUXVlcnlSZXN1bHQgcG9pbnRl
cnMgdGhhdCBuZWVkIHRvIGJlIGRlbGV0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc1MjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6IE1vdmVkIHRoZSBN
ZWRpYVF1ZXJ5UmVzdWx0IGNsYXNzIGludG8gdGhpcyBmaWxlCisgICAgICAgIGFuZCBtYWRlIGl0
IGEgc3RydWN0dXJlIHJhdGhlciB0aGFuIGEgY2xhc3MuCisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3Rvcik6IFJlbW92ZWQgdGhlIGNhbGwgdG8KKyAg
ICAgICAgZGVsZXRlQWxsVmFsdWVzLCB1bm5lZWRlZCBub3cgdGhhdCB3ZSB1c2UgYSB2ZWN0b3Ig
b2YgdmFsdWVzLCBub3QgcG9pbnRlcnMuCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQpOiBVcGRhdGVkCisgICAg
ICAgIHRvIGtlZXAgdGhlIG1lZGlhIHF1ZXJ5IGluIHRoZSB2ZWN0b3IuCisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UpOiBVcGRhdGVk
IGZvciBhYm92ZQorICAgICAgICBjaGFuZ2VzIGFuZCB0byB1c2Ugc2l6ZV90IGNvbnNpc3RlbnRs
eS4KKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6IFJlbW92ZWQgbWFueSB1bm5l
ZWRlZCBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBjbGFzc2VzLgorICAgICAgICBSZW1vdmVkIG5v
dy11bm5lZWRlZCBpbmNsdWRlIG9mIE1lZGlhUXVlcnlFeHAuaC4gUmVwbGFjZWQgTWVkaWFRdWVy
eVJlc3VsdAorICAgICAgICBkZWZpbml0aW9uIHdpdGggYSBmb3J3YXJkIGRlY2xhcmF0aW9uLiBD
aGFuZ2VkIGFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdAorICAgICAgICB0byB0
YWtlIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLiBDaGFuZ2VkIG1fdmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cworICAgICAgICB0byBiZSBhIHZlY3RvciBvZiB2YWx1
ZXMgcmF0aGVyIHRoYSBvZiBwb2ludGVycy4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5LmNw
cDogUmVtb3ZlZCBzb21lIGNvbW1lbnRzIHRoYXQgcG9pbnRlZCB0byBDU1MgZG9jdW1lbnRzLgor
ICAgICAgICBUaGVyZSBpcyBubyBndWFyYW50dGUgdGhpcyBsaW5rcyB3aWxsIGJlIHZhbGlkIG92
ZXIgdGltZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnk6Ok1lZGlhUXVlcnkpOiBSZXdy
b3RlIGZvciBjbGFyaXR5LCBjb2Rpbmcgc3R5bGUsIGFuZAorICAgICAgICBzaW1wbGljaXR5Lgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6Y3NzVGV4dCk6IFVwZGF0ZWQgZm9yIGNoYW5n
ZSB0byBkYXRhIG1lbWJlciBuYW1lLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuaDogUmVt
b3ZlZCBkZWNsYXJhdGlvbiBvZiB1bm5lZWRlZCBkZXN0cnVjdG9yLiBSZW1vdmVkIG5vbi1oZWxw
ZnVsCisgICAgICAgIGFyZ3VtZW50IG5hbWUgImV4cHJzIi4gQ2hhbmdlZCBleHByZXNzaW9ucyBm
dW5jdGlvbiB0byByZXR1cm4gYSByZWZlcmVuY2UgaW5zdGVhZCBvZgorICAgICAgICBhIHBvaW50
ZXIuIENoYW5nZWQgbWVkaWFUeXBlIGFuZCBjc3NUZXh0IGZ1bmN0aW9ucyB0byByZXR1cm4gYSBy
ZWZlcmVuY2UuIFJlbmFtZWQKKyAgICAgICAgbV9zZXJpYWxpemF0aW9uQ2FjaGUgdG8gbV9zZXJp
YWxpemVkUXVlcnkuCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6IFJl
bmFtZWQgRXZhbEZ1bmMgdG8gTWVkaWFGZWF0dXJlRXZhbHVhdGlvbkZ1bmN0aW9uLgorICAgICAg
ICBCcm9rZSBhIEZJWE1FIGludG8gdGhyZWUgYW5kIHJld29yZGVkIGZvciBjbGFyaXR5LgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeUV2YWx1YXRvcik6IFVwZGF0ZWQgZm9yIG5hbWUgY2hh
bmdlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWwpOiBSZXdy
b3RlIHRoaXMgZm9yIGNsYXJpdHkgYW5kIHRvIHJlZ3VsYXJpemUKKyAgICAgICAgdGhlIGxvZ2lj
IGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbCk6
IEdvdCByaWQgb2YgYSAhPSAwIHRoYXQgaXMgY29udHJhcnkgdG8gdGhlCisgICAgICAgIG5vcm1h
bCBXZWJLaXQgc3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VfYXNwZWN0X3JhdGlvTWVk
aWFGZWF0dXJlRXZhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtXzNkTWVk
aWFGZWF0dXJlRXZhbCk6IEZpeGVkIG1hbmdsZWQgI2lmIHRoYXQgd2FzIGhlcmUuCisgICAgICAg
IChXZWJDb3JlOjp2aWV3X21vZGVNZWRpYUZlYXR1cmVFdmFsKTogUmVwbGFjZWQgVU5VU0VEX1BB
UkFNIHVzYWdlIHdpdGggQVNTRVJUX1VOVVNFRC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZ1
bmN0aW9uTWFwKTogQ2hhbmdlZCB0aGlzIHNvIGl0IHJldHVybnMgdGhlIG1hcCBzbyB3ZSBjYW4g
dXNlIGEKKyAgICAgICAgY2xlYW5lciBzdHlsZSBpbiB0aGUgY2FsbGVyLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbCk6IFVwZGF0ZWQgdG8gdGFrZSBhIHJlZmVy
ZW5jZSBhbmQgaW1wcm92ZWQgdGhlCisgICAgICAgIGNvbW1lbnRzIGFuZCBjb2Rpbmcgc3R5bGUg
YSBiaXQuCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oOiBVcGRhdGVkIGNv
bW1lbnQgc3R5bGUuIFJlbW92ZWQgdW51c2VkIGNvbnN0cnVjdG9yLgorICAgICAgICBSZW1vdmVk
IHVubmVlZGVkIGRlc3RydWN0b3IgZGVjbGFyYXRpb24uIFJlbmFtZWQgbV9leHBSZXN1bHQgdG8g
bV9tZWRpYUZlYXR1cmVSZXN1bHQuCisKIDIwMTEtMTItMjYgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBtdXRhdGlvbiBvYnNlcnZlciBidWlsZCBhZnRlciBk
aWRNb3ZlVG9OZXdEb2N1bWVudCBjaGFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDEwMzY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQAogI2lu
Y2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5o
IgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKyNpbmNsdWRlICJNZWRpYVF1ZXJ5
RXhwLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VHcm91cC5oIgpAQCAtMTM3LDYgKzEzOCwxNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK3N0cnVjdCBNZWRpYVF1ZXJ5
UmVzdWx0IHsKKyAgICBNZWRpYVF1ZXJ5RXhwIGV4cHJlc3Npb247CisgICAgYm9vbCByZXN1bHQ7
CisgICAgCisgICAgTWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwJiBleHByZXNz
aW9uLCBib29sIHJlc3VsdCkKKyAgICAgICAgOiBleHByZXNzaW9uKGV4cHJlc3Npb24pCisgICAg
ICAgICwgcmVzdWx0KHJlc3VsdCkKKyAgICB7CisgICAgfSAgICAKK307CisgICAgCiAjZGVmaW5l
IEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQpIHsgXAogICAgIG1f
c3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBcCkBAIC00NjEsNyArNDcz
LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRLZXlmcmFtZVN0eWxlKAogQ1NTU3R5bGVT
ZWxlY3Rvcjo6fkNTU1N0eWxlU2VsZWN0b3IoKQogewogICAgIG1fZm9udFNlbGVjdG9yLT5jbGVh
ckRvY3VtZW50KCk7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fdmlld3BvcnREZXBlbmRlbnRNZWRp
YVF1ZXJ5UmVzdWx0cyk7CiB9CiAKIENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpGZWF0dXJl
cygpCkBAIC00NzAyLDE2ICs0NzEzLDE2IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6aGFzU2Vs
ZWN0b3JGb3JBdHQKICAgICByZXR1cm4gbV9mZWF0dXJlcy5hdHRyc0luUnVsZXMuY29udGFpbnMo
YXR0cm5hbWUuaW1wbCgpKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRWaWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwciwgYm9v
bCByZXN1bHQpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZFZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwJiBleHByZXNzaW9uLCBib29sIHJlc3Vs
dCkKIHsKLSAgICBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuYXBwZW5kKG5l
dyBNZWRpYVF1ZXJ5UmVzdWx0KCpleHByLCByZXN1bHQpKTsKKyAgICBtX3ZpZXdwb3J0RGVwZW5k
ZW50TWVkaWFRdWVyeVJlc3VsdHMuYXBwZW5kKE1lZGlhUXVlcnlSZXN1bHQoZXhwcmVzc2lvbiwg
cmVzdWx0KSk7CiB9CiAKIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6YWZmZWN0ZWRCeVZpZXdwb3J0
Q2hhbmdlKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBzID0gbV92aWV3cG9ydERlcGVuZGVudE1l
ZGlhUXVlcnlSZXN1bHRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgczsg
aSsrKSB7Ci0gICAgICAgIGlmIChtX21lZGl1bS0+ZXZhbCgmbV92aWV3cG9ydERlcGVuZGVudE1l
ZGlhUXVlcnlSZXN1bHRzW2ldLT5tX2V4cHJlc3Npb24pICE9IG1fdmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9yZXN1bHQpCisgICAgc2l6ZV90IHNpemUgPSBtX3ZpZXdw
b3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGlmIChtX21lZGl1bS0+ZXZhbChtX3ZpZXdw
b3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0uZXhwcmVzc2lvbikgIT0gbV92aWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLnJlc3VsdCkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDEwMzY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKIAog
I2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgotI2luY2x1ZGUgIk1l
ZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNlbGVj
dG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0zNSw0MiArMzQsMzEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIEVTbWFydE1pbmltdW1Gb3JGb250U2l6
ZSB7IERvTm90VXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUsIFVzZVNtYXJ0TWluaW11bUZvckZv
bnRGaXplIH07Ci0KIGNsYXNzIENTU0ZvbnRTZWxlY3RvcjsKIGNsYXNzIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTUGFnZVJ1bGU7CiBjbGFzcyBDU1NQcmltaXRpdmVWYWx1
ZTsKLWNsYXNzIENTU1Byb3BlcnR5OwotY2xhc3MgQ1NTRm9udEZhY2U7Ci1jbGFzcyBDU1NGb250
RmFjZVJ1bGU7CiBjbGFzcyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOwogY2xhc3MgQ1NTSW1hZ2VW
YWx1ZTsKIGNsYXNzIENTU1J1bGVMaXN0OwotY2xhc3MgQ1NTU2VsZWN0b3I7CiBjbGFzcyBDU1NT
dHlsZUFwcGx5UHJvcGVydHk7Ci1jbGFzcyBDU1NTdHlsZVJ1bGU7CiBjbGFzcyBDU1NTdHlsZVNo
ZWV0OwogY2xhc3MgQ1NTVmFsdWU7CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OwotY2xhc3Mg
RnJhbWU7Ci1jbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBLVVJMOwogY2xhc3MgS2V5ZnJhbWVMaXN0
OwogY2xhc3MgS2V5ZnJhbWVWYWx1ZTsKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CitjbGFz
cyBNZWRpYVF1ZXJ5RXhwOwogY2xhc3MgTm9kZTsKIGNsYXNzIFJlbmRlclJlZ2lvbjsKIGNsYXNz
IFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsKLWNsYXNzIFNldHRpbmdzOwogY2xhc3MgU3R5bGVJ
bWFnZTsKIGNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwogY2xhc3MgU3R5bGVTaGFkZXI7Ci1jbGFz
cyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBTdHlsZWRFbGVtZW50
OwogY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOwpAQCAtNzksMTkgKzY3LDEwIEBAIGNsYXNz
IFdlYktpdENTU0ZpbHRlclZhbHVlOwogY2xhc3MgV2ViS2l0Q1NTUmVnaW9uUnVsZTsKIGNsYXNz
IFdlYktpdENTU1NoYWRlclZhbHVlOwogCi1jbGFzcyBNZWRpYVF1ZXJ5UmVzdWx0IHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVF1ZXJ5UmVzdWx0KTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgTWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhw
JiBleHByLCBib29sIHJlc3VsdCkKLSAgICAgICAgOiBtX2V4cHJlc3Npb24oZXhwcikKLSAgICAg
ICAgLCBtX3Jlc3VsdChyZXN1bHQpCi0gICAgewotICAgIH0KLQotICAgIE1lZGlhUXVlcnlFeHAg
bV9leHByZXNzaW9uOwotICAgIGJvb2wgbV9yZXN1bHQ7Ci19Oworc3RydWN0IE1lZGlhUXVlcnlS
ZXN1bHQ7CiAKK2VudW0gRVNtYXJ0TWluaW11bUZvckZvbnRTaXplIHsgRG9Ob3RVc2VTbWFydE1p
bmltdW1Gb3JGb250U2l6ZSwgVXNlU21hcnRNaW5pbXVtRm9yRm9udEZpemUgfTsKKyAgICAKIC8v
IFRoaXMgY2xhc3Mgc2VsZWN0cyBhIFJlbmRlclN0eWxlIGZvciBhIGdpdmVuIGVsZW1lbnQgYmFz
ZWQgb24gYSBjb2xsZWN0aW9uIG9mIHN0eWxlc2hlZXRzLgogY2xhc3MgQ1NTU3R5bGVTZWxlY3Rv
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTU3R5bGVTZWxlY3Rvcik7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwpAQCAtMTg5LDcgKzE2OCw3IEBAIHB1YmxpYzoKIAogICAgIENTU0Zv
bnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2VsZWN0b3Iu
Z2V0KCk7IH0KIAotICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0
KGNvbnN0IE1lZGlhUXVlcnlFeHAqLCBib29sIHJlc3VsdCk7CisgICAgdm9pZCBhZGRWaWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCYsIGJvb2wgcmVz
dWx0KTsKIAogICAgIGJvb2wgYWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29uc3Q7CiAKQEAg
LTQwMCw3ICszNzksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsKIAog
ICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwotICAgIFZlY3RvcjxN
ZWRpYVF1ZXJ5UmVzdWx0Kj4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwor
ICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0PiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
eVJlc3VsdHM7CiAKICAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOwogICAg
IGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5LmNwcAkocmV2aXNpb24gMTAzNjg0KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3Nlcmlh
bGl6ZS1hLW1lZGlhLXF1ZXJ5CiBTdHJpbmcgTWVkaWFRdWVyeTo6c2VyaWFsaXplKCkgY29uc3QK
IHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKQEAgLTc1LDUxICs3NCw0NyBAQCBzdGF0aWMg
Ym9vbCBleHByZXNzaW9uQ29tcGFyZShjb25zdCBPd25QCiB9CiAKIAotTWVkaWFRdWVyeTo6TWVk
aWFRdWVyeShSZXN0cmljdG9yIHIsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCBQYXNzT3duUHRy
PFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeUV4cD4gPiA+IGV4cHJzKQotICAgIDogbV9yZXN0cmlj
dG9yKHIpCitNZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5KFJlc3RyaWN0b3IgcmVzdHJpY3RvciwgY29u
c3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8RXhwcmVzc2lvblZlY3Rvcj4gZXhwcmVz
c2lvbnMpCisgICAgOiBtX3Jlc3RyaWN0b3IocmVzdHJpY3RvcikKICAgICAsIG1fbWVkaWFUeXBl
KG1lZGlhVHlwZS5sb3dlcigpKQotICAgICwgbV9leHByZXNzaW9ucyhleHBycykKKyAgICAsIG1f
ZXhwcmVzc2lvbnMoZXhwcmVzc2lvbnMpCiAgICAgLCBtX2lnbm9yZWQoZmFsc2UpCiB7CiAgICAg
aWYgKCFtX2V4cHJlc3Npb25zKSB7Ci0gICAgICAgIG1fZXhwcmVzc2lvbnMgPSBhZG9wdFB0cihu
ZXcgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5RXhwPiA+KTsKKyAgICAgICAgbV9leHByZXNzaW9u
cyA9IGFkb3B0UHRyKG5ldyBFeHByZXNzaW9uVmVjdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIG5vbkNvcHlpbmdTb3J0KG1fZXhwcmVzc2lvbnMtPmJlZ2luKCksIG1fZXhwcmVz
c2lvbnMtPmVuZCgpLCBleHByZXNzaW9uQ29tcGFyZSk7CisgICAgRXhwcmVzc2lvblZlY3RvciYg
dmVjdG9yID0gKm1fZXhwcmVzc2lvbnM7CisgICAgCisgICAgbm9uQ29weWluZ1NvcnQodmVjdG9y
LmJlZ2luKCksIHZlY3Rvci5lbmQoKSwgZXhwcmVzc2lvbkNvbXBhcmUpOworCisgICAgLy8gUmVt
b3ZlIGFsbCBkdXBsaWNhdGVkIGV4cHJlc3Npb25zLgorICAgIFN0cmluZyBwcmV2aW91c1Nlcmlh
bGl6ZWRFeHByZXNzaW9uOworICAgIGZvciAoc2l6ZV90IGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpOyAp
IHsKKyAgICAgICAgLS1pOwogCi0gICAgLy8gcmVtb3ZlIGFsbCBkdXBsaWNhdGVkIGV4cHJlc3Np
b25zCi0gICAgU3RyaW5nIGtleTsKLSAgICBmb3IgKGludCBpID0gbV9leHByZXNzaW9ucy0+c2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLQotICAgICAgICAvLyBpZiBub3QgYWxsIG9mIHRoZSBl
eHByZXNzaW9ucyBpcyB2YWxpZCB0aGUgbWVkaWEgcXVlcnkgbXVzdCBiZSBpZ25vcmVkLgorICAg
ICAgICAvLyBJZiBub3QgYWxsIG9mIHRoZSBleHByZXNzaW9ucyBhcmUgdmFsaWQsIHRoZSBtZWRp
YSBxdWVyeSBtdXN0IGJlIGlnbm9yZWQuCiAgICAgICAgIGlmICghbV9pZ25vcmVkKQotICAgICAg
ICAgICAgbV9pZ25vcmVkID0gIW1fZXhwcmVzc2lvbnMtPmF0KGkpLT5pc1ZhbGlkKCk7CisgICAg
ICAgICAgICBtX2lnbm9yZWQgPSAhdmVjdG9yW2ldLT5pc1ZhbGlkKCk7CiAKLSAgICAgICAgaWYg
KG1fZXhwcmVzc2lvbnMtPmF0KGkpLT5zZXJpYWxpemUoKSA9PSBrZXkpCi0gICAgICAgICAgICBt
X2V4cHJlc3Npb25zLT5yZW1vdmUoaSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGtleSA9
IG1fZXhwcmVzc2lvbnMtPmF0KGkpLT5zZXJpYWxpemUoKTsKKyAgICAgICAgU3RyaW5nIHNlcmlh
bGl6ZWRFeHByZXNzaW9uID0gdmVjdG9yW2ldLT5zZXJpYWxpemUoKTsKKyAgICAgICAgaWYgKHNl
cmlhbGl6ZWRFeHByZXNzaW9uID09IHByZXZpb3VzU2VyaWFsaXplZEV4cHJlc3Npb24pCisgICAg
ICAgICAgICB2ZWN0b3IucmVtb3ZlKGkpOworICAgICAgICBwcmV2aW91c1NlcmlhbGl6ZWRFeHBy
ZXNzaW9uID0gc2VyaWFsaXplZEV4cHJlc3Npb247CiAgICAgfQogfQogCi1NZWRpYVF1ZXJ5Ojp+
TWVkaWFRdWVyeSgpCi17Ci19Ci0KLS8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNj
b21wYXJlLW1lZGlhLXF1ZXJpZXMKIGJvb2wgTWVkaWFRdWVyeTo6b3BlcmF0b3I9PShjb25zdCBN
ZWRpYVF1ZXJ5JiBvdGhlcikgY29uc3QKIHsKICAgICByZXR1cm4gY3NzVGV4dCgpID09IG90aGVy
LmNzc1RleHQoKTsKIH0KIAotLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3Nlcmlh
bGl6ZS1hLWxpc3Qtb2YtbWVkaWEtcXVlcmllcwotU3RyaW5nIE1lZGlhUXVlcnk6OmNzc1RleHQo
KSBjb25zdAorY29uc3QgU3RyaW5nJiBNZWRpYVF1ZXJ5Ojpjc3NUZXh0KCkgY29uc3QKIHsKLSAg
ICBpZiAobV9zZXJpYWxpemF0aW9uQ2FjaGUuaXNOdWxsKCkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8
TWVkaWFRdWVyeSo+KHRoaXMpLT5tX3NlcmlhbGl6YXRpb25DYWNoZSA9IHNlcmlhbGl6ZSgpOwot
Ci0gICAgcmV0dXJuIG1fc2VyaWFsaXphdGlvbkNhY2hlOworICAgIGlmIChtX3NlcmlhbGl6ZWRR
dWVyeS5pc051bGwoKSkKKyAgICAgICAgY29uc3RfY2FzdDxNZWRpYVF1ZXJ5Kj4odGhpcyktPm1f
c2VyaWFsaXplZFF1ZXJ5ID0gc2VyaWFsaXplKCk7CisgICAgcmV0dXJuIG1fc2VyaWFsaXplZFF1
ZXJ5OwogfQogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeS5oCShyZXZpc2lvbiAxMDM2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFRdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyMCArNDAsMTggQEAgY2xhc3MgTWVkaWFR
dWVyeUV4cDsKIGNsYXNzIE1lZGlhUXVlcnkgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1l
ZGlhUXVlcnkpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBlbnVtIFJl
c3RyaWN0b3IgewotICAgICAgICBPbmx5LCBOb3QsIE5vbmUKLSAgICB9OworICAgIGVudW0gUmVz
dHJpY3RvciB7IE9ubHksIE5vdCwgTm9uZSB9OwogCiAgICAgdHlwZWRlZiBWZWN0b3I8T3duUHRy
PE1lZGlhUXVlcnlFeHA+ID4gRXhwcmVzc2lvblZlY3RvcjsKIAotICAgIE1lZGlhUXVlcnkoUmVz
dHJpY3RvciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8RXhwcmVzc2lvblZl
Y3Rvcj4gZXhwcnMpOwotICAgIH5NZWRpYVF1ZXJ5KCk7CisgICAgTWVkaWFRdWVyeShSZXN0cmlj
dG9yLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgUGFzc093blB0cjxFeHByZXNzaW9uVmVjdG9y
Pik7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeSYpIGNvbnN0OwogCiAg
ICAgUmVzdHJpY3RvciByZXN0cmljdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0cmljdG9yOyB9
Ci0gICAgY29uc3QgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5RXhwPiA+KiBleHByZXNzaW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbnMuZ2V0KCk7IH0KLSAgICBTdHJpbmcgbWVkaWFU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVR5cGU7IH0KLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgTWVkaWFRdWVyeSYgb3RoZXIpIGNvbnN0OwotICAgIFN0cmluZyBjc3NUZXh0KCkgY29u
c3Q7CisgICAgY29uc3QgRXhwcmVzc2lvblZlY3RvciYgZXhwcmVzc2lvbnMoKSBjb25zdCB7IHJl
dHVybiAqbV9leHByZXNzaW9uczsgfQorICAgIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9tZWRpYVR5cGU7IH0KKyAgICBjb25zdCBTdHJpbmcmIGNzc1RleHQoKSBj
b25zdDsKICAgICBib29sIGlnbm9yZWQoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZWQ7IH0KIAog
IHByaXZhdGU6CkBAIC02MSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbV9tZWRpYVR5
cGU7CiAgICAgT3duUHRyPEV4cHJlc3Npb25WZWN0b3I+IG1fZXhwcmVzc2lvbnM7CiAgICAgYm9v
bCBtX2lnbm9yZWQ7Ci0gICAgU3RyaW5nIG1fc2VyaWFsaXphdGlvbkNhY2hlOworICAgIFN0cmlu
ZyBtX3NlcmlhbGl6ZWRRdWVyeTsKIAogICAgIFN0cmluZyBzZXJpYWxpemUoKSBjb25zdDsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCShyZXZp
c2lvbiAxMDM2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDM0ICs1OCwyNCBAQCB1c2luZyBuYW1lc3BhY2UgTWVk
aWFGZWF0dXJlTmFtZXM7CiAKIGVudW0gTWVkaWFGZWF0dXJlUHJlZml4IHsgTWluUHJlZml4LCBN
YXhQcmVmaXgsIE5vUHJlZml4IH07CiAKLXR5cGVkZWYgYm9vbCAoKkV2YWxGdW5jKShDU1NWYWx1
ZSosIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXgpOwotdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBFdmFsRnVuYz4gRnVuY3Rpb25NYXA7Ci1zdGF0aWMg
RnVuY3Rpb25NYXAqIGdGdW5jdGlvbk1hcDsKLQotLyoKLSAqIEZJWE1FOiBmb2xsb3dpbmcgbWVk
aWEgZmVhdHVyZXMgYXJlIG5vdCBpbXBsZW1lbnRlZDogY29sb3JfaW5kZXgsIHNjYW4sIHJlc29s
dXRpb24KLSAqCi0gKiBjb2xvcl9pbmRleCwgbWluLWNvbG9yLWluZGV4LCBtYXhfY29sb3JfaW5k
ZXg6IEl0J3MgdW5rbm93biBob3cgdG8gcmV0cmlldmUKLSAqIHRoZSBpbmZvcm1hdGlvbiBpZiB0
aGUgZGlzcGxheSBtb2RlIGlzIGluZGV4ZWQKLSAqIHNjYW46IFRoZSAic2NhbiIgbWVkaWEgZmVh
dHVyZSBkZXNjcmliZXMgdGhlIHNjYW5uaW5nIHByb2Nlc3Mgb2YKLSAqIHR2IG91dHB1dCBkZXZp
Y2VzLiBJdCdzIHVua25vd24gaG93IHRvIHJldHJpZXZlIHRoaXMgaW5mb3JtYXRpb24gZnJvbQot
ICogdGhlIHBsYXRmb3JtCi0gKiByZXNvbHV0aW9uLCBtaW4tcmVzb2x1dGlvbiwgbWF4LXJlc29s
dXRpb246IGNzcyBwYXJzZXIgZG9lc24ndCBzZWVtIHRvCi0gKiBzdXBwb3J0IENTU19ESU1FTlNJ
T04KLSAqLwordHlwZWRlZiBib29sICgqTWVkaWFGZWF0dXJlRXZhbHVhdGlvbkZ1bmN0aW9uKShD
U1NWYWx1ZSosIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXgpOwordHlw
ZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBNZWRpYUZlYXR1cmVFdmFsdWF0aW9uRnVu
Y3Rpb24+IEZ1bmN0aW9uTWFwOwogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5RXZh
bHVhdG9yKGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0KQotICAgIDogbV9mcmFtZSgwKQotICAgICwg
bV9zdHlsZSgwKQotICAgICwgbV9leHBSZXN1bHQobWVkaWFGZWF0dXJlUmVzdWx0KQotewotfQor
Ly8gRklYTUU6IGNvbG9yX2luZGV4LCBtaW4tY29sb3ItaW5kZXgsIGFuZCBtYXhfY29sb3JfaW5k
ZXggYXJlIG5vdCBpbXBsZW1lbnRlZC4KKy8vIFRvIGltcGxlbWVudCB0aGVtIHdlJ2QgaGF2ZSB0
byBhZGQgaW5mb3JtYXRpb24gYWJvdXQgaW5kZXhlZCBjb2xvciB0byB0aGUgV2ViQ29yZSBwbGF0
Zm9ybTsKKy8vIG1vc3QgbW9kZXJuIHBsYXRmb3JtcyBkb24ndCBtYWtlIHVzZSBvZiBpbmRleGVk
IGNvbG9yLgorCisvLyBGSVhNRTogc2NhbiBpcyBub3QgaW1wbGVtZW50ZWQ6IFRoaXMgbWVkaWEg
ZmVhdHVyZSBkZXNjcmliZXMgdGhlIHNjYW5uaW5nIHByb2Nlc3Mgb2YKKy8vIFRWIG91dHB1dCBk
ZXZpY2VzLiBUbyBpbXBsZW1lbnQgdGhpcyB3ZSdkIGhhdmUgdG8gYWRkIGluZm9ybWF0aW9uIHRv
IHRoZSBXZWJDb3JlIHBsYXRmb3JtLgorCisvLyBGSVhNRTogcmVzb2x1dGlvbiwgbWluLXJlc29s
dXRpb24sIG1heC1yZXNvbHV0aW9uIGFyZSBub3QgaW1wbGVtZW50ZWQ6IEF0IHRoZSB0aW1lIHRo
aXMKKy8vIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gdGhlIENTUyBwYXJzZXIgImRpZG4ndCBzZWVt
IHRvIHN1cHBvcnQgQ1NTX0RJTUVOU0lPTiIuCiAKIE1lZGlhUXVlcnlFdmFsdWF0b3I6OiBNZWRp
YVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIGJvb2wgbWVk
aWFGZWF0dXJlUmVzdWx0KQogICAgIDogbV9tZWRpYVR5cGUoYWNjZXB0ZWRNZWRpYVR5cGUpCiAg
ICAgLCBtX2ZyYW1lKDApCiAgICAgLCBtX3N0eWxlKDApCi0gICAgLCBtX2V4cFJlc3VsdChtZWRp
YUZlYXR1cmVSZXN1bHQpCisgICAgLCBtX21lZGlhRmVhdHVyZVJlc3VsdChtZWRpYUZlYXR1cmVS
ZXN1bHQpCiB7CiB9CiAKQEAgLTkzLDcgKzgzLDcgQEAgTWVkaWFRdWVyeUV2YWx1YXRvcjo6IE1l
ZGlhUXVlcnlFdmFsdWF0bwogICAgIDogbV9tZWRpYVR5cGUoYWNjZXB0ZWRNZWRpYVR5cGUpCiAg
ICAgLCBtX2ZyYW1lKDApCiAgICAgLCBtX3N0eWxlKDApCi0gICAgLCBtX2V4cFJlc3VsdChtZWRp
YUZlYXR1cmVSZXN1bHQpCisgICAgLCBtX21lZGlhRmVhdHVyZVJlc3VsdChtZWRpYUZlYXR1cmVS
ZXN1bHQpCiB7CiB9CiAKQEAgLTEwMSwxMSArOTEsNyBAQCBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjog
TWVkaWFRdWVyeUV2YWx1YXRvCiAgICAgOiBtX21lZGlhVHlwZShhY2NlcHRlZE1lZGlhVHlwZSkK
ICAgICAsIG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3N0eWxlKHN0eWxlKQotICAgICwgbV9leHBS
ZXN1bHQoZmFsc2UpIC8vIGRvZXNuJ3QgbWF0dGVyIHdoZW4gd2UgaGF2ZSBtX2ZyYW1lIGFuZCBt
X3N0eWxlCi17Ci19Ci0KLU1lZGlhUXVlcnlFdmFsdWF0b3I6On5NZWRpYVF1ZXJ5RXZhbHVhdG9y
KCkKKyAgICAsIG1fbWVkaWFGZWF0dXJlUmVzdWx0KGZhbHNlKSAvLyBJZ25vcmVkIGlmIGJvdGgg
bV9mcmFtZSBhbmQgbV9zdHlsZSBhcmUgbm9uLW51bGwuCiB7CiB9CiAKQEAgLTEzNiwzNSArMTIy
LDM0IEBAIGJvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbChjb25zdCBNZWQKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICBjb25zdCBWZWN0b3I8TWVkaWFRdWVyeSo+JiBxdWVyaWVzID0g
bWVkaWFMaXN0LT5tZWRpYVF1ZXJpZXMoKTsKLSAgICBpZiAoIXF1ZXJpZXMuc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsgLy8gZW1wdHkgcXVlcnkgbGlzdCBldmFsdWF0ZXMgdG8gdHJ1ZQog
Ci0gICAgLy8gaXRlcmF0ZSBvdmVyIHF1ZXJpZXMsIHN0b3AgaWYgYW55IG9mIHRoZW0gZXZhbCB0
byB0cnVlIChPUiBzZW1hbnRpY3MpCi0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHF1ZXJpZXMuc2l6ZSgpICYmICFyZXN1bHQ7ICsraSkgewotICAg
ICAgICBNZWRpYVF1ZXJ5KiBxdWVyeSA9IHF1ZXJpZXMuYXQoaSk7CisgICAgYm9vbCByZXN1bHQg
PSB0cnVlOworCisgICAgLy8gSXRlcmF0ZSBvdmVyIHF1ZXJpZXMgYW5kIHN0b3AgaWYgYW55IG9m
IHRoZW0gZXZhbCB0byB0cnVlICgib3IiIHNlbWFudGljcykuCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBxdWVyaWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIE1lZGlhUXVlcnkmIHF1ZXJ5
ID0gKnF1ZXJpZXNbaV07CiAKLSAgICAgICAgaWYgKHF1ZXJ5LT5pZ25vcmVkKCkpCisgICAgICAg
IHJlc3VsdCA9IGZhbHNlOworCisgICAgICAgIGlmIChxdWVyeS5pZ25vcmVkKCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAobWVkaWFUeXBlTWF0Y2gocXVlcnktPm1lZGlh
VHlwZSgpKSkgewotICAgICAgICAgICAgY29uc3QgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5RXhw
PiA+KiBleHBzID0gcXVlcnktPmV4cHJlc3Npb25zKCk7Ci0gICAgICAgICAgICAvLyBpdGVyYXRl
IHRocm91Z2ggZXhwcmVzc2lvbnMsIHN0b3AgaWYgYW55IG9mIHRoZW0gZXZhbCB0byBmYWxzZQot
ICAgICAgICAgICAgLy8gKEFORCBzZW1hbnRpY3MpCi0gICAgICAgICAgICBzaXplX3QgaiA9IDA7
Ci0gICAgICAgICAgICBmb3IgKDsgaiA8IGV4cHMtPnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAg
ICAgICAgYm9vbCBleHByUmVzdWx0ID0gZXZhbChleHBzLT5hdChqKS5nZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0eWxlU2VsZWN0b3IgJiYgZXhwcy0+YXQoaiktPmlzVmlld3BvcnREZXBl
bmRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkVmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGV4cHMtPmF0KGopLmdldCgpLCBleHByUmVzdWx0KTsK
LSAgICAgICAgICAgICAgICBpZiAoIWV4cHJSZXN1bHQpCisgICAgICAgIGlmIChtZWRpYVR5cGVN
YXRjaChxdWVyeS5tZWRpYVR5cGUoKSkpIHsKKyAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3Vn
aCBleHByZXNzaW9ucyBhbmQgc3RvcCBpZiBhbnkgb2YgdGhlbSBldmFsIHRvIGZhbHNlICgiYW5k
IiBzZW1hbnRpY3MpLgorICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNv
bnN0IFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeUV4cD4gPiYgZXhwcmVzc2lvbnMgPSBxdWVyeS5l
eHByZXNzaW9ucygpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBleHByZXNz
aW9ucy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGV2YWwoKmV4cHJl
c3Npb25zW2pdKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGVTZWxlY3RvciAmJiBleHByZXNz
aW9uc1tqXS0+aXNWaWV3cG9ydERlcGVuZGVudCgpKQorICAgICAgICAgICAgICAgICAgICBzdHls
ZVNlbGVjdG9yLT5hZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoKmV4cHJlc3Np
b25zW2pdLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgICAg
ICAvLyBhc3N1bWUgdHJ1ZSBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCwKLSAgICAg
ICAgICAgIC8vIG90aGVyd2lzZSBhc3N1bWUgZmFsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGFw
cGx5UmVzdHJpY3RvcihxdWVyeS0+cmVzdHJpY3RvcigpLCBleHBzLT5zaXplKCkgPT0gaik7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0cmljdG9yKHF1ZXJ5
LT5yZXN0cmljdG9yKCksIGZhbHNlKTsKKyAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0cmljdG9y
KHF1ZXJ5LnJlc3RyaWN0b3IoKSwgcmVzdWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yNjMsNyArMjQ4
LDcgQEAgc3RhdGljIGJvb2wgYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbAogICAgICAgICBp
bnQgaCA9IDA7CiAgICAgICAgIGludCB2ID0gMDsKICAgICAgICAgaWYgKHBhcnNlQXNwZWN0UmF0
aW8odmFsdWUsIGgsIHYpKQotICAgICAgICAgICAgcmV0dXJuIHYgIT0gMCAmJiBjb21wYXJlVmFs
dWUod2lkdGggKiB2LCBoZWlnaHQgKiBoLCBvcCk7CisgICAgICAgICAgICByZXR1cm4gdiAmJiBj
b21wYXJlVmFsdWUod2lkdGggKiB2LCBoZWlnaHQgKiBoLCBvcCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKQEAgLTI3OSw3ICsyNjQsNyBAQCBzdGF0aWMgYm9vbCBkZXZpY2VfYXNw
ZWN0X3JhdGlvTWVkaWFGZWF0CiAgICAgICAgIGludCBoID0gMDsKICAgICAgICAgaW50IHYgPSAw
OwogICAgICAgICBpZiAocGFyc2VBc3BlY3RSYXRpbyh2YWx1ZSwgaCwgdikpCi0gICAgICAgICAg
ICByZXR1cm4gdiAhPSAwICAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihzZy53aWR0
aCgpKSAqIHYsIHN0YXRpY19jYXN0PGludD4oc2cuaGVpZ2h0KCkpICogaCwgb3ApOworICAgICAg
ICAgICAgcmV0dXJuIHYgJiYgY29tcGFyZVZhbHVlKHN0YXRpY19jYXN0PGludD4oc2cud2lkdGgo
KSkgKiB2LCBzdGF0aWNfY2FzdDxpbnQ+KHNnLmhlaWdodCgpKSAqIGgsIG9wKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDk5LDY4ICs0ODQsNTEgQEAgc3RhdGljIGJvb2wg
dHJhbnNmb3JtXzJkTWVkaWFGZWF0dXJlRXZhbAogCiBzdGF0aWMgYm9vbCB0cmFuc2Zvcm1fM2RN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSogZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBib29sIHJldHVyblZhbHVlSWZOb1Bh
cmFtZXRlcjsKLSAgICBpbnQgaGF2ZTNkUmVuZGVyaW5nOwotCi0jaWYgRU5BQkxFKDNEX1JFTkRF
UklORykKICAgICBib29sIHRocmVlREVuYWJsZWQgPSBmYWxzZTsKLSNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisjaWYgRU5BQkxFKDNEX1JFTkRFUklORykgJiYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZnJhbWUtPmNvbnRl
bnRSZW5kZXJlcigpKQogICAgICAgICB0aHJlZURFbmFibGVkID0gdmlldy0+Y29tcG9zaXRvcigp
LT5jYW5SZW5kZXIzRFRyYW5zZm9ybXMoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuVmFsdWVJZk5v
UGFyYW1ldGVyID0gdGhyZWVERW5hYmxlZDsKLSAgICBoYXZlM2RSZW5kZXJpbmcgPSB0aHJlZURF
bmFibGVkID8gMSA6IDA7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7Ci0gICAgcmV0
dXJuVmFsdWVJZk5vUGFyYW1ldGVyID0gZmFsc2U7Ci0gICAgaGF2ZTNkUmVuZGVyaW5nID0gMDsK
ICNlbmRpZgotCiAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgIGZsb2F0IG51bWJlcjsKLSAgICAg
ICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBhcmVWYWx1ZShoYXZl
M2RSZW5kZXJpbmcsIHN0YXRpY19jYXN0PGludD4obnVtYmVyKSwgb3ApOworICAgICAgICByZXR1
cm4gbnVtYmVyVmFsdWUodmFsdWUsIG51bWJlcikgJiYgY29tcGFyZVZhbHVlKHN0YXRpY19jYXN0
PGludD4odGhyZWVERW5hYmxlZCksIHN0YXRpY19jYXN0PGludD4obnVtYmVyKSwgb3ApOwogICAg
IH0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWVJZk5vUGFyYW1ldGVyOworICAgIHJldHVybiB0aHJl
ZURFbmFibGVkOwogfQogCiBzdGF0aWMgYm9vbCB2aWV3X21vZGVNZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVBy
ZWZpeCBvcCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3ApOworICAgIEFTU0VSVF9VTlVTRUQob3As
IG9wID09IE5vUHJlZml4KTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gUGFnZTo6c3RyaW5nVG9WaWV3TW9kZShzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKS0+Z2V0U3RyaW5nVmFsdWUoKSkgPT0gZnJhbWUtPnBhZ2UoKS0+dmll
d01vZGUoKTsKIH0KIAotc3RhdGljIHZvaWQgY3JlYXRlRnVuY3Rpb25NYXAoKQorc3RhdGljIEZ1
bmN0aW9uTWFwKiBjcmVhdGVGdW5jdGlvbk1hcCgpCiB7Ci0gICAgLy8gQ3JlYXRlIHRoZSB0YWJs
ZS4KLSAgICBnRnVuY3Rpb25NYXAgPSBuZXcgRnVuY3Rpb25NYXA7CisgICAgRnVuY3Rpb25NYXAq
IGZ1bmN0aW9uTWFwID0gbmV3IEZ1bmN0aW9uTWFwOwogI2RlZmluZSBBRERfVE9fRlVOQ1RJT05N
QVAobmFtZSwgc3RyKSAgXAotICAgIGdGdW5jdGlvbk1hcC0+c2V0KG5hbWUjI01lZGlhRmVhdHVy
ZS5pbXBsKCksIG5hbWUjI01lZGlhRmVhdHVyZUV2YWwpOworICAgIGZ1bmN0aW9uTWFwLT5zZXQo
bmFtZSMjTWVkaWFGZWF0dXJlLmltcGwoKSwgbmFtZSMjTWVkaWFGZWF0dXJlRXZhbCk7CiAgICAg
Q1NTX01FRElBUVVFUllfTkFNRVNfRk9SX0VBQ0hfTUVESUFGRUFUVVJFKEFERF9UT19GVU5DVElP
Tk1BUCk7CiAjdW5kZWYgQUREX1RPX0ZVTkNUSU9OTUFQCisgICAgcmV0dXJuIGZ1bmN0aW9uTWFw
OwogfQogCi1ib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWwoY29uc3QgTWVkaWFRdWVyeUV4
cCogZXhwcikgY29uc3QKK2Jvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbChjb25zdCBNZWRp
YVF1ZXJ5RXhwJiBleHByZXNzaW9uKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSB8fCAhbV9z
dHlsZSkKLSAgICAgICAgcmV0dXJuIG1fZXhwUmVzdWx0OworICAgICAgICByZXR1cm4gbV9tZWRp
YUZlYXR1cmVSZXN1bHQ7CiAKLSAgICBpZiAoIWV4cHItPmlzVmFsaWQoKSkKKyAgICBpZiAoIWV4
cHJlc3Npb24uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWdG
dW5jdGlvbk1hcCkKLSAgICAgICAgY3JlYXRlRnVuY3Rpb25NYXAoKTsKKyAgICBzdGF0aWMgRnVu
Y3Rpb25NYXAqIGZ1bmN0aW9uTWFwID0gY3JlYXRlRnVuY3Rpb25NYXAoKTsKKyAgICBNZWRpYUZl
YXR1cmVFdmFsdWF0aW9uRnVuY3Rpb24gZnVuY3Rpb24gPSBmdW5jdGlvbk1hcC0+Z2V0KGV4cHJl
c3Npb24ubWVkaWFGZWF0dXJlKCkuaW1wbCgpKTsKIAotICAgIC8vIGNhbGwgdGhlIG1lZGlhIGZl
YXR1cmUgZXZhbHVhdGlvbiBmdW5jdGlvbi4gQXNzdW1lIG5vIHByZWZpeAotICAgIC8vIGFuZCBs
ZXQgdHJhbXBvbGluZSBmdW5jdGlvbnMgb3ZlcnJpZGUgdGhlIHByZWZpeCBpZiBwcmVmaXggaXMK
LSAgICAvLyB1c2VkCi0gICAgRXZhbEZ1bmMgZnVuYyA9IGdGdW5jdGlvbk1hcC0+Z2V0KGV4cHIt
Pm1lZGlhRmVhdHVyZSgpLmltcGwoKSk7Ci0gICAgaWYgKGZ1bmMpCi0gICAgICAgIHJldHVybiBm
dW5jKGV4cHItPnZhbHVlKCksIG1fc3R5bGUuZ2V0KCksIG1fZnJhbWUsIE5vUHJlZml4KTsKLQot
ICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBTdGFydCB3aXRoIG5vIHByZWZpeDogU29tZSB0cmFt
cG9saW5lIGZ1bmN0aW9ucyBhZGQgdGhlIHByZWZpeCBhbmQgY2FsbCBvdGhlciBtZWRpYSBmZWF0
dXJlIGZ1bmN0aW9ucy4KKyAgICByZXR1cm4gZnVuY3Rpb24gJiYgZnVuY3Rpb24oZXhwcmVzc2lv
bi52YWx1ZSgpLCBtX3N0eWxlLmdldCgpLCBtX2ZyYW1lLCBOb1ByZWZpeCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgJ
KHJldmlzaW9uIDEwMzY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYzICsyOSw1MiBAQAogI2RlZmluZSBNZWRpYVF1
ZXJ5RXZhbHVhdG9yX2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCiBjbGFzcyBDU1NTdHlsZVNl
bGVjdG9yOwogY2xhc3MgRnJhbWU7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIE1lZGlhTGlz
dDsKIGNsYXNzIE1lZGlhUXVlcnlFeHA7CiAKLS8qKgotICogQ2xhc3MgdGhhdCBldmFsdWF0ZXMg
Y3NzIG1lZGlhIHF1ZXJpZXMgYXMgZGVmaW5lZCBpbgotICogQ1NTMyBNb2R1bGUgIk1lZGlhIFF1
ZXJpZXMiIChodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8pCi0gKiBTcGVj
aWFsIGNvbnN0cnVjdG9ycyBhcmUgbmVlZGVkLCBpZiBzaW1wbGUgbWVkaWEgcXVlcmllcyBhcmUg
dG8gYmUKLSAqIGV2YWx1YXRlZCB3aXRob3V0IGtub3dsZWRnZSBvZiB0aGUgbWVkaXVtIGZlYXR1
cmVzLiBUaGlzIGNhbiBoYXBwZW4KLSAqIGZvciBleGFtcGxlIHdoZW4gcGFyc2luZyBVQSBzdHls
ZXNoZWV0cywgaWYgZXZhbHVhdGlvbiBpcyBkb25lCi0gKiByaWdodCBhZnRlciBwYXJzaW5nLgot
ICoKLSAqIHRoZSBib29sZWFuIHBhcmFtZXRlciBpcyB1c2VkIHRvIGFwcHJveGltYXRlIHJlc3Vs
dHMgb2YgZXZhbHVhdGlvbiwgaWYKLSAqIHRoZSBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIGFyZSBu
b3Qga25vd24uIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJ1bmUgdGhlIGxvYWRpbmcKLSAqIG9mIHN0
eWxlc2hlZXRzIHRvIG9ubHkgdGhvc2Ugd2hpY2ggYXJlIHByb2JhYmxlIHRvIG1hdGNoLgotICov
CisvLyBDbGFzcyB0aGF0IGV2YWx1YXRlcyBDU1MgbWVkaWEgcXVlcmllcyBhcyBkZWZpbmVkIGlu
IENTUzMgTW9kdWxlICJNZWRpYSBRdWVyaWVzIi4KKy8vCisvLyBTcGVjaWFsIGNvbnN0cnVjdG9y
cyBhcmUgc3VwcGxpZWQgc28gdGhhdCBzaW1wbGUgbWVkaWEgcXVlcmllcyBjYW4gdG8gYmUKKy8v
IGV2YWx1YXRlZCB3aXRob3V0IGtub3dsZWRnZSBvZiB0aGUgbWVkaXVtIGZlYXR1cmVzLiBUaGlz
IGlzIHVzZWQsIGZvciBleGFtcGxlLAorLy8gd2hlbiBwYXJzaW5nIHVzZXIgYWdlbnQgc3R5bGVz
aGVldHMuCisvLworLy8gVGhlIGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciBp
cyB1c2VkIHRvIGFwcHJveGltYXRlIHJlc3VsdHMgb2YgZXZhbHVhdGlvbiwKKy8vIGlmIHRoZSBk
ZXZpY2UgY2hhcmFjdGVyaXN0aWNzIGFyZSBub3Qga25vd24uIFRoaXMgY2FuIGJlIHVzZWQgdG8g
cHJ1bmUgdGhlIGxvYWRpbmcKKy8vIG9mIHN0eWxlc2hlZXRzIHRvIHJlbW92ZSB0aG9zZSB0aGF0
IGRlZmluaXRlbHkgd29uJ3QgbWF0Y2guCisKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3Igewog
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVF1ZXJ5RXZhbHVhdG9yKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLyoqIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNo
IGV2YWx1YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBxdWVyaWVzCi0gICAgICogIEV2YWx1YXRvciBy
ZXR1cm5zIHRydWUgZm9yICJhbGwiLCBhbmQgcmV0dXJucyB2YWx1ZSBvZiBcbWVkaWFGZWF0dXJl
UmVzdWx0Ci0gICAgICogIGZvciBhbnkgbWVkaWEgZmVhdHVyZXMKLSAgICAgKi8KLSAgICBNZWRp
YVF1ZXJ5RXZhbHVhdG9yKGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0ID0gZmFsc2UpOwotCi0gICAg
LyoqIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBx
dWVyaWVzCi0gICAgICogIEV2YWx1YXRvciAgcmV0dXJucyB0cnVlIGZvciBhY2NlcHRlZE1lZGlh
VHlwZSBhbmQgcmV0dXJucyB2YWx1ZSBvZiBcbWVkaWFmZWF0dXJlUmVzdWx0Ci0gICAgICogIGZv
ciBhbnkgbWVkaWEgZmVhdHVyZXMKLSAgICAgKi8KKyAgICAvLyBDcmVhdGVzIGV2YWx1YXRvciB3
aGljaCBldmFsdWF0ZXMgb25seSBzaW1wbGUgbWVkaWEgcXVlcmllcy4KKyAgICAvLyBFdmFsdWF0
b3IgcmV0dXJucyB0cnVlIGZvciBhY2NlcHRlZE1lZGlhVHlwZSBhbmQgdXNlIG1lZGlhRmVhdHVy
ZVJlc3VsdCBmb3IgYW55IG1lZGlhIGZlYXR1cmVzLgogICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Io
Y29uc3QgU3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgYm9vbCBtZWRpYUZlYXR1cmVSZXN1bHQg
PSBmYWxzZSk7CiAgICAgTWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBjaGFyKiBhY2NlcHRlZE1l
ZGlhVHlwZSwgYm9vbCBtZWRpYUZlYXR1cmVSZXN1bHQgPSBmYWxzZSk7CiAKLSAgICAvKiogQ3Jl
YXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIGZ1bGwgbWVkaWEgcXVlcmllcwotICAgICAq
LworICAgIC8vIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBmdWxsIG1lZGlhIHF1
ZXJpZXMuCiAgICAgTWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVk
aWFUeXBlLCBGcmFtZSosIFJlbmRlclN0eWxlKik7CiAKLSAgICB+TWVkaWFRdWVyeUV2YWx1YXRv
cigpOwotCiAgICAgYm9vbCBtZWRpYVR5cGVNYXRjaChjb25zdCBTdHJpbmcmIG1lZGlhVHlwZVRv
TWF0Y2gpIGNvbnN0OwogICAgIGJvb2wgbWVkaWFUeXBlTWF0Y2hTcGVjaWZpYyhjb25zdCBjaGFy
KiBtZWRpYVR5cGVUb01hdGNoKSBjb25zdDsKIAotICAgIC8qKiBFdmFsdWF0ZXMgYSBsaXN0IG9m
IG1lZGlhIHF1ZXJpZXMgKi8KKyAgICAvLyBFdmFsdWF0ZXMgYSBsaXN0IG9mIG1lZGlhIHF1ZXJp
ZXMuCiAgICAgYm9vbCBldmFsKGNvbnN0IE1lZGlhTGlzdCosIENTU1N0eWxlU2VsZWN0b3IqID0g
MCkgY29uc3Q7CiAKLSAgICAvKiogRXZhbHVhdGVzIG1lZGlhIHF1ZXJ5IHN1YmV4cHJlc3Npb24s
IGllICJhbmQgKG1lZGlhLWZlYXR1cmU6IHZhbHVlKSIgcGFydCAqLwotICAgIGJvb2wgZXZhbChj
b25zdCBNZWRpYVF1ZXJ5RXhwKikgY29uc3Q7CisgICAgLy8gRXZhbHVhdGVzIG1lZGlhIHF1ZXJ5
IHN1YmV4cHJlc3Npb24sIGkuZS4gImFuZCAobWVkaWEtZmVhdHVyZTogdmFsdWUpIiBwYXJ0Lgor
ICAgIGJvb2wgZXZhbChjb25zdCBNZWRpYVF1ZXJ5RXhwJikgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgU3RyaW5nIG1fbWVkaWFUeXBlOwogICAgIEZyYW1lKiBtX2ZyYW1lOyAvLyBub3Qgb3duZWQK
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7Ci0gICAgYm9vbCBtX2V4cFJlc3VsdDsK
KyAgICBib29sIG1fbWVkaWFGZWF0dXJlUmVzdWx0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UKKwog
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144274</attachid>
            <date>2012-05-27 23:04:04 -0700</date>
            <delta_ts>2012-05-27 23:04:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75223-20120527230402.patch</filename>
            <type>text/plain</type>
            <size>26561</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODY0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA1LTI3ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgU3R5bGVSZXNvbHZlciBz
byBpdCBkb2VzIG5vdCBrZWVwIGEgdmVjdG9yIG9mIE1lZGlhUXVlcnlSZXN1bHQgcG9pbnRlcnMg
dGhhdCBuZWVkIHRvIGJlIGRlbGV0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc1MjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFuaWVsIEJhdGVz
LgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuY3BwOiBSZW1vdmVkIHNvbWUgY29tbWVudHMg
dGhhdCBwb2ludGVkIHRvIENTUyBkb2N1bWVudHMuCisgICAgICAgIFRoZXJlIGlzIG5vIGd1YXJh
bnRlZSB0aGVzZSBsaW5rcyB3aWxsIGJlIHZhbGlkIG92ZXIgdGltZS4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUXVlcnk6Ok1lZGlhUXVlcnkpOiBSZXdyb3RlIGZvciBjbGFyaXR5LCBjb252ZW50
aW9uYWwgV2ViS2l0IGNvZGluZworICAgICAgICBzdHlsZSwgYW5kIHNpbXBsaWNpdHkuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5Ojpjb3B5KTogTW92ZWQgb3V0IG9mIGxpbmU7IG5vdCBw
ZXJmb3JtYW5jZSBjcml0aWNhbCwgYW5kIHRoaXMKKyAgICAgICAgYWxsb3dzIHVzIHRvIGN1dCBk
b3duIGhlYWRlciBkZXBlbmRlbmNpZXMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5Ojpj
c3NUZXh0KTogVXBkYXRlZCBmb3IgY2hhbmdlIHRvIGRhdGEgbWVtYmVyIG5hbWUuCisKKyAgICAg
ICAgKiBjc3MvTWVkaWFRdWVyeS5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzLiBSZW1vdmVk
IG5vbi1oZWxwZnVsIGFyZ3VtZW50IG5hbWUKKyAgICAgICAgImV4cHJzIi4gQ2hhbmdlZCBleHBy
ZXNzaW9ucyBmdW5jdGlvbiB0byByZXR1cm4gYSByZWZlcmVuY2UgaW5zdGVhZCBvZgorICAgICAg
ICBhIHBvaW50ZXIuIENoYW5nZWQgbWVkaWFUeXBlIGFuZCBjc3NUZXh0IGZ1bmN0aW9ucyB0byBy
ZXR1cm4gYSByZWZlcmVuY2UuIFJlbmFtZWQKKyAgICAgICAgbV9zZXJpYWxpemF0aW9uQ2FjaGUg
dG8gbV9zZXJpYWxpemVkUXVlcnkuIE1vdmVkIGNvcHkgZnVuY3Rpb24gb3V0IG9mIGhlYWRlci4K
KworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcDogUmVuYW1lZCBFdmFsRnVu
YyB0byBNZWRpYUZlYXR1cmVFdmFsdWF0aW9uRnVuY3Rpb24uCisgICAgICAgIEJyb2tlIGEgRklY
TUUgaW50byB0aHJlZSBhbmQgcmV3b3JkZWQgZm9yIGNsYXJpdHkuCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVF1ZXJ5RXZhbHVhdG9yKTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2VzLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbCk6IFJld3JvdGUgdGhpcyBmb3Ig
Y2xhcml0eSBhbmQgdG8gcmVndWxhcml6ZQorICAgICAgICB0aGUgbG9naWMgYSBiaXQuCisgICAg
ICAgIChXZWJDb3JlOjphc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKTogR290IHJpZCBvZiBh
ICE9IDAgdGhhdCBpcyBjb250cmFyeSB0byB0aGUKKyAgICAgICAgbm9ybWFsIFdlYktpdCBzdHls
ZS4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFs
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1fM2RNZWRpYUZlYXR1cmVFdmFs
KTogRml4ZWQgbWFuZ2xlZCAjaWYgdGhhdCB3YXMgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OnZp
ZXdfbW9kZU1lZGlhRmVhdHVyZUV2YWwpOiBSZXBsYWNlZCBVTlVTRURfUEFSQU0gdXNhZ2Ugd2l0
aCBBU1NFUlRfVU5VU0VELgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnVuY3Rpb25NYXApOiBD
aGFuZ2VkIHRoaXMgc28gaXQgcmV0dXJucyB0aGUgbWFwIHNvIHdlIGNhbiB1c2UgYQorICAgICAg
ICBjbGVhbmVyIHN0eWxlIGluIHRoZSBjYWxsZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1
ZXJ5RXZhbHVhdG9yOjpldmFsKTogVXBkYXRlZCB0byB0YWtlIGEgcmVmZXJlbmNlIGFuZCBpbXBy
b3ZlZCB0aGUKKyAgICAgICAgY29tbWVudHMgYW5kIGNvZGluZyBzdHlsZSBhIGJpdC4KKworICAg
ICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmg6IFVwZGF0ZWQgY29tbWVudCBzdHlsZS4g
UmVtb3ZlZCB1bnVzZWQgY29uc3RydWN0b3IuCisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgZGVz
dHJ1Y3RvciBkZWNsYXJhdGlvbi4gUmVuYW1lZCBtX2V4cFJlc3VsdCB0byBtX21lZGlhRmVhdHVy
ZVJlc3VsdC4KKworICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDogTW92ZWQgdGhlIE1l
ZGlhUXVlcnlSZXN1bHQgY2xhc3MgaW50byB0aGlzIGZpbGUKKyAgICAgICAgYW5kIG1hZGUgaXQg
YSBzdHJ1Y3R1cmUgcmF0aGVyIHRoYW4gYSBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdCk6IFVwZGF0ZWQg
dG8gdGFrZQorICAgICAgICBhIHJlZmVyZW5jZSBhcmd1bWVudCBpbnN0ZWFkIG9mIGEgcG9pbnRl
ciBhbmQgZm9yIHRoZSBuZXcgdmVjdG9yIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UpOiBVcGRhdGVkIGZvciBhYm92ZSBjaGFu
Z2VzLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDogUmVtb3ZlZCBtYW55IHVubmVl
ZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucyBvZgorICAgICAgICBjbGFzc2Vz
LCBpbmNsdWRpbmcgbm93LXVubmVlZGVkIGluY2x1ZGUgb2YgTWVkaWFRdWVyeUV4cC5oLiBSZXBs
YWNlZCBNZWRpYVF1ZXJ5UmVzdWx0CisgICAgICAgIGRlZmluaXRpb24gd2l0aCBhIGZvcndhcmQg
ZGVjbGFyYXRpb24uIENoYW5nZWQgYWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0
CisgICAgICAgIHRvIHRha2UgYSByZWZlcmVuY2UgaW5zdGVhZCBvZiBhIHBvaW50ZXIuIENoYW5n
ZWQgbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzCisgICAgICAgIHRvIGJlIGEg
dmVjdG9yIG9mIHZhbHVlcyByYXRoZXIgdGhhbiBvZiBwb2ludGVycy4KKwogMjAxMi0wNS0yNyAg
U2hpbnlhIEthd2FuYWthICA8c2hpbnlha0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgY3V0LCBj
b3B5IG9yIHBhc3RlIGV2ZW50IHdvbid0IGJlIGZpcmVkIGluIFNoYWRvdyBET00uCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwCShyZXZpc2lvbiAxMTg2NDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3Nv
bS8jc2VyaWFsaXplLWEtbWVkaWEtcXVlcnkKIFN0cmluZyBNZWRpYVF1ZXJ5OjpzZXJpYWxpemUo
KSBjb25zdAogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwpAQCAtNzQsMzIgKzczLDM0IEBA
IHN0YXRpYyBib29sIGV4cHJlc3Npb25Db21wYXJlKGNvbnN0IE93blAKICAgICByZXR1cm4gY29k
ZVBvaW50Q29tcGFyZShhLT5zZXJpYWxpemUoKSwgYi0+c2VyaWFsaXplKCkpIDwgMDsKIH0KIAot
Ci1NZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5KFJlc3RyaWN0b3IgciwgY29uc3QgU3RyaW5nJiBtZWRp
YVR5cGUsIFBhc3NPd25QdHI8VmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5RXhwPiA+ID4gZXhwcnMp
Ci0gICAgOiBtX3Jlc3RyaWN0b3IocikKK01lZGlhUXVlcnk6Ok1lZGlhUXVlcnkoUmVzdHJpY3Rv
ciByZXN0cmljdG9yLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgUGFzc093blB0cjxFeHByZXNz
aW9uVmVjdG9yPiBleHByZXNzaW9ucykKKyAgICA6IG1fcmVzdHJpY3RvcihyZXN0cmljdG9yKQog
ICAgICwgbV9tZWRpYVR5cGUobWVkaWFUeXBlLmxvd2VyKCkpCi0gICAgLCBtX2V4cHJlc3Npb25z
KGV4cHJzKQorICAgICwgbV9leHByZXNzaW9ucyhleHByZXNzaW9ucykKICAgICAsIG1faWdub3Jl
ZChmYWxzZSkKIHsKICAgICBpZiAoIW1fZXhwcmVzc2lvbnMpIHsKLSAgICAgICAgbV9leHByZXNz
aW9ucyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4pOworICAg
ICAgICBtX2V4cHJlc3Npb25zID0gYWRvcHRQdHIobmV3IEV4cHJlc3Npb25WZWN0b3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbm9uQ29weWluZ1NvcnQobV9leHByZXNzaW9ucy0+
YmVnaW4oKSwgbV9leHByZXNzaW9ucy0+ZW5kKCksIGV4cHJlc3Npb25Db21wYXJlKTsKKyAgICBF
eHByZXNzaW9uVmVjdG9yJiB2ZWN0b3IgPSAqbV9leHByZXNzaW9uczsKKworICAgIG5vbkNvcHlp
bmdTb3J0KHZlY3Rvci5iZWdpbigpLCB2ZWN0b3IuZW5kKCksIGV4cHJlc3Npb25Db21wYXJlKTsK
IAotICAgIC8vIHJlbW92ZSBhbGwgZHVwbGljYXRlZCBleHByZXNzaW9ucwotICAgIFN0cmluZyBr
ZXk7Ci0gICAgZm9yIChpbnQgaSA9IG1fZXhwcmVzc2lvbnMtPnNpemUoKSAtIDE7IGkgPj0gMDsg
LS1pKSB7CisgICAgLy8gUmVtb3ZlIGFsbCBkdXBsaWNhdGUgZXhwcmVzc2lvbnMuCisgICAgU3Ry
aW5nIHByZXZpb3VzU2VyaWFsaXplZEV4cHJlc3Npb247CisgICAgZm9yIChzaXplX3QgaSA9IHZl
Y3Rvci5zaXplKCk7IGk7ICkgeworICAgICAgICAtLWk7CiAKLSAgICAgICAgLy8gaWYgbm90IGFs
bCBvZiB0aGUgZXhwcmVzc2lvbnMgaXMgdmFsaWQgdGhlIG1lZGlhIHF1ZXJ5IG11c3QgYmUgaWdu
b3JlZC4KKyAgICAgICAgLy8gSWYgbm90IGFsbCBvZiB0aGUgZXhwcmVzc2lvbnMgYXJlIHZhbGlk
LCB0aGUgbWVkaWEgcXVlcnkgbXVzdCBiZSBpZ25vcmVkLgogICAgICAgICBpZiAoIW1faWdub3Jl
ZCkKLSAgICAgICAgICAgIG1faWdub3JlZCA9ICFtX2V4cHJlc3Npb25zLT5hdChpKS0+aXNWYWxp
ZCgpOworICAgICAgICAgICAgbV9pZ25vcmVkID0gIXZlY3RvcltpXS0+aXNWYWxpZCgpOwogCi0g
ICAgICAgIGlmIChtX2V4cHJlc3Npb25zLT5hdChpKS0+c2VyaWFsaXplKCkgPT0ga2V5KQotICAg
ICAgICAgICAgbV9leHByZXNzaW9ucy0+cmVtb3ZlKGkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBrZXkgPSBtX2V4cHJlc3Npb25zLT5hdChpKS0+c2VyaWFsaXplKCk7CisgICAgICAgIFN0
cmluZyBzZXJpYWxpemVkRXhwcmVzc2lvbiA9IHZlY3RvcltpXS0+c2VyaWFsaXplKCk7CisgICAg
ICAgIGlmIChzZXJpYWxpemVkRXhwcmVzc2lvbiA9PSBwcmV2aW91c1NlcmlhbGl6ZWRFeHByZXNz
aW9uKQorICAgICAgICAgICAgdmVjdG9yLnJlbW92ZShpKTsKKyAgICAgICAgcHJldmlvdXNTZXJp
YWxpemVkRXhwcmVzc2lvbiA9IHNlcmlhbGl6ZWRFeHByZXNzaW9uOwogICAgIH0KIH0KIApAQCAt
MTA4LDI5ICsxMDksMzEgQEAgTWVkaWFRdWVyeTo6TWVkaWFRdWVyeShjb25zdCBNZWRpYVF1ZXJ5
JgogICAgICwgbV9tZWRpYVR5cGUoby5tX21lZGlhVHlwZSkKICAgICAsIG1fZXhwcmVzc2lvbnMo
YWRvcHRQdHIobmV3IFZlY3RvcjxPd25QdHI8TWVkaWFRdWVyeUV4cD4gPihvLm1fZXhwcmVzc2lv
bnMtPnNpemUoKSkpKQogICAgICwgbV9pZ25vcmVkKG8ubV9pZ25vcmVkKQotICAgICwgbV9zZXJp
YWxpemF0aW9uQ2FjaGUoby5tX3NlcmlhbGl6YXRpb25DYWNoZSkKKyAgICAsIG1fc2VyaWFsaXpl
ZFF1ZXJ5KG8ubV9zZXJpYWxpemVkUXVlcnkpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZXhwcmVzc2lvbnMtPnNpemUoKTsgKytpKQogICAgICAgICAoKm1fZXhwcmVzc2lvbnMp
W2ldID0gby5tX2V4cHJlc3Npb25zLT5hdChpKS0+Y29weSgpOwogfQogCitQYXNzT3duUHRyPE1l
ZGlhUXVlcnk+IE1lZGlhUXVlcnk6OmNvcHkoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTWVkaWFRdWVyeSgqdGhpcykpOworfQorCiBNZWRpYVF1ZXJ5Ojp+TWVkaWFRdWVyeSgp
CiB7CiB9CiAKLS8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNjb21wYXJlLW1lZGlh
LXF1ZXJpZXMKIGJvb2wgTWVkaWFRdWVyeTo6b3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5JiBv
dGhlcikgY29uc3QKIHsKICAgICByZXR1cm4gY3NzVGV4dCgpID09IG90aGVyLmNzc1RleHQoKTsK
IH0KIAotLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3NlcmlhbGl6ZS1hLWxpc3Qt
b2YtbWVkaWEtcXVlcmllcwotU3RyaW5nIE1lZGlhUXVlcnk6OmNzc1RleHQoKSBjb25zdAorY29u
c3QgU3RyaW5nJiBNZWRpYVF1ZXJ5Ojpjc3NUZXh0KCkgY29uc3QKIHsKLSAgICBpZiAobV9zZXJp
YWxpemF0aW9uQ2FjaGUuaXNOdWxsKCkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8TWVkaWFRdWVyeSo+
KHRoaXMpLT5tX3NlcmlhbGl6YXRpb25DYWNoZSA9IHNlcmlhbGl6ZSgpOwotCi0gICAgcmV0dXJu
IG1fc2VyaWFsaXphdGlvbkNhY2hlOworICAgIGlmIChtX3NlcmlhbGl6ZWRRdWVyeS5pc051bGwo
KSkKKyAgICAgICAgY29uc3RfY2FzdDxNZWRpYVF1ZXJ5Kj4odGhpcyktPm1fc2VyaWFsaXplZFF1
ZXJ5ID0gc2VyaWFsaXplKCk7CisgICAgcmV0dXJuIG1fc2VyaWFsaXplZFF1ZXJ5OwogfQogCi19
IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5o
CShyZXZpc2lvbiAxMTg2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw0NCArMzAsNDIgQEAKICNkZWZpbmUgTWVkaWFRdWVyeV9oCiAK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCiBjbGFzcyBNZWRpYVF1ZXJ5RXhwOwogCiBjbGFz
cyBNZWRpYVF1ZXJ5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBlbnVtIFJlc3RyaWN0b3IgewotICAgICAgICBPbmx5LCBOb3QsIE5vbmUKLSAgICB9OworICAg
IGVudW0gUmVzdHJpY3RvciB7IE9ubHksIE5vdCwgTm9uZSB9OwogCiAgICAgdHlwZWRlZiBWZWN0
b3I8T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4gRXhwcmVzc2lvblZlY3RvcjsKIAotICAgIE1lZGlh
UXVlcnkoUmVzdHJpY3RvciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8RXhw
cmVzc2lvblZlY3Rvcj4gZXhwcnMpOworICAgIE1lZGlhUXVlcnkoUmVzdHJpY3RvciwgY29uc3Qg
U3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NPd25QdHI8RXhwcmVzc2lvblZlY3Rvcj4pOwogICAgIH5N
ZWRpYVF1ZXJ5KCk7CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeSYpIGNv
bnN0OworCiAgICAgUmVzdHJpY3RvciByZXN0cmljdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0
cmljdG9yOyB9Ci0gICAgY29uc3QgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5RXhwPiA+KiBleHBy
ZXNzaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbnMuZ2V0KCk7IH0KLSAgICBTdHJp
bmcgbWVkaWFUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVR5cGU7IH0KLSAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeSYgb3RoZXIpIGNvbnN0OwotICAgIFN0cmluZyBjc3NU
ZXh0KCkgY29uc3Q7CisgICAgY29uc3QgRXhwcmVzc2lvblZlY3RvciYgZXhwcmVzc2lvbnMoKSBj
b25zdCB7IHJldHVybiAqbV9leHByZXNzaW9uczsgfQorICAgIGNvbnN0IFN0cmluZyYgbWVkaWFU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVR5cGU7IH0KKyAgICBjb25zdCBTdHJpbmcmIGNz
c1RleHQoKSBjb25zdDsKICAgICBib29sIGlnbm9yZWQoKSBjb25zdCB7IHJldHVybiBtX2lnbm9y
ZWQ7IH0KIAotICAgIFBhc3NPd25QdHI8TWVkaWFRdWVyeT4gY29weSgpIGNvbnN0IHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5KCp0aGlzKSk7IH0KKyAgICBQYXNzT3duUHRyPE1lZGlh
UXVlcnk+IGNvcHkoKSBjb25zdDsKIAotIHByaXZhdGU6Citwcml2YXRlOgogICAgIE1lZGlhUXVl
cnkoY29uc3QgTWVkaWFRdWVyeSYpOworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE1lZGlhUXVl
cnkmKTsKKyAgICAKKyAgICBTdHJpbmcgc2VyaWFsaXplKCkgY29uc3Q7CiAKICAgICBSZXN0cmlj
dG9yIG1fcmVzdHJpY3RvcjsKICAgICBTdHJpbmcgbV9tZWRpYVR5cGU7CiAgICAgT3duUHRyPEV4
cHJlc3Npb25WZWN0b3I+IG1fZXhwcmVzc2lvbnM7CiAgICAgYm9vbCBtX2lnbm9yZWQ7Ci0gICAg
U3RyaW5nIG1fc2VyaWFsaXphdGlvbkNhY2hlOwotCi0gICAgU3RyaW5nIHNlcmlhbGl6ZSgpIGNv
bnN0OworICAgIFN0cmluZyBtX3NlcmlhbGl6ZWRRdWVyeTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCShyZXZp
c2lvbiAxMTg2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDUwICs1OCw0MCBAQCB1c2luZyBuYW1lc3BhY2UgTWVk
aWFGZWF0dXJlTmFtZXM7CiAKIGVudW0gTWVkaWFGZWF0dXJlUHJlZml4IHsgTWluUHJlZml4LCBN
YXhQcmVmaXgsIE5vUHJlZml4IH07CiAKLXR5cGVkZWYgYm9vbCAoKkV2YWxGdW5jKShDU1NWYWx1
ZSosIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXgpOwotdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBFdmFsRnVuYz4gRnVuY3Rpb25NYXA7Ci1zdGF0aWMg
RnVuY3Rpb25NYXAqIGdGdW5jdGlvbk1hcDsKLQotLyoKLSAqIEZJWE1FOiBmb2xsb3dpbmcgbWVk
aWEgZmVhdHVyZXMgYXJlIG5vdCBpbXBsZW1lbnRlZDogY29sb3JfaW5kZXgsIHNjYW4sIHJlc29s
dXRpb24KLSAqCi0gKiBjb2xvcl9pbmRleCwgbWluLWNvbG9yLWluZGV4LCBtYXhfY29sb3JfaW5k
ZXg6IEl0J3MgdW5rbm93biBob3cgdG8gcmV0cmlldmUKLSAqIHRoZSBpbmZvcm1hdGlvbiBpZiB0
aGUgZGlzcGxheSBtb2RlIGlzIGluZGV4ZWQKLSAqIHNjYW46IFRoZSAic2NhbiIgbWVkaWEgZmVh
dHVyZSBkZXNjcmliZXMgdGhlIHNjYW5uaW5nIHByb2Nlc3Mgb2YKLSAqIHR2IG91dHB1dCBkZXZp
Y2VzLiBJdCdzIHVua25vd24gaG93IHRvIHJldHJpZXZlIHRoaXMgaW5mb3JtYXRpb24gZnJvbQot
ICogdGhlIHBsYXRmb3JtCi0gKiByZXNvbHV0aW9uLCBtaW4tcmVzb2x1dGlvbiwgbWF4LXJlc29s
dXRpb246IGNzcyBwYXJzZXIgZG9lc24ndCBzZWVtIHRvCi0gKiBzdXBwb3J0IENTU19ESU1FTlNJ
T04KLSAqLwordHlwZWRlZiBib29sICgqTWVkaWFGZWF0dXJlRXZhbHVhdGlvbkZ1bmN0aW9uKShD
U1NWYWx1ZSosIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXgpOwordHlw
ZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBNZWRpYUZlYXR1cmVFdmFsdWF0aW9uRnVu
Y3Rpb24+IEZ1bmN0aW9uTWFwOwogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5RXZh
bHVhdG9yKGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0KQotICAgIDogbV9mcmFtZSgwKQotICAgICwg
bV9zdHlsZSgwKQotICAgICwgbV9leHBSZXN1bHQobWVkaWFGZWF0dXJlUmVzdWx0KQotewotfQor
Ly8gRklYTUU6IGNvbG9yLWluZGV4LCBtaW4tY29sb3ItaW5kZXgsIGFuZCBtYXgtY29sb3ItaW5k
ZXggYXJlIG5vdCBpbXBsZW1lbnRlZC4KKy8vIFRvIGltcGxlbWVudCB0aGVtIHdlJ2QgaGF2ZSB0
byBhZGQgaW5mb3JtYXRpb24gYWJvdXQgaW5kZXhlZCBjb2xvciB0byB0aGUgV2ViQ29yZSBwbGF0
Zm9ybTsKKy8vIG1vc3QgbW9kZXJuIHBsYXRmb3JtcyBkb24ndCBtYWtlIHVzZSBvZiBpbmRleGVk
IGNvbG9yLCBzbyBpdCdzIG5vdCBjbGVhciB0aGlzIGlzIHdvcnRod2hpbGUuCisKKy8vIEZJWE1F
OiBzY2FuIGlzIG5vdCBpbXBsZW1lbnRlZDogVGhpcyBtZWRpYSBmZWF0dXJlIGRlc2NyaWJlcyB0
aGUgc2Nhbm5pbmcgcHJvY2VzcyBvZgorLy8gVFYgb3V0cHV0IGRldmljZXMuIFRvIGltcGxlbWVu
dCB0aGlzIHdlJ2QgaGF2ZSB0byBhZGQgaW5mb3JtYXRpb24gdG8gdGhlIFdlYkNvcmUgcGxhdGZv
cm0uCiAKLU1lZGlhUXVlcnlFdmFsdWF0b3I6OiBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0
cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0KQorLy8gRklY
TUU6IHJlc29sdXRpb24sIG1pbi1yZXNvbHV0aW9uLCBtYXgtcmVzb2x1dGlvbiBhcmUgbm90IGlt
cGxlbWVudGVkOiBBdCB0aGUgdGltZSB0aGlzCisvLyB3YXMgb3JpZ2luYWxseSB3cml0dGVuIHRo
ZSBhdXRob3Igc2FpZCB0aGUgQ1NTIHBhcnNlciAiZGlkbid0IHNlZW0gdG8gc3VwcG9ydCBDU1Nf
RElNRU5TSU9OIi4KKworTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihj
b25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBib29sIG1lZGlhRmVhdHVyZVJlc3VsdCkK
ICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVkTWVkaWFUeXBlKQogICAgICwgbV9mcmFtZSgwKQog
ICAgICwgbV9zdHlsZSgwKQotICAgICwgbV9leHBSZXN1bHQobWVkaWFGZWF0dXJlUmVzdWx0KQor
ICAgICwgbV9tZWRpYUZlYXR1cmVSZXN1bHQobWVkaWFGZWF0dXJlUmVzdWx0KQogewogfQogCi1N
ZWRpYVF1ZXJ5RXZhbHVhdG9yOjogTWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBjaGFyKiBhY2Nl
cHRlZE1lZGlhVHlwZSwgYm9vbCBtZWRpYUZlYXR1cmVSZXN1bHQpCitNZWRpYVF1ZXJ5RXZhbHVh
dG9yOjpNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IGNoYXIqIGFjY2VwdGVkTWVkaWFUeXBlLCBi
b29sIG1lZGlhRmVhdHVyZVJlc3VsdCkKICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVkTWVkaWFU
eXBlKQogICAgICwgbV9mcmFtZSgwKQogICAgICwgbV9zdHlsZSgwKQotICAgICwgbV9leHBSZXN1
bHQobWVkaWFGZWF0dXJlUmVzdWx0KQorICAgICwgbV9tZWRpYUZlYXR1cmVSZXN1bHQobWVkaWFG
ZWF0dXJlUmVzdWx0KQogewogfQogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjogTWVkaWFRdWVyeUV2
YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIFJl
bmRlclN0eWxlKiBzdHlsZSkKK01lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0
b3IoY29uc3QgU3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRnJhbWUqIGZyYW1lLCBSZW5kZXJT
dHlsZSogc3R5bGUpCiAgICAgOiBtX21lZGlhVHlwZShhY2NlcHRlZE1lZGlhVHlwZSkKICAgICAs
IG1fZnJhbWUoZnJhbWUpCiAgICAgLCBtX3N0eWxlKHN0eWxlKQotICAgICwgbV9leHBSZXN1bHQo
ZmFsc2UpIC8vIGRvZXNuJ3QgbWF0dGVyIHdoZW4gd2UgaGF2ZSBtX2ZyYW1lIGFuZCBtX3N0eWxl
CisgICAgLCBtX21lZGlhRmVhdHVyZVJlc3VsdChmYWxzZSkgLy8gSWdub3JlZCBpZiBib3RoIG1f
ZnJhbWUgYW5kIG1fc3R5bGUgYXJlIG5vbi1udWxsLgogewogfQogCkBAIC0xMzYsMzUgKzEyNiwz
NSBAQCBib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWwoY29uc3QgTWVkCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgY29uc3QgVmVjdG9yPE93blB0cjxNZWRpYVF1ZXJ5PiA+JiBxdWVy
aWVzID0gcXVlcnlTZXQtPnF1ZXJ5VmVjdG9yKCk7Ci0gICAgaWYgKCFxdWVyaWVzLnNpemUoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7IC8vIGVtcHR5IHF1ZXJ5IGxpc3QgZXZhbHVhdGVzIHRvIHRy
dWUKIAotICAgIC8vIGl0ZXJhdGUgb3ZlciBxdWVyaWVzLCBzdG9wIGlmIGFueSBvZiB0aGVtIGV2
YWwgdG8gdHJ1ZSAoT1Igc2VtYW50aWNzKQotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWVyaWVzLnNpemUoKSAmJiAhcmVzdWx0OyArK2kpIHsK
LSAgICAgICAgTWVkaWFRdWVyeSogcXVlcnkgPSBxdWVyaWVzW2ldLmdldCgpOworICAgIGJvb2wg
cmVzdWx0ID0gdHJ1ZTsKKworICAgIC8vIEl0ZXJhdGUgb3ZlciBxdWVyaWVzIGFuZCBzdG9wIGlm
IGFueSBvZiB0aGVtIGV2YWwgdG8gdHJ1ZSAoIm9yIiBzZW1hbnRpY3MpLgorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcXVlcmllcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBNZWRp
YVF1ZXJ5JiBxdWVyeSA9ICpxdWVyaWVzW2ldOworCisgICAgICAgIHJlc3VsdCA9IGZhbHNlOwog
Ci0gICAgICAgIGlmIChxdWVyeS0+aWdub3JlZCgpKQorICAgICAgICBpZiAocXVlcnkuaWdub3Jl
ZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKG1lZGlhVHlwZU1hdGNo
KHF1ZXJ5LT5tZWRpYVR5cGUoKSkpIHsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxPd25QdHI8
TWVkaWFRdWVyeUV4cD4gPiogZXhwcyA9IHF1ZXJ5LT5leHByZXNzaW9ucygpOworICAgICAgICBp
ZiAobWVkaWFUeXBlTWF0Y2gocXVlcnkubWVkaWFUeXBlKCkpKSB7CisgICAgICAgICAgICBjb25z
dCBWZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlFeHA+ID4mIGV4cHJlc3Npb25zID0gcXVlcnkuZXhw
cmVzc2lvbnMoKTsKICAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBleHByZXNzaW9ucywg
c3RvcCBpZiBhbnkgb2YgdGhlbSBldmFsIHRvIGZhbHNlCiAgICAgICAgICAgICAvLyAoQU5EIHNl
bWFudGljcykKICAgICAgICAgICAgIHNpemVfdCBqID0gMDsKLSAgICAgICAgICAgIGZvciAoOyBq
IDwgZXhwcy0+c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBib29sIGV4cHJSZXN1bHQg
PSBldmFsKGV4cHMtPmF0KGopLmdldCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoc3R5bGVSZXNv
bHZlciAmJiBleHBzLT5hdChqKS0+aXNWaWV3cG9ydERlcGVuZGVudCgpKQotICAgICAgICAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5hZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1
bHQoZXhwcy0+YXQoaikuZ2V0KCksIGV4cHJSZXN1bHQpOwotICAgICAgICAgICAgICAgIGlmICgh
ZXhwclJlc3VsdCkKKyAgICAgICAgICAgIGZvciAoOyBqIDwgZXhwcmVzc2lvbnMuc2l6ZSgpOyAr
K2opIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBldmFsKCpleHByZXNzaW9uc1tqXSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIgJiYgZXhwcmVzc2lvbnNbal0tPmlzVmll
d3BvcnREZXBlbmRlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+YWRk
Vmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KCpleHByZXNzaW9uc1tqXSwgcmVzdWx0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gYXNzdW1lIHRy
dWUgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QsCi0gICAgICAgICAgICAvLyBvdGhl
cndpc2UgYXNzdW1lIGZhbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3Io
cXVlcnktPnJlc3RyaWN0b3IoKSwgZXhwcy0+c2l6ZSgpID09IGopOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS0+cmVzdHJpY3Rvcigp
LCBmYWxzZSk7CisgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS5yZXN0cmlj
dG9yKCksIHJlc3VsdCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBicmVhazsK
ICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjYzLDcgKzI1Myw3IEBAIHN0YXRpYyBi
b29sIGFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwKICAgICAgICAgaW50IGggPSAwOwogICAg
ICAgICBpbnQgdiA9IDA7CiAgICAgICAgIGlmIChwYXJzZUFzcGVjdFJhdGlvKHZhbHVlLCBoLCB2
KSkKLSAgICAgICAgICAgIHJldHVybiB2ICE9IDAgJiYgY29tcGFyZVZhbHVlKHdpZHRoICogdiwg
aGVpZ2h0ICogaCwgb3ApOworICAgICAgICAgICAgcmV0dXJuIHYgJiYgY29tcGFyZVZhbHVlKHdp
ZHRoICogdiwgaGVpZ2h0ICogaCwgb3ApOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkBAIC0yNzksNyArMjY5LDcgQEAgc3RhdGljIGJvb2wgZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlh
RmVhdAogICAgICAgICBpbnQgaCA9IDA7CiAgICAgICAgIGludCB2ID0gMDsKICAgICAgICAgaWYg
KHBhcnNlQXNwZWN0UmF0aW8odmFsdWUsIGgsIHYpKQotICAgICAgICAgICAgcmV0dXJuIHYgIT0g
MCAgJiYgY29tcGFyZVZhbHVlKHN0YXRpY19jYXN0PGludD4oc2cud2lkdGgoKSkgKiB2LCBzdGF0
aWNfY2FzdDxpbnQ+KHNnLmhlaWdodCgpKSAqIGgsIG9wKTsKKyAgICAgICAgICAgIHJldHVybiB2
ICYmIGNvbXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHNnLndpZHRoKCkpICogdiwgc3RhdGlj
X2Nhc3Q8aW50PihzZy5oZWlnaHQoKSkgKiBoLCBvcCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTUwMyw2OCArNDkzLDUxIEBAIHN0YXRpYyBib29sIHRyYW5zZm9ybV8yZE1l
ZGlhRmVhdHVyZUV2YWwKIAogc3RhdGljIGJvb2wgdHJhbnNmb3JtXzNkTWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1
cmVQcmVmaXggb3ApCiB7Ci0gICAgYm9vbCByZXR1cm5WYWx1ZUlmTm9QYXJhbWV0ZXI7Ci0gICAg
aW50IGhhdmUzZFJlbmRlcmluZzsKLQotI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpCiAgICAgYm9v
bCB0aHJlZURFbmFibGVkID0gZmFsc2U7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorI2lmIEVOQUJMRSgzRF9SRU5ERVJJTkcpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkK
ICAgICAgICAgdGhyZWVERW5hYmxlZCA9IHZpZXctPmNvbXBvc2l0b3IoKS0+Y2FuUmVuZGVyM0RU
cmFuc2Zvcm1zKCk7Ci0jZW5kaWYKLQotICAgIHJldHVyblZhbHVlSWZOb1BhcmFtZXRlciA9IHRo
cmVlREVuYWJsZWQ7Ci0gICAgaGF2ZTNkUmVuZGVyaW5nID0gdGhyZWVERW5hYmxlZCA/IDEgOiAw
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZnJhbWUpOwotICAgIHJldHVyblZhbHVlSWZOb1Bh
cmFtZXRlciA9IGZhbHNlOwotICAgIGhhdmUzZFJlbmRlcmluZyA9IDA7CiAjZW5kaWYKLQogICAg
IGlmICh2YWx1ZSkgewogICAgICAgICBmbG9hdCBudW1iZXI7Ci0gICAgICAgIHJldHVybiBudW1i
ZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJlVmFsdWUoaGF2ZTNkUmVuZGVyaW5nLCBz
dGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKKyAgICAgICAgcmV0dXJuIG51bWJlclZhbHVl
KHZhbHVlLCBudW1iZXIpICYmIGNvbXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHRocmVlREVu
YWJsZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKICAgICB9Ci0gICAgcmV0dXJu
IHJldHVyblZhbHVlSWZOb1BhcmFtZXRlcjsKKyAgICByZXR1cm4gdGhyZWVERW5hYmxlZDsKIH0K
IAogc3RhdGljIGJvb2wgdmlld19tb2RlTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IFJlbmRlclN0eWxlKiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0g
ICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICBBU1NFUlRfVU5VU0VEKG9wLCBvcCA9PSBOb1ByZWZp
eCk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFBh
Z2U6OnN0cmluZ1RvVmlld01vZGUoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSktPmdldFN0cmluZ1ZhbHVlKCkpID09IGZyYW1lLT5wYWdlKCktPnZpZXdNb2RlKCk7CiB9CiAK
LXN0YXRpYyB2b2lkIGNyZWF0ZUZ1bmN0aW9uTWFwKCkKK3N0YXRpYyBGdW5jdGlvbk1hcCogY3Jl
YXRlRnVuY3Rpb25NYXAoKQogewotICAgIC8vIENyZWF0ZSB0aGUgdGFibGUuCi0gICAgZ0Z1bmN0
aW9uTWFwID0gbmV3IEZ1bmN0aW9uTWFwOworICAgIEZ1bmN0aW9uTWFwKiBmdW5jdGlvbk1hcCA9
IG5ldyBGdW5jdGlvbk1hcDsKICNkZWZpbmUgQUREX1RPX0ZVTkNUSU9OTUFQKG5hbWUsIHN0cikg
IFwKLSAgICBnRnVuY3Rpb25NYXAtPnNldChuYW1lIyNNZWRpYUZlYXR1cmUuaW1wbCgpLCBuYW1l
IyNNZWRpYUZlYXR1cmVFdmFsKTsKKyAgICBmdW5jdGlvbk1hcC0+c2V0KG5hbWUjI01lZGlhRmVh
dHVyZS5pbXBsKCksIG5hbWUjI01lZGlhRmVhdHVyZUV2YWwpOwogICAgIENTU19NRURJQVFVRVJZ
X05BTUVTX0ZPUl9FQUNIX01FRElBRkVBVFVSRShBRERfVE9fRlVOQ1RJT05NQVApOwogI3VuZGVm
IEFERF9UT19GVU5DVElPTk1BUAorICAgIHJldHVybiBmdW5jdGlvbk1hcDsKIH0KIAotYm9vbCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yOjpldmFsKGNvbnN0IE1lZGlhUXVlcnlFeHAqIGV4cHIpIGNvbnN0
Citib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWwoY29uc3QgTWVkaWFRdWVyeUV4cCYgZXhw
cmVzc2lvbikgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fc3R5bGUpCi0gICAgICAg
IHJldHVybiBtX2V4cFJlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFGZWF0dXJlUmVzdWx0
OwogCi0gICAgaWYgKCFleHByLT5pc1ZhbGlkKCkpCisgICAgaWYgKCFleHByZXNzaW9uLmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFnRnVuY3Rpb25NYXApCi0g
ICAgICAgIGNyZWF0ZUZ1bmN0aW9uTWFwKCk7Ci0KLSAgICAvLyBjYWxsIHRoZSBtZWRpYSBmZWF0
dXJlIGV2YWx1YXRpb24gZnVuY3Rpb24uIEFzc3VtZSBubyBwcmVmaXgKLSAgICAvLyBhbmQgbGV0
IHRyYW1wb2xpbmUgZnVuY3Rpb25zIG92ZXJyaWRlIHRoZSBwcmVmaXggaWYgcHJlZml4IGlzCi0g
ICAgLy8gdXNlZAotICAgIEV2YWxGdW5jIGZ1bmMgPSBnRnVuY3Rpb25NYXAtPmdldChleHByLT5t
ZWRpYUZlYXR1cmUoKS5pbXBsKCkpOwotICAgIGlmIChmdW5jKQotICAgICAgICByZXR1cm4gZnVu
YyhleHByLT52YWx1ZSgpLCBtX3N0eWxlLmdldCgpLCBtX2ZyYW1lLCBOb1ByZWZpeCk7CisgICAg
c3RhdGljIEZ1bmN0aW9uTWFwKiBmdW5jdGlvbk1hcCA9IGNyZWF0ZUZ1bmN0aW9uTWFwKCk7Cisg
ICAgTWVkaWFGZWF0dXJlRXZhbHVhdGlvbkZ1bmN0aW9uIGZ1bmN0aW9uID0gZnVuY3Rpb25NYXAt
PmdldChleHByZXNzaW9uLm1lZGlhRmVhdHVyZSgpLmltcGwoKSk7CiAKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gU3RhcnQgd2l0aCBubyBwcmVmaXg6IFNvbWUgdHJhbXBvbGluZSBmdW5jdGlv
bnMgYWRkIHRoZSBwcmVmaXggYW5kIGNhbGwgb3RoZXIgbWVkaWEgZmVhdHVyZSBmdW5jdGlvbnMu
CisgICAgcmV0dXJuIGZ1bmN0aW9uICYmIGZ1bmN0aW9uKGV4cHJlc3Npb24udmFsdWUoKSwgbV9z
dHlsZS5nZXQoKSwgbV9mcmFtZSwgTm9QcmVmaXgpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCShyZXZpc2lvbiAxMTg2
NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw0MiArMzEsMzIgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKIGNsYXNzIEZyYW1lOwogY2xhc3MgTWVkaWFRdWVyeUV4
cDsKIGNsYXNzIE1lZGlhUXVlcnlTZXQ7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0eWxl
UmVzb2x2ZXI7CiAKLS8qKgotICogQ2xhc3MgdGhhdCBldmFsdWF0ZXMgY3NzIG1lZGlhIHF1ZXJp
ZXMgYXMgZGVmaW5lZCBpbgotICogQ1NTMyBNb2R1bGUgIk1lZGlhIFF1ZXJpZXMiIChodHRwOi8v
d3d3LnczLm9yZy9UUi9jc3MzLW1lZGlhcXVlcmllcy8pCi0gKiBTcGVjaWFsIGNvbnN0cnVjdG9y
cyBhcmUgbmVlZGVkLCBpZiBzaW1wbGUgbWVkaWEgcXVlcmllcyBhcmUgdG8gYmUKLSAqIGV2YWx1
YXRlZCB3aXRob3V0IGtub3dsZWRnZSBvZiB0aGUgbWVkaXVtIGZlYXR1cmVzLiBUaGlzIGNhbiBo
YXBwZW4KLSAqIGZvciBleGFtcGxlIHdoZW4gcGFyc2luZyBVQSBzdHlsZXNoZWV0cywgaWYgZXZh
bHVhdGlvbiBpcyBkb25lCi0gKiByaWdodCBhZnRlciBwYXJzaW5nLgotICoKLSAqIHRoZSBib29s
ZWFuIHBhcmFtZXRlciBpcyB1c2VkIHRvIGFwcHJveGltYXRlIHJlc3VsdHMgb2YgZXZhbHVhdGlv
biwgaWYKLSAqIHRoZSBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIGFyZSBub3Qga25vd24uIFRoaXMg
Y2FuIGJlIHVzZWQgdG8gcHJ1bmUgdGhlIGxvYWRpbmcKLSAqIG9mIHN0eWxlc2hlZXRzIHRvIG9u
bHkgdGhvc2Ugd2hpY2ggYXJlIHByb2JhYmxlIHRvIG1hdGNoLgotICovCisvLyBDbGFzcyB0aGF0
IGV2YWx1YXRlcyBDU1MgbWVkaWEgcXVlcmllcyBhcyBkZWZpbmVkIGluIENTUzMgTW9kdWxlICJN
ZWRpYSBRdWVyaWVzIi4KKy8vCisvLyBTcGVjaWFsIGNvbnN0cnVjdG9ycyBhcmUgc3VwcGxpZWQg
c28gdGhhdCBzaW1wbGUgbWVkaWEgcXVlcmllcyBjYW4gdG8gYmUKKy8vIGV2YWx1YXRlZCB3aXRo
b3V0IGtub3dsZWRnZSBvZiB0aGUgbWVkaXVtIGZlYXR1cmVzLiBUaGlzIGlzIHVzZWQsIGZvciBl
eGFtcGxlLAorLy8gd2hlbiBwYXJzaW5nIHVzZXIgYWdlbnQgc3R5bGVzaGVldHMuCisvLworLy8g
VGhlIGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIGFwcHJv
eGltYXRlIHJlc3VsdHMgb2YgZXZhbHVhdGlvbiwKKy8vIGlmIHRoZSBkZXZpY2UgY2hhcmFjdGVy
aXN0aWNzIGFyZSBub3Qga25vd24uIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJ1bmUgdGhlIGxvYWRp
bmcKKy8vIG9mIHN0eWxlc2hlZXRzIHRvIHJlbW92ZSB0aG9zZSB0aGF0IGRlZmluaXRlbHkgd29u
J3QgbWF0Y2guCisKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3IgewogICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShNZWRpYVF1ZXJ5RXZhbHVhdG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgLyoqIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBvbmx5
IHNpbXBsZSBtZWRpYSBxdWVyaWVzCi0gICAgICogIEV2YWx1YXRvciByZXR1cm5zIHRydWUgZm9y
ICJhbGwiLCBhbmQgcmV0dXJucyB2YWx1ZSBvZiBcbWVkaWFGZWF0dXJlUmVzdWx0Ci0gICAgICog
IGZvciBhbnkgbWVkaWEgZmVhdHVyZXMKLSAgICAgKi8KLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9y
KGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0ID0gZmFsc2UpOwotCi0gICAgLyoqIENyZWF0ZXMgZXZh
bHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBxdWVyaWVzCi0gICAgICog
IEV2YWx1YXRvciAgcmV0dXJucyB0cnVlIGZvciBhY2NlcHRlZE1lZGlhVHlwZSBhbmQgcmV0dXJu
cyB2YWx1ZSBvZiBcbWVkaWFmZWF0dXJlUmVzdWx0Ci0gICAgICogIGZvciBhbnkgbWVkaWEgZmVh
dHVyZXMKLSAgICAgKi8KKyAgICAvLyBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0ZXMg
b25seSBzaW1wbGUgbWVkaWEgcXVlcmllcy4KKyAgICAvLyBFdmFsdWF0b3IgcmV0dXJucyB0cnVl
IGZvciBhY2NlcHRlZE1lZGlhVHlwZSBhbmQgdXNlIG1lZGlhRmVhdHVyZVJlc3VsdCBmb3IgYW55
IG1lZGlhIGZlYXR1cmVzLgogICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3QgU3RyaW5nJiBh
Y2NlcHRlZE1lZGlhVHlwZSwgYm9vbCBtZWRpYUZlYXR1cmVSZXN1bHQgPSBmYWxzZSk7CiAgICAg
TWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBjaGFyKiBhY2NlcHRlZE1lZGlhVHlwZSwgYm9vbCBt
ZWRpYUZlYXR1cmVSZXN1bHQgPSBmYWxzZSk7CiAKLSAgICAvKiogQ3JlYXRlcyBldmFsdWF0b3Ig
d2hpY2ggZXZhbHVhdGVzIGZ1bGwgbWVkaWEgcXVlcmllcwotICAgICAqLworICAgIC8vIENyZWF0
ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBmdWxsIG1lZGlhIHF1ZXJpZXMuCiAgICAgTWVk
aWFRdWVyeUV2YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSos
IFJlbmRlclN0eWxlKik7CiAKICAgICB+TWVkaWFRdWVyeUV2YWx1YXRvcigpOwpAQCAtNzQsMTgg
KzY0LDE5IEBAIHB1YmxpYzoKICAgICBib29sIG1lZGlhVHlwZU1hdGNoKGNvbnN0IFN0cmluZyYg
bWVkaWFUeXBlVG9NYXRjaCkgY29uc3Q7CiAgICAgYm9vbCBtZWRpYVR5cGVNYXRjaFNwZWNpZmlj
KGNvbnN0IGNoYXIqIG1lZGlhVHlwZVRvTWF0Y2gpIGNvbnN0OwogCi0gICAgLyoqIEV2YWx1YXRl
cyBhIGxpc3Qgb2YgbWVkaWEgcXVlcmllcyAqLworICAgIC8vIEV2YWx1YXRlcyBhIGxpc3Qgb2Yg
bWVkaWEgcXVlcmllcy4KICAgICBib29sIGV2YWwoY29uc3QgTWVkaWFRdWVyeVNldCosIFN0eWxl
UmVzb2x2ZXIqID0gMCkgY29uc3Q7CiAKLSAgICAvKiogRXZhbHVhdGVzIG1lZGlhIHF1ZXJ5IHN1
YmV4cHJlc3Npb24sIGllICJhbmQgKG1lZGlhLWZlYXR1cmU6IHZhbHVlKSIgcGFydCAqLwotICAg
IGJvb2wgZXZhbChjb25zdCBNZWRpYVF1ZXJ5RXhwKikgY29uc3Q7CisgICAgLy8gRXZhbHVhdGVz
IG1lZGlhIHF1ZXJ5IHN1YmV4cHJlc3Npb24sIGkuZS4gImFuZCAobWVkaWEtZmVhdHVyZTogdmFs
dWUpIiBwYXJ0LgorICAgIGJvb2wgZXZhbChjb25zdCBNZWRpYVF1ZXJ5RXhwJikgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbWVkaWFUeXBlOwogICAgIEZyYW1lKiBtX2ZyYW1lOyAv
LyBub3Qgb3duZWQKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7Ci0gICAgYm9vbCBt
X2V4cFJlc3VsdDsKKyAgICBib29sIG1fbWVkaWFGZWF0dXJlUmVzdWx0OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CShyZXZpc2lvbiAxMTg2NDQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAKICNpbmNsdWRlICJNYXRyaXhUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJNZWRp
YVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3Jv
dXAuaCIKQEAgLTE2MCw2ICsxNjEsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCitzdHJ1Y3QgTWVkaWFRdWVyeVJlc3VsdCB7CisgICAgTWVk
aWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwJiBleHByZXNzaW9uLCBib29sIHJlc3Vs
dCkKKyAgICAgICAgOiBleHByZXNzaW9uKGV4cHJlc3Npb24pCisgICAgICAgICwgcmVzdWx0KHJl
c3VsdCkKKyAgICB7CisgICAgfQorCisgICAgTWVkaWFRdWVyeUV4cCBleHByZXNzaW9uOworICAg
IGJvb2wgcmVzdWx0OworfTsKKwogI2RlZmluZSBIQU5ETEVfSU5IRVJJVChwcm9wLCBQcm9wKSBc
CiBpZiAoaXNJbmhlcml0KSB7IFwKICAgICBtX3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRTdHls
ZS0+cHJvcCgpKTsgXApAQCAtNTEyOCwxNiArNTE0MCwxNiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6
Omhhc1NlbGVjdG9yRm9yQXR0cmliCiAgICAgcmV0dXJuIG1fZmVhdHVyZXMuYXR0cnNJblJ1bGVz
LmNvbnRhaW5zKGF0dHJuYW1lLmltcGwoKSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6YWRk
Vmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqIGV4
cHIsIGJvb2wgcmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCYgZXhwcmVzc2lvbiwgYm9vbCBy
ZXN1bHQpCiB7Ci0gICAgbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVu
ZChhZG9wdFB0cihuZXcgTWVkaWFRdWVyeVJlc3VsdCgqZXhwciwgcmVzdWx0KSkpOworICAgIG1f
dmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5hcHBlbmQoTWVkaWFRdWVyeVJlc3Vs
dChleHByZXNzaW9uLCByZXN1bHQpKTsKIH0KIAogYm9vbCBTdHlsZVJlc29sdmVyOjphZmZlY3Rl
ZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdAogewotICAgIHVuc2lnbmVkIHMgPSBtX3ZpZXdwb3J0
RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzOyBpKyspIHsKLSAgICAgICAgaWYgKG1fbWVkaXVtLT5ldmFsKCZtX3ZpZXdwb3J0
RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fZXhwcmVzc2lvbikgIT0gbV92aWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX3Jlc3VsdCkKKyAgICB1bnNpZ25lZCBz
aXplID0gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLnNpemUoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGlmIChtX21lZGl1
bS0+ZXZhbChtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0uZXhwcmVzc2lv
bikgIT0gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLnJlc3VsdCkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDExODY0NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDUyICsyMiwz
MiBAQAogI2lmbmRlZiBTdHlsZVJlc29sdmVyX2gKICNkZWZpbmUgU3R5bGVSZXNvbHZlcl9oCiAK
LSNpbmNsdWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVk
ZSAiTGlua0hhc2guaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKLSNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBFU21hcnRNaW5pbXVtRm9yRm9u
dFNpemUgeyBEb05vdFVzZVNtYXJ0TWluaW11bUZvckZvbnRTaXplLCBVc2VTbWFydE1pbmltdW1G
b3JGb250Rml6ZSB9OwotCiBjbGFzcyBDU1NGb250U2VsZWN0b3I7Ci1jbGFzcyBDU1NQYWdlUnVs
ZTsKLWNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwotY2xhc3MgQ1NTUHJvcGVydHk7Ci1jbGFzcyBD
U1NSdWxlTGlzdDsKLWNsYXNzIENTU0ZvbnRGYWNlOwotY2xhc3MgQ1NTRm9udEZhY2VSdWxlOwog
Y2xhc3MgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTsKIGNsYXNzIENTU0ltYWdlU2V0VmFsdWU7CiBj
bGFzcyBDU1NJbWFnZVZhbHVlOwotY2xhc3MgQ1NTU2VsZWN0b3I7CitjbGFzcyBDU1NSdWxlTGlz
dDsKIGNsYXNzIENTU1N0eWxlUnVsZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBDU1NW
YWx1ZTsKIGNsYXNzIENvbnRhaW5lck5vZGU7CiBjbGFzcyBDdXN0b21GaWx0ZXJPcGVyYXRpb247
CiBjbGFzcyBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVs
ZW1lbnQ7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIEZyYW1lVmlldzsKLWNsYXNzIEtVUkw7CiBjbGFz
cyBLZXlmcmFtZUxpc3Q7CiBjbGFzcyBLZXlmcmFtZVZhbHVlOwogY2xhc3MgTWVkaWFRdWVyeUV2
YWx1YXRvcjsKK2NsYXNzIE1lZGlhUXVlcnlFeHA7CiBjbGFzcyBOb2RlOwogY2xhc3MgUmVuZGVy
UmVnaW9uOwogY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0OwotY2xhc3MgU2V0dGluZ3M7
CiBjbGFzcyBTdGF0aWNDU1NSdWxlTGlzdDsKIGNsYXNzIFN0eWxlQnVpbGRlcjsKIGNsYXNzIFN0
eWxlSW1hZ2U7CkBAIC03NywzMiArNTcsMjAgQEAgY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKIGNs
YXNzIFN0eWxlUnVsZTsKIGNsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsKIGNsYXNzIFN0eWxlUnVs
ZVBhZ2U7Ci1jbGFzcyBTdHlsZVJ1bGVSZWdpb247CiBjbGFzcyBTdHlsZVNoYWRlcjsKLWNsYXNz
IFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBTdHlsZVNoZWV0
TGlzdDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiBjbGFzcyBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTsK
IGNsYXNzIFdlYktpdENTU1NoYWRlclZhbHVlOwogCitzdHJ1Y3QgTWVkaWFRdWVyeVJlc3VsdDsK
KworZW51bSBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgeyBEb05vdFVzZVNtYXJ0TWluaW11bUZv
ckZvbnRTaXplLCBVc2VTbWFydE1pbmltdW1Gb3JGb250Rml6ZSB9OworICAgIAogI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI+ID4gQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdDsKICNlbmRpZgogCi1jbGFzcyBNZWRpYVF1
ZXJ5UmVzdWx0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVF1ZXJ5UmVzdWx0KTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgTWVkaWFRdWVyeVJlc3VsdChj
b25zdCBNZWRpYVF1ZXJ5RXhwJiBleHByLCBib29sIHJlc3VsdCkKLSAgICAgICAgOiBtX2V4cHJl
c3Npb24oZXhwcikKLSAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCi0gICAgewotICAgIH0KLQot
ICAgIE1lZGlhUXVlcnlFeHAgbV9leHByZXNzaW9uOwotICAgIGJvb2wgbV9yZXN1bHQ7Ci19Owot
CiBlbnVtIFN0eWxlU2hhcmluZ0JlaGF2aW9yIHsKICAgICBBbGxvd1N0eWxlU2hhcmluZywKICAg
ICBEaXNhbGxvd1N0eWxlU2hhcmluZywKQEAgLTIyNSw3ICsxOTMsNyBAQCBwdWJsaWM6CiAKICAg
ICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNl
bGVjdG9yLmdldCgpOyB9CiAKLSAgICB2b2lkIGFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
eVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiwgYm9vbCByZXN1bHQpOworICAgIHZvaWQgYWRk
Vmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAmLCBi
b29sIHJlc3VsdCk7CiAKICAgICBib29sIGFmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0
OwogCkBAIC00OTYsNyArNDY0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2FtZU9yaWdpbk9u
bHk7CiAKICAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKLSAgICBW
ZWN0b3I8T3duUHRyPE1lZGlhUXVlcnlSZXN1bHQ+ID4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcnlSZXN1bHRzOworICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0PiBtX3ZpZXdwb3J0RGVw
ZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CiAKICAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlOwogICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>