<?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>81935</bug_id>
          
          <creation_ts>2012-03-22 11:00:51 -0700</creation_ts>
          <short_desc>Add JSValue::isFunction</short_desc>
          <delta_ts>2012-03-23 12:58:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>585481</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-22 11:00:51 -0700</bug_when>
    <thetext>This would be useful in the WebCore bindings code.
Also, rename asFunction to asJSFunction, since this only applies to JSFunctions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585483</commentid>
    <comment_count>1</comment_count>
      <attachid>133295</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-22 11:02:12 -0700</bug_when>
    <thetext>Created attachment 133295
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585488</commentid>
    <comment_count>2</comment_count>
      <attachid>133295</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-22 11:07:47 -0700</bug_when>
    <thetext>Comment on attachment 133295
Fix

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

r=me

&gt; Source/JavaScriptCore/runtime/JSFunction.h:159
&gt; +    inline JSFunction* asJSFunction(JSValue value)

Over time, I&apos;d like us to move to the jsCast function template instead of one-off casting functions. That would be a nice improvement here, but I won&apos;t hold up this patch for it.

&gt; Source/JavaScriptCore/runtime/JSFunction.h:167
&gt; +        return isObject() &amp;&amp; (asObject(*this)-&gt;inherits(&amp;JSFunction::s_info) || asObject(*this)-&gt;inherits(&amp;InternalFunction::s_info));

I think isCell() is a better check here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585492</commentid>
    <comment_count>3</comment_count>
      <attachid>133295</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-22 11:10:44 -0700</bug_when>
    <thetext>Comment on attachment 133295
Fix

Attachment 133295 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12120103</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585500</commentid>
    <comment_count>4</comment_count>
      <attachid>133295</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-22 11:16:48 -0700</bug_when>
    <thetext>Comment on attachment 133295
Fix

Attachment 133295 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12123066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585502</commentid>
    <comment_count>5</comment_count>
      <attachid>133295</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-22 11:18:42 -0700</bug_when>
    <thetext>Comment on attachment 133295
Fix

Attachment 133295 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12120102</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585505</commentid>
    <comment_count>6</comment_count>
      <attachid>133300</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-22 11:20:01 -0700</bug_when>
    <thetext>Created attachment 133300
More better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585509</commentid>
    <comment_count>7</comment_count>
      <attachid>133300</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-22 11:21:51 -0700</bug_when>
    <thetext>Comment on attachment 133300
More better.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585549</commentid>
    <comment_count>8</comment_count>
      <attachid>133300</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-22 11:54:04 -0700</bug_when>
    <thetext>Comment on attachment 133300
More better.

Attachment 133300 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12120115</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585552</commentid>
    <comment_count>9</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-22 11:55:12 -0700</bug_when>
    <thetext>Fixed in r111739</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585557</commentid>
    <comment_count>10</comment_count>
      <attachid>133300</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-22 11:58:53 -0700</bug_when>
    <thetext>Comment on attachment 133300
More better.

Attachment 133300 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12120122</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585559</commentid>
    <comment_count>11</comment_count>
      <attachid>133300</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-22 12:01:20 -0700</bug_when>
    <thetext>Comment on attachment 133300
More better.

Attachment 133300 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12113166</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585565</commentid>
    <comment_count>12</comment_count>
      <attachid>133300</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-22 12:03:27 -0700</bug_when>
    <thetext>Comment on attachment 133300
More better.

Attachment 133300 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12117157</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585567</commentid>
    <comment_count>13</comment_count>
      <attachid>133300</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-22 12:05:22 -0700</bug_when>
    <thetext>Comment on attachment 133300
More better.

Attachment 133300 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12114150</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133295</attachid>
            <date>2012-03-22 11:02:12 -0700</date>
            <delta_ts>2012-03-22 11:20:01 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>81935.patch</filename>
            <type>text/plain</type>
            <size>27613</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTExNzMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEyLTAzLTIyICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgSlNWYWx1ZTo6aXNGdW5jdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE5MzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdvdWxkIGJlIHVzZWZ1bCBpbiB0aGUgV2Vi
