<?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>158157</bug_id>
          
          <creation_ts>2016-05-27 10:29:44 -0700</creation_ts>
          <short_desc>regExpProtoFuncSplitFast should OOM before it swaps</short_desc>
          <delta_ts>2016-05-27 17:10:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1197107</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-27 10:29:44 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197108</commentid>
    <comment_count>1</comment_count>
      <attachid>279970</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-27 10:30:17 -0700</bug_when>
    <thetext>Created attachment 279970
stuff

I haven&apos;t tried compiling it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197155</commentid>
    <comment_count>2</comment_count>
      <attachid>279980</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-27 12:13:48 -0700</bug_when>
    <thetext>Created attachment 279980
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197191</commentid>
    <comment_count>3</comment_count>
      <attachid>279980</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-05-27 13:29:46 -0700</bug_when>
    <thetext>Comment on attachment 279980
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        This is an enormous speed-up on some jsfunfuzz tests: they got from running for a long

/got/go/.

&gt; Source/JavaScriptCore/runtime/RegExpPrototype.cpp:599
&gt; +    unsigned maxSizeForDirectPath = 100000;

Maybe make this a common constant at the top of this file since it appears to be used for more than 1 function?

&gt; Source/JavaScriptCore/runtime/RegExpPrototype.cpp:671
&gt; +    

Please remove blank space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197197</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-27 13:36:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 279980 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=279980&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:15
&gt; &gt; +        This is an enormous speed-up on some jsfunfuzz tests: they got from running for a long
&gt; 
&gt; /got/go/.

OK!

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/RegExpPrototype.cpp:599
&gt; &gt; +    unsigned maxSizeForDirectPath = 100000;
&gt; 
&gt; Maybe make this a common constant at the top of this file since it appears
&gt; to be used for more than 1 function?

It appears only once in this file!  It also appears in RegExpObject.h.  I figure that having two copies of the constant is slightly less evil than the alternatives that I can think of:

- Introduce a new header for the constant.
- Introduce the constant into some random header.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/RegExpPrototype.cpp:671
&gt; &gt; +    
&gt; 
&gt; Please remove blank space.

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197286</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-27 17:10:00 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/201467</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197287</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-05-27 17:10:16 -0700</bug_when>
    <thetext>Committed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279970</attachid>
            <date>2016-05-27 10:30:17 -0700</date>
            <delta_ts>2016-05-27 12:13:48 -0700</delta_ts>
            <desc>stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13933</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMjAxNDUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU3LDY1ICs0NTcsMTcg
QEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBhZHZhbmNlU3RyaW5nSW5kZQogICAgIHJldHVybiBS
ZWdFeHBPYmplY3Q6OmFkdmFuY2VTdHJpbmdVbmljb2RlKHN0ciwgc3RyU2l6ZSwgaW5kZXgpOwog
fQogCi0vLyBFUyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxp
bWl0KQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNTcGxpdEZh
c3QoRXhlY1N0YXRlKiBleGVjKQorZW51bSBTcGxpdENvbnRyb2wgeworICAgIENvbnRpbnVlU3Bs
aXQsCisgICAgQWJvcnRTcGxpdAorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHVzaEZ1bmM+Cit2
b2lkIGdlbmVyaWNTcGxpdCgKKyAgICBWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgUmVnRXhwKiBy
ZWdleHAsIGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkIGlucHV0U2l6ZSwKKyAgICB1bnNp
Z25lZCYgcG9zaXRpb24sIHVuc2lnbmVkJiBtYXRjaFBvc2l0aW9uLCBib29sIHJlZ0V4cElzU3Rp
Y2t5LCBib29sIHJlZ0V4cElzVW5pY29kZSwKKyAgICBjb25zdCBQdXNoRnVuYyYgcHVzaCkKIHsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotCi0gICAgLy8gMS4gW2hhbmRsZWQgYnkgSlMgYnVp
bHRpbl0gTGV0IHJ4IGJlIHRoZSB0aGlzIHZhbHVlLgotICAgIC8vIDIuIFtoYW5kbGVkIGJ5IEpT
IGJ1aWx0aW5dIElmIFR5cGUocngpIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yIGV4
Y2VwdGlvbi4KLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwotICAg
IFJlZ0V4cCogcmVnZXhwID0gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+cmVnRXhwKCk7Ci0K
LSAgICAvLyAzLiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBMZXQgUyBiZSA/IFRvU3RyaW5nKHN0
cmluZykuCi0gICAgU3RyaW5nIGlucHV0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBBU1NFUlQoIWlucHV0LmlzTnVs
bCgpKTsKLQotICAgIC8vIDQuIFtoYW5kbGVkIGJ5IEpTIGJ1aWx0aW5dIExldCBDIGJlID8gU3Bl
Y2llc0NvbnN0cnVjdG9yKHJ4LCAlUmVnRXhwJSkuCi0gICAgLy8gNS4gW2hhbmRsZWQgYnkgSlMg
YnVpbHRpbl0gTGV0IGZsYWdzIGJlID8gVG9TdHJpbmcoPyBHZXQocngsICJmbGFncyIpKS4KLSAg
ICAvLyA2LiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBJZiBmbGFncyBjb250YWlucyAidSIsIGxl
dCB1bmljb2RlTWF0Y2hpbmcgYmUgdHJ1ZS4KLSAgICAvLyA3LiBbaGFuZGxlZCBieSBKUyBidWls
dGluXSBFbHNlLCBsZXQgdW5pY29kZU1hdGNoaW5nIGJlIGZhbHNlLgotICAgIC8vIDguIFtoYW5k
bGVkIGJ5IEpTIGJ1aWx0aW5dIElmIGZsYWdzIGNvbnRhaW5zICJ5IiwgbGV0IG5ld0ZsYWdzIGJl
IGZsYWdzLgotICAgIC8vIDkuIFtoYW5kbGVkIGJ5IEpTIGJ1aWx0aW5dIEVsc2UsIGxldCBuZXdG
bGFncyBiZSB0aGUgc3RyaW5nIHRoYXQgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgZmxhZ3MgYW5k
ICJ5Ii4KLSAgICAvLyAxMC4gW2hhbmRsZWQgYnkgSlMgYnVpbHRpbl0gTGV0IHNwbGl0dGVyIGJl
ID8gQ29uc3RydWN0KEMsIMKrIHJ4LCBuZXdGbGFncyDCuykuCi0KLSAgICAvLyAxMS4gTGV0IEEg
YmUgQXJyYXlDcmVhdGUoMCkuCi0gICAgLy8gMTIuIExldCBsZW5ndGhBIGJlIDAuCi0gICAgSlNB
cnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICB1bnNpZ25l
ZCByZXN1bHRMZW5ndGggPSAwOwotCi0gICAgLy8gMTMuIElmIGxpbWl0IGlzIHVuZGVmaW5lZCwg
bGV0IGxpbSBiZSAyXjMyLTE7IGVsc2UgbGV0IGxpbSBiZSA/IFRvVWludDMyKGxpbWl0KS4KLSAg
ICBKU1ZhbHVlIGxpbWl0VmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICB1bnNpZ25lZCBs
aW1pdCA9IGxpbWl0VmFsdWUuaXNVbmRlZmluZWQoKSA/IDB4RkZGRkZGRkZ1IDogbGltaXRWYWx1
ZS50b1VJbnQzMihleGVjKTsKLQotICAgIC8vIDE0LiBMZXQgc2l6ZSBiZSB0aGUgbnVtYmVyIG9m
IGVsZW1lbnRzIGluIFMuCi0gICAgdW5zaWduZWQgaW5wdXRTaXplID0gaW5wdXQubGVuZ3RoKCk7
Ci0KLSAgICAvLyAxNS4gTGV0IHAgPSAwLgotICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKLQot
ICAgIC8vIDE2LiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCi0gICAgaWYgKCFsaW1pdCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotCi0gICAgLy8gMTcuIElmIHNpemUg
PT0gMCwgdGhlbgotICAgIGlmIChpbnB1dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gYS4gTGV0
IHogYmUgPyBSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKS4KLSAgICAgICAgLy8gYi4gSWYgeiBpcyBu
b3QgbnVsbCwgcmV0dXJuIEEuCi0gICAgICAgIC8vIGMuIFBlcmZvcm0gISBDcmVhdGVEYXRhUHJv
cGVydHkoQSwgIjAiLCBTKS4KLSAgICAgICAgLy8gZC4gUmV0dXJuIEEuCi0gICAgICAgIGlmICgh
cmVnZXhwLT5tYXRjaCh2bSwgaW5wdXQsIDApKQotICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJl
Y3RJbmRleChleGVjLCAwLCBqc1N0cmluZ1dpdGhSZXVzZShleGVjLCB0aGlzVmFsdWUsIGlucHV0
KSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICB9Ci0KLSAg
ICAvLyAxOC4gTGV0IHEgPSBwLgotICAgIHVuc2lnbmVkIG1hdGNoUG9zaXRpb24gPSBwb3NpdGlv
bjsKLSAgICAvLyAxOS4gUmVwZWF0LCB3aGlsZSBxIDwgc2l6ZQotICAgIGJvb2wgcmVnRXhwSXNT
dGlja3kgPSByZWdleHAtPnN0aWNreSgpOwotICAgIGJvb2wgcmVnRXhwSXNVbmljb2RlID0gcmVn
ZXhwLT51bmljb2RlKCk7CiAgICAgd2hpbGUgKG1hdGNoUG9zaXRpb24gPCBpbnB1dFNpemUpIHsK
ICAgICAgICAgVmVjdG9yPGludCwgMzI+IG92ZWN0b3I7CiAKQEAgLTU1NSwzMCArNTA3LDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgLy8gICBp
di4gRWxzZSBlICE9IHAsCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
Q2FwdHVyZXMgPSByZWdleHAtPm51bVN1YnBhdHRlcm5zKCk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBuZXdSZXN1bHRMZW5ndGggPSByZXN1bHRMZW5ndGggKyBudW1iZXJPZkNhcHR1cmVzICsgMTsK
LSAgICAgICAgICAgIGlmIChuZXdSZXN1bHRMZW5ndGggPCBudW1iZXJPZkNhcHR1cmVzIHx8IG5l
d1Jlc3VsdExlbmd0aCA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfSU5ERVgpIHsKLSAgICAgICAgICAg
ICAgICAvLyBMZXQncyBjb25zaWRlciB3aGF0J3MgYmVzdCBmb3IgdXNlcnMgaGVyZS4gV2UncmUg
YWJvdXQgdG8gaW5jcmVhc2UgdGhlIGxlbmd0aCBvZgotICAgICAgICAgICAgICAgIC8vIHRoZSBz
cGxpdCBhcnJheSBiZXlvbmQgdGhlIG1heGltdW0gbGVuZ3RoIHRoYXQgd2UgY2FuIHN1cHBvcnQg
ZWZmaWNpZW50bHkuIFRoaXMKLSAgICAgICAgICAgICAgICAvLyB3aWxsIGNhdXNlIHVzIHRvIHVz
ZSBhIEhhc2hNYXAgZm9yIHRoZSBuZXcgZW50cmllcyBhZnRlciB0aGlzIHBvaW50LiBUaGF0J3Mg
Z29pbmcKLSAgICAgICAgICAgICAgICAvLyB0byByZXN1bHQgaW4gYSB2ZXJ5IGxvbmcgcnVubmlu
ZyB0aW1lIG9mIHRoaXMgZnVuY3Rpb24gYW5kIHZlcnkgbGFyZ2UgbWVtb3J5Ci0gICAgICAgICAg
ICAgICAgLy8gdXNhZ2UuIEluIG15IGV4cGVyaW1lbnRzLCBKU0Mgd2lsbCBzaXQgc3Bpbm5pbmcg
Zm9yIG1pbnV0ZXMgYWZ0ZXIgZ2V0dGluZyBoZXJlIGFuZAotICAgICAgICAgICAgICAgIC8vIGl0
IHdhcyB1c2luZyA+NEdCIG9mIG1lbW9yeSBhbmQgZXZlbnR1YWxseSBncmV3IHRvIDhHQi4gSXQg
a2VwdCBydW5uaW5nIHdpdGhvdXQKLSAgICAgICAgICAgICAgICAvLyBmaW5pc2hpbmcgdW50aWwg
SSBraWxsZWQgaXQuIFRoYXQncyBwcm9iYWJseSBub3Qgd2hhdCB0aGUgdXNlciB3YW50ZWQuIFRo
ZSB1c2VyLAotICAgICAgICAgICAgICAgIC8vIG9yIHRoZSBwcm9ncmFtIHRoYXQgdGhlIHVzZXIg
aXMgcnVubmluZywgcHJvYmFibHkgbWFkZSBhIG1pc3Rha2UgYnkgY2FsbGluZyB0aGlzCi0gICAg
ICAgICAgICAgICAgLy8gbWV0aG9kIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCByZXN1bHRlZCBpbiBz
dWNoIGFuIG9ibm94aW91cyBhcnJheS4gVGhlcmVmb3JlLCB0bwotICAgICAgICAgICAgICAgIC8v
IHByb3RlY3Qgb3Vyc2VsdmVzLCB3ZSBiYWlsIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIC8vIDEuIExldCBUIGJlIGEgU3RyaW5nIHZhbHVlIGVxdWFsIHRvIHRoZSBzdWJzdHJpbmcg
b2YgUyBjb25zaXN0aW5nIG9mIHRoZSBlbGVtZW50cyBhdCBpbmRpY2VzIHAgKGluY2x1c2l2ZSkg
dGhyb3VnaCBxIChleGNsdXNpdmUpLgogICAgICAgICAgICAgLy8gMi4gUGVyZm9ybSAhIENyZWF0
ZURhdGFQcm9wZXJ0eShBLCAhIFRvU3RyaW5nKGxlbmd0aEEpLCBUKS4KLSAgICAgICAgICAgIHJl
c3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgcmVzdWx0TGVuZ3RoLCBqc1N1YnN0cmluZyhleGVj
LCB0aGlzVmFsdWUsIGlucHV0LCBwb3NpdGlvbiwgbWF0Y2hQb3NpdGlvbiAtIHBvc2l0aW9uKSk7
Ci0KLSAgICAgICAgICAgIC8vIDMuIExldCBsZW5ndGhBIGJlIGxlbmd0aEEgKyAxLgotICAgICAg
ICAgICAgLy8gNC4gSWYgbGVuZ3RoQSA9IGxpbSwgcmV0dXJuIEEuCi0gICAgICAgICAgICBpZiAo
KytyZXN1bHRMZW5ndGggPT0gbGltaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgICAgICAgICAgaWYgKHB1c2godHJ1ZSwgcG9zaXRpb24sIG1h
dGNoUG9zaXRpb24gLSBwb3NpdGlvbikgPT0gQWJvcnRTcGxpdCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgICAgIC8vIDUuIExldCBwIGJlIGUuCiAgICAgICAgICAgICBwb3Np
dGlvbiA9IG1hdGNoRW5kOwpAQCAtNTkxLDI0ICs1MjQsMTM4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgICAgICAgICAvLyBhLiBMZXQgbmV4dENh
cHR1cmUgYmUgPyBHZXQoeiwgISBUb1N0cmluZyhpKSkuCiAgICAgICAgICAgICAgICAgLy8gYi4g
UGVyZm9ybSAhIENyZWF0ZURhdGFQcm9wZXJ0eShBLCAhIFRvU3RyaW5nKGxlbmd0aEEpLCBuZXh0
Q2FwdHVyZSkuCiAgICAgICAgICAgICAgICAgaW50IHN1YiA9IG92ZWN0b3JbaSAqIDJdOwotICAg
ICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgcmVzdWx0TGVuZ3RoLCBz
dWIgPCAwID8ganNVbmRlZmluZWQoKSA6IGpzU3Vic3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgaW5w
dXQsIHN1Yiwgb3ZlY3RvcltpICogMiArIDFdIC0gc3ViKSk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBjLiBMZXQgaSBiZSBpICsgMS4KLSAgICAgICAgICAgICAgICAvLyBkLiBMZXQgbGVuZ3RoQSBi
ZSBsZW5ndGhBICsgMS4KLSAgICAgICAgICAgICAgICAvLyBlLiBJZiBsZW5ndGhBID0gbGltLCBy
ZXR1cm4gQS4KLSAgICAgICAgICAgICAgICBpZiAoKytyZXN1bHRMZW5ndGggPT0gbGltaXQpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICBpZiAocHVzaChzdWIgPj0gMCwgc3ViLCBvdmVjdG9yW2kgKiAyICsgMV0gLSBz
dWIpID09IEFib3J0U3BsaXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgLy8gMTAuIExldCBxIGJlIHAuCiAgICAgICAgICAgICBtYXRj
aFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgICAgIH0KICAgICB9Cit9CisKKy8vIEVTIDIxLjIu
NS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NwbGl0RmFzdChFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKworICAgIC8vIDEuIFtoYW5kbGVkIGJ5
IEpTIGJ1aWx0aW5dIExldCByeCBiZSB0aGUgdGhpcyB2YWx1ZS4KKyAgICAvLyAyLiBbaGFuZGxl
ZCBieSBKUyBidWlsdGluXSBJZiBUeXBlKHJ4KSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVF
cnJvciBleGNlcHRpb24uCisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KTsKKyAgICBSZWdFeHAqIHJlZ2V4cCA9IGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4
cCgpOworCisgICAgLy8gMy4gW2hhbmRsZWQgYnkgSlMgYnVpbHRpbl0gTGV0IFMgYmUgPyBUb1N0
cmluZyhzdHJpbmcpLgorICAgIEpTU3RyaW5nKiBpbnB1dFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFN0cmluZyBpbnB1dCA9IGlucHV0U3RyaW5nLT52YWx1
ZShleGVjKTsKKyAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgQVNTRVJUKCFpbnB1dC5pc051bGwoKSk7CisK
KyAgICAvLyA0LiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBMZXQgQyBiZSA/IFNwZWNpZXNDb25z
dHJ1Y3RvcihyeCwgJVJlZ0V4cCUpLgorICAgIC8vIDUuIFtoYW5kbGVkIGJ5IEpTIGJ1aWx0aW5d
IExldCBmbGFncyBiZSA/IFRvU3RyaW5nKD8gR2V0KHJ4LCAiZmxhZ3MiKSkuCisgICAgLy8gNi4g
W2hhbmRsZWQgYnkgSlMgYnVpbHRpbl0gSWYgZmxhZ3MgY29udGFpbnMgInUiLCBsZXQgdW5pY29k
ZU1hdGNoaW5nIGJlIHRydWUuCisgICAgLy8gNy4gW2hhbmRsZWQgYnkgSlMgYnVpbHRpbl0gRWxz
ZSwgbGV0IHVuaWNvZGVNYXRjaGluZyBiZSBmYWxzZS4KKyAgICAvLyA4LiBbaGFuZGxlZCBieSBK
UyBidWlsdGluXSBJZiBmbGFncyBjb250YWlucyAieSIsIGxldCBuZXdGbGFncyBiZSBmbGFncy4K
KyAgICAvLyA5LiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBFbHNlLCBsZXQgbmV3RmxhZ3MgYmUg
dGhlIHN0cmluZyB0aGF0IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIGZsYWdzIGFuZCAieSIuCisg
ICAgLy8gMTAuIFtoYW5kbGVkIGJ5IEpTIGJ1aWx0aW5dIExldCBzcGxpdHRlciBiZSA/IENvbnN0
cnVjdChDLCDCqyByeCwgbmV3RmxhZ3MgwrspLgorCisgICAgLy8gMTEuIExldCBBIGJlIEFycmF5
Q3JlYXRlKDApLgorICAgIC8vIDEyLiBMZXQgbGVuZ3RoQSBiZSAwLgorICAgIEpTQXJyYXkqIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7CisgICAgdW5zaWduZWQgcmVzdWx0
TGVuZ3RoID0gMDsKKworICAgIC8vIDEzLiBJZiBsaW1pdCBpcyB1bmRlZmluZWQsIGxldCBsaW0g
YmUgMl4zMi0xOyBlbHNlIGxldCBsaW0gYmUgPyBUb1VpbnQzMihsaW1pdCkuCisgICAgSlNWYWx1
ZSBsaW1pdFZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgdW5zaWduZWQgbGltaXQgPSBs
aW1pdFZhbHVlLmlzVW5kZWZpbmVkKCkgPyAweEZGRkZGRkZGdSA6IGxpbWl0VmFsdWUudG9VSW50
MzIoZXhlYyk7CisKKyAgICAvLyAxNC4gTGV0IHNpemUgYmUgdGhlIG51bWJlciBvZiBlbGVtZW50
cyBpbiBTLgorICAgIHVuc2lnbmVkIGlucHV0U2l6ZSA9IGlucHV0Lmxlbmd0aCgpOworCisgICAg
Ly8gMTUuIExldCBwID0gMC4KKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisKKyAgICAvLyAx
Ni4gSWYgbGltID09IDAsIHJldHVybiBBLgorICAgIGlmICghbGltaXQpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKworICAgIC8vIDE3LiBJZiBzaXplID09IDAsIHRo
ZW4KKyAgICBpZiAoaW5wdXQuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIGEuIExldCB6IGJlID8g
UmVnRXhwRXhlYyhzcGxpdHRlciwgUykuCisgICAgICAgIC8vIGIuIElmIHogaXMgbm90IG51bGws
IHJldHVybiBBLgorICAgICAgICAvLyBjLiBQZXJmb3JtICEgQ3JlYXRlRGF0YVByb3BlcnR5KEEs
ICIwIiwgUykuCisgICAgICAgIC8vIGQuIFJldHVybiBBLgorICAgICAgICBpZiAoIXJlZ2V4cC0+
bWF0Y2godm0sIGlucHV0LCAwKSkKKyAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgMCwgaW5wdXRTdHJpbmcpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgfQogCisgICAgLy8gMTguIExldCBxID0gcC4KKyAgICB1bnNpZ25lZCBtYXRj
aFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgLy8gMTkuIFJlcGVhdCwgd2hpbGUgcSA8IHNpemUK
KyAgICBib29sIHJlZ0V4cElzU3RpY2t5ID0gcmVnZXhwLT5zdGlja3koKTsKKyAgICBib29sIHJl
Z0V4cElzVW5pY29kZSA9IHJlZ2V4cC0+dW5pY29kZSgpOworICAgIAorICAgIHVuc2lnbmVkIG1h
eFNpemVGb3JEaXJlY3RQYXRoID0gMTAwMDAwOworICAgIAorICAgIGdlbmVyaWNTcGxpdCgKKyAg
ICAgICAgdm0sIGV4ZWMsIHJlZ2V4cCwgaW5wdXQsIGlucHV0U2l6ZSwgcG9zaXRpb24sIG1hdGNo
UG9zaXRpb24sIHJlZ0V4cElzU3RpY2t5LCByZWdFeHBJc1VuaWNvZGUsCisgICAgICAgIFsmXSAo
Ym9vbCBpc0RlZmluZWQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpIC0+IFNwbGl0
Q29udHJvbCB7CisgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHJlc3Vs
dExlbmd0aCsrLCBpc0RlZmluZWQgPyBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVz
b2x2ZWQodm0sIGlucHV0U3RyaW5nLCBzdGFydCwgbGVuZ3RoKSA6IGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICAgICAgaWYgKHJlc3VsdExlbmd0aCA+PSBsaW1pdCB8fCByZXN1bHRMZW5ndGggPj0g
bWF4U2l6ZUZvckRpcmVjdFBhdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFib3J0U3BsaXQ7
CisgICAgICAgICAgICByZXR1cm4gQ29udGludWVTcGxpdDsKKyAgICAgICAgfSk7CisgICAgCisg
ICAgaWYgKHJlc3VsdExlbmd0aCA+PSBsaW1pdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICBpZiAocmVzdWx0TGVuZ3RoIDwgbWF4U2l6ZUZvckRpcmVjdFBhdGgpIHsKKyAgICAgICAgLy8g
MjAuIExldCBUIGJlIGEgU3RyaW5nIHZhbHVlIGVxdWFsIHRvIHRoZSBzdWJzdHJpbmcgb2YgUyBj
b25zaXN0aW5nIG9mIHRoZSBlbGVtZW50cyBhdCBpbmRpY2VzIHAgKGluY2x1c2l2ZSkgdGhyb3Vn
aCBzaXplIChleGNsdXNpdmUpLgorICAgICAgICAvLyAyMS4gUGVyZm9ybSAhIENyZWF0ZURhdGFQ
cm9wZXJ0eShBLCAhIFRvU3RyaW5nKGxlbmd0aEEpLCBUKS4KKyAgICAgICAgcmVzdWx0LT5wdXRE
aXJlY3RJbmRleChleGVjLCByZXN1bHRMZW5ndGgsIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3Ry
aW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXRTdHJpbmcsIHBvc2l0aW9uLCBpbnB1dFNpemUgLSBwb3Np
dGlvbikpOworICAgICAgICAKKyAgICAgICAgLy8gMjIuIFJldHVybiBBLgorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIC8vIE5vdyBkbyBh
IGRyeSBydW4gdG8gc2VlIGhvdyBiaWcgdGhpbmdzIGdldC4gR2l2ZSB1cCBpZiB0aGV5IGdldCBh
YnN1cmQuCisgICAgdW5zaWduZWQgc2F2ZWRQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIHVuc2ln
bmVkIHNhdmVkTWF0Y2hQb3NpdGlvbiA9IG1hdGNoUG9zaXRpb247CisgICAgdW5zaWduZWQgZHJ5
UnVuQ291bnQ7CisgICAgZ2VuZXJpY1NwbGl0KAorICAgICAgICB2bSwgZXhlYywgcmVnZXhwLCBp
bnB1dCwgaW5wdXRTaXplLCBwb3NpdGlvbiwgbWF0Y2hQb3NpdGlvbiwgcmVnRXhwSXNTdGlja3ks
IHJlZ0V4cElzVW5pY29kZSwKKyAgICAgICAgWyZdIChib29sIGlzRGVmaW5lZCwgdW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkgLT4gU3BsaXRDb250cm9sIHsKKyAgICAgICAgICAgIGRy
eVJ1bkNvdW50Kys7CisgICAgICAgICAgICBpZiAocmVzdWx0TGVuZ3RoICsgZHJ5UnVuQ291bnQg
Pj0gbGltaXQKKyAgICAgICAgICAgICAgICB8fCByZXN1bHRMZW5ndGggKyBkcnlSdW5Db3VudCA+
PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVOR1RIKQorICAgICAgICAgICAgICAgIHJldHVybiBBYm9y
dFNwbGl0OworICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU3BsaXQ7CisgICAgICAgIH0pOwor
ICAgIAorICAgIGlmIChyZXN1bHRMZW5ndGggKyBkcnlSdW5Db3VudCA+PSBNQVhfU1RPUkFHRV9W
RUNUT1JfTEVOR1RIKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAg
CisgICAgLy8gT0ssIHdlIGtub3cgdGhhdCBpZiB3ZSBmaW5pc2ggdGhlIHNwbGl0LCB3ZSB3b24n
dCBoYXZlIHRvIE9PTS4KKyAgICBwb3NpdGlvbiA9IHNhdmVkUG9zaXRpb247CisgICAgbWF0Y2hQ
b3NpdGlvbiA9IHNhdmVkTWF0Y2hQb3NpdGlvbjsKKyAgICAKKyAgICBnZW5lcmljU3BsaXQoCisg
ICAgICAgIHZtLCBleGVjLCByZWdleHAsIGlucHV0LCBpbnB1dFNpemUsIHBvc2l0aW9uLCBtYXRj
aFBvc2l0aW9uLCByZWdFeHBJc1N0aWNreSwgcmVnRXhwSXNVbmljb2RlLAorICAgICAgICBbJl0g
KGJvb2wgaXNEZWZpbmVkLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKSAtPiBTcGxp
dENvbnRyb2wgeworICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCByZXN1
bHRMZW5ndGgrKywgaXNEZWZpbmVkID8gSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJl
c29sdmVkKHZtLCBpbnB1dFN0cmluZywgc3RhcnQsIGxlbmd0aCkgOiBqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgICAgIGlmIChyZXN1bHRMZW5ndGggPj0gbGltaXQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEFib3J0U3BsaXQ7CisgICAgICAgICAgICByZXR1cm4gQ29udGludWVTcGxpdDsKKyAg
ICAgICAgfSk7CisgICAgCisgICAgaWYgKHJlc3VsdExlbmd0aCA+PSBsaW1pdCkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAKICAgICAvLyAyMC4gTGV0IFQgYmUgYSBTdHJpbmcgdmFsdWUg
ZXF1YWwgdG8gdGhlIHN1YnN0cmluZyBvZiBTIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnRzIGF0
IGluZGljZXMgcCAoaW5jbHVzaXZlKSB0aHJvdWdoIHNpemUgKGV4Y2x1c2l2ZSkuCiAgICAgLy8g
MjEuIFBlcmZvcm0gISBDcmVhdGVEYXRhUHJvcGVydHkoQSwgISBUb1N0cmluZyhsZW5ndGhBKSwg
VCkuCi0gICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCByZXN1bHRMZW5ndGgrKywganNT
dWJzdHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBpbnB1dCwgcG9zaXRpb24sIGlucHV0U2l6ZSAtIHBv
c2l0aW9uKSk7Ci0KKyAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHJlc3VsdExlbmd0
aCwgSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dFN0cmlu
ZywgcG9zaXRpb24sIGlucHV0U2l6ZSAtIHBvc2l0aW9uKSk7CisgICAgCiAgICAgLy8gMjIuIFJl
dHVybiBBLgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAy
MDE0NTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsOSBAQCBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmdP
YmplY3QqIGNvbnN0cnVjCiAvLyBIZWxwZXIgZm9yIHByb2R1Y2luZyBhIEpTU3RyaW5nIGZvciAn
c3RyaW5nJywgd2hlcmUgJ3N0cmluZycgd2FzIGJlZW4gcHJvZHVjZWQgYnkKIC8vIGNhbGxpbmcg
VG9TdHJpbmcgb24gJ29yaWdpbmFsVmFsdWUnLiBJbiBjYXNlcyB3aGVyZSAnb3JpZ2luYWxWYWx1
ZScgYWxyZWFkeSB3YXMgYQogLy8gc3RyaW5nIHByaW1pdGl2ZSB3ZSBjYW4ganVzdCB1c2UgdGhp
cywgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgSlNTdHJpbmcuCisvLyBGSVhN
RTogQmFzaWNhbGx5IGFueSB1c2Ugb2YgdGhpcyBpcyBiYWQuIHRvU3RyaW5nKCkgcmV0dXJucyBh
IEpTU3RyaW5nKiBzbyB3ZSBkb24ndCBuZWVkIHRvCisvLyBwYXNzIGFyb3VuZCB0aGUgb3JpZ2lu
YWxWYWx1ZTsgd2UgY291bGQganVzdCBwYXNzIGFyb3VuZCB0aGUgSlNTdHJpbmcqLiBUaGVuIHlv
dSBkb24ndCBuZWVkCisvLyB0aGlzIGZ1bmN0aW9uLiBZb3UganVzdCB1c2UgdGhlIEpTU3RyaW5n
KiB0aGF0IHRvU3RyaW5nKCkgcmV0dXJuZWQuCiBzdGF0aWMgaW5saW5lIEpTU3RyaW5nKiBqc1N0
cmluZ1dpdGhSZXVzZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgb3JpZ2luYWxWYWx1ZSwgY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgaWYgKG9yaWdpbmFsVmFsdWUuaXNTdHJpbmcoKSkg
ewpAQCAtOTQsMTAgKzk3LDkgQEAgc3RhdGljIGlubGluZSBKU1N0cmluZyoganNTdHJpbmdXaXRo
UmV1cwogfQogCiAvLyBIZWxwZXIgdGhhdCB0cmllcyB0byB1c2UgdGhlIEpTU3RyaW5nIHN1YnN0
cmluZyBzaGFyaW5nIG1lY2hhbmlzbSBpZiAnb3JpZ2luYWxWYWx1ZScgaXMgYSBKU1N0cmluZy4K
LS8vIEZJWE1FOiBJdCB3b3VsZCBiZSBldmVuIGJldHRlciBpZiB0b1N0cmluZyByZXR1cm5lZCBh
IEpTU3RyaW5nKiwgb3IgaWYgYW55b25lIHdobyBjYWxsZWQKLS8vIHRvU3RyaW5nIHdpdGggdGhl
IGludGVudCBvZiBsYXRlciBjYWxsaW5nIHRoaXMgZnVuY3RvbiBmaXJzdCBjcmVhdGVkIGEganNT
dHJpbmcgZnJvbSB0aGUgU3RyaW5nCi0vLyB0aGF0IHRvU3RyaW5nIHJldHVybmVkLiBUaGF0IHdh
eSwgd2UnZCBnZXQgdGhlIHN1YnN0cmluZyBvcHRpbWl6YXRpb24gZXZlbiB3aGVuIHRoZSBpbnB1
dCB3YXMKLS8vIG5vdCBhIEpTU3RyaW5nLgorLy8gRklYTUU6IEJhc2ljYWxseSBhbnkgdXNlIG9m
IHRoaXMgaXMgYmFkLiB0b1N0cmluZygpIHJldHVybnMgYSBKU1N0cmluZyogc28gd2UgZG9uJ3Qg
bmVlZCB0bworLy8gcGFzcyBhcm91bmQgdGhlIG9yaWdpbmFsVmFsdWU7IHdlIGNvdWxkIGp1c3Qg
cGFzcyBhcm91bmQgdGhlIEpTU3RyaW5nKi4gQW5kIHNpbmNlIHdlJ3ZlCisvLyByZXNvbHZlZCBp
dCwgd2Uga25vdyB0aGF0IHdlIGNhbiBqdXN0IGFsbG9jYXRlIHRoZSBzdWJzdHJpbmcgY2VsbCBk
aXJlY3RseS4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgx
NDAKIHN0YXRpYyBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBvcmlnaW5hbFZhbHVlLCBjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279980</attachid>
            <date>2016-05-27 12:13:48 -0700</date>
            <delta_ts>2016-05-27 13:29:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18630</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAxNDU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDE2LTA1LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
