<?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>28452</bug_id>
          
          <creation_ts>2009-08-19 06:09:23 -0700</creation_ts>
          <short_desc>Web Inspector freezes on expanding large/complex DOM trees</short_desc>
          <delta_ts>2010-03-09 11:28:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>34421</dup_id>
          
          <bug_file_loc>http://shaun.in/man/</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="Anthony Ricaud">rik</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>aroben</cc>
    
    <cc>bweinstein</cc>
    
    <cc>enrica</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>kmccullough</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>141462</commentid>
    <comment_count>0</comment_count>
    <who name="Anthony Ricaud">rik</who>
    <bug_when>2009-08-19 06:09:23 -0700</bug_when>
    <thetext>The linked page has a lot of nodes. When you open the inspector, it freezes while trying to render the DOM tree in the Elements panel. Obviously it shouldn&apos;t.

We should at least be able to use the other panels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141494</commentid>
    <comment_count>1</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-08-19 09:27:54 -0700</bug_when>
    <thetext>This works fine in Safari 4, so it might be related to the DOM agent changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141495</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-08-19 09:30:11 -0700</bug_when>
    <thetext>It is still slow in Safari 4 when expanding the SVG &lt;a xlink=&quot;&quot;&gt; element. But TOT really does hang for a long time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159146</commentid>
    <comment_count>3</comment_count>
    <who name="Anthony Ricaud">rik</who>
    <bug_when>2009-10-29 17:02:32 -0700</bug_when>
    <thetext>The inspector is now reactive when opening.

But it is still hanging on expanding &lt;a xlink&gt;. Reflecting that in the title.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159156</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-10-29 17:20:14 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; The inspector is now reactive when opening.
&gt; 
&gt; But it is still hanging on expanding &lt;a xlink&gt;. Reflecting that in the title.

We should make dom agent return limited number of children (500?) and the total number of those. That way we would be able to render the &apos;Load 457 more nodes&apos; link.

It is not trivial though due to the node event listeners. Will need additional checks in the agent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189345</commentid>
    <comment_count>5</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-02-10 06:04:59 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=34421 is the first stab at the issue. We can elaborate further if that solution is not sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197593</commentid>
    <comment_count>6</comment_count>
      <attachid>50311</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-03-09 08:27:56 -0800</bug_when>
    <thetext>Created attachment 50311
[PATCH] Optimize Position::isCandidate() and PositionIterator::isCandidate()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197594</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-09 08:31:23 -0800</bug_when>
    <thetext>Attachment 50311 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/editing/htmlediting.cpp:76:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/dom/Position.cpp:740:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/dom/Position.cpp:897:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/dom/Position.cpp:902:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197595</commentid>
    <comment_count>8</comment_count>
      <attachid>50311</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-03-09 08:32:47 -0800</bug_when>
    <thetext>Comment on attachment 50311
[PATCH] Optimize Position::isCandidate() and PositionIterator::isCandidate()

&gt; +    bool isParentUserSelect = !nodeIsUserSelectNone(node()-&gt;parent());
&gt;      if (renderer-&gt;isBR())
&gt; -        return m_offset == 0 &amp;&amp; !nodeIsUserSelectNone(node()-&gt;parent());
&gt; +        return m_offset == 0 &amp;&amp; isParentUserSelect;

I think you are regressing the general case here without any wins. Same below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197609</commentid>
    <comment_count>9</comment_count>
      <attachid>50314</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-03-09 09:11:28 -0800</bug_when>
    <thetext>Created attachment 50314
[PATCH] Style + nits fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197613</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-09 09:13:32 -0800</bug_when>
    <thetext>Attachment 50314 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/dom/Position.cpp:896:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/dom/Position.cpp:901:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197627</commentid>
    <comment_count>11</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-03-09 09:34:49 -0800</bug_when>
    <thetext>This issue was fixed in 34421, so closing this bug as duplicate and filing another one to upstream http://code.google.com/p/chromium/issues/detail?id=31832

*** This bug has been marked as a duplicate of bug 34421 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50311</attachid>
            <date>2010-03-09 08:27:56 -0800</date>
            <delta_ts>2010-03-09 09:11:28 -0800</delta_ts>
            <desc>[PATCH] Optimize Position::isCandidate() and PositionIterator::isCandidate()</desc>
            <filename>optimizecaret.patch</filename>
            <type>text/plain</type>
            <size>40667</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWMyZWYzOS4uMzEyYWQ3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAxMC0wMy0wOSAgQWxleGFuZGVyIFBh
dmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcHJvdmUgY2FyZXQgcG9zaXRpb24gY29tcHV0YXRpb24g
cGVyZm9ybWFuY2UgYnkgY2hlY2tpbmcgZmFzdGVzdCBjb25kaXRpb25zIGZpcnN0CisKKyAgICAg
ICAgV2ViIEluc3BlY3RvciBmcmVlemVzIG9uIGV4cGFuZGluZyBsYXJnZS9jb21wbGV4IERPTSB0
cmVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg0
NTIKKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6cHJldmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Om5leHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmF0RWRpdGluZ0JvdW5kYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uOjpyZW5kZXJlZE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6bmV4dENoYXJhY3RlclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZHNPZk5v
ZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xv
c2luZ1Zpc3VhbEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3RyZWFtZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnVwc3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
c2l0aW9uOjpkb3duc3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjppc0NhbmRp
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6aW5SZW5kZXJlZFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpQb3NpdGlvbjo6aXNSZW5kZXJlZENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
c2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRp
b246OmZvcm1hdEZvckRlYnVnZ2VyKToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSk6Cisg
ICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5I
YXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RFZGl0YWJs
ZVJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6bG93ZXN0RWRpdGFibGVBbmNlc3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjppc0VkaXRhYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aXNS
aWNobHlFZGl0YWJsZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVkaXRhYmxlUm9vdEZv
clBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdGVy
UG9zaXRpb25JblJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6bGFzdEVkaXRhYmxlUG9zaXRpb25C
ZWZvcmVQb3NpdGlvbkluUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNvbXBsaWFudEVx
dWl2YWxlbnQpOgorICAgICAgICAoV2ViQ29yZTo6c3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3BlY2lhbEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjppc0xh
c3RQb3NpdGlvbkJlZm9yZVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVX
aXRoVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVPZlR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6aGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jbG9zaW5nQW5jaG9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0xpc3RDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjplbWJlZGRlZFN1Ymxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kZWRTdWJs
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0VtcHR5TGlzdEl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6aXNUYWJsZUNlbGwpOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eVRhYmxl
Q2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkJlZm9yZVRhYlNwYW4pOgorICAgICAg
ICAoV2ViQ29yZTo6bnVtRW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzTWFpbEJsb2NrcXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6bGluZUJyZWFrRXhpc3Rz
QXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6YXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OmlzSW5saW5lVGV4dEJveCk6CisKIDIwMTAtMDMtMDkgIFBoaWxpcHBlIE5v
cm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rh
dm8gTm9yb25oYSBTaWx2YS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBi
L1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAppbmRleCBlZjBiM2MxLi5mOTMyZmUyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2lu
Y2x1ZGUgInZpc2libGVfdW5pdHMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgotICAKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtMjE0LDcgKzIx
NCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91cyhQb3NpdGlvbk1vdmVUeXBlIG1vdmVU
eXBlKSBjb25zdAogICAgIE5vZGUqIG4gPSBub2RlKCk7CiAgICAgaWYgKCFuKQogICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgCisKICAgICBpbnQgbyA9IG1fb2Zmc2V0OwogICAgIC8vIEZJWE1F
OiBOZWdhdGl2ZSBvZmZzZXRzIHNob3VsZG4ndCBiZSBhbGxvd2VkLiBXZSBzaG91bGQgY2F0Y2gg
dGhpcyBlYXJsaWVyLgogICAgIEFTU0VSVChvID49IDApOwpAQCAtMjUzLDcgKzI1Myw3IEBAIFBv
c2l0aW9uIFBvc2l0aW9uOjpuZXh0KFBvc2l0aW9uTW92ZVR5cGUgbW92ZVR5cGUpIGNvbnN0CiAg
ICAgTm9kZSogbiA9IG5vZGUoKTsKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiAqdGhpczsK
LSAgICAKKwogICAgIGludCBvID0gbV9vZmZzZXQ7CiAgICAgLy8gRklYTUU6IE5lZ2F0aXZlIG9m
ZnNldHMgc2hvdWxkbid0IGJlIGFsbG93ZWQuIFdlIHNob3VsZCBjYXRjaCB0aGlzIGVhcmxpZXIu
CiAgICAgQVNTRVJUKG8gPj0gMCk7CkBAIC0zMTksMTEgKzMxOSwxMSBAQCBib29sIFBvc2l0aW9u
OjphdEVkaXRpbmdCb3VuZGFyeSgpIGNvbnN0CiAgICAgUG9zaXRpb24gbmV4dFBvc2l0aW9uID0g
ZG93bnN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgaWYgKGF0Rmlyc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0
UG9zaXRpb24ubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgCisKICAgICBQb3NpdGlvbiBwcmV2UG9zaXRpb24gPSB1cHN0cmVhbShDYW5D
cm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgaWYgKGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5ub2RlKCkt
PmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKKwog
ICAgIHJldHVybiBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIW5leHRQb3NpdGlvbi5ub2Rl
KCktPmlzQ29udGVudEVkaXRhYmxlKCkKICAgICAgICAgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVs
bCgpICYmICFwcmV2UG9zaXRpb24ubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQpAQCAt
MzQ2LDEwICszNDYsMTAgQEAgaW50IFBvc2l0aW9uOjpyZW5kZXJlZE9mZnNldCgpIGNvbnN0CiB7
CiAgICAgaWYgKCFub2RlKCktPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0
OwotICAgCisKICAgICBpZiAoIW5vZGUoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgIGludCByZXN1bHQgPSAwOwogICAg
IFJlbmRlclRleHQgKnRleHRSZW5kZXJlciA9IHRvUmVuZGVyVGV4dChub2RlKCktPnJlbmRlcmVy
KCkpOwogICAgIGZvciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRl
eHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKQEAgLTM3Niw3ICszNzYs
NyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5p
dHkgYWZmaW5pdHkpIGNvbnN0CiAKICAgICBib29sIGF0U3RhcnRPZkxpbmUgPSBpc1N0YXJ0T2ZM
aW5lKFZpc2libGVQb3NpdGlvbigqdGhpcywgYWZmaW5pdHkpKTsKICAgICBib29sIHJlbmRlcmVk
ID0gaXNDYW5kaWRhdGUoKTsKLSAgICAKKwogICAgIFBvc2l0aW9uIGN1cnJlbnRQb3MgPSAqdGhp
czsKICAgICB3aGlsZSAoIWN1cnJlbnRQb3MuYXRTdGFydE9mVHJlZSgpKSB7CiAgICAgICAgIGN1
cnJlbnRQb3MgPSBjdXJyZW50UG9zLnByZXZpb3VzKCk7CkBAIC0zOTAsNyArMzkwLDcgQEAgUG9z
aXRpb24gUG9zaXRpb246OnByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5IGFmZmlu
aXR5KSBjb25zdAogICAgICAgICB9IGVsc2UgaWYgKHJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW9u
KGN1cnJlbnRQb3MpKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7CiAgICAgfQotICAg
IAorCiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00MDQsNyArNDA0LDcgQEAgUG9zaXRpb24g
UG9zaXRpb246Om5leHRDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5pdHkgYWZmaW5pdHkpIGNvbnN0
CiAKICAgICBib29sIGF0RW5kT2ZMaW5lID0gaXNFbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKCp0
aGlzLCBhZmZpbml0eSkpOwogICAgIGJvb2wgcmVuZGVyZWQgPSBpc0NhbmRpZGF0ZSgpOwotICAg
IAorCiAgICAgUG9zaXRpb24gY3VycmVudFBvcyA9ICp0aGlzOwogICAgIHdoaWxlICghY3VycmVu
dFBvcy5hdEVuZE9mVHJlZSgpKSB7CiAgICAgICAgIGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLm5l
eHQoKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dENoYXJhY3Rl
clBvc2l0aW9uKEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3QKICAgICAgICAgfSBlbHNlIGlmIChy
ZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjdXJyZW50UG9zKSkKICAgICAgICAgICAgIHJldHVy
biBjdXJyZW50UG9zOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAt
NDMwLDE0ICs0MzAsMTQgQEAgc3RhdGljIGJvb2wgZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGlu
Y3RQb3NpdGlvbnMoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBpZiAoIW5vZGUt
PnJlbmRlcmVyKCktPmlzSW5saW5lKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAK
KwogICAgIC8vIERvbid0IGluY2x1ZGUgaW5saW5lIHRhYmxlcy4KICAgICBpZiAobm9kZS0+aGFz
VGFnTmFtZSh0YWJsZVRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIC8v
IFRoZXJlIGlzIGEgVmlzaWJsZVBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBpbmxpbmUtYmxvY2sg
Y29udGFpbmVyLgogICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkgJiYg
Y2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhub2RlKSAmJiB0b1JlbmRlckJveChub2RlLT5yZW5k
ZXJlcigpKS0+aGVpZ2h0KCkgIT0gMCAmJiAhbm9kZS0+Zmlyc3RDaGlsZCgpOwogfQpAQCAtNDQ2
LDcgKzQ0Niw3IEBAIHN0YXRpYyBOb2RlKiBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShOb2RlKiBu
b2RlKQogewogICAgIHdoaWxlIChub2RlICYmICFlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5j
dFBvc2l0aW9ucyhub2RlKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAg
ICAgICAgCisKICAgICByZXR1cm4gbm9kZTsKIH0KIApAQCAtNDU2LDE2ICs0NTYsMTYgQEAgc3Rh
dGljIGJvb2wgaXNTdHJlYW1lcihjb25zdCBQb3NpdGlvbkl0ZXJhdG9yJiBwb3MpCiB7CiAgICAg
aWYgKCFwb3Mubm9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICBp
ZiAoaXNBdG9taWNOb2RlKHBvcy5ub2RlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgCisKICAgICByZXR1cm4gcG9zLmF0U3RhcnRPZk5vZGUoKTsKIH0KIAogLy8gVGhpcyBmdW5j
dGlvbiBhbmQgZG93bnN0cmVhbSgpIGFyZSB1c2VkIGZvciBtb3ZpbmcgYmFjayBhbmQgZm9ydGgg
YmV0d2VlbiB2aXN1YWxseSBlcXVpdmFsZW50IGNhbmRpZGF0ZXMuCi0vLyBGb3IgZXhhbXBsZSwg
Zm9yIHRoZSB0ZXh0IG5vZGUgImZvbyAgICAgYmFyIiB3aGVyZSB3aGl0ZXNwYWNlIGlzIGNvbGxh
cHNpYmxlLCB0aGVyZSBhcmUgdHdvIGNhbmRpZGF0ZXMgCi0vLyB0aGF0IG1hcCB0byB0aGUgVmlz
aWJsZVBvc2l0aW9uIGJldHdlZW4gJ2InIGFuZCB0aGUgc3BhY2UuICBUaGlzIGZ1bmN0aW9uIHdp
bGwgcmV0dXJuIHRoZSBsZWZ0IGNhbmRpZGF0ZSAKKy8vIEZvciBleGFtcGxlLCBmb3IgdGhlIHRl
eHQgbm9kZSAiZm9vICAgICBiYXIiIHdoZXJlIHdoaXRlc3BhY2UgaXMgY29sbGFwc2libGUsIHRo
ZXJlIGFyZSB0d28gY2FuZGlkYXRlcworLy8gdGhhdCBtYXAgdG8gdGhlIFZpc2libGVQb3NpdGlv
biBiZXR3ZWVuICdiJyBhbmQgdGhlIHNwYWNlLiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0
aGUgbGVmdCBjYW5kaWRhdGUKIC8vIGFuZCBkb3duc3RyZWFtKCkgd2lsbCByZXR1cm4gdGhlIHJp
Z2h0IG9uZS4KIC8vIEFsc28sIHVwc3RyZWFtKCkgd2lsbCByZXR1cm4gW2JvdW5kYXJ5LCAwXSBm
b3IgYW55IG9mIHRoZSBwb3NpdGlvbnMgZnJvbSBbYm91bmRhcnksIDBdIHRvIHRoZSBmaXJzdCBj
YW5kaWRhdGUKIC8vIGluIGJvdW5kYXJ5LCB3aGVyZSBlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0
aW5jdFBvc2l0aW9ucyhib3VuZGFyeSkgaXMgdHJ1ZS4KQEAgLTQ3NCw3ICs0NzQsNyBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUp
IGNvbnN0CiAgICAgTm9kZSogc3RhcnROb2RlID0gbm9kZSgpOwogICAgIGlmICghc3RhcnROb2Rl
KQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKLSAgICAKKwogICAgIC8vIGl0ZXJhdGUgYmFj
a3dhcmQgZnJvbSB0aGVyZSwgbG9va2luZyBmb3IgYSBxdWFsaWZpZWQgcG9zaXRpb24KICAgICBO
b2RlKiBib3VuZGFyeSA9IGVuY2xvc2luZ1Zpc3VhbEJvdW5kYXJ5KHN0YXJ0Tm9kZSk7CiAgICAg
UG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9ICp0aGlzOwpAQCAtNDg0LDcgKzQ4NCw3IEBA
IFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUg
cnVsZSkgY29uc3QKICAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwogICAgIGZvciAo
OyAhY3VycmVudFBvcy5hdFN0YXJ0KCk7IGN1cnJlbnRQb3MuZGVjcmVtZW50KCkpIHsKICAgICAg
ICAgTm9kZSogY3VycmVudE5vZGUgPSBjdXJyZW50UG9zLm5vZGUoKTsKLSAgICAgICAgCisKICAg
ICAgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIGFuIGVkaXRhYmlsaXR5IGNoYW5nZSBpZiB3ZSBoYXZl
bid0IG1vdmVkIHRvIGEgZGlmZmVyZW50IG5vZGUsCiAgICAgICAgIC8vIHRvIGF2b2lkIHRoZSBl
eHBlbnNlIG9mIGNvbXB1dGluZyBpc0NvbnRlbnRFZGl0YWJsZSgpLgogICAgICAgICBpZiAoY3Vy
cmVudE5vZGUgIT0gbGFzdE5vZGUpIHsKQEAgLTQ5OCw3ICs0OTgsNyBAQCBQb3NpdGlvbiBQb3Np
dGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAg
ICAgICAgICAgICBsYXN0Tm9kZSA9IGN1cnJlbnROb2RlOwogICAgICAgICB9CiAKLSAgICAgICAg
Ly8gSWYgd2UndmUgbW92ZWQgdG8gYSBwb3NpdGlvbiB0aGF0IGlzIHZpc3VhbGx5IGRpc3RpbmN0
LCByZXR1cm4gdGhlIGxhc3Qgc2F2ZWQgcG9zaXRpb24uIFRoZXJlIAorICAgICAgICAvLyBJZiB3
ZSd2ZSBtb3ZlZCB0byBhIHBvc2l0aW9uIHRoYXQgaXMgdmlzdWFsbHkgZGlzdGluY3QsIHJldHVy
biB0aGUgbGFzdCBzYXZlZCBwb3NpdGlvbi4gVGhlcmUKICAgICAgICAgLy8gaXMgY29kZSBiZWxv
dyB0aGF0IHRlcm1pbmF0ZXMgZWFybHkgaWYgd2UncmUgKmFib3V0KiB0byBtb3ZlIHRvIGEgdmlz
dWFsbHkgZGlzdGluY3QgcG9zaXRpb24uCiAgICAgICAgIGlmIChlbmRzT2ZOb2RlQXJlVmlzdWFs
bHlEaXN0aW5jdFBvc2l0aW9ucyhjdXJyZW50Tm9kZSkgJiYgY3VycmVudE5vZGUgIT0gYm91bmRh
cnkpCiAgICAgICAgICAgICByZXR1cm4gbGFzdFZpc2libGU7CkBAIC01MDcsMTcgKzUwNywxNyBA
QCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxl
IHJ1bGUpIGNvbnN0CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Tm9k
ZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUo
KS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgCisKICAgICAgICAgaWYgKHJ1bGUgPT0gQ2FuQ3Jvc3NFZGl0aW5nQm91bmRh
cnkgJiYgYm91bmRhcnlDcm9zc2VkKSB7CiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJl
bnRQb3M7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAg
ICAvLyB0cmFjayBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KICAgICAgICAgaWYgKGlz
U3RyZWFtZXIoY3VycmVudFBvcykpCiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQ
b3M7Ci0gICAgICAgIAotICAgICAgICAvLyBEb24ndCBtb3ZlIHBhc3QgYSBwb3NpdGlvbiB0aGF0
IGlzIHZpc3VhbGx5IGRpc3RpbmN0LiAgV2UgY291bGQgcmVseSBvbiBjb2RlIGFib3ZlIHRvIHRl
cm1pbmF0ZSBhbmQgCisKKyAgICAgICAgLy8gRG9uJ3QgbW92ZSBwYXN0IGEgcG9zaXRpb24gdGhh
dCBpcyB2aXN1YWxseSBkaXN0aW5jdC4gIFdlIGNvdWxkIHJlbHkgb24gY29kZSBhYm92ZSB0byB0
ZXJtaW5hdGUgYW5kCiAgICAgICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUgbmV4dCBp
dGVyYXRpb24sIGJ1dCB3ZSB0ZXJtaW5hdGUgZWFybHkgdG8gYXZvaWQgZG9pbmcgYSBub2RlSW5k
ZXgoKSBjYWxsLgogICAgICAgICBpZiAoZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3Np
dGlvbnMoY3VycmVudE5vZGUpICYmIGN1cnJlbnRQb3MuYXRTdGFydE9mTm9kZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwpAQCAtNTg1LDggKzU4NSw4IEBAIFBvc2l0aW9uIFBv
c2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QK
IH0KIAogLy8gVGhpcyBmdW5jdGlvbiBhbmQgdXBzdHJlYW0oKSBhcmUgdXNlZCBmb3IgbW92aW5n
IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdmlzdWFsbHkgZXF1aXZhbGVudCBjYW5kaWRhdGVzLgot
Ly8gRm9yIGV4YW1wbGUsIGZvciB0aGUgdGV4dCBub2RlICJmb28gICAgIGJhciIgd2hlcmUgd2hp
dGVzcGFjZSBpcyBjb2xsYXBzaWJsZSwgdGhlcmUgYXJlIHR3byBjYW5kaWRhdGVzIAotLy8gdGhh
dCBtYXAgdG8gdGhlIFZpc2libGVQb3NpdGlvbiBiZXR3ZWVuICdiJyBhbmQgdGhlIHNwYWNlLiAg
VGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgcmlnaHQgY2FuZGlkYXRlIAorLy8gRm9yIGV4
YW1wbGUsIGZvciB0aGUgdGV4dCBub2RlICJmb28gICAgIGJhciIgd2hlcmUgd2hpdGVzcGFjZSBp
cyBjb2xsYXBzaWJsZSwgdGhlcmUgYXJlIHR3byBjYW5kaWRhdGVzCisvLyB0aGF0IG1hcCB0byB0
aGUgVmlzaWJsZVBvc2l0aW9uIGJldHdlZW4gJ2InIGFuZCB0aGUgc3BhY2UuICBUaGlzIGZ1bmN0
aW9uIHdpbGwgcmV0dXJuIHRoZSByaWdodCBjYW5kaWRhdGUKIC8vIGFuZCB1cHN0cmVhbSgpIHdp
bGwgcmV0dXJuIHRoZSBsZWZ0IG9uZS4KIC8vIEFsc28sIGRvd25zdHJlYW0oKSB3aWxsIHJldHVy
biB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgbGFzdCBhdG9taWMgbm9kZSBpbiBib3VuZGFyeSBm
b3IgYWxsIG9mIHRoZSBwb3NpdGlvbnMKIC8vIGluIGJvdW5kYXJ5IGFmdGVyIHRoZSBsYXN0IGNh
bmRpZGF0ZSwgd2hlcmUgZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoYm91
bmRhcnkpLgpAQCAtNjAzLDkgKzYwMyw5IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFt
KEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogICAgIGJvb2wgc3RhcnRF
ZGl0YWJsZSA9IHN0YXJ0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKICAgICBOb2RlKiBsYXN0
Tm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwotICAg
IGZvciAoOyAhY3VycmVudFBvcy5hdEVuZCgpOyBjdXJyZW50UG9zLmluY3JlbWVudCgpKSB7ICAg
CisgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0RW5kKCk7IGN1cnJlbnRQb3MuaW5jcmVtZW50KCkp
IHsKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBjdXJyZW50UG9zLm5vZGUoKTsKLSAgICAg
ICAgCisKICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIGFuIGVkaXRhYmlsaXR5IGNoYW5nZSBp
ZiB3ZSBoYXZlbid0IG1vdmVkIHRvIGEgZGlmZmVyZW50IG5vZGUsCiAgICAgICAgIC8vIHRvIGF2
b2lkIHRoZSBleHBlbnNlIG9mIGNvbXB1dGluZyBpc0NvbnRlbnRFZGl0YWJsZSgpLgogICAgICAg
ICBpZiAoY3VycmVudE5vZGUgIT0gbGFzdE5vZGUpIHsKQEAgLTYxNiw3ICs2MTYsNyBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVs
ZSkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgYm91
bmRhcnlDcm9zc2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgbGFzdE5vZGUgPSBjdXJyZW50Tm9kZTsKICAgICAgICAgfQogCkBAIC02MjQs
NyArNjI0LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5
Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAgICAgICAgIC8vIHJldHVybiB0aGUgbGFzdCB2aXNp
YmxlIHN0cmVhbWVyIHBvc2l0aW9uCiAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+aGFzVGFnTmFt
ZShib2R5VGFnKSAmJiBjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAorCiAgICAgICAgIC8vIERvIG5vdCBtb3ZlIHRvIGEgdmlzdWFsbHkg
ZGlzdGluY3QgcG9zaXRpb24uCiAgICAgICAgIGlmIChlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0
aW5jdFBvc2l0aW9ucyhjdXJyZW50Tm9kZSkgJiYgY3VycmVudE5vZGUgIT0gYm91bmRhcnkpCiAg
ICAgICAgICAgICByZXR1cm4gbGFzdFZpc2libGU7CkBAIC02MzgsMTIgKzYzOCwxMiBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVs
ZSkgY29uc3QKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGN1cnJlbnROb2RlLT5y
ZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT52
aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgCisKICAgICAgICAgaWYgKHJ1bGUgPT0gQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgYm91
bmRhcnlDcm9zc2VkKSB7CiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyB0cmFj
ayBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KICAgICAgICAgaWYgKGlzU3RyZWFtZXIo
Y3VycmVudFBvcykpCiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7CkBAIC03
MDIsNyArNzAyLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgCisKICAgICByZXR1cm4gbGFzdFZpc2libGU7CiB9CiAKQEAgLTcyNywzNCArNzI3
LDM2IEBAIGJvb2wgUG9zaXRpb246OmlzQ2FuZGlkYXRlKCkgY29uc3QKIHsKICAgICBpZiAoaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBSZW5kZXJPYmpl
Y3QgKnJlbmRlcmVyID0gbm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+
dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGJv
b2wgaXNQYXJlbnRVc2VyU2VsZWN0ID0gIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+cGFy
ZW50KCkpOwogICAgIGlmIChyZW5kZXJlci0+aXNCUigpKQotICAgICAgICByZXR1cm4gbV9vZmZz
ZXQgPT0gMCAmJiAhbm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpLT5wYXJlbnQoKSk7CisgICAg
ICAgIHJldHVybiBtX29mZnNldCA9PSAwICYmIGlzUGFyZW50VXNlclNlbGVjdDsKIAorICAgIGJv
b2wgaXNTZWxmVXNlclNlbGVjdCA9ICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpOwogICAg
IGlmIChyZW5kZXJlci0+aXNUZXh0KCkpCi0gICAgICAgIHJldHVybiBpblJlbmRlcmVkVGV4dCgp
ICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpOworICAgICAgICByZXR1cm4gaXNTZWxm
VXNlclNlbGVjdCAmJiBpblJlbmRlcmVkVGV4dCgpOwogCiAgICAgaWYgKGlzVGFibGVFbGVtZW50
KG5vZGUoKSkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUoKSkpCi0gICAgICAgIHJldHVy
biAoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSB8fCBhdExhc3RFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKCkpICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCktPnBhcmVudCgpKTsK
KyAgICAgICAgcmV0dXJuIGlzUGFyZW50VXNlclNlbGVjdCAmJiAoYXRGaXJzdEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoKSB8fCBhdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpOwogCiAgICAg
aWYgKG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAKKwogICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSkgewogICAg
ICAgICBpZiAodG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmhlaWdodCgpIHx8IG1fYW5jaG9yTm9k
ZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKCFQb3NpdGlvbjo6aGFz
UmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVuZGVyZXIpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFQ
b3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNV
c2VyU2VsZWN0Tm9uZShub2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGlzU2VsZlVzZXJTZWxlY3QgJiYgYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZv
ck5vZGUoKTsKKyAgICAgICAgICAgIHJldHVybiBpc1NlbGZVc2VyU2VsZWN0ICYmIG1fYW5jaG9y
Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpICYmIGF0
RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgICAgIHJldHVybiBpc1NlbGZVc2VyU2VsZWN0ICYmIG1f
YW5jaG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOwog
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNzYzLDExICs3NjUsMTEgQEAgYm9vbCBQb3NpdGlv
bjo6aW5SZW5kZXJlZFRleHQoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSB8fCAhbm9kZSgp
LT5pc1RleHROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBS
ZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVu
ZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIFJlbmRlclRleHQgKnRl
eHRSZW5kZXJlciA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcik7CiAgICAgZm9yIChJbmxpbmVUZXh0
Qm94ICpib3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+
bmV4dFRleHRCb3goKSkgewogICAgICAgICBpZiAobV9vZmZzZXQgPCBzdGF0aWNfY2FzdDxpbnQ+
KGJveC0+c3RhcnQoKSkgJiYgIXRleHRSZW5kZXJlci0+Y29udGFpbnNSZXZlcnNlZFRleHQoKSkg
ewpAQCAtNzgwLDcgKzc4Miw3IEBAIGJvb2wgUG9zaXRpb246OmluUmVuZGVyZWRUZXh0KCkgY29u
c3QKICAgICAgICAgICAgIC8vIFJldHVybiBmYWxzZSBmb3Igb2Zmc2V0cyBpbnNpZGUgY29tcG9z
ZWQgY2hhcmFjdGVycy4KICAgICAgICAgICAgIHJldHVybiBtX29mZnNldCA9PSAwIHx8IG1fb2Zm
c2V0ID09IHRleHRSZW5kZXJlci0+bmV4dE9mZnNldCh0ZXh0UmVuZGVyZXItPnByZXZpb3VzT2Zm
c2V0KG1fb2Zmc2V0KSk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBA
IC03ODksNyArNzkxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQo
Y29uc3QgTm9kZSogbikKICAgICBSZW5kZXJPYmplY3QqIHIgPSBuLT5yZW5kZXJlcigpOwogICAg
IGlmIChyKQogICAgICAgICByZXR1cm4gci0+Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpOwotICAg
IAorCiAgICAgaWYgKG4tPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IENoYXJhY3RlckRhdGEqPihuKS0+bGVuZ3RoKCk7CiAgICAgcmV0dXJu
IDE7CkBAIC03OTksMTEgKzgwMSwxMSBAQCBib29sIFBvc2l0aW9uOjppc1JlbmRlcmVkQ2hhcmFj
dGVyKCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkgfHwgIW5vZGUoKS0+aXNUZXh0Tm9kZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0
b1JlbmRlclRleHQocmVuZGVyZXIpOwogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4
dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkp
IHsKICAgICAgICAgaWYgKG1fb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8aW50Pihib3gtPnN0YXJ0KCkp
ICYmICF0ZXh0UmVuZGVyZXItPmNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkpIHsKQEAgLTgxNSw3ICs4
MTcsNyBAQCBib29sIFBvc2l0aW9uOjppc1JlbmRlcmVkQ2hhcmFjdGVyKCkgY29uc3QKICAgICAg
ICAgaWYgKG1fb2Zmc2V0ID49IHN0YXRpY19jYXN0PGludD4oYm94LT5zdGFydCgpKSAmJiBtX29m
ZnNldCA8IHN0YXRpY19jYXN0PGludD4oYm94LT5zdGFydCgpICsgYm94LT5sZW4oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKQEAgLTgyNyw3ICs4MjksNyBAQCBib29sIFBvc2l0aW9uOjpyZW5kZXJzSW5EaWZmZXJlbnRQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiAmcG9zKSBjb25zdAogICAgIFJlbmRlck9iamVjdCAqcmVu
ZGVyZXIgPSBub2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgUmVuZGVyT2JqZWN0ICpwb3NSZW5kZXJlciA9IHBv
cy5ub2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFwb3NSZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtODM1LDI2ICs4MzcsMjYgQEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0lu
RGlmZmVyZW50UG9zaXRpb24oY29uc3QgUG9zaXRpb24gJnBvcykgY29uc3QKICAgICBpZiAocmVu
ZGVyZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8CiAgICAgICAgIHBvc1Jl
bmRlcmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAorCiAgICAgaWYgKG5vZGUoKSA9PSBwb3Mubm9kZSgpKSB7CiAgICAgICAg
IGlmIChub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIGlmIChtX29mZnNldCA9PSBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlm
ICghbm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXBvcy5ub2RlKCktPmlzVGV4dE5vZGUoKSkgewog
ICAgICAgICAgICAgaWYgKG1fb2Zmc2V0ICE9IHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIAor
CiAgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgJiYgcG9zLmlzQ2FuZGlkYXRlKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIAorCiAgICAgaWYgKHBvcy5u
b2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpICYmIGlzQ2FuZGlkYXRlKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgICAgIAorCiAgICAgaWYgKG5vZGUoKS0+ZW5jbG9zaW5nQmxv
Y2tGbG93RWxlbWVudCgpICE9IHBvcy5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTg5MiwxMiArODk0LDEyIEBAIGJvb2wgUG9z
aXRpb246OnJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uICZwb3MpIGNv
bnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChuZXh0UmVuZGVyZWRF
ZGl0YWJsZShub2RlKCkpID09IHBvcy5ub2RlKCkgJiYgCisgICAgaWYgKG5leHRSZW5kZXJlZEVk
aXRhYmxlKG5vZGUoKSkgPT0gcG9zLm5vZGUoKSAmJgogICAgICAgICB0aGlzUmVuZGVyZWRPZmZz
ZXQgPT0gKGludCljYXJldE1heFJlbmRlcmVkT2Zmc2V0KG5vZGUoKSkgJiYgcG9zUmVuZGVyZWRP
ZmZzZXQgPT0gMCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlm
IChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUobm9kZSgpKSA9PSBwb3Mubm9kZSgpICYmIAorCisg
ICAgaWYgKHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShub2RlKCkpID09IHBvcy5ub2RlKCkgJiYK
ICAgICAgICAgdGhpc1JlbmRlcmVkT2Zmc2V0ID09IDAgJiYgcG9zUmVuZGVyZWRPZmZzZXQgPT0g
KGludCljYXJldE1heFJlbmRlcmVkT2Zmc2V0KHBvcy5ub2RlKCkpKSB7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CkBAIC05MTEsNyArOTEzLDcgQEAgUG9zaXRpb24gUG9zaXRpb246Omxl
YWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5IGFmZmluaXR5LCBib29sIGNvbnNpZGVy
Tm8KICAgICBBU1NFUlQoaXNFZGl0YWJsZVBvc2l0aW9uKCp0aGlzKSk7CiAgICAgaWYgKGlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKLSAgICAKKwogICAgIGlmICh1cHN0cmVh
bSgpLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigp
OwogCkBAIC05MzMsMTQgKzkzNSwxNCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dHJhaWxpbmdXaGl0
ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5LCBib29sIGNvbnNpZGVyTm9uQ29sbGFwcwogICAgIEFT
U0VSVChpc0VkaXRhYmxlUG9zaXRpb24oKnRoaXMpKTsKICAgICBpZiAoaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBQb3NpdGlvbigpOwotICAgIAorCiAgICAgVmlzaWJsZVBvc2l0aW9uIHYoKnRo
aXMpOwogICAgIFVDaGFyIGMgPSB2LmNoYXJhY3RlckFmdGVyKCk7CiAgICAgLy8gVGhlIHNwYWNl
IG11c3Qgbm90IGJlIGluIGFub3RoZXIgcGFyYWdyYXBoIGFuZCBpdCBtdXN0IGJlIGVkaXRhYmxl
LgogICAgIGlmICghaXNFbmRPZlBhcmFncmFwaCh2KSAmJiB2Lm5leHQodHJ1ZSkuaXNOb3ROdWxs
KCkpCiAgICAgICAgIGlmIChjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFjZSA/IChpc1Nw
YWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlKSA6IGlzQ29sbGFwc2libGVXaGl0
ZXNwYWNlKGMpKQogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIAorCiAgICAgcmV0dXJu
IFBvc2l0aW9uKCk7CiB9CiAKQEAgLTk5Nyw3ICs5OTksNyBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJ
bmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1h
cnlEaQogewogICAgIGNhcmV0T2Zmc2V0ID0gbV9vZmZzZXQ7CiAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAKKwogICAgIGlmICghcmVu
ZGVyZXItPmlzVGV4dCgpKSB7CiAgICAgICAgIGlmICghcmVuZGVyZXItPmlzUmVuZGVyQnV0dG9u
KCkgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgaGFzUmVuZGVyZWROb25Bbm9ueW1vdXNE
ZXNjZW5kYW50c1dpdGhIZWlnaHQocmVuZGVyZXIpKSB7CiAgICAgICAgICAgICBib29sIGxhc3RQ
b3NpdGlvbiA9IGNhcmV0T2Zmc2V0ID09IGxhc3RPZmZzZXRJbk5vZGUobm9kZSgpKTsKQEAgLTEx
NTksNyArMTE2MSw3IEBAIHZvaWQgUG9zaXRpb246OmRlYnVnUG9zaXRpb24oY29uc3QgY2hhciog
bXNnKSBjb25zdAogdm9pZCBQb3NpdGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVy
LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICAKKwog
ICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmVzdWx0ID0gIjxudWxsPiI7CiAgICAgZWxzZSB7
CkBAIC0xMTcwLDcgKzExNzIsNyBAQCB2b2lkIFBvc2l0aW9uOjpmb3JtYXRGb3JEZWJ1Z2dlcihj
aGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKICAgICAgICAgbm9kZSgpLT5mb3Jt
YXRGb3JEZWJ1Z2dlcihzLCBzaXplb2YocykpOwogICAgICAgICByZXN1bHQgKz0gczsKICAgICB9
Ci0gICAgICAgICAgCisKICAgICBzdHJuY3B5KGJ1ZmZlciwgcmVzdWx0LnV0ZjgoKS5kYXRhKCks
IGxlbmd0aCAtIDEpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJh
dG9yLmNwcCBiL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCmluZGV4IGY1YjY1ZjUu
LjQ4YzRkNTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCisr
KyBiL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTE0MywyNCArMTQz
LDI2IEBAIGJvb2wgUG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRhdGUoKSBjb25zdAogICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2FuY2hvck5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYgKHJlbmRl
cmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgYm9vbCBpc1BhcmVudFVzZXJTZWxlY3QgPSAhUG9zaXRpb246Om5vZGVJc1Vz
ZXJTZWxlY3ROb25lKG1fYW5jaG9yTm9kZS0+cGFyZW50KCkpOwogICAgIGlmIChyZW5kZXJlci0+
aXNCUigpKQotICAgICAgICByZXR1cm4gIW1fb2Zmc2V0SW5BbmNob3IgJiYgIVBvc2l0aW9uOjpu
b2RlSXNVc2VyU2VsZWN0Tm9uZShtX2FuY2hvck5vZGUtPnBhcmVudCgpKTsKKyAgICAgICAgcmV0
dXJuICFtX29mZnNldEluQW5jaG9yICYmIGlzUGFyZW50VXNlclNlbGVjdDsKIAorICAgIGJvb2wg
aXNTZWxmVXNlclNlbGVjdCA9ICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNo
b3JOb2RlKTsKICAgICBpZiAocmVuZGVyZXItPmlzVGV4dCgpKQotICAgICAgICByZXR1cm4gUG9z
aXRpb24oKnRoaXMpLmluUmVuZGVyZWRUZXh0KCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2Vs
ZWN0Tm9uZShtX2FuY2hvck5vZGUpOworICAgICAgICByZXR1cm4gaXNTZWxmVXNlclNlbGVjdCAm
JiBQb3NpdGlvbigqdGhpcykuaW5SZW5kZXJlZFRleHQoKTsKIAogICAgIGlmIChpc1RhYmxlRWxl
bWVudChtX2FuY2hvck5vZGUpIHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudChtX2FuY2hvck5vZGUp
KQotICAgICAgICByZXR1cm4gKGF0U3RhcnRPZk5vZGUoKSB8fCBhdEVuZE9mTm9kZSgpKSAmJiAh
UG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fYW5jaG9yTm9kZS0+cGFyZW50KCkpOwor
ICAgICAgICByZXR1cm4gaXNQYXJlbnRVc2VyU2VsZWN0ICYmIChhdFN0YXJ0T2ZOb2RlKCkgfHwg
YXRFbmRPZk5vZGUoKSk7CiAKICAgICBpZiAoIW1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShodG1s
VGFnKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3coKSkgewogICAgICAgICBpZiAodG9SZW5kZXJC
bG9jayhyZW5kZXJlciktPmhlaWdodCgpIHx8IG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShib2R5
VGFnKSkgewogICAgICAgICAgICAgaWYgKCFQb3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1v
dXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVuZGVyZXIpKQotICAgICAgICAgICAgICAgIHJldHVy
biBhdFN0YXJ0T2ZOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX2Fu
Y2hvck5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aXNDb250ZW50RWRp
dGFibGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fYW5jaG9yTm9kZSkg
JiYgUG9zaXRpb24oKnRoaXMpLmF0RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGlzU2VsZlVzZXJTZWxlY3QgJiYgYXRTdGFydE9mTm9kZSgpOworICAgICAgICAgICAg
cmV0dXJuIGlzU2VsZlVzZXJTZWxlY3QgJiYgbV9hbmNob3JOb2RlLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpICYmIFBvc2l0aW9uKCp0aGlzKS5hdEVkaXRpbmdCb3VuZGFyeSgpOwogICAgICAgICB9CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCA3MTI3NTM1Li4xNjMzZjBiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCisrKyBiL1dlYkNvcmUvZWRp
dGluZy9odG1sZWRpdGluZy5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtNjQsNyArNjQsNyBAQCBib29sIGlzQXRvbWlj
Tm9kZShjb25zdCBOb2RlICpub2RlKQogICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hp
bGROb2RlcygpIHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSk7CiB9CiAKLS8vIFJldHVy
bnMgdHJ1ZSBmb3Igbm9kZXMgdGhhdCBlaXRoZXIgaGF2ZSBubyBjb250ZW50LCBvciBoYXZlIGNv
bnRlbnQgdGhhdCBpcyBpZ25vcmVkIChza2lwcGVkIAorLy8gUmV0dXJucyB0cnVlIGZvciBub2Rl
cyB0aGF0IGVpdGhlciBoYXZlIG5vIGNvbnRlbnQsIG9yIGhhdmUgY29udGVudCB0aGF0IGlzIGln
bm9yZWQgKHNraXBwZWQKIC8vIG92ZXIpIHdoaWxlIGVkaXRpbmcuICBUaGVyZSBhcmUgbm8gVmlz
aWJsZVBvc2l0aW9ucyBpbnNpZGUgdGhlc2Ugbm9kZXMuCiBib29sIGVkaXRpbmdJZ25vcmVzQ29u
dGVudChjb25zdCBOb2RlKiBub2RlKQogewpAQCAtNzMsNyArNzMsNyBAQCBib29sIGVkaXRpbmdJ
Z25vcmVzQ29udGVudChjb25zdCBOb2RlKiBub2RlKQogCiBib29sIGNhbkhhdmVDaGlsZHJlbkZv
ckVkaXRpbmcoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gIW5vZGUtPmhhc1RhZ05h
bWUoaHJUYWcpICYmCisgICAgcmV0dXJuICFub2RlLT5pc1RleHROb2RlKCkgJiYKICAgICAgICAg
ICAgIW5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpICYmCiAgICAgICAgICAgICFub2RlLT5oYXNUYWdO
YW1lKGltZ1RhZykgJiYKICAgICAgICAgICAgIW5vZGUtPmhhc1RhZ05hbWUoYnV0dG9uVGFnKSAm
JgpAQCAtODgsNyArODgsNyBAQCBib29sIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoY29uc3Qg
Tm9kZSogbm9kZSkKICNpZiBFTkFCTEUoV01MKQogICAgICAgICAgICAhbm9kZS0+aGFzVGFnTmFt
ZShXTUxOYW1lczo6ZG9UYWcpICYmCiAjZW5kaWYKLSAgICAgICAgICAgIW5vZGUtPmlzVGV4dE5v
ZGUoKTsKKyAgICAgICAgICAgIW5vZGUtPmhhc1RhZ05hbWUoaHJUYWcpOwogfQogCiAvLyBDb21w
YXJlIHR3byBwb3NpdGlvbnMsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHBvc3NpYmlsaXR5IHRo
YXQgb25lIG9yIGJvdGgKQEAgLTEzNywxMSArMTM3LDExIEBAIE5vZGUqIGhpZ2hlc3RFZGl0YWJs
ZVJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlv
bi5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCisK
ICAgICBOb2RlKiBoaWdoZXN0Um9vdCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHBvc2l0aW9u
KTsKICAgICBpZiAoIWhpZ2hlc3RSb290KQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAg
IG5vZGUgPSBoaWdoZXN0Um9vdDsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBpZiAobm9k
ZS0+aXNDb250ZW50RWRpdGFibGUoKSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBOb2RlKiBoaWdoZXN0
RWRpdGFibGVSb290KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KLSAgICAKKwogICAg
IHJldHVybiBoaWdoZXN0Um9vdDsKIH0KIApAQCAtMTU4LDcgKzE1OCw3IEBAIE5vZGUqIGxvd2Vz
dEVkaXRhYmxlQW5jZXN0b3IoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiAwOwotICAgIAorCiAgICAgTm9kZSAqbG93ZXN0Um9vdCA9IDA7CiAgICAgd2hpbGUg
KG5vZGUpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCkBAIC0xNjcs
NyArMTY3LDcgQEAgTm9kZSogbG93ZXN0RWRpdGFibGVBbmNlc3RvcihOb2RlKiBub2RlKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAg
fQotICAgIAorCiAgICAgcmV0dXJuIGxvd2VzdFJvb3Q7CiB9CiAKQEAgLTE3NiwxMCArMTc2LDEw
IEBAIGJvb2wgaXNFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQogICAgIE5vZGUq
IG5vZGUgPSBwLm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCisKICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigp
LT5pc1RhYmxlKCkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgCisK
ICAgICByZXR1cm4gbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIApAQCAtMTg4LDE3ICsx
ODgsMTcgQEAgYm9vbCBpc0F0VW5zcGxpdHRhYmxlRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcG9z
KQogICAgIE5vZGUqIG5vZGUgPSBwb3Mubm9kZSgpOwogICAgIHJldHVybiAobm9kZSA9PSBlZGl0
YWJsZVJvb3RGb3JQb3NpdGlvbihwb3MpIHx8IG5vZGUgPT0gZW5jbG9zaW5nTm9kZU9mVHlwZShw
b3MsICZpc1RhYmxlQ2VsbCkpOwogfQotICAgIAotICAgIAorCisKIGJvb2wgaXNSaWNobHlFZGl0
YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQogewogICAgIE5vZGUqIG5vZGUgPSBwLm5v
ZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisK
ICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkp
CiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgCisKICAgICByZXR1cm4g
bm9kZS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKIH0KIApAQCAtMjA3LDEwICsyMDcsMTAg
QEAgRWxlbWVudCogZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHApCiAg
ICAgTm9kZSogbm9kZSA9IHAubm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIAorCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVy
ZXIoKS0+aXNUYWJsZSgpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAg
IAorCiAgICAgcmV0dXJuIG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtMjgx
LDE3ICsyODEsMTcgQEAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdGVy
UG9zaXRpb25JblJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0aW8KICAgICAgICAgcmV0dXJuIGZp
cnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpOwogCiAgICAgUG9zaXRp
b24gcCA9IHBvc2l0aW9uOwotICAgIAorCiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0g
cC5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQogICAgICAgICBpZiAoc2hhZG93QW5jZXN0
b3IgIT0gcC5ub2RlKCkpCiAgICAgICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKLSAgICAKKwogICAgIHdoaWxlIChwLm5vZGUoKSAmJiAh
aXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0
Um9vdCkpCiAgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5ub2RlKCkpID8gcG9zaXRpb25JblBh
cmVudEFmdGVyTm9kZShwLm5vZGUoKSkgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShw
KTsKLSAgICAKKwogICAgIGlmIChwLm5vZGUoKSAmJiBwLm5vZGUoKSAhPSBoaWdoZXN0Um9vdCAm
JiAhcC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOwotICAgIAorCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihw
KTsKIH0KIApAQCAtMzAyLDE3ICszMDIsMTcgQEAgVmlzaWJsZVBvc2l0aW9uIGxhc3RFZGl0YWJs
ZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0aW8KICAg
ICAgICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShoaWdoZXN0Um9vdCk7
CiAKICAgICBQb3NpdGlvbiBwID0gcG9zaXRpb247Ci0gICAgCisKICAgICBpZiAoTm9kZSogc2hh
ZG93QW5jZXN0b3IgPSBwLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpCiAgICAgICAgIGlm
IChzaGFkb3dBbmNlc3RvciAhPSBwLm5vZGUoKSkKICAgICAgICAgICAgIHAgPSBmaXJzdERlZXBF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKLSAgICAKKwogICAgIHdoaWxl
IChwLm5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAubm9kZSgpLT5pc0Rlc2Nl
bmRhbnRPZihoaWdoZXN0Um9vdCkpCiAgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5ub2RlKCkp
ID8gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUocC5ub2RlKCkpIDogcHJldmlvdXNWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKHApOwotICAgIAorCiAgICAgaWYgKHAubm9kZSgpICYmIHAubm9k
ZSgpICE9IGhpZ2hlc3RSb290ICYmICFwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJv
b3QpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgCisKICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKHApOwogfQogCkBAIC0zMjQsOCArMzI0LDggQEAgYm9vbCBpc0Js
b2NrKGNvbnN0IE5vZGUqIG5vZGUpCiB9CiAKIC8vIEZJWE1FOiBEZXBsb3kgdGhpcyBpbiBhbGwg
b2YgdGhlIHBsYWNlcyB3aGVyZSBlbmNsb3NpbmdCbG9ja0Zsb3cvZW5jbG9zaW5nQmxvY2tGbG93
T3JUYWJsZUVsZW1lbnQgYXJlIHVzZWQuCi0vLyBGSVhNRTogUGFzcyBhIHBvc2l0aW9uIHRvIHRo
aXMgZnVuY3Rpb24uICBUaGUgZW5jbG9zaW5nIGJsb2NrIG9mIFt0YWJsZSwgeF0gZm9yIGV4YW1w
bGUsIHNob3VsZCBiZSB0aGUgCi0vLyBibG9jayB0aGF0IGNvbnRhaW5zIHRoZSB0YWJsZSBhbmQg
bm90IHRoZSB0YWJsZSwgYW5kIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZSBvbmx5IG9uZSBy
ZXNwb25zaWJsZSBmb3IgCisvLyBGSVhNRTogUGFzcyBhIHBvc2l0aW9uIHRvIHRoaXMgZnVuY3Rp
b24uICBUaGUgZW5jbG9zaW5nIGJsb2NrIG9mIFt0YWJsZSwgeF0gZm9yIGV4YW1wbGUsIHNob3Vs
ZCBiZSB0aGUKKy8vIGJsb2NrIHRoYXQgY29udGFpbnMgdGhlIHRhYmxlIGFuZCBub3QgdGhlIHRh
YmxlLCBhbmQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdGhlIG9ubHkgb25lIHJlc3BvbnNpYmxl
IGZvcgogLy8ga25vd2luZyBhYm91dCB0aGVzZSBraW5kcyBvZiBzcGVjaWFsIGNhc2VzLgogTm9k
ZSogZW5jbG9zaW5nQmxvY2soTm9kZSogbm9kZSkKIHsKQEAgLTM2MSwxNyArMzYxLDE3IEBAIFBv
c2l0aW9uIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChjb25zdCBQb3NpdGlvbiYgcG9zKQogICAg
ICAgICAvLyB0aGVyZSBpcyBubyBvdGhlciBvcHRpb24gYXQgdGhpcyBwb2ludCB0aGFuIHRvCiAg
ICAgICAgIC8vIHVzZSB0aGUgaGlnaGVzdCBhbGxvd2VkIHBvc2l0aW9uIGluIHRoZSBub2RlCiAg
ICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLCBtYXhDb21wbGlhbnRPZmZzZXQpOwotICAgIH0g
CisgICAgfQogCiAgICAgLy8gRWRpdGluZyBzaG91bGQgbmV2ZXIgZ2VuZXJhdGUgcG9zaXRpb25z
IGxpa2UgdGhpcy4KICAgICBpZiAoKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDwgbWF4
Q29tcGxpYW50T2Zmc2V0KSAmJiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpIHsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBub2RlLT5wYXJlbnROb2Rl
KCkgPyBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKSA6IFBvc2l0aW9uKG5vZGUsIDAp
OwogICAgIH0KLSAgICAKKwogICAgIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA9
PSBtYXhDb21wbGlhbnRPZmZzZXQgJiYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSB8fCBp
c1RhYmxlRWxlbWVudChub2RlKSkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QWZ0
ZXJOb2RlKG5vZGUpOwotICAgIAorCiAgICAgcmV0dXJuIFBvc2l0aW9uKHBvcyk7CiB9CiAKQEAg
LTQxMywxNCArNDEzLDE0IEBAIFN0cmluZyBzdHJpbmdXaXRoUmViYWxhbmNlZFdoaXRlc3BhY2Uo
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgc3RhcnRJc1N0YXJ0T2ZQCiAgICAgcmViYWxhbmNl
ZFN0cmluZy5yZXBsYWNlKG5vQnJlYWtTcGFjZSwgJyAnKTsKICAgICByZWJhbGFuY2VkU3RyaW5n
LnJlcGxhY2UoJ1xuJywgJyAnKTsKICAgICByZWJhbGFuY2VkU3RyaW5nLnJlcGxhY2UoJ1x0Jywg
JyAnKTsKLSAgICAKKwogICAgIHJlYmFsYW5jZWRTdHJpbmcucmVwbGFjZSh0d29TcGFjZXMsIHBh
dHRlcm4pOwotICAgIAorCiAgICAgaWYgKHN0YXJ0SXNTdGFydE9mUGFyYWdyYXBoICYmIHJlYmFs
YW5jZWRTdHJpbmdbMF0gPT0gJyAnKQogICAgICAgICByZWJhbGFuY2VkU3RyaW5nLnJlcGxhY2Uo
MCwgMSwgbmJzcCk7CiAgICAgaW50IGVuZCA9IHJlYmFsYW5jZWRTdHJpbmcubGVuZ3RoKCkgLSAx
OwogICAgIGlmIChlbmRJc0VuZE9mUGFyYWdyYXBoICYmIHJlYmFsYW5jZWRTdHJpbmdbZW5kXSA9
PSAnICcpCi0gICAgICAgIHJlYmFsYW5jZWRTdHJpbmcucmVwbGFjZShlbmQsIDEsIG5ic3ApOyAg
ICAKKyAgICAgICAgcmViYWxhbmNlZFN0cmluZy5yZXBsYWNlKGVuZCwgMSwgbmJzcCk7CiAKICAg
ICByZXR1cm4gcmViYWxhbmNlZFN0cmluZzsKIH0KQEAgLTQ0Miw3ICs0NDIsNyBAQCBib29sIGlz
U3BlY2lhbEVsZW1lbnQoY29uc3QgTm9kZSAqbikKIHsKICAgICBpZiAoIW4pCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBpZiAoIW4tPmlzSFRNTEVsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NTIsNyArNDUyLDcgQEAgYm9vbCBpc1NwZWNpYWxF
bGVtZW50KGNvbnN0IE5vZGUgKm4pCiAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG4tPnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAKKwogICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+ZGlzcGxheSgpID09IFRBQkxFIHx8
IHJlbmRlcmVyLT5zdHlsZSgpLT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIApAQCAtNDYxLDcgKzQ2MSw3IEBAIGJvb2wgaXNTcGVjaWFsRWxlbWVudChj
b25zdCBOb2RlICpuKQogCiAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9
IFN0YXRpY1Bvc2l0aW9uKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTU4MCw3ICs1ODAsNyBAQCBOb2RlKiBpc0ZpcnN0UG9zaXRp
b25BZnRlclRhYmxlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogICAg
IFBvc2l0aW9uIHVwc3RyZWFtKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnVwc3Ry
ZWFtKCkpOwogICAgIGlmICh1cHN0cmVhbS5ub2RlKCkgJiYgdXBzdHJlYW0ubm9kZSgpLT5yZW5k
ZXJlcigpICYmIHVwc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIHVwc3Ry
ZWFtLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKICAgICAgICAgcmV0dXJuIHVwc3Ry
ZWFtLm5vZGUoKTsKLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC01ODksNyArNTg5LDcg
QEAgTm9kZSogaXNMYXN0UG9zaXRpb25CZWZvcmVUYWJsZShjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3NpdGlvbikKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtKHZpc2libGVQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKSk7CiAgICAgaWYgKGRvd25zdHJlYW0ubm9k
ZSgpICYmIGRvd25zdHJlYW0ubm9kZSgpLT5yZW5kZXJlcigpICYmIGRvd25zdHJlYW0ubm9kZSgp
LT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgZG93bnN0cmVhbS5hdEZpcnN0RWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZSgpKQogICAgICAgICByZXR1cm4gZG93bnN0cmVhbS5ub2RlKCk7Ci0gICAgCisK
ICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjY4LDcgKzY2OCw3IEBAIE5vZGUqIGVuY2xvc2luZ05v
ZGVXaXRoVGFnKGNvbnN0IFBvc2l0aW9uJiBwLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
KQogewogICAgIGlmIChwLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCisK
ICAgICBOb2RlKiByb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwKTsKICAgICBmb3IgKE5vZGUq
IG4gPSBwLm5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAocm9v
dCAmJiAhbi0+aXNDb250ZW50RWRpdGFibGUoKSkKQEAgLTY3OCw3ICs2NzgsNyBAQCBOb2RlKiBl
bmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3NpdGlvbiYgcCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSkKICAgICAgICAgaWYgKG4gPT0gcm9vdCkKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC02ODYsNyArNjg2LDcgQEAg
Tm9kZSogZW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbiYgcCwgYm9vbCAoKm5vZGVJ
c09mVHlwZSkoY29uc3QgTm9kZSopLAogewogICAgIGlmIChwLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgCisKICAgICBOb2RlKiByb290ID0gaGlnaGVzdEVkaXRhYmxlUm9v
dChwKTsKICAgICBmb3IgKE5vZGUqIG4gPSBwLm5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUo
KSkgewogICAgICAgICAvLyBEb24ndCByZXR1cm4gYSBub24tZWRpdGFibGUgbm9kZSBpZiB0aGUg
aW5wdXQgcG9zaXRpb24gd2FzIGVkaXRhYmxlLCBzaW5jZQpAQCAtNjk4LDcgKzY5OCw3IEBAIE5v
ZGUqIGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24mIHAsIGJvb2wgKCpub2RlSXNP
ZlR5cGUpKGNvbnN0IE5vZGUqKSwKICAgICAgICAgaWYgKG4gPT0gcm9vdCkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC03MTIsNyAr
NzEyLDcgQEAgTm9kZSogaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24m
IHAsIGJvb2wgKCpub2RlSXNPZlR5cGUpKGNvbnN0IE4KICAgICAgICAgaWYgKG4gPT0gcm9vdCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBoaWdoZXN0Owog
fQogCkBAIC03MjUsNyArNzI1LDcgQEAgTm9kZSogZW5jbG9zaW5nQW5jaG9yRWxlbWVudChjb25z
dCBQb3NpdGlvbiYgcCkKIHsKICAgICBpZiAocC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgCisKICAgICBOb2RlKiBub2RlID0gcC5ub2RlKCk7CiAgICAgd2hpbGUgKG5vZGUgJiYg
IShub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgbm9kZS0+aXNMaW5rKCkpKQogICAgICAgICBub2Rl
ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwpAQCAtNzM2LDE2ICs3MzYsMTYgQEAgSFRNTEVsZW1lbnQq
IGVuY2xvc2luZ0xpc3QoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAKKwogICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290
KFBvc2l0aW9uKG5vZGUsIDApKTsKLSAgICAKKwogICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPnBh
cmVudE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAobi0+aGFz
VGFnTmFtZSh1bFRhZykgfHwgbi0+aGFzVGFnTmFtZShvbFRhZykpCiAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKTsKICAgICAgICAgaWYgKG4gPT0gcm9vdCkK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiAwOwogfQog
CkBAIC03NTYsNyArNzU2LDcgQEAgSFRNTEVsZW1lbnQqIGVuY2xvc2luZ0xpc3RDaGlsZChOb2Rl
ICpub2RlKQogICAgIC8vIENoZWNrIGZvciBhIGxpc3QgaXRlbSBlbGVtZW50LCBvciBmb3IgYSBu
b2RlIHdob3NlIHBhcmVudCBpcyBhIGxpc3QgZWxlbWVudC4gIFN1Y2ggYSBub2RlCiAgICAgLy8g
d2lsbCBhcHBlYXIgdmlzdWFsbHkgYXMgYSBsaXN0IGl0ZW0gKGJ1dCB3aXRob3V0IGEgbGlzdCBt
YXJrZXIpCiAgICAgTm9kZSogcm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoUG9zaXRpb24obm9k
ZSwgMCkpOwotICAgIAorCiAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgaW5hcHByb3By
aWF0ZWx5IG5hbWVkIGlmIGl0IHN0YXJ0cyB3aXRoIG5vZGUgaW5zdGVhZCBvZiBub2RlLT5wYXJl
bnROb2RlKCkKICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYmIG4tPnBhcmVudE5vZGUoKTsg
biA9IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShsaVRhZykg
fHwgaXNMaXN0RWxlbWVudChuLT5wYXJlbnROb2RlKCkpKQpAQCAtNzY0LDcgKzc2NCw3IEBAIEhU
TUxFbGVtZW50KiBlbmNsb3NpbmdMaXN0Q2hpbGQoTm9kZSAqbm9kZSkKICAgICAgICAgaWYgKG4g
PT0gcm9vdCB8fCBpc1RhYmxlQ2VsbChuKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0K
LSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC03NzUsNyArNzc1LDcgQEAgc3RhdGljIEhU
TUxFbGVtZW50KiBlbWJlZGRlZFN1Ymxpc3QoTm9kZSogbGlzdEl0ZW0pCiAgICAgICAgIGlmIChp
c0xpc3RFbGVtZW50KG4pKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4obik7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTc4OCw3ICs3
ODgsNyBAQCBzdGF0aWMgTm9kZSogYXBwZW5kZWRTdWJsaXN0KE5vZGUqIGxpc3RJdGVtKQogICAg
ICAgICBpZiAoaXNMaXN0SXRlbShsaXN0SXRlbSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICB9Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtODA1LDEwICs4MDUsMTAgQEAgTm9k
ZSogZW5jbG9zaW5nRW1wdHlMaXN0SXRlbShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3MpCiAKICAgICBpZiAoZmlyc3RJbkxpc3RDaGlsZCAhPSB2aXNpYmxlUG9zIHx8IGxhc3RJbkxp
c3RDaGlsZCAhPSB2aXNpYmxlUG9zKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIGlm
IChlbWJlZGRlZFN1Ymxpc3QobGlzdENoaWxkTm9kZSkgfHwgYXBwZW5kZWRTdWJsaXN0KGxpc3RD
aGlsZE5vZGUpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCisKICAgICByZXR1cm4gbGlz
dENoaWxkTm9kZTsKIH0KIApAQCAtODU4LDEzICs4NTgsMTMgQEAgYm9vbCBpc1RhYmxlQ2VsbChj
b25zdCBOb2RlKiBub2RlKQogICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyKQogICAgICAgICByZXR1cm4gbm9kZS0+aGFzVGFnTmFtZSh0ZFRhZykgfHwg
bm9kZS0+aGFzVGFnTmFtZSh0aFRhZyk7Ci0gICAgCisKICAgICByZXR1cm4gci0+aXNUYWJsZUNl
bGwoKTsKIH0KIAogYm9vbCBpc0VtcHR5VGFibGVDZWxsKGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0g
ICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiAobm9kZS0+cmVuZGVyZXIoKS0+
aXNUYWJsZUNlbGwoKSB8fCAobm9kZS0+cmVuZGVyZXIoKS0+aXNCUigpICYmIG5vZGUtPnBhcmVu
dE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBub2RlLT5wYXJlbnROb2RlKCktPnJlbmRlcmVyKCktPmlz
VGFibGVDZWxsKCkpKTsgICAgIAorICAgIHJldHVybiBub2RlICYmIG5vZGUtPnJlbmRlcmVyKCkg
JiYgKG5vZGUtPnJlbmRlcmVyKCktPmlzVGFibGVDZWxsKCkgfHwgKG5vZGUtPnJlbmRlcmVyKCkt
PmlzQlIoKSAmJiBub2RlLT5wYXJlbnROb2RlKCktPnJlbmRlcmVyKCkgJiYgbm9kZS0+cGFyZW50
Tm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlQ2VsbCgpKSk7CiB9CiAKIFBhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IGNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50KERvY3VtZW50KiBkb2N1bWVu
dCkKQEAgLTkyNiw3ICs5MjYsNyBAQCBib29sIGlzTm9kZUluVGV4dEZvcm1Db250cm9sKE5vZGUq
IG5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gYW5jZXN0b3ItPmlzRWxl
bWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oYW5jZXN0b3IpLT5pc1RleHRGb3Jt
Q29udHJvbCgpOwogfQotICAgIAorCiBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVRhYlNwYW4oY29u
c3QgUG9zaXRpb24mIHBvcykKIHsKICAgICBOb2RlICpub2RlID0gcG9zLm5vZGUoKTsKQEAgLTkz
NCw3ICs5MzQsNyBAQCBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVRhYlNwYW4oY29uc3QgUG9zaXRp
b24mIHBvcykKICAgICAgICAgbm9kZSA9IHRhYlNwYW5Ob2RlKG5vZGUpOwogICAgIGVsc2UgaWYg
KCFpc1RhYlNwYW5Ob2RlKG5vZGUpKQogICAgICAgICByZXR1cm4gcG9zOwotICAgIAorCiAgICAg
cmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG5vZGUpOwogfQogCkBAIC05OTMsNyAr
OTkzLDcgQEAgdW5zaWduZWQgbnVtRW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVzKGNvbnN0IFBvc2l0
aW9uJiBwKQogICAgIGZvciAoTm9kZSogbiA9IHAubm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9k
ZSgpKQogICAgICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShuKSkKICAgICAgICAgICAgIG51bSsr
OwotICAgIAorCiAgICAgcmV0dXJuIG51bTsKIH0KIApAQCAtMTAwMSw3ICsxMDAxLDcgQEAgYm9v
bCBpc01haWxCbG9ja3F1b3RlKGNvbnN0IE5vZGUgKm5vZGUpCiB7CiAgICAgaWYgKCFub2RlIHx8
ICFub2RlLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIAorCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQgKj4obm9k
ZSktPmdldEF0dHJpYnV0ZSgidHlwZSIpID09ICJjaXRlIjsKIH0KIApAQCAtMTAxMiw3ICsxMDEy
LDcgQEAgaW50IGNhcmV0TWluT2Zmc2V0KGNvbnN0IE5vZGUqIG4pCiAgICAgcmV0dXJuIHIgPyBy
LT5jYXJldE1pbk9mZnNldCgpIDogMDsKIH0KIAotLy8gSWYgYSBub2RlIGNhbiBjb250YWluIGNh
bmRpZGF0ZXMgZm9yIFZpc2libGVQb3NpdGlvbnMsIHJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBs
YXN0IGNhbmRpZGF0ZSwgb3RoZXJ3aXNlIAorLy8gSWYgYSBub2RlIGNhbiBjb250YWluIGNhbmRp
ZGF0ZXMgZm9yIFZpc2libGVQb3NpdGlvbnMsIHJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBsYXN0
IGNhbmRpZGF0ZSwgb3RoZXJ3aXNlCiAvLyByZXR1cm4gdGhlIG51bWJlciBvZiBjaGlsZHJlbiBm
b3IgY29udGFpbmVyIG5vZGVzIGFuZCB0aGUgbGVuZ3RoIGZvciB1bnJlbmRlcmVkIHRleHQgbm9k
ZXMuCiBpbnQgY2FyZXRNYXhPZmZzZXQoY29uc3QgTm9kZSogbikKIHsKQEAgLTEwMzIsMTMgKzEw
MzIsMTMgQEAgYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbikKIHsKICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKKwogICAgIGlmIChwb3NpdGlvbi5hbmNob3JOb2RlKCktPmhhc1RhZ05hbWUo
YnJUYWcpICYmIHBvc2l0aW9uLmF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgaWYgKCFwb3NpdGlvbi5hbmNob3JOb2RlKCkt
PmlzVGV4dE5vZGUoKSB8fCAhcG9zaXRpb24uYW5jaG9yTm9kZSgpLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAg
ICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zaXRpb24uYW5jaG9yTm9k
ZSgpKTsKICAgICB1bnNpZ25lZCBvZmZzZXQgPSBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKTsKICAgICByZXR1cm4gb2Zmc2V0IDwgdGV4dE5vZGUtPmxlbmd0aCgpICYmIHRleHROb2Rl
LT5kYXRhKClbb2Zmc2V0XSA9PSAnXG4nOwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVyYXRpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgb3JpZ2luYWwKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihvcmlnaW5h
bCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZWxlY3Rpb24obmV3U2VsZWN0aW9uLnZp
c2libGVTdGFydCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTZWxlY3Rpb24obmV3U2Vs
ZWN0aW9uLnZpc2libGVFbmQoKSk7Ci0gICAgCisKICAgICAvLyBJZiB0aGUgZW5kIG9mIHRoZSBz
ZWxlY3Rpb24gdG8gbW9kaWZ5IGlzIGp1c3QgYWZ0ZXIgYSB0YWJsZSwgYW5kCiAgICAgLy8gaWYg
dGhlIHN0YXJ0IG9mIHRoZSBzZWxlY3Rpb24gaXMgaW5zaWRlIHRoYXQgdGFibGUsIHRoZW4gdGhl
IGxhc3QgcGFyYWdyYXBoCiAgICAgLy8gdGhhdCB3ZSdsbCB3YW50IG1vZGlmeSBpcyB0aGUgbGFz
dCBvbmUgaW5zaWRlIHRoZSB0YWJsZSwgbm90IHRoZSB0YWJsZSBpdHNlbGYKQEAgLTEwNjAsNyAr
MTA2MCw3IEBAIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXRlcmF0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9yaWdpbmFsCiAgICAgaWYgKE5vZGUqIHRhYmxlID0g
aXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShlbmRPZlNlbGVjdGlvbikpCiAgICAgICAgIGlmIChz
dGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZih0
YWJsZSkpCiAgICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0
T2ZTZWxlY3Rpb24sIGVuZE9mU2VsZWN0aW9uLnByZXZpb3VzKHRydWUpKTsKLSAgICAKKwogICAg
IC8vIElmIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uIHRvIG1vZGlmeSBpcyBqdXN0IGJlZm9y
ZSBhIHRhYmxlLAogICAgIC8vIGFuZCBpZiB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gaXMgaW5z
aWRlIHRoYXQgdGFibGUsIHRoZW4gdGhlIGZpcnN0IHBhcmFncmFwaAogICAgIC8vIHdlJ2xsIHdh
bnQgdG8gbW9kaWZ5IGlzIHRoZSBmaXJzdCBvbmUgaW5zaWRlIHRoZSB0YWJsZSwgbm90IHRoZSBw
YXJhZ3JhcGgKQEAgLTEwNjgsNyArMTA2OCw3IEBAIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
Rm9yUGFyYWdyYXBoSXRlcmF0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9yaWdpbmFsCiAg
ICAgaWYgKE5vZGUqIHRhYmxlID0gaXNMYXN0UG9zaXRpb25CZWZvcmVUYWJsZShzdGFydE9mU2Vs
ZWN0aW9uKSkKICAgICAgICAgaWYgKGVuZE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9k
ZSgpLT5pc0Rlc2NlbmRhbnRPZih0YWJsZSkpCiAgICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBW
aXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZWxlY3Rpb24ubmV4dCh0cnVlKSwgZW5kT2ZTZWxlY3Rp
b24pOwotICAgIAorCiAgICAgcmV0dXJuIG5ld1NlbGVjdGlvbjsKIH0KIApAQCAtMTE0OCwyMyAr
MTE0OCwyMyBAQCBWaXNpYmxlU2VsZWN0aW9uIGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5vZGUoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBObwogewogICAgIGlmIChzZWxlY3Rpb24u
aXNOb25lKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0g
ICAgICAgIAorCiAgICAgVmlzaWJsZVNlbGVjdGlvbiB1cGRhdGVkU2VsZWN0aW9uKHNlbGVjdGlv
bik7CiAgICAgTm9kZSogYmFzZSA9IHNlbGVjdGlvbi5iYXNlKCkubm9kZSgpOwogICAgIE5vZGUq
IGV4dGVudCA9IHNlbGVjdGlvbi5leHRlbnQoKS5ub2RlKCk7CiAgICAgQVNTRVJUKGJhc2UpOwog
ICAgIEFTU0VSVChleHRlbnQpOwotICAgIAorCiAgICAgaWYgKGJhc2UgPT0gbm9kZSB8fCBiYXNl
LT5pc0Rlc2NlbmRhbnRPZihub2RlKSkgewogICAgICAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9k
ZSgpKTsKICAgICAgICAgdXBkYXRlZFNlbGVjdGlvbi5zZXRCYXNlKFBvc2l0aW9uKG5vZGUtPnBh
cmVudE5vZGUoKSwgbm9kZS0+bm9kZUluZGV4KCkpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAo
ZXh0ZW50ID09IG5vZGUgfHwgZXh0ZW50LT5pc0Rlc2NlbmRhbnRPZihub2RlKSkgewogICAgICAg
ICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpKTsKICAgICAgICAgdXBkYXRlZFNlbGVjdGlvbi5z
ZXRFeHRlbnQoUG9zaXRpb24obm9kZS0+cGFyZW50Tm9kZSgpLCBub2RlLT5ub2RlSW5kZXgoKSkp
OwogICAgIH0KLSAgICAgICAgCisKICAgICByZXR1cm4gdXBkYXRlZFNlbGVjdGlvbjsKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCmluZGV4IDBhODNkZGQuLjBmMjJjMmYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0U3BhY2VBZGQoaW50IGFkZCkgeyBtX3dpZHRoIC09IG1fdG9BZGQ7IG1fdG9BZGQgPSBhZGQ7
IG1fd2lkdGggKz0gbV90b0FkZDsgfQogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc0lu
bGluZVRleHRCb3goKSB7IHJldHVybiB0cnVlOyB9ICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0lu
bGluZVRleHRCb3goKSB7IHJldHVybiB0cnVlOyB9CiAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGlu
dCBjYXJldE1pbk9mZnNldCgpIGNvbnN0Owo=
</data>
<flag name="review"
          id="33412"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50314</attachid>
            <date>2010-03-09 09:11:28 -0800</date>
            <delta_ts>2010-03-09 11:28:11 -0800</delta_ts>
            <desc>[PATCH] Style + nits fixed</desc>
            <filename>optimizecaret.patch</filename>
            <type>text/plain</type>
            <size>41604</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWMyZWYzOS4uMzEyYWQ3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAxMC0wMy0wOSAgQWxleGFuZGVyIFBh
dmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcHJvdmUgY2FyZXQgcG9zaXRpb24gY29tcHV0YXRpb24g
cGVyZm9ybWFuY2UgYnkgY2hlY2tpbmcgZmFzdGVzdCBjb25kaXRpb25zIGZpcnN0CisKKyAgICAg
ICAgV2ViIEluc3BlY3RvciBmcmVlemVzIG9uIGV4cGFuZGluZyBsYXJnZS9jb21wbGV4IERPTSB0
cmVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg0
NTIKKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6cHJldmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Om5leHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmF0RWRpdGluZ0JvdW5kYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uOjpyZW5kZXJlZE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6bmV4dENoYXJhY3RlclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZHNPZk5v
ZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xv
c2luZ1Zpc3VhbEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3RyZWFtZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnVwc3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
c2l0aW9uOjpkb3duc3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjppc0NhbmRp
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6aW5SZW5kZXJlZFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpQb3NpdGlvbjo6aXNSZW5kZXJlZENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9z
aXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
c2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRp
b246OmZvcm1hdEZvckRlYnVnZ2VyKToKKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSk6Cisg
ICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5I
YXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RFZGl0YWJs
ZVJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6bG93ZXN0RWRpdGFibGVBbmNlc3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjppc0VkaXRhYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aXNS
aWNobHlFZGl0YWJsZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVkaXRhYmxlUm9vdEZv
clBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdGVy
UG9zaXRpb25JblJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6bGFzdEVkaXRhYmxlUG9zaXRpb25C
ZWZvcmVQb3NpdGlvbkluUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpyYW5nZUNvbXBsaWFudEVx
dWl2YWxlbnQpOgorICAgICAgICAoV2ViQ29yZTo6c3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3BlY2lhbEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjppc0xh
c3RQb3NpdGlvbkJlZm9yZVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVX
aXRoVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ05vZGVPZlR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6aGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jbG9zaW5nQW5jaG9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0xpc3RDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjplbWJlZGRlZFN1Ymxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kZWRTdWJs
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0VtcHR5TGlzdEl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6aXNUYWJsZUNlbGwpOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eVRhYmxl
Q2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkJlZm9yZVRhYlNwYW4pOgorICAgICAg
ICAoV2ViQ29yZTo6bnVtRW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzTWFpbEJsb2NrcXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6bGluZUJyZWFrRXhpc3Rz
QXRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdGVy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6YXZvaWRJbnRlcnNlY3Rpb25XaXRoTm9kZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OmlzSW5saW5lVGV4dEJveCk6CisKIDIwMTAtMDMtMDkgIFBoaWxpcHBlIE5v
cm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rh
dm8gTm9yb25oYSBTaWx2YS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBi
L1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAppbmRleCBlZjBiM2MxLi5hZjg2OTU0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2lu
Y2x1ZGUgInZpc2libGVfdW5pdHMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgotICAKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtMjE0LDcgKzIx
NCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91cyhQb3NpdGlvbk1vdmVUeXBlIG1vdmVU
eXBlKSBjb25zdAogICAgIE5vZGUqIG4gPSBub2RlKCk7CiAgICAgaWYgKCFuKQogICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgCisKICAgICBpbnQgbyA9IG1fb2Zmc2V0OwogICAgIC8vIEZJWE1F
OiBOZWdhdGl2ZSBvZmZzZXRzIHNob3VsZG4ndCBiZSBhbGxvd2VkLiBXZSBzaG91bGQgY2F0Y2gg
dGhpcyBlYXJsaWVyLgogICAgIEFTU0VSVChvID49IDApOwpAQCAtMjUzLDcgKzI1Myw3IEBAIFBv
c2l0aW9uIFBvc2l0aW9uOjpuZXh0KFBvc2l0aW9uTW92ZVR5cGUgbW92ZVR5cGUpIGNvbnN0CiAg
ICAgTm9kZSogbiA9IG5vZGUoKTsKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiAqdGhpczsK
LSAgICAKKwogICAgIGludCBvID0gbV9vZmZzZXQ7CiAgICAgLy8gRklYTUU6IE5lZ2F0aXZlIG9m
ZnNldHMgc2hvdWxkbid0IGJlIGFsbG93ZWQuIFdlIHNob3VsZCBjYXRjaCB0aGlzIGVhcmxpZXIu
CiAgICAgQVNTRVJUKG8gPj0gMCk7CkBAIC0zMTksMTEgKzMxOSwxMSBAQCBib29sIFBvc2l0aW9u
OjphdEVkaXRpbmdCb3VuZGFyeSgpIGNvbnN0CiAgICAgUG9zaXRpb24gbmV4dFBvc2l0aW9uID0g
ZG93bnN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgaWYgKGF0Rmlyc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0
UG9zaXRpb24ubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgCisKICAgICBQb3NpdGlvbiBwcmV2UG9zaXRpb24gPSB1cHN0cmVhbShDYW5D
cm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgaWYgKGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5ub2RlKCkt
PmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKKwog
ICAgIHJldHVybiBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIW5leHRQb3NpdGlvbi5ub2Rl
KCktPmlzQ29udGVudEVkaXRhYmxlKCkKICAgICAgICAgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVs
bCgpICYmICFwcmV2UG9zaXRpb24ubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQpAQCAt
MzQ2LDEwICszNDYsMTAgQEAgaW50IFBvc2l0aW9uOjpyZW5kZXJlZE9mZnNldCgpIGNvbnN0CiB7
CiAgICAgaWYgKCFub2RlKCktPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0
OwotICAgCisKICAgICBpZiAoIW5vZGUoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgIGludCByZXN1bHQgPSAwOwogICAg
IFJlbmRlclRleHQgKnRleHRSZW5kZXJlciA9IHRvUmVuZGVyVGV4dChub2RlKCktPnJlbmRlcmVy
KCkpOwogICAgIGZvciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRl
eHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKQEAgLTM3Niw3ICszNzYs
NyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5p
dHkgYWZmaW5pdHkpIGNvbnN0CiAKICAgICBib29sIGF0U3RhcnRPZkxpbmUgPSBpc1N0YXJ0T2ZM
aW5lKFZpc2libGVQb3NpdGlvbigqdGhpcywgYWZmaW5pdHkpKTsKICAgICBib29sIHJlbmRlcmVk
ID0gaXNDYW5kaWRhdGUoKTsKLSAgICAKKwogICAgIFBvc2l0aW9uIGN1cnJlbnRQb3MgPSAqdGhp
czsKICAgICB3aGlsZSAoIWN1cnJlbnRQb3MuYXRTdGFydE9mVHJlZSgpKSB7CiAgICAgICAgIGN1
cnJlbnRQb3MgPSBjdXJyZW50UG9zLnByZXZpb3VzKCk7CkBAIC0zOTAsNyArMzkwLDcgQEAgUG9z
aXRpb24gUG9zaXRpb246OnByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oRUFmZmluaXR5IGFmZmlu
aXR5KSBjb25zdAogICAgICAgICB9IGVsc2UgaWYgKHJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW9u
KGN1cnJlbnRQb3MpKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7CiAgICAgfQotICAg
IAorCiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00MDQsNyArNDA0LDcgQEAgUG9zaXRpb24g
UG9zaXRpb246Om5leHRDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5pdHkgYWZmaW5pdHkpIGNvbnN0
CiAKICAgICBib29sIGF0RW5kT2ZMaW5lID0gaXNFbmRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKCp0
aGlzLCBhZmZpbml0eSkpOwogICAgIGJvb2wgcmVuZGVyZWQgPSBpc0NhbmRpZGF0ZSgpOwotICAg
IAorCiAgICAgUG9zaXRpb24gY3VycmVudFBvcyA9ICp0aGlzOwogICAgIHdoaWxlICghY3VycmVu
dFBvcy5hdEVuZE9mVHJlZSgpKSB7CiAgICAgICAgIGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLm5l
eHQoKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dENoYXJhY3Rl
clBvc2l0aW9uKEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3QKICAgICAgICAgfSBlbHNlIGlmIChy
ZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjdXJyZW50UG9zKSkKICAgICAgICAgICAgIHJldHVy
biBjdXJyZW50UG9zOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAt
NDMwLDE0ICs0MzAsMTQgQEAgc3RhdGljIGJvb2wgZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGlu
Y3RQb3NpdGlvbnMoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBpZiAoIW5vZGUt
PnJlbmRlcmVyKCktPmlzSW5saW5lKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAK
KwogICAgIC8vIERvbid0IGluY2x1ZGUgaW5saW5lIHRhYmxlcy4KICAgICBpZiAobm9kZS0+aGFz
VGFnTmFtZSh0YWJsZVRhZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIC8v
IFRoZXJlIGlzIGEgVmlzaWJsZVBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBpbmxpbmUtYmxvY2sg
Y29udGFpbmVyLgogICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkgJiYg
Y2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhub2RlKSAmJiB0b1JlbmRlckJveChub2RlLT5yZW5k
ZXJlcigpKS0+aGVpZ2h0KCkgIT0gMCAmJiAhbm9kZS0+Zmlyc3RDaGlsZCgpOwogfQpAQCAtNDQ2
LDcgKzQ0Niw3IEBAIHN0YXRpYyBOb2RlKiBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShOb2RlKiBu
b2RlKQogewogICAgIHdoaWxlIChub2RlICYmICFlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5j
dFBvc2l0aW9ucyhub2RlKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAg
ICAgICAgCisKICAgICByZXR1cm4gbm9kZTsKIH0KIApAQCAtNDU2LDE2ICs0NTYsMTYgQEAgc3Rh
dGljIGJvb2wgaXNTdHJlYW1lcihjb25zdCBQb3NpdGlvbkl0ZXJhdG9yJiBwb3MpCiB7CiAgICAg
aWYgKCFwb3Mubm9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCisKICAgICBp
ZiAoaXNBdG9taWNOb2RlKHBvcy5ub2RlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgCisKICAgICByZXR1cm4gcG9zLmF0U3RhcnRPZk5vZGUoKTsKIH0KIAogLy8gVGhpcyBmdW5j
dGlvbiBhbmQgZG93bnN0cmVhbSgpIGFyZSB1c2VkIGZvciBtb3ZpbmcgYmFjayBhbmQgZm9ydGgg
YmV0d2VlbiB2aXN1YWxseSBlcXVpdmFsZW50IGNhbmRpZGF0ZXMuCi0vLyBGb3IgZXhhbXBsZSwg
Zm9yIHRoZSB0ZXh0IG5vZGUgImZvbyAgICAgYmFyIiB3aGVyZSB3aGl0ZXNwYWNlIGlzIGNvbGxh
cHNpYmxlLCB0aGVyZSBhcmUgdHdvIGNhbmRpZGF0ZXMgCi0vLyB0aGF0IG1hcCB0byB0aGUgVmlz
aWJsZVBvc2l0aW9uIGJldHdlZW4gJ2InIGFuZCB0aGUgc3BhY2UuICBUaGlzIGZ1bmN0aW9uIHdp
bGwgcmV0dXJuIHRoZSBsZWZ0IGNhbmRpZGF0ZSAKKy8vIEZvciBleGFtcGxlLCBmb3IgdGhlIHRl
eHQgbm9kZSAiZm9vICAgICBiYXIiIHdoZXJlIHdoaXRlc3BhY2UgaXMgY29sbGFwc2libGUsIHRo
ZXJlIGFyZSB0d28gY2FuZGlkYXRlcworLy8gdGhhdCBtYXAgdG8gdGhlIFZpc2libGVQb3NpdGlv
biBiZXR3ZWVuICdiJyBhbmQgdGhlIHNwYWNlLiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0
aGUgbGVmdCBjYW5kaWRhdGUKIC8vIGFuZCBkb3duc3RyZWFtKCkgd2lsbCByZXR1cm4gdGhlIHJp
Z2h0IG9uZS4KIC8vIEFsc28sIHVwc3RyZWFtKCkgd2lsbCByZXR1cm4gW2JvdW5kYXJ5LCAwXSBm
b3IgYW55IG9mIHRoZSBwb3NpdGlvbnMgZnJvbSBbYm91bmRhcnksIDBdIHRvIHRoZSBmaXJzdCBj
YW5kaWRhdGUKIC8vIGluIGJvdW5kYXJ5LCB3aGVyZSBlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0
aW5jdFBvc2l0aW9ucyhib3VuZGFyeSkgaXMgdHJ1ZS4KQEAgLTQ3NCw3ICs0NzQsNyBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUp
IGNvbnN0CiAgICAgTm9kZSogc3RhcnROb2RlID0gbm9kZSgpOwogICAgIGlmICghc3RhcnROb2Rl
KQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKLSAgICAKKwogICAgIC8vIGl0ZXJhdGUgYmFj
a3dhcmQgZnJvbSB0aGVyZSwgbG9va2luZyBmb3IgYSBxdWFsaWZpZWQgcG9zaXRpb24KICAgICBO
b2RlKiBib3VuZGFyeSA9IGVuY2xvc2luZ1Zpc3VhbEJvdW5kYXJ5KHN0YXJ0Tm9kZSk7CiAgICAg
UG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9ICp0aGlzOwpAQCAtNDg0LDcgKzQ4NCw3IEBA
IFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUg
cnVsZSkgY29uc3QKICAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwogICAgIGZvciAo
OyAhY3VycmVudFBvcy5hdFN0YXJ0KCk7IGN1cnJlbnRQb3MuZGVjcmVtZW50KCkpIHsKICAgICAg
ICAgTm9kZSogY3VycmVudE5vZGUgPSBjdXJyZW50UG9zLm5vZGUoKTsKLSAgICAgICAgCisKICAg
ICAgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIGFuIGVkaXRhYmlsaXR5IGNoYW5nZSBpZiB3ZSBoYXZl
bid0IG1vdmVkIHRvIGEgZGlmZmVyZW50IG5vZGUsCiAgICAgICAgIC8vIHRvIGF2b2lkIHRoZSBl
eHBlbnNlIG9mIGNvbXB1dGluZyBpc0NvbnRlbnRFZGl0YWJsZSgpLgogICAgICAgICBpZiAoY3Vy
cmVudE5vZGUgIT0gbGFzdE5vZGUpIHsKQEAgLTQ5OCw3ICs0OTgsNyBAQCBQb3NpdGlvbiBQb3Np
dGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAg
ICAgICAgICAgICBsYXN0Tm9kZSA9IGN1cnJlbnROb2RlOwogICAgICAgICB9CiAKLSAgICAgICAg
Ly8gSWYgd2UndmUgbW92ZWQgdG8gYSBwb3NpdGlvbiB0aGF0IGlzIHZpc3VhbGx5IGRpc3RpbmN0
LCByZXR1cm4gdGhlIGxhc3Qgc2F2ZWQgcG9zaXRpb24uIFRoZXJlIAorICAgICAgICAvLyBJZiB3
ZSd2ZSBtb3ZlZCB0byBhIHBvc2l0aW9uIHRoYXQgaXMgdmlzdWFsbHkgZGlzdGluY3QsIHJldHVy
biB0aGUgbGFzdCBzYXZlZCBwb3NpdGlvbi4gVGhlcmUKICAgICAgICAgLy8gaXMgY29kZSBiZWxv
dyB0aGF0IHRlcm1pbmF0ZXMgZWFybHkgaWYgd2UncmUgKmFib3V0KiB0byBtb3ZlIHRvIGEgdmlz
dWFsbHkgZGlzdGluY3QgcG9zaXRpb24uCiAgICAgICAgIGlmIChlbmRzT2ZOb2RlQXJlVmlzdWFs
bHlEaXN0aW5jdFBvc2l0aW9ucyhjdXJyZW50Tm9kZSkgJiYgY3VycmVudE5vZGUgIT0gYm91bmRh
cnkpCiAgICAgICAgICAgICByZXR1cm4gbGFzdFZpc2libGU7CkBAIC01MDcsMTcgKzUwNywxNyBA
QCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxl
IHJ1bGUpIGNvbnN0CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Tm9k
ZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUo
KS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICAgCisKICAgICAgICAgaWYgKHJ1bGUgPT0gQ2FuQ3Jvc3NFZGl0aW5nQm91bmRh
cnkgJiYgYm91bmRhcnlDcm9zc2VkKSB7CiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJl
bnRQb3M7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAg
ICAvLyB0cmFjayBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KICAgICAgICAgaWYgKGlz
U3RyZWFtZXIoY3VycmVudFBvcykpCiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQ
b3M7Ci0gICAgICAgIAotICAgICAgICAvLyBEb24ndCBtb3ZlIHBhc3QgYSBwb3NpdGlvbiB0aGF0
IGlzIHZpc3VhbGx5IGRpc3RpbmN0LiAgV2UgY291bGQgcmVseSBvbiBjb2RlIGFib3ZlIHRvIHRl
cm1pbmF0ZSBhbmQgCisKKyAgICAgICAgLy8gRG9uJ3QgbW92ZSBwYXN0IGEgcG9zaXRpb24gdGhh
dCBpcyB2aXN1YWxseSBkaXN0aW5jdC4gIFdlIGNvdWxkIHJlbHkgb24gY29kZSBhYm92ZSB0byB0
ZXJtaW5hdGUgYW5kCiAgICAgICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUgbmV4dCBp
dGVyYXRpb24sIGJ1dCB3ZSB0ZXJtaW5hdGUgZWFybHkgdG8gYXZvaWQgZG9pbmcgYSBub2RlSW5k
ZXgoKSBjYWxsLgogICAgICAgICBpZiAoZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3Np
dGlvbnMoY3VycmVudE5vZGUpICYmIGN1cnJlbnRQb3MuYXRTdGFydE9mTm9kZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwpAQCAtNTg1LDggKzU4NSw4IEBAIFBvc2l0aW9uIFBv
c2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QK
IH0KIAogLy8gVGhpcyBmdW5jdGlvbiBhbmQgdXBzdHJlYW0oKSBhcmUgdXNlZCBmb3IgbW92aW5n
IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdmlzdWFsbHkgZXF1aXZhbGVudCBjYW5kaWRhdGVzLgot
Ly8gRm9yIGV4YW1wbGUsIGZvciB0aGUgdGV4dCBub2RlICJmb28gICAgIGJhciIgd2hlcmUgd2hp
dGVzcGFjZSBpcyBjb2xsYXBzaWJsZSwgdGhlcmUgYXJlIHR3byBjYW5kaWRhdGVzIAotLy8gdGhh
dCBtYXAgdG8gdGhlIFZpc2libGVQb3NpdGlvbiBiZXR3ZWVuICdiJyBhbmQgdGhlIHNwYWNlLiAg
VGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgcmlnaHQgY2FuZGlkYXRlIAorLy8gRm9yIGV4
YW1wbGUsIGZvciB0aGUgdGV4dCBub2RlICJmb28gICAgIGJhciIgd2hlcmUgd2hpdGVzcGFjZSBp
cyBjb2xsYXBzaWJsZSwgdGhlcmUgYXJlIHR3byBjYW5kaWRhdGVzCisvLyB0aGF0IG1hcCB0byB0
aGUgVmlzaWJsZVBvc2l0aW9uIGJldHdlZW4gJ2InIGFuZCB0aGUgc3BhY2UuICBUaGlzIGZ1bmN0
aW9uIHdpbGwgcmV0dXJuIHRoZSByaWdodCBjYW5kaWRhdGUKIC8vIGFuZCB1cHN0cmVhbSgpIHdp
bGwgcmV0dXJuIHRoZSBsZWZ0IG9uZS4KIC8vIEFsc28sIGRvd25zdHJlYW0oKSB3aWxsIHJldHVy
biB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgbGFzdCBhdG9taWMgbm9kZSBpbiBib3VuZGFyeSBm
b3IgYWxsIG9mIHRoZSBwb3NpdGlvbnMKIC8vIGluIGJvdW5kYXJ5IGFmdGVyIHRoZSBsYXN0IGNh
bmRpZGF0ZSwgd2hlcmUgZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoYm91
bmRhcnkpLgpAQCAtNjAzLDkgKzYwMyw5IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFt
KEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogICAgIGJvb2wgc3RhcnRF
ZGl0YWJsZSA9IHN0YXJ0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKICAgICBOb2RlKiBsYXN0
Tm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNlOwotICAg
IGZvciAoOyAhY3VycmVudFBvcy5hdEVuZCgpOyBjdXJyZW50UG9zLmluY3JlbWVudCgpKSB7ICAg
CisgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0RW5kKCk7IGN1cnJlbnRQb3MuaW5jcmVtZW50KCkp
IHsKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSBjdXJyZW50UG9zLm5vZGUoKTsKLSAgICAg
ICAgCisKICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIGFuIGVkaXRhYmlsaXR5IGNoYW5nZSBp
ZiB3ZSBoYXZlbid0IG1vdmVkIHRvIGEgZGlmZmVyZW50IG5vZGUsCiAgICAgICAgIC8vIHRvIGF2
b2lkIHRoZSBleHBlbnNlIG9mIGNvbXB1dGluZyBpc0NvbnRlbnRFZGl0YWJsZSgpLgogICAgICAg
ICBpZiAoY3VycmVudE5vZGUgIT0gbGFzdE5vZGUpIHsKQEAgLTYxNiw3ICs2MTYsNyBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVs
ZSkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgYm91
bmRhcnlDcm9zc2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgbGFzdE5vZGUgPSBjdXJyZW50Tm9kZTsKICAgICAgICAgfQogCkBAIC02MjQs
NyArNjI0LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5
Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAgICAgICAgIC8vIHJldHVybiB0aGUgbGFzdCB2aXNp
YmxlIHN0cmVhbWVyIHBvc2l0aW9uCiAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+aGFzVGFnTmFt
ZShib2R5VGFnKSAmJiBjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAorCiAgICAgICAgIC8vIERvIG5vdCBtb3ZlIHRvIGEgdmlzdWFsbHkg
ZGlzdGluY3QgcG9zaXRpb24uCiAgICAgICAgIGlmIChlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0
aW5jdFBvc2l0aW9ucyhjdXJyZW50Tm9kZSkgJiYgY3VycmVudE5vZGUgIT0gYm91bmRhcnkpCiAg
ICAgICAgICAgICByZXR1cm4gbGFzdFZpc2libGU7CkBAIC02MzgsMTIgKzYzOCwxMiBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVs
ZSkgY29uc3QKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGN1cnJlbnROb2RlLT5y
ZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT52
aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgCisKICAgICAgICAgaWYgKHJ1bGUgPT0gQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgYm91
bmRhcnlDcm9zc2VkKSB7CiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyB0cmFj
ayBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KICAgICAgICAgaWYgKGlzU3RyZWFtZXIo
Y3VycmVudFBvcykpCiAgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7CkBAIC03
MDIsNyArNzAyLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgCisKICAgICByZXR1cm4gbGFzdFZpc2libGU7CiB9CiAKQEAgLTcyNywzNCArNzI3
LDM0IEBAIGJvb2wgUG9zaXRpb246OmlzQ2FuZGlkYXRlKCkgY29uc3QKIHsKICAgICBpZiAoaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBSZW5kZXJPYmpl
Y3QgKnJlbmRlcmVyID0gbm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+
dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChyZW5kZXJlci0+aXNCUigpKQotICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gMCAmJiAhbm9k
ZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpLT5wYXJlbnQoKSk7CisgICAgICAgIHJldHVybiAhbV9v
ZmZzZXQgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+cGFyZW50KCkpOwogCiAgICAg
aWYgKHJlbmRlcmVyLT5pc1RleHQoKSkKLSAgICAgICAgcmV0dXJuIGluUmVuZGVyZWRUZXh0KCkg
JiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSk7CisgICAgICAgIHJldHVybiAhbm9kZUlz
VXNlclNlbGVjdE5vbmUobm9kZSgpKSAmJiBpblJlbmRlcmVkVGV4dCgpOwogCiAgICAgaWYgKGlz
VGFibGVFbGVtZW50KG5vZGUoKSkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUoKSkpCi0g
ICAgICAgIHJldHVybiAoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSB8fCBhdExhc3RF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkt
PnBhcmVudCgpKTsKKyAgICAgICAgcmV0dXJuICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkt
PnBhcmVudCgpKSAmJiAoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSB8fCBhdExhc3RF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpOwogCiAgICAgaWYgKG1fYW5jaG9yTm9kZS0+aGFzVGFn
TmFtZShodG1sVGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgIGlm
IChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSkgewogICAgICAgICBpZiAodG9SZW5kZXJCbG9jayhy
ZW5kZXJlciktPmhlaWdodCgpIHx8IG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkg
ewogICAgICAgICAgICAgaWYgKCFQb3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNj
ZW5kYW50c1dpdGhIZWlnaHQocmVuZGVyZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBhdEZp
cnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVj
dE5vbmUobm9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpICYm
IGF0RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICFub2RlSXNVc2Vy
U2VsZWN0Tm9uZShub2RlKCkpICYmIGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSkgJiYgbV9hbmNo
b3JOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aXNDb250ZW50
RWRpdGFibGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSkgJiYg
YXRFZGl0aW5nQm91bmRhcnkoKTsKKyAgICAgICAgcmV0dXJuICFub2RlSXNVc2VyU2VsZWN0Tm9u
ZShub2RlKCkpICYmIG1fYW5jaG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiBhdEVkaXRp
bmdCb3VuZGFyeSgpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNzYzLDExICs3NjMsMTEg
QEAgYm9vbCBQb3NpdGlvbjo6aW5SZW5kZXJlZFRleHQoKSBjb25zdAogewogICAgIGlmIChpc051
bGwoKSB8fCAhbm9kZSgpLT5pc1RleHROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgCisKICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9kZSgpLT5yZW5kZXJlcigp
OwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAg
IFJlbmRlclRleHQgKnRleHRSZW5kZXJlciA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcik7CiAgICAg
Zm9yIChJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpOyBi
b3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICBpZiAobV9vZmZzZXQgPCBz
dGF0aWNfY2FzdDxpbnQ+KGJveC0+c3RhcnQoKSkgJiYgIXRleHRSZW5kZXJlci0+Y29udGFpbnNS
ZXZlcnNlZFRleHQoKSkgewpAQCAtNzgwLDcgKzc4MCw3IEBAIGJvb2wgUG9zaXRpb246OmluUmVu
ZGVyZWRUZXh0KCkgY29uc3QKICAgICAgICAgICAgIC8vIFJldHVybiBmYWxzZSBmb3Igb2Zmc2V0
cyBpbnNpZGUgY29tcG9zZWQgY2hhcmFjdGVycy4KICAgICAgICAgICAgIHJldHVybiBtX29mZnNl
dCA9PSAwIHx8IG1fb2Zmc2V0ID09IHRleHRSZW5kZXJlci0+bmV4dE9mZnNldCh0ZXh0UmVuZGVy
ZXItPnByZXZpb3VzT2Zmc2V0KG1fb2Zmc2V0KSk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCkBAIC03ODksNyArNzg5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGNhcmV0TWF4
UmVuZGVyZWRPZmZzZXQoY29uc3QgTm9kZSogbikKICAgICBSZW5kZXJPYmplY3QqIHIgPSBuLT5y
ZW5kZXJlcigpOwogICAgIGlmIChyKQogICAgICAgICByZXR1cm4gci0+Y2FyZXRNYXhSZW5kZXJl
ZE9mZnNldCgpOwotICAgIAorCiAgICAgaWYgKG4tPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENoYXJhY3RlckRhdGEqPihuKS0+bGVuZ3Ro
KCk7CiAgICAgcmV0dXJuIDE7CkBAIC03OTksMTEgKzc5OSwxMSBAQCBib29sIFBvc2l0aW9uOjpp
c1JlbmRlcmVkQ2hhcmFjdGVyKCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkgfHwgIW5vZGUo
KS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJl
bmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBSZW5kZXJUZXh0KiB0
ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOwogICAgIGZvciAoSW5saW5lVGV4
dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gt
Pm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgaWYgKG1fb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8aW50
Pihib3gtPnN0YXJ0KCkpICYmICF0ZXh0UmVuZGVyZXItPmNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkp
IHsKQEAgLTgxNSw3ICs4MTUsNyBAQCBib29sIFBvc2l0aW9uOjppc1JlbmRlcmVkQ2hhcmFjdGVy
KCkgY29uc3QKICAgICAgICAgaWYgKG1fb2Zmc2V0ID49IHN0YXRpY19jYXN0PGludD4oYm94LT5z
dGFydCgpKSAmJiBtX29mZnNldCA8IHN0YXRpY19jYXN0PGludD4oYm94LT5zdGFydCgpICsgYm94
LT5sZW4oKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTgyNywzNCArODI3LDM0IEBAIGJvb2wgUG9zaXRpb246OnJl
bmRlcnNJbkRpZmZlcmVudFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uICZwb3MpIGNvbnN0CiAgICAg
UmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJl
bmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBSZW5kZXJPYmplY3Qg
KnBvc1JlbmRlcmVyID0gcG9zLm5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXBvc1JlbmRl
cmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8Ci0gICAgICAgIHBvc1JlbmRlcmVyLT5zdHlsZSgp
LT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPnZp
c2liaWxpdHkoKSAhPSBWSVNJQkxFCisgICAgICAgIHx8IHBvc1JlbmRlcmVyLT5zdHlsZSgpLT52
aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAg
ICAgaWYgKG5vZGUoKSA9PSBwb3Mubm9kZSgpKSB7CiAgICAgICAgIGlmIChub2RlKCktPmhhc1Rh
Z05hbWUoYnJUYWcpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICht
X29mZnNldCA9PSBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmICghbm9kZSgpLT5pc1RleHRO
b2RlKCkgJiYgIXBvcy5ub2RlKCktPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKG1f
b2Zmc2V0ICE9IHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYgKG5vZGUoKS0+
aGFzVGFnTmFtZShiclRhZykgJiYgcG9zLmlzQ2FuZGlkYXRlKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgIAorCiAgICAgaWYgKHBvcy5ub2RlKCktPmhhc1RhZ05hbWUo
YnJUYWcpICYmIGlzQ2FuZGlkYXRlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgICAgIAorCiAgICAgaWYgKG5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpICE9
IHBvcy5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKQEAgLTg5MiwxMyArODkyLDEzIEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRp
ZmZlcmVudFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uICZwb3MpIGNvbnN0CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIGlmIChuZXh0UmVuZGVyZWRFZGl0YWJsZShub2RlKCkpID09
IHBvcy5ub2RlKCkgJiYgCi0gICAgICAgIHRoaXNSZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0
TWF4UmVuZGVyZWRPZmZzZXQobm9kZSgpKSAmJiBwb3NSZW5kZXJlZE9mZnNldCA9PSAwKSB7Cisg
ICAgaWYgKG5leHRSZW5kZXJlZEVkaXRhYmxlKG5vZGUoKSkgPT0gcG9zLm5vZGUoKQorICAgICAg
ICAmJiB0aGlzUmVuZGVyZWRPZmZzZXQgPT0gKGludCljYXJldE1heFJlbmRlcmVkT2Zmc2V0KG5v
ZGUoKSkgJiYgcG9zUmVuZGVyZWRPZmZzZXQgPT0gMCkgewogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIAotICAgIGlmIChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUobm9kZSgpKSA9
PSBwb3Mubm9kZSgpICYmIAotICAgICAgICB0aGlzUmVuZGVyZWRPZmZzZXQgPT0gMCAmJiBwb3NS
ZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQocG9zLm5vZGUoKSkp
IHsKKworICAgIGlmIChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUobm9kZSgpKSA9PSBwb3Mubm9k
ZSgpCisgICAgICAgICYmIHRoaXNSZW5kZXJlZE9mZnNldCA9PSAwICYmIHBvc1JlbmRlcmVkT2Zm
c2V0ID09IChpbnQpY2FyZXRNYXhSZW5kZXJlZE9mZnNldChwb3Mubm9kZSgpKSkgewogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC05MTEsNyArOTExLDcgQEAgUG9zaXRpb24gUG9z
aXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IGNvbnNpZGVyTm8KICAgICBBU1NFUlQoaXNFZGl0YWJsZVBvc2l0aW9uKCp0aGlzKSk7CiAgICAg
aWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKLSAgICAKKwogICAgIGlm
ICh1cHN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHJldHVybiBQ
b3NpdGlvbigpOwogCkBAIC05MzMsMTQgKzkzMywxNCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dHJh
aWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5LCBib29sIGNvbnNpZGVyTm9uQ29sbGFw
cwogICAgIEFTU0VSVChpc0VkaXRhYmxlUG9zaXRpb24oKnRoaXMpKTsKICAgICBpZiAoaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwotICAgIAorCiAgICAgVmlzaWJsZVBvc2l0
aW9uIHYoKnRoaXMpOwogICAgIFVDaGFyIGMgPSB2LmNoYXJhY3RlckFmdGVyKCk7CiAgICAgLy8g
VGhlIHNwYWNlIG11c3Qgbm90IGJlIGluIGFub3RoZXIgcGFyYWdyYXBoIGFuZCBpdCBtdXN0IGJl
IGVkaXRhYmxlLgogICAgIGlmICghaXNFbmRPZlBhcmFncmFwaCh2KSAmJiB2Lm5leHQodHJ1ZSku
aXNOb3ROdWxsKCkpCiAgICAgICAgIGlmIChjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFj
ZSA/IChpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlKSA6IGlzQ29sbGFw
c2libGVXaGl0ZXNwYWNlKGMpKQogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIAorCiAg
ICAgcmV0dXJuIFBvc2l0aW9uKCk7CiB9CiAKQEAgLTk5Nyw3ICs5OTcsNyBAQCB2b2lkIFBvc2l0
aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0
aW9uIHByaW1hcnlEaQogewogICAgIGNhcmV0T2Zmc2V0ID0gbV9vZmZzZXQ7CiAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAKKwogICAg
IGlmICghcmVuZGVyZXItPmlzVGV4dCgpKSB7CiAgICAgICAgIGlmICghcmVuZGVyZXItPmlzUmVu
ZGVyQnV0dG9uKCkgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgaGFzUmVuZGVyZWROb25B
bm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVuZGVyZXIpKSB7CiAgICAgICAgICAgICBi
b29sIGxhc3RQb3NpdGlvbiA9IGNhcmV0T2Zmc2V0ID09IGxhc3RPZmZzZXRJbk5vZGUobm9kZSgp
KTsKQEAgLTExNTksNyArMTE1OSw3IEBAIHZvaWQgUG9zaXRpb246OmRlYnVnUG9zaXRpb24oY29u
c3QgY2hhciogbXNnKSBjb25zdAogdm9pZCBQb3NpdGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hh
ciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHJlc3VsdDsK
LSAgICAKKwogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmVzdWx0ID0gIjxudWxsPiI7CiAg
ICAgZWxzZSB7CkBAIC0xMTcwLDcgKzExNzAsNyBAQCB2b2lkIFBvc2l0aW9uOjpmb3JtYXRGb3JE
ZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKICAgICAgICAgbm9k
ZSgpLT5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBzaXplb2YocykpOwogICAgICAgICByZXN1bHQgKz0g
czsKICAgICB9Ci0gICAgICAgICAgCisKICAgICBzdHJuY3B5KGJ1ZmZlciwgcmVzdWx0LnV0Zjgo
KS5kYXRhKCksIGxlbmd0aCAtIDEpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbkl0ZXJhdG9yLmNwcCBiL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCmluZGV4
IGY1YjY1ZjUuLjAyNDE1MDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0
b3IuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCkBAIC0yMCw3ICsy
MCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTE0
Myw3ICsxNDMsNyBAQCBib29sIFBvc2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkgY29uc3QK
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9hbmNob3JOb2RlLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlm
IChyZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMTUxLDE2ICsxNTEsMTYgQEAgYm9vbCBQb3NpdGlvbkl0ZXJhdG9y
Ojppc0NhbmRpZGF0ZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiAhbV9vZmZzZXRJbkFuY2hvciAm
JiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fYW5jaG9yTm9kZS0+cGFyZW50KCkp
OwogCiAgICAgaWYgKHJlbmRlcmVyLT5pc1RleHQoKSkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9u
KCp0aGlzKS5pblJlbmRlcmVkVGV4dCgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5v
bmUobV9hbmNob3JOb2RlKTsKKyAgICAgICAgcmV0dXJuICFQb3NpdGlvbjo6bm9kZUlzVXNlclNl
bGVjdE5vbmUobV9hbmNob3JOb2RlKSAmJiBQb3NpdGlvbigqdGhpcykuaW5SZW5kZXJlZFRleHQo
KTsKIAogICAgIGlmIChpc1RhYmxlRWxlbWVudChtX2FuY2hvck5vZGUpIHx8IGVkaXRpbmdJZ25v
cmVzQ29udGVudChtX2FuY2hvck5vZGUpKQotICAgICAgICByZXR1cm4gKGF0U3RhcnRPZk5vZGUo
KSB8fCBhdEVuZE9mTm9kZSgpKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1f
YW5jaG9yTm9kZS0+cGFyZW50KCkpOworICAgICAgICByZXR1cm4gIVBvc2l0aW9uOjpub2RlSXNV
c2VyU2VsZWN0Tm9uZShtX2FuY2hvck5vZGUtPnBhcmVudCgpKSAmJiAoYXRTdGFydE9mTm9kZSgp
IHx8IGF0RW5kT2ZOb2RlKCkpOwogCiAgICAgaWYgKCFtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUo
aHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkpIHsKICAgICAgICAgaWYgKHRvUmVu
ZGVyQmxvY2socmVuZGVyZXIpLT5oZWlnaHQoKSB8fCBtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUo
Ym9keVRhZykpIHsKICAgICAgICAgICAgIGlmICghUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5v
bnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYXRTdGFydE9mTm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUo
bV9hbmNob3JOb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVu
dEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX2FuY2hvck5v
ZGUpICYmIFBvc2l0aW9uKCp0aGlzKS5hdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICAgICAg
ICAgIHJldHVybiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fYW5jaG9yTm9kZSkg
JiYgYXRTdGFydE9mTm9kZSgpOworICAgICAgICAgICAgcmV0dXJuICFQb3NpdGlvbjo6bm9kZUlz
VXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKSAmJiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVk
aXRhYmxlKCkgJiYgUG9zaXRpb24oKnRoaXMpLmF0RWRpdGluZ0JvdW5kYXJ5KCk7CiAgICAgICAg
IH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAg
Yi9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCmluZGV4IDcxMjc1MzUuLjUyZTE2ZjIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC02NCw3ICs2NCw3IEBAIGJvb2wgaXNB
dG9taWNOb2RlKGNvbnN0IE5vZGUgKm5vZGUpCiAgICAgcmV0dXJuIG5vZGUgJiYgKCFub2RlLT5o
YXNDaGlsZE5vZGVzKCkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKTsKIH0KIAotLy8g
UmV0dXJucyB0cnVlIGZvciBub2RlcyB0aGF0IGVpdGhlciBoYXZlIG5vIGNvbnRlbnQsIG9yIGhh
dmUgY29udGVudCB0aGF0IGlzIGlnbm9yZWQgKHNraXBwZWQgCisvLyBSZXR1cm5zIHRydWUgZm9y
IG5vZGVzIHRoYXQgZWl0aGVyIGhhdmUgbm8gY29udGVudCwgb3IgaGF2ZSBjb250ZW50IHRoYXQg
aXMgaWdub3JlZCAoc2tpcHBlZAogLy8gb3Zlcikgd2hpbGUgZWRpdGluZy4gIFRoZXJlIGFyZSBu
byBWaXNpYmxlUG9zaXRpb25zIGluc2lkZSB0aGVzZSBub2Rlcy4KIGJvb2wgZWRpdGluZ0lnbm9y
ZXNDb250ZW50KGNvbnN0IE5vZGUqIG5vZGUpCiB7CkBAIC03MywyMiArNzMsMjIgQEAgYm9vbCBl
ZGl0aW5nSWdub3Jlc0NvbnRlbnQoY29uc3QgTm9kZSogbm9kZSkKIAogYm9vbCBjYW5IYXZlQ2hp
bGRyZW5Gb3JFZGl0aW5nKGNvbnN0IE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuICFub2RlLT5o
YXNUYWdOYW1lKGhyVGFnKSAmJgotICAgICAgICAgICAhbm9kZS0+aGFzVGFnTmFtZShiclRhZykg
JiYKLSAgICAgICAgICAgIW5vZGUtPmhhc1RhZ05hbWUoaW1nVGFnKSAmJgotICAgICAgICAgICAh
bm9kZS0+aGFzVGFnTmFtZShidXR0b25UYWcpICYmCi0gICAgICAgICAgICFub2RlLT5oYXNUYWdO
YW1lKGlucHV0VGFnKSAmJgotICAgICAgICAgICAhbm9kZS0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRh
ZykgJiYKLSAgICAgICAgICAgIW5vZGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSAmJgotICAgICAg
ICAgICAhbm9kZS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpICYmCi0gICAgICAgICAgICFub2RlLT5o
YXNUYWdOYW1lKGVtYmVkVGFnKSAmJgotICAgICAgICAgICAhbm9kZS0+aGFzVGFnTmFtZShhcHBs
ZXRUYWcpICYmCi0gICAgICAgICAgICFub2RlLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykgJiYKLSAg
ICAgICAgICAgIW5vZGUtPmhhc1RhZ05hbWUoZGF0YWdyaWRUYWcpICYmCisgICAgcmV0dXJuICFu
b2RlLT5pc1RleHROb2RlKCkKKyAgICAgICAgICAgJiYgIW5vZGUtPmhhc1RhZ05hbWUoYnJUYWcp
CisgICAgICAgICAgICYmICFub2RlLT5oYXNUYWdOYW1lKGltZ1RhZykKKyAgICAgICAgICAgJiYg
IW5vZGUtPmhhc1RhZ05hbWUoYnV0dG9uVGFnKQorICAgICAgICAgICAmJiAhbm9kZS0+aGFzVGFn
TmFtZShpbnB1dFRhZykKKyAgICAgICAgICAgJiYgIW5vZGUtPmhhc1RhZ05hbWUodGV4dGFyZWFU
YWcpCisgICAgICAgICAgICYmICFub2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykKKyAgICAgICAg
ICAgJiYgIW5vZGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKQorICAgICAgICAgICAmJiAhbm9kZS0+
aGFzVGFnTmFtZShlbWJlZFRhZykKKyAgICAgICAgICAgJiYgIW5vZGUtPmhhc1RhZ05hbWUoYXBw
bGV0VGFnKQorICAgICAgICAgICAmJiAhbm9kZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpCisgICAg
ICAgICAgICYmICFub2RlLT5oYXNUYWdOYW1lKGRhdGFncmlkVGFnKQogI2lmIEVOQUJMRShXTUwp
Ci0gICAgICAgICAgICFub2RlLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpkb1RhZykgJiYKKyAgICAg
ICAgICAgJiYgIW5vZGUtPmhhc1RhZ05hbWUoV01MTmFtZXM6OmRvVGFnKQogI2VuZGlmCi0gICAg
ICAgICAgICFub2RlLT5pc1RleHROb2RlKCk7CisgICAgICAgICAgICYmICFub2RlLT5oYXNUYWdO
YW1lKGhyVGFnKTsKIH0KIAogLy8gQ29tcGFyZSB0d28gcG9zaXRpb25zLCB0YWtpbmcgaW50byBh
Y2NvdW50IHRoZSBwb3NzaWJpbGl0eSB0aGF0IG9uZSBvciBib3RoCkBAIC0xMzcsMTEgKzEzNywx
MSBAQCBOb2RlKiBoaWdoZXN0RWRpdGFibGVSb290KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikK
ICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24ubm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIAorCiAgICAgTm9kZSogaGlnaGVzdFJvb3QgPSBlZGl0YWJs
ZVJvb3RGb3JQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgaWYgKCFoaWdoZXN0Um9vdCkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBub2RlID0gaGlnaGVzdFJvb3Q7CiAgICAgd2hpbGUg
KG5vZGUpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCkBAIC0xNTAs
NyArMTUwLDcgQEAgTm9kZSogaGlnaGVzdEVkaXRhYmxlUm9vdChjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24pCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gaGlnaGVzdFJvb3Q7CiB9CiAKQEAgLTE1
OCw3ICsxNTgsNyBAQCBOb2RlKiBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKE5vZGUqIG5vZGUpCiB7
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIE5vZGUgKmxv
d2VzdFJvb3QgPSAwOwogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKQpAQCAtMTY3LDcgKzE2Nyw3IEBAIE5vZGUqIGxvd2VzdEVkaXRhYmxl
QW5jZXN0b3IoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBub2RlID0g
bm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBsb3dlc3RSb290
OwogfQogCkBAIC0xNzYsMTAgKzE3NiwxMCBAQCBib29sIGlzRWRpdGFibGVQb3NpdGlvbihjb25z
dCBQb3NpdGlvbiYgcCkKICAgICBOb2RlKiBub2RlID0gcC5ub2RlKCk7CiAgICAgaWYgKCFub2Rl
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgaWYgKG5vZGUtPnJlbmRl
cmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQogICAgICAgICBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpOwotICAgIAorCiAgICAgcmV0dXJuIG5vZGUtPmlzQ29udGVudEVkaXRh
YmxlKCk7CiB9CiAKQEAgLTE4OCwxNyArMTg4LDE3IEBAIGJvb2wgaXNBdFVuc3BsaXR0YWJsZUVs
ZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKICAgICBOb2RlKiBub2RlID0gcG9zLm5vZGUoKTsK
ICAgICByZXR1cm4gKG5vZGUgPT0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24ocG9zKSB8fCBub2Rl
ID09IGVuY2xvc2luZ05vZGVPZlR5cGUocG9zLCAmaXNUYWJsZUNlbGwpKTsKIH0KLSAgICAKLSAg
ICAKKworCiBib29sIGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCkK
IHsKICAgICBOb2RlKiBub2RlID0gcC5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9k
ZS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOwotICAgIAorCiAgICAgcmV0dXJuIG5vZGUtPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7
CiB9CiAKQEAgLTIwNywxMCArMjA3LDEwIEBAIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZvclBvc2l0
aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQogICAgIE5vZGUqIG5vZGUgPSBwLm5vZGUoKTsKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwotICAgICAgICAKKwogICAgIGlmIChub2RlLT5y
ZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzVGFibGUoKSkKICAgICAgICAgbm9kZSA9
IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAKKwogICAgIHJldHVybiBub2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KCk7CiB9CiAKQEAgLTI4MSwxNyArMjgxLDE3IEBAIFZpc2libGVQb3NpdGlvbiBm
aXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvCiAgICAgICAgIHJldHVybiBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGhp
Z2hlc3RSb290KTsKIAogICAgIFBvc2l0aW9uIHAgPSBwb3NpdGlvbjsKLSAgICAKKwogICAgIGlm
IChOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHAubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkK
ICAgICAgICAgaWYgKHNoYWRvd0FuY2VzdG9yICE9IHAubm9kZSgpKQogICAgICAgICAgICAgcCA9
IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNlc3Rvcik7Ci0gICAgCisK
ICAgICB3aGlsZSAocC5ub2RlKCkgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSAmJiBwLm5vZGUo
KS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICBwID0gaXNBdG9taWNOb2Rl
KHAubm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5ub2RlKCkpIDogbmV4dFZp
c3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7Ci0gICAgCisKICAgICBpZiAocC5ub2RlKCkgJiYg
cC5ub2RlKCkgIT0gaGlnaGVzdFJvb3QgJiYgIXAubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdo
ZXN0Um9vdCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLSAgICAKKwogICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24ocCk7CiB9CiAKQEAgLTMwMiwxNyArMzAyLDE3IEBAIFZp
c2libGVQb3NpdGlvbiBsYXN0RWRpdGFibGVQb3NpdGlvbkJlZm9yZVBvc2l0aW9uSW5Sb290KGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvCiAgICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoaGlnaGVzdFJvb3QpOwogCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwot
ICAgIAorCiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gcC5ub2RlKCktPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpKQogICAgICAgICBpZiAoc2hhZG93QW5jZXN0b3IgIT0gcC5ub2RlKCkpCiAg
ICAgICAgICAgICBwID0gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNl
c3Rvcik7Ci0gICAgCisKICAgICB3aGlsZSAocC5ub2RlKCkgJiYgIWlzRWRpdGFibGVQb3NpdGlv
bihwKSAmJiBwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICBw
ID0gaXNBdG9taWNOb2RlKHAubm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHAu
bm9kZSgpKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKLSAgICAKKwog
ICAgIGlmIChwLm5vZGUoKSAmJiBwLm5vZGUoKSAhPSBoaWdoZXN0Um9vdCAmJiAhcC5ub2RlKCkt
PmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOwotICAgIAorCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwKTsKIH0KIApAQCAt
MzI0LDggKzMyNCw4IEBAIGJvb2wgaXNCbG9jayhjb25zdCBOb2RlKiBub2RlKQogfQogCiAvLyBG
SVhNRTogRGVwbG95IHRoaXMgaW4gYWxsIG9mIHRoZSBwbGFjZXMgd2hlcmUgZW5jbG9zaW5nQmxv
Y2tGbG93L2VuY2xvc2luZ0Jsb2NrRmxvd09yVGFibGVFbGVtZW50IGFyZSB1c2VkLgotLy8gRklY
TUU6IFBhc3MgYSBwb3NpdGlvbiB0byB0aGlzIGZ1bmN0aW9uLiAgVGhlIGVuY2xvc2luZyBibG9j
ayBvZiBbdGFibGUsIHhdIGZvciBleGFtcGxlLCBzaG91bGQgYmUgdGhlIAotLy8gYmxvY2sgdGhh
dCBjb250YWlucyB0aGUgdGFibGUgYW5kIG5vdCB0aGUgdGFibGUsIGFuZCB0aGlzIGZ1bmN0aW9u
IHNob3VsZCBiZSB0aGUgb25seSBvbmUgcmVzcG9uc2libGUgZm9yIAorLy8gRklYTUU6IFBhc3Mg
YSBwb3NpdGlvbiB0byB0aGlzIGZ1bmN0aW9uLiAgVGhlIGVuY2xvc2luZyBibG9jayBvZiBbdGFi
bGUsIHhdIGZvciBleGFtcGxlLCBzaG91bGQgYmUgdGhlCisvLyBibG9jayB0aGF0IGNvbnRhaW5z
IHRoZSB0YWJsZSBhbmQgbm90IHRoZSB0YWJsZSwgYW5kIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJl
IHRoZSBvbmx5IG9uZSByZXNwb25zaWJsZSBmb3IKIC8vIGtub3dpbmcgYWJvdXQgdGhlc2Uga2lu
ZHMgb2Ygc3BlY2lhbCBjYXNlcy4KIE5vZGUqIGVuY2xvc2luZ0Jsb2NrKE5vZGUqIG5vZGUpCiB7
CkBAIC0zNjEsMTcgKzM2MSwxNyBAQCBQb3NpdGlvbiByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQo
Y29uc3QgUG9zaXRpb24mIHBvcykKICAgICAgICAgLy8gdGhlcmUgaXMgbm8gb3RoZXIgb3B0aW9u
IGF0IHRoaXMgcG9pbnQgdGhhbiB0bwogICAgICAgICAvLyB1c2UgdGhlIGhpZ2hlc3QgYWxsb3dl
ZCBwb3NpdGlvbiBpbiB0aGUgbm9kZQogICAgICAgICByZXR1cm4gUG9zaXRpb24obm9kZSwgbWF4
Q29tcGxpYW50T2Zmc2V0KTsKLSAgICB9IAorICAgIH0KIAogICAgIC8vIEVkaXRpbmcgc2hvdWxk
IG5ldmVyIGdlbmVyYXRlIHBvc2l0aW9ucyBsaWtlIHRoaXMuCiAgICAgaWYgKChwb3MuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSA8IG1heENvbXBsaWFudE9mZnNldCkgJiYgZWRpdGluZ0lnbm9y
ZXNDb250ZW50KG5vZGUpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gbm9kZS0+cGFyZW50Tm9kZSgpID8gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUo
bm9kZSkgOiBQb3NpdGlvbihub2RlLCAwKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAocG9zLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPT0gbWF4Q29tcGxpYW50T2Zmc2V0ICYmIChlZGl0aW5n
SWdub3Jlc0NvbnRlbnQobm9kZSkgfHwgaXNUYWJsZUVsZW1lbnQobm9kZSkpKQogICAgICAgICBy
ZXR1cm4gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlKTsKLSAgICAKKwogICAgIHJldHVy
biBQb3NpdGlvbihwb3MpOwogfQogCkBAIC00MTMsMTQgKzQxMywxNCBAQCBTdHJpbmcgc3RyaW5n
V2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIHN0YXJ0
SXNTdGFydE9mUAogICAgIHJlYmFsYW5jZWRTdHJpbmcucmVwbGFjZShub0JyZWFrU3BhY2UsICcg
Jyk7CiAgICAgcmViYWxhbmNlZFN0cmluZy5yZXBsYWNlKCdcbicsICcgJyk7CiAgICAgcmViYWxh
bmNlZFN0cmluZy5yZXBsYWNlKCdcdCcsICcgJyk7Ci0gICAgCisKICAgICByZWJhbGFuY2VkU3Ry
aW5nLnJlcGxhY2UodHdvU3BhY2VzLCBwYXR0ZXJuKTsKLSAgICAKKwogICAgIGlmIChzdGFydElz
U3RhcnRPZlBhcmFncmFwaCAmJiByZWJhbGFuY2VkU3RyaW5nWzBdID09ICcgJykKICAgICAgICAg
cmViYWxhbmNlZFN0cmluZy5yZXBsYWNlKDAsIDEsIG5ic3ApOwogICAgIGludCBlbmQgPSByZWJh
bGFuY2VkU3RyaW5nLmxlbmd0aCgpIC0gMTsKICAgICBpZiAoZW5kSXNFbmRPZlBhcmFncmFwaCAm
JiByZWJhbGFuY2VkU3RyaW5nW2VuZF0gPT0gJyAnKQotICAgICAgICByZWJhbGFuY2VkU3RyaW5n
LnJlcGxhY2UoZW5kLCAxLCBuYnNwKTsgICAgCisgICAgICAgIHJlYmFsYW5jZWRTdHJpbmcucmVw
bGFjZShlbmQsIDEsIG5ic3ApOwogCiAgICAgcmV0dXJuIHJlYmFsYW5jZWRTdHJpbmc7CiB9CkBA
IC00NDIsNyArNDQyLDcgQEAgYm9vbCBpc1NwZWNpYWxFbGVtZW50KGNvbnN0IE5vZGUgKm4pCiB7
CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgaWYg
KCFuLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDUyLDcg
KzQ1Miw3IEBAIGJvb2wgaXNTcGVjaWFsRWxlbWVudChjb25zdCBOb2RlICpuKQogICAgIFJlbmRl
ck9iamVjdCAqcmVuZGVyZXIgPSBuLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBpZiAocmVuZGVyZXItPnN0eWxl
KCktPmRpc3BsYXkoKSA9PSBUQUJMRSB8fCByZW5kZXJlci0+c3R5bGUoKS0+ZGlzcGxheSgpID09
IElOTElORV9UQUJMRSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTQ2MSw3ICs0NjEsNyBA
QCBib29sIGlzU3BlY2lhbEVsZW1lbnQoY29uc3QgTm9kZSAqbikKIAogICAgIGlmIChyZW5kZXJl
ci0+c3R5bGUoKS0+cG9zaXRpb24oKSAhPSBTdGF0aWNQb3NpdGlvbikKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC01ODAsNyArNTgw
LDcgQEAgTm9kZSogaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3NpdGlvbikKICAgICBQb3NpdGlvbiB1cHN0cmVhbSh2aXNpYmxlUG9zaXRp
b24uZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpKTsKICAgICBpZiAodXBzdHJlYW0ubm9kZSgp
ICYmIHVwc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiB1cHN0cmVhbS5ub2RlKCktPnJlbmRl
cmVyKCktPmlzVGFibGUoKSAmJiB1cHN0cmVhbS5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KCkpCiAgICAgICAgIHJldHVybiB1cHN0cmVhbS5ub2RlKCk7Ci0gICAgCisKICAgICByZXR1cm4g
MDsKIH0KIApAQCAtNTg5LDcgKzU4OSw3IEBAIE5vZGUqIGlzTGFzdFBvc2l0aW9uQmVmb3JlVGFi
bGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAgICAgUG9zaXRpb24g
ZG93bnN0cmVhbSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkp
OwogICAgIGlmIChkb3duc3RyZWFtLm5vZGUoKSAmJiBkb3duc3RyZWFtLm5vZGUoKS0+cmVuZGVy
ZXIoKSAmJiBkb3duc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIGRvd25z
dHJlYW0uYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKICAgICAgICAgcmV0dXJuIGRv
d25zdHJlYW0ubm9kZSgpOwotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTY2OCw3ICs2
NjgsNyBAQCBOb2RlKiBlbmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3NpdGlvbiYgcCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKIHsKICAgICBpZiAocC5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIAorCiAgICAgTm9kZSogcm9vdCA9IGhpZ2hlc3RFZGl0YWJs
ZVJvb3QocCk7CiAgICAgZm9yIChOb2RlKiBuID0gcC5ub2RlKCk7IG47IG4gPSBuLT5wYXJlbnRO
b2RlKCkpIHsKICAgICAgICAgaWYgKHJvb3QgJiYgIW4tPmlzQ29udGVudEVkaXRhYmxlKCkpCkBA
IC02NzgsNyArNjc4LDcgQEAgTm9kZSogZW5jbG9zaW5nTm9kZVdpdGhUYWcoY29uc3QgUG9zaXRp
b24mIHAsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpCiAgICAgICAgIGlmIChuID09IHJv
b3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gMDsK
IH0KIApAQCAtNjg2LDcgKzY4Niw3IEBAIE5vZGUqIGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3Qg
UG9zaXRpb24mIHAsIGJvb2wgKCpub2RlSXNPZlR5cGUpKGNvbnN0IE5vZGUqKSwKIHsKICAgICBp
ZiAocC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAorCiAgICAgTm9kZSog
cm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCk7CiAgICAgZm9yIChOb2RlKiBuID0gcC5ub2Rl
KCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIGEg
bm9uLWVkaXRhYmxlIG5vZGUgaWYgdGhlIGlucHV0IHBvc2l0aW9uIHdhcyBlZGl0YWJsZSwgc2lu
Y2UKQEAgLTY5OCw3ICs2OTgsNyBAQCBOb2RlKiBlbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBv
c2l0aW9uJiBwLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKiksCiAgICAgICAgIGlm
IChuID09IHJvb3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtNzEyLDcgKzcxMiw3IEBAIE5vZGUqIGhpZ2hlc3RFbmNsb3NpbmdO
b2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9uJiBwLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBO
CiAgICAgICAgIGlmIChuID09IHJvb3QpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAg
CisKICAgICByZXR1cm4gaGlnaGVzdDsKIH0KIApAQCAtNzI1LDcgKzcyNSw3IEBAIE5vZGUqIGVu
Y2xvc2luZ0FuY2hvckVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHApCiB7CiAgICAgaWYgKHAuaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgTm9kZSogbm9kZSA9IHAubm9k
ZSgpOwogICAgIHdoaWxlIChub2RlICYmICEobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIG5vZGUt
PmlzTGluaygpKSkKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKQEAgLTczNiwx
NiArNzM2LDE2IEBAIEhUTUxFbGVtZW50KiBlbmNsb3NpbmdMaXN0KE5vZGUqIG5vZGUpCiB7CiAg
ICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCisKICAgICBOb2RlKiBy
b290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChQb3NpdGlvbihub2RlLCAwKSk7Ci0gICAgCisKICAg
ICBmb3IgKE5vZGUqIG4gPSBub2RlLT5wYXJlbnROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2Rl
KCkpIHsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUodWxUYWcpIHx8IG4tPmhhc1RhZ05hbWUo
b2xUYWcpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obik7
CiAgICAgICAgIGlmIChuID09IHJvb3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0g
ICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNzU2LDcgKzc1Niw3IEBAIEhUTUxFbGVtZW50
KiBlbmNsb3NpbmdMaXN0Q2hpbGQoTm9kZSAqbm9kZSkKICAgICAvLyBDaGVjayBmb3IgYSBsaXN0
IGl0ZW0gZWxlbWVudCwgb3IgZm9yIGEgbm9kZSB3aG9zZSBwYXJlbnQgaXMgYSBsaXN0IGVsZW1l
bnQuICBTdWNoIGEgbm9kZQogICAgIC8vIHdpbGwgYXBwZWFyIHZpc3VhbGx5IGFzIGEgbGlzdCBp
dGVtIChidXQgd2l0aG91dCBhIGxpc3QgbWFya2VyKQogICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0
RWRpdGFibGVSb290KFBvc2l0aW9uKG5vZGUsIDApKTsKLSAgICAKKwogICAgIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIGlzIGluYXBwcm9wcmlhdGVseSBuYW1lZCBpZiBpdCBzdGFydHMgd2l0aCBu
b2RlIGluc3RlYWQgb2Ygbm9kZS0+cGFyZW50Tm9kZSgpCiAgICAgZm9yIChOb2RlKiBuID0gbm9k
ZTsgbiAmJiBuLT5wYXJlbnROb2RlKCk7IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAg
aWYgKG4tPmhhc1RhZ05hbWUobGlUYWcpIHx8IGlzTGlzdEVsZW1lbnQobi0+cGFyZW50Tm9kZSgp
KSkKQEAgLTc2NCw3ICs3NjQsNyBAQCBIVE1MRWxlbWVudCogZW5jbG9zaW5nTGlzdENoaWxkKE5v
ZGUgKm5vZGUpCiAgICAgICAgIGlmIChuID09IHJvb3QgfHwgaXNUYWJsZUNlbGwobikpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAt
Nzc1LDcgKzc3NSw3IEBAIHN0YXRpYyBIVE1MRWxlbWVudCogZW1iZWRkZWRTdWJsaXN0KE5vZGUq
IGxpc3RJdGVtKQogICAgICAgICBpZiAoaXNMaXN0RWxlbWVudChuKSkKICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pOwogICAgIH0KLSAgICAKKwogICAgIHJl
dHVybiAwOwogfQogCkBAIC03ODgsNyArNzg4LDcgQEAgc3RhdGljIE5vZGUqIGFwcGVuZGVkU3Vi
bGlzdChOb2RlKiBsaXN0SXRlbSkKICAgICAgICAgaWYgKGlzTGlzdEl0ZW0obGlzdEl0ZW0pKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAK
QEAgLTgwNSwxMCArODA1LDEwIEBAIE5vZGUqIGVuY2xvc2luZ0VtcHR5TGlzdEl0ZW0oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogCiAgICAgaWYgKGZpcnN0SW5MaXN0Q2hpbGQg
IT0gdmlzaWJsZVBvcyB8fCBsYXN0SW5MaXN0Q2hpbGQgIT0gdmlzaWJsZVBvcykKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCisKICAgICBpZiAoZW1iZWRkZWRTdWJsaXN0KGxpc3RDaGlsZE5vZGUp
IHx8IGFwcGVuZGVkU3VibGlzdChsaXN0Q2hpbGROb2RlKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIAorCiAgICAgcmV0dXJuIGxpc3RDaGlsZE5vZGU7CiB9CiAKQEAgLTg1OCwxMyArODU4
LDEzIEBAIGJvb2wgaXNUYWJsZUNlbGwoY29uc3QgTm9kZSogbm9kZSkKICAgICBSZW5kZXJPYmpl
Y3QqIHIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuIG5v
ZGUtPmhhc1RhZ05hbWUodGRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUodGhUYWcpOwotICAgIAor
CiAgICAgcmV0dXJuIHItPmlzVGFibGVDZWxsKCk7CiB9CiAKIGJvb2wgaXNFbXB0eVRhYmxlQ2Vs
bChjb25zdCBOb2RlKiBub2RlKQogewotICAgIHJldHVybiBub2RlICYmIG5vZGUtPnJlbmRlcmVy
KCkgJiYgKG5vZGUtPnJlbmRlcmVyKCktPmlzVGFibGVDZWxsKCkgfHwgKG5vZGUtPnJlbmRlcmVy
KCktPmlzQlIoKSAmJiBub2RlLT5wYXJlbnROb2RlKCktPnJlbmRlcmVyKCkgJiYgbm9kZS0+cGFy
ZW50Tm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlQ2VsbCgpKSk7ICAgICAKKyAgICByZXR1cm4g
bm9kZSAmJiBub2RlLT5yZW5kZXJlcigpICYmIChub2RlLT5yZW5kZXJlcigpLT5pc1RhYmxlQ2Vs
bCgpIHx8IChub2RlLT5yZW5kZXJlcigpLT5pc0JSKCkgJiYgbm9kZS0+cGFyZW50Tm9kZSgpLT5y
ZW5kZXJlcigpICYmIG5vZGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZUNlbGwo
KSkpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCkBAIC05MjYsNyArOTI2LDcgQEAgYm9vbCBpc05v
ZGVJblRleHRGb3JtQ29udHJvbChOb2RlKiBub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIGFuY2VzdG9yLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KGFuY2VzdG9yKS0+aXNUZXh0Rm9ybUNvbnRyb2woKTsKIH0KLSAgICAKKwogUG9zaXRpb24g
cG9zaXRpb25CZWZvcmVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7CiAgICAgTm9kZSAq
bm9kZSA9IHBvcy5ub2RlKCk7CkBAIC05MzQsNyArOTM0LDcgQEAgUG9zaXRpb24gcG9zaXRpb25C
ZWZvcmVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBwb3MpCiAgICAgICAgIG5vZGUgPSB0YWJTcGFu
Tm9kZShub2RlKTsKICAgICBlbHNlIGlmICghaXNUYWJTcGFuTm9kZShub2RlKSkKICAgICAgICAg
cmV0dXJuIHBvczsKLSAgICAKKwogICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9k
ZShub2RlKTsKIH0KIApAQCAtOTkzLDcgKzk5Myw3IEBAIHVuc2lnbmVkIG51bUVuY2xvc2luZ01h
aWxCbG9ja3F1b3Rlcyhjb25zdCBQb3NpdGlvbiYgcCkKICAgICBmb3IgKE5vZGUqIG4gPSBwLm5v
ZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkKICAgICAgICAgaWYgKGlzTWFpbEJsb2NrcXVv
dGUobikpCiAgICAgICAgICAgICBudW0rKzsKLSAgICAKKwogICAgIHJldHVybiBudW07CiB9CiAK
QEAgLTEwMDEsNyArMTAwMSw3IEBAIGJvb2wgaXNNYWlsQmxvY2txdW90ZShjb25zdCBOb2RlICpu
b2RlKQogewogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aGFzVGFnTmFtZShibG9ja3F1b3RlVGFn
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBFbGVtZW50ICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInR5cGUiKSA9PSAiY2l0
ZSI7CiB9CiAKQEAgLTEwMTIsNyArMTAxMiw3IEBAIGludCBjYXJldE1pbk9mZnNldChjb25zdCBO
b2RlKiBuKQogICAgIHJldHVybiByID8gci0+Y2FyZXRNaW5PZmZzZXQoKSA6IDA7CiB9CiAKLS8v
IElmIGEgbm9kZSBjYW4gY29udGFpbiBjYW5kaWRhdGVzIGZvciBWaXNpYmxlUG9zaXRpb25zLCBy
ZXR1cm4gdGhlIG9mZnNldCBvZiB0aGUgbGFzdCBjYW5kaWRhdGUsIG90aGVyd2lzZSAKKy8vIElm
IGEgbm9kZSBjYW4gY29udGFpbiBjYW5kaWRhdGVzIGZvciBWaXNpYmxlUG9zaXRpb25zLCByZXR1
cm4gdGhlIG9mZnNldCBvZiB0aGUgbGFzdCBjYW5kaWRhdGUsIG90aGVyd2lzZQogLy8gcmV0dXJu
IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZm9yIGNvbnRhaW5lciBub2RlcyBhbmQgdGhlIGxlbmd0
aCBmb3IgdW5yZW5kZXJlZCB0ZXh0IG5vZGVzLgogaW50IGNhcmV0TWF4T2Zmc2V0KGNvbnN0IE5v
ZGUqIG4pCiB7CkBAIC0xMDMyLDEzICsxMDMyLDEzIEBAIGJvb2wgbGluZUJyZWFrRXhpc3RzQXRQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0aW9uLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBpZiAocG9zaXRpb24u
YW5jaG9yTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBwb3NpdGlvbi5hdEZpcnN0RWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwogICAgIGlm
ICghcG9zaXRpb24uYW5jaG9yTm9kZSgpLT5pc1RleHROb2RlKCkgfHwgIXBvc2l0aW9uLmFuY2hv
ck5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KHBvc2l0aW9uLmFuY2hvck5vZGUoKSk7CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gcG9z
aXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAgICAgcmV0dXJuIG9mZnNldCA8IHRleHRO
b2RlLT5sZW5ndGgoKSAmJiB0ZXh0Tm9kZS0+ZGF0YSgpW29mZnNldF0gPT0gJ1xuJzsKQEAgLTEw
NTIsNyArMTA1Miw3IEBAIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXRl
cmF0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9yaWdpbmFsCiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBuZXdTZWxlY3Rpb24ob3JpZ2luYWwpOwogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9m
U2VsZWN0aW9uKG5ld1NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIGVuZE9mU2VsZWN0aW9uKG5ld1NlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwotICAgIAorCiAg
ICAgLy8gSWYgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uIHRvIG1vZGlmeSBpcyBqdXN0IGFmdGVy
IGEgdGFibGUsIGFuZAogICAgIC8vIGlmIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uIGlzIGlu
c2lkZSB0aGF0IHRhYmxlLCB0aGVuIHRoZSBsYXN0IHBhcmFncmFwaAogICAgIC8vIHRoYXQgd2Un
bGwgd2FudCBtb2RpZnkgaXMgdGhlIGxhc3Qgb25lIGluc2lkZSB0aGUgdGFibGUsIG5vdCB0aGUg
dGFibGUgaXRzZWxmCkBAIC0xMDYwLDcgKzEwNjAsNyBAQCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbkZvclBhcmFncmFwaEl0ZXJhdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvcmlnaW5h
bAogICAgIGlmIChOb2RlKiB0YWJsZSA9IGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFibGUoZW5kT2ZT
ZWxlY3Rpb24pKQogICAgICAgICBpZiAoc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKS0+aXNEZXNjZW5kYW50T2YodGFibGUpKQogICAgICAgICAgICAgbmV3U2VsZWN0aW9u
ID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VsZWN0aW9uLCBlbmRPZlNlbGVjdGlvbi5wcmV2
aW91cyh0cnVlKSk7Ci0gICAgCisKICAgICAvLyBJZiB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlv
biB0byBtb2RpZnkgaXMganVzdCBiZWZvcmUgYSB0YWJsZSwKICAgICAvLyBhbmQgaWYgdGhlIGVu
ZCBvZiB0aGUgc2VsZWN0aW9uIGlzIGluc2lkZSB0aGF0IHRhYmxlLCB0aGVuIHRoZSBmaXJzdCBw
YXJhZ3JhcGgKICAgICAvLyB3ZSdsbCB3YW50IHRvIG1vZGlmeSBpcyB0aGUgZmlyc3Qgb25lIGlu
c2lkZSB0aGUgdGFibGUsIG5vdCB0aGUgcGFyYWdyYXBoCkBAIC0xMDY4LDcgKzEwNjgsNyBAQCBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0ZXJhdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBvcmlnaW5hbAogICAgIGlmIChOb2RlKiB0YWJsZSA9IGlzTGFzdFBvc2l0
aW9uQmVmb3JlVGFibGUoc3RhcnRPZlNlbGVjdGlvbikpCiAgICAgICAgIGlmIChlbmRPZlNlbGVj
dGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YodGFibGUpKQogICAg
ICAgICAgICAgbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VsZWN0aW9u
Lm5leHQodHJ1ZSksIGVuZE9mU2VsZWN0aW9uKTsKLSAgICAKKwogICAgIHJldHVybiBuZXdTZWxl
Y3Rpb247CiB9CiAKQEAgLTExNDgsMjMgKzExNDgsMjMgQEAgVmlzaWJsZVNlbGVjdGlvbiBhdm9p
ZEludGVyc2VjdGlvbldpdGhOb2RlKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwg
Tm8KIHsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gVmlzaWJs
ZVNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgICAgICAKKwogICAgIFZpc2libGVTZWxlY3Rpb24g
dXBkYXRlZFNlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgIE5vZGUqIGJhc2UgPSBzZWxlY3Rpb24u
YmFzZSgpLm5vZGUoKTsKICAgICBOb2RlKiBleHRlbnQgPSBzZWxlY3Rpb24uZXh0ZW50KCkubm9k
ZSgpOwogICAgIEFTU0VSVChiYXNlKTsKICAgICBBU1NFUlQoZXh0ZW50KTsKLSAgICAKKwogICAg
IGlmIChiYXNlID09IG5vZGUgfHwgYmFzZS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpIHsKICAgICAg
ICAgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUoKSk7CiAgICAgICAgIHVwZGF0ZWRTZWxlY3Rpb24u
c2V0QmFzZShQb3NpdGlvbihub2RlLT5wYXJlbnROb2RlKCksIG5vZGUtPm5vZGVJbmRleCgpKSk7
CiAgICAgfQotICAgIAorCiAgICAgaWYgKGV4dGVudCA9PSBub2RlIHx8IGV4dGVudC0+aXNEZXNj
ZW5kYW50T2Yobm9kZSkpIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUoKSk7CiAg
ICAgICAgIHVwZGF0ZWRTZWxlY3Rpb24uc2V0RXh0ZW50KFBvc2l0aW9uKG5vZGUtPnBhcmVudE5v
ZGUoKSwgbm9kZS0+bm9kZUluZGV4KCkpKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcmV0dXJu
IHVwZGF0ZWRTZWxlY3Rpb247CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaCBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAppbmRleCAw
YTgzZGRkLi4wZjIyYzJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC05OCw3ICs5
OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNwYWNlQWRkKGludCBhZGQpIHsgbV93aWR0aCAt
PSBtX3RvQWRkOyBtX3RvQWRkID0gYWRkOyBtX3dpZHRoICs9IG1fdG9BZGQ7IH0KIAogcHJpdmF0
ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVUZXh0Qm94KCkgeyByZXR1cm4gdHJ1ZTsgfSAg
ICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVUZXh0Qm94KCkgeyByZXR1cm4gdHJ1ZTsgfQog
CiBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>