<?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>72501</bug_id>
          
          <creation_ts>2011-11-16 06:41:51 -0800</creation_ts>
          <short_desc>Improve modulo operation on 32bit platforms</short_desc>
          <delta_ts>2011-11-20 20:47:26 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Yuqiang Xian">yuqiang.xian</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>503823</commentid>
    <comment_count>0</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-16 06:41:51 -0800</bug_when>
    <thetext>There&apos;s softModulo implementation for ARM in baseline JIT. We can extend it to support more platforms like X86, and also apply it to DFG JIT. As there are some fast paths handling special cases performance gains are expected. On X86 (Core i7 Nehalem) Linux we&apos;re able to see 1% improvement on Kraken benchmark, mostly due to the 11% improvement on audio-oscillator. Neutral on SunSpider and V8.

TEST                         COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:                 1.011x as fast    5198.2ms +/- 0.2%   5141.6ms +/- 0.2%     significant

=============================================================================

  ai:                        1.007x as fast     794.1ms +/- 0.4%    788.9ms +/- 0.2%     significant
    astar:                   1.007x as fast     794.1ms +/- 0.4%    788.9ms +/- 0.2%     significant

  audio:                     1.029x as fast    1455.4ms +/- 0.3%   1413.9ms +/- 0.4%     significant
    beat-detection:          ??                 424.1ms +/- 1.0%    425.0ms +/- 0.6%     not conclusive: might be *1.002x as slow*
    dft:                     -                  378.3ms +/- 0.5%    376.8ms +/- 0.4%
    fft:                     -                  255.6ms +/- 0.3%    254.8ms +/- 0.4%
    oscillator:              1.112x as fast     397.4ms +/- 0.3%    357.3ms +/- 0.6%     significant

  imaging:                   -                 2062.5ms +/- 0.3%   2056.4ms +/- 0.3%
    gaussian-blur:           -                  753.6ms +/- 0.2%    752.7ms +/- 0.7%
    darkroom:                -                  417.7ms +/- 0.6%    417.1ms +/- 0.9%
    desaturate:              1.005x as fast     891.2ms +/- 0.5%    886.6ms +/- 0.1%     significant

  json:                      -                  199.4ms +/- 0.7%    199.0ms +/- 0.5%
    parse-financial:         ??                  77.9ms +/- 0.3%     78.1ms +/- 0.3%     not conclusive: might be *1.003x as slow*
    stringify-tinderbox:     -                  121.5ms +/- 1.0%    120.9ms +/- 0.8%

  stanford:                  1.005x as fast     686.8ms +/- 0.5%    683.4ms +/- 0.2%     significant
    crypto-aes:              ??                 137.6ms +/- 0.9%    138.3ms +/- 0.6%     not conclusive: might be *1.005x as slow*
    crypto-ccm:              -                  144.1ms +/- 0.3%    143.3ms +/- 0.7%
    crypto-pbkdf2:           1.010x as fast     294.9ms +/- 0.4%    292.0ms +/- 0.3%     significant
    crypto-sha256-iterative: -                  110.2ms +/- 0.9%    109.8ms +/- 1.2%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503913</commentid>
    <comment_count>1</comment_count>
      <attachid>115385</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-16 08:33:32 -0800</bug_when>
    <thetext>Created attachment 115385
proposed patch

Not marking review? - The major problem is that I don&apos;t have an ARM build environment and platform to test the patch.
Gavin, if possible could you please help test it on ARM if you think the modification is worthwhile? Otherwise I will try to setup such environment though it may take a bit long time... Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504048</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-11-16 10:51:44 -0800</bug_when>
    <thetext>Will do!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504499</commentid>
    <comment_count>3</comment_count>
      <attachid>115509</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-16 18:36:33 -0800</bug_when>
    <thetext>Created attachment 115509
patch updated

Just found the previous patch may have problem in DFG as in certain cases the dividend or divisor registers could be modified (for negative dividend or negative divisor), if they&apos;re not spilled and not the last use then future operations on those operands could generate wrong results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504509</commentid>
    <comment_count>4</comment_count>
      <attachid>115512</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-16 18:58:41 -0800</bug_when>
    <thetext>Created attachment 115512
Another update

Sorry... missing another fix in the previous patch. Attached a new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505525</commentid>
    <comment_count>5</comment_count>
      <attachid>115512</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-17 23:07:11 -0800</bug_when>
    <thetext>Comment on attachment 115512
Another update

I think it&apos;s ready for review. Had a test on ARMv7 and no regression is observed comparing to the code w/o the patch, DFG on or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506660</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-20 19:19:56 -0800</bug_when>
    <thetext>r=me.  Sorry for the long delay in getting around to looking at this!

By the way, do you know how many of the cases where this is a win have a constant divisor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506666</commentid>
    <comment_count>7</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-11-20 19:40:42 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; r=me.  Sorry for the long delay in getting around to looking at this!
&gt; 
&gt; By the way, do you know how many of the cases where this is a win have a constant divisor?

Thanks!

I don&apos;t know the answer to your question. While I guess we can add some fast paths to complex arithmetic operations (e.g., mod, div, mul) for known constants, where we could do some strength reduction peephole optimizations and see how they impact the performance. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506676</commentid>
    <comment_count>8</comment_count>
      <attachid>115512</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-20 20:47:17 -0800</bug_when>
    <thetext>Comment on attachment 115512
Another update

Clearing flags on attachment: 115512

Committed r100881: &lt;http://trac.webkit.org/changeset/100881&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506677</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-20 20:47:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115385</attachid>
            <date>2011-11-16 08:33:32 -0800</date>
            <delta_ts>2011-11-16 18:36:33 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>72501.patch</filename>
            <type>text/plain</type>
            <size>14749</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDExLTExLTE2ICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIEltcHJvdmUgbW9kdWxvIG9wZXJhdGlvbiBvbiAzMmJpdCBwbGF0Zm9ybXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTAxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0ZW5kIHNvZnRNb2R1
