<?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>41925</bug_id>
          
          <creation_ts>2010-07-08 19:13:44 -0700</creation_ts>
          <short_desc>[Chromium] Linux implementation of &lt;input type=number&gt; UI</short_desc>
          <delta_ts>2010-07-13 21:49:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</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>38568</dependson>
    
    <dependson>41924</dependson>
          <blocked>38570</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>estade</cc>
    
    <cc>fishd</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>248680</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-08 19:13:44 -0700</bug_when>
    <thetext>[Chromium] Linux implementation of &lt;input type=number&gt; UI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248685</commentid>
    <comment_count>1</comment_count>
      <attachid>60997</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-08 19:23:22 -0700</bug_when>
    <thetext>Created attachment 60997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248688</commentid>
    <comment_count>2</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-08 19:26:21 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=60997) [details]
&gt; Patch

This patch contains no tests because nothing is drawn without the patch of Bug#41924.
If the patch of Bug#41924 is committed before this, I&apos;ll add a test to this.  If this patch is committed before Bug#41924, I&apos;ll add a test separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248800</commentid>
    <comment_count>3</comment_count>
      <attachid>61008</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-09 00:49:24 -0700</bug_when>
    <thetext>Created attachment 61008
Screenshot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249162</commentid>
    <comment_count>4</comment_count>
    <who name="Evan Stade">estade</who>
    <bug_when>2010-07-09 12:06:20 -0700</bug_when>
    <thetext>the code looks fine to me (I am not a reviewer though).

The screenshots look a little funky imo---I think it&apos;s because the up/down arrows are not symmetric (the bottom being slightly larger, especially noticeable because the arrows are not the same distance from the middle line). I&apos;m not sure how to fix that and it&apos;s certianly pretty nitpicky. Shrug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249172</commentid>
    <comment_count>5</comment_count>
      <attachid>60997</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-07-09 12:21:34 -0700</bug_when>
    <thetext>Comment on attachment 60997
Patch

LGTM (also not a reviewer), just some nits.

WebCore/rendering/RenderThemeChromiumLinux.cpp:187
 +      SkScalar* hsv, SkScalar saturateAmount, SkScalar brightenAmount)
Nit: can we make |hsv| const?

WebCore/rendering/RenderThemeChromiumLinux.cpp:196
 +  SkColor RenderThemeChromiumLinux::outlineColor(SkScalar* hsv1, SkScalar* hsv2)
Nit: Can we make these const too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249742</commentid>
    <comment_count>6</comment_count>
      <attachid>61204</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-12 03:32:55 -0700</bug_when>
    <thetext>Created attachment 61204
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249747</commentid>
    <comment_count>7</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-12 03:47:26 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=61204) [details]
&gt; Patch 2

Changed parameter type: SkScalar* -&gt; const SkScalar[3]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250320</commentid>
    <comment_count>8</comment_count>
      <attachid>61204</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-12 22:43:22 -0700</bug_when>
    <thetext>Comment on attachment 61204
Patch 2

WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp:90
 +      paint.setColor(RenderThemeChromiumLinux::saturateAndBrighten(trackHSV, 0, 0));
code in platform/ should not depend on code in rendering/.
that&apos;s a layering violation.  it seems like you should
refactor this so that there is another file in platform/chromium/
that defines the shared theme code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250322</commentid>
    <comment_count>9</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-12 22:49:18 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 61204 [details])
&gt; WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp:90
&gt;  +      paint.setColor(RenderThemeChromiumLinux::saturateAndBrighten(trackHSV, 0, 0));
&gt; code in platform/ should not depend on code in rendering/.
&gt; that&apos;s a layering violation.  it seems like you should
&gt; refactor this so that there is another file in platform/chromium/
&gt; that defines the shared theme code.

I see.
Do you think it&apos;s acceptable to remain these function in ScrollbarThemeChromiumLinux and call them from RenderThemeChroimiumLinux?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250352</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-12 23:37:34 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Do you think it&apos;s acceptable to remain these function in 
&gt; ScrollbarThemeChromiumLinux and call them from RenderThemeChroimiumLinux?

That seems suboptimal since you plan to use them for things that aren&apos;t related to scrollbars, right?

How about a new file:  PlatformThemeChromium{Linux}?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250433</commentid>
    <comment_count>11</comment_count>
      <attachid>61352</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-13 04:06:10 -0700</bug_when>
    <thetext>Created attachment 61352
Patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250434</commentid>
    <comment_count>12</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-13 04:08:22 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; Do you think it&apos;s acceptable to remain these function in 
&gt; &gt; ScrollbarThemeChromiumLinux and call them from RenderThemeChroimiumLinux?
&gt; 
&gt; That seems suboptimal since you plan to use them for things that aren&apos;t related to scrollbars, right?

Right :-)

&gt; How about a new file:  PlatformThemeChromium{Linux}?

ok, the updated patch introduced PlatformThemeChromiumGtk, and fixes other layer violations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250584</commentid>
    <comment_count>13</comment_count>
      <attachid>61352</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-07-13 10:01:06 -0700</bug_when>
    <thetext>Comment on attachment 61352
Patch 3

WebCore/platform/chromium/PlatformThemeChromiumGtk.h:52
 +      enum ArrowDirection {
nit: usually ideal style-wise to put enum declarations at the top of the
public section with a new line separating it from the methods.

WebCore/platform/chromium/PlatformThemeChromiumGtk.h:68
 +  }
} // namespace WebCore

WebCore/platform/chromium/PlatformThemeChromiumGtk.cpp:220
 +  }
} // namespace WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250942</commentid>
    <comment_count>14</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-13 21:49:04 -0700</bug_when>
    <thetext>Thank you for reviewing.

(In reply to comment #13)
&gt; (From update of attachment 61352 [details])
&gt; WebCore/platform/chromium/PlatformThemeChromiumGtk.h:52
&gt;  +      enum ArrowDirection {
&gt; nit: usually ideal style-wise to put enum declarations at the top of the
&gt; public section with a new line separating it from the methods.

Done.

&gt; WebCore/platform/chromium/PlatformThemeChromiumGtk.h:68
&gt;  +  }
&gt; } // namespace WebCore

Done.

&gt; WebCore/platform/chromium/PlatformThemeChromiumGtk.cpp:220
&gt;  +  }
&gt; } // namespace WebCore

Done.

Landed as r63280.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60997</attachid>
            <date>2010-07-08 19:23:22 -0700</date>
            <delta_ts>2010-07-12 03:32:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41925-20100709112319.patch</filename>
            <type>text/plain</type>
            <size>21716</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjZiOWRlY2VlODBlY2NmMGUzMmE3Zjg1Zjg2ZGZkODk3MjhiZjEwMy4uYmYyYTFjZTZkOWZmZDVm
