<?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>156659</bug_id>
          
          <creation_ts>2016-04-16 04:40:32 -0700</creation_ts>
          <short_desc>CSSCursorImageValue shouldn&apos;t mutate element during style resolution</short_desc>
          <delta_ts>2016-04-16 10:54:47 -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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1184346</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-16 04:40:32 -0700</bug_when>
    <thetext>CSSCursorImageValue::updateIfSVGCursorIsUsed may mutate the argument element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184347</commentid>
    <comment_count>1</comment_count>
      <attachid>276553</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-16 06:54:15 -0700</bug_when>
    <thetext>Created attachment 276553
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184365</commentid>
    <comment_count>2</comment_count>
      <attachid>276558</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-16 10:01:14 -0700</bug_when>
    <thetext>Created attachment 276558
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184367</commentid>
    <comment_count>3</comment_count>
      <attachid>276558</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-16 10:15:53 -0700</bug_when>
    <thetext>Comment on attachment 276558
patch

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

I would probably refer to these as &quot;cursor elements&quot; rather than &quot;SVG cursor elements&quot; even more consistently in the code. Names like m_cursorElements and updateCursorElement would be nicer than m_svgCursorElements and updateSVGCursorElement. Type would still make it clear it’s specific to SVG.

&gt; Source/WebCore/css/CSSCursorImageValue.cpp:91
&gt; +    auto* svgCursorElement = downcast&lt;SVGCursorElement&gt;(element);

I would use a reference:

    auto&amp; svgCursorElement = downcast&lt;SVGCursorElement&gt;(*element);

&gt; Source/WebCore/css/CSSCursorImageValue.cpp:110
&gt; +    SVGLengthContext lengthContext(0);

Should be nullptr rather than 0.

&gt; Source/WebCore/css/CSSCursorImageValue.cpp:112
&gt; +    float x = roundf(cursorElement.x().value(lengthContext));

I suggest using std::round instead of roundf. Also not sure if rounding is correct. Also wondering if we should clamp to the size of the image.

&gt; Source/WebCore/css/CSSCursorImageValue.cpp:115
&gt; +    float y = roundf(cursorElement.y().value(lengthContext));

Ditto.

&gt; Source/WebCore/css/CSSCursorImageValue.h:-78
&gt; +    HashSet&lt;SVGCursorElement*&gt; m_svgCursorElements;
&gt;  
&gt; -    HashSet&lt;SVGElement*&gt; m_referencedElements;

There’s a stray blank line here. I suggest removing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184372</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-04-16 10:54:47 -0700</bug_when>
    <thetext>http://trac.webkit.org</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276553</attachid>
            <date>2016-04-16 06:54:15 -0700</date>
            <delta_ts>2016-04-16 10:01:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>svg-cursor.patch</filename>
            <type>text/plain</type>
            <size>21149</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTYyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE2LTA0LTE2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDU1NDdXJzb3JJbWFnZVZhbHVl
