<?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>12438</bug_id>
          
          <creation_ts>2007-01-27 04:06:03 -0800</creation_ts>
          <short_desc>Webkit does not handle additive attribute on animation elements correctly</short_desc>
          <delta_ts>2008-04-17 21:04:38 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.w3.org/Graphics/SVG/Test/20061213/htmlEmbedHarness/full-animate-elem-81-t.html</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>koivisto</cc>
    
    <cc>webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>32098</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-27 04:06:03 -0800</bug_when>
    <thetext>Webkit does not handle accumulate or additive attributes on animation elements correctly

This is visible in several of the test cases.  This example is one of the most noticeable however.

This is mostly the result of not having a working animVal/baseVal architecture, thus not being able to save off the original value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77744</commentid>
    <comment_count>1</comment_count>
      <attachid>20567</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-15 16:40:26 -0700</bug_when>
    <thetext>Created attachment 20567
patch

Make multiple additive animations work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77885</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-16 21:36:10 -0700</bug_when>
    <thetext>I promise this is the last oversized animation patch, the rest will be easier to split up. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77889</commentid>
    <comment_count>3</comment_count>
      <attachid>20567</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-04-16 22:12:02 -0700</bug_when>
    <thetext>Comment on attachment 20567
patch

I made some comments in IRC about comments... in general it looks fine.  I assume you&apos;ll land a slightly modified version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78048</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-17 21:01:22 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/svg/SVGAnimateColorElement.cpp
Sending        WebCore/svg/SVGAnimateColorElement.h
Sending        WebCore/svg/SVGAnimateElement.cpp
Sending        WebCore/svg/SVGAnimateElement.h
Sending        WebCore/svg/SVGAnimateMotionElement.cpp
Sending        WebCore/svg/SVGAnimateMotionElement.h
Sending        WebCore/svg/SVGAnimateTransformElement.cpp
Sending        WebCore/svg/SVGAnimateTransformElement.h
Sending        WebCore/svg/SVGAnimationElement.cpp
Sending        WebCore/svg/SVGAnimationElement.h
Sending        WebCore/svg/SVGSVGElement.cpp
Sending        WebCore/svg/SVGSetElement.cpp
Sending        WebCore/svg/SVGSetElement.h
Sending        WebCore/svg/animation/SMILTimeContainer.cpp
Sending        WebCore/svg/animation/SMILTimeContainer.h
Sending        WebCore/svg/animation/SVGSMILElement.cpp
Sending        WebCore/svg/animation/SVGSMILElement.h
Transmitting file data ..................
Committed revision 32044.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78051</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-04-17 21:04:38 -0700</bug_when>
    <thetext>That fixed additive, filed https://bugs.webkit.org/show_bug.cgi?id=18564 to cover accumulate.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20567</attachid>
            <date>2008-04-15 16:40:26 -0700</date>
            <delta_ts>2008-04-16 22:12:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>svg-animation-additive-4.patch</filename>
            <type>text/plain</type>
            <size>61403</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMTkyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA3IEBACisyMDA4LTA0LTE1ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3JlIFNWRyBhbmltYXRpb246CisgICAgICAgIAorICAgICAgICAtIE1ha2UgbXVsdGlwbGUgYWRk
