<?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>80411</bug_id>
          
          <creation_ts>2012-03-06 05:46:13 -0800</creation_ts>
          <short_desc>CSS3 calc: identify divide by zero cases at parse time</short_desc>
          <delta_ts>2013-03-04 15:47:10 -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>CSS</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>
          
          <blocked>16662</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mike Lawther">mikelawther</reporter>
          <assigned_to name="Alan Cutter">alancutter</assigned_to>
          <cc>alancutter</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>ojan</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>571777</commentid>
    <comment_count>0</comment_count>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2012-03-06 05:46:13 -0800</bug_when>
    <thetext>calc only allows dividing by a numeric quantity, so division by zero should be decidable at parse time.

This bug is to implement parse time detection in all cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843908</commentid>
    <comment_count>1</comment_count>
      <attachid>190684</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-02-28 02:17:55 -0800</bug_when>
    <thetext>Created attachment 190684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843910</commentid>
    <comment_count>2</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-02-28 02:20:53 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=190684) [details]
&gt; Patch

Added parse time detection of divide by 0 cases. This patch also comes with simplification of number expressions.

As part of the patch I have cleaned up trailing whitespace in CSSCalculationValue.cpp and CSSCalculationValue.h. Please let me know if this should be done in a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843930</commentid>
    <comment_count>3</comment_count>
      <attachid>190689</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-02-28 02:48:31 -0800</bug_when>
    <thetext>Created attachment 190689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843931</commentid>
    <comment_count>4</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-02-28 02:50:38 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=190689) [details]
&gt; Patch

Same code patch as before.
Split the simplification and catch divide by 0 tests apart.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844311</commentid>
    <comment_count>5</comment_count>
      <attachid>190689</attachid>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2013-02-28 11:52:05 -0800</bug_when>
    <thetext>Comment on attachment 190689
Patch

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

I&apos;m not a reviewer, but I&apos;ll do a shadow review.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:91
&gt; +    return result.toString();

These whitespace only changes are typically discouraged.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:258
&gt; +

Extra whitespace block?

&gt; Source/WebCore/css/CSSCalculationValue.cpp:462
&gt; +    bool isSimplifiableExpression(CSSCalcExpressionNode* lhs, CSSCalcExpressionNode* rhs)

Do you intend to extend this in the future for eg 25% *  2 = 50%. ie this would ultimately be return lhs-&gt;category() == CalcNumber || rhs-&gt;category() == CalcNumber;

&gt; Source/WebCore/css/CSSCalculationValue.cpp:467
&gt; +    // This assumes you have checked lhs and rhs with isSimplifiableExpression already.

Rather than a comment like this, add an ASSERT at the top of the function.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:-515
&gt; -            result-&gt;value = CSSCalcBinaryOperation::create(result-&gt;value, rhs.value, static_cast&lt;CalcOperator&gt;(operatorCharacter));

Did you consider putting all this logic inside the CSSCalcBinaryOperation::create function? It seems like a better place for it to live. It would mean you wouldn&apos;t have cut&apos;n&apos;pastes like you have down on line 576.

You&apos;d have to change the signature to return a PassRefPtr&lt;CSSCalcExpressionNode&gt; instead, and I haven&apos;t completely thought through the consequences of this.

&gt; LayoutTests/css3/calc/cssom.html:-17
&gt; -             &quot;(100px) + 200px&quot;,

I don&apos;t understand why this line changed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844844</commentid>
    <comment_count>6</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-02-28 22:49:09 -0800</bug_when>
    <thetext>Thanks for the shadow review Mike.

I have cancelled the patch as I believe this bug was already resolved before I even started. Simplifying the calc expression detects the divide by 0 case just a tiny bit quicker. This existing line was already catching them at parse time: http://trac.webkit.org/browser/trunk/Source/WebCore/css/CSSCalculationValue.cpp#L288

In terms of simplification I wonder how worthwhile it is to do. To simplify the expression tree would blow the linear parsing complexity out (please correct me on this if I&apos;m mistaken).
Example: multiplying ((var(a) * 4px) - (12 * var(b))) by the number 8 would require a traversal of the tree or some other bookkeeping data structure. This would occur for every token in the expression.

It is possible to reduce the calc expression into a dimension and a multiplier instead of an expression tree to preserve the linear time parsing however that would leave little room for css variables in calc expressions.

If the calc expression is going to be evaluated hundreds of times perhaps the simplification could be a deferred process that occurs iteratively as the expression is evaluated again and again.

I am open as to where to go from here with calc simplification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844898</commentid>
    <comment_count>7</comment_count>
      <attachid>190905</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-01 01:06:40 -0800</bug_when>
    <thetext>Created attachment 190905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844899</commentid>
    <comment_count>8</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-01 01:08:07 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=190905) [details]
&gt; Patch