Q29yZSBiaW5kaW5ncyBjb2RlLgorICAgICAgICBBbHNvLCByZW5hbWUgYXNGdW5jdGlvbiB0byBh
c0pTRnVuY3Rpb24sIHNpbmNlIHRoaXMgb25seSBhcHBsaWVzIHRvIEpTRnVuY3Rpb25zLgorCisg
ICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXIuY3BwOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmZ1bmN0aW9uTmFtZSk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZGdW5jdGlvbkNv
bnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjppc0lubGlu
ZUNhbGxGcmFtZVNsb3cpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6Cisg
ICAgICAgIChKU0M6OmppdENvbXBpbGVGb3IpOgorICAgICAgICAoSlNDOjpsYXp5TGlua0Zvcik6
CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTElu
dDo6dHJhY2VGdW5jdGlvblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NM
T1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAg
ICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jRmlsdGVyKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1
bmNNYXApOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0V2ZXJ5KToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNGb3JFYWNoKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNT
b21lKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZWR1Y2UpOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1JlZHVjZVJpZ2h0KToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNs
b3dQYXRocy5oOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3Ip
OgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0
KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjphcmd1bWVudHNHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxs
ZXJHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpsZW5ndGhHZXR0ZXIpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpT
Qzo6YXNKU0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6aXNGdW5jdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoV1RGOjpSZWNvbXBp
bGVyOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpyZWxlYXNlRXhl
Y3V0YWJsZU1lbW9yeSk6CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgICog
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdS
ZWdFeHBTZWFyY2gpOgorCiAyMDEyLTAzLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgREZHIHNwZWN1bGF0aW9uIG9uIGJvb2xlYW5zIHNob3VsZCBiZSByYXRp
b25hbGl6ZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5j
cHAJKHJldmlzaW9uIDExMTUwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIEpTU3RyaW5nUmVm
IEpTQ29udGV4dENyZWF0ZUJhY2t0cmFjZShKU0MKICAgICAgICAgZXhlYy0+aW50ZXJwcmV0ZXIo
KS0+cmV0cmlldmVMYXN0Q2FsbGVyKGNhbGxGcmFtZSwgc2lnbmVkTGluZU51bWJlciwgc291cmNl
SUQsIHVybFN0cmluZywgZnVuY3Rpb24pOwogCiAgICAgICAgIGlmIChmdW5jdGlvbikKLSAgICAg
ICAgICAgIGZ1bmN0aW9uTmFtZSA9IGFzRnVuY3Rpb24oZnVuY3Rpb24pLT5uYW1lKGV4ZWMpOwor
ICAgICAgICAgICAgZnVuY3Rpb25OYW1lID0gYXNKU0Z1bmN0aW9uKGZ1bmN0aW9uKS0+bmFtZShl
eGVjKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBDYWxsZXIgaXMgdW5rbm93biwg
YnV0IGlmIGZyYW1lIGlzIGVtcHR5IHdlIHNob3VsZCBzdGlsbCBhZGQgdGhlIGZyYW1lLCBiZWNh
dXNlCiAgICAgICAgICAgICAvLyBzb21ldGhpbmcgY2FsbGVkIHVzLCBhbmQgZ2F2ZSB1cyBhcmd1
bWVudHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5j
cHAJKHJldmlzaW9uIDExMTUwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgaW5saW5lIHZvaWQg
UmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0NlbAogICAgIGlmICghY2VsbC0+aW5oZXJpdHMoJkpT
RnVuY3Rpb246OnNfaW5mbykpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uID0gYXNGdW5jdGlvbihjZWxsKTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFz
SlNGdW5jdGlvbihjZWxsKTsKICAgICBpZiAoZnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aXNIb3N0
RnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDEx
MTUwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY29uc3QgVVN0cmluZyogRGVi
dWdnZXJDYWxsRnJhbWU6OmZ1bmN0aQogICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IG1fY2FsbEZy
YW1lLT5jYWxsZWUoKTsKICAgICBpZiAoIWZ1bmN0aW9uIHx8ICFmdW5jdGlvbi0+aW5oZXJpdHMo
JkpTRnVuY3Rpb246OnNfaW5mbykpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAmYXNG
dW5jdGlvbihmdW5jdGlvbiktPm5hbWUobV9jYWxsRnJhbWUpOworICAgIHJldHVybiAmYXNKU0Z1
bmN0aW9uKGZ1bmN0aW9uKS0+bmFtZShtX2NhbGxGcmFtZSk7CiB9CiAgICAgCiBVU3RyaW5nIERl
YnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxhdGVkRnVuY3Rpb25OYW1lKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDExMTUwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDcg
KzI0Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEpTQ2VsbCogZnVuY3Rpb24gPSBnZXRK
U0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICBBU1NFUlQo
ZnVuY3Rpb24pOwotICAgICAgICByZXR1cm4gYXNGdW5jdGlvbihmdW5jdGlvbik7CisgICAgICAg
IHJldHVybiBhc0pTRnVuY3Rpb24oZnVuY3Rpb24pOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25z
dCBjaGFyICpvcE5hbWUoTm9kZVR5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMTE2MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyAr
MjQ1LDcgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaQogICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKIAotICAgIHJldHVybiBj
cmVhdGVUaGlzKGV4ZWMsIHByb3RvdHlwZSwgYXNGdW5jdGlvbihleGVjLT5jYWxsZWUoKSkpOwor
ICAgIHJldHVybiBjcmVhdGVUaGlzKGV4ZWMsIHByb3RvdHlwZSwgYXNKU0Z1bmN0aW9uKGV4ZWMt
PmNhbGxlZSgpKSk7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVU
aGlzSW5saW5lZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogcHJvdG90eXBlLCBKU0NlbGwqIGNv
bnN0cnVjdG9yKQpAQCAtODM1LDcgKzgzNSw3IEBAIGlubGluZSB2b2lkKiBsaW5rRm9yKEV4ZWNT
dGF0ZSogZXhlY0NhbGwKICAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKQogICAgICAgICBy
ZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCk7CiAK
LSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9uKGNhbGxlZUFzRnVuY3Rpb25DZWxs
KTsKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0pTRnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlv
bkNlbGwpOwogICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlQ2hhaW4oY2FsbGVlLT5zY29wZVVuY2hl
Y2tlZCgpKTsKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0
YWJsZSgpOwogCkBAIC04ODcsNyArODg3LDcgQEAgaW5saW5lIHZvaWQqIHZpcnR1YWxGb3IoRXhl
Y1N0YXRlKiBleGVjQwogICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQog
ICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwg
a2luZCk7CiAgICAgCi0gICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzSlNGdW5jdGlv
bihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgZXhlY0NhbGxlZS0+c2V0U2NvcGVDaGFpbihm
dW5jdGlvbi0+c2NvcGVVbmNoZWNrZWQoKSk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJs
ZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODEsNyArODEsNyBAQCBib29sIENhbGxGcmFtZTo6aXNJbmxpbmVDYWxsRnJhbWVTbG93
KCkKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxs
ZWUoKSk7CiAgICAgaWYgKCFjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIEpTRnVuY3Rpb24qIGNhbGxlZUFzRnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWVBc0Z1bmN0aW9uID0gYXNK
U0Z1bmN0aW9uKGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKICAgICByZXR1cm4gY2FsbGVlQXNGdW5j
dGlvbi0+ZXhlY3V0YWJsZSgpICE9IGNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDQzLDcgKzQ0NDMs
NyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgIGlmIChpc0hvc3RGdW5jdGlvbihm
dW5jVmFsLCBnbG9iYWxGdW5jRXZhbCkpIHsKICAgICAgICAgICAgIENhbGxGcmFtZSogbmV3Q2Fs
bEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIHJlZ2lz
dGVyT2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdCgwLCB2UEMgKyBPUENP
REVfTEVOR1RIKG9wX2NhbGxfZXZhbCksIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLCBjYWxsRnJh
bWUsIGFyZ0NvdW50LCBhc0Z1bmN0aW9uKGZ1bmNWYWwpKTsKKyAgICAgICAgICAgIG5ld0NhbGxG
cmFtZS0+aW5pdCgwLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfZXZhbCksIGNhbGxGcmFt
ZS0+c2NvcGVDaGFpbigpLCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBhc0pTRnVuY3Rpb24oZnVuY1Zh
bCkpOwogCiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWwobmV3Q2FsbEZyYW1lKTsK
ICAgICAgICAgICAgIGlmICgoZXhjZXB0aW9uVmFsdWUgPSBnbG9iYWxEYXRhLT5leGNlcHRpb24p
KQpAQCAtNDQ5Niw3ICs0NDk2LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgICAg
ICAgICBnb3RvIHZtX3Rocm93OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjYWxsRnJh
bWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpLCBjYWxs
RGF0YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBhcmdDb3VudCwgYXNGdW5jdGlvbih2
KSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENP
REVfTEVOR1RIKG9wX2NhbGwpLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1l
LCBhcmdDb3VudCwgYXNKU0Z1bmN0aW9uKHYpKTsKICAgICAgICAgICAgIGNvZGVCbG9jayA9IG5l
d0NvZGVCbG9jazsKICAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKSk7CiAgICAgICAgICAgICAqdG9wQ2FsbEZyYW1lU2xvdCA9IGNhbGxGcmFtZTsK
QEAgLTQ1NzQsNyArNDU3NCw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICAgICAg
ICAgZ290byB2bV90aHJvdzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmV3Q2FsbEZy
YW1lLT5pbml0KG5ld0NvZGVCbG9jaywgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFy
Z3MpLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIGNhbGxGcmFtZSwgYXJnQ291bnQsIGFzRnVuY3Rpb24o
dikpOworICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgdlBDICsg
T1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIGNhbGxG
cmFtZSwgYXJnQ291bnQsIGFzSlNGdW5jdGlvbih2KSk7CiAgICAgICAgICAgICBjb2RlQmxvY2sg
PSBuZXdDb2RlQmxvY2s7CiAgICAgICAgICAgICBjYWxsRnJhbWUgPSBuZXdDYWxsRnJhbWU7CiAg
ICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwpA
QCAtNDc4NSw3ICs0Nzg1LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgaW50IHRo
aXNSZWdpc3RlciA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBwcm90b1JlZ2lzdGVy
ID0gdlBDWzJdLnUub3BlcmFuZDsKIAotICAgICAgICBKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvciA9
IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxsZWUoKSk7CisgICAgICAgIEpTRnVuY3Rpb24qIGNv
bnN0cnVjdG9yID0gYXNKU0Z1bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwogI2lmICFBU1NF
UlRfRElTQUJMRUQKICAgICAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgICAg
ICBBU1NFUlQoY29uc3RydWN0b3ItPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEoY29u
c3RydWN0b3IsIGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVjdFR5cGVKUyk7CkBAIC00ODk1LDcg
KzQ4OTUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgICAgICAgIGdvdG8gdm1f
dGhyb3c7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+aW5pdChuZXdD
b2RlQmxvY2ssIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSwgY2FsbERhdGFTY29w
ZUNoYWluLCBwcmV2aW91c0NhbGxGcmFtZSwgYXJnQ291bnQsIGFzRnVuY3Rpb24odikpOworICAg
ICAgICAgICAgY2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgdlBDICsgT1BDT0RFX0xFTkdU
SChvcF9jb25zdHJ1Y3QpLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBh
cmdDb3VudCwgYXNKU0Z1bmN0aW9uKHYpKTsKICAgICAgICAgICAgIGNvZGVCbG9jayA9IG5ld0Nv
ZGVCbG9jazsKICAgICAgICAgICAgICp0b3BDYWxsRnJhbWVTbG90ID0gY2FsbEZyYW1lOwogICAg
ICAgICAgICAgdlBDID0gbmV3Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDExMTUwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjgxLDcgKzEyODEsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfCiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAKLSAgICBKU0Z1bmN0aW9u
KiBjb25zdHJ1Y3RvciA9IGFzRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxsZWUoKSk7CisgICAgSlNG
dW5jdGlvbiogY29uc3RydWN0b3IgPSBhc0pTRnVuY3Rpb24oY2FsbEZyYW1lLT5jYWxsZWUoKSk7
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsK
ICAgICBBU1NFUlQoY29uc3RydWN0b3ItPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEo
Y29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVjdFR5cGVKUyk7CkBAIC0yMTQ5
LDcgKzIxNDksNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19mCiAK
IGlubGluZSB2b2lkKiBqaXRDb21waWxlRm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0gICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1
bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkpOworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
YXNKU0Z1bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwogICAgIEFTU0VSVCghZnVuY3Rpb24t
PmlzSG9zdEZ1bmN0aW9uKCkpOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsKICAgICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFT
Y29wZUNoYWluID0gZnVuY3Rpb24tPnNjb3BlKCk7CkBAIC0yMTgzLDcgKzIxODMsNyBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3BfY29uc3RydWN0CiAKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwotICAgIEFTU0VSVChhc0Z1bmN0
aW9uKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jYWxsZWUoKSktPm1ldGhvZFRhYmxlKCktPmdldENv
bnN0cnVjdERhdGEoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlZSgpLCBjb25zdHJ1Y3REYXRh
KSA9PSBDb25zdHJ1Y3RUeXBlSlMpOworICAgIEFTU0VSVChhc0pTRnVuY3Rpb24oc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPmNhbGxlZSgpKS0+bWV0aG9kVGFibGUoKS0+Z2V0Q29uc3RydWN0RGF0YShz
dGFja0ZyYW1lLmNhbGxGcmFtZS0+Y2FsbGVlKCksIGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVj
dFR5cGVKUyk7CiAjZW5kaWYKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFt
ZS5jYWxsRnJhbWU7ICAgIApAQCAtMjIyMiw3ICsyMjIyLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCosIG9wX2NvbnN0cnVjdAogCiBpbmxpbmUgdm9pZCogbGF6eUxpbmtGb3IoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBKU0Z1
bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkpOworICAgIEpT
RnVuY3Rpb24qIGNhbGxlZSA9IGFzSlNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKICAg
ICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwogCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDExMTUwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTCh0cmFjZV9wcm9s
b2d1ZSkKIAogc3RhdGljIHZvaWQgdHJhY2VGdW5jdGlvblByb2xvZ3VlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgY2hhciogY29tbWVudCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewot
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpOworICAg
IEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzSlNGdW5jdGlvbihleGVjLT5jYWxsZWUoKSk7CiAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5qc0V4ZWN1dGFibGUoKTsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZleGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29k
ZUZvcihraW5kKTsKICAgICBkYXRhTG9nKCIlcCAvICVwOiBpbiAlcyBvZiBmdW5jdGlvbiAlcCwg
ZXhlY3V0YWJsZSAlcDsgbnVtVmFycyA9ICV1LCBudW1QYXJhbWV0ZXJzID0gJXUsIG51bUNhbGxl
ZVJlZ2lzdGVycyA9ICV1LCBjYWxsZXIgPSAlcC5cbiIsCkBAIC0zMTYsMjIgKzMxNiwyMiBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3IpCiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGVu
dHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCkKIHsKLSAgICByZXR1cm4gZW50cnlPU1IoZXhlYywg
cGMsICZhc0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmdlbmVyYXRl
ZEJ5dGVjb2RlRm9yKENvZGVGb3JDYWxsKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCIs
IFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoZXhlYywgcGMsICZhc0pTRnVuY3Rpb24o
ZXhlYy0+Y2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3IoQ29k
ZUZvckNhbGwpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsIiwgUHJvbG9ndWUpOwogfQog
CiBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCkK
IHsKLSAgICByZXR1cm4gZW50cnlPU1IoZXhlYywgcGMsICZhc0Z1bmN0aW9uKGV4ZWMtPmNhbGxl
ZSgpKS0+anNFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKENvZGVGb3JDb25zdHJ1
Y3QpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CisgICAg
cmV0dXJuIGVudHJ5T1NSKGV4ZWMsIHBjLCAmYXNKU0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+
anNFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKENvZGVGb3JDb25zdHJ1Y3QpLCAi
ZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QiLCBQcm9sb2d1ZSk7CiB9CiAKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrKQog
ewotICAgIHJldHVybiBlbnRyeU9TUihleGVjLCBwYywgJmFzRnVuY3Rpb24oZXhlYy0+Y2FsbGVl
KCkpLT5qc0V4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3IoQ29kZUZvckNhbGwpLCAi
ZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKKyAg
ICByZXR1cm4gZW50cnlPU1IoZXhlYywgcGMsICZhc0pTRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkp
LT5qc0V4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3IoQ29kZUZvckNhbGwpLCAiZW50
cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAog
TExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJp
dHlDaGVjaykKIHsKLSAgICByZXR1cm4gZW50cnlPU1IoZXhlYywgcGMsICZhc0Z1bmN0aW9uKGV4
ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKENvZGVG
b3JDb25zdHJ1Y3QpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVj
ayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihleGVjLCBwYywgJmFzSlNGdW5j
dGlvbihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRCeXRlY29kZUZv
cihDb2RlRm9yQ29uc3RydWN0KSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2Fy
aXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9v
c3IpCkBAIC00NTIsNyArNDUyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Ny
ZWF0ZV9hcgogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQogewog
ICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgSlNGdW5jdGlvbiogY29uc3RydWN0b3IgPSBhc0Z1bmN0
aW9uKGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvciA9IGFzSlNG
dW5jdGlvbihleGVjLT5jYWxsZWUoKSk7CiAgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAg
IENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKQEAgLTEzMTAsNyArMTMxMCw3IEBAIGlubGlu
ZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICBpZiAoIWNhbGxlZUFzRnVu
Y3Rpb25DZWxsKQogICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgcGMs
IGNhbGxlZUFzVmFsdWUsIGtpbmQpOwogICAgIAotICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFz
RnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9
IGFzSlNGdW5jdGlvbihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9ICpzY29wZS0+Z2xvYmFsRGF0YTsKICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNo
YWluKHNjb3BlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
cy5oCShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSk7CiAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKLSAgICAgICAgSlNGdW5j
dGlvbiogY2FsbGVlID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKKyAgICAgICAg
SlNGdW5jdGlvbiogY2FsbGVlID0gYXNKU0Z1bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwog
ICAgICAgICBkLT5udW1Bcmd1bWVudHMgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKICAg
ICAgICAgZC0+cmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93
bj4qPihjYWxsRnJhbWUtPnJlZ2lzdGVycygpKTsKICAgICAgICAgZC0+Y2FsbGVlLnNldChjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKSwgdGhpcywgY2FsbGVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDExMTUw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzg4LDcgKzc4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICB1bnNpZ25lZCBmaWx0ZXJJbmRleCA9IDA7CiAgICAgdW5z
aWduZWQgayA9IDA7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMgJiYgaXNKU0FycmF5
KHRoaXNPYmopKSB7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGYgPSBhc0Z1bmN0aW9uKGZ1bmN0aW9u
KTsKKyAgICAgICAgSlNGdW5jdGlvbiogZiA9IGFzSlNGdW5jdGlvbihmdW5jdGlvbik7CiAgICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2Fs
bCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAh
ZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewpAQCAtODQ2LDcgKzg0Niw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBKU0FycmF5KiByZXN1bHRBcnJh
eSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbGVuZ3RoKTsKICAgICB1bnNpZ25lZCBrID0g
MDsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyAmJiBpc0pTQXJyYXkodGhpc09iaikp
IHsKLSAgICAgICAgSlNGdW5jdGlvbiogZiA9IGFzRnVuY3Rpb24oZnVuY3Rpb24pOworICAgICAg
ICBKU0Z1bmN0aW9uKiBmID0gYXNKU0Z1bmN0aW9uKGZ1bmN0aW9uKTsKICAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENh
bGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRF
eGNlcHRpb24oKTsgKytrKSB7CkBAIC05MDksNyArOTA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgdW5zaWduZWQgayA9IDA7CiAgICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlSlMgJiYgaXNKU0FycmF5KHRoaXNPYmopKSB7Ci0gICAgICAgIEpT
RnVuY3Rpb24qIGYgPSBhc0Z1bmN0aW9uKGZ1bmN0aW9uKTsKKyAgICAgICAgSlNGdW5jdGlvbiog
ZiA9IGFzSlNGdW5jdGlvbihmdW5jdGlvbik7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNB
cnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGYsIDMp
OwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsr
aykgewpAQCAtOTY1LDcgKzk2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKIAogICAgIHVuc2lnbmVkIGsgPSAwOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZUpTICYmIGlzSlNBcnJheSh0aGlzT2JqKSkgewotICAgICAgICBKU0Z1bmN0aW9uKiBmID0g
YXNGdW5jdGlvbihmdW5jdGlvbik7CisgICAgICAgIEpTRnVuY3Rpb24qIGYgPSBhc0pTRnVuY3Rp
b24oZnVuY3Rpb24pOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7
CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9y
ICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKQEAgLTEwMTcs
NyArMTAxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAog
ICAgIHVuc2lnbmVkIGsgPSAwOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTICYmIGlz
SlNBcnJheSh0aGlzT2JqKSkgewotICAgICAgICBKU0Z1bmN0aW9uKiBmID0gYXNGdW5jdGlvbihm
dW5jdGlvbik7CisgICAgICAgIEpTRnVuY3Rpb24qIGYgPSBhc0pTRnVuY3Rpb24oZnVuY3Rpb24p
OwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENh
Y2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5n
dGggJiYgIWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKQEAgLTEwOTYsNyArMTA5Niw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9CiAKICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyAmJiBhcnJheSkgewotICAgICAgICBDYWNoZWRDYWxs
IGNhY2hlZENhbGwoZXhlYywgYXNGdW5jdGlvbihmdW5jdGlvbiksIDQpOworICAgICAgICBDYWNo
ZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgYXNKU0Z1bmN0aW9uKGZ1bmN0aW9uKSwgNCk7CiAgICAg
ICAgIGZvciAoOyBpIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytpKSB7CiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsKQEAgLTExNzMsNyArMTE3Myw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9CiAgICAgCiAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMgJiYgYXJyYXkpIHsKLSAgICAgICAgQ2FjaGVkQ2Fs
bCBjYWNoZWRDYWxsKGV4ZWMsIGFzRnVuY3Rpb24oZnVuY3Rpb24pLCA0KTsKKyAgICAgICAgQ2Fj
aGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGFzSlNGdW5jdGlvbihmdW5jdGlvbiksIDQpOwogICAg
ICAgICBmb3IgKDsgaSA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraSkgewog
ICAgICAgICAgICAgdW5zaWduZWQgaWR4ID0gbGVuZ3RoIC0gaSAtIDE7CiAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTExNTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIENvbW1vblNsb3dQYXRocyB7CiAK
IEFMV0FZU19JTkxJTkUgRXhlY1N0YXRlKiBhcml0eUNoZWNrRm9yKEV4ZWNTdGF0ZSogZXhlYywg
UmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
IHsKLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKTsK
KyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0pTRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpOwog
ICAgIEFTU0VSVCghY2FsbGVlLT5pc0hvc3RGdW5jdGlvbigpKTsKICAgICBDb2RlQmxvY2sqIG5l
d0NvZGVCbG9jayA9ICZjYWxsZWUtPmpzRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRCeXRlY29kZUZv
cihraW5kKTsKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBleGVjLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTExNTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjcsNyArNTY3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChleGVj
LT5jYWxsZWUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVyaXRz
KCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKLSAgICAgICAgICAgIEFTU0VSVChhc0Z1bmN0aW9uKGV4
ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CisgICAgICAgICAgICBBU1NF
UlQoYXNKU0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhpcyk7
CiAKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQogICAgICAgICAgICAgICAg
IHJldHVybiBjb21waWxlRm9yQ2FsbChleGVjLCBzY29wZUNoYWluTm9kZSk7CkBAIC01NzksNyAr
NTc5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChl
eGVjLT5jYWxsZWUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVy
aXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKLSAgICAgICAgICAgIEFTU0VSVChhc0Z1bmN0aW9u
KGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CisgICAgICAgICAgICBB
U1NFUlQoYXNKU0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhp
cyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQog
ICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChleGVjLCBzY29w
ZUNoYWluTm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMiw3ICsxMDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
UHJvCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAg
ICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkgewotICAgICAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24odGhpc1ZhbHVlKTsKKyAgICAgICAg
SlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0pTRnVuY3Rpb24odGhpc1ZhbHVlKTsKICAgICAgICAg
aWYgKGZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiLCBmdW5j
dGlvbi0+bmFtZShleGVjKSwgIigpIHtcbiAgICBbbmF0aXZlIGNvZGVdXG59IikpOwogICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2
aXNpb24gMTExNTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MjIsNyArMTYyMiw3IEBAIHZvaWQgSlNBcnJheTo6c29y
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX25vZGVzLmdy
b3cobm9kZUNvdW50KTsKIAogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKQotICAgICAg
ICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwgPSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2Fs
bChleGVjLCBhc0Z1bmN0aW9uKGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKKyAgICAgICAgdHJlZS5h
YnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQdHIobmV3IENhY2hlZENhbGwoZXhlYywg
YXNKU0Z1bmN0aW9uKGNvbXBhcmVGdW5jdGlvbiksIDIpKTsKIAogICAgIGlmICghdHJlZS5hYnN0
cmFjdG9yKCkubV9ub2Rlcy5iZWdpbigpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDIxICsxNzMsMjEgQEAgQ2Fs
bFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKgogCiBKU1ZhbHVlIEpTRnVuY3Rp
b246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNv
bnN0IElkZW50aWZpZXImKQogewotICAgIEpTRnVuY3Rpb24qIHRoaXNPYmogPSBhc0Z1bmN0aW9u
KHNsb3RCYXNlKTsKKyAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqID0gYXNKU0Z1bmN0aW9uKHNsb3RC
YXNlKTsKICAgICBBU1NFUlQoIXRoaXNPYmotPmlzSG9zdEZ1bmN0aW9uKCkpOwogICAgIHJldHVy
biBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUFyZ3VtZW50c0Zyb21WTUNvZGUoZXhlYywg
dGhpc09iaik7CiB9CiAKIEpTVmFsdWUgSlNGdW5jdGlvbjo6Y2FsbGVyR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCiB7Ci0gICAgSlNG
dW5jdGlvbiogdGhpc09iaiA9IGFzRnVuY3Rpb24oc2xvdEJhc2UpOworICAgIEpTRnVuY3Rpb24q
IHRoaXNPYmogPSBhc0pTRnVuY3Rpb24oc2xvdEJhc2UpOwogICAgIEFTU0VSVCghdGhpc09iai0+
aXNIb3N0RnVuY3Rpb24oKSk7CiAgICAgSlNWYWx1ZSBjYWxsZXIgPSBleGVjLT5pbnRlcnByZXRl
cigpLT5yZXRyaWV2ZUNhbGxlckZyb21WTUNvZGUoZXhlYywgdGhpc09iaik7CiAKICAgICAvLyBT
ZWUgRVM1LjEgMTUuMy41LjQgLSBGdW5jdGlvbi5jYWxsZXIgbWF5IG5vdCBiZSB1c2VkIHRvIHJl
dHJpZXZlIGEgc3RyaWN0IGNhbGxlci4KICAgICBpZiAoIWNhbGxlci5pc09iamVjdCgpIHx8ICFh
c09iamVjdChjYWxsZXIpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkKICAgICAgICAg
cmV0dXJuIGNhbGxlcjsKLSAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oY2Fs
bGVyKTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzSlNGdW5jdGlvbihjYWxsZXIpOwog
ICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSB8fCAhZnVuY3Rpb24tPmpzRXhlY3V0
YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgcmV0dXJuIGNhbGxlcjsKICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgIkZ1bmN0aW9uLmNhbGxlciB1c2VkIHRvIHJldHJpZXZl
IHN0cmljdCBjYWxsZXIiKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBKU1ZhbHVlIEpTRnVuY3Rpb246
OmNhbGxlckdldHRlcihFeGVjU3RhCiAKIEpTVmFsdWUgSlNGdW5jdGlvbjo6bGVuZ3RoR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQogewotICAg
IEpTRnVuY3Rpb24qIHRoaXNPYmogPSBhc0Z1bmN0aW9uKHNsb3RCYXNlKTsKKyAgICBKU0Z1bmN0
aW9uKiB0aGlzT2JqID0gYXNKU0Z1bmN0aW9uKHNsb3RCYXNlKTsKICAgICBBU1NFUlQoIXRoaXNP
YmotPmlzSG9zdEZ1bmN0aW9uKCkpOwogICAgIHJldHVybiBqc051bWJlcih0aGlzT2JqLT5qc0V4
ZWN1dGFibGUoKS0+cGFyYW1ldGVyQ291bnQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKICNpZm5kZWYgSlNGdW5jdGlvbl9oCiAjZGVmaW5lIEpTRnVuY3Rpb25faAog
CisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMTUzLDE0ICsxNTQsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFdyaXRlQmFycmllcjxTY29wZUNoYWluTm9kZT4gbV9zY29wZUNoYWluOwogICAgIH07
CiAKLSAgICBKU0Z1bmN0aW9uKiBhc0Z1bmN0aW9uKEpTVmFsdWUpOworICAgIEpTRnVuY3Rpb24q
IGFzSlNGdW5jdGlvbihKU1ZhbHVlKTsKIAotICAgIGlubGluZSBKU0Z1bmN0aW9uKiBhc0Z1bmN0
aW9uKEpTVmFsdWUgdmFsdWUpCisgICAgaW5saW5lIEpTRnVuY3Rpb24qIGFzSlNGdW5jdGlvbihK
U1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGFzT2JqZWN0KHZhbHVlKS0+aW5o
ZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNGdW5jdGlvbio+KGFzT2JqZWN0KHZhbHVlKSk7CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wg
SlNWYWx1ZTo6aXNGdW5jdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNPYmpl
Y3QoKSAmJiAoYXNPYmplY3QoKnRoaXMpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSB8
fCBhc09iamVjdCgqdGhpcyktPmluaGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uOjpzX2luZm8pKTsK
KyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNGdW5jdGlvbl9oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJ
KHJldmlzaW9uIDExMTUwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgaW5saW5lIHZvaWQg
UmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0NlbAogewogICAgIGlmICghY2VsbC0+aW5oZXJpdHMo
JkpTRnVuY3Rpb246OnNfaW5mbykpCiAgICAgICAgIHJldHVybjsKLSAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IGFzRnVuY3Rpb24oY2VsbCk7CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBh
c0pTRnVuY3Rpb24oY2VsbCk7CiAgICAgaWYgKCFmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpIHx8IGZ1
bmN0aW9uLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCktPmRpc2NhcmRDb2RlKCk7CkBAIC00NzgsNyAr
NDc4LDcgQEAgdm9pZCBKU0dsb2JhbERhdGE6OnJlbGVhc2VFeGVjdXRhYmxlTWVtbwogICAgICAg
ICAgICAgaWYgKGNlbGwtPmluaGVyaXRzKCZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8pKQogICAg
ICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4o
KnB0cik7CiAgICAgICAgICAgICBlbHNlIGlmIChjZWxsLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6
c19pbmZvKSkgewotICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5j
dGlvbigqcHRyKTsKKyAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzSlNG
dW5jdGlvbigqcHRyKTsKICAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmlzSG9zdEZ1bmN0
aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGV4
ZWN1dGFibGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw2ICsx
NzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBRdWVyeWluZyB0aGUgdHlwZS4K
ICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNGdW5jdGlvbigp
IGNvbnN0OwogICAgICAgICBib29sIGlzVW5kZWZpbmVkKCkgY29uc3Q7CiAgICAgICAgIGJvb2wg
aXNOdWxsKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNVbmRlZmluZWRPck51bGwoKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMTExNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDcgKzQ3OSw3IEBA
IHN0YXRpYyBORVZFUl9JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbGEKICAgICBpZiAoZ2xvYmFs
ICYmIGNhbGxUeXBlID09IENhbGxUeXBlSlMpIHsKICAgICAgICAgLy8gcmVnRXhwLT5udW1TdWJw
YXR0ZXJucygpICsgMSBmb3IgcGF0dGVybiBhcmdzLCArIDIgZm9yIG1hdGNoIHN0YXJ0IGFuZCBz
dHJpbmcKICAgICAgICAgaW50IGFyZ0NvdW50ID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsg
MSArIDI7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBhc0Z1bmN0aW9uKHJlcGxhY2VWYWx1
ZSk7CisgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBhc0pTRnVuY3Rpb24ocmVwbGFjZVZhbHVl
KTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGZ1bmMsIGFyZ0NvdW50KTsK
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSk7Cg==
</data>
<flag name="review"
          id="137244"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="137247"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133300</attachid>
            <date>2012-03-22 11:20:01 -0700</date>
            <delta_ts>2012-03-22 12:05:22 -0700</delta_ts>
            <desc>More better.</desc>
            <filename>81935.2.patch</filename>
            <type>text/plain</type>
            <size>28774</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTExNzMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEyLTAzLTIyICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgSlNWYWx1ZTo6aXNGdW5jdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODE5MzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHdvdWxkIGJlIHVzZWZ1bCBpbiB0aGUgV2Vi
