<?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>194250</bug_id>
          
          <creation_ts>2019-02-04 16:22:02 -0800</creation_ts>
          <short_desc>B3ReduceStrength: missing peephole optimizations for Neg and Sub</short_desc>
          <delta_ts>2019-02-07 16:32:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>154319</blocked>
    
    <blocked>194420</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1502089</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-04 16:22:02 -0800</bug_when>
    <thetext>In particular:
- Sub(x, x) =&gt; 0
- Sub(x1, Neg(x2)) =&gt; Add (x1, x2)
- Abs(Neg(x)) =&gt; Abs(x)
- Neg(Sub(x1, x2)) =&gt; Sub(x2, x1)
- Add(x1, Neg(x2)) =&gt; Sub(x1, x2)
- Add(Neg(x1), x2) =&gt; Sub(x2, x1)

I don&apos;t expect the performance benefit to be significant, but this is very low-hanging fruit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502139</commentid>
    <comment_count>1</comment_count>
      <attachid>361134</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-04 17:12:19 -0800</bug_when>
    <thetext>Created attachment 361134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502146</commentid>
    <comment_count>2</comment_count>
      <attachid>361134</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-04 17:15:39 -0800</bug_when>
    <thetext>Comment on attachment 361134
Patch

Can you add B3 tests for each of these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502156</commentid>
    <comment_count>3</comment_count>
      <attachid>361134</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-04 17:24:14 -0800</bug_when>
    <thetext>Comment on attachment 361134
Patch

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

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:584
&gt; +                // Turn this: Integer Add(value, Neg(otherValue))
&gt; +                // Into this: Sub(value, otherValue)

Does this actually need to only be done on Int types?

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:591
&gt; +                // Turn this: Integer Add(Neg(value), otherValue)
&gt; +                // Into this: Sub(otherValue, value)

Ditto

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:642
&gt; +                // Turn this: Sub(value, Neg(otherValue))
&gt; +                // Into this: Add(value, otherValue)

Can this also be done for floating point types?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502178</commentid>
    <comment_count>4</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-04 17:40:17 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; Comment on attachment 361134 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361134&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:584
&gt; &gt; +                // Turn this: Integer Add(value, Neg(otherValue))
&gt; &gt; +                // Into this: Sub(value, otherValue)
&gt; 
&gt; Does this actually need to only be done on Int types?
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:591
&gt; &gt; +                // Turn this: Integer Add(Neg(value), otherValue)
&gt; &gt; +                // Into this: Sub(otherValue, value)
&gt; 
&gt; Ditto
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:642
&gt; &gt; +                // Turn this: Sub(value, Neg(otherValue))
&gt; &gt; +                // Into this: Add(value, otherValue)
&gt; 
&gt; Can this also be done for floating point types?