IHNob3VsZG4ndCBtdXRhdGUgZWxlbWVudCBkdXJpbmcgc3R5bGUgcmVzb2x1dGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NjU5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZTo6dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQgbWF5IG11dGF0ZSB0aGUgYXJndW1lbnQgZWxl
bWVudC4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlIGNvZGUgdGhhdCBjYWNoZXMg
Y3Vyc29yIGVsZW1lbnQgYW5kIGltYWdlIHRvIFNWR0VsZW1lbnQgcmFyZSBkYXRhLgorICAgICAg
ICBUaGUgd2hvbGUgdGhpbmdzIGlzIGJhc2ljYWxseSB1bnVzZWQuIENTU0N1cnNvckltYWdlVmFs
dWUgbm93IG1haW50YWlucyBhIHdlYWsgbWFwIHRvCisgICAgICAgIFNWR0N1cnNvckVsZW1lbnRz
IGRpcmVjdGx5IGluc3RlYWQgb2YgaW5kaXJlY3RseSB2aWEgdGhlIHVzaW5nIFNWR0VsZW1lbnRz
LgorCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZhbHVlOjp+Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZhbHVlOjpjdXN0b21DU1NUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OnVwZGF0ZVNWR0N1cnNvcik6CisK
KyAgICAgICAgICAgIFdlIG5vIGxvbmdlciByZWx5IG9uIFNWR0VsZW1lbnQgcmFyZSBkYXRhIHNv
IG5vIG5lZWQgdG8gdGVzdCBmb3IgU1ZHRWxlbWVudC4KKworICAgICAgICAoV2ViQ29yZTo6Q1NT
Q3Vyc29ySW1hZ2VWYWx1ZTo6Y3Vyc29yRWxlbWVudFJlbW92ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y3Vyc29yRWxlbWVudENoYW5nZWQpOgorCisgICAgICAg
ICAgICBGYWN0b3IgdG8gYSBmdW5jdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6Q1NTQ3Vyc29y
SW1hZ2VWYWx1ZTo6Y2FjaGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3Vyc29ySW1h
Z2VWYWx1ZTo6Y2xlYXJDYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJ
bWFnZVZhbHVlOjplcXVhbHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1
ZTo6cmVtb3ZlUmVmZXJlbmNlZEVsZW1lbnQpOiBEZWxldGVkLgorCisgICAgICAgICAgICBEb24n
dCB0cmFjayBjbGllbnQgZWxlbWVudHMgYW55bW9yZS4gSnVzdCB0cmFjayByZWZlcmVuY2VkIFNW
R0N1cnNvckVsZW1lbnRzLgorCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoK
KyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXJzb3IpOgorCisgICAgICAgICAgICBObyBu
ZWVkIHRvIG1ha2Ugc3R5bGUgdW5pcXVlLgorCisgICAgICAgICogc3ZnL1NWR0N1cnNvckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6flNWR0N1cnNvckVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6aXNTdXBwb3J0ZWRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6YWRkQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0N1cnNvckVsZW1lbnQ6OnJlbW92ZUNsaWVudCk6CisKKyAg
ICAgICAgICAgIENsaWVudCBpcyBub3cgYW4gQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSByYXRoZXIgdGhh
biBTVkdFbGVtZW50LgorCisgICAgICAgIChXZWJDb3JlOjpTVkdDdXJzb3JFbGVtZW50OjpzdmdB
dHRyaWJ1dGVDaGFuZ2VkKToKKworICAgICAgICAgICAgSW5zdGVhZCBvZiBpbnZhbGlkYXRpbmcg
ZWxlbWVudCBzdHlsZSBqdXN0IGludmFsaWRhdGUgdGhlIENTU0N1cnNvckltYWdlVmFsdWUgZGly
ZWN0bHkuCisKKyAgICAgICAgKFdlYkNvcmU6OlNWR0N1cnNvckVsZW1lbnQ6OmFkZFN1YnJlc291
cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDdXJzb3JFbGVtZW50Ojpy
ZW1vdmVSZWZlcmVuY2VkRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL1NWR0N1cnNv
ckVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdFbGVtZW50Ojp+U1ZHRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50OjpnZXRCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpjb3Jy
ZXNwb25kaW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpzZXRDdXJz
b3JFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmN1cnNv
ckVsZW1lbnRSZW1vdmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6
OnNldEN1cnNvckltYWdlVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxl
bWVudDo6Y3Vyc29ySW1hZ2VWYWx1ZVJlbW92ZWQpOiBEZWxldGVkLgorCisgICAgICAgICAgICBT
VkdFbGVtZW50cyBubyBsb25nZXQga25vdyBhYm91dCB0aGVpciBjdXJzb3JzLgorCisgICAgICAg
ICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6Omluc3RhbmNlVXBkYXRlc0Js
b2NrZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudFJhcmVEYXRhOjpzZXRJbnN0YW5j
ZVVwZGF0ZXNCbG9ja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0YTo6
Y29ycmVzcG9uZGluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudFJhcmVE
YXRhOjpzZXRDb3JyZXNwb25kaW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50UmFyZURhdGE6OmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmVuc3VyZUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmN1cnNvckVsZW1lbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudFJhcmVEYXRhOjpzZXRDdXJz
b3JFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRSYXJlRGF0
YTo6Y3Vyc29ySW1hZ2VWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50UmFyZURhdGE6OnNldEN1cnNvckltYWdlVmFsdWUpOiBEZWxldGVkLgorCiAyMDE2LTA0LTE1
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1Y2UgdXNlIG9m
IERlcHJlY2F0ZWQ6OlNjcmlwdFhYWCBjbGFzc2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAxOTk0MTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIFNWR0N1cnNv
ckVsZW1lbnQqIHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudChjb25zdCBTdHJpbmcm
IHVybCwgRG9jdW1lbnQmIGRvY3VtZW50KQorc3RhdGljIGlubGluZSBTVkdDdXJzb3JFbGVtZW50
KiByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1lbnQoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gU1ZHVVJJ
UmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyh1cmwsIGRvY3VtZW50KTsKICAg
ICBpZiAoaXM8U1ZHQ3Vyc29yRWxlbWVudD4oZWxlbWVudCkpCkBAIC01OCw3ICs1OCw2IEBAIENT
U0N1cnNvckltYWdlVmFsdWU6OkNTU0N1cnNvckltYWdlVmFsdWUKICAgICAsIG1faW1hZ2VWYWx1
ZShXVEZNb3ZlKGltYWdlVmFsdWUpKQogICAgICwgbV9oYXNIb3RTcG90KGhhc0hvdFNwb3QpCiAg
ICAgLCBtX2hvdFNwb3QoaG90U3BvdCkKLSAgICAsIG1fYWNjZXNzZWRJbWFnZShmYWxzZSkKIHsK
IH0KIApAQCAtNzIsMTggKzcxLDggQEAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6fkNTU0N1cnNvcklt
YWdlVmFsdQogewogICAgIGRldGFjaFBlbmRpbmdJbWFnZSgpOwogCi0gICAgaWYgKCFpc1NWR0N1
cnNvcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3JlZmVyZW5jZWRFbGVtZW50cy5iZWdpbigpOwotICAgIEhhc2hT
ZXQ8U1ZHRWxlbWVudCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JlZmVyZW5jZWRFbGVtZW50
cy5lbmQoKTsKLQotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHRWxl
bWVudCogcmVmZXJlbmNlZEVsZW1lbnQgPSAqaXQ7Ci0gICAgICAgIHJlZmVyZW5jZWRFbGVtZW50
LT5jdXJzb3JJbWFnZVZhbHVlUmVtb3ZlZCgpOwotICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVu
dCogY3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudChkb3du
Y2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLnVybCgpLCByZWZlcmVuY2Vk
RWxlbWVudC0+ZG9jdW1lbnQoKSkpCi0gICAgICAgICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVD
bGllbnQocmVmZXJlbmNlZEVsZW1lbnQpOwotICAgIH0KKyAgICBmb3IgKGF1dG8qIGVsZW1lbnQg
OiBtX3N2Z0N1cnNvckVsZW1lbnRzKQorICAgICAgICBlbGVtZW50LT5yZW1vdmVDbGllbnQoKnRo
aXMpOwogfQogCiBTdHJpbmcgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNv
bnN0CkBAIC05OSwzNSArODgsMzcgQEAgU3RyaW5nIENTU0N1cnNvckltYWdlVmFsdWU6OmN1c3Rv
bUNTU1RleAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotYm9vbCBDU1NDdXJz
b3JJbWFnZVZhbHVlOjp1cGRhdGVJZlNWR0N1cnNvcklzVXNlZChFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBDU1NDdXJzb3JJbWFnZVZhbHVlOjp1cGRhdGVTVkdDdXJzb3IoY29uc3QgRG9jdW1lbnQm
IGRvY3VtZW50KQogewotICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNTVkdFbGVtZW50
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGlmICghaXNTVkdDdXJzb3IoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoU1ZHQ3Vyc29y
RWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVu
dChkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLnVybCgpLCBlbGVt
ZW50LT5kb2N1bWVudCgpKSkgewotICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIG92ZXJyaWRl
IGhvdCBzcG90IHNwZWNpZmllZCBpbiBDU1MsIHdoaWNoIGlzIHByb2JhYmx5IGluY29ycmVjdC4K
LSAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KDApOwotICAgICAgICBtX2hh
c0hvdFNwb3QgPSB0cnVlOwotICAgICAgICBmbG9hdCB4ID0gcm91bmRmKGN1cnNvckVsZW1lbnQt
PngoKS52YWx1ZShsZW5ndGhDb250ZXh0KSk7Ci0gICAgICAgIG1faG90U3BvdC5zZXRYKHN0YXRp
Y19jYXN0PGludD4oeCkpOwotCi0gICAgICAgIGZsb2F0IHkgPSByb3VuZGYoY3Vyc29yRWxlbWVu
dC0+eSgpLnZhbHVlKGxlbmd0aENvbnRleHQpKTsKLSAgICAgICAgbV9ob3RTcG90LnNldFkoc3Rh
dGljX2Nhc3Q8aW50Pih5KSk7Ci0KLSAgICAgICAgaWYgKGNhY2hlZEltYWdlVVJMKCkgIT0gZWxl
bWVudC0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChjdXJzb3JFbGVtZW50LT5ocmVmKCkpKQotICAg
ICAgICAgICAgY2xlYXJDYWNoZWRJbWFnZSgpOwotCi0gICAgICAgIFNWR0VsZW1lbnQmIHN2Z0Vs
ZW1lbnQgPSBkb3duY2FzdDxTVkdFbGVtZW50PigqZWxlbWVudCk7Ci0gICAgICAgIG1fcmVmZXJl
bmNlZEVsZW1lbnRzLmFkZCgmc3ZnRWxlbWVudCk7Ci0gICAgICAgIHN2Z0VsZW1lbnQuc2V0Q3Vy
c29ySW1hZ2VWYWx1ZSh0aGlzKTsKLSAgICAgICAgY3Vyc29yRWxlbWVudC0+YWRkQ2xpZW50KCZz
dmdFbGVtZW50KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGF1dG8qIHN2Z0N1
cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1lbnQoZG93bmNhc3Q8
Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSwgZG9jdW1lbnQpOworICAg
IGlmICghc3ZnQ3Vyc29yRWxlbWVudCB8fCAhbV9zdmdDdXJzb3JFbGVtZW50cy5hZGQoc3ZnQ3Vy
c29yRWxlbWVudCkuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIGZh
bHNlOworICAgIGN1cnNvckVsZW1lbnRDaGFuZ2VkKCpzdmdDdXJzb3JFbGVtZW50KTsKKyAgICBz
dmdDdXJzb3JFbGVtZW50LT5hZGRDbGllbnQoKnRoaXMpOworfQorCit2b2lkIENTU0N1cnNvcklt
YWdlVmFsdWU6OmN1cnNvckVsZW1lbnRSZW1vdmVkKFNWR0N1cnNvckVsZW1lbnQmIGN1cnNvckVs
ZW1lbnQpCit7CisgICAgbV9zdmdDdXJzb3JFbGVtZW50cy5yZW1vdmUoJmN1cnNvckVsZW1lbnQp
OworICAgIGNsZWFyQ2FjaGVkSW1hZ2UoKTsKK30KKwordm9pZCBDU1NDdXJzb3JJbWFnZVZhbHVl
OjpjdXJzb3JFbGVtZW50Q2hhbmdlZChTVkdDdXJzb3JFbGVtZW50JiBjdXJzb3JFbGVtZW50KQor
eworICAgIGNsZWFyQ2FjaGVkSW1hZ2UoKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgb3Zl
cnJpZGUgaG90IHNwb3Qgc3BlY2lmaWVkIGluIENTUywgd2hpY2ggaXMgcHJvYmFibHkgaW5jb3Jy
ZWN0LgorICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dCgwKTsKKyAgICBtX2hhc0hv
dFNwb3QgPSB0cnVlOworICAgIGZsb2F0IHggPSByb3VuZGYoY3Vyc29yRWxlbWVudC54KCkudmFs
dWUobGVuZ3RoQ29udGV4dCkpOworICAgIG1faG90U3BvdC5zZXRYKHN0YXRpY19jYXN0PGludD4o
eCkpOworCisgICAgZmxvYXQgeSA9IHJvdW5kZihjdXJzb3JFbGVtZW50LnkoKS52YWx1ZShsZW5n
dGhDb250ZXh0KSk7CisgICAgbV9ob3RTcG90LnNldFkoc3RhdGljX2Nhc3Q8aW50Pih5KSk7CiB9
CiAKIFN0eWxlSW1hZ2UqIENTU0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKENhY2hlZFJl
c291cmNlTG9hZGVyJiBsb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9u
cykKQEAgLTIwNSwxMSArMTk2LDYgQEAgdm9pZCBDU1NDdXJzb3JJbWFnZVZhbHVlOjpjbGVhckNh
Y2hlZEltYQogICAgIG1fYWNjZXNzZWRJbWFnZSA9IGZhbHNlOwogfQogCi12b2lkIENTU0N1cnNv
ckltYWdlVmFsdWU6OnJlbW92ZVJlZmVyZW5jZWRFbGVtZW50KFNWR0VsZW1lbnQqIGVsZW1lbnQp
Ci17Ci0gICAgbV9yZWZlcmVuY2VkRWxlbWVudHMucmVtb3ZlKGVsZW1lbnQpOwotfQotCiBib29s
IENTU0N1cnNvckltYWdlVmFsdWU6OmVxdWFscyhjb25zdCBDU1NDdXJzb3JJbWFnZVZhbHVlJiBv
dGhlcikgY29uc3QKIHsKICAgICByZXR1cm4gbV9oYXNIb3RTcG90ID8gb3RoZXIubV9oYXNIb3RT
cG90ICYmIG1faG90U3BvdCA9PSBvdGhlci5tX2hvdFNwb3QgOiAhb3RoZXIubV9oYXNIb3RTcG90
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmgJKHJldmlzaW9u
IDE5OTQxNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CitjbGFzcyBTVkdDdXJzb3JFbGVtZW50OwogY2xh
c3MgU1ZHRWxlbWVudDsKIAogY2xhc3MgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSA6IHB1YmxpYyBDU1NW
YWx1ZSB7CkBAIC01MSw3ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjdXN0b21DU1NU
ZXh0KCkgY29uc3Q7CiAKLSAgICBib29sIHVwZGF0ZUlmU1ZHQ3Vyc29ySXNVc2VkKEVsZW1lbnQq
KTsKKyAgICB2b2lkIHVwZGF0ZVNWR0N1cnNvcihjb25zdCBEb2N1bWVudCYpOwogICAgIFN0eWxl
SW1hZ2UqIGNhY2hlZEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VM
b2FkZXJPcHRpb25zJik7CiAgICAgU3R5bGVJbWFnZSogY2FjaGVkT3JQZW5kaW5nSW1hZ2UoRG9j
dW1lbnQmKTsKIApAQCAtNTksNiArNjAsOSBAQCBwdWJsaWM6CiAKICAgICBib29sIGVxdWFscyhj
b25zdCBDU1NDdXJzb3JJbWFnZVZhbHVlJikgY29uc3Q7CiAKKyAgICB2b2lkIGN1cnNvckVsZW1l
bnRSZW1vdmVkKFNWR0N1cnNvckVsZW1lbnQmKTsKKyAgICB2b2lkIGN1cnNvckVsZW1lbnRDaGFu
Z2VkKFNWR0N1cnNvckVsZW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBDU1NDdXJzb3JJbWFnZVZh
bHVlKFJlZjxDU1NWYWx1ZT4mJiBpbWFnZVZhbHVlLCBib29sIGhhc0hvdFNwb3QsIGNvbnN0IElu
dFBvaW50JiBob3RTcG90KTsKIApAQCAtNzMsOSArNzcsOSBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9oYXNIb3RTcG90OwogICAgIEludFBvaW50IG1faG90U3BvdDsKICAgICBSZWZQdHI8U3R5bGVJ
bWFnZT4gbV9pbWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsKKyAgICBib29sIG1fYWNj
ZXNzZWRJbWFnZSB7IGZhbHNlIH07CisgICAgSGFzaFNldDxTVkdDdXJzb3JFbGVtZW50Kj4gbV9z
dmdDdXJzb3JFbGVtZW50czsKIAotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+IG1fcmVmZXJlbmNl
ZEVsZW1lbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2aXNpb24gMTk5NDE2KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ2
LDggKzExNDYsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAg
ICAgZm9yIChhdXRvJiBpdGVtIDogbGlzdCkgewogICAgICAgICBpZiAoaXM8Q1NTQ3Vyc29ySW1h
Z2VWYWx1ZT4oaXRlbS5nZXQoKSkpIHsKICAgICAgICAgICAgIGF1dG8mIGltYWdlID0gZG93bmNh
c3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoaW1h
Z2UudXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoc3R5bGVSZXNvbHZlci5lbGVtZW50KCkpKSAvLyBF
bGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4K
LSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAg
ICAgICAgICAgaW1hZ2UudXBkYXRlU1ZHQ3Vyc29yKHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7
CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFkZEN1cnNvcihzdHlsZVJlc29s
dmVyLnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlDdXJzb3IsIGltYWdlKSwgaW1hZ2UuaG90U3BvdCgp
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTk0MTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdDdXJzb3JFbGVtZW50Lmgi
CiAKKyNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKQEAgLTU5
LDcgKzYwLDcgQEAgUmVmPFNWR0N1cnNvckVsZW1lbnQ+IFNWR0N1cnNvckVsZW1lbnQ6OgogU1ZH
Q3Vyc29yRWxlbWVudDo6flNWR0N1cnNvckVsZW1lbnQoKQogewogICAgIGZvciAoYXV0byYgY2xp
ZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPmN1cnNvckVsZW1lbnRSZW1vdmVkKCk7
CisgICAgICAgIGNsaWVudC0+Y3Vyc29yRWxlbWVudFJlbW92ZWQoKnRoaXMpOwogfQogCiBib29s
IFNWR0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQpAQCAtOTIsMjEgKzkzLDE0IEBAIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6
cGFyc2VBdHRyaWJ1dGUoY28KICAgICBTVkdVUklSZWZlcmVuY2U6OnBhcnNlQXR0cmlidXRlKG5h
bWUsIHZhbHVlKTsKIH0KIAotdm9pZCBTVkdDdXJzb3JFbGVtZW50OjphZGRDbGllbnQoU1ZHRWxl
bWVudCogZWxlbWVudCkKK3ZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6YWRkQ2xpZW50KENTU0N1cnNv
ckltYWdlVmFsdWUmIHZhbHVlKQogewotICAgIG1fY2xpZW50cy5hZGQoZWxlbWVudCk7Ci0gICAg
ZWxlbWVudC0+c2V0Q3Vyc29yRWxlbWVudCh0aGlzKTsKKyAgICBtX2NsaWVudHMuYWRkKCZ2YWx1
ZSk7CiB9CiAKLXZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6cmVtb3ZlQ2xpZW50KFNWR0VsZW1lbnQq
IGVsZW1lbnQpCit2b2lkIFNWR0N1cnNvckVsZW1lbnQ6OnJlbW92ZUNsaWVudChDU1NDdXJzb3JJ
bWFnZVZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAobV9jbGllbnRzLnJlbW92ZShlbGVtZW50KSkK
LSAgICAgICAgZWxlbWVudC0+Y3Vyc29yRWxlbWVudFJlbW92ZWQoKTsKLX0KLQotdm9pZCBTVkdD
dXJzb3JFbGVtZW50OjpyZW1vdmVSZWZlcmVuY2VkRWxlbWVudChTVkdFbGVtZW50KiBlbGVtZW50
KQotewotICAgIG1fY2xpZW50cy5yZW1vdmUoZWxlbWVudCk7CisgICAgbV9jbGllbnRzLnJlbW92
ZSgmdmFsdWUpOwogfQogCiB2b2lkIFNWR0N1cnNvckVsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCkBAIC0xMTgsNyArMTEyLDcgQEAgdm9p
ZCBTVkdDdXJzb3JFbGVtZW50OjpzdmdBdHRyaWJ1dGVDaGFuZwogCiAgICAgSW5zdGFuY2VJbnZh
bGlkYXRpb25HdWFyZCBndWFyZCgqdGhpcyk7CiAgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2Ns
aWVudHMpCi0gICAgICAgIGNsaWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICBj
bGllbnQtPmN1cnNvckVsZW1lbnRDaGFuZ2VkKCp0aGlzKTsKIH0KIAogdm9pZCBTVkdDdXJzb3JF
bGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJs
cykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuaAkocmV2aXNp
b24gMTk5NDE2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIENTU0N1cnNvckltYWdlVmFsdWU7CisKIGNsYXNzIFNWR0N1cnNvckVsZW1lbnQgZmluYWwg
OiBwdWJsaWMgU1ZHRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCkBAIC00MCw5ICs0Miw4IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgflNWR0N1cnNvckVsZW1lbnQoKTsKIAotICAgIHZvaWQgYWRkQ2xpZW50KFNWR0Vs
ZW1lbnQqKTsKLSAgICB2b2lkIHJlbW92ZUNsaWVudChTVkdFbGVtZW50Kik7Ci0gICAgdm9pZCBy
ZW1vdmVSZWZlcmVuY2VkRWxlbWVudChTVkdFbGVtZW50Kik7CisgICAgdm9pZCBhZGRDbGllbnQo
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSYpOworICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENTU0N1cnNvcklt
YWdlVmFsdWUmKTsKIAogcHJpdmF0ZToKICAgICBTVkdDdXJzb3JFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCYpOwpAQCAtNjksNyArNzAsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgc3luY2hyb25pemVSZXF1aXJlZEV4dGVuc2lvbnMoKSBvdmVycmlkZSB7IFNWR1Rlc3RzOjpz
eW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucyh0aGlzKTsgfQogICAgIHZvaWQgc3luY2hyb25p
emVTeXN0ZW1MYW5ndWFnZSgpIG92ZXJyaWRlIHsgU1ZHVGVzdHM6OnN5bmNocm9uaXplU3lzdGVt
TGFuZ3VhZ2UodGhpcyk7IH0KIAotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+IG1fY2xpZW50czsK
KyAgICBIYXNoU2V0PENTU0N1cnNvckltYWdlVmFsdWUqPiBtX2NsaWVudHM7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZp
c2lvbiAxOTk0MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCiAjaW5j
bHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgpAQCAtNDAsNyArMzksNiBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5oIgotI2luY2x1ZGUgIlNWR0N1cnNvckVsZW1lbnQu
aCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdFbGVt
ZW50UmFyZURhdGEuaCIKICNpbmNsdWRlICJTVkdHcmFwaGljc0VsZW1lbnQuaCIKQEAgLTI4Niwx
MCArMjg0LDYgQEAgU1ZHRWxlbWVudDo6flNWR0VsZW1lbnQoKQogICAgIGlmIChtX3N2Z1JhcmVE
YXRhKSB7CiAgICAgICAgIGZvciAoU1ZHRWxlbWVudCogaW5zdGFuY2UgOiBtX3N2Z1JhcmVEYXRh
LT5pbnN0YW5jZXMoKSkKICAgICAgICAgICAgIGluc3RhbmNlLT5tX3N2Z1JhcmVEYXRhLT5zZXRD
b3JyZXNwb25kaW5nRWxlbWVudChudWxscHRyKTsKLSAgICAgICAgaWYgKFNWR0N1cnNvckVsZW1l
bnQqIGN1cnNvckVsZW1lbnQgPSBtX3N2Z1JhcmVEYXRhLT5jdXJzb3JFbGVtZW50KCkpCi0gICAg
ICAgICAgICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQodGhpcyk7Ci0gICAgICAgIGlmIChD
U1NDdXJzb3JJbWFnZVZhbHVlKiBjdXJzb3JJbWFnZVZhbHVlID0gbV9zdmdSYXJlRGF0YS0+Y3Vy
c29ySW1hZ2VWYWx1ZSgpKQotICAgICAgICAgICAgY3Vyc29ySW1hZ2VWYWx1ZS0+cmVtb3ZlUmVm
ZXJlbmNlZEVsZW1lbnQodGhpcyk7CiAgICAgICAgIGlmIChTVkdFbGVtZW50KiBjb3JyZXNwb25k
aW5nRWxlbWVudCA9IG1fc3ZnUmFyZURhdGEtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkpCiAgICAg
ICAgICAgICBjb3JyZXNwb25kaW5nRWxlbWVudC0+bV9zdmdSYXJlRGF0YS0+aW5zdGFuY2VzKCku
cmVtb3ZlKHRoaXMpOwogCkBAIC00NDQsNDAgKzQzOCw2IEBAIGJvb2wgU1ZHRWxlbWVudDo6Z2V0
Qm91bmRpbmdCb3goRmxvYXRSZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU1ZHRWxl
bWVudDo6c2V0Q3Vyc29yRWxlbWVudChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50KQot
ewotICAgIFNWR0VsZW1lbnRSYXJlRGF0YSYgcmFyZURhdGEgPSBlbnN1cmVTVkdSYXJlRGF0YSgp
OwotICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBvbGRDdXJzb3JFbGVtZW50ID0gcmFyZURhdGEu
Y3Vyc29yRWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChjdXJzb3JFbGVtZW50ID09IG9sZEN1cnNv
ckVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG9sZEN1cnNvckVsZW1lbnQt
PnJlbW92ZVJlZmVyZW5jZWRFbGVtZW50KHRoaXMpOwotICAgIH0KLSAgICByYXJlRGF0YS5zZXRD
dXJzb3JFbGVtZW50KGN1cnNvckVsZW1lbnQpOwotfQotCi12b2lkIFNWR0VsZW1lbnQ6OmN1cnNv
ckVsZW1lbnRSZW1vdmVkKCkgCi17Ci0gICAgQVNTRVJUKG1fc3ZnUmFyZURhdGEpOwotICAgIG1f
c3ZnUmFyZURhdGEtPnNldEN1cnNvckVsZW1lbnQobnVsbHB0cik7Ci19Ci0KLXZvaWQgU1ZHRWxl
bWVudDo6c2V0Q3Vyc29ySW1hZ2VWYWx1ZShDU1NDdXJzb3JJbWFnZVZhbHVlKiBjdXJzb3JJbWFn
ZVZhbHVlKQotewotICAgIFNWR0VsZW1lbnRSYXJlRGF0YSYgcmFyZURhdGEgPSBlbnN1cmVTVkdS
YXJlRGF0YSgpOwotICAgIGlmIChDU1NDdXJzb3JJbWFnZVZhbHVlKiBvbGRDdXJzb3JJbWFnZVZh
bHVlID0gcmFyZURhdGEuY3Vyc29ySW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgIGlmIChjdXJzb3JJ
bWFnZVZhbHVlID09IG9sZEN1cnNvckltYWdlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIG9sZEN1cnNvckltYWdlVmFsdWUtPnJlbW92ZVJlZmVyZW5jZWRFbGVtZW50KHRoaXMp
OwotICAgIH0KLSAgICByYXJlRGF0YS5zZXRDdXJzb3JJbWFnZVZhbHVlKGN1cnNvckltYWdlVmFs
dWUpOwotfQotCi12b2lkIFNWR0VsZW1lbnQ6OmN1cnNvckltYWdlVmFsdWVSZW1vdmVkKCkKLXsK
LSAgICBBU1NFUlQobV9zdmdSYXJlRGF0YSk7Ci0gICAgbV9zdmdSYXJlRGF0YS0+c2V0Q3Vyc29y
SW1hZ2VWYWx1ZShudWxscHRyKTsKLX0KLQogU1ZHRWxlbWVudCogU1ZHRWxlbWVudDo6Y29ycmVz
cG9uZGluZ0VsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBtX3N2Z1JhcmVEYXRhID8gbV9z
dmdSYXJlRGF0YS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA6IG51bGxwdHI7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDE5OTQxNikKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEyICszOCwxMCBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBDU1NDdXJzb3JJ
bWFnZVZhbHVlOwogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1ZhbHVlOwog
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOwotY2xhc3Mg
U1ZHQ3Vyc29yRWxlbWVudDsKIGNsYXNzIFNWR0RvY3VtZW50RXh0ZW5zaW9uczsKIGNsYXNzIFNW
R0VsZW1lbnRSYXJlRGF0YTsKIGNsYXNzIFNWR1NWR0VsZW1lbnQ7CkBAIC0xMDYsMTEgKzEwNCw2
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgZ2V0Qm91bmRpbmdCb3goRmxvYXRSZWN0JiwgU1ZHTG9j
YXRhYmxlOjpTdHlsZVVwZGF0ZVN0cmF0ZWd5ID0gU1ZHTG9jYXRhYmxlOjpBbGxvd1N0eWxlVXBk
YXRlKTsKIAotICAgIHZvaWQgc2V0Q3Vyc29yRWxlbWVudChTVkdDdXJzb3JFbGVtZW50Kik7Ci0g
ICAgdm9pZCBjdXJzb3JFbGVtZW50UmVtb3ZlZCgpOwotICAgIHZvaWQgc2V0Q3Vyc29ySW1hZ2VW
YWx1ZShDU1NDdXJzb3JJbWFnZVZhbHVlKik7Ci0gICAgdm9pZCBjdXJzb3JJbWFnZVZhbHVlUmVt
b3ZlZCgpOwotCiAgICAgU1ZHRWxlbWVudCogY29ycmVzcG9uZGluZ0VsZW1lbnQoKSBjb25zdDsK
ICAgICBTVkdVc2VFbGVtZW50KiBjb3JyZXNwb25kaW5nVXNlRWxlbWVudCgpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCShyZXZpc2lvbiAxOTk0
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDE1ICs0OCw5IEBAIHB1YmxpYzoKICAgICBib29sIGluc3RhbmNlVXBkYXRl
c0Jsb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlc1VwZGF0ZXNCbG9ja2VkOyB9CiAg
ICAgdm9pZCBzZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGJvb2wgdmFsdWUpIHsgbV9pbnN0YW5j
ZXNVcGRhdGVzQmxvY2tlZCA9IHZhbHVlOyB9CiAKLSAgICBTVkdDdXJzb3JFbGVtZW50KiBjdXJz
b3JFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3JFbGVtZW50OyB9Ci0gICAgdm9pZCBz
ZXRDdXJzb3JFbGVtZW50KFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQpIHsgbV9jdXJz
b3JFbGVtZW50ID0gY3Vyc29yRWxlbWVudDsgfQotCiAgICAgU1ZHRWxlbWVudCogY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKSB7IHJldHVybiBtX2NvcnJlc3BvbmRpbmdFbGVtZW50OyB9CiAgICAgdm9p
ZCBzZXRDb3JyZXNwb25kaW5nRWxlbWVudChTVkdFbGVtZW50KiBjb3JyZXNwb25kaW5nRWxlbWVu
dCkgeyBtX2NvcnJlc3BvbmRpbmdFbGVtZW50ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQ7IH0KIAot
ICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGN1cnNvckltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX2N1cnNvckltYWdlVmFsdWU7IH0KLSAgICB2b2lkIHNldEN1cnNvckltYWdlVmFsdWUoQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZSogY3Vyc29ySW1hZ2VWYWx1ZSkgeyBtX2N1cnNvckltYWdlVmFsdWUg
PSBjdXJzb3JJbWFnZVZhbHVlOyB9Ci0KICAgICBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBhbmlt
YXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGVkU01JTFN0
eWxlUHJvcGVydGllcy5nZXQoKTsgfQogICAgIE11dGFibGVTdHlsZVByb3BlcnRpZXMmIGVuc3Vy
ZUFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpCiAgICAgewpAQCAtODQsOCArNzgsNiBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4gbV9pbnN0YW5jZXM7
Ci0gICAgU1ZHQ3Vyc29yRWxlbWVudCogbV9jdXJzb3JFbGVtZW50IHsgbnVsbHB0ciB9OwotICAg
IENTU0N1cnNvckltYWdlVmFsdWUqIG1fY3Vyc29ySW1hZ2VWYWx1ZSB7IG51bGxwdHIgfTsKICAg
ICBTVkdFbGVtZW50KiBtX2NvcnJlc3BvbmRpbmdFbGVtZW50IHsgbnVsbHB0ciB9OwogICAgIGJv
b2wgbV9pbnN0YW5jZXNVcGRhdGVzQmxvY2tlZCA6IDE7CiAgICAgYm9vbCBtX3VzZU92ZXJyaWRl
Q29tcHV0ZWRTdHlsZSA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJl
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNl
LmNwcAkocmV2aXNpb24gMTk5NDE2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVy
ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgYm9vbCBTVkdVUklSZWZl
cmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYwogICAgIHJldHVybiBhdHRyTmFtZS5tYXRjaGVzKFhM
aW5rTmFtZXM6OmhyZWZBdHRyKTsKIH0KIAotU3RyaW5nIFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhjb25zdCBTdHJpbmcmIHVybCwgRG9jdW1lbnQmIGRv
Y3VtZW50KQorU3RyaW5nIFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlS
SVN0cmluZyhjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewog
ICAgIHNpemVfdCBzdGFydCA9IHVybC5maW5kKCcjJyk7CiAgICAgaWYgKHN0YXJ0ID09IG5vdEZv
dW5kKQpAQCAtNTUsNyArNTUsNyBAQCBTdHJpbmcgU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgVVJM
IHVybEZyb21JUklTdHJpbmdXaXRoRnJhZ21lbnRJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgdXJs
LCBEb2N1bWVudCYgZG9jdW1lbnQsIFN0cmluZyYgZnJhZ21lbnRJZGVudGlmaWVyKQorc3RhdGlj
IGlubGluZSBVUkwgdXJsRnJvbUlSSVN0cmluZ1dpdGhGcmFnbWVudElkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgU3RyaW5nJiBmcmFnbWVudElk
ZW50aWZpZXIpCiB7CiAgICAgc2l6ZV90IHN0YXJ0T2ZGcmFnbWVudElkZW50aWZpZXIgPSB1cmwu
ZmluZCgnIycpOwogICAgIGlmIChzdGFydE9mRnJhZ21lbnRJZGVudGlmaWVyID09IG5vdEZvdW5k
KQpAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgaW5saW5lIFVSTCB1cmxGcm9tSVJJU3RyaW5nV2l0
aEZyCiAgICAgcmV0dXJuIFVSTChkb2N1bWVudC5iYXNlVVJJKCksIHVybC5zdWJzdHJpbmcoc3Rh
cnRPZkZyYWdtZW50SWRlbnRpZmllcikpOwogfQogCi1FbGVtZW50KiBTVkdVUklSZWZlcmVuY2U6
OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGNvbnN0IFN0cmluZyYgaXJpLCBEb2N1bWVudCYg
ZG9jdW1lbnQsIFN0cmluZyogZnJhZ21lbnRJZGVudGlmaWVyLCBEb2N1bWVudCogZXh0ZXJuYWxE
b2N1bWVudCkKK0VsZW1lbnQqIFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklT
dHJpbmcoY29uc3QgU3RyaW5nJiBpcmksIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgU3RyaW5n
KiBmcmFnbWVudElkZW50aWZpZXIsIGNvbnN0IERvY3VtZW50KiBleHRlcm5hbERvY3VtZW50KQog
ewogICAgIC8vIElmIHRoZXJlJ3Mgbm8gZnJhZ21lbnQgaWRlbnRpZmllciBjb250YWluZWQgd2l0
aGluIHRoZSBJUkkgc3RyaW5nLCB3ZSBjYW4ndCBsb29rdXAgYW4gZWxlbWVudC4KICAgICBTdHJp
bmcgaWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCShyZXZpc2lvbiAx
OTk0MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDEwICszNCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNLbm93
bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgc3RhdGljIHZvaWQgYWRkU3Vw
cG9ydGVkQXR0cmlidXRlcyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+Jik7CiAKLSAgICBzdGF0aWMg
U3RyaW5nIGZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcoY29uc3QgU3RyaW5nJiwgRG9j
dW1lbnQmKTsKLSAgICBzdGF0aWMgRWxlbWVudCogdGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmco
Y29uc3QgU3RyaW5nJiwgRG9jdW1lbnQmLCBTdHJpbmcqID0gbnVsbHB0ciwgRG9jdW1lbnQqID0g
bnVsbHB0cik7CisgICAgc3RhdGljIFN0cmluZyBmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IERvY3VtZW50Jik7CisgICAgc3RhdGljIEVsZW1lbnQq
IHRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IERvY3VtZW50
JiwgU3RyaW5nKiBmcmFnbWVudElkZW50aWZpZXIgPSBudWxscHRyLCBjb25zdCBEb2N1bWVudCog
ZXh0ZXJuYWxEb2N1bWVudCA9IG51bGxwdHIpOwogCi0gICAgc3RhdGljIGJvb2wgaXNFeHRlcm5h
bFVSSVJlZmVyZW5jZShjb25zdCBTdHJpbmcmIHVyaSwgRG9jdW1lbnQmIGRvY3VtZW50KQorICAg
IHN0YXRpYyBib29sIGlzRXh0ZXJuYWxVUklSZWZlcmVuY2UoY29uc3QgU3RyaW5nJiB1cmksIGNv
bnN0IERvY3VtZW50JiBkb2N1bWVudCkKICAgICB7CiAgICAgICAgIC8vIEZyYWdtZW50LW9ubHkg
VVJJcyBhcmUgYWx3YXlzIGludGVybmFsCiAgICAgICAgIGlmICh1cmkuc3RhcnRzV2l0aCgnIycp
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276558</attachid>
            <date>2016-04-16 10:01:14 -0700</date>
            <delta_ts>2016-04-16 10:15:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>svg-cursor-2.patch</filename>
            <type>text/plain</type>
            <size>22995</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTYyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE2LTA0LTE2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDU1NDdXJzb3JJbWFnZVZhbHVl