aXRpdmUgYW5pbWF0aW9ucyB3b3JrCisgICAgICAgIC0gU3VwcG9ydCBhbmltYXRpb25zIGluc2lk
ZSB0cmVlIHJlZmVyZW5jZWQgYnkgPHVzZT4KKworICAgICAgICAqIHN2Zy9TVkdBbmltYXRlQ29s
b3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6
OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlQ29sb3JF
bGVtZW50Lmg6CisgICAgICAgIAorICAgICAgICBNYWRlIHRoaXMgQW5pbWF0ZUVsZW1lbnQgc3Vi
Y2xhc3MuIEFsbCBmdW5jdGlvbmFsaXR5IGlzIG5vdyBwcm92aWRlZCBieSBBbmltYXRlRWxlbWVu
dC4KKyAgICAgICAgCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50OjpkZXRlcm1pbmVQcm9wZXJ0eVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21B
bmRUb1ZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3Vs
YXRlRnJvbUFuZEJ5VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50
OjpyZXNldFRvQmFzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50
OjphcHBseVJlc3VsdHNUb1RhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpyZXNldFRvQmFzZVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjpjYWxjdWxhdGVBbmltYXRl
ZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OjphcHBs
eVJlc3VsdHNUb1RhcmdldCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpyZXNldFRvQmFzZVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxh
dGVBbmltYXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50OjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KToKKyAgICAgICAg
KiBzdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaDoKKyAgICAgICAgCisgICAgICAgIFN3
aXRjaCB0byBuZXcgbW9kZWwgd2hlcmUKKyAgICAgICAgLSByZXNldFRvQmFzZVZhbHVlKCkgcmVz
ZXRzIHRoZSBhbmltYXRlZCB2YWx1ZSBiYWNrIHRvIHRoZSBiYXNlIHZhbHVlCisgICAgICAgIC0g
Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZSgpIGNvbXB1dGVzIHRoZSB2YWx1ZSBhbmQgYWRkcyBpdCB0
byB0aGUgZWxlbWVudCB1c2VkIGZvciBhY2N1bXVsYXRpb24KKyAgICAgICAgLSBhcHBseVJlc3Vs
dHNUb1RhcmdldCgpIHNldHMgdGhlIGNvbXB1dGVkIHZhbHVlIHRoZSB0YXJnZXQgZWxlbWVudAor
ICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpmcm9tVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0cmlidXRlSXNDU1MpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0QXR0cmlidXRlSXNDU1MpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0
ZWRWYWx1ZSk6CisgICAgICAgIAorICAgICAgICBVcGRhdGUgaW5zdGFuY2VzIHRvby4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZl
SW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6dXBkYXRl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZGVk
QWN0aXZlSW50ZXJ2YWwpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRpb25FbGVtZW50Lmg6Cisg
ICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZH
RWxlbWVudDo6U1ZHU1ZHRWxlbWVudCk6CisgICAgICAgICogc3ZnL1NWR1NldEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2V0RWxlbWVudDo6U1ZHU2V0RWxlbWVudCk6CisgICAg
ICAgICogc3ZnL1NWR1NldEVsZW1lbnQuaDoKKyAgICAgICAgCisgICAgICAgIE1hZGUgdGhpcyBB
bmltYXRlRWxlbWVudCBzdWJjbGFzcy4gQWxsIGZ1bmN0aW9uYWxpdHkgaXMgbm93IHByb3ZpZGVk
IGJ5IEFuaW1hdGVFbGVtZW50LgorICAgICAgICAKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NN
SUxUaW1lQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVy
OjpTTUlMVGltZUNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5l
cjo6dW5zY2hlZHVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBk
YXRlRG9jdW1lbnRPcmRlckluZGV4ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UHJpb3JpdHlDb21w
YXJlOjpQcmlvcml0eUNvbXBhcmUpOgorICAgICAgICAoV2ViQ29yZTo6UHJpb3JpdHlDb21wYXJl
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjpzb3J0
QnlQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjphcHBseU9yZGVyU29ydEZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OnNvcnRCeUFwcGx5T3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U01JTFRpbWVDb250YWluZXI6OmJhc2VWYWx1ZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpTTUlM
VGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICogc3ZnL2FuaW1hdGlv
bi9TTUlMVGltZUNvbnRhaW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWlu
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2V0RG9j
dW1lbnRPcmRlckluZGV4ZXNEaXJ0eSk6CisgICAgICAgIAorICAgICAgICBEbyBhZGRpdGl2ZSBh
bmltYXRpb24gd2l0aCB0aGUgZm9sbG93aW5nIHN0ZXBzCisgICAgICAgIC0gc29ydCBhY3RpdmUg
YW5pbWF0aW9ucyBiYXNlZCBvbiB0aGVpciBwcmlvcml0eSAoYmVnaW4gdGltZSwgZG9jdW1lbnQg
b3JkZXIpLgorICAgICAgICAtIGlmIG5vdCB5ZXQgc2F2ZWQgZm9yIGVhY2ggKGVsZW1lbnQsIGF0
dHJpYnV0ZSkgcGFpciBzYXZlIHRoZSBiYXNlIHZhbHVlLgorICAgICAgICAtIGxvd2VzdCBwcmlv
cml0eSBhbmltYXRpb24gZm9yIGVhY2ggKGVsZW1lbnQsIGF0dHJpYnV0ZSkgYWN0cyBhcyB0aGUg
cmVzdWx0IGVsZW1lbnQuCisgICAgICAgIC0gYW5pbWF0aW9uIHJlc3VsdHMgYXJlIHJlc29sdmVk
IGluIHByaW9yaXR5IG9yZGVyIGFuZCByZXN1bHRzIGFyZSBhY2N1bXVsYXRlZCB0byB0aGUgcmVz
dWx0IGVsZW1lbnQuCisgICAgICAgIC0gYWZ0ZXIgYWxsIGFjdGl2ZSBhbmltYXRpb25zIGhhdmUg
YmVlbiBwcm9jZXNzZWQgdGhlIHZhbHVlcyBpbiByZXN1bHQgZWxlbWVudHMgYXJlIGFwcGxpZWQg
dG8gdGhlIHRhcmdldCBlbGVtZW50cy4KKyAgICAgICAgCisgICAgICAgICogc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6
U1ZHU01JTEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgCisgICAgICAgIEludmFsaWRhdGUgZG9jdW1lbnQg
b3JkZXIgaW5kZXguCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6
OmF0dHJpYnV0ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmlzSW5h
Y3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmlzRnJvemVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpiZWdpbkxpc3RDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpkZXRlcm1pbmVBY3RpdmVTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aXNDb250cmlidXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnByb2dyZXNzKToKKyAgICAgICAgCisgICAgICAgIFRh
a2UgY2FyZSB0aGF0IGFuaW1hdGlvbnMgaW4gZnJvemVuIHN0YXRlIHN0aWxsIGNvbnRyaWJ1dGUg
dG8gdGhlIHRvdGFsLiBTaW5jZSB3ZSBub3cgYnVpbGQgdGhlIHJlc3VsdCBzdGFydGluZworICAg
ICAgICBmcm9tIHRoZSBiYXNlIHZhbHVlLCBmaWxsPSJyZXBsYWNlIiB3b3JrcyBtYWdpY2FsbHkg
c2ltcGx5IGJ5IG5vdCBjb250cmlidXRpbmcgYW55dGhpbmcuCisgICAgICAgIAorICAgICAgICAq
IHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NN
SUxFbGVtZW50OjpwcmV2aW91c0ludGVydmFsQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U01JTEVsZW1lbnQ6OmRvY3VtZW50T3JkZXJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
TUlMRWxlbWVudDo6c2V0RG9jdW1lbnRPcmRlckluZGV4KToKKwogMjAwOC0wNC0xNSAgS2V2aW4g
TWNDdWxsb3VnaCAgPGttY2N1bGxvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBUaW0uCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkocmV2aXNp
b24gMzE4OTApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNTQgKzI1LDExIEBACiAjaWYgRU5BQkxFKFNWR19BTklNQVRJT04p
CiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0NvbG9yLmgi
Ci0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0vLyBGSVhN
RTogVGhpcyBjbGFzcyBuZWVkcyB0byBkaWUuIFNWR0FuaW1hdGVFbGVtZW50ICh3aGljaCBoYXMg
c3VwZXJzZXQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkpIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgaW5z
dGVhZC4KLQogU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogU1ZHQW5p
bWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2MpCi17Ci19Ci0KLVNWR0FuaW1hdGVDb2xvckVsZW1l
bnQ6On5TVkdBbmltYXRlQ29sb3JFbGVtZW50KCkKLXsKLX0KLQotdm9pZCBTVkdBbmltYXRlQ29s
b3JFbGVtZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQodW5zaWduZWQgcmVwZWF0KQot
ewotICAgIGlmIChpc0FkZGl0aXZlKCkpIHsKLSAgICAgICAgQ29sb3IgYmFzZUNvbG9yID0gU1ZH
Q29sb3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKG1fc2F2ZWRCYXNlVmFsdWUpOwotICAgICAg
ICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKENvbG9yRGlzdGFuY2U6OmFkZENvbG9y
c0FuZENsYW1wKGJhc2VDb2xvciwgbV9hbmltYXRlZENvbG9yKS5uYW1lKCkpOwotICAgIH0gZWxz
ZQotICAgICAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZhbHVlKG1fYW5pbWF0ZWRDb2xv
ci5uYW1lKCkpOwotfQotCi1ib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSkKLXsKLSAgICBDb2xvciBvbGRDb2xvciA9IG1fYW5p
bWF0ZWRDb2xvcjsKLSAgICBtX2FuaW1hdGVkQ29sb3IgPSBDb2xvckRpc3RhbmNlKG1fZnJvbUNv
bG9yLCBtX3RvQ29sb3IpLnNjYWxlZERpc3RhbmNlKHBlcmNlbnRhZ2UpLmFkZFRvQ29sb3JBbmRD
bGFtcChtX2Zyb21Db2xvcik7Ci0gICAgcmV0dXJuIG1fYW5pbWF0ZWRDb2xvciAhPSBvbGRDb2xv
cjsKLX0KLSAgICAKLWJvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFu
ZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmlu
ZykKLXsKLSAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmlu
Zyhmcm9tU3RyaW5nKTsKLSAgICBtX3RvQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29s
b3JTdHJpbmcodG9TdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNWR0FuaW1h
dGVDb2xvckVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcmIGZy
b21TdHJpbmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpCisgICAgOiBTVkdBbmltYXRlRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCiB7Ci0gICAgbV9mcm9tQ29sb3IgPSBTVkdDb2xvcjo6Y29sb3JGcm9t
UkdCQ29sb3JTdHJpbmcoZnJvbVN0cmluZyk7Ci0gICAgbV90b0NvbG9yID0gQ29sb3JEaXN0YW5j
ZTo6YWRkQ29sb3JzQW5kQ2xhbXAobV9mcm9tQ29sb3IsIFNWR0NvbG9yOjpjb2xvckZyb21SR0JD
b2xvclN0cmluZyhieVN0cmluZykpOwotICAgIHJldHVybiB0cnVlOwogfQogCiB9CkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCShyZXZpc2lvbiAzMTg5MCkKKysrIFdlYkNv
cmUvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzIg
KzI1LDE0IEBACiAjZGVmaW5lIFNWR0FuaW1hdGVDb2xvckVsZW1lbnRfaAogI2lmIEVOQUJMRShT
VkdfQU5JTUFUSU9OKQogCi0jaW5jbHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5oIgotI2luY2x1
ZGUgIkNvbG9yRGlzdGFuY2UuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAi
U1ZHQW5pbWF0ZUVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3Mg
U1ZHQ29sb3I7Ci0KLSAgICBjbGFzcyBTVkdBbmltYXRlQ29sb3JFbGVtZW50IDogcHVibGljIFNW
R0FuaW1hdGlvbkVsZW1lbnQgeworICAgIC8vIEluaGVyaXQgZnJvbSBTVkdBbmltYXRlRWxlbWVu
dCB3aGljaCBpbXBsZW1lbnRzIHN1cGVyc2V0IG9mIGZ1bmN0aW9uYWxpdHkuCisgICAgY2xhc3Mg
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudCA6IHB1YmxpYyBTVkdBbmltYXRlRWxlbWVudCB7CiAgICAg
cHVibGljOgogICAgICAgICBTVkdBbmltYXRlQ29sb3JFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwotICAgICAgICB2aXJ0dWFsIH5TVkdBbmltYXRlQ29sb3JFbGVtZW50
KCk7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCog
Y29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9Ci0gICAgICAgIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KHVuc2lnbmVkIHJlcGVh
dCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNl
bnQpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0
IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIENv
bG9yIG1fYmFzZUNvbG9yOwotICAgICAgICBDb2xvciBtX2FuaW1hdGVkQ29sb3I7Ci0gICAgICAg
IENvbG9yIG1fdG9Db2xvcjsKLSAgICAgICAgQ29sb3IgbV9mcm9tQ29sb3I7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmNwcAko
cmV2aXNpb24gMzE4OTApCisrKyBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcyLDc2ICs3Miw3OSBAQCBzdGF0aWMgYm9vbCBwYXJzZU51bWJlclZh
bHVlQW5kVW5pdChjb25zCiAgICAgcmV0dXJuIG9rOwogfQogCi12b2lkIFNWR0FuaW1hdGVFbGVt
ZW50OjphcHBseUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQodW5zaWduZWQgcmVwZWF0KQorU1ZHQW5p
bWF0ZUVsZW1lbnQ6OlByb3BlcnR5VHlwZSBTVkdBbmltYXRlRWxlbWVudDo6ZGV0ZXJtaW5lUHJv
cGVydHlUeXBlKGNvbnN0IFN0cmluZyYgYXR0cmlidXRlKSBjb25zdAogewotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGVudGlyZWx5IHdyb25nIHdheSB0byBkbyBhZGRpdGl2ZS4gSXQgd29uJ3Qgd29y
ayB3aXRoCi0gICAgLy8gbXVsdGlwbGUgYW5pbWF0aW9ucyBvbiB0aGUgc2FtZSBlbGVtZW50Lgot
ICAgIC8vIFdlIG5lZWQgdG8gYWRkIHRvZ2V0aGVyIGFsbCBhbmltYXRpb24gY29udHJpYnV0aW9u
cyBwZXIgcHJvcGVydHkgYW5kCi0gICAgLy8gdGhlbiBhcHBseSBpbiBvbmUgZ28uCi0gICAgU3Ry
aW5nIHZhbHVlVG9BcHBseTsKLSAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gTnVtYmVyUHJvcGVy
dHkpIHsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IG1fYW5pbWF0ZWROdW1iZXI7Ci0gICAgICAg
IC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IHdvcmsgZm9yIHZhbHVlcyBhbmltYXRpb24uCi0gICAg
ICAgIGlmIChpc0FjY3VtdWxhdGVkKCkgJiYgcmVwZWF0KQotICAgICAgICAgICAgbnVtYmVyICs9
IG1fdG9OdW1iZXIgKiByZXBlYXQ7Ci0gICAgICAgIGlmIChpc0FkZGl0aXZlKCkpIHsKLSAgICAg
ICAgICAgIGRvdWJsZSBiYXNlOwotICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlclZhbHVlQW5k
VW5pdChtX3NhdmVkQmFzZVZhbHVlLCBiYXNlLCBtX251bWJlclVuaXQpKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIG51bWJlciArPSBiYXNlOwotICAgICAgICB9Ci0gICAg
ICAgIHZhbHVlVG9BcHBseSA9IFN0cmluZzo6bnVtYmVyKG51bWJlcikgKyBtX251bWJlclVuaXQ7
Ci0gICAgfSBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBDb2xvclByb3BlcnR5KSB7Ci0gICAg
ICAgIENvbG9yIGJhc2UgPSBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcobV9zYXZl
ZEJhc2VWYWx1ZSk7Ci0gICAgICAgIGlmIChpc0FkZGl0aXZlKCkpCi0gICAgICAgICAgICB2YWx1
ZVRvQXBwbHkgPSBDb2xvckRpc3RhbmNlOjphZGRDb2xvcnNBbmRDbGFtcChiYXNlLCBtX2FuaW1h
dGVkQ29sb3IpLm5hbWUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWVUb0FwcGx5
ID0gbV9hbmltYXRlZENvbG9yLm5hbWUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmFsdWVUb0Fw
cGx5ID0gbV9hbmltYXRlZFN0cmluZzsKLSAgICBzZXRUYXJnZXRBdHRyaWJ1dGVBbmltYXRlZFZh
bHVlKHZhbHVlVG9BcHBseSk7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgYSBmdWxsIHByb3BlcnR5
IHRhYmxlIGZvciBmaWd1cmluZyB0aGlzIG91dCByZWxpYWJseS4KKyAgICBpZiAoaGFzVGFnTmFt
ZShTVkdOYW1lczo6YW5pbWF0ZUNvbG9yVGFnKSkKKyAgICAgICAgcmV0dXJuIENvbG9yUHJvcGVy
dHk7CisgICAgaWYgKGF0dHJpYnV0ZSA9PSAiY29sb3IiIHx8IGF0dHJpYnV0ZSA9PSAiZmlsbCIg
fHwgYXR0cmlidXRlID09ICJzdHJva2UiKQorICAgICAgICByZXR1cm4gQ29sb3JQcm9wZXJ0eTsK
KyAgICByZXR1cm4gTnVtYmVyUHJvcGVydHk7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6
OnVwZGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSkKK3ZvaWQgU1ZHQW5pbWF0ZUVs
ZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQg
cmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkKIHsKKyAgICBBU1NFUlQocGVy
Y2VudGFnZSA+PSAwLmYgJiYgcGVyY2VudGFnZSA8PSAxLmYpOworICAgIEFTU0VSVChyZXN1bHRF
bGVtZW50KTsKKyAgICBpZiAoaGFzVGFnTmFtZShTVkdOYW1lczo6c2V0VGFnKSkKKyAgICAgICAg
cGVyY2VudGFnZSA9IDEuZjsKKyAgICBpZiAoIXJlc3VsdEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZH
TmFtZXM6OmFuaW1hdGVUYWcpICYmICFyZXN1bHRFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVz
OjphbmltYXRlQ29sb3JUYWcpIAorICAgICAgICAmJiAhcmVzdWx0RWxlbWVudC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6c2V0VGFnKSkKKyAgICAgICAgcmV0dXJuOworICAgIFNWR0FuaW1hdGVFbGVt
ZW50KiByZXN1bHRzID0gc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZUVsZW1lbnQqPihyZXN1bHRFbGVt
ZW50KTsKKyAgICAvLyBDYW4ndCBhY2N1bXVsYXRlIG92ZXIgYSBzdHJpbmcgcHJvcGVydHkuCisg
ICAgaWYgKHJlc3VsdHMtPm1fcHJvcGVydHlUeXBlID09IFN0cmluZ1Byb3BlcnR5ICYmIG1fcHJv
cGVydHlUeXBlICE9IFN0cmluZ1Byb3BlcnR5KQorICAgICAgICByZXR1cm47CiAgICAgaWYgKG1f
cHJvcGVydHlUeXBlID09IE51bWJlclByb3BlcnR5KSB7Ci0gICAgICAgIGRvdWJsZSBvbGRWYWx1
ZSA9IG1fYW5pbWF0ZWROdW1iZXI7Ci0gICAgICAgIG1fYW5pbWF0ZWROdW1iZXIgPSAobV90b051
bWJlciAtIG1fZnJvbU51bWJlcikgKiBwZXJjZW50YWdlICsgbV9mcm9tTnVtYmVyOwotICAgICAg
ICByZXR1cm4gb2xkVmFsdWUgPT0gbV9hbmltYXRlZE51bWJlcjsKKyAgICAgICAgLy8gVG8gYW5p
bWF0aW9uIHVzZXMgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBsb3dlciBwcmlvcml0eSBhbmltYXRp
b25zIGFzIHRoZSBiYXNlIHZhbHVlLgorICAgICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IFRv
QW5pbWF0aW9uKQorICAgICAgICAgICAgbV9mcm9tTnVtYmVyID0gcmVzdWx0cy0+bV9hbmltYXRl
ZE51bWJlcjsKKyAgICAKKyAgICAgICAgZG91YmxlIG51bWJlciA9IChtX3RvTnVtYmVyIC0gbV9m
cm9tTnVtYmVyKSAqIHBlcmNlbnRhZ2UgKyBtX2Zyb21OdW1iZXI7CisKKyAgICAgICAgaWYgKGlz
QWNjdW11bGF0ZWQoKSAmJiByZXBlYXQpCisgICAgICAgICAgICBudW1iZXIgKz0gbV90b051bWJl
ciAqIHJlcGVhdDsKKyAgICAgICAgaWYgKGlzQWRkaXRpdmUoKSAmJiBhbmltYXRpb25Nb2RlKCkg
IT0gVG9BbmltYXRpb24pCisgICAgICAgICAgICByZXN1bHRzLT5tX2FuaW1hdGVkTnVtYmVyICs9
IG51bWJlcjsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0ZWRO
dW1iZXIgPSBudW1iZXI7CisgICAgICAgIHJldHVybjsKICAgICB9IAogICAgIGlmIChtX3Byb3Bl
cnR5VHlwZSA9PSBDb2xvclByb3BlcnR5KSB7Ci0gICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9IENv
bG9yRGlzdGFuY2UobV9mcm9tQ29sb3IsIG1fdG9Db2xvcikuc2NhbGVkRGlzdGFuY2UocGVyY2Vu
dGFnZSkuYWRkVG9Db2xvckFuZENsYW1wKG1fZnJvbUNvbG9yKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmIChhbmltYXRpb25Nb2RlKCkgPT0gVG9BbmltYXRpb24pCisgICAgICAg
ICAgICBtX2Zyb21Db2xvciA9IHJlc3VsdHMtPm1fYW5pbWF0ZWRDb2xvcjsKKyAgICAgICAgQ29s
b3IgY29sb3IgPSBDb2xvckRpc3RhbmNlKG1fZnJvbUNvbG9yLCBtX3RvQ29sb3IpLnNjYWxlZERp
c3RhbmNlKHBlcmNlbnRhZ2UpLmFkZFRvQ29sb3JBbmRDbGFtcChtX2Zyb21Db2xvcik7CisgICAg
ICAgIC8vIEZJWE1FOiBhY2N1bXVsYXRlCisgICAgICAgIGlmIChpc0FkZGl0aXZlKCkgJiYgYW5p
bWF0aW9uTW9kZSgpICE9IFRvQW5pbWF0aW9uKQorICAgICAgICAgICAgcmVzdWx0cy0+bV9hbmlt
YXRlZENvbG9yID0gQ29sb3JEaXN0YW5jZTo6YWRkQ29sb3JzQW5kQ2xhbXAocmVzdWx0cy0+bV9h
bmltYXRlZENvbG9yLCBjb2xvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdHMt
Pm1fYW5pbWF0ZWRDb2xvciA9IGNvbG9yOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAog
ICAgIEFuaW1hdGlvbk1vZGUgYW5pbWF0aW9uTW9kZSA9IHRoaXMtPmFuaW1hdGlvbk1vZGUoKTsK
ICAgICBBU1NFUlQoYW5pbWF0aW9uTW9kZSA9PSBGcm9tVG9BbmltYXRpb24gfHwgYW5pbWF0aW9u
TW9kZSA9PSBUb0FuaW1hdGlvbiB8fCBhbmltYXRpb25Nb2RlID09IFZhbHVlc0FuaW1hdGlvbik7
Ci0gICAgU3RyaW5nIG9sZFZhbHVlID0gbV9hbmltYXRlZFN0cmluZzsKICAgICBpZiAoKGFuaW1h
dGlvbk1vZGUgPT0gRnJvbVRvQW5pbWF0aW9uICYmIHBlcmNlbnRhZ2UgPiAwLjVmKSB8fCBhbmlt
YXRpb25Nb2RlID09IFRvQW5pbWF0aW9uIHx8IHBlcmNlbnRhZ2UgPT0gMS4wZikKLSAgICAgICAg
bV9hbmltYXRlZFN0cmluZyA9IG1fdG9TdHJpbmc7CisgICAgICAgIHJlc3VsdHMtPm1fYW5pbWF0
ZWRTdHJpbmcgPSBtX3RvU3RyaW5nOwogICAgIGVsc2UKLSAgICAgICAgbV9hbmltYXRlZFN0cmlu
ZyA9IG1fZnJvbVN0cmluZzsKLSAgICByZXR1cm4gb2xkVmFsdWUgPT0gbV9hbmltYXRlZFN0cmlu
ZzsKLX0KLSAKLXN0YXRpYyBib29sIGlzQ29sb3JBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBhdHRy
aWJ1dGUpCi17Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZSA9PSAiY29sb3IiIHx8IGF0dHJpYnV0ZSA9
PSAiZmlsbCIgfHwgYXR0cmlidXRlID09ICJzdHJva2UiOworICAgICAgICByZXN1bHRzLT5tX2Fu
aW1hdGVkU3RyaW5nID0gbV9mcm9tU3RyaW5nOworICAgIC8vIEhpZ2hlciBwcmlvcml0eSByZXBs
YWNlIGFuaW1hdGlvbiBvdmVycmlkZXMgYW55IGFkZGl0aXZlIHJlc3VsdHMgc28gZmFyLgorICAg
IHJlc3VsdHMtPm1fcHJvcGVydHlUeXBlID0gU3RyaW5nUHJvcGVydHk7CiB9CiAKIGJvb2wgU1ZH
QW5pbWF0ZUVsZW1lbnQ6OmNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhjb25zdCBTdHJpbmcmIGZy
b21TdHJpbmcsIGNvbnN0IFN0cmluZyYgdG9TdHJpbmcpCiB7CiAgICAgLy8gRklYTUU6IE5lZWRz
IG1vcmUgc29saWQgd2F5IGRldGVybWluZSB0YXJnZXQgYXR0cmlidXRlIHR5cGUuCi0gICAgbV9w
cm9wZXJ0eVR5cGUgPSBpc0NvbG9yQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUoKSkgPyBDb2xvclBy
b3BlcnR5IDogTnVtYmVyUHJvcGVydHk7CisgICAgbV9wcm9wZXJ0eVR5cGUgPSBkZXRlcm1pbmVQ
cm9wZXJ0eVR5cGUoYXR0cmlidXRlTmFtZSgpKTsKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0g
Q29sb3JQcm9wZXJ0eSkgewogICAgICAgICBtX2Zyb21Db2xvciA9IFNWR0NvbG9yOjpjb2xvckZy
b21SR0JDb2xvclN0cmluZyhmcm9tU3RyaW5nKTsKICAgICAgICAgbV90b0NvbG9yID0gU1ZHQ29s
b3I6OmNvbG9yRnJvbVJHQkNvbG9yU3RyaW5nKHRvU3RyaW5nKTsKICAgICAgICAgaWYgKG1fZnJv
bUNvbG9yLmlzVmFsaWQoKSAmJiBtX3RvQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKKyAgICB9IGVsc2UgaWYgKG1fcHJvcGVydHlUeXBlID09
IE51bWJlclByb3BlcnR5KSB7CiAgICAgICAgIG1fbnVtYmVyVW5pdCA9IFN0cmluZygpOwotICAg
ICAgICBpZiAocGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQoZnJvbVN0cmluZywgbV9mcm9tTnVtYmVy
LCBtX251bWJlclVuaXQpKSB7Ci0gICAgICAgICAgICBpZiAocGFyc2VOdW1iZXJWYWx1ZUFuZFVu
aXQodG9TdHJpbmcsIG1fdG9OdW1iZXIsIG1fbnVtYmVyVW5pdCkpCisgICAgICAgIGlmIChwYXJz
ZU51bWJlclZhbHVlQW5kVW5pdCh0b1N0cmluZywgbV90b051bWJlciwgbV9udW1iZXJVbml0KSkg
eworICAgICAgICAgICAgLy8gRm9yIHRvLWFuaW1hdGlvbnMgdGhlIGZyb20gbnVtYmVyIGlzIGNh
bGN1bGF0ZWQgbGF0ZXIKKyAgICAgICAgICAgIGlmIChhbmltYXRpb25Nb2RlKCkgPT0gVG9Bbmlt
YXRpb24gfHwgcGFyc2VOdW1iZXJWYWx1ZUFuZFVuaXQoZnJvbVN0cmluZywgbV9mcm9tTnVtYmVy
LCBtX251bWJlclVuaXQpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgfQpAQCAtMTUzLDcgKzE1Niw4IEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhbGN1
bGF0ZUZyb21BbmQKIAogYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZEJ5
VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZykK
IHsKLSAgICBtX3Byb3BlcnR5VHlwZSA9IGlzQ29sb3JBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSgp
KSA/IENvbG9yUHJvcGVydHkgOiBOdW1iZXJQcm9wZXJ0eTsKKyAgICBBU1NFUlQoIWhhc1RhZ05h
bWUoU1ZHTmFtZXM6OnNldFRhZykpOworICAgIG1fcHJvcGVydHlUeXBlID0gZGV0ZXJtaW5lUHJv
cGVydHlUeXBlKGF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgaWYgKG1fcHJvcGVydHlUeXBlID09IENv
bG9yUHJvcGVydHkpIHsKICAgICAgICAgbV9mcm9tQ29sb3IgPSBmcm9tU3RyaW5nLmlzRW1wdHko
KSA/IENvbG9yKCkgOiBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoZnJvbVN0cmlu
Zyk7CiAgICAgICAgIG1fdG9Db2xvciA9IENvbG9yRGlzdGFuY2U6OmFkZENvbG9yc0FuZENsYW1w
KG1fZnJvbUNvbG9yLCBTVkdDb2xvcjo6Y29sb3JGcm9tUkdCQ29sb3JTdHJpbmcoYnlTdHJpbmcp
KTsKQEAgLTE3MSw2ICsxNzUsMzkgQEAgYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6Y2FsY3VsYXRl
RnJvbUFuZAogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIFNWR0FuaW1hdGVFbGVtZW50Ojpy
ZXNldFRvQmFzZVZhbHVlKGNvbnN0IFN0cmluZyYgYmFzZVN0cmluZykKK3sKKyAgICBtX2FuaW1h
dGVkU3RyaW5nID0gYmFzZVN0cmluZzsKKyAgICBtX3Byb3BlcnR5VHlwZSA9IGRldGVybWluZVBy
b3BlcnR5VHlwZShhdHRyaWJ1dGVOYW1lKCkpOworICAgIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBD
b2xvclByb3BlcnR5KSB7CisgICAgICAgIG1fYW5pbWF0ZWRDb2xvciA9IGJhc2VTdHJpbmcuaXNF
bXB0eSgpID8gQ29sb3IoKSA6IFNWR0NvbG9yOjpjb2xvckZyb21SR0JDb2xvclN0cmluZyhiYXNl
U3RyaW5nKTsKKyAgICAgICAgaWYgKG1fYW5pbWF0ZWRDb2xvci5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBOdW1iZXJQcm9w
ZXJ0eSkgeworICAgICAgICBpZiAoYmFzZVN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IG1fYW5pbWF0ZWROdW1iZXIgPSAwOworICAgICAgICAgICAgbV9udW1iZXJVbml0ID0gU3RyaW5n
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcnNlTnVt
YmVyVmFsdWVBbmRVbml0KGJhc2VTdHJpbmcsIG1fYW5pbWF0ZWROdW1iZXIsIG1fbnVtYmVyVW5p
dCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcHJvcGVydHlUeXBlID0gU3Ry
aW5nUHJvcGVydHk7Cit9CisgICAgCit2b2lkIFNWR0FuaW1hdGVFbGVtZW50OjphcHBseVJlc3Vs
dHNUb1RhcmdldCgpCit7CisgICAgU3RyaW5nIHZhbHVlVG9BcHBseTsKKyAgICBpZiAobV9wcm9w
ZXJ0eVR5cGUgPT0gQ29sb3JQcm9wZXJ0eSkKKyAgICAgICAgdmFsdWVUb0FwcGx5ID0gbV9hbmlt
YXRlZENvbG9yLm5hbWUoKTsKKyAgICBlbHNlIGlmIChtX3Byb3BlcnR5VHlwZSA9PSBOdW1iZXJQ
cm9wZXJ0eSkKKyAgICAgICAgdmFsdWVUb0FwcGx5ID0gU3RyaW5nOjpudW1iZXIobV9hbmltYXRl
ZE51bWJlcikgKyBtX251bWJlclVuaXQ7CisgICAgZWxzZQorICAgICAgICB2YWx1ZVRvQXBwbHkg
PSBtX2FuaW1hdGVkU3RyaW5nOworICAgIAorICAgIHNldFRhcmdldEF0dHJpYnV0ZUFuaW1hdGVk
VmFsdWUodmFsdWVUb0FwcGx5KTsKK30KKyAgICAKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCShyZXZpc2lvbiAzMTg5MCkKKysrIFdlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxNSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGNvbnN0
IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAg
ICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0VG9CYXNlVmFsdWUoY29uc3QgU3RyaW5n
Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kVG9WYWx1ZXMoY29uc3Qg
U3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5nKTsKICAgICAgICAgdmly
dHVhbCBib29sIGNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhjb25zdCBTdHJpbmcmIGZyb21TdHJp
bmcsIGNvbnN0IFN0cmluZyYgYnlTdHJpbmcpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
QW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFw
cGx5QW5pbWF0ZWRWYWx1ZVRvRWxlbWVudCh1bnNpZ25lZCByZXBlYXQpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25l
ZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50KTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGFwcGx5UmVzdWx0c1RvVGFyZ2V0KCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBl
bnVtIFByb3BlcnR5VHlwZSB7IE51bWJlclByb3BlcnR5LCBDb2xvclByb3BlcnR5LCBTdHJpbmdQ
cm9wZXJ0eSB9OworICAgICAgICBQcm9wZXJ0eVR5cGUgZGV0ZXJtaW5lUHJvcGVydHlUeXBlKGNv
bnN0IFN0cmluZyYgYXR0cmlidXRlKSBjb25zdDsKICAgICAgICAgUHJvcGVydHlUeXBlIG1fcHJv
cGVydHlUeXBlOwogICAgICAgICAKICAgICAgICAgZG91YmxlIG1fZnJvbU51bWJlcjsKSW5kZXg6
IFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDMxODkwKQor
KysgV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTMsMTYgKzExMyw2IEBAIFBhdGggU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmFuaW1h
dGlvblAKICAgICByZXR1cm4gUGF0aCgpOwogfQogCi1ib29sIFNWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50Ojp1cGRhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UpCi17Ci0gICAgRmxvYXRT
aXplIGRpZmYgPSBtX3RvUG9pbnQgLSBtX2Zyb21Qb2ludDsKLSAgICBtX2FuaW1hdGVkVHJhbnNs
YXRpb24uc2V0V2lkdGgoZGlmZi53aWR0aCgpICogcGVyY2VudGFnZSArIG1fZnJvbVBvaW50Lngo
KSk7Ci0gICAgbV9hbmltYXRlZFRyYW5zbGF0aW9uLnNldEhlaWdodChkaWZmLmhlaWdodCgpICog
cGVyY2VudGFnZSArIG1fZnJvbVBvaW50LnkoKSk7Ci0gICAgLy8gRklYTUU6IEFuaW1hdGUgYW5n
bGVzCi0gICAgbV9hbmltYXRlZEFuZ2xlID0gMDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3Rh
dGljIGJvb2wgcGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIEZsb2F0UG9pbnQmIHBvaW50KQog
ewogICAgIGlmIChzLmlzRW1wdHkoKSkKQEAgLTE0Niw2ICsxMzYsMTYgQEAgc3RhdGljIGJvb2wg
cGFyc2VQb2ludChjb25zdCBTdHJpbmcmIHMsIAogICAgIC8vIGRpc2FsbG93IGFueXRoaW5nIGV4
Y2VwdCBzcGFjZXMgYXQgdGhlIGVuZAogICAgIHJldHVybiAhc2tpcE9wdGlvbmFsU3BhY2VzKGN1
ciwgZW5kKTsKIH0KKyAgICAKK3ZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OnJlc2V0VG9C
YXNlVmFsdWUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBpZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCogdHJhbnNm
b3JtYWJsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCo+KHRhcmdldEVsZW1lbnQoKSk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1vZGlmeSBz
dXBwbGVtZW50YWwgdHJhbnNmb3JtLCBub3QgdGhlIHRyYW5zZm9ybSBhdHRyaWJ1dGUhCisgICAg
RXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0cmFuc2Zvcm1hYmxlRWxlbWVudC0+dHJhbnNmb3JtKCkt
PmNsZWFyKGVjKTsKK30KIAogYm9vbCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6Y2FsY3VsYXRl
RnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0
b1N0cmluZykKIHsKQEAgLTE2Myw0NCArMTYzLDQwIEBAIGJvb2wgU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQ6OmNhbGN1bGF0ZUYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdBbmltYXRl
TW90aW9uRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KHVuc2lnbmVkIHJlcGVh
dCkKK3ZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUo
ZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0
RWxlbWVudCkKIHsKLSAgICBpZiAoIXRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1h
YmxlKCkpCisgICAgaWYgKCFyZXN1bHRFbGVtZW50LT50YXJnZXRFbGVtZW50KCktPmlzU3R5bGVk
VHJhbnNmb3JtYWJsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQqIHRyYW5zZm9ybWFibGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPih0YXJnZXRFbGVtZW50KCkpOworICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBtb2RpZnkgc3VwcGxlbWVudGFsIHRyYW5zZm9ybSwgbm90IHRoZSB0
cmFuc2Zvcm0gYXR0cmlidXRlIQorICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiB0
cmFuc2Zvcm1hYmxlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50Kj4ocmVzdWx0RWxlbWVudC0+dGFyZ2V0RWxlbWVudCgpKTsKICAgICBSZWZQdHI8U1ZH
VHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybWFibGVFbGVtZW50LT50cmFu
c2Zvcm0oKTsKICAgICBpZiAoIXRyYW5zZm9ybUxpc3QpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICAvLyBGSVhNRTogSGFuZGxlIG11bHRpcGxlIGFkZGl0aXZlIGFuaW1hdGlvbnMuCiAgICAg
RXhjZXB0aW9uQ29kZSBlYzsKLSAgICBpZiAoaXNBZGRpdGl2ZSgpKSB7Ci0gICAgICAgIHdoaWxl
ICh0cmFuc2Zvcm1MaXN0LT5udW1iZXJPZkl0ZW1zKCkgPiBtX2Jhc2VJbmRleEluVHJhbnNmb3Jt
TGlzdCkKLSAgICAgICAgICAgIHRyYW5zZm9ybUxpc3QtPnJlbW92ZUl0ZW0odHJhbnNmb3JtTGlz
dC0+bnVtYmVyT2ZJdGVtcygpIC0gMSwgZWMpOwotICAgIH0gZWxzZQorICAgIGlmICghaXNBZGRp
dGl2ZSgpKSB7CisgICAgICAgIEFTU0VSVCh0aGlzID09IHJlc3VsdEVsZW1lbnQpOwogICAgICAg
ICB0cmFuc2Zvcm1MaXN0LT5jbGVhcihlYyk7Ci0KKyAgICB9CisgICAgCisgICAgRmxvYXRTaXpl
IGRpZmYgPSBtX3RvUG9pbnQgLSBtX2Zyb21Qb2ludDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtOwotICAgIHRyYW5zZm9ybS5yb3RhdGUobV9hbmltYXRlZEFuZ2xlKTsKLSAgICB0cmFu
c2Zvcm0udHJhbnNsYXRlKG1fYW5pbWF0ZWRUcmFuc2xhdGlvbi53aWR0aCgpLCBtX2FuaW1hdGVk
VHJhbnNsYXRpb24uaGVpZ2h0KCkpOwotICAgIGlmICghdHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkg
eworICAgIC8vIEZJWE1FOiBBbmltYXRlIGFuZ2xlcworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUo
ZGlmZi53aWR0aCgpICogcGVyY2VudGFnZSArIG1fZnJvbVBvaW50LngoKSwgZGlmZi5oZWlnaHQo
KSAqIHBlcmNlbnRhZ2UgKyBtX2Zyb21Qb2ludC55KCkpOworICAgIAorICAgIC8vIEZJWE1FOiBB
Y2N1bXVsYXRlLgorCisgICAgaWYgKCF0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICB0
cmFuc2Zvcm1MaXN0LT5hcHBlbmRJdGVtKFNWR1RyYW5zZm9ybSh0cmFuc2Zvcm0pLCBlYyk7Ci0g
ICAgICAgIHRyYW5zZm9ybWFibGVFbGVtZW50LT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtTGlzdC5n
ZXQoKSk7Ci0gICAgfQorCiAgICAgaWYgKHRyYW5zZm9ybWFibGVFbGVtZW50LT5yZW5kZXJlcigp
KQogICAgICAgICB0cmFuc2Zvcm1hYmxlRWxlbWVudC0+cmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlv
dXQodHJ1ZSk7IC8vIHNob3VsZCBiZSBwYXJ0IG9mIHNldFRyYW5zZm9ybQogfQotCi12b2lkIFNW
R0FuaW1hdGVNb3Rpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKQorICAgIAordm9p
ZCBTVkdBbmltYXRlTW90aW9uRWxlbWVudDo6YXBwbHlSZXN1bHRzVG9UYXJnZXQoKQogewotICAg
IC8vIEZJWE1FOiBNYWtlIG11bHRpcGxlIGFkZGl0aXZlIGFuaW1hdGlvbnMgd29yay4KLSAgICBT
VkdBbmltYXRpb25FbGVtZW50OjpzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKLSAgICBpZiAoIW1f
YW5pbWF0aW9uVmFsaWQpCi0gICAgICAgIHJldHVybjsKICAgICAKLSAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCogdHJhbnNmb3JtYWJsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KHRhcmdldEVsZW1lbnQoKSk7Ci0gICAgbV9iYXNl
SW5kZXhJblRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm1hYmxlRWxlbWVudC0+dHJhbnNmb3JtKCkt
Pm51bWJlck9mSXRlbXMoKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1v
dGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9u
RWxlbWVudC5oCShyZXZpc2lvbiAzMTg5MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMyw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5TVkdBbmlt
YXRlTW90aW9uRWxlbWVudCgpOwotICAgICAgICAKKwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFz
VmFsaWRUYXJnZXQoKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBs
eUFuaW1hdGVkVmFsdWVUb0VsZW1lbnQodW5zaWduZWQgcmVwZWF0KTsKLSAgICAgICAgCisKICAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSop
OwogICAgICAgICAgICAgICAgIAogICAgICAgICBQYXRoIGFuaW1hdGlvblBhdGgoKTsKQEAgLTQ1
LDExICs0MywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdGhpczsgfQogICAgICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVk
VmFsdWUoZmxvYXQgcGVyY2VudCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNldFRvQmFzZVZh
bHVlKGNvbnN0IFN0cmluZyYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFu
ZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmlu
Zyk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3Qg
U3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsKLSAgICAgICAgCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSwgdW5zaWdu
ZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBhcHBseVJlc3VsdHNUb1RhcmdldCgpOwogICAgICAgICAKICAgICBwcml2YXRlOgog
ICAgICAgICBGbG9hdFNpemUgbV9hbmltYXRlZFRyYW5zbGF0aW9uOwpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMzE4OTApCisrKyBX
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIsNiArMiw3IEBACiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAgIENvcHlyaWdodCAoQykgMjAw
NyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IHByb2plY3QKIApAQCAtMjgsMTIgKzI5LDE0IEBACiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU1ZH
QW5nbGUuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKICNpbmNsdWRlICJTVkdQ
YXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdUZXh0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxp
c3QuaCIKKyNpbmNsdWRlICJTVkdVc2VFbGVtZW50LmgiCiAKICNpbmNsdWRlIDxtYXRoLmg+CiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTc2LDExICs3OSw2IEBAIHZvaWQgU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnBhcnNlTWEKICAgICAgICAgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKLWJvb2wgU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkVmFsdWUoZmxvYXQgcGVyY2VudGFnZSkKLXsKLSAg
ICBtX2FuaW1hdGVkVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV9mcm9tVHJhbnNm
b3JtLCBtX3RvVHJhbnNmb3JtKS5zY2FsZWREaXN0YW5jZShwZXJjZW50YWdlKS5hZGRUb1NWR1Ry
YW5zZm9ybShtX2Zyb21UcmFuc2Zvcm0pOwotICAgIHJldHVybiB0cnVlOwotfQogICAgIAogc3Rh
dGljIFBhc3NSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdEZvcihTVkdFbGVt
ZW50KiBlbGVtZW50KQogewpAQCAtOTEsMjUgKzg5LDM0IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFNW
R1RyYW5zZm9ybUxpc3Q+IHRyYW4KICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNWR1RleHRF
bGVtZW50Kj4oZWxlbWVudCktPnRyYW5zZm9ybSgpOwogICAgIHJldHVybiAwOwogfQorICAgIAor
dm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cmVzZXRUb0Jhc2VWYWx1ZShjb25zdCBT
dHJpbmcmIGJhc2VWYWx1ZSkKK3sKKyAgICBpZiAoIWhhc1ZhbGlkVGFyZ2V0KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoYmFzZVZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBFeGNlcHRp
b25Db2RlIGVjOworICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gbGlzdCA9IHRyYW5z
Zm9ybUxpc3RGb3IodGFyZ2V0RWxlbWVudCgpKTsKKyAgICAgICAgbGlzdC0+Y2xlYXIoZWMpOwor
ICAgIH0gZWxzZQorICAgICAgICB0YXJnZXRFbGVtZW50KCktPnNldEF0dHJpYnV0ZShTVkdOYW1l
czo6dHJhbnNmb3JtQXR0ciwgYmFzZVZhbHVlKTsKK30KIAotdm9pZCBTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudDo6YXBwbHlBbmltYXRlZFZhbHVlVG9FbGVtZW50KHVuc2lnbmVkIHJlcGVhdCkK
K3ZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhbGN1bGF0ZUFuaW1hdGVkVmFsdWUo
ZmxvYXQgcGVyY2VudGFnZSwgdW5zaWduZWQgcmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0
RWxlbWVudCkKIHsKLSAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0
RWxlbWVudCgpOworICAgIFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSByZXN1bHRFbGVtZW50
LT50YXJnZXRFbGVtZW50KCk7CiAgICAgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+IHRyYW5zZm9y
bUxpc3QgPSB0cmFuc2Zvcm1MaXN0Rm9yKHRhcmdldEVsZW1lbnQpOwogICAgIEFTU0VSVCh0cmFu
c2Zvcm1MaXN0KTsKIAotICAgIC8vIEZJWE1FOiBIYW5kbGUgbXVsdGlwbGUgYWRkaXRpdmUgdHJh
bmZvcm1zLgotICAgIC8vIEZJWE1FOiBIYW5kbGUgYWNjdW11bGF0ZS4KICAgICBFeGNlcHRpb25D
b2RlIGVjOwotICAgIGlmIChpc0FkZGl0aXZlKCkpIHsKLSAgICAgICAgd2hpbGUgKHRyYW5zZm9y
bUxpc3QtPm51bWJlck9mSXRlbXMoKSA+IG1fYmFzZUluZGV4SW5UcmFuc2Zvcm1MaXN0KQotICAg
ICAgICAgICAgdHJhbnNmb3JtTGlzdC0+cmVtb3ZlSXRlbSh0cmFuc2Zvcm1MaXN0LT5udW1iZXJP
Zkl0ZW1zKCkgLSAxLCBlYyk7Ci0gICAgfSBlbHNlCisgICAgaWYgKCFpc0FkZGl0aXZlKCkpCiAg
ICAgICAgIHRyYW5zZm9ybUxpc3QtPmNsZWFyKGVjKTsKLSAgICB0cmFuc2Zvcm1MaXN0LT5hcHBl
bmRJdGVtKG1fYW5pbWF0ZWRUcmFuc2Zvcm0sIGVjKTsKLSAgICAKLSAgICBpZiAodGFyZ2V0RWxl
bWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgdGFyZ2V0RWxlbWVudC0+cmVuZGVyZXIoKS0+c2V0
TmVlZHNMYXlvdXQodHJ1ZSk7IC8vIHNob3VsZCByZWFsbHkgYmUgaW4gc2V0VHJhbnNmb3JtCisg
ICAgaWYgKGlzQWNjdW11bGF0ZWQoKSAmJiByZXBlYXQpIHsKKyAgICAgICAgU1ZHVHJhbnNmb3Jt
IGFjY3VtdWxhdGVkVHJhbnNmb3JtID0gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV9mcm9tVHJhbnNm
b3JtLCBtX3RvVHJhbnNmb3JtKS5zY2FsZWREaXN0YW5jZShyZXBlYXQpLmFkZFRvU1ZHVHJhbnNm
b3JtKFNWR1RyYW5zZm9ybSgpKTsKKyAgICAgICAgdHJhbnNmb3JtTGlzdC0+YXBwZW5kSXRlbShh
Y2N1bXVsYXRlZFRyYW5zZm9ybSwgZWMpOworICAgIH0KKyAgICBTVkdUcmFuc2Zvcm0gdHJhbnNm
b3JtID0gU1ZHVHJhbnNmb3JtRGlzdGFuY2UobV9mcm9tVHJhbnNmb3JtLCBtX3RvVHJhbnNmb3Jt
KS5zY2FsZWREaXN0YW5jZShwZXJjZW50YWdlKS5hZGRUb1NWR1RyYW5zZm9ybShtX2Zyb21UcmFu
c2Zvcm0pOworICAgIHRyYW5zZm9ybUxpc3QtPmFwcGVuZEl0ZW0odHJhbnNmb3JtLCBlYyk7CiB9
CiAgICAgCiBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWxjdWxhdGVGcm9tQW5k
VG9WYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRvU3RyaW5n
KQpAQCAtMTMwLDE4ICsxMzcsNiBAQCBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojpj
YWxjdWxhCiAgICAgbV90b1RyYW5zZm9ybSA9IFNWR1RyYW5zZm9ybURpc3RhbmNlOjphZGRTVkdU
cmFuc2Zvcm1zKG1fZnJvbVRyYW5zZm9ybSwgcGFyc2VUcmFuc2Zvcm1WYWx1ZShieVN0cmluZykp
OwogICAgIHJldHVybiBtX3RvVHJhbnNmb3JtLmlzVmFsaWQoKTsKIH0KLSAgICAKLXZvaWQgU1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpCi17Ci0gICAg
Ly8gRklYTUU6IE1ha2UgbXVsdGlwbGUgYWRkaXRpdmUgYW5pbWF0aW9ucyB3b3JrLgotICAgIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpOwotICAgIGlmICghbV9h
bmltYXRpb25WYWxpZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJlZlB0cjxTVkdUcmFu
c2Zvcm1MaXN0PiB0cmFuc2Zvcm1MaXN0ID0gdHJhbnNmb3JtTGlzdEZvcih0YXJnZXRFbGVtZW50
KCkpOwotICAgIEFTU0VSVCh0cmFuc2Zvcm1MaXN0KTsKLSAgICBtX2Jhc2VJbmRleEluVHJhbnNm
b3JtTGlzdCA9IHRyYW5zZm9ybUxpc3QtPm51bWJlck9mSXRlbXMoKTsKLX0KIAogU1ZHVHJhbnNm
b3JtIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpwYXJzZVRyYW5zZm9ybVZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7CkBAIC0xNTQsNiArMTQ5LDMwIEBAIFNWR1RyYW5zZm9y
bSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDoKICAgICBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZVRyYW5zZm9ybVZhbHVlKG1fdHlwZSwgcHRyLCBwdHIgKyBwYXJzZVN0cmluZy5sZW5ndGgoKSwg
cmVzdWx0KTsgLy8gaWdub3JpbmcgcmV0dXJuIHZhbHVlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
KyAgICAKK3ZvaWQgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmFwcGx5UmVzdWx0c1RvVGFy
Z2V0KCkKK3sKKyAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gdGhpcy0+dGFyZ2V0RWxl
bWVudCgpOworICAgIGlmICh0YXJnZXRFbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAgICB0YXJn
ZXRFbGVtZW50LT5yZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICAKKyAgICBS
ZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9ybUxpc3RGb3Io
dGFyZ2V0RWxlbWVudCk7CisgICAgCisgICAgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiog
aW5zdGFuY2VzID0gZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5pbnN0YW5jZXNG
b3JFbGVtZW50KHRhcmdldEVsZW1lbnQpOworICAgIGlmICghaW5zdGFuY2VzKQorICAgICAgICBy
ZXR1cm47CisgICAgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6aXRlcmF0b3IgZW5kID0g
aW5zdGFuY2VzLT5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46
Oml0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgU1ZHRWxlbWVudCogc2hhZG93VHJlZUVsZW1lbnQgPSAoKml0KS0+c2hhZG93VHJlZUVs
ZW1lbnQoKTsKKyAgICAgICAgQVNTRVJUKHNoYWRvd1RyZWVFbGVtZW50KTsKKyAgICAgICAgaWYg
KHNoYWRvd1RyZWVFbGVtZW50LT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4oc2hhZG93VHJlZUVs
ZW1lbnQpLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtTGlzdC5nZXQoKSk7CisgICAgICAgIGVsc2Ug
aWYgKHNoYWRvd1RyZWVFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0ZXh0VGFnKSkKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50Kj4oc2hhZG93VHJlZUVsZW1lbnQp
LT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtTGlzdC5nZXQoKSk7CisgICAgICAgIGlmIChzaGFkb3dU
cmVlRWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHNoYWRvd1RyZWVFbGVtZW50LT5y
ZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICB9Cit9CiAKIH0KIApJbmRleDog
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCShyZXZpc2lvbiAzMTg5MCkK
KysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIsNiArMiw3IEBACiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMg
WmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgogICAgICAgICAgICAgICAgICAgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAgIENvcHlyaWdodCAoQykg
MjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICAgCiAgICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTQyLDIxICs0MywxNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVkVmFs
dWVUb0VsZW1lbnQodW5zaWduZWQgcmVwZWF0KTsKLQogICAgIHByb3RlY3RlZDoKICAgICAgICAg
dmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHRoaXM7IH0KICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVBbmltYXRlZFZh
bHVlKGZsb2F0IHBlcmNlbnQpOworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZXNldFRvQmFzZVZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2Fs
Y3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3Ry
aW5nJiB0b1N0cmluZyk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVGcm9tQW5kQnlW
YWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJ5U3RyaW5nKTsK
LSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkQWN0aXZlSW50ZXJ2YWwoKTsK
LSAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZs
b2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVkIHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVs
ZW1lbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlSZXN1bHRzVG9UYXJnZXQoKTsKIAot
ICAgIHByaXZhdGU6CiAgICAgICAgIFNWR1RyYW5zZm9ybSBwYXJzZVRyYW5zZm9ybVZhbHVlKGNv
bnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICB2b2lkIGNhbGN1bGF0ZVJvdGF0aW9uRnJvbU1h
dHJpeChjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBkb3VibGUmIGFuZ2xlLCBkb3VibGUmIGN4LCBk
b3VibGUmIGN5KSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIFNWR1RyYW5zZm9ybTo6U1ZHVHJh
bnNmb3JtVHlwZSBtX3R5cGU7CiAgICAgICAgIApAQCAtNjQsOCArNjEsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgU1ZHVHJhbnNmb3JtIG1fdG9UcmFuc2Zvcm07CiAgICAgICAg
IFNWR1RyYW5zZm9ybSBtX2Zyb21UcmFuc2Zvcm07Ci0KLSAgICAgICAgU1ZHVHJhbnNmb3JtIG1f
YW5pbWF0ZWRUcmFuc2Zvcm07CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDMxODkwKQorKysgV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDgg
KzM0LDEwIEBACiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkZsb2F0Q29u
dmVyc2lvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlNWR0VsZW1lbnRJ
bnN0YW5jZS5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSAiU1ZHVXNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMu
aCIKICNpbmNsdWRlIDxtYXRoLmg+CiAKQEAgLTIyOCwxMSArMjMwLDYgQEAgU3RyaW5nIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OmZyb21WYWx1ZSgpIAogeyAgICAKICAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKFNWR05hbWVzOjpmcm9tQXR0cik7CiB9Ci0gICAgCi1TdHJpbmcgU1ZHQW5pbWF0aW9uRWxl
bWVudDo6YXR0cmlidXRlTmFtZSgpIGNvbnN0Ci17ICAgIAotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKS5zdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2Uo
KTsKLX0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50Ojppc0FkZGl0aXZlKCkgY29uc3QKIHsK
QEAgLTI1MywyMyArMjUwLDI4IEBAIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzVmFsaWRU
YXJnZXQKICAgICByZXR1cm4gdGFyZ2V0RWxlbWVudCgpOwogfQogICAgIAotYm9vbCBTVkdBbmlt
YXRpb25FbGVtZW50Ojp0YXJnZXRBdHRyaWJ1dGVJc0NTUygpIGNvbnN0Citib29sIFNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZUlzQ1NTKGNvbnN0IFN0cmluZyYgYXR0cmlidXRlTmFtZSkK
IHsKLSAgICBBdHRyaWJ1dGVUeXBlIHR5cGUgPSBhdHRyaWJ1dGVUeXBlKCk7Ci0gICAgaWYgKHR5
cGUgPT0gQXR0cmlidXRlVHlwZUNTUykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHR5
cGUgPT0gQXR0cmlidXRlVHlwZVhNTCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgaGF2ZSBhIG1hcCBvZiBhbGwgU1ZHIHByb3BlcnRpZXMgYW5kIHRoZWly
IGF0dHJpYnV0ZSB0eXBlcyBzbyB3ZQogICAgIC8vIGNvdWxkIHZhbGlkYXRlIGFuaW1hdGlvbnMg
YmV0dGVyLiBUaGUgc3BlYyBpcyB2ZXJ5IHZhZ3VlIGFib3V0IHRoaXMuCi0gICAgdW5zaWduZWQg
aWQgPSBjc3NQcm9wZXJ0eUlEKGF0dHJpYnV0ZU5hbWUoKSk7CisgICAgdW5zaWduZWQgaWQgPSBj
c3NQcm9wZXJ0eUlEKGF0dHJpYnV0ZU5hbWUpOwogICAgIC8vIFNWRyByYW5nZQogICAgIGlmIChp
ZCA+PSBDU1NQcm9wZXJ0eUNsaXBQYXRoICYmIGlkIDw9IENTU1Byb3BlcnR5V3JpdGluZ01vZGUp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIC8vIFJlZ3VsYXIgQ1NTIHByb3BlcnRpZXMgYWxz
byBpbiBTVkcKICAgICByZXR1cm4gaWQgPT0gQ1NTUHJvcGVydHlDb2xvciB8fCBpZCA9PSBDU1NQ
cm9wZXJ0eURpc3BsYXkgfHwgaWQgPT0gQ1NTUHJvcGVydHlPcGFjaXR5Ci0gICAgICAgIHx8IChp
ZCA+PSBDU1NQcm9wZXJ0eUZvbnQgJiYgaWQgPD0gQ1NTUHJvcGVydHlGb250V2VpZ2h0KSAKLSAg
ICAgICAgfHwgaWQgPT0gQ1NTUHJvcGVydHlPdmVyZmxvdyB8fCBpZCA9PSBDU1NQcm9wZXJ0eVZp
c2liaWxpdHk7CisgICAgICAgICAgICB8fCAoaWQgPj0gQ1NTUHJvcGVydHlGb250ICYmIGlkIDw9
IENTU1Byb3BlcnR5Rm9udFdlaWdodCkgCisgICAgICAgICAgICB8fCBpZCA9PSBDU1NQcm9wZXJ0
eU92ZXJmbG93IHx8IGlkID09IENTU1Byb3BlcnR5VmlzaWJpbGl0eTsKK30KKyAgICAKK2Jvb2wg
U1ZHQW5pbWF0aW9uRWxlbWVudDo6dGFyZ2V0QXR0cmlidXRlSXNDU1MoKSBjb25zdAoreworICAg
IEF0dHJpYnV0ZVR5cGUgdHlwZSA9IGF0dHJpYnV0ZVR5cGUoKTsKKyAgICBpZiAodHlwZSA9PSBB
dHRyaWJ1dGVUeXBlQ1NTKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBB
dHRyaWJ1dGVUeXBlWE1MKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGF0dHJp
YnV0ZUlzQ1NTKGF0dHJpYnV0ZU5hbWUoKSk7CiB9CiAKIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6c2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQpA
QCAtMjc4LDggKzI4MCwxNCBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNldFRhcmdldEF0
dHJpCiAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1lKCk7CiAg
ICAgaWYgKCF0YXJnZXQgfHwgYXR0cmlidXRlTmFtZS5pc0VtcHR5KCkgfHwgdmFsdWUuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIGluc3RhbmNl
IHRyZWUgdG8gZ2V0IHJlYnVpbGQuIEluc3RhbmNlcyBhcmUgdXBkYXRlZCBpbiB0aGUgbG9vcCBi
ZWxvdy4KKyAgICBpZiAodGFyZ2V0LT5pc1N0eWxlZCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxT
VkdTdHlsZWRFbGVtZW50Kj4odGFyZ2V0KS0+c2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZCh0cnVl
KTsKKyAgICAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBpZiAodGFyZ2V0QXR0cmli
dXRlSXNDU1MoKSkgeworICAgIGJvb2wgaXNDU1MgPSB0YXJnZXRBdHRyaWJ1dGVJc0NTUygpOwor
ICAgIGlmIChpc0NTUykgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgc2V0IHRoZSBv
dmVycmlkZSBzdHlsZSwgbm90IHRoZSBpbmxpbmUgc3R5bGUuCiAgICAgICAgIC8vIFNhZGx5IG92
ZXJyaWRlIHN0eWxlcyBhcmUgbm90IHlldCBpbXBsZW1lbnRlZC4KICAgICAgICAgdGFyZ2V0LT5z
dHlsZSgpLT5zZXRQcm9wZXJ0eShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgIiIsIGVjKTsKQEAgLTI4
OCwyNiArMjk2LDI1IEBAIHZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6c2V0VGFyZ2V0QXR0cmkK
ICAgICAgICAgLy8gYXR0cmlidXRlIHZhbHVlLiBXaGF0ZXZlciB0aGF0IG1lYW5zIGluIHByYWN0
aWNlLgogICAgICAgICB0YXJnZXQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwg
ZWMpOwogICAgIH0KLX0KLQotU3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnRhcmdldEF0dHJp
YnV0ZUJhc2VWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSB0aGlz
LT5hdHRyaWJ1dGVOYW1lKCk7Ci0gICAgaWYgKCF0YXJnZXRFbGVtZW50KCkgfHwgYXR0cmlidXRl
TmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKLSAgICBTVkdF
bGVtZW50KiB0YXJnZXQgPSB0YXJnZXRFbGVtZW50KCk7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAg
ICAKLSAgICBpZiAodGFyZ2V0QXR0cmlidXRlSXNDU1MoKSkgewotICAgICAgICBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24gY29tcHV0ZWRTdHlsZSh0YXJnZXQpOwotICAgICAgICByZXR1cm4g
Y29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFt
ZSkpOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSB0YXJnZXRFbGVtZW50KCktPmdldEF0
dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsKKyAgICBpZiAodGFyZ2V0LT5pc1N0eWxlZCgpKQorICAg
ICAgICBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4odGFyZ2V0KS0+c2V0SW5zdGFuY2VV
cGRhdGVzQmxvY2tlZChmYWxzZSk7CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBIYXNo
U2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+KiBpbnN0YW5jZXMgPSBkb2N1bWVudCgpLT5hY2Nlc3NT
VkdFeHRlbnNpb25zKCktPmluc3RhbmNlc0ZvckVsZW1lbnQodGFyZ2V0KTsKKyAgICBpZiAoIWlu
c3RhbmNlcykKKyAgICAgICAgcmV0dXJuOworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNl
Kj46Oml0ZXJhdG9yIGVuZCA9IGluc3RhbmNlcy0+ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFNW
R0VsZW1lbnRJbnN0YW5jZSo+OjppdGVyYXRvciBpdCA9IGluc3RhbmNlcy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIFNWR0VsZW1lbnQqIHNoYWRvd1RyZWVFbGVtZW50ID0g
KCppdCktPnNoYWRvd1RyZWVFbGVtZW50KCk7CisgICAgICAgIEFTU0VSVChzaGFkb3dUcmVlRWxl
bWVudCk7CisgICAgICAgIGlmIChpc0NTUykKKyAgICAgICAgICAgIHNoYWRvd1RyZWVFbGVtZW50
LT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgIiIsIGVjKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2hhZG93VHJlZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShh
dHRyaWJ1dGVOYW1lLCB2YWx1ZSwgZWMpOworICAgICAgICAoKml0KS0+Y29ycmVzcG9uZGluZ1Vz
ZUVsZW1lbnQoKS0+c2V0Q2hhbmdlZCgpOworICAgIH0KIH0KLSAgICAKKwogc3RhdGljIGlubGlu
ZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAw
LiAqIGR1cmF0aW9uKTsgfQogICAgIAogdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpjdXJyZW50
VmFsdWVzRm9yVmFsdWVzQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIGZsb2F0JiBlZmZlY3RpdmVQ
ZXJjZW50LCBTdHJpbmcmIGZyb20sIFN0cmluZyYgdG8pCkBAIC0zNzEsMTcgKzM3OCwxMyBAQCB2
b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnN0YXJ0ZWRBY3RpdmVJCiAgICAgaWYgKCFoYXNWYWxp
ZFRhcmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub3Qg
Y29ycmVjdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYW5pbWF0aW9ucyBvbiB0aGUgc2FtZSB0YXJn
ZXQgb3IgaWYgCi0gICAgLy8gdGhlIHRpbWluZyBhdHRpYnV0ZXMgY2hhbmdlIGR1cmluZyBhbmlt
YXRpb24gZHVlIHRvIERPTSBtYW5pcHVsYXRpb24uCi0gICAgbV9zYXZlZEJhc2VWYWx1ZSA9IHRh
cmdldEF0dHJpYnV0ZUJhc2VWYWx1ZSgpOwotCiAgICAgQW5pbWF0aW9uTW9kZSBhbmltYXRpb25N
b2RlID0gdGhpcy0+YW5pbWF0aW9uTW9kZSgpOwogICAgIGlmIChhbmltYXRpb25Nb2RlID09IE5v
QW5pbWF0aW9uKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGFuaW1hdGlvbk1vZGUgPT0gRnJv
bVRvQW5pbWF0aW9uKQogICAgICAgICBtX2FuaW1hdGlvblZhbGlkID0gY2FsY3VsYXRlRnJvbUFu
ZFRvVmFsdWVzKGZyb21WYWx1ZSgpLCB0b1ZhbHVlKCkpOwogICAgIGVsc2UgaWYgKGFuaW1hdGlv
bk1vZGUgPT0gVG9BbmltYXRpb24pCi0gICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxh
dGVGcm9tQW5kVG9WYWx1ZXMobV9zYXZlZEJhc2VWYWx1ZSwgdG9WYWx1ZSgpKTsKKyAgICAgICAg
bV9hbmltYXRpb25WYWxpZCA9IGNhbGN1bGF0ZUZyb21BbmRUb1ZhbHVlcyhTdHJpbmcoKSwgdG9W
YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhbmltYXRpb25Nb2RlID09IEZyb21CeUFuaW1hdGlvbikK
ICAgICAgICAgbV9hbmltYXRpb25WYWxpZCA9IGNhbGN1bGF0ZUZyb21BbmRCeVZhbHVlcyhmcm9t
VmFsdWUoKSwgYnlWYWx1ZSgpKTsKICAgICBlbHNlIGlmIChhbmltYXRpb25Nb2RlID09IEJ5QW5p
bWF0aW9uKQpAQCAtMzk1LDE1ICszOTgsMTUgQEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50Ojpz
dGFydGVkQWN0aXZlSQogICAgIH0KIH0KICAgICAKLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
YXBwbHlBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0KQordm9pZCBTVkdB
bmltYXRpb25FbGVtZW50Ojp1cGRhdGVBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQg
cmVwZWF0LCBTVkdTTUlMRWxlbWVudCogcmVzdWx0RWxlbWVudCkKIHsgICAgCiAgICAgaWYgKCFt
X2FuaW1hdGlvblZhbGlkKQogICAgICAgICByZXR1cm47CiAgICAgCisgICAgZmxvYXQgZWZmZWN0
aXZlUGVyY2VudDsKICAgICBpZiAoYW5pbWF0aW9uTW9kZSgpID09IFZhbHVlc0FuaW1hdGlvbikg
ewogICAgICAgICBTdHJpbmcgZnJvbTsKICAgICAgICAgU3RyaW5nIHRvOwotICAgICAgICBmbG9h
dCBlZmZlY3RpdmVQZXJjZW50OwogICAgICAgICBjdXJyZW50VmFsdWVzRm9yVmFsdWVzQW5pbWF0
aW9uKHBlcmNlbnQsIGVmZmVjdGl2ZVBlcmNlbnQsIGZyb20sIHRvKTsKICAgICAgICAgaWYgKGZy
b20gIT0gbV9sYXN0VmFsdWVzQW5pbWF0aW9uRnJvbSB8fCB0byAhPSBtX2xhc3RWYWx1ZXNBbmlt
YXRpb25UbyApIHsKICAgICAgICAgICAgIG1fYW5pbWF0aW9uVmFsaWQgPSBjYWxjdWxhdGVGcm9t
QW5kVG9WYWx1ZXMoZnJvbSwgdG8pOwpAQCAtNDEyLDI2ICs0MTUsMTQgQEAgdm9pZCBTVkdBbmlt
YXRpb25FbGVtZW50OjphcHBseUFuaW1hdGlvbgogICAgICAgICAgICAgbV9sYXN0VmFsdWVzQW5p
bWF0aW9uRnJvbSA9IGZyb207CiAgICAgICAgICAgICBtX2xhc3RWYWx1ZXNBbmltYXRpb25UbyA9
IHRvOwogICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZUFuaW1hdGVkVmFsdWUoZWZmZWN0aXZlUGVy
Y2VudCk7CiAgICAgfSBlbHNlCi0gICAgICAgIHVwZGF0ZUFuaW1hdGVkVmFsdWUocGVyY2VudCk7
CisgICAgICAgIGVmZmVjdGl2ZVBlcmNlbnQgPSBwZXJjZW50OwogCi0gICAgYXBwbHlBbmltYXRl
ZFZhbHVlVG9FbGVtZW50KHJlcGVhdCk7Ci19Ci0KLXZvaWQgU1ZHQW5pbWF0aW9uRWxlbWVudDo6
dW5hcHBseUFuaW1hdGlvbigpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGNvcnJlY3Qg
aWYgdGhlcmUgYXJlIG11bHRpcGxlIGFuaW1hdGlvbnMgb24gdGhlIHNhbWUgdGFyZ2V0IG9yIGlm
IAotICAgIC8vIHRoZSB0aW1pbmcgYXR0aWJ1dGVzIGNoYW5nZSBkdXJpbmcgYW5pbWF0aW9uIGR1
ZSB0byBET00gbWFuaXB1bGF0aW9uLgotICAgIGlmIChtX3NhdmVkQmFzZVZhbHVlLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgc2V0VGFyZ2V0QXR0cmlidXRlQW5pbWF0ZWRWYWx1ZSht
X3NhdmVkQmFzZVZhbHVlKTsKLSAgICBtX3NhdmVkQmFzZVZhbHVlID0gU3RyaW5nKCk7CisgICAg
Y2FsY3VsYXRlQW5pbWF0ZWRWYWx1ZShlZmZlY3RpdmVQZXJjZW50LCByZXBlYXQsIHJlc3VsdEVs
ZW1lbnQpOwogfQogCiB2b2lkIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmVuZGVkQWN0aXZlSW50ZXJ2
YWwoKQogewotICAgIG1fc2F2ZWRCYXNlVmFsdWUgPSBTdHJpbmcoKTsKIH0KIAogfQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMzE4OTApCisrKyBXZWJDb3JlL3N2
Zy9TVkdBbmltYXRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgYmVnaW5FbGVtZW50QXQo
ZmxvYXQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBlbmRF
bGVtZW50KEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgdmlydHVhbCBib29sIGVuZEVsZW1lbnRB
dChmbG9hdCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgCisgICAgICAgIHN0YXRp
YyBib29sIGF0dHJpYnV0ZUlzQ1NTKGNvbnN0IFN0cmluZyYgYXR0cmlidXRlTmFtZSk7CiAKIHBy
b3RlY3RlZDoKICAgICAgICAgCkBAIC03Myw3ICs3NSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAg
U3RyaW5nIHRvVmFsdWUoKSBjb25zdDsKICAgICAgICAgU3RyaW5nIGJ5VmFsdWUoKSBjb25zdDsK
ICAgICAgICAgU3RyaW5nIGZyb21WYWx1ZSgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgYXR0cmli
dXRlTmFtZSgpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgZW51bSBBbmltYXRpb25Nb2RlIHsg
Tm9BbmltYXRpb24sIFRvQW5pbWF0aW9uLCBCeUFuaW1hdGlvbiwgVmFsdWVzQW5pbWF0aW9uLCBG
cm9tVG9BbmltYXRpb24sIEZyb21CeUFuaW1hdGlvbiB9OwogICAgICAgICBBbmltYXRpb25Nb2Rl
IGFuaW1hdGlvbk1vZGUoKSBjb25zdDsKQEAgLTg5LDIxICs5MCwxOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgCiAgICAgICAgIC8vIGZyb20gU1ZHU01JTEVsZW1lbnQKICAgICAgICAgdmlydHVhbCB2b2lk
IHN0YXJ0ZWRBY3RpdmVJbnRlcnZhbCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBbmlt
YXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0KTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHVuYXBwbHlBbmltYXRpb24oKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1h
dGlvbihmbG9hdCBwZXJjZW50LCB1bnNpZ25lZCByZXBlYXQsIFNWR1NNSUxFbGVtZW50KiByZXN1
bHRFbGVtZW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKTsK
ICAgICAgICAgCiAgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0ZPUldBUkRfREVDTEFSQVRJT05T
KFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsIGJvb2wsIEV4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQsIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQpCiBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmlu
ZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2Fs
Y3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3Ry
aW5nJiBieVN0cmluZykgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlQW5pbWF0ZWRW
YWx1ZShmbG9hdCBwZXJjZW50YWdlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFu
aW1hdGVkVmFsdWVUb0VsZW1lbnQodW5zaWduZWQgcmVwZWF0KSA9IDA7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBjYWxjdWxhdGVBbmltYXRlZFZhbHVlKGZsb2F0IHBlcmNlbnRhZ2UsIHVuc2lnbmVk
IHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpID0gMDsKICAgICAgICAgCiAg
ICAgICAgIHZvaWQgY3VycmVudFZhbHVlc0ZvclZhbHVlc0FuaW1hdGlvbihmbG9hdCBwZXJjZW50
LCBmbG9hdCYgZWZmZWN0aXZlUGVyY2VudCwgU3RyaW5nJiBmcm9tLCBTdHJpbmcmIHRvKTsKICAg
ICAKIHByb3RlY3RlZDoKLSAgICAgICAgU3RyaW5nIG1fc2F2ZWRCYXNlVmFsdWU7CiAgICAgICAg
IGJvb2wgbV9hbmltYXRpb25WYWxpZDsKIAogICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3ZhbHVl
czsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzMTkxMykKKysrIFdlYkNvcmUv
c3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIFNW
R1NWR0VsZW1lbnQ6OlNWR1NWR0VsZW1lbnQoY29uc3QgUXVhbGkKICAgICAsIG1fd2lkdGgodGhp
cywgTGVuZ3RoTW9kZVdpZHRoKQogICAgICwgbV9oZWlnaHQodGhpcywgTGVuZ3RoTW9kZUhlaWdo
dCkKICAgICAsIG1fdXNlQ3VycmVudFZpZXcoZmFsc2UpCi0gICAgLCBtX3RpbWVDb250YWluZXIo
U01JTFRpbWVDb250YWluZXI6OmNyZWF0ZSgpKQorICAgICwgbV90aW1lQ29udGFpbmVyKFNNSUxU
aW1lQ29udGFpbmVyOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3ZpZXdTcGVjKDApCiAgICAgLCBt
X2NvbnRhaW5lclNpemUoMzAwLCAxNTApCiAgICAgLCBtX2hhc1NldENvbnRhaW5lclNpemUoZmFs
c2UpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMzE4OTApCisrKyBXZWJDb3Jl
L3N2Zy9TVkdTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNDQgKzIzLDEzIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaWYgRU5BQkxFKFNWR19BTklNQVRJT04pCiAjaW5jbHVk
ZSAiU1ZHU2V0RWxlbWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgCi0vLyBGSVhNRTogVGhpcyBjbGFzcyBuZWVkcyB0byBkaWUu
IFNWR0FuaW1hdGVFbGVtZW50IHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgaW5zdGVhZC4KLQogU1ZH
U2V0RWxlbWVudDo6U1ZHU2V0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCAqZG9jKQotICAgIDogU1ZHQW5pbWF0aW9uRWxlbWVudCh0YWdOYW1lLCBkb2MpCi17
Ci19Ci0KLVNWR1NldEVsZW1lbnQ6On5TVkdTZXRFbGVtZW50KCkKKyAgICA6IFNWR0FuaW1hdGVF
bGVtZW50KHRhZ05hbWUsIGRvYykKIHsKIH0KLQotdm9pZCBTVkdTZXRFbGVtZW50OjphcHBseUFu
aW1hdGVkVmFsdWVUb0VsZW1lbnQodW5zaWduZWQgcmVwZWF0KQotewotICAgIHNldFRhcmdldEF0
dHJpYnV0ZUFuaW1hdGVkVmFsdWUodG9WYWx1ZSgpKTsKLX0KLSAgICAKLWJvb2wgU1ZHU2V0RWxl
bWVudDo6Y2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgdG9TdHJpbmcpIAoteyAKLSAgICBtX2FuaW1hdGVkVmFsdWUgPSB0b1N0cmluZzsKLSAgICBy
ZXR1cm4gdHJ1ZTsgCi19Ci0KLWJvb2wgU1ZHU2V0RWxlbWVudDo6Y2FsY3VsYXRlRnJvbUFuZEJ5
VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJvbVN0cmluZywgY29uc3QgU3RyaW5nJiBieVN0cmluZykg
Ci17IAotICAgIHJldHVybiBmYWxzZTsgCi19Ci0KLWJvb2wgU1ZHU2V0RWxlbWVudDo6dXBkYXRl
QW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlKQotewotICAgIHJldHVybiB0cnVlOwotfQot
CiB9CiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NldEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHJldmlzaW9uIDMx
ODkwKQorKysgV2ViQ29yZS9zdmcvU1ZHU2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwyNiArMjQsMTUgQEAKICNkZWZpbmUgU1ZHU2V0RWxlbWVudF9oCiAjaWYgRU5BQkxFKFNWR19B
TklNQVRJT04pCiAKLSNpbmNsdWRlICJTVkdBbmltYXRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAi
U1ZHQW5pbWF0ZUVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBT
VkdTZXRFbGVtZW50IDogcHVibGljIFNWR0FuaW1hdGlvbkVsZW1lbnQKKyAgICAvLyBJbmhlcml0
IGZyb20gU1ZHQW5pbWF0ZUVsZW1lbnQgd2hpY2ggaW1wbGVtZW50cyBzdXBlcnNldCBvZiBmdW5j
dGlvbmFsaXR5LgorICAgIGNsYXNzIFNWR1NldEVsZW1lbnQgOiBwdWJsaWMgU1ZHQW5pbWF0ZUVs
ZW1lbnQKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICBTVkdTZXRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgICAgICB2aXJ0dWFsIH5TVkdTZXRFbGVtZW50
KCk7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCog
Y29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9Ci0gICAgICAgIAotICAgICAg
ICB2aXJ0dWFsIGJvb2wgY2FsY3VsYXRlRnJvbUFuZFRvVmFsdWVzKGNvbnN0IFN0cmluZyYgZnJv
bVN0cmluZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZyk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBj
YWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGJ5U3RyaW5nKTsKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUFuaW1hdGVkVmFs
dWUoZmxvYXQgcGVyY2VudGFnZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhcHBseUFuaW1hdGVk
VmFsdWVUb0VsZW1lbnQodW5zaWduZWQgcmVwZWF0KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IFN0cmluZyBtX2FuaW1hdGVkVmFsdWU7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCShy
ZXZpc2lvbiAzMTg5MCkKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5l
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU01JTFRpbWVDb250YWluZXIuaCIKIAorI2luY2x1ZGUgIkNTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR1NNSUxFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUg
IlN5c3RlbVRpbWUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTM2LDExICs0MCwxMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBzdGF0aWMgY29uc3QgZG91YmxlIGFuaW1hdGlv
bkZyYW1lRGVsYXkgPSAwLjAyNTsKIAotU01JTFRpbWVDb250YWluZXI6OlNNSUxUaW1lQ29udGFp
bmVyKCkgCitTTUlMVGltZUNvbnRhaW5lcjo6U01JTFRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVu
dCogb3duZXIpIAogICAgIDogbV9iZWdpblRpbWUoMCkKICAgICAsIG1fcGF1c2VUaW1lKDApCiAg
ICAgLCBtX2FjY3VtdWxhdGVkUGF1c2VUaW1lKDApCisgICAgLCBtX2RvY3VtZW50T3JkZXJJbmRl
eGVzRGlydHkoZmFsc2UpCiAgICAgLCBtX3RpbWVyKHRoaXMsICZTTUlMVGltZUNvbnRhaW5lcjo6
dGltZXJGaXJlZCkKKyAgICAsIG1fb3duZXJTVkdFbGVtZW50KG93bmVyKQogewogfQogICAgIApA
QCAtNjYsNiArNzIsMTkgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c2NoZWR1bGUoU1ZHU01J
TAogdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dW5zY2hlZHVsZShTVkdTTUlMRWxlbWVudCogYW5p
bWF0aW9uKQogewogICAgIEFTU0VSVChhbmltYXRpb24tPnRpbWVDb250YWluZXIoKSA9PSB0aGlz
KTsKKyAgICAKKyAgICAvLyBBbmltYXRpb24gaXMgcmVmZmluZyB0aGUgdGFyZ2V0IGVsZW1lbnQg
c28gaXQgbWlnaHQgZGllIHdoZW4gdGhlIGFuaW1hdGlvbiBkaWVzLgorICAgIC8vIEZJWE1FOiBQ
ZXJoYXBzIHRoaXMgc2hvdWxkIGJlIEhhc2hNYXA8dGFyZ2V0LCBIYXNoTWFwPGF0dHIsdmFsdWU+
PiBmb3IgZmFzdCByZW1vdmVzPyBQcm9iYWJseQorICAgIC8vIG5vdCBhIGJpZyBkZWFsIGluIHBy
YWN0aWNlCisgICAgVmVjdG9yPEVsZW1lbnRBdHRyaWJ1dGVQYWlyPiB0b1JlbW92ZTsKKyAgICBC
YXNlVmFsdWVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc2F2ZWRCYXNlVmFsdWVzLmVuZCgpOworICAg
IGZvciAoQmFzZVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1fc2F2ZWRCYXNlVmFsdWVzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPmZpcnN0LmZpcnN0ID09IGFu
aW1hdGlvbi0+dGFyZ2V0RWxlbWVudCgpKQorICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0
LT5maXJzdCk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0b1JlbW92ZS5z
aXplKCk7ICsrbikKKyAgICAgICAgbV9zYXZlZEJhc2VWYWx1ZXMucmVtb3ZlKHRvUmVtb3ZlW25d
KTsKKwogICAgIG1fc2NoZWR1bGVkQW5pbWF0aW9ucy5yZW1vdmUoYW5pbWF0aW9uKTsKIH0KIApA
QCAtMTMxLDM4ICsxNTAsMTM4IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQo
VGltZXIKICAgICBTTUlMVGltZSBlbGFwc2VkID0gdGhpcy0+ZWxhcHNlZCgpOwogICAgIHVwZGF0
ZUFuaW1hdGlvbnMoZWxhcHNlZCk7CiB9CisgCit2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRh
dGVEb2N1bWVudE9yZGVySW5kZXhlcygpCit7CisgICAgdW5zaWduZWQgdGltaW5nRWxlbWVudENv
dW50ID0gMDsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX293bmVyU1ZHRWxlbWVudDsgbm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUobV9vd25lclNWR0VsZW1lbnQpKSB7CisgICAg
ICAgIGlmIChTVkdTTUlMRWxlbWVudDo6aXNTTUlMRWxlbWVudChub2RlKSkKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PFNWR1NNSUxFbGVtZW50Kj4obm9kZSktPnNldERvY3VtZW50T3JkZXJJbmRl
eCh0aW1pbmdFbGVtZW50Q291bnQrKyk7CisgICAgfQorICAgIG1fZG9jdW1lbnRPcmRlckluZGV4
ZXNEaXJ0eSA9IGZhbHNlOworfQorCitzdHJ1Y3QgUHJpb3JpdHlDb21wYXJlIHsKKyAgICBQcmlv
cml0eUNvbXBhcmUoU01JTFRpbWUgZWxhcHNlZCkgOiBtX2VsYXBzZWQoZWxhcHNlZCkge30KKyAg
ICBib29sIG9wZXJhdG9yKCkoU1ZHU01JTEVsZW1lbnQqIGEsIFNWR1NNSUxFbGVtZW50KiBiKQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY29uc2lkZXIgcG9zc2li
bGUgdGltaW5nIHJlbGF0aW9ucyBiZXR3ZWVuIHRoZSBlbGVtZW50cy4KKyAgICAgICAgU01JTFRp
bWUgYUJlZ2luID0gYS0+aW50ZXJ2YWxCZWdpbigpOworICAgICAgICBTTUlMVGltZSBiQmVnaW4g
PSBiLT5pbnRlcnZhbEJlZ2luKCk7CisgICAgICAgIC8vIEZyb3plbiBlbGVtZW50cyBuZWVkIHRv
IGJlIHByaW9yaXRpemVkIGJhc2VkIG9uIHRoZWlyIHByZXZpb3VzIGludGVydmFsLgorICAgICAg
ICBhQmVnaW4gPSBhLT5pc0Zyb3plbigpICYmIG1fZWxhcHNlZCA8IGFCZWdpbiA/IGEtPnByZXZp
b3VzSW50ZXJ2YWxCZWdpbigpIDogYUJlZ2luOworICAgICAgICBiQmVnaW4gPSBiLT5pc0Zyb3pl
bigpICYmIG1fZWxhcHNlZCA8IGJCZWdpbiA/IGItPnByZXZpb3VzSW50ZXJ2YWxCZWdpbigpIDog
YkJlZ2luOworICAgICAgICBpZiAoYUJlZ2luID09IGJCZWdpbikKKyAgICAgICAgICAgIHJldHVy
biBhLT5kb2N1bWVudE9yZGVySW5kZXgoKSA8IGItPmRvY3VtZW50T3JkZXJJbmRleCgpOworICAg
ICAgICByZXR1cm4gYUJlZ2luIDwgYkJlZ2luOworICAgIH0KKyAgICBTTUlMVGltZSBtX2VsYXBz
ZWQ7Cit9OworCit2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjpzb3J0QnlQcmlvcml0eShWZWN0b3I8
U1ZHU01JTEVsZW1lbnQqPiYgc21pbEVsZW1lbnRzLCBTTUlMVGltZSBlbGFwc2VkKQoreworICAg
IGlmIChtX2RvY3VtZW50T3JkZXJJbmRleGVzRGlydHkpCisgICAgICAgIHVwZGF0ZURvY3VtZW50
T3JkZXJJbmRleGVzKCk7CisgICAgc3RkOjpzb3J0KHNtaWxFbGVtZW50cy5iZWdpbigpLCBzbWls
RWxlbWVudHMuZW5kKCksIFByaW9yaXR5Q29tcGFyZShlbGFwc2VkKSk7Cit9CiAgICAgCi12b2lk
IFNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQpCitz
dGF0aWMgYm9vbCBhcHBseU9yZGVyU29ydEZ1bmN0aW9uKFNWR1NNSUxFbGVtZW50KiBhLCBTVkdT
TUlMRWxlbWVudCogYikKK3sKKyAgICBpZiAoIWEtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1h
dGVUcmFuc2Zvcm1UYWcpICYmIGItPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVUcmFuc2Zv
cm1UYWcpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAg
CitzdGF0aWMgdm9pZCBzb3J0QnlBcHBseU9yZGVyKFZlY3RvcjxTVkdTTUlMRWxlbWVudCo+JiBz
bWlsRWxlbWVudHMpCiB7Ci0gICAgLy8gRklYTUU6IFNvcnQgYnkgcHJpb3JpdHkgKGJlZ2luIHRp
bWUgb3JkZXIsIGRvY3VtZW50IG9yZGVyKSBmb3IgZWFjaCB0YXJnZXQgZWxlbWVudC4KLSAgICAv
LyBIaWdoZXN0IHByaW9yaXR5IHJlcGxhY2UgYW5pbWF0aW9uIG92ZXJyaWRlcyB0aGUgbG93ZXIg
cHJpb3JpdHkgb25lcy4KKyAgICBzdGQ6OnNvcnQoc21pbEVsZW1lbnRzLmJlZ2luKCksIHNtaWxF
bGVtZW50cy5lbmQoKSwgYXBwbHlPcmRlclNvcnRGdW5jdGlvbik7Cit9CiAKLSAgICBTTUlMVGlt
ZSBlYXJsaWVyc0ZpcmVUaW1lID0gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKK1N0cmluZyBTTUlM
VGltZUNvbnRhaW5lcjo6YmFzZVZhbHVlRm9yKEVsZW1lbnRBdHRyaWJ1dGVQYWlyIGtleSkKK3sK
KyAgICAvLyBGSVhNRTogV2Ugd291bGRuJ3QgbmVlZCB0byBkbyB0aGlzIGlmIHdlIHdlcmUga2Vl
cGluZyBiYXNlIHZhbHVlcyBhcm91bmQgcHJvcGVybHkgaW4gRE9NLgorICAgIC8vIEN1cnJlbnRs
eSBhbmltYXRpb24gb3ZlcndyaXRlcyB0aGVtIHNvIHdlIG5lZWQgdG8gc2F2ZSB0aGVtIGhlcmUu
CisgICAgQmFzZVZhbHVlTWFwOjppdGVyYXRvciBpdCA9IG1fc2F2ZWRCYXNlVmFsdWVzLmZpbmQo
a2V5KTsKKyAgICBpZiAoaXQgIT0gbV9zYXZlZEJhc2VWYWx1ZXMuZW5kKCkpCisgICAgICAgIHJl
dHVybiBpdC0+c2Vjb25kOwogICAgIAorICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IGtleS5maXJz
dDsKKyAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGtleS5zZWNvbmQ7CisgICAgQVNTRVJUKHRh
cmdldCk7CisgICAgQVNTRVJUKCFhdHRyaWJ1dGVOYW1lLmlzRW1wdHkoKSk7CisgICAgU3RyaW5n
IGJhc2VWYWx1ZTsKKyAgICBpZiAoU1ZHQW5pbWF0aW9uRWxlbWVudDo6YXR0cmlidXRlSXNDU1Mo
YXR0cmlidXRlTmFtZSkpIHsKKyAgICAgICAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uIGNv
bXB1dGVkU3R5bGUodGFyZ2V0KTsKKyAgICAgICAgYmFzZVZhbHVlID0gY29tcHV0ZWRTdHlsZS5n
ZXRQcm9wZXJ0eVZhbHVlKGNzc1Byb3BlcnR5SUQoYXR0cmlidXRlTmFtZSkpOworICAgIH0gZWxz
ZQorICAgICAgICBiYXNlVmFsdWUgPSB0YXJnZXQtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1l
KTsKKyAgICBtX3NhdmVkQmFzZVZhbHVlcy5hZGQoa2V5LCBiYXNlVmFsdWUpOworICAgIHJldHVy
biBiYXNlVmFsdWU7Cit9CisgICAgICAKK3ZvaWQgU01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFu
aW1hdGlvbnMoU01JTFRpbWUgZWxhcHNlZCkKK3sKKyAgICBTTUlMVGltZSBlYXJsaWVyc0ZpcmVU
aW1lID0gU01JTFRpbWU6OnVucmVzb2x2ZWQoKTsKKwogICAgIFZlY3RvcjxTVkdTTUlMRWxlbWVu
dCo+IHRvQW5pbWF0ZTsKICAgICBjb3B5VG9WZWN0b3IobV9zY2hlZHVsZWRBbmltYXRpb25zLCB0
b0FuaW1hdGUpOworICAgIAorICAgIC8vIFNvcnQgYWNjb3JkaW5nIHRvIHByaW9yaXR5LiBFbGVt
ZW50cyB3aXRoIGxhdGVyIGJlZ2luIHRpbWUgaGF2ZSBoaWdoZXIgcHJpb3JpdHkuCisgICAgLy8g
SW4gY2FzZSBvZiBhIHRpZSwgZG9jdW1lbnQgb3JkZXIgZGVjaWRlcy4gCisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGFsc28gY29uc2lkZXIgdGltaW5nIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0
aGUgZWxlbWVudHMuIERlcGVuZGVudHMKKyAgICAvLyBoYXZlIGhpZ2hlciBwcmlvcml0eS4KKyAg
ICBzb3J0QnlQcmlvcml0eSh0b0FuaW1hdGUsIGVsYXBzZWQpOworICAgIAorICAgIC8vIENhbGN1
bGF0ZSBhbmltYXRpb24gY29udHJpYnV0aW9ucy4KKyAgICB0eXBlZGVmIEhhc2hNYXA8RWxlbWVu
dEF0dHJpYnV0ZVBhaXIsIFNWR1NNSUxFbGVtZW50Kj4gUmVzdWx0RWxlbWVudE1hcDsKKyAgICBS
ZXN1bHRFbGVtZW50TWFwIHJlc3VsdHNFbGVtZW50czsKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAw
OyBuIDwgdG9BbmltYXRlLnNpemUoKTsgKytuKSB7Ci0gICAgICAgIC8vIEEgc2NoZWR1bGVkIGFu
aW1hdGlvbiBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBieSBwcmV2aW91cyBh
bmltYXRpb24uCi0gICAgICAgIGlmICghbV9zY2hlZHVsZWRBbmltYXRpb25zLmNvbnRhaW5zKHRv
QW5pbWF0ZVtuXSkpCisgICAgICAgIFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24gPSB0b0FuaW1h
dGVbbl07CisgICAgICAgIEFTU0VSVChhbmltYXRpb24tPnRpbWVDb250YWluZXIoKSA9PSB0aGlz
KTsKKworICAgICAgICBTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gYW5pbWF0aW9uLT50YXJn
ZXRFbGVtZW50KCk7CisgICAgICAgIGlmICghdGFyZ2V0RWxlbWVudCkKICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGFuaW1hdGlvbi0+YXR0cmli
dXRlTmFtZSgpOworICAgICAgICBpZiAoYXR0cmlidXRlTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGlmIChhbmltYXRpb24tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFuaW1hdGVNb3Rpb25U
YWcpKQorICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSBTVkdOYW1lczo6YW5pbWF0ZU1v
dGlvblRhZy5sb2NhbE5hbWUoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUmVmUHRyPFNWR1NNSUxFbGVt
ZW50PiBhbmltYXRpb24gPSB0b0FuaW1hdGVbbl07Ci0gICAgICAgIEFTU0VSVChhbmltYXRpb24t
PnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKKyAgICAgICAgLy8gUmVzdWx0cyBhcmUgYWNjdW11
bGF0ZWQgdG8gdGhlIGZpcnN0IGFuaW1hdGlvbnMgdGhhdCBhbmltYXRlcyBhIHBhcnRpY3VsYXIg
ZWxlbWVudC9hdHRyaWJ1dGUgcGFpci4KKyAgICAgICAgRWxlbWVudEF0dHJpYnV0ZVBhaXIga2V5
KHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOyAKKyAgICAgICAgU1ZHU01JTEVsZW1lbnQq
IHJlc3VsdEVsZW1lbnQgPSByZXN1bHRzRWxlbWVudHMuZ2V0KGtleSk7CisgICAgICAgIGlmICgh
cmVzdWx0RWxlbWVudCkgeworICAgICAgICAgICAgcmVzdWx0RWxlbWVudCA9IGFuaW1hdGlvbjsK
KyAgICAgICAgICAgIHJlc3VsdEVsZW1lbnQtPnJlc2V0VG9CYXNlVmFsdWUoYmFzZVZhbHVlRm9y
KGtleSkpOworICAgICAgICAgICAgcmVzdWx0c0VsZW1lbnRzLmFkZChrZXksIHJlc3VsdEVsZW1l
bnQpOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKGVsYXBzZWQgPj0gYW5pbWF0aW9uLT5uZXh0
UHJvZ3Jlc3NUaW1lKCkpCi0gICAgICAgICAgICBhbmltYXRpb24tPnByb2dyZXNzKGVsYXBzZWQp
OworICAgICAgICAvLyBUaGlzIHdpbGwgY2FsY3VsYXRlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBh
bmltYXRpb24gYW5kIGFkZCBpdCB0byB0aGUgcmVzdWx0c0VsZW1lbnQuCisgICAgICAgIGFuaW1h
dGlvbi0+cHJvZ3Jlc3MoZWxhcHNlZCwgcmVzdWx0RWxlbWVudCk7CiAKLSAgICAgICAgLy8gUGVy
aGFwcyBpdCBkZWNpZGVkIG5vdCB0byBhbmltYXRlIGFueW1vcmUuCi0gICAgICAgIGlmICghbV9z
Y2hlZHVsZWRBbmltYXRpb25zLmNvbnRhaW5zKGFuaW1hdGlvbi5nZXQoKSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAKICAgICAgICAgU01JTFRpbWUgbmV4dEZpcmVUaW1lID0gYW5pbWF0
aW9uLT5uZXh0UHJvZ3Jlc3NUaW1lKCk7CiAgICAgICAgIGlmIChuZXh0RmlyZVRpbWUuaXNGaW5p
dGUoKSkKICAgICAgICAgICAgIGVhcmxpZXJzRmlyZVRpbWUgPSBtaW4obmV4dEZpcmVUaW1lLCBl
YXJsaWVyc0ZpcmVUaW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zY2hlZHVsZWRB
bmltYXRpb25zLnJlbW92ZShhbmltYXRpb24uZ2V0KCkpOworICAgICAgICBlbHNlIGlmICghYW5p
bWF0aW9uLT5pc0NvbnRyaWJ1dGluZyhlbGFwc2VkKSkKKyAgICAgICAgICAgIG1fc2NoZWR1bGVk
QW5pbWF0aW9ucy5yZW1vdmUoYW5pbWF0aW9uKTsKICAgICB9CiAgICAgCisgICAgVmVjdG9yPFNW
R1NNSUxFbGVtZW50Kj4gYW5pbWF0aW9uc1RvQXBwbHk7CisgICAgUmVzdWx0RWxlbWVudE1hcDo6
aXRlcmF0b3IgZW5kID0gcmVzdWx0c0VsZW1lbnRzLmVuZCgpOworICAgIGZvciAoUmVzdWx0RWxl
bWVudE1hcDo6aXRlcmF0b3IgaXQgPSByZXN1bHRzRWxlbWVudHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICBhbmltYXRpb25zVG9BcHBseS5hcHBlbmQoaXQtPnNlY29uZCk7CisK
KyAgICAvLyBTb3J0IDxhbmltYXRlVHJhbmZvcm0+IHRvIGJlIHRoZSBsYXN0IG9uZSB0byBiZSBh
cHBsaWVkLiA8YW5pbWF0ZT4gbWF5IGNoYW5nZSB0cmFuc2Zvcm0gYXR0cmlidXRlIGFzCisgICAg
Ly8gd2VsbCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSBtb2RpZnlpbmcgPHVzZT4geC95KSBh
bmQgdGhpcyB3YXkgdHJhbnNmb3JtcyBjb21iaW5lIHByb3Blcmx5LgorICAgIHNvcnRCeUFwcGx5
T3JkZXIoYW5pbWF0aW9uc1RvQXBwbHkpOworICAgIAorICAgIC8vIEFwcGx5IHJlc3VsdHMgdG8g
dGFyZ2V0IGVsZW1lbnRzLgorICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBhbmltYXRpb25z
VG9BcHBseS5zaXplKCk7ICsrbikKKyAgICAgICAgYW5pbWF0aW9uc1RvQXBwbHlbbl0tPmFwcGx5
UmVzdWx0c1RvVGFyZ2V0KCk7CisKICAgICBzdGFydFRpbWVyKGVhcmxpZXJzRmlyZVRpbWUsIGFu
aW1hdGlvbkZyYW1lRGVsYXkpOwogICAgIAogICAgIERvY3VtZW50Ojp1cGRhdGVEb2N1bWVudHNS
ZW5kZXJpbmcoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5l
ci5oCShyZXZpc2lvbiAzMTkxMykKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNv
bnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw5IEBACiAKICNpZiBFTkFCTEUo
U1ZHKQogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTTUlMVGltZS5o
IgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTM2LDExICsz
OCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCisgICAgY2xhc3MgU1ZHRWxlbWVu
dDsKICAgICBjbGFzcyBTVkdTTUlMRWxlbWVudDsKKyAgICBjbGFzcyBTVkdTVkdFbGVtZW50Owog
CiAgICAgY2xhc3MgU01JTFRpbWVDb250YWluZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTTUlMVGlt
ZUNvbnRhaW5lcj4gIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNN
SUxUaW1lQ29udGFpbmVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU01JTFRpbWVD
b250YWluZXIpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVy
PiBjcmVhdGUoU1ZHU1ZHRWxlbWVudCogb3duZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTTUlM
VGltZUNvbnRhaW5lcihvd25lcikpOyB9IAogICAgIAogICAgICAgICB2b2lkIHNjaGVkdWxlKFNW
R1NNSUxFbGVtZW50Kik7CiAgICAgICAgIHZvaWQgdW5zY2hlZHVsZShTVkdTTUlMRWxlbWVudCop
OwpAQCAtNTMsMjIgKzU3LDM3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBi
ZWdpbigpOwogICAgICAgICB2b2lkIHBhdXNlKCk7CiAgICAgICAgIHZvaWQgcmVzdW1lKCk7Cisg
ICAgICAgIAorICAgICAgICB2b2lkIHNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHkoKSB7IG1f
ZG9jdW1lbnRPcmRlckluZGV4ZXNEaXJ0eSA9IHRydWU7IH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIFNNSUxUaW1lQ29udGFpbmVyKCk7Ci0KKyAgICAgICAgU01JTFRpbWVDb250YWluZXIoU1ZH
U1ZHRWxlbWVudCogb3duZXIpOworICAgICAgICAKICAgICAgICAgdm9pZCB0aW1lckZpcmVkKFRp
bWVyPFNNSUxUaW1lQ29udGFpbmVyPiopOwogICAgICAgICB2b2lkIHN0YXJ0VGltZXIoU01JTFRp
bWUgZmlyZVRpbWUsIFNNSUxUaW1lIG1pbmltdW1EZWxheSA9IDApOwogICAgICAgICB2b2lkIHVw
ZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUgZWxhcHNlZCk7CiAgICAgICAgIAorICAgICAgICB2b2lk
IHVwZGF0ZURvY3VtZW50T3JkZXJJbmRleGVzKCk7CisgICAgICAgIHZvaWQgc29ydEJ5UHJpb3Jp
dHkoVmVjdG9yPFNWR1NNSUxFbGVtZW50Kj4mIHNtaWxFbGVtZW50cywgU01JTFRpbWUgZWxhcHNl
ZCk7CisgICAgICAgIAorICAgICAgICB0eXBlZGVmIHBhaXI8U1ZHRWxlbWVudCosIFN0cmluZz4g
RWxlbWVudEF0dHJpYnV0ZVBhaXI7CisgICAgICAgIFN0cmluZyBiYXNlVmFsdWVGb3IoRWxlbWVu
dEF0dHJpYnV0ZVBhaXIpOworICAgICAgICAKICAgICAgICAgZG91YmxlIG1fYmVnaW5UaW1lOwog
ICAgICAgICBkb3VibGUgbV9wYXVzZVRpbWU7CiAgICAgICAgIGRvdWJsZSBtX2FjY3VtdWxhdGVk
UGF1c2VUaW1lOwogICAgICAgICAKKyAgICAgICAgYm9vbCBtX2RvY3VtZW50T3JkZXJJbmRleGVz
RGlydHk7CisgICAgICAgIAogICAgICAgICBUaW1lcjxTTUlMVGltZUNvbnRhaW5lcj4gbV90aW1l
cjsKIAogICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8U1ZHU01JTEVsZW1lbnQqPiBUaW1pbmdFbGVt
ZW50U2V0OwogICAgICAgICBUaW1pbmdFbGVtZW50U2V0IG1fc2NoZWR1bGVkQW5pbWF0aW9uczsK
KyAgICAgICAgCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxFbGVtZW50QXR0cmlidXRlUGFpciwg
U3RyaW5nPiBCYXNlVmFsdWVNYXA7CisgICAgICAgIEJhc2VWYWx1ZU1hcCBtX3NhdmVkQmFzZVZh
bHVlczsKKworICAgICAgICBTVkdTVkdFbGVtZW50KiBtX293bmVyU1ZHRWxlbWVudDsKICAgICB9
OwogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDMxODkxKQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODAsOSArODAsMTMgQEAgU1ZHU01JTEVsZW1lbnQ6OlNWR1NN
SUxFbGVtZW50KGNvbnN0IFF1YQogICAgICwgbV9oYXNFbmRFdmVudENvbmRpdGlvbnMoZmFsc2Up
CiAgICAgLCBtX2ludGVydmFsQmVnaW4oU01JTFRpbWU6OnVucmVzb2x2ZWQoKSkKICAgICAsIG1f
aW50ZXJ2YWxFbmQoU01JTFRpbWU6OnVucmVzb2x2ZWQoKSkKKyAgICAsIG1fcHJldmlvdXNJbnRl
cnZhbEJlZ2luKFNNSUxUaW1lOjp1bnJlc29sdmVkKCkpCiAgICAgLCBtX2lzV2FpdGluZ0ZvckZp
cnN0SW50ZXJ2YWwodHJ1ZSkKICAgICAsIG1fYWN0aXZlU3RhdGUoSW5hY3RpdmUpCisgICAgLCBt
X2xhc3RQZXJjZW50KDApCisgICAgLCBtX2xhc3RSZXBlYXQoMCkKICAgICAsIG1fbmV4dFByb2dy
ZXNzVGltZSgwKQorICAgICwgbV9kb2N1bWVudE9yZGVySW5kZXgoMCkKICAgICAsIG1fY2FjaGVk
RHVyKGludmFsaWRDYWNoZWRUaW1lKQogICAgICwgbV9jYWNoZWRSZXBlYXREdXIoaW52YWxpZENh
Y2hlZFRpbWUpCiAgICAgLCBtX2NhY2hlZFJlcGVhdENvdW50KGludmFsaWRDYWNoZWRUaW1lKQpA
QCAtMTExLDYgKzExNSw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW4KICAgICAgICAgcmV0dXJuOwogICAgIG1fdGltZUNvbnRhaW5lciA9IG93bmVyLT50aW1lQ29u
dGFpbmVyKCk7CiAgICAgQVNTRVJUKG1fdGltZUNvbnRhaW5lcik7CisgICAgbV90aW1lQ29udGFp
bmVyLT5zZXREb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5KCk7CiAgICAgcmVzY2hlZHVsZSgpOwog
fQogCkBAIC00MTQsMTEgKzQxOSwyNiBAQCBTVkdFbGVtZW50KiBTVkdTTUlMRWxlbWVudDo6dGFy
Z2V0RWxlbWVuCiAgICAgcmV0dXJuIG1fdGFyZ2V0RWxlbWVudC5nZXQoKTsKIH0KICAgICAKK1N0
cmluZyBTVkdTTUlMRWxlbWVudDo6YXR0cmlidXRlTmFtZSgpIGNvbnN0Cit7ICAgIAorICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKS5zdHJpbmcoKS5z
dHJpcFdoaXRlU3BhY2UoKTsKK30KKyAgICAKIFNNSUxUaW1lIFNWR1NNSUxFbGVtZW50OjplbGFw
c2VkKCkgY29uc3QgCiB7CiAgICAgcmV0dXJuIG1fdGltZUNvbnRhaW5lciA/IG1fdGltZUNvbnRh
aW5lci0+ZWxhcHNlZCgpIDogMDsKIH0gCisgICAgCitib29sIFNWR1NNSUxFbGVtZW50Ojppc0lu
YWN0aXZlKCkgY29uc3QKK3sKKyAgICAgcmV0dXJuIG1fYWN0aXZlU3RhdGUgPT0gSW5hY3RpdmU7
Cit9CiAKK2Jvb2wgU1ZHU01JTEVsZW1lbnQ6OmlzRnJvemVuKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9hY3RpdmVTdGF0ZSA9PSBGcm96ZW47Cit9CisgICAgCiBTVkdTTUlMRWxlbWVudDo6UmVz
dGFydCBTVkdTTUlMRWxlbWVudDo6cmVzdGFydCgpIGNvbnN0CiB7ICAgIAogICAgIHN0YXRpYyBj
b25zdCBBdG9taWNTdHJpbmcgbmV2ZXIoIm5ldmVyIik7CkBAIC02NjIsNyArNjgyLDcgQEAgdm9p
ZCBTVkdTTUlMRWxlbWVudDo6YmVnaW5MaXN0Q2hhbmdlZCgpCiAgICAgICAgICAgICBpZiAobV9p
bnRlcnZhbEJlZ2luICE9IG9sZEJlZ2luKQogICAgICAgICAgICAgICAgIG5vdGlmeURlcGVuZGVu
dHNJbnRlcnZhbENoYW5nZWQoRXhpc3RpbmdJbnRlcnZhbCk7CiAgICAgICAgIH0KLSAgICB9ICAg
IAorICAgIH0KICAgICBtX25leHRQcm9ncmVzc1RpbWUgPSBlbGFwc2VkOwogICAgIHJlc2NoZWR1
bGUoKTsKIH0KQEAgLTc1Nyw3ICs3NzcsNyBAQCBTTUlMVGltZSBTVkdTTUlMRWxlbWVudDo6Y2Fs
Y3VsYXRlTmV4dFByCiBTVkdTTUlMRWxlbWVudDo6QWN0aXZlU3RhdGUgU1ZHU01JTEVsZW1lbnQ6
OmRldGVybWluZUFjdGl2ZVN0YXRlKFNNSUxUaW1lIGVsYXBzZWQpIGNvbnN0CiB7CiAgICAgaWYg
KGVsYXBzZWQgPj0gbV9pbnRlcnZhbEJlZ2luICYmIGVsYXBzZWQgPCBtX2ludGVydmFsRW5kKQot
ICAgICAgICAgICAgcmV0dXJuIEFjdGl2ZTsKKyAgICAgICAgcmV0dXJuIEFjdGl2ZTsKIAogICAg
IGlmIChtX2FjdGl2ZVN0YXRlID09IEFjdGl2ZSkKICAgICAgICAgcmV0dXJuIGZpbGwoKSA9PSBG
aWxsRnJlZXplID8gRnJvemVuIDogSW5hY3RpdmU7CkBAIC03NjUsNyArNzg1LDEzIEBAIFNWR1NN
SUxFbGVtZW50OjpBY3RpdmVTdGF0ZSBTVkdTTUlMRWxlbWUKICAgICByZXR1cm4gbV9hY3RpdmVT
dGF0ZTsKIH0KICAgICAKLXZvaWQgU1ZHU01JTEVsZW1lbnQ6OnByb2dyZXNzKFNNSUxUaW1lIGVs
YXBzZWQpCitib29sIFNWR1NNSUxFbGVtZW50Ojppc0NvbnRyaWJ1dGluZyhTTUlMVGltZSBlbGFw
c2VkKSBjb25zdCAKK3sgCisgICAgLy8gQW5pbWF0aW9uIGRvZXMgbm90IGNvbnRyaWJ1dGUgZHVy
aW5nIHRoZSBhY3RpdmUgdGltZSBpZiBpdCBpcyBwYXN0IGl0cyByZXBlYXRpbmcgZHVyYXRpb24g
YW5kIGhhcyBmaWxsPXJlbW92ZS4KKyAgICByZXR1cm4gKG1fYWN0aXZlU3RhdGUgPT0gQWN0aXZl
ICYmIChmaWxsKCkgPT0gRmlsbEZyZWV6ZSB8fCBlbGFwc2VkIDw9IG1faW50ZXJ2YWxCZWdpbiAr
IHJlcGVhdGluZ0R1cmF0aW9uKCkpKSB8fCBtX2FjdGl2ZVN0YXRlID09IEZyb3plbjsKK30KKyAg
ICAKK3ZvaWQgU1ZHU01JTEVsZW1lbnQ6OnByb2dyZXNzKFNNSUxUaW1lIGVsYXBzZWQsIFNWR1NN
SUxFbGVtZW50KiByZXN1bHRFbGVtZW50KQogewogICAgIEFTU0VSVChtX3RpbWVDb250YWluZXIp
OwogICAgIEFTU0VSVChtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwgfHwgbV9pbnRlcnZhbEJl
Z2luLmlzRmluaXRlKCkpOwpAQCAtNzc1LDE1ICs4MDEsMjAgQEAgdm9pZCBTVkdTTUlMRWxlbWVu
dDo6cHJvZ3Jlc3MoU01JTFRpbWUgZQogICAgIAogICAgIGlmICghbV9pbnRlcnZhbEJlZ2luLmlz
RmluaXRlKCkpIHsKICAgICAgICAgQVNTRVJUKG1fYWN0aXZlU3RhdGUgPT0gSW5hY3RpdmUpOwor
ICAgICAgICBtX25leHRQcm9ncmVzc1RpbWUgPSBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmIChlbGFwc2VkIDwgbV9pbnRlcnZhbEJl
Z2luKSB7CiAgICAgICAgIEFTU0VSVChtX2FjdGl2ZVN0YXRlICE9IEFjdGl2ZSk7CisgICAgICAg
IGlmIChtX2FjdGl2ZVN0YXRlID09IEZyb3plbiAmJiByZXN1bHRFbGVtZW50KQorICAgICAgICAg
ICAgdXBkYXRlQW5pbWF0aW9uKG1fbGFzdFBlcmNlbnQsIG1fbGFzdFJlcGVhdCwgcmVzdWx0RWxl
bWVudCk7CiAgICAgICAgIG1fbmV4dFByb2dyZXNzVGltZSA9IG1faW50ZXJ2YWxCZWdpbjsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKKyAgICBtX3ByZXZpb3VzSW50ZXJ2YWxCZWdpbiA9
IG1faW50ZXJ2YWxCZWdpbjsKKyAgICAKICAgICBpZiAobV9hY3RpdmVTdGF0ZSA9PSBJbmFjdGl2
ZSkgewogICAgICAgICBtX2lzV2FpdGluZ0ZvckZpcnN0SW50ZXJ2YWwgPSBmYWxzZTsKICAgICAg
ICAgbV9hY3RpdmVTdGF0ZSA9IEFjdGl2ZTsKQEAgLTc5MiwyMSArODIzLDIyIEBAIHZvaWQgU1ZH
U01JTEVsZW1lbnQ6OnByb2dyZXNzKFNNSUxUaW1lIGUKICAgICAKICAgICB1bnNpZ25lZCByZXBl
YXQ7CiAgICAgZmxvYXQgcGVyY2VudCA9IGNhbGN1bGF0ZUFuaW1hdGlvblBlcmNlbnRBbmRSZXBl
YXQoZWxhcHNlZCwgcmVwZWF0KTsKLSAgICBhcHBseUFuaW1hdGlvbihwZXJjZW50LCByZXBlYXQp
OwogCiAgICAgY2hlY2tSZXN0YXJ0KGVsYXBzZWQpOwogCi0gICAgQWN0aXZlU3RhdGUgbmV3U3Rh
dGUgPSBkZXRlcm1pbmVBY3RpdmVTdGF0ZShlbGFwc2VkKTsKKyAgICBBY3RpdmVTdGF0ZSBvbGRB
Y3RpdmVTdGF0ZSA9IG1fYWN0aXZlU3RhdGU7CisgICAgbV9hY3RpdmVTdGF0ZSA9IGRldGVybWlu
ZUFjdGl2ZVN0YXRlKGVsYXBzZWQpOworICAgIAorICAgIGlmIChpc0NvbnRyaWJ1dGluZyhlbGFw
c2VkKSkgeworICAgICAgICBpZiAocmVzdWx0RWxlbWVudCkKKyAgICAgICAgICAgIHVwZGF0ZUFu
aW1hdGlvbihwZXJjZW50LCByZXBlYXQsIHJlc3VsdEVsZW1lbnQpOworICAgICAgICBtX2xhc3RQ
ZXJjZW50ID0gcGVyY2VudDsKKyAgICAgICAgbV9sYXN0UmVwZWF0ID0gcmVwZWF0OworICAgIH0K
IAotICAgIGlmIChuZXdTdGF0ZSA9PSBBY3RpdmUgJiYgZmlsbCgpID09IEZpbGxSZW1vdmUgJiYg
ZWxhcHNlZCA+IG1faW50ZXJ2YWxCZWdpbiArIHJlcGVhdGluZ0R1cmF0aW9uKCkpCi0gICAgICAg
IHVuYXBwbHlBbmltYXRpb24oKTsKLSAgICAgICAgCi0gICAgaWYgKG1fYWN0aXZlU3RhdGUgPT0g
QWN0aXZlICYmIG5ld1N0YXRlICE9IEFjdGl2ZSkgewotICAgICAgICBpZiAobmV3U3RhdGUgIT0g
RnJvemVuKQotICAgICAgICAgICAgdW5hcHBseUFuaW1hdGlvbigpOworICAgIGlmIChvbGRBY3Rp
dmVTdGF0ZSA9PSBBY3RpdmUgJiYgbV9hY3RpdmVTdGF0ZSAhPSBBY3RpdmUpCiAgICAgICAgIGVu
ZGVkQWN0aXZlSW50ZXJ2YWwoKTsKLSAgICB9Ci0gICAgbV9hY3RpdmVTdGF0ZSA9IG5ld1N0YXRl
OworCiAgICAgbV9uZXh0UHJvZ3Jlc3NUaW1lID0gY2FsY3VsYXRlTmV4dFByb2dyZXNzVGltZShl
bGFwc2VkKTsKIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5oCShyZXZpc2lvbiAzMTg5MSkKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgU01JTFRpbWVDb250YWluZXIqIHRpbWVDb250YWluZXIoKSBjb25zdCB7IHJl
dHVybiBtX3RpbWVDb250YWluZXIuZ2V0KCk7IH0KIAogICAgICAgICBTVkdFbGVtZW50KiB0YXJn
ZXRFbGVtZW50KCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lKCkgY29uc3Q7
CiAgICAgICAgIAogICAgICAgICB2b2lkIGJlZ2luQnlMaW5rQWN0aXZhdGlvbigpOwogCkBAIC03
NiwyMiArNzcsMzMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgU01J
TFRpbWUgaW50ZXJ2YWxCZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJ2YWxCZWdpbjsgfQog
ICAgICAgICBTTUlMVGltZSBpbnRlcnZhbEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJ2YWxF
bmQ7IH0KKyAgICAgICAgU01JTFRpbWUgcHJldmlvdXNJbnRlcnZhbEJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcmV2aW91c0ludGVydmFsQmVnaW47IH0KICAgICAgICAgU01JTFRpbWUgc2ltcGxl
RHVyYXRpb24oKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIHZvaWQgcHJvZ3Jlc3MoU01JTFRp
bWUgZWxhcHNlZCk7CisgICAgICAgIHZvaWQgcHJvZ3Jlc3MoU01JTFRpbWUgZWxhcHNlZCwgU1ZH
U01JTEVsZW1lbnQqIHJlc3VsdHNFbGVtZW50KTsKICAgICAgICAgU01JTFRpbWUgbmV4dFByb2dy
ZXNzVGltZSgpIGNvbnN0OwogICAgICAgICAKICAgICAgICAgc3RhdGljIFNNSUxUaW1lIHBhcnNl
Q2xvY2tWYWx1ZShjb25zdCBTdHJpbmcmKTsKICAgICAgICAgc3RhdGljIFNNSUxUaW1lIHBhcnNl
T2Zmc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIAorICAgICAgICBib29sIGlzQ29u
dHJpYnV0aW5nKFNNSUxUaW1lIGVsYXBzZWQpIGNvbnN0OworICAgICAgICBib29sIGlzSW5hY3Rp
dmUoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc0Zyb3plbigpIGNvbnN0OworICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgZG9jdW1lbnRPcmRlckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1
bWVudE9yZGVySW5kZXg7IH0KKyAgICAgICAgdm9pZCBzZXREb2N1bWVudE9yZGVySW5kZXgodW5z
aWduZWQgaW5kZXgpIHsgbV9kb2N1bWVudE9yZGVySW5kZXggPSBpbmRleDsgfQorICAgICAgICAK
KyAgICAgICAgdmlydHVhbCBib29sIGlzQWRkaXRpdmUoKSBjb25zdCA9IDA7CisgICAgICAgIHZp
cnR1YWwgdm9pZCByZXNldFRvQmFzZVZhbHVlKGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkgPSAwOworICAgICAgICAKIHByb3Rl
Y3RlZDoKICAgICAgICAgdm9pZCBhZGRCZWdpblRpbWUoU01JTFRpbWUgdGltZSk7CiAgICAgICAg
IHZvaWQgYWRkRW5kVGltZShTTUlMVGltZSB0aW1lKTsKICAgICAgICAgCiBwcml2YXRlOgogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRlZEFjdGl2ZUludGVydmFsKCkgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlBbmltYXRpb24oZmxvYXQgcGVyY2VudCwgdW5zaWduZWQgcmVwZWF0
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1bmFwcGx5QW5pbWF0aW9uKCkgPSAwOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9uKGZsb2F0IHBlcmNlbnQsIHVuc2lnbmVk
IHJlcGVhdCwgU1ZHU01JTEVsZW1lbnQqIHJlc3VsdEVsZW1lbnQpID0gMDsKICAgICAgICAgdmly
dHVhbCB2b2lkIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKSA9IDA7CiAgICAgICAgIAogICAgICAgICBl
bnVtIEJlZ2luT3JFbmQgeyBCZWdpbiwgRW5kIH07CkBAIC0xNTYsMTMgKzE2OCwxOCBAQCBwcml2
YXRlOgogICAgICAgICBTTUlMVGltZSBtX2ludGVydmFsQmVnaW47CiAgICAgICAgIFNNSUxUaW1l
IG1faW50ZXJ2YWxFbmQ7CiAgICAgICAgIAorICAgICAgICBTTUlMVGltZSBtX3ByZXZpb3VzSW50
ZXJ2YWxCZWdpbjsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JGaXJzdElu
dGVydmFsOwogICAgIAogICAgICAgICBBY3RpdmVTdGF0ZSBtX2FjdGl2ZVN0YXRlOworICAgICAg
ICBmbG9hdCBtX2xhc3RQZXJjZW50OworICAgICAgICB1bnNpZ25lZCBtX2xhc3RSZXBlYXQ7CiAg
ICAgICAgIAogICAgICAgICBTTUlMVGltZSBtX25leHRQcm9ncmVzc1RpbWU7CiAgICAgICAgIAog
ICAgICAgICBSZWZQdHI8U01JTFRpbWVDb250YWluZXI+IG1fdGltZUNvbnRhaW5lcjsKKyAgICAg
ICAgdW5zaWduZWQgbV9kb2N1bWVudE9yZGVySW5kZXg7CiAKICAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHRWxlbWVudD4gbV90YXJnZXRFbGVtZW50OwogICAgICAgICBtdXRhYmxlIFNNSUxUaW1l
IG1fY2FjaGVkRHVyOwo=
</data>
<flag name="review"
          id="8970"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>