<?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>146154</bug_id>
          
          <creation_ts>2015-06-19 11:54:49 -0700</creation_ts>
          <short_desc>Employ explicit operator bool() instead of using the UnspecifiedBoolType workaround.</short_desc>
          <delta_ts>2015-06-19 14:19:28 -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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1103344</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-19 11:54:49 -0700</bug_when>
    <thetext>This also fixes a bug in CodeOrigin::isApproximatelyEqualTo() due to an unexpected implicit cast from the UnspecifiedBoolType workaround.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103347</commentid>
    <comment_count>1</comment_count>
      <attachid>255209</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-19 12:00:23 -0700</bug_when>
    <thetext>Created attachment 255209
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103355</commentid>
    <comment_count>2</comment_count>
      <attachid>255209</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-19 12:10:50 -0700</bug_when>
    <thetext>Comment on attachment 255209
the patch.

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

I’m a little surprised that adopting the real operator bool involves introducing so many cases of !!, which I have always thought of as an idiom we wanted to avoid, popular on Windows for some reason.

&gt; Source/JavaScriptCore/bytecode/CodeOrigin.cpp:77
&gt; +        if (a.inlineCallFrame-&gt;executable.get() != b.inlineCallFrame-&gt;executable.get())

Looks like this is possibly a change in behavior. Is this a bug fix?

I prefer that we add an overload for the != operator rather than adding the calls to .get() here.

&gt; Source/JavaScriptCore/bytecode/LLIntCallLinkInfo.h:48
&gt; +    bool isLinked() { return !!callee; }

Ugly. Any better alternative? Maybe a local variable?

&gt; Source/JavaScriptCore/heap/Handle.h:55
&gt; +    explicit operator bool() const { return (m_slot &amp;&amp; *m_slot); }

No need for the parentheses here.

&gt; Source/JavaScriptCore/runtime/JSArray.cpp:379
&gt; +            bool hadValue = !!valueSlot;

I think you can write this modern variant:

    bool hadValue { valueSlot };

I, for one, like that better than !!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103378</commentid>
    <comment_count>3</comment_count>
      <attachid>255209</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-19 13:19:39 -0700</bug_when>
    <thetext>Comment on attachment 255209
the patch.

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

&gt;&gt; Source/JavaScriptCore/bytecode/CodeOrigin.cpp:77
&gt;&gt; +        if (a.inlineCallFrame-&gt;executable.get() != b.inlineCallFrame-&gt;executable.get())
&gt; 
&gt; Looks like this is possibly a change in behavior. Is this a bug fix?
&gt; 
&gt; I prefer that we add an overload for the != operator rather than adding the calls to .get() here.

I agree with this change.

I believe that isApproximatelyEqualTo() is not used on any critical path - it&apos;s mostly for our bytecode profiler.  Mark, can you confirm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103397</commentid>
    <comment_count>4</comment_count>
      <attachid>255209</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-19 13:48:26 -0700</bug_when>
    <thetext>Comment on attachment 255209
the patch.

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

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/CodeOrigin.cpp:77
&gt;&gt;&gt; +        if (a.inlineCallFrame-&gt;executable.get() != b.inlineCallFrame-&gt;executable.get())
&gt;&gt; 
&gt;&gt; Looks like this is possibly a change in behavior. Is this a bug fix?
&gt;&gt; 
&gt;&gt; I prefer that we add an overload for the != operator rather than adding the calls to .get() here.
&gt; 
&gt; I agree with this change.
&gt; 
&gt; I believe that isApproximatelyEqualTo() is not used on any critical path - it&apos;s mostly for our bytecode profiler.  Mark, can you confirm?

To answer Darin&apos;s question, yes, this is also a bug fix.

To answer Fil, this is used in CallLinkStatus::ContextMap which in turn is used for poly-variant call inlining, ByteCodeParser::handleCall(), and ByteCodeParser::handleVarargsCall().  It doesn&apos;t look related to the bytecode profiler.

&gt;&gt; Source/JavaScriptCore/bytecode/LLIntCallLinkInfo.h:48
&gt;&gt; +    bool isLinked() { return !!callee; }
&gt; 
&gt; Ugly. Any better alternative? Maybe a local variable?