bG8gdG8gc3VwcG9ydCBYODYgYW5kIE1JUFMgaW4gYmFzZWxpbmUgSklULgorICAgICAgICBBcHBs
eSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gdG8gMzJiaXQgREZHIEpJVC4KKyAgICAgICAgMSUgZ2Fp
biBvbiBLcmFrZW4sIHRlc3RlZCBvbiBMaW51eCBDb3JlIGk3IE5laGFsZW0gMzJiaXQuCisKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTb2Z0TW9kdWxvKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX21v
ZCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6c29mdE1vZHVsbyk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTEtMTEtMTUg
IFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFtR
dF0gQ2VudHJhbGl6ZSBoaWRlX3N5bWJvbHMgYW5kIGVuc3VyZSBhbGwgbGlicyBhcmUgYnVpbHQg
d2l0aCBzeW1ib2wgdmlzaWJpbGl0eSAmIGJzeW1ib2xpY19mdW5jdGlvbnMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMTAwNDMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1Miw2ICsyMDUyLDExMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgfQogfQogCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyhOb2RlJiBub2RlKQoreworICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgR1BS
UmVnIG9wMUdwciA9IG9wMS5ncHIoKTsKKyAgICBHUFJSZWcgb3AyR3ByID0gb3AyLmdwcigpOwor
CisgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR3ByKSk7CisKKyNpZiBDUFUoWDg2KQorICAg
IEdQUlRlbXBvcmFyeSBlYXgodGhpcywgWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIEdQUlRlbXBv
cmFyeSBlZHgodGhpcywgWDg2UmVnaXN0ZXJzOjplZHgpOworICAgIEdQUlJlZyB0ZW1wMiA9IElu
dmFsaWRHUFJSZWc7CisgICAgaWYgKG9wMkdwciA9PSBYODZSZWdpc3RlcnM6OmVheCB8fCBvcDJH
cHIgPT0gWDg2UmVnaXN0ZXJzOjplZHgpIHsKKyAgICAgICAgdGVtcDIgPSBhbGxvY2F0ZSgpOwor
ICAgICAgICBtX2ppdC5tb3ZlKG9wMkdwciwgdGVtcDIpOworICAgICAgICBvcDJHcHIgPSB0ZW1w
MjsKKyAgICB9CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IGVkeC5ncHIoKTsKKyNlbHNlCisgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworI2VuZGlmCisKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoMCksIHNjcmF0Y2hHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBleGl0QnJh
bmNoOworCisgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHJlc3VsdCByZW1pbmRlcgorICAgIEpJ
VENvbXBpbGVyOjpKdW1wIHBvc2l0aXZlRGl2aXNvciA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBp
bGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMkdwciwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBt
X2ppdC5uZWczMihvcDJHcHIpOworICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaEdQUik7CisgICAgcG9zaXRpdmVEaXZpc29yLmxpbmsoJm1faml0KTsKKworICAgIEpJVENv
bXBpbGVyOjpKdW1wIHBvc2l0aXZlRGl2aWRlbmQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxl
cjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDFHcHIsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgbV9q
aXQubmVnMzIob3AxR3ByKTsKKyAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIoMiksIHNjcmF0
Y2hHUFIpOworICAgIHBvc2l0aXZlRGl2aWRlbmQubGluaygmbV9qaXQpOworCisgICAgLy8gU2F2
ZSB0aGUgY29uZGl0aW9uIGZvciBuZWdhdGl2ZSByZW1pbmRlcgorICAgIG1faml0LnB1c2goc2Ny
YXRjaEdQUik7CisKKyAgICBtX2ppdC5tb3ZlKG9wMUdwciwgcmVzdWx0R1BSKTsKKyAgICBleGl0
QnJhbmNoLmFwcGVuZChtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6TGVzc1RoYW4sIG9wMUdw
ciwgb3AyR3ByKSk7CisKKyAgICAvLyBQb3dlciBvZiB0d28gZmFzdCBjYXNlCisgICAgbV9qaXQu
bW92ZShvcDJHcHIsIHNjcmF0Y2hHUFIpOworICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgc2NyYXRjaEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90UG93ZXJPZlR3byA9IG1f
aml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgc2NyYXRjaEdQUiwgb3AyR3By
KTsKKyAgICBtX2ppdC5hbmQzMihzY3JhdGNoR1BSLCBvcDFHcHIsIHJlc3VsdEdQUik7CisgICAg
ZXhpdEJyYW5jaC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgIG5vdFBvd2VyT2ZUd28ubGlu
aygmbV9qaXQpOworCisjaWYgQ1BVKFg4NikKKyAgICBtX2ppdC5tb3ZlKG9wMUdwciwgZWF4Lmdw
cigpKTsKKyAgICBtX2ppdC5hc3NlbWJsZXIoKS5jZHEoKTsKKyAgICBtX2ppdC5hc3NlbWJsZXIo
KS5pZGl2bF9yKG9wMkdwcik7CisjZWxpZiBDUFUoQVJNX1RIVU1CMikKKyAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRoMih0aGlzKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5ncHIo
KTsKKyAgICBtX2ppdC5jb3VudExlYWRpbmdaZXJvczMyKG9wMUdwciwgc2NyYXRjaEdQUik7Cisg
ICAgbV9qaXQuY291bnRMZWFkaW5nWmVyb3MzMihvcDJHcHIsIHNjcmF0Y2hHUFIyKTsKKyAgICBt
X2ppdC5zdWIzMihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMik7CisKKyAgICBKSVRDb21waWxlcjo6
SnVtcCB1c2VGdWxsVGFibGUgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHNj
cmF0Y2hHUFIyLCBUcnVzdGVkSW1tMzIoMzEpKTsKKworICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hH
UFIyKTsKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMzEpLCBzY3JhdGNoR1BSMik7CisK
KyAgICBpbnQgZWxlbWVudFNpemVCeVNoaWZ0ID0gLTE7CisgICAgZWxlbWVudFNpemVCeVNoaWZ0
ID0gMzsKKyAgICBtX2ppdC5yZWxhdGl2ZVRhYmxlSnVtcChzY3JhdGNoR1BSMiwgZWxlbWVudFNp
emVCeVNoaWZ0KTsKKworICAgIHVzZUZ1bGxUYWJsZS5saW5rKCZtX2ppdCk7CisgICAgLy8gTW9k
dWxvIHRhYmxlCisgICAgZm9yIChpbnQgaSA9IDMxOyBpID4gMDsgLS1pKSB7CisgICAgICAgIFNo
aWZ0VHlwZUFuZEFtb3VudCBzaGlmdChTUlR5cGVfTFNMLCBpKTsKKyAgICAgICAgbV9qaXQuYXNz
ZW1ibGVyKCkuc3ViX1Moc2NyYXRjaEdQUjIsIHJlc3VsdEdQUiwgb3AyR3ByLCBzaGlmdCk7Cisg
ICAgICAgIG1faml0LmFzc2VtYmxlcigpLml0KEFSTXY3QXNzZW1ibGVyOjpDb25kaXRpb25DUyk7
CisgICAgICAgIG1faml0LmFzc2VtYmxlcigpLm1vdihyZXN1bHRHUFIsIHNjcmF0Y2hHUFIyKTsK
KyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBsb3dlciA9IG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpCZWxvdywgcmVzdWx0R1BSLCBvcDJHcHIpOworICAgIG1faml0LnN1YjMyKG9w
MkdwciwgcmVzdWx0R1BSKTsKKyAgICBsb3dlci5saW5rKCZtX2ppdCk7CisjZW5kaWYgLy8gQ1BV
KFg4NikKKworICAgIGV4aXRCcmFuY2gubGluaygmbV9qaXQpOworCisgICAgLy8gQ2hlY2sgZm9y
IG5lZ2F0aXZlIHJlbWluZGVyCisgICAgbV9qaXQucG9wKHNjcmF0Y2hHUFIpOworICAgIEpJVENv
bXBpbGVyOjpKdW1wIHBvc2l0aXZlUmVzdWx0ID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6
OkVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoMCkpOworICAgIG1faml0Lm5lZzMyKHJl
c3VsdEdQUik7CisgICAgcG9zaXRpdmVSZXN1bHQubGluaygmbV9qaXQpOworCisgICAgaW50ZWdl
clJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKworI2lmIENQVShYODYpCisgICAg
aWYgKHRlbXAyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHVubG9jayh0ZW1wMik7CisjZW5k
aWYKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogewogICAg
IE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKQEAgLTI1MzMsMzYgKzI2MzgsMTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhN
b2Q6IHsKLSNpZiBDUFUoWDg2KQogICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQxKCkpLnNob3Vs
ZE5vdFNwZWN1bGF0ZUludGVnZXIoKSAmJiAhYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkTm90U3Bl
Y3VsYXRlSW50ZWdlcigpCiAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIo
KSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZS
ZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJl
Z2lzdGVyczo6ZWR4KTsKLSAgICAgICAgICAgIEdQUlJlZyBvcDFHcHIgPSBvcDEuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgb3AyR3ByID0gb3AyLmdwcigpOwotCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJ
VENvbXBpbGVyOjpaZXJvLCBvcDJHcHIpKTsKLQotICAgICAgICAgICAgR1BSUmVnIHRlbXAyID0g
SW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIGlmIChvcDJHcHIgPT0gWDg2UmVnaXN0ZXJzOjpl
YXggfHwgb3AyR3ByID09IFg4NlJlZ2lzdGVyczo6ZWR4KSB7Ci0gICAgICAgICAgICAgICAgdGVt
cDIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AyR3ByLCB0ZW1w
Mik7Ci0gICAgICAgICAgICAgICAgb3AyR3ByID0gdGVtcDI7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxR3ByLCBlYXguZ3ByKCkpOwotICAgICAgICAgICAgbV9q
aXQuYXNzZW1ibGVyKCkuY2RxKCk7Ci0gICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5pZGl2
bF9yKG9wMkdwcik7Ci0KLSAgICAgICAgICAgIGlmICh0ZW1wMiAhPSBJbnZhbGlkR1BSUmVnKQot
ICAgICAgICAgICAgICAgIHVubG9jayh0ZW1wMik7Ci0KLSAgICAgICAgICAgIGludGVnZXJSZXN1
bHQoZWR4LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBjb21waWxlU29mdE1v
ZHVsbyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0jZW5kaWYKICAgICAg
ICAgCiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKQEAgLTI1NzYsMjEgKzI2NTYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24s
IHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOwogICAgICAgICAKLSNpZiAhQ1BVKFg4NikK
LSAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMSgpKS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2Vy
KCkgJiYgIWF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKQotICAg
ICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIEZQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMsIG9wMik7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
aW50UmVzdWx0KHRoaXMpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFp
bHVyZUNhc2VzOwotICAgICAgICAgICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIo
cmVzdWx0LmZwcigpLCBpbnRSZXN1bHQuZ3ByKCksIGZhaWx1cmVDYXNlcywgc2NyYXRjaC5mcHIo
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
ZmFpbHVyZUNhc2VzKTsKLQotICAgICAgICAgICAgaW50ZWdlclJlc3VsdChpbnRSZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5k
aWYKLQogICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEwMDQzMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTkx
NCw3ICsxOTE0LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMyKE5v
ZGUmKTsKICAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uQnl0ZUFycmF5KE5vZGUmKTsKICAgICB2
b2lkIGNvbXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3Bl
cnR5LCBOb2RlJik7Ci0gICAgCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB2b2lkIGNvbXBp
bGVTb2Z0TW9kdWxvKE5vZGUmKTsKKyNlbmRpZgorCiAgICAgLy8gSXQgaXMgYWNjZXB0YWJsZSB0
byBoYXZlIHN0cnVjdHVyZSBiZSBlcXVhbCB0byBzY3JhdGNoLCBzbyBsb25nIGFzIHlvdSdyZSBm
aW5lCiAgICAgLy8gd2l0aCB0aGUgc3RydWN0dXJlIEdQUiBiZWluZyBjbG9iYmVyZWQuCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYzMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHJldmlzaW9uIDEwMDQzMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE5MSwxNCArMTE5MSwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGl2KEluc3RydWN0
aW9uKiBjCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9E
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgQ1BVKFg4NikgfHwgQ1BV
KFg4Nl82NCkgfHwgQ1BVKE1JUFMpCi0KIHZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwogCisjaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8pCisKICNpZiBD
UFUoWDg2KSB8fCBDUFUoWDg2XzY0KQogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNv
cnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBBU1NFUlQocmVnVDAgPT0gWDg2
UmVnaXN0ZXJzOjplYXgpOwpAQCAtMTIwNyw3NCArMTIwNyw2IEBAIHZvaWQgSklUOjplbWl0X29w
X21vZChJbnN0cnVjdGlvbiogY3VycmUKICAgICBBU1NFUlQocmVnVDMgPT0gWDg2UmVnaXN0ZXJz
OjplYngpOwogI2VuZGlmCiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQo
b3AyKSAmJiBnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkgIT0gMCkgewotICAgICAg
ICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29u
c3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSwgcmVnVDIpOwotICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZykpKTsKLSAgICAgICAgaWYgKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSA9PSAt
MSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKDB4ODAwMDAwMDApKSk7IC8vIC0yMTQ3NDgzNjQ4IC8gLTEgPT4gRVhDX0FSSVRITUVU
SUMKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9w
MiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSkpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKDB4ODAwMDAwMDApKSk7IC8vIC0yMTQ3NDgzNjQ4IC8gLTEgPT4gRVhDX0FS
SVRITUVUSUMKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoMCkpKTsgLy8gZGl2aWRlIGJ5IDAKLSAgICB9Ci0KLSAgICBtb3ZlKHJlZ1QwLCBy
ZWdUMyk7IC8vIFNhdmUgZGl2aWRlbmQgcGF5bG9hZCwgaW4gY2FzZSBvZiAwLgotI2lmIENQVShY
ODYpIHx8IENQVShYODZfNjQpCi0gICAgbV9hc3NlbWJsZXIuY2RxKCk7Ci0gICAgbV9hc3NlbWJs
ZXIuaWRpdmxfcihyZWdUMik7Ci0jZWxpZiBDUFUoTUlQUykKLSAgICBtX2Fzc2VtYmxlci5kaXYo
cmVnVDAsIHJlZ1QyKTsKLSAgICBtX2Fzc2VtYmxlci5tZmhpKHJlZ1QxKTsKLSNlbmRpZgotCi0g
ICAgLy8gSWYgdGhlIHJlbWFpbmRlciBpcyB6ZXJvIGFuZCB0aGUgZGl2aWRlbmQgaXMgbmVnYXRp
dmUsIHRoZSByZXN1bHQgaXMgLTAuCi0gICAgSnVtcCBzdG9yZVJlc3VsdDEgPSBicmFuY2hUZXN0
MzIoTm9uWmVybywgcmVnVDEpOwotICAgIEp1bXAgc3RvcmVSZXN1bHQyID0gYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QzLCBUcnVzdGVkSW1tMzIoMHg4MDAwMDAwMCkpOyAvLyBub3QgbmVnYXRpdmUK
LSAgICBlbWl0U3RvcmUoZHN0LCBqc051bWJlcigtMC4wKSk7Ci0gICAgSnVtcCBlbmQgPSBqdW1w
KCk7Ci0KLSAgICBzdG9yZVJlc3VsdDEubGluayh0aGlzKTsKLSAgICBzdG9yZVJlc3VsdDIubGlu
ayh0aGlzKTsKLSAgICBlbWl0U3RvcmVJbnQzMihkc3QsIHJlZ1QxLCAob3AxID09IGRzdCB8fCBv
cDIgPT0gZHN0KSk7Ci0gICAgZW5kLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKLQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChv
cDIpICYmIGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSAhPSAwKSB7Ci0gICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW50MzIgY2hlY2sKLSAgICAgICAgaWYgKGdldENvbnN0
YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSA9PSAtMSkKLSAgICAgICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gMHg4MDAwMDAwMCBjaGVjawotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gaW50MzIgY2hlY2sKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBpbnQzMiBjaGVjawotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIDAgY2hlY2sK
LSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyAweDgwMDAwMDAwIGNoZWNrCi0gICAgfQot
Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX21vZCk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQob3AxKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIpOwotICAg
IHN0dWJDYWxsLmNhbGwoZHN0KTsKLX0KLQotI2Vsc2UgLy8gQ1BVKFg4NikgfHwgQ1BVKFg4Nl82
NCkgfHwgQ1BVKE1JUFMpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotCi0jaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8pCiAgICAgZW1pdExvYWQy
KG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CkBAIC0xMzEyLDggKzEyNDQsNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbW9kKEluc3RydWN0aW9uKiBjCiAjZW5kaWYKIH0KIAotI2VuZGlmIC8vIENQ
VShYODYpIHx8IENQVShYODZfNjQpCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBFTkQ6IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxMDA0MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NjAsMTEgKzE2NjAs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YQogI2lmIEVOQUJM
RShKSVRfVVNFX1NPRlRfTU9EVUxPKQogdm9pZCBKSVQ6OnNvZnRNb2R1bG8oKQogewotICAgIHB1
c2gocmVnVDEpOwotICAgIHB1c2gocmVnVDMpOwogICAgIG1vdmUocmVnVDIsIHJlZ1QzKTsKICAg
ICBtb3ZlKHJlZ1QwLCByZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QxKTsK
KyAgICBKdW1wTGlzdCBleGl0QnJhbmNoOwogCiAgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHJl
c3VsdCByZW1pbmRlcgogICAgIEp1bXAgcG9zaXRpdmVSZWdUMyA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMigwKSk7CkBAIC0xNjgwLDE5ICsxNjc5LDI2
IEBAIHZvaWQgSklUOjpzb2Z0TW9kdWxvKCkKICAgICAvLyBTYXZlIHRoZSBjb25kaXRpb24gZm9y
IG5lZ2F0aXZlIHJlbWluZGVyCiAgICAgcHVzaChyZWdUMSk7CiAKLSAgICBKdW1wIGV4aXRCcmFu
Y2ggPSBicmFuY2gzMihMZXNzVGhhbiwgcmVnVDIsIHJlZ1QzKTsKKyAgICBleGl0QnJhbmNoLmFw
cGVuZChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDIsIHJlZ1QzKSk7CiAKICAgICAvLyBQb3dlciBv
ZiB0d28gZmFzdCBjYXNlCiAgICAgbW92ZShyZWdUMywgcmVnVDApOwogICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgcG93ZXJPZlR3byA9IGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZWdUMCwgcmVnVDMpOworICAgIEp1bXAgbm90UG93ZXJPZlR3byA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMCwgcmVnVDMpOwogICAgIGFuZDMyKHJlZ1QwLCByZWdUMik7Ci0g
ICAgcG93ZXJPZlR3by5saW5rKHRoaXMpOwotCi0gICAgYW5kMzIocmVnVDMsIHJlZ1QwKTsKKyAg
ICBleGl0QnJhbmNoLmFwcGVuZChqdW1wKCkpOwogCi0gICAgSnVtcCBleGl0QnJhbmNoMiA9IGJy
YW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CisgICAgbm90UG93ZXJPZlR3by5saW5rKHRoaXMpOwog
CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICBtb3ZlKHJlZ1QyLCByZWdUMCk7Cisg
ICAgbV9hc3NlbWJsZXIuY2RxKCk7CisgICAgbV9hc3NlbWJsZXIuaWRpdmxfcihyZWdUMyk7Cisg
ICAgbW92ZShyZWdUMSwgcmVnVDIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgbV9hc3NlbWJsZXIu
ZGl2KHJlZ1QyLCByZWdUMyk7CisgICAgbV9hc3NlbWJsZXIubWZoaShyZWdUMik7CisjZWxzZQog
ICAgIGNvdW50TGVhZGluZ1plcm9zMzIocmVnVDIsIHJlZ1QwKTsKICAgICBjb3VudExlYWRpbmda
ZXJvczMyKHJlZ1QzLCByZWdUMSk7CiAgICAgc3ViMzIocmVnVDAsIHJlZ1QxKTsKQEAgLTE3Mjks
OSArMTczNSw5IEBAIHZvaWQgSklUOjpzb2Z0TW9kdWxvKCkKICAgICBKdW1wIGxvd2VyID0gYnJh
bmNoMzIoQmVsb3csIHJlZ1QyLCByZWdUMyk7CiAgICAgc3ViMzIocmVnVDMsIHJlZ1QyKTsKICAg
ICBsb3dlci5saW5rKHRoaXMpOworI2VuZGlmCiAKICAgICBleGl0QnJhbmNoLmxpbmsodGhpcyk7
Ci0gICAgZXhpdEJyYW5jaDIubGluayh0aGlzKTsKIAogICAgIC8vIENoZWNrIGZvciBuZWdhdGl2
ZSByZW1pbmRlcgogICAgIHBvcChyZWdUMSk7CkBAIC0xNzQwLDkgKzE3NDYsNiBAQCB2b2lkIEpJ
VDo6c29mdE1vZHVsbygpCiAgICAgcG9zaXRpdmVSZXN1bHQubGluayh0aGlzKTsKIAogICAgIG1v
dmUocmVnVDIsIHJlZ1QwKTsKLQotICAgIHBvcChyZWdUMyk7Ci0gICAgcG9wKHJlZ1QxKTsKICAg
ICByZXQoKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUX1VTRV9TT0ZUX01PRFVMTykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDEwMDQzMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTU1
LDYgKzk1NSwxMiBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIENQVShYODYpIHx8IENQVShYODZf
NjQpIHx8IENQVShNSVBTKQorI2lmICFkZWZpbmVkKEVOQUJMRV9KSVRfVVNFX1NPRlRfTU9EVUxP
KQorI2RlZmluZSBFTkFCTEVfSklUX1VTRV9TT0ZUX01PRFVMTyAxCisjZW5kaWYKKyNlbmRpZgor
CiAjaWYgQ1BVKFg4NikgJiYgQ09NUElMRVIoTVNWQykKICNkZWZpbmUgSlNDX0hPU1RfQ0FMTCBf
X2Zhc3RjYWxsCiAjZWxpZiBDUFUoWDg2KSAmJiBDT01QSUxFUihHQ0MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115509</attachid>
            <date>2011-11-16 18:36:33 -0800</date>
            <delta_ts>2011-11-16 18:58:41 -0800</delta_ts>
            <desc>patch updated</desc>
            <filename>72501.1.patch</filename>
            <type>text/plain</type>
            <size>15175</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNTI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDExLTExLTE2ICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIEltcHJvdmUgbW9kdWxvIG9wZXJhdGlvbiBvbiAzMmJpdCBwbGF0Zm9ybXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTAxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0ZW5kIHNvZnRNb2R1