Q29yZSBiaW5kaW5ncyBjb2RlLgorICAgICAgICBBbHNvLCByZW5hbWUgYXNGdW5jdGlvbiB0byBh
c0pTRnVuY3Rpb24sIHNpbmNlIHRoaXMgb25seSBhcHBsaWVzIHRvIEpTRnVuY3Rpb25zLgorCisg
ICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXIuY3BwOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmZ1bmN0aW9uTmFtZSk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZGdW5jdGlvbkNv
bnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjppc0lubGlu
ZUNhbGxGcmFtZVNsb3cpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBq
aXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6Cisg
ICAgICAgIChKU0M6OmppdENvbXBpbGVGb3IpOgorICAgICAgICAoSlNDOjpsYXp5TGlua0Zvcik6
CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTElu
dDo6dHJhY2VGdW5jdGlvblByb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NM
T1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAg
ICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jRmlsdGVyKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1
bmNNYXApOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0V2ZXJ5KToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNGb3JFYWNoKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNT
b21lKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZWR1Y2UpOgorICAgICAgICAoSlND
OjphcnJheVByb3RvRnVuY1JlZHVjZVJpZ2h0KToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNs
b3dQYXRocy5oOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OmFyaXR5Q2hlY2tGb3Ip
OgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0
KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjphcmd1bWVudHNHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWxs
ZXJHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpsZW5ndGhHZXR0ZXIpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpT
Qzo6YXNKU0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6aXNGdW5jdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoV1RGOjpSZWNvbXBp
bGVyOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpyZWxlYXNlRXhl
Y3V0YWJsZU1lbW9yeSk6CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgICog
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdS
ZWdFeHBTZWFyY2gpOgorCiAyMDEyLTAzLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgREZHIHNwZWN1bGF0aW9uIG9uIGJvb2xlYW5zIHNob3VsZCBiZSByYXRp
b25hbGl6ZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5j
cHAJKHJldmlzaW9uIDExMTUwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIEpTU3RyaW5nUmVm
IEpTQ29udGV4dENyZWF0ZUJhY2t0cmFjZShKU0MKICAgICAgICAgZXhlYy0+aW50ZXJwcmV0ZXIo
KS0+cmV0cmlldmVMYXN0Q2FsbGVyKGNhbGxGcmFtZSwgc2lnbmVkTGluZU51bWJlciwgc291cmNl
SUQsIHVybFN0cmluZywgZnVuY3Rpb24pOwogCiAgICAgICAgIGlmIChmdW5jdGlvbikKLSAgICAg
ICAgICAgIGZ1bmN0aW9uTmFtZSA9IGFzRnVuY3Rpb24oZnVuY3Rpb24pLT5uYW1lKGV4ZWMpOwor
ICAgICAgICAgICAgZnVuY3Rpb25OYW1lID0ganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbikt
Pm5hbWUoZXhlYyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQ2FsbGVyIGlzIHVu
a25vd24sIGJ1dCBpZiBmcmFtZSBpcyBlbXB0eSB3ZSBzaG91bGQgc3RpbGwgYWRkIHRoZSBmcmFt
ZSwgYmVjYXVzZQogICAgICAgICAgICAgLy8gc29tZXRoaW5nIGNhbGxlZCB1cywgYW5kIGdhdmUg
dXMgYXJndW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIGlubGlu
ZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWwKICAgICBpZiAoIWNlbGwtPmluaGVy
aXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oY2VsbCk7CisgICAgSlNGdW5jdGlvbiogZnVuY3Rp
b24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogICAgIGlmIChmdW5jdGlvbi0+ZXhlY3V0
YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNw
cAkocmV2aXNpb24gMTExNTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBjb25z
dCBVU3RyaW5nKiBEZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3RpCiAgICAgSlNPYmplY3QqIGZ1bmN0
aW9uID0gbV9jYWxsRnJhbWUtPmNhbGxlZSgpOwogICAgIGlmICghZnVuY3Rpb24gfHwgIWZ1bmN0
aW9uLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuICZhc0Z1bmN0aW9uKGZ1bmN0aW9uKS0+bmFtZShtX2NhbGxGcmFtZSk7CisgICAg
cmV0dXJuICZqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKS0+bmFtZShtX2NhbGxGcmFtZSk7
CiB9CiAgICAgCiBVU3RyaW5nIERlYnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxhdGVkRnVuY3Rpb25O
YW1lKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDExMTUwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEpT
Q2VsbCogZnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRl
eCkpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb24pOwotICAgICAgICByZXR1cm4gYXNGdW5jdGlv
bihmdW5jdGlvbik7CisgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9u
KTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTExNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDcgKzI0NSw3IEBAIEpTQ2VsbCogREZHX09QRVJBVElP
TiBvcGVyYXRpb25DcmVhdGVUaGkKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoZ2xvYmFs
RGF0YSwgZXhlYyk7CiAKLSAgICByZXR1cm4gY3JlYXRlVGhpcyhleGVjLCBwcm90b3R5cGUsIGFz
RnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpKTsKKyAgICByZXR1cm4gY3JlYXRlVGhpcyhleGVjLCBw
cm90b3R5cGUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpKTsKIH0KIAogSlND
ZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXNJbmxpbmVkKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBwcm90b3R5cGUsIEpTQ2VsbCogY29uc3RydWN0b3IpCkBAIC04MzUsNyAr
ODM1LDcgQEAgaW5saW5lIHZvaWQqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAgIGlm
ICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiAgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChl
eGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBraW5kKTsKIAotICAgIEpTRnVuY3Rpb24qIGNhbGxl
ZSA9IGFzRnVuY3Rpb24oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEpTRnVuY3Rpb24qIGNh
bGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogICAgIGV4
ZWNDYWxsZWUtPnNldFNjb3BlQ2hhaW4oY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpKTsKICAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwogCkBAIC04
ODcsNyArODg3LDcgQEAgaW5saW5lIHZvaWQqIHZpcnR1YWxGb3IoRXhlY1N0YXRlKiBleGVjQwog
ICAgIGlmIChVTkxJS0VMWSghY2FsbGVlQXNGdW5jdGlvbkNlbGwpKQogICAgICAgICByZXR1cm4g
aGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNWYWx1ZSwga2luZCk7CiAgICAgCi0g
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGNhbGxlZUFzRnVuY3Rpb25DZWxs
KTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVl
QXNGdW5jdGlvbkNlbGwpOwogICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlQ2hhaW4oZnVuY3Rpb24t
PnNjb3BlVW5jaGVja2VkKCkpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVu
Y3Rpb24tPmV4ZWN1dGFibGUoKTsKICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJ
VENvZGVGb3Ioa2luZCkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMTExNTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDcgKzgxLDcgQEAgYm9vbCBDYWxsRnJhbWU6OmlzSW5saW5lQ2FsbEZyYW1lU2xvdygpCiAgICAg
SlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCA9IGdldEpTRnVuY3Rpb24oY2FsbGVlKCkpOwog
ICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBKU0Z1bmN0aW9uKiBjYWxsZWVBc0Z1bmN0aW9uID0gYXNGdW5jdGlvbihjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCk7CisgICAgSlNGdW5jdGlvbiogY2FsbGVlQXNGdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogICAgIHJldHVybiBjYWxsZWVBc0Z1bmN0
aW9uLT5leGVjdXRhYmxlKCkgIT0gY29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHJldmlzaW9uIDExMTUwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NDMsNyArNDQ0Myw3
IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAKICAgICAgICAgaWYgKGlzSG9zdEZ1bmN0aW9uKGZ1
bmNWYWwsIGdsb2JhbEZ1bmNFdmFsKSkgewogICAgICAgICAgICAgQ2FsbEZyYW1lKiBuZXdDYWxs
RnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsgcmVnaXN0
ZXJPZmZzZXQpOwotICAgICAgICAgICAgbmV3Q2FsbEZyYW1lLT5pbml0KDAsIHZQQyArIE9QQ09E
RV9MRU5HVEgob3BfY2FsbF9ldmFsKSwgY2FsbEZyYW1lLT5zY29wZUNoYWluKCksIGNhbGxGcmFt
ZSwgYXJnQ291bnQsIGFzRnVuY3Rpb24oZnVuY1ZhbCkpOworICAgICAgICAgICAgbmV3Q2FsbEZy
YW1lLT5pbml0KDAsIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF9ldmFsKSwgY2FsbEZyYW1l
LT5zY29wZUNoYWluKCksIGNhbGxGcmFtZSwgYXJnQ291bnQsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
ZnVuY1ZhbCkpOwogCiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWwobmV3Q2FsbEZy
YW1lKTsKICAgICAgICAgICAgIGlmICgoZXhjZXB0aW9uVmFsdWUgPSBnbG9iYWxEYXRhLT5leGNl
cHRpb24pKQpAQCAtNDQ5Niw3ICs0NDk2LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAg
ICAgICAgICAgICBnb3RvIHZtX3Rocm93OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBj
YWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMgKyBPUENPREVfTEVOR1RIKG9wX2NhbGwp
LCBjYWxsRGF0YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBhcmdDb3VudCwgYXNGdW5j
dGlvbih2KSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCB2UEMg
KyBPUENPREVfTEVOR1RIKG9wX2NhbGwpLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIHByZXZpb3VzQ2Fs
bEZyYW1lLCBhcmdDb3VudCwganNDYXN0PEpTRnVuY3Rpb24qPih2KSk7CiAgICAgICAgICAgICBj
b2RlQmxvY2sgPSBuZXdDb2RlQmxvY2s7CiAgICAgICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpOwogICAgICAgICAgICAgKnRvcENhbGxGcmFtZVNsb3Qg
PSBjYWxsRnJhbWU7CkBAIC00NTc0LDcgKzQ1NzQsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgog
ICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIG5ld0NhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIE9QQ09ERV9MRU5HVEgo
b3BfY2FsbF92YXJhcmdzKSwgY2FsbERhdGFTY29wZUNoYWluLCBjYWxsRnJhbWUsIGFyZ0NvdW50
LCBhc0Z1bmN0aW9uKHYpKTsKKyAgICAgICAgICAgIG5ld0NhbGxGcmFtZS0+aW5pdChuZXdDb2Rl
QmxvY2ssIHZQQyArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgY2FsbERhdGFTY29w
ZUNoYWluLCBjYWxsRnJhbWUsIGFyZ0NvdW50LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KHYpKTsKICAg
ICAgICAgICAgIGNvZGVCbG9jayA9IG5ld0NvZGVCbG9jazsKICAgICAgICAgICAgIGNhbGxGcmFt
ZSA9IG5ld0NhbGxGcmFtZTsKICAgICAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY2FsbEZy
YW1lLT5jb2RlQmxvY2soKSk7CkBAIC00Nzg1LDcgKzQ3ODUsNyBAQCBza2lwX2lkX2N1c3RvbV9z
ZWxmOgogICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAg
ICAgaW50IHByb3RvUmVnaXN0ZXIgPSB2UENbMl0udS5vcGVyYW5kOwogCi0gICAgICAgIEpTRnVu
Y3Rpb24qIGNvbnN0cnVjdG9yID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKKyAg
ICAgICAgSlNGdW5jdGlvbiogY29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxG
cmFtZS0+Y2FsbGVlKCkpOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgQ29uc3RydWN0
RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgICAgICBBU1NFUlQoY29uc3RydWN0b3ItPm1ldGhvZFRh
YmxlKCktPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEpID09IENv
bnN0cnVjdFR5cGVKUyk7CkBAIC00ODk1LDcgKzQ4OTUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxm
OgogICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGNhbGxGcmFtZS0+aW5pdChuZXdDb2RlQmxvY2ssIHZQQyArIE9QQ09ERV9MRU5HVEgo
b3BfY29uc3RydWN0KSwgY2FsbERhdGFTY29wZUNoYWluLCBwcmV2aW91c0NhbGxGcmFtZSwgYXJn
Q291bnQsIGFzRnVuY3Rpb24odikpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5pbml0KG5ld0Nv
ZGVCbG9jaywgdlBDICsgT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpLCBjYWxsRGF0YVNjb3Bl
Q2hhaW4sIHByZXZpb3VzQ2FsbEZyYW1lLCBhcmdDb3VudCwganNDYXN0PEpTRnVuY3Rpb24qPih2
KSk7CiAgICAgICAgICAgICBjb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2s7CiAgICAgICAgICAgICAq
dG9wQ2FsbEZyYW1lU2xvdCA9IGNhbGxGcmFtZTsKICAgICAgICAgICAgIHZQQyA9IG5ld0NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4MSw3ICsxMjgxLDcgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIFNUVUJfSU5JVF9T
VEFDS19GUkFNRShzdGFja0ZyYW1lKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNr
RnJhbWUuY2FsbEZyYW1lOwogCi0gICAgSlNGdW5jdGlvbiogY29uc3RydWN0b3IgPSBhc0Z1bmN0
aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkpOworICAgIEpTRnVuY3Rpb24qIGNvbnN0cnVjdG9yID0g
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIEFTU0VSVChjb25z
dHJ1Y3Rvci0+bWV0aG9kVGFibGUoKS0+Z2V0Q29uc3RydWN0RGF0YShjb25zdHJ1Y3RvciwgY29u
c3RydWN0RGF0YSkgPT0gQ29uc3RydWN0VHlwZUpTKTsKQEAgLTIxNDksNyArMjE0OSw3IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2YKIAogaW5saW5lIHZvaWQqIGpp
dENvbXBpbGVGb3IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKIHsKLSAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oY2FsbEZyYW1l
LT5jYWxsZWUoKSk7CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwogICAgIEFTU0VSVCghZnVuY3Rpb24tPmlzSG9zdEZ1
bmN0aW9uKCkpOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9u
LT5qc0V4ZWN1dGFibGUoKTsKICAgICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNoYWlu
ID0gZnVuY3Rpb24tPnNjb3BlKCk7CkBAIC0yMTgzLDcgKzIxODMsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkKiwgb3BfY29uc3RydWN0CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
Q29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwotICAgIEFTU0VSVChhc0Z1bmN0aW9uKHN0YWNr
RnJhbWUuY2FsbEZyYW1lLT5jYWxsZWUoKSktPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERh
dGEoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlZSgpLCBjb25zdHJ1Y3REYXRhKSA9PSBDb25z
dHJ1Y3RUeXBlSlMpOworICAgIEFTU0VSVChqc0Nhc3Q8SlNGdW5jdGlvbio+KHN0YWNrRnJhbWUu
Y2FsbEZyYW1lLT5jYWxsZWUoKSktPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEoc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlZSgpLCBjb25zdHJ1Y3REYXRhKSA9PSBDb25zdHJ1Y3RU
eXBlSlMpOwogI2VuZGlmCiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOyAgICAKQEAgLTIyMjIsNyArMjIyMiw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQqLCBvcF9jb25zdHJ1Y3QKIAogaW5saW5lIHZvaWQqIGxhenlMaW5rRm9yKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0gICAgSlNGdW5j
dGlvbiogY2FsbGVlID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKKyAgICBKU0Z1
bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkp
OwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5leGVjdXRhYmxlKCk7
CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTExNTAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHRyYWNl
X3Byb2xvZ3VlKQogCiBzdGF0aWMgdm9pZCB0cmFjZUZ1bmN0aW9uUHJvbG9ndWUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBjaGFyKiBjb21tZW50LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CiB7Ci0gICAgSlNGdW5jdGlvbiogY2FsbGVlID0gYXNGdW5jdGlvbihleGVjLT5jYWxsZWUoKSk7
CisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxs
ZWUoKSk7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5qc0V4
ZWN1dGFibGUoKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZleGVjdXRhYmxlLT5nZW5l
cmF0ZWRCeXRlY29kZUZvcihraW5kKTsKICAgICBkYXRhTG9nKCIlcCAvICVwOiBpbiAlcyBvZiBm
dW5jdGlvbiAlcCwgZXhlY3V0YWJsZSAlcDsgbnVtVmFycyA9ICV1LCBudW1QYXJhbWV0ZXJzID0g
JXUsIG51bUNhbGxlZVJlZ2lzdGVycyA9ICV1LCBjYWxsZXIgPSAlcC5cbiIsCkBAIC0zMTYsMjIg
KzMxNiwyMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChlbnRyeV9vc3IpCiAKIExMSU5UX1NMT1df
UEFUSF9ERUNMKGVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCkKIHsKLSAgICByZXR1cm4gZW50
cnlPU1IoZXhlYywgcGMsICZhc0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxl
KCktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKENvZGVGb3JDYWxsKSwgImVudHJ5X29zcl9mdW5jdGlv
bl9mb3JfY2FsbCIsIFByb2xvZ3VlKTsKKyAgICByZXR1cm4gZW50cnlPU1IoZXhlYywgcGMsICZq
c0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCktPmdlbmVy
YXRlZEJ5dGVjb2RlRm9yKENvZGVGb3JDYWxsKSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2Fs
bCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jb25zdHJ1Y3QpCiB7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGV4ZWMsIHBjLCAmYXNG
dW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRCeXRlY29k
ZUZvcihDb2RlRm9yQ29uc3RydWN0KSwgImVudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0
IiwgUHJvbG9ndWUpOworICAgIHJldHVybiBlbnRyeU9TUihleGVjLCBwYywgJmpzQ2FzdDxKU0Z1
bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkQnl0ZWNv
ZGVGb3IoQ29kZUZvckNvbnN0cnVjdCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVj
dCIsIFByb2xvZ3VlKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2spCiB7Ci0gICAgcmV0dXJuIGVudHJ5T1NSKGV4ZWMsIHBj
LCAmYXNGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRC
eXRlY29kZUZvcihDb2RlRm9yQ2FsbCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJp
dHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJldHVybiBlbnRyeU9TUihleGVjLCBwYywgJmpz
Q2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKS0+Z2VuZXJh
dGVkQnl0ZWNvZGVGb3IoQ29kZUZvckNhbGwpLCAiZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxs
X2FyaXR5Q2hlY2siLCBBcml0eUNoZWNrKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woZW50
cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjaykKIHsKLSAgICByZXR1cm4g
ZW50cnlPU1IoZXhlYywgcGMsICZhc0Z1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRh
YmxlKCktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKENvZGVGb3JDb25zdHJ1Y3QpLCAiZW50cnlfb3Ny
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjayIsIEFyaXR5Q2hlY2spOworICAgIHJl
dHVybiBlbnRyeU9TUihleGVjLCBwYywgJmpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVl
KCkpLT5qc0V4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3IoQ29kZUZvckNvbnN0cnVj
dCksICJlbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrIiwgQXJpdHlD
aGVjayk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKGxvb3Bfb3NyKQpAQCAtNDUyLDcgKzQ1
Miw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfYXIKIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhpcykKIHsKICAgICBMTElOVF9CRUdJTigp
OwotICAgIEpTRnVuY3Rpb24qIGNvbnN0cnVjdG9yID0gYXNGdW5jdGlvbihleGVjLT5jYWxsZWUo
KSk7CisgICAgSlNGdW5jdGlvbiogY29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4
ZWMtPmNhbGxlZSgpKTsKICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgQ29uc3RydWN0
RGF0YSBjb25zdHJ1Y3REYXRhOwpAQCAtMTMxMCw3ICsxMzEwLDcgQEAgaW5saW5lIFNsb3dQYXRo
UmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwp
CiAgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBwYywgY2FsbGVlQXNW
YWx1ZSwga2luZCk7CiAgICAgCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlID0gYXNGdW5jdGlvbihj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpT
RnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAgICAgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlID0gY2FsbGVlLT5zY29wZVVuY2hlY2tlZCgpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSA9ICpzY29wZS0+Z2xvYmFsRGF0YTsKICAgICBleGVjQ2FsbGVlLT5zZXRTY29wZUNoYWlu
KHNjb3BlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5o
CShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1
bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7
CiAgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAKLSAgICAgICAgSlNGdW5jdGlv
biogY2FsbGVlID0gYXNGdW5jdGlvbihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKKyAgICAgICAgSlNG
dW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmNhbGxlZSgp
KTsKICAgICAgICAgZC0+bnVtQXJndW1lbnRzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7
CiAgICAgICAgIGQtPnJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVu
a25vd24+Kj4oY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSk7CiAgICAgICAgIGQtPmNhbGxlZS5zZXQo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHRoaXMsIGNhbGxlZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAx
MTE1MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc4OCw3ICs3ODgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgdW5zaWduZWQgZmlsdGVySW5kZXggPSAwOwogICAg
IHVuc2lnbmVkIGsgPSAwOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTICYmIGlzSlNB
cnJheSh0aGlzT2JqKSkgewotICAgICAgICBKU0Z1bmN0aW9uKiBmID0gYXNGdW5jdGlvbihmdW5j
dGlvbik7CisgICAgICAgIEpTRnVuY3Rpb24qIGYgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0
aW9uKTsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAg
ICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwg
bGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7CkBAIC04NDYsNyArODQ2LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEpTQXJyYXkq
IHJlc3VsdEFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBsZW5ndGgpOwogICAgIHVu
c2lnbmVkIGsgPSAwOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTICYmIGlzSlNBcnJh
eSh0aGlzT2JqKSkgewotICAgICAgICBKU0Z1bmN0aW9uKiBmID0gYXNGdW5jdGlvbihmdW5jdGlv
bik7CisgICAgICAgIEpTRnVuY3Rpb24qIGYgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9u
KTsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwogICAgICAgICBD
YWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZiwgMyk7CiAgICAgICAgIGZvciAoOyBrIDwgbGVu
Z3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytrKSB7CkBAIC05MDksNyArOTA5LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgdW5zaWduZWQg
ayA9IDA7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMgJiYgaXNKU0FycmF5KHRoaXNP
YmopKSB7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGYgPSBhc0Z1bmN0aW9uKGZ1bmN0aW9uKTsKKyAg
ICAgICAgSlNGdW5jdGlvbiogZiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pOwogICAg
ICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENh
bGwgY2FjaGVkQ2FsbChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYg
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpOyArK2spIHsKQEAgLTk2NSw3ICs5NjUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICB1bnNpZ25lZCBrID0gMDsK
ICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyAmJiBpc0pTQXJyYXkodGhpc09iaikpIHsK
LSAgICAgICAgSlNGdW5jdGlvbiogZiA9IGFzRnVuY3Rpb24oZnVuY3Rpb24pOworICAgICAgICBK
U0Z1bmN0aW9uKiBmID0ganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbik7CiAgICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNo
ZWRDYWxsKGV4ZWMsIGYsIDMpOwogICAgICAgICBmb3IgKDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+
aGFkRXhjZXB0aW9uKCk7ICsraykgewpAQCAtMTAxNyw3ICsxMDE3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgdW5zaWduZWQgayA9IDA7CiAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMgJiYgaXNKU0FycmF5KHRoaXNPYmopKSB7Ci0gICAg
ICAgIEpTRnVuY3Rpb24qIGYgPSBhc0Z1bmN0aW9uKGZ1bmN0aW9uKTsKKyAgICAgICAgSlNGdW5j
dGlvbiogZiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pOwogICAgICAgICBKU0FycmF5
KiBhcnJheSA9IGFzQXJyYXkodGhpc09iaik7CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2Fs
bChleGVjLCBmLCAzKTsKICAgICAgICAgZm9yICg7IGsgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpOyArK2spIHsKQEAgLTEwOTYsNyArMTA5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9CiAKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2Fs
bFR5cGVKUyAmJiBhcnJheSkgewotICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywg
YXNGdW5jdGlvbihmdW5jdGlvbiksIDQpOworICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwo
ZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbiksIDQpOwogICAgICAgICBmb3IgKDsg
aSA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraSkgewogICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudCgwLCBydik7CkBAIC0xMTczLDcgKzExNzMsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgfQogICAgIAogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZUpTICYmIGFycmF5KSB7Ci0gICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2Fs
bChleGVjLCBhc0Z1bmN0aW9uKGZ1bmN0aW9uKSwgNCk7CisgICAgICAgIENhY2hlZENhbGwgY2Fj
aGVkQ2FsbChleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKSwgNCk7CiAgICAgICAg
IGZvciAoOyBpIDwgbGVuZ3RoICYmICFleGVjLT5oYWRFeGNlcHRpb24oKTsgKytpKSB7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBpZHggPSBsZW5ndGggLSBpIC0gMTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxMTE1MDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgQ29tbW9uU2xvd1BhdGhzIHsKIAogQUxX
QVlTX0lOTElORSBFeGVjU3RhdGUqIGFyaXR5Q2hlY2tGb3IoRXhlY1N0YXRlKiBleGVjLCBSZWdp
c3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewot
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGFzRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpOworICAg
IEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkp
OwogICAgIEFTU0VSVCghY2FsbGVlLT5pc0hvc3RGdW5jdGlvbigpKTsKICAgICBDb2RlQmxvY2sq
IG5ld0NvZGVCbG9jayA9ICZjYWxsZWUtPmpzRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRCeXRlY29k
ZUZvcihraW5kKTsKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBleGVjLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTExNTAyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjcsNyAr
NTY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChl
eGVjLT5jYWxsZWUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVy
aXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKTsKLSAgICAgICAgICAgIEFTU0VSVChhc0Z1bmN0aW9u
KGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhpcyk7CisgICAgICAgICAgICBB
U1NFUlQoanNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgp
ID09IHRoaXMpOwogCiAgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gY29tcGlsZUZvckNhbGwoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwpA
QCAtNTc5LDcgKzU3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAg
ICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCkpOwogICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxl
ZSgpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSk7Ci0gICAgICAgICAgICBBU1NFUlQo
YXNGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMpOworICAg
ICAgICAgICAgQVNTRVJUKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpLT5qc0V4
ZWN1dGFibGUoKSA9PSB0aGlzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRG
b3JDYWxsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDExMTUw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25Qcm8KIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKICAgICBpZiAodGhpc1ZhbHVlLmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpz
X2luZm8pKSB7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbih0aGlz
VmFsdWUpOworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4odGhpc1ZhbHVlKTsKICAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5n
KGV4ZWMsICJmdW5jdGlvbiAiLCBmdW5jdGlvbi0+bmFtZShleGVjKSwgIigpIHtcbiAgICBbbmF0
aXZlIGNvZGVdXG59IikpOwogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTExNTAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MjIsNyArMTYy
Miw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICB0cmVl
LmFic3RyYWN0b3IoKS5tX25vZGVzLmdyb3cobm9kZUNvdW50KTsKIAogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZUpTKQotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hlZENhbGwg
PSBhZG9wdFB0cihuZXcgQ2FjaGVkQ2FsbChleGVjLCBhc0Z1bmN0aW9uKGNvbXBhcmVGdW5jdGlv
biksIDIpKTsKKyAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9jYWNoZWRDYWxsID0gYWRvcHRQ
dHIobmV3IENhY2hlZENhbGwoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb21wYXJlRnVuY3Rp
b24pLCAyKSk7CiAKICAgICBpZiAoIXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkg
ewogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTExNTAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1NSwxMiAr
MzU1LDI1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG8+
KGZyb20pOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRvPgorICAgIGlubGluZSBU
byBqc0Nhc3QoSlNWYWx1ZSBmcm9tKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZyb20uaXNDZWxs
KCkgJiYgZnJvbS5hc0NlbGwoKS0+aW5oZXJpdHMoJldURjo6UmVtb3ZlUG9pbnRlcjxUbz46OlR5
cGU6OnNfaW5mbykpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG8+KGZyb20uYXNDZWxs
KCkpOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgog
ICAgIGlubGluZSBUbyBqc0R5bmFtaWNDYXN0KEZyb20qIGZyb20pCiAgICAgewogICAgICAgICBy
ZXR1cm4gZnJvbS0+aW5oZXJpdHMoJldURjo6UmVtb3ZlUG9pbnRlcjxUbz46OlR5cGU6OnNfaW5m
bykgPyBzdGF0aWNfY2FzdDxUbz4oZnJvbSkgOiAwOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFRvPgorICAgIGlubGluZSBUbyBqc0R5bmFtaWNDYXN0KEpTVmFsdWUgZnJvbSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmcm9tLmlzQ2VsbCgpICYmIGZyb20uYXNDZWxsKCktPmluaGVy
aXRzKCZXVEY6OlJlbW92ZVBvaW50ZXI8VG8+OjpUeXBlOjpzX2luZm8pID8gc3RhdGljX2Nhc3Q8
VG8+KGZyb20uYXNDZWxsKCkpIDogMDsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gSlNDZWxsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMTE1MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDIxICsxNzMs
MjEgQEAgQ2FsbFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q2FsbERhdGEoSlNDZWxsKgogCiBKU1ZhbHVl
IEpTRnVuY3Rpb246OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xv
dEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQogewotICAgIEpTRnVuY3Rpb24qIHRoaXNPYmogPSBh
c0Z1bmN0aW9uKHNsb3RCYXNlKTsKKyAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqID0ganNDYXN0PEpT
RnVuY3Rpb24qPihzbG90QmFzZSk7CiAgICAgQVNTRVJUKCF0aGlzT2JqLT5pc0hvc3RGdW5jdGlv
bigpKTsKICAgICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVBcmd1bWVudHNG
cm9tVk1Db2RlKGV4ZWMsIHRoaXNPYmopOwogfQogCiBKU1ZhbHVlIEpTRnVuY3Rpb246OmNhbGxl
ckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZp
ZXImKQogewotICAgIEpTRnVuY3Rpb24qIHRoaXNPYmogPSBhc0Z1bmN0aW9uKHNsb3RCYXNlKTsK
KyAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqID0ganNDYXN0PEpTRnVuY3Rpb24qPihzbG90QmFzZSk7
CiAgICAgQVNTRVJUKCF0aGlzT2JqLT5pc0hvc3RGdW5jdGlvbigpKTsKICAgICBKU1ZhbHVlIGNh
bGxlciA9IGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQ2FsbGVyRnJvbVZNQ29kZShleGVj
LCB0aGlzT2JqKTsKIAogICAgIC8vIFNlZSBFUzUuMSAxNS4zLjUuNCAtIEZ1bmN0aW9uLmNhbGxl
ciBtYXkgbm90IGJlIHVzZWQgdG8gcmV0cmlldmUgYSBzdHJpY3QgY2FsbGVyLgogICAgIGlmICgh
Y2FsbGVyLmlzT2JqZWN0KCkgfHwgIWFzT2JqZWN0KGNhbGxlciktPmluaGVyaXRzKCZKU0Z1bmN0
aW9uOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gY2FsbGVyOwotICAgIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uID0gYXNGdW5jdGlvbihjYWxsZXIpOworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZXIpOwogICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0RnVu
Y3Rpb24oKSB8fCAhZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSkKICAg
ICAgICAgcmV0dXJuIGNhbGxlcjsKICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgIkZ1
bmN0aW9uLmNhbGxlciB1c2VkIHRvIHJldHJpZXZlIHN0cmljdCBjYWxsZXIiKTsKQEAgLTE5NSw3
ICsxOTUsNyBAQCBKU1ZhbHVlIEpTRnVuY3Rpb246OmNhbGxlckdldHRlcihFeGVjU3RhCiAKIEpT
VmFsdWUgSlNGdW5jdGlvbjo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgc2xvdEJh
c2UsIGNvbnN0IElkZW50aWZpZXImKQogewotICAgIEpTRnVuY3Rpb24qIHRoaXNPYmogPSBhc0Z1
bmN0aW9uKHNsb3RCYXNlKTsKKyAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqID0ganNDYXN0PEpTRnVu
Y3Rpb24qPihzbG90QmFzZSk7CiAgICAgQVNTRVJUKCF0aGlzT2JqLT5pc0hvc3RGdW5jdGlvbigp
KTsKICAgICByZXR1cm4ganNOdW1iZXIodGhpc09iai0+anNFeGVjdXRhYmxlKCktPnBhcmFtZXRl
ckNvdW50KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uaAkocmV2aXNpb24gMTExNTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVm
IEpTRnVuY3Rpb25faAogI2RlZmluZSBKU0Z1bmN0aW9uX2gKIAorI2luY2x1ZGUgIkludGVybmFs
RnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTE1MywxMiArMTU0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdyaXRlQmFycmllcjxT
Y29wZUNoYWluTm9kZT4gbV9zY29wZUNoYWluOwogICAgIH07CiAKLSAgICBKU0Z1bmN0aW9uKiBh
c0Z1bmN0aW9uKEpTVmFsdWUpOwotCi0gICAgaW5saW5lIEpTRnVuY3Rpb24qIGFzRnVuY3Rpb24o
SlNWYWx1ZSB2YWx1ZSkKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc0Z1bmN0aW9uKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZKU0Z1
bmN0aW9uOjpzX2luZm8pKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24q
Pihhc09iamVjdCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gaXNDZWxsKCkgJiYgKGFzQ2VsbCgp
LT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSB8fCBhc0NlbGwoKS0+aW5oZXJpdHMoJklu
dGVybmFsRnVuY3Rpb246OnNfaW5mbykpOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJ
KHJldmlzaW9uIDExMTUwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgaW5saW5lIHZvaWQg
UmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0NlbAogewogICAgIGlmICghY2VsbC0+aW5oZXJpdHMo
JkpTRnVuY3Rpb246OnNfaW5mbykpCiAgICAgICAgIHJldHVybjsKLSAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IGFzRnVuY3Rpb24oY2VsbCk7CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwogICAgIGlmICghZnVuY3Rpb24tPmV4ZWN1dGFibGUo
KSB8fCBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICBy
ZXR1cm47CiAgICAgZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLT5kaXNjYXJkQ29kZSgpOwpAQCAt
NDc4LDcgKzQ3OCw3IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW8K
ICAgICAgICAgICAgIGlmIChjZWxsLT5pbmhlcml0cygmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZv
KSkKICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0
YWJsZSo+KCpwdHIpOwogICAgICAgICAgICAgZWxzZSBpZiAoY2VsbC0+aW5oZXJpdHMoJkpTRnVu
Y3Rpb246OnNfaW5mbykpIHsKLSAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IGFzRnVuY3Rpb24oKnB0cik7CisgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24g
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KCpwdHIpOwogICAgICAgICAgICAgICAgIGlmIChmdW5jdGlv
bi0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHJldmlzaW9uIDExMTUwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTczLDYgKzE3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIFF1ZXJ5
aW5nIHRoZSB0eXBlLgogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICAgICAgYm9v
bCBpc0Z1bmN0aW9uKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNVbmRlZmluZWQoKSBjb25zdDsK
ICAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc1VuZGVmaW5lZE9y
TnVsbCgpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMTE2MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NzksNyArNDc5LDcgQEAgc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYQog
ICAgIGlmIChnbG9iYWwgJiYgY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykgewogICAgICAgICAvLyBy
ZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxIGZvciBwYXR0ZXJuIGFyZ3MsICsgMiBmb3IgbWF0
Y2ggc3RhcnQgYW5kIHN0cmluZwogICAgICAgICBpbnQgYXJnQ291bnQgPSByZWdFeHAtPm51bVN1
YnBhdHRlcm5zKCkgKyAxICsgMjsKLSAgICAgICAgSlNGdW5jdGlvbiogZnVuYyA9IGFzRnVuY3Rp
b24ocmVwbGFjZVZhbHVlKTsKKyAgICAgICAgSlNGdW5jdGlvbiogZnVuYyA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4ocmVwbGFjZVZhbHVlKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4
ZWMsIGZ1bmMsIGFyZ0NvdW50KTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Cg==
</data>
<flag name="review"
          id="137251"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="137265"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>