I am not entirely sure, and I decided to play it safe. The following sentence in particular scares me:
&quot;Because of negative zero (and also when the rounding mode is upward or downward), the expressions −(x − y) and (−x) − (−y), for floating-point variables x and y, cannot be replaced by y − x. However (−0) + x can be replaced by x with rounding to nearest (except when x can be a signaling NaN).&quot; (from https://en.wikipedia.org/wiki/Signed_zero).
I am not familiar enough with the subtleties of floating point arithmetic to try to do anything smart with floats. While checking again, I realized I made the mistake above (i.e. forgot checking the type for Neg(Sub(x1, x2)) =&gt; Sub(x2, x1).

I will submit soon a new patch with this bug fixed, and tests (I did not know about testB3.cpp, it should make it easy).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502487</commentid>
    <comment_count>5</comment_count>
      <attachid>361215</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-05 13:19:11 -0800</bug_when>
    <thetext>Created attachment 361215
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502496</commentid>
    <comment_count>6</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-05 13:36:17 -0800</bug_when>
    <thetext>Note: There are exactly two optimizations affecting floats/doubles in this patch:
- Abs(Neg(x)) =&gt; Abs(x)
  This seems right to me, as Abs(x) always remove the sign bit and Neg just flips it, so even things like negative 0 should not be able to cause any trouble.
- Sub(x, x) =&gt; +0.0
   Based on wikipedia: &quot;x-x=x+(-x)=+0 (for any finite x, −0 when rounding toward negative)&quot;
    I assumed that we don&apos;t mess with the rounding mode, and it passed the tests. But if we ever decide to round towards negative, we will have to change/remove this optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503452</commentid>
    <comment_count>7</comment_count>
      <attachid>361215</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-06 13:39:23 -0800</bug_when>
    <thetext>Comment on attachment 361215
Patch

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

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:617
&gt; +            // Turn this: Sub(value, value)

I don’t think this is correct for NaN, right?
I think NaN - NaN = NaN</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503475</commentid>
    <comment_count>8</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-06 14:17:15 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #7)
&gt; Comment on attachment 361215 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361215&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:617
&gt; &gt; +            // Turn this: Sub(value, value)
&gt; 
&gt; I don’t think this is correct for NaN, right?
&gt; I think NaN - NaN = NaN

Good catch, I will remove this case. But I must first understand why it was not caught by the tests.
It should have been found by testSubArgDouble, as it is called on PNaN through 
RUN_UNARY(testSubArgDouble, floatingPointOperands&lt;double&gt;());
as floatingPointOperands&lt;double&gt; includes PNaN.

So I added some instrumentation.. and it appears that testB3 does not ever call B3ReduceStrength :-(. I&apos;m currently looking into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503505</commentid>
    <comment_count>9</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-06 15:19:12 -0800</bug_when>
    <thetext>(In reply to Robin Morisset from comment #8)
&gt; (In reply to Saam Barati from comment #7)
&gt; &gt; Comment on attachment 361215 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=361215&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:617
&gt; &gt; &gt; +            // Turn this: Sub(value, value)
&gt; &gt; 
&gt; &gt; I don’t think this is correct for NaN, right?
&gt; &gt; I think NaN - NaN = NaN
&gt; 
&gt; Good catch, I will remove this case. But I must first understand why it was
&gt; not caught by the tests.
&gt; It should have been found by testSubArgDouble, as it is called on PNaN
&gt; through 
&gt; RUN_UNARY(testSubArgDouble, floatingPointOperands&lt;double&gt;());
&gt; as floatingPointOperands&lt;double&gt; includes PNaN.
&gt; 
&gt; So I added some instrumentation.. and it appears that testB3 does not ever
&gt; call B3ReduceStrength :-(. I&apos;m currently looking into it.

I had simply forgotten to set DYLD_FRAMEWORK_PATH before running testB3, so it was running some system version of jsc, instead of my broken one..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503520</commentid>
    <comment_count>10</comment_count>
      <attachid>361341</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-06 16:08:02 -0800</bug_when>
    <thetext>Created attachment 361341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503600</commentid>
    <comment_count>11</comment_count>
      <attachid>361341</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-06 19:58:15 -0800</bug_when>
    <thetext>Comment on attachment 361341
Patch

Nice. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503790</commentid>
    <comment_count>12</comment_count>
      <attachid>361341</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-07 10:36:41 -0800</bug_when>
    <thetext>Comment on attachment 361341
Patch

Clearing flags on attachment: 361341

Committed r241126: &lt;https://trac.webkit.org/changeset/241126&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503791</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-07 10:36:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503793</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-07 10:38:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/47888576&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361134</attachid>
            <date>2019-02-04 17:12:19 -0800</date>
            <delta_ts>2019-02-05 13:19:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194250-20190204171218.patch</filename>
            <type>text/plain</type>
            <size>6168</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwOTQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDE5LTAyLTA0ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQjNSZWR1Y2VTdHJlbmd0aDogbWlzc2luZyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZv
ciBOZWcgYW5kIFN1YgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk0MjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkcyB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbnMgZm9yIGludGVnZXJzOgorICAg
ICAgICAtIFN1Yih4LCB4KSA9PiAwCisgICAgICAgIC0gU3ViKHgxLCBOZWcoeDIpKSA9PiBBZGQg
KHgxLCB4MikKKyAgICAgICAgLSBBYnMoTmVnKHgpKSA9PiBBYnMoeCkgKG5vdCBsaW1pdGVkIHRv
IGludGVnZXJzKQorICAgICAgICAtIE5lZyhTdWIoeDEsIHgyKSkgPT4gU3ViKHgyLCB4MSkKKyAg
ICAgICAgLSBBZGQoeDEsIE5lZyh4MikpID0+IFN1Yih4MSwgeDIpCisgICAgICAgIC0gQWRkKE5l
Zyh4MSksIHgyKSA9PiBTdWIoeDIsIHgxKQorCisgICAgICAgIEFsc28gZGlkIHNvbWUgdHJpdmlh
bCByZWZhY3RvcmluZywgdXNpbmcgbV92YWx1ZS0+aXNJbnRlZ2VyKCkgZXZlcnl3aGVyZSBpbnN0
ZWFkIG9mIGlzSW50KG1fdmFsdWUtPnR5cGUoKSksIGFuZCB1c2luZyByZXBsYWNlV2l0aE5ldzxW
YWx1ZT4gaW5zdGVhZCBvZiByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGQ8VmFsdWUoLi4p
KQorCisgICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisKIDIwMTktMDItMDQgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBTaHJpbmsg
c2l6ZSBvZiBGdW5jdGlvbkV4ZWN1dGFibGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDI0MDkzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDk5LDcgKzQ5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWRkOgogICAgICAgICAgICAg
aGFuZGxlQ29tbXV0YXRpdml0eSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEFkZCAmJiBpc0ludChtX3ZhbHVlLT50eXBlKCkp
KSB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEFkZCAm
JiBtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
QWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQogICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogQWRkKHZhbHVlLCBjb25zdGFudDEgKyBjb25zdGFudDIpCiAgICAgICAgICAg
ICAgICAgVmFsdWUqIG5ld1N1bSA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hZGRDb25zdGFudChtX3By
b2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CkBAIC01MzIsNyArNTMyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQob3RoZXJW
YWx1ZSwgQWRkKHZhbHVlLCBjb25zdGFudCkpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFk
ZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChpc0lu
dChtX3ZhbHVlLT50eXBlKCkpCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkK
ICAgICAgICAgICAgICAgICAmJiAhbV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludCgpCiAgICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEFkZAogICAgICAgICAg
ICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKQEAgLTU3
OSwxNCArNTc5LDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQoU3ViKDAsIHZh
bHVlKSwgLTEpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcih2YWx1ZSwgLTEpCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiBt
X3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU3ViCi0gICAgICAgICAgICAgICAgJiYgbV92
YWx1ZS0+Y2hpbGQoMSktPmlzSW50KC0xKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aE5ld1ZhbHVlKG1fcHJvYy5hZGQ8VmFsdWU+KEJpdFhvciwgbV92YWx1ZS0+b3JpZ2luKCksIG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMSkpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewor
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQodmFsdWUsIE5lZyhvdGhl
clZhbHVlKSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1Yih2YWx1ZSwgb3RoZXJW
YWx1ZSkKKyAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09
IE5lZykgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oU3ViLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5j
aGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQoTmVnKHZhbHVlKSwg
b3RoZXJWYWx1ZSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVl
LCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
ID09IE5lZykgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oU3Vi
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQoU3ViKDAsIHZh
bHVlKSwgLTEpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IodmFsdWUsIC0x
KQorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU3Vi
CisgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgtMSkKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5pc0ludCgw
KSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLCBtX3ZhbHVlLT5j
aGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7CkBAIC01OTksNyArNjE0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5pc0ludGVnZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZh
bHVlLCBjb25zdGFudCkKICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwg
LWNvbnN0YW50KQogICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogbmVnYXRlZENvbnN0YW50ID0g
bV92YWx1ZS0+Y2hpbGQoMSktPm5lZ0NvbnN0YW50KG1fcHJvYykpIHsKQEAgLTYxNSw2ICs2MzAs
MjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+
KE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCB2YWx1ZSkKKyAgICAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgMCkpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTdWIodmFsdWUsIE5lZyhvdGhlclZhbHVlKSkK
KyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSkKKyAg
ICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IE5lZykgewor
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQWRkLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7CkBAIC02MzQsNiArNjYzLDEzIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogTmVnKFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkpCisgICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKKyAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU3ViKSB7CisgICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KFN1YiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBNdWw6CkBAIC0xMjAxLDYgKzEyMzcsMTMgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogQWJzKE5lZyh2YWx1ZSkpCisgICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IEFicyh2YWx1ZSkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkgPT0gTmVnKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFicyhCaXR3aXNlQ2FzdCh2YWx1
ZSkpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdHdpc2VDYXN0KEFuZCh2YWx1ZSwgbWFz
ay10b3AtYml0KSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361215</attachid>
            <date>2019-02-05 13:19:11 -0800</date>
            <delta_ts>2019-02-06 16:08:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194250-20190205131910.patch</filename>
            <type>text/plain</type>
            <size>13895</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwOTg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE5LTAyLTA1ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQjNSZWR1Y2VTdHJlbmd0aDogbWlzc2luZyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZv
ciBOZWcgYW5kIFN1YgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk0MjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkcyB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbnMgZm9yIGludGVnZXJzOgorICAg
ICAgICAtIFN1Yih4MSwgTmVnKHgyKSkgPT4gQWRkICh4MSwgeDIpCisgICAgICAgICAgICBBZGRl
ZCB0ZXN0OiB0ZXN0U3ViTmVnCisgICAgICAgIC0gTmVnKFN1Yih4MSwgeDIpKSA9PiBTdWIoeDIs
IHgxKQorICAgICAgICAgICAgQWRkZWQgdGVzdDogdGVzdE5lZ1N1YgorICAgICAgICAtIEFkZChO
ZWcoeDEpLCB4MikgPT4gU3ViKHgyLCB4MSkKKyAgICAgICAgICAgIEFkZGVkIHRlc3Q6IHRlc3RB
ZGROZWcxCisgICAgICAgIC0gQWRkKHgxLCBOZWcoeDIpKSA9PiBTdWIoeDEsIHgyKQorICAgICAg
ICAgICAgQWRkZWQgdGVzdDogdGVzdEFkZE5lZzIKKyAgICAgICAgQWRkcyB0aGUgZm9sbG93aW5n
IG9wdGltaXphdGlvbiBmb3IgZmxvYXRpbmcgcG9pbnQgdmFsdWVzOgorICAgICAgICAtIEFicyhO
ZWcoeCkpID0+IEFicyh4KQorICAgICAgICAgICAgQWRkZWQgdGVzdDogdGVzdEFic05lZ0FyZwor
ICAgICAgICAgICAgQWRkcyB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbjoKKyAgICAgICAgLSBT
dWIoeCwgeCkgPT4gMCBvciArMC4wIGRlcGVuZGluZyBvbiB0aGUgdHlwZQorICAgICAgICAgICAg
QWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSB0ZXN0cyB0ZXN0U3ViQXJnLCB0ZXN0U3ViQXJnRmxvYXQg
YW5kIHRlc3RTdWJBcmdEb3VibGUKKworICAgICAgICBBbHNvIGRpZCBzb21lIHRyaXZpYWwgcmVm
YWN0b3JpbmcsIHVzaW5nIG1fdmFsdWUtPmlzSW50ZWdlcigpIGV2ZXJ5d2hlcmUgaW5zdGVhZCBv
ZiBpc0ludChtX3ZhbHVlLT50eXBlKCkpLCBhbmQgdXNpbmcgcmVwbGFjZVdpdGhOZXc8VmFsdWU+
IGluc3RlYWQgb2YgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkPFZhbHVlKC4uKSkKKwor
ICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL3Rlc3RiMy5j
cHA6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QWRkTmVnMSk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0QWRkTmVnMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3ViTmVnKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3ROZWdTdWIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEFic0Fic0FyZyk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0QWJzTmVnQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6
CisKIDIwMTktMDItMDUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbSlNDXSBTaHJpbmsgc2l6ZW9mKFVubGlua2VkQ29kZUJsb2NrKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMjQw
OTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OTksNyArNDk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBB
ZGQ6CiAgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQWRkICYmIGlzSW50
KG1fdmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
b3Bjb2RlKCkgPT0gQWRkICYmIG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCiAg
ICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIGNvbnN0YW50MSArIGNvbnN0
YW50MikKICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3U3VtID0gbV92YWx1ZS0+Y2hpbGQoMSkt
PmFkZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKQEAgLTUz
Miw3ICs1MzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IEFkZChvdGhlclZhbHVlLCBBZGQodmFsdWUsIGNvbnN0YW50KSkKICAgICAgICAgICAg
IC8vIEludG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNvbnN0YW50KQotICAg
ICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkKKyAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5pc0ludGVnZXIoKQogICAgICAgICAgICAgICAgICYmICFtX3ZhbHVlLT5jaGlsZCgwKS0+
aGFzSW50KCkKICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkg
PT0gQWRkCiAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5o
YXNJbnQoKSkgewpAQCAtNTc5LDE0ICs1NzksMjkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRl
Z2VyIEFkZChTdWIoMCwgdmFsdWUpLCAtMSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0
WG9yKHZhbHVlLCAtMSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKQotICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTdWIKLSAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoLTEpCi0gICAgICAgICAgICAg
ICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5pc0ludCgwKSkgewotICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZDxWYWx1ZT4oQml0WG9yLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLCBtX3ZhbHVlLT5jaGls
ZCgxKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmlzSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFk
ZCh2YWx1ZSwgTmVnKG90aGVyVmFsdWUpKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczog
U3ViKHZhbHVlLCBvdGhlclZhbHVlKQorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgxKS0+b3Bjb2RlKCkgPT0gTmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3PFZhbHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2Vy
IEFkZChOZWcodmFsdWUpLCBvdGhlclZhbHVlKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhp
czogU3ViKG90aGVyVmFsdWUsIHZhbHVlKQorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgwKS0+b3Bjb2RlKCkgPT0gTmVnKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3PFZhbHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSwg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRl
Z2VyIEFkZChTdWIoMCwgdmFsdWUpLCAtMSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEJpdFhvcih2YWx1ZSwgLTEpCisgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBTdWIKKyAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQo
MSktPmlzSW50KC0xKQorICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPmlzSW50KDApKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
PFZhbHVlPihCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSksIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsKQEAg
LTU5OSw3ICs2MTQsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkpIHsKKyAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCB2YWx1ZSkKKyAgICAgICAgICAgIC8v
IEludG8gdGhpczogMCAoZm9yIEludGVnZXJzKSBvciArMC4wIChmb3IgRmxvYXRpbmcgcG9pbnQg
dmFsdWVzKQorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNo
aWxkKDEpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0
YW50KG1fdmFsdWUsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gRmxvYXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkPENvbnN0
RmxvYXRWYWx1ZT4obV92YWx1ZS0+b3JpZ2luKCksICswLjApKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT50eXBlKCkgPT0gRG91YmxlKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
VmFsdWUobV9wcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihtX3ZhbHVlLT5vcmlnaW4oKSwgKzAu
MCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewogICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCBjb25zdGFudCkKICAgICAgICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgLWNvbnN0YW50KQogICAgICAgICAgICAg
ICAgIGlmIChWYWx1ZSogbmVnYXRlZENvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPm5lZ0Nv
bnN0YW50KG1fcHJvYykpIHsKQEAgLTYxNSw2ICs2NDcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KE5lZywgbV92YWx1ZS0+b3JpZ2luKCks
IG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogU3ViKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCisgICAgICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBBZGQodmFsdWUsIG90aGVyVmFsdWUpCisgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBOZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXc8VmFsdWU+KEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDAp
LCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNjM0LDYgKzY3MywxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IElu
dGVnZXIgTmVnKFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkpCisgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0lu
dGVnZXIoKSAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU3ViKSB7CisgICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KFN1YiwgbV92YWx1ZS0+b3JpZ2luKCksIG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgY2FzZSBNdWw6CkBAIC0xMjAxLDYgKzEyNDcsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWJzKE5lZyh2YWx1ZSkpCisgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IEFicyh2YWx1ZSkKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgw
KS0+b3Bjb2RlKCkgPT0gTmVnKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0
eShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFicyhCaXR3aXNlQ2Fz
dCh2YWx1ZSkpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdHdpc2VDYXN0KEFuZCh2YWx1
ZSwgbWFzay10b3AtYml0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShy
ZXZpc2lvbiAyNDA5NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjA5LDYgKzYwOSwzNiBAQCB2b2lkIHRlc3RBZGRJbW1NZW0zMihp
bnQzMl90IGEsIGludDMyX3QgCiAgICAgQ0hFQ0soaW5wdXRPdXRwdXQgPT0gYSArIGIpOwogfQog
Cit2b2lkIHRlc3RBZGROZWcxKGludCBhLCBpbnQgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2lu
KCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE5lZywgT3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKSkpOworICAgIAorICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBh
LCBiKSA9PSAoLSBhKSArIGIpOworfQorCit2b2lkIHRlc3RBZGROZWcyKGludCBhLCBpbnQgYikK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCks
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE5lZywgT3JpZ2luKCks
CisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSkpOworCisgICAgQ0hFQ0soY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyAoLSBiKSk7Cit9CisKIHZvaWQgdGVzdEFk
ZEFyZ1plcm9JbW1aRGVmKCkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTE4OTcsNiArMTky
NywzNiBAQCB2b2lkIHRlc3RTdWJBcmdJbW0oaW50NjRfdCBhLCBpbnQ2NF90IGIpCiAgICAgQ0hF
Q0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhKSA9PSBhIC0gYik7CiB9CiAKK3ZvaWQg
dGVzdFN1Yk5lZyhpbnQgYSwgaW50IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTdWIsIE9yaWdpbigpLAorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBOZWcsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KSkpKTsKKyAgICAKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikgPT0g
YSAtICgtIGIpKTsKK30KKwordm9pZCB0ZXN0TmVnU3ViKGludCBhLCBpbnQgYikKK3sKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIE5lZywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFN1YiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRS
dW48aW50Pihwcm9jLCBhLCBiKSA9PSAtKGEgLSBiKSk7Cit9CisKIHZvaWQgdGVzdE5lZ1ZhbHVl
U3ViT25lKGludCBhKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMzkxNyw3ICszOTc3LDE5
IEBAIHZvaWQgdGVzdEFic0Fic0FyZyhkb3VibGUgYSkKICAgICBWYWx1ZSogc2Vjb25kQWJzID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYnMsIE9yaWdpbigpLCBmaXJzdEFicyk7CiAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIHNl
Y29uZEFicyk7CiAKLSAgICBDSEVDSyhpc0lkZW50aWNhbChjb21waWxlQW5kUnVuPGRvdWJsZT4o
cHJvYywgYSksIGZhYnMoYSkpKTsKKyAgICBDSEVDSyhpc0lkZW50aWNhbChjb21waWxlQW5kUnVu
PGRvdWJsZT4ocHJvYywgYSksIGZhYnMoZmFicyhhKSkpKTsKK30KKwordm9pZCB0ZXN0QWJzTmVn
QXJnKGRvdWJsZSBhKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIG5lZyA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQWJzLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApKTsKKyAg
ICBWYWx1ZSogYWJzID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYnMsIE9yaWdpbigp
LCBuZWcpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBhYnMpOworICAgIAorICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48
ZG91YmxlPihwcm9jLCBhKSwgZmFicygtIGEpKSk7CiB9CiAKIHZvaWQgdGVzdEFic0JpdHdpc2VD
YXN0QXJnKGRvdWJsZSBhKQpAQCAtMzk5Nyw3ICs0MDY5LDIxIEBAIHZvaWQgdGVzdEFic0Fic0Fy
ZyhmbG9hdCBhKQogICAgIFZhbHVlKiBzZWNvbmRBYnMgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEFicywgT3JpZ2luKCksIGZpcnN0QWJzKTsKICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgc2Vjb25kQWJzKTsKIAotICAgIENIRUNL
KGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZmxvYXQ+KHByb2MsIGJpdHdpc2VfY2FzdDxpbnQz
Ml90PihhKSksIHN0YXRpY19jYXN0PGZsb2F0PihmYWJzKGEpKSkpOworICAgIENIRUNLKGlzSWRl
bnRpY2FsKGNvbXBpbGVBbmRSdW48ZmxvYXQ+KHByb2MsIGJpdHdpc2VfY2FzdDxpbnQzMl90Pihh
KSksIHN0YXRpY19jYXN0PGZsb2F0PihmYWJzKGZhYnMoYSkpKSkpOworfQorCit2b2lkIHRlc3RB
YnNOZWdBcmcoZmxvYXQgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmd1bWVudDMyID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CisgICAgVmFsdWUqIGFyZ3VtZW50ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBCaXR3aXNlQ2FzdCwgT3JpZ2luKCksIGFyZ3VtZW50MzIpOworICAgIFZhbHVlKiBuZWcg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE5lZywgT3JpZ2luKCksIGFyZ3VtZW50KTsK
KyAgICBWYWx1ZSogYWJzID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYnMsIE9yaWdp
bigpLCBuZWcpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCBhYnMpOworICAgIAorICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRS
dW48ZmxvYXQ+KHByb2MsIGJpdHdpc2VfY2FzdDxpbnQzMl90PihhKSksIHN0YXRpY19jYXN0PGZs
b2F0PihmYWJzKC0gYSkpKSk7CiB9CiAKIHZvaWQgdGVzdEFic0JpdHdpc2VDYXN0QXJnKGZsb2F0
IGEpCkBAIC0xNjM4Miw2ICsxNjQ2OCw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikK
ICAgICBSVU5fQklOQVJZKHRlc3RBZGRBcmdNZW0zMiwgaW50MzJPcGVyYW5kcygpLCBpbnQzMk9w
ZXJhbmRzKCkpOwogICAgIFJVTl9CSU5BUlkodGVzdEFkZE1lbUFyZzMyLCBpbnQzMk9wZXJhbmRz
KCksIGludDMyT3BlcmFuZHMoKSk7CiAgICAgUlVOX0JJTkFSWSh0ZXN0QWRkSW1tTWVtMzIsIGlu
dDMyT3BlcmFuZHMoKSwgaW50MzJPcGVyYW5kcygpKTsKKyAgICBSVU5fQklOQVJZKHRlc3RBZGRO
ZWcxLCBpbnQzMk9wZXJhbmRzKCksIGludDMyT3BlcmFuZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0
ZXN0QWRkTmVnMiwgaW50MzJPcGVyYW5kcygpLCBpbnQzMk9wZXJhbmRzKCkpOwogICAgIFJVTih0
ZXN0QWRkQXJnWmVyb0ltbVpEZWYoKSk7CiAgICAgUlVOKHRlc3RBZGRMb2FkVHdpY2UoKSk7CiAK
QEAgLTE2NTQ5LDYgKzE2NjM3LDggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAg
IFJVTl9CSU5BUlkodGVzdFN1Yk1lbUFyZywgaW50NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJhbmRz
KCkpOwogICAgIFJVTl9CSU5BUlkodGVzdFN1YkltbU1lbSwgaW50MzJPcGVyYW5kcygpLCBpbnQz
Mk9wZXJhbmRzKCkpOwogICAgIFJVTl9CSU5BUlkodGVzdFN1Yk1lbUltbSwgaW50MzJPcGVyYW5k
cygpLCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVzdFN1Yk5lZywgaW50MzJP
cGVyYW5kcygpLCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVzdE5lZ1N1Yiwg
aW50MzJPcGVyYW5kcygpLCBpbnQzMk9wZXJhbmRzKCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0TmVn
VmFsdWVTdWJPbmUsIGludDMyT3BlcmFuZHMoKSk7CiAKICAgICBSVU4odGVzdFN1YkFyZ3MzMigx
LCAxKSk7CkBAIC0xNjkwNSwxMiArMTY5OTUsMTQgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmls
dGVyKQogICAgIFJVTl9VTkFSWSh0ZXN0QWJzSW1tLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91
YmxlPigpKTsKICAgICBSVU5fVU5BUlkodGVzdEFic01lbSwgZmxvYXRpbmdQb2ludE9wZXJhbmRz
PGRvdWJsZT4oKSk7CiAgICAgUlVOX1VOQVJZKHRlc3RBYnNBYnNBcmcsIGZsb2F0aW5nUG9pbnRP
cGVyYW5kczxkb3VibGU+KCkpOworICAgIFJVTl9VTkFSWSh0ZXN0QWJzTmVnQXJnLCBmbG9hdGlu
Z1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKTsKICAgICBSVU5fVU5BUlkodGVzdEFic0JpdHdpc2VD
YXN0QXJnLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKTsKICAgICBSVU5fVU5BUlko
dGVzdEJpdHdpc2VDYXN0QWJzQml0d2lzZUNhc3RBcmcsIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxk
b3VibGU+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJzQXJnLCBmbG9hdGluZ1BvaW50T3BlcmFu
ZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJzSW1tLCBmbG9hdGluZ1BvaW50T3Bl
cmFuZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJzTWVtLCBmbG9hdGluZ1BvaW50
T3BlcmFuZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJzQWJzQXJnLCBmbG9hdGlu
Z1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpOworICAgIFJVTl9VTkFSWSh0ZXN0QWJzTmVnQXJnLCBm
bG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJzQml0
d2lzZUNhc3RBcmcsIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSk7CiAgICAgUlVOX1VO
QVJZKHRlc3RCaXR3aXNlQ2FzdEFic0JpdHdpc2VDYXN0QXJnLCBmbG9hdGluZ1BvaW50T3BlcmFu
ZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJzQXJnV2l0aFVzZWxlc3NEb3VibGVD
b252ZXJzaW9uLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361341</attachid>
            <date>2019-02-06 16:08:02 -0800</date>
            <delta_ts>2019-02-07 10:36:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch194250</filename>
            <type>text/plain</type>
            <size>13340</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxMTA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE5LTAyLTA2ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQjNSZWR1Y2VTdHJlbmd0aDogbWlzc2luZyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZv
ciBOZWcgYW5kIFN1YgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk0MjUwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkcyB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbnMgZm9yIGludGVnZXJzOgorICAg
ICAgICAtIFN1Yih4LCB4KSA9PiAwCisgICAgICAgICAgICBBbHJlYWR5IGNvdmVyZWQgYnkgdGhl
IHRlc3QgdGVzdFN1YkFyZworICAgICAgICAtIFN1Yih4MSwgTmVnKHgyKSkgPT4gQWRkICh4MSwg
eDIpCisgICAgICAgICAgICBBZGRlZCB0ZXN0OiB0ZXN0U3ViTmVnCisgICAgICAgIC0gTmVnKFN1
Yih4MSwgeDIpKSA9PiBTdWIoeDIsIHgxKQorICAgICAgICAgICAgQWRkZWQgdGVzdDogdGVzdE5l
Z1N1YgorICAgICAgICAtIEFkZChOZWcoeDEpLCB4MikgPT4gU3ViKHgyLCB4MSkKKyAgICAgICAg
ICAgIEFkZGVkIHRlc3Q6IHRlc3RBZGROZWcxCisgICAgICAgIC0gQWRkKHgxLCBOZWcoeDIpKSA9
PiBTdWIoeDEsIHgyKQorICAgICAgICAgICAgQWRkZWQgdGVzdDogdGVzdEFkZE5lZzIKKyAgICAg
ICAgQWRkcyB0aGUgZm9sbG93aW5nIG9wdGltaXphdGlvbiBmb3IgZmxvYXRpbmcgcG9pbnQgdmFs
dWVzOgorICAgICAgICAtIEFicyhOZWcoeCkpID0+IEFicyh4KQorICAgICAgICAgICAgQWRkZWQg
dGVzdDogdGVzdEFic05lZ0FyZworICAgICAgICAgICAgQWRkcyB0aGUgZm9sbG93aW5nIG9wdGlt
aXphdGlvbjoKKworICAgICAgICBBbHNvIGRpZCBzb21lIHRyaXZpYWwgcmVmYWN0b3JpbmcsIHVz
aW5nIG1fdmFsdWUtPmlzSW50ZWdlcigpIGV2ZXJ5d2hlcmUgaW5zdGVhZCBvZiBpc0ludChtX3Zh
bHVlLT50eXBlKCkpLCBhbmQgdXNpbmcgcmVwbGFjZVdpdGhOZXc8VmFsdWU+IGluc3RlYWQgb2Yg
cmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkPFZhbHVlKC4uKSkKKworICAgICAgICAqIGIz
L0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0QWRkTmVnMSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QWRkTmVnMik6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3ViTmVnKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RO
ZWdTdWIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEFic0Fic0FyZyk6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0QWJzTmVnQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTktMDIt
MDYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBQ
cml2YXRlTmFtZSB0byBQdWJsaWNOYW1lIGhhc2ggdGFibGUgaXMgd2FzdGVmdWwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9u
IDI0MTEwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDk5LDcgKzQ5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQWRkOgogICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEFkZCAmJiBp
c0ludChtX3ZhbHVlLT50eXBlKCkpKSB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPm9wY29kZSgpID09IEFkZCAmJiBtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewogICAgICAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQy
KQogICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlLCBjb25zdGFudDEgKyBj
b25zdGFudDIpCiAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld1N1bSA9IG1fdmFsdWUtPmNoaWxk
KDEpLT5hZGRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CkBA
IC01MzIsNyArNTMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBBZGQob3RoZXJWYWx1ZSwgQWRkKHZhbHVlLCBjb25zdGFudCkpCiAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkK
LSAgICAgICAgICAgIGlmIChpc0ludChtX3ZhbHVlLT50eXBlKCkpCisgICAgICAgICAgICBpZiAo
bV92YWx1ZS0+aXNJbnRlZ2VyKCkKICAgICAgICAgICAgICAgICAmJiAhbV92YWx1ZS0+Y2hpbGQo
MCktPmhhc0ludCgpCiAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29k
ZSgpID09IEFkZAogICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgx
KS0+aGFzSW50KCkpIHsKQEAgLTU3OSwxNCArNTc5LDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
SW50ZWdlciBBZGQoU3ViKDAsIHZhbHVlKSwgLTEpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEJpdFhvcih2YWx1ZSwgLTEpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkK
LSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU3ViCi0g
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KC0xKQotICAgICAgICAg
ICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGQ8VmFsdWU+KEJpdFhvciwg
bV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSwgbV92YWx1ZS0+
Y2hpbGQoMSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5pc0ludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdl
ciBBZGQodmFsdWUsIE5lZyhvdGhlclZhbHVlKSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkKKyAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPm9wY29kZSgpID09IE5lZykgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aE5ldzxWYWx1ZT4oU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCks
IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50
ZWdlciBBZGQoTmVnKHZhbHVlKSwgb3RoZXJWYWx1ZSkKKyAgICAgICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5lZykgeworICAgICAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ldzxWYWx1ZT4oU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQo
MSksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
SW50ZWdlciBBZGQoU3ViKDAsIHZhbHVlKSwgLTEpCisgICAgICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBCaXRYb3IodmFsdWUsIC0xKQorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gU3ViCisgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNo
aWxkKDEpLT5pc0ludCgtMSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApLT5pc0ludCgwKSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDEpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7
CkBAIC01OTksNyArNjE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkpIHsK
KyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewogICAgICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCBjb25zdGFudCkKICAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IEFkZCh2YWx1ZSwgLWNvbnN0YW50KQogICAgICAgICAgICAgICAgIGlmIChWYWx1
ZSogbmVnYXRlZENvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPm5lZ0NvbnN0YW50KG1fcHJv
YykpIHsKQEAgLTYxNSw2ICs2MzAsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXc8VmFsdWU+KE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNo
aWxkKDEpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTdWIodmFsdWUsIHZhbHVlKQorICAgICAg
ICAgICAgICAgIC8vIEludG8gdGhpczogMAorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgeworICAgICAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCAwKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCisgICAgICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIG90aGVyVmFsdWUpCisgICAgICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBOZWcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1f
dmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNjM0LDYgKzY2MywxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEludGVnZXIgTmVnKFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkpCisgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKKyAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5pc0ludGVnZXIoKSAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
U3ViKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KFN1YiwgbV92YWx1
ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBNdWw6CkBAIC0xMjAxLDYgKzEyMzcs
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFs
dWUtPmNoaWxkKDApKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWJzKE5lZyh2YWx1ZSkp
CisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFicyh2YWx1ZSkKKyAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gTmVnKSB7CisgICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEFicyhCaXR3aXNlQ2FzdCh2YWx1ZSkpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdHdp
c2VDYXN0KEFuZCh2YWx1ZSwgbWFzay10b3AtYml0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCShyZXZpc2lvbiAyNDExMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA5LDYgKzYwOSwzNiBAQCB2b2lkIHRl
c3RBZGRJbW1NZW0zMihpbnQzMl90IGEsIGludDMyX3QgCiAgICAgQ0hFQ0soaW5wdXRPdXRwdXQg
PT0gYSArIGIpOwogfQogCit2b2lkIHRlc3RBZGROZWcxKGludCBhLCBpbnQgYikKK3sKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIE5lZywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworICAgIAorICAgIENIRUNLKGNvbXBpbGVBbmRS
dW48aW50Pihwcm9jLCBhLCBiKSA9PSAoLSBhKSArIGIpOworfQorCit2b2lkIHRlc3RBZGROZWcy
KGludCBhLCBpbnQgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgK
KyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IE5lZywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSkpOworCisg
ICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyAoLSBiKSk7Cit9
CisKIHZvaWQgdGVzdEFkZEFyZ1plcm9JbW1aRGVmKCkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsK
QEAgLTE4OTcsNiArMTkyNywzNiBAQCB2b2lkIHRlc3RTdWJBcmdJbW0oaW50NjRfdCBhLCBpbnQ2
NF90IGIpCiAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhKSA9PSBhIC0g
Yik7CiB9CiAKK3ZvaWQgdGVzdFN1Yk5lZyhpbnQgYSwgaW50IGIpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTdWIs
IE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBOZWcsIE9yaWdpbigpLAorICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKSkpKTsKKyAgICAKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4o
cHJvYywgYSwgYikgPT0gYSAtICgtIGIpKTsKK30KKwordm9pZCB0ZXN0TmVnU3ViKGludCBhLCBp
bnQgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIE5lZywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpKTsKKworICAgIENI
RUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBhLCBiKSA9PSAtKGEgLSBiKSk7Cit9CisKIHZv
aWQgdGVzdE5lZ1ZhbHVlU3ViT25lKGludCBhKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAt
MzkxNyw3ICszOTc3LDE5IEBAIHZvaWQgdGVzdEFic0Fic0FyZyhkb3VibGUgYSkKICAgICBWYWx1
ZSogc2Vjb25kQWJzID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYnMsIE9yaWdpbigp
LCBmaXJzdEFicyk7CiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHNlY29uZEFicyk7CiAKLSAgICBDSEVDSyhpc0lkZW50aWNhbChjb21waWxl
QW5kUnVuPGRvdWJsZT4ocHJvYywgYSksIGZhYnMoYSkpKTsKKyAgICBDSEVDSyhpc0lkZW50aWNh
bChjb21waWxlQW5kUnVuPGRvdWJsZT4ocHJvYywgYSksIGZhYnMoZmFicyhhKSkpKTsKK30KKwor
dm9pZCB0ZXN0QWJzTmVnQXJnKGRvdWJsZSBhKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIG5lZyA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJzLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1
bWVudEZQUjApKTsKKyAgICBWYWx1ZSogYWJzID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBBYnMsIE9yaWdpbigpLCBuZWcpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBhYnMpOworICAgIAorICAgIENIRUNLKGlzSWRlbnRpY2Fs
KGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9jLCBhKSwgZmFicygtIGEpKSk7CiB9CiAKIHZvaWQg
dGVzdEFic0JpdHdpc2VDYXN0QXJnKGRvdWJsZSBhKQpAQCAtMzk5Nyw3ICs0MDY5LDIxIEBAIHZv
aWQgdGVzdEFic0Fic0FyZyhmbG9hdCBhKQogICAgIFZhbHVlKiBzZWNvbmRBYnMgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEFicywgT3JpZ2luKCksIGZpcnN0QWJzKTsKICAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgc2Vjb25kQWJz
KTsKIAotICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZmxvYXQ+KHByb2MsIGJp
dHdpc2VfY2FzdDxpbnQzMl90PihhKSksIHN0YXRpY19jYXN0PGZsb2F0PihmYWJzKGEpKSkpOwor
ICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZmxvYXQ+KHByb2MsIGJpdHdpc2Vf
Y2FzdDxpbnQzMl90PihhKSksIHN0YXRpY19jYXN0PGZsb2F0PihmYWJzKGZhYnMoYSkpKSkpOwor
fQorCit2b2lkIHRlc3RBYnNOZWdBcmcoZmxvYXQgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmd1
bWVudDMyID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgVmFsdWUqIGFyZ3VtZW50ID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXR3aXNlQ2FzdCwgT3JpZ2luKCksIGFyZ3VtZW50MzIpOwor
ICAgIFZhbHVlKiBuZWcgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE5lZywgT3JpZ2lu
KCksIGFyZ3VtZW50KTsKKyAgICBWYWx1ZSogYWJzID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBYnMsIE9yaWdpbigpLCBuZWcpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBhYnMpOworICAgIAorICAgIENIRUNLKGlzSWRlbnRp
Y2FsKGNvbXBpbGVBbmRSdW48ZmxvYXQ+KHByb2MsIGJpdHdpc2VfY2FzdDxpbnQzMl90PihhKSks
IHN0YXRpY19jYXN0PGZsb2F0PihmYWJzKC0gYSkpKSk7CiB9CiAKIHZvaWQgdGVzdEFic0JpdHdp
c2VDYXN0QXJnKGZsb2F0IGEpCkBAIC0xNjM4Miw2ICsxNjQ2OCw4IEBAIHZvaWQgcnVuKGNvbnN0
IGNoYXIqIGZpbHRlcikKICAgICBSVU5fQklOQVJZKHRlc3RBZGRBcmdNZW0zMiwgaW50MzJPcGVy
YW5kcygpLCBpbnQzMk9wZXJhbmRzKCkpOwogICAgIFJVTl9CSU5BUlkodGVzdEFkZE1lbUFyZzMy
LCBpbnQzMk9wZXJhbmRzKCksIGludDMyT3BlcmFuZHMoKSk7CiAgICAgUlVOX0JJTkFSWSh0ZXN0
QWRkSW1tTWVtMzIsIGludDMyT3BlcmFuZHMoKSwgaW50MzJPcGVyYW5kcygpKTsKKyAgICBSVU5f
QklOQVJZKHRlc3RBZGROZWcxLCBpbnQzMk9wZXJhbmRzKCksIGludDMyT3BlcmFuZHMoKSk7Cisg
ICAgUlVOX0JJTkFSWSh0ZXN0QWRkTmVnMiwgaW50MzJPcGVyYW5kcygpLCBpbnQzMk9wZXJhbmRz
KCkpOwogICAgIFJVTih0ZXN0QWRkQXJnWmVyb0ltbVpEZWYoKSk7CiAgICAgUlVOKHRlc3RBZGRM
b2FkVHdpY2UoKSk7CiAKQEAgLTE2NTQ5LDYgKzE2NjM3LDggQEAgdm9pZCBydW4oY29uc3QgY2hh
ciogZmlsdGVyKQogICAgIFJVTl9CSU5BUlkodGVzdFN1Yk1lbUFyZywgaW50NjRPcGVyYW5kcygp
LCBpbnQ2NE9wZXJhbmRzKCkpOwogICAgIFJVTl9CSU5BUlkodGVzdFN1YkltbU1lbSwgaW50MzJP
cGVyYW5kcygpLCBpbnQzMk9wZXJhbmRzKCkpOwogICAgIFJVTl9CSU5BUlkodGVzdFN1Yk1lbUlt
bSwgaW50MzJPcGVyYW5kcygpLCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVz
dFN1Yk5lZywgaW50MzJPcGVyYW5kcygpLCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5B
UlkodGVzdE5lZ1N1YiwgaW50MzJPcGVyYW5kcygpLCBpbnQzMk9wZXJhbmRzKCkpOwogICAgIFJV
Tl9VTkFSWSh0ZXN0TmVnVmFsdWVTdWJPbmUsIGludDMyT3BlcmFuZHMoKSk7CiAKICAgICBSVU4o
dGVzdFN1YkFyZ3MzMigxLCAxKSk7CkBAIC0xNjkwNSwxMiArMTY5OTUsMTQgQEAgdm9pZCBydW4o
Y29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTl9VTkFSWSh0ZXN0QWJzSW1tLCBmbG9hdGluZ1Bv
aW50T3BlcmFuZHM8ZG91YmxlPigpKTsKICAgICBSVU5fVU5BUlkodGVzdEFic01lbSwgZmxvYXRp
bmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSk7CiAgICAgUlVOX1VOQVJZKHRlc3RBYnNBYnNBcmcs
IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpOworICAgIFJVTl9VTkFSWSh0ZXN0QWJz
TmVnQXJnLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKTsKICAgICBSVU5fVU5BUlko
dGVzdEFic0JpdHdpc2VDYXN0QXJnLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKTsK
ICAgICBSVU5fVU5BUlkodGVzdEJpdHdpc2VDYXN0QWJzQml0d2lzZUNhc3RBcmcsIGZsb2F0aW5n
UG9pbnRPcGVyYW5kczxkb3VibGU+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJzQXJnLCBmbG9h
dGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJzSW1tLCBm
bG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJzTWVt
LCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJz
QWJzQXJnLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpOworICAgIFJVTl9VTkFSWSh0
ZXN0QWJzTmVnQXJnLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9V
TkFSWSh0ZXN0QWJzQml0d2lzZUNhc3RBcmcsIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4o
KSk7CiAgICAgUlVOX1VOQVJZKHRlc3RCaXR3aXNlQ2FzdEFic0JpdHdpc2VDYXN0QXJnLCBmbG9h
dGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpOwogICAgIFJVTl9VTkFSWSh0ZXN0QWJzQXJnV2l0
aFVzZWxlc3NEb3VibGVDb252ZXJzaW9uLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkp
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>