cmVnRXhwUHJvdG9GdW5jU3BsaXRGYXN0IHNob3VsZCBPT00gYmVmb3JlIGl0IHN3YXBzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgxNTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
aXMgYSBodWdlIHNwZWVkLXVwIG9uIHNvbWUganNmdW5mdXp6IHRlc3QgY2FzZXMgYmVjYXVzZSBp
dCBtYWtlcyB1cyByZWFsaXplIG11Y2gKKyAgICAgICAgc29vbmVyIHRoYXQgcnVubmluZyBhIHJl
Z2V4cCBzcGxpdCB3aWxsIHJlc3VsdCBpbiBzd2FwcGluZy4gSXQgdXNlcyB0aGUgc2FtZSBiYXNp
YworICAgICAgICBhcHByb2FjaCBhcyBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8y
MDE0NTE6IGlmIHRoZSByZXN1bHQgYXJyYXkgY3Jvc3NlcyBhIGNlcnRhaW4KKyAgICAgICAgc2l6
ZSB0aHJlc2hvbGQsIHdlIHByb2NlZWQgd2l0aCBhIGRyeSBydW4gdG8gc2VlIGhvdyBiaWcgdGhl
IGFycmF5IHdpbGwgZ2V0IGJlZm9yZQorICAgICAgICBhbGxvY2F0aW5nIGFueXRoaW5nIGVsc2Uu
IFRoaXMgd2F5LCBib2d1cyB1c2VzIG9mIHNwbGl0IHRoYXQgd291bGQgaGF2ZSBPT01lZCBvbmx5
IGFmdGVyCisgICAgICAgIGtpbGxpbmcgdGhlIHVzZXIncyBtYWNoaW5lIHdpbGwgbm93IE9PTSBi
ZWZvcmUga2lsbGluZyB0aGUgdXNlcidzIG1hY2hpbmUuCisgICAgICAgIAorICAgICAgICBUaGlz
IGlzIGFuIGVub3Jtb3VzIHNwZWVkLXVwIG9uIHNvbWUganNmdW5mdXp6IHRlc3RzOiB0aGV5IGdv
dCBmcm9tIHJ1bm5pbmcgZm9yIGEgbG9uZworICAgICAgICB0aW1lIHRvIHJ1bm5pbmcgaW5zdGFu
dGx5LgorCisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjphZHZhbmNlU3RyaW5nSW5kZXgpOgorICAgICAgICAoSlNDOjpnZW5lcmljU3BsaXQpOgor
ICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNTcGxpdEZhc3QpOgorICAgICAgICAqIHJ1bnRp
bWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5nV2l0aFJldXNlKToKKyAg
ICAgICAgKEpTQzo6anNTdWJzdHJpbmcpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9iaWctc3Bs
aXQtY2FwdHVyZXMuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9iaWctc3BsaXQu
anM6IEFkZGVkLgorCiAyMDE2LTA1LTI3ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIGdldF9ieV9pZCBzaG91bGQgc3VwcG9ydCBjYWNoaW5nIHVuc2V0
IHByb3BlcnRpZXMgaW4gdGhlIExMSW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwMTQ1MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1Nyw2ICs0NTcsODQgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBhZHZhbmNl
U3RyaW5nSW5kZQogICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmFkdmFuY2VTdHJpbmdVbmljb2Rl
KHN0ciwgc3RyU2l6ZSwgaW5kZXgpOwogfQogCitlbnVtIFNwbGl0Q29udHJvbCB7CisgICAgQ29u
dGludWVTcGxpdCwKKyAgICBBYm9ydFNwbGl0Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb250
cm9sRnVuYywgdHlwZW5hbWUgUHVzaEZ1bmM+Cit2b2lkIGdlbmVyaWNTcGxpdCgKKyAgICBWTSYg
dm0sIFJlZ0V4cCogcmVnZXhwLCBjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCBpbnB1dFNp
emUsIHVuc2lnbmVkJiBwb3NpdGlvbiwKKyAgICB1bnNpZ25lZCYgbWF0Y2hQb3NpdGlvbiwgYm9v
bCByZWdFeHBJc1N0aWNreSwgYm9vbCByZWdFeHBJc1VuaWNvZGUsCisgICAgY29uc3QgQ29udHJv
bEZ1bmMmIGNvbnRyb2wsIGNvbnN0IFB1c2hGdW5jJiBwdXNoKQoreworICAgIHdoaWxlIChtYXRj
aFBvc2l0aW9uIDwgaW5wdXRTaXplKSB7CisgICAgICAgIGlmIChjb250cm9sKCkgPT0gQWJvcnRT
cGxpdCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxpbnQs
IDMyPiBvdmVjdG9yOworCisgICAgICAgIC8vIGEuIFBlcmZvcm0gPyBTZXQoc3BsaXR0ZXIsICJs
YXN0SW5kZXgiLCBxLCB0cnVlKS4KKyAgICAgICAgLy8gYi4gTGV0IHogYmUgPyBSZWdFeHBFeGVj
KHNwbGl0dGVyLCBTKS4KKyAgICAgICAgaW50IG1wb3MgPSByZWdleHAtPm1hdGNoKHZtLCBpbnB1
dCwgbWF0Y2hQb3NpdGlvbiwgb3ZlY3Rvcik7CisKKyAgICAgICAgLy8gYy4gSWYgeiBpcyBudWxs
LCBsZXQgcSBiZSBBZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKS4KKyAg
ICAgICAgaWYgKG1wb3MgPCAwKSB7CisgICAgICAgICAgICBpZiAoIXJlZ0V4cElzU3RpY2t5KQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWF0Y2hQb3NpdGlvbiA9IGFkdmFu
Y2VTdHJpbmdJbmRleChpbnB1dCwgaW5wdXRTaXplLCBtYXRjaFBvc2l0aW9uLCByZWdFeHBJc1Vu
aWNvZGUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtcG9zKSA+PSBpbnB1dFNpemUpIHsKKyAgICAgICAgICAgIC8v
IFRoZSBzcGVjIHJlZG9lcyB0aGUgUmVnRXhwRXhlYyBzdGFydGluZyBhdCB0aGUgbmV4dCBjaGFy
YWN0ZXIgb2YgdGhlIGlucHV0LgorICAgICAgICAgICAgLy8gQnV0IGluIG91ciBjYXNlLCBtcG9z
IDwgMCBtZWFucyB0aGF0IHRoZSBuYXRpdmUgcmVnZXhwIGFscmVhZHkgc2VhcmNoZWQgYWxsIHBl
cm11dGF0aW9ucworICAgICAgICAgICAgLy8gYW5kIGtub3cgdGhhdCB3ZSB3b24ndCBiZSBhYmxl
IHRvIGZpbmQgYSBtYXRjaCBmb3IgdGhlIHNlcGFyYXRvciBldmVuIGlmIHdlIHJlZG8gdGhlCisg
ICAgICAgICAgICAvLyBSZWdFeHBFeGVjIHN0YXJ0aW5nIGF0IHRoZSBuZXh0IGNoYXJhY3RlciBv
ZiB0aGUgaW5wdXQuIFNvLCBqdXN0IGJhaWwuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIGQuIEVsc2UsIHogaXMgbm90IG51bGwKKyAgICAgICAgLy8gICAgaS4g
TGV0IGUgYmUgPyBUb0xlbmd0aCg/IEdldChzcGxpdHRlciwgImxhc3RJbmRleCIpKS4KKyAgICAg
ICAgLy8gICBpaS4gTGV0IGUgYmUgbWluKGUsIHNpemUpLgorICAgICAgICBtYXRjaFBvc2l0aW9u
ID0gbXBvczsKKyAgICAgICAgdW5zaWduZWQgbWF0Y2hFbmQgPSBvdmVjdG9yWzFdOworCisgICAg
ICAgIC8vICBpaWkuIElmIGUgPSBwLCBsZXQgcSBiZSBBZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwg
dW5pY29kZU1hdGNoaW5nKS4KKyAgICAgICAgaWYgKG1hdGNoRW5kID09IHBvc2l0aW9uKSB7Cisg
ICAgICAgICAgICBtYXRjaFBvc2l0aW9uID0gYWR2YW5jZVN0cmluZ0luZGV4KGlucHV0LCBpbnB1
dFNpemUsIG1hdGNoUG9zaXRpb24sIHJlZ0V4cElzVW5pY29kZSk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBpZiBtYXRjaEVuZCA9PSAwIHRoZW4gcG9zaXRp
b24gc2hvdWxkIGFsc28gYmUgemVybyBhbmQgdGh1cyBtYXRjaEVuZCBzaG91bGQgZXF1YWwgcG9z
aXRpb24uCisgICAgICAgIEFTU0VSVChtYXRjaEVuZCk7CisKKyAgICAgICAgLy8gICBpdi4gRWxz
ZSBlICE9IHAsCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2FwdHVyZXMgPSByZWdleHAtPm51
bVN1YnBhdHRlcm5zKCk7CisgICAgICAgIAorICAgICAgICAvLyAxLiBMZXQgVCBiZSBhIFN0cmlu
ZyB2YWx1ZSBlcXVhbCB0byB0aGUgc3Vic3RyaW5nIG9mIFMgY29uc2lzdGluZyBvZiB0aGUgZWxl
bWVudHMgYXQgaW5kaWNlcyBwIChpbmNsdXNpdmUpIHRocm91Z2ggcSAoZXhjbHVzaXZlKS4KKyAg
ICAgICAgLy8gMi4gUGVyZm9ybSAhIENyZWF0ZURhdGFQcm9wZXJ0eShBLCAhIFRvU3RyaW5nKGxl
bmd0aEEpLCBUKS4KKyAgICAgICAgaWYgKHB1c2godHJ1ZSwgcG9zaXRpb24sIG1hdGNoUG9zaXRp
b24gLSBwb3NpdGlvbikgPT0gQWJvcnRTcGxpdCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIC8vIDUuIExldCBwIGJlIGUuCisgICAgICAgIHBvc2l0aW9uID0gbWF0Y2hF
bmQ7CisgICAgICAgIAorICAgICAgICAvLyA2LiBMZXQgbnVtYmVyT2ZDYXB0dXJlcyBiZSA/IFRv
TGVuZ3RoKD8gR2V0KHosICJsZW5ndGgiKSkuCisgICAgICAgIC8vIDcuIExldCBudW1iZXJPZkNh
cHR1cmVzIGJlIG1heChudW1iZXJPZkNhcHR1cmVzLTEsIDApLgorICAgICAgICAvLyA4LiBMZXQg
aSBiZSAxLgorICAgICAgICAvLyA5LiBSZXBlYXQsIHdoaWxlIGkgPD0gbnVtYmVyT2ZDYXB0dXJl
cywKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1iZXJPZkNhcHR1cmVzOyAr
K2kpIHsKKyAgICAgICAgICAgIC8vIGEuIExldCBuZXh0Q2FwdHVyZSBiZSA/IEdldCh6LCAhIFRv
U3RyaW5nKGkpKS4KKyAgICAgICAgICAgIC8vIGIuIFBlcmZvcm0gISBDcmVhdGVEYXRhUHJvcGVy
dHkoQSwgISBUb1N0cmluZyhsZW5ndGhBKSwgbmV4dENhcHR1cmUpLgorICAgICAgICAgICAgaW50
IHN1YiA9IG92ZWN0b3JbaSAqIDJdOworICAgICAgICAgICAgaWYgKHB1c2goc3ViID49IDAsIHN1
Yiwgb3ZlY3RvcltpICogMiArIDFdIC0gc3ViKSA9PSBBYm9ydFNwbGl0KQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTAuIExldCBxIGJl
IHAuCisgICAgICAgIG1hdGNoUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICB9Cit9CisKIC8vIEVT
IDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvRnVuY1NwbGl0RmFzdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CkBAIC00NjgsNyArNTQ2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCByZWdFeHBQcm90bwogICAgIFJlZ0V4cCogcmVnZXhwID0gYXNSZWdFeHBPYmplY3QodGhp
c1ZhbHVlKS0+cmVnRXhwKCk7CiAKICAgICAvLyAzLiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBM
ZXQgUyBiZSA/IFRvU3RyaW5nKHN0cmluZykuCi0gICAgU3RyaW5nIGlucHV0ID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIEpTU3RyaW5nKiBpbnB1
dFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIFN0cmluZyBp
bnB1dCA9IGlucHV0U3RyaW5nLT52YWx1ZShleGVjKTsKICAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgQVNT
RVJUKCFpbnB1dC5pc051bGwoKSk7CkBAIC01MDcsNyArNTg2LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgICAgICAvLyBjLiBQZXJmb3JtICEgQ3JlYXRl
RGF0YVByb3BlcnR5KEEsICIwIiwgUykuCiAgICAgICAgIC8vIGQuIFJldHVybiBBLgogICAgICAg
ICBpZiAoIXJlZ2V4cC0+bWF0Y2godm0sIGlucHV0LCAwKSkKLSAgICAgICAgICAgIHJlc3VsdC0+
cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwganNTdHJpbmdXaXRoUmV1c2UoZXhlYywgdGhpc1ZhbHVl
LCBpbnB1dCkpOworICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCAwLCBp
bnB1dFN0cmluZyk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAg
ICB9CiAKQEAgLTUxNiw5OSArNTk1LDgwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cmVnRXhwUHJvdG8KICAgICAvLyAxOS4gUmVwZWF0LCB3aGlsZSBxIDwgc2l6ZQogICAgIGJvb2wg
cmVnRXhwSXNTdGlja3kgPSByZWdleHAtPnN0aWNreSgpOwogICAgIGJvb2wgcmVnRXhwSXNVbmlj
b2RlID0gcmVnZXhwLT51bmljb2RlKCk7Ci0gICAgd2hpbGUgKG1hdGNoUG9zaXRpb24gPCBpbnB1
dFNpemUpIHsKLSAgICAgICAgVmVjdG9yPGludCwgMzI+IG92ZWN0b3I7Ci0KLSAgICAgICAgLy8g
YS4gUGVyZm9ybSA/IFNldChzcGxpdHRlciwgImxhc3RJbmRleCIsIHEsIHRydWUpLgotICAgICAg
ICAvLyBiLiBMZXQgeiBiZSA/IFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpLgotICAgICAgICBpbnQg
bXBvcyA9IHJlZ2V4cC0+bWF0Y2godm0sIGlucHV0LCBtYXRjaFBvc2l0aW9uLCBvdmVjdG9yKTsK
LQotICAgICAgICAvLyBjLiBJZiB6IGlzIG51bGwsIGxldCBxIGJlIEFkdmFuY2VTdHJpbmdJbmRl
eChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpLgotICAgICAgICBpZiAobXBvcyA8IDApIHsKLSAgICAg
ICAgICAgIGlmICghcmVnRXhwSXNTdGlja3kpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBtYXRjaFBvc2l0aW9uID0gYWR2YW5jZVN0cmluZ0luZGV4KGlucHV0LCBpbnB1dFNp
emUsIG1hdGNoUG9zaXRpb24sIHJlZ0V4cElzVW5pY29kZSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1wb3MpID49
IGlucHV0U2l6ZSkgewotICAgICAgICAgICAgLy8gVGhlIHNwZWMgcmVkb2VzIHRoZSBSZWdFeHBF
eGVjIHN0YXJ0aW5nIGF0IHRoZSBuZXh0IGNoYXJhY3RlciBvZiB0aGUgaW5wdXQuCi0gICAgICAg
ICAgICAvLyBCdXQgaW4gb3VyIGNhc2UsIG1wb3MgPCAwIG1lYW5zIHRoYXQgdGhlIG5hdGl2ZSBy
ZWdleHAgYWxyZWFkeSBzZWFyY2hlZCBhbGwgcGVybXV0YXRpb25zCi0gICAgICAgICAgICAvLyBh
bmQga25vdyB0aGF0IHdlIHdvbid0IGJlIGFibGUgdG8gZmluZCBhIG1hdGNoIGZvciB0aGUgc2Vw
YXJhdG9yIGV2ZW4gaWYgd2UgcmVkbyB0aGUKLSAgICAgICAgICAgIC8vIFJlZ0V4cEV4ZWMgc3Rh
cnRpbmcgYXQgdGhlIG5leHQgY2hhcmFjdGVyIG9mIHRoZSBpbnB1dC4gU28sIGp1c3QgYmFpbC4K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZC4gRWxzZSwgeiBp
cyBub3QgbnVsbAotICAgICAgICAvLyAgICBpLiBMZXQgZSBiZSA/IFRvTGVuZ3RoKD8gR2V0KHNw
bGl0dGVyLCAibGFzdEluZGV4IikpLgotICAgICAgICAvLyAgIGlpLiBMZXQgZSBiZSBtaW4oZSwg
c2l6ZSkuCi0gICAgICAgIG1hdGNoUG9zaXRpb24gPSBtcG9zOwotICAgICAgICB1bnNpZ25lZCBt
YXRjaEVuZCA9IG92ZWN0b3JbMV07Ci0KLSAgICAgICAgLy8gIGlpaS4gSWYgZSA9IHAsIGxldCBx
IGJlIEFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpLgotICAgICAgICBp
ZiAobWF0Y2hFbmQgPT0gcG9zaXRpb24pIHsKLSAgICAgICAgICAgIG1hdGNoUG9zaXRpb24gPSBh
ZHZhbmNlU3RyaW5nSW5kZXgoaW5wdXQsIGlucHV0U2l6ZSwgbWF0Y2hQb3NpdGlvbiwgcmVnRXhw
SXNVbmljb2RlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIC8v
IGlmIG1hdGNoRW5kID09IDAgdGhlbiBwb3NpdGlvbiBzaG91bGQgYWxzbyBiZSB6ZXJvIGFuZCB0
aHVzIG1hdGNoRW5kIHNob3VsZCBlcXVhbCBwb3NpdGlvbi4KLSAgICAgICAgQVNTRVJUKG1hdGNo
RW5kKTsKLQotICAgICAgICAvLyAgIGl2LiBFbHNlIGUgIT0gcCwKLSAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDYXB0dXJlcyA9IHJlZ2V4cC0+bnVtU3VicGF0dGVybnMo
KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG5ld1Jlc3VsdExlbmd0aCA9IHJlc3VsdExlbmd0aCAr
IG51bWJlck9mQ2FwdHVyZXMgKyAxOwotICAgICAgICAgICAgaWYgKG5ld1Jlc3VsdExlbmd0aCA8
IG51bWJlck9mQ2FwdHVyZXMgfHwgbmV3UmVzdWx0TGVuZ3RoID49IE1BWF9TVE9SQUdFX1ZFQ1RP
Ul9JTkRFWCkgewotICAgICAgICAgICAgICAgIC8vIExldCdzIGNvbnNpZGVyIHdoYXQncyBiZXN0
IGZvciB1c2VycyBoZXJlLiBXZSdyZSBhYm91dCB0byBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mCi0g
ICAgICAgICAgICAgICAgLy8gdGhlIHNwbGl0IGFycmF5IGJleW9uZCB0aGUgbWF4aW11bSBsZW5n
dGggdGhhdCB3ZSBjYW4gc3VwcG9ydCBlZmZpY2llbnRseS4gVGhpcwotICAgICAgICAgICAgICAg
IC8vIHdpbGwgY2F1c2UgdXMgdG8gdXNlIGEgSGFzaE1hcCBmb3IgdGhlIG5ldyBlbnRyaWVzIGFm
dGVyIHRoaXMgcG9pbnQuIFRoYXQncyBnb2luZwotICAgICAgICAgICAgICAgIC8vIHRvIHJlc3Vs
dCBpbiBhIHZlcnkgbG9uZyBydW5uaW5nIHRpbWUgb2YgdGhpcyBmdW5jdGlvbiBhbmQgdmVyeSBs
YXJnZSBtZW1vcnkKLSAgICAgICAgICAgICAgICAvLyB1c2FnZS4gSW4gbXkgZXhwZXJpbWVudHMs
IEpTQyB3aWxsIHNpdCBzcGlubmluZyBmb3IgbWludXRlcyBhZnRlciBnZXR0aW5nIGhlcmUgYW5k
Ci0gICAgICAgICAgICAgICAgLy8gaXQgd2FzIHVzaW5nID40R0Igb2YgbWVtb3J5IGFuZCBldmVu
dHVhbGx5IGdyZXcgdG8gOEdCLiBJdCBrZXB0IHJ1bm5pbmcgd2l0aG91dAotICAgICAgICAgICAg
ICAgIC8vIGZpbmlzaGluZyB1bnRpbCBJIGtpbGxlZCBpdC4gVGhhdCdzIHByb2JhYmx5IG5vdCB3
aGF0IHRoZSB1c2VyIHdhbnRlZC4gVGhlIHVzZXIsCi0gICAgICAgICAgICAgICAgLy8gb3IgdGhl
IHByb2dyYW0gdGhhdCB0aGUgdXNlciBpcyBydW5uaW5nLCBwcm9iYWJseSBtYWRlIGEgbWlzdGFr
ZSBieSBjYWxsaW5nIHRoaXMKLSAgICAgICAgICAgICAgICAvLyBtZXRob2QgaW4gc3VjaCBhIHdh
eSB0aGF0IGl0IHJlc3VsdGVkIGluIHN1Y2ggYW4gb2Jub3hpb3VzIGFycmF5LiBUaGVyZWZvcmUs
IHRvCi0gICAgICAgICAgICAgICAgLy8gcHJvdGVjdCBvdXJzZWx2ZXMsIHdlIGJhaWwgYXQgdGhp
cyBwb2ludC4KLSAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gMS4gTGV0IFQgYmUgYSBTdHJpbmcgdmFsdWUg
ZXF1YWwgdG8gdGhlIHN1YnN0cmluZyBvZiBTIGNvbnNpc3Rpbmcgb2YgdGhlIGVsZW1lbnRzIGF0
IGluZGljZXMgcCAoaW5jbHVzaXZlKSB0aHJvdWdoIHEgKGV4Y2x1c2l2ZSkuCi0gICAgICAgICAg
ICAvLyAyLiBQZXJmb3JtICEgQ3JlYXRlRGF0YVByb3BlcnR5KEEsICEgVG9TdHJpbmcobGVuZ3Ro
QSksIFQpLgotICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCByZXN1bHRM
ZW5ndGgsIGpzU3Vic3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgaW5wdXQsIHBvc2l0aW9uLCBtYXRj
aFBvc2l0aW9uIC0gcG9zaXRpb24pKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0IGxlbmd0aEEg
YmUgbGVuZ3RoQSArIDEuCi0gICAgICAgICAgICAvLyA0LiBJZiBsZW5ndGhBID0gbGltLCByZXR1
cm4gQS4KLSAgICAgICAgICAgIGlmICgrK3Jlc3VsdExlbmd0aCA9PSBsaW1pdCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0KLSAgICAgICAgICAgIC8v
IDUuIExldCBwIGJlIGUuCi0gICAgICAgICAgICBwb3NpdGlvbiA9IG1hdGNoRW5kOwotCi0gICAg
ICAgICAgICAvLyA2LiBMZXQgbnVtYmVyT2ZDYXB0dXJlcyBiZSA/IFRvTGVuZ3RoKD8gR2V0KHos
ICJsZW5ndGgiKSkuCi0gICAgICAgICAgICAvLyA3LiBMZXQgbnVtYmVyT2ZDYXB0dXJlcyBiZSBt
YXgobnVtYmVyT2ZDYXB0dXJlcy0xLCAwKS4KLSAgICAgICAgICAgIC8vIDguIExldCBpIGJlIDEu
Ci0gICAgICAgICAgICAvLyA5LiBSZXBlYXQsIHdoaWxlIGkgPD0gbnVtYmVyT2ZDYXB0dXJlcywK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtYmVyT2ZDYXB0dXJlczsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgLy8gYS4gTGV0IG5leHRDYXB0dXJlIGJlID8gR2V0KHos
ICEgVG9TdHJpbmcoaSkpLgotICAgICAgICAgICAgICAgIC8vIGIuIFBlcmZvcm0gISBDcmVhdGVE
YXRhUHJvcGVydHkoQSwgISBUb1N0cmluZyhsZW5ndGhBKSwgbmV4dENhcHR1cmUpLgotICAgICAg
ICAgICAgICAgIGludCBzdWIgPSBvdmVjdG9yW2kgKiAyXTsKLSAgICAgICAgICAgICAgICByZXN1
bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHJlc3VsdExlbmd0aCwgc3ViIDwgMCA/IGpzVW5kZWZp
bmVkKCkgOiBqc1N1YnN0cmluZyhleGVjLCB0aGlzVmFsdWUsIGlucHV0LCBzdWIsIG92ZWN0b3Jb
aSAqIDIgKyAxXSAtIHN1YikpOwotCi0gICAgICAgICAgICAgICAgLy8gYy4gTGV0IGkgYmUgaSAr
IDEuCi0gICAgICAgICAgICAgICAgLy8gZC4gTGV0IGxlbmd0aEEgYmUgbGVuZ3RoQSArIDEuCi0g
ICAgICAgICAgICAgICAgLy8gZS4gSWYgbGVuZ3RoQSA9IGxpbSwgcmV0dXJuIEEuCi0gICAgICAg
ICAgICAgICAgaWYgKCsrcmVzdWx0TGVuZ3RoID09IGxpbWl0KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIDEwLiBMZXQgcSBiZSBwLgotICAgICAgICAgICAgbWF0Y2hQb3NpdGlvbiA9IHBv
c2l0aW9uOwotICAgICAgICB9CisgICAgCisgICAgdW5zaWduZWQgbWF4U2l6ZUZvckRpcmVjdFBh
dGggPSAxMDAwMDA7CisgICAgCisgICAgZ2VuZXJpY1NwbGl0KAorICAgICAgICB2bSwgcmVnZXhw
LCBpbnB1dCwgaW5wdXRTaXplLCBwb3NpdGlvbiwgbWF0Y2hQb3NpdGlvbiwgcmVnRXhwSXNTdGlj
a3ksIHJlZ0V4cElzVW5pY29kZSwKKyAgICAgICAgWyZdICgpIC0+IFNwbGl0Q29udHJvbCB7Cisg
ICAgICAgICAgICBpZiAocmVzdWx0TGVuZ3RoID49IG1heFNpemVGb3JEaXJlY3RQYXRoKQorICAg
ICAgICAgICAgICAgIHJldHVybiBBYm9ydFNwbGl0OworICAgICAgICAgICAgcmV0dXJuIENvbnRp
bnVlU3BsaXQ7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoYm9vbCBpc0RlZmluZWQsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgpIC0+IFNwbGl0Q29udHJvbCB7CisgICAgICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHJlc3VsdExlbmd0aCsrLCBpc0RlZmluZWQg
PyBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0U3RyaW5n
LCBzdGFydCwgbGVuZ3RoKSA6IGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgaWYgKHJlc3Vs
dExlbmd0aCA+PSBsaW1pdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQWJvcnRTcGxpdDsKKyAg
ICAgICAgICAgIHJldHVybiBDb250aW51ZVNwbGl0OworICAgICAgICB9KTsKKyAgICAKKyAgICBp
ZiAocmVzdWx0TGVuZ3RoID49IGxpbWl0KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgaWYgKHJlc3VsdExlbmd0aCA8IG1heFNpemVGb3JEaXJlY3RQYXRoKSB7
CisgICAgICAgIC8vIDIwLiBMZXQgVCBiZSBhIFN0cmluZyB2YWx1ZSBlcXVhbCB0byB0aGUgc3Vi
c3RyaW5nIG9mIFMgY29uc2lzdGluZyBvZiB0aGUgZWxlbWVudHMgYXQgaW5kaWNlcyBwIChpbmNs
dXNpdmUpIHRocm91Z2ggc2l6ZSAoZXhjbHVzaXZlKS4KKyAgICAgICAgLy8gMjEuIFBlcmZvcm0g
ISBDcmVhdGVEYXRhUHJvcGVydHkoQSwgISBUb1N0cmluZyhsZW5ndGhBKSwgVCkuCisgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgcmVzdWx0TGVuZ3RoLCBKU1JvcGVTdHJpbmc6
OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0U3RyaW5nLCBwb3NpdGlvbiwgaW5w
dXRTaXplIC0gcG9zaXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIyLiBSZXR1cm4gQS4K
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KLQorICAgIAor
ICAgIC8vIE5vdyBkbyBhIGRyeSBydW4gdG8gc2VlIGhvdyBiaWcgdGhpbmdzIGdldC4gR2l2ZSB1
cCBpZiB0aGV5IGdldCBhYnN1cmQuCisgICAgdW5zaWduZWQgc2F2ZWRQb3NpdGlvbiA9IHBvc2l0
aW9uOworICAgIHVuc2lnbmVkIHNhdmVkTWF0Y2hQb3NpdGlvbiA9IG1hdGNoUG9zaXRpb247Cisg
ICAgdW5zaWduZWQgZHJ5UnVuQ291bnQgPSAwOworICAgIGdlbmVyaWNTcGxpdCgKKyAgICAgICAg
dm0sIHJlZ2V4cCwgaW5wdXQsIGlucHV0U2l6ZSwgcG9zaXRpb24sIG1hdGNoUG9zaXRpb24sIHJl
Z0V4cElzU3RpY2t5LCByZWdFeHBJc1VuaWNvZGUsCisgICAgICAgIFsmXSAoKSAtPiBTcGxpdENv
bnRyb2wgeworICAgICAgICAgICAgaWYgKHJlc3VsdExlbmd0aCArIGRyeVJ1bkNvdW50ID49IE1B
WF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFib3J0U3Bs
aXQ7CisgICAgICAgICAgICByZXR1cm4gQ29udGludWVTcGxpdDsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyZdIChib29sLCB1bnNpZ25lZCwgdW5zaWduZWQpIC0+IFNwbGl0Q29udHJvbCB7CisgICAg
ICAgICAgICBkcnlSdW5Db3VudCsrOworICAgICAgICAgICAgaWYgKHJlc3VsdExlbmd0aCArIGRy
eVJ1bkNvdW50ID49IGxpbWl0KQorICAgICAgICAgICAgICAgIHJldHVybiBBYm9ydFNwbGl0Owor
ICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU3BsaXQ7CisgICAgICAgIH0pOworICAgIAorICAg
IGlmIChyZXN1bHRMZW5ndGggKyBkcnlSdW5Db3VudCA+PSBNQVhfU1RPUkFHRV9WRUNUT1JfTEVO
R1RIKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgLy8g
T0ssIHdlIGtub3cgdGhhdCBpZiB3ZSBmaW5pc2ggdGhlIHNwbGl0LCB3ZSB3b24ndCBoYXZlIHRv
IE9PTS4KKyAgICBwb3NpdGlvbiA9IHNhdmVkUG9zaXRpb247CisgICAgbWF0Y2hQb3NpdGlvbiA9
IHNhdmVkTWF0Y2hQb3NpdGlvbjsKKyAgICAKKyAgICBnZW5lcmljU3BsaXQoCisgICAgICAgIHZt
LCByZWdleHAsIGlucHV0LCBpbnB1dFNpemUsIHBvc2l0aW9uLCBtYXRjaFBvc2l0aW9uLCByZWdF
eHBJc1N0aWNreSwgcmVnRXhwSXNVbmljb2RlLAorICAgICAgICBbJl0gKCkgLT4gU3BsaXRDb250
cm9sIHsKKyAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNwbGl0OworICAgICAgICB9LAorICAg
ICAgICBbJl0gKGJvb2wgaXNEZWZpbmVkLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3Ro
KSAtPiBTcGxpdENvbnRyb2wgeworICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRleChl
eGVjLCByZXN1bHRMZW5ndGgrKywgaXNEZWZpbmVkID8gSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJz
dHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dFN0cmluZywgc3RhcnQsIGxlbmd0aCkgOiBqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHRMZW5ndGggPj0gbGltaXQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEFib3J0U3BsaXQ7CisgICAgICAgICAgICByZXR1cm4gQ29udGludWVT
cGxpdDsKKyAgICAgICAgfSk7CisgICAgCisgICAgaWYgKHJlc3VsdExlbmd0aCA+PSBsaW1pdCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIAogICAgIC8vIDIw
LiBMZXQgVCBiZSBhIFN0cmluZyB2YWx1ZSBlcXVhbCB0byB0aGUgc3Vic3RyaW5nIG9mIFMgY29u
c2lzdGluZyBvZiB0aGUgZWxlbWVudHMgYXQgaW5kaWNlcyBwIChpbmNsdXNpdmUpIHRocm91Z2gg
c2l6ZSAoZXhjbHVzaXZlKS4KICAgICAvLyAyMS4gUGVyZm9ybSAhIENyZWF0ZURhdGFQcm9wZXJ0
eShBLCAhIFRvU3RyaW5nKGxlbmd0aEEpLCBUKS4KLSAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4
KGV4ZWMsIHJlc3VsdExlbmd0aCsrLCBqc1N1YnN0cmluZyhleGVjLCB0aGlzVmFsdWUsIGlucHV0
LCBwb3NpdGlvbiwgaW5wdXRTaXplIC0gcG9zaXRpb24pKTsKLQorICAgIHJlc3VsdC0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgcmVzdWx0TGVuZ3RoLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmlu
Z09mUmVzb2x2ZWQodm0sIGlucHV0U3RyaW5nLCBwb3NpdGlvbiwgaW5wdXRTaXplIC0gcG9zaXRp
b24pKTsKKyAgICAKICAgICAvLyAyMi4gUmV0dXJuIEEuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDIwMTQ1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw5IEBA
IEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZ09iamVjdCogY29uc3RydWMKIC8vIEhlbHBlciBmb3Ig
cHJvZHVjaW5nIGEgSlNTdHJpbmcgZm9yICdzdHJpbmcnLCB3aGVyZSAnc3RyaW5nJyB3YXMgYmVl
biBwcm9kdWNlZCBieQogLy8gY2FsbGluZyBUb1N0cmluZyBvbiAnb3JpZ2luYWxWYWx1ZScuIElu
IGNhc2VzIHdoZXJlICdvcmlnaW5hbFZhbHVlJyBhbHJlYWR5IHdhcyBhCiAvLyBzdHJpbmcgcHJp
bWl0aXZlIHdlIGNhbiBqdXN0IHVzZSB0aGlzLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBhbGxvY2F0
ZSBhIG5ldyBKU1N0cmluZy4KKy8vIEZJWE1FOiBCYXNpY2FsbHkgYW55IHVzZSBvZiB0aGlzIGlz
IGJhZC4gdG9TdHJpbmcoKSByZXR1cm5zIGEgSlNTdHJpbmcqIHNvIHdlIGRvbid0IG5lZWQgdG8K
Ky8vIHBhc3MgYXJvdW5kIHRoZSBvcmlnaW5hbFZhbHVlOyB3ZSBjb3VsZCBqdXN0IHBhc3MgYXJv
dW5kIHRoZSBKU1N0cmluZyouIFRoZW4geW91IGRvbid0IG5lZWQKKy8vIHRoaXMgZnVuY3Rpb24u
IFlvdSBqdXN0IHVzZSB0aGUgSlNTdHJpbmcqIHRoYXQgdG9TdHJpbmcoKSByZXR1cm5lZC4KIHN0
YXRpYyBpbmxpbmUgSlNTdHJpbmcqIGpzU3RyaW5nV2l0aFJldXNlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBvcmlnaW5hbFZhbHVlLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBpZiAo
b3JpZ2luYWxWYWx1ZS5pc1N0cmluZygpKSB7CkBAIC05NCwxMCArOTcsOSBAQCBzdGF0aWMgaW5s
aW5lIEpTU3RyaW5nKiBqc1N0cmluZ1dpdGhSZXVzCiB9CiAKIC8vIEhlbHBlciB0aGF0IHRyaWVz
IHRvIHVzZSB0aGUgSlNTdHJpbmcgc3Vic3RyaW5nIHNoYXJpbmcgbWVjaGFuaXNtIGlmICdvcmln
aW5hbFZhbHVlJyBpcyBhIEpTU3RyaW5nLgotLy8gRklYTUU6IEl0IHdvdWxkIGJlIGV2ZW4gYmV0
dGVyIGlmIHRvU3RyaW5nIHJldHVybmVkIGEgSlNTdHJpbmcqLCBvciBpZiBhbnlvbmUgd2hvIGNh
bGxlZAotLy8gdG9TdHJpbmcgd2l0aCB0aGUgaW50ZW50IG9mIGxhdGVyIGNhbGxpbmcgdGhpcyBm
dW5jdG9uIGZpcnN0IGNyZWF0ZWQgYSBqc1N0cmluZyBmcm9tIHRoZSBTdHJpbmcKLS8vIHRoYXQg
dG9TdHJpbmcgcmV0dXJuZWQuIFRoYXQgd2F5LCB3ZSdkIGdldCB0aGUgc3Vic3RyaW5nIG9wdGlt
aXphdGlvbiBldmVuIHdoZW4gdGhlIGlucHV0IHdhcwotLy8gbm90IGEgSlNTdHJpbmcuCisvLyBG
SVhNRTogQmFzaWNhbGx5IGFueSB1c2Ugb2YgdGhpcyBpcyBiYWQuIHRvU3RyaW5nKCkgcmV0dXJu
cyBhIEpTU3RyaW5nKiBzbyB3ZSBkb24ndCBuZWVkIHRvCisvLyBwYXNzIGFyb3VuZCB0aGUgb3Jp
Z2luYWxWYWx1ZTsgd2UgY291bGQganVzdCBwYXNzIGFyb3VuZCB0aGUgSlNTdHJpbmcqLiBBbmQg
c2luY2Ugd2UndmUKKy8vIHJlc29sdmVkIGl0LCB3ZSBrbm93IHRoYXQgd2UgY2FuIGp1c3QgYWxs
b2NhdGUgdGhlIHN1YnN0cmluZyBjZWxsIGRpcmVjdGx5LgogLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODE0MAogc3RhdGljIGlubGluZSBKU1N0cmluZyoganNT
dWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG9yaWdpbmFsVmFsdWUsIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYmlnLXNwbGl0LWNhcHR1cmVzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYmlnLXNw
bGl0LWNhcHR1cmVzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9iaWctc3BsaXQtY2FwdHVyZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNyBAQAorInVzZSBzdHJpY3QiOworCit2YXIgYmlnU3RyaW5nID0gInh5eiI7Cit3aGlsZSAo
YmlnU3RyaW5nLmxlbmd0aCA8IDIwMDAwMCkKKyAgICBiaWdTdHJpbmcgPSBiaWdTdHJpbmcgKyBi
aWdTdHJpbmc7CisKK2lmIChiaWdTdHJpbmcubGVuZ3RoICE9IDM5MzIxNikKKyAgICB0aHJvdyAi
RXJyb3I6IGJhZCBzdHJpbmcgbGVuZ3RoOiAiICsgYmlnU3RyaW5nLmxlbmd0aDsKKwordmFyIHJl
c3VsdCA9IC8oeCkoeSkoeikvW1N5bWJvbC5zcGxpdF0oYmlnU3RyaW5nKTsKKworaWYgKHJlc3Vs
dC5sZW5ndGggIT0gNTI0Mjg5KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhcnJheSBs
ZW5ndGg6ICIgKyByZXN1bHQubGVuZ3RoOworCitpZiAocmVzdWx0WzBdICE9ICIiKQorICAgIHRo
cm93ICJFcnJvcjogYXJyYXkgZG9lcyBub3Qgc3RhcnQgd2l0aCBhbiBlbXB0eSBzdHJpbmcuIjsK
KworZm9yICh2YXIgaSA9IDE7IGkgPCByZXN1bHQubGVuZ3RoOyBpICs9IDQpIHsKKyAgICBpZiAo
cmVzdWx0W2kgKyAwXSAhPSAieCIpCisgICAgICAgIHRocm93ICJFcnJvcjogYXJyYXkgZG9lcyBu
b3QgY29udGFpbiBcInhcIiBhdCBpID0gIiArIGkgKyAiICsgMDogIiArIHJlc3VsdFtpICsgMF07
CisgICAgaWYgKHJlc3VsdFtpICsgMV0gIT0gInkiKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGFy
cmF5IGRvZXMgbm90IGNvbnRhaW4gXCJ5XCIgYXQgaSA9ICIgKyBpICsgIiArIDE6ICIgKyByZXN1
bHRbaSArIDFdOworICAgIGlmIChyZXN1bHRbaSArIDJdICE9ICJ6IikKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBhcnJheSBkb2VzIG5vdCBjb250YWluIFwielwiIGF0IGkgPSAiICsgaSArICIgKyAy
OiAiICsgcmVzdWx0W2kgKyAyXTsKKyAgICBpZiAocmVzdWx0W2kgKyAzXSAhPSAiIikKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBhcnJheSBkb2VzIG5vdCBjb250YWluIFwiXCIgYXQgaSA9ICIgKyBp
ICsgIiArIDM6ICIgKyByZXN1bHRbaSArIDNdOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9iaWctc3BsaXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9iaWctc3BsaXQuanMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2JpZy1zcGxpdC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIxIEBACisidXNlIHN0cmljdCI7CisKK3ZhciBiaWdTdHJpbmcgPSAieHki
Oword2hpbGUgKGJpZ1N0cmluZy5sZW5ndGggPCAyMDAwMDApCisgICAgYmlnU3RyaW5nID0gYmln
U3RyaW5nICsgYmlnU3RyaW5nOworCitpZiAoYmlnU3RyaW5nLmxlbmd0aCAhPSAyNjIxNDQpCisg
ICAgdGhyb3cgIkVycm9yOiBiYWQgc3RyaW5nIGxlbmd0aDogIiArIGJpZ1N0cmluZy5sZW5ndGg7
CisKK3ZhciByZXN1bHQgPSAveC9bU3ltYm9sLnNwbGl0XShiaWdTdHJpbmcpOworCitpZiAocmVz
dWx0Lmxlbmd0aCAhPSAxMzEwNzMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGFycmF5
IGxlbmd0aDogIiArIHJlc3VsdC5sZW5ndGg7CisKK2lmIChyZXN1bHRbMF0gIT0gIiIpCisgICAg
dGhyb3cgIkVycm9yOiBhcnJheSBkb2VzIG5vdCBzdGFydCB3aXRoIGFuIGVtcHR5IHN0cmluZy4i
OworCitmb3IgKHZhciBpID0gMTsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgeworICAgIGlmIChy
ZXN1bHRbaV0gIT0gInkiKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGFycmF5IGRvZXMgbm90IGNv
bnRhaW4gXCJ5XCIgYXQgaSA9ICIgKyBpICsgIjogIiArIHJlc3VsdFtpXTsKK30K
</data>
<flag name="review"
          id="303983"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>