YmYxMDk3ZTY2YTA4NWMxM2MyMmRiYmEwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0wNy0wOCAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0Nocm9taXVtXSBMaW51eCBpbXBsZW1lbnRhdGlvbiBv
ZiA8aW5wdXQgdHlwZT1udW1iZXI+IFVJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MTkyNQorCisgICAgICAgIE1vdmUgdGhlIGNvZGUgZm9yIHNjcm9s
bGJhciBzdGVwcGVycyB0byBSZW5kZXJUaGVtZUNocm9taXVtTGludXgsCisgICAgICAgIGFuZCB1
c2UgaXQgZm9yIHR5cGU9bnVtYmVyIHRvby4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50VHJhY2tQaWVjZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50QnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnNhdHVyYXRlQW5kQnJpZ2h0ZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4OjpvdXRsaW5lQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpwYWludEFycm93QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludElubmVyU3BpbkJ1
dHRvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjopOgorCiAyMDEwLTA3
LTA4ICBFcmlrIEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCBhOWNmZjlmNzM0YzJmNGY4
NGI0NTIyM2EyMmI5NWVlMTZjMmE2MThmLi4zOGJiM2IwOWQxZGVhMDhkZTA4ZTZhNWFjNDI5OTdj
ODIwMGJhYWYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJh
clRoZW1lQ2hyb21pdW1MaW51eC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCkBAIC03OCw2MCArNzgsNiBAQCBzdGF0aWMg
dm9pZCBkcmF3Qm94KFNrQ2FudmFzKiBjYW52YXMsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0
IFNrUGFpbnQmIHBhaW50KQogICAgIGRyYXdWZXJ0TGluZShjYW52YXMsIHJlY3QueCgpLCByZWN0
LnkoKSwgYm90dG9tLCBwYWludCk7CiB9CiAKLXN0YXRpYyBTa1NjYWxhciBjbGFtcChTa1NjYWxh
ciB2YWx1ZSwgU2tTY2FsYXIgbWluLCBTa1NjYWxhciBtYXgpCi17Ci0gICAgcmV0dXJuIHN0ZDo6
bWluKHN0ZDo6bWF4KHZhbHVlLCBtaW4pLCBtYXgpOwotfQotCi1zdGF0aWMgU2tDb2xvciBzYXR1
cmF0ZUFuZEJyaWdodGVuKFNrU2NhbGFyKiBoc3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNrU2NhbGFyIHNhdHVyYXRlQW1vdW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTa1NjYWxhciBicmlnaHRlbkFtb3VudCkKLXsKLSAgICBTa1NjYWxhciBj
b2xvclszXTsKLSAgICBjb2xvclswXSA9IGhzdlswXTsKLSAgICBjb2xvclsxXSA9IGNsYW1wKGhz
dlsxXSArIHNhdHVyYXRlQW1vdW50LCAwLjAsIDEuMCk7Ci0gICAgY29sb3JbMl0gPSBjbGFtcCho
c3ZbMl0gKyBicmlnaHRlbkFtb3VudCwgMC4wLCAxLjApOwotICAgIHJldHVybiBTa0hTVlRvQ29s
b3IoY29sb3IpOwotfQotCi1zdGF0aWMgU2tDb2xvciBvdXRsaW5lQ29sb3IoU2tTY2FsYXIqIGhz
djEsIFNrU2NhbGFyKiBoc3YyKQotewotICAgIC8vIEdUSyBUaGVtZSBlbmdpbmVzIGhhdmUgd2F5
IHRvbyBtdWNoIGNvbnRyb2wgb3ZlciB0aGUgbGF5b3V0IG9mCi0gICAgLy8gdGhlIHNjcm9sbGJh
ci4gV2UgbWlnaHQgYmUgYWJsZSB0byBtb3JlIGNsb3NlbHkgYXBwcm94aW1hdGUgaXRzCi0gICAg
Ly8gbG9vay1hbmQtZmVlbCwgaWYgd2Ugc2VudCB3aG9sZSBpbWFnZXMgaW5zdGVhZCBvZiBqdXN0
IGNvbG9ycwotICAgIC8vIGZyb20gdGhlIGJyb3dzZXIgdG8gdGhlIHJlbmRlcmVyLiBCdXQgZXZl
biB0aGVuLCBzb21lIHRoZW1lcwotICAgIC8vIHdvdWxkIGp1c3QgYnJlYWsuCi0gICAgLy8KLSAg
ICAvLyBTbywgaW5zdGVhZCwgd2UgZG9uJ3QgZXZlbiB0cnkgdG8gMTAwJSByZXBsaWNhdGUgdGhl
IGxvb2sgb2YKLSAgICAvLyB0aGUgbmF0aXZlIHNjcm9sbGJhci4gV2UgcmVuZGVyIG91ciBvd24g
dmVyc2lvbiwgYnV0IHdlIG1ha2UKLSAgICAvLyBzdXJlIHRvIHBpY2sgY29sb3JzIHRoYXQgYmxl
bmQgaW4gbmljZWx5IHdpdGggdGhlIHN5c3RlbSBHVEsKLSAgICAvLyB0aGVtZS4gSW4gbW9zdCBj
YXNlcywgd2UgY2FuIGp1c3Qgc2FtcGxlIGEgY291cGxlIG9mIHBpeGVscwotICAgIC8vIGZyb20g
dGhlIHN5c3RlbSBzY3JvbGxiYXIgYW5kIHVzZSB0aG9zZSBjb2xvcnMgdG8gZHJhdyBvdXIKLSAg
ICAvLyBzY3JvbGxiYXIuCi0gICAgLy8KLSAgICAvLyBUaGlzIHdvcmtzIGZpbmUgZm9yIHRoZSB0
cmFjayBjb2xvciBhbmQgdGhlIG92ZXJhbGwgdGh1bWIKLSAgICAvLyBjb2xvci4gQnV0IGl0IGZh
aWxzIHNwZWN0YWN1bGFybHkgZm9yIHRoZSBvdXRsaW5lIGNvbG9yIHVzZWQKLSAgICAvLyBhcm91
bmQgdGhlIHRodW1iIHBpZWNlLiAgTm90IGFsbCB0aGVtZXMgaGF2ZSBhIGNsZWFybHkgZGVmaW5l
ZAotICAgIC8vIG91dGxpbmUuIEZvciBzb21lIG9mIHRoZW0gaXQgaXMgcGFydGlhbGx5IHRyYW5z
cGFyZW50LCBhbmQgZm9yCi0gICAgLy8gb3RoZXJzIHRoZSB0aGlja25lc3MgaXMgdmVyeSB1bnBy
ZWRpY3RhYmxlLgotICAgIC8vCi0gICAgLy8gU28sIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFwcHJv
eGltYXRlIHRoZSBzeXN0ZW0gdGhlbWUsIHdlCi0gICAgLy8gaW5zdGVhZCB0cnkgdG8gY29tcHV0
ZSBhIHJlYXNvbmFibGUgbG9va2luZyBjaG9pY2UgYmFzZWQgb24gdGhlCi0gICAgLy8ga25vd24g
Y29sb3Igb2YgdGhlIHRyYWNrIGFuZCB0aGUgdGh1bWIgcGllY2UuIFRoaXMgaXMgZGlmZmljdWx0
Ci0gICAgLy8gd2hlbiB0cnlpbmcgdG8gZGVhbCBib3RoIHdpdGggaGlnaC0gYW5kIGxvdy1jb250
cmFzdCB0aGVtZXMsCi0gICAgLy8gYW5kIGJvdGggd2l0aCBwb3NpdGl2ZSBhbmQgaW52ZXJ0ZWQg
dGhlbWVzLgotICAgIC8vCi0gICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGhhcyBiZWVuIHRlc3Rl
ZCB0byBsb29rIE9LIHdpdGggYWxsIG9mIHRoZQotICAgIC8vIGRlZmF1bHQgR1RLIHRoZW1lcy4K
LSAgICBTa1NjYWxhciBtaW5EaWZmID0gY2xhbXAoKGhzdjFbMV0gKyBoc3YyWzFdKSAqIDEuMiwg
MC4yOCwgMC41KTsKLSAgICBTa1NjYWxhciBkaWZmID0gY2xhbXAoZmFicyhoc3YxWzJdIC0gaHN2
MlsyXSkgLyAyLCBtaW5EaWZmLCAwLjUpOwotCi0gICAgaWYgKGhzdjFbMl0gKyBoc3YyWzJdID4g
MS4wKQotICAgICAgICBkaWZmID0gLWRpZmY7Ci0KLSAgICByZXR1cm4gc2F0dXJhdGVBbmRCcmln
aHRlbihoc3YyLCAtMC4yLCBkaWZmKTsKLX0KLQogdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TGludXg6OnBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSkKIHsK
ICAgICBTa0NhbnZhcyogY29uc3QgY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKTsKQEAgLTE0MSwxNTMgKzg3LDQ0IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxp
bnV4OjpwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyCiAgICAg
c2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCBy
ZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwogICAgIFNrU2NhbGFyIHRyYWNrSFNWWzNdOwogICAg
IFNrQ29sb3JUb0hTVihSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnRyYWNrQ29sb3IoKSwgdHJh
Y2tIU1YpOwotICAgIHBhaW50LnNldENvbG9yKHNhdHVyYXRlQW5kQnJpZ2h0ZW4odHJhY2tIU1Ys
IDAsIDApKTsKKyAgICBwYWludC5zZXRDb2xvcihSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnNh
dHVyYXRlQW5kQnJpZ2h0ZW4odHJhY2tIU1YsIDAsIDApKTsKICAgICBjYW52YXMtPmRyYXdJUmVj
dChza3JlY3QsIHBhaW50KTsKIAogICAgIFNrU2NhbGFyIHRodW1iSFNWWzNdOwogICAgIFNrQ29s
b3JUb0hTVihSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnRodW1iSW5hY3RpdmVDb2xvcigpLAog
ICAgICAgICAgICAgICAgICB0aHVtYkhTVik7CiAKLSAgICBwYWludC5zZXRDb2xvcihvdXRsaW5l
Q29sb3IodHJhY2tIU1YsIHRodW1iSFNWKSk7CisgICAgcGFpbnQuc2V0Q29sb3IoUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpvdXRsaW5lQ29sb3IodHJhY2tIU1YsIHRodW1iSFNWKSk7CiAgICAg
ZHJhd0JveChjYW52YXMsIHJlY3QsIHBhaW50KTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTGludXg6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7Ci0g
ICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCk7Ci0gICAgc3RhdGljIGNvbnN0IGludCB3aWR0aE1pZGRsZSA9IHNjcm9sbGJhclRoaWNrbmVz
c1ZhbHVlIC8gMiArIDE7Ci0gICAgc3RhdGljIGNvbnN0IGludCBsZW5ndGhNaWRkbGUgPSBidXR0
b25MZW5ndGggLyAyICsgMTsKLSAgICBTa1BhaW50IHBhaW50OwotICAgIGVudW0gewotICAgICAg
ICBOb3J0aCwKLSAgICAgICAgRWFzdCwKLSAgICAgICAgU291dGgsCi0gICAgICAgIFdlc3QsCi0g
ICAgfSBkaXJlY3Rpb247Ci0KKyAgICBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OkJ1dHRvbkRp
cmVjdGlvbiBkaXJlY3Rpb247CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFy
dFBhcnQpCi0gICAgICAgICAgICBkaXJlY3Rpb24gPSBXZXN0OworICAgICAgICAgICAgZGlyZWN0
aW9uID0gUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpXZXN0OwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBkaXJlY3Rpb24gPSBFYXN0OworICAgICAgICAgICAgZGlyZWN0aW9uID0gUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjpFYXN0OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChwYXJ0
ID09IEJhY2tCdXR0b25TdGFydFBhcnQpCi0gICAgICAgICAgICBkaXJlY3Rpb24gPSBOb3J0aDsK
KyAgICAgICAgICAgIGRpcmVjdGlvbiA9IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6Tm9ydGg7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IFNvdXRoOworICAgICAgICAg
ICAgZGlyZWN0aW9uID0gUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpTb3V0aDsKICAgICB9CiAK
KyAgICBDb250cm9sU3RhdGVzIHN0YXRlcyA9IDA7CiAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBi
dXR0b24gY2FuIGJlIHByZXNzZWQuCi0gICAgYm9vbCBlbmFibGVkID0gZmFsc2U7Ci0gICAgaWYg
KCgoZGlyZWN0aW9uID09IFdlc3QgfHwgZGlyZWN0aW9uID09IE5vcnRoKSAmJiBzY3JvbGxiYXIt
PmN1cnJlbnRQb3MoKSkKLSAgICAgICAgfHwgKGRpcmVjdGlvbiA9PSBFYXN0IHx8IGRpcmVjdGlv
biA9PSBTb3V0aCkgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhp
bXVtKCkpCi0gICAgICAgIGVuYWJsZWQgPSB0cnVlOworICAgIGlmICgoKGRpcmVjdGlvbiA9PSBS
ZW5kZXJUaGVtZUNocm9taXVtTGludXg6Oldlc3QgfHwgZGlyZWN0aW9uID09IFJlbmRlclRoZW1l
Q2hyb21pdW1MaW51eDo6Tm9ydGgpICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpKQorICAgICAg
ICB8fCAoZGlyZWN0aW9uID09IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6RWFzdCB8fCBkaXJl
Y3Rpb24gPT0gUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpTb3V0aCkgJiYgc2Nyb2xsYmFyLT5j
dXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpCisgICAgICAgIHN0YXRlcyB8PSBF
bmFibGVkU3RhdGU7CiAKLSAgICAvLyBDYWxjdWxhdGUgYnV0dG9uIGNvbG9yLgotICAgIFNrU2Nh
bGFyIHRyYWNrSFNWWzNdOwotICAgIFNrQ29sb3JUb0hTVihSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnRyYWNrQ29sb3IoKSwgdHJhY2tIU1YpOwotICAgIFNrQ29sb3IgYnV0dG9uQ29sb3IgPSBz
YXR1cmF0ZUFuZEJyaWdodGVuKHRyYWNrSFNWLCAwLCAwLjIpOwotICAgIFNrQ29sb3IgYmFja2dy
b3VuZENvbG9yID0gYnV0dG9uQ29sb3I7Ci0gICAgaWYgKHBhcnQgPT0gc2Nyb2xsYmFyLT5wcmVz
c2VkUGFydCgpKSB7Ci0gICAgICAgIFNrU2NhbGFyIGJ1dHRvbkhTVlszXTsKLSAgICAgICAgU2tD
b2xvclRvSFNWKGJ1dHRvbkNvbG9yLCBidXR0b25IU1YpOwotICAgICAgICBidXR0b25Db2xvciA9
IHNhdHVyYXRlQW5kQnJpZ2h0ZW4oYnV0dG9uSFNWLCAwLCAtMC4xKTsKLSAgICB9IGVsc2UgaWYg
KHBhcnQgPT0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpICYmIGVuYWJsZWQpIHsKLSAgICAgICAg
U2tTY2FsYXIgYnV0dG9uSFNWWzNdOwotICAgICAgICBTa0NvbG9yVG9IU1YoYnV0dG9uQ29sb3Is
IGJ1dHRvbkhTVik7Ci0gICAgICAgIGJ1dHRvbkNvbG9yID0gc2F0dXJhdGVBbmRCcmlnaHRlbihi
dXR0b25IU1YsIDAsIDAuMDUpOwotICAgIH0KLQotICAgIFNrSVJlY3Qgc2tyZWN0OwotICAgIHNr
cmVjdC5zZXQocmVjdC54KCksIHJlY3QueSgpLCByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVj
dC55KCkgKyByZWN0LmhlaWdodCgpKTsKLSAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZCAodGhl
IGFyZWEgdmlzaWJsZSBiZWhpbmQgdGhlIHJvdW5kZWQgY29ybmVycykuCi0gICAgcGFpbnQuc2V0
Q29sb3IoYmFja2dyb3VuZENvbG9yKTsKLSAgICBjYW52YXMtPmRyYXdJUmVjdChza3JlY3QsIHBh
aW50KTsKLQotICAgIC8vIFBhaW50IHRoZSBidXR0b24ncyBvdXRsaW5lIGFuZCBmaWxsIHRoZSBt
aWRkbGUKLSAgICBTa1BhdGggb3V0bGluZTsKLSAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAg
IGNhc2UgTm9ydGg6Ci0gICAgICAgIG91dGxpbmUubW92ZVRvKHJlY3QueCgpICsgMC41LCByZWN0
LnkoKSArIHJlY3QuaGVpZ2h0KCkgKyAwLjUpOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMCwg
LShyZWN0LmhlaWdodCgpIC0gMikpOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMiwgLTIpOwot
ICAgICAgICBvdXRsaW5lLnJMaW5lVG8ocmVjdC53aWR0aCgpIC0gNSwgMCk7Ci0gICAgICAgIG91
dGxpbmUuckxpbmVUbygyLCAyKTsKLSAgICAgICAgb3V0bGluZS5yTGluZVRvKDAsIHJlY3QuaGVp
Z2h0KCkgLSAyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTb3V0aDoKLSAgICAgICAgb3V0
bGluZS5tb3ZlVG8ocmVjdC54KCkgKyAwLjUsIHJlY3QueSgpIC0gMC41KTsKLSAgICAgICAgb3V0
bGluZS5yTGluZVRvKDAsIHJlY3QuaGVpZ2h0KCkgLSAyKTsKLSAgICAgICAgb3V0bGluZS5yTGlu
ZVRvKDIsIDIpOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8ocmVjdC53aWR0aCgpIC0gNSwgMCk7
Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbygyLCAtMik7Ci0gICAgICAgIG91dGxpbmUuckxpbmVU
bygwLCAtKHJlY3QuaGVpZ2h0KCkgLSAyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWFz
dDoKLSAgICAgICAgb3V0bGluZS5tb3ZlVG8ocmVjdC54KCkgLSAwLjUsIHJlY3QueSgpICsgMC41
KTsKLSAgICAgICAgb3V0bGluZS5yTGluZVRvKHJlY3Qud2lkdGgoKSAtIDIsIDApOwotICAgICAg
ICBvdXRsaW5lLnJMaW5lVG8oMiwgMik7Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbygwLCByZWN0
LmhlaWdodCgpIC0gNSk7Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbygtMiwgMik7Ci0gICAgICAg
IG91dGxpbmUuckxpbmVUbygtKHJlY3Qud2lkdGgoKSAtIDIpLCAwKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBXZXN0OgotICAgICAgICBvdXRsaW5lLm1vdmVUbyhyZWN0LngoKSArIHJlY3Qu
d2lkdGgoKSArIDAuNSwgcmVjdC55KCkgKyAwLjUpOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8o
LShyZWN0LndpZHRoKCkgLSAyKSwgMCk7Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbygtMiwgMik7
Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbygwLCByZWN0LmhlaWdodCgpIC0gNSk7Ci0gICAgICAg
IG91dGxpbmUuckxpbmVUbygyLCAyKTsKLSAgICAgICAgb3V0bGluZS5yTGluZVRvKHJlY3Qud2lk
dGgoKSAtIDIsIDApOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgb3V0bGluZS5jbG9zZSgp
OwotCi0gICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOwotICAgIHBhaW50
LnNldENvbG9yKGJ1dHRvbkNvbG9yKTsKLSAgICBjYW52YXMtPmRyYXdQYXRoKG91dGxpbmUsIHBh
aW50KTsKLQotICAgIHBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKLSAgICBwYWludC5zZXRTdHls
ZShTa1BhaW50OjprU3Ryb2tlX1N0eWxlKTsKLSAgICBTa1NjYWxhciB0aHVtYkhTVlszXTsKLSAg
ICBTa0NvbG9yVG9IU1YoUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojp0aHVtYkluYWN0aXZlQ29s
b3IoKSwgdGh1bWJIU1YpOwotICAgIHBhaW50LnNldENvbG9yKG91dGxpbmVDb2xvcih0cmFja0hT
ViwgdGh1bWJIU1YpKTsKLSAgICBjYW52YXMtPmRyYXdQYXRoKG91dGxpbmUsIHBhaW50KTsKLQot
ICAgIC8vIElmIHRoZSBidXR0b24gaXMgZGlzYWJsZWQsIHRoZSBhcnJvdyBpcyBkcmF3biB3aXRo
IHRoZSBvdXRsaW5lIGNvbG9yLgotICAgIGlmIChlbmFibGVkKQotICAgICAgICBwYWludC5zZXRD
b2xvcihTS19Db2xvckJMQUNLKTsKLQotICAgIHBhaW50LnNldEFudGlBbGlhcyhmYWxzZSk7Ci0g
ICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOwotCi0gICAgU2tQYXRoIHBh
dGg7Ci0gICAgLy8gVGhlIGNvbnN0YW50cyBpbiB0aGlzIGJsb2NrIG9mIGNvZGUgYXJlIGhhbmQt
dGFpbG9yZWQgdG8gcHJvZHVjZSBnb29kCi0gICAgLy8gbG9va2luZyBhcnJvd3Mgd2l0aG91dCBh
bnRpLWFsaWFzaW5nLgotICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBOb3J0aDoK
LSAgICAgICAgcGF0aC5tb3ZlVG8ocmVjdC54KCkgKyB3aWR0aE1pZGRsZSAtIDQsIHJlY3QueSgp
ICsgbGVuZ3RoTWlkZGxlICsgMik7Ci0gICAgICAgIHBhdGguckxpbmVUbyg3LCAwKTsKLSAgICAg
ICAgcGF0aC5yTGluZVRvKC00LCAtNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU291dGg6
Ci0gICAgICAgIHBhdGgubW92ZVRvKHJlY3QueCgpICsgd2lkdGhNaWRkbGUgLSA0LCByZWN0Lnko
KSArIGxlbmd0aE1pZGRsZSAtIDMpOwotICAgICAgICBwYXRoLnJMaW5lVG8oNywgMCk7Ci0gICAg
ICAgIHBhdGguckxpbmVUbygtNCwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWFzdDoK
LSAgICAgICAgcGF0aC5tb3ZlVG8ocmVjdC54KCkgKyBsZW5ndGhNaWRkbGUgLSAzLCByZWN0Lnko
KSArIHdpZHRoTWlkZGxlIC0gNCk7Ci0gICAgICAgIHBhdGguckxpbmVUbygwLCA3KTsKLSAgICAg
ICAgcGF0aC5yTGluZVRvKDQsIC00KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZXN0Ogot
ICAgICAgICBwYXRoLm1vdmVUbyhyZWN0LngoKSArIGxlbmd0aE1pZGRsZSArIDEsIHJlY3QueSgp
ICsgd2lkdGhNaWRkbGUgLSA1KTsKLSAgICAgICAgcGF0aC5yTGluZVRvKDAsIDkpOwotICAgICAg
ICBwYXRoLnJMaW5lVG8oLTQsIC00KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHBhdGgu
Y2xvc2UoKTsKKyAgICBpZiAocGFydCA9PSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpCisgICAg
ICAgIHN0YXRlcyB8PSBQcmVzc2VkU3RhdGU7CisgICAgZWxzZSBpZiAocGFydCA9PSBzY3JvbGxi
YXItPmhvdmVyZWRQYXJ0KCkgJiYgc3RhdGVzICYgRW5hYmxlZFN0YXRlKQorICAgICAgICBzdGF0
ZXMgfD0gSG92ZXJTdGF0ZTsKIAotICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwor
ICAgIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRBcnJvd0J1dHRvbihnYywgcmVjdCwg
ZGlyZWN0aW9uLCBzdGF0ZXMpOwogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51
eDo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTMwNSw3ICsxNDIsNyBAQCB2b2lkIFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxi
YXIqIHNjcgogICAgICAgICAgICAgICAgICB0aHVtYik7CiAKICAgICBTa1BhaW50IHBhaW50Owot
ICAgIHBhaW50LnNldENvbG9yKHNhdHVyYXRlQW5kQnJpZ2h0ZW4odGh1bWIsIDAsIDAuMDIpKTsK
KyAgICBwYWludC5zZXRDb2xvcihSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnNhdHVyYXRlQW5k
QnJpZ2h0ZW4odGh1bWIsIDAsIDAuMDIpKTsKIAogICAgIFNrSVJlY3Qgc2tyZWN0OwogICAgIGlm
ICh2ZXJ0aWNhbCkKQEAgLTMxNSw3ICsxNTIsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1MaW51eDo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcgog
CiAgICAgY2FudmFzLT5kcmF3SVJlY3Qoc2tyZWN0LCBwYWludCk7CiAKLSAgICBwYWludC5zZXRD
b2xvcihzYXR1cmF0ZUFuZEJyaWdodGVuKHRodW1iLCAwLCAtMC4wMikpOworICAgIHBhaW50LnNl
dENvbG9yKFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6c2F0dXJhdGVBbmRCcmlnaHRlbih0aHVt
YiwgMCwgLTAuMDIpKTsKIAogICAgIGlmICh2ZXJ0aWNhbCkKICAgICAgICAgc2tyZWN0LnNldCht
aWR4ICsgMSwgcmVjdC55KCksIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0LnkoKSArIHJl
Y3QuaGVpZ2h0KCkpOwpAQCAtMzI2LDcgKzE2Myw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2Ny
CiAKICAgICBTa1NjYWxhciB0cmFja1szXTsKICAgICBTa0NvbG9yVG9IU1YoUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4Ojp0cmFja0NvbG9yKCksIHRyYWNrKTsKLSAgICBwYWludC5zZXRDb2xvcihv
dXRsaW5lQ29sb3IodHJhY2ssIHRodW1iKSk7CisgICAgcGFpbnQuc2V0Q29sb3IoUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpvdXRsaW5lQ29sb3IodHJhY2ssIHRodW1iKSk7CiAgICAgZHJhd0Jv
eChjYW52YXMsIHJlY3QsIHBhaW50KTsKIAogICAgIGlmIChyZWN0LmhlaWdodCgpID4gMTAgJiYg
cmVjdC53aWR0aCgpID4gMTApIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1MaW51eC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtTGludXguY3BwCmluZGV4IGMyOTM1M2RiOTJlNmQ3ZGZjOGQ2ODRlNzQ5N2QxOWE2NTE5
OTJiMDIuLjIyMzA3MDZhMmJiMjhkYWJiMzE3NjQ4ZTY0NzRkZjUyMjMzMzQwMDQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApAQCAtMjcsNyAr
MjcsOSBAQAogCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiVXNlckFnZW50
U3R5bGVTaGVldHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTc2LDQgKzE3OCwyMDIg
QEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnNldFNjcm9sbGJhckNvbG9ycygKICAg
ICBtX3RyYWNrQ29sb3IgPSB0cmFja0NvbG9yOwogfQogCitzdGF0aWMgU2tTY2FsYXIgY2xhbXAo
U2tTY2FsYXIgdmFsdWUsIFNrU2NhbGFyIG1pbiwgU2tTY2FsYXIgbWF4KQoreworICAgIHJldHVy
biBzdGQ6Om1pbihzdGQ6Om1heCh2YWx1ZSwgbWluKSwgbWF4KTsKK30KKworU2tDb2xvciBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6OnNhdHVyYXRlQW5kQnJpZ2h0ZW4oCisgICAgU2tTY2FsYXIq
IGhzdiwgU2tTY2FsYXIgc2F0dXJhdGVBbW91bnQsIFNrU2NhbGFyIGJyaWdodGVuQW1vdW50KQor
eworICAgIFNrU2NhbGFyIGNvbG9yWzNdOworICAgIGNvbG9yWzBdID0gaHN2WzBdOworICAgIGNv
bG9yWzFdID0gY2xhbXAoaHN2WzFdICsgc2F0dXJhdGVBbW91bnQsIDAuMCwgMS4wKTsKKyAgICBj
b2xvclsyXSA9IGNsYW1wKGhzdlsyXSArIGJyaWdodGVuQW1vdW50LCAwLjAsIDEuMCk7CisgICAg
cmV0dXJuIFNrSFNWVG9Db2xvcihjb2xvcik7Cit9CisKK1NrQ29sb3IgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpvdXRsaW5lQ29sb3IoU2tTY2FsYXIqIGhzdjEsIFNrU2NhbGFyKiBoc3YyKQor
eworICAgIC8vIEdUSyBUaGVtZSBlbmdpbmVzIGhhdmUgd2F5IHRvbyBtdWNoIGNvbnRyb2wgb3Zl
ciB0aGUgbGF5b3V0IG9mCisgICAgLy8gdGhlIHNjcm9sbGJhci4gV2UgbWlnaHQgYmUgYWJsZSB0
byBtb3JlIGNsb3NlbHkgYXBwcm94aW1hdGUgaXRzCisgICAgLy8gbG9vay1hbmQtZmVlbCwgaWYg
d2Ugc2VudCB3aG9sZSBpbWFnZXMgaW5zdGVhZCBvZiBqdXN0IGNvbG9ycworICAgIC8vIGZyb20g
dGhlIGJyb3dzZXIgdG8gdGhlIHJlbmRlcmVyLiBCdXQgZXZlbiB0aGVuLCBzb21lIHRoZW1lcwor
ICAgIC8vIHdvdWxkIGp1c3QgYnJlYWsuCisgICAgLy8KKyAgICAvLyBTbywgaW5zdGVhZCwgd2Ug
ZG9uJ3QgZXZlbiB0cnkgdG8gMTAwJSByZXBsaWNhdGUgdGhlIGxvb2sgb2YKKyAgICAvLyB0aGUg
bmF0aXZlIHNjcm9sbGJhci4gV2UgcmVuZGVyIG91ciBvd24gdmVyc2lvbiwgYnV0IHdlIG1ha2UK
KyAgICAvLyBzdXJlIHRvIHBpY2sgY29sb3JzIHRoYXQgYmxlbmQgaW4gbmljZWx5IHdpdGggdGhl
IHN5c3RlbSBHVEsKKyAgICAvLyB0aGVtZS4gSW4gbW9zdCBjYXNlcywgd2UgY2FuIGp1c3Qgc2Ft
cGxlIGEgY291cGxlIG9mIHBpeGVscworICAgIC8vIGZyb20gdGhlIHN5c3RlbSBzY3JvbGxiYXIg
YW5kIHVzZSB0aG9zZSBjb2xvcnMgdG8gZHJhdyBvdXIKKyAgICAvLyBzY3JvbGxiYXIuCisgICAg
Ly8KKyAgICAvLyBUaGlzIHdvcmtzIGZpbmUgZm9yIHRoZSB0cmFjayBjb2xvciBhbmQgdGhlIG92
ZXJhbGwgdGh1bWIKKyAgICAvLyBjb2xvci4gQnV0IGl0IGZhaWxzIHNwZWN0YWN1bGFybHkgZm9y
IHRoZSBvdXRsaW5lIGNvbG9yIHVzZWQKKyAgICAvLyBhcm91bmQgdGhlIHRodW1iIHBpZWNlLiAg
Tm90IGFsbCB0aGVtZXMgaGF2ZSBhIGNsZWFybHkgZGVmaW5lZAorICAgIC8vIG91dGxpbmUuIEZv
ciBzb21lIG9mIHRoZW0gaXQgaXMgcGFydGlhbGx5IHRyYW5zcGFyZW50LCBhbmQgZm9yCisgICAg
Ly8gb3RoZXJzIHRoZSB0aGlja25lc3MgaXMgdmVyeSB1bnByZWRpY3RhYmxlLgorICAgIC8vCisg
ICAgLy8gU28sIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFwcHJveGltYXRlIHRoZSBzeXN0ZW0gdGhl
bWUsIHdlCisgICAgLy8gaW5zdGVhZCB0cnkgdG8gY29tcHV0ZSBhIHJlYXNvbmFibGUgbG9va2lu
ZyBjaG9pY2UgYmFzZWQgb24gdGhlCisgICAgLy8ga25vd24gY29sb3Igb2YgdGhlIHRyYWNrIGFu
ZCB0aGUgdGh1bWIgcGllY2UuIFRoaXMgaXMgZGlmZmljdWx0CisgICAgLy8gd2hlbiB0cnlpbmcg
dG8gZGVhbCBib3RoIHdpdGggaGlnaC0gYW5kIGxvdy1jb250cmFzdCB0aGVtZXMsCisgICAgLy8g
YW5kIGJvdGggd2l0aCBwb3NpdGl2ZSBhbmQgaW52ZXJ0ZWQgdGhlbWVzLgorICAgIC8vCisgICAg
Ly8gVGhlIGZvbGxvd2luZyBjb2RlIGhhcyBiZWVuIHRlc3RlZCB0byBsb29rIE9LIHdpdGggYWxs
IG9mIHRoZQorICAgIC8vIGRlZmF1bHQgR1RLIHRoZW1lcy4KKyAgICBTa1NjYWxhciBtaW5EaWZm
ID0gY2xhbXAoKGhzdjFbMV0gKyBoc3YyWzFdKSAqIDEuMiwgMC4yOCwgMC41KTsKKyAgICBTa1Nj
YWxhciBkaWZmID0gY2xhbXAoZmFicyhoc3YxWzJdIC0gaHN2MlsyXSkgLyAyLCBtaW5EaWZmLCAw
LjUpOworCisgICAgaWYgKGhzdjFbMl0gKyBoc3YyWzJdID4gMS4wKQorICAgICAgICBkaWZmID0g
LWRpZmY7CisKKyAgICByZXR1cm4gc2F0dXJhdGVBbmRCcmlnaHRlbihoc3YyLCAtMC4yLCBkaWZm
KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50QXJyb3dCdXR0b24o
R3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgcmVjdCwgQnV0dG9uRGlyZWN0aW9u
IGRpcmVjdGlvbiwgQ29udHJvbFN0YXRlcyBzdGF0ZXMpCit7CisgICAgU2tDYW52YXMqIGNvbnN0
IGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisgICAgaW50IHdpZHRo
TWlkZGxlLCBsZW5ndGhNaWRkbGU7CisgICAgU2tQYWludCBwYWludDsKKyAgICBpZiAoZGlyZWN0
aW9uID09IE5vcnRoIHx8IGRpcmVjdGlvbiA9PSBTb3V0aCkgeworICAgICAgICB3aWR0aE1pZGRs
ZSA9IHJlY3Qud2lkdGgoKSAvIDIgKyAxOworICAgICAgICBsZW5ndGhNaWRkbGUgPSByZWN0Lmhl
aWdodCgpIC8gMiArIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVuZ3RoTWlkZGxlID0gcmVj
dC53aWR0aCgpIC8gMiArIDE7CisgICAgICAgIHdpZHRoTWlkZGxlID0gcmVjdC5oZWlnaHQoKSAv
IDIgKyAxOworICAgIH0KKworICAgIC8vIENhbGN1bGF0ZSBidXR0b24gY29sb3IuCisgICAgU2tT
Y2FsYXIgdHJhY2tIU1ZbM107CisgICAgU2tDb2xvclRvSFNWKHRyYWNrQ29sb3IoKSwgdHJhY2tI
U1YpOworICAgIFNrQ29sb3IgYnV0dG9uQ29sb3IgPSBzYXR1cmF0ZUFuZEJyaWdodGVuKHRyYWNr
SFNWLCAwLCAwLjIpOworICAgIFNrQ29sb3IgYmFja2dyb3VuZENvbG9yID0gYnV0dG9uQ29sb3I7
CisgICAgaWYgKHN0YXRlcyAmIFByZXNzZWRTdGF0ZSkgeworICAgICAgICBTa1NjYWxhciBidXR0
b25IU1ZbM107CisgICAgICAgIFNrQ29sb3JUb0hTVihidXR0b25Db2xvciwgYnV0dG9uSFNWKTsK
KyAgICAgICAgYnV0dG9uQ29sb3IgPSBzYXR1cmF0ZUFuZEJyaWdodGVuKGJ1dHRvbkhTViwgMCwg
LTAuMSk7CisgICAgfSBlbHNlIGlmIChzdGF0ZXMgJiBIb3ZlclN0YXRlKSB7CisgICAgICAgIFNr
U2NhbGFyIGJ1dHRvbkhTVlszXTsKKyAgICAgICAgU2tDb2xvclRvSFNWKGJ1dHRvbkNvbG9yLCBi
dXR0b25IU1YpOworICAgICAgICBidXR0b25Db2xvciA9IHNhdHVyYXRlQW5kQnJpZ2h0ZW4oYnV0
dG9uSFNWLCAwLCAwLjA1KTsKKyAgICB9CisKKyAgICBTa0lSZWN0IHNrcmVjdDsKKyAgICBza3Jl
Y3Quc2V0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3Qu
eSgpICsgcmVjdC5oZWlnaHQoKSk7CisgICAgLy8gUGFpbnQgdGhlIGJhY2tncm91bmQgKHRoZSBh
cmVhIHZpc2libGUgYmVoaW5kIHRoZSByb3VuZGVkIGNvcm5lcnMpLgorICAgIHBhaW50LnNldENv
bG9yKGJhY2tncm91bmRDb2xvcik7CisgICAgY2FudmFzLT5kcmF3SVJlY3Qoc2tyZWN0LCBwYWlu
dCk7CisKKyAgICAvLyBQYWludCB0aGUgYnV0dG9uJ3Mgb3V0bGluZSBhbmQgZmlsbCB0aGUgbWlk
ZGxlCisgICAgU2tQYXRoIG91dGxpbmU7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBj
YXNlIE5vcnRoOgorICAgICAgICBvdXRsaW5lLm1vdmVUbyhyZWN0LngoKSArIDAuNSwgcmVjdC55
KCkgKyByZWN0LmhlaWdodCgpICsgMC41KTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDAsIC0o
cmVjdC5oZWlnaHQoKSAtIDIpKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDIsIC0yKTsKKyAg
ICAgICAgb3V0bGluZS5yTGluZVRvKHJlY3Qud2lkdGgoKSAtIDUsIDApOworICAgICAgICBvdXRs
aW5lLnJMaW5lVG8oMiwgMik7CisgICAgICAgIG91dGxpbmUuckxpbmVUbygwLCByZWN0LmhlaWdo
dCgpIC0gMik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU291dGg6CisgICAgICAgIG91dGxp
bmUubW92ZVRvKHJlY3QueCgpICsgMC41LCByZWN0LnkoKSAtIDAuNSk7CisgICAgICAgIG91dGxp
bmUuckxpbmVUbygwLCByZWN0LmhlaWdodCgpIC0gMik7CisgICAgICAgIG91dGxpbmUuckxpbmVU
bygyLCAyKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKHJlY3Qud2lkdGgoKSAtIDUsIDApOwor
ICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMiwgLTIpOworICAgICAgICBvdXRsaW5lLnJMaW5lVG8o
MCwgLShyZWN0LmhlaWdodCgpIC0gMikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVhc3Q6
CisgICAgICAgIG91dGxpbmUubW92ZVRvKHJlY3QueCgpIC0gMC41LCByZWN0LnkoKSArIDAuNSk7
CisgICAgICAgIG91dGxpbmUuckxpbmVUbyhyZWN0LndpZHRoKCkgLSAyLCAwKTsKKyAgICAgICAg
b3V0bGluZS5yTGluZVRvKDIsIDIpOworICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMCwgcmVjdC5o
ZWlnaHQoKSAtIDUpOworICAgICAgICBvdXRsaW5lLnJMaW5lVG8oLTIsIDIpOworICAgICAgICBv
dXRsaW5lLnJMaW5lVG8oLShyZWN0LndpZHRoKCkgLSAyKSwgMCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV2VzdDoKKyAgICAgICAgb3V0bGluZS5tb3ZlVG8ocmVjdC54KCkgKyByZWN0Lndp
ZHRoKCkgKyAwLjUsIHJlY3QueSgpICsgMC41KTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKC0o
cmVjdC53aWR0aCgpIC0gMiksIDApOworICAgICAgICBvdXRsaW5lLnJMaW5lVG8oLTIsIDIpOwor
ICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMCwgcmVjdC5oZWlnaHQoKSAtIDUpOworICAgICAgICBv
dXRsaW5lLnJMaW5lVG8oMiwgMik7CisgICAgICAgIG91dGxpbmUuckxpbmVUbyhyZWN0LndpZHRo
KCkgLSAyLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG91dGxpbmUuY2xvc2UoKTsK
KworICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKKyAgICBwYWludC5z
ZXRDb2xvcihidXR0b25Db2xvcik7CisgICAgY2FudmFzLT5kcmF3UGF0aChvdXRsaW5lLCBwYWlu
dCk7CisKKyAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgcGFpbnQuc2V0U3R5bGUo
U2tQYWludDo6a1N0cm9rZV9TdHlsZSk7CisgICAgU2tTY2FsYXIgdGh1bWJIU1ZbM107CisgICAg
U2tDb2xvclRvSFNWKHRodW1iSW5hY3RpdmVDb2xvcigpLCB0aHVtYkhTVik7CisgICAgcGFpbnQu
c2V0Q29sb3Iob3V0bGluZUNvbG9yKHRyYWNrSFNWLCB0aHVtYkhTVikpOworICAgIGNhbnZhcy0+
ZHJhd1BhdGgob3V0bGluZSwgcGFpbnQpOworCisgICAgLy8gSWYgdGhlIGJ1dHRvbiBpcyBkaXNh
YmxlZCwgdGhlIGFycm93IGlzIGRyYXduIHdpdGggdGhlIG91dGxpbmUgY29sb3IuCisgICAgaWYg
KHN0YXRlcyAmIEVuYWJsZWRTdGF0ZSkKKyAgICAgICAgcGFpbnQuc2V0Q29sb3IoU0tfQ29sb3JC
TEFDSyk7CisKKyAgICBwYWludC5zZXRBbnRpQWxpYXMoZmFsc2UpOworICAgIHBhaW50LnNldFN0
eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKKworICAgIFNrUGF0aCBwYXRoOworICAgIC8vIFRo
ZSBjb25zdGFudHMgaW4gdGhpcyBibG9jayBvZiBjb2RlIGFyZSBoYW5kLXRhaWxvcmVkIHRvIHBy
b2R1Y2UgZ29vZAorICAgIC8vIGxvb2tpbmcgYXJyb3dzIHdpdGhvdXQgYW50aS1hbGlhc2luZy4K
KyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgTm9ydGg6CisgICAgICAgIHBhdGgu
bW92ZVRvKHJlY3QueCgpICsgd2lkdGhNaWRkbGUgLSA0LCByZWN0LnkoKSArIGxlbmd0aE1pZGRs
ZSArIDIpOworICAgICAgICBwYXRoLnJMaW5lVG8oNywgMCk7CisgICAgICAgIHBhdGguckxpbmVU
bygtNCwgLTQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNvdXRoOgorICAgICAgICBwYXRo
Lm1vdmVUbyhyZWN0LngoKSArIHdpZHRoTWlkZGxlIC0gNCwgcmVjdC55KCkgKyBsZW5ndGhNaWRk
bGUgLSAzKTsKKyAgICAgICAgcGF0aC5yTGluZVRvKDcsIDApOworICAgICAgICBwYXRoLnJMaW5l
VG8oLTQsIDQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVhc3Q6CisgICAgICAgIHBhdGgu
bW92ZVRvKHJlY3QueCgpICsgbGVuZ3RoTWlkZGxlIC0gMywgcmVjdC55KCkgKyB3aWR0aE1pZGRs
ZSAtIDQpOworICAgICAgICBwYXRoLnJMaW5lVG8oMCwgNyk7CisgICAgICAgIHBhdGguckxpbmVU
byg0LCAtNCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2VzdDoKKyAgICAgICAgcGF0aC5t
b3ZlVG8ocmVjdC54KCkgKyBsZW5ndGhNaWRkbGUgKyAxLCByZWN0LnkoKSArIHdpZHRoTWlkZGxl
IC0gNSk7CisgICAgICAgIHBhdGguckxpbmVUbygwLCA5KTsKKyAgICAgICAgcGF0aC5yTGluZVRv
KC00LCAtNCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBwYXRoLmNsb3NlKCk7CisKKyAg
ICBjYW52YXMtPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTGludXg6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIGludCB3aWR0aCA9
IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKKyAg
ICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRN
aW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIENvbnRyb2xT
dGF0ZXMgbm9ydGhTdGF0ZXMgPSBjb250cm9sU3RhdGVzRm9yUmVuZGVyZXIob2JqZWN0KTsKKyAg
ICBDb250cm9sU3RhdGVzIHNvdXRoU3RhdGVzID0gbm9ydGhTdGF0ZXM7CisgICAgaWYgKG5vcnRo
U3RhdGVzICYgU3BpblVwU3RhdGUpCisgICAgICAgIHNvdXRoU3RhdGVzICY9IH4oSG92ZXJTdGF0
ZSB8IFByZXNzZWRTdGF0ZSk7CisgICAgZWxzZQorICAgICAgICBub3J0aFN0YXRlcyAmPSB+KEhv
dmVyU3RhdGUgfCBQcmVzc2VkU3RhdGUpOworCisgICAgSW50UmVjdCBoYWxmID0gcmVjdDsKKyAg
ICBoYWxmLnNldEhlaWdodChyZWN0LmhlaWdodCgpIC8gMik7CisgICAgcGFpbnRBcnJvd0J1dHRv
bihpbmZvLmNvbnRleHQsIGhhbGYsIE5vcnRoLCBub3J0aFN0YXRlcyk7CisKKyAgICBoYWxmLnNl
dFkocmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC8gMik7CisgICAgcGFpbnRBcnJvd0J1dHRvbihp
bmZvLmNvbnRleHQsIGhhbGYsIFNvdXRoLCBzb3V0aFN0YXRlcyk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1MaW51eC5oCmluZGV4IGM2MGRlYzMyNjY1OWI1NGMwYWMzNzJjZTlhNTEw
MTJlNWUxZDFlY2YuLmZlMWUzMDNjYWMzYTk5MTE5ZTAyNjk2NTEzODVhMjk5YTNkOWViNGIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oCkBAIC0zMCw2
ICszMCw4IEBACiAjZGVmaW5lIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eF9oCiAKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZUNocm9taXVtU2tpYS5oIgorI2luY2x1ZGUgIlNrQ29sb3IuaCIKKyNpbmNs
dWRlICJTa1NjYWxhci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU5LDYgKzYxLDE5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIHZvaWQgc2V0Q2FyZXRCbGlu
a0ludGVydmFsKGRvdWJsZSBpbnRlcnZhbCk7CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0
QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29uc3Q7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGFk
anVzdElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKwor
ICAgICAgICBzdGF0aWMgU2tDb2xvciBzYXR1cmF0ZUFuZEJyaWdodGVuKFNrU2NhbGFyKiBoc3Ys
IFNrU2NhbGFyIHNhdHVyYXRlQW1vdW50LCBTa1NjYWxhciBicmlnaHRlbkFtb3VudCk7CisgICAg
ICAgIHN0YXRpYyBTa0NvbG9yIG91dGxpbmVDb2xvcihTa1NjYWxhciogaHN2MSwgU2tTY2FsYXIq
IGhzdjIpOworICAgICAgICBlbnVtIEJ1dHRvbkRpcmVjdGlvbiB7CisgICAgICAgICAgICBOb3J0
aCwKKyAgICAgICAgICAgIEVhc3QsCisgICAgICAgICAgICBTb3V0aCwKKyAgICAgICAgICAgIFdl
c3QsCisgICAgICAgIH07CisgICAgICAgIHN0YXRpYyB2b2lkIHBhaW50QXJyb3dCdXR0b24oR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIEJ1dHRvbkRpcmVjdGlvbiwgQ29udHJvbFN0
YXRlcyk7CisKICAgICAgICAgc3RhdGljIHZvaWQgc2V0U2VsZWN0aW9uQ29sb3JzKHVuc2lnbmVk
IGFjdGl2ZUJhY2tncm91bmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGFjdGl2ZUZvcmVncm91bmRDb2xvciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluYWN0aXZlQmFja2dyb3VuZENvbG9yLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>61008</attachid>
            <date>2010-07-09 00:49:24 -0700</date>
            <delta_ts>2010-07-09 00:49:24 -0700</delta_ts>
            <desc>Screenshot</desc>
            <filename>linux-stepper.png</filename>
            <type>image/png</type>
            <size>21812</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61204</attachid>
            <date>2010-07-12 03:32:55 -0700</date>
            <delta_ts>2010-07-13 04:06:04 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-41925-20100712193253.patch</filename>
            <type>text/plain</type>
            <size>21771</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTJhZmI5YWE3YzNmMTM0OGY3YzYzMmU1MzJmYWM5OGNiM2E0MmZlMC4uZTFhZTBiYzgzOWUwYmUx