I&apos;m opting to leave this as is as it is more concise.

&gt;&gt; Source/JavaScriptCore/runtime/JSArray.cpp:379
&gt;&gt; +            bool hadValue = !!valueSlot;
&gt; 
&gt; I think you can write this modern variant:
&gt; 
&gt;     bool hadValue { valueSlot };
&gt; 
&gt; I, for one, like that better than !!.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103403</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-19 14:19:28 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r185768: &lt;http://trac.webkit.org/r185768&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255209</attachid>
            <date>2015-06-19 12:00:23 -0700</date>
            <delta_ts>2015-06-19 12:10:50 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-146154.patch</filename>
            <type>text/plain</type>
            <size>16741</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1NzU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBA
CisyMDE1LTA2LTE5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBF
bXBsb3kgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGluc3RlYWQgb2YgdXNpbmcgdGhlIFVuc3Bl
Y2lmaWVkQm9vbFR5cGUgd29ya2Fyb3VuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NjE1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmRhdGFMb2NhdGlvbik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6dHJ5VG9EaXNhc3NlbWJsZSk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjo6ZHVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
Q29kZVB0cjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSopOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5
cGUqKTogRGVsZXRlZC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlT3JpZ2luOjppc0FwcHJveGltYXRlbHlFcXVhbFRvKToKKyAgICAgICAg
LSBGaXhlZCBhIGJ1ZyBoZXJlIHdoZXJlIHdlIHdlcmUgZXhwZWN0aW5nIHRvIGNvbXBhcmUgRXhl
Y3V0YWJsZSBwb2ludGVycywgYnV0CisgICAgICAgICAgZW5kZWQgdXAgY29tcGFyaW5nIGEgKFVu
c3BlY2lmaWVkQm9vbFR5cGUqKTEgd2l0aCBhbm90aGVyCisgICAgICAgICAgKFVuc3BlY2lmaWVk
Qm9vbFR5cGUqKTEuCisKKyAgICAgICAgKiBieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oOgor
ICAgICAgICAoSlNDOjpMTEludENhbGxMaW5rSW5mbzo6fkxMSW50Q2FsbExpbmtJbmZvKToKKyAg
ICAgICAgKEpTQzo6TExJbnRDYWxsTGlua0luZm86OmlzTGlua2VkKToKKyAgICAgICAgKEpTQzo6
TExJbnRDYWxsTGlua0luZm86OnVubGluayk6CisgICAgICAgICogZGZnL0RGR0Jsb2NrV29ya2xp
c3QuaDoKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1dpdGg6OkJsb2NrV2l0aCk6CisgICAgICAg
IChKU0M6OkRGRzo6QmxvY2tXaXRoOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja1dpdGhPcmRlcjo6QmxvY2tXaXRoT3JkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJs
b2NrV2l0aE9yZGVyOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1dp
dGg6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpCbG9ja1dpdGhPcmRlcjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSopOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5j
cHA6CisgICAgICAgICogZGZnL0RGR0xhenlOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6TGF6
eU5vZGU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eU5vZGU6Om9wZXJhdG9y
IGJvb2wpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlOb2RlOjpvcGVyYXRvciBVbnNwZWNpZmll
ZEJvb2xUeXBlKik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9Db3B5V3JpdGVCYXJyaWVyLmg6
CisgICAgICAgIChKU0M6OkNvcHlXcml0ZUJhcnJpZXI6Om9wZXJhdG9yISk6CisgICAgICAgIChK
U0M6OkNvcHlXcml0ZUJhcnJpZXI6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpDb3B5
V3JpdGVCYXJyaWVyOjpnZXQpOgorICAgICAgICAoSlNDOjpDb3B5V3JpdGVCYXJyaWVyOjpvcGVy
YXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IYW5k
bGUuaDoKKyAgICAgICAgKEpTQzo6SGFuZGxlQmFzZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpT
Qzo6SGFuZGxlQmFzZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkhhbmRsZUJhc2U6
OnNsb3QpOgorICAgICAgICAoSlNDOjpIYW5kbGVCYXNlOjpvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKik6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TdHJvbmcuaDoKKyAgICAgICAgKEpT
Qzo6U3Ryb25nOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpTdHJvbmc6Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAoSlNDOjpTdHJvbmc6OnN3YXApOgorICAgICAgICAoSlNDOjpTdHJvbmc6
Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQv
SklUV3JpdGVCYXJyaWVyLmg6CisgICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllckJhc2U6Om9w
ZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpKSVRXcml0ZUJhcnJpZXJCYXNlOjpvcGVyYXRv
ciEpOgorICAgICAgICAoSlNDOjpKSVRXcml0ZUJhcnJpZXJCYXNlOjpzZXRGbGFnT25CYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6SklUV3JpdGVCYXJyaWVyQmFzZTo6b3BlcmF0b3IgVW5zcGVjaWZp
ZWRCb29sVHlwZSopOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZUlu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6SlNWYWx1ZSk6CisgICAgICAgIChKU0M6
OkpTVmFsdWU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSopOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6Omhhc1NwYXJzZU1hcCk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURl
c2NyaXB0b3IuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yOjp3cml0YWJsZVBy
ZXNlbnQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3I6OmVudW1lcmFibGVQcmVz
ZW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yOjpjb25maWd1cmFibGVQcmVz
ZW50KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yOjpzZXR0ZXJQcmVzZW50KToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yOjpnZXR0ZXJQcmVzZW50KToKKyAgICAg
ICAgKiBydW50aW1lL1dyaXRlQmFycmllci5oOgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJC
YXNlOjpzbG90KToKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyQmFzZTo6b3BlcmF0b3IgYm9v
bCk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJhc2U6Om9wZXJhdG9yISk6CisgICAgICAg
IChKU0M6OldyaXRlQmFycmllckJhc2U8VW5rbm93bj46OnRhZ1BvaW50ZXIpOgorICAgICAgICAo
SlNDOjpXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+OjpwYXlsb2FkUG9pbnRlcik6CisgICAgICAg
IChKU0M6OldyaXRlQmFycmllckJhc2U8VW5rbm93bj46Om9wZXJhdG9yIGJvb2wpOgorICAgICAg
ICAoSlNDOjpXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+OjpvcGVyYXRvciEpOgorICAgICAgICAo
SlNDOjpXcml0ZUJhcnJpZXJCYXNlOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJhc2U8VW5rbm93bj46Om9wZXJhdG9y
IFVuc3BlY2lmaWVkQm9vbFR5cGUqKTogRGVsZXRlZC4KKwogMjAxNS0wNi0xOSAgSm9zZXBoIFBl
Y29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEF2
b2lkIGdldE93blByb3BlcnR5TmFtZXMvU3ltYm9scyBvbiB2ZXJ5IGxhcmdlIGxpc3RzCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmgJKHJldmlzaW9uIDE4NTc1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
OCwxMSArMzE4LDcgQEAgcHVibGljOgogICAgIHZvaWQqIGRhdGFMb2NhdGlvbigpIGNvbnN0IHsg
QVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsgcmV0dXJuIG1fdmFsdWU7IH0KICNl
bmRpZgogCi0gICAgdHlwZWRlZiB2b2lkKiAoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjoqVW5zcGVj
aWZpZWRCb29sVHlwZSk7Ci0gICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuICEhbV92YWx1ZSA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5z
cGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsKLSAgICB9CisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBvdGhlcikgY29uc3QKICAgICB7CkBAIC00
NDIsMTEgKzQzOCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQzo6dHJ5VG9EaXNhc3Nl
bWJsZShtX2NvZGVQdHIsIHNpemUoKSwgcHJlZml4LCBXVEY6OmRhdGFGaWxlKCkpOwogICAgIH0K
ICAgICAKLSAgICB0eXBlZGVmIHZvaWQqIChNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OipVbnNwZWNp
ZmllZEJvb2xUeXBlKTsKLSAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gISFtX2NvZGVQdHIgPyByZWludGVycHJldF9jYXN0PFVu
c3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7Ci0gICAgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fY29kZVB0cjsgfQogICAgIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE4NTc1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNyArNzQsNyBAQCBib29sIENvZGVPcmlnaW46OmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oCiAgICAgICAgIGlmICghYS5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgCi0gICAgICAgIGlmIChhLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJs
ZSAhPSBiLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZSkKKyAgICAgICAgaWYgKGEuaW5saW5l
Q2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpICE9IGIuaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRh
YmxlLmdldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAg
YSA9IGEuaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTg1NzU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RydWN0IExMSW50Q2FsbExpbmtJbmZv
IDogcHVibGljIEJhc2ljUgogICAgICAgICAgICAgcmVtb3ZlKCk7CiAgICAgfQogICAgIAotICAg
IGJvb2wgaXNMaW5rZWQoKSB7IHJldHVybiBjYWxsZWU7IH0KKyAgICBib29sIGlzTGlua2VkKCkg
eyByZXR1cm4gISFjYWxsZWU7IH0KICAgICAKICAgICB2b2lkIHVubGluaygpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmtsaXN0LmgJKHJldmlz
aW9uIDE4NTc1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMSArNjUsNyBAQCBzdHJ1Y3QgQmxvY2tXaXRoIHsK
ICAgICB7CiAgICAgfQogICAgIAotICAgIHR5cGVkZWYgdm9pZCogKEJsb2NrV2l0aDxUPjo6KlVu
c3BlY2lmaWVkQm9vbFR5cGUpOwotICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBibG9jayA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5z
cGVjaWZpZWRCb29sVHlwZSo+KDEpIDogbnVsbHB0cjsKLSAgICB9CisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGJsb2NrOyB9CiAKICAgICBCYXNpY0Jsb2NrKiBi
bG9jazsKICAgICBUIGRhdGE7CkBAIC0xNDEsMTEgKzEzNyw3IEBAIHN0cnVjdCBCbG9ja1dpdGhP
cmRlciB7CiAgICAgewogICAgIH0KICAgICAKLSAgICB0eXBlZGVmIHZvaWQqIChCbG9ja1dpdGhP
cmRlcjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwotICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9v
bFR5cGUqKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBibG9jayA/IHJlaW50ZXJwcmV0
X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogbnVsbHB0cjsKLSAgICB9CisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGJsb2NrOyB9CiAKICAgICBCYXNp
Y0Jsb2NrKiBibG9jazsKICAgICBWaXNpdE9yZGVyIG9yZGVyOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4NTc1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTQsMTAgKzExNCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB0eXBlZGVmIHZvaWQqIChS
ZWxhdGlvbnNoaXA6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKIAotICAgIG9wZXJhdG9yIFVuc3Bl
Y2lmaWVkQm9vbFR5cGUqKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2xlZnQgPyBy
ZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7Ci0gICAgfQorICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KICAgICAK
ICAgICBOb2RlKiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CiAgICAgTm9kZSogcmln
aHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xhenlOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMYXp5Tm9kZS5oCShyZXZpc2lvbiAxODU3NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xhenlOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwxMiArMTQxLDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhYXNWYWx1
ZSgpICYmICFhc05vZGUoKTsgfQogCi0gICAgdHlwZWRlZiB2b2lkKiAoTGF6eU5vZGU6OipVbnNw
ZWNpZmllZEJvb2xUeXBlKTsKLQotICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhISp0aGlzID8gcmVpbnRlcnByZXRfY2FzdDxV
bnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOwotICAgIH0KKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISEqdGhpczsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3B5V3JpdGVCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVdyaXRlQmFycmllci5oCShyZXZpc2lvbiAxODU3NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5V3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDgg
KzUwLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fdmFsdWU7IH0KICAgICAKLSAgICB0eXBlZGVmIFQqIChDb3B5V3JpdGVCYXJyaWVyOjoq
VW5zcGVjaWZpZWRCb29sVHlwZSk7Ci0gICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSoo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJv
b2xUeXBlKj4oMSkgOiAwOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KICAgICAKICAgICBUKiBnZXQoKSBjb25zdAogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oCShyZXZpc2lvbiAxODU3NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSAr
NTIsNyBAQCBjbGFzcyBIYW5kbGVCYXNlIHsKIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFtX3Nsb3QgfHwgISptX3Nsb3Q7IH0KIAotICAgIC8vIFRoaXMgY29u
dmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBu
b3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KLSAgICB0eXBlZGVmIEpTVmFsdWUgKEhhbmRsZUJh
c2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKLSAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xU
eXBlKigpIGNvbnN0IHsgcmV0dXJuIChtX3Nsb3QgJiYgKm1fc2xvdCkgPyByZWludGVycHJldF9j
YXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gKG1fc2xvdCAmJiAqbV9zbG90KTsgfQogCiAgICAgSGFu
ZGxlU2xvdCBzbG90KCkgY29uc3QgeyByZXR1cm4gbV9zbG90OyB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N0cm9uZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1N0cm9uZy5oCShyZXZpc2lvbiAxODU3NTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdHJvbmcuaAkod29ya2luZyBjb3B5KQpAQCAtODQsOSArODQsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFzbG90KCkgfHwg
ISpzbG90KCk7IH0KIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1w
bGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4K
LSAgICB0eXBlZGVmIEpTVmFsdWUgKEhhbmRsZUJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsK
LSAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuICEhKnRo
aXMgPyByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7IH0KKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISEqdGhpczsgfQogCiAg
ICAgdm9pZCBzd2FwKFN0cm9uZyYgb3RoZXIpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCShyZXZpc2lvbiAxODU3NTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw4ICs0Myw3IEBAIGNsYXNzIFZNOwogI2RlZmluZSBKSVRXcml0ZUJhcnJpZXJGbGFnICgo
dm9pZCopMikKIGNsYXNzIEpJVFdyaXRlQmFycmllckJhc2UgewogcHVibGljOgotICAgIHR5cGVk
ZWYgdm9pZCogKEpJVFdyaXRlQmFycmllckJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKLSAg
ICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIGdldCgpID8g
cmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOyB9CisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CiAgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0RmxhZ09u
QmFycmllcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNw
cAkocmV2aXNpb24gMTg1NzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Niw3ICszNzYsNyBAQCBib29sIEpTQXJyYXk6
OnNldExlbmd0aFdpdGhBcnJheVN0b3JhZ2UoCiAgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JM
ZW5ndGggPSBtaW4obGVuZ3RoLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG5ld0xlbmd0aDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewog
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZVNsb3QgPSBzdG9yYWdlLT5t
X3ZlY3RvcltpXTsKLSAgICAgICAgICAgIGJvb2wgaGFkVmFsdWUgPSB2YWx1ZVNsb3Q7CisgICAg
ICAgICAgICBib29sIGhhZFZhbHVlID0gISF2YWx1ZVNsb3Q7CiAgICAgICAgICAgICB2YWx1ZVNs
b3QuY2xlYXIoKTsKICAgICAgICAgICAgIHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgLT0g
aGFkVmFsdWU7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9uIDE4NTc1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDggKzE5NSw3IEBA
IHB1YmxpYzoKICAgICBleHBsaWNpdCBKU1ZhbHVlKGxvbmcgbG9uZyk7CiAgICAgZXhwbGljaXQg
SlNWYWx1ZSh1bnNpZ25lZCBsb25nIGxvbmcpOwogCi0gICAgdHlwZWRlZiB2b2lkKiAoSlNWYWx1
ZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwotICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5
cGUqKCkgY29uc3Q7CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0OwogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBKU1ZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAx
ODU3NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsMTAgKzIxMywxMCBAQCBpbmxpbmUgSlNWYWx1ZTo6
SlNWYWx1ZShjb25zdCBKU0NlbGwqIHB0CiAgICAgdS5hc0JpdHMucGF5bG9hZCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50MzJfdD4oY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpKTsKIH0KIAotaW5saW5l
IEpTVmFsdWU6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QKK2lubGluZSBK
U1ZhbHVlOjpvcGVyYXRvciBib29sKCkgY29uc3QKIHsKICAgICBBU1NFUlQodGFnKCkgIT0gRGVs
ZXRlZFZhbHVlVGFnKTsKLSAgICByZXR1cm4gdGFnKCkgIT0gRW1wdHlWYWx1ZVRhZyA/IHJlaW50
ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsKKyAgICByZXR1cm4gdGFn
KCkgIT0gRW1wdHlWYWx1ZVRhZzsKIH0KIAogaW5saW5lIGJvb2wgSlNWYWx1ZTo6b3BlcmF0b3I9
PShjb25zdCBKU1ZhbHVlJiBvdGhlcikgY29uc3QKQEAgLTM2Miw5ICszNjIsOSBAQCBpbmxpbmUg
SlNWYWx1ZTo6SlNWYWx1ZShjb25zdCBKU0NlbGwqIHB0CiAgICAgdS5hc0ludDY0ID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvbnN0X2Nhc3Q8SlNDZWxsKj4ocHRyKSk7CiB9CiAKLWlu
bGluZSBKU1ZhbHVlOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0Citpbmxp
bmUgSlNWYWx1ZTo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHUuYXNJbnQ2
NCA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsKKyAgICBy
ZXR1cm4gdS5hc0ludDY0OwogfQogCiBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpvcGVyYXRvcj09KGNv
bnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxODU3NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNyArNDI5LDcgQEAg
cHVibGljOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOgotICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV9zcGFyc2VNYXA7CisgICAgICAgICAgICByZXR1cm4gISFtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVz
Y3JpcHRvci5oCShyZXZpc2lvbiAxODU3NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCArNzcsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCB3cml0YWJsZVByZXNlbnQoKSBjb25zdCB7IHJldHVybiBtX3Nl
ZW5BdHRyaWJ1dGVzICYgV3JpdGFibGVQcmVzZW50OyB9CiAgICAgYm9vbCBlbnVtZXJhYmxlUHJl
c2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VlbkF0dHJpYnV0ZXMgJiBFbnVtZXJhYmxlUHJlc2Vu
dDsgfQogICAgIGJvb2wgY29uZmlndXJhYmxlUHJlc2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vl
bkF0dHJpYnV0ZXMgJiBDb25maWd1cmFibGVQcmVzZW50OyB9Ci0gICAgYm9vbCBzZXR0ZXJQcmVz
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zZXR0ZXI7IH0KLSAgICBib29sIGdldHRlclByZXNlbnQo
KSBjb25zdCB7IHJldHVybiBtX2dldHRlcjsgfQorICAgIGJvb2wgc2V0dGVyUHJlc2VudCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9zZXR0ZXI7IH0KKyAgICBib29sIGdldHRlclByZXNlbnQoKSBjb25z
dCB7IHJldHVybiAhIW1fZ2V0dGVyOyB9CiAgICAgYm9vbCBlcXVhbFRvKEV4ZWNTdGF0ZSosIGNv
bnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0OwogICAgIGJvb2wgYXR0cmlidXRl
c0VxdWFsKGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0OwogICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGN1cnJlbnQpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3Jp
dGVCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V3JpdGVCYXJyaWVyLmgJKHJldmlzaW9uIDE4NTc1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOCArMTEzLDcg
QEAgcHVibGljOgogICAgIAogICAgIFQqKiBzbG90KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxUKio+KCZtX2NlbGwpOyB9CiAgICAgCi0gICAgdHlwZWRlZiBUKiAoV3JpdGVCYXJyaWVyQmFz
ZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwotICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5
cGUqKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmll
ZEJvb2xUeXBlKj4oMSkgOiAwOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2VsbDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIW1fY2VsbDsgfQogCkBAIC0xNjUsOCArMTY0LDcgQEAgcHVibGljOgogICAgIGludDMy
X3QqIHRhZ1BvaW50ZXIoKSB7IHJldHVybiAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqPigmbV92YWx1ZSktPmFzQml0cy50YWc7IH0KICAgICBpbnQzMl90KiBwYXlsb2FkUG9p
bnRlcigpIHsgcmV0dXJuICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KCZt
X3ZhbHVlKS0+YXNCaXRzLnBheWxvYWQ7IH0KICAgICAKLSAgICB0eXBlZGVmIEpTVmFsdWUgKFdy
aXRlQmFycmllckJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKLSAgICBvcGVyYXRvciBVbnNw
ZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIGdldCgpID8gcmVpbnRlcnByZXRfY2Fz
dDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICEhZ2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFnZXQoKTsgfSAKICAgICAKIHByaXZhdGU6Cg==
</data>
<flag name="review"
          id="280268"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>