<?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>140380</bug_id>
          
          <creation_ts>2015-01-12 19:35:38 -0800</creation_ts>
          <short_desc>Do not create new set for every sub-operation when converting a NFA to DFA</short_desc>
          <delta_ts>2015-01-14 14:54:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1060750</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-01-12 19:35:38 -0800</bug_when>
    <thetext>Do not create new set for every sub-operation when converting a NFA to DFA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060751</commentid>
    <comment_count>1</comment_count>
      <attachid>244488</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-01-12 19:47:16 -0800</bug_when>
    <thetext>Created attachment 244488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061016</commentid>
    <comment_count>2</comment_count>
      <attachid>244488</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-01-13 17:47:54 -0800</bug_when>
    <thetext>Comment on attachment 244488
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061273</commentid>
    <comment_count>3</comment_count>
      <attachid>244488</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-01-14 12:32:34 -0800</bug_when>
    <thetext>Comment on attachment 244488
Patch

Clearing flags on attachment: 244488

Committed r178436: &lt;http://trac.webkit.org/changeset/178436&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061274</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-01-14 12:32:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061319</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-01-14 14:54:29 -0800</bug_when>
    <thetext>+ http://trac.webkit.org/changeset/178449</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244488</attachid>
            <date>2015-01-12 19:47:16 -0800</date>
            <delta_ts>2015-01-14 12:32:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140380-20150112194722.patch</filename>
            <type>text/plain</type>
            <size>35795</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc4MzE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGViNGE3M2UyMDgyYjYy