ZDA3MmFjZGY1ZGYyM2UxMTFiYjI4ZDNhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0wNy0xMiAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0Nocm9taXVtXSBMaW51eCBpbXBsZW1lbnRhdGlvbiBv
ZiA8aW5wdXQgdHlwZT1udW1iZXI+IFVJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MTkyNQorCisgICAgICAgIE1vdmUgdGhlIGNvZGUgZm9yIHNjcm9s
bGJhciBzdGVwcGVycyB0byBSZW5kZXJUaGVtZUNocm9taXVtTGludXgsCisgICAgICAgIGFuZCB1
c2UgaXQgZm9yIHR5cGU9bnVtYmVyIHRvby4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50VHJhY2tQaWVjZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50QnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTGlu
dXg6OnNhdHVyYXRlQW5kQnJpZ2h0ZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4OjpvdXRsaW5lQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpwYWludEFycm93QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludElubmVyU3BpbkJ1
dHRvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjopOgorCiAyMDEwLTA2
LTI3ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IER1bWl0cnUgRGFuaWxpdWMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKaW5kZXggYTljZmY5Zjcz
NGMyZjRmODRiNDUyMjNhMjJiOTVlZTE2YzJhNjE4Zi4uMzhiYjNiMDlkMWRlYTA4ZGUwOGU2YTVh
YzQyOTk3YzgyMDBiYWFmMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApAQCAtNzgsNjAgKzc4LDYgQEAg
c3RhdGljIHZvaWQgZHJhd0JveChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBTa1BhaW50JiBwYWludCkKICAgICBkcmF3VmVydExpbmUoY2FudmFzLCByZWN0Lngo
KSwgcmVjdC55KCksIGJvdHRvbSwgcGFpbnQpOwogfQogCi1zdGF0aWMgU2tTY2FsYXIgY2xhbXAo
U2tTY2FsYXIgdmFsdWUsIFNrU2NhbGFyIG1pbiwgU2tTY2FsYXIgbWF4KQotewotICAgIHJldHVy
biBzdGQ6Om1pbihzdGQ6Om1heCh2YWx1ZSwgbWluKSwgbWF4KTsKLX0KLQotc3RhdGljIFNrQ29s
b3Igc2F0dXJhdGVBbmRCcmlnaHRlbihTa1NjYWxhciogaHN2LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTa1NjYWxhciBzYXR1cmF0ZUFtb3VudCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXIgYnJpZ2h0ZW5BbW91bnQpCi17Ci0gICAgU2tT
Y2FsYXIgY29sb3JbM107Ci0gICAgY29sb3JbMF0gPSBoc3ZbMF07Ci0gICAgY29sb3JbMV0gPSBj
bGFtcChoc3ZbMV0gKyBzYXR1cmF0ZUFtb3VudCwgMC4wLCAxLjApOwotICAgIGNvbG9yWzJdID0g
Y2xhbXAoaHN2WzJdICsgYnJpZ2h0ZW5BbW91bnQsIDAuMCwgMS4wKTsKLSAgICByZXR1cm4gU2tI
U1ZUb0NvbG9yKGNvbG9yKTsKLX0KLQotc3RhdGljIFNrQ29sb3Igb3V0bGluZUNvbG9yKFNrU2Nh
bGFyKiBoc3YxLCBTa1NjYWxhciogaHN2MikKLXsKLSAgICAvLyBHVEsgVGhlbWUgZW5naW5lcyBo
YXZlIHdheSB0b28gbXVjaCBjb250cm9sIG92ZXIgdGhlIGxheW91dCBvZgotICAgIC8vIHRoZSBz
Y3JvbGxiYXIuIFdlIG1pZ2h0IGJlIGFibGUgdG8gbW9yZSBjbG9zZWx5IGFwcHJveGltYXRlIGl0
cwotICAgIC8vIGxvb2stYW5kLWZlZWwsIGlmIHdlIHNlbnQgd2hvbGUgaW1hZ2VzIGluc3RlYWQg
b2YganVzdCBjb2xvcnMKLSAgICAvLyBmcm9tIHRoZSBicm93c2VyIHRvIHRoZSByZW5kZXJlci4g
QnV0IGV2ZW4gdGhlbiwgc29tZSB0aGVtZXMKLSAgICAvLyB3b3VsZCBqdXN0IGJyZWFrLgotICAg
IC8vCi0gICAgLy8gU28sIGluc3RlYWQsIHdlIGRvbid0IGV2ZW4gdHJ5IHRvIDEwMCUgcmVwbGlj
YXRlIHRoZSBsb29rIG9mCi0gICAgLy8gdGhlIG5hdGl2ZSBzY3JvbGxiYXIuIFdlIHJlbmRlciBv
dXIgb3duIHZlcnNpb24sIGJ1dCB3ZSBtYWtlCi0gICAgLy8gc3VyZSB0byBwaWNrIGNvbG9ycyB0
aGF0IGJsZW5kIGluIG5pY2VseSB3aXRoIHRoZSBzeXN0ZW0gR1RLCi0gICAgLy8gdGhlbWUuIElu
IG1vc3QgY2FzZXMsIHdlIGNhbiBqdXN0IHNhbXBsZSBhIGNvdXBsZSBvZiBwaXhlbHMKLSAgICAv
LyBmcm9tIHRoZSBzeXN0ZW0gc2Nyb2xsYmFyIGFuZCB1c2UgdGhvc2UgY29sb3JzIHRvIGRyYXcg
b3VyCi0gICAgLy8gc2Nyb2xsYmFyLgotICAgIC8vCi0gICAgLy8gVGhpcyB3b3JrcyBmaW5lIGZv
ciB0aGUgdHJhY2sgY29sb3IgYW5kIHRoZSBvdmVyYWxsIHRodW1iCi0gICAgLy8gY29sb3IuIEJ1
dCBpdCBmYWlscyBzcGVjdGFjdWxhcmx5IGZvciB0aGUgb3V0bGluZSBjb2xvciB1c2VkCi0gICAg
Ly8gYXJvdW5kIHRoZSB0aHVtYiBwaWVjZS4gIE5vdCBhbGwgdGhlbWVzIGhhdmUgYSBjbGVhcmx5
IGRlZmluZWQKLSAgICAvLyBvdXRsaW5lLiBGb3Igc29tZSBvZiB0aGVtIGl0IGlzIHBhcnRpYWxs
eSB0cmFuc3BhcmVudCwgYW5kIGZvcgotICAgIC8vIG90aGVycyB0aGUgdGhpY2tuZXNzIGlzIHZl
cnkgdW5wcmVkaWN0YWJsZS4KLSAgICAvLwotICAgIC8vIFNvLCBpbnN0ZWFkIG9mIHRyeWluZyB0
byBhcHByb3hpbWF0ZSB0aGUgc3lzdGVtIHRoZW1lLCB3ZQotICAgIC8vIGluc3RlYWQgdHJ5IHRv
IGNvbXB1dGUgYSByZWFzb25hYmxlIGxvb2tpbmcgY2hvaWNlIGJhc2VkIG9uIHRoZQotICAgIC8v
IGtub3duIGNvbG9yIG9mIHRoZSB0cmFjayBhbmQgdGhlIHRodW1iIHBpZWNlLiBUaGlzIGlzIGRp
ZmZpY3VsdAotICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGRlYWwgYm90aCB3aXRoIGhpZ2gtIGFuZCBs
b3ctY29udHJhc3QgdGhlbWVzLAotICAgIC8vIGFuZCBib3RoIHdpdGggcG9zaXRpdmUgYW5kIGlu
dmVydGVkIHRoZW1lcy4KLSAgICAvLwotICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBoYXMgYmVl
biB0ZXN0ZWQgdG8gbG9vayBPSyB3aXRoIGFsbCBvZiB0aGUKLSAgICAvLyBkZWZhdWx0IEdUSyB0
aGVtZXMuCi0gICAgU2tTY2FsYXIgbWluRGlmZiA9IGNsYW1wKChoc3YxWzFdICsgaHN2MlsxXSkg
KiAxLjIsIDAuMjgsIDAuNSk7Ci0gICAgU2tTY2FsYXIgZGlmZiA9IGNsYW1wKGZhYnMoaHN2MVsy
XSAtIGhzdjJbMl0pIC8gMiwgbWluRGlmZiwgMC41KTsKLQotICAgIGlmIChoc3YxWzJdICsgaHN2
MlsyXSA+IDEuMCkKLSAgICAgICAgZGlmZiA9IC1kaWZmOwotCi0gICAgcmV0dXJuIHNhdHVyYXRl
QW5kQnJpZ2h0ZW4oaHN2MiwgLTAuMiwgZGlmZik7Ci19Ci0KIHZvaWQgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bUxpbnV4OjpwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydFR5
cGUpCiB7CiAgICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCk7CkBAIC0xNDEsMTUzICs4Nyw0NCBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hy
b21pdW1MaW51eDo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJh
cgogICAgIHNrcmVjdC5zZXQocmVjdC54KCksIHJlY3QueSgpLCByZWN0LngoKSArIHJlY3Qud2lk
dGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKICAgICBTa1NjYWxhciB0cmFja0hTVlsz
XTsKICAgICBTa0NvbG9yVG9IU1YoUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojp0cmFja0NvbG9y
KCksIHRyYWNrSFNWKTsKLSAgICBwYWludC5zZXRDb2xvcihzYXR1cmF0ZUFuZEJyaWdodGVuKHRy
YWNrSFNWLCAwLCAwKSk7CisgICAgcGFpbnQuc2V0Q29sb3IoUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpzYXR1cmF0ZUFuZEJyaWdodGVuKHRyYWNrSFNWLCAwLCAwKSk7CiAgICAgY2FudmFzLT5k
cmF3SVJlY3Qoc2tyZWN0LCBwYWludCk7CiAKICAgICBTa1NjYWxhciB0aHVtYkhTVlszXTsKICAg
ICBTa0NvbG9yVG9IU1YoUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojp0aHVtYkluYWN0aXZlQ29s
b3IoKSwKICAgICAgICAgICAgICAgICAgdGh1bWJIU1YpOwogCi0gICAgcGFpbnQuc2V0Q29sb3Io
b3V0bGluZUNvbG9yKHRyYWNrSFNWLCB0aHVtYkhTVikpOworICAgIHBhaW50LnNldENvbG9yKFJl
bmRlclRoZW1lQ2hyb21pdW1MaW51eDo6b3V0bGluZUNvbG9yKHRyYWNrSFNWLCB0aHVtYkhTVikp
OwogICAgIGRyYXdCb3goY2FudmFzLCByZWN0LCBwYWludCk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0
KQogewotICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpOwotICAgIHN0YXRpYyBjb25zdCBpbnQgd2lkdGhNaWRkbGUgPSBzY3JvbGxiYXJU
aGlja25lc3NWYWx1ZSAvIDIgKyAxOwotICAgIHN0YXRpYyBjb25zdCBpbnQgbGVuZ3RoTWlkZGxl
ID0gYnV0dG9uTGVuZ3RoIC8gMiArIDE7Ci0gICAgU2tQYWludCBwYWludDsKLSAgICBlbnVtIHsK
LSAgICAgICAgTm9ydGgsCi0gICAgICAgIEVhc3QsCi0gICAgICAgIFNvdXRoLAotICAgICAgICBX
ZXN0LAotICAgIH0gZGlyZWN0aW9uOwotCisgICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpC
dXR0b25EaXJlY3Rpb24gZGlyZWN0aW9uOwogICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0
dG9uU3RhcnRQYXJ0KQotICAgICAgICAgICAgZGlyZWN0aW9uID0gV2VzdDsKKyAgICAgICAgICAg
IGRpcmVjdGlvbiA9IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6V2VzdDsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZGlyZWN0aW9uID0gRWFzdDsKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9
IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6RWFzdDsKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KQotICAgICAgICAgICAgZGlyZWN0aW9uID0g
Tm9ydGg7CisgICAgICAgICAgICBkaXJlY3Rpb24gPSBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
Ok5vcnRoOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaXJlY3Rpb24gPSBTb3V0aDsKKyAg
ICAgICAgICAgIGRpcmVjdGlvbiA9IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6U291dGg7CiAg
ICAgfQogCisgICAgQ29udHJvbFN0YXRlcyBzdGF0ZXMgPSAwOwogICAgIC8vIERldGVybWluZSBp
ZiB0aGUgYnV0dG9uIGNhbiBiZSBwcmVzc2VkLgotICAgIGJvb2wgZW5hYmxlZCA9IGZhbHNlOwot
ICAgIGlmICgoKGRpcmVjdGlvbiA9PSBXZXN0IHx8IGRpcmVjdGlvbiA9PSBOb3J0aCkgJiYgc2Ny
b2xsYmFyLT5jdXJyZW50UG9zKCkpCi0gICAgICAgIHx8IChkaXJlY3Rpb24gPT0gRWFzdCB8fCBk
aXJlY3Rpb24gPT0gU291dGgpICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJh
ci0+bWF4aW11bSgpKQotICAgICAgICBlbmFibGVkID0gdHJ1ZTsKKyAgICBpZiAoKChkaXJlY3Rp
b24gPT0gUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpXZXN0IHx8IGRpcmVjdGlvbiA9PSBSZW5k
ZXJUaGVtZUNocm9taXVtTGludXg6Ok5vcnRoKSAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSkK
KyAgICAgICAgfHwgKGRpcmVjdGlvbiA9PSBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OkVhc3Qg
fHwgZGlyZWN0aW9uID09IFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6U291dGgpICYmIHNjcm9s
bGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKQorICAgICAgICBzdGF0
ZXMgfD0gRW5hYmxlZFN0YXRlOwogCi0gICAgLy8gQ2FsY3VsYXRlIGJ1dHRvbiBjb2xvci4KLSAg
ICBTa1NjYWxhciB0cmFja0hTVlszXTsKLSAgICBTa0NvbG9yVG9IU1YoUmVuZGVyVGhlbWVDaHJv
bWl1bUxpbnV4Ojp0cmFja0NvbG9yKCksIHRyYWNrSFNWKTsKLSAgICBTa0NvbG9yIGJ1dHRvbkNv
bG9yID0gc2F0dXJhdGVBbmRCcmlnaHRlbih0cmFja0hTViwgMCwgMC4yKTsKLSAgICBTa0NvbG9y
IGJhY2tncm91bmRDb2xvciA9IGJ1dHRvbkNvbG9yOwotICAgIGlmIChwYXJ0ID09IHNjcm9sbGJh
ci0+cHJlc3NlZFBhcnQoKSkgewotICAgICAgICBTa1NjYWxhciBidXR0b25IU1ZbM107Ci0gICAg
ICAgIFNrQ29sb3JUb0hTVihidXR0b25Db2xvciwgYnV0dG9uSFNWKTsKLSAgICAgICAgYnV0dG9u
Q29sb3IgPSBzYXR1cmF0ZUFuZEJyaWdodGVuKGJ1dHRvbkhTViwgMCwgLTAuMSk7Ci0gICAgfSBl
bHNlIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAmJiBlbmFibGVkKSB7Ci0g
ICAgICAgIFNrU2NhbGFyIGJ1dHRvbkhTVlszXTsKLSAgICAgICAgU2tDb2xvclRvSFNWKGJ1dHRv
bkNvbG9yLCBidXR0b25IU1YpOwotICAgICAgICBidXR0b25Db2xvciA9IHNhdHVyYXRlQW5kQnJp
Z2h0ZW4oYnV0dG9uSFNWLCAwLCAwLjA1KTsKLSAgICB9Ci0KLSAgICBTa0lSZWN0IHNrcmVjdDsK
LSAgICBza3JlY3Quc2V0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC54KCkgKyByZWN0LndpZHRo
KCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7Ci0gICAgLy8gUGFpbnQgdGhlIGJhY2tncm91
bmQgKHRoZSBhcmVhIHZpc2libGUgYmVoaW5kIHRoZSByb3VuZGVkIGNvcm5lcnMpLgotICAgIHBh
aW50LnNldENvbG9yKGJhY2tncm91bmRDb2xvcik7Ci0gICAgY2FudmFzLT5kcmF3SVJlY3Qoc2ty
ZWN0LCBwYWludCk7Ci0KLSAgICAvLyBQYWludCB0aGUgYnV0dG9uJ3Mgb3V0bGluZSBhbmQgZmls
bCB0aGUgbWlkZGxlCi0gICAgU2tQYXRoIG91dGxpbmU7Ci0gICAgc3dpdGNoIChkaXJlY3Rpb24p
IHsKLSAgICBjYXNlIE5vcnRoOgotICAgICAgICBvdXRsaW5lLm1vdmVUbyhyZWN0LngoKSArIDAu
NSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpICsgMC41KTsKLSAgICAgICAgb3V0bGluZS5yTGlu
ZVRvKDAsIC0ocmVjdC5oZWlnaHQoKSAtIDIpKTsKLSAgICAgICAgb3V0bGluZS5yTGluZVRvKDIs
IC0yKTsKLSAgICAgICAgb3V0bGluZS5yTGluZVRvKHJlY3Qud2lkdGgoKSAtIDUsIDApOwotICAg
ICAgICBvdXRsaW5lLnJMaW5lVG8oMiwgMik7Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbygwLCBy
ZWN0LmhlaWdodCgpIC0gMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU291dGg6Ci0gICAg
ICAgIG91dGxpbmUubW92ZVRvKHJlY3QueCgpICsgMC41LCByZWN0LnkoKSAtIDAuNSk7Ci0gICAg
ICAgIG91dGxpbmUuckxpbmVUbygwLCByZWN0LmhlaWdodCgpIC0gMik7Ci0gICAgICAgIG91dGxp
bmUuckxpbmVUbygyLCAyKTsKLSAgICAgICAgb3V0bGluZS5yTGluZVRvKHJlY3Qud2lkdGgoKSAt
IDUsIDApOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMiwgLTIpOwotICAgICAgICBvdXRsaW5l
LnJMaW5lVG8oMCwgLShyZWN0LmhlaWdodCgpIC0gMikpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEVhc3Q6Ci0gICAgICAgIG91dGxpbmUubW92ZVRvKHJlY3QueCgpIC0gMC41LCByZWN0Lnko
KSArIDAuNSk7Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbyhyZWN0LndpZHRoKCkgLSAyLCAwKTsK
LSAgICAgICAgb3V0bGluZS5yTGluZVRvKDIsIDIpOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8o
MCwgcmVjdC5oZWlnaHQoKSAtIDUpOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8oLTIsIDIpOwot
ICAgICAgICBvdXRsaW5lLnJMaW5lVG8oLShyZWN0LndpZHRoKCkgLSAyKSwgMCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgV2VzdDoKLSAgICAgICAgb3V0bGluZS5tb3ZlVG8ocmVjdC54KCkg
KyByZWN0LndpZHRoKCkgKyAwLjUsIHJlY3QueSgpICsgMC41KTsKLSAgICAgICAgb3V0bGluZS5y
TGluZVRvKC0ocmVjdC53aWR0aCgpIC0gMiksIDApOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8o
LTIsIDIpOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMCwgcmVjdC5oZWlnaHQoKSAtIDUpOwot
ICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMiwgMik7Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbyhy
ZWN0LndpZHRoKCkgLSAyLCAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIG91dGxpbmUu
Y2xvc2UoKTsKLQotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKLSAg
ICBwYWludC5zZXRDb2xvcihidXR0b25Db2xvcik7Ci0gICAgY2FudmFzLT5kcmF3UGF0aChvdXRs
aW5lLCBwYWludCk7Ci0KLSAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgcGFpbnQu
c2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7Ci0gICAgU2tTY2FsYXIgdGh1bWJIU1Zb
M107Ci0gICAgU2tDb2xvclRvSFNWKFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6dGh1bWJJbmFj
dGl2ZUNvbG9yKCksIHRodW1iSFNWKTsKLSAgICBwYWludC5zZXRDb2xvcihvdXRsaW5lQ29sb3Io
dHJhY2tIU1YsIHRodW1iSFNWKSk7Ci0gICAgY2FudmFzLT5kcmF3UGF0aChvdXRsaW5lLCBwYWlu
dCk7Ci0KLSAgICAvLyBJZiB0aGUgYnV0dG9uIGlzIGRpc2FibGVkLCB0aGUgYXJyb3cgaXMgZHJh
d24gd2l0aCB0aGUgb3V0bGluZSBjb2xvci4KLSAgICBpZiAoZW5hYmxlZCkKLSAgICAgICAgcGFp
bnQuc2V0Q29sb3IoU0tfQ29sb3JCTEFDSyk7Ci0KLSAgICBwYWludC5zZXRBbnRpQWxpYXMoZmFs
c2UpOwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKLQotICAgIFNr
UGF0aCBwYXRoOwotICAgIC8vIFRoZSBjb25zdGFudHMgaW4gdGhpcyBibG9jayBvZiBjb2RlIGFy
ZSBoYW5kLXRhaWxvcmVkIHRvIHByb2R1Y2UgZ29vZAotICAgIC8vIGxvb2tpbmcgYXJyb3dzIHdp
dGhvdXQgYW50aS1hbGlhc2luZy4KLSAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgIGNhc2Ug
Tm9ydGg6Ci0gICAgICAgIHBhdGgubW92ZVRvKHJlY3QueCgpICsgd2lkdGhNaWRkbGUgLSA0LCBy
ZWN0LnkoKSArIGxlbmd0aE1pZGRsZSArIDIpOwotICAgICAgICBwYXRoLnJMaW5lVG8oNywgMCk7
Ci0gICAgICAgIHBhdGguckxpbmVUbygtNCwgLTQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNvdXRoOgotICAgICAgICBwYXRoLm1vdmVUbyhyZWN0LngoKSArIHdpZHRoTWlkZGxlIC0gNCwg
cmVjdC55KCkgKyBsZW5ndGhNaWRkbGUgLSAzKTsKLSAgICAgICAgcGF0aC5yTGluZVRvKDcsIDAp
OwotICAgICAgICBwYXRoLnJMaW5lVG8oLTQsIDQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEVhc3Q6Ci0gICAgICAgIHBhdGgubW92ZVRvKHJlY3QueCgpICsgbGVuZ3RoTWlkZGxlIC0gMywg
cmVjdC55KCkgKyB3aWR0aE1pZGRsZSAtIDQpOwotICAgICAgICBwYXRoLnJMaW5lVG8oMCwgNyk7
Ci0gICAgICAgIHBhdGguckxpbmVUbyg0LCAtNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V2VzdDoKLSAgICAgICAgcGF0aC5tb3ZlVG8ocmVjdC54KCkgKyBsZW5ndGhNaWRkbGUgKyAxLCBy
ZWN0LnkoKSArIHdpZHRoTWlkZGxlIC0gNSk7Ci0gICAgICAgIHBhdGguckxpbmVUbygwLCA5KTsK
LSAgICAgICAgcGF0aC5yTGluZVRvKC00LCAtNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBwYXRoLmNsb3NlKCk7CisgICAgaWYgKHBhcnQgPT0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgp
KQorICAgICAgICBzdGF0ZXMgfD0gUHJlc3NlZFN0YXRlOworICAgIGVsc2UgaWYgKHBhcnQgPT0g
c2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpICYmIHN0YXRlcyAmIEVuYWJsZWRTdGF0ZSkKKyAgICAg
ICAgc3RhdGVzIHw9IEhvdmVyU3RhdGU7CiAKLSAgICBjYW52YXMtPmRyYXdQYXRoKHBhdGgsIHBh
aW50KTsKKyAgICBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50QXJyb3dCdXR0b24oZ2Ms
IHJlY3QsIGRpcmVjdGlvbiwgc3RhdGVzKTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9t
aXVtTGludXg6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0zMDUsNyArMTQyLDcgQEAgdm9pZCBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBnYywg
U2Nyb2xsYmFyKiBzY3IKICAgICAgICAgICAgICAgICAgdGh1bWIpOwogCiAgICAgU2tQYWludCBw
YWludDsKLSAgICBwYWludC5zZXRDb2xvcihzYXR1cmF0ZUFuZEJyaWdodGVuKHRodW1iLCAwLCAw
LjAyKSk7CisgICAgcGFpbnQuc2V0Q29sb3IoUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzYXR1
cmF0ZUFuZEJyaWdodGVuKHRodW1iLCAwLCAwLjAyKSk7CiAKICAgICBTa0lSZWN0IHNrcmVjdDsK
ICAgICBpZiAodmVydGljYWwpCkBAIC0zMTUsNyArMTUyLDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtTGludXg6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFy
KiBzY3IKIAogICAgIGNhbnZhcy0+ZHJhd0lSZWN0KHNrcmVjdCwgcGFpbnQpOwogCi0gICAgcGFp
bnQuc2V0Q29sb3Ioc2F0dXJhdGVBbmRCcmlnaHRlbih0aHVtYiwgMCwgLTAuMDIpKTsKKyAgICBw
YWludC5zZXRDb2xvcihSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnNhdHVyYXRlQW5kQnJpZ2h0
ZW4odGh1bWIsIDAsIC0wLjAyKSk7CiAKICAgICBpZiAodmVydGljYWwpCiAgICAgICAgIHNrcmVj
dC5zZXQobWlkeCArIDEsIHJlY3QueSgpLCByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55
KCkgKyByZWN0LmhlaWdodCgpKTsKQEAgLTMyNiw3ICsxNjMsNyBAQCB2b2lkIFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxi
YXIqIHNjcgogCiAgICAgU2tTY2FsYXIgdHJhY2tbM107CiAgICAgU2tDb2xvclRvSFNWKFJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6dHJhY2tDb2xvcigpLCB0cmFjayk7Ci0gICAgcGFpbnQuc2V0
Q29sb3Iob3V0bGluZUNvbG9yKHRyYWNrLCB0aHVtYikpOworICAgIHBhaW50LnNldENvbG9yKFJl
bmRlclRoZW1lQ2hyb21pdW1MaW51eDo6b3V0bGluZUNvbG9yKHRyYWNrLCB0aHVtYikpOwogICAg
IGRyYXdCb3goY2FudmFzLCByZWN0LCBwYWludCk7CiAKICAgICBpZiAocmVjdC5oZWlnaHQoKSA+
IDEwICYmIHJlY3Qud2lkdGgoKSA+IDEwKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCBjMjkzNTNkYjkyZTZkN2RmYzhkNjg0ZTc0OTdk
MTlhNjUxOTkyYjAyLi5jMjdmMzAwZTBjN2VmYTI3NzJkNTcyZTg3ZTk4ZGExZjMyZDBjNDM5IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKQEAg
LTI3LDcgKzI3LDkgQEAKIAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRl
ICJDb2xvci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIlVz
ZXJBZ2VudFN0eWxlU2hlZXRzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE3Niw0ICsx
NzgsMjAyIEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRTY3JvbGxiYXJDb2xv
cnMoCiAgICAgbV90cmFja0NvbG9yID0gdHJhY2tDb2xvcjsKIH0KIAorc3RhdGljIFNrU2NhbGFy
IGNsYW1wKFNrU2NhbGFyIHZhbHVlLCBTa1NjYWxhciBtaW4sIFNrU2NhbGFyIG1heCkKK3sKKyAg
ICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgodmFsdWUsIG1pbiksIG1heCk7Cit9CisKK1NrQ29s
b3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzYXR1cmF0ZUFuZEJyaWdodGVuKAorICAgIGNv
bnN0IFNrU2NhbGFyIGhzdlszXSwgU2tTY2FsYXIgc2F0dXJhdGVBbW91bnQsIFNrU2NhbGFyIGJy
aWdodGVuQW1vdW50KQoreworICAgIFNrU2NhbGFyIGNvbG9yWzNdOworICAgIGNvbG9yWzBdID0g
aHN2WzBdOworICAgIGNvbG9yWzFdID0gY2xhbXAoaHN2WzFdICsgc2F0dXJhdGVBbW91bnQsIDAu
MCwgMS4wKTsKKyAgICBjb2xvclsyXSA9IGNsYW1wKGhzdlsyXSArIGJyaWdodGVuQW1vdW50LCAw
LjAsIDEuMCk7CisgICAgcmV0dXJuIFNrSFNWVG9Db2xvcihjb2xvcik7Cit9CisKK1NrQ29sb3Ig
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpvdXRsaW5lQ29sb3IoY29uc3QgU2tTY2FsYXIgaHN2
MVszXSwgY29uc3QgU2tTY2FsYXIgaHN2MlszXSkKK3sKKyAgICAvLyBHVEsgVGhlbWUgZW5naW5l
cyBoYXZlIHdheSB0b28gbXVjaCBjb250cm9sIG92ZXIgdGhlIGxheW91dCBvZgorICAgIC8vIHRo
ZSBzY3JvbGxiYXIuIFdlIG1pZ2h0IGJlIGFibGUgdG8gbW9yZSBjbG9zZWx5IGFwcHJveGltYXRl
IGl0cworICAgIC8vIGxvb2stYW5kLWZlZWwsIGlmIHdlIHNlbnQgd2hvbGUgaW1hZ2VzIGluc3Rl
YWQgb2YganVzdCBjb2xvcnMKKyAgICAvLyBmcm9tIHRoZSBicm93c2VyIHRvIHRoZSByZW5kZXJl
ci4gQnV0IGV2ZW4gdGhlbiwgc29tZSB0aGVtZXMKKyAgICAvLyB3b3VsZCBqdXN0IGJyZWFrLgor
ICAgIC8vCisgICAgLy8gU28sIGluc3RlYWQsIHdlIGRvbid0IGV2ZW4gdHJ5IHRvIDEwMCUgcmVw
bGljYXRlIHRoZSBsb29rIG9mCisgICAgLy8gdGhlIG5hdGl2ZSBzY3JvbGxiYXIuIFdlIHJlbmRl
ciBvdXIgb3duIHZlcnNpb24sIGJ1dCB3ZSBtYWtlCisgICAgLy8gc3VyZSB0byBwaWNrIGNvbG9y
cyB0aGF0IGJsZW5kIGluIG5pY2VseSB3aXRoIHRoZSBzeXN0ZW0gR1RLCisgICAgLy8gdGhlbWUu
IEluIG1vc3QgY2FzZXMsIHdlIGNhbiBqdXN0IHNhbXBsZSBhIGNvdXBsZSBvZiBwaXhlbHMKKyAg
ICAvLyBmcm9tIHRoZSBzeXN0ZW0gc2Nyb2xsYmFyIGFuZCB1c2UgdGhvc2UgY29sb3JzIHRvIGRy
YXcgb3VyCisgICAgLy8gc2Nyb2xsYmFyLgorICAgIC8vCisgICAgLy8gVGhpcyB3b3JrcyBmaW5l
IGZvciB0aGUgdHJhY2sgY29sb3IgYW5kIHRoZSBvdmVyYWxsIHRodW1iCisgICAgLy8gY29sb3Iu
IEJ1dCBpdCBmYWlscyBzcGVjdGFjdWxhcmx5IGZvciB0aGUgb3V0bGluZSBjb2xvciB1c2VkCisg
ICAgLy8gYXJvdW5kIHRoZSB0aHVtYiBwaWVjZS4gIE5vdCBhbGwgdGhlbWVzIGhhdmUgYSBjbGVh
cmx5IGRlZmluZWQKKyAgICAvLyBvdXRsaW5lLiBGb3Igc29tZSBvZiB0aGVtIGl0IGlzIHBhcnRp
YWxseSB0cmFuc3BhcmVudCwgYW5kIGZvcgorICAgIC8vIG90aGVycyB0aGUgdGhpY2tuZXNzIGlz
IHZlcnkgdW5wcmVkaWN0YWJsZS4KKyAgICAvLworICAgIC8vIFNvLCBpbnN0ZWFkIG9mIHRyeWlu
ZyB0byBhcHByb3hpbWF0ZSB0aGUgc3lzdGVtIHRoZW1lLCB3ZQorICAgIC8vIGluc3RlYWQgdHJ5
IHRvIGNvbXB1dGUgYSByZWFzb25hYmxlIGxvb2tpbmcgY2hvaWNlIGJhc2VkIG9uIHRoZQorICAg
IC8vIGtub3duIGNvbG9yIG9mIHRoZSB0cmFjayBhbmQgdGhlIHRodW1iIHBpZWNlLiBUaGlzIGlz
IGRpZmZpY3VsdAorICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGRlYWwgYm90aCB3aXRoIGhpZ2gtIGFu
ZCBsb3ctY29udHJhc3QgdGhlbWVzLAorICAgIC8vIGFuZCBib3RoIHdpdGggcG9zaXRpdmUgYW5k
IGludmVydGVkIHRoZW1lcy4KKyAgICAvLworICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBoYXMg
YmVlbiB0ZXN0ZWQgdG8gbG9vayBPSyB3aXRoIGFsbCBvZiB0aGUKKyAgICAvLyBkZWZhdWx0IEdU
SyB0aGVtZXMuCisgICAgU2tTY2FsYXIgbWluRGlmZiA9IGNsYW1wKChoc3YxWzFdICsgaHN2Mlsx
XSkgKiAxLjIsIDAuMjgsIDAuNSk7CisgICAgU2tTY2FsYXIgZGlmZiA9IGNsYW1wKGZhYnMoaHN2
MVsyXSAtIGhzdjJbMl0pIC8gMiwgbWluRGlmZiwgMC41KTsKKworICAgIGlmIChoc3YxWzJdICsg
aHN2MlsyXSA+IDEuMCkKKyAgICAgICAgZGlmZiA9IC1kaWZmOworCisgICAgcmV0dXJuIHNhdHVy
YXRlQW5kQnJpZ2h0ZW4oaHN2MiwgLTAuMiwgZGlmZik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4OjpwYWludEFycm93QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0
IEludFJlY3QmIHJlY3QsIEJ1dHRvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIENvbnRyb2xTdGF0ZXMg
c3RhdGVzKQoreworICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpOworICAgIGludCB3aWR0aE1pZGRsZSwgbGVuZ3RoTWlkZGxlOworICAg
IFNrUGFpbnQgcGFpbnQ7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBOb3J0aCB8fCBkaXJlY3Rpb24g
PT0gU291dGgpIHsKKyAgICAgICAgd2lkdGhNaWRkbGUgPSByZWN0LndpZHRoKCkgLyAyICsgMTsK
KyAgICAgICAgbGVuZ3RoTWlkZGxlID0gcmVjdC5oZWlnaHQoKSAvIDIgKyAxOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGxlbmd0aE1pZGRsZSA9IHJlY3Qud2lkdGgoKSAvIDIgKyAxOworICAgICAg
ICB3aWR0aE1pZGRsZSA9IHJlY3QuaGVpZ2h0KCkgLyAyICsgMTsKKyAgICB9CisKKyAgICAvLyBD
YWxjdWxhdGUgYnV0dG9uIGNvbG9yLgorICAgIFNrU2NhbGFyIHRyYWNrSFNWWzNdOworICAgIFNr
Q29sb3JUb0hTVih0cmFja0NvbG9yKCksIHRyYWNrSFNWKTsKKyAgICBTa0NvbG9yIGJ1dHRvbkNv
bG9yID0gc2F0dXJhdGVBbmRCcmlnaHRlbih0cmFja0hTViwgMCwgMC4yKTsKKyAgICBTa0NvbG9y
IGJhY2tncm91bmRDb2xvciA9IGJ1dHRvbkNvbG9yOworICAgIGlmIChzdGF0ZXMgJiBQcmVzc2Vk
U3RhdGUpIHsKKyAgICAgICAgU2tTY2FsYXIgYnV0dG9uSFNWWzNdOworICAgICAgICBTa0NvbG9y
VG9IU1YoYnV0dG9uQ29sb3IsIGJ1dHRvbkhTVik7CisgICAgICAgIGJ1dHRvbkNvbG9yID0gc2F0
dXJhdGVBbmRCcmlnaHRlbihidXR0b25IU1YsIDAsIC0wLjEpOworICAgIH0gZWxzZSBpZiAoc3Rh
dGVzICYgSG92ZXJTdGF0ZSkgeworICAgICAgICBTa1NjYWxhciBidXR0b25IU1ZbM107CisgICAg
ICAgIFNrQ29sb3JUb0hTVihidXR0b25Db2xvciwgYnV0dG9uSFNWKTsKKyAgICAgICAgYnV0dG9u
Q29sb3IgPSBzYXR1cmF0ZUFuZEJyaWdodGVuKGJ1dHRvbkhTViwgMCwgMC4wNSk7CisgICAgfQor
CisgICAgU2tJUmVjdCBza3JlY3Q7CisgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCks
IHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOworICAg
IC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kICh0aGUgYXJlYSB2aXNpYmxlIGJlaGluZCB0aGUgcm91
bmRlZCBjb3JuZXJzKS4KKyAgICBwYWludC5zZXRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOworICAg
IGNhbnZhcy0+ZHJhd0lSZWN0KHNrcmVjdCwgcGFpbnQpOworCisgICAgLy8gUGFpbnQgdGhlIGJ1
dHRvbidzIG91dGxpbmUgYW5kIGZpbGwgdGhlIG1pZGRsZQorICAgIFNrUGF0aCBvdXRsaW5lOwor
ICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBOb3J0aDoKKyAgICAgICAgb3V0bGlu
ZS5tb3ZlVG8ocmVjdC54KCkgKyAwLjUsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSArIDAuNSk7
CisgICAgICAgIG91dGxpbmUuckxpbmVUbygwLCAtKHJlY3QuaGVpZ2h0KCkgLSAyKSk7CisgICAg
ICAgIG91dGxpbmUuckxpbmVUbygyLCAtMik7CisgICAgICAgIG91dGxpbmUuckxpbmVUbyhyZWN0
LndpZHRoKCkgLSA1LCAwKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDIsIDIpOworICAgICAg
ICBvdXRsaW5lLnJMaW5lVG8oMCwgcmVjdC5oZWlnaHQoKSAtIDIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNvdXRoOgorICAgICAgICBvdXRsaW5lLm1vdmVUbyhyZWN0LngoKSArIDAuNSwg
cmVjdC55KCkgLSAwLjUpOworICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMCwgcmVjdC5oZWlnaHQo
KSAtIDIpOworICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMiwgMik7CisgICAgICAgIG91dGxpbmUu
ckxpbmVUbyhyZWN0LndpZHRoKCkgLSA1LCAwKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDIs
IC0yKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDAsIC0ocmVjdC5oZWlnaHQoKSAtIDIpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFYXN0OgorICAgICAgICBvdXRsaW5lLm1vdmVUbyhy
ZWN0LngoKSAtIDAuNSwgcmVjdC55KCkgKyAwLjUpOworICAgICAgICBvdXRsaW5lLnJMaW5lVG8o
cmVjdC53aWR0aCgpIC0gMiwgMCk7CisgICAgICAgIG91dGxpbmUuckxpbmVUbygyLCAyKTsKKyAg
ICAgICAgb3V0bGluZS5yTGluZVRvKDAsIHJlY3QuaGVpZ2h0KCkgLSA1KTsKKyAgICAgICAgb3V0
bGluZS5yTGluZVRvKC0yLCAyKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKC0ocmVjdC53aWR0
aCgpIC0gMiksIDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlc3Q6CisgICAgICAgIG91
dGxpbmUubW92ZVRvKHJlY3QueCgpICsgcmVjdC53aWR0aCgpICsgMC41LCByZWN0LnkoKSArIDAu
NSk7CisgICAgICAgIG91dGxpbmUuckxpbmVUbygtKHJlY3Qud2lkdGgoKSAtIDIpLCAwKTsKKyAg
ICAgICAgb3V0bGluZS5yTGluZVRvKC0yLCAyKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDAs
IHJlY3QuaGVpZ2h0KCkgLSA1KTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDIsIDIpOworICAg
ICAgICBvdXRsaW5lLnJMaW5lVG8ocmVjdC53aWR0aCgpIC0gMiwgMCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBvdXRsaW5lLmNsb3NlKCk7CisKKyAgICBwYWludC5zZXRTdHlsZShTa1Bh
aW50OjprRmlsbF9TdHlsZSk7CisgICAgcGFpbnQuc2V0Q29sb3IoYnV0dG9uQ29sb3IpOworICAg
IGNhbnZhcy0+ZHJhd1BhdGgob3V0bGluZSwgcGFpbnQpOworCisgICAgcGFpbnQuc2V0QW50aUFs
aWFzKHRydWUpOworICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtTdHJva2VfU3R5bGUpOwor
ICAgIFNrU2NhbGFyIHRodW1iSFNWWzNdOworICAgIFNrQ29sb3JUb0hTVih0aHVtYkluYWN0aXZl
Q29sb3IoKSwgdGh1bWJIU1YpOworICAgIHBhaW50LnNldENvbG9yKG91dGxpbmVDb2xvcih0cmFj
a0hTViwgdGh1bWJIU1YpKTsKKyAgICBjYW52YXMtPmRyYXdQYXRoKG91dGxpbmUsIHBhaW50KTsK
KworICAgIC8vIElmIHRoZSBidXR0b24gaXMgZGlzYWJsZWQsIHRoZSBhcnJvdyBpcyBkcmF3biB3
aXRoIHRoZSBvdXRsaW5lIGNvbG9yLgorICAgIGlmIChzdGF0ZXMgJiBFbmFibGVkU3RhdGUpCisg
ICAgICAgIHBhaW50LnNldENvbG9yKFNLX0NvbG9yQkxBQ0spOworCisgICAgcGFpbnQuc2V0QW50
aUFsaWFzKGZhbHNlKTsKKyAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7
CisKKyAgICBTa1BhdGggcGF0aDsKKyAgICAvLyBUaGUgY29uc3RhbnRzIGluIHRoaXMgYmxvY2sg
b2YgY29kZSBhcmUgaGFuZC10YWlsb3JlZCB0byBwcm9kdWNlIGdvb2QKKyAgICAvLyBsb29raW5n
IGFycm93cyB3aXRob3V0IGFudGktYWxpYXNpbmcuCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
KyAgICBjYXNlIE5vcnRoOgorICAgICAgICBwYXRoLm1vdmVUbyhyZWN0LngoKSArIHdpZHRoTWlk
ZGxlIC0gNCwgcmVjdC55KCkgKyBsZW5ndGhNaWRkbGUgKyAyKTsKKyAgICAgICAgcGF0aC5yTGlu
ZVRvKDcsIDApOworICAgICAgICBwYXRoLnJMaW5lVG8oLTQsIC00KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTb3V0aDoKKyAgICAgICAgcGF0aC5tb3ZlVG8ocmVjdC54KCkgKyB3aWR0aE1p
ZGRsZSAtIDQsIHJlY3QueSgpICsgbGVuZ3RoTWlkZGxlIC0gMyk7CisgICAgICAgIHBhdGguckxp
bmVUbyg3LCAwKTsKKyAgICAgICAgcGF0aC5yTGluZVRvKC00LCA0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBFYXN0OgorICAgICAgICBwYXRoLm1vdmVUbyhyZWN0LngoKSArIGxlbmd0aE1p
ZGRsZSAtIDMsIHJlY3QueSgpICsgd2lkdGhNaWRkbGUgLSA0KTsKKyAgICAgICAgcGF0aC5yTGlu
ZVRvKDAsIDcpOworICAgICAgICBwYXRoLnJMaW5lVG8oNCwgLTQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdlc3Q6CisgICAgICAgIHBhdGgubW92ZVRvKHJlY3QueCgpICsgbGVuZ3RoTWlk
ZGxlICsgMSwgcmVjdC55KCkgKyB3aWR0aE1pZGRsZSAtIDUpOworICAgICAgICBwYXRoLnJMaW5l
VG8oMCwgOSk7CisgICAgICAgIHBhdGguckxpbmVUbygtNCwgLTQpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcGF0aC5jbG9zZSgpOworCisgICAgY2FudmFzLT5kcmF3UGF0aChwYXRoLCBw
YWludCk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjphZGp1c3RJbm5lclNw
aW5CdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3sKKyAgICBpbnQgd2lkdGggPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhl
bWUoKS0+c2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3
aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhl
ZCkpOworfQorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRJbm5lclNwaW5C
dXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBDb250cm9sU3RhdGVzIG5vcnRoU3RhdGVzID0gY29udHJv
bFN0YXRlc0ZvclJlbmRlcmVyKG9iamVjdCk7CisgICAgQ29udHJvbFN0YXRlcyBzb3V0aFN0YXRl
cyA9IG5vcnRoU3RhdGVzOworICAgIGlmIChub3J0aFN0YXRlcyAmIFNwaW5VcFN0YXRlKQorICAg
ICAgICBzb3V0aFN0YXRlcyAmPSB+KEhvdmVyU3RhdGUgfCBQcmVzc2VkU3RhdGUpOworICAgIGVs
c2UKKyAgICAgICAgbm9ydGhTdGF0ZXMgJj0gfihIb3ZlclN0YXRlIHwgUHJlc3NlZFN0YXRlKTsK
KworICAgIEludFJlY3QgaGFsZiA9IHJlY3Q7CisgICAgaGFsZi5zZXRIZWlnaHQocmVjdC5oZWln
aHQoKSAvIDIpOworICAgIHBhaW50QXJyb3dCdXR0b24oaW5mby5jb250ZXh0LCBoYWxmLCBOb3J0
aCwgbm9ydGhTdGF0ZXMpOworCisgICAgaGFsZi5zZXRZKHJlY3QueSgpICsgcmVjdC5oZWlnaHQo
KSAvIDIpOworICAgIHBhaW50QXJyb3dCdXR0b24oaW5mby5jb250ZXh0LCBoYWxmLCBTb3V0aCwg
c291dGhTdGF0ZXMpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAppbmRl
eCBjNjBkZWMzMjY2NTliNTRjMGFjMzcyY2U5YTUxMDEyZTVlMWQxZWNmLi40NTQxZmU4NDMzZWZh
N2VmZTNkYzg4ZWJjN2FkZjlhZmVmOTAxMGQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTGludXguaApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBSZW5kZXJU
aGVtZUNocm9taXVtTGludXhfaAogCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEu
aCIKKyNpbmNsdWRlICJTa0NvbG9yLmgiCisjaW5jbHVkZSAiU2tTY2FsYXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC01OSw2ICs2MSwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIHNldENhcmV0QmxpbmtJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwp
OwogICAgICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWxJbnRlcm5hbCgpIGNv
bnN0OwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgc3RhdGljIFNrQ29sb3Igc2F0
dXJhdGVBbmRCcmlnaHRlbihjb25zdCBTa1NjYWxhciBoc3ZbM10sIFNrU2NhbGFyIHNhdHVyYXRl
QW1vdW50LCBTa1NjYWxhciBicmlnaHRlbkFtb3VudCk7CisgICAgICAgIHN0YXRpYyBTa0NvbG9y
IG91dGxpbmVDb2xvcihjb25zdCBTa1NjYWxhciBoc3YxWzNdLCBjb25zdCBTa1NjYWxhciBoc3Yy
WzNdKTsKKyAgICAgICAgZW51bSBCdXR0b25EaXJlY3Rpb24geworICAgICAgICAgICAgTm9ydGgs
CisgICAgICAgICAgICBFYXN0LAorICAgICAgICAgICAgU291dGgsCisgICAgICAgICAgICBXZXN0
LAorICAgICAgICB9OworICAgICAgICBzdGF0aWMgdm9pZCBwYWludEFycm93QnV0dG9uKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBCdXR0b25EaXJlY3Rpb24sIENvbnRyb2xTdGF0
ZXMpOworCiAgICAgICAgIHN0YXRpYyB2b2lkIHNldFNlbGVjdGlvbkNvbG9ycyh1bnNpZ25lZCBh
Y3RpdmVCYWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBhY3RpdmVGb3JlZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmFjdGl2ZUJhY2tncm91bmRDb2xvciwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61352</attachid>
            <date>2010-07-13 04:06:10 -0700</date>
            <delta_ts>2010-07-13 21:49:18 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>bug-41925-20100713200608.patch</filename>
            <type>text/plain</type>
            <size>32215</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWY0ZTVhYzFiNjI3ZDlmNzVlNTAxMWU3YWFjOTIzMGI0M2U4ZGM4Ni4uZTNiNWJlYjAxODEzZTBm