IHNob3VsZG4ndCBtdXRhdGUgZWxlbWVudCBkdXJpbmcgc3R5bGUgcmVzb2x1dGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NjU5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZTo6dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQgbWF5IG11dGF0ZSB0aGUgYXJndW1lbnQgZWxl
bWVudC4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlIGNvZGUgdGhhdCBjYWNoZXMg
Y3Vyc29yIGVsZW1lbnQgYW5kIGltYWdlIHRvIFNWR0VsZW1lbnQgcmFyZSBkYXRhLgorICAgICAg
ICBUaGUgd2hvbGUgdGhpbmdzIGlzIGJhc2ljYWxseSB1bnVzZWQuIENTU0N1cnNvckltYWdlVmFs
dWUgbm93IG1haW50YWlucyBhIHdlYWsgbWFwIHRvCisgICAgICAgIFNWR0N1cnNvckVsZW1lbnRz
IGRpcmVjdGx5IGluc3RlYWQgb2YgaW5kaXJlY3RseSB2aWEgdGhlIHVzaW5nIFNWR0VsZW1lbnRz
LgorCisgICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZhbHVlOjp+Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZhbHVlOjpjdXN0b21DU1NUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OnVwZGF0ZVNWR0N1cnNvckVsZW1l
bnQpOgorCisgICAgICAgICAgICBXZSBubyBsb25nZXIgcmVseSBvbiBTVkdFbGVtZW50IHJhcmUg
ZGF0YSBzbyBubyBuZWVkIHRvIHRlc3QgZm9yIFNWR0VsZW1lbnQuCisKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVsZW1lbnRSZW1vdmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6OmN1cnNvckVsZW1lbnRDaGFuZ2VkKToKKwor
ICAgICAgICAgICAgRmFjdG9yIHRvIGEgZnVuY3Rpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1
cnNvckltYWdlVmFsdWU6OmNsZWFyQ2FjaGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Q3Vyc29ySW1hZ2VWYWx1ZTo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1cnNvcklt
YWdlVmFsdWU6OnJlbW92ZVJlZmVyZW5jZWRFbGVtZW50KTogRGVsZXRlZC4KKworICAgICAgICAg
ICAgRG9uJ3QgdHJhY2sgY2xpZW50IGVsZW1lbnRzIGFueW1vcmUuIEp1c3QgdHJhY2sgcmVmZXJl
bmNlZCBTVkdDdXJzb3JFbGVtZW50cy4KKworICAgICAgICAqIGNzcy9DU1NDdXJzb3JJbWFnZVZh
bHVlLmg6CisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ3Vyc29yKToKKworICAgICAgICAg
ICAgTm8gbmVlZCB0byBtYWtlIHN0eWxlIHVuaXF1ZS4gSW5pdGlhbGl6YXRpb24gaXMgbm93IGRv
bmUgaW4gdXBkYXRlU1ZHQ3Vyc29yRWxlbWVudC4KKworICAgICAgICAqIHN2Zy9TVkdDdXJzb3JF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0N1cnNvckVsZW1lbnQ6On5TVkdDdXJz
b3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9y
dGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0N1cnNvckVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0N1cnNvckVsZW1lbnQ6OmFkZENsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDdXJzb3JFbGVtZW50OjpyZW1vdmVDbGllbnQpOgor
CisgICAgICAgICAgICBDbGllbnQgaXMgbm93IGFuIENTU0N1cnNvckltYWdlVmFsdWUgcmF0aGVy
IHRoYW4gU1ZHRWxlbWVudC4KKworICAgICAgICAoV2ViQ29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6
c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisKKyAgICAgICAgICAgIEluc3RlYWQgb2YgaW52YWxpZGF0
aW5nIGVsZW1lbnQgc3R5bGUganVzdCBpbnZhbGlkYXRlIHRoZSBDU1NDdXJzb3JJbWFnZVZhbHVl
IGRpcmVjdGx5LgorCisgICAgICAgIChXZWJDb3JlOjpTVkdDdXJzb3JFbGVtZW50OjphZGRTdWJy
ZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ3Vyc29yRWxlbWVu
dDo6cmVtb3ZlUmVmZXJlbmNlZEVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdD
dXJzb3JFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6flNWR0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RWxlbWVudDo6Z2V0Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6
Y29ycmVzcG9uZGluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6c2V0
Q3Vyc29yRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojpj
dXJzb3JFbGVtZW50UmVtb3ZlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50OjpzZXRDdXJzb3JJbWFnZVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsZW1lbnQ6OmN1cnNvckltYWdlVmFsdWVSZW1vdmVkKTogRGVsZXRlZC4KKworICAgICAgICAg
ICAgU1ZHRWxlbWVudHMgbm8gbG9uZ2VyIG5lZWQgdG8ga25vdyBhYm91dCB0aGVpciBjdXJzb3Jz
LgorCisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVu
dFJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6Omluc3Rh
bmNlVXBkYXRlc0Jsb2NrZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudFJhcmVEYXRh
OjpzZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1l
bnRSYXJlRGF0YTo6Y29ycmVzcG9uZGluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RWxlbWVudFJhcmVEYXRhOjpzZXRDb3JyZXNwb25kaW5nRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmVuc3VyZUFuaW1hdGVkU01JTFN0
eWxlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OmN1
cnNvckVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudFJhcmVE
YXRhOjpzZXRDdXJzb3JFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnRSYXJlRGF0YTo6Y3Vyc29ySW1hZ2VWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdFbGVtZW50UmFyZURhdGE6OnNldEN1cnNvckltYWdlVmFsdWUpOiBEZWxldGVkLgor
CiAyMDE2LTA0LTE1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZWR1Y2UgdXNlIG9mIERlcHJlY2F0ZWQ6OlNjcmlwdFhYWCBjbGFzc2VzCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCShyZXZpc2lvbiAxOTk0MTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDIxICs0NCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBp
bmxpbmUgU1ZHQ3Vyc29yRWxlbWVudCogcmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50
KGNvbnN0IFN0cmluZyYgdXJsLCBEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgRWxlbWVudCog
ZWxlbWVudCA9IFNWR1VSSVJlZmVyZW5jZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcodXJs
LCBkb2N1bWVudCk7Ci0gICAgaWYgKGlzPFNWR0N1cnNvckVsZW1lbnQ+KGVsZW1lbnQpKQotICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHQ3Vyc29yRWxlbWVudD4oZWxlbWVudCk7Ci0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Q1NTQ3Vyc29ySW1hZ2VW
YWx1ZShSZWY8Q1NTVmFsdWU+JiYgaW1hZ2VWYWx1ZSwgYm9vbCBoYXNIb3RTcG90LCBjb25zdCBJ
bnRQb2ludCYgaG90U3BvdCkKICAgICA6IENTU1ZhbHVlKEN1cnNvckltYWdlQ2xhc3MpCiAgICAg
LCBtX2ltYWdlVmFsdWUoV1RGTW92ZShpbWFnZVZhbHVlKSkKICAgICAsIG1faGFzSG90U3BvdCho
YXNIb3RTcG90KQogICAgICwgbV9ob3RTcG90KGhvdFNwb3QpCi0gICAgLCBtX2FjY2Vzc2VkSW1h
Z2UoZmFsc2UpCiB7CiB9CiAKQEAgLTcyLDE4ICs2Miw4IEBAIENTU0N1cnNvckltYWdlVmFsdWU6
On5DU1NDdXJzb3JJbWFnZVZhbHUKIHsKICAgICBkZXRhY2hQZW5kaW5nSW1hZ2UoKTsKIAotICAg
IGlmICghaXNTVkdDdXJzb3IoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSGFzaFNldDxTVkdF
bGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZWZlcmVuY2VkRWxlbWVudHMuYmVnaW4o
KTsKLSAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZWZl
cmVuY2VkRWxlbWVudHMuZW5kKCk7Ci0KLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFNWR0VsZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50ID0gKml0OwotICAgICAgICByZWZl
cmVuY2VkRWxlbWVudC0+Y3Vyc29ySW1hZ2VWYWx1ZVJlbW92ZWQoKTsKLSAgICAgICAgaWYgKFNW
R0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNv
ckVsZW1lbnQoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwo
KSwgcmVmZXJlbmNlZEVsZW1lbnQtPmRvY3VtZW50KCkpKQotICAgICAgICAgICAgY3Vyc29yRWxl
bWVudC0+cmVtb3ZlQ2xpZW50KHJlZmVyZW5jZWRFbGVtZW50KTsKLSAgICB9CisgICAgZm9yIChh
dXRvKiBlbGVtZW50IDogbV9zdmdDdXJzb3JFbGVtZW50cykKKyAgICAgICAgZWxlbWVudC0+cmVt
b3ZlQ2xpZW50KCp0aGlzKTsKIH0KIAogU3RyaW5nIENTU0N1cnNvckltYWdlVmFsdWU6OmN1c3Rv
bUNTU1RleHQoKSBjb25zdApAQCAtOTksMzUgKzc5LDQxIEBAIFN0cmluZyBDU1NDdXJzb3JJbWFn
ZVZhbHVlOjpjdXN0b21DU1NUZXgKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAK
LWJvb2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoRWxlbWVu
dCogZWxlbWVudCkKK1NWR0N1cnNvckVsZW1lbnQqIENTU0N1cnNvckltYWdlVmFsdWU6OnVwZGF0
ZVNWR0N1cnNvckVsZW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmICgh
ZWxlbWVudCB8fCAhZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQogICAgIGlmICghaXNTVkdDdXJzb3IoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JF
bGVtZW50ID0gcmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KGRvd25jYXN0PENTU0lt
YWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksIGVsZW1lbnQtPmRvY3VtZW50KCkp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgb3ZlcnJpZGUgaG90IHNwb3Qgc3BlY2lm
aWVkIGluIENTUywgd2hpY2ggaXMgcHJvYmFibHkgaW5jb3JyZWN0LgotICAgICAgICBTVkdMZW5n
dGhDb250ZXh0IGxlbmd0aENvbnRleHQoMCk7Ci0gICAgICAgIG1faGFzSG90U3BvdCA9IHRydWU7
Ci0gICAgICAgIGZsb2F0IHggPSByb3VuZGYoY3Vyc29yRWxlbWVudC0+eCgpLnZhbHVlKGxlbmd0
aENvbnRleHQpKTsKLSAgICAgICAgbV9ob3RTcG90LnNldFgoc3RhdGljX2Nhc3Q8aW50Pih4KSk7
Ci0KLSAgICAgICAgZmxvYXQgeSA9IHJvdW5kZihjdXJzb3JFbGVtZW50LT55KCkudmFsdWUobGVu
Z3RoQ29udGV4dCkpOwotICAgICAgICBtX2hvdFNwb3Quc2V0WShzdGF0aWNfY2FzdDxpbnQ+KHkp
KTsKLQotICAgICAgICBpZiAoY2FjaGVkSW1hZ2VVUkwoKSAhPSBlbGVtZW50LT5kb2N1bWVudCgp
LmNvbXBsZXRlVVJMKGN1cnNvckVsZW1lbnQtPmhyZWYoKSkpCi0gICAgICAgICAgICBjbGVhckNh
Y2hlZEltYWdlKCk7Ci0KLSAgICAgICAgU1ZHRWxlbWVudCYgc3ZnRWxlbWVudCA9IGRvd25jYXN0
PFNWR0VsZW1lbnQ+KCplbGVtZW50KTsKLSAgICAgICAgbV9yZWZlcmVuY2VkRWxlbWVudHMuYWRk
KCZzdmdFbGVtZW50KTsKLSAgICAgICAgc3ZnRWxlbWVudC5zZXRDdXJzb3JJbWFnZVZhbHVlKHRo
aXMpOwotICAgICAgICBjdXJzb3JFbGVtZW50LT5hZGRDbGllbnQoJnN2Z0VsZW1lbnQpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRvKiBlbGVtZW50ID0gU1ZHVVJJUmVmZXJlbmNlOjp0
YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdl
VmFsdWUuZ2V0KCkpLnVybCgpLCBkb2N1bWVudCk7CisgICAgaWYgKCFpczxTVkdDdXJzb3JFbGVt
ZW50PihlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBzdmdD
dXJzb3JFbGVtZW50ID0gZG93bmNhc3Q8U1ZHQ3Vyc29yRWxlbWVudD4oZWxlbWVudCk7CisgICAg
aWYgKG1fc3ZnQ3Vyc29yRWxlbWVudHMuYWRkKHN2Z0N1cnNvckVsZW1lbnQpLmlzTmV3RW50cnkp
IHsKKyAgICAgICAgY3Vyc29yRWxlbWVudENoYW5nZWQoKnN2Z0N1cnNvckVsZW1lbnQpOworICAg
ICAgICBzdmdDdXJzb3JFbGVtZW50LT5hZGRDbGllbnQoKnRoaXMpOwogICAgIH0KKyAgICByZXR1
cm4gc3ZnQ3Vyc29yRWxlbWVudDsKK30KIAotICAgIHJldHVybiBmYWxzZTsKK3ZvaWQgQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZTo6Y3Vyc29yRWxlbWVudFJlbW92ZWQoU1ZHQ3Vyc29yRWxlbWVudCYgY3Vy
c29yRWxlbWVudCkKK3sKKyAgICBtX3N2Z0N1cnNvckVsZW1lbnRzLnJlbW92ZSgmY3Vyc29yRWxl
bWVudCk7CisgICAgY2xlYXJDYWNoZWRJbWFnZSgpOworfQorCit2b2lkIENTU0N1cnNvckltYWdl
VmFsdWU6OmN1cnNvckVsZW1lbnRDaGFuZ2VkKFNWR0N1cnNvckVsZW1lbnQmIGN1cnNvckVsZW1l
bnQpCit7CisgICAgY2xlYXJDYWNoZWRJbWFnZSgpOworCisgICAgLy8gRklYTUU6IFRoaXMgd2ls
bCBvdmVycmlkZSBob3Qgc3BvdCBzcGVjaWZpZWQgaW4gQ1NTLCB3aGljaCBpcyBwcm9iYWJseSBp
bmNvcnJlY3QuCisgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KDApOworICAgIG1f
aGFzSG90U3BvdCA9IHRydWU7CisgICAgZmxvYXQgeCA9IHJvdW5kZihjdXJzb3JFbGVtZW50Lngo
KS52YWx1ZShsZW5ndGhDb250ZXh0KSk7CisgICAgbV9ob3RTcG90LnNldFgoc3RhdGljX2Nhc3Q8
aW50Pih4KSk7CisKKyAgICBmbG9hdCB5ID0gcm91bmRmKGN1cnNvckVsZW1lbnQueSgpLnZhbHVl
KGxlbmd0aENvbnRleHQpKTsKKyAgICBtX2hvdFNwb3Quc2V0WShzdGF0aWNfY2FzdDxpbnQ+KHkp
KTsKIH0KIAogU3R5bGVJbWFnZSogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y2FjaGVkSW1hZ2UoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXImIGxvYWRlciwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBv
cHRpb25zKQpAQCAtMTM3LDIxICsxMjMsMTkgQEAgU3R5bGVJbWFnZSogQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZTo6Y2FjaGVkSQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4o
bV9pbWFnZVZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZVNldChsb2FkZXIsIG9wdGlvbnMpOwogI2Vu
ZGlmCiAKKyAgICBhdXRvKiBjdXJzb3JFbGVtZW50ID0gbG9hZGVyLmRvY3VtZW50KCkgPyB1cGRh
dGVTVkdDdXJzb3JFbGVtZW50KCpsb2FkZXIuZG9jdW1lbnQoKSkgOiBudWxscHRyOworCiAgICAg
aWYgKCFtX2FjY2Vzc2VkSW1hZ2UpIHsKICAgICAgICAgbV9hY2Nlc3NlZEltYWdlID0gdHJ1ZTsK
LQogICAgICAgICAvLyBGb3IgU1ZHIGltYWdlcyB3ZSBuZWVkIHRvIGxhemlseSBzdWJzdGl0dXRl
IGluIHRoZSBjb3JyZWN0IFVSTC4gUmF0aGVyIHRoYW4gYXR0ZW1wdAogICAgICAgICAvLyB0byBj
aGFuZ2UgdGhlIFVSTCBvZiB0aGUgQ1NTSW1hZ2VWYWx1ZSAod2hpY2ggd291bGQgdGhlbiBjaGFu
Z2UgYmVoYXZpb3IgbGlrZSBjc3NUZXh0KSwKICAgICAgICAgLy8gd2UgY3JlYXRlIGFuIGFsdGVy
bmF0ZSBDU1NJbWFnZVZhbHVlIHRvIHVzZS4KLSAgICAgICAgaWYgKGlzU1ZHQ3Vyc29yKCkgJiYg
bG9hZGVyLmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgZmFp
bCBpZiB0aGUgPGN1cnNvcj4gZWxlbWVudCBpcyBpbiBhIHNoYWRvdyBET00gKGJ1ZyA1OTgyNykK
LSAgICAgICAgICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVzb3Vy
Y2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1faW1h
Z2VWYWx1ZS5nZXQoKSkudXJsKCksICpsb2FkZXIuZG9jdW1lbnQoKSkpIHsKLSAgICAgICAgICAg
ICAgICBkZXRhY2hQZW5kaW5nSW1hZ2UoKTsKLSAgICAgICAgICAgICAgICBSZWY8Q1NTSW1hZ2VW
YWx1ZT4gc3ZnSW1hZ2VWYWx1ZShDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY3Vyc29yRWxlbWVudC0+
aHJlZigpKSk7Ci0gICAgICAgICAgICAgICAgU3R5bGVDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2Ug
PSBzdmdJbWFnZVZhbHVlLT5jYWNoZWRJbWFnZShsb2FkZXIsIG9wdGlvbnMpOwotICAgICAgICAg
ICAgICAgIG1faW1hZ2UgPSBjYWNoZWRJbWFnZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2Fj
aGVkSW1hZ2U7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChjdXJzb3JFbGVtZW50KSB7Cisg
ICAgICAgICAgICBkZXRhY2hQZW5kaW5nSW1hZ2UoKTsKKyAgICAgICAgICAgIFJlZjxDU1NJbWFn
ZVZhbHVlPiBzdmdJbWFnZVZhbHVlKENTU0ltYWdlVmFsdWU6OmNyZWF0ZShjdXJzb3JFbGVtZW50
LT5ocmVmKCkpKTsKKyAgICAgICAgICAgIFN0eWxlQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0g
c3ZnSW1hZ2VWYWx1ZS0+Y2FjaGVkSW1hZ2UobG9hZGVyLCBvcHRpb25zKTsKKyAgICAgICAgICAg
IG1faW1hZ2UgPSBjYWNoZWRJbWFnZTsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWRJbWFnZTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUu
Z2V0KCkpKSB7CkBAIC0yMDUsMTEgKzE4OSw2IEBAIHZvaWQgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6
Y2xlYXJDYWNoZWRJbWEKICAgICBtX2FjY2Vzc2VkSW1hZ2UgPSBmYWxzZTsKIH0KIAotdm9pZCBD
U1NDdXJzb3JJbWFnZVZhbHVlOjpyZW1vdmVSZWZlcmVuY2VkRWxlbWVudChTVkdFbGVtZW50KiBl
bGVtZW50KQotewotICAgIG1fcmVmZXJlbmNlZEVsZW1lbnRzLnJlbW92ZShlbGVtZW50KTsKLX0K
LQogYm9vbCBDU1NDdXJzb3JJbWFnZVZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faGFzSG90U3BvdCA/IG90aGVyLm1f
aGFzSG90U3BvdCAmJiBtX2hvdFNwb3QgPT0gb3RoZXIubV9ob3RTcG90IDogIW90aGVyLm1faGFz
SG90U3BvdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oCShy
ZXZpc2lvbiAxOTk0MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50OworY2xhc3MgU1ZHQ3Vyc29yRWxlbWVu
dDsKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKIGNsYXNzIENTU0N1cnNvckltYWdlVmFsdWUgOiBwdWJs
aWMgQ1NTVmFsdWUgewpAQCAtNTEsNyArNTIsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3Vz
dG9tQ1NTVGV4dCgpIGNvbnN0OwogCi0gICAgYm9vbCB1cGRhdGVJZlNWR0N1cnNvcklzVXNlZChF
bGVtZW50Kik7CisgICAgU1ZHQ3Vyc29yRWxlbWVudCogdXBkYXRlU1ZHQ3Vyc29yRWxlbWVudChj
b25zdCBEb2N1bWVudCYpOwogICAgIFN0eWxlSW1hZ2UqIGNhY2hlZEltYWdlKENhY2hlZFJlc291
cmNlTG9hZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7CiAgICAgU3R5bGVJbWFn
ZSogY2FjaGVkT3JQZW5kaW5nSW1hZ2UoRG9jdW1lbnQmKTsKIApAQCAtNTksNiArNjAsOSBAQCBw
dWJsaWM6CiAKICAgICBib29sIGVxdWFscyhjb25zdCBDU1NDdXJzb3JJbWFnZVZhbHVlJikgY29u
c3Q7CiAKKyAgICB2b2lkIGN1cnNvckVsZW1lbnRSZW1vdmVkKFNWR0N1cnNvckVsZW1lbnQmKTsK
KyAgICB2b2lkIGN1cnNvckVsZW1lbnRDaGFuZ2VkKFNWR0N1cnNvckVsZW1lbnQmKTsKKwogcHJp
dmF0ZToKICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKFJlZjxDU1NWYWx1ZT4mJiBpbWFnZVZhbHVl
LCBib29sIGhhc0hvdFNwb3QsIGNvbnN0IEludFBvaW50JiBob3RTcG90KTsKIApAQCAtNzMsOSAr
NzcsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNIb3RTcG90OwogICAgIEludFBvaW50IG1f
aG90U3BvdDsKICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbV9pbWFnZTsKLSAgICBib29sIG1fYWNj
ZXNzZWRJbWFnZTsKKyAgICBib29sIG1fYWNjZXNzZWRJbWFnZSB7IGZhbHNlIH07CisgICAgSGFz
aFNldDxTVkdDdXJzb3JFbGVtZW50Kj4gbV9zdmdDdXJzb3JFbGVtZW50czsKIAotICAgIEhhc2hT
ZXQ8U1ZHRWxlbWVudCo+IG1fcmVmZXJlbmNlZEVsZW1lbnRzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAko
cmV2aXNpb24gMTk5NDE2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3Rv
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ2LDggKzExNDYsNiBAQCBpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsCiAgICAgZm9yIChhdXRvJiBpdGVtIDogbGlzdCkgewog
ICAgICAgICBpZiAoaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpIHsKICAgICAg
ICAgICAgIGF1dG8mIGltYWdlID0gZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4oaXRlbS5n
ZXQoKSk7Ci0gICAgICAgICAgICBpZiAoaW1hZ2UudXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoc3R5
bGVSZXNvbHZlci5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBu
b3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci5zdHlsZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCBp
bWFnZSksIGltYWdlLmhvdFNwb3QoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkocmV2aXNpb24g
MTk5NDE2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU1ZHQ3Vyc29yRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRl
ICJYTGlua05hbWVzLmgiCkBAIC01OSw3ICs2MCw3IEBAIFJlZjxTVkdDdXJzb3JFbGVtZW50PiBT
VkdDdXJzb3JFbGVtZW50OjoKIFNWR0N1cnNvckVsZW1lbnQ6On5TVkdDdXJzb3JFbGVtZW50KCkK
IHsKICAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5j
dXJzb3JFbGVtZW50UmVtb3ZlZCgpOworICAgICAgICBjbGllbnQtPmN1cnNvckVsZW1lbnRSZW1v
dmVkKCp0aGlzKTsKIH0KIAogYm9vbCBTVkdDdXJzb3JFbGVtZW50Ojppc1N1cHBvcnRlZEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKQEAgLTkyLDIxICs5MywxNCBAQCB2
b2lkIFNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvCiAgICAgU1ZHVVJJUmVmZXJl
bmNlOjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgU1ZHQ3Vyc29yRWxl
bWVudDo6YWRkQ2xpZW50KFNWR0VsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFNWR0N1cnNvckVsZW1l
bnQ6OmFkZENsaWVudChDU1NDdXJzb3JJbWFnZVZhbHVlJiB2YWx1ZSkKIHsKLSAgICBtX2NsaWVu
dHMuYWRkKGVsZW1lbnQpOwotICAgIGVsZW1lbnQtPnNldEN1cnNvckVsZW1lbnQodGhpcyk7Cisg
ICAgbV9jbGllbnRzLmFkZCgmdmFsdWUpOwogfQogCi12b2lkIFNWR0N1cnNvckVsZW1lbnQ6OnJl
bW92ZUNsaWVudChTVkdFbGVtZW50KiBlbGVtZW50KQordm9pZCBTVkdDdXJzb3JFbGVtZW50Ojpy
ZW1vdmVDbGllbnQoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKG1fY2xp
ZW50cy5yZW1vdmUoZWxlbWVudCkpCi0gICAgICAgIGVsZW1lbnQtPmN1cnNvckVsZW1lbnRSZW1v
dmVkKCk7Ci19Ci0KLXZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6cmVtb3ZlUmVmZXJlbmNlZEVsZW1l
bnQoU1ZHRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBtX2NsaWVudHMucmVtb3ZlKGVsZW1lbnQp
OworICAgIG1fY2xpZW50cy5yZW1vdmUoJnZhbHVlKTsKIH0KIAogdm9pZCBTVkdDdXJzb3JFbGVt
ZW50OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpA
QCAtMTE4LDcgKzExMiw3IEBAIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hh
bmcKIAogICAgIEluc3RhbmNlSW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOwogICAgIGZv
ciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPnNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKKyAgICAgICAgY2xpZW50LT5jdXJzb3JFbGVtZW50Q2hhbmdlZCgqdGhpcyk7
CiB9CiAKIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxz
KExpc3RIYXNoU2V0PFVSTD4mIHVybHMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQ3Vyc29yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdD
dXJzb3JFbGVtZW50LmgJKHJldmlzaW9uIDE5OTQxNikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdDdXJzb3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NDdXJzb3JJbWFnZVZhbHVlOworCiBjbGFzcyBT
VkdDdXJzb3JFbGVtZW50IGZpbmFsIDogcHVibGljIFNWR0VsZW1lbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLApAQCAtNDAsOSAr
NDIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5TVkdDdXJzb3JFbGVtZW50KCk7CiAKLSAg
ICB2b2lkIGFkZENsaWVudChTVkdFbGVtZW50Kik7Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoU1ZH
RWxlbWVudCopOwotICAgIHZvaWQgcmVtb3ZlUmVmZXJlbmNlZEVsZW1lbnQoU1ZHRWxlbWVudCop
OworICAgIHZvaWQgYWRkQ2xpZW50KENTU0N1cnNvckltYWdlVmFsdWUmKTsKKyAgICB2b2lkIHJl
bW92ZUNsaWVudChDU1NDdXJzb3JJbWFnZVZhbHVlJik7CiAKIHByaXZhdGU6CiAgICAgU1ZHQ3Vy
c29yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKQEAgLTY5LDcgKzcw
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKCkg
b3ZlcnJpZGUgeyBTVkdUZXN0czo6c3luY2hyb25pemVSZXF1aXJlZEV4dGVuc2lvbnModGhpcyk7
IH0KICAgICB2b2lkIHN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UoKSBvdmVycmlkZSB7IFNWR1Rl
c3RzOjpzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKHRoaXMpOyB9CiAKLSAgICBIYXNoU2V0PFNW
R0VsZW1lbnQqPiBtX2NsaWVudHM7CisgICAgSGFzaFNldDxDU1NDdXJzb3JJbWFnZVZhbHVlKj4g
bV9jbGllbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTk5NDE2KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkRPTUlt
cGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQwLDcgKzM5LDYgQEAK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuaCIKLSNpbmNs
dWRlICJTVkdDdXJzb3JFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25z
LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiU1ZHR3JhcGhp
Y3NFbGVtZW50LmgiCkBAIC0yODYsMTAgKzI4NCw2IEBAIFNWR0VsZW1lbnQ6On5TVkdFbGVtZW50
KCkKICAgICBpZiAobV9zdmdSYXJlRGF0YSkgewogICAgICAgICBmb3IgKFNWR0VsZW1lbnQqIGlu
c3RhbmNlIDogbV9zdmdSYXJlRGF0YS0+aW5zdGFuY2VzKCkpCiAgICAgICAgICAgICBpbnN0YW5j
ZS0+bV9zdmdSYXJlRGF0YS0+c2V0Q29ycmVzcG9uZGluZ0VsZW1lbnQobnVsbHB0cik7Ci0gICAg
ICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gbV9zdmdSYXJlRGF0YS0+
Y3Vyc29yRWxlbWVudCgpKQotICAgICAgICAgICAgY3Vyc29yRWxlbWVudC0+cmVtb3ZlQ2xpZW50
KHRoaXMpOwotICAgICAgICBpZiAoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogY3Vyc29ySW1hZ2VWYWx1
ZSA9IG1fc3ZnUmFyZURhdGEtPmN1cnNvckltYWdlVmFsdWUoKSkKLSAgICAgICAgICAgIGN1cnNv
ckltYWdlVmFsdWUtPnJlbW92ZVJlZmVyZW5jZWRFbGVtZW50KHRoaXMpOwogICAgICAgICBpZiAo
U1ZHRWxlbWVudCogY29ycmVzcG9uZGluZ0VsZW1lbnQgPSBtX3N2Z1JhcmVEYXRhLT5jb3JyZXNw
b25kaW5nRWxlbWVudCgpKQogICAgICAgICAgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQtPm1fc3Zn
UmFyZURhdGEtPmluc3RhbmNlcygpLnJlbW92ZSh0aGlzKTsKIApAQCAtNDQ0LDQwICs0MzgsNiBA
QCBib29sIFNWR0VsZW1lbnQ6OmdldEJvdW5kaW5nQm94KEZsb2F0UmVjCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFNWR0VsZW1lbnQ6OnNldEN1cnNvckVsZW1lbnQoU1ZHQ3Vyc29yRWxl
bWVudCogY3Vyc29yRWxlbWVudCkKLXsKLSAgICBTVkdFbGVtZW50UmFyZURhdGEmIHJhcmVEYXRh
ID0gZW5zdXJlU1ZHUmFyZURhdGEoKTsKLSAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogb2xkQ3Vy
c29yRWxlbWVudCA9IHJhcmVEYXRhLmN1cnNvckVsZW1lbnQoKSkgewotICAgICAgICBpZiAoY3Vy
c29yRWxlbWVudCA9PSBvbGRDdXJzb3JFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBvbGRDdXJzb3JFbGVtZW50LT5yZW1vdmVSZWZlcmVuY2VkRWxlbWVudCh0aGlzKTsKLSAg
ICB9Ci0gICAgcmFyZURhdGEuc2V0Q3Vyc29yRWxlbWVudChjdXJzb3JFbGVtZW50KTsKLX0KLQot
dm9pZCBTVkdFbGVtZW50OjpjdXJzb3JFbGVtZW50UmVtb3ZlZCgpIAotewotICAgIEFTU0VSVCht
X3N2Z1JhcmVEYXRhKTsKLSAgICBtX3N2Z1JhcmVEYXRhLT5zZXRDdXJzb3JFbGVtZW50KG51bGxw
dHIpOwotfQotCi12b2lkIFNWR0VsZW1lbnQ6OnNldEN1cnNvckltYWdlVmFsdWUoQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZSogY3Vyc29ySW1hZ2VWYWx1ZSkKLXsKLSAgICBTVkdFbGVtZW50UmFyZURhdGEm
IHJhcmVEYXRhID0gZW5zdXJlU1ZHUmFyZURhdGEoKTsKLSAgICBpZiAoQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZSogb2xkQ3Vyc29ySW1hZ2VWYWx1ZSA9IHJhcmVEYXRhLmN1cnNvckltYWdlVmFsdWUoKSkg
ewotICAgICAgICBpZiAoY3Vyc29ySW1hZ2VWYWx1ZSA9PSBvbGRDdXJzb3JJbWFnZVZhbHVlKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBvbGRDdXJzb3JJbWFnZVZhbHVlLT5yZW1vdmVS
ZWZlcmVuY2VkRWxlbWVudCh0aGlzKTsKLSAgICB9Ci0gICAgcmFyZURhdGEuc2V0Q3Vyc29ySW1h
Z2VWYWx1ZShjdXJzb3JJbWFnZVZhbHVlKTsKLX0KLQotdm9pZCBTVkdFbGVtZW50OjpjdXJzb3JJ
bWFnZVZhbHVlUmVtb3ZlZCgpCi17Ci0gICAgQVNTRVJUKG1fc3ZnUmFyZURhdGEpOwotICAgIG1f
c3ZnUmFyZURhdGEtPnNldEN1cnNvckltYWdlVmFsdWUobnVsbHB0cik7Ci19Ci0KIFNWR0VsZW1l
bnQqIFNWR0VsZW1lbnQ6OmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9zdmdSYXJlRGF0YSA/IG1fc3ZnUmFyZURhdGEtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkg
OiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAxOTk0MTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCwxMiArMzgsMTAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNm
b3JtOwotY2xhc3MgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTsKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b247CiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgU1ZHQXR0cmlidXRl
VG9Qcm9wZXJ0eU1hcDsKLWNsYXNzIFNWR0N1cnNvckVsZW1lbnQ7CiBjbGFzcyBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM7CiBjbGFzcyBTVkdFbGVtZW50UmFyZURhdGE7CiBjbGFzcyBTVkdTVkdFbGVt
ZW50OwpAQCAtMTA2LDExICsxMDQsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGdldEJvdW5kaW5n
Qm94KEZsb2F0UmVjdCYsIFNWR0xvY2F0YWJsZTo6U3R5bGVVcGRhdGVTdHJhdGVneSA9IFNWR0xv
Y2F0YWJsZTo6QWxsb3dTdHlsZVVwZGF0ZSk7CiAKLSAgICB2b2lkIHNldEN1cnNvckVsZW1lbnQo
U1ZHQ3Vyc29yRWxlbWVudCopOwotICAgIHZvaWQgY3Vyc29yRWxlbWVudFJlbW92ZWQoKTsKLSAg
ICB2b2lkIHNldEN1cnNvckltYWdlVmFsdWUoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSopOwotICAgIHZv
aWQgY3Vyc29ySW1hZ2VWYWx1ZVJlbW92ZWQoKTsKLQogICAgIFNWR0VsZW1lbnQqIGNvcnJlc3Bv
bmRpbmdFbGVtZW50KCkgY29uc3Q7CiAgICAgU1ZHVXNlRWxlbWVudCogY29ycmVzcG9uZGluZ1Vz
ZUVsZW1lbnQoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRS
YXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFy
ZURhdGEuaAkocmV2aXNpb24gMTk5NDE2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnRSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNSArNDgsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5j
ZXNVcGRhdGVzQmxvY2tlZDsgfQogICAgIHZvaWQgc2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZChi
b29sIHZhbHVlKSB7IG1faW5zdGFuY2VzVXBkYXRlc0Jsb2NrZWQgPSB2YWx1ZTsgfQogCi0gICAg
U1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29y
RWxlbWVudDsgfQotICAgIHZvaWQgc2V0Q3Vyc29yRWxlbWVudChTVkdDdXJzb3JFbGVtZW50KiBj
dXJzb3JFbGVtZW50KSB7IG1fY3Vyc29yRWxlbWVudCA9IGN1cnNvckVsZW1lbnQ7IH0KLQogICAg
IFNWR0VsZW1lbnQqIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkgeyByZXR1cm4gbV9jb3JyZXNwb25k
aW5nRWxlbWVudDsgfQogICAgIHZvaWQgc2V0Q29ycmVzcG9uZGluZ0VsZW1lbnQoU1ZHRWxlbWVu
dCogY29ycmVzcG9uZGluZ0VsZW1lbnQpIHsgbV9jb3JyZXNwb25kaW5nRWxlbWVudCA9IGNvcnJl
c3BvbmRpbmdFbGVtZW50OyB9CiAKLSAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBjdXJzb3JJbWFn
ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3JJbWFnZVZhbHVlOyB9Ci0gICAgdm9pZCBz
ZXRDdXJzb3JJbWFnZVZhbHVlKENTU0N1cnNvckltYWdlVmFsdWUqIGN1cnNvckltYWdlVmFsdWUp
IHsgbV9jdXJzb3JJbWFnZVZhbHVlID0gY3Vyc29ySW1hZ2VWYWx1ZTsgfQotCiAgICAgTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyogYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMuZ2V0KCk7IH0KICAgICBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzJiBlbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKQogICAg
IHsKQEAgLTg0LDggKzc4LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEhhc2hTZXQ8U1ZH
RWxlbWVudCo+IG1faW5zdGFuY2VzOwotICAgIFNWR0N1cnNvckVsZW1lbnQqIG1fY3Vyc29yRWxl
bWVudCB7IG51bGxwdHIgfTsKLSAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBtX2N1cnNvckltYWdl
VmFsdWUgeyBudWxscHRyIH07CiAgICAgU1ZHRWxlbWVudCogbV9jb3JyZXNwb25kaW5nRWxlbWVu
dCB7IG51bGxwdHIgfTsKICAgICBib29sIG1faW5zdGFuY2VzVXBkYXRlc0Jsb2NrZWQgOiAxOwog
ICAgIGJvb2wgbV91c2VPdmVycmlkZUNvbXB1dGVkU3R5bGUgOiAxOwpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAJKHJldmlzaW9uIDE5OTQxNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw3IEBAIGJvb2wgU1ZHVVJJUmVmZXJlbmNlOjppc0tub3duQXR0cmlidXRlKGMKICAgICByZXR1
cm4gYXR0ck5hbWUubWF0Y2hlcyhYTGlua05hbWVzOjpocmVmQXR0cik7CiB9CiAKLVN0cmluZyBT
VkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcoY29uc3QgU3Ry
aW5nJiB1cmwsIERvY3VtZW50JiBkb2N1bWVudCkKK1N0cmluZyBTVkdVUklSZWZlcmVuY2U6OmZy
YWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IERv
Y3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBzaXplX3Qgc3RhcnQgPSB1cmwuZmluZCgnIycpOwog
ICAgIGlmIChzdGFydCA9PSBub3RGb3VuZCkKQEAgLTU1LDcgKzU1LDcgQEAgU3RyaW5nIFNWR1VS
SVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaQogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwog
fQogCi1zdGF0aWMgaW5saW5lIFVSTCB1cmxGcm9tSVJJU3RyaW5nV2l0aEZyYWdtZW50SWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmIHVybCwgRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmcmIGZyYWdt
ZW50SWRlbnRpZmllcikKK3N0YXRpYyBpbmxpbmUgVVJMIHVybEZyb21JUklTdHJpbmdXaXRoRnJh
Z21lbnRJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQsIFN0cmluZyYgZnJhZ21lbnRJZGVudGlmaWVyKQogewogICAgIHNpemVfdCBzdGFydE9mRnJh
Z21lbnRJZGVudGlmaWVyID0gdXJsLmZpbmQoJyMnKTsKICAgICBpZiAoc3RhcnRPZkZyYWdtZW50
SWRlbnRpZmllciA9PSBub3RGb3VuZCkKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIGlubGluZSBV
UkwgdXJsRnJvbUlSSVN0cmluZ1dpdGhGcgogICAgIHJldHVybiBVUkwoZG9jdW1lbnQuYmFzZVVS
SSgpLCB1cmwuc3Vic3RyaW5nKHN0YXJ0T2ZGcmFnbWVudElkZW50aWZpZXIpKTsKIH0KIAotRWxl
bWVudCogU1ZHVVJJUmVmZXJlbmNlOjp0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhjb25zdCBT
dHJpbmcmIGlyaSwgRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmcqIGZyYWdtZW50SWRlbnRpZmll
ciwgRG9jdW1lbnQqIGV4dGVybmFsRG9jdW1lbnQpCitFbGVtZW50KiBTVkdVUklSZWZlcmVuY2U6
OnRhcmdldEVsZW1lbnRGcm9tSVJJU3RyaW5nKGNvbnN0IFN0cmluZyYgaXJpLCBjb25zdCBEb2N1
bWVudCYgZG9jdW1lbnQsIFN0cmluZyogZnJhZ21lbnRJZGVudGlmaWVyLCBjb25zdCBEb2N1bWVu
dCogZXh0ZXJuYWxEb2N1bWVudCkKIHsKICAgICAvLyBJZiB0aGVyZSdzIG5vIGZyYWdtZW50IGlk
ZW50aWZpZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgSVJJIHN0cmluZywgd2UgY2FuJ3QgbG9va3Vw
IGFuIGVsZW1lbnQuCiAgICAgU3RyaW5nIGlkOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1VSSVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVUklS
ZWZlcmVuY2UuaAkocmV2aXNpb24gMTk5NDE2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VS
SVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWRO
YW1lPiYpOwogCi0gICAgc3RhdGljIFN0cmluZyBmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIERvY3VtZW50Jik7Ci0gICAgc3RhdGljIEVsZW1lbnQqIHRhcmdl
dEVsZW1lbnRGcm9tSVJJU3RyaW5nKGNvbnN0IFN0cmluZyYsIERvY3VtZW50JiwgU3RyaW5nKiA9
IG51bGxwdHIsIERvY3VtZW50KiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBTdHJpbmcgZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBEb2N1bWVudCYp
OworICAgIHN0YXRpYyBFbGVtZW50KiB0YXJnZXRFbGVtZW50RnJvbUlSSVN0cmluZyhjb25zdCBT
dHJpbmcmLCBjb25zdCBEb2N1bWVudCYsIFN0cmluZyogZnJhZ21lbnRJZGVudGlmaWVyID0gbnVs
bHB0ciwgY29uc3QgRG9jdW1lbnQqIGV4dGVybmFsRG9jdW1lbnQgPSBudWxscHRyKTsKIAotICAg
IHN0YXRpYyBib29sIGlzRXh0ZXJuYWxVUklSZWZlcmVuY2UoY29uc3QgU3RyaW5nJiB1cmksIERv
Y3VtZW50JiBkb2N1bWVudCkKKyAgICBzdGF0aWMgYm9vbCBpc0V4dGVybmFsVVJJUmVmZXJlbmNl
KGNvbnN0IFN0cmluZyYgdXJpLCBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgewogICAg
ICAgICAvLyBGcmFnbWVudC1vbmx5IFVSSXMgYXJlIGFsd2F5cyBpbnRlcm5hbAogICAgICAgICBp
ZiAodXJpLnN0YXJ0c1dpdGgoJyMnKSkK
</data>
<flag name="review"
          id="300836"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>