bG8gdG8gc3VwcG9ydCBYODYgYW5kIE1JUFMgaW4gYmFzZWxpbmUgSklULgorICAgICAgICBBcHBs
eSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gdG8gMzJiaXQgREZHIEpJVC4KKyAgICAgICAgMSUgZ2Fp
biBvbiBLcmFrZW4sIHRlc3RlZCBvbiBMaW51eCBDb3JlIGk3IE5laGFsZW0gMzJiaXQuCisKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTb2Z0TW9kdWxvKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX21v
ZCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6c29mdE1vZHVsbyk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTEtMTEtMTYg
IE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0VGVz
dHMgZm9yIERlYnVnIEJ1aWxkcyBDcmFzaGVzIGluIEphdmFTY3JpcHRDb3JlL3lhcnIvWWFycklu
dGVycHJldGVyLmNwcCgxODUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDEwMDUyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNTIsNiArMjA1MiwxMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVNvZnRNb2R1bG8oTm9kZSYgbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQUlJlZyBvcDFHcHIgPSBvcDEuZ3ByKCk7Cisg
ICAgR1BSUmVnIG9wMkdwciA9IG9wMi5ncHIoKTsKKworICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8s
IG9wMkdwcikpOworCisjaWYgQ1BVKFg4NikKKyAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4
NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJlZ2lzdGVy
czo6ZWR4KTsKKyAgICBHUFJSZWcgdGVtcDIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmIChvcDJH
cHIgPT0gWDg2UmVnaXN0ZXJzOjplYXggfHwgb3AyR3ByID09IFg4NlJlZ2lzdGVyczo6ZWR4KSB7
CisgICAgICAgIHRlbXAyID0gYWxsb2NhdGUoKTsKKyAgICAgICAgbV9qaXQubW92ZShvcDJHcHIs
IHRlbXAyKTsKKyAgICAgICAgb3AyR3ByID0gdGVtcDI7CisgICAgfQorICAgIEdQUlJlZyByZXN1
bHRHUFIgPSBlZHguZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBlYXguZ3ByKCk7Cisj
ZWxzZQorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5n
cHIoKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZXhpdEJyYW5jaDsKKyAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3Qgc2F2ZUNvbmRpdGlvbjsKKworICAgIC8vIHJlc3VsdEdQUiBpcyB0byBo
b2xkIHRoZSBBQlMgdmFsdWUgb2YgdGhlIGRpdmlkZW5kIGJlZm9yZSBmaW5hbCByZXN1bHQgaXMg
cHJvZHVjZWQKKyAgICBtX2ppdC5tb3ZlKG9wMUdwciwgcmVzdWx0R1BSKTsKKyAgICAvLyBzY3Jh
dGNoR1BSMiBpcyB0byBob2xkIHRoZSBBQlMgdmFsdWUgb2YgdGhlIGRpdmlzb3IKKyAgICBtX2pp
dC5tb3ZlKG9wMkdwciwgc2NyYXRjaEdQUjIpOworCisgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZl
IHJlc3VsdCByZW1pbmRlcgorICAgIC8vIEFjY29yZGluZyB0byBFQ01BLTI2MiwgdGhlIHNpZ24g
b2YgdGhlIHJlc3VsdCBlcXVhbHMgdGhlIHNpZ24gb2YgdGhlIGRpdmlkZW5kCisgICAgSklUQ29t
cGlsZXI6Okp1bXAgcG9zaXRpdmVEaXZpZGVuZCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVy
OjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMUdwciwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBtX2pp
dC5uZWczMihyZXN1bHRHUFIpOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCBzY3Jh
dGNoR1BSKTsKKyAgICBzYXZlQ29uZGl0aW9uLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAg
cG9zaXRpdmVEaXZpZGVuZC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoMCksIHNjcmF0Y2hHUFIpOworICAgIHNhdmVDb25kaXRpb24uYXBwZW5kKG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMkdwciwgVHJ1c3RlZEltbTMy
KDApKSk7CisgICAgbV9qaXQubmVnMzIoc2NyYXRjaEdQUjIpOworCisgICAgLy8gU2F2ZSB0aGUg
Y29uZGl0aW9uIGZvciBuZWdhdGl2ZSByZW1pbmRlcgorICAgIHNhdmVDb25kaXRpb24ubGluaygm
bV9qaXQpOworICAgIG1faml0LnB1c2goc2NyYXRjaEdQUik7CisKKyAgICBleGl0QnJhbmNoLmFw
cGVuZChtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6TGVzc1RoYW4sIHJlc3VsdEdQUiwgc2Ny
YXRjaEdQUjIpKTsKKworICAgIC8vIFBvd2VyIG9mIHR3byBmYXN0IGNhc2UKKyAgICBtX2ppdC5t
b3ZlKHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1t
MzIoMSksIHNjcmF0Y2hHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFBvd2VyT2ZUd28g
PSBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHNjcmF0Y2hHUFIsIHNj
cmF0Y2hHUFIyKTsKKyAgICBtX2ppdC5hbmQzMihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAg
IGV4aXRCcmFuY2guYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICBub3RQb3dlck9mVHdvLmxp
bmsoJm1faml0KTsKKworI2lmIENQVShYODYpCisgICAgbV9qaXQubW92ZShyZXN1bHRHUFIsIGVh
eC5ncHIoKSk7CisgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2RxKCk7CisgICAgbV9qaXQuYXNzZW1i
bGVyKCkuaWRpdmxfcihzY3JhdGNoR1BSMik7CisjZWxpZiBDUFUoQVJNX1RIVU1CMikKKyAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDModGhpcyk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2Ny
YXRjaDMuZ3ByKCk7CisgICAgbV9qaXQuY291bnRMZWFkaW5nWmVyb3MzMihzY3JhdGNoR1BSMiwg
c2NyYXRjaEdQUik7CisgICAgbV9qaXQuY291bnRMZWFkaW5nWmVyb3MzMihyZXN1bHRHUFIsIHNj
cmF0Y2hHUFIzKTsKKyAgICBtX2ppdC5zdWIzMihzY3JhdGNoR1BSMywgc2NyYXRjaEdQUik7CisK
KyAgICBKSVRDb21waWxlcjo6SnVtcCB1c2VGdWxsVGFibGUgPSBtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMigzMSkpOworCisgICAgbV9q
aXQubmVnMzIoc2NyYXRjaEdQUik7CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDMxKSwg
c2NyYXRjaEdQUik7CisKKyAgICBpbnQgZWxlbWVudFNpemVCeVNoaWZ0ID0gLTE7CisgICAgZWxl
bWVudFNpemVCeVNoaWZ0ID0gMzsKKyAgICBtX2ppdC5yZWxhdGl2ZVRhYmxlSnVtcChzY3JhdGNo
R1BSLCBlbGVtZW50U2l6ZUJ5U2hpZnQpOworCisgICAgdXNlRnVsbFRhYmxlLmxpbmsoJm1faml0
KTsKKyAgICAvLyBNb2R1bG8gdGFibGUKKyAgICBmb3IgKGludCBpID0gMzE7IGkgPiAwOyAtLWkp
IHsKKyAgICAgICAgU2hpZnRUeXBlQW5kQW1vdW50IHNoaWZ0KFNSVHlwZV9MU0wsIGkpOworICAg
ICAgICBtX2ppdC5hc3NlbWJsZXIoKS5zdWJfUyhzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHNjcmF0
Y2hHUFIyLCBzaGlmdCk7CisgICAgICAgIG1faml0LmFzc2VtYmxlcigpLml0KEFSTXY3QXNzZW1i
bGVyOjpDb25kaXRpb25DUyk7CisgICAgICAgIG1faml0LmFzc2VtYmxlcigpLm1vdihyZXN1bHRH
UFIsIHNjcmF0Y2hHUFIpOworICAgIH0KKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGxvd2VyID0g
bV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkJlbG93LCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIy
KTsKKyAgICBtX2ppdC5zdWIzMihzY3JhdGNoR1BSMiwgcmVzdWx0R1BSKTsKKyAgICBsb3dlci5s
aW5rKCZtX2ppdCk7CisjZW5kaWYgLy8gQ1BVKFg4NikKKworICAgIGV4aXRCcmFuY2gubGluaygm
bV9qaXQpOworCisgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHJlbWluZGVyCisgICAgbV9qaXQu
cG9wKHNjcmF0Y2hHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHBvc2l0aXZlUmVzdWx0ID0g
bV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1t
MzIoMCkpOworICAgIG1faml0Lm5lZzMyKHJlc3VsdEdQUik7CisgICAgcG9zaXRpdmVSZXN1bHQu
bGluaygmbV9qaXQpOworCisgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKKworI2lmIENQVShYODYpCisgICAgaWYgKHRlbXAyICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgIHVubG9jayh0ZW1wMik7CisjZW5kaWYKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKQEAgLTI1
MzMsMzYgKzI2NDcsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSNpZiBDUFUoWDg2KQogICAgICAgICBp
ZiAoIWF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSAmJiAhYXQo
bm9kZS5jaGlsZDIoKSkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpCiAgICAgICAgICAgICAm
JiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKLSAgICAgICAgICAgIEdQ
UlJlZyBvcDFHcHIgPSBvcDEuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgb3AyR3ByID0gb3Ay
LmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHcHIpKTsKLQot
ICAgICAgICAgICAgR1BSUmVnIHRlbXAyID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIGlm
IChvcDJHcHIgPT0gWDg2UmVnaXN0ZXJzOjplYXggfHwgb3AyR3ByID09IFg4NlJlZ2lzdGVyczo6
ZWR4KSB7Ci0gICAgICAgICAgICAgICAgdGVtcDIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUob3AyR3ByLCB0ZW1wMik7Ci0gICAgICAgICAgICAgICAgb3AyR3ByID0g
dGVtcDI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR3ByLCBl
YXguZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2RxKCk7Ci0gICAgICAg
ICAgICBtX2ppdC5hc3NlbWJsZXIoKS5pZGl2bF9yKG9wMkdwcik7Ci0KLSAgICAgICAgICAgIGlm
ICh0ZW1wMiAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgICAgIHVubG9jayh0ZW1wMik7
Ci0KLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZWR4LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7
CisgICAgICAgICAgICBjb21waWxlU29mdE1vZHVsbyhub2RlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTI1NzYsMjEgKzI2NjUsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgY2FsbE9w
ZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24sIHJlc3VsdC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIp
OwogICAgICAgICAKLSNpZiAhQ1BVKFg4NikKLSAgICAgICAgaWYgKCFhdChub2RlLmNoaWxkMSgp
KS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIWF0KG5vZGUuY2hpbGQyKCkpLnNob3Vs
ZE5vdFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMsIG9wMik7
Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgaW50UmVzdWx0KHRoaXMpOwotCi0gICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICAgICAgbV9qaXQu
YnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIocmVzdWx0LmZwcigpLCBpbnRSZXN1bHQuZ3ByKCks
IGZhaWx1cmVDYXNlcywgc2NyYXRjaC5mcHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgZmFpbHVyZUNhc2VzKTsKLQotICAgICAgICAgICAg
aW50ZWdlclJlc3VsdChpbnRSZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKLQogICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlz
aW9uIDEwMDUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxNCw3ICsxOTE0LDEwIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBjb21waWxlVmFsdWVUb0ludDMyKE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bE9uQnl0ZUFycmF5KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJh
eShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlJik7Ci0gICAgCisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICB2b2lkIGNvbXBpbGVTb2Z0TW9kdWxvKE5vZGUmKTsKKyNlbmRpZgor
CiAgICAgLy8gSXQgaXMgYWNjZXB0YWJsZSB0byBoYXZlIHN0cnVjdHVyZSBiZSBlcXVhbCB0byBz
Y3JhdGNoLCBzbyBsb25nIGFzIHlvdSdyZSBmaW5lCiAgICAgLy8gd2l0aCB0aGUgc3RydWN0dXJl
IEdQUiBiZWluZyBjbG9iYmVyZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHJl
dmlzaW9uIDEwMDUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
YzMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5MSwxNCArMTE5MSwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZGl2KEluc3RydWN0aW9uKiBjCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwogCi0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKE1JUFMpCi0KIHZvaWQg
SklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5z
aWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICB1bnNpZ25l
ZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogCisjaWYgRU5BQkxFKEpJ
VF9VU0VfU09GVF9NT0RVTE8pCisKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQogICAgIC8v
IE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9u
cy4KICAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAtMTIwNyw3NCAr
MTIwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmUKICAgICBB
U1NFUlQocmVnVDMgPT0gWDg2UmVnaXN0ZXJzOjplYngpOwogI2VuZGlmCiAKLSAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSAmJiBnZXRDb25zdGFudE9wZXJhbmQob3Ay
KS5hc0ludDMyKCkgIT0gMCkgewotICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7
Ci0gICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSwg
cmVnVDIpOwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgaWYgKGdldENvbnN0YW50
T3BlcmFuZChvcDIpLmFzSW50MzIoKSA9PSAtMSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKDB4ODAwMDAwMDApKSk7IC8vIC0yMTQ3
NDgzNjQ4IC8gLTEgPT4gRVhDX0FSSVRITUVUSUMKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0
TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwotCi0gICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKDB4ODAwMDAwMDApKSk7IC8v
IC0yMTQ3NDgzNjQ4IC8gLTEgPT4gRVhDX0FSSVRITUVUSUMKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoMCkpKTsgLy8gZGl2aWRlIGJ5IDAK
LSAgICB9Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMyk7IC8vIFNhdmUgZGl2aWRlbmQgcGF5bG9h
ZCwgaW4gY2FzZSBvZiAwLgotI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCi0gICAgbV9hc3Nl
bWJsZXIuY2RxKCk7Ci0gICAgbV9hc3NlbWJsZXIuaWRpdmxfcihyZWdUMik7Ci0jZWxpZiBDUFUo
TUlQUykKLSAgICBtX2Fzc2VtYmxlci5kaXYocmVnVDAsIHJlZ1QyKTsKLSAgICBtX2Fzc2VtYmxl
ci5tZmhpKHJlZ1QxKTsKLSNlbmRpZgotCi0gICAgLy8gSWYgdGhlIHJlbWFpbmRlciBpcyB6ZXJv
IGFuZCB0aGUgZGl2aWRlbmQgaXMgbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgLTAuCi0gICAgSnVt
cCBzdG9yZVJlc3VsdDEgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDEpOwotICAgIEp1bXAg
c3RvcmVSZXN1bHQyID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QzLCBUcnVzdGVkSW1tMzIoMHg4
MDAwMDAwMCkpOyAvLyBub3QgbmVnYXRpdmUKLSAgICBlbWl0U3RvcmUoZHN0LCBqc051bWJlcigt
MC4wKSk7Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0KLSAgICBzdG9yZVJlc3VsdDEubGluayh0
aGlzKTsKLSAgICBzdG9yZVJlc3VsdDIubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmVJbnQzMihk
c3QsIHJlZ1QxLCAob3AxID09IGRzdCB8fCBvcDIgPT0gZHN0KSk7Ci0gICAgZW5kLmxpbmsodGhp
cyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVu
c2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWdu
ZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpICYmIGdldENvbnN0YW50T3BlcmFuZChvcDIp
LmFzSW50MzIoKSAhPSAwKSB7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW50MzIg
Y2hlY2sKLSAgICAgICAgaWYgKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSA9PSAt
MSkKLSAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gMHg4MDAwMDAwMCBjaGVjawot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW50MzIgY2hlY2sK
LSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjawotICAgICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIDAgY2hlY2sKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyAweDgwMDAwMDAwIGNoZWNrCi0gICAgfQotCi0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wX21vZCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AxKTsKLSAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChvcDIpOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKLX0KLQotI2Vs
c2UgLy8gQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKE1JUFMpCi0KLXZvaWQgSklUOjpl
bWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2ln
bmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQg
b3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBvcDIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0jaWYgRU5BQkxFKEpJVF9VU0Vf
U09GVF9NT0RVTE8pCiAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1Qz
LCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CkBAIC0x
MzEyLDggKzEyNDQsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKEluc3RydWN0aW9uKiBj
CiAjZW5kaWYKIH0KIAotI2VuZGlmIC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCi0KIC8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxMDA1MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2NjAsMTEgKzE2NjAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9hcmd1bWVudF9ieV92YQogI2lmIEVOQUJMRShKSVRfVVNFX1NPRlRfTU9EVUxPKQogdm9pZCBK
SVQ6OnNvZnRNb2R1bG8oKQogewotICAgIHB1c2gocmVnVDEpOwotICAgIHB1c2gocmVnVDMpOwog
ICAgIG1vdmUocmVnVDIsIHJlZ1QzKTsKICAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QxKTsKKyAgICBKdW1wTGlzdCBleGl0QnJhbmNoOwogCiAg
ICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHJlc3VsdCByZW1pbmRlcgogICAgIEp1bXAgcG9zaXRp
dmVSZWdUMyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0z
MigwKSk7CkBAIC0xNjgwLDE5ICsxNjc5LDI2IEBAIHZvaWQgSklUOjpzb2Z0TW9kdWxvKCkKICAg
ICAvLyBTYXZlIHRoZSBjb25kaXRpb24gZm9yIG5lZ2F0aXZlIHJlbWluZGVyCiAgICAgcHVzaChy
ZWdUMSk7CiAKLSAgICBKdW1wIGV4aXRCcmFuY2ggPSBicmFuY2gzMihMZXNzVGhhbiwgcmVnVDIs
IHJlZ1QzKTsKKyAgICBleGl0QnJhbmNoLmFwcGVuZChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDIs
IHJlZ1QzKSk7CiAKICAgICAvLyBQb3dlciBvZiB0d28gZmFzdCBjYXNlCiAgICAgbW92ZShyZWdU
MywgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAg
cG93ZXJPZlR3byA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCwgcmVnVDMpOworICAgIEp1
bXAgbm90UG93ZXJPZlR3byA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCwgcmVnVDMpOwog
ICAgIGFuZDMyKHJlZ1QwLCByZWdUMik7Ci0gICAgcG93ZXJPZlR3by5saW5rKHRoaXMpOwotCi0g
ICAgYW5kMzIocmVnVDMsIHJlZ1QwKTsKKyAgICBleGl0QnJhbmNoLmFwcGVuZChqdW1wKCkpOwog
Ci0gICAgSnVtcCBleGl0QnJhbmNoMiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CisgICAg
bm90UG93ZXJPZlR3by5saW5rKHRoaXMpOwogCisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkK
KyAgICBtb3ZlKHJlZ1QyLCByZWdUMCk7CisgICAgbV9hc3NlbWJsZXIuY2RxKCk7CisgICAgbV9h
c3NlbWJsZXIuaWRpdmxfcihyZWdUMyk7CisgICAgbW92ZShyZWdUMSwgcmVnVDIpOworI2VsaWYg
Q1BVKE1JUFMpCisgICAgbV9hc3NlbWJsZXIuZGl2KHJlZ1QyLCByZWdUMyk7CisgICAgbV9hc3Nl
bWJsZXIubWZoaShyZWdUMik7CisjZWxzZQogICAgIGNvdW50TGVhZGluZ1plcm9zMzIocmVnVDIs
IHJlZ1QwKTsKICAgICBjb3VudExlYWRpbmdaZXJvczMyKHJlZ1QzLCByZWdUMSk7CiAgICAgc3Vi
MzIocmVnVDAsIHJlZ1QxKTsKQEAgLTE3MjksOSArMTczNSw5IEBAIHZvaWQgSklUOjpzb2Z0TW9k
dWxvKCkKICAgICBKdW1wIGxvd2VyID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCByZWdUMyk7CiAg
ICAgc3ViMzIocmVnVDMsIHJlZ1QyKTsKICAgICBsb3dlci5saW5rKHRoaXMpOworI2VuZGlmCiAK
ICAgICBleGl0QnJhbmNoLmxpbmsodGhpcyk7Ci0gICAgZXhpdEJyYW5jaDIubGluayh0aGlzKTsK
IAogICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSByZW1pbmRlcgogICAgIHBvcChyZWdUMSk7CkBA
IC0xNzQwLDkgKzE3NDYsNiBAQCB2b2lkIEpJVDo6c29mdE1vZHVsbygpCiAgICAgcG9zaXRpdmVS
ZXN1bHQubGluayh0aGlzKTsKIAogICAgIG1vdmUocmVnVDIsIHJlZ1QwKTsKLQotICAgIHBvcChy
ZWdUMyk7Ci0gICAgcG9wKHJlZ1QxKTsKICAgICByZXQoKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUo
SklUX1VTRV9TT0ZUX01PRFVMTykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxh
dGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3Jt
LmgJKHJldmlzaW9uIDEwMDUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZv
cm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTU1LDYgKzk1NSwxMiBAQAogI2VuZGlmCiAjZW5kaWYK
IAorI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShNSVBTKQorI2lmICFkZWZpbmVk
KEVOQUJMRV9KSVRfVVNFX1NPRlRfTU9EVUxPKQorI2RlZmluZSBFTkFCTEVfSklUX1VTRV9TT0ZU
X01PRFVMTyAxCisjZW5kaWYKKyNlbmRpZgorCiAjaWYgQ1BVKFg4NikgJiYgQ09NUElMRVIoTVNW
QykKICNkZWZpbmUgSlNDX0hPU1RfQ0FMTCBfX2Zhc3RjYWxsCiAjZWxpZiBDUFUoWDg2KSAmJiBD
T01QSUxFUihHQ0MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115512</attachid>
            <date>2011-11-16 18:58:41 -0800</date>
            <delta_ts>2011-11-20 20:47:17 -0800</delta_ts>
            <desc>Another update</desc>
            <filename>72501.2.patch</filename>
            <type>text/plain</type>
            <size>15199</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNTI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDExLTExLTE2ICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIEltcHJvdmUgbW9kdWxvIG9wZXJhdGlvbiBvbiAzMmJpdCBwbGF0Zm9ybXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTAxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0ZW5kIHNvZnRNb2R1