OWZlMjMwODc1NTA1MjUzZmM2NjE1OTA1YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0wNy0xNCAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW0Nocm9taXVtXSBMaW51eCBpbXBsZW1lbnRhdGlvbiBv
ZiA8aW5wdXQgdHlwZT1udW1iZXI+IFVJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MTkyNQorCisgICAgICAgIC0gTW92ZSB0aGUgY29kZSBmb3Igc2Ny
b2xsYmFyIHN0ZXBwZXJzIGZyb20gU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4CisgICAgICAg
ICAgdG8gUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrLgorICAgICAgICAtIE1vdmUgdGhlIGNvZGUg
Zm9yIHNjcm9sbGJhciBjb2xvcnMgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtTGludXgKKyAgICAg
ICAgICB0byBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGsuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1UaGVtZUNocm9taXVtR3Rr
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6
OnNldFNjcm9sbGJhckNvbG9ycyk6IE1vdmVkIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
LgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXApOiBNb3ZlZCBmcm9tIFNjcm9sbGJhclRoZW1lQ2hy
b21pdW1MaW51eC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6
c2F0dXJhdGVBbmRCcmlnaHRlbik6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1U
aGVtZUNocm9taXVtR3RrOjpvdXRsaW5lQ29sb3IpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRBcnJvd0J1dHRvbik6IGRpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtVGhlbWVDaHJvbWl1bUd0ay5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGlu
dXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4Ojpw
YWludFRyYWNrUGllY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bUxpbnV4OjpwYWludEJ1dHRvbik6CisgICAgICAgICBNb3ZlIHRoZSBtYWluIHBhcnQgb2YgdGhl
IGNvZGUgdG8gUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRodW1iKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRJbm5lclNw
aW5CdXR0b24pOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4Lmg6CisKIDIwMTAtMDctMTIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFjY2JjM2ZkMzkzOTQwYmUz
ODRlYTBiODZiNWI2YTE3Mzk1YjBhMGQuLjAwOTk4ZTdmNWMxNjI1YjYzMDRiN2EyZTFlODQwN2E3
Mzc2MDgxYzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0yMTAxLDYgKzIxMDEsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL1BsYXRmb3JtQ3Vyc29yLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtVGhlbWVDaHJvbWl1bUd0ay5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtVGhlbWVDaHJvbWl1bUd0ay5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVdpZGdldC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmgnLApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGsuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGsuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY4M2QyYTQ0NzY0NDlmMDM0NmJjNzgwNTk5YmI4NWIyNDQyYzYxYWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtVGhlbWVDaHJv
bWl1bUd0ay5jcHAKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dW5zaWduZWQgUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpzX3RodW1iSW5hY3RpdmVDb2xvciA9
IDB4ZWFlYWVhOwordW5zaWduZWQgUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpzX3RodW1iQWN0
aXZlQ29sb3IgPSAweGY0ZjRmNDsKK3Vuc2lnbmVkIFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6
c190cmFja0NvbG9yID0gMHhkM2QzZDM7CisKK3ZvaWQgUGxhdGZvcm1UaGVtZUNocm9taXVtR3Rr
OjpzZXRTY3JvbGxiYXJDb2xvcnMoCisgICAgU2tDb2xvciBpbmFjdGl2ZUNvbG9yLCBTa0NvbG9y
IGFjdGl2ZUNvbG9yLCBTa0NvbG9yIHRyYWNrQ29sb3IpCit7CisgICAgc190aHVtYkluYWN0aXZl
Q29sb3IgPSBpbmFjdGl2ZUNvbG9yOworICAgIHNfdGh1bWJBY3RpdmVDb2xvciA9IGFjdGl2ZUNv
bG9yOworICAgIHNfdHJhY2tDb2xvciA9IHRyYWNrQ29sb3I7Cit9CisKK3N0YXRpYyBTa1NjYWxh
ciBjbGFtcChTa1NjYWxhciB2YWx1ZSwgU2tTY2FsYXIgbWluLCBTa1NjYWxhciBtYXgpCit7Cisg
ICAgcmV0dXJuIHN0ZDo6bWluKHN0ZDo6bWF4KHZhbHVlLCBtaW4pLCBtYXgpOworfQorCitTa0Nv
bG9yIFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6c2F0dXJhdGVBbmRCcmlnaHRlbihjb25zdCBT
a1NjYWxhciBoc3ZbM10sIFNrU2NhbGFyIHNhdHVyYXRlQW1vdW50LCBTa1NjYWxhciBicmlnaHRl
bkFtb3VudCkKK3sKKyAgICBTa1NjYWxhciBjb2xvclszXTsKKyAgICBjb2xvclswXSA9IGhzdlsw
XTsKKyAgICBjb2xvclsxXSA9IGNsYW1wKGhzdlsxXSArIHNhdHVyYXRlQW1vdW50LCAwLjAsIDEu
MCk7CisgICAgY29sb3JbMl0gPSBjbGFtcChoc3ZbMl0gKyBicmlnaHRlbkFtb3VudCwgMC4wLCAx
LjApOworICAgIHJldHVybiBTa0hTVlRvQ29sb3IoY29sb3IpOworfQorCitTa0NvbG9yIFBsYXRm
b3JtVGhlbWVDaHJvbWl1bUd0azo6b3V0bGluZUNvbG9yKGNvbnN0IFNrU2NhbGFyIGhzdjFbM10s
IGNvbnN0IFNrU2NhbGFyIGhzdjJbM10pCit7CisgICAgLy8gR1RLIFRoZW1lIGVuZ2luZXMgaGF2
ZSB3YXkgdG9vIG11Y2ggY29udHJvbCBvdmVyIHRoZSBsYXlvdXQgb2YKKyAgICAvLyB0aGUgc2Ny
b2xsYmFyLiBXZSBtaWdodCBiZSBhYmxlIHRvIG1vcmUgY2xvc2VseSBhcHByb3hpbWF0ZSBpdHMK
KyAgICAvLyBsb29rLWFuZC1mZWVsLCBpZiB3ZSBzZW50IHdob2xlIGltYWdlcyBpbnN0ZWFkIG9m
IGp1c3QgY29sb3JzCisgICAgLy8gZnJvbSB0aGUgYnJvd3NlciB0byB0aGUgcmVuZGVyZXIuIEJ1
dCBldmVuIHRoZW4sIHNvbWUgdGhlbWVzCisgICAgLy8gd291bGQganVzdCBicmVhay4KKyAgICAv
LworICAgIC8vIFNvLCBpbnN0ZWFkLCB3ZSBkb24ndCBldmVuIHRyeSB0byAxMDAlIHJlcGxpY2F0
ZSB0aGUgbG9vayBvZgorICAgIC8vIHRoZSBuYXRpdmUgc2Nyb2xsYmFyLiBXZSByZW5kZXIgb3Vy
IG93biB2ZXJzaW9uLCBidXQgd2UgbWFrZQorICAgIC8vIHN1cmUgdG8gcGljayBjb2xvcnMgdGhh
dCBibGVuZCBpbiBuaWNlbHkgd2l0aCB0aGUgc3lzdGVtIEdUSworICAgIC8vIHRoZW1lLiBJbiBt
b3N0IGNhc2VzLCB3ZSBjYW4ganVzdCBzYW1wbGUgYSBjb3VwbGUgb2YgcGl4ZWxzCisgICAgLy8g
ZnJvbSB0aGUgc3lzdGVtIHNjcm9sbGJhciBhbmQgdXNlIHRob3NlIGNvbG9ycyB0byBkcmF3IG91
cgorICAgIC8vIHNjcm9sbGJhci4KKyAgICAvLworICAgIC8vIFRoaXMgd29ya3MgZmluZSBmb3Ig
dGhlIHRyYWNrIGNvbG9yIGFuZCB0aGUgb3ZlcmFsbCB0aHVtYgorICAgIC8vIGNvbG9yLiBCdXQg
aXQgZmFpbHMgc3BlY3RhY3VsYXJseSBmb3IgdGhlIG91dGxpbmUgY29sb3IgdXNlZAorICAgIC8v
IGFyb3VuZCB0aGUgdGh1bWIgcGllY2UuICBOb3QgYWxsIHRoZW1lcyBoYXZlIGEgY2xlYXJseSBk
ZWZpbmVkCisgICAgLy8gb3V0bGluZS4gRm9yIHNvbWUgb2YgdGhlbSBpdCBpcyBwYXJ0aWFsbHkg
dHJhbnNwYXJlbnQsIGFuZCBmb3IKKyAgICAvLyBvdGhlcnMgdGhlIHRoaWNrbmVzcyBpcyB2ZXJ5
IHVucHJlZGljdGFibGUuCisgICAgLy8KKyAgICAvLyBTbywgaW5zdGVhZCBvZiB0cnlpbmcgdG8g
YXBwcm94aW1hdGUgdGhlIHN5c3RlbSB0aGVtZSwgd2UKKyAgICAvLyBpbnN0ZWFkIHRyeSB0byBj
b21wdXRlIGEgcmVhc29uYWJsZSBsb29raW5nIGNob2ljZSBiYXNlZCBvbiB0aGUKKyAgICAvLyBr
bm93biBjb2xvciBvZiB0aGUgdHJhY2sgYW5kIHRoZSB0aHVtYiBwaWVjZS4gVGhpcyBpcyBkaWZm
aWN1bHQKKyAgICAvLyB3aGVuIHRyeWluZyB0byBkZWFsIGJvdGggd2l0aCBoaWdoLSBhbmQgbG93
LWNvbnRyYXN0IHRoZW1lcywKKyAgICAvLyBhbmQgYm90aCB3aXRoIHBvc2l0aXZlIGFuZCBpbnZl
cnRlZCB0aGVtZXMuCisgICAgLy8KKyAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaGFzIGJlZW4g
dGVzdGVkIHRvIGxvb2sgT0sgd2l0aCBhbGwgb2YgdGhlCisgICAgLy8gZGVmYXVsdCBHVEsgdGhl
bWVzLgorICAgIFNrU2NhbGFyIG1pbkRpZmYgPSBjbGFtcCgoaHN2MVsxXSArIGhzdjJbMV0pICog
MS4yLCAwLjI4LCAwLjUpOworICAgIFNrU2NhbGFyIGRpZmYgPSBjbGFtcChmYWJzKGhzdjFbMl0g
LSBoc3YyWzJdKSAvIDIsIG1pbkRpZmYsIDAuNSk7CisKKyAgICBpZiAoaHN2MVsyXSArIGhzdjJb
Ml0gPiAxLjApCisgICAgICAgIGRpZmYgPSAtZGlmZjsKKworICAgIHJldHVybiBzYXR1cmF0ZUFu
ZEJyaWdodGVuKGhzdjIsIC0wLjIsIGRpZmYpOworfQorCit2b2lkIFBsYXRmb3JtVGhlbWVDaHJv
bWl1bUd0azo6cGFpbnRBcnJvd0J1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBBcnJvd0RpcmVjdGlvbiBkaXJlY3Rpb24sIENvbnRyb2xTdGF0ZXMgc3RhdGVz
KQoreworICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpOworICAgIGludCB3aWR0aE1pZGRsZSwgbGVuZ3RoTWlkZGxlOworICAgIFNrUGFp
bnQgcGFpbnQ7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBOb3J0aCB8fCBkaXJlY3Rpb24gPT0gU291
dGgpIHsKKyAgICAgICAgd2lkdGhNaWRkbGUgPSByZWN0LndpZHRoKCkgLyAyICsgMTsKKyAgICAg
ICAgbGVuZ3RoTWlkZGxlID0gcmVjdC5oZWlnaHQoKSAvIDIgKyAxOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGxlbmd0aE1pZGRsZSA9IHJlY3Qud2lkdGgoKSAvIDIgKyAxOworICAgICAgICB3aWR0
aE1pZGRsZSA9IHJlY3QuaGVpZ2h0KCkgLyAyICsgMTsKKyAgICB9CisKKyAgICAvLyBDYWxjdWxh
dGUgYnV0dG9uIGNvbG9yLgorICAgIFNrU2NhbGFyIHRyYWNrSFNWWzNdOworICAgIFNrQ29sb3JU
b0hTVih0cmFja0NvbG9yKCksIHRyYWNrSFNWKTsKKyAgICBTa0NvbG9yIGJ1dHRvbkNvbG9yID0g
c2F0dXJhdGVBbmRCcmlnaHRlbih0cmFja0hTViwgMCwgMC4yKTsKKyAgICBTa0NvbG9yIGJhY2tn
cm91bmRDb2xvciA9IGJ1dHRvbkNvbG9yOworICAgIGlmIChzdGF0ZXMgJiBQcmVzc2VkU3RhdGUp
IHsKKyAgICAgICAgU2tTY2FsYXIgYnV0dG9uSFNWWzNdOworICAgICAgICBTa0NvbG9yVG9IU1Yo
YnV0dG9uQ29sb3IsIGJ1dHRvbkhTVik7CisgICAgICAgIGJ1dHRvbkNvbG9yID0gc2F0dXJhdGVB
bmRCcmlnaHRlbihidXR0b25IU1YsIDAsIC0wLjEpOworICAgIH0gZWxzZSBpZiAoc3RhdGVzICYg
SG92ZXJTdGF0ZSkgeworICAgICAgICBTa1NjYWxhciBidXR0b25IU1ZbM107CisgICAgICAgIFNr
Q29sb3JUb0hTVihidXR0b25Db2xvciwgYnV0dG9uSFNWKTsKKyAgICAgICAgYnV0dG9uQ29sb3Ig
PSBzYXR1cmF0ZUFuZEJyaWdodGVuKGJ1dHRvbkhTViwgMCwgMC4wNSk7CisgICAgfQorCisgICAg
U2tJUmVjdCBza3JlY3Q7CisgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
eCgpICsgcmVjdC53aWR0aCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOworICAgIC8vIFBh
aW50IHRoZSBiYWNrZ3JvdW5kICh0aGUgYXJlYSB2aXNpYmxlIGJlaGluZCB0aGUgcm91bmRlZCBj
b3JuZXJzKS4KKyAgICBwYWludC5zZXRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOworICAgIGNhbnZh
cy0+ZHJhd0lSZWN0KHNrcmVjdCwgcGFpbnQpOworCisgICAgLy8gUGFpbnQgdGhlIGJ1dHRvbidz
IG91dGxpbmUgYW5kIGZpbGwgdGhlIG1pZGRsZQorICAgIFNrUGF0aCBvdXRsaW5lOworICAgIHN3
aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBOb3J0aDoKKyAgICAgICAgb3V0bGluZS5tb3Zl
VG8ocmVjdC54KCkgKyAwLjUsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSArIDAuNSk7CisgICAg
ICAgIG91dGxpbmUuckxpbmVUbygwLCAtKHJlY3QuaGVpZ2h0KCkgLSAyKSk7CisgICAgICAgIG91
dGxpbmUuckxpbmVUbygyLCAtMik7CisgICAgICAgIG91dGxpbmUuckxpbmVUbyhyZWN0LndpZHRo
KCkgLSA1LCAwKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDIsIDIpOworICAgICAgICBvdXRs
aW5lLnJMaW5lVG8oMCwgcmVjdC5oZWlnaHQoKSAtIDIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNvdXRoOgorICAgICAgICBvdXRsaW5lLm1vdmVUbyhyZWN0LngoKSArIDAuNSwgcmVjdC55
KCkgLSAwLjUpOworICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMCwgcmVjdC5oZWlnaHQoKSAtIDIp
OworICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMiwgMik7CisgICAgICAgIG91dGxpbmUuckxpbmVU
byhyZWN0LndpZHRoKCkgLSA1LCAwKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDIsIC0yKTsK
KyAgICAgICAgb3V0bGluZS5yTGluZVRvKDAsIC0ocmVjdC5oZWlnaHQoKSAtIDIpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFYXN0OgorICAgICAgICBvdXRsaW5lLm1vdmVUbyhyZWN0Lngo
KSAtIDAuNSwgcmVjdC55KCkgKyAwLjUpOworICAgICAgICBvdXRsaW5lLnJMaW5lVG8ocmVjdC53
aWR0aCgpIC0gMiwgMCk7CisgICAgICAgIG91dGxpbmUuckxpbmVUbygyLCAyKTsKKyAgICAgICAg
b3V0bGluZS5yTGluZVRvKDAsIHJlY3QuaGVpZ2h0KCkgLSA1KTsKKyAgICAgICAgb3V0bGluZS5y
TGluZVRvKC0yLCAyKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKC0ocmVjdC53aWR0aCgpIC0g
MiksIDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlc3Q6CisgICAgICAgIG91dGxpbmUu
bW92ZVRvKHJlY3QueCgpICsgcmVjdC53aWR0aCgpICsgMC41LCByZWN0LnkoKSArIDAuNSk7Cisg
ICAgICAgIG91dGxpbmUuckxpbmVUbygtKHJlY3Qud2lkdGgoKSAtIDIpLCAwKTsKKyAgICAgICAg
b3V0bGluZS5yTGluZVRvKC0yLCAyKTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDAsIHJlY3Qu
aGVpZ2h0KCkgLSA1KTsKKyAgICAgICAgb3V0bGluZS5yTGluZVRvKDIsIDIpOworICAgICAgICBv
dXRsaW5lLnJMaW5lVG8ocmVjdC53aWR0aCgpIC0gMiwgMCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBvdXRsaW5lLmNsb3NlKCk7CisKKyAgICBwYWludC5zZXRTdHlsZShTa1BhaW50Ojpr
RmlsbF9TdHlsZSk7CisgICAgcGFpbnQuc2V0Q29sb3IoYnV0dG9uQ29sb3IpOworICAgIGNhbnZh
cy0+ZHJhd1BhdGgob3V0bGluZSwgcGFpbnQpOworCisgICAgcGFpbnQuc2V0QW50aUFsaWFzKHRy
dWUpOworICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtTdHJva2VfU3R5bGUpOworICAgIFNr
U2NhbGFyIHRodW1iSFNWWzNdOworICAgIFNrQ29sb3JUb0hTVih0aHVtYkluYWN0aXZlQ29sb3Io
KSwgdGh1bWJIU1YpOworICAgIHBhaW50LnNldENvbG9yKG91dGxpbmVDb2xvcih0cmFja0hTViwg
dGh1bWJIU1YpKTsKKyAgICBjYW52YXMtPmRyYXdQYXRoKG91dGxpbmUsIHBhaW50KTsKKworICAg
IC8vIElmIHRoZSBidXR0b24gaXMgZGlzYWJsZWQsIHRoZSBhcnJvdyBpcyBkcmF3biB3aXRoIHRo
ZSBvdXRsaW5lIGNvbG9yLgorICAgIGlmIChzdGF0ZXMgJiBFbmFibGVkU3RhdGUpCisgICAgICAg
IHBhaW50LnNldENvbG9yKFNLX0NvbG9yQkxBQ0spOworCisgICAgcGFpbnQuc2V0QW50aUFsaWFz
KGZhbHNlKTsKKyAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7CisKKyAg
ICBTa1BhdGggcGF0aDsKKyAgICAvLyBUaGUgY29uc3RhbnRzIGluIHRoaXMgYmxvY2sgb2YgY29k
ZSBhcmUgaGFuZC10YWlsb3JlZCB0byBwcm9kdWNlIGdvb2QKKyAgICAvLyBsb29raW5nIGFycm93
cyB3aXRob3V0IGFudGktYWxpYXNpbmcuCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBj
YXNlIE5vcnRoOgorICAgICAgICBwYXRoLm1vdmVUbyhyZWN0LngoKSArIHdpZHRoTWlkZGxlIC0g
NCwgcmVjdC55KCkgKyBsZW5ndGhNaWRkbGUgKyAyKTsKKyAgICAgICAgcGF0aC5yTGluZVRvKDcs
IDApOworICAgICAgICBwYXRoLnJMaW5lVG8oLTQsIC00KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBTb3V0aDoKKyAgICAgICAgcGF0aC5tb3ZlVG8ocmVjdC54KCkgKyB3aWR0aE1pZGRsZSAt
IDQsIHJlY3QueSgpICsgbGVuZ3RoTWlkZGxlIC0gMyk7CisgICAgICAgIHBhdGguckxpbmVUbyg3
LCAwKTsKKyAgICAgICAgcGF0aC5yTGluZVRvKC00LCA0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFYXN0OgorICAgICAgICBwYXRoLm1vdmVUbyhyZWN0LngoKSArIGxlbmd0aE1pZGRsZSAt
IDMsIHJlY3QueSgpICsgd2lkdGhNaWRkbGUgLSA0KTsKKyAgICAgICAgcGF0aC5yTGluZVRvKDAs
IDcpOworICAgICAgICBwYXRoLnJMaW5lVG8oNCwgLTQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdlc3Q6CisgICAgICAgIHBhdGgubW92ZVRvKHJlY3QueCgpICsgbGVuZ3RoTWlkZGxlICsg
MSwgcmVjdC55KCkgKyB3aWR0aE1pZGRsZSAtIDUpOworICAgICAgICBwYXRoLnJMaW5lVG8oMCwg
OSk7CisgICAgICAgIHBhdGguckxpbmVUbygtNCwgLTQpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcGF0aC5jbG9zZSgpOworCisgICAgY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWludCk7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1U
aGVtZUNocm9taXVtR3RrLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtVGhl
bWVDaHJvbWl1bUd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyNDk4MjcwZmNlMTUzMTMwNmQ3MGM1YWExM2Y1
NDJjYjMxYzYyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1BsYXRmb3JtVGhlbWVDaHJvbWl1bUd0ay5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRm
b3JtVGhlbWVDaHJvbWl1bUd0a19oCisjZGVmaW5lIFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0a19o
CisKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCisjaW5jbHVkZSAiU2tDb2xvci5o
IgorI2luY2x1ZGUgIlNrU2NhbGFyLmgiCisjaW5jbHVkZSAiVGhlbWVUeXBlcy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0ayB7CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgc2V0U2Nyb2xsYmFyQ29sb3JzKHVuc2lnbmVkIGluYWN0aXZl
Q29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFjdGl2
ZUNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0cmFj
a0NvbG9yKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgdGh1bWJJbmFjdGl2ZUNvbG9yKCkgeyByZXR1
cm4gc190aHVtYkluYWN0aXZlQ29sb3I7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgdGh1bWJBY3Rp
dmVDb2xvcigpIHsgcmV0dXJuIHNfdGh1bWJBY3RpdmVDb2xvcjsgfQorICAgIHN0YXRpYyB1bnNp
Z25lZCB0cmFja0NvbG9yKCkgeyByZXR1cm4gc190cmFja0NvbG9yOyB9CisKKyAgICBzdGF0aWMg
U2tDb2xvciBzYXR1cmF0ZUFuZEJyaWdodGVuKGNvbnN0IFNrU2NhbGFyIGhzdlszXSwgU2tTY2Fs
YXIgc2F0dXJhdGVBbW91bnQsIFNrU2NhbGFyIGJyaWdodGVuQW1vdW50KTsKKyAgICBzdGF0aWMg
U2tDb2xvciBvdXRsaW5lQ29sb3IoY29uc3QgU2tTY2FsYXIgaHN2MVszXSwgY29uc3QgU2tTY2Fs
YXIgaHN2MlszXSk7CisgICAgZW51bSBBcnJvd0RpcmVjdGlvbiB7CisgICAgICAgIE5vcnRoLAor
ICAgICAgICBFYXN0LAorICAgICAgICBTb3V0aCwKKyAgICAgICAgV2VzdCwKKyAgICB9OworICAg
IHN0YXRpYyB2b2lkIHBhaW50QXJyb3dCdXR0b24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50
UmVjdCYsIEFycm93RGlyZWN0aW9uLCBDb250cm9sU3RhdGVzKTsKKworcHJpdmF0ZToKKyAgICBQ
bGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGsoKSB7fQorCisgICAgc3RhdGljIHVuc2lnbmVkIHNfdGh1
bWJJbmFjdGl2ZUNvbG9yOworICAgIHN0YXRpYyB1bnNpZ25lZCBzX3RodW1iQWN0aXZlQ29sb3I7
CisgICAgc3RhdGljIHVuc2lnbmVkIHNfdHJhY2tDb2xvcjsKK307CisKK30KKworI2VuZGlmIC8v
IFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0a19oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKaW5kZXggYTljZmY5
ZjczNGMyZjRmODRiNDUyMjNhMjJiOTVlZTE2YzJhNjE4Zi4uMjg5YzI2NDIwMmY5ZWRjZjBkMTMx
YTk2ODAxMmVkMTNhYTM3NTljZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApAQCAtMzMsOCArMzMsNyBA
QAogCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1UaGVtZUNocm9taXVtR3Rr
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKIApAQCAtNzgsNjAgKzc3LDYgQEAgc3RhdGljIHZvaWQgZHJhd0JveChTa0NhbnZhcyog
Y2FudmFzLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCkKICAgICBk
cmF3VmVydExpbmUoY2FudmFzLCByZWN0LngoKSwgcmVjdC55KCksIGJvdHRvbSwgcGFpbnQpOwog
fQogCi1zdGF0aWMgU2tTY2FsYXIgY2xhbXAoU2tTY2FsYXIgdmFsdWUsIFNrU2NhbGFyIG1pbiwg
U2tTY2FsYXIgbWF4KQotewotICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heCh2YWx1ZSwgbWlu
KSwgbWF4KTsKLX0KLQotc3RhdGljIFNrQ29sb3Igc2F0dXJhdGVBbmRCcmlnaHRlbihTa1NjYWxh
ciogaHN2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhciBzYXR1
cmF0ZUFtb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXIg
YnJpZ2h0ZW5BbW91bnQpCi17Ci0gICAgU2tTY2FsYXIgY29sb3JbM107Ci0gICAgY29sb3JbMF0g
PSBoc3ZbMF07Ci0gICAgY29sb3JbMV0gPSBjbGFtcChoc3ZbMV0gKyBzYXR1cmF0ZUFtb3VudCwg
MC4wLCAxLjApOwotICAgIGNvbG9yWzJdID0gY2xhbXAoaHN2WzJdICsgYnJpZ2h0ZW5BbW91bnQs
IDAuMCwgMS4wKTsKLSAgICByZXR1cm4gU2tIU1ZUb0NvbG9yKGNvbG9yKTsKLX0KLQotc3RhdGlj
IFNrQ29sb3Igb3V0bGluZUNvbG9yKFNrU2NhbGFyKiBoc3YxLCBTa1NjYWxhciogaHN2MikKLXsK
LSAgICAvLyBHVEsgVGhlbWUgZW5naW5lcyBoYXZlIHdheSB0b28gbXVjaCBjb250cm9sIG92ZXIg
dGhlIGxheW91dCBvZgotICAgIC8vIHRoZSBzY3JvbGxiYXIuIFdlIG1pZ2h0IGJlIGFibGUgdG8g
bW9yZSBjbG9zZWx5IGFwcHJveGltYXRlIGl0cwotICAgIC8vIGxvb2stYW5kLWZlZWwsIGlmIHdl
IHNlbnQgd2hvbGUgaW1hZ2VzIGluc3RlYWQgb2YganVzdCBjb2xvcnMKLSAgICAvLyBmcm9tIHRo
ZSBicm93c2VyIHRvIHRoZSByZW5kZXJlci4gQnV0IGV2ZW4gdGhlbiwgc29tZSB0aGVtZXMKLSAg
ICAvLyB3b3VsZCBqdXN0IGJyZWFrLgotICAgIC8vCi0gICAgLy8gU28sIGluc3RlYWQsIHdlIGRv
bid0IGV2ZW4gdHJ5IHRvIDEwMCUgcmVwbGljYXRlIHRoZSBsb29rIG9mCi0gICAgLy8gdGhlIG5h
dGl2ZSBzY3JvbGxiYXIuIFdlIHJlbmRlciBvdXIgb3duIHZlcnNpb24sIGJ1dCB3ZSBtYWtlCi0g
ICAgLy8gc3VyZSB0byBwaWNrIGNvbG9ycyB0aGF0IGJsZW5kIGluIG5pY2VseSB3aXRoIHRoZSBz
eXN0ZW0gR1RLCi0gICAgLy8gdGhlbWUuIEluIG1vc3QgY2FzZXMsIHdlIGNhbiBqdXN0IHNhbXBs
ZSBhIGNvdXBsZSBvZiBwaXhlbHMKLSAgICAvLyBmcm9tIHRoZSBzeXN0ZW0gc2Nyb2xsYmFyIGFu
ZCB1c2UgdGhvc2UgY29sb3JzIHRvIGRyYXcgb3VyCi0gICAgLy8gc2Nyb2xsYmFyLgotICAgIC8v
Ci0gICAgLy8gVGhpcyB3b3JrcyBmaW5lIGZvciB0aGUgdHJhY2sgY29sb3IgYW5kIHRoZSBvdmVy
YWxsIHRodW1iCi0gICAgLy8gY29sb3IuIEJ1dCBpdCBmYWlscyBzcGVjdGFjdWxhcmx5IGZvciB0
aGUgb3V0bGluZSBjb2xvciB1c2VkCi0gICAgLy8gYXJvdW5kIHRoZSB0aHVtYiBwaWVjZS4gIE5v
dCBhbGwgdGhlbWVzIGhhdmUgYSBjbGVhcmx5IGRlZmluZWQKLSAgICAvLyBvdXRsaW5lLiBGb3Ig
c29tZSBvZiB0aGVtIGl0IGlzIHBhcnRpYWxseSB0cmFuc3BhcmVudCwgYW5kIGZvcgotICAgIC8v
IG90aGVycyB0aGUgdGhpY2tuZXNzIGlzIHZlcnkgdW5wcmVkaWN0YWJsZS4KLSAgICAvLwotICAg
IC8vIFNvLCBpbnN0ZWFkIG9mIHRyeWluZyB0byBhcHByb3hpbWF0ZSB0aGUgc3lzdGVtIHRoZW1l
LCB3ZQotICAgIC8vIGluc3RlYWQgdHJ5IHRvIGNvbXB1dGUgYSByZWFzb25hYmxlIGxvb2tpbmcg
Y2hvaWNlIGJhc2VkIG9uIHRoZQotICAgIC8vIGtub3duIGNvbG9yIG9mIHRoZSB0cmFjayBhbmQg
dGhlIHRodW1iIHBpZWNlLiBUaGlzIGlzIGRpZmZpY3VsdAotICAgIC8vIHdoZW4gdHJ5aW5nIHRv
IGRlYWwgYm90aCB3aXRoIGhpZ2gtIGFuZCBsb3ctY29udHJhc3QgdGhlbWVzLAotICAgIC8vIGFu
ZCBib3RoIHdpdGggcG9zaXRpdmUgYW5kIGludmVydGVkIHRoZW1lcy4KLSAgICAvLwotICAgIC8v
IFRoZSBmb2xsb3dpbmcgY29kZSBoYXMgYmVlbiB0ZXN0ZWQgdG8gbG9vayBPSyB3aXRoIGFsbCBv
ZiB0aGUKLSAgICAvLyBkZWZhdWx0IEdUSyB0aGVtZXMuCi0gICAgU2tTY2FsYXIgbWluRGlmZiA9
IGNsYW1wKChoc3YxWzFdICsgaHN2MlsxXSkgKiAxLjIsIDAuMjgsIDAuNSk7Ci0gICAgU2tTY2Fs
YXIgZGlmZiA9IGNsYW1wKGZhYnMoaHN2MVsyXSAtIGhzdjJbMl0pIC8gMiwgbWluRGlmZiwgMC41
KTsKLQotICAgIGlmIChoc3YxWzJdICsgaHN2MlsyXSA+IDEuMCkKLSAgICAgICAgZGlmZiA9IC1k
aWZmOwotCi0gICAgcmV0dXJuIHNhdHVyYXRlQW5kQnJpZ2h0ZW4oaHN2MiwgLTAuMiwgZGlmZik7
Ci19Ci0KIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRyYWNrUGllY2Uo
R3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydFR5cGUpCiB7CiAgICAgU2tDYW52YXMqIGNvbnN0IGNh
bnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CkBAIC0xNDAsMTU0ICs4NSw0
NSBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUcmFja1BpZWNlKEdy
YXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhcgogCiAgICAgc2tyZWN0LnNldChyZWN0LngoKSwg
cmVjdC55KCksIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0
KCkpOwogICAgIFNrU2NhbGFyIHRyYWNrSFNWWzNdOwotICAgIFNrQ29sb3JUb0hTVihSZW5kZXJU
aGVtZUNocm9taXVtTGludXg6OnRyYWNrQ29sb3IoKSwgdHJhY2tIU1YpOwotICAgIHBhaW50LnNl
dENvbG9yKHNhdHVyYXRlQW5kQnJpZ2h0ZW4odHJhY2tIU1YsIDAsIDApKTsKKyAgICBTa0NvbG9y
VG9IU1YoUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjp0cmFja0NvbG9yKCksIHRyYWNrSFNWKTsK
KyAgICBwYWludC5zZXRDb2xvcihQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OnNhdHVyYXRlQW5k
QnJpZ2h0ZW4odHJhY2tIU1YsIDAsIDApKTsKICAgICBjYW52YXMtPmRyYXdJUmVjdChza3JlY3Qs
IHBhaW50KTsKIAogICAgIFNrU2NhbGFyIHRodW1iSFNWWzNdOwotICAgIFNrQ29sb3JUb0hTVihS
ZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnRodW1iSW5hY3RpdmVDb2xvcigpLAorICAgIFNrQ29s
b3JUb0hTVihQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OnRodW1iSW5hY3RpdmVDb2xvcigpLAog
ICAgICAgICAgICAgICAgICB0aHVtYkhTVik7CiAKLSAgICBwYWludC5zZXRDb2xvcihvdXRsaW5l
Q29sb3IodHJhY2tIU1YsIHRodW1iSFNWKSk7CisgICAgcGFpbnQuc2V0Q29sb3IoUGxhdGZvcm1U
aGVtZUNocm9taXVtR3RrOjpvdXRsaW5lQ29sb3IodHJhY2tIU1YsIHRodW1iSFNWKSk7CiAgICAg
ZHJhd0JveChjYW52YXMsIHJlY3QsIHBhaW50KTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTGludXg6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCiB7Ci0g
ICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCk7Ci0gICAgc3RhdGljIGNvbnN0IGludCB3aWR0aE1pZGRsZSA9IHNjcm9sbGJhclRoaWNrbmVz
c1ZhbHVlIC8gMiArIDE7Ci0gICAgc3RhdGljIGNvbnN0IGludCBsZW5ndGhNaWRkbGUgPSBidXR0
b25MZW5ndGggLyAyICsgMTsKLSAgICBTa1BhaW50IHBhaW50OwotICAgIGVudW0gewotICAgICAg
ICBOb3J0aCwKLSAgICAgICAgRWFzdCwKLSAgICAgICAgU291dGgsCi0gICAgICAgIFdlc3QsCi0g
ICAgfSBkaXJlY3Rpb247Ci0KKyAgICBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OkFycm93RGly
ZWN0aW9uIGRpcmVjdGlvbjsKICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0
UGFydCkKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IFdlc3Q7CisgICAgICAgICAgICBkaXJlY3Rp
b24gPSBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6Oldlc3Q7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGRpcmVjdGlvbiA9IEVhc3Q7CisgICAgICAgICAgICBkaXJlY3Rpb24gPSBQbGF0Zm9y
bVRoZW1lQ2hyb21pdW1HdGs6OkVhc3Q7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHBhcnQg
PT0gQmFja0J1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IE5vcnRoOwor
ICAgICAgICAgICAgZGlyZWN0aW9uID0gUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpOb3J0aDsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlyZWN0aW9uID0gU291dGg7CisgICAgICAgICAg
ICBkaXJlY3Rpb24gPSBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OlNvdXRoOwogICAgIH0KIAor
ICAgIENvbnRyb2xTdGF0ZXMgc3RhdGVzID0gMDsKICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGJ1
dHRvbiBjYW4gYmUgcHJlc3NlZC4KLSAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKLSAgICBpZiAo
KChkaXJlY3Rpb24gPT0gV2VzdCB8fCBkaXJlY3Rpb24gPT0gTm9ydGgpICYmIHNjcm9sbGJhci0+
Y3VycmVudFBvcygpKQotICAgICAgICB8fCAoZGlyZWN0aW9uID09IEVhc3QgfHwgZGlyZWN0aW9u
ID09IFNvdXRoKSAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGlt
dW0oKSkKLSAgICAgICAgZW5hYmxlZCA9IHRydWU7CisgICAgaWYgKCgoZGlyZWN0aW9uID09IFBs
YXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6V2VzdCB8fCBkaXJlY3Rpb24gPT0gUGxhdGZvcm1UaGVt
ZUNocm9taXVtR3RrOjpOb3J0aCkgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCisgICAgICAg
IHx8IChkaXJlY3Rpb24gPT0gUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpFYXN0IHx8IGRpcmVj
dGlvbiA9PSBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OlNvdXRoKSAmJiBzY3JvbGxiYXItPmN1
cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGltdW0oKSkKKyAgICAgICAgc3RhdGVzIHw9IEVu
YWJsZWRTdGF0ZTsKIAotICAgIC8vIENhbGN1bGF0ZSBidXR0b24gY29sb3IuCi0gICAgU2tTY2Fs
YXIgdHJhY2tIU1ZbM107Ci0gICAgU2tDb2xvclRvSFNWKFJlbmRlclRoZW1lQ2hyb21pdW1MaW51
eDo6dHJhY2tDb2xvcigpLCB0cmFja0hTVik7Ci0gICAgU2tDb2xvciBidXR0b25Db2xvciA9IHNh
dHVyYXRlQW5kQnJpZ2h0ZW4odHJhY2tIU1YsIDAsIDAuMik7Ci0gICAgU2tDb2xvciBiYWNrZ3Jv
dW5kQ29sb3IgPSBidXR0b25Db2xvcjsKLSAgICBpZiAocGFydCA9PSBzY3JvbGxiYXItPnByZXNz
ZWRQYXJ0KCkpIHsKLSAgICAgICAgU2tTY2FsYXIgYnV0dG9uSFNWWzNdOwotICAgICAgICBTa0Nv
bG9yVG9IU1YoYnV0dG9uQ29sb3IsIGJ1dHRvbkhTVik7Ci0gICAgICAgIGJ1dHRvbkNvbG9yID0g
c2F0dXJhdGVBbmRCcmlnaHRlbihidXR0b25IU1YsIDAsIC0wLjEpOwotICAgIH0gZWxzZSBpZiAo
cGFydCA9PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgJiYgZW5hYmxlZCkgewotICAgICAgICBT
a1NjYWxhciBidXR0b25IU1ZbM107Ci0gICAgICAgIFNrQ29sb3JUb0hTVihidXR0b25Db2xvciwg
YnV0dG9uSFNWKTsKLSAgICAgICAgYnV0dG9uQ29sb3IgPSBzYXR1cmF0ZUFuZEJyaWdodGVuKGJ1
dHRvbkhTViwgMCwgMC4wNSk7Ci0gICAgfQotCi0gICAgU2tJUmVjdCBza3JlY3Q7Ci0gICAgc2ty
ZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0
LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwotICAgIC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kICh0aGUg
YXJlYSB2aXNpYmxlIGJlaGluZCB0aGUgcm91bmRlZCBjb3JuZXJzKS4KLSAgICBwYWludC5zZXRD
b2xvcihiYWNrZ3JvdW5kQ29sb3IpOwotICAgIGNhbnZhcy0+ZHJhd0lSZWN0KHNrcmVjdCwgcGFp
bnQpOwotCi0gICAgLy8gUGFpbnQgdGhlIGJ1dHRvbidzIG91dGxpbmUgYW5kIGZpbGwgdGhlIG1p
ZGRsZQotICAgIFNrUGF0aCBvdXRsaW5lOwotICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAg
Y2FzZSBOb3J0aDoKLSAgICAgICAgb3V0bGluZS5tb3ZlVG8ocmVjdC54KCkgKyAwLjUsIHJlY3Qu
eSgpICsgcmVjdC5oZWlnaHQoKSArIDAuNSk7Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbygwLCAt
KHJlY3QuaGVpZ2h0KCkgLSAyKSk7Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbygyLCAtMik7Ci0g
ICAgICAgIG91dGxpbmUuckxpbmVUbyhyZWN0LndpZHRoKCkgLSA1LCAwKTsKLSAgICAgICAgb3V0
bGluZS5yTGluZVRvKDIsIDIpOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8oMCwgcmVjdC5oZWln
aHQoKSAtIDIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNvdXRoOgotICAgICAgICBvdXRs
aW5lLm1vdmVUbyhyZWN0LngoKSArIDAuNSwgcmVjdC55KCkgLSAwLjUpOwotICAgICAgICBvdXRs
aW5lLnJMaW5lVG8oMCwgcmVjdC5oZWlnaHQoKSAtIDIpOwotICAgICAgICBvdXRsaW5lLnJMaW5l
VG8oMiwgMik7Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbyhyZWN0LndpZHRoKCkgLSA1LCAwKTsK
LSAgICAgICAgb3V0bGluZS5yTGluZVRvKDIsIC0yKTsKLSAgICAgICAgb3V0bGluZS5yTGluZVRv
KDAsIC0ocmVjdC5oZWlnaHQoKSAtIDIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYXN0
OgotICAgICAgICBvdXRsaW5lLm1vdmVUbyhyZWN0LngoKSAtIDAuNSwgcmVjdC55KCkgKyAwLjUp
OwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8ocmVjdC53aWR0aCgpIC0gMiwgMCk7Ci0gICAgICAg
IG91dGxpbmUuckxpbmVUbygyLCAyKTsKLSAgICAgICAgb3V0bGluZS5yTGluZVRvKDAsIHJlY3Qu
aGVpZ2h0KCkgLSA1KTsKLSAgICAgICAgb3V0bGluZS5yTGluZVRvKC0yLCAyKTsKLSAgICAgICAg
b3V0bGluZS5yTGluZVRvKC0ocmVjdC53aWR0aCgpIC0gMiksIDApOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFdlc3Q6Ci0gICAgICAgIG91dGxpbmUubW92ZVRvKHJlY3QueCgpICsgcmVjdC53
aWR0aCgpICsgMC41LCByZWN0LnkoKSArIDAuNSk7Ci0gICAgICAgIG91dGxpbmUuckxpbmVUbygt
KHJlY3Qud2lkdGgoKSAtIDIpLCAwKTsKLSAgICAgICAgb3V0bGluZS5yTGluZVRvKC0yLCAyKTsK
LSAgICAgICAgb3V0bGluZS5yTGluZVRvKDAsIHJlY3QuaGVpZ2h0KCkgLSA1KTsKLSAgICAgICAg
b3V0bGluZS5yTGluZVRvKDIsIDIpOwotICAgICAgICBvdXRsaW5lLnJMaW5lVG8ocmVjdC53aWR0
aCgpIC0gMiwgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBvdXRsaW5lLmNsb3NlKCk7
Ci0KLSAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7Ci0gICAgcGFpbnQu
c2V0Q29sb3IoYnV0dG9uQ29sb3IpOwotICAgIGNhbnZhcy0+ZHJhd1BhdGgob3V0bGluZSwgcGFp
bnQpOwotCi0gICAgcGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOwotICAgIHBhaW50LnNldFN0eWxl
KFNrUGFpbnQ6OmtTdHJva2VfU3R5bGUpOwotICAgIFNrU2NhbGFyIHRodW1iSFNWWzNdOwotICAg
IFNrQ29sb3JUb0hTVihSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnRodW1iSW5hY3RpdmVDb2xv
cigpLCB0aHVtYkhTVik7Ci0gICAgcGFpbnQuc2V0Q29sb3Iob3V0bGluZUNvbG9yKHRyYWNrSFNW
LCB0aHVtYkhTVikpOwotICAgIGNhbnZhcy0+ZHJhd1BhdGgob3V0bGluZSwgcGFpbnQpOwotCi0g
ICAgLy8gSWYgdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZCwgdGhlIGFycm93IGlzIGRyYXduIHdpdGgg
dGhlIG91dGxpbmUgY29sb3IuCi0gICAgaWYgKGVuYWJsZWQpCi0gICAgICAgIHBhaW50LnNldENv
bG9yKFNLX0NvbG9yQkxBQ0spOwotCi0gICAgcGFpbnQuc2V0QW50aUFsaWFzKGZhbHNlKTsKLSAg
ICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7Ci0KLSAgICBTa1BhdGggcGF0
aDsKLSAgICAvLyBUaGUgY29uc3RhbnRzIGluIHRoaXMgYmxvY2sgb2YgY29kZSBhcmUgaGFuZC10
YWlsb3JlZCB0byBwcm9kdWNlIGdvb2QKLSAgICAvLyBsb29raW5nIGFycm93cyB3aXRob3V0IGFu
dGktYWxpYXNpbmcuCi0gICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKLSAgICBjYXNlIE5vcnRoOgot
ICAgICAgICBwYXRoLm1vdmVUbyhyZWN0LngoKSArIHdpZHRoTWlkZGxlIC0gNCwgcmVjdC55KCkg
KyBsZW5ndGhNaWRkbGUgKyAyKTsKLSAgICAgICAgcGF0aC5yTGluZVRvKDcsIDApOwotICAgICAg
ICBwYXRoLnJMaW5lVG8oLTQsIC00KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTb3V0aDoK
LSAgICAgICAgcGF0aC5tb3ZlVG8ocmVjdC54KCkgKyB3aWR0aE1pZGRsZSAtIDQsIHJlY3QueSgp
ICsgbGVuZ3RoTWlkZGxlIC0gMyk7Ci0gICAgICAgIHBhdGguckxpbmVUbyg3LCAwKTsKLSAgICAg
ICAgcGF0aC5yTGluZVRvKC00LCA0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYXN0Ogot
ICAgICAgICBwYXRoLm1vdmVUbyhyZWN0LngoKSArIGxlbmd0aE1pZGRsZSAtIDMsIHJlY3QueSgp
ICsgd2lkdGhNaWRkbGUgLSA0KTsKLSAgICAgICAgcGF0aC5yTGluZVRvKDAsIDcpOwotICAgICAg
ICBwYXRoLnJMaW5lVG8oNCwgLTQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlc3Q6Ci0g
ICAgICAgIHBhdGgubW92ZVRvKHJlY3QueCgpICsgbGVuZ3RoTWlkZGxlICsgMSwgcmVjdC55KCkg
KyB3aWR0aE1pZGRsZSAtIDUpOwotICAgICAgICBwYXRoLnJMaW5lVG8oMCwgOSk7Ci0gICAgICAg
IHBhdGguckxpbmVUbygtNCwgLTQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcGF0aC5j
bG9zZSgpOworICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSkKKyAgICAg
ICAgc3RhdGVzIHw9IFByZXNzZWRTdGF0ZTsKKyAgICBlbHNlIGlmIChwYXJ0ID09IHNjcm9sbGJh
ci0+aG92ZXJlZFBhcnQoKSAmJiBzdGF0ZXMgJiBFbmFibGVkU3RhdGUpCisgICAgICAgIHN0YXRl
cyB8PSBIb3ZlclN0YXRlOwogCi0gICAgY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWludCk7Cisg
ICAgUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpwYWludEFycm93QnV0dG9uKGdjLCByZWN0LCBk
aXJlY3Rpb24sIHN0YXRlcyk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4
OjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMzAwLDEyICsxMzYsMTIgQEAgdm9pZCBTY3JvbGxiYXJU
aGVtZUNocm9taXVtTGludXg6OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xs
YmFyKiBzY3IKIAogICAgIFNrU2NhbGFyIHRodW1iWzNdOwogICAgIFNrQ29sb3JUb0hTVihob3Zl
cmVkCi0gICAgICAgICAgICAgICAgID8gUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4Ojp0aHVtYkFj
dGl2ZUNvbG9yKCkKLSAgICAgICAgICAgICAgICAgOiBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6
OnRodW1iSW5hY3RpdmVDb2xvcigpLAorICAgICAgICAgICAgICAgICA/IFBsYXRmb3JtVGhlbWVD
aHJvbWl1bUd0azo6dGh1bWJBY3RpdmVDb2xvcigpCisgICAgICAgICAgICAgICAgIDogUGxhdGZv
cm1UaGVtZUNocm9taXVtR3RrOjp0aHVtYkluYWN0aXZlQ29sb3IoKSwKICAgICAgICAgICAgICAg
ICAgdGh1bWIpOwogCiAgICAgU2tQYWludCBwYWludDsKLSAgICBwYWludC5zZXRDb2xvcihzYXR1
cmF0ZUFuZEJyaWdodGVuKHRodW1iLCAwLCAwLjAyKSk7CisgICAgcGFpbnQuc2V0Q29sb3IoUGxh
dGZvcm1UaGVtZUNocm9taXVtR3RrOjpzYXR1cmF0ZUFuZEJyaWdodGVuKHRodW1iLCAwLCAwLjAy
KSk7CiAKICAgICBTa0lSZWN0IHNrcmVjdDsKICAgICBpZiAodmVydGljYWwpCkBAIC0zMTUsNyAr
MTUxLDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50VGh1bWIoR3Jh
cGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3IKIAogICAgIGNhbnZhcy0+ZHJhd0lSZWN0
KHNrcmVjdCwgcGFpbnQpOwogCi0gICAgcGFpbnQuc2V0Q29sb3Ioc2F0dXJhdGVBbmRCcmlnaHRl
bih0aHVtYiwgMCwgLTAuMDIpKTsKKyAgICBwYWludC5zZXRDb2xvcihQbGF0Zm9ybVRoZW1lQ2hy
b21pdW1HdGs6OnNhdHVyYXRlQW5kQnJpZ2h0ZW4odGh1bWIsIDAsIC0wLjAyKSk7CiAKICAgICBp
ZiAodmVydGljYWwpCiAgICAgICAgIHNrcmVjdC5zZXQobWlkeCArIDEsIHJlY3QueSgpLCByZWN0
LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKQEAgLTMyNSw4
ICsxNjEsOCBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYihH
cmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcgogICAgIGNhbnZhcy0+ZHJhd0lSZWN0
KHNrcmVjdCwgcGFpbnQpOwogCiAgICAgU2tTY2FsYXIgdHJhY2tbM107Ci0gICAgU2tDb2xvclRv
SFNWKFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6dHJhY2tDb2xvcigpLCB0cmFjayk7Ci0gICAg
cGFpbnQuc2V0Q29sb3Iob3V0bGluZUNvbG9yKHRyYWNrLCB0aHVtYikpOworICAgIFNrQ29sb3JU
b0hTVihQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OnRyYWNrQ29sb3IoKSwgdHJhY2spOworICAg
IHBhaW50LnNldENvbG9yKFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6b3V0bGluZUNvbG9yKHRy
YWNrLCB0aHVtYikpOwogICAgIGRyYXdCb3goY2FudmFzLCByZWN0LCBwYWludCk7CiAKICAgICBp
ZiAocmVjdC5oZWlnaHQoKSA+IDEwICYmIHJlY3Qud2lkdGgoKSA+IDEwKSB7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCBjMjkzNTNkYjky
ZTZkN2RmYzhkNjg0ZTc0OTdkMTlhNjUxOTkyYjAyLi5kZTgzYWU5ZjNkOWNmZTY3NzkyMTcxOTdi
M2YzODU5OGYyZGVkNWI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTGludXguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1MaW51eC5jcHAKQEAgLTI3LDE0ICsyNywxMyBAQAogCiAjaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1UaGVtZUNo
cm9taXVtR3RrLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xs
YmFyVGhlbWUuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXVuc2lnbmVkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6bV90aHVt
YkluYWN0aXZlQ29sb3IgPSAweGVhZWFlYTsKLXVuc2lnbmVkIFJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eDo6bV90aHVtYkFjdGl2ZUNvbG9yID0gMHhmNGY0ZjQ7Ci11bnNpZ25lZCBSZW5kZXJUaGVt
ZUNocm9taXVtTGludXg6Om1fdHJhY2tDb2xvciA9IDB4ZDNkM2QzOwogdW5zaWduZWQgUmVuZGVy
VGhlbWVDaHJvbWl1bUxpbnV4OjptX2FjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvciA9CiAg
ICAgMHhmZjFlOTBmZjsKIHVuc2lnbmVkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6bV9hY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IgPQpAQCAtMTY4LDEyICsxNjcsMjkgQEAgdm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnNldFNlbGVjdGlvbkNvbG9ycygKICAgICBtX2luYWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yID0gaW5hY3RpdmVGb3JlZ3JvdW5kQ29sb3I7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRTY3JvbGxiYXJDb2xvcnMoCi0g
ICAgU2tDb2xvciBpbmFjdGl2ZUNvbG9yLCBTa0NvbG9yIGFjdGl2ZUNvbG9yLCBTa0NvbG9yIHRy
YWNrQ29sb3IpCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6YWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0CiB7Ci0gICAgbV90aHVtYkluYWN0aXZlQ29sb3IgPSBpbmFjdGl2ZUNvbG9yOwot
ICAgIG1fdGh1bWJBY3RpdmVDb2xvciA9IGFjdGl2ZUNvbG9yOwotICAgIG1fdHJhY2tDb2xvciA9
IHRyYWNrQ29sb3I7CisgICAgaW50IHdpZHRoID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1l
KCktPnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lk
dGgsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQp
KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50SW5uZXJTcGluQnV0
dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgQ29udHJvbFN0YXRlcyBub3J0aFN0YXRlcyA9IGNvbnRyb2xT
dGF0ZXNGb3JSZW5kZXJlcihvYmplY3QpOworICAgIENvbnRyb2xTdGF0ZXMgc291dGhTdGF0ZXMg
PSBub3J0aFN0YXRlczsKKyAgICBpZiAobm9ydGhTdGF0ZXMgJiBTcGluVXBTdGF0ZSkKKyAgICAg
ICAgc291dGhTdGF0ZXMgJj0gfihIb3ZlclN0YXRlIHwgUHJlc3NlZFN0YXRlKTsKKyAgICBlbHNl
CisgICAgICAgIG5vcnRoU3RhdGVzICY9IH4oSG92ZXJTdGF0ZSB8IFByZXNzZWRTdGF0ZSk7CisK
KyAgICBJbnRSZWN0IGhhbGYgPSByZWN0OworICAgIGhhbGYuc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0
KCkgLyAyKTsKKyAgICBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OnBhaW50QXJyb3dCdXR0b24o
aW5mby5jb250ZXh0LCBoYWxmLCBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6Ok5vcnRoLCBub3J0
aFN0YXRlcyk7CisKKyAgICBoYWxmLnNldFkocmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC8gMik7
CisgICAgUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpwYWludEFycm93QnV0dG9uKGluZm8uY29u
dGV4dCwgaGFsZiwgUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpTb3V0aCwgc291dGhTdGF0ZXMp
OworICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmggYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAppbmRleCBjNjBkZWMzMjY2
NTliNTRjMGFjMzcyY2U5YTUxMDEyZTVlMWQxZWNmLi45ZWVjYTk3NmE1YWM4ZmJkZjYwZGY5YjQz
YTZjZTBhMjgzMGNmNzYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTGludXguaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTGludXguaApAQCAtNTksMTggKzU5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgc3RhdGljIHZvaWQgc2V0Q2FyZXRCbGlua0ludGVydmFsKGRvdWJsZSBpbnRlcnZhbCk7CiAg
ICAgICAgIHZpcnR1YWwgZG91YmxlIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCkgY29uc3Q7
CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKwogICAgICAgICBzdGF0aWMgdm9pZCBzZXRTZWxlY3Rp
b25Db2xvcnModW5zaWduZWQgYWN0aXZlQmFja2dyb3VuZENvbG9yLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWN0aXZlRm9yZWdyb3VuZENvbG9yLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5hY3RpdmVC
YWNrZ3JvdW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbmFjdGl2ZUZvcmVncm91bmRDb2xvcik7CiAKLSAgICAgICAgc3RhdGljIHZvaWQg
c2V0U2Nyb2xsYmFyQ29sb3JzKHVuc2lnbmVkIGluYWN0aXZlX2NvbG9yLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWN0aXZlX2NvbG9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgdHJhY2tfY29sb3IpOwot
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgdGh1bWJJbmFjdGl2ZUNvbG9yKCkgeyByZXR1cm4gbV90
aHVtYkluYWN0aXZlQ29sb3I7IH0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIHRodW1iQWN0aXZl
Q29sb3IoKSB7IHJldHVybiBtX3RodW1iQWN0aXZlQ29sb3I7IH0KLSAgICAgICAgc3RhdGljIHVu
c2lnbmVkIHRyYWNrQ29sb3IoKSB7IHJldHVybiBtX3RyYWNrQ29sb3I7IH0KLQogICAgIHByaXZh
dGU6CiAgICAgICAgIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eCgpOwogICAgICAgICB2aXJ0dWFs
IH5SZW5kZXJUaGVtZUNocm9taXVtTGludXgoKTsKQEAgLTg0LDEwICs4MCw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIG1fYWN0aXZlU2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yOwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgbV9pbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcjsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIG1faW5hY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3I7Ci0KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIG1fdGh1bWJJ
bmFjdGl2ZUNvbG9yOwotICAgICAgICBzdGF0aWMgdW5zaWduZWQgbV90aHVtYkFjdGl2ZUNvbG9y
OwotICAgICAgICBzdGF0aWMgdW5zaWduZWQgbV90cmFja0NvbG9yOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDUzZjc2NjIyY2MyOTYzYWQ5MzllYTc0
Yzk3OGU0Y2M3NGI5MmM3MjEuLmVkMWM4OWNhNDJhODZjNWVjYjNhYjc4MWZjOTMzNDhiNTdiMWQ5
ODggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA3LTE0ICBLZW50IFRhbXVy
YSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbQ2hyb21pdW1dIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIDxpbnB1
dCB0eXBlPW51bWJlcj4gVUkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQxOTI1CisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0U2Nyb2xsYmFyQ29sb3JzKToKKyAgICAgICAgIENh
bGwgUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpzZXRTY3JvbGxiYXJDb2xvcnMoKSBpbnN0ZWFk
IG9mCisgICAgICAgICBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OnNldFNjcm9sbGJhckNvbG9y
cygpLgorCiAyMDEwLTA3LTEzICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCmluZGV4IGQxY2E3MWU2YjA2ZmZlZGE2MWE5YTk4MmE5MDAxNWJhMzk1Y2RmZTQuLmYzZmVj
NzU2MTYwZjU1NTNlOTEwZTE2NjQxMjY0NzYwNjViNjZiMDYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0ay5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCkBAIC0xODUyLDcgKzE4NTMs
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRTY3JvbGxiYXJDb2xvcnModW5zaWduZWQgaW5hY3Rp
dmVDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBh
Y3RpdmVDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCB0cmFja0NvbG9yKSB7CiAjaWYgT1MoTElOVVgpCi0gICAgUmVuZGVyVGhlbWVDaHJvbWl1bUxp
bnV4OjpzZXRTY3JvbGxiYXJDb2xvcnMoaW5hY3RpdmVDb2xvciwKKyAgICBQbGF0Zm9ybVRoZW1l
Q2hyb21pdW1HdGs6OnNldFNjcm9sbGJhckNvbG9ycyhpbmFjdGl2ZUNvbG9yLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvbG9yLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQ29sb3Ip
OwogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>