<?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>105199</bug_id>
          
          <creation_ts>2012-12-17 11:44:52 -0800</creation_ts>
          <short_desc>[BlackBerry] Restructure the render queue to process multiple tiles at once</short_desc>
          <delta_ts>2012-12-18 13:45:19 -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>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>105302</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jakob Petsovits">jpetsovits</reporter>
          <assigned_to name="Jakob Petsovits">jpetsovits</assigned_to>
          <cc>anilsson</cc>
    
    <cc>manyoso</cc>
    
    <cc>mifenton</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>792895</commentid>
    <comment_count>0</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-12-17 11:44:52 -0800</bug_when>
    <thetext>Since my last big commit, r136442, the BackingStore&apos;s render() function is able to fetch multiple back buffers and swap them into the user interface thread in one go. However, it turns out that this is not enough to actually render to all of the available back buffers at once. So we block more and don&apos;t really take good advantage of having multiple back buffers available.

We should do whatever&apos;s necessary to actually make use of this feature. In the words of our co-op Bryan, &quot;Faster Power!&quot;. Patch below. (Waiting for Arvid to finish his internal review so I can credit him in the commit message.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793651</commentid>
    <comment_count>1</comment_count>
      <attachid>179942</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-12-18 08:01:36 -0800</bug_when>
    <thetext>Created attachment 179942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793686</commentid>
    <comment_count>2</comment_count>
      <attachid>179942</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 08:38:23 -0800</bug_when>
    <thetext>Comment on attachment 179942
Patch

Clearing flags on attachment: 179942

Committed r138024: &lt;http://trac.webkit.org/changeset/138024&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793687</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 08:38:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793964</commentid>
    <comment_count>4</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-12-18 13:04:14 -0800</bug_when>
    <thetext>Apparently I fail at merge conflict resolution. Upstream has bdakin&apos;s LayoutMilestones patch which my development branch yet has to pick up, it indented a block in FrameLoaderClientBlackBerry. On resolving the conflict, I replaced blitVisibleTiles() (intended) but failed to delete the clearVisibleTiles() line, resulting in a build error as that function has been removed.

Patch forthcoming, give me a sec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793976</commentid>
    <comment_count>5</comment_count>
      <attachid>180013</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-12-18 13:15:40 -0800</bug_when>
    <thetext>Created attachment 180013
Build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794004</commentid>
    <comment_count>6</comment_count>
      <attachid>180013</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 13:45:15 -0800</bug_when>
    <thetext>Comment on attachment 180013
Build fix

Clearing flags on attachment: 180013

Committed r138066: &lt;http://trac.webkit.org/changeset/138066&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794005</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 13:45:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179942</attachid>
            <date>2012-12-18 08:01:36 -0800</date>
            <delta_ts>2012-12-18 08:38:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105199-20121218105852.patch</filename>
            <type>text/plain</type>
            <size>112972</size>
            <attacher name="Jakob Petsovits">jpetsovits</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpp
bmRleCAyNTZmNWFmNWFmMDlkYmE4M2NmMWUxMGRmNmFjYjllYjNkYTg5ZGE0Li42OTliODg2NjI3
YWFiODE1YWM3YjZkMzcwZWZlOTI5ZmViYzIwODdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMjkgQEAKKzIwMTItMTItMTggIEpha29iIFBldHNvdml0cyAgPGpw
ZXRzb3ZpdHNAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gUmVzdHJ1Y3R1cmUgdGhl
IHJlbmRlciBxdWV1ZSB0byBwcm9jZXNzIG11bHRpcGxlIHRpbGVzIGF0IG9uY2UuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDUxOTkKKyAgICAgICAg
UklNIFBSIDI2MDIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICBJbnRlcm5hbGx5IHJldmlld2VkIGJ5IEFydmlkIE5pbHNzb24uCisKKyAgICAgICAgU2lu
Y2UgbXkgbGFzdCBiaWcgY29tbWl0LCByMTM2NDQyLCB0aGUgQmFja2luZ1N0b3JlJ3MgcmVuZGVy
KCkKKyAgICAgICAgZnVuY3Rpb24gaXMgYWJsZSB0byBmZXRjaCBtdWx0aXBsZSBiYWNrIGJ1ZmZl
cnMgYW5kIHN3YXAgdGhlbQorICAgICAgICBpbnRvIHRoZSB1c2VyIGludGVyZmFjZSB0aHJlYWQg
aW4gb25lIGdvLiBIb3dldmVyLCBpdCB0dXJucyBvdXQKKyAgICAgICAgdGhhdCB0aGlzIGlzIG5v
dCBlbm91Z2ggdG8gYWN0dWFsbHkgcmVuZGVyIHRvIGFsbCBvZiB0aGUKKyAgICAgICAgYXZhaWxh
YmxlIGJhY2sgYnVmZmVycyBhdCBvbmNlLiBUaGUgUmVuZGVyUXVldWUgY2xhc3Mgd2FzIHN0aWxs
CisgICAgICAgIHdvcmtpbmcgd2l0aCBhIG1vZGVsIGJhc2VkIG9uIHByb2Nlc3Npbmcgb25lIHJl
Y3RhbmdsZSBhZnRlcgorICAgICAgICBhbm90aGVyLgorCisgICAgICAgIFRoaXMgY29tbWl0IHJl
d3JpdGVzIGxhcmdlIHBhcnRzIG9mIFJlbmRlclF1ZXVlIHRvIGlzc3VlCisgICAgICAgIHJlbmRl
cigpIGNhbGxzIGZvciBtdWx0aXBsZSB0aWxlcyBhdCBvbmNlLiBBcyBXZWJDb3JlIHBhaW50aW5n
CisgICAgICAgIGdldHMgY2hlYXBlciBhbmQgYmxvY2tpbmcgYmVjb21lcyBtb3JlIG9mIGFuIGlz
c3VlLCB0aGlzIGNvbW1pdAorICAgICAgICBkb2VzIGF3YXkgd2l0aCBwYWludHMgc21hbGxlciB0
aGFuIHRpbGUgc2l6ZSBhbmQgYWx3YXlzIHJlbmRlcnMKKyAgICAgICAgd2hvbGUgdGlsZXMgYXQg
b25jZS4gVGhpcyBtZWFucyB0aGUgZGVtaXNlIG9mIFJlbmRlclJlY3QuCisgICAgICAgIEFzIGFu
IGFkZGl0aW9uYWwgYmVuZWZpdCwgdGhpcyBtZWFucyB3ZSBjYW4gcmVtb3ZlIHRoZQorICAgICAg
ICBjb3B5UHJldmlvdXNDb250ZW50c1RvVGlsZUJ1ZmZlcigpIGZ1bmN0aW9uIHdoaWNoIGNhdXNl
ZAorICAgICAgICBwb3RlbnRpYWwgdGhyZWFkaW5nIGlzc3VlcyBhcyBpdCB3YXMgYWNjZXNzaW5n
IGEgYnVmZmVyCisgICAgICAgIG5vdyBvd25lZCBieSB0aGUgVUkgdGhyZWFkIGZyb20gdGhlIFdl
YktpdCB0aHJlYWQuCisKKyAgICAgICAgUmVuZGVyUXVldWUgaXMgYWxzbyBzbWFydGVyIHRoYW4g
YmVmb3JlIGluIGFzc2lnbmluZyBiYXRjaGVzLAorICAgICAgICBpdCBub3cgdGFrZXMgaW50byBh
Y2NvdW50IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGJhY2sgYnVmZmVycworICAgICAgICBmb3Ig
cmVuZGVyaW5nIGFzIHdlbGwgYXMgZXhjbHVkZXMgdGlsZXMgb3V0c2lkZSBjb250ZW50cworICAg
ICAgICBib3VuZGFyaWVzLiBSZWd1bGFyIHJlbmRlciBqb2JzIGNvbnRpbnVlIGJlaW5nIHRyYWNr
ZWQgYXMKKyAgICAgICAgcmVnaW9ucyAoYW5kIGFyZSBiZWluZyBpc3N1ZWQgdG8gZGlkUmVuZGVy
Q29udGVudCgpKSB3aXRoIG9ubHkKKyAgICAgICAgdGhlIGNoYW5nZWQgY29udGVudCByZWdpb25z
LiBFdmVyeXRoaW5nIGVsc2Ugc3dpdGNoZXMgb3ZlciB0bworICAgICAgICB0aWxlIGluZGV4IGxp
c3RzIGZyb20gcHJldmlvdXNseSBsaXN0cyBvZiByZWN0YW5nbGVzLgorICAgICAgICBCeSBkZWZh
dWx0LCB3ZSByZW5kZXIgYXMgbWFueSB0aWxlcyBhdCBvbmNlIGFzIHdlIGNhbiBncmFiCisgICAg
ICAgIGJhY2sgYnVmZmVycywgb3IgdW50aWwgYSBnaXZlbiBzZXQgb2Ygam9icyBpcyBkb25lLgor
ICAgICAgICBGb3IgaGlnaC1wcmlvcml0eSBqb2JzLCByZW5kZXIoKSB3aWxsIGJlIGNhbGxlZCBp
biBhIGxvb3AuCisKKyAgICAgICAgVG8gYWxsb3cgZm9yIHRoZSBuZWNlc3NhcnkgY2hhbmdlcyBp
biByZW5kZXIoKSBhbmQgaW1wcm92ZQorICAgICAgICByZWxpYWJpbGl0eSBpbiB0aGUgc2FtZSBn
bywgd2Ugbm93IGNhbGwgcmVuZGVyKCkgYWxtb3N0CisgICAgICAgIGV4Y2x1c2l2ZWx5IHRocm91
Z2ggUmVuZGVyUXVldWUuIE90aGVyIHBsYWNlcyB3b3VsZCBvZnRlbgorICAgICAgICBjYWxsIHJl
bmRlclZpc2libGVDb250ZW50cygpIGluIHNpdHVhdGlvbnMgd2hlcmUgcmVuZGVyaW5nCisgICAg
ICAgIGlzIG5vdCBwb3NzaWJsZSwgZ2VvbWV0cmllcyBkb24ndCBnZXQgdXBkYXRlZCwgb3IgY29u
dGVudAorICAgICAgICByZW5kZXJlZCBub3RpZmljYXRpb25zIHdvdWxkIG5vdCBnZXQgaXNzdWVk
IHRvIHRoZSBjbGllbnQuCisgICAgICAgIEJ5IHJlcGxhY2luZyByZW5kZXJWaXNpYmxlQ29udGVu
dHMoKSB3aXRoIGEgc2NoZWR1bGVkCisgICAgICAgIGhpZ2gtcHJpb3JpdHkgcXVldWUgdGhhdCdz
IGltbWVkaWF0ZWx5IGJlaW5nIHByb2Nlc3NlZAorICAgICAgICAoYnV0IG9ubHkgaWYgcG9zc2li
bGUpLCB0aGVzZSBwcm9ibGVtcyBnbyBhd2F5LgorCisgICAgICAgICogQXBpL0JhY2tpbmdTdG9y
ZS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6
OnJlc3VtZVNjcmVlblVwZGF0ZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNr
aW5nU3RvcmVQcml2YXRlOjpyZXBhaW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
QmFja2luZ1N0b3JlUHJpdmF0ZTo6c2xvd1Njcm9sbCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnJlbmRlckpvYik6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnNldEJhY2tpbmdTdG9yZVJlY3QpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp1cGRhdGVU
aWxlc0FmdGVyQmFja2luZ1N0b3JlUmVjdENoYW5nZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OmluZGV4ZXNGb3JCYWNraW5nU3RvcmVSZWN0KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6Y2xlYXJB
bmRVcGRhdGVUaWxlT2ZOb3RSZW5kZXJlZFJlZ2lvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OmlzQ3VycmVudFZpc2libGVKb2IpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXJEaXJlY3RU
b1dpbmRvdyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZh
dGU6OnJlbmRlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVBy
aXZhdGU6OnJlbmRlckFuZEJsaXRWaXNpYmxlQ29udGVudHNJbW1lZGlhdGVseSk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnJlbmRlckFuZEJsaXRJ
bW1lZGlhdGVseSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVBy
aXZhdGU6OnBhaW50RGVmYXVsdEJhY2tncm91bmQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpibGl0VmlzaWJsZUNvbnRlbnRzKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6Y29tcG9zaXRlQ29udGVu
dHMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjp2
aXNpYmxlVGlsZUluZGV4ZXMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5n
U3RvcmVQcml2YXRlOjpyZXNldFRpbGVzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
QmFja2luZ1N0b3JlUHJpdmF0ZTo6dXBkYXRlVGlsZXNGb3JTY3JvbGxPck5vdFJlbmRlcmVkUmVn
aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6
dXBkYXRlVGlsZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVBy
aXZhdGU6OnRyYW5zZm9ybUNoYW5nZWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpC
YWNraW5nU3RvcmVQcml2YXRlOjpkaWRSZW5kZXJDb250ZW50KToKKyAgICAgICAgKiBBcGkvQmFj
a2luZ1N0b3JlX3AuaDoKKyAgICAgICAgKEJhY2tpbmdTdG9yZVByaXZhdGUpOgorICAgICAgICAq
IEFwaS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVBy
aXZhdGU6OnNldExvYWRTdGF0ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBh
Z2VQcml2YXRlOjp6b29tQWJvdXRQb2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYlBhZ2VQcml2YXRlOjpyZXN1bWVCYWNraW5nU3RvcmUpOgorICAgICAgICAqIEFwaS9XZWJQ
YWdlQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VD
b21wb3NpdG9yUHJpdmF0ZTo6YW5pbWF0aW9uRnJhbWVDaGFuZ2VkKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRjaERpZExheW91dCk6Cisg
ICAgICAgICogV2ViS2l0U3VwcG9ydC9SZW5kZXJRdWV1ZS5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OmNvbXBhcmVSZWN0T25lRGlyZWN0aW9uKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6dGlsZUluZGV4SXNMZXNzVGhhbik6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojp0aWxlSW5kZXhMZXNzVGhhbkZ1bmN0aW9uKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VGlsZUluZGV4TGVzc1RoYW46OlRpbGVJbmRleExl
c3NUaGFuKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VGlsZUluZGV4TGVzc1RoYW46
Om9wZXJhdG9yKCkpOgorICAgICAgICAoVGlsZUluZGV4TGVzc1RoYW4pOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpSZW5kZXJRdWV1ZTo6cmVzZXQpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpSZW5kZXJRdWV1ZTo6aXNFbXB0eSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OlJlbmRlclF1ZXVlOjpoYXNDdXJyZW50UmVndWxhclJlbmRlckpvYik6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OlJlbmRlclF1ZXVlOjpoYXNDdXJyZW50VmlzaWJsZVpvb21K
b2IpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpSZW5kZXJRdWV1ZTo6aGFzQ3VycmVu
dFZpc2libGVTY3JvbGxKb2IpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpSZW5kZXJR
dWV1ZTo6aXNDdXJyZW50VmlzaWJsZVpvb21Kb2IpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpSZW5kZXJRdWV1ZTo6aXNDdXJyZW50VmlzaWJsZVpvb21Kb2JDb21wbGV0ZWQpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpSZW5kZXJRdWV1ZTo6aXNDdXJyZW50VmlzaWJsZVNj
cm9sbEpvYik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlJlbmRlclF1ZXVlOjppc0N1
cnJlbnRWaXNpYmxlU2Nyb2xsSm9iQ29tcGxldGVkKToKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6UmVuZGVyUXVldWU6OmlzQ3VycmVudFJlZ3VsYXJSZW5kZXJKb2IpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpSZW5kZXJRdWV1ZTo6dGlsZUluZGV4ZXNJbnRlcnNlY3RpbmdS
ZWdpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpSZW5kZXJRdWV1ZTo6dGlsZUlu
ZGV4ZXNGdWxseUNvbnRhaW5lZEluUmVnaW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6UmVuZGVyUXVldWU6OnRpbGVSZWdpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpSZW5kZXJRdWV1ZTo6YWRkVG9RdWV1ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OlJlbmRlclF1ZXVlOjphZGRUb1JlZ3VsYXJRdWV1ZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OlJlbmRlclF1ZXVlOjphZGRUb1Njcm9sbFpvb21RdWV1ZSk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OlJlbmRlclF1ZXVlOjpxdWlja1NvcnQpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpSZW5kZXJRdWV1ZTo6dmlzaWJsZUNvbnRlbnRDaGFuZ2VkKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6UmVuZGVyUXVldWU6OmJhY2tpbmdTdG9yZVJlY3RDaGFu
Z2luZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlJlbmRlclF1ZXVlOjpjbGVhcik6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlJlbmRlclF1ZXVlOjpjbGVhclJlZ2lvbnMp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpSZW5kZXJRdWV1ZTo6Y2xlYXJUaWxlSW5k
ZXhlcyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlJlbmRlclF1ZXVlOjpyZW5kZXIp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpSZW5kZXJRdWV1ZTo6cmVuZGVyUmVndWxh
clJlbmRlckpvYnMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpSZW5kZXJRdWV1ZTo6
cmVuZGVyU2Nyb2xsWm9vbUpvYnMpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpSZW5k
ZXJRdWV1ZTo6c2Nyb2xsWm9vbUpvYnNDb21wbGV0ZWQpOgorICAgICAgICAqIFdlYktpdFN1cHBv
cnQvUmVuZGVyUXVldWUuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChSZW5kZXJRdWV1
ZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9vbC5jcHA6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OlN1cmZhY2VQb29sOjpudW1iZXJPZkF2YWlsYWJsZUJhY2tCdWZm
ZXJzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6U3VyZmFjZVBvb2w6OnRha2VCYWNr
QnVmZmVyKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L1N1cmZhY2VQb29sLmg6CisgICAgICAg
IChTdXJmYWNlUG9vbCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9UaWxlSW5kZXguaDoKKyAg
ICAgICAgKFdlYktpdCk6CisKIDIwMTItMTItMTcgIFNlYW4gV2FuZyAgPFh1ZXdlbi5XYW5nQHRv
cmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gRWRpdGFibGUgdGV4dCBl
bGVtZW50IGNhbid0IGJlIHNlbGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggZTM3ZDI4Y2Q3YjYwYWNlMzg1MmVhOGVjOWZmMmYzOTIy
MmNkODNhNy4uYjU3ZmVjNDhhMzg3YzU5MmVhYjMxNTI3ZTY5ODg1ZmMwMDlmNWQ5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAtMzcxLDkg
KzM3MSwyNiBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnJlc3VtZVNjcmVlblVwZGF0ZXMo
QmFja2luZ1N0b3JlOjpSZXN1bWVVcGRhdGVPcGVyYXRpbwogICAgIGlmIChzaG91bGREaXJlY3RS
ZW5kZXJpbmdUb1dpbmRvdygpICYmIG9wID09IEJhY2tpbmdTdG9yZTo6QmxpdCkKICAgICAgICAg
b3AgPSBCYWNraW5nU3RvcmU6OlJlbmRlckFuZEJsaXQ7CiAKLSAgICAvLyBEbyBzb21lIHJlbmRl
cmluZyBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKG9wID09IEJhY2tpbmdTdG9yZTo6UmVuZGVyQW5k
QmxpdCkKLSAgICAgICAgcmVuZGVyVmlzaWJsZUNvbnRlbnRzKCk7CisgICAgLy8gUmVuZGVyIHZp
c2libGUgY29udGVudHMgaWYgbmVjZXNzYXJ5LgorICAgIGlmIChvcCA9PSBCYWNraW5nU3RvcmU6
OlJlbmRlckFuZEJsaXQpIHsKKyAgICAgICAgaWYgKHNob3VsZERpcmVjdFJlbmRlcmluZ1RvV2lu
ZG93KCkpCisgICAgICAgICAgICByZW5kZXJEaXJlY3RUb1dpbmRvdyh2aXNpYmxlQ29udGVudHNS
ZWN0KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVwZGF0ZVRpbGVNYXRyaXhJZk5l
ZWRlZCgpOworICAgICAgICAgICAgVGlsZUluZGV4TGlzdCB2aXNpYmxlVGlsZXMgPSB2aXNpYmxl
VGlsZUluZGV4ZXMoZnJvbnRTdGF0ZSgpKTsKKyAgICAgICAgICAgIFRpbGVJbmRleExpc3QgcmVu
ZGVyZWRUaWxlcyA9IHJlbmRlcih2aXNpYmxlVGlsZXMpOworCisgICAgICAgICAgICBpZiAocmVu
ZGVyZWRUaWxlcy5zaXplKCkgIT0gdmlzaWJsZVRpbGVzLnNpemUoKSkgeworICAgICAgICAgICAg
ICAgIC8vIEFkZCB1bnJlbmRlcmVkIGxlZnRvdmVyIHRpbGVzIHRvIHRoZSByZW5kZXIgcXVldWUu
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZpc2libGVUaWxlcy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmVkVGlsZXMuY29u
dGFpbnModmlzaWJsZVRpbGVzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZv
cm06OkludFJlY3QgdGlsZVJlY3QoZnJvbnRTdGF0ZSgpLT5vcmlnaW5PZlRpbGUodmlzaWJsZVRp
bGVzW2ldKSwgdGlsZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3JlbmRlclF1
ZXVlLT5hZGRUb1F1ZXVlKFJlbmRlclF1ZXVlOjpWaXNpYmxlWm9vbSwgdGlsZVJlY3QpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSB1c2VyIGludGVyZmFjZSB0aHJl
YWQgZ2V0cyB0aGUgbWVzc2FnZSBiZWZvcmUgd2UgcHJvY2VlZAogICAgIC8vIGJlY2F1c2UgYmxp
dFZpc2libGVDb250ZW50cygpIGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgdXNlciBpbnRlcmZhY2UK
QEAgLTQyNywxNiArNDQ0LDkgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZXBhaW50KGNv
bnN0IFBsYXRmb3JtOjpJbnRSZWN0JiB3aW5kb3dSZWN0LAogICAgICAgICAgICAgaW1tZWRpYXRl
ID8gInRydWUiIDogImZhbHNlIik7CiAjZW5kaWYKIAotICAgICAgICBpZiAoaW1tZWRpYXRlKSB7
Ci0gICAgICAgICAgICBpZiAobV9zdXNwZW5kQmFja2luZ1N0b3JlVXBkYXRlcykKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChyZW5kZXIocmVjdCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXNob3VsZERpcmVjdFJlbmRlcmluZ1RvV2luZG93KCkgJiYgIW1fd2Vi
UGFnZS0+ZC0+Y29tbWl0Um9vdExheWVySWZOZWVkZWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
YmxpdFZpc2libGVDb250ZW50cygpOwotICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+ZC0+bV9j
bGllbnQtPm5vdGlmeVBpeGVsQ29udGVudFJlbmRlcmVkKHJlY3QpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UKKyAgICAgICAgaWYgKGltbWVkaWF0ZSkKKyAgICAgICAgICAgIHJlbmRl
ckFuZEJsaXRJbW1lZGlhdGVseShyZWN0KTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9y
ZW5kZXJRdWV1ZS0+YWRkVG9RdWV1ZShSZW5kZXJRdWV1ZTo6UmVndWxhclJlbmRlciwgcmVjdCk7
CiAgICAgfQogfQpAQCAtNDU2LDEwICs0NjYsOSBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6
OnNsb3dTY3JvbGwoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlbHRhLCBjb25zdCBQbGF0Zgog
ICAgIC8vIGl0IG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVkIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRv
IHRoZSB0cmFuc2Zvcm1lZCBjb250ZW50cy4KICAgICBQbGF0Zm9ybTo6SW50UmVjdCByZWN0ID0g
bV93ZWJQYWdlLT5kLT5tYXBUb1RyYW5zZm9ybWVkKG1fY2xpZW50LT5tYXBGcm9tVmlld3BvcnRU
b0NvbnRlbnRzKHdpbmRvd1JlY3QpKTsKIAotICAgIGlmIChpbW1lZGlhdGUpIHsKLSAgICAgICAg
aWYgKHJlbmRlcihyZWN0KSAmJiAhaXNTdXNwZW5kZWQoKSAmJiAhc2hvdWxkRGlyZWN0UmVuZGVy
aW5nVG9XaW5kb3coKSAmJiAhbV93ZWJQYWdlLT5kLT5jb21taXRSb290TGF5ZXJJZk5lZWRlZCgp
KQotICAgICAgICAgICAgYmxpdFZpc2libGVDb250ZW50cygpOwotICAgIH0gZWxzZSB7CisgICAg
aWYgKGltbWVkaWF0ZSkKKyAgICAgICAgcmVuZGVyQW5kQmxpdEltbWVkaWF0ZWx5KHJlY3QpOwor
ICAgIGVsc2UgewogICAgICAgICBtX3JlbmRlclF1ZXVlLT5hZGRUb1F1ZXVlKFJlbmRlclF1ZXVl
OjpWaXNpYmxlU2Nyb2xsLCByZWN0KTsKICAgICAgICAgLy8gV2Ugb25seSBibGl0IGhlcmUgaWYg
dGhlIGNsaWVudCBkaWQgbm90IGdlbmVyYXRlIHRoZSBzY3JvbGwgYXMgdGhlIGNsaWVudAogICAg
ICAgICAvLyBub3cgc3VwcG9ydHMgYmxpdHRpbmcgYXN5bmNocm9ub3VzbHkgZHVyaW5nIHNjcm9s
bCBvcGVyYXRpb25zLgpAQCAtNTY5LDEwICs1NzgsNiBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZh
dGU6OnJlbmRlckpvYigpCiAKICAgICBtX3JlbmRlclF1ZXVlLT5yZW5kZXIoIW1fc3VzcGVuZFJl
Z3VsYXJSZW5kZXJKb2JzKTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAg
ICBtX3dlYlBhZ2UtPmQtPmNvbW1pdFJvb3RMYXllcklmTmVlZGVkKCk7Ci0jZW5kaWYKLQogICAg
IGlmIChzaG91bGRQZXJmb3JtUmVuZGVySm9icygpKQogICAgICAgICBkaXNwYXRjaFJlbmRlckpv
YigpOwogfQpAQCAtNzQ5LDcgKzc1NCw4IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6c2V0
QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFja2luZ1N0CiAKICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihpbmRleGVzVG9GaWxsLnNpemUoKSkgPT0gY3VycmVu
dE1hcC5zaXplKCkpOwogCi0gICAgbV9yZW5kZXJRdWV1ZS0+Y2xlYXIoY3VycmVudEJhY2tpbmdT
dG9yZVJlY3QsIGZhbHNlIC8qY2xlYXJSZWd1bGFyUmVuZGVySm9icyovKTsKKyAgICBtX3JlbmRl
clF1ZXVlLT5jbGVhcihjdXJyZW50QmFja2luZ1N0b3JlUmVjdCwgUmVuZGVyUXVldWU6OkRvbnRD
bGVhclJlZ3VsYXJSZW5kZXJKb2JzKTsKKyAgICBtX3JlbmRlclF1ZXVlLT5iYWNraW5nU3RvcmVS
ZWN0Q2hhbmdpbmcoY3VycmVudEJhY2tpbmdTdG9yZVJlY3QsIGJhY2tpbmdTdG9yZVJlY3QpOwog
CiAgICAgVGlsZU1hcCBuZXdUaWxlTWFwOwogICAgIFRpbGVNYXAgbGVmdE92ZXJUaWxlczsKQEAg
LTg0MCw3ICs4NDYsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGVzQWZ0
ZXJCYWNraW5nU3RvcmVSZWN0Q2hhbmdlKCkKICNlbmRpZgogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBpZiAoIXRpbGVCdWZmZXIgfHwgIXRpbGVCdWZmZXItPmlzUmVuZGVy
ZWQodGlsZVZpc2libGVDb250ZW50c1JlY3QoaW5kZXgsIGN1cnJlbnRTdGF0ZSksIGN1cnJlbnRT
dGF0ZS0+c2NhbGUoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIWlzQ3VycmVudFZpc2libGVK
b2IoaW5kZXgsIHRpbGVCdWZmZXIsIGN1cnJlbnRTdGF0ZSkpCisgICAgICAgICAgICAgICAgICAg
ICYmICFpc0N1cnJlbnRWaXNpYmxlSm9iKGluZGV4LCBjdXJyZW50U3RhdGUpKQogICAgICAgICAg
ICAgICAgICAgICB1cGRhdGVUaWxlKHRpbGVPcmlnaW4sIGZhbHNlIC8qaW1tZWRpYXRlKi8pOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHJlY3QuaW50ZXJzZWN0cyhleHBhbmRl
ZENvbnRlbnRzUmVjdCgpKSkKQEAgLTg0OCw3ICs4NTQsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVBy
aXZhdGU6OnVwZGF0ZVRpbGVzQWZ0ZXJCYWNraW5nU3RvcmVSZWN0Q2hhbmdlKCkKICAgICB9CiB9
CiAKLUJhY2tpbmdTdG9yZVByaXZhdGU6OlRpbGVJbmRleExpc3QgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6aW5kZXhlc0ZvckJhY2tpbmdTdG9yZVJlY3QoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGJh
Y2tpbmdTdG9yZVJlY3QpIGNvbnN0CitUaWxlSW5kZXhMaXN0IEJhY2tpbmdTdG9yZVByaXZhdGU6
OmluZGV4ZXNGb3JCYWNraW5nU3RvcmVSZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNr
aW5nU3RvcmVSZWN0KSBjb25zdAogewogICAgIFRpbGVJbmRleExpc3QgaW5kZXhlczsKICAgICBp
bnQgbnVtYmVyT2ZUaWxlc1dpZGUgPSBiYWNraW5nU3RvcmVSZWN0LndpZHRoKCkgLyB0aWxlV2lk
dGgoKTsKQEAgLTg4MiwxOCArODg4LDEyIEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6Y2xl
YXJBbmRVcGRhdGVUaWxlT2ZOb3RSZW5kZXJlZFJlZ2lvbihjb25zdCBUaWxlSW5kZXgmCiAgICAg
aWYgKHRpbGVOb3RSZW5kZXJlZFJlZ2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIEludGVyc2VjdCB0aGUgdGlsZSB3aXRoIHRoZSBub3QgcmVuZGVyZWQgcmVnaW9uIHRv
IGdldCB0aGUgYXJlYXMKLSAgICAvLyBvZiB0aGUgdGlsZSB0aGF0IHdlIG5lZWQgdG8gY2xlYXIu
Ci0gICAgSW50UmVjdExpc3QgdGlsZU5vdFJlbmRlcmVkUmVnaW9uUmVjdHMgPSB0aWxlTm90UmVu
ZGVyZWRSZWdpb24ucmVjdHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVOb3RS
ZW5kZXJlZFJlZ2lvblJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFBsYXRmb3JtOjpJbnRS
ZWN0IHRpbGVOb3RSZW5kZXJlZFJlZ2lvblJlY3QgPSB0aWxlTm90UmVuZGVyZWRSZWdpb25SZWN0
cy5hdChpKTsKLSAgICAgICAgLy8gQ2xlYXIgdGhlIHJlbmRlciBxdWV1ZSBvZiB0aGlzIHJlY3Qu
Ci0gICAgICAgIG1fcmVuZGVyUXVldWUtPmNsZWFyKHRpbGVOb3RSZW5kZXJlZFJlZ2lvblJlY3Qs
IHRydWUgLypjbGVhclJlZ3VsYXJSZW5kZXJKb2JzKi8pOwotCi0gICAgICAgIGlmICh1cGRhdGUp
IHsKLSAgICAgICAgICAgIC8vIEFkZCBpdCBhZ2FpbiBhcyBhIHJlZ3VsYXIgcmVuZGVyIGpvYi4K
LSAgICAgICAgICAgIG1fcmVuZGVyUXVldWUtPmFkZFRvUXVldWUoUmVuZGVyUXVldWU6OlJlZ3Vs
YXJSZW5kZXIsIHRpbGVOb3RSZW5kZXJlZFJlZ2lvblJlY3QpOwotICAgICAgICB9CisgICAgLy8g
Q2xlYXIgdGhlIHJlbmRlciBxdWV1ZSBvZiB0aGlzIHJlZ2lvbi4KKyAgICBtX3JlbmRlclF1ZXVl
LT5jbGVhcih0aWxlTm90UmVuZGVyZWRSZWdpb24sIFJlbmRlclF1ZXVlOjpDbGVhckFueUpvYnMp
OworCisgICAgaWYgKHVwZGF0ZSkgeworICAgICAgICAvLyBBZGQgaXQgYWdhaW4gYXMgYSByZWd1
bGFyIHJlbmRlciBqb2IuCisgICAgICAgIG1fcmVuZGVyUXVldWUtPmFkZFRvUXVldWUoUmVuZGVy
UXVldWU6OlJlZ3VsYXJSZW5kZXIsIHRpbGVOb3RSZW5kZXJlZFJlZ2lvbik7CiAgICAgfQogCiAg
ICAgaWYgKCF0aWxlQnVmZmVyKQpAQCAtOTMxLDI1ICs5MzEsMTMgQEAgdm9pZCBCYWNraW5nU3Rv
cmVQcml2YXRlOjpjbGVhclJlbmRlcmVkUmVnaW9uKFRpbGVCdWZmZXIqIHRpbGVCdWZmZXIsIGNv
bnN0IFBsYXQKICAgICB0aWxlQnVmZmVyLT5jbGVhclJlbmRlcmVkUmVnaW9uKHJlZ2lvbik7CiB9
CiAKLWJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6aXNDdXJyZW50VmlzaWJsZUpvYihjb25zdCBU
aWxlSW5kZXgmIGluZGV4LCBUaWxlQnVmZmVyKiB0aWxlQnVmZmVyLCBCYWNraW5nU3RvcmVHZW9t
ZXRyeSogZ2VvbWV0cnkpIGNvbnN0Citib29sIEJhY2tpbmdTdG9yZVByaXZhdGU6OmlzQ3VycmVu
dFZpc2libGVKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgQmFja2luZ1N0b3JlR2VvbWV0cnkq
IGdlb21ldHJ5KSBjb25zdAogewotICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoZSB3aG9sZSByZWN0
IGlzIGluIHRoZSBxdWV1ZS4KLSAgICBQbGF0Zm9ybTo6SW50UG9pbnQgdGlsZU9yaWdpbiA9IGdl
b21ldHJ5LT5vcmlnaW5PZlRpbGUoaW5kZXgpOwotICAgIFBsYXRmb3JtOjpJbnRSZWN0IHdob2xl
UmVjdCA9IFBsYXRmb3JtOjpJbnRSZWN0KHRpbGVPcmlnaW4sIHRpbGVTaXplKCkpOwotICAgIGlm
IChtX3JlbmRlclF1ZXVlLT5pc0N1cnJlbnRWaXNpYmxlU2Nyb2xsSm9iKHdob2xlUmVjdCkgfHwg
bV9yZW5kZXJRdWV1ZS0+aXNDdXJyZW50VmlzaWJsZVNjcm9sbEpvYkNvbXBsZXRlZCh3aG9sZVJl
Y3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFNlY29uZCBjaGVjayBpZiB0aGUg
aW5kaXZpZHVhbCBwYXJ0cyBvZiB0aGUgbm9uLXJlbmRlcmVkIHJlZ2lvbiBhcmUgaW4gdGhlIHJl
Z3VsYXIgcXVldWUuCi0gICAgaWYgKCF0aWxlQnVmZmVyKQotICAgICAgICByZXR1cm4gbV9yZW5k
ZXJRdWV1ZS0+aXNDdXJyZW50UmVndWxhclJlbmRlckpvYih3aG9sZVJlY3QpOwotCi0gICAgSW50
UmVjdExpc3QgdGlsZU5vdFJlbmRlcmVkUmVnaW9uUmVjdHMgPSB0aWxlQnVmZmVyLT5ub3RSZW5k
ZXJlZFJlZ2lvbigpLnJlY3RzKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVO
b3RSZW5kZXJlZFJlZ2lvblJlY3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9yZW5k
ZXJRdWV1ZS0+aXNDdXJyZW50UmVndWxhclJlbmRlckpvYih0aWxlTm90UmVuZGVyZWRSZWdpb25S
ZWN0cy5hdChpKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBtX3JlbmRlclF1ZXVlLT5pc0N1cnJlbnRWaXNpYmxlWm9vbUpv
YihpbmRleCkKKyAgICAgICAgfHwgbV9yZW5kZXJRdWV1ZS0+aXNDdXJyZW50VmlzaWJsZVNjcm9s
bEpvYihpbmRleCkKKyAgICAgICAgfHwgbV9yZW5kZXJRdWV1ZS0+aXNDdXJyZW50VmlzaWJsZVpv
b21Kb2JDb21wbGV0ZWQoaW5kZXgpCisgICAgICAgIHx8IG1fcmVuZGVyUXVldWUtPmlzQ3VycmVu
dFZpc2libGVTY3JvbGxKb2JDb21wbGV0ZWQoaW5kZXgpCisgICAgICAgIHx8IG1fcmVuZGVyUXVl
dWUtPmlzQ3VycmVudFJlZ3VsYXJSZW5kZXJKb2IoaW5kZXgsIGdlb21ldHJ5KTsKIH0KIAogdm9p
ZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUoaW50IGRlbHRhWCwgaW50
IGRlbHRhWSkKQEAgLTk5MSw3ICs5NzksNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnNj
cm9sbEJhY2tpbmdTdG9yZShpbnQgZGVsdGFYLCBpbnQgZGVsdGFZKQogICAgIHNldEJhY2tpbmdT
dG9yZVJlY3QoYmFja2luZ1N0b3JlUmVjdCwgbV93ZWJQYWdlLT5kLT5jdXJyZW50U2NhbGUoKSk7
CiB9CiAKLWJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVuZGVyRGlyZWN0VG9XaW5kb3coY29u
c3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpCitQbGF0Zm9ybTo6SW50UmVjdCBCYWNraW5nU3Rv
cmVQcml2YXRlOjpyZW5kZXJEaXJlY3RUb1dpbmRvdyhjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYg
cmVjdCkKIHsKICAgICByZXF1ZXN0TGF5b3V0SWZOZWVkZWQoKTsKIApAQCAtOTk5LDcgKzk4Nyw3
IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVuZGVyRGlyZWN0VG9XaW5kb3coY29uc3Qg
UGxhdGZvcm06OkludFJlY3QmIHJlY3QpCiAgICAgZGlydHlSZWN0LmludGVyc2VjdCh1bmNsaXBw
ZWRWaXNpYmxlQ29udGVudHNSZWN0KCkpOwogCiAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRSZWN0
KCk7CiAKICAgICBQbGF0Zm9ybTo6SW50UmVjdCBzY3JlZW5SZWN0ID0gbV9jbGllbnQtPm1hcEZy
b21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UcmFuc2Zvcm1lZFZpZXdwb3J0KGRpcnR5UmVjdCk7CiAg
ICAgd2luZG93RnJvbnRCdWZmZXJTdGF0ZSgpLT5jbGVhckJsaXR0ZWRSZWdpb24oc2NyZWVuUmVj
dCk7CkBAIC0xMDIzLDU5ICsxMDExLDU4IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVu
ZGVyRGlyZWN0VG9XaW5kb3coY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpCiAjZW5kaWYK
IAogICAgIGludmFsaWRhdGVXaW5kb3coc2NyZWVuUmVjdCk7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgbV9yZW5kZXJRdWV1ZS0+Y2xlYXIocmVjdCwgUmVuZGVyUXVldWU6OkRvbnRDbGVhckNvbXBs
ZXRlZEpvYnMpOworICAgIHJldHVybiBkaXJ0eVJlY3Q7CiB9CiAKLWJvb2wgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6cmVuZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQorVGlsZUluZGV4
TGlzdCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIoY29uc3QgVGlsZUluZGV4TGlzdCYgdGls
ZUluZGV4TGlzdCkKIHsKICAgICBpZiAoIW1fd2ViUGFnZS0+aXNWaXNpYmxlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFRpbGVJbmRleExpc3QoKTsKIAogICAgIHJl
cXVlc3RMYXlvdXRJZk5lZWRlZCgpOwogCi0gICAgaWYgKHNob3VsZERpcmVjdFJlbmRlcmluZ1Rv
V2luZG93KCkpCi0gICAgICAgIHJldHVybiByZW5kZXJEaXJlY3RUb1dpbmRvdyhyZWN0KTsKKyAg
ICBpZiAoc2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9XaW5kb3coKSkgeworICAgICAgICAvLyBXZSBj
YW5ub3QgaGFuZGxlIHRpbGVzIGluIGRpcmVjdCByZW5kZXJpbmcgbW9kZS4gQmFkIGZ1bmN0aW9u
IGNhbGwuCisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgIHJldHVybiBUaWxlSW5kZXhM
aXN0KCk7CisgICAgfQogCiAgICAgLy8gSWYgZGlyZWN0IHJlbmRlcmluZyBpcyBvZmYsIGV2ZW4g
dGhvdWdoIHdlJ3JlIG5vdCBhY3RpdmUsIHNvbWVvbmUgZWxzZQogICAgIC8vIGhhcyB0byByZW5k
ZXIgdGhlIHJvb3QgbGF5ZXIuIFRoZXJlIGFyZSBubyB0aWxlcyBhdmFpbGFibGUgZm9yIHVzIHRv
CiAgICAgLy8gZHJhdyB0by4KICAgICBpZiAoIWlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHJlbmRlciBqb2IgdGhhdCBoYXMgYmVl
biBwZXJmb3JtZWQgc2luY2UgcmVzdW1wdGlvbiBvZgotICAgIC8vIGJhY2tpbmdzdG9yZSB1cGRh
dGVzIGFuZCB0aGUgdGlsZSBtYXRyaXggbmVlZHMgdXBkYXRpbmcgc2luY2Ugd2Ugc3VzcGVuZAot
ICAgIC8vIHRpbGUgbWF0cml4IHVwZGF0aW5nIHdpdGggYmFja2luZ3N0b3JlIHVwZGF0ZXMKLSAg
ICB1cGRhdGVUaWxlTWF0cml4SWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuIFRpbGVJbmRleExp
c3QoKTsKIAogI2lmIERFQlVHX0JBQ0tJTkdTVE9SRQotICAgIFBsYXRmb3JtOjpsb2dBbHdheXMo
UGxhdGZvcm06OkxvZ0xldmVsQ3JpdGljYWwsCi0gICAgICAgICJCYWNraW5nU3RvcmVQcml2YXRl
OjpyZW5kZXIgcmVjdD0lcywgbV9zdXNwZW5kQmFja2luZ1N0b3JlVXBkYXRlcyA9ICVzIiwKLSAg
ICAgICAgcmVjdC50b1N0cmluZygpLmNfc3RyKCksCisgICAgUGxhdGZvcm06OmxvZ0Fsd2F5cyhQ
bGF0Zm9ybTo6TG9nTGV2ZWxJbmZvLAorICAgICAgICAiQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVu
ZGVyICVkIHRpbGVzLCBtX3N1c3BlbmRCYWNraW5nU3RvcmVVcGRhdGVzID0gJXMiLAorICAgICAg
ICB0aWxlSW5kZXhMaXN0LnNpemUoKSwKICAgICAgICAgbV9zdXNwZW5kQmFja2luZ1N0b3JlVXBk
YXRlcyA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogI2VuZGlmCiAKKyAgICBBU1NFUlQoIW1fdGlsZU1h
dHJpeE5lZWRzVXBkYXRlKTsKKworICAgIGlmICh0aWxlSW5kZXhMaXN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHRpbGVJbmRleExpc3Q7CisKICAgICBCYWNraW5nU3RvcmVHZW9tZXRyeSog
Y3VycmVudFN0YXRlID0gZnJvbnRTdGF0ZSgpOwogICAgIFRpbGVNYXAgb2xkVGlsZU1hcCA9IGN1
cnJlbnRTdGF0ZS0+dGlsZU1hcCgpOwogICAgIGRvdWJsZSBjdXJyZW50U2NhbGUgPSBjdXJyZW50
U3RhdGUtPnNjYWxlKCk7CiAKLSAgICBUaWxlUmVjdExpc3QgdGlsZVJlY3RMaXN0ID0gbWFwRnJv
bVBpeGVsQ29udGVudHNUb1RpbGVzKHJlY3QsIGN1cnJlbnRTdGF0ZSk7Ci0gICAgaWYgKHRpbGVS
ZWN0TGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIEJhY2tpbmdT
dG9yZUdlb21ldHJ5KiBuZXdHZW9tZXRyeSA9IG5ldyBCYWNraW5nU3RvcmVHZW9tZXRyeTsKICAg
ICBuZXdHZW9tZXRyeS0+c2V0U2NhbGUoY3VycmVudFN0YXRlLT5zY2FsZSgpKTsKICAgICBuZXdH
ZW9tZXRyeS0+c2V0TnVtYmVyT2ZUaWxlc1dpZGUoY3VycmVudFN0YXRlLT5udW1iZXJPZlRpbGVz
V2lkZSgpKTsKICAgICBuZXdHZW9tZXRyeS0+c2V0TnVtYmVyT2ZUaWxlc0hpZ2goY3VycmVudFN0
YXRlLT5udW1iZXJPZlRpbGVzSGlnaCgpKTsKICAgICBuZXdHZW9tZXRyeS0+c2V0QmFja2luZ1N0
b3JlT2Zmc2V0KGN1cnJlbnRTdGF0ZS0+YmFja2luZ1N0b3JlT2Zmc2V0KCkpOwogICAgIFRpbGVN
YXAgbmV3VGlsZU1hcChvbGRUaWxlTWFwKTsgLy8gY29weSBhIG5ldywgd3JpdGFibGUgdmVyc2lv
bgorICAgIFRpbGVJbmRleExpc3QgcmVuZGVyZWRUaWxlczsKIAotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGlsZVJlY3RMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFRpbGVSZWN0IHRp
bGVSZWN0ID0gdGlsZVJlY3RMaXN0W2ldOwotICAgICAgICBUaWxlSW5kZXggaW5kZXggPSB0aWxl
UmVjdC5maXJzdDsKLSAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlSZWN0ID0gdGlsZVJl
Y3Quc2Vjb25kOwotICAgICAgICBUaWxlQnVmZmVyKiBmcm9udEJ1ZmZlciA9IG9sZFRpbGVNYXAu
Z2V0KGluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVJbmRleExpc3Quc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gdGlsZUluZGV4TGlzdFtpXTsK
KyAgICAgICAgUGxhdGZvcm06OkludFJlY3QgZGlydHlSZWN0KG5ld0dlb21ldHJ5LT5vcmlnaW5P
ZlRpbGUoaW5kZXgpLCB0aWxlU2l6ZSgpKTsKIAotICAgICAgICBpZiAoIVN1cmZhY2VQb29sOjpn
bG9iYWxTdXJmYWNlUG9vbCgpLT5oYXNCYWNrQnVmZmVyKCkpIHsKKyAgICAgICAgaWYgKCFTdXJm
YWNlUG9vbDo6Z2xvYmFsU3VyZmFjZVBvb2woKS0+bnVtYmVyT2ZBdmFpbGFibGVCYWNrQnVmZmVy
cygpKSB7CiAgICAgICAgICAgICBuZXdHZW9tZXRyeS0+c2V0VGlsZU1hcChuZXdUaWxlTWFwKTsK
ICAgICAgICAgICAgIGFkb3B0QXNGcm9udFN0YXRlKG5ld0dlb21ldHJ5KTsgLy8gdGhpcyBzaG91
bGQgZ2V0IHVzIGF0IGxlYXN0IG9uZSBtb3JlLgogCkBAIC0xMDk3LDggKzEwODQsMTUgQEAgYm9v
bCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJl
Y3QpCiAKICAgICAgICAgICAgIC8vIFdlIHByb2JhYmx5IGhhdmUgZXh0cmEgdGlsZXMgc2luY2Ug
dGhlIGNvbnRlbnRzIHNpemUgaXMgc28gc21hbGwuCiAgICAgICAgICAgICAvLyBTYXZlIHNvbWUg
Y3ljbGVzIGhlcmUuLi4KLSAgICAgICAgICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpIHsKKyNpZiBERUJVR19CQUNLSU5HU1RP
UkUKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6bG9nQWx3YXlzKFBsYXRmb3JtOjpMb2dMZXZl
bEluZm8sCisgICAgICAgICAgICAgICAgICAgICJCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIg
c2tpcHBpbmcgdGlsZSBhdCAlcywgaXQncyBvdXRzaWRlIHRoZSBleHBhbmRlZCBjb250ZW50cyBy
ZWN0IG9mICVzIiwKKyAgICAgICAgICAgICAgICAgICAgbmV3R2VvbWV0cnktPm9yaWdpbk9mVGls
ZShpbmRleCkudG9TdHJpbmcoKS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICBleHBhbmRl
ZENvbnRlbnRzUmVjdCgpLnRvU3RyaW5nKCkuY19zdHIoKSk7CisjZW5kaWYKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIFRpbGVC
dWZmZXIqIGJhY2tCdWZmZXIgPSBTdXJmYWNlUG9vbDo6Z2xvYmFsU3VyZmFjZVBvb2woKS0+dGFr
ZUJhY2tCdWZmZXIoKTsKQEAgLTExMjQsMTEgKzExMTgsNiBAQCBib29sIEJhY2tpbmdTdG9yZVBy
aXZhdGU6OnJlbmRlcihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkKICAgICAgICAgaWYg
KGlzT3BlbkdMQ29tcG9zaXRpbmcoKSkKICAgICAgICAgICAgIFN1cmZhY2VQb29sOjpnbG9iYWxT
dXJmYWNlUG9vbCgpLT53YWl0Rm9yQnVmZmVyKGJhY2tCdWZmZXIpOwogCi0gICAgICAgIC8vIE1v
ZGlmeSB0aGUgYnVmZmVyIG9ubHkgYWZ0ZXIgd2UndmUgd2FpdGVkIGZvciBpdCB0byBiZWNvbWUg
YXZhaWxhYmxlIGFib3ZlLgotICAgICAgICBib29sIGZyb250QnVmZmVySGFzVXNhYmxlQ29udGVu
dHMgPSBjdXJyZW50U3RhdGUtPmlzVGlsZUNvcnJlc3BvbmRpbmdUb0J1ZmZlcihpbmRleCwgZnJv
bnRCdWZmZXIpOwotICAgICAgICBpZiAoZnJvbnRCdWZmZXJIYXNVc2FibGVDb250ZW50cykKLSAg
ICAgICAgICAgIGNvcHlQcmV2aW91c0NvbnRlbnRzVG9UaWxlQnVmZmVyKGRpcnR5UmVjdCwgYmFj
a0J1ZmZlciwgZnJvbnRCdWZmZXIpOwotCiAgICAgICAgIC8vIEZJWE1FOiBtb2RpZnkgcmVuZGVy
IHRvIHRha2UgYSBWZWN0b3I8SW50UmVjdD4gcGFyYW1ldGVyIHNvIHdlJ3JlIG5vdCByZWNyZWF0
aW5nCiAgICAgICAgIC8vIEdyYXBoaWNzQ29udGV4dCBvbiB0aGUgc3RhY2sgZWFjaCB0aW1lLgog
ICAgICAgICByZW5kZXJDb250ZW50cyhuYXRpdmVCdWZmZXIsIHRpbGVPcmlnaW4sIGRpcnR5UmVj
dCk7CkBAIC0xMTM2LDE5ICsxMTI1LDIyIEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVu
ZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQogICAgICAgICAvLyBBZGQgdGhlIG5l
d2x5IHJlbmRlcmVkIHJlZ2lvbiB0byB0aGUgdGlsZSBzbyBpdCBjYW4ga2VlcCB0cmFjayBmb3Ig
YmxpdHMuCiAgICAgICAgIGJhY2tCdWZmZXItPmFkZFJlbmRlcmVkUmVnaW9uKGRpcnR5UmVjdCk7
CiAKLSAgICAgICAgLy8gVGhhbmtzIHRvIHRoZSBjb3B5UHJldmlvdXNDb250ZW50c1RvQmFja1N1
cmZhY2VPZlRpbGUoKSBjYWxsIGFib3ZlLCB3ZSBrbm93IHRoYXQKLSAgICAgICAgLy8gdGhlIHJl
bmRlcmVkIHJlZ2lvbiBvZiB0aGUgYmFjayBidWZmZXIgY29udGFpbnMgdGhlIHJlbmRlcmVkIHJl
Z2lvbiBvZiB0aGUgZnJvbnQgYnVmZmVyLgotICAgICAgICAvLyBBc3NlcnQgdGhpcyBqdXN0IHRv
IG1ha2Ugc3VyZS4KLSAgICAgICAgLy8gRm9yIHByZXZpb3VzbHkgZGlzcGxhY2VkIGJ1ZmZlcnMs
IHRoZSBmcm9udCBidWZmZXIncyByZW5kZXJlZCByZWdpb24gaXMgbm90IHJlbGV2YW50LgotICAg
ICAgICBBU1NFUlQoIWZyb250QnVmZmVySGFzVXNhYmxlQ29udGVudHMgfHwgYmFja0J1ZmZlci0+
aXNSZW5kZXJlZChmcm9udEJ1ZmZlci0+cmVuZGVyZWRSZWdpb24oKSwgY3VycmVudFNjYWxlKSk7
Ci0KKyAgICAgICAgcmVuZGVyZWRUaWxlcy5hcHBlbmQoaW5kZXgpOwogICAgICAgICBuZXdUaWxl
TWFwLnNldChpbmRleCwgYmFja0J1ZmZlcik7CiAgICAgfQogCiAgICAgbmV3R2VvbWV0cnktPnNl
dFRpbGVNYXAobmV3VGlsZU1hcCk7CiAgICAgYWRvcHRBc0Zyb250U3RhdGUobmV3R2VvbWV0cnkp
OwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gTGV0IHRoZSByZW5kZXIgcXVldWUga25vdyB0
aGF0IHRoZSB0aWxlIGNvbnRlbnRzIGFyZSB1cCB0byBkYXRlIG5vdy4KKyAgICBtX3JlbmRlclF1
ZXVlLT5jbGVhcihyZW5kZXJlZFRpbGVzLCBmcm9udFN0YXRlKCksIFJlbmRlclF1ZXVlOjpEb250
Q2xlYXJDb21wbGV0ZWRKb2JzKTsKKworI2lmIERFQlVHX0JBQ0tJTkdTVE9SRQorICAgIFBsYXRm
b3JtOjpsb2dBbHdheXMoUGxhdGZvcm06OkxvZ0xldmVsSW5mbywKKyAgICAgICAgIkJhY2tpbmdT
dG9yZVByaXZhdGU6OnJlbmRlciBkb25lIHJlbmRlcmluZyAlZCB0aWxlcy4iLAorICAgICAgICBy
ZW5kZXJlZFRpbGVzLnNpemUoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVuZGVyZWRUaWxlczsK
IH0KIAogdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZXF1ZXN0TGF5b3V0SWZOZWVkZWQoKSBj
b25zdApAQCAtMTE1NiwyMSArMTE0OCwyMSBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnJl
cXVlc3RMYXlvdXRJZk5lZWRlZCgpIGNvbnN0CiAgICAgbV93ZWJQYWdlLT5kLT5yZXF1ZXN0TGF5
b3V0SWZOZWVkZWQoKTsKIH0KIAotYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXJWaXNp
YmxlQ29udGVudHMoKQordm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXJBbmRCbGl0Vmlz
aWJsZUNvbnRlbnRzSW1tZWRpYXRlbHkoKQogewotICAgIHVwZGF0ZVRpbGVNYXRyaXhJZk5lZWRl
ZCgpOwotICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlbmRlclJlY3QgPSBzaG91bGREaXJlY3RSZW5k
ZXJpbmdUb1dpbmRvdygpID8gdmlzaWJsZUNvbnRlbnRzUmVjdCgpIDogdmlzaWJsZVRpbGVzUmVj
dChmcm9udFN0YXRlKCkpOwotICAgIGlmIChyZW5kZXIocmVuZGVyUmVjdCkpIHsKLSAgICAgICAg
bV9yZW5kZXJRdWV1ZS0+Y2xlYXIocmVuZGVyUmVjdCwgdHJ1ZSAvKmNsZWFyUmVndWxhclJlbmRl
ckpvYnMqLyk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmVuZGVyQW5kQmxpdEltbWVkaWF0ZWx5KHZpc2libGVDb250ZW50c1JlY3QoKSk7CiB9
CiAKLWJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVuZGVyQmFja2luZ1N0b3JlKCkKK3ZvaWQg
QmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVuZGVyQW5kQmxpdEltbWVkaWF0ZWx5KGNvbnN0IFBsYXRm
b3JtOjpJbnRSZWN0JiByZWN0KQogeworICAgIGlmIChzaG91bGREaXJlY3RSZW5kZXJpbmdUb1dp
bmRvdygpKSB7CisgICAgICAgIHJlbmRlckRpcmVjdFRvV2luZG93KHJlY3QpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgdXBkYXRlVGlsZU1hdHJpeElmTmVlZGVkKCk7Ci0gICAgcmV0
dXJuIHJlbmRlcihmcm9udFN0YXRlKCktPmJhY2tpbmdTdG9yZVJlY3QoKSk7CisgICAgbV9yZW5k
ZXJRdWV1ZS0+YWRkVG9RdWV1ZShSZW5kZXJRdWV1ZTo6VmlzaWJsZVpvb20sIHJlY3QpOworICAg
IHJlbmRlckpvYigpOwogfQogCiB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmNvcHlQcmV2aW91
c0NvbnRlbnRzVG9CYWNrU3VyZmFjZU9mV2luZG93KCkKQEAgLTExODYsMjcgKzExNzgsNiBAQCB2
b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmNvcHlQcmV2aW91c0NvbnRlbnRzVG9CYWNrU3VyZmFj
ZU9mV2luZG93KCkKICAgICB3aW5kb3dCYWNrQnVmZmVyU3RhdGUoKS0+YWRkQmxpdHRlZFJlZ2lv
bihwcmV2aW91c0NvbnRlbnRzUmVnaW9uKTsKIH0KIAotdm9pZCBCYWNraW5nU3RvcmVQcml2YXRl
Ojpjb3B5UHJldmlvdXNDb250ZW50c1RvVGlsZUJ1ZmZlcihjb25zdCBQbGF0Zm9ybTo6SW50UmVj
dCYgZXhjbHVkZUNvbnRlbnRzUmVjdCwgVGlsZUJ1ZmZlciogZHN0VGlsZUJ1ZmZlciwgVGlsZUJ1
ZmZlciogc3JjVGlsZUJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoZHN0VGlsZUJ1ZmZlcik7Ci0gICAg
QVNTRVJUKHNyY1RpbGVCdWZmZXIpOwotCi0gICAgUGxhdGZvcm06OkludFJlY3RSZWdpb24gcHJl
dmlvdXNDb250ZW50c1JlZ2lvbgotICAgICAgICA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpz
dWJ0cmFjdFJlZ2lvbnMoc3JjVGlsZUJ1ZmZlci0+cmVuZGVyZWRSZWdpb24oKSwgZXhjbHVkZUNv
bnRlbnRzUmVjdCk7Ci0KLSAgICBJbnRSZWN0TGlzdCBwcmV2aW91c0NvbnRlbnRzUmVjdHMgPSBw
cmV2aW91c0NvbnRlbnRzUmVnaW9uLnJlY3RzKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHByZXZpb3VzQ29udGVudHNSZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICBQbGF0Zm9y
bTo6SW50UmVjdCBwcmV2aW91c0NvbnRlbnRzUmVjdCA9IHByZXZpb3VzQ29udGVudHNSZWN0cy5h
dChpKTsKLSAgICAgICAgZHN0VGlsZUJ1ZmZlci0+YWRkUmVuZGVyZWRSZWdpb24ocHJldmlvdXND
b250ZW50c1JlY3QpOwotCi0gICAgICAgIHByZXZpb3VzQ29udGVudHNSZWN0Lm1vdmUoLXNyY1Rp
bGVCdWZmZXItPmxhc3RSZW5kZXJPcmlnaW4oKS54KCksIC1zcmNUaWxlQnVmZmVyLT5sYXN0UmVu
ZGVyT3JpZ2luKCkueSgpKTsKLSAgICAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpibGl0VG9CdWZmZXIoCi0gICAgICAgICAgICBkc3RUaWxlQnVmZmVyLT5uYXRpdmVCdWZmZXIo
KSwgcHJldmlvdXNDb250ZW50c1JlY3QsCi0gICAgICAgICAgICBzcmNUaWxlQnVmZmVyLT5uYXRp
dmVCdWZmZXIoKSwgcHJldmlvdXNDb250ZW50c1JlY3QpOwotICAgIH0KLX0KLQogdm9pZCBCYWNr
aW5nU3RvcmVQcml2YXRlOjpwYWludERlZmF1bHRCYWNrZ3JvdW5kKGNvbnN0IFBsYXRmb3JtOjpJ
bnRSZWN0JiBkc3RSZWN0LCBQbGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3Nvciogdmlld3BvcnRBY2Nl
c3NvciwgYm9vbCBmbHVzaCkKIHsKICAgICBQbGF0Zm9ybTo6SW50UmVjdCBjbGlwcGVkRHN0UmVj
dCA9IGRzdFJlY3Q7CkBAIC0xMjI1LDcgKzExOTYsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZh
dGU6OnBhaW50RGVmYXVsdEJhY2tncm91bmQoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGRzdFJl
YwogICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIG92ZXJTY3JvbGxSZWdpb24gPSBQbGF0Zm9y
bTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RSZWdpb25zKAogICAgICAgICBjbGlwcGVkRHN0UmVj
dCwgdmlld3BvcnRBY2Nlc3Nvci0+cGl4ZWxWaWV3cG9ydEZyb21Db250ZW50cyhwaXhlbENvbnRl
bnRzUmVjdCkpOwogCi0gICAgSW50UmVjdExpc3Qgb3ZlclNjcm9sbFJlY3RzID0gb3ZlclNjcm9s
bFJlZ2lvbi5yZWN0cygpOworICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpJbnRSZWN0PiBvdmVy
U2Nyb2xsUmVjdHMgPSBvdmVyU2Nyb2xsUmVnaW9uLnJlY3RzKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvdmVyU2Nyb2xsUmVjdHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUGxhdGZv
cm06OkludFJlY3Qgb3ZlclNjcm9sbFJlY3QgPSBvdmVyU2Nyb2xsUmVjdHMuYXQoaSk7CiAKQEAg
LTEzNTMsNyArMTMyNCw3IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6YmxpdFZpc2libGVD
b250ZW50cyhib29sIGZvcmNlKQogICAgICAgICAgICAgICAgID0gUGxhdGZvcm06OkludFJlY3RS
ZWdpb246OnN1YnRyYWN0UmVnaW9ucyh0cmFuc2Zvcm1lZFNyY1JlZ2lvbiwgYmFja2luZ1N0b3Jl
UmVnaW9uKTsKIAogICAgICAgICAgICAgLy8gQmxpdCBjaGVja2VyZWQgdG8gdGhvc2UgcGFydHMg
dGhhdCBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIGJhY2tpbmdTdG9yZVJlY3QuCi0gICAgICAgICAg
ICBJbnRSZWN0TGlzdCBjaGVja2VyZWRSZWN0cyA9IGNoZWNrZXJlZFJlZ2lvbi5yZWN0cygpOwor
ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OkludFJlY3Q+IGNoZWNrZXJlZFJlY3Rz
ID0gY2hlY2tlcmVkUmVnaW9uLnJlY3RzKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNoZWNrZXJlZFJlY3RzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgUGxh
dGZvcm06OkludFJlY3QgY2xpcHBlZERzdFJlY3QgPSB0cmFuc2Zvcm1hdGlvbi5tYXBSZWN0KFBs
YXRmb3JtOjpJbnRSZWN0KAogICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50UG9pbnQo
Y2hlY2tlcmVkUmVjdHMuYXQoaSkueCgpIC0gb3JpZ2luLngoKSwgY2hlY2tlcmVkUmVjdHMuYXQo
aSkueSgpIC0gb3JpZ2luLnkoKSksCkBAIC0xNDUzLDcgKzE0MjQsNyBAQCB2b2lkIEJhY2tpbmdT
dG9yZVByaXZhdGU6OmJsaXRWaXNpYmxlQ29udGVudHMoYm9vbCBmb3JjZSkKICAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXNUaWxlQ29ycmVzcG9uZGluZ1RvQnVmZmVyKSB7CiAgICAgICAgICAgICAg
ICAgLy8gSW50ZXJzZWN0IHRoZSByZW5kZXJlZCByZWdpb24uCiAgICAgICAgICAgICAgICAgUGxh
dGZvcm06OkludFJlY3RSZWdpb24gcmVuZGVyZWRSZWdpb24gPSB0aWxlQnVmZmVyLT5yZW5kZXJl
ZFJlZ2lvbigpOwotICAgICAgICAgICAgICAgIEludFJlY3RMaXN0IGRpcnR5UmVuZGVyZWRSZWN0
cyA9IHJlbmRlcmVkUmVnaW9uLnJlY3RzKCk7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8
UGxhdGZvcm06OkludFJlY3Q+IGRpcnR5UmVuZGVyZWRSZWN0cyA9IHJlbmRlcmVkUmVnaW9uLnJl
Y3RzKCk7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBkaXJ0eVJlbmRl
cmVkUmVjdHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm06Oklu
dFJlY3QgZGlydHlSZW5kZXJlZFJlY3QgPSBpbnRlcnNlY3Rpb24odGlsZVJlY3Quc2Vjb25kLCBk
aXJ0eVJlbmRlcmVkUmVjdHMuYXQoaikpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGlydHlS
ZW5kZXJlZFJlY3QuaXNFbXB0eSgpKQpAQCAtMTU1Nyw3ICsxNTI4LDcgQEAgdm9pZCBCYWNraW5n
U3RvcmVQcml2YXRlOjpjb21wb3NpdGVDb250ZW50cyhXZWJDb3JlOjpMYXllclJlbmRlcmVyKiBs
YXllclJlbmRlcmUKICAgICAgICAgPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RS
ZWdpb25zKHRyYW5zZm9ybWVkQ29udGVudHNSZWdpb24sIGJhY2tpbmdTdG9yZVJlZ2lvbik7CiAK
ICAgICAvLyBCbGl0IGNoZWNrZXJlZCB0byB0aG9zZSBwYXJ0cyB0aGF0IGFyZSBub3QgY292ZXJl
ZCBieSB0aGUgYmFja2luZ1N0b3JlUmVjdC4KLSAgICBJbnRSZWN0TGlzdCBjaGVja2VyZWRSZWN0
cyA9IGNoZWNrZXJlZFJlZ2lvbi5yZWN0cygpOworICAgIHN0ZDo6dmVjdG9yPFBsYXRmb3JtOjpJ
bnRSZWN0PiBjaGVja2VyZWRSZWN0cyA9IGNoZWNrZXJlZFJlZ2lvbi5yZWN0cygpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hlY2tlcmVkUmVjdHMuc2l6ZSgpOyArK2kpCiAgICAgICAg
IGxheWVyUmVuZGVyZXItPmRyYXdDaGVja2VyYm9hcmRQYXR0ZXJuKHRyYW5zZm9ybSwgbV93ZWJQ
YWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoV2ViQ29yZTo6SW50UmVjdChjaGVj
a2VyZWRSZWN0cy5hdChpKSkpKTsKIApAQCAtMTU4MCw3ICsxNTUxLDcgQEAgdm9pZCBCYWNraW5n
U3RvcmVQcml2YXRlOjpjb21wb3NpdGVDb250ZW50cyhXZWJDb3JlOjpMYXllclJlbmRlcmVyKiBs
YXllclJlbmRlcmUKIAogICAgICAgICAgICAgLy8gSW50ZXJzZWN0IHRoZSByZW5kZXJlZCByZWdp
b24gYW5kIGNsZWFyIHVucmVuZGVyZWQgcGFydHMuCiAgICAgICAgICAgICBQbGF0Zm9ybTo6SW50
UmVjdFJlZ2lvbiBub3RSZW5kZXJlZFJlZ2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpz
dWJ0cmFjdFJlZ2lvbnMoZGlydHlSZWN0LCB0aWxlQnVmZmVyLT5yZW5kZXJlZFJlZ2lvbigpKTsK
LSAgICAgICAgICAgIEludFJlY3RMaXN0IG5vdFJlbmRlcmVkUmVjdHMgPSBub3RSZW5kZXJlZFJl
Z2lvbi5yZWN0cygpOworICAgICAgICAgICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OkludFJlY3Q+
IG5vdFJlbmRlcmVkUmVjdHMgPSBub3RSZW5kZXJlZFJlZ2lvbi5yZWN0cygpOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub3RSZW5kZXJlZFJlY3RzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICAgICAgUGxhdGZvcm06OkludFJlY3QgdGlsZVN1cmZhY2VSZWN0ID0gbm90
UmVuZGVyZWRSZWN0cy5hdChpKTsKICAgICAgICAgICAgICAgICB0aWxlU3VyZmFjZVJlY3QubW92
ZSgtdGlsZU9yaWdpbi54KCksIC10aWxlT3JpZ2luLnkoKSk7CkBAIC0xNjU1LDE4ICsxNjI2LDE4
IEBAIGJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6aXNUaWxlVmlzaWJsZShjb25zdCBQbGF0Zm9y
bTo6SW50UG9pbnQmIG9yaWdpbikgY29uc3QKICAgICByZXR1cm4gUGxhdGZvcm06OkludFJlY3Qo
b3JpZ2luLCB0aWxlU2l6ZSgpKS5pbnRlcnNlY3RzKHZpc2libGVDb250ZW50c1JlY3QoKSk7CiB9
CiAKLVBsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVUaWxlc1Jl
Y3QoQmFja2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAorVGlsZUluZGV4TGlzdCBC
YWNraW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlVGlsZUluZGV4ZXMoQmFja2luZ1N0b3JlR2VvbWV0
cnkqIGdlb21ldHJ5KSBjb25zdAogewogICAgIFRpbGVNYXAgdGlsZU1hcCA9IGdlb21ldHJ5LT50
aWxlTWFwKCk7CisgICAgVGlsZUluZGV4TGlzdCB2aXNpYmxlVGlsZXM7CiAKLSAgICBQbGF0Zm9y
bTo6SW50UmVjdCByZWN0OwogICAgIFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRpbGVN
YXAuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRpbGVNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRp
bGVQaXhlbENvbnRlbnRzUmVjdChnZW9tZXRyeS0+b3JpZ2luT2ZUaWxlKGl0LT5rZXkpLCB0aWxl
U2l6ZSgpKTsKICAgICAgICAgaWYgKHRpbGVQaXhlbENvbnRlbnRzUmVjdC5pbnRlcnNlY3RzKHZp
c2libGVDb250ZW50c1JlY3QoKSkpCi0gICAgICAgICAgICByZWN0ID0gUGxhdGZvcm06OnVuaW9u
T2ZSZWN0cyhyZWN0LCB0aWxlUGl4ZWxDb250ZW50c1JlY3QpOworICAgICAgICAgICAgdmlzaWJs
ZVRpbGVzLmFwcGVuZChpdC0+a2V5KTsKICAgICB9Ci0gICAgcmV0dXJuIHJlY3Q7CisgICAgcmV0
dXJuIHZpc2libGVUaWxlczsKIH0KIAogUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJp
dmF0ZTo6dGlsZVZpc2libGVDb250ZW50c1JlY3QoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgQmFj
a2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdApAQCAtMTY5MywxNiArMTY2NCwxMSBA
QCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnJlc2V0UmVuZGVyUXVldWUoKQogICAgIG1fcmVu
ZGVyUXVldWUtPnJlc2V0KCk7CiB9CiAKLXZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6Y2xlYXJW
aXNpYmxlWm9vbSgpCi17Ci0gICAgbV9yZW5kZXJRdWV1ZS0+Y2xlYXJWaXNpYmxlWm9vbSgpOwot
fQotCiB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnJlc2V0VGlsZXMoKQogewogICAgIEJhY2tp
bmdTdG9yZUdlb21ldHJ5KiBjdXJyZW50U3RhdGUgPSBmcm9udFN0YXRlKCk7CiAKLSAgICBtX3Jl
bmRlclF1ZXVlLT5jbGVhcihjdXJyZW50U3RhdGUtPmJhY2tpbmdTdG9yZVJlY3QoKSwgdHJ1ZSAv
KmNsZWFyUmVndWxhclJlbmRlckpvYnMqLyk7CisgICAgbV9yZW5kZXJRdWV1ZS0+Y2xlYXIoY3Vy
cmVudFN0YXRlLT5iYWNraW5nU3RvcmVSZWN0KCksIFJlbmRlclF1ZXVlOjpDbGVhckFueUpvYnMp
OwogCiAgICAgQmFja2luZ1N0b3JlR2VvbWV0cnkqIG5ld0dlb21ldHJ5ID0gbmV3IEJhY2tpbmdT
dG9yZUdlb21ldHJ5OwogICAgIG5ld0dlb21ldHJ5LT5zZXRTY2FsZShjdXJyZW50U3RhdGUtPnNj
YWxlKCkpOwpAQCAtMTc4OCw3ICsxNzU0LDcgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjp1
cGRhdGVUaWxlc0ZvclNjcm9sbE9yTm90UmVuZGVyZWRSZWdpb24oYm9vbCBjaGVja0xvYWQKICAg
ICAgICAgICAgIHVwZGF0ZVRpbGUodGlsZU9yaWdpbiwgZmFsc2UgLyppbW1lZGlhdGUqLyk7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaXNWaXNpYmxlCiAgICAgICAgICAgICAmJiAoZm9yY2VWaXNpYmxl
IHx8ICF0aWxlQnVmZmVyIHx8ICF0aWxlQnVmZmVyLT5pc1JlbmRlcmVkKHRpbGVWaXNpYmxlQ29u
dGVudHNSZWN0KGluZGV4LCBjdXJyZW50U3RhdGUpLCBjdXJyZW50U3RhdGUtPnNjYWxlKCkpKQot
ICAgICAgICAgICAgJiYgIWlzQ3VycmVudFZpc2libGVKb2IoaW5kZXgsIHRpbGVCdWZmZXIsIGN1
cnJlbnRTdGF0ZSkpCisgICAgICAgICAgICAmJiAhaXNDdXJyZW50VmlzaWJsZUpvYihpbmRleCwg
Y3VycmVudFN0YXRlKSkKICAgICAgICAgICAgIHVwZGF0ZVRpbGUodGlsZU9yaWdpbiwgZmFsc2Ug
LyppbW1lZGlhdGUqLyk7CiAgICAgfQogfQpAQCAtMTc5OSwxMSArMTc2NSwxMiBAQCB2b2lkIEJh
Y2tpbmdTdG9yZVByaXZhdGU6OnVwZGF0ZVRpbGUoY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBv
cmlnaW4sIGJvb2wgaW1tZQogICAgICAgICByZXR1cm47CiAKICAgICBQbGF0Zm9ybTo6SW50UmVj
dCB1cGRhdGVSZWN0ID0gUGxhdGZvcm06OkludFJlY3Qob3JpZ2luLCB0aWxlU2l6ZSgpKTsKLSAg
ICBSZW5kZXJRdWV1ZTo6Sm9iVHlwZSBqb2JUeXBlID0gaXNUaWxlVmlzaWJsZShvcmlnaW4pID8g
UmVuZGVyUXVldWU6OlZpc2libGVTY3JvbGwgOiBSZW5kZXJRdWV1ZTo6Tm9uVmlzaWJsZVNjcm9s
bDsKICAgICBpZiAoaW1tZWRpYXRlKQotICAgICAgICByZW5kZXIodXBkYXRlUmVjdCk7Ci0gICAg
ZWxzZQorICAgICAgICByZW5kZXJBbmRCbGl0SW1tZWRpYXRlbHkodXBkYXRlUmVjdCk7CisgICAg
ZWxzZSB7CisgICAgICAgIFJlbmRlclF1ZXVlOjpKb2JUeXBlIGpvYlR5cGUgPSBpc1RpbGVWaXNp
YmxlKG9yaWdpbikgPyBSZW5kZXJRdWV1ZTo6VmlzaWJsZVNjcm9sbCA6IFJlbmRlclF1ZXVlOjpO
b25WaXNpYmxlU2Nyb2xsOwogICAgICAgICBtX3JlbmRlclF1ZXVlLT5hZGRUb1F1ZXVlKGpvYlR5
cGUsIHVwZGF0ZVJlY3QpOworICAgIH0KIH0KIAogQmFja2luZ1N0b3JlUHJpdmF0ZTo6VGlsZVJl
Y3RMaXN0IEJhY2tpbmdTdG9yZVByaXZhdGU6Om1hcEZyb21QaXhlbENvbnRlbnRzVG9UaWxlcyhj
b25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCwgQmFja2luZ1N0b3JlR2VvbWV0cnkqIGdlb21l
dHJ5KSBjb25zdApAQCAtMTg3NywxOCArMTg0NCwxOSBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZh
dGU6OnRyYW5zZm9ybUNoYW5nZWQoKQogICAgICAgICBpZiAoIWhhc0N1cnJlbnRWaXNpYmxlWm9v
bUpvYikKICAgICAgICAgICAgIG1fdmlzaWJsZVRpbGVCdWZmZXJSZWN0ID0gdmlzaWJsZUNvbnRl
bnRzUmVjdCgpOyAvLyBDYWNoZSB0aGlzIGZvciBibGl0VmlzaWJsZUNvbnRlbnRzLgogCisgICAg
ICAgIC8vIEZJWE1FOiBXaXRoIG1fcmVuZGVyUXVldWUtPnJlc2V0KCkgY2FsbGVkIHJpZ2h0IGFm
dGVyd2FyZHMsIHRoaXMgY2FsbAorICAgICAgICAvLyAgIHNlZW1zIGxpa2UgYSBwb2ludGxlc3Mg
ZXhlcmNpc2UuIEZpZ3VyZSBvdXQgaG93IHRvIGRlYWwgd2l0aCBpdC4KKyAgICAgICAgbV9yZW5k
ZXJRdWV1ZS0+YWRkVG9RdWV1ZShSZW5kZXJRdWV1ZTo6VmlzaWJsZVpvb20sIHZpc2libGVDb250
ZW50c1JlY3QoKSk7CisKICAgICAgICAgLy8gQWRkIHRoZSBjdXJyZW50bHkgdmlzaWJsZSB0aWxl
cyB0byB0aGUgcmVuZGVyIHF1ZXVlIGFzIHZpc2libGUgem9vbSBqb2JzLgogICAgICAgICBUaWxl
UmVjdExpc3QgdGlsZVJlY3RMaXN0ID0gbWFwRnJvbVBpeGVsQ29udGVudHNUb1RpbGVzKHZpc2li
bGVDb250ZW50c1JlY3QoKSwgY3VycmVudFN0YXRlKTsKKwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRpbGVSZWN0TGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgVGlsZVJl
Y3QgdGlsZVJlY3QgPSB0aWxlUmVjdExpc3RbaV07CiAgICAgICAgICAgICBUaWxlSW5kZXggaW5k
ZXggPSB0aWxlUmVjdC5maXJzdDsKICAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5
UmVjdCA9IHRpbGVSZWN0LnNlY29uZDsKICAgICAgICAgICAgIFRpbGVCdWZmZXIqIHRpbGVCdWZm
ZXIgPSBjdXJyZW50TWFwLmdldChpbmRleCk7CiAKLSAgICAgICAgICAgIC8vIEludmFsaWRhdGUg
dGhlIHdob2xlIHJlY3QuCi0gICAgICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCB3aG9sZVJlY3Qo
Y3VycmVudFN0YXRlLT5vcmlnaW5PZlRpbGUoaW5kZXgpLCB0aWxlU2l6ZSgpKTsKLSAgICAgICAg
ICAgIG1fcmVuZGVyUXVldWUtPmFkZFRvUXVldWUoUmVuZGVyUXVldWU6OlZpc2libGVab29tLCB3
aG9sZVJlY3QpOwotCiAgICAgICAgICAgICBpZiAoIXRpbGVCdWZmZXIpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKQEAgLTI0OTQsMTggKzI0NjIsMjggQEAgYm9vbCBCYWNraW5nU3RvcmVQ
cml2YXRlOjppc0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJuIEJhY2tpbmdTdG9yZVByaXZhdGU6
OnNfY3VycmVudEJhY2tpbmdTdG9yZU93bmVyID09IG1fd2ViUGFnZSAmJiBTdXJmYWNlUG9vbDo6
Z2xvYmFsU3VyZmFjZVBvb2woKS0+aXNBY3RpdmUoKTsKIH0KIAotdm9pZCBCYWNraW5nU3RvcmVQ
cml2YXRlOjpkaWRSZW5kZXJDb250ZW50KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZW5kZXJl
ZFJlY3QpCit2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmRpZFJlbmRlckNvbnRlbnQoY29uc3Qg
UGxhdGZvcm06OkludFJlY3RSZWdpb24mIHJlbmRlcmVkUmVnaW9uKQogewogICAgIGlmIChpc1Nj
cm9sbGluZ09yWm9vbWluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXNob3VsZERp
cmVjdFJlbmRlcmluZ1RvV2luZG93KCkpIHsKLSAgICAgICAgaWYgKCFtX3dlYlBhZ2UtPmQtPm5l
ZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSkKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisgICAgICAgIGlmIChtX3dlYlBhZ2UtPmQtPm5lZWRzT25lU2hvdERyYXdp
bmdTeW5jaHJvbml6YXRpb24oKSkKKyAgICAgICAgICAgIG1fd2ViUGFnZS0+ZC0+Y29tbWl0Um9v
dExheWVySWZOZWVkZWQoKTsKKyAgICAgICAgZWxzZQorI2VuZGlmCiAgICAgICAgICAgICBibGl0
VmlzaWJsZUNvbnRlbnRzKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGludmFsaWRhdGVXaW5kb3co
KTsKIAotICAgIG1fd2ViUGFnZS0+Y2xpZW50KCktPm5vdGlmeVBpeGVsQ29udGVudFJlbmRlcmVk
KHJlbmRlcmVkUmVjdCk7CisgICAgLy8gRG9uJ3QgaXNzdWUgY29udGVudCByZW5kZXJlZCBjYWxs
cyB3aGVuIGFsbCB3ZSByZW5kZXJlZCB3YXMgZmlsbGVyCisgICAgLy8gYmFja2dyb3VuZCBjb2xv
ciBiZWZvcmUgdGhlIHBhZ2UgaXMgY29tbWl0dGVkLgorICAgIGlmICghbV9jbGllbnQtPmNvbnRl
bnRzU2l6ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICBzdGQ6OnZlY3RvcjxQbGF0Zm9ybTo6SW50
UmVjdD4gcmVuZGVyZWRSZWN0cyA9IHJlbmRlcmVkUmVnaW9uLnJlY3RzKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyZWRSZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG1fd2ViUGFnZS0+Y2xpZW50KCktPm5vdGlmeVBpeGVsQ29udGVudFJlbmRlcmVkKHJlbmRl
cmVkUmVjdHNbaV0pOworICAgIH0KIH0KIAogQmFja2luZ1N0b3JlOjpCYWNraW5nU3RvcmUoV2Vi
UGFnZSogd2ViUGFnZSwgQmFja2luZ1N0b3JlQ2xpZW50KiBjbGllbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZV9wLmggYi9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZV9wLmgKaW5kZXggODM2ZjBkOTI3NzM1ODg1
ZjlmNmJlYmI5MWRiOGIwZDU0NzJiODc4YS4uNTI5ODZkZDM4MTBiYmRlMjRmYzQzMTc0MjU4ZWMw
MzA0MTMwNjJjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNr
aW5nU3RvcmVfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0
b3JlX3AuaApAQCAtMTc3LDEyICsxNzcsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QmFja2lu
Z1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYsIGRvdWJsZSBzY2FsZSk7CiAgICAg
dm9pZCB1cGRhdGVUaWxlc0FmdGVyQmFja2luZ1N0b3JlUmVjdENoYW5nZSgpOwogCi0gICAgdHlw
ZWRlZiBXVEY6OlZlY3RvcjxUaWxlSW5kZXg+IFRpbGVJbmRleExpc3Q7CiAgICAgVGlsZUluZGV4
TGlzdCBpbmRleGVzRm9yQmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYp
IGNvbnN0OworICAgIFRpbGVJbmRleExpc3QgaW5kZXhlc0ZvclZpc2libGVDb250ZW50c1JlY3Qo
QmFja2luZ1N0b3JlR2VvbWV0cnkqKSBjb25zdDsKIAogICAgIFRpbGVJbmRleCBpbmRleE9mVGls
ZShjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIG9yaWdpbiwgY29uc3QgUGxhdGZvcm06OkludFJl
Y3QmIGJhY2tpbmdTdG9yZVJlY3QpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJBbmRVcGRhdGVUaWxl
T2ZOb3RSZW5kZXJlZFJlZ2lvbihjb25zdCBUaWxlSW5kZXgmLCBUaWxlQnVmZmVyKiwgY29uc3Qg
UGxhdGZvcm06OkludFJlY3RSZWdpb24mLCBCYWNraW5nU3RvcmVHZW9tZXRyeSosIGJvb2wgdXBk
YXRlID0gdHJ1ZSk7Ci0gICAgYm9vbCBpc0N1cnJlbnRWaXNpYmxlSm9iKGNvbnN0IFRpbGVJbmRl
eCYsIFRpbGVCdWZmZXIqLCBCYWNraW5nU3RvcmVHZW9tZXRyeSopIGNvbnN0OworICAgIGJvb2wg
aXNDdXJyZW50VmlzaWJsZUpvYihjb25zdCBUaWxlSW5kZXgmLCBCYWNraW5nU3RvcmVHZW9tZXRy
eSopIGNvbnN0OwogCiAgICAgLy8gTm90IHRocmVhZCBzYWZlLiBDYWxsIG9ubHkgd2hlbiB0aHJl
YWRzIGFyZSBpbiBzeW5jLgogICAgIHZvaWQgY2xlYXJSZW5kZXJlZFJlZ2lvbihUaWxlQnVmZmVy
KiwgY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mKTsKQEAgLTE5MSwyMSArMTkxLDIzIEBA
IHB1YmxpYzoKICAgICAvLyB0aWxlIG1hdHJpeCBnZW9tZXRyeS4KICAgICB2b2lkIHNjcm9sbEJh
Y2tpbmdTdG9yZShpbnQgZGVsdGFYLCBpbnQgZGVsdGFZKTsKIAotICAgIC8vIFJlbmRlciB0aGUg
dGlsZXMgZGlydHkgcmVjdCBhbmQgaW52YWxpZGF0ZSB0aGUgc2NyZWVuLgotICAgIGJvb2wgcmVu
ZGVyRGlyZWN0VG9XaW5kb3coY29uc3QgUGxhdGZvcm06OkludFJlY3QmKTsKKyAgICAvLyBSZW5k
ZXIgdGhlIGdpdmVuIGRpcnR5IHJlY3QgYW5kIGludmFsaWRhdGUgdGhlIHNjcmVlbi4KKyAgICBQ
bGF0Zm9ybTo6SW50UmVjdCByZW5kZXJEaXJlY3RUb1dpbmRvdyhjb25zdCBQbGF0Zm9ybTo6SW50
UmVjdCYpOwogCi0gICAgLy8gUmVuZGVyIHRoZSB0aWxlcyBkaXJ0eSByZWN0LgotICAgIC8vIE5P
VEU6IFRoaXMgd2lsbCBub3QgdXBkYXRlIHRoZSBzY3JlZW4uIFRvIGRvIHRoYXQgeW91IHNob3Vs
ZCBjYWxsCi0gICAgLy8gYmxpdFZpc2libGVDb250ZW50cygpIGFmdGVyIHRoaXMgbWV0aG9kLgot
ICAgIGJvb2wgcmVuZGVyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0Jik7CisgICAgLy8gUmVuZGVy
IHRoZSBnaXZlbiB0aWxlcyBpZiBlbm91Z2ggYmFjayBidWZmZXJzIGFyZSBhdmFpbGFibGUuCisg
ICAgLy8gUmV0dXJuIHRoZSBhY3R1YWwgc2V0IG9mIHJlbmRlcmVkIHRpbGVzLgorICAgIC8vIE5P
VEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IFJlbmRlclF1ZXVlIGFuZCByZXN1bWVT
Y3JlZW5VcGRhdGVzKCkuCisgICAgLy8gICBJZiB5b3Ugd2FudCB0byByZW5kZXIgdG8gZ2V0IGNv
bnRlbnRzIHRvIHRoZSBzY3JlZW4sIHlvdSBzaG91bGQgY2FsbAorICAgIC8vICAgcmVuZGVyQW5k
QmxpdEltbWVkaWF0ZWx5KCkgb3IgcmVuZGVyQW5kQmxpdFZpc2libGVDb250ZW50c0ltbWVkaWF0
ZWx5KCkuCisgICAgVGlsZUluZGV4TGlzdCByZW5kZXIoY29uc3QgVGlsZUluZGV4TGlzdCYpOwog
CiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSByZW5kZXIgcXVldWUgdG8gZW5zdXJlIHRoYXQgdGhlIHF1
ZXVlIGlzIGluIGEKICAgICAvLyBjb25zdGFudCBzdGF0ZSBiZWZvcmUgcGVyZm9ybWluZyBhIHJl
bmRlciBqb2IuCiAgICAgdm9pZCByZXF1ZXN0TGF5b3V0SWZOZWVkZWQoKSBjb25zdDsKIAogICAg
IC8vIEhlbHBlciByZW5kZXIgbWV0aG9kcy4KLSAgICBib29sIHJlbmRlclZpc2libGVDb250ZW50
cygpOwotICAgIGJvb2wgcmVuZGVyQmFja2luZ1N0b3JlKCk7CisgICAgdm9pZCByZW5kZXJBbmRC
bGl0VmlzaWJsZUNvbnRlbnRzSW1tZWRpYXRlbHkoKTsKKyAgICB2b2lkIHJlbmRlckFuZEJsaXRJ
bW1lZGlhdGVseShjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYpOwogICAgIHZvaWQgYmxpdFZpc2li
bGVDb250ZW50cyhib29sIGZvcmNlID0gZmFsc2UpOwogCiAgICAgLy8gQXNzdW1lcyB0aGUgcmVj
dCB0byBiZSBpbiB3aW5kb3cvdmlld3BvcnQgY29vcmRpbmF0ZXMuCkBAIC0yNDEsNyArMjQzLDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNUaWxlVmlzaWJsZShjb25zdCBQbGF0Zm9ybTo6SW50UG9p
bnQmKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgYSByZWN0IHRoYXQgaXMgdGhlIHVuaW9uIG9m
IGFsbCB0aWxlcyB0aGF0IGFyZSB2aXNpYmxlLgotICAgIFBsYXRmb3JtOjpJbnRSZWN0IHZpc2li
bGVUaWxlc1JlY3QoQmFja2luZ1N0b3JlR2VvbWV0cnkqKSBjb25zdDsKKyAgICBUaWxlSW5kZXhM
aXN0IHZpc2libGVUaWxlSW5kZXhlcyhCYWNraW5nU3RvcmVHZW9tZXRyeSopIGNvbnN0OwogCiAg
ICAgLy8gVXNlZCB0byBjbGlwIHRvIHRoZSB2aXNpYmxlIGNvbnRlbnQgZm9yIGluc3RhbmNlLgog
ICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRpbGVWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFRpbGVJ
bmRleCYsIEJhY2tpbmdTdG9yZUdlb21ldHJ5KikgY29uc3Q7CkBAIC0yNTEsOCArMjUzLDYgQEAg
cHVibGljOgogCiAgICAgLy8gVGhpcyBpcyBjYWxsZWQgYnkgV2ViUGFnZSBvbmNlIGxvYWQgaXMg
Y29tbWl0dGVkIHRvIHJlc2V0IHRoZSByZW5kZXIgcXVldWUuCiAgICAgdm9pZCByZXNldFJlbmRl
clF1ZXVlKCk7Ci0gICAgLy8gVGhpcyBpcyBjYWxsZWQgYnkgRnJhbWVMb2FkZXJDbGllbnQgdGhh
dCBleHBsaWNpdGx5IHBhaW50cyBvbiBmaXJzdCB2aXNpYmxlIGxheW91dC4KLSAgICB2b2lkIGNs
ZWFyVmlzaWJsZVpvb20oKTsKIAogICAgIC8vIFRoaXMgaXMgY2FsbGVkIGJ5IFdlYlBhZ2Ugb25j
ZSBsb2FkIGlzIGNvbW1pdHRlZCB0byByZXNldCBhbGwgdGhlIHRpbGVzLgogICAgIHZvaWQgcmVz
ZXRUaWxlcygpOwpAQCAtMzM5LDcgKzMzOSw3IEBAIHB1YmxpYzoKICAgICBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6SW50U2l6ZSBzdXJmYWNlU2l6ZSgpIGNvbnN0OwogICAgIEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBidWZmZXIoKSBjb25zdDsKIAotICAgIHZvaWQgZGlk
UmVuZGVyQ29udGVudChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVuZGVyZWRSZWN0KTsKKyAg
ICB2b2lkIGRpZFJlbmRlckNvbnRlbnQoY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mIHJl
bmRlcmVkUmVnaW9uKTsKIAogICAgIHN0YXRpYyBXZWJQYWdlKiBzX2N1cnJlbnRCYWNraW5nU3Rv
cmVPd25lcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKaW5kZXgg
NWNhOWQyNzQ5MDAxNGU2ZjYxMWYwNzdjOGMyYzQ0MzlmNWU4ZWExZi4uYmMyZmNlYzQ1NGViZWU5
NTFiZTY5OGYzNDA1OTY5NzZlNjRiZmU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L1dlYlBhZ2UuY3BwCkBAIC0xMDUzLDEwICsxMDUzLDkgQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6
c2V0TG9hZFN0YXRlKExvYWRTdGF0ZSBzdGF0ZSkKICAgICBzd2l0Y2ggKG1fbG9hZFN0YXRlKSB7
CiAgICAgY2FzZSBQcm92aXNpb25hbDoKICAgICAgICAgaWYgKGlzRmlyc3RMb2FkKSB7Ci0gICAg
ICAgICAgICAvLyBQYWludHMgdGhlIHZpc2libGUgYmFja2luZ3N0b3JlIGFzIHdoaXRlIHRvIHBy
ZXZlbnQgaW5pdGlhbCBjaGVja2VyYm9hcmQgb24KLSAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBi
bGl0LgotICAgICAgICAgICAgaWYgKG1fYmFja2luZ1N0b3JlLT5kLT5yZW5kZXJWaXNpYmxlQ29u
dGVudHMoKSAmJiAhbV9iYWNraW5nU3RvcmUtPmQtPmlzU3VzcGVuZGVkKCkgJiYgIW1fYmFja2lu
Z1N0b3JlLT5kLT5zaG91bGREaXJlY3RSZW5kZXJpbmdUb1dpbmRvdygpKQotICAgICAgICAgICAg
ICAgIG1fYmFja2luZ1N0b3JlLT5kLT5ibGl0VmlzaWJsZUNvbnRlbnRzKCk7CisgICAgICAgICAg
ICAvLyBQYWludHMgdGhlIHZpc2libGUgYmFja2luZ3N0b3JlIGFzIHNldHRpbmdzKCktPmJhY2tn
cm91bmRDb2xvcigpCisgICAgICAgICAgICAvLyB0byBwcmV2ZW50IGluaXRpYWwgY2hlY2tlcmJv
YXJkIG9uIHRoZSBmaXJzdCBibGl0LgorICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmQtPnJl
bmRlckFuZEJsaXRWaXNpYmxlQ29udGVudHNJbW1lZGlhdGVseSgpOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29tbWl0dGVkOgpAQCAtMTEzOSwxNCArMTEzOCwxMSBAQCB2
b2lkIFdlYlBhZ2VQcml2YXRlOjpzZXRMb2FkU3RhdGUoTG9hZFN0YXRlIHN0YXRlKQogCiAgICAg
ICAgICAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gc3VzcGVuZC9yZXN1bWUgYm90
aCBiYWNraW5nc3RvcmUgYW5kIHNjcmVlbiBoZXJlPwogICAgICAgICAgICAgbV9iYWNraW5nU3Rv
cmUtPmQtPnJlc3VtZUJhY2tpbmdTdG9yZVVwZGF0ZXMoKTsKLSAgICAgICAgICAgIG1fYmFja2lu
Z1N0b3JlLT5kLT5yZXN1bWVTY3JlZW5VcGRhdGVzKEJhY2tpbmdTdG9yZTo6Tm9uZSk7Ci0KICAg
ICAgICAgICAgIC8vIFBhaW50cyB0aGUgdmlzaWJsZSBiYWNraW5nc3RvcmUgYXMgd2hpdGUuIE5v
dGUgaXQgaXMgaW1wb3J0YW50IHdlIGRvCiAgICAgICAgICAgICAvLyB0aGlzIHN0cmljdGx5IGFm
dGVyIHJlLXNldHRpbmcgdGhlIHNjcm9sbCBwb3NpdGlvbiB0byBvcmlnaW4gYW5kIHJlc2V0dGlu
ZwogICAgICAgICAgICAgLy8gdGhlIHNjYWxlcyBvdGhlcndpc2UgdGhlIHZpc2libGUgY29udGVu
dHMgY2FsY3VsYXRpb24gaXMgd3JvbmcgYW5kIHdlCiAgICAgICAgICAgICAvLyBjYW4gZW5kIHVw
IGJsaXR0aW5nIGFydGlmYWN0cyBpbnN0ZWFkLiBTZWU6IFJJTSBCdWcgIzQwMS4KLSAgICAgICAg
ICAgIGlmIChtX2JhY2tpbmdTdG9yZS0+ZC0+cmVuZGVyVmlzaWJsZUNvbnRlbnRzKCkgJiYgIW1f
YmFja2luZ1N0b3JlLT5kLT5pc1N1c3BlbmRlZCgpICYmICFtX2JhY2tpbmdTdG9yZS0+ZC0+c2hv
dWxkRGlyZWN0UmVuZGVyaW5nVG9XaW5kb3coKSkKLSAgICAgICAgICAgICAgICBtX2JhY2tpbmdT
dG9yZS0+ZC0+YmxpdFZpc2libGVDb250ZW50cygpOworICAgICAgICAgICAgbV9iYWNraW5nU3Rv
cmUtPmQtPnJlc3VtZVNjcmVlblVwZGF0ZXMoQmFja2luZ1N0b3JlOjpSZW5kZXJBbmRCbGl0KTsK
IAogICAgICAgICAgICAgLy8gVXBkYXRlIGN1cnNvciBzdGF0dXMuCiAgICAgICAgICAgICB1cGRh
dGVDdXJzb3IoKTsKQEAgLTEyNzEsMTMgKzEyNjcsNiBAQCBib29sIFdlYlBhZ2VQcml2YXRlOjp6
b29tQWJvdXRQb2ludChkb3VibGUgdW5jbGFtcGVkU2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIGFu
YwogICAgIG1fYmFja2luZ1N0b3JlLT5kLT51cGRhdGVUaWxlcyhpc0xvYWRpbmcgLyogdXBkYXRl
VmlzaWJsZSAqLywgZmFsc2UgLyogaW1tZWRpYXRlICovKTsKIAogICAgIGJvb2wgc2hvdWxkUmVu
ZGVyID0gIWlzTG9hZGluZyB8fCBtX3VzZXJQZXJmb3JtZWRNYW51YWxab29tIHx8IGZvcmNlUmVu
ZGVyaW5nOwotICAgIGJvb2wgc2hvdWxkQ2xlYXJWaXNpYmxlWm9vbSA9IGlzTG9hZGluZyAmJiBz
aG91bGRSZW5kZXI7Ci0KLSAgICBpZiAoc2hvdWxkQ2xlYXJWaXNpYmxlWm9vbSkgewotICAgICAg
ICAvLyBJZiB3ZSBhcmUgbG9hZGluZyBhbmQgcmVuZGVyaW5nIHRoZW4gd2UgbmVlZCB0byBjbGVh
ciB0aGUgcmVuZGVyIHF1ZXVlJ3MKLSAgICAgICAgLy8gdmlzaWJsZSB6b29tIGpvYnMgYXMgdGhl
eSB3aWxsIGJlIGlycmVsZXZhbnQgd2l0aCB0aGUgcmVuZGVyIGJlbG93LgotICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+ZC0+Y2xlYXJWaXNpYmxlWm9vbSgpOwotICAgIH0KIAogICAgIG1fY2xpZW50
LT5zY2FsZUNoYW5nZWQoKTsKIApAQCAtMzU2NiwxMyArMzU1NSw3IEBAIHZvaWQgV2ViUGFnZVBy
aXZhdGU6OnJlc3VtZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5kLT5y
ZXNldFRpbGVzKCk7CiAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5kLT51cGRhdGVUaWxlcyhmYWxz
ZSAvKiB1cGRhdGVWaXNpYmxlICovLCBmYWxzZSAvKiBpbW1lZGlhdGUgKi8pOwogCi0gICAgICAg
IC8vIFRoaXMgdmFsdWUgbWF5IGhhdmUgY2hhbmdlZCwgc28gd2UgbmVlZCB0byB1cGRhdGUgaXQu
Ci0gICAgICAgIGRpcmVjdFJlbmRlcmluZyA9IG1fYmFja2luZ1N0b3JlLT5kLT5zaG91bGREaXJl
Y3RSZW5kZXJpbmdUb1dpbmRvdygpOwotICAgICAgICBpZiAobV9iYWNraW5nU3RvcmUtPmQtPnJl
bmRlclZpc2libGVDb250ZW50cygpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3Jl
LT5kLT5pc1N1c3BlbmRlZCgpICYmICFkaXJlY3RSZW5kZXJpbmcpCi0gICAgICAgICAgICAgICAg
bV9iYWNraW5nU3RvcmUtPmQtPmJsaXRWaXNpYmxlQ29udGVudHMoKTsKLSAgICAgICAgICAgIG1f
Y2xpZW50LT5ub3RpZnlQaXhlbENvbnRlbnRSZW5kZXJlZChtX2JhY2tpbmdTdG9yZS0+ZC0+dmlz
aWJsZUNvbnRlbnRzUmVjdCgpKTsKLSAgICAgICAgfQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+
ZC0+cmVuZGVyQW5kQmxpdFZpc2libGVDb250ZW50c0ltbWVkaWF0ZWx5KCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKG1fYmFja2luZ1N0b3JlLT5kLT5pc09wZW5HTENvbXBvc2l0aW5nKCkp
CiAgICAgICAgICAgIHNldENvbXBvc2l0b3JEcmF3c1Jvb3RMYXllcihmYWxzZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yLmNwcCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZUNvbXBvc2l0b3IuY3BwCmluZGV4
IGZhNjIyZGE0MTBiYjAzNWI5ZGNlNmM1MTI2NTdjNGE5NjYzYzE1NGQuLmRhMzM0NjQ4NGQ3NWI4
YzUyNmY1OTkxYjA2Y2VlMzI5ZmNhOGNhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViUGFnZUNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViUGFnZUNvbXBvc2l0b3IuY3BwCkBAIC0yMzksNyArMjM5LDcgQEAgdm9p
ZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OmFuaW1hdGlvbkZyYW1lQ2hhbmdlZCgpCiAgICAg
ICAgIHVzaW5nIG5hbWVzcGFjZSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTsKIAogICAgICAgICBiYWNr
aW5nU3RvcmUtPmQtPnNldERpcmVjdFJlbmRlcmluZ0FuaW1hdGlvbk1lc3NhZ2VTY2hlZHVsZWQo
KTsKLSAgICAgICAgd2ViS2l0VGhyZWFkTWVzc2FnZUNsaWVudCgpLT5kaXNwYXRjaE1lc3NhZ2Uo
Y3JlYXRlTWV0aG9kQ2FsbE1lc3NhZ2UoJkJhY2tpbmdTdG9yZVByaXZhdGU6OnJlbmRlclZpc2li
bGVDb250ZW50cywgYmFja2luZ1N0b3JlLT5kKSk7CisgICAgICAgIHdlYktpdFRocmVhZE1lc3Nh
Z2VDbGllbnQoKS0+ZGlzcGF0Y2hNZXNzYWdlKGNyZWF0ZU1ldGhvZENhbGxNZXNzYWdlKCZCYWNr
aW5nU3RvcmVQcml2YXRlOjpyZW5kZXJBbmRCbGl0VmlzaWJsZUNvbnRlbnRzSW1tZWRpYXRlbHks
IGJhY2tpbmdTdG9yZS0+ZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCmluZGV4IDZhYzhmNDAzMGRiZTg2ZmJk
MWIzNTUxMTdhZDFhMjQxZjU0NmJhOTguLmI5ZWJkNTZlMzE1NTU5NWI0NGE4ZDg0NDA4Mzk2Mzcx
ODIzOTRhZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3Bw
CkBAIC04OTUsMTEgKzg5NSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Ojpk
aXNwYXRjaERpZExheW91dChMYXlvdXRNaWxlc3RvbmVzIG1pbGVzdG9uZXMpCiAgICAgICAgICAg
ICBCYWNraW5nU3RvcmVQcml2YXRlKiBiYWNraW5nU3RvcmVQcml2YXRlID0gbV93ZWJQYWdlUHJp
dmF0ZS0+bV9iYWNraW5nU3RvcmUtPmQ7CiAgICAgICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT56
b29tVG9Jbml0aWFsU2NhbGVPbkxvYWQoKTsgLy8gU2V0IHRoZSBwcm9wZXIgem9vbSBsZXZlbCBm
aXJzdC4KICAgICAgICAgICAgIGJhY2tpbmdTdG9yZVByaXZhdGUtPmNsZWFyVmlzaWJsZVpvb20o
KTsgLy8gQ2xlYXIgdGhlIHZpc2libGUgem9vbSBzaW5jZSB3ZSdyZSBleHBsaWNpdGx5IHJlbmRl
cmluZytibGl0dGluZyBiZWxvdy4KLSAgICAgICAgICAgIGlmIChiYWNraW5nU3RvcmVQcml2YXRl
LT5yZW5kZXJWaXNpYmxlQ29udGVudHMoKSkgewotICAgICAgICAgICAgICAgIGlmICghYmFja2lu
Z1N0b3JlUHJpdmF0ZS0+c2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9XaW5kb3coKSkKLSAgICAgICAg
ICAgICAgICAgICAgYmFja2luZ1N0b3JlUHJpdmF0ZS0+YmxpdFZpc2libGVDb250ZW50cygpOwot
ICAgICAgICAgICAgICAgIG1fd2ViUGFnZVByaXZhdGUtPm1fY2xpZW50LT5ub3RpZnlQaXhlbENv
bnRlbnRSZW5kZXJlZChiYWNraW5nU3RvcmVQcml2YXRlLT52aXNpYmxlQ29udGVudHNSZWN0KCkp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYmFja2luZ1N0b3JlUHJpdmF0ZS0+cmVuZGVy
QW5kQmxpdFZpc2libGVDb250ZW50c0ltbWVkaWF0ZWx5KCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVudC0+bm90aWZ5Rmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9SZW5kZXJRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9SZW5kZXJRdWV1ZS5jcHAKaW5kZXggNjE2NGE3OTg1YmIxZDNjNDFhOGViYzk0MmNmYjYx
YWI4NGFkMjgxMC4uODU1NWQxNDI3YTRhMWNlZjM4NGQ5MTI4ZDU4YmM5ZGQ5ZDFlMjY2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUmVuZGVyUXVl
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1JlbmRl
clF1ZXVlLmNwcApAQCAtMjAsOSArMjAsMTIgQEAKICNpbmNsdWRlICJSZW5kZXJRdWV1ZS5oIgog
CiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlX3AuaCIKKyNpbmNsdWRlICJTdXJmYWNlUG9vbC5oIgog
I2luY2x1ZGUgIldlYlBhZ2VDbGllbnQuaCIKICNpbmNsdWRlICJXZWJQYWdlX3AuaCIKIAorI2lu
Y2x1ZGUgPHd0Zi9Ob25Db3B5aW5nU29ydC5oPgorCiAjZGVmaW5lIERFQlVHX1JFTkRFUl9RVUVV
RSAwCiAjZGVmaW5lIERFQlVHX1JFTkRFUl9RVUVVRV9TT1JUIDAKIApAQCAtMzUsMTcgKzM4LDE3
IEBAIG5hbWVzcGFjZSBCbGFja0JlcnJ5IHsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB0ZW1wbGF0
ZTxTb3J0RGlyZWN0aW9uIHNvcnREaXJlY3Rpb24+Ci1zdGF0aWMgaW5saW5lIGludCBjb21wYXJl
UmVjdE9uZURpcmVjdGlvbihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcjEsIGNvbnN0IFBsYXRm
b3JtOjpJbnRSZWN0JiByMikKK3N0YXRpYyBpbmxpbmUgaW50IGNvbXBhcmVSZWN0T25lRGlyZWN0
aW9uKGNvbnN0IFRpbGVJbmRleCYgdDEsIGNvbnN0IFRpbGVJbmRleCYgdDIpCiB7CiAgICAgc3dp
dGNoIChzb3J0RGlyZWN0aW9uKSB7CiAgICAgY2FzZSBMZWZ0VG9SaWdodDoKLSAgICAgICAgcmV0
dXJuIHIxLngoKSAtIHIyLngoKTsKKyAgICAgICAgcmV0dXJuIHQxLmkoKSAtIHQyLmkoKTsKICAg
ICBjYXNlIFJpZ2h0VG9MZWZ0OgotICAgICAgICByZXR1cm4gcjIueCgpIC0gcjEueCgpOworICAg
ICAgICByZXR1cm4gdDIuaSgpIC0gdDEuaSgpOwogICAgIGNhc2UgVG9wVG9Cb3R0b206Ci0gICAg
ICAgIHJldHVybiByMS55KCkgLSByMi55KCk7CisgICAgICAgIHJldHVybiB0MS5qKCkgLSB0Mi5q
KCk7CiAgICAgY2FzZSBCb3R0b21Ub1RvcDoKLSAgICAgICAgcmV0dXJuIHIyLnkoKSAtIHIxLnko
KTsKKyAgICAgICAgcmV0dXJuIHQyLmooKSAtIHQxLmooKTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC01NCwyMiArNTcsMjIgQEAgc3RhdGljIGlubGluZSBpbnQgY29t
cGFyZVJlY3RPbmVEaXJlY3Rpb24oY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHIxLCBjb25zdCBQ
bGEKIH0KIAogdGVtcGxhdGU8U29ydERpcmVjdGlvbiBwcmltYXJ5U29ydERpcmVjdGlvbiwgU29y
dERpcmVjdGlvbiBzZWNvbmRhcnlTb3J0RGlyZWN0aW9uPgotc3RhdGljIGJvb2wgcmVjdElzTGVz
c1RoYW4oY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHIxLCBjb25zdCBQbGF0Zm9ybTo6SW50UmVj
dCYgcjIpCitzdGF0aWMgYm9vbCB0aWxlSW5kZXhJc0xlc3NUaGFuKGNvbnN0IFRpbGVJbmRleCYg
dDEsIGNvbnN0IFRpbGVJbmRleCYgdDIpCiB7Ci0gICAgaW50IHByaW1hcnlSZXN1bHQgPSBjb21w
YXJlUmVjdE9uZURpcmVjdGlvbjxwcmltYXJ5U29ydERpcmVjdGlvbj4ocjEsIHIyKTsKKyAgICBp
bnQgcHJpbWFyeVJlc3VsdCA9IGNvbXBhcmVSZWN0T25lRGlyZWN0aW9uPHByaW1hcnlTb3J0RGly
ZWN0aW9uPih0MSwgdDIpOwogICAgIGlmIChwcmltYXJ5UmVzdWx0IHx8IHNlY29uZGFyeVNvcnRE
aXJlY3Rpb24gPT0gcHJpbWFyeVNvcnREaXJlY3Rpb24pCiAgICAgICAgIHJldHVybiBwcmltYXJ5
UmVzdWx0IDwgMDsKLSAgICByZXR1cm4gY29tcGFyZVJlY3RPbmVEaXJlY3Rpb248c2Vjb25kYXJ5
U29ydERpcmVjdGlvbj4ocjEsIHIyKSA8IDA7CisgICAgcmV0dXJuIGNvbXBhcmVSZWN0T25lRGly
ZWN0aW9uPHNlY29uZGFyeVNvcnREaXJlY3Rpb24+KHQxLCB0MikgPCAwOwogfQogCi10eXBlZGVm
IGJvb2wgKCpGdW5jUmVjdExlc3NUaGFuKShjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcjEsIGNv
bnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByMik7Ci1zdGF0aWMgRnVuY1JlY3RMZXNzVGhhbiByZWN0
TGVzc1RoYW5GdW5jdGlvbihTb3J0RGlyZWN0aW9uIHByaW1hcnksIFNvcnREaXJlY3Rpb24gc2Vj
b25kYXJ5KQordHlwZWRlZiBib29sICgqRnVuY1RpbGVJbmRleExlc3NUaGFuKShjb25zdCBUaWxl
SW5kZXgmIHQxLCBjb25zdCBUaWxlSW5kZXgmIHQyKTsKK3N0YXRpYyBGdW5jVGlsZUluZGV4TGVz
c1RoYW4gdGlsZUluZGV4TGVzc1RoYW5GdW5jdGlvbihTb3J0RGlyZWN0aW9uIHByaW1hcnksIFNv
cnREaXJlY3Rpb24gc2Vjb25kYXJ5KQogewotICAgIHN0YXRpYyBGdW5jUmVjdExlc3NUaGFuIHNf
cmVjdExlc3NUaGFuRnVuY3Rpb25zW051bVNvcnREaXJlY3Rpb25zXVtOdW1Tb3J0RGlyZWN0aW9u
c10gPSB7IHsgMCB9IH07CisgICAgc3RhdGljIEZ1bmNUaWxlSW5kZXhMZXNzVGhhbiBzX3RpbGVJ
bmRleExlc3NUaGFuRnVuY3Rpb25zW051bVNvcnREaXJlY3Rpb25zXVtOdW1Tb3J0RGlyZWN0aW9u
c10gPSB7IHsgMCB9IH07CiAgICAgc3RhdGljIGJvb2wgc19pbml0aWFsaXplZCA9IGZhbHNlOwog
ICAgIGlmICghc19pbml0aWFsaXplZCkgewogI2RlZmluZSBBRERfQ09NUEFSRV9GVU5DVElPTihf
cHJpbWFyeSwgX3NlY29uZGFyeSkgXAotICAgICAgICBzX3JlY3RMZXNzVGhhbkZ1bmN0aW9uc1tf
cHJpbWFyeV1bX3NlY29uZGFyeV0gPSByZWN0SXNMZXNzVGhhbjxfcHJpbWFyeSwgX3NlY29uZGFy
eT4KKyAgICAgICAgc190aWxlSW5kZXhMZXNzVGhhbkZ1bmN0aW9uc1tfcHJpbWFyeV1bX3NlY29u
ZGFyeV0gPSB0aWxlSW5kZXhJc0xlc3NUaGFuPF9wcmltYXJ5LCBfc2Vjb25kYXJ5PgogCiAgICAg
ICAgIEFERF9DT01QQVJFX0ZVTkNUSU9OKExlZnRUb1JpZ2h0LCBMZWZ0VG9SaWdodCk7CiAgICAg
ICAgIEFERF9DT01QQVJFX0ZVTkNUSU9OKExlZnRUb1JpZ2h0LCBSaWdodFRvTGVmdCk7CkBAIC05
NSwxMTggKzk4LDI1IEBAIHN0YXRpYyBGdW5jUmVjdExlc3NUaGFuIHJlY3RMZXNzVGhhbkZ1bmN0
aW9uKFNvcnREaXJlY3Rpb24gcHJpbWFyeSwgU29ydERpcmVjdGlvCiAgICAgICAgIHNfaW5pdGlh
bGl6ZWQgPSB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBzX3JlY3RMZXNzVGhhbkZ1bmN0aW9u
c1twcmltYXJ5XVtzZWNvbmRhcnldOworICAgIHJldHVybiBzX3RpbGVJbmRleExlc3NUaGFuRnVu
Y3Rpb25zW3ByaW1hcnldW3NlY29uZGFyeV07CiB9CiAKLWNsYXNzIFJlY3RMZXNzVGhhbiB7Ci1w
dWJsaWM6Ci0gICAgUmVjdExlc3NUaGFuKFNvcnREaXJlY3Rpb24gcHJpbWFyeVNvcnREaXJlY3Rp
b24sIFNvcnREaXJlY3Rpb24gc2Vjb25kYXJ5U29ydERpcmVjdGlvbikKLSAgICAgICAgOiBtX3Jl
Y3RJc0xlc3NUaGFuKHJlY3RMZXNzVGhhbkZ1bmN0aW9uKHByaW1hcnlTb3J0RGlyZWN0aW9uLCBz
ZWNvbmRhcnlTb3J0RGlyZWN0aW9uKSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByMSwgY29uc3QgUGxhdGZvcm06OkludFJlY3Qm
IHIyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVjdElzTGVzc1RoYW4ocjEsIHIyKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgRnVuY1JlY3RMZXNzVGhhbiBtX3JlY3RJc0xlc3NUaGFuOwot
fTsKLQotY2xhc3MgUmVuZGVyUmVjdExlc3NUaGFuIHsKK2NsYXNzIFRpbGVJbmRleExlc3NUaGFu
IHsKIHB1YmxpYzoKLSAgICBSZW5kZXJSZWN0TGVzc1RoYW4oU29ydERpcmVjdGlvbiBwcmltYXJ5
U29ydERpcmVjdGlvbiwgU29ydERpcmVjdGlvbiBzZWNvbmRhcnlTb3J0RGlyZWN0aW9uKQotICAg
ICAgICA6IG1fcmVjdElzTGVzc1RoYW4ocmVjdExlc3NUaGFuRnVuY3Rpb24ocHJpbWFyeVNvcnRE
aXJlY3Rpb24sIHNlY29uZGFyeVNvcnREaXJlY3Rpb24pKQorICAgIFRpbGVJbmRleExlc3NUaGFu
KFNvcnREaXJlY3Rpb24gcHJpbWFyeVNvcnREaXJlY3Rpb24sIFNvcnREaXJlY3Rpb24gc2Vjb25k
YXJ5U29ydERpcmVjdGlvbikKKyAgICAgICAgOiBtX3RpbGVJbmRleElzTGVzc1RoYW4odGlsZUlu
ZGV4TGVzc1RoYW5GdW5jdGlvbihwcmltYXJ5U29ydERpcmVjdGlvbiwgc2Vjb25kYXJ5U29ydERp
cmVjdGlvbikpCiAgICAgewogICAgIH0KIAotICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBSZW5k
ZXJSZWN0JiByMSwgY29uc3QgUmVuZGVyUmVjdCYgcjIpCisgICAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IFRpbGVJbmRleCYgdDEsIGNvbnN0IFRpbGVJbmRleCYgdDIpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9yZWN0SXNMZXNzVGhhbihyMS5zdWJSZWN0cygpWzBdLCByMi5zdWJSZWN0cygpWzBd
KTsKKyAgICAgICAgcmV0dXJuIG1fdGlsZUluZGV4SXNMZXNzVGhhbih0MSwgdDIpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBGdW5jUmVjdExlc3NUaGFuIG1fcmVjdElzTGVzc1RoYW47CisgICAg
RnVuY1RpbGVJbmRleExlc3NUaGFuIG1fdGlsZUluZGV4SXNMZXNzVGhhbjsKIH07CiAKLVJlbmRl
clJlY3Q6OlJlbmRlclJlY3QoY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBsb2NhdGlvbiwgY29u
c3QgUGxhdGZvcm06OkludFNpemUmIHNpemUsIGludCBzcGxpdHRpbmdGYWN0b3IpCi0gICAgOiBQ
bGF0Zm9ybTo6SW50UmVjdChsb2NhdGlvbiwgc2l6ZSkKLSAgICAsIG1fc3BsaXR0aW5nRmFjdG9y
KDApCi0gICAgLCBtX3ByaW1hcnlTb3J0RGlyZWN0aW9uKFRvcFRvQm90dG9tKQotICAgICwgbV9z
ZWNvbmRhcnlTb3J0RGlyZWN0aW9uKExlZnRUb1JpZ2h0KQotewotICAgIGluaXRpYWxpemUoc3Bs
aXR0aW5nRmFjdG9yKTsKLX0KLQotUmVuZGVyUmVjdDo6UmVuZGVyUmVjdChpbnQgeCwgaW50IHks
IGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHNwbGl0dGluZ0ZhY3RvcikKLSAgICA6IFBsYXRm
b3JtOjpJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpCi0gICAgLCBtX3NwbGl0dGluZ0ZhY3Rv
cigwKQotICAgICwgbV9wcmltYXJ5U29ydERpcmVjdGlvbihUb3BUb0JvdHRvbSkKLSAgICAsIG1f
c2Vjb25kYXJ5U29ydERpcmVjdGlvbihMZWZ0VG9SaWdodCkKLXsKLSAgICBpbml0aWFsaXplKHNw
bGl0dGluZ0ZhY3Rvcik7Ci19Ci0KLXZvaWQgUmVuZGVyUmVjdDo6aW5pdGlhbGl6ZShpbnQgc3Bs
aXR0aW5nRmFjdG9yKQotewotICAgIG1fc3ViUmVjdHMucHVzaF9iYWNrKCp0aGlzKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNwbGl0dGluZ0ZhY3RvcjsgKytpKQotICAgICAgICBzcGxpdCgp
OwotICAgIHF1aWNrU29ydCgpOwotfQotCi1zdGF0aWMgdm9pZCBzcGxpdFJlY3RJbkhhbGZBbmRB
ZGRUb0xpc3QoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QsIGJvb2wgdmVydGljYWwsIElu
dFJlY3RMaXN0JiByZW5kZXJSZWN0TGlzdCkKLXsKLSAgICBpZiAodmVydGljYWwpIHsKLSAgICAg
ICAgaW50IHdpZHRoMSA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYocmVjdC53aWR0aCgpIC8gMi4w
KSk7Ci0gICAgICAgIGludCB3aWR0aDIgPSBzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihyZWN0Lndp
ZHRoKCkgLyAyLjApKTsKLSAgICAgICAgcmVuZGVyUmVjdExpc3QucHVzaF9iYWNrKFBsYXRmb3Jt
OjpJbnRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgd2lkdGgxLCByZWN0LmhlaWdodCgpKSk7Ci0g
ICAgICAgIHJlbmRlclJlY3RMaXN0LnB1c2hfYmFjayhQbGF0Zm9ybTo6SW50UmVjdChyZWN0Lngo
KSArIHdpZHRoMSwgcmVjdC55KCksIHdpZHRoMiwgcmVjdC5oZWlnaHQoKSkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGludCBoZWlnaHQxID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihyZWN0Lmhl
aWdodCgpIC8gMi4wKSk7Ci0gICAgICAgIGludCBoZWlnaHQyID0gc3RhdGljX2Nhc3Q8aW50Pihm
bG9vcmYocmVjdC5oZWlnaHQoKSAvIDIuMCkpOwotICAgICAgICByZW5kZXJSZWN0TGlzdC5wdXNo
X2JhY2soUGxhdGZvcm06OkludFJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCks
IGhlaWdodDEpKTsKLSAgICAgICAgcmVuZGVyUmVjdExpc3QucHVzaF9iYWNrKFBsYXRmb3JtOjpJ
bnRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIGhlaWdodDEsIHJlY3Qud2lkdGgoKSwgaGVpZ2h0
MikpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJSZWN0OjpzcGxpdCgpCi17Ci0gICAgKyttX3Nw
bGl0dGluZ0ZhY3RvcjsKLQotICAgIGJvb2wgdmVydGljYWwgPSAhKG1fc3BsaXR0aW5nRmFjdG9y
ICUgMik7Ci0KLSAgICBJbnRSZWN0TGlzdCBzdWJSZWN0czsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fc3ViUmVjdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHNwbGl0UmVjdEluSGFsZkFu
ZEFkZFRvTGlzdChtX3N1YlJlY3RzLmF0KGkpLCB2ZXJ0aWNhbCwgc3ViUmVjdHMpOwotICAgIG1f
c3ViUmVjdHMuc3dhcChzdWJSZWN0cyk7Ci19Ci0KLVBsYXRmb3JtOjpJbnRSZWN0IFJlbmRlclJl
Y3Q6OnJlY3RGb3JSZW5kZXJpbmcoKQotewotICAgIEFTU0VSVCghbV9zdWJSZWN0cy5lbXB0eSgp
KTsKLSAgICBQbGF0Zm9ybTo6SW50UmVjdCByZWN0ID0gbV9zdWJSZWN0c1swXTsKLSAgICBtX3N1
YlJlY3RzLmVyYXNlKG1fc3ViUmVjdHMuYmVnaW4oKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0K
LXZvaWQgUmVuZGVyUmVjdDo6dXBkYXRlU29ydERpcmVjdGlvbihTb3J0RGlyZWN0aW9uIHByaW1h
cnksIFNvcnREaXJlY3Rpb24gc2Vjb25kYXJ5KQotewotICAgIGlmIChwcmltYXJ5ID09IG1fcHJp
bWFyeVNvcnREaXJlY3Rpb24gJiYgc2Vjb25kYXJ5ID09IG1fc2Vjb25kYXJ5U29ydERpcmVjdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9wcmltYXJ5U29ydERpcmVjdGlvbiA9IHByaW1h
cnk7Ci0gICAgbV9zZWNvbmRhcnlTb3J0RGlyZWN0aW9uID0gc2Vjb25kYXJ5OwotCi0gICAgcXVp
Y2tTb3J0KCk7Ci19Ci0KLXZvaWQgUmVuZGVyUmVjdDo6cXVpY2tTb3J0KCkKLXsKLSAgICBzdGQ6
OnNvcnQobV9zdWJSZWN0cy5iZWdpbigpLCBtX3N1YlJlY3RzLmJlZ2luKCksIFJlY3RMZXNzVGhh
bihtX3ByaW1hcnlTb3J0RGlyZWN0aW9uLCBtX3NlY29uZGFyeVNvcnREaXJlY3Rpb24pKTsKLX0K
LQogUmVuZGVyUXVldWU6OlJlbmRlclF1ZXVlKEJhY2tpbmdTdG9yZVByaXZhdGUqIHBhcmVudCkK
ICAgICA6IG1fcGFyZW50KHBhcmVudCkKICAgICAsIG1fcmVjdHNBZGRlZFRvUmVndWxhclJlbmRl
ckpvYnNJbkN1cnJlbnRDeWNsZShmYWxzZSkKQEAgLTIyMyw2ICsxMzMsNyBAQCB2b2lkIFJlbmRl
clF1ZXVlOjpyZXNldCgpCiAgICAgbV9wcmltYXJ5U29ydERpcmVjdGlvbiA9IFRvcFRvQm90dG9t
OwogICAgIG1fc2Vjb25kYXJ5U29ydERpcmVjdGlvbiA9IExlZnRUb1JpZ2h0OwogICAgIG1fdmlz
aWJsZVpvb21Kb2JzLmNsZWFyKCk7CisgICAgbV92aXNpYmxlWm9vbUpvYnNDb21wbGV0ZWQuY2xl
YXIoKTsKICAgICBtX3Zpc2libGVTY3JvbGxKb2JzLmNsZWFyKCk7CiAgICAgbV92aXNpYmxlU2Ny
b2xsSm9ic0NvbXBsZXRlZC5jbGVhcigpOwogICAgIG1fbm9uVmlzaWJsZVNjcm9sbEpvYnMuY2xl
YXIoKTsKQEAgLTIzNCw2NCArMTQ1LDU5IEBAIHZvaWQgUmVuZGVyUXVldWU6OnJlc2V0KCkKICAg
ICBBU1NFUlQoaXNFbXB0eSgpKTsKIH0KIAotaW50IFJlbmRlclF1ZXVlOjpzcGxpdHRpbmdGYWN0
b3IoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpIGNvbnN0Citib29sIFJlbmRlclF1ZXVl
Ojppc0VtcHR5KGJvb2wgc2hvdWxkUGVyZm9ybVJlZ3VsYXJSZW5kZXJKb2JzKSBjb25zdAogewot
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc3BsaXQgdXAgcmVndWxhciByZW5kZXIgcmVj
dCBqb2JzIGFuZCB3ZSB3YW50IGl0IHRvCi0gICAgLy8gdG8gYmUgem9vbSBpbnZhcmlhbnQgd2l0
aCByZXNwZWN0IHRvIFdlYkNvcmUuIEluIG90aGVyIHdvcmRzLCBpZiBXZWJDb3JlIHNlbmRzCi0g
ICAgLy8gdXMgYSByZWN0IG9mIHZpZXdwb3J0IHNpemUgdG8gaW52YWxpZGF0ZSBhdCB6b29tIDEu
MCB0aGVuIHdlIHNwbGl0IHRoYXQgdXAKLSAgICAvLyBpbiB0aGUgZXhhY3Qgc2FtZSB3YXkgd2Ug
d291bGQgYXQgem9vbSAyLjAuIFRoZSBhbW91bnQgb2YgY29udGVudCB0aGF0IGlzCi0gICAgLy8g
cmVuZGVyZWQgaW4gYW55IG9uZSBwYXNzIHNob3VsZCBzdGF5IGZpeGVkIHdpdGggcmVnYXJkIHRv
IHRoZSB6b29tIGxldmVsLgotICAgIFBsYXRmb3JtOjpJbnRSZWN0IHVudHJhbnNmb3JtZWRSZWN0
ID0gbV9wYXJlbnQtPm1fd2ViUGFnZS0+ZC0+bWFwRnJvbVRyYW5zZm9ybWVkKHJlY3QpOwotICAg
IGRvdWJsZSByZWN0QXJlYSA9IHVudHJhbnNmb3JtZWRSZWN0LndpZHRoKCkgKiB1bnRyYW5zZm9y
bWVkUmVjdC5oZWlnaHQoKTsKLSAgICBkb3VibGUgbWF4QXJlYSA9IG1fcGFyZW50LT50aWxlV2lk
dGgoKSAqIG1fcGFyZW50LT50aWxlSGVpZ2h0KCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBzcGxp
dEZhY3RvciA9IDEgPDwgMDsKLSAgICBkb3VibGUgcmVuZGVyUmVjdEFyZWEgPSBtYXhBcmVhIC8g
c3BsaXRGYWN0b3I7Ci0gICAgcmV0dXJuIGNlaWwobG9nKHJlY3RBcmVhIC8gcmVuZGVyUmVjdEFy
ZWEpIC8gbG9nKDIuMCkpOworICAgIHJldHVybiBtX3Zpc2libGVab29tSm9icy5pc0VtcHR5KCkg
JiYgbV92aXNpYmxlU2Nyb2xsSm9icy5pc0VtcHR5KCkKKyAgICAgICAgJiYgKCFzaG91bGRQZXJm
b3JtUmVndWxhclJlbmRlckpvYnMgfHwgbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaC5p
c0VtcHR5KCkpCisgICAgICAgICYmICghc2hvdWxkUGVyZm9ybVJlZ3VsYXJSZW5kZXJKb2JzIHx8
IG1fcmVndWxhclJlbmRlckpvYnNSZWdpb24uaXNFbXB0eSgpKQorICAgICAgICAmJiBtX25vblZp
c2libGVTY3JvbGxKb2JzLmlzRW1wdHkoKTsKIH0KIAotUmVuZGVyUmVjdCBSZW5kZXJRdWV1ZTo6
Y29udmVydFRvUmVuZGVyUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkgY29uc3QK
K2Jvb2wgUmVuZGVyUXVldWU6Omhhc0N1cnJlbnRSZWd1bGFyUmVuZGVySm9iKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gUmVuZGVyUmVjdChyZWN0LmxvY2F0aW9uKCksIHJlY3Quc2l6ZSgpLCBzcGxp
dHRpbmdGYWN0b3IocmVjdCkpOworICAgIHJldHVybiAhbV9jdXJyZW50UmVndWxhclJlbmRlckpv
YnNCYXRjaC5pc0VtcHR5KCkgfHwgIW1fcmVndWxhclJlbmRlckpvYnNSZWdpb24uaXNFbXB0eSgp
OwogfQogCi1ib29sIFJlbmRlclF1ZXVlOjppc0VtcHR5KGJvb2wgc2hvdWxkUGVyZm9ybVJlZ3Vs
YXJSZW5kZXJKb2JzKSBjb25zdAorYm9vbCBSZW5kZXJRdWV1ZTo6aGFzQ3VycmVudFZpc2libGVa
b29tSm9iKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV92aXNpYmxlWm9vbUpvYnMuZW1wdHkoKSAm
JiBtX3Zpc2libGVTY3JvbGxKb2JzLmVtcHR5KCkKLSAgICAgICAgJiYgKCFzaG91bGRQZXJmb3Jt
UmVndWxhclJlbmRlckpvYnMgfHwgbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaC5lbXB0
eSgpKQotICAgICAgICAmJiAoIXNob3VsZFBlcmZvcm1SZWd1bGFyUmVuZGVySm9icyB8fCBtX3Jl
Z3VsYXJSZW5kZXJKb2JzUmVnaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgJiYgbV9ub25WaXNpYmxl
U2Nyb2xsSm9icy5lbXB0eSgpOworICAgIHJldHVybiAhbV92aXNpYmxlWm9vbUpvYnMuaXNFbXB0
eSgpOwogfQogCi1ib29sIFJlbmRlclF1ZXVlOjpoYXNDdXJyZW50UmVndWxhclJlbmRlckpvYigp
IGNvbnN0Citib29sIFJlbmRlclF1ZXVlOjpoYXNDdXJyZW50VmlzaWJsZVNjcm9sbEpvYigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICFtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0JhdGNoLmVtcHR5
KCkgfHwgIW1fcmVndWxhclJlbmRlckpvYnNSZWdpb24uaXNFbXB0eSgpOworICAgIHJldHVybiAh
bV92aXNpYmxlU2Nyb2xsSm9icy5pc0VtcHR5KCk7CiB9CiAKLWJvb2wgUmVuZGVyUXVldWU6Omhh
c0N1cnJlbnRWaXNpYmxlWm9vbUpvYigpIGNvbnN0Citib29sIFJlbmRlclF1ZXVlOjppc0N1cnJl
bnRWaXNpYmxlWm9vbUpvYihjb25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAogewotICAgIHJl
dHVybiAhbV92aXNpYmxlWm9vbUpvYnMuZW1wdHkoKTsKKyAgICByZXR1cm4gbV92aXNpYmxlWm9v
bUpvYnMuY29udGFpbnMoaW5kZXgpOwogfQogCi1ib29sIFJlbmRlclF1ZXVlOjpoYXNDdXJyZW50
VmlzaWJsZVNjcm9sbEpvYigpIGNvbnN0Citib29sIFJlbmRlclF1ZXVlOjppc0N1cnJlbnRWaXNp
YmxlWm9vbUpvYkNvbXBsZXRlZChjb25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAogewotICAg
IHJldHVybiAhbV92aXNpYmxlU2Nyb2xsSm9icy5lbXB0eSgpOworICAgIHJldHVybiBtX3Zpc2li
bGVab29tSm9ic0NvbXBsZXRlZC5jb250YWlucyhpbmRleCk7CiB9CiAKLWJvb2wgUmVuZGVyUXVl
dWU6OmlzQ3VycmVudFZpc2libGVTY3JvbGxKb2IoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJl
Y3QpIGNvbnN0Citib29sIFJlbmRlclF1ZXVlOjppc0N1cnJlbnRWaXNpYmxlU2Nyb2xsSm9iKGNv
bnN0IFRpbGVJbmRleCYgaW5kZXgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0ZDo6ZmluZChtX3Zp
c2libGVTY3JvbGxKb2JzLmJlZ2luKCksIG1fdmlzaWJsZVNjcm9sbEpvYnMuZW5kKCksIHJlY3Qp
ICE9IG1fdmlzaWJsZVNjcm9sbEpvYnMuZW5kKCk7CisgICAgcmV0dXJuIG1fdmlzaWJsZVNjcm9s
bEpvYnMuY29udGFpbnMoaW5kZXgpOwogfQogCi1ib29sIFJlbmRlclF1ZXVlOjppc0N1cnJlbnRW
aXNpYmxlU2Nyb2xsSm9iQ29tcGxldGVkKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KSBj
b25zdAorYm9vbCBSZW5kZXJRdWV1ZTo6aXNDdXJyZW50VmlzaWJsZVNjcm9sbEpvYkNvbXBsZXRl
ZChjb25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAogewotICAgIHJldHVybiBzdGQ6OmZpbmQo
bV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5iZWdpbigpLCBtX3Zpc2libGVTY3JvbGxKb2Jz
Q29tcGxldGVkLmVuZCgpLCByZWN0KSAhPSBtX3Zpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkLmVu
ZCgpOworICAgIHJldHVybiBtX3Zpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkLmNvbnRhaW5zKGlu
ZGV4KTsKIH0KIAotYm9vbCBSZW5kZXJRdWV1ZTo6aXNDdXJyZW50UmVndWxhclJlbmRlckpvYihj
b25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkgY29uc3QKK2Jvb2wgUmVuZGVyUXVldWU6Omlz
Q3VycmVudFJlZ3VsYXJSZW5kZXJKb2IoY29uc3QgVGlsZUluZGV4JiBpbmRleCwgQmFja2luZ1N0
b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAogewotICAgIHJldHVybiBtX3JlZ3VsYXJSZW5k
ZXJKb2JzUmVnaW9uLmlzUmVjdEluUmVnaW9uKHJlY3QpID09IFBsYXRmb3JtOjpJbnRSZWN0UmVn
aW9uOjpDb250YWluZWRJblJlZ2lvbgotICAgICAgICB8fCBtX2N1cnJlbnRSZWd1bGFyUmVuZGVy
Sm9ic0JhdGNoUmVnaW9uLmlzUmVjdEluUmVnaW9uKHJlY3QpID09IFBsYXRmb3JtOjpJbnRSZWN0
UmVnaW9uOjpDb250YWluZWRJblJlZ2lvbjsKKyAgICBQbGF0Zm9ybTo6SW50UmVjdCB0aWxlUmVj
dChnZW9tZXRyeS0+b3JpZ2luT2ZUaWxlKGluZGV4KSwgbV9wYXJlbnQtPnRpbGVTaXplKCkpOwor
ICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpJbnRlcnNlY3Rpb25TdGF0ZSByZWd1bGFySm9i
c1N0YXRlID0gbV9yZWd1bGFyUmVuZGVySm9ic1JlZ2lvbi5pc1JlY3RJblJlZ2lvbih0aWxlUmVj
dCk7CisgICAgUGxhdGZvcm06OkludFJlY3RSZWdpb246OkludGVyc2VjdGlvblN0YXRlIGN1cnJl
bnRSZWd1bGFySm9ic1N0YXRlID0gbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaFJlZ2lv
bi5pc1JlY3RJblJlZ2lvbih0aWxlUmVjdCk7CisKKyAgICByZXR1cm4gcmVndWxhckpvYnNTdGF0
ZSA9PSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6Q29udGFpbmVkSW5SZWdpb24KKyAgICAgICAg
fHwgcmVndWxhckpvYnNTdGF0ZSA9PSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6UGFydGlhbGx5
Q29udGFpbmVkSW5SZWdpb24KKyAgICAgICAgfHwgY3VycmVudFJlZ3VsYXJKb2JzU3RhdGUgPT0g
UGxhdGZvcm06OkludFJlY3RSZWdpb246OkNvbnRhaW5lZEluUmVnaW9uCisgICAgICAgIHx8IGN1
cnJlbnRSZWd1bGFySm9ic1N0YXRlID09IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpQYXJ0aWFs
bHlDb250YWluZWRJblJlZ2lvbjsKIH0KIAogYm9vbCBSZW5kZXJRdWV1ZTo6Y3VycmVudFJlZ3Vs
YXJSZW5kZXJKb2JCYXRjaFVuZGVyUHJlc3N1cmUoKSBjb25zdApAQCAtMzEzLDk2ICsyMTksMTU0
IEBAIHZvaWQgUmVuZGVyUXVldWU6OmV2ZW50UXVldWVDeWNsZWQoKQogICAgIG1fcmVjdHNBZGRl
ZFRvUmVndWxhclJlbmRlckpvYnNJbkN1cnJlbnRDeWNsZSA9IGZhbHNlOwogfQogCi12b2lkIFJl
bmRlclF1ZXVlOjphZGRUb1F1ZXVlKEpvYlR5cGUgdHlwZSwgY29uc3QgSW50UmVjdExpc3QmIHJl
Y3RMaXN0KQorVGlsZUluZGV4TGlzdCBSZW5kZXJRdWV1ZTo6dGlsZUluZGV4ZXNJbnRlcnNlY3Rp
bmdSZWdpb24oY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mIHJlZ2lvbiwgQmFja2luZ1N0
b3JlR2VvbWV0cnkqIGdlb21ldHJ5KSBjb25zdAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVjdExpc3Quc2l6ZSgpOyArK2kpCi0gICAgICAgIGFkZFRvUXVldWUodHlwZSwgcmVjdExp
c3QuYXQoaSkpOworICAgIFRpbGVJbmRleExpc3QgaW5kZXhlczsKKyAgICBUaWxlSW5kZXhMaXN0
IGFsbEluZGV4ZXMgPSBtX3BhcmVudC0+aW5kZXhlc0ZvckJhY2tpbmdTdG9yZVJlY3QoZ2VvbWV0
cnktPmJhY2tpbmdTdG9yZVJlY3QoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFs
bEluZGV4ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUGxhdGZvcm06OkludFJlY3QgdGlsZVJl
Y3QoZ2VvbWV0cnktPm9yaWdpbk9mVGlsZShhbGxJbmRleGVzW2ldKSwgbV9wYXJlbnQtPnRpbGVT
aXplKCkpOworICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6SW50ZXJzZWN0aW9uU3Rh
dGUgc3RhdGUgPSByZWdpb24uaXNSZWN0SW5SZWdpb24odGlsZVJlY3QpOworICAgICAgICBpZiAo
c3RhdGUgPT0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OkNvbnRhaW5lZEluUmVnaW9uIHx8IHN0
YXRlID09IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpQYXJ0aWFsbHlDb250YWluZWRJblJlZ2lv
bikKKyAgICAgICAgICAgIGluZGV4ZXMuYXBwZW5kKGFsbEluZGV4ZXNbaV0pOworICAgIH0KKyAg
ICByZXR1cm4gaW5kZXhlczsKIH0KIAotdm9pZCBSZW5kZXJRdWV1ZTo6YWRkVG9RdWV1ZShKb2JU
eXBlIHR5cGUsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiByZWN0KQorVGlsZUluZGV4TGlzdCBS
ZW5kZXJRdWV1ZTo6dGlsZUluZGV4ZXNGdWxseUNvbnRhaW5lZEluUmVnaW9uKGNvbnN0IFBsYXRm
b3JtOjpJbnRSZWN0UmVnaW9uJiByZWdpb24sIEJhY2tpbmdTdG9yZUdlb21ldHJ5KiBnZW9tZXRy
eSkgY29uc3QKIHsKLSAgICBpZiAodHlwZSA9PSBOb25WaXNpYmxlU2Nyb2xsICYmIHN0ZDo6Zmlu
ZChtX3Zpc2libGVTY3JvbGxKb2JzLmJlZ2luKCksIG1fdmlzaWJsZVNjcm9sbEpvYnMuZW5kKCks
IHJlY3QpICE9IG1fdmlzaWJsZVNjcm9sbEpvYnMuZW5kKCkpCi0gICAgICAgIHJldHVybjsgLy8g
fHJlY3R8IGlzIGluIGEgaGlnaGVyIHByaW9yaXR5IHF1ZXVlLgorICAgIFRpbGVJbmRleExpc3Qg
aW5kZXhlczsKKyAgICBUaWxlSW5kZXhMaXN0IGFsbEluZGV4ZXMgPSBtX3BhcmVudC0+aW5kZXhl
c0ZvckJhY2tpbmdTdG9yZVJlY3QoZ2VvbWV0cnktPmJhY2tpbmdTdG9yZVJlY3QoKSk7CiAKLSAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFZpc2libGVab29tOgotICAgICAgICBhZGRUb1Nj
cm9sbFpvb21RdWV1ZShjb252ZXJ0VG9SZW5kZXJSZWN0KHJlY3QpLCAmbV92aXNpYmxlWm9vbUpv
YnMpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBWaXNpYmxlU2Nyb2xsOgotICAgICAgICBh
ZGRUb1Njcm9sbFpvb21RdWV1ZShjb252ZXJ0VG9SZW5kZXJSZWN0KHJlY3QpLCAmbV92aXNpYmxl
U2Nyb2xsSm9icyk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFJlZ3VsYXJSZW5kZXI6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZsYWcgdGhhdCB3ZSBhZGRlZCByZWN0cyBpbiB0aGUg
Y3VycmVudCBldmVudCBxdWV1ZSBjeWNsZS4KLSAgICAgICAgICAgIG1fcmVjdHNBZGRlZFRvUmVn
dWxhclJlbmRlckpvYnNJbkN1cnJlbnRDeWNsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIFdl
IHRyeSBhbmQgZGV0ZWN0IGlmIHRoaXMgbmV3bHkgYWRkZWQgcmVjdCBpbnRlcnNlY3RzIG9yIGlz
IGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcKLSAgICAgICAgICAgIC8vIGJhdGNo
IG9mIHJlbmRlciBqb2JzLiBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIHN0YXJ0IHRoZSBiYXRjaCBv
dmVyIHNpbmNlIHdlIGRlY29tcG9zZSBpbmRpdmlkdWFsCi0gICAgICAgICAgICAvLyByZWN0cyBp
bnRvIHN1YnJlY3RzIGFuZCBtaWdodCBoYXZlIGFscmVhZHkgcmVuZGVyZWQgb25lIG9mIHRoZW0u
IElmIHRoZSB3ZWIgcGFnZSdzIGNvbnRlbnQgaGFzCi0gICAgICAgICAgICAvLyBjaGFuZ2VkIHN0
YXRlIHRoZW4gdGhpcyBjYW4gbGVhZCB0byBhcnRpZmFjdHMuIFdlIG1hcmsgdGhpcyBieSBub3Rp
bmcgdGhlIGJhdGNoIGlzIG5vdyB1bmRlciBwcmVzc3VyZQotICAgICAgICAgICAgLy8gYW5kIHRo
ZSBiYWNraW5nc3RvcmUgd2lsbCBhdHRlbXB0IHRvIGNsZWFyIGl0IGF0IHRoZSBuZXh0IGF2YWls
YWJsZSBvcHBvcnR1bml0eS4KLSAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpJ
bnRlcnNlY3Rpb25TdGF0ZSBzdGF0ZSA9IG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hS
ZWdpb24uaXNSZWN0SW5SZWdpb24ocmVjdCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
bGxJbmRleGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRpbGVS
ZWN0KGdlb21ldHJ5LT5vcmlnaW5PZlRpbGUoYWxsSW5kZXhlc1tpXSksIG1fcGFyZW50LT50aWxl
U2l6ZSgpKTsKKyAgICAgICAgUGxhdGZvcm06OkludFJlY3RSZWdpb246OkludGVyc2VjdGlvblN0
YXRlIHN0YXRlID0gcmVnaW9uLmlzUmVjdEluUmVnaW9uKHRpbGVSZWN0KTsKKyAgICAgICAgaWYg
KHN0YXRlID09IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpDb250YWluZWRJblJlZ2lvbikKKyAg
ICAgICAgICAgIGluZGV4ZXMuYXBwZW5kKGFsbEluZGV4ZXNbaV0pOworICAgIH0KKyAgICByZXR1
cm4gaW5kZXhlczsKK30KKworUGxhdGZvcm06OkludFJlY3RSZWdpb24gUmVuZGVyUXVldWU6OnRp
bGVSZWdpb24oY29uc3QgVGlsZUluZGV4TGlzdCYgaW5kZXhlcywgQmFja2luZ1N0b3JlR2VvbWV0
cnkqIGdlb21ldHJ5KSBjb25zdAoreworICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIHJlZ2lv
bjsKKworICAgIC8vIENoYW5jZXMgYXJlIHRoZSB0aWxlcyBjb21wcmlzZSBhIHBlcmZlY3QgcmVj
dGFuZ2xlLiBJZiB3ZSBhZGQgcmVjdGFuZ2xlcworICAgIC8vIHJvdyBieSByb3cgb3IgY29sdW1u
IGJ5IGNvbHVtbiwgSW50UmVjdFJlZ2lvbiBzaG91bGQgaGF2ZSBhbiBlYXNpZXIgdGltZQorICAg
IC8vIG1lcmdpbmcgdGhlbSBhcyB0aGUgaW5kaXZpZHVhbCByb3dzIG9yIGNvbHVtbnMgd2lsbCBt
ZXJnZSBpbnRvIGFub3RoZXIKKyAgICAvLyBwbGFpbiByZWN0YW5nbGUuCisgICAgUGxhdGZvcm06
OkludFJlY3RSZWdpb24gY3VycmVudFJvd09yQ29sdW1uUmVnaW9uOworICAgIHNpemVfdCBsYXN0
SSA9IDA7CisgICAgc2l6ZV90IGxhc3RKID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5kZXhlcy5zaXplKCk7ICsraSkgeworICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCB0aWxl
UmVjdChnZW9tZXRyeS0+b3JpZ2luT2ZUaWxlKGluZGV4ZXNbaV0pLCBtX3BhcmVudC0+dGlsZVNp
emUoKSk7CisgICAgICAgIGJvb2wgZXh0ZW5kc0N1cnJlbnRSb3dPckNvbHVtbiA9IGkgJiYgKGxh
c3RJID09IGluZGV4ZXNbaV0uaSgpIHx8IGxhc3RKID09IGluZGV4ZXNbaV0uaigpKTsKKworICAg
ICAgICBpZiAoZXh0ZW5kc0N1cnJlbnRSb3dPckNvbHVtbikKKyAgICAgICAgICAgIGN1cnJlbnRS
b3dPckNvbHVtblJlZ2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjp1bmlvblJlZ2lvbnMo
Y3VycmVudFJvd09yQ29sdW1uUmVnaW9uLCB0aWxlUmVjdCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgcmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OnVuaW9uUmVnaW9ucyhy
ZWdpb24sIGN1cnJlbnRSb3dPckNvbHVtblJlZ2lvbik7CisgICAgICAgICAgICBjdXJyZW50Um93
T3JDb2x1bW5SZWdpb24gPSB0aWxlUmVjdDsKKyAgICAgICAgfQorICAgICAgICBsYXN0SSA9IGlu
ZGV4ZXNbaV0uaSgpOworICAgICAgICBsYXN0SiA9IGluZGV4ZXNbaV0uaigpOworICAgIH0KKwor
ICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6dW5pb25SZWdpb25zKHJlZ2lvbiwg
Y3VycmVudFJvd09yQ29sdW1uUmVnaW9uKTsKK30KKwordm9pZCBSZW5kZXJRdWV1ZTo6YWRkVG9R
dWV1ZShKb2JUeXBlIHR5cGUsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZWdpb24p
Cit7CisgICAgaWYgKHR5cGUgPT0gUmVndWxhclJlbmRlcikgeworICAgICAgICAvLyBGbGFnIHRo
YXQgd2UgYWRkZWQgcmVjdHMgaW4gdGhlIGN1cnJlbnQgZXZlbnQgcXVldWUgY3ljbGUuCisgICAg
ICAgIG1fcmVjdHNBZGRlZFRvUmVndWxhclJlbmRlckpvYnNJbkN1cnJlbnRDeWNsZSA9IHRydWU7
CisKKyAgICAgICAgLy8gV2UgdHJ5IGFuZCBkZXRlY3QgaWYgdGhpcyBuZXdseSBhZGRlZCByZWdp
b24gaW50ZXJzZWN0cyBvciBpcyBjb250YWluZWQgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nCisg
ICAgICAgIC8vIGJhdGNoIG9mIHJlbmRlciBqb2JzLiBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIHN0
YXJ0IHRoZSBiYXRjaCBvdmVyIHNpbmNlIHdlIGRlY29tcG9zZSBpbmRpdmlkdWFsCisgICAgICAg
IC8vIHJlY3RzIGludG8gc3VicmVjdHMgYW5kIG1pZ2h0IGhhdmUgYWxyZWFkeSByZW5kZXJlZCBv
bmUgb2YgdGhlbS4gSWYgdGhlIHdlYiBwYWdlJ3MgY29udGVudCBoYXMKKyAgICAgICAgLy8gY2hh
bmdlZCBzdGF0ZSB0aGVuIHRoaXMgY2FuIGxlYWQgdG8gYXJ0aWZhY3RzLiBXZSBtYXJrIHRoaXMg
Ynkgbm90aW5nIHRoZSBiYXRjaCBpcyBub3cgdW5kZXIgcHJlc3N1cmUKKyAgICAgICAgLy8gYW5k
IHRoZSBiYWNraW5nc3RvcmUgd2lsbCBhdHRlbXB0IHRvIGNsZWFyIGl0IGF0IHRoZSBuZXh0IGF2
YWlsYWJsZSBvcHBvcnR1bml0eS4KKyAgICAgICAgc3RkOjp2ZWN0b3I8UGxhdGZvcm06OkludFJl
Y3Q+IHJlY3RzSW5SZWdpb24gPSByZWdpb24ucmVjdHMoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZWN0c0luUmVnaW9uLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBQbGF0
Zm9ybTo6SW50UmVjdFJlZ2lvbjo6SW50ZXJzZWN0aW9uU3RhdGUgc3RhdGUgPSBtX2N1cnJlbnRS
ZWd1bGFyUmVuZGVySm9ic0JhdGNoUmVnaW9uLmlzUmVjdEluUmVnaW9uKHJlY3RzSW5SZWdpb25b
aV0pOwogICAgICAgICAgICAgaWYgKHN0YXRlID09IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpD
b250YWluZWRJblJlZ2lvbiB8fCBzdGF0ZSA9PSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6UGFy
dGlhbGx5Q29udGFpbmVkSW5SZWdpb24pIHsKICAgICAgICAgICAgICAgICBtX3JlZ3VsYXJSZW5k
ZXJKb2JzUmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OnVuaW9uUmVnaW9ucyhtX3Jl
Z3VsYXJSZW5kZXJKb2JzUmVnaW9uLCBtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0JhdGNoUmVn
aW9uKTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0JhdGNoLmNs
ZWFyKCk7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaFJl
Z2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uKCk7CiAgICAgICAgICAgICAgICAgbV9jdXJy
ZW50UmVndWxhclJlbmRlckpvYnNCYXRjaFVuZGVyUHJlc3N1cmUgPSB0cnVlOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYWRkVG9SZWd1bGFyUXVldWUocmVjdCk7CiAgICAgICAgIH0KKyAg
ICAgICAgYWRkVG9SZWd1bGFyUXVldWUocmVnaW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFRpbGVJbmRleExpc3QgaW5kZXhlcyA9IHRpbGVJbmRleGVzSW50ZXJzZWN0aW5nUmVn
aW9uKHJlZ2lvbiwgbV9wYXJlbnQtPmZyb250U3RhdGUoKSk7CisKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFZpc2libGVab29tOgorICAgICAgICBhZGRUb1Njcm9sbFpvb21RdWV1ZShp
bmRleGVzLCAmbV92aXNpYmxlWm9vbUpvYnMpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBW
aXNpYmxlU2Nyb2xsOgorICAgICAgICBhZGRUb1Njcm9sbFpvb21RdWV1ZShpbmRleGVzLCAmbV92
aXNpYmxlU2Nyb2xsSm9icyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIE5vblZpc2libGVT
Y3JvbGw6Ci0gICAgICAgIGFkZFRvU2Nyb2xsWm9vbVF1ZXVlKGNvbnZlcnRUb1JlbmRlclJlY3Qo
cmVjdCksICZtX25vblZpc2libGVTY3JvbGxKb2JzKTsKKyAgICAgICAgYWRkVG9TY3JvbGxab29t
UXVldWUoaW5kZXhlcywgJm1fbm9uVmlzaWJsZVNjcm9sbEpvYnMpOwogICAgICAgICByZXR1cm47
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFJlbmRlclF1ZXVlOjphZGRUb1JlZ3Vs
YXJRdWV1ZShjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkKK3ZvaWQgUmVuZGVyUXVldWU6
OmFkZFRvUmVndWxhclF1ZXVlKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZWdpb24p
CiB7CiAjaWYgREVCVUdfUkVOREVSX1FVRVVFCi0gICAgaWYgKG1fcmVndWxhclJlbmRlckpvYnNS
ZWdpb24uaXNSZWN0SW5SZWdpb24ocmVjdCkgIT0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OkNv
bnRhaW5lZEluUmVnaW9uKSB7Ci0gICAgICAgIFBsYXRmb3JtOjpsb2dBbHdheXMoUGxhdGZvcm06
OkxvZ0xldmVsQ3JpdGljYWwsCi0gICAgICAgICAgICAiUmVuZGVyUXVldWU6OmFkZFRvUmVndWxh
clF1ZXVlICVzIiwKLSAgICAgICAgICAgIHJlY3QudG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICBz
dGQ6OnZlY3RvcjxQbGF0Zm9ybTo6SW50UmVjdD4gcmVjdHNJblJlZ2lvbiA9IHJlZ2lvbi5yZWN0
cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHNJblJlZ2lvbi5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9yZWd1bGFyUmVuZGVySm9ic1JlZ2lvbi5pc1JlY3RJblJlZ2lv
bihyZWN0c0luUmVnaW9uW2ldKSAhPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6Q29udGFpbmVk
SW5SZWdpb24pIHsKKyAgICAgICAgICAgIFBsYXRmb3JtOjpsb2dBbHdheXMoUGxhdGZvcm06Okxv
Z0xldmVsQ3JpdGljYWwsCisgICAgICAgICAgICAgICAgIlJlbmRlclF1ZXVlOjphZGRUb1JlZ3Vs
YXJRdWV1ZSByZWdpb24gd2l0aGluICVzIiwKKyAgICAgICAgICAgICAgICByZWdpb24uZXh0ZW50
cygpLnRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgIH0KICNlbmRpZgogCisgICAgbV9yZWd1bGFyUmVuZGVySm9ic1JlZ2lvbiA9IFBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uOjp1bmlvblJlZ2lvbnMobV9yZWd1bGFyUmVuZGVySm9ic1JlZ2lvbiwg
cmVnaW9uKTsKKwogICAgIC8vIERvIG5vdCBsZXQgdGhlIHJlZ3VsYXIgcmVuZGVyIHF1ZXVlIGdy
b3cgcGFzdCBhIG1heGltdW0gb2YgMyBkaXNqb2ludCByZWN0cy4KICAgICBpZiAobV9yZWd1bGFy
UmVuZGVySm9ic1JlZ2lvbi5udW1SZWN0cygpID4gMikKLSAgICAgICAgbV9yZWd1bGFyUmVuZGVy
Sm9ic1JlZ2lvbiA9IFBsYXRmb3JtOjp1bmlvbk9mUmVjdHMobV9yZWd1bGFyUmVuZGVySm9ic1Jl
Z2lvbi5leHRlbnRzKCksIHJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgbV9yZWd1bGFyUmVuZGVy
Sm9ic1JlZ2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjp1bmlvblJlZ2lvbnMobV9yZWd1
bGFyUmVuZGVySm9ic1JlZ2lvbiwgcmVjdCk7CisgICAgICAgIG1fcmVndWxhclJlbmRlckpvYnNS
ZWdpb24gPSBtX3JlZ3VsYXJSZW5kZXJKb2JzUmVnaW9uLmV4dGVudHMoKTsKIAogICAgIGlmICgh
aXNFbXB0eSgpKQogICAgICAgICBtX3BhcmVudC0+ZGlzcGF0Y2hSZW5kZXJKb2IoKTsKIH0KIAot
dm9pZCBSZW5kZXJRdWV1ZTo6YWRkVG9TY3JvbGxab29tUXVldWUoY29uc3QgUmVuZGVyUmVjdCYg
cmVjdCwgUmVuZGVyUmVjdExpc3QqIHJlY3RMaXN0KQordm9pZCBSZW5kZXJRdWV1ZTo6YWRkVG9T
Y3JvbGxab29tUXVldWUoY29uc3QgVGlsZUluZGV4TGlzdCYgYWRkZWRUaWxlcywgVGlsZUluZGV4
TGlzdCogYWxyZWFkeVF1ZXVlZFRpbGVzKQogewotICAgIGlmIChzdGQ6OmZpbmQocmVjdExpc3Qt
PmJlZ2luKCksIHJlY3RMaXN0LT5lbmQoKSwgcmVjdCkgIT0gcmVjdExpc3QtPmVuZCgpKQotICAg
ICAgICByZXR1cm47CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhZGRlZFRpbGVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChhbHJlYWR5UXVldWVkVGlsZXMtPmNvbnRhaW5zKGFkZGVk
VGlsZXNbaV0pKQorICAgICAgICAgICAgY29udGludWU7CiAKICNpZiBERUJVR19SRU5ERVJfUVVF
VUUKLSAgICBQbGF0Zm9ybTo6bG9nQWx3YXlzKFBsYXRmb3JtOjpMb2dMZXZlbENyaXRpY2FsLAot
ICAgICAgICAiUmVuZGVyUXVldWU6OmFkZFRvU2Nyb2xsWm9vbVF1ZXVlICVzIiwKLSAgICAgICAg
cmVjdC50b1N0cmluZygpLmNfc3RyKCkpOworICAgICAgICBQbGF0Zm9ybTo6bG9nQWx3YXlzKFBs
YXRmb3JtOjpMb2dMZXZlbENyaXRpY2FsLAorICAgICAgICAgICAgIlJlbmRlclF1ZXVlOjphZGRU
b1Njcm9sbFpvb21RdWV1ZSB0aWxlIGF0ICVzIiwKKyAgICAgICAgICAgIG1fcGFyZW50LT5mcm9u
dFN0YXRlKCktPm9yaWdpbk9mVGlsZShhZGRlZFRpbGVzW2ldKS50b1N0cmluZygpLmNfc3RyKCkp
OwogI2VuZGlmCi0gICAgcmVjdExpc3QtPnB1c2hfYmFjayhyZWN0KTsKKyAgICAgICAgYWxyZWFk
eVF1ZXVlZFRpbGVzLT5hcHBlbmQoYWRkZWRUaWxlc1tpXSk7CisgICAgfQogCiAgICAgaWYgKCFp
c0VtcHR5KCkpCiAgICAgICAgIG1fcGFyZW50LT5kaXNwYXRjaFJlbmRlckpvYigpOwogfQogCi12
b2lkIFJlbmRlclF1ZXVlOjpxdWlja1NvcnQoUmVuZGVyUmVjdExpc3QqIHF1ZXVlKQordm9pZCBS
ZW5kZXJRdWV1ZTo6cXVpY2tTb3J0KFRpbGVJbmRleExpc3QqIHF1ZXVlKQogewogICAgIHNpemVf
dCBsZW5ndGggPSBxdWV1ZS0+c2l6ZSgpOwogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1
cm47CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBx
dWV1ZS0+YXQoaSkudXBkYXRlU29ydERpcmVjdGlvbihtX3ByaW1hcnlTb3J0RGlyZWN0aW9uLCBt
X3NlY29uZGFyeVNvcnREaXJlY3Rpb24pOwotICAgIHJldHVybiBzdGQ6OnNvcnQocXVldWUtPmJl
Z2luKCksIHF1ZXVlLT5lbmQoKSwgUmVuZGVyUmVjdExlc3NUaGFuKG1fcHJpbWFyeVNvcnREaXJl
Y3Rpb24sIG1fc2Vjb25kYXJ5U29ydERpcmVjdGlvbikpOworICAgIFdURjo6bm9uQ29weWluZ1Nv
cnQocXVldWUtPmJlZ2luKCksIHF1ZXVlLT5lbmQoKSwgVGlsZUluZGV4TGVzc1RoYW4obV9wcmlt
YXJ5U29ydERpcmVjdGlvbiwgbV9zZWNvbmRhcnlTb3J0RGlyZWN0aW9uKSk7CiB9CiAKIHZvaWQg
UmVuZGVyUXVldWU6OnVwZGF0ZVNvcnREaXJlY3Rpb24oaW50IGxhc3REZWx0YVgsIGludCBsYXN0
RGVsdGFZKQpAQCAtNDE5LDI4ICszODMsMzAgQEAgdm9pZCBSZW5kZXJRdWV1ZTo6dXBkYXRlU29y
dERpcmVjdGlvbihpbnQgbGFzdERlbHRhWCwgaW50IGxhc3REZWx0YVkpCiAKIHZvaWQgUmVuZGVy
UXVldWU6OnZpc2libGVDb250ZW50Q2hhbmdlZChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgdmlz
aWJsZUNvbnRlbnQpCiB7Ci0gICAgaWYgKG1fdmlzaWJsZVNjcm9sbEpvYnMuZW1wdHkoKSAmJiBt
X25vblZpc2libGVTY3JvbGxKb2JzLmVtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKG1fdmlzaWJs
ZVNjcm9sbEpvYnNDb21wbGV0ZWQuZW1wdHkoKSAmJiBtX25vblZpc2libGVTY3JvbGxKb2JzQ29t
cGxldGVkLmVtcHR5KCkpOworICAgIGlmIChtX3Zpc2libGVTY3JvbGxKb2JzLmlzRW1wdHkoKSAm
JiBtX25vblZpc2libGVTY3JvbGxKb2JzLmlzRW1wdHkoKSkgeworICAgICAgICBBU1NFUlQobV92
aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5pc0VtcHR5KCkgJiYgbV9ub25WaXNpYmxlU2Nyb2xs
Sm9ic0NvbXBsZXRlZC5pc0VtcHR5KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAg
VGlsZUluZGV4TGlzdCB2aXNpYmxlVGlsZXMgPSB0aWxlSW5kZXhlc0ludGVyc2VjdGluZ1JlZ2lv
bih2aXNpYmxlQ29udGVudCwgbV9wYXJlbnQtPmZyb250U3RhdGUoKSk7CisKICAgICAvLyBNb3Zl
IHZpc2libGVTY3JvbGxKb2JzIHRvIG5vblZpc2libGVTY3JvbGxKb2JzIGlmIHRoZXkgZG8gbm90
IGludGVyc2VjdAogICAgIC8vIHRoZSB2aXNpYmxlIGNvbnRlbnQgcmVjdC4KICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdmlzaWJsZVNjcm9sbEpvYnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgUmVuZGVyUmVjdCByZWN0ID0gbV92aXNpYmxlU2Nyb2xsSm9icy5hdChpKTsKLSAgICAgICAg
aWYgKCFyZWN0LmludGVyc2VjdHModmlzaWJsZUNvbnRlbnQpKSB7Ci0gICAgICAgICAgICBtX3Zp
c2libGVTY3JvbGxKb2JzLmVyYXNlKG1fdmlzaWJsZVNjcm9sbEpvYnMuYmVnaW4oKSArIGkpOwot
ICAgICAgICAgICAgYWRkVG9TY3JvbGxab29tUXVldWUocmVjdCwgJm1fbm9uVmlzaWJsZVNjcm9s
bEpvYnMpOworICAgICAgICBpZiAoIXZpc2libGVUaWxlcy5jb250YWlucyhtX3Zpc2libGVTY3Jv
bGxKb2JzW2ldKSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX25vblZpc2libGVTY3JvbGxKb2Jz
LmNvbnRhaW5zKG1fdmlzaWJsZVNjcm9sbEpvYnNbaV0pKTsKKyAgICAgICAgICAgIG1fbm9uVmlz
aWJsZVNjcm9sbEpvYnMuYXBwZW5kKG1fdmlzaWJsZVNjcm9sbEpvYnNbaV0pOworICAgICAgICAg
ICAgbV92aXNpYmxlU2Nyb2xsSm9icy5yZW1vdmUoaSk7CiAgICAgICAgICAgICAtLWk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdGhlIGNvbXBsZXRlZCBsaXN0
LgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRl
ZC5zaXplKCk7ICsraSkgewotICAgICAgICBSZW5kZXJSZWN0IHJlY3QgPSBtX3Zpc2libGVTY3Jv
bGxKb2JzQ29tcGxldGVkLmF0KGkpOwotICAgICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyh2aXNp
YmxlQ29udGVudCkpIHsKLSAgICAgICAgICAgIG1fdmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQu
ZXJhc2UobV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5iZWdpbigpICsgaSk7Ci0gICAgICAg
ICAgICBhZGRUb1Njcm9sbFpvb21RdWV1ZShyZWN0LCAmbV9ub25WaXNpYmxlU2Nyb2xsSm9ic0Nv
bXBsZXRlZCk7CisgICAgICAgIGlmICghdmlzaWJsZVRpbGVzLmNvbnRhaW5zKG1fdmlzaWJsZVNj
cm9sbEpvYnNDb21wbGV0ZWRbaV0pKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fbm9uVmlzaWJs
ZVNjcm9sbEpvYnNDb21wbGV0ZWQuY29udGFpbnMobV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRl
ZFtpXSkpOworICAgICAgICAgICAgbV9ub25WaXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5hcHBl
bmQobV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZFtpXSk7CisgICAgICAgICAgICBtX3Zpc2li
bGVTY3JvbGxKb2JzQ29tcGxldGVkLnJlbW92ZShpKTsKICAgICAgICAgICAgIC0taTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTQ0OCwyOSArNDE0LDI5IEBAIHZvaWQgUmVuZGVyUXVldWU6OnZpc2li
bGVDb250ZW50Q2hhbmdlZChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnQp
CiAgICAgLy8gTW92ZSBub25WaXNpYmxlU2Nyb2xsSm9icyB0byB2aXNpYmxlU2Nyb2xsSm9icyBp
ZiB0aGV5IGRvIGludGVyc2VjdAogICAgIC8vIHRoZSB2aXNpYmxlIGNvbnRlbnQgcmVjdC4KICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbm9uVmlzaWJsZVNjcm9sbEpvYnMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgUmVuZGVyUmVjdCByZWN0ID0gbV9ub25WaXNpYmxlU2Nyb2xsSm9icy5h
dChpKTsKLSAgICAgICAgaWYgKHJlY3QuaW50ZXJzZWN0cyh2aXNpYmxlQ29udGVudCkpIHsKLSAg
ICAgICAgICAgIG1fbm9uVmlzaWJsZVNjcm9sbEpvYnMuZXJhc2UobV9ub25WaXNpYmxlU2Nyb2xs
Sm9icy5iZWdpbigpICsgaSk7Ci0gICAgICAgICAgICBhZGRUb1Njcm9sbFpvb21RdWV1ZShyZWN0
LCAmbV92aXNpYmxlU2Nyb2xsSm9icyk7CisgICAgICAgIGlmICh2aXNpYmxlVGlsZXMuY29udGFp
bnMobV9ub25WaXNpYmxlU2Nyb2xsSm9ic1tpXSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV92
aXNpYmxlU2Nyb2xsSm9icy5jb250YWlucyhtX25vblZpc2libGVTY3JvbGxKb2JzW2ldKSk7Cisg
ICAgICAgICAgICBtX3Zpc2libGVTY3JvbGxKb2JzLmFwcGVuZChtX25vblZpc2libGVTY3JvbGxK
b2JzW2ldKTsKKyAgICAgICAgICAgIG1fbm9uVmlzaWJsZVNjcm9sbEpvYnMucmVtb3ZlKGkpOwog
ICAgICAgICAgICAgLS1pOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRG8gdGhlIHNhbWUg
Zm9yIHRoZSBjb21wbGV0ZWQgbGlzdC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbm9u
VmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVuZGVy
UmVjdCByZWN0ID0gbV9ub25WaXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5hdChpKTsKLSAgICAg
ICAgaWYgKHJlY3QuaW50ZXJzZWN0cyh2aXNpYmxlQ29udGVudCkpIHsKLSAgICAgICAgICAgIG1f
bm9uVmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQuZXJhc2UobV9ub25WaXNpYmxlU2Nyb2xsSm9i
c0NvbXBsZXRlZC5iZWdpbigpICsgaSk7Ci0gICAgICAgICAgICBhZGRUb1Njcm9sbFpvb21RdWV1
ZShyZWN0LCAmbV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZCk7CisgICAgICAgIGlmICh2aXNp
YmxlVGlsZXMuY29udGFpbnMobV9ub25WaXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZFtpXSkpIHsK
KyAgICAgICAgICAgIEFTU0VSVCghbV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5jb250YWlu
cyhtX25vblZpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkW2ldKSk7CisgICAgICAgICAgICBtX3Zp
c2libGVTY3JvbGxKb2JzQ29tcGxldGVkLmFwcGVuZChtX25vblZpc2libGVTY3JvbGxKb2JzQ29t
cGxldGVkW2ldKTsKKyAgICAgICAgICAgIG1fbm9uVmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQu
cmVtb3ZlKGkpOwogICAgICAgICAgICAgLS1pOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KG1fdmlzaWJsZVNjcm9sbEpvYnMuZW1wdHkoKSAmJiAhbV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBs
ZXRlZC5lbXB0eSgpKQotICAgICAgICB2aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZChmYWxzZSAv
KnNob3VsZEJsaXQqLyk7CisgICAgaWYgKG1fdmlzaWJsZVNjcm9sbEpvYnMuaXNFbXB0eSgpICYm
ICFtX3Zpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkLmlzRW1wdHkoKSkKKyAgICAgICAgc2Nyb2xs
Wm9vbUpvYnNDb21wbGV0ZWQobV92aXNpYmxlU2Nyb2xsSm9icywgJm1fdmlzaWJsZVNjcm9sbEpv
YnNDb21wbGV0ZWQsIGZhbHNlIC8qc2hvdWxkQmxpdCovKTsKIAotICAgIGlmIChtX25vblZpc2li
bGVTY3JvbGxKb2JzLmVtcHR5KCkgJiYgIW1fbm9uVmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQu
ZW1wdHkoKSkKLSAgICAgICAgbm9uVmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQoKTsKKyAgICBp
ZiAobV9ub25WaXNpYmxlU2Nyb2xsSm9icy5pc0VtcHR5KCkgJiYgIW1fbm9uVmlzaWJsZVNjcm9s
bEpvYnNDb21wbGV0ZWQuaXNFbXB0eSgpKQorICAgICAgICBzY3JvbGxab29tSm9ic0NvbXBsZXRl
ZChtX25vblZpc2libGVTY3JvbGxKb2JzLCAmbV9ub25WaXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRl
ZCwgZmFsc2UgLypzaG91bGRCbGl0Ki8pOwogCiAgICAgLy8gV2Ugc2hvdWxkbid0IGJlIGVtcHR5
IGJlY2F1c2UgdGhlIGVhcmx5IHJldHVybiBhYm92ZSBhbmQgdGhlIGZhY3QgdGhhdCB0aGlzCiAg
ICAgLy8gbWV0aG9kIGp1c3Qgc2h1ZmZsZXMgcmVjdHMgZnJvbSBxdWV1ZSB0byBxdWV1ZSBoZW5j
ZSB0aGUgdG90YWwgbnVtYmVyIG9mCkBAIC00NzgsNzQgKzQ0NCwxMTcgQEAgdm9pZCBSZW5kZXJR
dWV1ZTo6dmlzaWJsZUNvbnRlbnRDaGFuZ2VkKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiB2aXNp
YmxlQ29udGVudCkKICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CiB9CiAKLXZvaWQgUmVuZGVyUXVl
dWU6OmNsZWFyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiByZWdpb24sIGJvb2wgY2xl
YXJSZWd1bGFyUmVuZGVySm9icykKK3ZvaWQgUmVuZGVyUXVldWU6OmJhY2tpbmdTdG9yZVJlY3RD
aGFuZ2luZyhjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgb2xkUmVjdCwgY29uc3QgUGxhdGZvcm06
OkludFJlY3QmIG5ld1JlY3QpCiB7Ci0gICAgSW50UmVjdExpc3QgcmVjdHMgPSByZWdpb24ucmVj
dHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlY3RzLnNpemUoKTsgKytpKQotICAg
ICAgICBjbGVhcihyZWN0cy5hdChpKSwgY2xlYXJSZWd1bGFyUmVuZGVySm9icyk7CisgICAgLy8g
V2UgY291bGQgZW1wdHkgdGhlbSBoZXJlIGluc3RlYWQgb2YgaW4gQmFja2luZ1N0b3JlUHJpdmF0
ZTo6c2V0QmFja2luZ1N0b3JlUmVjdCgpLAorICAgIC8vIGJ1dCBpdCBzZWVtcyBjbGVhbmVyIHRv
IGRvIGl0IHRoZXJlIGFuZCBzdGlsbCBhdm9pZCBjb2RlIHRvIG1hbnVhbGx5IG1vdmUgdGhlbS4K
KyAgICBBU1NFUlQobV92aXNpYmxlWm9vbUpvYnMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV92
aXNpYmxlWm9vbUpvYnNDb21wbGV0ZWQuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV92aXNpYmxl
U2Nyb2xsSm9icy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX3Zpc2libGVTY3JvbGxKb2JzQ29t
cGxldGVkLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fbm9uVmlzaWJsZVNjcm9sbEpvYnMuaXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQobV9ub25WaXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5pc0Vt
cHR5KCkpOworCisgICAgLy8gRW1wdHkgdGhlIHRpbGUtYmFzZWQgY3VycmVudCBiYXRjaCBhbmQg
bWVyZ2UgaXRzIHJlbWFpbmluZyByZWdpb24gd2l0aAorICAgIC8vIHRoZSBvbmUgZnJvbSBvdGhl
ciB1cGNvbWluZyByZWd1bGFyIHJlbmRlciBqb2JzLiBXZSdsbCBwaWNrIGFsbCBvZiB0aGVtCisg
ICAgLy8gdXAgbmV4dCB0aW1lIHJlbmRlclJlZ3VsYXJSZW5kZXJKb2JzKCkgaXMgY2FsbGVkLgor
ICAgIG1fcmVndWxhclJlbmRlckpvYnNSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6
dW5pb25SZWdpb25zKG1fcmVndWxhclJlbmRlckpvYnNSZWdpb24sIG1fY3VycmVudFJlZ3VsYXJS
ZW5kZXJKb2JzQmF0Y2hSZWdpb24pOworICAgIG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0
Y2hSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbigpOworICAgIG1fY3VycmVudFJlZ3Vs
YXJSZW5kZXJKb2JzQmF0Y2guY2xlYXIoKTsKIH0KIAotdm9pZCBSZW5kZXJRdWV1ZTo6Y2xlYXIo
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QsIGJvb2wgY2xlYXJSZWd1bGFyUmVuZGVySm9i
cykKK3ZvaWQgUmVuZGVyUXVldWU6OmNsZWFyKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9u
JiByZWdpb24sIENsZWFySm9ic0ZsYWdzIGNsZWFySm9ic0ZsYWdzKQogewotICAgIGlmIChtX3Zp
c2libGVTY3JvbGxKb2JzLmVtcHR5KCkgJiYgbV9ub25WaXNpYmxlU2Nyb2xsSm9icy5lbXB0eSgp
KQotICAgICAgICBBU1NFUlQobV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5lbXB0eSgpICYm
IG1fbm9uVmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQuZW1wdHkoKSk7CisgICAgY2xlYXJSZWdp
b25zKHJlZ2lvbiwgY2xlYXJKb2JzRmxhZ3MpOworICAgIGNsZWFyVGlsZUluZGV4ZXModGlsZUlu
ZGV4ZXNGdWxseUNvbnRhaW5lZEluUmVnaW9uKHJlZ2lvbiwgbV9wYXJlbnQtPmZyb250U3RhdGUo
KSksIGNsZWFySm9ic0ZsYWdzKTsKK30KIAotICAgIC8vIFJlbW92ZSBhbGwgcmVjdHMgZnJvbSBh
bGwgcXVldWVzIHRoYXQgYXJlIGNvbnRhaW5lZCBieSB0aGlzIHJlY3QuCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3Zpc2libGVTY3JvbGxKb2JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmIChyZWN0LmNvbnRhaW5zKG1fdmlzaWJsZVNjcm9sbEpvYnMuYXQoaSkpKSB7Ci0gICAgICAg
ICAgICBtX3Zpc2libGVTY3JvbGxKb2JzLmVyYXNlKG1fdmlzaWJsZVNjcm9sbEpvYnMuYmVnaW4o
KSArIGkpOwotICAgICAgICAgICAgLS1pOwotICAgICAgICB9Cit2b2lkIFJlbmRlclF1ZXVlOjpj
bGVhcihjb25zdCBUaWxlSW5kZXhMaXN0JiBpbmRleGVzLCBCYWNraW5nU3RvcmVHZW9tZXRyeSog
Z2VvbWV0cnksIENsZWFySm9ic0ZsYWdzIGNsZWFySm9ic0ZsYWdzKQoreworICAgIGNsZWFyUmVn
aW9ucyh0aWxlUmVnaW9uKGluZGV4ZXMsIGdlb21ldHJ5KSwgY2xlYXJKb2JzRmxhZ3MpOworICAg
IGNsZWFyVGlsZUluZGV4ZXMoaW5kZXhlcywgY2xlYXJKb2JzRmxhZ3MpOworfQorCit2b2lkIFJl
bmRlclF1ZXVlOjpjbGVhclJlZ2lvbnMoY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24mIHJl
Z2lvbiwgQ2xlYXJKb2JzRmxhZ3MgY2xlYXJKb2JzRmxhZ3MpCit7CisgICAgaWYgKGNsZWFySm9i
c0ZsYWdzICYgQ2xlYXJSZWd1bGFyUmVuZGVySm9icykgeworICAgICAgICBtX3JlZ3VsYXJSZW5k
ZXJKb2JzUmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9ucyht
X3JlZ3VsYXJSZW5kZXJKb2JzUmVnaW9uLCByZWdpb24pOworICAgICAgICBtX2N1cnJlbnRSZWd1
bGFyUmVuZGVySm9ic0JhdGNoUmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRy
YWN0UmVnaW9ucyhtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0JhdGNoUmVnaW9uLCByZWdpb24p
OworICAgICAgICBtX3JlZ3VsYXJSZW5kZXJKb2JzTm90UmVuZGVyZWRSZWdpb24gPSBQbGF0Zm9y
bTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RSZWdpb25zKG1fcmVndWxhclJlbmRlckpvYnNOb3RS
ZW5kZXJlZFJlZ2lvbiwgcmVnaW9uKTsKICAgICB9Cit9CiAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKHJlY3QuY29udGFpbnMobV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5hdChpKSkp
IHsKLSAgICAgICAgICAgIG1fdmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQuZXJhc2UobV92aXNp
YmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5iZWdpbigpICsgaSk7Ci0gICAgICAgICAgICAtLWk7Cit2
b2lkIFJlbmRlclF1ZXVlOjpjbGVhclRpbGVJbmRleGVzKGNvbnN0IFRpbGVJbmRleExpc3QmIGlu
ZGV4ZXMsIENsZWFySm9ic0ZsYWdzIGNsZWFySm9ic0ZsYWdzKQoreworICAgIGlmIChtX3Zpc2li
bGVTY3JvbGxKb2JzLmlzRW1wdHkoKSAmJiBtX25vblZpc2libGVTY3JvbGxKb2JzLmlzRW1wdHko
KSkKKyAgICAgICAgQVNTRVJUKG1fdmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQuaXNFbXB0eSgp
ICYmIG1fbm9uVmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQuaXNFbXB0eSgpKTsKKworICAgIC8v
IFJlbW92ZSBhbGwgaW5kZXhlcyBmcm9tIGFsbCBxdWV1ZXMgdGhhdCBhcmUgYmVpbmcgbWFya2Vk
IGFzIGNsZWFyZWQuCisgICAgaWYgKGNsZWFySm9ic0ZsYWdzICYgQ2xlYXJJbmNvbXBsZXRlWm9v
bUpvYnMpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Zpc2libGVab29tSm9i
cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGluZGV4ZXMuY29udGFpbnMobV92aXNp
YmxlWm9vbUpvYnMuYXQoaSkpKSB7CisgICAgICAgICAgICAgICAgbV92aXNpYmxlWm9vbUpvYnMu
cmVtb3ZlKGkpOworICAgICAgICAgICAgICAgIC0taTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ub25WaXNpYmxlU2Nyb2xs
Sm9icy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAocmVjdC5jb250YWlucyhtX25vblZpc2li
bGVTY3JvbGxKb2JzLmF0KGkpKSkgewotICAgICAgICAgICAgbV9ub25WaXNpYmxlU2Nyb2xsSm9i
cy5lcmFzZShtX25vblZpc2libGVTY3JvbGxKb2JzLmJlZ2luKCkgKyBpKTsKLSAgICAgICAgICAg
IC0taTsKKyAgICBpZiAoY2xlYXJKb2JzRmxhZ3MgJiBDbGVhckluY29tcGxldGVTY3JvbGxKb2Jz
KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92aXNpYmxlU2Nyb2xsSm9icy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGluZGV4ZXMuY29udGFpbnMobV92aXNpYmxl
U2Nyb2xsSm9icy5hdChpKSkpIHsKKyAgICAgICAgICAgICAgICBtX3Zpc2libGVTY3JvbGxKb2Jz
LnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICAtLWk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbm9uVmlzaWJsZVNjcm9s
bEpvYnNDb21wbGV0ZWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHJlY3QuY29udGFpbnMo
bV9ub25WaXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5hdChpKSkpIHsKLSAgICAgICAgICAgIG1f
bm9uVmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQuZXJhc2UobV9ub25WaXNpYmxlU2Nyb2xsSm9i
c0NvbXBsZXRlZC5iZWdpbigpICsgaSk7Ci0gICAgICAgICAgICAtLWk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9ub25WaXNpYmxlU2Nyb2xsSm9icy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgaWYgKGluZGV4ZXMuY29udGFpbnMobV9ub25WaXNpYmxlU2Nyb2xsSm9icy5h
dChpKSkpIHsKKyAgICAgICAgICAgICAgICBtX25vblZpc2libGVTY3JvbGxKb2JzLnJlbW92ZShp
KTsKKyAgICAgICAgICAgICAgICAtLWk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICAvLyBPbmx5IGNsZWFyIHRoZSByZWd1bGFyIHJlbmRlciBqb2JzIGlmIHRoZSBmbGFn
IGhhcyBiZWVuIHNldC4KLSAgICBpZiAoY2xlYXJSZWd1bGFyUmVuZGVySm9icykKLSAgICAgICAg
dGhpcy0+Y2xlYXJSZWd1bGFyUmVuZGVySm9icyhyZWN0KTsKKyAgICBpZiAoY2xlYXJKb2JzRmxh
Z3MgJiBDbGVhckNvbXBsZXRlZEpvYnMpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3Zpc2libGVab29tSm9ic0NvbXBsZXRlZC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKGluZGV4ZXMuY29udGFpbnMobV92aXNpYmxlWm9vbUpvYnNDb21wbGV0ZWQuYXQoaSkpKSB7
CisgICAgICAgICAgICAgICAgbV92aXNpYmxlWm9vbUpvYnNDb21wbGV0ZWQucmVtb3ZlKGkpOwor
ICAgICAgICAgICAgICAgIC0taTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgaWYg
KG1fdmlzaWJsZVNjcm9sbEpvYnMuZW1wdHkoKSAmJiAhbV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBs
ZXRlZC5lbXB0eSgpKQotICAgICAgICB2aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZChmYWxzZSAv
KnNob3VsZEJsaXQqLyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92aXNpYmxl
U2Nyb2xsSm9ic0NvbXBsZXRlZC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGluZGV4
ZXMuY29udGFpbnMobV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5hdChpKSkpIHsKKyAgICAg
ICAgICAgICAgICBtX3Zpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkLnJlbW92ZShpKTsKKyAgICAg
ICAgICAgICAgICAtLWk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgIGlmIChtX25v
blZpc2libGVTY3JvbGxKb2JzLmVtcHR5KCkgJiYgIW1fbm9uVmlzaWJsZVNjcm9sbEpvYnNDb21w
bGV0ZWQuZW1wdHkoKSkKLSAgICAgICAgbm9uVmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQoKTsK
LX0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX25vblZpc2libGVTY3JvbGxKb2Jz
Q29tcGxldGVkLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaW5kZXhlcy5jb250YWlu
cyhtX25vblZpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkLmF0KGkpKSkgeworICAgICAgICAgICAg
ICAgIG1fbm9uVmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQucmVtb3ZlKGkpOworICAgICAgICAg
ICAgICAgIC0taTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAotdm9pZCBSZW5k
ZXJRdWV1ZTo6Y2xlYXJSZWd1bGFyUmVuZGVySm9icyhjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYg
cmVjdCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudFJlZ3VsYXJSZW5k
ZXJKb2JzQmF0Y2guc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHJlY3QuY29udGFpbnMobV9j
dXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaC5hdChpKSkpIHsKLSAgICAgICAgICAgIG1fY3Vy
cmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2guZXJhc2UobV9jdXJyZW50UmVndWxhclJlbmRlckpv
YnNCYXRjaC5iZWdpbigpICsgaSk7Ci0gICAgICAgICAgICAtLWk7CisgICAgaWYgKGNsZWFySm9i
c0ZsYWdzICYgQ2xlYXJSZWd1bGFyUmVuZGVySm9icykgeworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2guc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChpbmRleGVzLmNvbnRhaW5zKG1fY3VycmVudFJlZ3VsYXJSZW5kZXJK
b2JzQmF0Y2guYXQoaSkpKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50UmVndWxhclJlbmRl
ckpvYnNCYXRjaC5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgLS1pOworICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQotICAgIG1fcmVndWxhclJlbmRlckpvYnNSZWdpb24gPSBQbGF0
Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RSZWdpb25zKG1fcmVndWxhclJlbmRlckpvYnNS
ZWdpb24sIHJlY3QpOwotICAgIG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24g
PSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RSZWdpb25zKG1fY3VycmVudFJlZ3Vs
YXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24sIHJlY3QpOwotICAgIG1fcmVndWxhclJlbmRlckpvYnNO
b3RSZW5kZXJlZFJlZ2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lv
bnMobV9yZWd1bGFyUmVuZGVySm9ic05vdFJlbmRlcmVkUmVnaW9uLCByZWN0KTsKLX0KIAotdm9p
ZCBSZW5kZXJRdWV1ZTo6Y2xlYXJWaXNpYmxlWm9vbSgpCi17Ci0gICAgbV92aXNpYmxlWm9vbUpv
YnMuY2xlYXIoKTsKKyAgICBpZiAobV92aXNpYmxlWm9vbUpvYnMuaXNFbXB0eSgpICYmICFtX3Zp
c2libGVab29tSm9ic0NvbXBsZXRlZC5pc0VtcHR5KCkpCisgICAgICAgIHNjcm9sbFpvb21Kb2Jz
Q29tcGxldGVkKG1fdmlzaWJsZVpvb21Kb2JzLCAmbV92aXNpYmxlWm9vbUpvYnNDb21wbGV0ZWQs
IGZhbHNlIC8qc2hvdWxkQmxpdCovKTsKKworICAgIGlmIChtX3Zpc2libGVTY3JvbGxKb2JzLmlz
RW1wdHkoKSAmJiAhbV92aXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5pc0VtcHR5KCkpCisgICAg
ICAgIHNjcm9sbFpvb21Kb2JzQ29tcGxldGVkKG1fdmlzaWJsZVNjcm9sbEpvYnMsICZtX3Zpc2li
bGVTY3JvbGxKb2JzQ29tcGxldGVkLCBmYWxzZSAvKnNob3VsZEJsaXQqLyk7CisKKyAgICBpZiAo
bV9ub25WaXNpYmxlU2Nyb2xsSm9icy5pc0VtcHR5KCkgJiYgIW1fbm9uVmlzaWJsZVNjcm9sbEpv
YnNDb21wbGV0ZWQuaXNFbXB0eSgpKQorICAgICAgICBzY3JvbGxab29tSm9ic0NvbXBsZXRlZCht
X25vblZpc2libGVTY3JvbGxKb2JzLCAmbV9ub25WaXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZCwg
ZmFsc2UgLypzaG91bGRCbGl0Ki8pOwogfQogCiBib29sIFJlbmRlclF1ZXVlOjpyZWd1bGFyUmVu
ZGVySm9ic1ByZXZpb3VzbHlBdHRlbXB0ZWRCdXROb3RSZW5kZXJlZChjb25zdCBQbGF0Zm9ybTo6
SW50UmVjdCYgcmVjdCkKQEAgLTU2Nyw2ICs1NzYsNyBAQCB2b2lkIFJlbmRlclF1ZXVlOjpyZW5k
ZXIoYm9vbCBzaG91bGRQZXJmb3JtUmVndWxhclJlbmRlckpvYnMpCiAjZW5kaWYKIAogICAgIG1f
cGFyZW50LT5yZXF1ZXN0TGF5b3V0SWZOZWVkZWQoKTsKKyAgICBtX3BhcmVudC0+dXBkYXRlVGls
ZU1hdHJpeElmTmVlZGVkKCk7CiAKICNpZiBERUJVR19SRU5ERVJfUVVFVUUKICAgICBkb3VibGUg
ZWxhcHNlZCA9IFdURjo6Y3VycmVudFRpbWUoKSAtIHRpbWU7CkBAIC01NzUsMjYyICs1ODUsMjA4
IEBAIHZvaWQgUmVuZGVyUXVldWU6OnJlbmRlcihib29sIHNob3VsZFBlcmZvcm1SZWd1bGFyUmVu
ZGVySm9icykKICNlbmRpZgogCiAgICAgLy8gRW1wdHkgdGhlIHF1ZXVlcyBpbiBhIHByZWNpc2Ug
b3JkZXIgb2YgcHJpb3JpdHkuCi0gICAgaWYgKCFtX3Zpc2libGVab29tSm9icy5lbXB0eSgpKQot
ICAgICAgICByZW5kZXJWaXNpYmxlWm9vbUpvYigpOwotICAgIGVsc2UgaWYgKCFtX3Zpc2libGVT
Y3JvbGxKb2JzLmVtcHR5KCkpCi0gICAgICAgIHJlbmRlclZpc2libGVTY3JvbGxKb2IoKTsKLSAg
ICBlbHNlIGlmIChzaG91bGRQZXJmb3JtUmVndWxhclJlbmRlckpvYnMgJiYgKCFtX2N1cnJlbnRS
ZWd1bGFyUmVuZGVySm9ic0JhdGNoLmVtcHR5KCkgfHwgIW1fcmVndWxhclJlbmRlckpvYnNSZWdp
b24uaXNFbXB0eSgpKSkgewotICAgICAgICBpZiAoY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JCYXRj
aFVuZGVyUHJlc3N1cmUoKSkKLSAgICAgICAgICAgIHJlbmRlckFsbEN1cnJlbnRSZWd1bGFyUmVu
ZGVySm9icygpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW5kZXJSZWd1bGFyUmVuZGVy
Sm9iKCk7Ci0gICAgfSBlbHNlIGlmICghbV9ub25WaXNpYmxlU2Nyb2xsSm9icy5lbXB0eSgpKQot
ICAgICAgICByZW5kZXJOb25WaXNpYmxlU2Nyb2xsSm9iKCk7CisgICAgaWYgKCFtX3Zpc2libGVa
b29tSm9icy5pc0VtcHR5KCkpCisgICAgICAgIHJlbmRlclNjcm9sbFpvb21Kb2JzKCZtX3Zpc2li
bGVab29tSm9icywgJm1fdmlzaWJsZVpvb21Kb2JzQ29tcGxldGVkLCB0cnVlIC8qYWxsQXRPbmNl
SWZQb3NzaWJsZSovLCB0cnVlIC8qc2hvdWxkQmxpdFdoZW5Db21wbGV0ZWQqLyk7CisgICAgZWxz
ZSBpZiAoIW1fdmlzaWJsZVNjcm9sbEpvYnMuaXNFbXB0eSgpKQorICAgICAgICByZW5kZXJTY3Jv
bGxab29tSm9icygmbV92aXNpYmxlU2Nyb2xsSm9icywgJm1fdmlzaWJsZVNjcm9sbEpvYnNDb21w
bGV0ZWQsIGZhbHNlIC8qYWxsQXRPbmNlSWZQb3NzaWJsZSovLCB0cnVlIC8qc2hvdWxkQmxpdFdo
ZW5Db21wbGV0ZWQqLyk7CisgICAgZWxzZSBpZiAoc2hvdWxkUGVyZm9ybVJlZ3VsYXJSZW5kZXJK
b2JzICYmICghbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaC5pc0VtcHR5KCkgfHwgIW1f
cmVndWxhclJlbmRlckpvYnNSZWdpb24uaXNFbXB0eSgpKSkgeworICAgICAgICBib29sIGFsbEF0
T25jZUlmUG9zc2libGUgPSBjdXJyZW50UmVndWxhclJlbmRlckpvYkJhdGNoVW5kZXJQcmVzc3Vy
ZSgpOworICAgICAgICByZW5kZXJSZWd1bGFyUmVuZGVySm9icyhhbGxBdE9uY2VJZlBvc3NpYmxl
KTsKKyAgICB9IGVsc2UgaWYgKCFtX25vblZpc2libGVTY3JvbGxKb2JzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmVuZGVyU2Nyb2xsWm9vbUpvYnMoJm1fbm9uVmlzaWJsZVNjcm9sbEpvYnMsICZtX25v
blZpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkLCBmYWxzZSAvKmFsbEF0T25jZUlmUG9zc2libGUq
LywgZmFsc2UgLypzaG91bGRCbGl0V2hlbkNvbXBsZXRlZCovKTsKIH0KIAotdm9pZCBSZW5kZXJR
dWV1ZTo6cmVuZGVyQWxsQ3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzKCkKK3ZvaWQgUmVuZGVyUXVl
dWU6OnJlbmRlclJlZ3VsYXJSZW5kZXJKb2JzKGJvb2wgYWxsQXRPbmNlSWZQb3NzaWJsZSkKIHsK
ICNpZiBERUJVR19SRU5ERVJfUVVFVUUKLSAgICAvLyBTdGFydCB0aGUgdGltZSBtZWFzdXJlbWVu
dC4uLgorICAgIC8vIFN0YXJ0IHRoZSB0aW1lIG1lYXN1cmVtZW50LgogICAgIGRvdWJsZSB0aW1l
ID0gV1RGOjpjdXJyZW50VGltZSgpOwogI2VuZGlmCiAKLSAgICAvLyBSZXF1ZXN0IGxheW91dCBm
aXJzdAotICAgIG1fcGFyZW50LT5yZXF1ZXN0TGF5b3V0SWZOZWVkZWQoKTsKKyAgICBBU1NFUlQo
IW1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2guaXNFbXB0eSgpIHx8ICFtX3JlZ3VsYXJS
ZW5kZXJKb2JzUmVnaW9uLmlzRW1wdHkoKSk7CiAKLSNpZiBERUJVR19SRU5ERVJfUVVFVUUKLSAg
ICBkb3VibGUgZWxhcHNlZCA9IFdURjo6Y3VycmVudFRpbWUoKSAtIHRpbWU7Ci0gICAgaWYgKGVs
YXBzZWQpCi0gICAgICAgIFBsYXRmb3JtOjpsb2dBbHdheXMoUGxhdGZvcm06OkxvZ0xldmVsQ3Jp
dGljYWwsICJSZW5kZXJRdWV1ZTo6cmVuZGVyQWxsQ3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzIGxh
eW91dCBlbGFwc2VkPSVmIiwgZWxhcHNlZCk7Ci0jZW5kaWYKKyAgICBpZiAoYWxsQXRPbmNlSWZQ
b3NzaWJsZSAmJiAhbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaFJlZ2lvbi5pc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBjdXJyZW50IGJhdGNoIG9mIGpvYnMgYWxy
ZWFkeSwgbWVyZ2UgaXQgYmFjayBpbnRvIHRoZQorICAgICAgICAvLyB3aG9sZSBhcmVhIHNvIHRo
YXQgd2Ugd2lsbCBwaWNrIHVwIGFsbCBvZiBpdCBmb3IgdGhlIG5leHQgcnVuLgorICAgICAgICBt
X3JlZ3VsYXJSZW5kZXJKb2JzUmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OnVuaW9u
UmVnaW9ucyhtX3JlZ3VsYXJSZW5kZXJKb2JzUmVnaW9uLCBtX2N1cnJlbnRSZWd1bGFyUmVuZGVy
Sm9ic0JhdGNoUmVnaW9uKTsKIAotICAgIC8vIFRoZSBzdGF0ZSBvZiByZW5kZXIgcXVldWUgbWF5
IGJlIG1vZGlmaWVkIGZyb20gaW5zaWRlIHJlcXVlc3RMYXlvdXRJZk5lZWRlZC4KLSAgICAvLyBJ
biBmYWN0LCBpdCBjYW4gZXZlbiBiZSBlbXB0aWVkIGVudGlyZWx5ISBMYXlvdXQgY2FuIHRyaWdn
ZXIgYSBjYWxsIHRvCi0gICAgLy8gUmVuZGVyUXVldWU6OmNsZWFyLiBTZWUgUFIjMTAxODExIGZv
ciBpbnN0YW5jZS4gU28gd2Ugc2hvdWxkIGNoZWNrIGFnYWluIGhlcmUuCi0gICAgaWYgKCFoYXND
dXJyZW50UmVndWxhclJlbmRlckpvYigpKQotICAgICAgICByZXR1cm47CisgICAgICAgIC8vIENs
ZWFyIHRoaXMgc2luY2Ugd2UncmUgYWJvdXQgdG8gcmVuZGVyIGV2ZXJ5dGhpbmcuCisgICAgICAg
IG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVj
dFJlZ2lvbigpOworICAgICAgICBtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0JhdGNoLmNsZWFy
KCk7CisgICAgfQogCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gY3VycmVudCBiYXRjaCBvZiBqb2Jz
LCB0aGVuIGNyZWF0ZSBvbmUuCisgICAgYm9vbCBzaG91bGREaXJlY3RSZW5kZXJpbmdUb1dpbmRv
dyA9IG1fcGFyZW50LT5zaG91bGREaXJlY3RSZW5kZXJpbmdUb1dpbmRvdygpOworICAgIFBsYXRm
b3JtOjpJbnRSZWN0IGNvbnRlbnRzUmVjdCA9IG1fcGFyZW50LT5leHBhbmRlZENvbnRlbnRzUmVj
dCgpOworCisgICAgLy8gU3RhcnQgbmV3IGJhdGNoIGlmIG5lZWRlZC4KICAgICBpZiAobV9jdXJy
ZW50UmVndWxhclJlbmRlckpvYnNCYXRjaFJlZ2lvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
RG9uJ3QgdHJ5IHRvIHJlbmRlciBhbnl0aGluZyBvdXRzaWRlIHRoZSB3aG9sZSBjb250ZW50cyBy
ZWN0YW5nbGUuCisgICAgICAgIG1fcmVndWxhclJlbmRlckpvYnNSZWdpb24gPSBQbGF0Zm9ybTo6
SW50UmVjdFJlZ2lvbjo6aW50ZXJzZWN0UmVnaW9ucyhtX3JlZ3VsYXJSZW5kZXJKb2JzUmVnaW9u
LCBjb250ZW50c1JlY3QpOworCisgICAgICAgIC8vIFNwbGl0IHRoZSBjdXJyZW50IHJlZ3VsYXIg
cmVuZGVyIGpvYiByZWdpb24gaW50byB0aWxlcy4KKyAgICAgICAgaWYgKCFzaG91bGREaXJlY3RS
ZW5kZXJpbmdUb1dpbmRvdykKKyAgICAgICAgICAgIG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2Jz
QmF0Y2ggPSB0aWxlSW5kZXhlc0ludGVyc2VjdGluZ1JlZ2lvbihtX3JlZ3VsYXJSZW5kZXJKb2Jz
UmVnaW9uLCBtX3BhcmVudC0+ZnJvbnRTdGF0ZSgpKTsKIAotICAgICAgICAvLyBDcmVhdGUgYSBj
dXJyZW50IHJlZ2lvbiBvYmplY3QgZnJvbSBvdXIgcmVndWxhciByZW5kZXIgcmVnaW9uLgorICAg
ICAgICAvLyBDcmVhdGUgYSByZWdpb24gb2JqZWN0IHRoYXQgd2lsbCBiZSBjaGVja2VkIHdoZW4g
YWRkaW5nIG5ldyByZWN0cyBiZWZvcmUKKyAgICAgICAgLy8gdGhpcyBiYXRjaCBoYXMgYmVlbiBj
b21wbGV0ZWQuCiAgICAgICAgIG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24g
PSBtX3JlZ3VsYXJSZW5kZXJKb2JzUmVnaW9uOwogCi0gICAgICAgIC8vIENsZWFyIHRoaXMgc2lu
Y2Ugd2UncmUgYWJvdXQgdG8gcmVuZGVyIGV2ZXJ5dGhpbmcuCisgICAgICAgIC8vIENsZWFyIHRo
ZSBmb3JtZXIgcmVnaW9uIHNpbmNlIGl0IGlzIG5vdyBwYXJ0IG9mIHRoaXMgYmF0Y2guCiAgICAg
ICAgIG1fcmVndWxhclJlbmRlckpvYnNSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbigp
OwotICAgIH0KLQotICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIHJlZ2lvbk5vdFJlbmRlcmVk
OwotICAgIGlmIChtX3BhcmVudC0+c2hvdWxkU3VwcHJlc3NOb25WaXNpYmxlUmVndWxhclJlbmRl
ckpvYnMoKSkgewotICAgICAgICAvLyBSZWNvcmQgYW55IHBhcnQgb2YgdGhlIHJlZ2lvbiB0aGF0
IGRvZXNuJ3QgaW50ZXJzZWN0IHRoZSBjdXJyZW50IHZpc2libGUgY29udGVudHMgcmVjdC4KLSAg
ICAgICAgcmVnaW9uTm90UmVuZGVyZWQgPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJh
Y3RSZWdpb25zKG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24sIG1fcGFyZW50
LT52aXNpYmxlQ29udGVudHNSZWN0KCkpOwotICAgICAgICBtX3JlZ3VsYXJSZW5kZXJKb2JzTm90
UmVuZGVyZWRSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6dW5pb25SZWdpb25zKG1f
cmVndWxhclJlbmRlckpvYnNOb3RSZW5kZXJlZFJlZ2lvbiwgcmVnaW9uTm90UmVuZGVyZWQpOwog
CiAjaWYgREVCVUdfUkVOREVSX1FVRVVFCi0gICAgICAgIGlmICghcmVnaW9uTm90UmVuZGVyZWQu
aXNFbXB0eSgpKQotICAgICAgICAgICAgUGxhdGZvcm06OmxvZ0Fsd2F5cyhQbGF0Zm9ybTo6TG9n
TGV2ZWxDcml0aWNhbCwgIlJlbmRlclF1ZXVlOjpyZW5kZXJBbGxDdXJyZW50UmVndWxhclJlbmRl
ckpvYnMgcmVnaW9uIG5vdCBjb21wbGV0ZWx5IHJlbmRlcmVkISIpOworICAgICAgICBQbGF0Zm9y
bTo6bG9nQWx3YXlzKFBsYXRmb3JtOjpMb2dMZXZlbENyaXRpY2FsLAorICAgICAgICAgICAgIlJl
bmRlclF1ZXVlOjpyZW5kZXJSZWd1bGFyUmVuZGVySm9icyBiYXRjaCBzaXplIGlzICVkISIsCisg
ICAgICAgICAgICBtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0JhdGNoLnNpemUoKSk7CiAjZW5k
aWYKLQotICAgICAgICAvLyBDbGlwIHRvIHRoZSB2aXNpYmxlIGNvbnRlbnRzIHNvIHdlJ2xsIGJl
IGZhc3Rlci4KLSAgICAgICAgbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaFJlZ2lvbiA9
IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjppbnRlcnNlY3RSZWdpb25zKG1fY3VycmVudFJlZ3Vs
YXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24sIG1fcGFyZW50LT52aXNpYmxlQ29udGVudHNSZWN0KCkp
OwotICAgIH0KLQotICAgIGJvb2wgcmVuZGVyZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1fY3VycmVu
dFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6
dmVjdG9yPFBsYXRmb3JtOjpJbnRSZWN0PiByZWN0TGlzdCA9IG1fY3VycmVudFJlZ3VsYXJSZW5k
ZXJKb2JzQmF0Y2hSZWdpb24ucmVjdHMoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByZWN0TGlzdC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHJlbmRlcmVkID0gbV9wYXJlbnQt
PnJlbmRlcihyZWN0TGlzdC5hdChpKSkgPyB0cnVlIDogcmVuZGVyZWQ7CiAgICAgfQogCi0jaWYg
REVCVUdfUkVOREVSX1FVRVVFCi0gICAgLy8gU3RvcCB0aGUgdGltZSBtZWFzdXJlbWVudC4KLSAg
ICBlbGFwc2VkID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZTsKLSAgICBQbGF0Zm9ybTo6bG9n
QWx3YXlzKFBsYXRmb3JtOjpMb2dMZXZlbENyaXRpY2FsLAotICAgICAgICAiUmVuZGVyUXVldWU6
OnJlbmRlckFsbEN1cnJlbnRSZWd1bGFyUmVuZGVySm9icyBleHRlbnRzPSVzIG51bWJlck9mUmVj
dHM9JWQgZWxhcHNlZD0lZiIsCi0gICAgICAgIG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0
Y2hSZWdpb24uZXh0ZW50cygpLnRvU3RyaW5nKCkuY19zdHIoKSwKLSAgICAgICAgbV9jdXJyZW50
UmVndWxhclJlbmRlckpvYnNCYXRjaFJlZ2lvbi5yZWN0cygpLnNpemUoKSwKLSAgICAgICAgZWxh
cHNlZCk7Ci0jZW5kaWYKLQotICAgIC8vIENsZWFyIHRoZSByZWdpb24gYW5kIGJsaXQgc2luY2Ug
dGhpcyBiYXRjaCBpcyBub3cgY29tcGxldGUuCi0gICAgUGxhdGZvcm06OkludFJlY3QgcmVuZGVy
ZWRSZWN0ID0gbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaFJlZ2lvbi5leHRlbnRzKCk7
Ci0gICAgbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaC5jbGVhcigpOwotICAgIG1fY3Vy
cmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lv
bigpOwotICAgIG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hVbmRlclByZXNzdXJlID0g
ZmFsc2U7Ci0KLSAgICBpZiAocmVuZGVyZWQpCi0gICAgICAgIG1fcGFyZW50LT5kaWRSZW5kZXJD
b250ZW50KHJlbmRlcmVkUmVjdCk7Ci0KLSAgICBpZiAobV9wYXJlbnQtPnNob3VsZFN1cHByZXNz
Tm9uVmlzaWJsZVJlZ3VsYXJSZW5kZXJKb2JzKCkgJiYgIXJlZ2lvbk5vdFJlbmRlcmVkLmlzRW1w
dHkoKSkKLSAgICAgICAgbV9wYXJlbnQtPnVwZGF0ZVRpbGVzRm9yU2Nyb2xsT3JOb3RSZW5kZXJl
ZFJlZ2lvbihmYWxzZSAvKmNoZWNrTG9hZGluZyovKTsKLX0KLQotdm9pZCBSZW5kZXJRdWV1ZTo6
c3RhcnRSZWd1bGFyUmVuZGVySm9iQmF0Y2hJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2N1cnJl
bnRSZWd1bGFyUmVuZGVySm9ic0JhdGNoLmVtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBQ
bGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBjaGFuZ2luZ1JlZ2lvbiA9IG1fY3VycmVudFJlZ3VsYXJS
ZW5kZXJKb2JzQmF0Y2hSZWdpb247CisgICAgUGxhdGZvcm06OkludFJlY3RSZWdpb24gY2hhbmdp
bmdSZWdpb25TY2hlZHVsZWRGb3JMYXRlciA9IG1fcmVndWxhclJlbmRlckpvYnNSZWdpb247Cisg
ICAgUGxhdGZvcm06OkludFJlY3RSZWdpb24gcmVnaW9uTm90UmVuZGVyZWRUaGlzVGltZTsKIAot
ICAgIC8vIERlY29tcG9zZSB0aGUgY3VycmVudCByZWd1bGFyIHJlbmRlciBqb2IgcmVnaW9uIGlu
dG8gcmVuZGVyIHJlY3QgcGllY2VzLgotICAgIEludFJlY3RMaXN0IHJlZ3VsYXJSZW5kZXJKb2Jz
ID0gbV9yZWd1bGFyUmVuZGVySm9ic1JlZ2lvbi5yZWN0cygpOworICAgIFRpbGVJbmRleExpc3Qq
IG91dHN0YW5kaW5nSm9icyA9ICZtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0JhdGNoOworICAg
IFRpbGVJbmRleExpc3QgY29tcGxldGVkSm9iczsKKyAgICBUaWxlSW5kZXhMaXN0IHRpbGVzVG9S
ZW5kZXI7CiAKLSAgICAvLyBUaGUgY3VycmVudCBiYXRjaC4uLgotICAgIG1fY3VycmVudFJlZ3Vs
YXJSZW5kZXJKb2JzQmF0Y2ggPSByZWd1bGFyUmVuZGVySm9iczsKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZkF2YWlsYWJsZUJhY2tCdWZmZXJzID0gc2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9XaW5kb3cK
KyAgICAgICAgPyAwCisgICAgICAgIDogU3VyZmFjZVBvb2w6Omdsb2JhbFN1cmZhY2VQb29sKCkt
Pm51bWJlck9mQXZhaWxhYmxlQmFja0J1ZmZlcnMoKTsKIAotICAgIC8vIENyZWF0ZSBhIHJlZ2lv
biBvYmplY3QgdGhhdCB3aWxsIGJlIGNoZWNrZWQgd2hlbiBhZGRpbmcgbmV3IHJlY3RzIGJlZm9y
ZQotICAgIC8vIHRoaXMgYmF0Y2ggaGFzIGJlZW4gY29tcGxldGVkLgotICAgIG1fY3VycmVudFJl
Z3VsYXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24gPSBtX3JlZ3VsYXJSZW5kZXJKb2JzUmVnaW9uOwor
ICAgIHdoaWxlICghb3V0c3RhbmRpbmdKb2JzLT5pc0VtcHR5KCkgJiYgbnVtYmVyT2ZBdmFpbGFi
bGVCYWNrQnVmZmVycykgeworICAgICAgICAvLyBSZW5kZXIgYXMgbWFueSB0aWxlcyBhdCBvbmNl
IGFzIHdlIGNhbiBoYW5kbGUuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3V0c3Rh
bmRpbmdKb2JzLT5zaXplKCkgJiYgbnVtYmVyT2ZBdmFpbGFibGVCYWNrQnVmZmVyczsgKytpKSB7
CisgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXggPSAoKm91dHN0YW5kaW5nSm9icylbaV07CiAK
LSAgICAvLyBDbGVhciB0aGUgZm9ybWVyIHJlZ2lvbiBzaW5jZSBpdCBpcyBub3cgcGFydCBvZiB0
aGlzIGJhdGNoLgotICAgIG1fcmVndWxhclJlbmRlckpvYnNSZWdpb24gPSBQbGF0Zm9ybTo6SW50
UmVjdFJlZ2lvbigpOworICAgICAgICAgICAgQmFja2luZ1N0b3JlR2VvbWV0cnkqIGdlb21ldHJ5
ID0gbV9wYXJlbnQtPmZyb250U3RhdGUoKTsKKyAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0
IHRpbGVSZWN0KGdlb21ldHJ5LT5vcmlnaW5PZlRpbGUoaW5kZXgpLCBtX3BhcmVudC0+dGlsZVNp
emUoKSk7CiAKKyAgICAgICAgICAgIGlmICghY29udGVudHNSZWN0LmludGVyc2VjdHModGlsZVJl
Y3QpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNhZmV0eSBmYWxsYmFjaywgYXQg
dGhpcyBwb2ludCB3ZSBzaG91bGQgb25seQorICAgICAgICAgICAgICAgIC8vIGVuY291bnRlciB0
aWxlcyBvdXRzaWRlIG9mIHRoZSBjb250ZW50cyByZWN0IGlmIHdlJ3JlIGluCisgICAgICAgICAg
ICAgICAgLy8gYSBzZWNvbmQgcnVuIG9mIHRoZSBzYW1lIGJhdGNoIGFuZCB0aGUgY29udGVudHMg
c2l6ZSBoYXMKKyAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHJ1bi4g
T3RoZXJ3aXNlLCBzZWUgdGhlIGNyb3BwaW5nIGFib3ZlLgogI2lmIERFQlVHX1JFTkRFUl9RVUVV
RQotICAgIFBsYXRmb3JtOjpsb2dBbHdheXMoUGxhdGZvcm06OkxvZ0xldmVsQ3JpdGljYWwsCi0g
ICAgICAgICJSZW5kZXJRdWV1ZTo6c3RhcnRSZWd1bGFyUmVuZGVySm9iQmF0Y2hJZk5lZWRlZCBi
YXRjaCBzaXplIGlzICVkISIsCi0gICAgICAgIG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0
Y2guc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybTo6bG9nQWx3YXlzKFBsYXRmb3Jt
OjpMb2dMZXZlbENyaXRpY2FsLAorICAgICAgICAgICAgICAgICAgICAiUmVuZGVyUXVldWU6OnJl
bmRlclJlZ3VsYXJSZW5kZXJKb2JzIHRpbGUgYXQgJXMgb3V0c2lkZSBvZiBleHBhbmRlZCBjb250
ZW50cyByZWN0ICVzLCBpZ25vcmluZy4iLAorICAgICAgICAgICAgICAgICAgICB0aWxlUmVjdC50
b1N0cmluZygpLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzUmVjdC50b1N0
cmluZygpLmNfc3RyKCkpOwogI2VuZGlmCi19Ci0KLXZvaWQgUmVuZGVyUXVldWU6OnJlbmRlclZp
c2libGVab29tSm9iKCkKLXsKLSAgICBBU1NFUlQobV92aXNpYmxlWm9vbUpvYnMuc2l6ZSgpID4g
MCk7Ci0KLSNpZiBERUJVR19SRU5ERVJfUVVFVUUKLSAgICAvLyBTdGFydCB0aGUgdGltZSBtZWFz
dXJlbWVudC4KLSAgICBkb3VibGUgdGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKLSNlbmRpZgot
Ci0gICAgUmVuZGVyUmVjdCogcmVjdCA9ICZtX3Zpc2libGVab29tSm9ic1swXTsKLSAgICBBU1NF
UlQoIXJlY3QtPmlzQ29tcGxldGVkKCkpOwotICAgIFBsYXRmb3JtOjpJbnRSZWN0IHN1YlJlY3Qg
PSByZWN0LT5yZWN0Rm9yUmVuZGVyaW5nKCk7Ci0gICAgaWYgKHJlY3QtPmlzQ29tcGxldGVkKCkp
Ci0gICAgICAgIG1fdmlzaWJsZVpvb21Kb2JzLmVyYXNlKG1fdmlzaWJsZVpvb21Kb2JzLmJlZ2lu
KCkpOworICAgICAgICAgICAgICAgIG91dHN0YW5kaW5nSm9icy0+cmVtb3ZlKGkpOworICAgICAg
ICAgICAgICAgIC0taTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9i
c0JhdGNoUmVnaW9uID0gUGxhdGZvcm06OkludFJlY3RSZWdpb246OmludGVyc2VjdFJlZ2lvbnMo
bV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaFJlZ2lvbiwgY29udGVudHNSZWN0KTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KIAotICAgIG1fcGFyZW50LT5y
ZW5kZXIoc3ViUmVjdCk7CisgICAgICAgICAgICBpZiAobV9wYXJlbnQtPnNob3VsZFN1cHByZXNz
Tm9uVmlzaWJsZVJlZ3VsYXJSZW5kZXJKb2JzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBh
IHRpbGUgaXMgbm90IHZpc2libGUsIHJlbWVtYmVyIGl0IGFzIG5vdCByZW5kZXJlZCB0byBiZQor
ICAgICAgICAgICAgICAgIC8vIHBpY2tlZCB1cCBsYXRlciBieSB1cGRhdGVUaWxlc0ZvclNjcm9s
bE9yTm90UmVuZGVyZWRSZWdpb24oKQorICAgICAgICAgICAgICAgIC8vIG9yIHVwZGF0ZVRpbGVz
QWZ0ZXJCYWNraW5nU3RvcmVSZWN0Q2hhbmdlKCkuCisgICAgICAgICAgICAgICAgUGxhdGZvcm06
OkludFJlY3RSZWdpb24gdGlsZVJlZ2lvbk5vdFJlbmRlcmVkOwogCi0gICAgLy8gUmVjb3JkIHRo
YXQgaXQgaGFzIG5vdyBiZWVuIHJlbmRlcmVkIHZpYSBhIGRpZmZlcmVudCB0eXBlIG9mIGpvYi4u
LgotICAgIGNsZWFyUmVndWxhclJlbmRlckpvYnMoc3ViUmVjdCk7CisgICAgICAgICAgICAgICAg
aWYgKCFtX3BhcmVudC0+aXNUaWxlVmlzaWJsZShpbmRleCwgZ2VvbWV0cnkpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRpbGVSZWdpb25Ob3RSZW5kZXJlZCA9IFBsYXRmb3JtOjpJbnRSZWN0UmVn
aW9uOjppbnRlcnNlY3RSZWdpb25zKHRpbGVSZWN0LCBtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9i
c0JhdGNoUmVnaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaW9uTm90UmVuZGVyZWRUaGlz
VGltZSA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjp1bmlvblJlZ2lvbnMocmVnaW9uTm90UmVu
ZGVyZWRUaGlzVGltZSwgdGlsZVJlZ2lvbk5vdFJlbmRlcmVkKTsKKyAgICAgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk5vdFJlbmRlcmVkVGhpc1RpbWUuaXNFbXB0
eSgpKSB7CiAjaWYgREVCVUdfUkVOREVSX1FVRVVFCi0gICAgLy8gU3RvcCB0aGUgdGltZSBtZWFz
dXJlbWVudAotICAgIGRvdWJsZSBlbGFwc2VkID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZTsK
LSAgICBQbGF0Zm9ybTo6bG9nQWx3YXlzKFBsYXRmb3JtOjpMb2dMZXZlbENyaXRpY2FsLAotICAg
ICAgICAiUmVuZGVyUXVldWU6OnJlbmRlclZpc2libGVab29tSm9iIHJlY3Q9JXMgZWxhcHNlZD0l
ZiIsCi0gICAgICAgIHN1YlJlY3QudG9TdHJpbmcoKS5jX3N0cigpLAotICAgICAgICBlbGFwc2Vk
KTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlclF1ZXVlOjpyZW5kZXJWaXNpYmxlU2Nyb2xsSm9i
KCkKLXsKLSAgICBBU1NFUlQoIW1fdmlzaWJsZVNjcm9sbEpvYnMuZW1wdHkoKSk7Ci0KLSNpZiBE
RUJVR19SRU5ERVJfUVVFVUUgfHwgREVCVUdfUkVOREVSX1FVRVVFX1NPUlQKLSAgICAvLyBTdGFy
dCB0aGUgdGltZSBtZWFzdXJlbWVudC4KLSAgICBkb3VibGUgdGltZSA9IFdURjo6Y3VycmVudFRp
bWUoKTsKLSAgICBkb3VibGUgZWxhcHNlZDsKLSNlbmRpZgotCi0gICAgcXVpY2tTb3J0KCZtX3Zp
c2libGVTY3JvbGxKb2JzKTsKLQotI2lmIERFQlVHX1JFTkRFUl9RVUVVRV9TT1JUCi0gICAgLy8g
U3RvcCB0aGUgdGltZSBtZWFzdXJlbWVudAotICAgIGVsYXBzZWQgPSBXVEY6OmN1cnJlbnRUaW1l
KCkgLSB0aW1lOwotICAgIFBsYXRmb3JtOjpsb2dBbHdheXMoUGxhdGZvcm06OkxvZ0xldmVsQ3Jp
dGljYWwsICJSZW5kZXJRdWV1ZTo6cmVuZGVyVmlzaWJsZVNjcm9sbEpvYiBzb3J0IGVsYXBzZWQ9
JWYiLCBlbGFwc2VkKTsKKyAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm06OmxvZ0Fsd2F5cyhQ
bGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJSZW5k
ZXJRdWV1ZTo6cmVuZGVyUmVndWxhclJlbmRlckpvYnMgcmVnaW9uIHdpdGhpbiAlcyBub3QgY29t
cGxldGVseSByZW5kZXJlZCEiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJlZ2lvbk5v
dFJlbmRlcmVkLmV4dGVudHMoKS50b1N0cmluZygpLmNfc3RyKCkpOwogI2VuZGlmCisgICAgICAg
ICAgICAgICAgICAgIG91dHN0YW5kaW5nSm9icy0+cmVtb3ZlKGkpOworICAgICAgICAgICAgICAg
ICAgICAtLWk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KIAotICAgIFJlbmRlclJlY3QgcmVjdCA9IG1fdmlzaWJsZVNjcm9s
bEpvYnNbMF07Ci0gICAgbV92aXNpYmxlU2Nyb2xsSm9icy5lcmFzZShtX3Zpc2libGVTY3JvbGxK
b2JzLmJlZ2luKCkpOworICAgICAgICAgICAgdGlsZXNUb1JlbmRlci5hcHBlbmQoaW5kZXgpOwor
ICAgICAgICAgICAgLS1udW1iZXJPZkF2YWlsYWJsZUJhY2tCdWZmZXJzOworICAgICAgICB9CiAK
LSAgICBBU1NFUlQoIXJlY3QuaXNDb21wbGV0ZWQoKSk7Ci0gICAgUGxhdGZvcm06OkludFJlY3Qg
c3ViUmVjdCA9IHJlY3QucmVjdEZvclJlbmRlcmluZygpOwotICAgIGlmIChyZWN0LmlzQ29tcGxl
dGVkKCkpCi0gICAgICAgIG1fdmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQucHVzaF9iYWNrKHJl
Y3QpOwotICAgIGVsc2UKLSAgICAgICAgbV92aXNpYmxlU2Nyb2xsSm9icy5pbnNlcnQobV92aXNp
YmxlU2Nyb2xsSm9icy5iZWdpbigpLCByZWN0KTsKKyAgICAgICAgaWYgKHRpbGVzVG9SZW5kZXIu
aXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBtX3BhcmVudC0+cmVuZGVyKHN1
YlJlY3QpOworICAgICAgICAvLyBUaGlzIHdpbGwgYWxzbyBjbGVhciB0aGUgcmVuZGVyZWQgdGls
ZXMgaW4gb3V0c3RhbmRpbmdKb2JzLgorICAgICAgICBUaWxlSW5kZXhMaXN0IHJlbmRlcmVkVGls
ZXMgPSBtX3BhcmVudC0+cmVuZGVyKHRpbGVzVG9SZW5kZXIpOwogCi0gICAgLy8gUmVjb3JkIHRo
YXQgaXQgaGFzIG5vdyBiZWVuIHJlbmRlcmVkIHZpYSBhIGRpZmZlcmVudCB0eXBlIG9mIGpvYi4u
LgotICAgIGNsZWFyUmVndWxhclJlbmRlckpvYnMoc3ViUmVjdCk7CisgICAgICAgIC8vIFVwZGF0
ZSBudW1iZXIgb2YgYXZhaWxhYmxlIGJhY2sgYnVmZmVycyBub3cgdGhhdCB3ZSd2ZSB1c2VkIHRo
ZW0uCisgICAgICAgIG51bWJlck9mQXZhaWxhYmxlQmFja0J1ZmZlcnMgPSBTdXJmYWNlUG9vbDo6
Z2xvYmFsU3VyZmFjZVBvb2woKS0+bnVtYmVyT2ZBdmFpbGFibGVCYWNrQnVmZmVycygpOwogCisg
ICAgICAgIEFTU0VSVCghcmVuZGVyZWRUaWxlcy5pc0VtcHR5KCkpOworICAgICAgICBpZiAocmVu
ZGVyZWRUaWxlcy5pc0VtcHR5KCkpIHsKICNpZiBERUJVR19SRU5ERVJfUVVFVUUKLSAgICAvLyBT
dG9wIHRoZSB0aW1lIG1lYXN1cmVtZW50Ci0gICAgZWxhcHNlZCA9IFdURjo6Y3VycmVudFRpbWUo
KSAtIHRpbWU7Ci0gICAgUGxhdGZvcm06OmxvZ0Fsd2F5cyhQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0
aWNhbCwKLSAgICAgICAgIlJlbmRlclF1ZXVlOjpyZW5kZXJWaXNpYmxlU2Nyb2xsSm9iIHJlY3Q9
JXMgZWxhcHNlZD0lZiIsCi0gICAgICAgIHN1YlJlY3QudG9TdHJpbmcoKS5jX3N0cigpLAotICAg
ICAgICBlbGFwc2VkKTsKLSNlbmRpZgotCi0gICAgaWYgKG1fdmlzaWJsZVNjcm9sbEpvYnMuZW1w
dHkoKSkKLSAgICAgICAgdmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQodHJ1ZSAvKnNob3VsZEJs
aXQqLyk7Ci19Ci0KLXZvaWQgUmVuZGVyUXVldWU6OnJlbmRlclJlZ3VsYXJSZW5kZXJKb2IoKQot
ewotI2lmIERFQlVHX1JFTkRFUl9RVUVVRQotICAgIC8vIFN0YXJ0IHRoZSB0aW1lIG1lYXN1cmVt
ZW50LgotICAgIGRvdWJsZSB0aW1lID0gV1RGOjpjdXJyZW50VGltZSgpOworICAgICAgICAgICAg
UGxhdGZvcm06OmxvZ0Fsd2F5cyhQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwKKyAgICAgICAg
ICAgICAgICAiUmVuZGVyUXVldWU6OnJlbmRlclJlZ3VsYXJSZW5kZXJKb2JzIG5vIHRpbGVzIHJl
bmRlcmVkICglZCBhdHRlbXB0ZWQpLCBhdmFpbGFibGUgYmFjayBidWZmZXJzOiAlZCIsCisgICAg
ICAgICAgICAgICAgdGlsZXNUb1JlbmRlci5zaXplKCksCisgICAgICAgICAgICAgICAgbnVtYmVy
T2ZBdmFpbGFibGVCYWNrQnVmZmVycyk7CiAjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOyAvLyBT
b21ldGhpbmcgYmFkIGhhcHBlbmVkLCBtYWtlIHN1cmUgbm90IHRvIHRyeSBhZ2FpbiBmb3Igbm93
LgorICAgICAgICB9CiAKLSAgICBBU1NFUlQoIW1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0
Y2guZW1wdHkoKSB8fCAhbV9yZWd1bGFyUmVuZGVySm9ic1JlZ2lvbi5pc0VtcHR5KCkpOwotCi0g
ICAgc3RhcnRSZWd1bGFyUmVuZGVySm9iQmF0Y2hJZk5lZWRlZCgpOwotCi0gICAgLy8gVGFrZSB0
aGUgZmlyc3Qgam9iIGZyb20gdGhlIHJlZ3VsYXIgcmVuZGVyIGpvYiBxdWV1ZS4KLSAgICBQbGF0
Zm9ybTo6SW50UmVjdCByZWN0ID0gbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaFswXTsK
LSAgICBtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0JhdGNoUmVnaW9uID0gUGxhdGZvcm06Oklu
dFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9ucyhtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0Jh
dGNoUmVnaW9uLCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbihyZWN0KSk7Ci0gICAgbV9jdXJyZW50
UmVndWxhclJlbmRlckpvYnNCYXRjaC5lcmFzZShtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0Jh
dGNoLmJlZ2luKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlcmVkVGls
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghY29tcGxldGVkSm9icy5jb250YWlu
cyhyZW5kZXJlZFRpbGVzW2ldKSkKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWRKb2JzLmFwcGVu
ZChyZW5kZXJlZFRpbGVzW2ldKTsKKyAgICAgICAgfQogCi0gICAgUGxhdGZvcm06OkludFJlY3RS
ZWdpb24gcmVnaW9uTm90UmVuZGVyZWQ7Ci0gICAgaWYgKG1fcGFyZW50LT5zaG91bGRTdXBwcmVz
c05vblZpc2libGVSZWd1bGFyUmVuZGVySm9icygpKSB7Ci0gICAgICAgIC8vIFJlY29yZCBhbnkg
cGFydCBvZiB0aGUgcmVnaW9uIHRoYXQgZG9lc24ndCBpbnRlcnNlY3QgdGhlIGN1cnJlbnQgdmlz
aWJsZSB0aWxlcyByZWN0LgotICAgICAgICByZWdpb25Ob3RSZW5kZXJlZCA9IFBsYXRmb3JtOjpJ
bnRSZWN0UmVnaW9uOjpzdWJ0cmFjdFJlZ2lvbnMocmVjdCwgbV9wYXJlbnQtPnZpc2libGVDb250
ZW50c1JlY3QoKSk7Ci0gICAgICAgIG1fcmVndWxhclJlbmRlckpvYnNOb3RSZW5kZXJlZFJlZ2lv
biA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjp1bmlvblJlZ2lvbnMobV9yZWd1bGFyUmVuZGVy
Sm9ic05vdFJlbmRlcmVkUmVnaW9uLCByZWdpb25Ob3RSZW5kZXJlZCk7CisgICAgICAgIGlmICgh
YWxsQXRPbmNlSWZQb3NzaWJsZSkKKyAgICAgICAgICAgIGJyZWFrOyAvLyBXZSBjYW4gZG8gdGhl
IHJlc3QgbmV4dCB0aW1lLgorICAgIH0KIAotI2lmIERFQlVHX1JFTkRFUl9RVUVVRQotICAgICAg
ICBpZiAoIXJlZ2lvbk5vdFJlbmRlcmVkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUGxhdGZv
cm06OmxvZ0Fsd2F5cyhQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwKLSAgICAgICAgICAgICAg
ICAiUmVuZGVyUXVldWU6OnJlbmRlclJlZ3VsYXJSZW5kZXJKb2IgcmVjdCAlcyBub3QgY29tcGxl
dGVseSByZW5kZXJlZCEiLAotICAgICAgICAgICAgICAgIHJlY3QudG9TdHJpbmcoKS5jX3N0cigp
KTsKLSAgICAgICAgfQotI2VuZGlmCisgICAgUGxhdGZvcm06OkludFJlY3RSZWdpb24gcmVuZGVy
ZWRSZWdpb247CiAKLSAgICAgICAgLy8gQ2xpcCB0byB0aGUgdmlzaWJsZSB0aWxlcyBzbyB3ZSds
bCBiZSBmYXN0ZXIuCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KG1fcGFyZW50LT52aXNpYmxlQ29u
dGVudHNSZWN0KCkpOworICAgIGlmIChzaG91bGREaXJlY3RSZW5kZXJpbmdUb1dpbmRvdykgewor
ICAgICAgICAvLyBUcnkgcmVuZGVyaW5nIG9uY2UsIGlmIHdlJ3JlIHN1c3BlbmRlZCB0aGVyZSB3
aWxsIGJlIGFub3RoZXIKKyAgICAgICAgLy8gZnVsbC1zY3JlZW4gdXBkYXRlIGxhdGVyIG9uIGFu
eXdheXMuCisgICAgICAgIHJlbmRlcmVkUmVnaW9uID0gbV9wYXJlbnQtPnJlbmRlckRpcmVjdFRv
V2luZG93KG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24uZXh0ZW50cygpKTsK
KyAgICAgICAgbV9jdXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaFJlZ2lvbiA9IFBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVuZGVyZWRSZWdpb24g
PSB0aWxlUmVnaW9uKGNvbXBsZXRlZEpvYnMsIG1fcGFyZW50LT5mcm9udFN0YXRlKCkpOwogICAg
IH0KIAotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIG1fcGFyZW50LT5yZW5kZXIo
cmVjdCk7CisgICAgbV9yZWd1bGFyUmVuZGVySm9ic05vdFJlbmRlcmVkUmVnaW9uID0gUGxhdGZv
cm06OkludFJlY3RSZWdpb246OnVuaW9uUmVnaW9ucyhtX3JlZ3VsYXJSZW5kZXJKb2JzTm90UmVu
ZGVyZWRSZWdpb24sIHJlZ2lvbk5vdFJlbmRlcmVkVGhpc1RpbWUpOwogCiAjaWYgREVCVUdfUkVO
REVSX1FVRVVFCiAgICAgLy8gU3RvcCB0aGUgdGltZSBtZWFzdXJlbWVudC4KICAgICBkb3VibGUg
ZWxhcHNlZCA9IFdURjo6Y3VycmVudFRpbWUoKSAtIHRpbWU7CiAgICAgUGxhdGZvcm06OmxvZ0Fs
d2F5cyhQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwKLSAgICAgICAgIlJlbmRlclF1ZXVlOjpy
ZW5kZXJSZWd1bGFyUmVuZGVySm9iIHJlY3Q9JXMgZWxhcHNlZD0lZiIsCi0gICAgICAgIHJlY3Qu
dG9TdHJpbmcoKS5jX3N0cigpLAorICAgICAgICAiUmVuZGVyUXVldWU6OnJlbmRlclJlZ3VsYXJS
ZW5kZXJKb2JzIHdpdGhpbiAlczogY29tcGxldGVkID0gJWQsIG91dHN0YW5kaW5nID0gJWQsIGVs
YXBzZWQ9JWYiLAorICAgICAgICBjaGFuZ2luZ1JlZ2lvbi5leHRlbnRzKCkudG9TdHJpbmcoKS5j
X3N0cigpLAorICAgICAgICBjb21wbGV0ZWRKb2JzLnNpemUoKSwKKyAgICAgICAgb3V0c3RhbmRp
bmdKb2JzLT5zaXplKCksCiAgICAgICAgIGVsYXBzZWQpOwogI2VuZGlmCiAKLSAgICBpZiAobV9j
dXJyZW50UmVndWxhclJlbmRlckpvYnNCYXRjaC5lbXB0eSgpKSB7Ci0gICAgICAgIFBsYXRmb3Jt
OjpJbnRSZWN0IHJlbmRlcmVkUmVjdCA9IG1fY3VycmVudFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hS
ZWdpb24uZXh0ZW50cygpOwotICAgICAgICAvLyBDbGVhciB0aGUgcmVnaW9uIGFuZCB0aGUgYW5k
IGJsaXQgc2luY2UgdGhpcyBiYXRjaCBpcyBub3cgY29tcGxldGUuCi0gICAgICAgIG1fY3VycmVu
dFJlZ3VsYXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24gPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbigp
OwotICAgICAgICBtX2N1cnJlbnRSZWd1bGFyUmVuZGVySm9ic0JhdGNoVW5kZXJQcmVzc3VyZSA9
IGZhbHNlOwotICAgICAgICBtX3BhcmVudC0+ZGlkUmVuZGVyQ29udGVudChyZW5kZXJlZFJlY3Qp
OwotICAgIH0KLQogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgYWx0ZXIgc3RhdGUgb2YgdGhl
IHF1ZXVlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gZW1wdHkKICAgICAvLyBiZWZvcmUgdGhpcyBt
ZXRob2Qgd2FzIGNhbGxlZC4KLSAgICBBU1NFUlQobV92aXNpYmxlU2Nyb2xsSm9icy5lbXB0eSgp
KTsKKyAgICBBU1NFUlQobV92aXNpYmxlWm9vbUpvYnMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
bV92aXNpYmxlU2Nyb2xsSm9icy5pc0VtcHR5KCkpOworCisgICAgaWYgKG1fY3VycmVudFJlZ3Vs
YXJSZW5kZXJKb2JzQmF0Y2hSZWdpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIHRoZSB3
aG9sZSBzY2hlZHVsZWQgYXJlYSBoYXMgYmVlbiByZW5kZXJlZCwgYWxsIG91dHN0YW5kaW5nIGpv
YnMKKyAgICAgICAgLy8gc2hvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGFzIHdlbGwuCisgICAgICAg
IEFTU0VSVChvdXRzdGFuZGluZ0pvYnMtPmlzRW1wdHkoKSk7CisgICAgICAgIG1fY3VycmVudFJl
Z3VsYXJSZW5kZXJKb2JzQmF0Y2hVbmRlclByZXNzdXJlID0gZmFsc2U7CisKKyAgICAgICAgLy8g
Tm90aWZ5IGFib3V0IHRoZSBuZXdseSByZW5kZXJlZCBjb250ZW50LgorICAgICAgICAvLyBJbiBj
YXNlIHdlIHBpY2tlZCB1cCBhbiB1bmZpbmlzaGVkIGJhdGNoIGZyb20gYmVmb3JlLCBiZWNhdXNl
IHdlCisgICAgICAgIC8vIHBhaW50IGEgbGFyZ2VyIGFyZWEgaXQncyBwb3NzaWJsZSB0aGF0IHdl
IGFsc28gcmVuZGVyZWQgb3RoZXIKKyAgICAgICAgLy8gcmVnaW9ucyB0aGF0IHdlcmUgb3JpZ2lu
YWxseSBzY2hlZHVsZWQgZm9yIGxhdGVyLgorICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lv
biB3aG9sZVNjaGVkdWxlZFJlZ2lvbiA9IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uOjp1bmlvblJl
Z2lvbnMoY2hhbmdpbmdSZWdpb24sIGNoYW5naW5nUmVnaW9uU2NoZWR1bGVkRm9yTGF0ZXIpOwor
ICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiByZW5kZXJlZENoYW5nZWRSZWdpb24gPSBQ
bGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6aW50ZXJzZWN0UmVnaW9ucyh3aG9sZVNjaGVkdWxlZFJl
Z2lvbiwgcmVuZGVyZWRSZWdpb24pOwogCi0gICAgaWYgKG1fcGFyZW50LT5zaG91bGRTdXBwcmVz
c05vblZpc2libGVSZWd1bGFyUmVuZGVySm9icygpICYmICFyZWdpb25Ob3RSZW5kZXJlZC5pc0Vt
cHR5KCkpCisgICAgICAgIC8vIEJsaXQgc2luY2UgdGhpcyBiYXRjaCBpcyBub3cgY29tcGxldGUu
CisgICAgICAgIG1fcGFyZW50LT5kaWRSZW5kZXJDb250ZW50KHJlbmRlcmVkQ2hhbmdlZFJlZ2lv
bik7CisgICAgfQorCisgICAgaWYgKG1fcGFyZW50LT5zaG91bGRTdXBwcmVzc05vblZpc2libGVS
ZWd1bGFyUmVuZGVySm9icygpICYmICFyZWdpb25Ob3RSZW5kZXJlZFRoaXNUaW1lLmlzRW1wdHko
KSkKICAgICAgICAgbV9wYXJlbnQtPnVwZGF0ZVRpbGVzRm9yU2Nyb2xsT3JOb3RSZW5kZXJlZFJl
Z2lvbihmYWxzZSAvKmNoZWNrTG9hZGluZyovKTsKIH0KIAotdm9pZCBSZW5kZXJRdWV1ZTo6cmVu
ZGVyTm9uVmlzaWJsZVNjcm9sbEpvYigpCit2b2lkIFJlbmRlclF1ZXVlOjpyZW5kZXJTY3JvbGxa
b29tSm9icyhUaWxlSW5kZXhMaXN0KiBvdXRzdGFuZGluZ0pvYnMsIFRpbGVJbmRleExpc3QqIGNv
bXBsZXRlZEpvYnMsIGJvb2wgYWxsQXRPbmNlSWZQb3NzaWJsZSwgYm9vbCBzaG91bGRCbGl0V2hl
bkNvbXBsZXRlZCkKIHsKLSAgICBBU1NFUlQoIW1fbm9uVmlzaWJsZVNjcm9sbEpvYnMuZW1wdHko
KSk7CisgICAgQVNTRVJUKCFvdXRzdGFuZGluZ0pvYnMtPmlzRW1wdHkoKSk7CiAKICNpZiBERUJV
R19SRU5ERVJfUVVFVUUgfHwgREVCVUdfUkVOREVSX1FVRVVFX1NPUlQKICAgICAvLyBTdGFydCB0
aGUgdGltZSBtZWFzdXJlbWVudC4KQEAgLTgzOCw2MCArNzk0LDExMCBAQCB2b2lkIFJlbmRlclF1
ZXVlOjpyZW5kZXJOb25WaXNpYmxlU2Nyb2xsSm9iKCkKICAgICBkb3VibGUgZWxhcHNlZDsKICNl
bmRpZgogCi0gICAgcXVpY2tTb3J0KCZtX25vblZpc2libGVTY3JvbGxKb2JzKTsKKyAgICBib29s
IHNob3VsZERpcmVjdFJlbmRlcmluZ1RvV2luZG93ID0gbV9wYXJlbnQtPnNob3VsZERpcmVjdFJl
bmRlcmluZ1RvV2luZG93KCk7CisgICAgUGxhdGZvcm06OkludFJlY3QgY29udGVudHNSZWN0ID0g
bV9wYXJlbnQtPmV4cGFuZGVkQ29udGVudHNSZWN0KCk7CisKKyAgICB1bnNpZ25lZCBudW1iZXJP
ZkF2YWlsYWJsZUJhY2tCdWZmZXJzID0gc2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9XaW5kb3cKKyAg
ICAgICAgPyAwCisgICAgICAgIDogU3VyZmFjZVBvb2w6Omdsb2JhbFN1cmZhY2VQb29sKCktPm51
bWJlck9mQXZhaWxhYmxlQmFja0J1ZmZlcnMoKTsKKworICAgIC8vIElmIHdlIHRha2UgbXVsdGlw
bGUgdHVybnMgdG8gcmVuZGVyLCB3ZSBzb3J0IHRvIG1ha2UgdGhlbSBhcHBlYXIgaW4gdGhlIHJp
Z2h0IG9yZGVyLgorICAgIGlmICghYWxsQXRPbmNlSWZQb3NzaWJsZSAmJiBvdXRzdGFuZGluZ0pv
YnMtPnNpemUoKSA+IG51bWJlck9mQXZhaWxhYmxlQmFja0J1ZmZlcnMpCisgICAgICAgIHF1aWNr
U29ydChvdXRzdGFuZGluZ0pvYnMpOwogCiAjaWYgREVCVUdfUkVOREVSX1FVRVVFX1NPUlQKLSAg
ICAvLyBTdG9wIHRoZSB0aW1lIG1lYXN1cmVtZW50LgorICAgIC8vIFN0b3AgdGhlIHRpbWUgbWVh
c3VyZW1lbnQKICAgICBlbGFwc2VkID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZTsKLSAgICBQ
bGF0Zm9ybTo6bG9nQWx3YXlzKFBsYXRmb3JtOjpMb2dMZXZlbENyaXRpY2FsLCAiUmVuZGVyUXVl
dWU6OnJlbmRlck5vblZpc2libGVTY3JvbGxKb2Igc29ydCBlbGFwc2VkPSVmIiwgZWxhcHNlZCk7
CisgICAgUGxhdGZvcm06OmxvZ0Fsd2F5cyhQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwgIlJl
bmRlclF1ZXVlOjpyZW5kZXJTY3JvbGxab29tSm9icyBzb3J0IGVsYXBzZWQ9JWYiLCBlbGFwc2Vk
KTsKICNlbmRpZgogCi0gICAgUmVuZGVyUmVjdCByZWN0ID0gbV9ub25WaXNpYmxlU2Nyb2xsSm9i
c1swXTsKLSAgICBtX25vblZpc2libGVTY3JvbGxKb2JzLmVyYXNlKG1fbm9uVmlzaWJsZVNjcm9s
bEpvYnMuYmVnaW4oKSk7CisgICAgVGlsZUluZGV4TGlzdCB0aWxlc1RvUmVuZGVyOwogCi0gICAg
QVNTRVJUKCFyZWN0LmlzQ29tcGxldGVkKCkpOwotICAgIFBsYXRmb3JtOjpJbnRSZWN0IHN1YlJl
Y3QgPSByZWN0LnJlY3RGb3JSZW5kZXJpbmcoKTsKLSAgICBpZiAocmVjdC5pc0NvbXBsZXRlZCgp
KQotICAgICAgICBtX25vblZpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkLnB1c2hfYmFjayhyZWN0
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fbm9uVmlzaWJsZVNjcm9sbEpvYnMuaW5zZXJ0KG1fbm9u
VmlzaWJsZVNjcm9sbEpvYnMuYmVnaW4oKSwgcmVjdCk7CisgICAgd2hpbGUgKCFvdXRzdGFuZGlu
Z0pvYnMtPmlzRW1wdHkoKSAmJiBudW1iZXJPZkF2YWlsYWJsZUJhY2tCdWZmZXJzKSB7CisgICAg
ICAgIC8vIFJlbmRlciBhcyBtYW55IHRpbGVzIGF0IG9uY2UgYXMgd2UgY2FuIGhhbmRsZS4KKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdXRzdGFuZGluZ0pvYnMtPnNpemUoKSAmJiBu
dW1iZXJPZkF2YWlsYWJsZUJhY2tCdWZmZXJzOyArK2kpIHsKKyAgICAgICAgICAgIFRpbGVJbmRl
eCBpbmRleCA9ICgqb3V0c3RhbmRpbmdKb2JzKVtpXTsKKyAgICAgICAgICAgIFBsYXRmb3JtOjpJ
bnRSZWN0IHRpbGVSZWN0KG1fcGFyZW50LT5mcm9udFN0YXRlKCktPm9yaWdpbk9mVGlsZShpbmRl
eCksIG1fcGFyZW50LT50aWxlU2l6ZSgpKTsKIAotICAgIG1fcGFyZW50LT5yZW5kZXIoc3ViUmVj
dCk7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugb25seSB0cnkgdG8gcmVuZGVyIHRpbGVz
IGNvbnRhaW5pbmcgY29udGVudHMuCisgICAgICAgICAgICBpZiAoIWNvbnRlbnRzUmVjdC5pbnRl
cnNlY3RzKHRpbGVSZWN0KSkgeworI2lmIERFQlVHX1JFTkRFUl9RVUVVRQorICAgICAgICAgICAg
ICAgIFBsYXRmb3JtOjpsb2dBbHdheXMoUGxhdGZvcm06OkxvZ0xldmVsQ3JpdGljYWwsCisgICAg
ICAgICAgICAgICAgICAgICJSZW5kZXJRdWV1ZTo6cmVuZGVyU2Nyb2xsWm9vbUpvYnMgdGlsZSBh
dCAlcyBvdXRzaWRlIG9mIGV4cGFuZGVkIGNvbnRlbnRzIHJlY3QgJXMsIGlnbm9yaW5nLiIsCisg
ICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LnRvU3RyaW5nKCkuY19zdHIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgY29udGVudHNSZWN0LnRvU3RyaW5nKCkuY19zdHIoKSk7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICBvdXRzdGFuZGluZ0pvYnMtPnJlbW92ZShpKTsKKyAgICAgICAgICAgICAg
ICAtLWk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAKLSAgICAv
LyBSZWNvcmQgdGhhdCBpdCBoYXMgbm93IGJlZW4gcmVuZGVyZWQgdmlhIGEgZGlmZmVyZW50IHR5
cGUgb2Ygam9iLi4uCi0gICAgY2xlYXJSZWd1bGFyUmVuZGVySm9icyhzdWJSZWN0KTsKKyAgICAg
ICAgICAgIHRpbGVzVG9SZW5kZXIuYXBwZW5kKCgqb3V0c3RhbmRpbmdKb2JzKVtpXSk7CisgICAg
ICAgICAgICAtLW51bWJlck9mQXZhaWxhYmxlQmFja0J1ZmZlcnM7CisgICAgICAgIH0KIAotICAg
IC8vIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgYWx0ZXIgc3RhdGUgb2YgdGhlIHF1ZXVlcyB0aGF0IHNo
b3VsZCBoYXZlIGJlZW4gZW1wdHkKLSAgICAvLyBiZWZvcmUgdGhpcyBtZXRob2Qgd2FzIGNhbGxl
ZC4KLSAgICBBU1NFUlQobV92aXNpYmxlU2Nyb2xsSm9icy5lbXB0eSgpKTsKKyAgICAgICAgaWYg
KHRpbGVzVG9SZW5kZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Ly8gVGhpcyB3aWxsIGNsZWFyIHRoZSByZW5kZXJlZCB0aWxlcyBpbiBvdXRzdGFuZGluZ0pvYnMu
CisgICAgICAgIFRpbGVJbmRleExpc3QgcmVuZGVyZWRUaWxlcyA9IG1fcGFyZW50LT5yZW5kZXIo
dGlsZXNUb1JlbmRlcik7CisKKyAgICAgICAgLy8gVXBkYXRlIG51bWJlciBvZiBhdmFpbGFibGUg
YmFjayBidWZmZXJzIG5vdyB0aGF0IHdlJ3ZlIHVzZWQgdGhlbS4KKyAgICAgICAgbnVtYmVyT2ZB
dmFpbGFibGVCYWNrQnVmZmVycyA9IFN1cmZhY2VQb29sOjpnbG9iYWxTdXJmYWNlUG9vbCgpLT5u
dW1iZXJPZkF2YWlsYWJsZUJhY2tCdWZmZXJzKCk7CisKKyAgICAgICAgQVNTRVJUKCFyZW5kZXJl
ZFRpbGVzLmlzRW1wdHkoKSk7CisgICAgICAgIGlmIChyZW5kZXJlZFRpbGVzLmlzRW1wdHkoKSkg
eworI2lmIERFQlVHX1JFTkRFUl9RVUVVRQorICAgICAgICAgICAgUGxhdGZvcm06OmxvZ0Fsd2F5
cyhQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwKKyAgICAgICAgICAgICAgICAiUmVuZGVyUXVl
dWU6OnJlbmRlclNjcm9sbFpvb21Kb2JzIG5vIHRpbGVzIHJlbmRlcmVkICglZCBhdHRlbXB0ZWQs
IGF2YWlsYWJsZSBiYWNrIGJ1ZmZlcnM6ICVkKSIsCisgICAgICAgICAgICAgICAgdGlsZXNUb1Jl
bmRlci5zaXplKCksCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZBdmFpbGFibGVCYWNrQnVmZmVy
cyk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOyAvLyBTb21ldGhpbmcgYmFkIGhhcHBlbmVk
LCBtYWtlIHN1cmUgbm90IHRvIHRyeSBhZ2FpbiBmb3Igbm93LgorICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJlZFRpbGVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoIWNvbXBsZXRlZEpvYnMtPmNvbnRhaW5zKHJlbmRlcmVkVGlsZXNbaV0p
KQorICAgICAgICAgICAgICAgIGNvbXBsZXRlZEpvYnMtPmFwcGVuZChyZW5kZXJlZFRpbGVzW2ld
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYWxsQXRPbmNlSWZQb3NzaWJsZSkKKyAgICAg
ICAgICAgIGJyZWFrOyAvLyBXZSBjYW4gZG8gdGhlIHJlc3QgbmV4dCB0aW1lLgorICAgIH0KKwor
ICAgIGlmIChzaG91bGREaXJlY3RSZW5kZXJpbmdUb1dpbmRvdykgeworICAgICAgICAvLyBJbiBk
aXJlY3QgcmVuZGVyaW5nIG1vZGUsIGFueSB6b29tIG9yIHNjcm9sbCBqb2Igd291bGQgcmVxdWly
ZSBhCisgICAgICAgIC8vIGZ1bGwtc2NyZWVuIHVwZGF0ZS4KKyAgICAgICAgUGxhdGZvcm06Oklu
dFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCA9IG1fcGFyZW50LT52aXNpYmxlQ29udGVudHNSZWN0
KCk7CisgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlbmRlcmVkUmVjdCA9IG1fcGFyZW50LT5y
ZW5kZXJEaXJlY3RUb1dpbmRvdyh2aXNpYmxlQ29udGVudHNSZWN0KTsKKyAgICAgICAgaWYgKCFy
ZW5kZXJlZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgb3V0c3RhbmRpbmdKb2JzLT5jbGVh
cigpOworICAgIH0KIAogI2lmIERFQlVHX1JFTkRFUl9RVUVVRQogICAgIC8vIFN0b3AgdGhlIHRp
bWUgbWVhc3VyZW1lbnQuCiAgICAgZWxhcHNlZCA9IFdURjo6Y3VycmVudFRpbWUoKSAtIHRpbWU7
CiAgICAgUGxhdGZvcm06OmxvZ0Fsd2F5cyhQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwKLSAg
ICAgICAgIlJlbmRlclF1ZXVlOjpyZW5kZXJOb25WaXNpYmxlU2Nyb2xsSm9iIHJlY3Q9JXMgZWxh
cHNlZD0lZiIsCi0gICAgICAgIHN1YlJlY3QudG9TdHJpbmcoKS5jX3N0cigpLCBlbGFwc2VkKTsK
KyAgICAgICAgIlJlbmRlclF1ZXVlOjpyZW5kZXJTY3JvbGxab29tSm9icyBjb21wbGV0ZWQ9JWQs
IG91dHN0YW5kaW5nPSVkLCBlbGFwc2VkPSVmIiwKKyAgICAgICAgY29tcGxldGVkSm9icy0+c2l6
ZSgpLAorICAgICAgICBvdXRzdGFuZGluZ0pvYnMtPnNpemUoKSwKKyAgICAgICAgZWxhcHNlZCk7
CiAjZW5kaWYKIAotICAgIGlmIChtX25vblZpc2libGVTY3JvbGxKb2JzLmVtcHR5KCkpCi0gICAg
ICAgIG5vblZpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkKCk7CisgICAgaWYgKG91dHN0YW5kaW5n
Sm9icy0+aXNFbXB0eSgpKQorICAgICAgICBzY3JvbGxab29tSm9ic0NvbXBsZXRlZCgqb3V0c3Rh
bmRpbmdKb2JzLCBjb21wbGV0ZWRKb2JzLCBzaG91bGRCbGl0V2hlbkNvbXBsZXRlZCk7CiB9CiAK
LXZvaWQgUmVuZGVyUXVldWU6OnZpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkKGJvb2wgc2hvdWxk
QmxpdCkKK3ZvaWQgUmVuZGVyUXVldWU6OnNjcm9sbFpvb21Kb2JzQ29tcGxldGVkKGNvbnN0IFRp
bGVJbmRleExpc3QmIG91dHN0YW5kaW5nSm9icywgVGlsZUluZGV4TGlzdCogY29tcGxldGVkSm9i
cywgYm9vbCBzaG91bGRCbGl0KQogewotICAgIC8vIE5vdyBibGl0IHRvIHRoZSBzY3JlZW4gaWYg
d2UgYXJlIGRvbmUgYW5kIGdldCByaWQgb2YgdGhlIGNvbXBsZXRlZCBsaXN0IQotICAgIEFTU0VS
VChtX3Zpc2libGVTY3JvbGxKb2JzLmVtcHR5KCkpOwotICAgIG1fdmlzaWJsZVNjcm9sbEpvYnND
b21wbGV0ZWQuY2xlYXIoKTsKKyAgICAvLyBHZXQgcmlkIG9mIHRoZSBjb21wbGV0ZWQgbGlzdCEK
KyAgICBBU1NFUlQob3V0c3RhbmRpbmdKb2JzLmlzRW1wdHkoKSk7CisgICAgY29tcGxldGVkSm9i
cy0+Y2xlYXIoKTsKKworICAgIC8vIE5vdyBibGl0IHRvIHRoZSBzY3JlZW4gaWYgd2UgYXJlIGRv
bmUhCiAgICAgaWYgKHNob3VsZEJsaXQpCiAgICAgICAgIG1fcGFyZW50LT5kaWRSZW5kZXJDb250
ZW50KG1fcGFyZW50LT52aXNpYmxlQ29udGVudHNSZWN0KCkpOwogfQogCi12b2lkIFJlbmRlclF1
ZXVlOjpub25WaXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZCgpCi17Ci0gICAgLy8gR2V0IHJpZCBv
ZiB0aGUgY29tcGxldGVkIGxpc3QhCi0gICAgQVNTRVJUKG1fbm9uVmlzaWJsZVNjcm9sbEpvYnMu
ZW1wdHkoKSk7Ci0gICAgbV9ub25WaXNpYmxlU2Nyb2xsSm9ic0NvbXBsZXRlZC5jbGVhcigpOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIH0gLy8gbmFtZXNwYWNlIEJsYWNrQmVycnkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1JlbmRlclF1
ZXVlLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9SZW5kZXJRdWV1
ZS5oCmluZGV4IDNjOTYzOWU2N2FiMjJkMDM3ODUyZWNjMjZlODZjZjczYzFkOGE5OTkuLjIwOWU0
YzMzMTMyNTAxYzRjY2NhNTM5MGY4NWQwNDVkNzNhMjJiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1JlbmRlclF1ZXVlLmgKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvUmVuZGVyUXVldWUuaApAQCAtMTksMTYg
KzE5LDE2IEBACiAjaWZuZGVmIFJlbmRlclF1ZXVlX2gKICNkZWZpbmUgUmVuZGVyUXVldWVfaAog
CisjaW5jbHVkZSAiVGlsZUluZGV4LmgiCisKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1J
bnRSZWN0UmVnaW9uLmg+CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtUHJpbWl0aXZlcy5o
PgotI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFtZXNwYWNlIEJsYWNrQmVycnkgewogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIEJhY2tpbmdTdG9yZVByaXZhdGU7Ci0KLXR5cGVkZWYgc3RkOjp2
ZWN0b3I8UGxhdGZvcm06OkludFJlY3Q+IEludFJlY3RMaXN0OworY2xhc3MgQmFja2luZ1N0b3Jl
R2VvbWV0cnk7CiAKIGVudW0gU29ydERpcmVjdGlvbiB7CiAgICAgTGVmdFRvUmlnaHQgPSAwLApA
QCAtMzgsMTAyICszOCw4NSBAQCBlbnVtIFNvcnREaXJlY3Rpb24gewogICAgIE51bVNvcnREaXJl
Y3Rpb25zCiB9OwogCi1jbGFzcyBSZW5kZXJSZWN0IDogcHVibGljIFBsYXRmb3JtOjpJbnRSZWN0
IHsKK2NsYXNzIFJlbmRlclF1ZXVlIHsKIHB1YmxpYzoKLSAgICBSZW5kZXJSZWN0KCkgeyB9Ci0g
ICAgUmVuZGVyUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBQ
bGF0Zm9ybTo6SW50U2l6ZSYsIGludCBzcGxpdHRpbmdGYWN0b3IpOwotICAgIFJlbmRlclJlY3Qo
aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzcGxpdHRpbmdGYWN0b3Ip
OwotICAgIFJlbmRlclJlY3QoY29uc3QgUGxhdGZvcm06OkludFJlY3QmKTsKLQotICAgIFBsYXRm
b3JtOjpJbnRSZWN0IHJlY3RGb3JSZW5kZXJpbmcoKTsKLQotICAgIGJvb2wgaXNDb21wbGV0ZWQo
KSBjb25zdCB7IHJldHVybiAhbV9zdWJSZWN0cy5zaXplKCk7IH0KKyAgICBlbnVtIEpvYlR5cGUg
eyBWaXNpYmxlWm9vbSwgVmlzaWJsZVNjcm9sbCwgUmVndWxhclJlbmRlciwgTm9uVmlzaWJsZVNj
cm9sbCB9OwogCi0gICAgY29uc3QgSW50UmVjdExpc3QmIHN1YlJlY3RzKCkgY29uc3QgeyByZXR1
cm4gbV9zdWJSZWN0czsgfQotICAgIHZvaWQgdXBkYXRlU29ydERpcmVjdGlvbihTb3J0RGlyZWN0
aW9uIHByaW1hcnksIFNvcnREaXJlY3Rpb24gc2Vjb25kYXJ5KTsKKyAgICBlbnVtIENsZWFySm9i
c0ZsYWdzIHsKKyAgICAgICAgQ2xlYXJSZWd1bGFyUmVuZGVySm9icyA9IDEgPDwgMCwKKyAgICAg
ICAgQ2xlYXJJbmNvbXBsZXRlU2Nyb2xsSm9icyA9IDEgPDwgMSwKKyAgICAgICAgQ2xlYXJJbmNv
bXBsZXRlWm9vbUpvYnMgPSAxIDw8IDIsCisgICAgICAgIENsZWFyQ29tcGxldGVkSm9icyA9IDEg
PDwgMywKIAotcHJpdmF0ZToKLSAgICB2b2lkIGluaXRpYWxpemUoaW50IHNwbGl0dGluZ0ZhY3Rv
cik7Ci0gICAgdm9pZCBzcGxpdCgpOwotICAgIHZvaWQgcXVpY2tTb3J0KCk7Ci0gICAgaW50IG1f
c3BsaXR0aW5nRmFjdG9yOwotICAgIEludFJlY3RMaXN0IG1fc3ViUmVjdHM7Ci0gICAgU29ydERp
cmVjdGlvbiBtX3ByaW1hcnlTb3J0RGlyZWN0aW9uOwotICAgIFNvcnREaXJlY3Rpb24gbV9zZWNv
bmRhcnlTb3J0RGlyZWN0aW9uOwotfTsKKyAgICAgICAgQ2xlYXJBbnlKb2JzID0gMHhGRkZGRkZG
RiwKIAotdHlwZWRlZiBzdGQ6OnZlY3RvcjxSZW5kZXJSZWN0PiBSZW5kZXJSZWN0TGlzdDsKKyAg
ICAgICAgRG9udENsZWFyUmVndWxhclJlbmRlckpvYnMgPSBDbGVhckFueUpvYnMgJiB+Q2xlYXJS
ZWd1bGFyUmVuZGVySm9icywKKyAgICAgICAgRG9udENsZWFyQ29tcGxldGVkSm9icyA9IENsZWFy
QW55Sm9icyAmIH5DbGVhckNvbXBsZXRlZEpvYnMsCisgICAgfTsKIAotY2xhc3MgUmVuZGVyUXVl
dWUgewotcHVibGljOgotICAgIGVudW0gSm9iVHlwZSB7IFZpc2libGVab29tLCBWaXNpYmxlU2Ny
b2xsLCBSZWd1bGFyUmVuZGVyLCBOb25WaXNpYmxlU2Nyb2xsIH07CiAgICAgUmVuZGVyUXVldWUo
QmFja2luZ1N0b3JlUHJpdmF0ZSopOwogCiAgICAgdm9pZCByZXNldCgpOwotICAgIFJlbmRlclJl
Y3QgY29udmVydFRvUmVuZGVyUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYpIGNvbnN0Owog
CiAgICAgYm9vbCBpc0VtcHR5KGJvb2wgc2hvdWxkUGVyZm9ybVJlZ3VsYXJSZW5kZXJKb2JzID0g
dHJ1ZSkgY29uc3Q7CiAKICAgICBib29sIGhhc0N1cnJlbnRSZWd1bGFyUmVuZGVySm9iKCkgY29u
c3Q7CiAgICAgYm9vbCBoYXNDdXJyZW50VmlzaWJsZVpvb21Kb2IoKSBjb25zdDsKICAgICBib29s
IGhhc0N1cnJlbnRWaXNpYmxlU2Nyb2xsSm9iKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0N1cnJlbnRW
aXNpYmxlU2Nyb2xsSm9iKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JikgY29uc3Q7Ci0gICAgYm9v
bCBpc0N1cnJlbnRWaXNpYmxlU2Nyb2xsSm9iQ29tcGxldGVkKGNvbnN0IFBsYXRmb3JtOjpJbnRS
ZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBpc0N1cnJlbnRSZWd1bGFyUmVuZGVySm9iKGNvbnN0IFBs
YXRmb3JtOjpJbnRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBpc0N1cnJlbnRWaXNpYmxlWm9vbUpv
Yihjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKKyAgICBib29sIGlzQ3VycmVudFZpc2libGVab29t
Sm9iQ29tcGxldGVkKGNvbnN0IFRpbGVJbmRleCYpIGNvbnN0OworICAgIGJvb2wgaXNDdXJyZW50
VmlzaWJsZVNjcm9sbEpvYihjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKKyAgICBib29sIGlzQ3Vy
cmVudFZpc2libGVTY3JvbGxKb2JDb21wbGV0ZWQoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7Cisg
ICAgYm9vbCBpc0N1cnJlbnRSZWd1bGFyUmVuZGVySm9iKGNvbnN0IFRpbGVJbmRleCYsIEJhY2tp
bmdTdG9yZUdlb21ldHJ5KikgY29uc3Q7CiAKICAgICBib29sIGN1cnJlbnRSZWd1bGFyUmVuZGVy
Sm9iQmF0Y2hVbmRlclByZXNzdXJlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDdXJyZW50UmVndWxh
clJlbmRlckpvYkJhdGNoVW5kZXJQcmVzc3VyZShib29sKTsKIAogICAgIHZvaWQgZXZlbnRRdWV1
ZUN5Y2xlZCgpOwogCi0gICAgdm9pZCBhZGRUb1F1ZXVlKEpvYlR5cGUsIGNvbnN0IFBsYXRmb3Jt
OjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBhZGRUb1F1ZXVlKEpvYlR5cGUsIGNvbnN0IEludFJlY3RM
aXN0Jik7CisgICAgdm9pZCBhZGRUb1F1ZXVlKEpvYlR5cGUsIGNvbnN0IFBsYXRmb3JtOjpJbnRS
ZWN0UmVnaW9uJik7CiAKICAgICB2b2lkIHVwZGF0ZVNvcnREaXJlY3Rpb24oaW50IGxhc3REZWx0
YVgsIGludCBsYXN0RGVsdGFZKTsKICAgICB2b2lkIHZpc2libGVDb250ZW50Q2hhbmdlZChjb25z
dCBQbGF0Zm9ybTo6SW50UmVjdCYpOwotICAgIHZvaWQgY2xlYXIoY29uc3QgUGxhdGZvcm06Oklu
dFJlY3RSZWdpb24mLCBib29sIGNsZWFyUmVndWxhclJlbmRlckpvYnMpOwotICAgIHZvaWQgY2xl
YXIoY29uc3QgUGxhdGZvcm06OkludFJlY3QmLCBib29sIGNsZWFyUmVndWxhclJlbmRlckpvYnMp
OwotICAgIHZvaWQgY2xlYXJSZWd1bGFyUmVuZGVySm9icyhjb25zdCBQbGF0Zm9ybTo6SW50UmVj
dCYpOwotICAgIHZvaWQgY2xlYXJWaXNpYmxlWm9vbSgpOworICAgIHZvaWQgYmFja2luZ1N0b3Jl
UmVjdENoYW5naW5nKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBvbGRSZWN0LCBjb25zdCBQbGF0
Zm9ybTo6SW50UmVjdCYgbmV3UmVjdCk7CisgICAgdm9pZCBjbGVhcihjb25zdCBUaWxlSW5kZXhM
aXN0JiwgQmFja2luZ1N0b3JlR2VvbWV0cnkqLCBDbGVhckpvYnNGbGFncyk7CisgICAgdm9pZCBj
bGVhcihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiYsIENsZWFySm9ic0ZsYWdzKTsKICAg
ICBib29sIHJlZ3VsYXJSZW5kZXJKb2JzUHJldmlvdXNseUF0dGVtcHRlZEJ1dE5vdFJlbmRlcmVk
KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0Jik7CiAgICAgUGxhdGZvcm06OkludFJlY3RSZWdpb24g
cmVndWxhclJlbmRlckpvYnNOb3RSZW5kZXJlZFJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
dWxhclJlbmRlckpvYnNOb3RSZW5kZXJlZFJlZ2lvbjsgfQogCiAgICAgdm9pZCByZW5kZXIoYm9v
bCBzaG91bGRQZXJmb3JtUmVndWxhclJlbmRlckpvYnMgPSB0cnVlKTsKLSAgICB2b2lkIHJlbmRl
ckFsbEN1cnJlbnRSZWd1bGFyUmVuZGVySm9icygpOwogCiBwcml2YXRlOgotICAgIHZvaWQgc3Rh
cnRSZWd1bGFyUmVuZGVySm9iQmF0Y2hJZk5lZWRlZCgpOworICAgIFRpbGVJbmRleExpc3QgdGls
ZUluZGV4ZXNJbnRlcnNlY3RpbmdSZWdpb24oY29uc3QgUGxhdGZvcm06OkludFJlY3RSZWdpb24m
LCBCYWNraW5nU3RvcmVHZW9tZXRyeSopIGNvbnN0OworICAgIFRpbGVJbmRleExpc3QgdGlsZUlu
ZGV4ZXNGdWxseUNvbnRhaW5lZEluUmVnaW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9u
JiwgQmFja2luZ1N0b3JlR2VvbWV0cnkqKSBjb25zdDsKKyAgICBQbGF0Zm9ybTo6SW50UmVjdFJl
Z2lvbiB0aWxlUmVnaW9uKGNvbnN0IFRpbGVJbmRleExpc3QmLCBCYWNraW5nU3RvcmVHZW9tZXRy
eSopIGNvbnN0OwogCi0gICAgLy8gUmVuZGVyIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuCi0gICAg
dm9pZCByZW5kZXJWaXNpYmxlWm9vbUpvYigpOwotICAgIHZvaWQgcmVuZGVyVmlzaWJsZVNjcm9s
bEpvYigpOwotICAgIHZvaWQgcmVuZGVyUmVndWxhclJlbmRlckpvYigpOwotICAgIHZvaWQgcmVu
ZGVyTm9uVmlzaWJsZVNjcm9sbEpvYigpOworICAgIHZvaWQgY2xlYXJSZWdpb25zKGNvbnN0IFBs
YXRmb3JtOjpJbnRSZWN0UmVnaW9uJiwgQ2xlYXJKb2JzRmxhZ3MpOworICAgIHZvaWQgY2xlYXJU
aWxlSW5kZXhlcyhjb25zdCBUaWxlSW5kZXhMaXN0JiwgQ2xlYXJKb2JzRmxhZ3MpOwogCi0gICAg
Ly8gTWV0aG9kcyB0byBoYW5kbGUgYSBjb21wbGV0ZWQgc2V0IG9mIHNjcm9sbCBqb2JzLgotICAg
IHZvaWQgdmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQoYm9vbCBzaG91bGRCbGl0KTsKLSAgICB2
b2lkIG5vblZpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkKCk7CisgICAgLy8gUmVuZGVyIGl0ZW1z
IGZyb20gdGhlIHF1ZXVlLgorICAgIHZvaWQgcmVuZGVyUmVndWxhclJlbmRlckpvYnMoYm9vbCBh
bGxBdE9uY2VJZlBvc3NpYmxlKTsKKyAgICB2b2lkIHJlbmRlclNjcm9sbFpvb21Kb2JzKFRpbGVJ
bmRleExpc3QqIG91dHN0YW5kaW5nSm9icywgVGlsZUluZGV4TGlzdCogY29tcGxldGVkSm9icywg
Ym9vbCBhbGxBdE9uY2VJZlBvc3NpYmxlLCBib29sIHNob3VsZEJsaXRXaGVuQ29tcGxldGVkKTsK
KyAgICB2b2lkIHNjcm9sbFpvb21Kb2JzQ29tcGxldGVkKGNvbnN0IFRpbGVJbmRleExpc3QmIG91
dHN0YW5kaW5nSm9icywgVGlsZUluZGV4TGlzdCogY29tcGxldGVkSm9icywgYm9vbCBzaG91bGRC
bGl0KTsKIAogICAgIC8vIEludGVybmFsIG1ldGhvZCB0byBhZGQgdG8gdGhlIHZhcmlvdXMgcXVl
dWVzLgotICAgIHZvaWQgYWRkVG9SZWd1bGFyUXVldWUoY29uc3QgUGxhdGZvcm06OkludFJlY3Qm
KTsKLSAgICB2b2lkIGFkZFRvU2Nyb2xsWm9vbVF1ZXVlKGNvbnN0IFJlbmRlclJlY3QmLCBSZW5k
ZXJSZWN0TGlzdCogcXVldWUpOwotICAgIHZvaWQgcXVpY2tTb3J0KFJlbmRlclJlY3RMaXN0Kik7
Ci0KLSAgICAvLyBUaGUgc3BsaXR0aW5nIGZhY3RvciBmb3IgcmVuZGVyIHJlY3RzLgotICAgIGlu
dCBzcGxpdHRpbmdGYWN0b3IoY29uc3QgUGxhdGZvcm06OkludFJlY3QmKSBjb25zdDsKKyAgICB2
b2lkIGFkZFRvUmVndWxhclF1ZXVlKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJik7Cisg
ICAgdm9pZCBhZGRUb1Njcm9sbFpvb21RdWV1ZShjb25zdCBUaWxlSW5kZXhMaXN0JiwgVGlsZUlu
ZGV4TGlzdCogcXVldWUpOworICAgIHZvaWQgcXVpY2tTb3J0KFRpbGVJbmRleExpc3QqKTsKIAog
ICAgIEJhY2tpbmdTdG9yZVByaXZhdGUqIG1fcGFyZW50OwogCiAgICAgLy8gVGhlIGhpZ2hlc3Qg
cHJpb3JpdHkgcXVldWUuCi0gICAgUmVuZGVyUmVjdExpc3QgbV92aXNpYmxlWm9vbUpvYnM7Ci0g
ICAgUmVuZGVyUmVjdExpc3QgbV92aXNpYmxlU2Nyb2xsSm9iczsKLSAgICBSZW5kZXJSZWN0TGlz
dCBtX3Zpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkOworICAgIFRpbGVJbmRleExpc3QgbV92aXNp
YmxlWm9vbUpvYnM7CisgICAgVGlsZUluZGV4TGlzdCBtX3Zpc2libGVab29tSm9ic0NvbXBsZXRl
ZDsKKyAgICBUaWxlSW5kZXhMaXN0IG1fdmlzaWJsZVNjcm9sbEpvYnM7CisgICAgVGlsZUluZGV4
TGlzdCBtX3Zpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkOwogICAgIC8vIFRoZSBsb3dlc3QgcHJp
b3JpdHkgcXVldWUuCi0gICAgUmVuZGVyUmVjdExpc3QgbV9ub25WaXNpYmxlU2Nyb2xsSm9iczsK
LSAgICBSZW5kZXJSZWN0TGlzdCBtX25vblZpc2libGVTY3JvbGxKb2JzQ29tcGxldGVkOworICAg
IFRpbGVJbmRleExpc3QgbV9ub25WaXNpYmxlU2Nyb2xsSm9iczsKKyAgICBUaWxlSW5kZXhMaXN0
IG1fbm9uVmlzaWJsZVNjcm9sbEpvYnNDb21wbGV0ZWQ7CiAgICAgLy8gVGhlIHJlZ3VsYXIgcmVu
ZGVyIGpvYnMgYXJlIGluIHRoZSBtaWRkbGUuCiAgICAgUGxhdGZvcm06OkludFJlY3RSZWdpb24g
bV9yZWd1bGFyUmVuZGVySm9ic1JlZ2lvbjsKLSAgICBJbnRSZWN0TGlzdCBtX2N1cnJlbnRSZWd1
bGFyUmVuZGVySm9ic0JhdGNoOworICAgIFRpbGVJbmRleExpc3QgbV9jdXJyZW50UmVndWxhclJl
bmRlckpvYnNCYXRjaDsKICAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBtX2N1cnJlbnRSZWd1
bGFyUmVuZGVySm9ic0JhdGNoUmVnaW9uOwogICAgIGJvb2wgbV9yZWN0c0FkZGVkVG9SZWd1bGFy
UmVuZGVySm9ic0luQ3VycmVudEN5Y2xlOwogICAgIGJvb2wgbV9jdXJyZW50UmVndWxhclJlbmRl
ckpvYnNCYXRjaFVuZGVyUHJlc3N1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9vbC5jcHAKaW5kZXggZTk1ZWEyOTcyYzY1ZDU3
OWQ5ZTYwMmZlZjIzNDc5MmVhY2U3YjIzNy4uZDA4YzZhYWQyZTdkNjA1YmQ5ZjZkNTdhNmZhZmZm
YjlhOThjZGNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvU3VyZmFjZVBvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJL
aXRTdXBwb3J0L1N1cmZhY2VQb29sLmNwcApAQCAtMTU2LDE0ICsxNTYsMTQgQEAgdm9pZCBTdXJm
YWNlUG9vbDo6aW5pdGlhbGl6ZVZpc2libGVUaWxlQnVmZmVyKGNvbnN0IFBsYXRmb3JtOjpJbnRT
aXplJiB2aXNpYmxlU2kKICAgICB9CiB9CiAKLWJvb2wgU3VyZmFjZVBvb2w6Omhhc0JhY2tCdWZm
ZXIoKSBjb25zdAordW5zaWduZWQgU3VyZmFjZVBvb2w6Om51bWJlck9mQXZhaWxhYmxlQmFja0J1
ZmZlcnMoKSBjb25zdAogewotICAgIHJldHVybiAhbV9hdmFpbGFibGVCYWNrQnVmZmVyUG9vbC5p
c0VtcHR5KCk7CisgICAgcmV0dXJuIG1fYXZhaWxhYmxlQmFja0J1ZmZlclBvb2wuc2l6ZSgpOwog
fQogCiBUaWxlQnVmZmVyKiBTdXJmYWNlUG9vbDo6dGFrZUJhY2tCdWZmZXIoKQogewotICAgIEFT
U0VSVChoYXNCYWNrQnVmZmVyKCkpOworICAgIEFTU0VSVCghbV9hdmFpbGFibGVCYWNrQnVmZmVy
UG9vbC5pc0VtcHR5KCkpOwogICAgIGlmIChtX2F2YWlsYWJsZUJhY2tCdWZmZXJQb29sLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L1N1cmZhY2VQb29sLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9TdXJmYWNlUG9vbC5oCmluZGV4IDIzZWFjNDk0NmE2YzhlOGI3
OTFkNTM0YjJlYWYyYmZlMDM3YTMyNTYuLjVlZjMzY2ZiNWFkYzIwZWI0MTdkN2I0ZDRiNTBkY2Uy
NjMzOTU3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBw
b3J0L1N1cmZhY2VQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1
cHBvcnQvU3VyZmFjZVBvb2wuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUGxh
dGZvcm06OlNldHRpbmdzOjppbnN0YW5jZSgpLT5udW1iZXJPZkJhY2tpbmdTdG9yZUJhY2tCdWZm
ZXJzKCkgd2hpY2gKICAgICAvLyBhbGxvd3MgZm9yIGF0IGxlYXN0IG9uZSBiYWNrIGJ1ZmZlciB0
byBiZSBhdmFpbGFibGUgZm9yIGRyYXdpbmcgYmVmb3JlCiAgICAgLy8gc3dhcHBpbmcgYnVmZmVy
cy9nZW9tZXRyeSB0byB0aGUgZnJvbnQuCi0gICAgYm9vbCBoYXNCYWNrQnVmZmVyKCkgY29uc3Q7
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZBdmFpbGFibGVCYWNrQnVmZmVycygpIGNvbnN0OwogICAg
IFRpbGVCdWZmZXIqIHRha2VCYWNrQnVmZmVyKCk7CiAgICAgdm9pZCBhZGRCYWNrQnVmZmVyKFRp
bGVCdWZmZXIqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvVGlsZUluZGV4LmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3Vw
cG9ydC9UaWxlSW5kZXguaAppbmRleCA1MWQ1ZWYxMzU2ODM0ODc5MDZjZjFiZjhhZTdjOGUyZGRj
OTI3NThjLi4zMjhhZGY1NDE4ZWNlMjU5ZTk4NzVjNWI3ZDdhZmZmNzgyMTBjMjFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9UaWxlSW5kZXguaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9UaWxlSW5kZXguaApA
QCAtMjAsNiArMjAsNyBAQAogI2RlZmluZSBUaWxlSW5kZXhfaAogCiAjaW5jbHVkZSA8bGltaXRz
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEJsYWNrQmVycnkgewogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC02Miw2ICs2Myw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgQmxhY2tCZXJyeTo6V2ViS2l0OjpUaWxlSW5kZXgmIGEsIGNvbnN0IEJsYWNrQmVycnk6
CiB7CiAgICAgcmV0dXJuIGEuaSgpICE9IGIuaSgpIHx8IGEuaigpICE9IGIuaigpOwogfQorCit0
eXBlZGVmIFdURjo6VmVjdG9yPFRpbGVJbmRleD4gVGlsZUluZGV4TGlzdDsKKwogfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180013</attachid>
            <date>2012-12-18 13:15:40 -0800</date>
            <delta_ts>2012-12-18 13:45:15 -0800</delta_ts>
            <desc>Build fix</desc>
            <filename>bug-105199-20121218161256.patch</filename>
            <type>text/plain</type>
            <size>1898</size>
            <attacher name="Jakob Petsovits">jpetsovits</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpp
bmRleCA0YWU2NDZlZGI2Njk5NjdjYWY0NmI2NGI3YzgwNjhmZTc5YWFmN2M5Li41OWQzYzM5MTU0
MDc0NDk4MzdmZDM2YjQxM2IzMjZlZjU4YTI3NzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMi0xOCAgSmFrb2IgUGV0c292aXRzICA8anBl
dHNvdml0c0ByaW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBCdWlsZCBmaXggZm9yIHIx
MzgwMjQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDUxOTkKKyAgICAgICAgUklNIFBSIDI2MDIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjbGVhclZpc2libGVUaWxlcygpIGZ1bmN0aW9uIGRv
ZXNuJ3QgZXhpc3QgYW55bW9yZQorICAgICAgICBhbmQgYXBwYXJlbnRseSBJIGZhaWwgYXQgbWVy
Z2UgY29uZmxpY3QgcmVzb2x1dGlvbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEJsYWNrQmVycnk6OmRpc3BhdGNoRGlkTGF5b3V0KToKKwogMjAxMi0xMi0xNyAgSmFr
b2IgUGV0c292aXRzICA8anBldHNvdml0c0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5
XSBDbGVhbiB1cCAiZnJvbnRTdGF0ZSIgdnMuICJnZW9tZXRyeSIgbmFtaW5nIGNvbmZ1c2lvbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAKaW5kZXggYjllYmQ1
NmUzMTU1NTk1YjQ0YThkODQ0MDgzOTYzNzE4MjM5NGFkZC4uN2ZmNTA0NjAxZDU5YTkxNTE3Y2Jk
MDZjMWRlZTMyNDUxZDM2MDMyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50Qmxh
Y2tCZXJyeS5jcHAKQEAgLTg5NCw3ICs4OTQsNiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Qmxh
Y2tCZXJyeTo6ZGlzcGF0Y2hEaWRMYXlvdXQoTGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKQog
ICAgICAgICBpZiAobV93ZWJQYWdlUHJpdmF0ZS0+c2hvdWxkWm9vbVRvSW5pdGlhbFNjYWxlT25M
b2FkKCkpIHsKICAgICAgICAgICAgIEJhY2tpbmdTdG9yZVByaXZhdGUqIGJhY2tpbmdTdG9yZVBy
aXZhdGUgPSBtX3dlYlBhZ2VQcml2YXRlLT5tX2JhY2tpbmdTdG9yZS0+ZDsKICAgICAgICAgICAg
IG1fd2ViUGFnZVByaXZhdGUtPnpvb21Ub0luaXRpYWxTY2FsZU9uTG9hZCgpOyAvLyBTZXQgdGhl
IHByb3BlciB6b29tIGxldmVsIGZpcnN0LgotICAgICAgICAgICAgYmFja2luZ1N0b3JlUHJpdmF0
ZS0+Y2xlYXJWaXNpYmxlWm9vbSgpOyAvLyBDbGVhciB0aGUgdmlzaWJsZSB6b29tIHNpbmNlIHdl
J3JlIGV4cGxpY2l0bHkgcmVuZGVyaW5nK2JsaXR0aW5nIGJlbG93LgogICAgICAgICAgICAgYmFj
a2luZ1N0b3JlUHJpdmF0ZS0+cmVuZGVyQW5kQmxpdFZpc2libGVDb250ZW50c0ltbWVkaWF0ZWx5
KCk7CiAgICAgICAgIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>