bG8gdG8gc3VwcG9ydCBYODYgYW5kIE1JUFMgaW4gYmFzZWxpbmUgSklULgorICAgICAgICBBcHBs
eSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gdG8gMzJiaXQgREZHIEpJVC4KKyAgICAgICAgMSUgZ2Fp
biBvbiBLcmFrZW4sIHRlc3RlZCBvbiBMaW51eCBDb3JlIGk3IE5laGFsZW0gMzJiaXQuCisKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTb2Z0TW9kdWxvKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX21v
ZCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6c29mdE1vZHVsbyk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTEtMTEtMTYg
IE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0VGVz
dHMgZm9yIERlYnVnIEJ1aWxkcyBDcmFzaGVzIGluIEphdmFTY3JpcHRDb3JlL3lhcnIvWWFycklu
dGVycHJldGVyLmNwcCgxODUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDEwMDUyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNTIsNiArMjA1MiwxMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dEJyYW5jaChOb2RlJiBubwogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVNvZnRNb2R1bG8oTm9kZSYgbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQUlJlZyBvcDFHcHIgPSBvcDEuZ3ByKCk7Cisg
ICAgR1BSUmVnIG9wMkdwciA9IG9wMi5ncHIoKTsKKworICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8s
IG9wMkdwcikpOworCisjaWYgQ1BVKFg4NikKKyAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4
NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJlZ2lzdGVy
czo6ZWR4KTsKKyAgICBHUFJSZWcgdGVtcDIgPSBJbnZhbGlkR1BSUmVnOworICAgIGlmIChvcDJH
cHIgPT0gWDg2UmVnaXN0ZXJzOjplYXggfHwgb3AyR3ByID09IFg4NlJlZ2lzdGVyczo6ZWR4KSB7
CisgICAgICAgIHRlbXAyID0gYWxsb2NhdGUoKTsKKyAgICAgICAgbV9qaXQubW92ZShvcDJHcHIs
IHRlbXAyKTsKKyAgICAgICAgb3AyR3ByID0gdGVtcDI7CisgICAgfQorICAgIEdQUlJlZyByZXN1
bHRHUFIgPSBlZHguZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBlYXguZ3ByKCk7Cisj
ZWxzZQorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisjZW5kaWYKKworICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5n
cHIoKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZXhpdEJyYW5jaDsKKworICAgIC8vIHJl
c3VsdEdQUiBpcyB0byBob2xkIHRoZSBBQlMgdmFsdWUgb2YgdGhlIGRpdmlkZW5kIGJlZm9yZSBm
aW5hbCByZXN1bHQgaXMgcHJvZHVjZWQKKyAgICBtX2ppdC5tb3ZlKG9wMUdwciwgcmVzdWx0R1BS
KTsKKyAgICAvLyBzY3JhdGNoR1BSMiBpcyB0byBob2xkIHRoZSBBQlMgdmFsdWUgb2YgdGhlIGRp
dmlzb3IKKyAgICBtX2ppdC5tb3ZlKG9wMkdwciwgc2NyYXRjaEdQUjIpOworCisgICAgLy8gQ2hl
Y2sgZm9yIG5lZ2F0aXZlIHJlc3VsdCByZW1haW5kZXIKKyAgICAvLyBBY2NvcmRpbmcgdG8gRUNN
QS0yNjIsIHRoZSBzaWduIG9mIHRoZSByZXN1bHQgZXF1YWxzIHRoZSBzaWduIG9mIHRoZSBkaXZp
ZGVuZAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHBvc2l0aXZlRGl2aWRlbmQgPSBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDFHcHIsIFRydXN0ZWRJbW0z
MigwKSk7CisgICAgbV9qaXQubmVnMzIocmVzdWx0R1BSKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2F2ZUNvbmRp
dGlvbiA9IG1faml0Lmp1bXAoKTsKKworICAgIHBvc2l0aXZlRGl2aWRlbmQubGluaygmbV9qaXQp
OworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBzY3JhdGNoR1BSKTsKKworICAgIC8v
IFNhdmUgdGhlIGNvbmRpdGlvbiBmb3IgbmVnYXRpdmUgcmVtYWluZGVyCisgICAgc2F2ZUNvbmRp
dGlvbi5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQucHVzaChzY3JhdGNoR1BSKTsKKworICAgIEpJ
VENvbXBpbGVyOjpKdW1wIHBvc2l0aXZlRGl2aXNvciA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBp
bGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMkdwciwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBt
X2ppdC5uZWczMihzY3JhdGNoR1BSMik7CisKKyAgICBwb3NpdGl2ZURpdmlzb3IubGluaygmbV9q
aXQpOworICAgIGV4aXRCcmFuY2guYXBwZW5kKG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpM
ZXNzVGhhbiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSMikpOworCisgICAgLy8gUG93ZXIgb2YgdHdv
IGZhc3QgY2FzZQorICAgIG1faml0Lm1vdmUoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIpOworICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CisgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90UG93ZXJPZlR3byA9IG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6
Tm9uWmVybywgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUjIpOworICAgIG1faml0LmFuZDMyKHNjcmF0
Y2hHUFIsIHJlc3VsdEdQUik7CisgICAgZXhpdEJyYW5jaC5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KworICAgIG5vdFBvd2VyT2ZUd28ubGluaygmbV9qaXQpOworCisjaWYgQ1BVKFg4NikKKyAgICBt
X2ppdC5tb3ZlKHJlc3VsdEdQUiwgZWF4LmdwcigpKTsKKyAgICBtX2ppdC5hc3NlbWJsZXIoKS5j
ZHEoKTsKKyAgICBtX2ppdC5hc3NlbWJsZXIoKS5pZGl2bF9yKHNjcmF0Y2hHUFIyKTsKKyNlbGlm
IENQVShBUk1fVEhVTUIyKQorICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMyh0aGlzKTsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjMgPSBzY3JhdGNoMy5ncHIoKTsKKyAgICBtX2ppdC5jb3VudExlYWRp
bmdaZXJvczMyKHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5jb3VudExlYWRp
bmdaZXJvczMyKHJlc3VsdEdQUiwgc2NyYXRjaEdQUjMpOworICAgIG1faml0LnN1YjMyKHNjcmF0
Y2hHUFIzLCBzY3JhdGNoR1BSKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIHVzZUZ1bGxUYWJs
ZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTMyKDMxKSk7CisKKyAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5h
ZGQzMihUcnVzdGVkSW1tMzIoMzEpLCBzY3JhdGNoR1BSKTsKKworICAgIGludCBlbGVtZW50U2l6
ZUJ5U2hpZnQgPSAtMTsKKyAgICBlbGVtZW50U2l6ZUJ5U2hpZnQgPSAzOworICAgIG1faml0LnJl
bGF0aXZlVGFibGVKdW1wKHNjcmF0Y2hHUFIsIGVsZW1lbnRTaXplQnlTaGlmdCk7CisKKyAgICB1
c2VGdWxsVGFibGUubGluaygmbV9qaXQpOworICAgIC8vIE1vZHVsbyB0YWJsZQorICAgIGZvciAo
aW50IGkgPSAzMTsgaSA+IDA7IC0taSkgeworICAgICAgICBTaGlmdFR5cGVBbmRBbW91bnQgc2hp
ZnQoU1JUeXBlX0xTTCwgaSk7CisgICAgICAgIG1faml0LmFzc2VtYmxlcigpLnN1Yl9TKHNjcmF0
Y2hHUFIsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUjIsIHNoaWZ0KTsKKyAgICAgICAgbV9qaXQuYXNz
ZW1ibGVyKCkuaXQoQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbkNTKTsKKyAgICAgICAgbV9qaXQu
YXNzZW1ibGVyKCkubW92KHJlc3VsdEdQUiwgc2NyYXRjaEdQUik7CisgICAgfQorCisgICAgSklU
Q29tcGlsZXI6Okp1bXAgbG93ZXIgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6QmVsb3cs
IHJlc3VsdEdQUiwgc2NyYXRjaEdQUjIpOworICAgIG1faml0LnN1YjMyKHNjcmF0Y2hHUFIyLCBy
ZXN1bHRHUFIpOworICAgIGxvd2VyLmxpbmsoJm1faml0KTsKKyNlbmRpZiAvLyBDUFUoWDg2KQor
CisgICAgZXhpdEJyYW5jaC5saW5rKCZtX2ppdCk7CisKKyAgICAvLyBDaGVjayBmb3IgbmVnYXRp
dmUgcmVtYWluZGVyCisgICAgbV9qaXQucG9wKHNjcmF0Y2hHUFIpOworICAgIEpJVENvbXBpbGVy
OjpKdW1wIHBvc2l0aXZlUmVzdWx0ID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFs
LCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoMCkpOworICAgIG1faml0Lm5lZzMyKHJlc3VsdEdQ
Uik7CisgICAgcG9zaXRpdmVSZXN1bHQubGluaygmbV9qaXQpOworCisgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKworI2lmIENQVShYODYpCisgICAgaWYgKHRl
bXAyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHVubG9jayh0ZW1wMik7CisjZW5kaWYKK30K
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogewogICAgIE5vZGVU
eXBlIG9wID0gbm9kZS5vcDsKQEAgLTI1MzMsMzYgKzI2NDgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNb2Q6IHsK
LSNpZiBDUFUoWDg2KQogICAgICAgICBpZiAoIWF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZE5vdFNw
ZWN1bGF0ZUludGVnZXIoKSAmJiAhYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkTm90U3BlY3VsYXRl
SW50ZWdlcigpCiAgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewot
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZSZWdpc3Rl
cnM6OmVheCk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgZWR4KHRoaXMsIFg4NlJlZ2lzdGVy
czo6ZWR4KTsKLSAgICAgICAgICAgIEdQUlJlZyBvcDFHcHIgPSBvcDEuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgb3AyR3ByID0gb3AyLmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBp
bGVyOjpaZXJvLCBvcDJHcHIpKTsKLQotICAgICAgICAgICAgR1BSUmVnIHRlbXAyID0gSW52YWxp
ZEdQUlJlZzsKLSAgICAgICAgICAgIGlmIChvcDJHcHIgPT0gWDg2UmVnaXN0ZXJzOjplYXggfHwg
b3AyR3ByID09IFg4NlJlZ2lzdGVyczo6ZWR4KSB7Ci0gICAgICAgICAgICAgICAgdGVtcDIgPSBh
bGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AyR3ByLCB0ZW1wMik7Ci0g
ICAgICAgICAgICAgICAgb3AyR3ByID0gdGVtcDI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIG1faml0Lm1vdmUob3AxR3ByLCBlYXguZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQuYXNz
ZW1ibGVyKCkuY2RxKCk7Ci0gICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5pZGl2bF9yKG9w
Mkdwcik7Ci0KLSAgICAgICAgICAgIGlmICh0ZW1wMiAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAg
ICAgICAgICAgIHVubG9jayh0ZW1wMik7Ci0KLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZWR4
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBjb21waWxlU29mdE1vZHVsbyhu
b2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgCiAg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
QEAgLTI1NzYsMjEgKzI2NjYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAKICAgICAgICAgY2FsbE9wZXJhdGlvbihmbW9kQXNERkdPcGVyYXRpb24sIHJlc3Vs
dC5mcHIoKSwgb3AxRlBSLCBvcDJGUFIpOwogICAgICAgICAKLSNpZiAhQ1BVKFg4NikKLSAgICAg
ICAgaWYgKCFhdChub2RlLmNoaWxkMSgpKS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkgJiYg
IWF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKQotICAgICAgICAg
ICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIEZQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMsIG9wMik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgaW50UmVz
dWx0KHRoaXMpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFpbHVyZUNh
c2VzOwotICAgICAgICAgICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIocmVzdWx0
LmZwcigpLCBpbnRSZXN1bHQuZ3ByKCksIGZhaWx1cmVDYXNlcywgc2NyYXRjaC5mcHIoKSk7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgZmFpbHVy
ZUNhc2VzKTsKLQotICAgICAgICAgICAgaW50ZWdlclJlc3VsdChpbnRSZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKLQog
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEwMDUyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxNCw3ICsx
OTE0LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMyKE5vZGUmKTsK
ICAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uQnl0ZUFycmF5KE5vZGUmKTsKICAgICB2b2lkIGNv
bXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlJik7Ci0gICAgCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB2b2lkIGNvbXBpbGVTb2Z0
TW9kdWxvKE5vZGUmKTsKKyNlbmRpZgorCiAgICAgLy8gSXQgaXMgYWNjZXB0YWJsZSB0byBoYXZl
IHN0cnVjdHVyZSBiZSBlcXVhbCB0byBzY3JhdGNoLCBzbyBsb25nIGFzIHlvdSdyZSBmaW5lCiAg
ICAgLy8gd2l0aCB0aGUgc3RydWN0dXJlIEdQUiBiZWluZyBjbG9iYmVyZWQuCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYzMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHAJKHJldmlzaW9uIDEwMDUyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5
MSwxNCArMTE5MSwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGl2KEluc3RydWN0aW9uKiBj
CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82
NCkgfHwgQ1BVKE1JUFMpCi0KIHZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwogCisjaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8pCisKICNpZiBDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KQogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3Qg
Zm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0
ZXJzOjplYXgpOwpAQCAtMTIwNyw3NCArMTIwNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChJ
bnN0cnVjdGlvbiogY3VycmUKICAgICBBU1NFUlQocmVnVDMgPT0gWDg2UmVnaXN0ZXJzOjplYngp
OwogI2VuZGlmCiAKLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSAm
JiBnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkgIT0gMCkgewotICAgICAgICBlbWl0
TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRP
cGVyYW5kKG9wMikuYXNJbnQzMigpKSwgcmVnVDIpOwotICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsK
LSAgICAgICAgaWYgKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSA9PSAtMSkKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KDB4ODAwMDAwMDApKSk7IC8vIC0yMTQ3NDgzNjQ4IC8gLTEgPT4gRVhDX0FSSVRITUVUSUMKLSAg
ICB9IGVsc2UgewotICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwgcmVn
VDMsIHJlZ1QyKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSkpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKDB4ODAwMDAwMDApKSk7IC8vIC0yMTQ3NDgzNjQ4IC8gLTEgPT4gRVhDX0FSSVRITUVU
SUMKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoMCkpKTsgLy8gZGl2aWRlIGJ5IDAKLSAgICB9Ci0KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMyk7
IC8vIFNhdmUgZGl2aWRlbmQgcGF5bG9hZCwgaW4gY2FzZSBvZiAwLgotI2lmIENQVShYODYpIHx8
IENQVShYODZfNjQpCi0gICAgbV9hc3NlbWJsZXIuY2RxKCk7Ci0gICAgbV9hc3NlbWJsZXIuaWRp
dmxfcihyZWdUMik7Ci0jZWxpZiBDUFUoTUlQUykKLSAgICBtX2Fzc2VtYmxlci5kaXYocmVnVDAs
IHJlZ1QyKTsKLSAgICBtX2Fzc2VtYmxlci5tZmhpKHJlZ1QxKTsKLSNlbmRpZgotCi0gICAgLy8g
SWYgdGhlIHJlbWFpbmRlciBpcyB6ZXJvIGFuZCB0aGUgZGl2aWRlbmQgaXMgbmVnYXRpdmUsIHRo
ZSByZXN1bHQgaXMgLTAuCi0gICAgSnVtcCBzdG9yZVJlc3VsdDEgPSBicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDEpOwotICAgIEp1bXAgc3RvcmVSZXN1bHQyID0gYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QzLCBUcnVzdGVkSW1tMzIoMHg4MDAwMDAwMCkpOyAvLyBub3QgbmVnYXRpdmUKLSAgICBl
bWl0U3RvcmUoZHN0LCBqc051bWJlcigtMC4wKSk7Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0K
LSAgICBzdG9yZVJlc3VsdDEubGluayh0aGlzKTsKLSAgICBzdG9yZVJlc3VsdDIubGluayh0aGlz
KTsKLSAgICBlbWl0U3RvcmVJbnQzMihkc3QsIHJlZ1QxLCAob3AxID09IGRzdCB8fCBvcDIgPT0g
ZHN0KSk7Ci0gICAgZW5kLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9t
b2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKLQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpICYm
IGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSAhPSAwKSB7Ci0gICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gaW50MzIgY2hlY2sKLSAgICAgICAgaWYgKGdldENvbnN0YW50T3Bl
cmFuZChvcDIpLmFzSW50MzIoKSA9PSAtMSkKLSAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gMHg4MDAwMDAwMCBjaGVjawotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gaW50MzIgY2hlY2sKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBp
bnQzMiBjaGVjawotICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIDAgY2hlY2sKLSAgICAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyAweDgwMDAwMDAwIGNoZWNrCi0gICAgfQotCi0gICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX21vZCk7Ci0gICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQob3AxKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIpOwotICAgIHN0dWJD
YWxsLmNhbGwoZHN0KTsKLX0KLQotI2Vsc2UgLy8gQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwg
Q1BVKE1JUFMpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwotCi0jaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8pCiAgICAgZW1pdExvYWQyKG9wMSwg
cmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpKSk7CkBAIC0xMzEyLDggKzEyNDQsNiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbW9kKEluc3RydWN0aW9uKiBjCiAjZW5kaWYKIH0KIAotI2VuZGlmIC8vIENQVShYODYp
IHx8IENQVShYODZfNjQpCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6
IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCShyZXZpc2lvbiAxMDA1MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NjAsMTEgKzE2NjAsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9hcmd1bWVudF9ieV92YQogI2lmIEVOQUJMRShKSVRf
VVNFX1NPRlRfTU9EVUxPKQogdm9pZCBKSVQ6OnNvZnRNb2R1bG8oKQogewotICAgIHB1c2gocmVn
VDEpOwotICAgIHB1c2gocmVnVDMpOwogICAgIG1vdmUocmVnVDIsIHJlZ1QzKTsKICAgICBtb3Zl
KHJlZ1QwLCByZWdUMik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QxKTsKKyAgICBK
dW1wTGlzdCBleGl0QnJhbmNoOwogCiAgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHJlc3VsdCBy
ZW1pbmRlcgogICAgIEp1bXAgcG9zaXRpdmVSZWdUMyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMigwKSk7CkBAIC0xNjgwLDE5ICsxNjc5LDI2IEBAIHZv
aWQgSklUOjpzb2Z0TW9kdWxvKCkKICAgICAvLyBTYXZlIHRoZSBjb25kaXRpb24gZm9yIG5lZ2F0
aXZlIHJlbWluZGVyCiAgICAgcHVzaChyZWdUMSk7CiAKLSAgICBKdW1wIGV4aXRCcmFuY2ggPSBi
cmFuY2gzMihMZXNzVGhhbiwgcmVnVDIsIHJlZ1QzKTsKKyAgICBleGl0QnJhbmNoLmFwcGVuZChi
cmFuY2gzMihMZXNzVGhhbiwgcmVnVDIsIHJlZ1QzKSk7CiAKICAgICAvLyBQb3dlciBvZiB0d28g
ZmFzdCBjYXNlCiAgICAgbW92ZShyZWdUMywgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOwotICAgIEp1bXAgcG93ZXJPZlR3byA9IGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMCwgcmVnVDMpOworICAgIEp1bXAgbm90UG93ZXJPZlR3byA9IGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZWdUMCwgcmVnVDMpOwogICAgIGFuZDMyKHJlZ1QwLCByZWdUMik7Ci0gICAgcG93
ZXJPZlR3by5saW5rKHRoaXMpOwotCi0gICAgYW5kMzIocmVnVDMsIHJlZ1QwKTsKKyAgICBleGl0
QnJhbmNoLmFwcGVuZChqdW1wKCkpOwogCi0gICAgSnVtcCBleGl0QnJhbmNoMiA9IGJyYW5jaFRl
c3QzMihaZXJvLCByZWdUMCk7CisgICAgbm90UG93ZXJPZlR3by5saW5rKHRoaXMpOwogCisjaWYg
Q1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICBtb3ZlKHJlZ1QyLCByZWdUMCk7CisgICAgbV9h
c3NlbWJsZXIuY2RxKCk7CisgICAgbV9hc3NlbWJsZXIuaWRpdmxfcihyZWdUMyk7CisgICAgbW92
ZShyZWdUMSwgcmVnVDIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgbV9hc3NlbWJsZXIuZGl2KHJl
Z1QyLCByZWdUMyk7CisgICAgbV9hc3NlbWJsZXIubWZoaShyZWdUMik7CisjZWxzZQogICAgIGNv
dW50TGVhZGluZ1plcm9zMzIocmVnVDIsIHJlZ1QwKTsKICAgICBjb3VudExlYWRpbmdaZXJvczMy
KHJlZ1QzLCByZWdUMSk7CiAgICAgc3ViMzIocmVnVDAsIHJlZ1QxKTsKQEAgLTE3MjksOSArMTcz
NSw5IEBAIHZvaWQgSklUOjpzb2Z0TW9kdWxvKCkKICAgICBKdW1wIGxvd2VyID0gYnJhbmNoMzIo
QmVsb3csIHJlZ1QyLCByZWdUMyk7CiAgICAgc3ViMzIocmVnVDMsIHJlZ1QyKTsKICAgICBsb3dl
ci5saW5rKHRoaXMpOworI2VuZGlmCiAKICAgICBleGl0QnJhbmNoLmxpbmsodGhpcyk7Ci0gICAg
ZXhpdEJyYW5jaDIubGluayh0aGlzKTsKIAogICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSByZW1p
bmRlcgogICAgIHBvcChyZWdUMSk7CkBAIC0xNzQwLDkgKzE3NDYsNiBAQCB2b2lkIEpJVDo6c29m
dE1vZHVsbygpCiAgICAgcG9zaXRpdmVSZXN1bHQubGluayh0aGlzKTsKIAogICAgIG1vdmUocmVn
VDIsIHJlZ1QwKTsKLQotICAgIHBvcChyZWdUMyk7Ci0gICAgcG9wKHJlZ1QxKTsKICAgICByZXQo
KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUX1VTRV9TT0ZUX01PRFVMTykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDEwMDUyNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTU1LDYgKzk1
NSwxMiBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8
IENQVShNSVBTKQorI2lmICFkZWZpbmVkKEVOQUJMRV9KSVRfVVNFX1NPRlRfTU9EVUxPKQorI2Rl
ZmluZSBFTkFCTEVfSklUX1VTRV9TT0ZUX01PRFVMTyAxCisjZW5kaWYKKyNlbmRpZgorCiAjaWYg
Q1BVKFg4NikgJiYgQ09NUElMRVIoTVNWQykKICNkZWZpbmUgSlNDX0hPU1RfQ0FMTCBfX2Zhc3Rj
YWxsCiAjZWxpZiBDUFUoWDg2KSAmJiBDT01QSUxFUihHQ0MpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>