Added just the divide by 0 tests without code to show this bug is already resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845271</commentid>
    <comment_count>9</comment_count>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2013-03-01 10:12:15 -0800</bug_when>
    <thetext>I don&apos;t think this bug is completely resolved, as the intention was to handle divide by zero &apos;in all cases&apos;. The spec (http://www.w3.org/TR/css3-values/#calc-notation)  says &quot;If an operator does not pass the above checks, the expression is invalid. Also, division by zero is invalid. This includes both dividing by the literal number zero, as well as any numeric expression that evaluates to zero (as purely-numeric expressions can be evaluated without any additional information at parse time).&quot;

So until we are simplifying the purely numeric cases such as calc(100px / (5 - 5)) this implementation isn&apos;t strictly compliant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845662</commentid>
    <comment_count>10</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-01 17:17:23 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I don&apos;t think this bug is completely resolved, as the intention was to handle divide by zero &apos;in all cases&apos;. The spec (http://www.w3.org/TR/css3-values/#calc-notation)  says &quot;If an operator does not pass the above checks, the expression is invalid. Also, division by zero is invalid. This includes both dividing by the literal number zero, as well as any numeric expression that evaluates to zero (as purely-numeric expressions can be evaluated without any additional information at parse time).&quot;
&gt; 
&gt; So until we are simplifying the purely numeric cases such as calc(100px / (5 - 5)) this implementation isn&apos;t strictly compliant.

The original code does catch cases like calc(100px / (5 - 5)). When isZero() is called on (5 - 5) it invokes an evaluation of the expression and returns true.
These tests all pass on ToT: https://bugs.webkit.org/attachment.cgi?id=190905&amp;action=prettypatch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846843</commentid>
    <comment_count>11</comment_count>
      <attachid>190905</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2013-03-04 14:17:06 -0800</bug_when>
    <thetext>Comment on attachment 190905
Patch

This seems OK to me.  Mike, did you have any further comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846934</commentid>
    <comment_count>12</comment_count>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2013-03-04 15:38:46 -0800</bug_when>
    <thetext>&gt; The original code does catch cases like calc(100px / (5 - 5)). When isZero() is called on (5 - 5) it invokes an evaluation of the expression and returns true.
&gt; These tests all pass on ToT: https://bugs.webkit.org/attachment.cgi?id=190905&amp;action=prettypatch

Ah - good point. I was cleverer than I remember. Thanks Alan!

&gt; This seems OK to me.  Mike, did you have any further comments?

No, all looks good. Thanks Tony!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846945</commentid>
    <comment_count>13</comment_count>
      <attachid>190905</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-04 15:47:06 -0800</bug_when>
    <thetext>Comment on attachment 190905
Patch

Clearing flags on attachment: 190905

Committed r144689: &lt;http://trac.webkit.org/changeset/144689&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846946</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-04 15:47:10 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190684</attachid>
            <date>2013-02-28 02:17:55 -0800</date>
            <delta_ts>2013-02-28 02:48:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80411-20130228211406.patch</filename>
            <type>text/plain</type>
            <size>22471</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWEzYzJkMTYyYzMwZmQy
N2EzYzhkMmI0YTM1YThhMjZjNjlkNDliZS4uZDk3MDhlYzQ4ZDg1Mjk5YWUxZDY1NDRhNWE1OGU5
M2Y2NTRiZmUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEzLTAyLTI4ICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENTUzMgY2FsYzog
aWRlbnRpZnkgZGl2aWRlIGJ5IHplcm8gY2FzZXMgYXQgcGFyc2UgdGltZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA0MTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBjc3MzL2NhbGMvc2ltcGxp
ZmljYXRpb24uaHRtbAorCisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YnVpbGRDc3NUZXh0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjbGFtcFRvUGVybWl0dGVkUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpkb3VibGVWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6On5DU1NDYWxjRXhwcmVzc2lvbk5vZGUpOgorICAg
ICAgICAoQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQ
cmltaXRpdmVWYWx1ZTo6ZG91YmxlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1By
aW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoUHgpOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJt
aW5lQ2F0ZWdvcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZXZhbHVhdGVPcGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5
T3BlcmF0aW9uOjpkb3VibGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5
T3BlcmF0aW9uOjpidWlsZENzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFy
eU9wZXJhdGlvbjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyOjppc1NpbXBsaWZpYWJsZUV4cHJlc3Npb24pOgorICAgICAgICAoQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6Y3JlYXRlU2ltcGxpZmllZEV4cHJlc3Npb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlVGVybSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWVNdWx0
aXBsaWNhdGl2ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyOjpwYXJzZUFkZGl0aXZlVmFsdWVFeHByZXNzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpjYXRl
Z29yeSk6CisgICAgICAgIChDU1NDYWxjRXhwcmVzc2lvbk5vZGUpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmlzSW50KToKKyAgICAgICAgKENT
U0NhbGNWYWx1ZSk6CisKIDIwMTMtMDItMjcgIEt1bmloaWtvIFNha2Ftb3RvICA8a3Nha2Ftb3Rv
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBJTlBVVF9NVUxUSVBMRV9GSUVMRFNfVUk6IFN0ZXAt
dXAvLWRvd24gb2YgaG91ciBmaWVsZCBzaG91bGQgcmVzcGVjdCBtaW4vbWF4IGF0dHJpYnV0ZXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAppbmRleCAyMzljOTlk
MmM0ZmYyMzgxMzg2ZjUwZWQ1OTMwYjc4ODQxNmFhNDU0Li5hY2Q5NDhiYzQ0Nzc2MjNkZDI0N2Yz
NGFhZGJiMDI5ZDYyY2ZjMWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2Fs
Y3VsYXRpb25WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9u
VmFsdWUuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBTdHJpbmcgYnVpbGRDc3NUZXh0KGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbikKICAgICByZXN1bHQuYXBwZW5kKGV4cHJlc3Npb24pOwog
ICAgIGlmIChleHByZXNzaW9uSGFzU2luZ2xlVGVybSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
KScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsgCisgICAgcmV0dXJuIHJlc3VsdC50
b1N0cmluZygpOwogfQogCiBTdHJpbmcgQ1NTQ2FsY1ZhbHVlOjpjdXN0b21Dc3NUZXh0KCkgY29u
c3QKQEAgLTExNywxNCArMTE3LDE0IEBAIHZvaWQgQ1NTQ2FsY1ZhbHVlOjpyZXBvcnREZXNjZW5k
YW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mCiB7CiAgICAg
TWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9y
eVR5cGVzOjpDU1MpOwogfQotICAgIAorCiBkb3VibGUgQ1NTQ2FsY1ZhbHVlOjpjbGFtcFRvUGVy
bWl0dGVkUmFuZ2UoZG91YmxlIHZhbHVlKSBjb25zdAogewogICAgIHJldHVybiBtX25vbk5lZ2F0
aXZlICYmIHZhbHVlIDwgMCA/IDAgOiB2YWx1ZTsKLX0gICAgCi0gICAgCi1kb3VibGUgQ1NTQ2Fs
Y1ZhbHVlOjpkb3VibGVWYWx1ZSgpIGNvbnN0IAoteyAKK30KKworZG91YmxlIENTU0NhbGNWYWx1
ZTo6ZG91YmxlVmFsdWUoKSBjb25zdAorewogICAgIHJldHVybiBjbGFtcFRvUGVybWl0dGVkUmFu
Z2UobV9leHByZXNzaW9uLT5kb3VibGVWYWx1ZSgpKTsKIH0KIApAQCAtMTMyLDExICsxMzIsMTEg
QEAgZG91YmxlIENTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4KFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiByb28KIHsKICAgICByZXR1cm4gY2xhbXBUb1Blcm1pdHRl
ZFJhbmdlKG1fZXhwcmVzc2lvbi0+Y29tcHV0ZUxlbmd0aFB4KGN1cnJlbnRTdHlsZSwgcm9vdFN0
eWxlLCBtdWx0aXBsaWVyLCBjb21wdXRpbmdGb250U2l6ZSkpOwogfQotICAgIAotQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlOjp+Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKCkgCisKK0NTU0NhbGNFeHByZXNz
aW9uTm9kZTo6fkNTU0NhbGNFeHByZXNzaW9uTm9kZSgpCiB7CiB9Ci0gICAgCisKIGNsYXNzIENT
U0NhbGNQcmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlKHZhbHVlLCBpc0ludGVnZXIpKTsKICAgICB9Ci0gICAgCisKICAgICB2aXJ0dWFsIGJv
b2wgaXNaZXJvKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhbV92YWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKQEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV92YWx1ZS0+Y3VzdG9tU2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKHZhcmlhYmxl
cyk7CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCBib29sIGhhc1ZhcmlhYmxlUmVmZXJlbmNl
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlLT5pc1ZhcmlhYmxlTmFtZSgp
OwpAQCAtMTk0LDcgKzE5NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV9j
YXRlZ29yeSkgewogICAgICAgICBjYXNlIENhbGNOdW1iZXI6Ci0gICAgICAgIGNhc2UgQ2FsY1Bl
cmNlbnQ6ICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIENhbGNQZXJjZW50OgogICAgICAg
ICAgICAgcmV0dXJuIG1fdmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgIGNhc2UgQ2Fs
Y0xlbmd0aDoKICAgICAgICAgY2FzZSBDYWxjUGVyY2VudExlbmd0aDoKQEAgLTIwOCw3ICsyMDgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAor
CiAgICAgdmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyLCBib29sIGNv
bXB1dGluZ0ZvbnRTaXplKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChtX2NhdGVnb3J5
KSB7CkBAIC0yMjYsNyArMjI2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
MDsgICAgICAgIAorICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
ZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0CkBAIC0yNDQs
NyArMjQ0LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlOyB9Ci0gICAgCisKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1
ZSwgYm9vbCBpc0ludGVnZXIpCiAgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKHVuaXRD
YXRlZ29yeSgoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpKSwgaXNJbnRlZ2VyKQpAQCAtMjU1LDEzICsyNTUsMjAgQEAgcHJpdmF0ZToKICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdmFsdWU7CiB9OwogCisKKworCisKKworCiBzdGF0aWMg
Y29uc3QgQ2FsY3VsYXRpb25DYXRlZ29yeSBhZGRTdWJ0cmFjdFJlc3VsdFtDYWxjT3RoZXJdW0Nh
bGNPdGhlcl0gPSB7Ci0gICAgeyBDYWxjTnVtYmVyLCAgICAgICAgQ2FsY090aGVyLCAgICAgICAg
IENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyIH0sCi0gICAg
eyBDYWxjT3RoZXIsICAgICAgICAgQ2FsY0xlbmd0aCwgICAgICAgIENhbGNQZXJjZW50TGVuZ3Ro
LCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGggfSwKLSAgICB7IENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY1BlcmNlbnQsICAgICAgIENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjUGVyY2VudExlbmd0aCB9LAotICAgIHsgQ2FsY1BlcmNlbnROdW1iZXIs
IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIs
IENhbGNPdGhlciB9LAotICAgIHsgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3Ro
LCBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3Ro
IH0sCi19OyAgICAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgQ2FsY051bWJlciAgICAgICAg
IENhbGNMZW5ndGggICAgICAgICBDYWxjUGVyY2VudCAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIg
IENhbGNQZXJjZW50TGVuZ3RoCisvKiBDYWxjTnVtYmVyICAgICAgICAqLyB7IENhbGNOdW1iZXIs
ICAgICAgICBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50
TnVtYmVyLCBDYWxjT3RoZXIgfSwKKy8qIENhbGNMZW5ndGggICAgICAgICovIHsgQ2FsY090aGVy
LCAgICAgICAgIENhbGNMZW5ndGgsICAgICAgICBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY090aGVy
LCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoIH0sCisvKiBDYWxjUGVyY2VudCAgICAgICAqLyB7
IENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY1BlcmNlbnQsICAgICAg
IENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2VudExlbmd0aCB9LAorLyogQ2FsY1BlcmNlbnRO
dW1iZXIgKi8geyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyIH0sCisvKiBDYWxjUGVyY2Vu
dExlbmd0aCAqLyB7IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY1Bl
cmNlbnRMZW5ndGgsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudExlbmd0aCB9LAorfTsK
IAogc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2lkZSwgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
JiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKIHsKQEAgLTI3OCwxMCArMjg1LDEwIEBAIHN0
YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVnb3J5KGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYgbGVmdFNpCiAKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBDYWxj
QWRkOgotICAgIGNhc2UgQ2FsY1N1YnRyYWN0OiAgICAgICAgICAgICAKKyAgICBjYXNlIENhbGNT
dWJ0cmFjdDoKICAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0UmVzdWx0W2xlZnRDYXRlZ29yeV1b
cmlnaHRDYXRlZ29yeV07CiAgICAgY2FzZSBDYWxjTXVsdGlwbHk6Ci0gICAgICAgIGlmIChsZWZ0
Q2F0ZWdvcnkgIT0gQ2FsY051bWJlciAmJiByaWdodENhdGVnb3J5ICE9IENhbGNOdW1iZXIpIAor
ICAgICAgICBpZiAobGVmdENhdGVnb3J5ICE9IENhbGNOdW1iZXIgJiYgcmlnaHRDYXRlZ29yeSAh
PSBDYWxjTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuIENhbGNPdGhlcjsKICAgICAgICAgcmV0
dXJuIGxlZnRDYXRlZ29yeSA9PSBDYWxjTnVtYmVyID8gcmlnaHRDYXRlZ29yeSA6IGxlZnRDYXRl
Z29yeTsKICAgICBjYXNlIENhbGNEaXZpZGU6CkBAIC0yODksMTggKzI5NiwzNSBAQCBzdGF0aWMg
Q2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25zdCBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUmIGxlZnRTaQogICAgICAgICAgICAgcmV0dXJuIENhbGNPdGhlcjsKICAgICAgICAg
cmV0dXJuIGxlZnRDYXRlZ29yeTsKICAgICB9Ci0gICAgCisKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gQ2FsY090aGVyOwogfQogCitzdGF0aWMgZG91YmxlIGV2YWx1YXRl
T3BlcmF0b3IoZG91YmxlIGxlZnRWYWx1ZSwgZG91YmxlIHJpZ2h0VmFsdWUsIENhbGNPcGVyYXRv
ciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBDYWxjQWRkOgorICAgICAgICBy
ZXR1cm4gbGVmdFZhbHVlICsgcmlnaHRWYWx1ZTsKKyAgICBjYXNlIENhbGNTdWJ0cmFjdDoKKyAg
ICAgICAgcmV0dXJuIGxlZnRWYWx1ZSAtIHJpZ2h0VmFsdWU7CisgICAgY2FzZSBDYWxjTXVsdGlw
bHk6CisgICAgICAgIHJldHVybiBsZWZ0VmFsdWUgKiByaWdodFZhbHVlOworICAgIGNhc2UgQ2Fs
Y0RpdmlkZToKKyAgICAgICAgaWYgKHJpZ2h0VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbGVm
dFZhbHVlIC8gcmlnaHRWYWx1ZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBjbGFzcyBD
U1NDYWxjQmluYXJ5T3BlcmF0aW9uIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7CiAK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjQmluYXJ5T3BlcmF0aW9uPiBj
cmVhdGUoUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGxlZnRTaWRlLCBQYXNzUmVm
UHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCiAg
ICAgewogICAgICAgICBBU1NFUlQobGVmdFNpZGUtPmNhdGVnb3J5KCkgIT0gQ2FsY090aGVyICYm
IHJpZ2h0U2lkZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjT3RoZXIpOwotICAgICAgICAKKwogICAgICAg
ICBDYWxjdWxhdGlvbkNhdGVnb3J5IG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkoKmxl
ZnRTaWRlLCAqcmlnaHRTaWRlLCBvcCk7CiAKICAgICAgICAgaWYgKG5ld0NhdGVnb3J5ID09IENh
bGNPdGhlcikKQEAgLTMwOCw3ICszMzIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uKGxlZnRTaWRlLCByaWdodFNpZGUsIG9w
LCBuZXdDYXRlZ29yeSkpOwogICAgIH0KLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBpc1plcm8o
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICFkb3VibGVWYWx1ZSgpOwpAQCAtMzI1LDEx
ICszNDksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENhbGNFeHBy
ZXNzaW9uQmluYXJ5T3BlcmF0aW9uKGxlZnQucmVsZWFzZSgpLCByaWdodC5yZWxlYXNlKCksIG1f
b3BlcmF0b3IpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNv
bnN0IAorICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBldmFsdWF0ZShtX2xlZnRTaWRlLT5kb3VibGVWYWx1ZSgpLCBtX3JpZ2h0U2lk
ZS0+ZG91YmxlVmFsdWUoKSk7CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCBkb3VibGUgY29t
cHV0ZUxlbmd0aFB4KFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiByb290
U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplKSBjb25zdAog
ICAgIHsKICAgICAgICAgY29uc3QgZG91YmxlIGxlZnRWYWx1ZSA9IG1fbGVmdFNpZGUtPmNvbXB1
dGVMZW5ndGhQeChjdXJyZW50U3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllciwgY29tcHV0aW5n
Rm9udFNpemUpOwpAQCAtMzU0LDggKzM3OCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICcpOwogICAgICAgICByZXN1bHQuYXBwZW5kKHJpZ2h0RXhwcmVzc2lvbik7CiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOyAgCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogICAgIH0KIAog
ICAgIHZpcnR1YWwgU3RyaW5nIGN1c3RvbUNzc1RleHQoKSBjb25zdApAQCAtMzk2LDI0ICs0MjAs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgLCBtX29wZXJhdG9yKG9wKQogICAgIHsKICAgICB9Ci0g
ICAgCi0gICAgZG91YmxlIGV2YWx1YXRlKGRvdWJsZSBsZWZ0VmFsdWUsIGRvdWJsZSByaWdodFZh
bHVlKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX29wZXJhdG9yKSB7Ci0gICAgICAg
IGNhc2UgQ2FsY0FkZDoKLSAgICAgICAgICAgIHJldHVybiBsZWZ0VmFsdWUgKyByaWdodFZhbHVl
OwotICAgICAgICBjYXNlIENhbGNTdWJ0cmFjdDoKLSAgICAgICAgICAgIHJldHVybiBsZWZ0VmFs
dWUgLSByaWdodFZhbHVlOwotICAgICAgICBjYXNlIENhbGNNdWx0aXBseToKLSAgICAgICAgICAg
IHJldHVybiBsZWZ0VmFsdWUgKiByaWdodFZhbHVlOwotICAgICAgICBjYXNlIENhbGNEaXZpZGU6
Ci0gICAgICAgICAgICBpZiAocmlnaHRWYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGVm
dFZhbHVlIC8gcmlnaHRWYWx1ZTsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwor
CisgICAgZG91YmxlIGV2YWx1YXRlKGRvdWJsZSBsZWZ0U2lkZSwgZG91YmxlIHJpZ2h0U2lkZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBldmFsdWF0ZU9wZXJhdG9yKGxlZnRTaWRlLCBy
aWdodFNpZGUsIG1fb3BlcmF0b3IpOwogICAgIH0KLSAgICAKKwogICAgIGNvbnN0IFJlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fbGVmdFNpZGU7CiAgICAgY29uc3QgUmVmUHRyPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4gbV9yaWdodFNpZGU7CiAgICAgY29uc3QgQ2FsY09wZXJhdG9yIG1f
b3BlcmF0b3I7CkBAIC00NDcsNiArNDU5LDIzIEBAIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IHZhbHVlOwogICAgIH07CiAKKyAgICBib29sIGlzU2ltcGxp
ZmlhYmxlRXhwcmVzc2lvbihDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIGxocywgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlKiByaHMpCisgICAgeworICAgICAgICByZXR1cm4gbGhzLT5jYXRlZ29yeSgpID09
IENhbGNOdW1iZXIgJiYgcmhzLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXI7CisgICAgfQorCisg
ICAgLy8gVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGNoZWNrZWQgbGhzIGFuZCByaHMgd2l0aCBpc1Np
bXBsaWZpYWJsZUV4cHJlc3Npb24gYWxyZWFkeS4KKyAgICBQYXNzUmVmUHRyPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4gY3JlYXRlU2ltcGxpZmllZEV4cHJlc3Npb24oUGFzc1JlZlB0cjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+IGxocywgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJo
cywgQ2FsY09wZXJhdG9yIG9wKQorICAgIHsKKyAgICAgICAgZG91YmxlIGV2YWx1YXRpb24gPSBl
dmFsdWF0ZU9wZXJhdG9yKGxocy0+ZG91YmxlVmFsdWUoKSwgcmhzLT5kb3VibGVWYWx1ZSgpLCBv
cCk7CisgICAgICAgIGlmIChldmFsdWF0aW9uICE9IGV2YWx1YXRpb24pIC8vIE9ubHkgdHJ1ZSBm
b3IgTmFOCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgYm9vbCBpc0ludGVnZXIgPSBs
aHMtPmlzSW50ZWdlcigpICYmIHJocy0+aXNJbnRlZ2VyKCk7CisgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMgZXZhbHVhdGlvblR5cGUgPSBpc0ludGVnZXIgPyBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSIDogQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVI7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZXZhbHVhdGVkUHJpbWl0aXZl
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShldmFsdWF0aW9uLCBldmFsdWF0aW9uVHlwZSk7
CisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGV2YWx1YXRlZFByaW1pdGl2ZS5nZXQoKSksIGlzSW50ZWdl
cik7CisgICAgfQorCiAgICAgY2hhciBvcGVyYXRvclZhbHVlKENTU1BhcnNlclZhbHVlTGlzdCog
dG9rZW5zLCB1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmIChpbmRleCA+PSB0b2tl
bnMtPnNpemUoKSkKQEAgLTQ3OCw4ICs1MDcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgcGFyc2VW
YWx1ZVRlcm0oQ1NTUGFyc2VyVmFsdWVMaXN0KiB0b2tlbnMsIGludCBkZXB0aCwgdW5zaWduZWQq
IGluZGV4LCBWYWx1ZSogcmVzdWx0KQogICAgIHsKICAgICAgICAgaWYgKGNoZWNrRGVwdGhBbmRJ
bmRleCgmZGVwdGgsICppbmRleCwgdG9rZW5zKSAhPSBPSykKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgICAgCi0gICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAg
IGlmIChvcGVyYXRvclZhbHVlKHRva2VucywgKmluZGV4KSA9PSAnKCcpIHsKICAgICAgICAgICAg
IHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9ICppbmRleCArIDE7CiAgICAgICAgICAgICBpZiAoIXBh
cnNlVmFsdWVFeHByZXNzaW9uKHRva2VucywgZGVwdGgsICZjdXJyZW50SW5kZXgsIHJlc3VsdCkp
CkBAIC00OTcsNyArNTI2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBhcnNlVmFsdWVNdWx0aXBs
aWNhdGl2ZUV4cHJlc3Npb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB0b2tlbnMsIGludCBkZXB0aCwg
dW5zaWduZWQqIGluZGV4LCBWYWx1ZSogcmVzdWx0KQogICAgIHsKICAgICAgICAgaWYgKGNoZWNr
RGVwdGhBbmRJbmRleCgmZGVwdGgsICppbmRleCwgdG9rZW5zKSAhPSBPSykKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgICAgCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
aWYgKCFwYXJzZVZhbHVlVGVybSh0b2tlbnMsIGRlcHRoLCBpbmRleCwgcmVzdWx0KSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxMiw3ICs1NDEsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGlmICghcGFyc2VWYWx1ZVRlcm0odG9rZW5zLCBkZXB0aCwgaW5kZXgsICZyaHMpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmVzdWx0LT52YWx1
ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZShyZXN1bHQtPnZhbHVlLCByaHMudmFs
dWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpKTsKKyAgICAg
ICAgICAgIENhbGNPcGVyYXRvciBvcCA9IHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0
b3JDaGFyYWN0ZXIpOworICAgICAgICAgICAgaWYgKGlzU2ltcGxpZmlhYmxlRXhwcmVzc2lvbihz
dGF0aWNfY2FzdDxDU1NDYWxjRXhwcmVzc2lvbk5vZGUqPihyZXN1bHQtPnZhbHVlLmdldCgpKSwg
c3RhdGljX2Nhc3Q8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKj4ocmhzLnZhbHVlLmdldCgpKSkpCisg
ICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IGNyZWF0ZVNpbXBsaWZpZWRFeHByZXNzaW9u
KHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSwgb3ApOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUo
cmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBvcCk7CisKICAgICAgICAgICAgIGlmICghcmVzdWx0
LT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUy
NCw3ICs1NTgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcGFyc2VBZGRpdGl2ZVZhbHVlRXhwcmVz
c2lvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIHRva2VucywgaW50IGRlcHRoLCB1bnNpZ25lZCogaW5k
ZXgsIFZhbHVlKiByZXN1bHQpCiAgICAgewogICAgICAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4
KCZkZXB0aCwgKmluZGV4LCB0b2tlbnMpICE9IE9LKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAgICAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAoIXBhcnNlVmFs
dWVNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24odG9rZW5zLCBkZXB0aCwgaW5kZXgsIHJlc3VsdCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MzksNyArNTczLDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24odG9r
ZW5zLCBkZXB0aCwgaW5kZXgsICZyaHMpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNy
ZWF0ZShyZXN1bHQtPnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4o
b3BlcmF0b3JDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIENhbGNPcGVyYXRvciBvcCA9IHN0YXRp
Y19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpOworICAgICAgICAgICAgaWYg
KGlzU2ltcGxpZmlhYmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUqPihyZXN1bHQtPnZhbHVlLmdldCgpKSwgc3RhdGljX2Nhc3Q8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlKj4ocmhzLnZhbHVlLmdldCgpKSkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9
IGNyZWF0ZVNpbXBsaWZpZWRFeHByZXNzaW9uKHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSwgb3Ap
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1ND
YWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBvcCk7
CisKICAgICAgICAgICAgIGlmICghcmVzdWx0LT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTU1NSwxMiArNTk0LDEyIEBAIHByaXZhdGU6CiB9Owog
CiBQYXNzUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoQ1NTUGFyc2Vy
U3RyaW5nIG5hbWUsIENTU1BhcnNlclZhbHVlTGlzdCogcGFyc2VyVmFsdWVMaXN0LCBDYWxjdWxh
dGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCi17ICAgIAotICAgIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlciBwYXJzZXI7ICAgIAoreworICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZVBh
cnNlciBwYXJzZXI7CiAgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gZXhwcmVzc2lv
bjsKLSAgICAKKwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiY2FsYygiKSB8fCBl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiLXdlYmtpdC1jYWxjKCIpKQotICAgICAgICBleHByZXNz
aW9uID0gcGFyc2VyLnBhcnNlQ2FsYyhwYXJzZXJWYWx1ZUxpc3QpOyAgICAKKyAgICAgICAgZXhw
cmVzc2lvbiA9IHBhcnNlci5wYXJzZUNhbGMocGFyc2VyVmFsdWVMaXN0KTsKICAgICAvLyBGSVhN
RSBjYWxjIChodHRwOi8vd2Via2l0Lm9yZy9iLzE2NjYyKSBBZGQgcGFyc2luZyBmb3IgbWluIGFu
ZCBtYXggaGVyZQogCiAgICAgcmV0dXJuIGV4cHJlc3Npb24gPyBhZG9wdFJlZihuZXcgQ1NTQ2Fs
Y1ZhbHVlKGV4cHJlc3Npb24sIHJhbmdlKSkgOiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxj
dWxhdGlvblZhbHVlLmgKaW5kZXggNTY5ZGJkZWEwYjBmMmIzYjg5OGFlN2E0YzcyMmYwYjU2NGJh
ZGY4NC4uZTkzNGU1Y2U2YzUwNTQyMWRhOTgzYjgyMzMyYTNkMTNiMzdkYjU4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCkBAIC01Nyw3ICs1Nyw3IEBAIGVudW0g
Q2FsY3VsYXRpb25DYXRlZ29yeSB7CiAjZW5kaWYKICAgICBDYWxjT3RoZXIKIH07Ci0gICAgCisK
IGNsYXNzIENTU0NhbGNFeHByZXNzaW9uTm9kZSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4gewogcHVibGljOgogICAgIGVudW0gVHlwZSB7CkBAIC02Nyw3ICs2Nyw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkNTU0NhbGNFeHByZXNzaW9uTm9kZSgpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNaZXJvKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc093
blB0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IHRvQ2FsY1ZhbHVlKFJlbmRlclN0eWxlKiwgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIHpvb20gPSAxLjApIGNvbnN0ID0gMDsgICAgCisgICAg
dmlydHVhbCBQYXNzT3duUHRyPENhbGNFeHByZXNzaW9uTm9kZT4gdG9DYWxjVmFsdWUoUmVuZGVy
U3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgem9vbSA9IDEuMCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBS
ZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEuMCwgYm9vbCBjb21w
dXRpbmdGb250U2l6ZSA9IGZhbHNlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgY3Vz
dG9tQ3NzVGV4dCgpIGNvbnN0ID0gMDsKQEAgLTc5LDIwICs3OSwyMCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CiAKLSAgICBDYWxjdWxhdGlv
bkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9jYXRlZ29yeTsgfSAgICAKKyAg
ICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9jYXRlZ29y
eTsgfQogICAgIGJvb2wgaXNJbnRlZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9pc0ludGVnZXI7IH0K
LSAgICAKKwogcHJvdGVjdGVkOgogICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZShDYWxjdWxhdGlv
bkNhdGVnb3J5IGNhdGVnb3J5LCBib29sIGlzSW50ZWdlcikKICAgICAgICAgOiBtX2NhdGVnb3J5
KGNhdGVnb3J5KQogICAgICAgICAsIG1faXNJbnRlZ2VyKGlzSW50ZWdlcikKICAgICB7CiAgICAg
fQotICAgIAorCiAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBtX2NhdGVnb3J5OwogICAgIGJvb2wg
bV9pc0ludGVnZXI7CiB9OwotICAgICAgICAKKwogY2xhc3MgQ1NTQ2FsY1ZhbHVlIDogcHVibGlj
IENTU1ZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjVmFsdWU+
IGNyZWF0ZShDU1NQYXJzZXJTdHJpbmcgbmFtZSwgQ1NTUGFyc2VyVmFsdWVMaXN0KiwgQ2FsY3Vs
YXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlKTsKQEAgLTEwMywxMSArMTAzLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0ZShtX2V4cHJlc3Npb24tPnRv
Q2FsY1ZhbHVlKHN0eWxlLCByb290U3R5bGUsIHpvb20pLCBtX25vbk5lZ2F0aXZlID8gQ2FsY3Vs
YXRpb25SYW5nZU5vbk5lZ2F0aXZlIDogQ2FsY3VsYXRpb25SYW5nZUFsbCk7CiAgICAgfQogICAg
IENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Np
b24tPmNhdGVnb3J5KCk7IH0KLSAgICBib29sIGlzSW50KCkgY29uc3QgeyByZXR1cm4gbV9leHBy
ZXNzaW9uLT5pc0ludGVnZXIoKTsgfSAgICAKKyAgICBib29sIGlzSW50KCkgY29uc3QgeyByZXR1
cm4gbV9leHByZXNzaW9uLT5pc0ludGVnZXIoKTsgfQogICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgp
IGNvbnN0OwogICAgIGJvb2wgaXNOZWdhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lv
bi0+ZG91YmxlVmFsdWUoKSA8IDA7IH0KICAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0
aXBsaWVyID0gMS4wLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpIGNvbnN0OwotICAg
ICAgICAKKwogICAgIFN0cmluZyBjdXN0b21Dc3NUZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBlcXVh
bHMoY29uc3QgQ1NTQ2FsY1ZhbHVlJikgY29uc3Q7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMp
CkBAIC0xMTYsMjEgKzExNiwyMSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgcmVwb3J0
RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKLSAgICAKLXBy
aXZhdGU6ICAgIAorCitwcml2YXRlOgogICAgIENTU0NhbGNWYWx1ZShQYXNzUmVmUHRyPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4gZXhwcmVzc2lvbiwgQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJh
bmdlIHJhbmdlKQogICAgICAgICA6IENTU1ZhbHVlKENhbGN1bGF0aW9uQ2xhc3MpCiAgICAgICAg
ICwgbV9leHByZXNzaW9uKGV4cHJlc3Npb24pCiAgICAgICAgICwgbV9ub25OZWdhdGl2ZShyYW5n
ZSA9PSBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUpCiAgICAgewogICAgIH0KLSAgICAKKwog
ICAgIGRvdWJsZSBjbGFtcFRvUGVybWl0dGVkUmFuZ2UoZG91YmxlKSBjb25zdDsKIAogICAgIGNv
bnN0IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVzc2lvbjsKICAgICBjb25z
dCBib29sIG1fbm9uTmVnYXRpdmU7CiB9OwotICAgIAorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBDU1NDYWxjdWxhdGlvblZhbHVlX2gKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlNWIwYzIwNjQwYjg4
ZDQyZGI1NTlhYTNhZjE4YTk2MGIzNjA0ZmU0Li5hZmRkYzk3YmUyNjFjYzU3ZTg4MjE3Njc1NjEz
OThhNzhmNTVhZDBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTMtMDItMjggIEFsYW4gQ3V0
dGVyICA8YWxhbmN1dHRlckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ1NTMyBjYWxjOiBpZGVu
dGlmeSBkaXZpZGUgYnkgemVybyBjYXNlcyBhdCBwYXJzZSB0aW1lCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDQxMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIHBhcnNlIHRpbWUgc2lt
cGxpZmljYXRpb24gb24gbnVtYmVyIGV4cHJlc3Npb25zIGluIENTUzMgY2FsYyBleHByZXNzaW9u
cy4KKyAgICAgICAgQWRkZWQgdGVzdCBjYXNlcyB0byBjaGVjayBjYXRjaGluZyBkaXZpZGUgYnkg
MCBhdCBwYXJzZSB0aW1lLgorCisgICAgICAgICogY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBjc3MzL2NhbGMvY3Nzb20uaHRtbDoKKyAgICAgICAgKiBjc3MzL2NhbGMv
c2ltcGxpZmljYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL2NhbGMv
c2ltcGxpZmljYXRpb24uaHRtbDogQWRkZWQuCisKIDIwMTMtMDItMjcgIEt1bmloaWtvIFNha2Ft
b3RvICA8a3Nha2Ftb3RvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJTlBVVF9NVUxUSVBMRV9G
SUVMRFNfVUk6IFN0ZXAtdXAvLWRvd24gb2YgaG91ciBmaWVsZCBzaG91bGQgcmVzcGVjdCBtaW4v
bWF4IGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0Cmlu
ZGV4IGQ1ZjU0M2MyM2EyOTUyZWIxMTMyMTRiYzZhODkyMzM4ZWI0NmY3ZDUuLmFmMmYyMmI0ZGJj
Zjg5MjE2NGFkMjVkMzRkNDYyMjA1YjNlNWRmYzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Nz
czMvY2FsYy9jc3NvbS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nz
c29tLWV4cGVjdGVkLnR4dApAQCAtOCw4ICs4LDggQEAgVGhpcyB0ZXN0cyBjYWxjKCkgYW5kIHRo
ZSBDU1NPTQogNXB4ICsgMmVtICsgNmluID0+IGNhbGMoKDVweCArIDJlbSkgKyA2aW4pCiAxMDAl
IC0gMTBweCAvIDIgPT4gY2FsYygxMDAlIC0gKDEwcHggLyAyKSkKIDFweCArIDJlbSAtIDNyZW0g
KyA0aW4gPT4gY2FsYygoKDFweCArIDJlbSkgLSAzcmVtKSArIDRpbikKLTEwMHB4ICogKDEgKyAy
ICogMyAtIDQgLyA1KSA9PiBjYWxjKDEwMHB4ICogKCgxICsgKDIgKiAzKSkgLSAoNCAvIDUpKSkK
LSgxMDBweCkgKyAyMDBweCA9PiBjYWxjKDEwMHB4ICsgMjAwcHgpCisxMDBweCAqICgxICsgMiAq
IDMgLSA0IC8gNSkgPT4gY2FsYygxMDBweCAqIDYuMikKKzEwMHB4ICsgMjAwcHggPT4gY2FsYygx
MDBweCArIDIwMHB4KQogKCgoKCgoKCgoKDEwMHB4KSkpKSkpKSkpKSA9PiBjYWxjKDEwMHB4KQog
ZmxpbXN0aXggPT4gY2FsYygxMDBweCkKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9j
YWxjL2Nzc29tLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20uaHRtbAppbmRleCA0
MTllMGVhOTUzNTdiZDAxNTI5ZjUwNTZkNWM3YWUzZTA5OTA1MTA4Li42ZmM0OTE3YjBhNDM2NmI0
MTMyYWUzNDUzODE0ZWUxZmMxYzU5ZDRhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jc3MzL2Nh
bGMvY3Nzb20uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20uaHRtbApAQCAt
MTQsNyArMTQsNyBAQCB2YXIgdGVzdHMgPSBbIjEwcHgiLAogICAgICAgICAgICAgICIxMDAlIC0g
MTBweCAvIDIiLAogICAgICAgICAgICAgICIxcHggKyAyZW0gLSAzcmVtICsgNGluIiwKICAgICAg
ICAgICAgICAiMTAwcHggKiAoMSArIDIgKiAzIC0gNCAvIDUpIiwKLSAgICAgICAgICAgICAiKDEw
MHB4KSArIDIwMHB4IiwKKyAgICAgICAgICAgICAiMTAwcHggKyAyMDBweCIsCiAgICAgICAgICAg
ICAgIigoKCgoKCgoKCgxMDBweCkpKSkpKSkpKSkiLAogICAgICAgICAgICAgICJmbGltc3RpeCJd
OwogICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBs
aWZpY2F0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNh
dGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjY0ZTBjNTJiM2E5NzBjYWUwZWE5NDZlMzIw
ZjMzZTMyZTIxZGNiMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9z
aW1wbGlmaWNhdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNCBAQAorVGhpcyB0ZXN0cyBw
YXJzZSB0aW1lIHNpbXBsaWZpY2F0aW9uIGluIGNhbGMoKQorCisxMDBweCAqICgxIC8gMCkgPT4g
CisxMDBweCAqICgxIC8gKDApKSA9PiAKKzEwMHB4ICogKDEgLyAoMiAtIDIpKSA9PiAKKzEwMHB4
ICogKDEgLyAoMiAtICgtNjIgKyA2NCkpKSA9PiAKKzEwMHB4ICogKDI1ICsgNCkgPT4gY2FsYygx
MDBweCAqIDI5KQorMTAwcHggKiAoMjUgLSA0KSA9PiBjYWxjKDEwMHB4ICogMjEpCisxMDBweCAq
ICgyICogNSAtIDQpID0+IGNhbGMoMTAwcHggKiA2KQorMTAwcHggKiAoNSAtIDQgLyA1KSA9PiBj
YWxjKDEwMHB4ICogNC4yKQorMTAwcHggKiAoNiAqIDUgLSA4IC8gNSkgPT4gY2FsYygxMDBweCAq
IDI4LjQpCisxMDBweCAqICg2ICogKDUgLSA0KSAvIDgpID0+IGNhbGMoMTAwcHggKiAwLjc1KQor
MTAwcHggKiAoKDYpICogKDUgLSAoNCkpICsgKDMgKiAoKDQpKSAqICg4IC0gMikpKSA9PiBjYWxj
KDEwMHB4ICogNzgpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlm
aWNhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2UzZjIyMzhhYWQ2NGQ5MTZkMDRjMjc4MzkyMTgzY2JkODdjZDA3MAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1s
CkBAIC0wLDAgKzEsMjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGRpdiBpZD0iZHVtbXkiPjwvZGl2
PgorPGRpdiBpZD0icmVzdWx0cyI+VGhpcyB0ZXN0cyBwYXJzZSB0aW1lIHNpbXBsaWZpY2F0aW9u
IGluIGNhbGMoKTxicj48YnI+PC9kaXY+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKwordmFyIHRlc3RzID0gWwor
ICAgICIxMDBweCAqICgxIC8gMCkiLAorICAgICIxMDBweCAqICgxIC8gKDApKSIsCisgICAgIjEw
MHB4ICogKDEgLyAoMiAtIDIpKSIsCisgICAgIjEwMHB4ICogKDEgLyAoMiAtICgtNjIgKyA2NCkp
KSIsCisgICAgIjEwMHB4ICogKDI1ICsgNCkiLAorICAgICIxMDBweCAqICgyNSAtIDQpIiwKKyAg
ICAiMTAwcHggKiAoMiAqIDUgLSA0KSIsCisgICAgIjEwMHB4ICogKDUgLSA0IC8gNSkiLAorICAg
ICIxMDBweCAqICg2ICogNSAtIDggLyA1KSIsCisgICAgIjEwMHB4ICogKDYgKiAoNSAtIDQpIC8g
OCkiLAorICAgICIxMDBweCAqICgoNikgKiAoNSAtICg0KSkgKyAoMyAqICgoNCkpICogKDggLSAy
KSkpIiwKK107CisKK3ZhciByZXN1bHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3Vs
dHMiKTsKK3ZhciBkdW1teSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkdW1teSIpOworZm9y
ICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7ICsraSkgeworICAgIHZhciBleHByZXNzaW9u
ID0gdGVzdHNbaV07CisgICAgZHVtbXkuc3R5bGUud2lkdGggPSAnY2FsYygnICsgZXhwcmVzc2lv
biArICcpJzsKKyAgICByZXN1bHRzLmlubmVySFRNTCArPSBleHByZXNzaW9uICsgIiA9PiAiICsg
ZHVtbXkuc3R5bGUud2lkdGggKyAiPGJyPiI7Cit9Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190689</attachid>
            <date>2013-02-28 02:48:31 -0800</date>
            <delta_ts>2013-03-01 01:06:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80411-20130228214443.patch</filename>
            <type>text/plain</type>
            <size>24287</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWEzYzJkMTYyYzMwZmQy
N2EzYzhkMmI0YTM1YThhMjZjNjlkNDliZS4uZThkNjVmMTg1YzQwNGU1ODI2NjRmOWI1OTU2YjFl
M2FlYWU5NTQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEzLTAyLTI4ICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENTUzMgY2FsYzog
aWRlbnRpZnkgZGl2aWRlIGJ5IHplcm8gY2FzZXMgYXQgcGFyc2UgdGltZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA0MTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCBwYXJzZSB0aW1l
IHNpbXBsaWZpY2F0aW9uIG9uIG51bWJlciBleHByZXNzaW9ucyBpbiBDU1MzIGNhbGMgZXhwcmVz
c2lvbnMgdG8gZGV0ZWN0IGRpdmlkZSBieSAwIGNhc2VzLgorICAgICAgICBBZGRlZCB0ZXN0IGNh
c2VzIHRvIGNoZWNrIGNhdGNoaW5nIGRpdmlkZSBieSAwIGF0IHBhcnNlIHRpbWUuCisKKyAgICAg
ICAgVGVzdHM6IGNzczMvY2FsYy9jYXRjaC1kaXZpZGUtYnktMC5odG1sCisgICAgICAgICAgICAg
ICBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbAorCisgICAgICAgICogY3NzL0NTU0NhbGN1
bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRDc3NUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjbGFtcFRvUGVy
bWl0dGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpkb3VibGVWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6On5DU1NDYWxjRXhw
cmVzc2lvbk5vZGUpOgorICAgICAgICAoQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZTo6ZG91YmxlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoUHgpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGV0ZXJtaW5lQ2F0ZWdvcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZXZhbHVh
dGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpkb3VibGVWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpidWlsZENzc1RleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjppc1NpbXBsaWZpYWJsZUV4cHJlc3Npb24p
OgorICAgICAgICAoQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6Y3JlYXRlU2ltcGxpZmllZEV4cHJlc3Np
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJz
ZVZhbHVlVGVybSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXI6OnBhcnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUFkZGl0aXZlVmFsdWVFeHByZXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAg
KiBjc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlOjpjYXRlZ29yeSk6CisgICAgICAgIChDU1NDYWxjRXhwcmVzc2lvbk5vZGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6Omlz
SW50KToKKyAgICAgICAgKENTU0NhbGNWYWx1ZSk6CisKIDIwMTMtMDItMjcgIEt1bmloaWtvIFNh
a2Ftb3RvICA8a3Nha2Ftb3RvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJTlBVVF9NVUxUSVBM
RV9GSUVMRFNfVUk6IFN0ZXAtdXAvLWRvd24gb2YgaG91ciBmaWVsZCBzaG91bGQgcmVzcGVjdCBt
aW4vbWF4IGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxj
dWxhdGlvblZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVl
LmNwcAppbmRleCAyMzljOTlkMmM0ZmYyMzgxMzg2ZjUwZWQ1OTMwYjc4ODQxNmFhNDU0Li5hY2Q5
NDhiYzQ0Nzc2MjNkZDI0N2YzNGFhZGJiMDI5ZDYyY2ZjMWZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBTdHJp
bmcgYnVpbGRDc3NUZXh0KGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbikKICAgICByZXN1bHQuYXBw
ZW5kKGV4cHJlc3Npb24pOwogICAgIGlmIChleHByZXNzaW9uSGFzU2luZ2xlVGVybSkKICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsgCisg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBTdHJpbmcgQ1NTQ2FsY1ZhbHVlOjpj
dXN0b21Dc3NUZXh0KCkgY29uc3QKQEAgLTExNywxNCArMTE3LDE0IEBAIHZvaWQgQ1NTQ2FsY1Zh
bHVlOjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5
T2JqZWN0SW5mCiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywg
dGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwogfQotICAgIAorCiBkb3VibGUgQ1NTQ2Fs
Y1ZhbHVlOjpjbGFtcFRvUGVybWl0dGVkUmFuZ2UoZG91YmxlIHZhbHVlKSBjb25zdAogewogICAg
IHJldHVybiBtX25vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCA/IDAgOiB2YWx1ZTsKLX0gICAgCi0g
ICAgCi1kb3VibGUgQ1NTQ2FsY1ZhbHVlOjpkb3VibGVWYWx1ZSgpIGNvbnN0IAoteyAKK30KKwor
ZG91YmxlIENTU0NhbGNWYWx1ZTo6ZG91YmxlVmFsdWUoKSBjb25zdAorewogICAgIHJldHVybiBj
bGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9uLT5kb3VibGVWYWx1ZSgpKTsKIH0KIApA
QCAtMTMyLDExICsxMzIsMTEgQEAgZG91YmxlIENTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4
KFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiByb28KIHsKICAgICByZXR1
cm4gY2xhbXBUb1Blcm1pdHRlZFJhbmdlKG1fZXhwcmVzc2lvbi0+Y29tcHV0ZUxlbmd0aFB4KGN1
cnJlbnRTdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVyLCBjb21wdXRpbmdGb250U2l6ZSkpOwog
fQotICAgIAotQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjp+Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKCkg
CisKK0NTU0NhbGNFeHByZXNzaW9uTm9kZTo6fkNTU0NhbGNFeHByZXNzaW9uTm9kZSgpCiB7CiB9
Ci0gICAgCisKIGNsYXNzIENTU0NhbGNQcmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBDU1NDYWxjRXhw
cmVzc2lvbk5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAt
MTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCBpc0ludGVnZXIpKTsKICAgICB9Ci0gICAg
CisKICAgICB2aXJ0dWFsIGJvb2wgaXNaZXJvKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biAhbV92YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKQEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gbV92YWx1ZS0+Y3VzdG9tU2VyaWFsaXplUmVzb2x2aW5n
VmFyaWFibGVzKHZhcmlhYmxlcyk7CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCBib29sIGhh
c1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVl
LT5pc1ZhcmlhYmxlTmFtZSgpOwpAQCAtMTk0LDcgKzE5NCw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAobV9jYXRlZ29yeSkgewogICAgICAgICBjYXNlIENhbGNOdW1iZXI6Ci0g
ICAgICAgIGNhc2UgQ2FsY1BlcmNlbnQ6ICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIENh
bGNQZXJjZW50OgogICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmdldERvdWJsZVZhbHVlKCk7
CiAgICAgICAgIGNhc2UgQ2FsY0xlbmd0aDoKICAgICAgICAgY2FzZSBDYWxjUGVyY2VudExlbmd0
aDoKQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KFJl
bmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBt
dWx0aXBsaWVyLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplKSBjb25zdAogICAgIHsKICAgICAgICAg
c3dpdGNoIChtX2NhdGVnb3J5KSB7CkBAIC0yMjYsNyArMjI2LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gMDsgICAgICAgIAorICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
ICAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3Ro
ZXIpIGNvbnN0CkBAIC0yNDQsNyArMjQ0LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1
YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlOyB9Ci0g
ICAgCisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBpc0ludGVnZXIpCiAgICAgICAgIDogQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlKHVuaXRDYXRlZ29yeSgoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2
YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKSwgaXNJbnRlZ2VyKQpAQCAtMjU1LDEzICsyNTUsMjAgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdmFsdWU7CiB9OwogCisK
KworCisKKworCiBzdGF0aWMgY29uc3QgQ2FsY3VsYXRpb25DYXRlZ29yeSBhZGRTdWJ0cmFjdFJl
c3VsdFtDYWxjT3RoZXJdW0NhbGNPdGhlcl0gPSB7Ci0gICAgeyBDYWxjTnVtYmVyLCAgICAgICAg
Q2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2VudE51bWJlciwg
Q2FsY090aGVyIH0sCi0gICAgeyBDYWxjT3RoZXIsICAgICAgICAgQ2FsY0xlbmd0aCwgICAgICAg
IENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGgg
fSwKLSAgICB7IENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY1BlcmNl
bnQsICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2VudExlbmd0aCB9LAotICAgIHsg
Q2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudE51bWJlciwg
Q2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciB9LAotICAgIHsgQ2FsY090aGVyLCAgICAgICAg
IENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAg
IENhbGNQZXJjZW50TGVuZ3RoIH0sCi19OyAgICAKKy8vICAgICAgICAgICAgICAgICAgICAgICAg
Q2FsY051bWJlciAgICAgICAgIENhbGNMZW5ndGggICAgICAgICBDYWxjUGVyY2VudCAgICAgICAg
Q2FsY1BlcmNlbnROdW1iZXIgIENhbGNQZXJjZW50TGVuZ3RoCisvKiBDYWxjTnVtYmVyICAgICAg
ICAqLyB7IENhbGNOdW1iZXIsICAgICAgICBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRO
dW1iZXIsIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjT3RoZXIgfSwKKy8qIENhbGNMZW5ndGggICAg
ICAgICovIHsgQ2FsY090aGVyLCAgICAgICAgIENhbGNMZW5ndGgsICAgICAgICBDYWxjUGVyY2Vu
dExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoIH0sCisvKiBDYWxj
UGVyY2VudCAgICAgICAqLyB7IENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2VudExlbmd0aCwg
Q2FsY1BlcmNlbnQsICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2VudExlbmd0aCB9
LAorLyogQ2FsY1BlcmNlbnROdW1iZXIgKi8geyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVy
LCAgICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVy
IH0sCisvKiBDYWxjUGVyY2VudExlbmd0aCAqLyB7IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCB9LAorfTsKIAogc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5l
Q2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2lkZSwgY29uc3QgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlJiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKIHsKQEAgLTI3
OCwxMCArMjg1LDEwIEBAIHN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVn
b3J5KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpCiAKICAgICBzd2l0Y2ggKG9w
KSB7CiAgICAgY2FzZSBDYWxjQWRkOgotICAgIGNhc2UgQ2FsY1N1YnRyYWN0OiAgICAgICAgICAg
ICAKKyAgICBjYXNlIENhbGNTdWJ0cmFjdDoKICAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0UmVz
dWx0W2xlZnRDYXRlZ29yeV1bcmlnaHRDYXRlZ29yeV07CiAgICAgY2FzZSBDYWxjTXVsdGlwbHk6
Ci0gICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgIT0gQ2FsY051bWJlciAmJiByaWdodENhdGVnb3J5
ICE9IENhbGNOdW1iZXIpIAorICAgICAgICBpZiAobGVmdENhdGVnb3J5ICE9IENhbGNOdW1iZXIg
JiYgcmlnaHRDYXRlZ29yeSAhPSBDYWxjTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuIENhbGNP
dGhlcjsKICAgICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeSA9PSBDYWxjTnVtYmVyID8gcmlnaHRD
YXRlZ29yeSA6IGxlZnRDYXRlZ29yeTsKICAgICBjYXNlIENhbGNEaXZpZGU6CkBAIC0yODksMTgg
KzI5NiwzNSBAQCBzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShj
b25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaQogICAgICAgICAgICAgcmV0dXJuIENh
bGNPdGhlcjsKICAgICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeTsKICAgICB9Ci0gICAgCisKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gQ2FsY090aGVyOwogfQogCitzdGF0
aWMgZG91YmxlIGV2YWx1YXRlT3BlcmF0b3IoZG91YmxlIGxlZnRWYWx1ZSwgZG91YmxlIHJpZ2h0
VmFsdWUsIENhbGNPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBD
YWxjQWRkOgorICAgICAgICByZXR1cm4gbGVmdFZhbHVlICsgcmlnaHRWYWx1ZTsKKyAgICBjYXNl
IENhbGNTdWJ0cmFjdDoKKyAgICAgICAgcmV0dXJuIGxlZnRWYWx1ZSAtIHJpZ2h0VmFsdWU7Cisg
ICAgY2FzZSBDYWxjTXVsdGlwbHk6CisgICAgICAgIHJldHVybiBsZWZ0VmFsdWUgKiByaWdodFZh
bHVlOworICAgIGNhc2UgQ2FsY0RpdmlkZToKKyAgICAgICAgaWYgKHJpZ2h0VmFsdWUpCisgICAg
ICAgICAgICByZXR1cm4gbGVmdFZhbHVlIC8gcmlnaHRWYWx1ZTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgfQorICAgIHJldHVy
biAwOworfQorCiBjbGFzcyBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uIDogcHVibGljIENTU0NhbGNF
eHByZXNzaW9uTm9kZSB7CiAKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxj
QmluYXJ5T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IGxlZnRTaWRlLCBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcmlnaHRTaWRlLCBD
YWxjT3BlcmF0b3Igb3ApCiAgICAgewogICAgICAgICBBU1NFUlQobGVmdFNpZGUtPmNhdGVnb3J5
KCkgIT0gQ2FsY090aGVyICYmIHJpZ2h0U2lkZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjT3RoZXIpOwot
ICAgICAgICAKKwogICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG5ld0NhdGVnb3J5ID0gZGV0
ZXJtaW5lQ2F0ZWdvcnkoKmxlZnRTaWRlLCAqcmlnaHRTaWRlLCBvcCk7CiAKICAgICAgICAgaWYg
KG5ld0NhdGVnb3J5ID09IENhbGNPdGhlcikKQEAgLTMwOCw3ICszMzIsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uKGxlZnRT
aWRlLCByaWdodFNpZGUsIG9wLCBuZXdDYXRlZ29yeSkpOwogICAgIH0KLSAgICAKKwogICAgIHZp
cnR1YWwgYm9vbCBpc1plcm8oKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICFkb3VibGVW
YWx1ZSgpOwpAQCAtMzI1LDExICszNDksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENhbGNFeHByZXNzaW9uQmluYXJ5T3BlcmF0aW9uKGxlZnQucmVsZWFzZSgpLCBy
aWdodC5yZWxlYXNlKCksIG1fb3BlcmF0b3IpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGRvdWJs
ZSBkb3VibGVWYWx1ZSgpIGNvbnN0IAorICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBldmFsdWF0ZShtX2xlZnRTaWRlLT5kb3VibGVW
YWx1ZSgpLCBtX3JpZ2h0U2lkZS0+ZG91YmxlVmFsdWUoKSk7CiAgICAgfQotICAgIAorCiAgICAg
dmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyLCBib29sIGNvbXB1dGlu
Z0ZvbnRTaXplKSBjb25zdAogICAgIHsKICAgICAgICAgY29uc3QgZG91YmxlIGxlZnRWYWx1ZSA9
IG1fbGVmdFNpZGUtPmNvbXB1dGVMZW5ndGhQeChjdXJyZW50U3R5bGUsIHJvb3RTdHlsZSwgbXVs
dGlwbGllciwgY29tcHV0aW5nRm9udFNpemUpOwpAQCAtMzU0LDggKzM3OCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwogICAgICAgICByZXN1bHQuYXBwZW5kKHJpZ2h0
RXhwcmVzc2lvbik7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICAKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOyAgCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0
cmluZygpOwogICAgIH0KIAogICAgIHZpcnR1YWwgU3RyaW5nIGN1c3RvbUNzc1RleHQoKSBjb25z
dApAQCAtMzk2LDI0ICs0MjAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgLCBtX29wZXJhdG9yKG9w
KQogICAgIHsKICAgICB9Ci0gICAgCi0gICAgZG91YmxlIGV2YWx1YXRlKGRvdWJsZSBsZWZ0VmFs
dWUsIGRvdWJsZSByaWdodFZhbHVlKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX29w
ZXJhdG9yKSB7Ci0gICAgICAgIGNhc2UgQ2FsY0FkZDoKLSAgICAgICAgICAgIHJldHVybiBsZWZ0
VmFsdWUgKyByaWdodFZhbHVlOwotICAgICAgICBjYXNlIENhbGNTdWJ0cmFjdDoKLSAgICAgICAg
ICAgIHJldHVybiBsZWZ0VmFsdWUgLSByaWdodFZhbHVlOwotICAgICAgICBjYXNlIENhbGNNdWx0
aXBseToKLSAgICAgICAgICAgIHJldHVybiBsZWZ0VmFsdWUgKiByaWdodFZhbHVlOwotICAgICAg
ICBjYXNlIENhbGNEaXZpZGU6Ci0gICAgICAgICAgICBpZiAocmlnaHRWYWx1ZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbGVmdFZhbHVlIC8gcmlnaHRWYWx1ZTsKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiAwOworCisgICAgZG91YmxlIGV2YWx1YXRlKGRvdWJsZSBsZWZ0U2lkZSwg
ZG91YmxlIHJpZ2h0U2lkZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBldmFsdWF0ZU9w
ZXJhdG9yKGxlZnRTaWRlLCByaWdodFNpZGUsIG1fb3BlcmF0b3IpOwogICAgIH0KLSAgICAKKwog
ICAgIGNvbnN0IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fbGVmdFNpZGU7CiAgICAg
Y29uc3QgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9yaWdodFNpZGU7CiAgICAgY29u
c3QgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7CkBAIC00NDcsNiArNDU5LDIzIEBAIHByaXZhdGU6
CiAgICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHZhbHVlOwogICAgIH07CiAK
KyAgICBib29sIGlzU2ltcGxpZmlhYmxlRXhwcmVzc2lvbihDU1NDYWxjRXhwcmVzc2lvbk5vZGUq
IGxocywgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiByaHMpCisgICAgeworICAgICAgICByZXR1cm4g
bGhzLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIgJiYgcmhzLT5jYXRlZ29yeSgpID09IENhbGNO
dW1iZXI7CisgICAgfQorCisgICAgLy8gVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGNoZWNrZWQgbGhz
IGFuZCByaHMgd2l0aCBpc1NpbXBsaWZpYWJsZUV4cHJlc3Npb24gYWxyZWFkeS4KKyAgICBQYXNz
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlU2ltcGxpZmllZEV4cHJlc3Npb24o
UGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGxocywgUGFzc1JlZlB0cjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+IHJocywgQ2FsY09wZXJhdG9yIG9wKQorICAgIHsKKyAgICAgICAgZG91
YmxlIGV2YWx1YXRpb24gPSBldmFsdWF0ZU9wZXJhdG9yKGxocy0+ZG91YmxlVmFsdWUoKSwgcmhz
LT5kb3VibGVWYWx1ZSgpLCBvcCk7CisgICAgICAgIGlmIChldmFsdWF0aW9uICE9IGV2YWx1YXRp
b24pIC8vIE9ubHkgdHJ1ZSBmb3IgTmFOCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
Ym9vbCBpc0ludGVnZXIgPSBsaHMtPmlzSW50ZWdlcigpICYmIHJocy0+aXNJbnRlZ2VyKCk7Cisg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgZXZhbHVhdGlvblR5cGUgPSBpc0lu
dGVnZXIgPyBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSIDogQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVI7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
ZXZhbHVhdGVkUHJpbWl0aXZlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShldmFsdWF0aW9u
LCBldmFsdWF0aW9uVHlwZSk7CisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGV2YWx1YXRlZFByaW1pdGl2
ZS5nZXQoKSksIGlzSW50ZWdlcik7CisgICAgfQorCiAgICAgY2hhciBvcGVyYXRvclZhbHVlKENT
U1BhcnNlclZhbHVlTGlzdCogdG9rZW5zLCB1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAg
IGlmIChpbmRleCA+PSB0b2tlbnMtPnNpemUoKSkKQEAgLTQ3OCw4ICs1MDcsOCBAQCBwcml2YXRl
OgogICAgIGJvb2wgcGFyc2VWYWx1ZVRlcm0oQ1NTUGFyc2VyVmFsdWVMaXN0KiB0b2tlbnMsIGlu
dCBkZXB0aCwgdW5zaWduZWQqIGluZGV4LCBWYWx1ZSogcmVzdWx0KQogICAgIHsKICAgICAgICAg
aWYgKGNoZWNrRGVwdGhBbmRJbmRleCgmZGVwdGgsICppbmRleCwgdG9rZW5zKSAhPSBPSykKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgCi0gICAgICAgIAorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgICAgIGlmIChvcGVyYXRvclZhbHVlKHRva2VucywgKmluZGV4KSA9PSAn
KCcpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9ICppbmRleCArIDE7CiAg
ICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVFeHByZXNzaW9uKHRva2VucywgZGVwdGgsICZjdXJy
ZW50SW5kZXgsIHJlc3VsdCkpCkBAIC00OTcsNyArNTI2LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IHBhcnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB0
b2tlbnMsIGludCBkZXB0aCwgdW5zaWduZWQqIGluZGV4LCBWYWx1ZSogcmVzdWx0KQogICAgIHsK
ICAgICAgICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleCgmZGVwdGgsICppbmRleCwgdG9rZW5zKSAh
PSBPSykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgaWYgKCFwYXJzZVZhbHVlVGVybSh0b2tlbnMsIGRlcHRoLCBpbmRl
eCwgcmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxMiw3ICs1NDEsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZVRlcm0odG9rZW5zLCBkZXB0
aCwgaW5kZXgsICZyaHMpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZShyZXN1
bHQtPnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JD
aGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIENhbGNPcGVyYXRvciBvcCA9IHN0YXRpY19jYXN0PENh
bGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpOworICAgICAgICAgICAgaWYgKGlzU2ltcGxp
ZmlhYmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxDU1NDYWxjRXhwcmVzc2lvbk5vZGUqPihyZXN1
bHQtPnZhbHVlLmdldCgpKSwgc3RhdGljX2Nhc3Q8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKj4ocmhz
LnZhbHVlLmdldCgpKSkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IGNyZWF0ZVNp
bXBsaWZpZWRFeHByZXNzaW9uKHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSwgb3ApOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5
T3BlcmF0aW9uOjpjcmVhdGUocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBvcCk7CisKICAgICAg
ICAgICAgIGlmICghcmVzdWx0LT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KQEAgLTUyNCw3ICs1NTgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcGFyc2VB
ZGRpdGl2ZVZhbHVlRXhwcmVzc2lvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIHRva2VucywgaW50IGRl
cHRoLCB1bnNpZ25lZCogaW5kZXgsIFZhbHVlKiByZXN1bHQpCiAgICAgewogICAgICAgICBpZiAo
Y2hlY2tEZXB0aEFuZEluZGV4KCZkZXB0aCwgKmluZGV4LCB0b2tlbnMpICE9IE9LKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAgICAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICBpZiAoIXBhcnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24odG9rZW5zLCBkZXB0
aCwgaW5kZXgsIHJlc3VsdCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MzksNyAr
NTczLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVNdWx0aXBsaWNh
dGl2ZUV4cHJlc3Npb24odG9rZW5zLCBkZXB0aCwgaW5kZXgsICZyaHMpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNC
aW5hcnlPcGVyYXRpb246OmNyZWF0ZShyZXN1bHQtPnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19j
YXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIENhbGNP
cGVyYXRvciBvcCA9IHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIp
OworICAgICAgICAgICAgaWYgKGlzU2ltcGxpZmlhYmxlRXhwcmVzc2lvbihzdGF0aWNfY2FzdDxD
U1NDYWxjRXhwcmVzc2lvbk5vZGUqPihyZXN1bHQtPnZhbHVlLmdldCgpKSwgc3RhdGljX2Nhc3Q8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKj4ocmhzLnZhbHVlLmdldCgpKSkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LT52YWx1ZSA9IGNyZWF0ZVNpbXBsaWZpZWRFeHByZXNzaW9uKHJlc3VsdC0+dmFs
dWUsIHJocy52YWx1ZSwgb3ApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
c3VsdC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUocmVzdWx0LT52YWx1
ZSwgcmhzLnZhbHVlLCBvcCk7CisKICAgICAgICAgICAgIGlmICghcmVzdWx0LT52YWx1ZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTU1NSwxMiArNTk0LDEy
IEBAIHByaXZhdGU6CiB9OwogCiBQYXNzUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTQ2FsY1ZhbHVl
OjpjcmVhdGUoQ1NTUGFyc2VyU3RyaW5nIG5hbWUsIENTU1BhcnNlclZhbHVlTGlzdCogcGFyc2Vy
VmFsdWVMaXN0LCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCi17ICAgIAot
ICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlciBwYXJzZXI7ICAgIAoreworICAgIENTU0Nh
bGNFeHByZXNzaW9uTm9kZVBhcnNlciBwYXJzZXI7CiAgICAgUmVmUHRyPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4gZXhwcmVzc2lvbjsKLSAgICAKKwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiY2FsYygiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiLXdlYmtpdC1jYWxjKCIp
KQotICAgICAgICBleHByZXNzaW9uID0gcGFyc2VyLnBhcnNlQ2FsYyhwYXJzZXJWYWx1ZUxpc3Qp
OyAgICAKKyAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlci5wYXJzZUNhbGMocGFyc2VyVmFsdWVM
aXN0KTsKICAgICAvLyBGSVhNRSBjYWxjIChodHRwOi8vd2Via2l0Lm9yZy9iLzE2NjYyKSBBZGQg
cGFyc2luZyBmb3IgbWluIGFuZCBtYXggaGVyZQogCiAgICAgcmV0dXJuIGV4cHJlc3Npb24gPyBh
ZG9wdFJlZihuZXcgQ1NTQ2FsY1ZhbHVlKGV4cHJlc3Npb24sIHJhbmdlKSkgOiAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKaW5kZXggNTY5ZGJkZWEwYjBmMmIzYjg5
OGFlN2E0YzcyMmYwYjU2NGJhZGY4NC4uZTkzNGU1Y2U2YzUwNTQyMWRhOTgzYjgyMzMyYTNkMTNi
MzdkYjU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCkBAIC01
Nyw3ICs1Nyw3IEBAIGVudW0gQ2FsY3VsYXRpb25DYXRlZ29yeSB7CiAjZW5kaWYKICAgICBDYWxj
T3RoZXIKIH07Ci0gICAgCisKIGNsYXNzIENTU0NhbGNFeHByZXNzaW9uTm9kZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gewogcHVibGljOgogICAgIGVudW0gVHlw
ZSB7CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkNTU0NhbGNFeHBy
ZXNzaW9uTm9kZSgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNaZXJvKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgUGFzc093blB0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IHRvQ2FsY1ZhbHVlKFJl
bmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIHpvb20gPSAxLjApIGNv
bnN0ID0gMDsgICAgCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENhbGNFeHByZXNzaW9uTm9kZT4g
dG9DYWxjVmFsdWUoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUg
em9vbSA9IDEuMCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGll
ciA9IDEuMCwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSA9IGZhbHNlKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBTdHJpbmcgY3VzdG9tQ3NzVGV4dCgpIGNvbnN0ID0gMDsKQEAgLTc5LDIwICs3OSwy
MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7
CiAKLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9j
YXRlZ29yeTsgfSAgICAKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3Qg
eyByZXR1cm4gbV9jYXRlZ29yeTsgfQogICAgIGJvb2wgaXNJbnRlZ2VyKCkgY29uc3QgeyByZXR1
cm4gbV9pc0ludGVnZXI7IH0KLSAgICAKKwogcHJvdGVjdGVkOgogICAgIENTU0NhbGNFeHByZXNz
aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBib29sIGlzSW50ZWdlcikKICAg
ICAgICAgOiBtX2NhdGVnb3J5KGNhdGVnb3J5KQogICAgICAgICAsIG1faXNJbnRlZ2VyKGlzSW50
ZWdlcikKICAgICB7CiAgICAgfQotICAgIAorCiAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBtX2Nh
dGVnb3J5OwogICAgIGJvb2wgbV9pc0ludGVnZXI7CiB9OwotICAgICAgICAKKwogY2xhc3MgQ1NT
Q2FsY1ZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShDU1NQYXJzZXJTdHJpbmcgbmFtZSwgQ1NTUGFyc2Vy
VmFsdWVMaXN0KiwgQ2FsY3VsYXRpb25QZXJtaXR0ZWRWYWx1ZVJhbmdlKTsKQEAgLTEwMywxMSAr
MTAzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0
ZShtX2V4cHJlc3Npb24tPnRvQ2FsY1ZhbHVlKHN0eWxlLCByb290U3R5bGUsIHpvb20pLCBtX25v
bk5lZ2F0aXZlID8gQ2FsY3VsYXRpb25SYW5nZU5vbk5lZ2F0aXZlIDogQ2FsY3VsYXRpb25SYW5n
ZUFsbCk7CiAgICAgfQogICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7
IHJldHVybiBtX2V4cHJlc3Npb24tPmNhdGVnb3J5KCk7IH0KLSAgICBib29sIGlzSW50KCkgY29u
c3QgeyByZXR1cm4gbV9leHByZXNzaW9uLT5pc0ludGVnZXIoKTsgfSAgICAKKyAgICBib29sIGlz
SW50KCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uLT5pc0ludGVnZXIoKTsgfQogICAgIGRv
dWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNOZWdhdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZXhwcmVzc2lvbi0+ZG91YmxlVmFsdWUoKSA8IDA7IH0KICAgICBkb3VibGUgY29t
cHV0ZUxlbmd0aFB4KFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiByb290
U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMS4wLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0g
ZmFsc2UpIGNvbnN0OwotICAgICAgICAKKwogICAgIFN0cmluZyBjdXN0b21Dc3NUZXh0KCkgY29u
c3Q7CiAgICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVlJikgY29uc3Q7CiAjaWYgRU5B
QkxFKENTU19WQVJJQUJMRVMpCkBAIC0xMTYsMjEgKzExNiwyMSBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
KSBjb25zdDsKLSAgICAKLXByaXZhdGU6ICAgIAorCitwcml2YXRlOgogICAgIENTU0NhbGNWYWx1
ZShQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gZXhwcmVzc2lvbiwgQ2FsY3VsYXRp
b25QZXJtaXR0ZWRWYWx1ZVJhbmdlIHJhbmdlKQogICAgICAgICA6IENTU1ZhbHVlKENhbGN1bGF0
aW9uQ2xhc3MpCiAgICAgICAgICwgbV9leHByZXNzaW9uKGV4cHJlc3Npb24pCiAgICAgICAgICwg
bV9ub25OZWdhdGl2ZShyYW5nZSA9PSBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUpCiAgICAg
ewogICAgIH0KLSAgICAKKwogICAgIGRvdWJsZSBjbGFtcFRvUGVybWl0dGVkUmFuZ2UoZG91Ymxl
KSBjb25zdDsKIAogICAgIGNvbnN0IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fZXhw
cmVzc2lvbjsKICAgICBjb25zdCBib29sIG1fbm9uTmVnYXRpdmU7CiB9OwotICAgIAorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDU1NDYWxjdWxhdGlvblZhbHVlX2gKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCBlNWIwYzIwNjQwYjg4ZDQyZGI1NTlhYTNhZjE4YTk2MGIzNjA0ZmU0Li45ZjZhODEyNWM3
ZTgwODc3Mjc4YTZkMGE3ZTAyMGU4N2I0MzIyOWNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTMtMDItMjggIEFsYW4gQ3V0dGVyICA8YWxhbmN1dHRlckBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgQ1NTMyBjYWxjOiBpZGVudGlmeSBkaXZpZGUgYnkgemVybyBjYXNlcyBhdCBwYXJzZSB0aW1l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDQxMQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dGVkIHBhcnNlIHRpbWUgc2ltcGxpZmljYXRpb24gb24gbnVtYmVyIGV4cHJlc3Npb25zIGluIENT
UzMgY2FsYyBleHByZXNzaW9ucyB0byBkZXRlY3QgZGl2aWRlIGJ5IDAgY2FzZXMuCisgICAgICAg
IEFkZGVkIHRlc3QgY2FzZXMgdG8gY2hlY2sgY2F0Y2hpbmcgZGl2aWRlIGJ5IDAgYXQgcGFyc2Ug
dGltZS4KKworICAgICAgICAqIGNzczMvY2FsYy9jYXRjaC1kaXZpZGUtYnktMC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGNzczMvY2FsYy9jYXRjaC1kaXZpZGUtYnktMC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBjc3MzL2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGNzczMvY2FsYy9jc3NvbS5odG1sOgorICAgICAgICAqIGNzczMvY2FsYy9zaW1wbGlmaWNhdGlv
bi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNzczMvY2FsYy9zaW1wbGlmaWNhdGlv
bi5odG1sOiBBZGRlZC4KKwogMjAxMy0wMi0yNyAgS3VuaWhpa28gU2FrYW1vdG8gIDxrc2FrYW1v
dG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElOUFVUX01VTFRJUExFX0ZJRUxEU19VSTogU3Rl
cC11cC8tZG93biBvZiBob3VyIGZpZWxkIHNob3VsZCByZXNwZWN0IG1pbi9tYXggYXR0cmlidXRl
cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2NhdGNoLWRpdmlkZS1ieS0wLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jYXRjaC1kaXZpZGUtYnktMC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY4N2QxZDEzY2QwNGY5ZTdlYmU5ZjJiYThmNjM4ZWU4NWZi
ZGIzMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jYXRjaC1kaXZp
ZGUtYnktMC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0ZXN0cyBjYXRjaGlu
ZyBvZiBkaXZpZGUgYnkgMCBpbiBjYWxjKCkgYXQgcGFyc2UgdGltZQorCisxMDBweCAvIDAgPT4g
CisxMDBweCAvICgwKSA9PiAKKzEwMHB4IC8gKDIgLSAyKSA9PiAKKzEwMHB4IC8gKDIgLSAoLTYy
ICsgNjQpKSA9PiAKKzEwMHB4ICogKDEgLyAwKSA9PiAKKzEwMHB4ICogKDEgLyAoMCkpID0+IAor
MTAwcHggKiAoMSAvICgyIC0gMikpID0+IAorMTAwcHggKiAoMSAvICgyIC0gKC02MiArIDY0KSkp
ID0+IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY2F0Y2gtZGl2aWRlLWJ5
LTAuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jYXRjaC1kaXZpZGUtYnktMC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdhMWEyMWJmY2QwODVlOWFjZmE3YTUzY2VhMzgyYThkYjdiOWExYzcKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY2F0Y2gtZGl2aWRlLWJ5LTAuaHRt
bApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxkaXYgaWQ9ImR1bW15Ij48L2Rp
dj4KKzxkaXYgaWQ9InJlc3VsdHMiPlRoaXMgdGVzdHMgY2F0Y2hpbmcgb2YgZGl2aWRlIGJ5IDAg
aW4gY2FsYygpIGF0IHBhcnNlIHRpbWU8YnI+PGJyPjwvZGl2PgorPHNjcmlwdD4KK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB3aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK3Zh
ciB0ZXN0cyA9IFsKKyAgICAiMTAwcHggLyAwIiwKKyAgICAiMTAwcHggLyAoMCkiLAorICAgICIx
MDBweCAvICgyIC0gMikiLAorICAgICIxMDBweCAvICgyIC0gKC02MiArIDY0KSkiLAorICAgICIx
MDBweCAqICgxIC8gMCkiLAorICAgICIxMDBweCAqICgxIC8gKDApKSIsCisgICAgIjEwMHB4ICog
KDEgLyAoMiAtIDIpKSIsCisgICAgIjEwMHB4ICogKDEgLyAoMiAtICgtNjIgKyA2NCkpKSIsCitd
OworCit2YXIgcmVzdWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIik7Cit2
YXIgZHVtbXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZHVtbXkiKTsKK2ZvciAodmFyIGkg
PSAwOyBpIDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgZXhwcmVzc2lvbiA9IHRlc3Rz
W2ldOworICAgIGR1bW15LnN0eWxlLndpZHRoID0gJ2NhbGMoJyArIGV4cHJlc3Npb24gKyAnKSc7
CisgICAgcmVzdWx0cy5pbm5lckhUTUwgKz0gZXhwcmVzc2lvbiArICIgPT4gIiArIGR1bW15LnN0
eWxlLndpZHRoICsgIjxicj4iOworfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS1leHBlY3RlZC50eHQKaW5kZXggZDVmNTQz
YzIzYTI5NTJlYjExMzIxNGJjNmE4OTIzMzhlYjQ2ZjdkNS4uYWYyZjIyYjRkYmNmODkyMTY0YWQy
NWQzNGQ0NjIyMDViM2U1ZGZjMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nz
c29tLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20tZXhwZWN0
ZWQudHh0CkBAIC04LDggKzgsOCBAQCBUaGlzIHRlc3RzIGNhbGMoKSBhbmQgdGhlIENTU09NCiA1
cHggKyAyZW0gKyA2aW4gPT4gY2FsYygoNXB4ICsgMmVtKSArIDZpbikKIDEwMCUgLSAxMHB4IC8g
MiA9PiBjYWxjKDEwMCUgLSAoMTBweCAvIDIpKQogMXB4ICsgMmVtIC0gM3JlbSArIDRpbiA9PiBj
YWxjKCgoMXB4ICsgMmVtKSAtIDNyZW0pICsgNGluKQotMTAwcHggKiAoMSArIDIgKiAzIC0gNCAv
IDUpID0+IGNhbGMoMTAwcHggKiAoKDEgKyAoMiAqIDMpKSAtICg0IC8gNSkpKQotKDEwMHB4KSAr
IDIwMHB4ID0+IGNhbGMoMTAwcHggKyAyMDBweCkKKzEwMHB4ICogKDEgKyAyICogMyAtIDQgLyA1
KSA9PiBjYWxjKDEwMHB4ICogNi4yKQorMTAwcHggKyAyMDBweCA9PiBjYWxjKDEwMHB4ICsgMjAw
cHgpCiAoKCgoKCgoKCgoMTAwcHgpKSkpKSkpKSkpID0+IGNhbGMoMTAwcHgpCiBmbGltc3RpeCA9
PiBjYWxjKDEwMHB4KQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20u
aHRtbCBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS5odG1sCmluZGV4IDQxOWUwZWE5NTM1
N2JkMDE1MjlmNTA1NmQ1YzdhZTNlMDk5MDUxMDguLjZmYzQ5MTdiMGE0MzY2YjQxMzJhZTM0NTM4
MTRlZTFmYzFjNTlkNGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS5odG1sCkBAIC0xNCw3ICsxNCw3
IEBAIHZhciB0ZXN0cyA9IFsiMTBweCIsCiAgICAgICAgICAgICAgIjEwMCUgLSAxMHB4IC8gMiIs
CiAgICAgICAgICAgICAgIjFweCArIDJlbSAtIDNyZW0gKyA0aW4iLAogICAgICAgICAgICAgICIx
MDBweCAqICgxICsgMiAqIDMgLSA0IC8gNSkiLAotICAgICAgICAgICAgICIoMTAwcHgpICsgMjAw
cHgiLAorICAgICAgICAgICAgICIxMDBweCArIDIwMHB4IiwKICAgICAgICAgICAgICAiKCgoKCgo
KCgoKDEwMHB4KSkpKSkpKSkpKSIsCiAgICAgICAgICAgICAgImZsaW1zdGl4Il07CiAgICAgICAg
ICAgICAgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmljYXRpb24t
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xODliOGIwYWVkZjQ5NDAzYjViNTA4NGIxYzQ1NTRiMDNhYzMw
ZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0
aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3RzIHBhcnNlIHRpbWUg
c2ltcGxpZmljYXRpb24gaW4gY2FsYygpCisKKzEwMHB4ICogKDI1ICsgNCkgPT4gY2FsYygxMDBw
eCAqIDI5KQorMTAwcHggKiAoMjUgLSA0KSA9PiBjYWxjKDEwMHB4ICogMjEpCisxMDBweCAqICgy
ICogNSAtIDQpID0+IGNhbGMoMTAwcHggKiA2KQorMTAwcHggKiAoNSAtIDQgLyA1KSA9PiBjYWxj
KDEwMHB4ICogNC4yKQorMTAwcHggKiAoNiAqIDUgLSA4IC8gNSkgPT4gY2FsYygxMDBweCAqIDI4
LjQpCisxMDBweCAqICg2ICogKDUgLSA0KSAvIDgpID0+IGNhbGMoMTAwcHggKiAwLjc1KQorMTAw
cHggKiAoKDYpICogKDUgLSAoNCkpICsgKDMgKiAoKDQpKSAqICg4IC0gMikpKSA9PiBjYWxjKDEw
MHB4ICogNzgpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNh
dGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2VlZTNhMjNlNmUxNmEyOTlhNjViMGNiOWYyYmQ0MWI2MDExODFlMwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1sCkBA
IC0wLDAgKzEsMjUgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGRpdiBpZD0iZHVtbXkiPjwvZGl2Pgor
PGRpdiBpZD0icmVzdWx0cyI+VGhpcyB0ZXN0cyBwYXJzZSB0aW1lIHNpbXBsaWZpY2F0aW9uIGlu
IGNhbGMoKTxicj48YnI+PC9kaXY+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKwordmFyIHRlc3RzID0gWworICAg
ICIxMDBweCAqICgyNSArIDQpIiwKKyAgICAiMTAwcHggKiAoMjUgLSA0KSIsCisgICAgIjEwMHB4
ICogKDIgKiA1IC0gNCkiLAorICAgICIxMDBweCAqICg1IC0gNCAvIDUpIiwKKyAgICAiMTAwcHgg
KiAoNiAqIDUgLSA4IC8gNSkiLAorICAgICIxMDBweCAqICg2ICogKDUgLSA0KSAvIDgpIiwKKyAg
ICAiMTAwcHggKiAoKDYpICogKDUgLSAoNCkpICsgKDMgKiAoKDQpKSAqICg4IC0gMikpKSIsCitd
OworCit2YXIgcmVzdWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIik7Cit2
YXIgZHVtbXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZHVtbXkiKTsKK2ZvciAodmFyIGkg
PSAwOyBpIDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgZXhwcmVzc2lvbiA9IHRlc3Rz
W2ldOworICAgIGR1bW15LnN0eWxlLndpZHRoID0gJ2NhbGMoJyArIGV4cHJlc3Npb24gKyAnKSc7
CisgICAgcmVzdWx0cy5pbm5lckhUTUwgKz0gZXhwcmVzc2lvbiArICIgPT4gIiArIGR1bW15LnN0
eWxlLndpZHRoICsgIjxicj4iOworfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190905</attachid>
            <date>2013-03-01 01:06:40 -0800</date>
            <delta_ts>2013-03-04 15:47:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80411-20130301200251.patch</filename>
            <type>text/plain</type>
            <size>2407</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NDI0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOGJhODdkMGQxNzNmYTU5NWE1MmJj
MzYxMzU1MDE3YmZiNDA5ODBlZi4uY2E4ZTVlZmNjYzU1NjUxYmM4YmFlOWUzZjUxY2E5YWRhNjE2
MjgzNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAzLTAxICBBbGFuIEN1dHRlciAgPGFs
YW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENTUzMgY2FsYzogaWRlbnRpZnkgZGl2
aWRlIGJ5IHplcm8gY2FzZXMgYXQgcGFyc2UgdGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA0MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0cyB0byBjaGVjayB3aGV0aGVyIGRpdmlk
ZSBieSAwIGNhc2VzIGFyZSBjYXVnaHQuCisKKyAgICAgICAgKiBjc3MzL2NhbGMvY2F0Y2gtZGl2
aWRlLWJ5LTAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL2NhbGMvY2F0Y2gt
ZGl2aWRlLWJ5LTAuaHRtbDogQWRkZWQuCisKIDIwMTMtMDItMjggIFRha2FzaGkgVG95b3NoaW1h
ICA8dG95b3NoaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgY2hyb21pdW0g
Z2FyZGVuaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY2F0Y2gtZGl2aWRl
LWJ5LTAtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2NhdGNoLWRpdmlkZS1i
eS0wLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjg3ZDFkMTNjZDA0ZjllN2ViZTlmMmJhOGY2
MzhlZTg1ZmJkYjMxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nh
dGNoLWRpdmlkZS1ieS0wLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUaGlzIHRlc3Rz
IGNhdGNoaW5nIG9mIGRpdmlkZSBieSAwIGluIGNhbGMoKSBhdCBwYXJzZSB0aW1lCisKKzEwMHB4
IC8gMCA9PiAKKzEwMHB4IC8gKDApID0+IAorMTAwcHggLyAoMiAtIDIpID0+IAorMTAwcHggLyAo
MiAtICgtNjIgKyA2NCkpID0+IAorMTAwcHggKiAoMSAvIDApID0+IAorMTAwcHggKiAoMSAvICgw
KSkgPT4gCisxMDBweCAqICgxIC8gKDIgLSAyKSkgPT4gCisxMDBweCAqICgxIC8gKDIgLSAoLTYy
ICsgNjQpKSkgPT4gCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9jYXRjaC1k
aXZpZGUtYnktMC5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2NhdGNoLWRpdmlkZS1ieS0w
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2ExYTIxYmZjZDA4NWU5YWNmYTdhNTNjZWEzODJhOGRiN2I5YTFj
NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jYXRjaC1kaXZpZGUt
YnktMC5odG1sCkBAIC0wLDAgKzEsMjYgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGRpdiBpZD0iZHVt
bXkiPjwvZGl2PgorPGRpdiBpZD0icmVzdWx0cyI+VGhpcyB0ZXN0cyBjYXRjaGluZyBvZiBkaXZp
ZGUgYnkgMCBpbiBjYWxjKCkgYXQgcGFyc2UgdGltZTxicj48YnI+PC9kaXY+Cis8c2NyaXB0Pgor
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKwordmFyIHRlc3RzID0gWworICAgICIxMDBweCAvIDAiLAorICAgICIxMDBweCAvICgwKSIs
CisgICAgIjEwMHB4IC8gKDIgLSAyKSIsCisgICAgIjEwMHB4IC8gKDIgLSAoLTYyICsgNjQpKSIs
CisgICAgIjEwMHB4ICogKDEgLyAwKSIsCisgICAgIjEwMHB4ICogKDEgLyAoMCkpIiwKKyAgICAi
MTAwcHggKiAoMSAvICgyIC0gMikpIiwKKyAgICAiMTAwcHggKiAoMSAvICgyIC0gKC02MiArIDY0
KSkpIiwKK107CisKK3ZhciByZXN1bHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3Vs
dHMiKTsKK3ZhciBkdW1teSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkdW1teSIpOworZm9y
ICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7ICsraSkgeworICAgIHZhciBleHByZXNzaW9u
ID0gdGVzdHNbaV07CisgICAgZHVtbXkuc3R5bGUud2lkdGggPSAnY2FsYygnICsgZXhwcmVzc2lv
biArICcpJzsKKyAgICByZXN1bHRzLmlubmVySFRNTCArPSBleHByZXNzaW9uICsgIiA9PiAiICsg
ZHVtbXkuc3R5bGUud2lkdGggKyAiPGJyPiI7Cit9Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>