<?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>119956</bug_id>
          
          <creation_ts>2013-08-17 11:33:25 -0700</creation_ts>
          <short_desc>Support animation of CSS gradients</short_desc>
          <delta_ts>2016-01-20 09:21:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>dstockwell</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>schenney</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>918333</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-08-17 11:33:25 -0700</bug_when>
    <thetext>Support animations of CSS gradients</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918603</commentid>
    <comment_count>1</comment_count>
      <attachid>209074</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-08-19 03:41:16 -0700</bug_when>
    <thetext>Created attachment 209074
Rotating gradient example</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918604</commentid>
    <comment_count>2</comment_count>
      <attachid>209075</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-08-19 03:43:39 -0700</bug_when>
    <thetext>Created attachment 209075
Patch

Wit this patch, linear gradient angles can be animated as well as colors from color-stops.

Animating the angle as described by the spec at the moment, leads to weird wonky looking gradients, since the gradient length gets shrinked on the edges and stretched on the corners.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918606</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-19 03:45:17 -0700</bug_when>
    <thetext>Attachment 209075 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/css/CSSGradientValue.cpp&apos;, u&apos;Source/WebCore/css/CSSGradientValue.h&apos;, u&apos;Source/WebCore/page/animation/CSSPropertyAnimation.cpp&apos;]&quot; exit_code: 1
Source/WebCore/page/animation/CSSPropertyAnimation.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/css/CSSGradientValue.h:129:  The parameter name &quot;to&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919410</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-08-21 07:45:45 -0700</bug_when>
    <thetext>I think the tasks can be divided into three parts that don&apos;t necessarily need to be done in one patch:

Animation of Colors,
Animation of Color stops (with the help of calc as requested by CSS specs)
Animation of Gradient direction/position

I am not particular keen about the last step, since that requires layout information that we might not have at animation time.

The first part should be very easy (done in the patch already) and the most important use case anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926495</commentid>
    <comment_count>5</comment_count>
      <attachid>210992</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-09-08 14:03:37 -0700</bug_when>
    <thetext>Created attachment 210992
Patch

color-stop animation from the latest proposal on www-style. Interpolate unordered color-stop list and use calc() to blend different types. The patch cleans up CSSGradientValue.cpp quite a bit as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926496</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-08 14:06:12 -0700</bug_when>
    <thetext>Attachment 210992 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/css/CSSGradientValue.cpp&apos;, u&apos;Source/WebCore/css/CSSGradientValue.h&apos;, u&apos;Source/WebCore/page/animation/CSSPropertyAnimation.cpp&apos;]&quot; exit_code: 1
Source/WebCore/css/CSSGradientValue.cpp:145:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/css/CSSGradientValue.h:129:  The parameter name &quot;to&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156947</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-01-20 09:21:47 -0800</bug_when>
    <thetext>&lt;rdar://problem/24259320&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>209074</attachid>
            <date>2013-08-19 03:41:16 -0700</date>
            <delta_ts>2013-09-08 14:03:37 -0700</delta_ts>
            <desc>Rotating gradient example</desc>
            <filename>gradient-animation3.html</filename>
            <type>text/html</type>
            <size>404</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxzdHlsZT4KZGl2IHsKCXdp
ZHRoOiA3NTBweDsKCWhlaWdodDogNTAwcHg7CgliYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3Jh
ZGllbnQoMGRlZywgcmVkLCBibHVlKTsKCS13ZWJraXQtYW5pbWF0aW9uOiBiYWNrLWFuaW0gM3Mg
bGluZWFyIGluZmluaXRlOwp9CkAtd2Via2l0LWtleWZyYW1lcyBiYWNrLWFuaW0gewoJMCUgewoJ
CWJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgwZGVnLCByZWQsIGJsdWUpOwoJfQoJ
MTAwJSB7CgkJYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDM2MGRlZywgcmVkLCBi
bHVlKTsKCX0KfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2PjwvZGl2Pgo8L2JvZHk+Cjwv
aHRtbD4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209075</attachid>
            <date>2013-08-19 03:43:39 -0700</date>
            <delta_ts>2013-09-08 14:03:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>gradient-animation.patch</filename>
            <type>text/plain</type>
            <size>10031</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA1MDA1OThiLi41N2Vl
ZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC00NjgsNiAr
NDY4LDgxIEBAIGJvb2wgQ1NTR3JhZGllbnRWYWx1ZTo6a25vd25Ub0JlT3BhcXVlKGNvbnN0IFJl
bmRlck9iamVjdCopIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGluZSB2b2lkIENT
U0dyYWRpZW50VmFsdWU6OmJsZW5kQ29sb3JTdG9wcyhDb2xvclN0b3BWZWN0b3ImIHJlc3VsdCwg
Y29uc3QgQ29sb3JTdG9wVmVjdG9yJiBmcm9tLCBjb25zdCBDb2xvclN0b3BWZWN0b3ImIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gRklYTUU6IE5vIHN1cHBvcnQgZm9yIHBvc2l0aW9u
IGludGVycG9sYXRpb24gZHVlIHRvIG1pc3NpbmcgbGF5b3V0IGluZm9ybWF0aW9uLgorICAgIEFT
U0VSVChmcm9tLnNpemUoKSA9PSB0by5zaXplKCkpOworICAgIHJlc3VsdC5jbGVhcigpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcm9tLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNv
bnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBzdGFydCA9IGZyb21baV07CisgICAgICAgIGNvbnN0
IENTU0dyYWRpZW50Q29sb3JTdG9wJiBlbmQgPSB0b1tpXTsKKyAgICAgICAgQ1NTR3JhZGllbnRD
b2xvclN0b3AgY29sb3JTdG9wOworICAgICAgICBjb2xvclN0b3AubV9yZXNvbHZlZENvbG9yID0g
YmxlbmQoc3RhcnQubV9yZXNvbHZlZENvbG9yLCBlbmQubV9yZXNvbHZlZENvbG9yLCBwcm9ncmVz
cyk7CisgICAgICAgIGNvbG9yU3RvcC5tX2NvbG9yID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZUNvbG9yKGNvbG9yU3RvcC5tX3Jlc29sdmVkQ29sb3IucmdiKCkpOworICAgICAgICBjb2xvclN0
b3AubV9wb3NpdGlvbiA9IGVuZC5tX3Bvc2l0aW9uOworICAgICAgICByZXN1bHQuYXBwZW5kKGNv
bG9yU3RvcCk7CisgICAgfQorfQorCitpbmxpbmUgZmxvYXQgQ1NTTGluZWFyR3JhZGllbnRWYWx1
ZTo6YW5nbGVGb3JHcmFkaWVudChjb25zdCBDU1NMaW5lYXJHcmFkaWVudFZhbHVlJiBncmFkaWVu
dCkgY29uc3QKK3sKKyAgICBpZiAoZ3JhZGllbnQubV9hbmdsZSkKKyAgICAgICAgcmV0dXJuIGdy
YWRpZW50Lm1fYW5nbGUtPmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcp
OworICAgIGlmICghZ3JhZGllbnQubV9maXJzdFgpIHsKKyAgICAgICAgQVNTRVJUKGdyYWRpZW50
Lm1fZmlyc3RZKTsKKyAgICAgICAgaWYgKGdyYWRpZW50Lm1fZmlyc3RZLT5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVUb3ApCisgICAgICAgICAgICByZXR1cm4gMC4wOworICAgICAgICBpZiAoZ3Jh
ZGllbnQubV9maXJzdFktPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJvdHRvbSkKKyAgICAgICAg
ICAgIHJldHVybiAxODAuMDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWdyYWRpZW50Lm1f
Zmlyc3RZICYmIGdyYWRpZW50Lm1fZmlyc3RYLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVMZWZ0
KQorICAgICAgICAgICAgcmV0dXJuIDI3MC4wOworICAgICAgICBpZiAoIWdyYWRpZW50Lm1fZmly
c3RZICYmIGdyYWRpZW50Lm1fZmlyc3RYLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVSaWdodCkK
KyAgICAgICAgICAgIHJldHVybiA5MC4wOworICAgICAgICBpZiAoZ3JhZGllbnQubV9maXJzdFgt
PmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVJpZ2h0CisgICAgICAgICAgICAmJiBncmFkaWVudC5t
X2ZpcnN0WS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlVG9wKQorICAgICAgICAgICAgcmV0dXJu
IDQ1LjA7CisgICAgICAgIGlmIChncmFkaWVudC5tX2ZpcnN0WC0+Z2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlUmlnaHQKKyAgICAgICAgICAgICYmIGdyYWRpZW50Lm1fZmlyc3RZLT5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVCb3R0b20pCisgICAgICAgICAgICByZXR1cm4gMTM1LjA7CisgICAgICAg
IGlmIChncmFkaWVudC5tX2ZpcnN0WC0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTGVmdAorICAg
ICAgICAgICAgJiYgZ3JhZGllbnQubV9maXJzdFktPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJv
dHRvbSkKKyAgICAgICAgICAgIHJldHVybiAyMjUuMDsKKyAgICAgICAgaWYgKGdyYWRpZW50Lm1f
Zmlyc3RYLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVMZWZ0CisgICAgICAgICAgICAmJiBncmFk
aWVudC5tX2ZpcnN0WS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlVG9wKQorICAgICAgICAgICAg
cmV0dXJuIDMxNS4wOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworUGFzc1JlZlB0cjxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPiBDU1NMaW5lYXJH
cmFkaWVudFZhbHVlOjpibGVuZExpbmVhckdyYWRpZW50KGNvbnN0IENTU0xpbmVhckdyYWRpZW50
VmFsdWUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgQVNTRVJUKG1fZ3JhZGllbnRUeXBl
ID09IENTU0xpbmVhckdyYWRpZW50KTsKKyAgICBBU1NFUlQodG8ubV9ncmFkaWVudFR5cGUgPT0g
Q1NTTGluZWFyR3JhZGllbnQpOworICAgIEFTU0VSVChtX3JlcGVhdGluZyA9PSB0by5tX3JlcGVh
dGluZyk7CisgICAgUmVmUHRyPENTU0xpbmVhckdyYWRpZW50VmFsdWU+IHJlc3VsdCA9IENTU0xp
bmVhckdyYWRpZW50VmFsdWU6OmNyZWF0ZSgKKyAgICAgICAgbV9yZXBlYXRpbmcgPyBSZXBlYXRp
bmcgOiBOb25SZXBlYXRpbmcpOworCisgICAgYmxlbmRDb2xvclN0b3BzKHJlc3VsdC0+bV9zdG9w
cywgbV9zdG9wcywgdG8ubV9zdG9wcywgcHJvZ3Jlc3MpOworCisgICAgZG91YmxlIHN0YXJ0QW5n
bGUgPSBhbmdsZUZvckdyYWRpZW50KCp0aGlzKTsKKyAgICBkb3VibGUgZW5kQW5nbGUgPSBhbmds
ZUZvckdyYWRpZW50KHRvKTsKKworICAgIGlmICgoIW1fYW5nbGUgfHwgIXRvLm1fYW5nbGUpCisg
ICAgICAgICYmIGFicyhlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpID4gMTgwLjApIHsKKyAgICAgICAg
aWYgKHN0YXJ0QW5nbGUgPCBlbmRBbmdsZSkKKyAgICAgICAgICAgIHN0YXJ0QW5nbGUgKz0gMzYw
LjA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuZEFuZ2xlICs9IDM2MC4wOworICAgIH0K
KyAgICBkb3VibGUgcmVzdWx0QW5nbGUgPSBibGVuZChzdGFydEFuZ2xlLCBlbmRBbmdsZSwgcHJv
Z3Jlc3MpOworICAgIHJlc3VsdC0+bV9hbmdsZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
cmVzdWx0QW5nbGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKTsKKworICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOworfQorCisKIFN0cmluZyBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpj
dXN0b21Dc3NUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKQEAgLTEx
NzEsNCArMTI0NiwxNyBAQCBib29sIENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmVxdWFscyhjb25z
dCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gZXF1YWxT
aGFwZSAmJiBlcXVhbFNpemluZ0JlaGF2aW9yICYmIGVxdWFsSG9yaXpvbnRhbEFuZFZlcnRpY2Fs
U2l6ZSAmJiBtX3N0b3BzID09IG90aGVyLm1fc3RvcHM7CiB9CiAKK1Bhc3NSZWZQdHI8Q1NTUmFk
aWFsR3JhZGllbnRWYWx1ZT4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6YmxlbmRSYWRpYWxHcmFk
aWVudChjb25zdCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlJiB0bywgZG91YmxlIHByb2dyZXNzKQor
eworICAgIEFTU0VSVChtX2dyYWRpZW50VHlwZSA9PSBDU1NMaW5lYXJHcmFkaWVudCk7CisgICAg
QVNTRVJUKHRvLm1fZ3JhZGllbnRUeXBlID09IENTU0xpbmVhckdyYWRpZW50KTsKKyAgICBBU1NF
UlQobV9yZXBlYXRpbmcgPT0gdG8ubV9yZXBlYXRpbmcpOworCisgICAgLy8gRklYTUU6IEp1c3Qg
c3VwcG90IGFuaW1hdGlvbiBvZiBjb2xvciBzdG9wcyBmb3Igbm93LgorICAgIFJlZlB0cjxDU1NS
YWRpYWxHcmFkaWVudFZhbHVlPiByZXN1bHQgPSB0by5jbG9uZSgpOworICAgIGJsZW5kQ29sb3JT
dG9wcyhyZXN1bHQtPm1fc3RvcHMsIG1fc3RvcHMsIHRvLm1fc3RvcHMsIHByb2dyZXNzKTsKKwor
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAppbmRleCA4YTExNzhmLi42YjE4OGIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKQEAgLTU5LDYgKzU5LDggQEAg
c3RydWN0IENTU0dyYWRpZW50Q29sb3JTdG9wIHsKICAgICB9CiB9OwogCit0eXBlZGVmIFZlY3Rv
cjxDU1NHcmFkaWVudENvbG9yU3RvcCwgMj4gQ29sb3JTdG9wVmVjdG9yOworCiBjbGFzcyBDU1NH
cmFkaWVudFZhbHVlIDogcHVibGljIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgewogcHVibGljOgog
ICAgIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUm
KTsKQEAgLTg3LDYgKzg5LDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzUGVuZGluZygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBrbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVy
T2JqZWN0KikgY29uc3Q7CiAKKyAgICBib29sIGlzRGVwcmVjYXRlZEdyYWRpZW50KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2dyYWRpZW50VHlwZSAhPSBDU1NMaW5lYXJHcmFkaWVudCAmJiBt
X2dyYWRpZW50VHlwZSAhPSBDU1NSYWRpYWxHcmFkaWVudDsKKyAgICB9CisKICAgICB2b2lkIGxv
YWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKSB7IH0KICAgICBQYXNzUmVmUHRyPENT
U0dyYWRpZW50VmFsdWU+IGdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZXIq
KTsKIApAQCAtMTE5LDYgKzEyNiw4IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgaXNDYWNoZWFi
bGUoKSBjb25zdDsKIAorICAgIHZvaWQgYmxlbmRDb2xvclN0b3BzKENvbG9yU3RvcFZlY3RvciYg
cmVzdWx0LCBjb25zdCBDb2xvclN0b3BWZWN0b3ImIGZyb20sIGNvbnN0IENvbG9yU3RvcFZlY3Rv
ciYgdG8sIGRvdWJsZSk7CisKICAgICAvLyBQb2ludHMuIFNvbWUgb2YgdGhlc2UgbWF5IGJlIG51
bGwuCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2ZpcnN0WDsKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3RZOwpAQCAtMTU2LDYgKzE2NSw4IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0xpbmVhckdyYWRpZW50VmFsdWUmKSBjb25zdDsK
IAorICAgIFBhc3NSZWZQdHI8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4gYmxlbmRMaW5lYXJHcmFk
aWVudChjb25zdCBDU1NMaW5lYXJHcmFkaWVudFZhbHVlJiwgZG91YmxlKTsKKwogcHJpdmF0ZToK
ICAgICBDU1NMaW5lYXJHcmFkaWVudFZhbHVlKENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdCwgQ1NT
R3JhZGllbnRUeXBlIGdyYWRpZW50VHlwZSA9IENTU0xpbmVhckdyYWRpZW50KQogICAgICAgICA6
IENTU0dyYWRpZW50VmFsdWUoTGluZWFyR3JhZGllbnRDbGFzcywgcmVwZWF0LCBncmFkaWVudFR5
cGUpCkBAIC0xNjgsNiArMTc5LDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCisgICAgZmxv
YXQgYW5nbGVGb3JHcmFkaWVudChjb25zdCBDU1NMaW5lYXJHcmFkaWVudFZhbHVlJikgY29uc3Q7
CisKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fYW5nbGU7IC8vIG1heSBiZSBudWxs
LgogfTsKIApAQCAtMTk5LDYgKzIxMiw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgZXF1YWxzKGNv
bnN0IENTU1JhZGlhbEdyYWRpZW50VmFsdWUmKSBjb25zdDsKIAorICAgIFBhc3NSZWZQdHI8Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZT4gYmxlbmRSYWRpYWxHcmFkaWVudChjb25zdCBDU1NSYWRpYWxH
cmFkaWVudFZhbHVlJiwgZG91YmxlKTsKKwogcHJpdmF0ZToKICAgICBDU1NSYWRpYWxHcmFkaWVu
dFZhbHVlKENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdCwgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50
VHlwZSA9IENTU1JhZGlhbEdyYWRpZW50KQogICAgICAgICA6IENTU0dyYWRpZW50VmFsdWUoUmFk
aWFsR3JhZGllbnRDbGFzcywgcmVwZWF0LCBncmFkaWVudFR5cGUpCkBAIC0yMzIsNiArMjQ3LDI0
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2VuZFZlcnRpY2Fs
U2l6ZTsKIH07CiAKK2lubGluZSBDU1NHcmFkaWVudFZhbHVlKiB0b0NTU0dyYWRpZW50VmFsdWUo
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oIXZhbHVlIHx8IHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPih2YWx1ZSk7Cit9CisKK2lubGlu
ZSBDU1NMaW5lYXJHcmFkaWVudFZhbHVlKiB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUoQ1NTR3Jh
ZGllbnRWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIXZhbHVlIHx8IHZhbHVlLT5pc0xpbmVhckdyYWRpZW50KCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlKj4odmFsdWUpOworfQorCitpbmxpbmUgQ1NT
UmFkaWFsR3JhZGllbnRWYWx1ZSogdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKENTU0dyYWRpZW50
VmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCF2
YWx1ZSB8fCB2YWx1ZS0+aXNSYWRpYWxHcmFkaWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZSo+KHZhbHVlKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gQ1NTR3JhZGllbnRWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXgg
NmI1MWI1Yi4uZGI2ZTlmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NHcmFkaWVudFZh
bHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKQEAgLTI3OSw2ICsyODAsNDAg
QEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBB
bmltYXRpb25CYXNlKiBhbmltLCBTdHlsZUkKICAgICBpZiAoIWZyb20gfHwgIXRvKQogICAgICAg
ICByZXR1cm4gdG87CiAKKyAgICAvLyBBbmltYXRpb24gYmV0d2VlbiB0d28gZ2VuZXJhdGVkIGlt
YWdlcy4gQ3Jvc3MgZmFkZSBmb3IgYWxsIG90aGVyIGNhc2VzLgorICAgIGlmIChmcm9tLT5pc0dl
bmVyYXRlZEltYWdlKCkgJiYgdG8tPmlzR2VuZXJhdGVkSW1hZ2UoKSkgeworICAgICAgICBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlKiBmcm9tR2VuZXJhdGVkID0gc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZSo+KGZyb20tPmRhdGEoKSk7CisgICAgICAgIENTU0ltYWdlR2VuZXJhdG9y
VmFsdWUqIHRvR2VuZXJhdGVkID0gc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+
KHRvLT5kYXRhKCkpOworICAgICAgICBBU1NFUlQoZnJvbUdlbmVyYXRlZCk7CisgICAgICAgIEFT
U0VSVCh0b0dlbmVyYXRlZCk7CisKKyAgICAgICAgaWYgKGZyb21HZW5lcmF0ZWQtPmlzR3JhZGll
bnRWYWx1ZSgpICYmIHRvR2VuZXJhdGVkLT5pc0dyYWRpZW50VmFsdWUoKSkgeworICAgICAgICAg
ICAgQ1NTR3JhZGllbnRWYWx1ZSogZnJvbUdyYWRpZW50ID0gdG9DU1NHcmFkaWVudFZhbHVlKGZy
b21HZW5lcmF0ZWQpOworICAgICAgICAgICAgQ1NTR3JhZGllbnRWYWx1ZSogdG9HcmFkaWVudCA9
IHRvQ1NTR3JhZGllbnRWYWx1ZSh0b0dlbmVyYXRlZCk7CisgICAgICAgICAgICAvLyBHcmFkaWVu
dHMgbXVzdCBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9uIG5hbWUgYW5kIG11c3QgaGF2ZSB0aGUgc2Ft
ZSBudW1iZXIgb2YKKyAgICAgICAgICAgIC8vIGNvbG9yIHN0b3BzIGFjY29yZGluZyB0byB0aGUg
c3BlYy4gTm8gc3VwcG9ydCBvZiBkZXByZWNhdGVkIGdyYWRpZW50cy4KKyAgICAgICAgICAgIGlm
IChmcm9tR3JhZGllbnQtPmlzUmVwZWF0aW5nKCkgPT0gdG9HcmFkaWVudC0+aXNSZXBlYXRpbmco
KQorICAgICAgICAgICAgICAgICYmIGZyb21HcmFkaWVudC0+c3RvcENvdW50KCkgPT0gdG9HcmFk
aWVudC0+c3RvcENvdW50KCkKKyAgICAgICAgICAgICAgICAmJiAhZnJvbUdyYWRpZW50LT5pc0Rl
cHJlY2F0ZWRHcmFkaWVudCgpCisgICAgICAgICAgICAgICAgJiYgIXRvR3JhZGllbnQtPmlzRGVw
cmVjYXRlZEdyYWRpZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnJvbUdyYWRpZW50LT5p
c0xpbmVhckdyYWRpZW50KCkgJiYgdG9HcmFkaWVudC0+aXNMaW5lYXJHcmFkaWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPiBsaW5lYXJH
cmFkaWVudCA9CisgICAgICAgICAgICAgICAgICAgICAgICB0b0NTU0xpbmVhckdyYWRpZW50VmFs
dWUoZnJvbUdyYWRpZW50KS0+YmxlbmRMaW5lYXJHcmFkaWVudCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRvR3JhZGllbnQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShsaW5lYXJHcmFkaWVudC5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmcm9tR3JhZGllbnQtPmlzUmFk
aWFsR3JhZGllbnQoKSAmJiB0b0dyYWRpZW50LT5pc1JhZGlhbEdyYWRpZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPENTU1JhZGlhbEdyYWRpZW50VmFsdWU+IGxpbmVhckdyYWRp
ZW50ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZShm
cm9tR3JhZGllbnQpLT5ibGVuZFJhZGlhbEdyYWRpZW50KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICp0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodG9HcmFkaWVudCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGxpbmVhckdyYWRpZW50LmdldCgpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAo
ZnJvbS0+aXNDYWNoZWRJbWFnZSgpICYmIHRvLT5pc0NhY2hlZEltYWdlKCkpCiAgICAgICAgIHJl
dHVybiBjcm9zc2ZhZGVCbGVuZChhbmltLCBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZEltYWdlKj4o
ZnJvbSksIHN0YXRpY19jYXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPih0byksIHByb2dyZXNzKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210992</attachid>
            <date>2013-09-08 14:03:37 -0700</date>
            <delta_ts>2013-09-08 14:03:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>gradient-animation2.patch</filename>
            <type>text/plain</type>
            <size>24138</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCBmNjBhNjZiLi5iZWUw
MWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgogCiAjaW5jbHVk
ZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFw
cGluZ3MuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiR2VuZXJh
dG9yR2VuZXJhdGVkSW1hZ2UuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgpAQCAtOTYsMTggKzk4
LDIxIEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6c29ydFN0b3BzSWZOZWVkZWQoKQogc3RydWN0
IEdyYWRpZW50U3RvcCB7CiAgICAgQ29sb3IgY29sb3I7CiAgICAgZmxvYXQgb2Zmc2V0OwotICAg
IGJvb2wgc3BlY2lmaWVkOwogCiAgICAgR3JhZGllbnRTdG9wKCkKICAgICAgICAgOiBvZmZzZXQo
MCkKLSAgICAgICAgLCBzcGVjaWZpZWQoZmFsc2UpCiAgICAgeyB9CiB9OwogCitzdGF0aWMgTGVu
Z3RoIGNvbnZlcnRUb0xlbmd0aChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRl
clN0eWxlKiByb290U3R5bGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgRml4ZWRG
bG9hdENvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9u
IHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGUsIHJvb3RTdHlsZSwgc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKSk7Cit9CisKIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NT
R3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKIHsKICAgICBib29sIGRlcml2ZWQgPSBmYWxzZTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7ICsraSkKICAgICAgICAgaWYgKHN0eWxlUmVzb2x2
ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQobV9zdG9wc1tp
XS5tX2NvbG9yLmdldCgpKSkgewogICAgICAgICAgICAgbV9zdG9wc1tpXS5tX2NvbG9ySXNEZXJp
dmVkRnJvbUVsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgZGVyaXZlZCA9IHRydWU7CkBAIC0x
MjYsMjAgKzEzMSw0NyBAQCBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50
VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUgogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0LT5tX3N0b3Bz
LnNpemUoKTsgaSsrKQorICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCk7CisgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCk7CisgICAgdW5zaWduZWQgcHJldmlvdXNLbm93blBvc2l0aW9uID0gMDsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0LT5tX3N0b3BzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIHJlc3VsdC0+bV9zdG9wc1tpXS5tX3Jlc29sdmVkQ29sb3IgPSBzdHlsZVJlc29sdmVy
LT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShyZXN1bHQtPm1fc3RvcHNbaV0ubV9jb2xvci5nZXQo
KSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSA9IHJlc3VsdC0+bV9zdG9wc1tp
XS5tX3Bvc2l0aW9uLmdldCgpOworICAgICAgICBib29sIHBvc2l0aW9uS25vd24gPSB0cnVlOwor
ICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAvLyBUaGUgcG9zaXRpb24gb2YgdGhl
IGZpcnN0IGFuZCBsYXN0IGNvbG9yIHN0b3AgaXMgYWx3YXlzIGtub3duLgorICAgICAgICAgICAg
Ly8gT3RoZXIgcG9zaXRpb25zIG5lZWQgdG8gYmUgZGV0ZXJtaW5lZCBvbiB0aGUgbmV4dCBjb2xv
ciBzdG9wCisgICAgICAgICAgICAvLyB3aXRoIHNwZWNpZmllZCBwb3NpdGlvbi4KKyAgICAgICAg
ICAgIGlmIChpID09IDApCisgICAgICAgICAgICAgICAgcmVzdWx0LT5tX3N0b3BzW2ldLm1fcmVz
b2x2ZWRQb3NpdGlvbiA9IExlbmd0aCgwLCBQZXJjZW50KTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGkgPT0gcmVzdWx0LT5tX3N0b3BzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgcmVzdWx0
LT5tX3N0b3BzW2ldLm1fcmVzb2x2ZWRQb3NpdGlvbiA9IExlbmd0aCgxMDAsIFBlcmNlbnQpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBvc2l0aW9uS25vd24gPSBmYWxzZTsg
Ly8gQ29sb3Igc3RvcCBpbiB0aGUgbWlkZGxlIHdpdGhvdXQgcG9zaXRpb24uCisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgcmVzdWx0LT5tX3N0b3BzW2ldLm1fcmVzb2x2ZWRQb3NpdGlvbiA9
IGNvbnZlcnRUb0xlbmd0aChzdHlsZSwgcm9vdFN0eWxlLCB2YWx1ZSk7CisgICAgICAgIGlmICgh
cG9zaXRpb25Lbm93bikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1bnNpZ25lZCBz
dG9wc1dpdGhvdXRQb3NpdGlvbiA9IGkgLSBwcmV2aW91c0tub3duUG9zaXRpb247ICAgICAKKyAg
ICAgICAgaWYgKHN0b3BzV2l0aG91dFBvc2l0aW9uID4gMSkgeworICAgICAgICAgICAgLy8gV2Ug
ZmluYWxseSBoYXZlIHRoZSBuZXh0IHNwZWNpZmllZCBwb3NpdGlvbiwKKyAgICAgICAgICAgIC8v
IGNhbGN1bGF0ZSB0aGUgcHJldmlvdXNseSB1bmtub3duIHBvc2l0aW9ucy4KKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzdG9wc1dpdGhvdXRQb3NpdGlvbjsgKytqKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC0+bV9zdG9wc1tpIC0gal0ubV9yZXNvbHZlZFBvc2l0aW9uID0g
cmVzdWx0LT5tX3N0b3BzW2ldLm1fcmVzb2x2ZWRQb3NpdGlvbi5ibGVuZCgKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LT5tX3N0b3BzW3ByZXZpb3VzS25vd25Qb3NpdGlvbl0ubV9yZXNvbHZl
ZFBvc2l0aW9uLCAoZG91YmxlKShzdG9wc1dpdGhvdXRQb3NpdGlvbiAtIGopIC8gc3RvcHNXaXRo
b3V0UG9zaXRpb24pOworICAgICAgICB9CisgICAgICAgIHByZXZpb3VzS25vd25Qb3NpdGlvbiA9
IGk7CisgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgQ1NT
R3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50LCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBmbG9hdCBtYXhMZW5ndGhGb3JSZXBl
YXQpCit2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBncmFkaWVudCwg
ZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwotCiAgICAgaWYgKG1fZ3JhZGllbnRUeXBlID09IENTU0RlcHJlY2F0
ZWRMaW5lYXJHcmFkaWVudCB8fCBtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkUmFkaWFs
R3JhZGllbnQpIHsKICAgICAgICAgc29ydFN0b3BzSWZOZWVkZWQoKTsKIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
Y29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOwogCiAgICAgICAg
ICAgICBmbG9hdCBvZmZzZXQ7CkBAIC0xNTYsOTkgKzE4OCwyOCBAQCB2b2lkIENTU0dyYWRpZW50
VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBncmFkaWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgUmVuZAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2l6ZV90IG51bVN0b3BzID0g
bV9zdG9wcy5zaXplKCk7CisgICAgdW5zaWduZWQgbnVtU3RvcHMgPSBtX3N0b3BzLnNpemUoKTsK
IAogICAgIFZlY3RvcjxHcmFkaWVudFN0b3A+IHN0b3BzKG51bVN0b3BzKTsKIAotICAgIGZsb2F0
IGdyYWRpZW50TGVuZ3RoID0gMDsKLSAgICBib29sIGNvbXB1dGVkR3JhZGllbnRMZW5ndGggPSBm
YWxzZTsKLQogICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRTdGFydCA9IGdyYWRpZW50LT5wMCgpOwog
ICAgIEZsb2F0UG9pbnQgZ3JhZGllbnRFbmQ7CiAgICAgaWYgKGlzTGluZWFyR3JhZGllbnQoKSkK
ICAgICAgICAgZ3JhZGllbnRFbmQgPSBncmFkaWVudC0+cDEoKTsKICAgICBlbHNlIGlmIChpc1Jh
ZGlhbEdyYWRpZW50KCkpCiAgICAgICAgIGdyYWRpZW50RW5kID0gZ3JhZGllbnRTdGFydCArIEZs
b2F0U2l6ZShncmFkaWVudC0+ZW5kUmFkaXVzKCksIDApOworICAgIEZsb2F0U2l6ZSBncmFkaWVu
dFNpemUoZ3JhZGllbnRTdGFydCAtIGdyYWRpZW50RW5kKTsKKyAgICBmbG9hdCBncmFkaWVudExl
bmd0aCA9IGdyYWRpZW50U2l6ZS5kaWFnb25hbExlbmd0aCgpOwogCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IENTU0dyYWRpZW50Q29s
b3JTdG9wJiBzdG9wID0gbV9zdG9wc1tpXTsKLQotICAgICAgICBzdG9wc1tpXS5jb2xvciA9IHN0
b3AubV9yZXNvbHZlZENvbG9yOwotCi0gICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24pIHsKLSAg
ICAgICAgICAgIGlmIChzdG9wLm1fcG9zaXRpb24tPmlzUGVyY2VudGFnZSgpKQotICAgICAgICAg
ICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+Z2V0RmxvYXRWYWx1ZShD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpIC8gMTAwOwotICAgICAgICAgICAgZWxz
ZSBpZiAoc3RvcC5tX3Bvc2l0aW9uLT5pc0xlbmd0aCgpIHx8IHN0b3AubV9wb3NpdGlvbi0+aXND
YWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIGlmICgh
Y29tcHV0ZWRHcmFkaWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUg
Z3JhZGllbnRTaXplKGdyYWRpZW50U3RhcnQgLSBncmFkaWVudEVuZCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGdyYWRpZW50TGVuZ3RoID0gZ3JhZGllbnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZsb2F0IGxlbmd0aDsKLSAgICAgICAg
ICAgICAgICBpZiAoc3RvcC5tX3Bvc2l0aW9uLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgICAg
ICAgICBsZW5ndGggPSBzdG9wLm1fcG9zaXRpb24tPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxl
LCByb290U3R5bGUsIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwotICAgICAgICAgICAgICAgIGVs
c2UgCi0gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN0b3AubV9wb3NpdGlvbi0+Y3NzQ2Fs
Y1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlLCByb290U3R5bGUsIHN0eWxlLT5lZmZlY3RpdmVa
b29tKCkpLT5ldmFsdWF0ZShncmFkaWVudExlbmd0aCk7Ci0gICAgICAgICAgICAgICAgc3RvcHNb
aV0ub2Zmc2V0ID0gKGdyYWRpZW50TGVuZ3RoID4gMCkgPyBsZW5ndGggLyBncmFkaWVudExlbmd0
aCA6IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IDA7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBzdG9wc1tpXS5zcGVjaWZpZWQgPSB0cnVlOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGNvbG9yLXN0b3AgZG9lcyBub3Qg
aGF2ZSBhIHBvc2l0aW9uLCBpdHMgcG9zaXRpb24gZGVmYXVsdHMgdG8gMCUuCi0gICAgICAgICAg
ICAvLyBJZiB0aGUgbGFzdCBjb2xvci1zdG9wIGRvZXMgbm90IGhhdmUgYSBwb3NpdGlvbiwgaXRz
IHBvc2l0aW9uIGRlZmF1bHRzIHRvIDEwMCUuCi0gICAgICAgICAgICBpZiAoIWkpIHsKLSAgICAg
ICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgIHN0b3BzW2ld
LnNwZWNpZmllZCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG51bVN0b3BzID4gMSAm
JiBpID09IG51bVN0b3BzIC0gMSkgewotICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9
IDE7Ci0gICAgICAgICAgICAgICAgc3RvcHNbaV0uc3BlY2lmaWVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TdG9wczsg
KytpKSB7CisgICAgICAgIHN0b3BzW2ldLmNvbG9yID0gbV9zdG9wc1tpXS5tX3Jlc29sdmVkQ29s
b3I7CisgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IChncmFkaWVudExlbmd0aCA+IDApID8gZmxv
YXRWYWx1ZUZvckxlbmd0aChtX3N0b3BzW2ldLm1fcmVzb2x2ZWRQb3NpdGlvbiwgZ3JhZGllbnRM
ZW5ndGgpIC8gZ3JhZGllbnRMZW5ndGggOiAwOwogCiAgICAgICAgIC8vIElmIGEgY29sb3Itc3Rv
cCBoYXMgYSBwb3NpdGlvbiB0aGF0IGlzIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkIHBvc2l0aW9u
IG9mIGFueQogICAgICAgICAvLyBjb2xvci1zdG9wIGJlZm9yZSBpdCBpbiB0aGUgbGlzdCwgaXRz
IHBvc2l0aW9uIGlzIGNoYW5nZWQgdG8gYmUgZXF1YWwgdG8gdGhlCiAgICAgICAgIC8vIGxhcmdl
c3Qgc3BlY2lmaWVkIHBvc2l0aW9uIG9mIGFueSBjb2xvci1zdG9wIGJlZm9yZSBpdC4KLSAgICAg
ICAgaWYgKHN0b3BzW2ldLnNwZWNpZmllZCAmJiBpID4gMCkgewotICAgICAgICAgICAgc2l6ZV90
IHByZXZTcGVjaWZpZWRJbmRleDsKLSAgICAgICAgICAgIGZvciAocHJldlNwZWNpZmllZEluZGV4
ID0gaSAtIDE7IHByZXZTcGVjaWZpZWRJbmRleDsgLS1wcmV2U3BlY2lmaWVkSW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoc3RvcHNbcHJldlNwZWNpZmllZEluZGV4XS5zcGVjaWZpZWQpCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoc3RvcHNbaV0ub2Zmc2V0IDwgc3RvcHNbcHJldlNwZWNpZmllZEluZGV4XS5vZmZzZXQpCi0g
ICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gc3RvcHNbcHJldlNwZWNpZmllZEluZGV4
XS5vZmZzZXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlQoc3RvcHNbMF0uc3BlY2lm
aWVkICYmIHN0b3BzW251bVN0b3BzIC0gMV0uc3BlY2lmaWVkKTsKLQotICAgIC8vIElmIGFueSBj
b2xvci1zdG9wIHN0aWxsIGRvZXMgbm90IGhhdmUgYSBwb3NpdGlvbiwgdGhlbiwgZm9yIGVhY2gg
cnVuIG9mIGFkamFjZW50Ci0gICAgLy8gY29sb3Itc3RvcHMgd2l0aG91dCBwb3NpdGlvbnMsIHNl
dCB0aGVpciBwb3NpdGlvbnMgc28gdGhhdCB0aGV5IGFyZSBldmVubHkgc3BhY2VkCi0gICAgLy8g
YmV0d2VlbiB0aGUgcHJlY2VkaW5nIGFuZCBmb2xsb3dpbmcgY29sb3Itc3RvcHMgd2l0aCBwb3Np
dGlvbnMuCi0gICAgaWYgKG51bVN0b3BzID4gMikgewotICAgICAgICBzaXplX3QgdW5zcGVjaWZp
ZWRSdW5TdGFydCA9IDA7Ci0gICAgICAgIGJvb2wgaW5VbnNwZWNpZmllZFJ1biA9IGZhbHNlOwot
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkgewotICAgICAg
ICAgICAgaWYgKCFzdG9wc1tpXS5zcGVjaWZpZWQgJiYgIWluVW5zcGVjaWZpZWRSdW4pIHsKLSAg
ICAgICAgICAgICAgICB1bnNwZWNpZmllZFJ1blN0YXJ0ID0gaTsKLSAgICAgICAgICAgICAgICBp
blVuc3BlY2lmaWVkUnVuID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcHNbaV0u
c3BlY2lmaWVkICYmIGluVW5zcGVjaWZpZWRSdW4pIHsKLSAgICAgICAgICAgICAgICBzaXplX3Qg
dW5zcGVjaWZpZWRSdW5FbmQgPSBpOwotCi0gICAgICAgICAgICAgICAgaWYgKHVuc3BlY2lmaWVk
UnVuU3RhcnQgPCB1bnNwZWNpZmllZFJ1bkVuZCkgewotICAgICAgICAgICAgICAgICAgICBmbG9h
dCBsYXN0U3BlY2lmaWVkT2Zmc2V0ID0gc3RvcHNbdW5zcGVjaWZpZWRSdW5TdGFydCAtIDFdLm9m
ZnNldDsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgbmV4dFNwZWNpZmllZE9mZnNldCA9IHN0
b3BzW3Vuc3BlY2lmaWVkUnVuRW5kXS5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0
IGRlbHRhID0gKG5leHRTcGVjaWZpZWRPZmZzZXQgLSBsYXN0U3BlY2lmaWVkT2Zmc2V0KSAvICh1
bnNwZWNpZmllZFJ1bkVuZCAtIHVuc3BlY2lmaWVkUnVuU3RhcnQgKyAxKTsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gdW5zcGVjaWZpZWRSdW5TdGFydDsgaiA8IHVuc3Bl
Y2lmaWVkUnVuRW5kOyArK2opCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9wc1tqXS5vZmZz
ZXQgPSBsYXN0U3BlY2lmaWVkT2Zmc2V0ICsgKGogLSB1bnNwZWNpZmllZFJ1blN0YXJ0ICsgMSkg
KiBkZWx0YTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpblVuc3BlY2lm
aWVkUnVuID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGkg
PiAwICYmIHN0b3BzW2ldLm9mZnNldCA8IHN0b3BzW2kgLSAxXS5vZmZzZXQpCisgICAgICAgICAg
ICBzdG9wc1tpXS5vZmZzZXQgPSBzdG9wc1tpIC0gMV0ub2Zmc2V0OwogICAgIH0KIAogICAgIC8v
IElmIHRoZSBncmFkaWVudCBpcyByZXBlYXRpbmcsIHJlcGVhdCB0aGUgY29sb3Igc3RvcHMuCkBA
IC0yNjksMjMgKzIzMCwxOCBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRp
ZW50KiBncmFkaWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgICAgICAgICAg
Ly8gUmFkaWFsIGdyYWRpZW50cyBtYXkgbmVlZCB0byBleHRlbmQgZnVydGhlciB0aGFuIHRoZSBl
bmRwb2ludHMsIGJlY2F1c2UgdGhleSBoYXZlCiAgICAgICAgICAgICAvLyB0byByZXBlYXQgb3V0
IHRvIHRoZSBjb3JuZXJzIG9mIHRoZSBib3guCiAgICAgICAgICAgICBpZiAoaXNSYWRpYWxHcmFk
aWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb21wdXRlZEdyYWRpZW50TGVuZ3RoKSB7
Ci0gICAgICAgICAgICAgICAgICAgIEZsb2F0U2l6ZSBncmFkaWVudFNpemUoZ3JhZGllbnRTdGFy
dCAtIGdyYWRpZW50RW5kKTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRMZW5ndGggPSBn
cmFkaWVudFNpemUuZGlhZ29uYWxMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICB9Ci0KICAgICAg
ICAgICAgICAgICBpZiAobWF4TGVuZ3RoRm9yUmVwZWF0ID4gZ3JhZGllbnRMZW5ndGgpCiAgICAg
ICAgICAgICAgICAgICAgIG1heEV4dGVudCA9IG1heExlbmd0aEZvclJlcGVhdCAvIGdyYWRpZW50
TGVuZ3RoOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzaXplX3Qgb3JpZ2luYWxOdW1T
dG9wcyA9IG51bVN0b3BzOwotICAgICAgICAgICAgc2l6ZV90IG9yaWdpbmFsRmlyc3RTdG9wSW5k
ZXggPSAwOworICAgICAgICAgICAgdW5zaWduZWQgb3JpZ2luYWxOdW1TdG9wcyA9IG51bVN0b3Bz
OworICAgICAgICAgICAgdW5zaWduZWQgb3JpZ2luYWxGaXJzdFN0b3BJbmRleCA9IDA7CiAKICAg
ICAgICAgICAgIC8vIFdvcmsgYmFja3dhcmRzIGZyb20gdGhlIGZpcnN0LCBhZGRpbmcgc3RvcHMg
dW50aWwgd2UgZ2V0IG9uZSBiZWZvcmUgMC4KICAgICAgICAgICAgIGZsb2F0IGZpcnN0T2Zmc2V0
ID0gc3RvcHNbMF0ub2Zmc2V0OwogICAgICAgICAgICAgaWYgKGZpcnN0T2Zmc2V0ID4gMCkgewog
ICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJPZmZzZXQgPSBmaXJzdE9mZnNldDsKLSAgICAgICAg
ICAgICAgICBzaXplX3Qgc3JjU3RvcE9yZGluYWwgPSBvcmlnaW5hbE51bVN0b3BzIC0gMTsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzcmNTdG9wT3JkaW5hbCA9IG9yaWdpbmFsTnVtU3RvcHMg
LSAxOwogCiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAg
ICAgR3JhZGllbnRTdG9wIG5ld1N0b3AgPSBzdG9wc1tvcmlnaW5hbEZpcnN0U3RvcEluZGV4ICsg
c3JjU3RvcE9yZGluYWxdOwpAQCAtMzA1LDEwICsyNjEsMTAgQEAgdm9pZCBDU1NHcmFkaWVudFZh
bHVlOjphZGRTdG9wcyhHcmFkaWVudCogZ3JhZGllbnQsIFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IFJlbmQKICAgICAgICAgICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBzdG9wc1tzdG9wcy5zaXplKCkg
LSAxXS5vZmZzZXQ7CiAgICAgICAgICAgICBpZiAobGFzdE9mZnNldCA8IG1heEV4dGVudCkgewog
ICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJPZmZzZXQgPSBsYXN0T2Zmc2V0OwotICAgICAgICAg
ICAgICAgIHNpemVfdCBzcmNTdG9wT3JkaW5hbCA9IDA7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgc3JjU3RvcE9yZGluYWwgPSAwOwogCiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNyY1N0b3BJbmRleCA9IG9yaWdpbmFsRmlyc3RT
dG9wSW5kZXggKyBzcmNTdG9wT3JkaW5hbDsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c3JjU3RvcEluZGV4ID0gb3JpZ2luYWxGaXJzdFN0b3BJbmRleCArIHNyY1N0b3BPcmRpbmFsOwog
ICAgICAgICAgICAgICAgICAgICBHcmFkaWVudFN0b3AgbmV3U3RvcCA9IHN0b3BzW3NyY1N0b3BJ
bmRleF07CiAgICAgICAgICAgICAgICAgICAgIG5ld1N0b3Aub2Zmc2V0ID0gY3Vyck9mZnNldDsK
ICAgICAgICAgICAgICAgICAgICAgc3RvcHMuYXBwZW5kKG5ld1N0b3ApOwpAQCAtMzMyLDcgKzI4
OCw3IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50
LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAgICAgICBpZiAoZmlyc3RPZmZz
ZXQgIT0gbGFzdE9mZnNldCkgewogICAgICAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gbGFzdE9m
ZnNldCAtIGZpcnN0T2Zmc2V0OwogCi0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1TdG9wczsgKytpKQorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1TdG9wczsgKytpKQogICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQg
PSAoc3RvcHNbaV0ub2Zmc2V0IC0gZmlyc3RPZmZzZXQpIC8gc2NhbGU7CiAKICAgICAgICAgICAg
ICAgICBGbG9hdFBvaW50IHAwID0gZ3JhZGllbnQtPnAwKCk7CkBAIC0zNDEsNyArMjk3LDcgQEAg
dm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudCogZ3JhZGllbnQsIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgICAgICAgICBncmFkaWVudC0+c2V0UDEo
RmxvYXRQb2ludChwMS54KCkgKyAobGFzdE9mZnNldCAtIDEpICogKHAxLngoKSAtIHAwLngoKSks
IHAxLnkoKSArIChsYXN0T2Zmc2V0IC0gMSkgKiAocDEueSgpIC0gcDAueSgpKSkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBUaGVyZSdzIGEgc2luZ2xlIHBvc2l0
aW9uIHRoYXQgaXMgb3V0c2lkZSB0aGUgc2NhbGUsIGNsYW1wIHRoZSBwb3NpdGlvbnMgdG8gMS4K
LSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpCisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpCiAg
ICAgICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IDE7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSBpZiAoaXNSYWRpYWxHcmFkaWVudCgpKSB7CkBAIC0zNTEsOCArMzA3LDgg
QEAgdm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudCogZ3JhZGllbnQsIFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gbGFz
dE9mZnNldCAtIGZpcnN0T2Zmc2V0OwogCiAgICAgICAgICAgICAvLyBSZXNldCBwb2ludHMgYmVs
b3cgMCB0byB0aGUgZmlyc3QgdmlzaWJsZSBjb2xvci4KLSAgICAgICAgICAgIHNpemVfdCBmaXJz
dFplcm9PckdyZWF0ZXJJbmRleCA9IG51bVN0b3BzOwotICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1TdG9wczsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdFpl
cm9PckdyZWF0ZXJJbmRleCA9IG51bVN0b3BzOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoc3RvcHNbaV0u
b2Zmc2V0ID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RaZXJvT3JHcmVhdGVySW5k
ZXggPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2OSwxOCArMzI1LDE4IEBA
IHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50LCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAgICAgICAgICAgICAgIENvbG9yIGJsZW5k
ZWRDb2xvciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0uY29sb3Is
IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5jb2xvciwgaW50ZXJTdG9wUHJvcG9ydGlv
bik7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gQ2xhbXAgdGhlIHBvc2l0aW9ucyB0byAwIGFu
ZCBzZXQgdGhlIGNvbG9yLgotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OyArK2kpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IDA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9wc1tpXS5jb2xvciA9IGJsZW5kZWRDb2xvcjsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIEFsbCBzdG9wcyBhcmUgYmVsb3cgMDsganVzdCBjbGFtcCB0aGVtLgotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaXJzdFpl
cm9PckdyZWF0ZXJJbmRleDsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHNbaV0u
b2Zmc2V0ID0gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3RvcHM7ICsraSkKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKQogICAgICAgICAgICAgICAgIHN0
b3BzW2ldLm9mZnNldCAvPSBzY2FsZTsKIAogICAgICAgICAgICAgZ3JhZGllbnQtPnNldFN0YXJ0
UmFkaXVzKGdyYWRpZW50LT5zdGFydFJhZGl1cygpICogc2NhbGUpOwpAQCAtMzg4LDcgKzM0NCw3
IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50LCBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU3RvcHM7IGkrKykKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtU3RvcHM7ICsraSkKICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcChz
dG9wc1tpXS5vZmZzZXQsIHN0b3BzW2ldLmNvbG9yKTsKIAogICAgIGdyYWRpZW50LT5zZXRTdG9w
c1NvcnRlZCh0cnVlKTsKQEAgLTQ2OCw2ICs0MjQsMzQgQEAgYm9vbCBDU1NHcmFkaWVudFZhbHVl
Ojprbm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3QKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordm9pZCBDU1NHcmFkaWVudFZhbHVlOjpibGVuZENvbG9yU3RvcHMoY29uc3Qg
Q29sb3JTdG9wVmVjdG9yJiBmcm9tLCBjb25zdCBDb2xvclN0b3BWZWN0b3ImIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCit7CisgICAgQVNTRVJUKGZyb20uc2l6ZSgpID09IHRvLnNpemUoKSk7CisgICAg
bV9zdG9wcy5jbGVhcigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcm9tLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBmcm9tQ29sb3JT
dG9wID0gZnJvbVtpXTsKKyAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHRvQ29s
b3JTdG9wID0gdG9baV07CisgICAgICAgIENTU0dyYWRpZW50Q29sb3JTdG9wIGNvbG9yU3RvcDsK
KyAgICAgICAgY29sb3JTdG9wLm1fcmVzb2x2ZWRDb2xvciA9IGJsZW5kKGZyb21Db2xvclN0b3Au
bV9yZXNvbHZlZENvbG9yLCB0b0NvbG9yU3RvcC5tX3Jlc29sdmVkQ29sb3IsIHByb2dyZXNzKTsK
KyAgICAgICAgY29sb3JTdG9wLm1fY29sb3IgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29s
b3IoY29sb3JTdG9wLm1fcmVzb2x2ZWRDb2xvci5yZ2IoKSk7CisgICAgICAgIGNvbG9yU3RvcC5t
X3Jlc29sdmVkUG9zaXRpb24gPSB0b0NvbG9yU3RvcC5tX3Jlc29sdmVkUG9zaXRpb24uYmxlbmQo
ZnJvbUNvbG9yU3RvcC5tX3Jlc29sdmVkUG9zaXRpb24sIHByb2dyZXNzKTsKKyAgICAgICAgbV9z
dG9wcy5hcHBlbmQoY29sb3JTdG9wKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8Q1NTTGluZWFy
R3JhZGllbnRWYWx1ZT4gQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6YmxlbmQoY29uc3QgQ1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9ncmFkaWVudFR5cGUgPT0gQ1NTTGluZWFyR3JhZGllbnQpOworICAgIEFTU0VSVCh0by5t
X2dyYWRpZW50VHlwZSA9PSBDU1NMaW5lYXJHcmFkaWVudCk7CisgICAgQVNTRVJUKG1fcmVwZWF0
aW5nID09IHRvLm1fcmVwZWF0aW5nKTsKKyAgICBSZWZQdHI8Q1NTTGluZWFyR3JhZGllbnRWYWx1
ZT4gcmVzdWx0ID0gdG8uY2xvbmUoKTsKKyAgICByZXN1bHQtPmJsZW5kQ29sb3JTdG9wcyhtX3N0
b3BzLCB0by5tX3N0b3BzLCBwcm9ncmVzcyk7CisKKyAgICAvLyBGSVhNRTogSW50ZXJwb2xhdGUg
Z3JhZGllbnQgZGlyZWN0aW9uIGFzIHJlcXVlc3RlZCBieSBzcGVjLgorCisgICAgcmV0dXJuIHJl
c3VsdC5yZWxlYXNlKCk7Cit9CisKIFN0cmluZyBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjdXN0
b21DU1NUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKQEAgLTcwNCw3
ICs2ODgsNyBAQCBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpj
cmVhdGVHcmFkaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcgogICAgIFJlZlB0cjxHcmFkaWVudD4g
Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKGZpcnN0UG9pbnQsIHNlY29uZFBvaW50KTsKIAog
ICAgIC8vIE5vdyBhZGQgdGhlIHN0b3BzLgotICAgIGFkZFN0b3BzKGdyYWRpZW50LmdldCgpLCBy
ZW5kZXJlciwgcm9vdFN0eWxlLCAxKTsKKyAgICBhZGRTdG9wcyhncmFkaWVudC5nZXQoKSwgMSk7
CiAKICAgICByZXR1cm4gZ3JhZGllbnQucmVsZWFzZSgpOwogfQpAQCAtNzQxLDYgKzcyNSwxOSBA
QCBib29sIENTU0xpbmVhckdyYWRpZW50VmFsdWU6OmVxdWFscyhjb25zdCBDU1NMaW5lYXJHcmFk
aWVudFZhbHVlJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gZXF1YWxYb3JZICYmIG1fc3RvcHMg
PT0gb3RoZXIubV9zdG9wczsKIH0KIAorUGFzc1JlZlB0cjxDU1NSYWRpYWxHcmFkaWVudFZhbHVl
PiBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpibGVuZChjb25zdCBDU1NSYWRpYWxHcmFkaWVudFZh
bHVlJiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdAoreworICAgIEFTU0VSVChtX2dyYWRpZW50
VHlwZSA9PSBDU1NSYWRpYWxHcmFkaWVudCk7CisgICAgQVNTRVJUKHRvLm1fZ3JhZGllbnRUeXBl
ID09IENTU1JhZGlhbEdyYWRpZW50KTsKKyAgICBBU1NFUlQobV9yZXBlYXRpbmcgPT0gdG8ubV9y
ZXBlYXRpbmcpOworICAgIFJlZlB0cjxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPiByZXN1bHQgPSB0
by5jbG9uZSgpOworICAgIHJlc3VsdC0+YmxlbmRDb2xvclN0b3BzKG1fc3RvcHMsIHRvLm1fc3Rv
cHMsIHByb2dyZXNzKTsKKworICAgIC8vIEZJWE1FOiBJbnRlcnBvbGF0ZSBncmFkaWVudCBjZW50
ZXIgYXMgcmVxdWVzdGVkIGJ5IHNwZWMuCisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
K30KKwogU3RyaW5nIENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjb25z
dAogewogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwpAQCAtMTEyMCw3ICsxMTE3LDcgQEAgUGFz
c1JlZlB0cjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQo
UmVuZGVyT2JqZWN0KiByZW5kZXIKICAgICB9CiAKICAgICAvLyBOb3cgYWRkIHRoZSBzdG9wcy4K
LSAgICBhZGRTdG9wcyhncmFkaWVudC5nZXQoKSwgcmVuZGVyZXIsIHJvb3RTdHlsZSwgbWF4RXh0
ZW50KTsKKyAgICBhZGRTdG9wcyhncmFkaWVudC5nZXQoKSwgbWF4RXh0ZW50KTsKIAogICAgIHJl
dHVybiBncmFkaWVudC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFs
dWUuaAppbmRleCAzZjFlYzA0Li4zNGJiNDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVu
dFZhbHVlLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBZG9iZSBT
eXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCisjaW5jbHVk
ZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtNTAsNiArNTIsNyBAQCBzdHJ1Y3QgQ1NTR3JhZGllbnRDb2xvclN0b3Agewog
ICAgIENTU0dyYWRpZW50Q29sb3JTdG9wKCkgOiBtX2NvbG9ySXNEZXJpdmVkRnJvbUVsZW1lbnQo
ZmFsc2UpIHsgfTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcG9zaXRpb247IC8v
IHBlcmNlbnRhZ2Ugb3IgbGVuZ3RoCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2Nv
bG9yOworICAgIExlbmd0aCBtX3Jlc29sdmVkUG9zaXRpb247CiAgICAgQ29sb3IgbV9yZXNvbHZl
ZENvbG9yOwogICAgIGJvb2wgbV9jb2xvcklzRGVyaXZlZEZyb21FbGVtZW50OwogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDU1NHcmFkaWVudENvbG9yU3RvcCYgb3RoZXIpIGNvbnN0CkBAIC01
OSw2ICs2Miw4IEBAIHN0cnVjdCBDU1NHcmFkaWVudENvbG9yU3RvcCB7CiAgICAgfQogfTsKIAor
dHlwZWRlZiBWZWN0b3I8Q1NTR3JhZGllbnRDb2xvclN0b3AsIDI+IENvbG9yU3RvcFZlY3RvcjsK
KwogY2xhc3MgQ1NTR3JhZGllbnRWYWx1ZSA6IHB1YmxpYyBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
IHsKIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZShSZW5kZXJPYmplY3QqLCBj
b25zdCBJbnRTaXplJik7CkBAIC04MSw2ICs4NiwxMSBAQCBwdWJsaWM6CiAKICAgICBDU1NHcmFk
aWVudFR5cGUgZ3JhZGllbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudFR5cGU7IH0K
IAorICAgIGJvb2wgaXNEZXByZWNhdGVkR3JhZGllbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZ3JhZGllbnRUeXBlICE9IENTU0xpbmVhckdyYWRpZW50ICYmIG1fZ3JhZGllbnRU
eXBlICE9IENTU1JhZGlhbEdyYWRpZW50OworICAgIH0KKwogICAgIGJvb2wgaXNGaXhlZFNpemUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIEludFNpemUgZml4ZWRTaXplKGNvbnN0IFJl
bmRlck9iamVjdCopIGNvbnN0IHsgcmV0dXJuIEludFNpemUoKTsgfQogCkBAIC0xMTIsMTAgKzEy
MiwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgYWRkU3RvcHMoR3Jh
ZGllbnQqLCBSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBmbG9hdCBtYXhM
ZW5ndGhGb3JSZXBlYXQgPSAwKTsKKyAgICB2b2lkIGFkZFN0b3BzKEdyYWRpZW50KiwgZmxvYXQg
bWF4TGVuZ3RoRm9yUmVwZWF0ID0gMCk7CiAKICAgICAvLyBSZXNvbHZlIHBvaW50cy9yYWRpaSB0
byBmcm9udCBlbmQgdmFsdWVzLgogICAgIEZsb2F0UG9pbnQgY29tcHV0ZUVuZFBvaW50KENTU1By
aW1pdGl2ZVZhbHVlKiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0
eWxlKiByb290U3R5bGUsIGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIGJsZW5kQ29sb3JTdG9w
cyhjb25zdCBDb2xvclN0b3BWZWN0b3ImIGZyb20sIGNvbnN0IENvbG9yU3RvcFZlY3RvciYgdG8s
IGRvdWJsZSk7CiAKICAgICBib29sIGlzQ2FjaGVhYmxlKCkgY29uc3Q7CiAKQEAgLTEyNyw3ICsx
MzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3NlY29u
ZFk7CiAKICAgICAvLyBTdG9wcwotICAgIFZlY3RvcjxDU1NHcmFkaWVudENvbG9yU3RvcCwgMj4g
bV9zdG9wczsKKyAgICBDb2xvclN0b3BWZWN0b3IgbV9zdG9wczsKICAgICBib29sIG1fc3RvcHNT
b3J0ZWQ7CiAgICAgQ1NTR3JhZGllbnRUeXBlIG1fZ3JhZGllbnRUeXBlOwogICAgIGJvb2wgbV9y
ZXBlYXRpbmc7CkBAIC0xNTUsNiArMTY2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGJvb2wg
ZXF1YWxzKGNvbnN0IENTU0xpbmVhckdyYWRpZW50VmFsdWUmKSBjb25zdDsKKyAgICBQYXNzUmVm
UHRyPENTU0xpbmVhckdyYWRpZW50VmFsdWU+IGJsZW5kKGNvbnN0IENTU0xpbmVhckdyYWRpZW50
VmFsdWUmLCBkb3VibGUpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENTU0xpbmVhckdyYWRpZW50
VmFsdWUoQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0LCBDU1NHcmFkaWVudFR5cGUgZ3JhZGllbnRU
eXBlID0gQ1NTTGluZWFyR3JhZGllbnQpCkBAIC0xOTgsNiArMjEwLDcgQEAgcHVibGljOgogICAg
IFBhc3NSZWZQdHI8R3JhZGllbnQ+IGNyZWF0ZUdyYWRpZW50KFJlbmRlck9iamVjdCosIGNvbnN0
IEludFNpemUmKTsKIAogICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU1JhZGlhbEdyYWRpZW50VmFs
dWUmKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPENTU1JhZGlhbEdyYWRpZW50VmFsdWU+IGJsZW5k
KGNvbnN0IENTU1JhZGlhbEdyYWRpZW50VmFsdWUmLCBkb3VibGUpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIENTU1JhZGlhbEdyYWRpZW50VmFsdWUoQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0LCBD
U1NHcmFkaWVudFR5cGUgZ3JhZGllbnRUeXBlID0gQ1NTUmFkaWFsR3JhZGllbnQpCkBAIC0yMzIs
NiArMjQ1LDI0IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2Vu
ZFZlcnRpY2FsU2l6ZTsKIH07CiAKK2lubGluZSBDU1NHcmFkaWVudFZhbHVlKiB0b0NTU0dyYWRp
ZW50VmFsdWUoQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXZhbHVlIHx8IHZhbHVlLT5pc0dyYWRpZW50VmFsdWUo
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU0dyYWRpZW50VmFsdWUqPih2YWx1ZSk7Cit9
CisKK2lubGluZSBDU1NMaW5lYXJHcmFkaWVudFZhbHVlKiB0b0NTU0xpbmVhckdyYWRpZW50VmFs
dWUoQ1NTR3JhZGllbnRWYWx1ZSogZ3JhZGllbnQpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oIWdyYWRpZW50IHx8IGdyYWRpZW50LT5pc0xpbmVhckdyYWRpZW50KCkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlKj4oZ3JhZGll
bnQpOworfQorCitpbmxpbmUgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSogdG9DU1NSYWRpYWxHcmFk
aWVudFZhbHVlKENTU0dyYWRpZW50VmFsdWUqIGdyYWRpZW50KQoreworICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFncmFkaWVudCB8fCBncmFkaWVudC0+aXNSYWRpYWxHcmFk
aWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZSo+
KGdyYWRpZW50KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ1NT
R3JhZGllbnRWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggMDlmNjJhOC4uOWNiYjFkNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0
aW9uLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NT
RmlsdGVySW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0dyYWRpZW50VmFsdWUuaCIKICNpbmNs
dWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCkBAIC0zMjgsOCArMzI5LDI3IEBAIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0
aW9uQmFzZSogYW5pbSwgU3R5bGVJCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0eWxlR2VuZXJh
dGVkSW1hZ2U6OmNyZWF0ZSh0b0Nyb3NzZmFkZS5ibGVuZChmcm9tQ3Jvc3NmYWRlLCBwcm9ncmVz
cykuZ2V0KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBhbmltYXRpb24gYmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2CisgICAgICAg
IGlmIChmcm9tR2VuZXJhdGVkLT5pc0dyYWRpZW50VmFsdWUoKSAmJiB0b0dlbmVyYXRlZC0+aXNH
cmFkaWVudFZhbHVlKCkpIHsKKyAgICAgICAgICAgIENTU0dyYWRpZW50VmFsdWUmIGZyb21HcmFk
aWVudCA9ICp0b0NTU0dyYWRpZW50VmFsdWUoZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBD
U1NHcmFkaWVudFZhbHVlJiB0b0dyYWRpZW50ID0gKnRvQ1NTR3JhZGllbnRWYWx1ZSh0b0dlbmVy
YXRlZCk7CisgICAgICAgICAgICAvLyBHcmFkaWVudHMgbXVzdCBoYXZlIHRoZSBzYW1lIGZ1bmN0
aW9uIG5hbWUgYW5kIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YKKyAgICAgICAgICAgIC8v
IGNvbG9yIHN0b3BzIGFjY29yZGluZyB0byB0aGUgc3BlYy4gTm8gc3VwcG9ydCBvZiBkZXByZWNh
dGVkIGdyYWRpZW50cy4KKyAgICAgICAgICAgIGlmIChmcm9tR3JhZGllbnQuaXNSZXBlYXRpbmco
KSA9PSB0b0dyYWRpZW50LmlzUmVwZWF0aW5nKCkKKyAgICAgICAgICAgICAgICAmJiBmcm9tR3Jh
ZGllbnQuc3RvcENvdW50KCkgPT0gdG9HcmFkaWVudC5zdG9wQ291bnQoKQorICAgICAgICAgICAg
ICAgICYmIGZyb21HcmFkaWVudC5ncmFkaWVudFR5cGUoKSA9PSB0b0dyYWRpZW50LmdyYWRpZW50
VHlwZSgpCisgICAgICAgICAgICAgICAgJiYgIWZyb21HcmFkaWVudC5pc0RlcHJlY2F0ZWRHcmFk
aWVudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZyb21HcmFkaWVudC5pc0xpbmVhckdyYWRp
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU0xpbmVhckdyYWRpZW50VmFs
dWU+IGxpbmVhckdyYWRpZW50ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRvQ1NTTGluZWFy
R3JhZGllbnRWYWx1ZSgmZnJvbUdyYWRpZW50KS0+YmxlbmQoKnRvQ1NTTGluZWFyR3JhZGllbnRW
YWx1ZSgmdG9HcmFkaWVudCksIHByb2dyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShsaW5lYXJHcmFkaWVudC5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmcm9tR3JhZGllbnQuaXNSYWRpYWxH
cmFkaWVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NSYWRpYWxHcmFkaWVu
dFZhbHVlPiBsaW5lYXJHcmFkaWVudCA9CisgICAgICAgICAgICAgICAgICAgICAgICB0b0NTU1Jh
ZGlhbEdyYWRpZW50VmFsdWUoJmZyb21HcmFkaWVudCktPmJsZW5kKCp0b0NTU1JhZGlhbEdyYWRp
ZW50VmFsdWUoJnRvR3JhZGllbnQpLCBwcm9ncmVzcyk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUobGluZWFyR3JhZGllbnQuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKICAgICB9IGVsc2UgaWYgKGZyb20tPmlzR2VuZXJhdGVkSW1hZ2UoKSAmJiB0
by0+aXNDYWNoZWRJbWFnZSgpKSB7CiAgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIGZy
b21HZW5lcmF0ZWQgPSB0b1N0eWxlR2VuZXJhdGVkSW1hZ2UoZnJvbSktPmltYWdlVmFsdWUoKTsK
QEAgLTMzOCw2ICszNTgsNyBAQCBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
YmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIFN0eWxlSQogICAgICAgICAgICAg
aWYgKGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZElt
YWdlKj4odG8pLT5jYWNoZWRJbWFnZSgpID09IGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJ
bWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgRmlsdGVyT3BlcmF0aW9ucygp
LCBwcm9ncmVzcyk7CiAgICAgICAgIH0KKwogICAgICAgICAvLyBGSVhNRTogQWRkIGludGVycG9s
YXRpb24gYmV0d2VlbiBjcm9zcy1mYWRlIGFuZCBpbWFnZSBzb3VyY2UuCiAgICAgfSBlbHNlIGlm
IChmcm9tLT5pc0NhY2hlZEltYWdlKCkgJiYgdG8tPmlzR2VuZXJhdGVkSW1hZ2UoKSkgewogICAg
ICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiB0b0dlbmVyYXRlZCA9IHRvU3R5bGVHZW5lcmF0
ZWRJbWFnZSh0byktPmltYWdlVmFsdWUoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>