NWFiMmU5NGUxMjAzZjcxMjdmMjAyNzE1ZS4uMjU1MDE3NzQzOWZmMzZjMTQyMDU3NjZlM2RkNDY0
ODAzMjRjMDE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDgyIEBACiAyMDE1LTAxLTEyICBCZW5q
YW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAorICAgICAgICBEbyBub3QgY3Jl
YXRlIG5ldyBzZXQgZm9yIGV2ZXJ5IHN1Yi1vcGVyYXRpb24gd2hlbiBjb252ZXJ0aW5nIGEgTkZB
IHRvIERGQQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQwMzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgbWFraW5nIHRoZSBORkEtdG8tREZBIGNvbnZl
cnNpb24gbW9yZSBzY2FsYWJsZTogaW5zdGVhZAorICAgICAgICBvZiBjcmVhdGluZyBuZXcgc2V0
cyBmb3IgZWFjaCBzdGVwIG9mIHRoZSBhbGdvcml0aG0sIHdlIHVzZSB0d28ga2luZHMgb2Ygc2V0
cworICAgICAgICBhbmQgbmV2ZXIgZG8gYW55IGNvcHkuCisKKyAgICAgICAgVGhlIGZpcnN0IG5l
dyB0b29sIHRvIGRvIHRoYXQgaXMgVW5pcXVlTm9kZUlkU2V0SW1wbC4gSXQgcmVwcmVzZW50cyBh
IHNldCBvZiBORkEgc3RhdGUgY29ycmVzcG9uZGluZyB0byBhIERGQQorICAgICAgICBzdGF0ZS4g
SXQgaXMgdW5pcXVlIHBlciBERkEgc3RhdGUuCisKKyAgICAgICAgSGFzaGFibGVOb2RlSWRTZXQg
aXMgYSBoZWxwZXIgdG9vbCBzdG9yaW5nIGEgVW5pcXVlTm9kZUlkU2V0SW1wbC4KKworICAgICAg
ICBUaGUgY3JlYXRpb24gb2YgbmV3IHNldHMgbm93IGdvZXMgbGlrZSB0aGlzOgorICAgICAgICAx
KSBHZXQgYSBOb2RlSWRTZXQgZm9yIGVhY2ggcG9zc2libGUgdHJhbnNpdGlvbi4KKyAgICAgICAg
MikgRm9yIGVhY2ggdHJhbnNpdGlvbjoKKyAgICAgICAgICAgMmEpIEV4dGVuZCB0aGUgTm9kZUlk
U2V0IGluIHBsYWNlIHdpdGggaXRzIGVwc2lsb24gY2xvc3VyZS4KKyAgICAgICAgICAgMmIpIEdl
dCB0aGUgVW5pcXVlTm9kZUlkU2V0SW1wbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBuZXcgc2V0IHdl
IGRpc2NvdmVyZWQuCisgICAgICAgICAgIDJjKSBJZiB0aGUgVW5pcXVlTm9kZUlkU2V0SW1wbCBp
cyBuZXcsIHF1ZXVlIGl0IGZvciBwcm9jZXNzaW5nLgorCisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25zRGVidWdnaW5nLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQU5vZGUuaC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2V0UnVsZUxpc3QpOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6RXh0ZW5zaW9uc01hbmFnZXI6OmxvYWRFeHRl
bnNpb24pOgorICAgICAgICBBZGRlZCBzb21lIGxvZ2dpbmcgdG8gaW5zcGVjdCBtb3JlIGVhc2ls
eSB3aGF0IHRoZSBjbGllbnRzIGFyZSBzZW5kaW5nLgorCisgICAgICAgICogY29udGVudGV4dGVu
c2lvbnMvREZBLmNwcDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEuaDoKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmg6CisgICAgICAgICogY29udGVudGV4dGVu
c2lvbnMvTkZBLmNwcDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ORkEuaDoKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHA6CisKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjplcHNpbG9uQ2xvc3VyZSk6CisgICAgICAgIEluc3RlYWQgb2Yg
cmV0dXJuaW5nIGEgbmV3IEhhc2hTZXQsIGV4dGVuZCB0aGUgaW5wdXQgSGFzaFNldC4KKworICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlVuaXF1ZU5vZGVJZFNldEltcGw6OmJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VW5pcXVlTm9kZUlk
U2V0OjpVbmlxdWVOb2RlSWRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OlVuaXF1ZU5vZGVJZFNldDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpVbmlxdWVOb2RlSWRTZXQ6On5VbmlxdWVOb2RlSWRTZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlVuaXF1ZU5vZGVJZFNldDo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VW5pcXVlTm9kZUlkU2V0
OjppbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpVbmlxdWVOb2Rl
SWRTZXQ6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlVuaXF1
ZU5vZGVJZFNldDo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpVbmlxdWVOb2RlSWRTZXQ6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpVbmlxdWVOb2RlSWRTZXRIYXNoOjpoYXNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpVbmlxdWVOb2RlSWRTZXRIYXNoOjplcXVh
bCk6CisgICAgICAgIFVuaXF1ZU5vZGVJZFNldEltcGwgaXMgYSBjb21wYWN0IHJlcHJlc2VudGF0
aW9uIG9mIGEgTm9kZUlkU2V0IGNvcnJlc3BvbmRpbmcgdG8gYSBERkEgbm9kZS4KKworICAgICAg
ICBJdCBpcyBuZXZlciBidWlsdCBkaXJlY3RseSwgaXQgaXMgb25seSBidWlsdCBvbiBkZW1hbmQg
dGhyb3VnaCBOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFRyYW5zbGF0b3IKKyAgICAgICAgZnJv
bSBhIE5vZGVJZFNldC4KKworICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Ok5v
ZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlOjpOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNl
dFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Tm9kZUlkU2V0
VG9VbmlxdWVOb2RlSWRTZXRUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFRyYW5zbGF0b3I6OmVx
dWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpOb2RlSWRTZXRUb1Vu
aXF1ZU5vZGVJZFNldFRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6U2V0VHJhbnNpdGlvbnNFeGNsdWRpbmdFcHNpbG9uOjpvcGVyYXRv
cltdKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXRUcmFuc2l0aW9u
c0V4Y2x1ZGluZ0Vwc2lsb246OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OlNldFRyYW5zaXRpb25zRXhjbHVkaW5nRXBzaWxvbjo6YmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNldFRyYW5zaXRpb25zRXhjbHVkaW5nRXBzaWxv
bjo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpwb3B1bGF0ZVRy
YW5zaXRpb25zRXhjbHVkaW5nRXBzaWxvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6TkZBVG9ERkE6OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OnNldFRyYW5zaXRpb25zRXhjbHVkaW5nRXBzaWxvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SGFzaGFibGVOb2RlSWRTZXQ6Okhhc2hh
YmxlTm9kZUlkU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpIYXNoYWJsZU5vZGVJZFNldDo6b3BlcmF0b3I9KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpIYXNoYWJsZU5vZGVJZFNldDo6aXNFbXB0eVZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpIYXNoYWJs
ZU5vZGVJZFNldDo6aXNEZWxldGVkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6Okhhc2hhYmxlTm9kZUlkU2V0Ojpub2RlSWRTZXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Okhhc2hhYmxlTm9kZUlkU2V0
SGFzaDo6aGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6SGFzaGFibGVOb2RlSWRTZXRIYXNoOjplcXVhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6YWRkREZBU3RhdGUpOiBEZWxldGVkLgorCisyMDE1LTAx
LTEyICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKwogICAgICAgICBG
aXggYSB0eXBvIGluIHIxNzgzMTMKIAogICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL1VSTEZp
bHRlclBhcnNlci5jcHA6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMjIxNWM3YTU4MTE1OTc3MzUyZTQ5ZTE4NjVhZDhhNmE3Yzg0
MDk0MS4uMWVkOThmMDY4MTZlMjM0MTJlYTFlNzI5ZTk0Y2Y5ZjFiOGUxMWM2YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAx
NCw2ICsxMDE0LDcgQEAKIAkJMjRGNTRFQUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9u
Q2FjaGVIb3N0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNTQyRjREQTEx
NjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2
IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLzsgfTsKIAkJMjU0MkY0REIxMTY2QzI1QTAw
RTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyRjREOTExNjZDMjVBMDBFODlBODYgLyogVXNlckdl
c3R1cmVJbmRpY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkyNjIzOTEzNjFBNjQ4Q0VFMDA3MjUxQTMgLyogQ29udGVudEV4dGVuc2lvbnNE
ZWJ1Z2dpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2MjM5MTM1MUE2NDhDRUUwMDcyNTFBMyAvKiBDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5o
ICovOyB9OwogCQkyNjI1NUYwMDE4ODc4REZGMDAwNkUxRkQgLyogVXNlckFnZW50SU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYyNTVFRkYxODg3
OERGRjAwMDZFMUZEIC8qIFVzZXJBZ2VudElPUy5tbSAqLzsgfTsKIAkJMjYyNTVGMDMxODg3OEUx
MTAwMDZFMUZEIC8qIFVzZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjYyNTVGMDExODg3OEUxMTAwMDZFMUZEIC8qIFVzZXJBZ2VudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI2MjU1RjA0
MTg4NzhFMTEwMDA2RTFGRCAvKiBVc2VyQWdlbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjI1NUYwMjE4ODc4RTExMDAwNkUxRkQgLyogVXNl
ckFnZW50TWFjLm1tICovOyB9OwpAQCAtODAxMiw2ICs4MDEzLDcgQEAKIAkJMjUyN0NDOTUxNkJG
OTVERDAwOUREQUMwIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDgxMTY2
QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDkxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0
dXJlSW5kaWNhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJHZXN0
dXJlSW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2MjM5MTM1MUE2
NDhDRUUwMDcyNTFBMyAvKiBDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjI1NUVGRjE4ODc4REZGMDAwNkUxRkQgLyogVXNl
ckFnZW50SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVXNl
ckFnZW50SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjI1NUYwMTE4ODc4
RTExMDAwNkUxRkQgLyogVXNlckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVzZXJBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjI1NUYwMjE4
ODc4RTExMDAwNkUxRkQgLyogVXNlckFnZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gVXNlckFnZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTUzMjMsNiArMTUzMjUsNyBAQAogCQkJCTI2RjBDODlBMUEyRUMxMTAwMDI3OTRG
OCAvKiBDb250ZW50RXh0ZW5zaW9uUnVsZS5oICovLAogCQkJCTI2RjBDODlEMUEyRUMzQkUwMDI3
OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwICovLAogCQkJCTI2RjBDODlFMUEy
RUMzQkUwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCAqLywKKwkJCQkyNjIz
OTEzNTFBNjQ4Q0VFMDA3MjUxQTMgLyogQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaCAqLywK
IAkJCQkyNkYwQzg5MzFBMkQ3QTc2MDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvbnNJbnRlcmZh
Y2UuY3BwICovLAogCQkJCTI2RjBDODkxMUEyRDc5Q0IwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5z
aW9uc0ludGVyZmFjZS5oICovLAogCQkJCTI2RjBDODk1MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uc01hbmFnZXIuY3BwICovLApAQCAtMjYxNjIsNiArMjYxNjUsNyBAQAogCQkJ
CTA4MjUwOTM5MTI4QkQ0RDgwMEUyRUQ4RSAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4NUExNTkzMTI4OUE4REQwMDI3MTBFMyAvKiBTVkdBbmltYXRl
ZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzOUQz
MzQzMTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTI2MjM5MTM2MUE2NDhDRUUwMDcyNTFBMyAvKiBDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2lu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5RDMzNDQxM0E2OTExQzAwQzIwRjRGIC8qIFNWR0Fu
aW1hdGVkVHlwZUFuaW1hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5MDBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHQW5pbWF0ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzMkI4
NDM0MTlEOEU1NTEwMEIyNjA1NSAvKiBTVkdBbmltYXRlRWxlbWVudEJhc2UuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKaW5kZXggMDIzNzM5ZGYzN2I3MTdmYmI0NmM3
YTY0Y2M2YzVmNTZjZmYyNjIzMS4uM2E3MTkwZWU2ZWU3NzM5MTQ4NmQwZWI0ZmUzYWM1OTgzYTRk
NWU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCkBAIC0yOCwxMCArMjgsMTIgQEAKIAog
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5z
aW9uc0RlYnVnZ2luZy5oIgogI2luY2x1ZGUgIk5GQS5oIgogI2luY2x1ZGUgIk5GQVRvREZBLmgi
CiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiVVJMRmlsdGVyUGFyc2VyLmgiCisjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBA
IC01Nyw2ICs1OSwxMCBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2V0UnVsZUxp
c3QoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBWZWN0bwogICAgICAgICByZXR1cm47
CiAgICAgfQogCisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwor
ICAgIGRvdWJsZSBuZmFCdWlsZFRpbWVTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpOworI2VuZGlmCisKICAgICBORkEgbmZhOwogICAgIGZvciAodW5zaWduZWQgcnVsZUluZGV4
ID0gMDsgcnVsZUluZGV4IDwgcnVsZUxpc3Quc2l6ZSgpOyArK3J1bGVJbmRleCkgewogICAgICAg
ICBjb25zdCBDb250ZW50RXh0ZW5zaW9uUnVsZSYgY29udGVudEV4dGVuc2lvblJ1bGUgPSBydWxl
TGlzdFtydWxlSW5kZXhdOwpAQCAtNzIsOCArNzgsMzIgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQ6OnNldFJ1bGVMaXN0KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVmVj
dG8KICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIEZJWE1FOiBuZXZlciBhZGQgYSBERkEgdGhh
dCBvbmx5IG1hdGNoZXMgdGhlIGVtcHR5IHNldC4KKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVS
Rk9STUFOQ0VfUkVQT1JUSU5HCisgICAgZG91YmxlIG5mYUJ1aWxkVGltZUVuZCA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIGRhdGFMb2dGKCIgICAgVGltZSBzcGVudCBidWls
ZGluZyB0aGUgTkZBOiAlZlxuIiwgKG5mYUJ1aWxkVGltZUVuZCAtIG5mYUJ1aWxkVGltZVN0YXJ0
KSk7CisjZW5kaWYKKworI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVH
R0lORworICAgIG5mYS5kZWJ1Z1ByaW50RG90KCk7CisjZW5kaWYKKworI2lmIENPTlRFTlRfRVhU
RU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKKyAgICBkb3VibGUgZGZhQnVpbGRUaW1lU3Rh
cnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyNlbmRpZgorCiAgICAgQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IHsgTkZBVG9ERkE6
OmNvbnZlcnQobmZhKSwgcnVsZUxpc3QgfTsKKworI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJG
T1JNQU5DRV9SRVBPUlRJTkcKKyAgICBkb3VibGUgZGZhQnVpbGRUaW1lRW5kID0gbW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgZGF0YUxvZ0YoIiAgICBUaW1lIHNwZW50IGJ1aWxk
aW5nIHRoZSBERkE6ICVmXG4iLCAoZGZhQnVpbGRUaW1lRW5kIC0gZGZhQnVpbGRUaW1lU3RhcnQp
KTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IG5ldmVyIGFkZCBhIERGQSB0aGF0IG9ubHkgbWF0
Y2hlcyB0aGUgZW1wdHkgc2V0LgorCisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJ
TkVfREVCVUdHSU5HCisgICAgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmRmYS5kZWJ1Z1ByaW50
RG90KCk7CisjZW5kaWYKKwogICAgIG1fcnVsZUxpc3RzLnNldChpZGVudGlmaWVyLCBjb21waWxl
ZENvbnRlbnRFeHRlbnNpb24pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oIGIvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNEZWJ1Z2dpbmcuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xODg2Y2MyMWZiZGFkOGFkYzNjMTA2NGU1YzMyNTE1N2JlZmQ5YjRlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bnNEZWJ1Z2dpbmcuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZ19oCisjZGVmaW5lIENvbnRlbnRFeHRlbnNpb25z
RGVidWdnaW5nX2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNkZWZpbmUg
Q09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HIDAKKworI2RlZmluZSBD
T05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HIDAKKworI2VuZGlmIC8vIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNlbmRpZiAvLyBDb250ZW50RXh0ZW5zaW9uc0Rl
YnVnZ2luZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uc01hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmNwcAppbmRleCAxNTUzMWM4MTRkYmQyY2U5
ZTcwNTA5M2M2YmM3ZDE5ODI4MTI1NjY0Li40ZTRjODNhYzBhMjk0OTA5NWM1NTRlMzdlN2JjYjhl
YjQyMTE5NDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uc01hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHAKQEAgLTMwLDEyICszMCwxNCBA
QAogCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKICNpbmNsdWRlICJDb250ZW50
RXh0ZW5zaW9uc0JhY2tlbmQuaCIKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2lu
Zy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lkZW50aWZpZXJJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
T05PYmplY3QuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKQEAgLTE1NCw2ICsxNTYsOSBAQCBzdGF0aWMgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25S
dWxlPiBsb2FkRW5jb2RlZFJ1bGVzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgU3RyaQogCiB2b2lk
IGxvYWRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHJ1
bGVzKQogeworI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKKyAg
ICBkb3VibGUgbG9hZEV4dGVuc2lvblN0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOworI2VuZGlmCiAgICAgUmVmUHRyPFZNPiB2bSA9IFZNOjpjcmVhdGUoKTsKIAogICAg
IEpTTG9ja0hvbGRlciBsb2NrZXIodm0uZ2V0KCkpOwpAQCAtMTY5LDYgKzE3NCwxMSBAQCB2b2lk
IGxvYWRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHJ1
bGVzKQogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BF
UkZPUk1BTkNFX1JFUE9SVElORworICAgIGRvdWJsZSBsb2FkRXh0ZW5zaW9uRW5kVGltZSA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIGRhdGFMb2dGKCJUaW1lIHNwZW50IGxv
YWRpbmcgZXh0ZW5zaW9uICVzOiAlZlxuIiwgaWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCAobG9h
ZEV4dGVuc2lvbkVuZFRpbWUgLSBsb2FkRXh0ZW5zaW9uU3RhcnRUaW1lKSk7CisjZW5kaWYKKwog
ICAgIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2hhcmVkSW5zdGFuY2UoKS5zZXRSdWxlTGlz
dChpZGVudGlmaWVyLCBydWxlTGlzdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkEuY3BwCmluZGV4IDI5MDBjNjk4NmY4N2JhOWYwZDliYzIyMjY1Y2Y1MmNlZDMxMTM5
MTUuLjcwZmI5OGEwNGZiZmFlMjc1NDM5YmJmZjUzMmZjMjQ0ZWJlNmExNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcApAQCAtNzksNyArNzksNyBAQCBjb25zdCBW
ZWN0b3I8dWludDY0X3Q+JiBERkE6OmFjdGlvbnModW5zaWduZWQgY3VycmVudFN0YXRlKSBjb25z
dAogICAgIHJldHVybiBtX25vZGVzW2N1cnJlbnRTdGF0ZV0uYWN0aW9uczsKIH0KIAotI2lmbmRl
ZiBOREVCVUcKKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcK
IHN0YXRpYyB2b2lkIHByaW50UmFuZ2UoYm9vbCBmaXJzdFJhbmdlLCBjaGFyIHJhbmdlU3RhcnQs
IGNoYXIgcmFuZ2VFbmQpCiB7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkEuaAppbmRleCA5YzcxY2Q4YTA0YjkwNTQxN2MwMDEyN2QxY2E1Zjgy
OGJkNWZkOTFmLi5jYzgwZDg2NjI1YmUxZTU2ZmY5MWVjZWJmNGQzNGY2YzU3ODAzZWMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuaApAQCAtMjgsNiArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNp
b25zRGVidWdnaW5nLmgiCiAjaW5jbHVkZSAiREZBTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtNTAsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbmV4dFN0YXRl
KHVuc2lnbmVkIGN1cnJlbnRTdGF0ZSwgY2hhciBjaGFyYWN0ZXIsIGJvb2wmIG9rKSBjb25zdDsK
ICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBhY3Rpb25zKHVuc2lnbmVkIGN1cnJlbnRTdGF0
ZSkgY29uc3Q7CiAKLSNpZm5kZWYgTkRFQlVHCisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRF
X01BQ0hJTkVfREVCVUdHSU5HCiAgICAgdm9pZCBkZWJ1Z1ByaW50RG90KCkgY29uc3Q7CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBTm9k
ZS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBTm9kZS5oCmluZGV4IDQy
MjAzMDA2NzM2ZjJmOGFiOWZiOTlmMWQzYWQzNGRmN2M2YjYyNzcuLjQ2YjUxODM1NTNjMTk4MjYw
YTE2NmZiY2NhMWRlNjU4MzU4YWU1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFOb2RlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiAKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00Miw3
ICs0Myw3IEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPHVpbnQxNl90LCB1bnNpZ25lZD4gdHJhbnNp
dGlvbnM7CiAgICAgVmVjdG9yPHVpbnQ2NF90PiBhY3Rpb25zOwogCi0jaWZuZGVmIE5ERUJVRwor
I2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwogICAgIFZlY3Rv
cjx1bnNpZ25lZD4gY29ycmVzcG9uZGluZ0RGQU5vZGVzOwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5jcHAKaW5kZXggNzI4ODc5ZDA2NTExMWJjM2RlM2Zk
N2M3NTE0MzljN2M5MmFmMmFlNC4uM2VkNjE5YWVlY2JjMmI1MDdiZDlmODBmY2IwMzMxOGM2ODM0
Y2E0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuY3BwCkBAIC04NSw3
ICs4NSw3IEBAIHZvaWQgTkZBOjpyZXN0b3JlVG9HcmFwaFNpemUodW5zaWduZWQgc2l6ZSkKICAg
ICBtX25vZGVzLnNocmluayhzaXplKTsKIH0KIAotI2lmbmRlZiBOREVCVUcKKyNpZiBDT05URU5U
X0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKIAogc3RhdGljIHZvaWQgcHJpbnRS
YW5nZShib29sIGZpcnN0UmFuZ2UsIHVpbnQxNl90IHJhbmdlU3RhcnQsIHVpbnQxNl90IHJhbmdl
RW5kLCB1aW50MTZfdCBlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3RlcikKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5oIGIvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvTkZBLmgKaW5kZXggMTA5YTY5OTkwMGIzOGM4MmNmMjM4NDEzYTU1
ZDg4MTgzMzczNGI3Zi4uYThiYWZmNmRlNzVjZGEzNzM4NDQ2NzdlODVhZmM0OTAwMTE1YTE1MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmgKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRlICJDb250ZW50RXh0
ZW5zaW9uc0RlYnVnZ2luZy5oIgogI2luY2x1ZGUgIk5GQU5vZGUuaCIKICNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTMsNyArNTQsNyBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgZ3JhcGhTaXplKCkgY29uc3Q7CiAgICAgdm9pZCByZXN0b3JlVG9HcmFwaFNp
emUodW5zaWduZWQpOwogCi0jaWZuZGVmIE5ERUJVRworI2lmIENPTlRFTlRfRVhURU5TSU9OU19T
VEFURV9NQUNISU5FX0RFQlVHR0lORwogICAgIHZvaWQgZGVidWdQcmludERvdCgpIGNvbnN0Owog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05G
QVRvREZBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNw
cAppbmRleCBiM2YzMTU4ODgwMmVkNzRmMjFiNGFkNjIxOTQ4MTk0ZTY2ZGNiZTVjLi44OTE3NzQx
MGZjNmQ0MjIxZGVmZmZkM2RlYTBmYTFmYzZmOWQwYWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwCkBAIC0yOCw4ICsyOCwxMCBAQAogCiAjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25z
RGVidWdnaW5nLmgiCiAjaW5jbHVkZSAiREZBTm9kZS5oIgogI2luY2x1ZGUgIk5GQS5oIgorI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogCkBAIC0zNywyMDggKzM5LDI5NSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKKy8vIEZJWE1FOiBzZXQgYSBi
ZXR0ZXIgaW5pdGlhbCBzaXplLgorLy8gRklYTUU6IGluY2x1ZGUgdGhlIGhhc2ggaW5zaWRlIE5v
ZGVJZFNldC4KIHR5cGVkZWYgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+
OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gTm9k
ZUlkU2V0OwogCi1zdGF0aWMgTm9kZUlkU2V0IGVwc2lsb25DbG9zdXJlKGNvbnN0IE5vZGVJZFNl
dCYgbm9kZVNldCwgY29uc3QgVmVjdG9yPE5GQU5vZGU+JiBncmFwaCwgdW5zaWduZWQgZXBzaWxv
blRyYW5zaXRpb25DaGFyYWN0ZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgZXBzaWxvbkNsb3N1cmUo
Tm9kZUlkU2V0JiBub2RlU2V0LCBjb25zdCBWZWN0b3I8TkZBTm9kZT4mIGdyYXBoLCB1bnNpZ25l
ZCBlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3RlcikKIHsKICAgICBBU1NFUlQoIW5vZGVTZXQuaXNF
bXB0eSgpKTsKICAgICBBU1NFUlQoIWdyYXBoLmlzRW1wdHkoKSk7CiAKLSAgICAvLyBXZSBnbyBi
cmVhZHRoLWZpcnN0IGZpcnN0IGludG8gb3VyIGdyYXBoIGZvbGxvd2luZyBhbGwgdGhlIGVwc2ls
b24gdHJhbnNpdGlvbi4gQXQgZWFjaCBnZW5lcmF0aW9uLAotICAgIC8vIGRpc2NvdmVyZWROb2Rl
cyBjb250YWlucyBhbGwgdGhlIG5ldyBub2RlcyB3ZSBoYXZlIGRpc2NvdmVyZWQgYnkgZm9sbG93
aW5nIGEgc2luZ2xlIGVwc2lsb24gdHJhbnNpdGlvbgotICAgIC8vIG91dCBvZiB0aGUgcHJldmlv
dXMgc2V0IG9mIG5vZGVzLgotICAgIE5vZGVJZFNldCBvdXRwdXROb2RlU2V0ID0gbm9kZVNldDsK
LSAgICBOb2RlSWRTZXQgZGlzY292ZXJlZE5vZGVzID0gbm9kZVNldDsKKyAgICAvLyBGSVhNRTog
ZmluZSBhIGdvb2QgaW5saW5lIHNpemUgZm9yIHVucHJvY2Vzc2VkTm9kZXMuCisgICAgVmVjdG9y
PHVuc2lnbmVkPiB1bnByb2Nlc3NlZE5vZGVzOworICAgIGNvcHlUb1ZlY3Rvcihub2RlU2V0LCB1
bnByb2Nlc3NlZE5vZGVzKTsKKwogICAgIGRvIHsKLSAgICAgICAgb3V0cHV0Tm9kZVNldC5hZGQo
ZGlzY292ZXJlZE5vZGVzLmJlZ2luKCksIGRpc2NvdmVyZWROb2Rlcy5lbmQoKSk7Ci0KLSAgICAg
ICAgTm9kZUlkU2V0IG5leHRHZW5lcmF0aW9uRGlzY292ZXJlZE5vZGVzOwotCi0gICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUlkIDogZGlzY292ZXJlZE5vZGVzKSB7Ci0gICAgICAgICAgICBjb25z
dCBORkFOb2RlJiBub2RlID0gZ3JhcGhbbm9kZUlkXTsKLSAgICAgICAgICAgIGF1dG8gZXBzaWxv
blRyYW5zaXRpb25TbG90ID0gbm9kZS50cmFuc2l0aW9ucy5maW5kKGVwc2lsb25UcmFuc2l0aW9u
Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIGlmIChlcHNpbG9uVHJhbnNpdGlvblNsb3QgIT0gbm9k
ZS50cmFuc2l0aW9ucy5lbmQoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IEhhc2hTZXQ8dW5z
aWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+JiB0YXJnZXRzID0gZXBzaWxvblRyYW5zaXRpb25TbG90
LT52YWx1ZTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRhcmdldE5vZGVJZCA6IHRh
cmdldHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFvdXRwdXROb2RlU2V0LmNvbnRhaW5z
KHRhcmdldE5vZGVJZCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0R2VuZXJhdGlvbkRp
c2NvdmVyZWROb2Rlcy5hZGQodGFyZ2V0Tm9kZUlkKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgIHVuc2lnbmVkIHVucHJvY2Vzc2VkTm9kZUlkID0gdW5wcm9jZXNzZWROb2Rlcy50YWtlTGFz
dCgpOworICAgICAgICBjb25zdCBORkFOb2RlJiBub2RlID0gZ3JhcGhbdW5wcm9jZXNzZWROb2Rl
SWRdOworICAgICAgICBhdXRvIGVwc2lsb25UcmFuc2l0aW9uU2xvdCA9IG5vZGUudHJhbnNpdGlv
bnMuZmluZChlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3Rlcik7CisgICAgICAgIGlmIChlcHNpbG9u
VHJhbnNpdGlvblNsb3QgIT0gbm9kZS50cmFuc2l0aW9ucy5lbmQoKSkgeworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCB0YXJnZXROb2RlSWQgOiBlcHNpbG9uVHJhbnNpdGlvblNsb3QtPnZhbHVl
KSB7CisgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBub2RlU2V0LmFkZCh0YXJnZXRO
b2RlSWQpOworICAgICAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAg
ICAgICAgICAgICAgICAgdW5wcm9jZXNzZWROb2Rlcy5hcHBlbmQodGFyZ2V0Tm9kZUlkKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIGRpc2NvdmVyZWROb2RlcyA9IG5leHRH
ZW5lcmF0aW9uRGlzY292ZXJlZE5vZGVzOwotICAgIH0gd2hpbGUgKCFkaXNjb3ZlcmVkTm9kZXMu
aXNFbXB0eSgpKTsKLQotICAgIEFTU0VSVCghb3V0cHV0Tm9kZVNldC5pc0VtcHR5KCkpOwotICAg
IHJldHVybiBvdXRwdXROb2RlU2V0OworICAgIH0gd2hpbGUgKCF1bnByb2Nlc3NlZE5vZGVzLmlz
RW1wdHkoKSk7CiB9CiAKLXR5cGVkZWYgSGFzaE1hcDx1aW50MTZfdCwgTm9kZUlkU2V0LCBEZWZh
dWx0SGFzaDx1aW50MTZfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8dWludDE2X3Q+PiBTZXRUcmFuc2l0aW9uc0V4Y2x1ZGluZ0Vwc2lsb247Ci0KLXN0YXRpYyBT
ZXRUcmFuc2l0aW9uc0V4Y2x1ZGluZ0Vwc2lsb24gc2V0VHJhbnNpdGlvbnNFeGNsdWRpbmdFcHNp
bG9uKGNvbnN0IE5vZGVJZFNldCYgbm9kZVNldCwgY29uc3QgVmVjdG9yPE5GQU5vZGU+JiBncmFw
aCwgdW5zaWduZWQgZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpCi17Ci0gICAgQVNTRVJUKCFu
b2RlU2V0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFncmFwaC5pc0VtcHR5KCkpOwotCi0gICAg
U2V0VHJhbnNpdGlvbnNFeGNsdWRpbmdFcHNpbG9uIG91dHB1dFNldFRyYW5zaXRpb25zRXhjbHVk
aW5nRXBzaWxvbjsKK3N0cnVjdCBVbmlxdWVOb2RlSWRTZXRJbXBsIHsKKyAgICB1bnNpZ25lZCog
YnVmZmVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICB9CiAKLSAgICBm
b3IgKHVuc2lnbmVkIG5vZGVJZCA6IG5vZGVTZXQpIHsKLSAgICAgICAgY29uc3QgTkZBTm9kZSYg
bm9kZSA9IGdyYXBoW25vZGVJZF07Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNpdGlv
blNsb3QgOiBub2RlLnRyYW5zaXRpb25zKSB7Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvblNs
b3Qua2V5ICE9IGVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBleGlzdGluZ1RyYW5zaXRpb24gPSBvdXRwdXRTZXRUcmFuc2l0aW9uc0V4Y2x1ZGluZ0Vw
c2lsb24uZmluZCh0cmFuc2l0aW9uU2xvdC5rZXkpOwotICAgICAgICAgICAgICAgIGlmIChleGlz
dGluZ1RyYW5zaXRpb24gIT0gb3V0cHV0U2V0VHJhbnNpdGlvbnNFeGNsdWRpbmdFcHNpbG9uLmVu
ZCgpKQotICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1RyYW5zaXRpb24tPnZhbHVlLmFkZCh0
cmFuc2l0aW9uU2xvdC52YWx1ZS5iZWdpbigpLCB0cmFuc2l0aW9uU2xvdC52YWx1ZS5lbmQoKSk7
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJZFNldCBu
ZXdTZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodHJhbnNpdGlvblNsb3QudmFs
dWUuYmVnaW4oKSwgdHJhbnNpdGlvblNsb3QudmFsdWUuZW5kKCkpOwotICAgICAgICAgICAgICAg
ICAgICBvdXRwdXRTZXRUcmFuc2l0aW9uc0V4Y2x1ZGluZ0Vwc2lsb24uYWRkKHRyYW5zaXRpb25T
bG90LmtleSwgbmV3U2V0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KKyAgICBjb25zdCB1bnNpZ25lZCogYnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2J1ZmZlcjsKICAgICB9CiAKLSAgICByZXR1cm4gb3V0cHV0U2V0VHJhbnNpdGlv
bnNFeGNsdWRpbmdFcHNpbG9uOwotfQorICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICB1bnNpZ25l
ZCBtX2hhc2g7CisgICAgdW5zaWduZWQgbV9kZmFOb2RlSWQ7Citwcml2YXRlOgorICAgIHVuc2ln
bmVkIG1fYnVmZmVyWzFdOworfTsKIAotY2xhc3MgSGFzaGFibGVOb2RlSWRTZXQgeworY2xhc3Mg
VW5pcXVlTm9kZUlkU2V0IHsKIHB1YmxpYzoKKyAgICBVbmlxdWVOb2RlSWRTZXQoKSB7IH0KICAg
ICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CiAgICAgZW51bSBEZWxldGVkVmFs
dWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKIAotICAgIEhhc2hhYmxlTm9kZUlkU2V0KEVtcHR5VmFs
dWVUYWcpIHsgfQotICAgIEhhc2hhYmxlTm9kZUlkU2V0KERlbGV0ZWRWYWx1ZVRhZykKLSAgICAg
ICAgOiBtX2lzRGVsZXRlZCh0cnVlKQorICAgIFVuaXF1ZU5vZGVJZFNldChFbXB0eVZhbHVlVGFn
KSB7IH0KKyAgICBVbmlxdWVOb2RlSWRTZXQoRGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1f
dW5pcXVlTm9kZUlkU2V0QnVmZmVyKHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFVuaXF1ZU5vZGVJZFNl
dEltcGwqPigtMSkpCiAgICAgewogICAgIH0KIAotICAgIEhhc2hhYmxlTm9kZUlkU2V0KGNvbnN0
IE5vZGVJZFNldCYgbm9kZUlkU2V0KQotICAgICAgICA6IG1fbm9kZUlkU2V0KG5vZGVJZFNldCkK
KyAgICBVbmlxdWVOb2RlSWRTZXQoY29uc3QgTm9kZUlkU2V0JiBub2RlSWRTZXQsIHVuc2lnbmVk
IGhhc2gsIHVuc2lnbmVkIGRmYU5vZGVJZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghbm9kZUlk
U2V0LmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChub2RlSWRTZXQuc2l6ZSgpKTsKKworICAg
ICAgICB1bnNpZ25lZCBzaXplID0gbm9kZUlkU2V0LnNpemUoKTsKKyAgICAgICAgc2l6ZV90IGJ5
dGVTaXplID0gc2l6ZW9mKFVuaXF1ZU5vZGVJZFNldEltcGwpICsgKHNpemUgLSAxKSAqIHNpemVv
Zih1bnNpZ25lZCk7CisgICAgICAgIG1fdW5pcXVlTm9kZUlkU2V0QnVmZmVyID0gc3RhdGljX2Nh
c3Q8VW5pcXVlTm9kZUlkU2V0SW1wbCo+KGZhc3RNYWxsb2MoYnl0ZVNpemUpKTsKKworICAgICAg
ICBtX3VuaXF1ZU5vZGVJZFNldEJ1ZmZlci0+bV9zaXplID0gc2l6ZTsKKyAgICAgICAgbV91bmlx
dWVOb2RlSWRTZXRCdWZmZXItPm1faGFzaCA9IGhhc2g7CisgICAgICAgIG1fdW5pcXVlTm9kZUlk
U2V0QnVmZmVyLT5tX2RmYU5vZGVJZCA9IGRmYU5vZGVJZDsKKworICAgICAgICB1bnNpZ25lZCog
YnVmZmVyID0gbV91bmlxdWVOb2RlSWRTZXRCdWZmZXItPmJ1ZmZlcigpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJZCA6IG5vZGVJZFNldCkgeworICAgICAgICAgICAgKmJ1ZmZlciA9IG5v
ZGVJZDsKKyAgICAgICAgICAgICsrYnVmZmVyOworICAgICAgICB9CiAgICAgfQogCi0gICAgSGFz
aGFibGVOb2RlSWRTZXQoSGFzaGFibGVOb2RlSWRTZXQmJiBvdGhlcikKLSAgICAgICAgOiBtX25v
ZGVJZFNldChvdGhlci5tX25vZGVJZFNldCkKLSAgICAgICAgLCBtX2lzRGVsZXRlZChvdGhlci5t
X2lzRGVsZXRlZCkKKyAgICBVbmlxdWVOb2RlSWRTZXQoVW5pcXVlTm9kZUlkU2V0JiYgb3RoZXIp
CisgICAgICAgIDogbV91bmlxdWVOb2RlSWRTZXRCdWZmZXIob3RoZXIubV91bmlxdWVOb2RlSWRT
ZXRCdWZmZXIpCiAgICAgewotICAgICAgICBvdGhlci5tX25vZGVJZFNldC5jbGVhcigpOwotICAg
ICAgICBvdGhlci5tX2lzRGVsZXRlZCA9IGZhbHNlOworICAgICAgICBvdGhlci5tX3VuaXF1ZU5v
ZGVJZFNldEJ1ZmZlciA9IG51bGxwdHI7CiAgICAgfQogCi0gICAgSGFzaGFibGVOb2RlSWRTZXQm
IG9wZXJhdG9yPShIYXNoYWJsZU5vZGVJZFNldCYmIG90aGVyKQorICAgIFVuaXF1ZU5vZGVJZFNl
dCYgb3BlcmF0b3I9KFVuaXF1ZU5vZGVJZFNldCYmIG90aGVyKQogICAgIHsKLSAgICAgICAgbV9u
b2RlSWRTZXQgPSBvdGhlci5tX25vZGVJZFNldDsKLSAgICAgICAgb3RoZXIubV9ub2RlSWRTZXQu
Y2xlYXIoKTsKLSAgICAgICAgbV9pc0RlbGV0ZWQgPSBvdGhlci5tX2lzRGVsZXRlZDsKLSAgICAg
ICAgb3RoZXIubV9pc0RlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgbV91bmlxdWVOb2RlSWRTZXRC
dWZmZXIgPSBvdGhlci5tX3VuaXF1ZU5vZGVJZFNldEJ1ZmZlcjsKKyAgICAgICAgb3RoZXIubV91
bmlxdWVOb2RlSWRTZXRCdWZmZXIgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgfQogCi0gICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25vZGVJZFNl
dC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9pc0RlbGV0ZWQ7IH0KKyAgICB+VW5pcXVlTm9kZUlkU2V0KCkKKyAgICB7CisgICAgICAgIGZh
c3RGcmVlKG1fdW5pcXVlTm9kZUlkU2V0QnVmZmVyKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVW5pcXVlTm9kZUlkU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3VuaXF1ZU5vZGVJZFNldEJ1ZmZlciA9PSBvdGhlci5tX3VuaXF1ZU5vZGVJZFNl
dEJ1ZmZlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTm9kZUlkU2V0JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3VuaXF1ZU5vZGVJZFNldEJ1ZmZlci0+
bV9zaXplICE9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvdGhlci5zaXplKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNpZ25lZCogYnVmZmVyID0gbV91bmlxdWVOb2Rl
SWRTZXRCdWZmZXItPmJ1ZmZlcigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV91bmlxdWVOb2RlSWRTZXRCdWZmZXItPm1fc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
IW90aGVyLmNvbnRhaW5zKGJ1ZmZlcltpXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFVuaXF1ZU5v
ZGVJZFNldEltcGwqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX3VuaXF1ZU5vZGVJZFNldEJ1ZmZl
cjsgfQogCi0gICAgTm9kZUlkU2V0IG5vZGVJZFNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUlk
U2V0OyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcXVlTm9kZUlk
U2V0QnVmZmVyLT5tX2hhc2g7IH0KKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuICFtX3VuaXF1ZU5vZGVJZFNldEJ1ZmZlcjsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3VuaXF1ZU5vZGVJZFNldEJ1ZmZlciA9PSByZWludGVycHJldF9j
YXN0X3B0cjxVbmlxdWVOb2RlSWRTZXRJbXBsKj4oLTEpOyB9CiAKIHByaXZhdGU6Ci0gICAgTm9k
ZUlkU2V0IG1fbm9kZUlkU2V0OwotICAgIGJvb2wgbV9pc0RlbGV0ZWQgPSBmYWxzZTsKKyAgICBV
bmlxdWVOb2RlSWRTZXRJbXBsKiBtX3VuaXF1ZU5vZGVJZFNldEJ1ZmZlciA9IG51bGxwdHI7CiB9
OwogCi1zdHJ1Y3QgSGFzaGFibGVOb2RlSWRTZXRIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBIYXNoYWJsZU5vZGVJZFNldCYgcCkKK3N0cnVjdCBVbmlxdWVOb2RlSWRTZXRI
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBVbmlxdWVOb2RlSWRTZXQmIHAp
CiAgICAgewotICAgICAgICB1bnNpZ25lZCBoYXNoID0gNDIwNzQ0NTE1NTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSWQgOiBwLm5vZGVJZFNldCgpKQotICAgICAgICAgICAgaGFzaCArPSBE
ZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2g6Omhhc2gobm9kZUlkKTsKLSAgICAgICAgcmV0dXJu
IGhhc2g7CisgICAgICAgIHJldHVybiBwLmhhc2goKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBIYXNoYWJsZU5vZGVJZFNldCYgYSwgY29uc3QgSGFzaGFibGVOb2RlSWRT
ZXQmIGIpCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVW5pcXVlTm9kZUlkU2V0JiBhLCBj
b25zdCBVbmlxdWVOb2RlSWRTZXQmIGIpCiAgICAgewotICAgICAgICByZXR1cm4gYS5ub2RlSWRT
ZXQoKSA9PSBiLm5vZGVJZFNldCgpICYmIGEuaXNEZWxldGVkVmFsdWUoKSA9PSBiLmlzRGVsZXRl
ZFZhbHVlKCk7CisgICAgICAgIHJldHVybiBhID09IGI7CiAgICAgfQotICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKKyAgICAvLyBJdCB3
b3VsZCBiZSBmaW5lIHRvIGNvbXBhcmUgZW1wdHkgb3IgZGVsZXRlZCBoZXJlLCBidXQgbm90IGZv
ciB0aGUgSGFzaFRyYW5zbGF0b3IuCisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFy
ZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKIH07CiAKLXN0cnVjdCBIYXNoYWJsZU5vZGVJZFNl
dEhhc2hUcmFpdHMgOiBwdWJsaWMgV1RGOjpDdXN0b21IYXNoVHJhaXRzPEhhc2hhYmxlTm9kZUlk
U2V0PiB7IH07CitzdHJ1Y3QgVW5pcXVlTm9kZUlkU2V0SGFzaEhhc2hUcmFpdHMgOiBwdWJsaWMg
V1RGOjpDdXN0b21IYXNoVHJhaXRzPFVuaXF1ZU5vZGVJZFNldD4geworICAgIHN0YXRpYyBjb25z
dCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwogCi10eXBlZGVmIEhhc2hNYXA8SGFzaGFi
bGVOb2RlSWRTZXQsIHVuc2lnbmVkLCBIYXNoYWJsZU5vZGVJZFNldEhhc2gsIEhhc2hhYmxlTm9k
ZUlkU2V0SGFzaFRyYWl0cz4gTkZBVG9ERkFOb2RlTWFwOworICAgIC8vIEZJWE1FOiBHZXQgYSBn
b29kIHNpemUuCisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gMTI4Owor
fTsKIAotc3RhdGljIHVuc2lnbmVkIGFkZERGQVN0YXRlKFZlY3RvcjxERkFOb2RlPiYgZGZhR3Jh
cGgsIE5GQVRvREZBTm9kZU1hcCYgbmZhVG9ERkFOb2RlTWFwLCBjb25zdCBWZWN0b3I8TkZBTm9k
ZT4mIG5mYUdyYXBoLCBOb2RlSWRTZXQgbmZhTm9kZXMsIHVuc2lnbmVkIGVwc2lsb25UcmFuc2l0
aW9uQ2hhcmFjdGVyKQotewotICAgIEFTU0VSVCghbmZhVG9ERkFOb2RlTWFwLmNvbnRhaW5zKG5m
YU5vZGVzKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChlcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3Rlciwg
ZXBzaWxvbkNsb3N1cmUobmZhTm9kZXMsIG5mYUdyYXBoLCBlcHNpbG9uVHJhbnNpdGlvbkNoYXJh
Y3RlcikgPT0gIG5mYU5vZGVzKTsKLQotICAgIERGQU5vZGUgbmV3REZBTm9kZTsKLQotICAgIEhh
c2hTZXQ8dWludDY0X3QsIERlZmF1bHRIYXNoPHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4+IGFjdGlvbnM7Ci0gICAgZm9yICh1bnNp
Z25lZCBuZmFOb2RlSWQgOiBuZmFOb2RlcykgewotICAgICAgICBjb25zdCBORkFOb2RlJiBuZmFO
b2RlID0gbmZhR3JhcGhbbmZhTm9kZUlkXTsKLSAgICAgICAgaWYgKG5mYU5vZGUuaXNGaW5hbCkK
LSAgICAgICAgICAgIGFjdGlvbnMuYWRkKG5mYU5vZGUucnVsZUlkKTsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgIG5ld0RGQU5vZGUuY29ycmVzcG9uZGluZ0RGQU5vZGVzLmFwcGVuZChuZmFOb2Rl
SWQpOwordHlwZWRlZiBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxVbmlxdWVOb2RlSWRTZXQ+LCBV
bmlxdWVOb2RlSWRTZXRIYXNoLCBVbmlxdWVOb2RlSWRTZXRIYXNoSGFzaFRyYWl0cz4gVW5pcXVl
Tm9kZUlkU2V0VGFibGU7CisKK3N0cnVjdCBOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJj
ZSB7CisgICAgTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2UoVmVjdG9yPERGQU5vZGU+
JiBkZmFHcmFwaCwgY29uc3QgVmVjdG9yPE5GQU5vZGU+JiBuZmFHcmFwaCwgY29uc3QgTm9kZUlk
U2V0JiBub2RlSWRTZXQpCisgICAgICAgIDogZGZhR3JhcGgoZGZhR3JhcGgpCisgICAgICAgICwg
bmZhR3JhcGgobmZhR3JhcGgpCisgICAgICAgICwgbm9kZUlkU2V0KG5vZGVJZFNldCkKKyAgICB7
CisgICAgICAgIC8vIFRoZSBoYXNoaW5nIG9wZXJhdGlvbiBtdXN0IGJlIGluZGVwZW5kYW50IG9m
IHRoZSBub2RlSWQuCisgICAgICAgIHVuc2lnbmVkIGhhc2ggPSA0MjA3NDQ1MTU1OworICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5vZGVJZCA6IG5vZGVJZFNldCkKKyAgICAgICAgICAgIGhhc2ggKz0g
bm9kZUlkOworICAgICAgICB0aGlzLT5oYXNoID0gRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNo
OjpoYXNoKGhhc2gpOworICAgIH0KKyAgICBWZWN0b3I8REZBTm9kZT4mIGRmYUdyYXBoOworICAg
IGNvbnN0IFZlY3RvcjxORkFOb2RlPiYgbmZhR3JhcGg7CisgICAgY29uc3QgTm9kZUlkU2V0JiBu
b2RlSWRTZXQ7CisgICAgdW5zaWduZWQgaGFzaDsKK307CisKK3N0cnVjdCBOb2RlSWRTZXRUb1Vu
aXF1ZU5vZGVJZFNldFRyYW5zbGF0b3IgeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IE5vZGVJZFNldFRvVW5pcXVlTm9kZUlkU2V0U291cmNlJiBzb3VyY2UpCisgICAgeworICAgICAg
ICByZXR1cm4gc291cmNlLmhhc2g7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBib29sIGVx
dWFsKGNvbnN0IFVuaXF1ZU5vZGVJZFNldCYgYSwgY29uc3QgTm9kZUlkU2V0VG9VbmlxdWVOb2Rl
SWRTZXRTb3VyY2UmIGIpCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBiLm5vZGVJZFNldDsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVW5pcXVlTm9kZUlkU2V0JiBsb2Nh
dGlvbiwgY29uc3QgTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3VyY2UmIHNvdXJjZSwgdW5z
aWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIERGQU5vZGUgbmV3REZBTm9kZTsKKworICAgICAg
ICBIYXNoU2V0PHVpbnQ2NF90LCBEZWZhdWx0SGFzaDx1aW50NjRfdD46Okhhc2gsIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+PiBhY3Rpb25zOworICAgICAgICBm
b3IgKHVuc2lnbmVkIG5mYU5vZGVJZCA6IHNvdXJjZS5ub2RlSWRTZXQpIHsKKyAgICAgICAgICAg
IGNvbnN0IE5GQU5vZGUmIG5mYU5vZGUgPSBzb3VyY2UubmZhR3JhcGhbbmZhTm9kZUlkXTsKKyAg
ICAgICAgICAgIGlmIChuZmFOb2RlLmlzRmluYWwpCisgICAgICAgICAgICAgICAgYWN0aW9ucy5h
ZGQobmZhTm9kZS5ydWxlSWQpOworI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5F
X0RFQlVHR0lORworICAgICAgICAgICAgbmV3REZBTm9kZS5jb3JyZXNwb25kaW5nREZBTm9kZXMu
YXBwZW5kKG5mYU5vZGVJZCk7CiAjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBjb3B5VG9WZWN0
b3IoYWN0aW9ucywgbmV3REZBTm9kZS5hY3Rpb25zKTsKKworICAgICAgICB1bnNpZ25lZCBkZmFO
b2RlSWQgPSBzb3VyY2UuZGZhR3JhcGguc2l6ZSgpOworICAgICAgICBzb3VyY2UuZGZhR3JhcGgu
YXBwZW5kKG5ld0RGQU5vZGUpOworICAgICAgICBuZXcgKE5vdE51bGwsICZsb2NhdGlvbikgVW5p
cXVlTm9kZUlkU2V0KHNvdXJjZS5ub2RlSWRTZXQsIGhhc2gsIGRmYU5vZGVJZCk7CisKKyAgICAg
ICAgQVNTRVJUKGxvY2F0aW9uLmltcGwoKSk7CiAgICAgfQorfTsKIAotICAgIGZvciAodWludDY0
X3QgYWN0aW9uIDogYWN0aW9ucykKLSAgICAgICAgbmV3REZBTm9kZS5hY3Rpb25zLmFwcGVuZChh
Y3Rpb24pOworY2xhc3MgU2V0VHJhbnNpdGlvbnNFeGNsdWRpbmdFcHNpbG9uIHsKK3B1YmxpYzoK
KyAgICBOb2RlSWRTZXQmIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQoaW5kZXggPCBzaXplKCkpOworICAgICAgICByZXR1cm4gbV90YXJnZXRzW2luZGV4
XTsKKyAgICB9CiAKLSAgICB1bnNpZ25lZCBkZmFOb2RlSWQgPSBkZmFHcmFwaC5zaXplKCk7Ci0g
ICAgZGZhR3JhcGguYXBwZW5kKG5ld0RGQU5vZGUpOwotICAgIG5mYVRvREZBTm9kZU1hcC5hZGQo
bmZhTm9kZXMsIGRmYU5vZGVJZCk7Ci0gICAgcmV0dXJuIGRmYU5vZGVJZDsKLX0KKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEZfQVJSQVlfTEVOR1RI
KG1fdGFyZ2V0cyk7CisgICAgfQogCi10eXBlZGVmIEhhc2hTZXQ8SGFzaGFibGVOb2RlSWRTZXQs
IEhhc2hhYmxlTm9kZUlkU2V0SGFzaCwgSGFzaGFibGVOb2RlSWRTZXRIYXNoVHJhaXRzPiBTZXRP
Zk5vZGVTZXQ7CisgICAgTm9kZUlkU2V0KiBiZWdpbigpCisgICAgeworICAgICAgICByZXR1cm4g
bV90YXJnZXRzOworICAgIH0KKworICAgIE5vZGVJZFNldCogZW5kKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3RhcmdldHMgKyBzaXplKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIE5vZGVJ
ZFNldCBtX3RhcmdldHNbMTI4XTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3B1bGF0ZVRy
YW5zaXRpb25zRXhjbHVkaW5nRXBzaWxvbihTZXRUcmFuc2l0aW9uc0V4Y2x1ZGluZ0Vwc2lsb24m
IHNldFRyYW5zaXRpb25zRXhjbHVkaW5nRXBzaWxvbiwgY29uc3QgVW5pcXVlTm9kZUlkU2V0SW1w
bCYgc291cmNlTm9kZVNldCwgY29uc3QgVmVjdG9yPE5GQU5vZGU+JiBncmFwaCwgdW5zaWduZWQg
ZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpCit7CisgICAgQVNTRVJUKCFncmFwaC5pc0VtcHR5
KCkpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBmb3IgKGNvbnN0IE5vZGVJZFNldCYgc2V0
IDogc2V0VHJhbnNpdGlvbnNFeGNsdWRpbmdFcHNpbG9uKQorICAgICAgICBBU1NFUlQoc2V0Lmlz
RW1wdHkoKSk7CisjZW5kaWYKKworICAgIGNvbnN0IHVuc2lnbmVkKiBidWZmZXIgPSBzb3VyY2VO
b2RlU2V0LmJ1ZmZlcigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VOb2Rl
U2V0Lm1fc2l6ZTsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIG5vZGVJZCA9IGJ1ZmZlcltpXTsK
KyAgICAgICAgY29uc3QgTkZBTm9kZSYgbm9kZSA9IGdyYXBoW25vZGVJZF07CisgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgdHJhbnNpdGlvblNsb3QgOiBub2RlLnRyYW5zaXRpb25zKSB7CisgICAg
ICAgICAgICBpZiAodHJhbnNpdGlvblNsb3Qua2V5ICE9IGVwc2lsb25UcmFuc2l0aW9uQ2hhcmFj
dGVyKQorICAgICAgICAgICAgICAgIHNldFRyYW5zaXRpb25zRXhjbHVkaW5nRXBzaWxvblt0cmFu
c2l0aW9uU2xvdC5rZXldLmFkZCh0cmFuc2l0aW9uU2xvdC52YWx1ZS5iZWdpbigpLCB0cmFuc2l0
aW9uU2xvdC52YWx1ZS5lbmQoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CiAKIERGQSBORkFUb0RG
QTo6Y29udmVydChjb25zdCBORkEmIG5mYSkKIHsKICAgICBWZWN0b3I8REZBTm9kZT4gZGZhR3Jh
cGg7Ci0gICAgTkZBVG9ERkFOb2RlTWFwIG5mYVRvREZBTm9kZU1hcDsKLQotICAgIFNldE9mTm9k
ZVNldCBwcm9jZXNzZWRTdGF0ZVNldHM7Ci0gICAgU2V0T2ZOb2RlU2V0IHVucHJvY2Vzc2VkU3Rh
dGVTZXRzOwogCiAgICAgY29uc3QgVmVjdG9yPE5GQU5vZGU+JiBuZmFHcmFwaCA9IG5mYS5tX25v
ZGVzOwogCiAgICAgTm9kZUlkU2V0IGluaXRpYWxTZXQoeyBuZmEucm9vdCgpIH0pOwotICAgIE5v
ZGVJZFNldCBjbG9zZWRJbml0aWFsU2V0ID0gZXBzaWxvbkNsb3N1cmUoaW5pdGlhbFNldCwgbmZh
R3JhcGgsIE5GQTo6ZXBzaWxvblRyYW5zaXRpb25DaGFyYWN0ZXIpOworICAgIGVwc2lsb25DbG9z
dXJlKGluaXRpYWxTZXQsIG5mYUdyYXBoLCBORkE6OmVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVy
KTsKIAotICAgIGFkZERGQVN0YXRlKGRmYUdyYXBoLCBuZmFUb0RGQU5vZGVNYXAsIG5mYUdyYXBo
LCBjbG9zZWRJbml0aWFsU2V0LCBORkE6OmVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyKTsKLSAg
ICB1bnByb2Nlc3NlZFN0YXRlU2V0cy5hZGQoY2xvc2VkSW5pdGlhbFNldCk7CisgICAgVW5pcXVl
Tm9kZUlkU2V0VGFibGUgdW5pcXVlTm9kZUlkU2V0VGFibGU7CisKKyAgICBOb2RlSWRTZXRUb1Vu
aXF1ZU5vZGVJZFNldFNvdXJjZSBpbml0aWFsTm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRTb3Vy
Y2UoZGZhR3JhcGgsIG5mYUdyYXBoLCBpbml0aWFsU2V0KTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9
IHVuaXF1ZU5vZGVJZFNldFRhYmxlLmFkZDxOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFRyYW5z
bGF0b3I+KGluaXRpYWxOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZSk7CisKKyAgICBW
ZWN0b3I8VW5pcXVlTm9kZUlkU2V0SW1wbCo+IHVucHJvY2Vzc2VkTm9kZXM7CisgICAgdW5wcm9j
ZXNzZWROb2Rlcy5hcHBlbmQoYWRkUmVzdWx0Lml0ZXJhdG9yLT5pbXBsKCkpOworCisgICAgU2V0
VHJhbnNpdGlvbnNFeGNsdWRpbmdFcHNpbG9uIHRyYW5zaXRpb25zRnJvbUNsb3NlZFNldDsKIAog
ICAgIGRvIHsKLSAgICAgICAgSGFzaGFibGVOb2RlSWRTZXQgc3RhdGVTZXQgPSB1bnByb2Nlc3Nl
ZFN0YXRlU2V0cy50YWtlQW55KCk7CisgICAgICAgIFVuaXF1ZU5vZGVJZFNldEltcGwqIHVuaXF1
ZU5vZGVJZFNldEltcGwgPSB1bnByb2Nlc3NlZE5vZGVzLnRha2VMYXN0KCk7CiAKLSAgICAgICAg
QVNTRVJUKCFwcm9jZXNzZWRTdGF0ZVNldHMuY29udGFpbnMoc3RhdGVTZXQubm9kZUlkU2V0KCkp
KTsKLSAgICAgICAgcHJvY2Vzc2VkU3RhdGVTZXRzLmFkZChzdGF0ZVNldC5ub2RlSWRTZXQoKSk7
CisgICAgICAgIHVuc2lnbmVkIGRmYU5vZGVJZCA9IHVuaXF1ZU5vZGVJZFNldEltcGwtPm1fZGZh
Tm9kZUlkOworICAgICAgICBwb3B1bGF0ZVRyYW5zaXRpb25zRXhjbHVkaW5nRXBzaWxvbih0cmFu
c2l0aW9uc0Zyb21DbG9zZWRTZXQsICp1bmlxdWVOb2RlSWRTZXRJbXBsLCBuZmFHcmFwaCwgTkZB
OjplcHNpbG9uVHJhbnNpdGlvbkNoYXJhY3Rlcik7CiAKLSAgICAgICAgdW5zaWduZWQgZGZhTm9k
ZUlkID0gbmZhVG9ERkFOb2RlTWFwLmdldChzdGF0ZVNldCk7CisgICAgICAgIC8vIEZJWE1FOiB0
aGVyZSBzaG91bGQgbm90IGJlIGFueSB0cmFuc2l0aW9uIG9uIGtleSAwLgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGtleSA9IDA7IGtleSA8IHRyYW5zaXRpb25zRnJvbUNsb3NlZFNldC5zaXplKCk7
ICsra2V5KSB7CisgICAgICAgICAgICBOb2RlSWRTZXQmIHRhcmdldE5vZGVTZXQgPSB0cmFuc2l0
aW9uc0Zyb21DbG9zZWRTZXRba2V5XTsKIAotICAgICAgICBTZXRUcmFuc2l0aW9uc0V4Y2x1ZGlu
Z0Vwc2lsb24gdHJhbnNpdGlvbnNGcm9tQ2xvc2VkU2V0ID0gc2V0VHJhbnNpdGlvbnNFeGNsdWRp
bmdFcHNpbG9uKHN0YXRlU2V0Lm5vZGVJZFNldCgpLCBuZmFHcmFwaCwgTkZBOjplcHNpbG9uVHJh
bnNpdGlvbkNoYXJhY3Rlcik7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNpdGlvblNs
b3QgOiB0cmFuc2l0aW9uc0Zyb21DbG9zZWRTZXQpIHsKLSAgICAgICAgICAgIE5vZGVJZFNldCBj
bG9zZWRUYXJnZXROb2RlU2V0ID0gZXBzaWxvbkNsb3N1cmUodHJhbnNpdGlvblNsb3QudmFsdWUs
IG5mYUdyYXBoLCBORkE6OmVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIG5ld0RGQU5vZGVJZDsKKyAgICAgICAgICAgIGlmICh0YXJnZXROb2RlU2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgY29uc3Qg
YXV0byYgZXhpc3RpbmdORkFUb0RGQUFzc29jaWF0aW9uID0gbmZhVG9ERkFOb2RlTWFwLmZpbmQo
Y2xvc2VkVGFyZ2V0Tm9kZVNldCk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RpbmdORkFUb0RGQUFz
c29jaWF0aW9uICE9IG5mYVRvREZBTm9kZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAgICBuZXdE
RkFOb2RlSWQgPSBleGlzdGluZ05GQVRvREZBQXNzb2NpYXRpb24tPnZhbHVlOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG5ld0RGQU5vZGVJZCA9IGFkZERGQVN0YXRlKGRmYUdy
YXBoLCBuZmFUb0RGQU5vZGVNYXAsIG5mYUdyYXBoLCBjbG9zZWRUYXJnZXROb2RlU2V0LCBORkE6
OmVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIGVwc2lsb25DbG9zdXJl
KHRhcmdldE5vZGVTZXQsIG5mYUdyYXBoLCBORkE6OmVwc2lsb25UcmFuc2l0aW9uQ2hhcmFjdGVy
KTsKIAotICAgICAgICAgICAgQVNTRVJUKG5ld0RGQU5vZGVJZCA8IGRmYUdyYXBoLnNpemUoKSk7
CisgICAgICAgICAgICBOb2RlSWRTZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZSBub2RlSWRTZXRU
b1VuaXF1ZU5vZGVJZFNldFNvdXJjZShkZmFHcmFwaCwgbmZhR3JhcGgsIHRhcmdldE5vZGVTZXQp
OworICAgICAgICAgICAgYXV0byB1bmlxdWVOb2RlSWRBZGRSZXN1bHQgPSB1bmlxdWVOb2RlSWRT
ZXRUYWJsZS5hZGQ8Tm9kZUlkU2V0VG9VbmlxdWVOb2RlSWRTZXRUcmFuc2xhdG9yPihub2RlSWRT
ZXRUb1VuaXF1ZU5vZGVJZFNldFNvdXJjZSk7CiAKLSAgICAgICAgICAgIGNvbnN0IGF1dG8gYWRk
UmVzdWx0ID0gZGZhR3JhcGhbZGZhTm9kZUlkXS50cmFuc2l0aW9ucy5zZXQodHJhbnNpdGlvblNs
b3Qua2V5LCBuZXdERkFOb2RlSWQpOworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0Tm9kZUlk
ID0gdW5pcXVlTm9kZUlkQWRkUmVzdWx0Lml0ZXJhdG9yLT5pbXBsKCktPm1fZGZhTm9kZUlkOwor
ICAgICAgICAgICAgY29uc3QgYXV0byBhZGRSZXN1bHQgPSBkZmFHcmFwaFtkZmFOb2RlSWRdLnRy
YW5zaXRpb25zLmFkZChrZXksIHRhcmdldE5vZGVJZCk7CiAgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogCi0gICAgICAgICAgICBpZiAo
IXByb2Nlc3NlZFN0YXRlU2V0cy5jb250YWlucyhjbG9zZWRUYXJnZXROb2RlU2V0KSkKLSAgICAg
ICAgICAgICAgICB1bnByb2Nlc3NlZFN0YXRlU2V0cy5hZGQoY2xvc2VkVGFyZ2V0Tm9kZVNldCk7
Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICghdW5wcm9jZXNzZWRTdGF0ZVNldHMuaXNFbXB0eSgp
KTsKKyAgICAgICAgICAgIGlmICh1bmlxdWVOb2RlSWRBZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAg
ICAgICAgICAgICAgICB1bnByb2Nlc3NlZE5vZGVzLmFwcGVuZCh1bmlxdWVOb2RlSWRBZGRSZXN1
bHQuaXRlcmF0b3ItPmltcGwoKSk7CiAKLSAgICBBU1NFUlQocHJvY2Vzc2VkU3RhdGVTZXRzLnNp
emUoKSA9PSBuZmFUb0RGQU5vZGVNYXAuc2l6ZSgpKTsKKyAgICAgICAgICAgIHRhcmdldE5vZGVT
ZXQuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKCF1bnByb2Nlc3NlZE5vZGVzLmlz
RW1wdHkoKSk7CiAKICAgICByZXR1cm4gREZBKFdURjo6bW92ZShkZmFHcmFwaCksIDApOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>