<?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>193394</bug_id>
          
          <creation_ts>2019-01-14 03:02:25 -0800</creation_ts>
          <short_desc>Make the scrolling code use &quot;Async&quot; instead of &quot;Coordinated&quot;</short_desc>
          <delta_ts>2025-07-07 05:23:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Abrar Rahman Protyasha">a_protyasha</assigned_to>
          <cc>ews-watchlist</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1494102</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2019-01-14 03:02:25 -0800</bug_when>
    <thetext>Coordinated is used in various places but the async is used in preference options, build option and the &quot;base&quot; class AsyncScrollingCoordinator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494103</commentid>
    <comment_count>1</comment_count>
      <attachid>359024</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2019-01-14 03:04:10 -0800</bug_when>
    <thetext>Created attachment 359024
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494104</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 03:08:51 -0800</bug_when>
    <thetext>Attachment 359024 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494150</commentid>
    <comment_count>3</comment_count>
      <attachid>359036</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2019-01-14 07:42:30 -0800</bug_when>
    <thetext>Created attachment 359036
Patch

This is WIP, but I&apos;m not sure what difference we make between &apos;coordinated&apos; and &apos;async&apos;. It seems most of the &apos;coordinated&apos; operations actually assume a scrolling tree (hence are &apos;async&apos; scrolling) except maybe the m_legacyScrollingLayerCoordinator-&gt;registerAllViewportConstrainedLayers calls.

@smfr: Do you think we could actually merge AsyncScrollingCoordinator into ScrollingCoordinator?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508516</commentid>
    <comment_count>4</comment_count>
      <attachid>359036</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2019-02-21 08:15:22 -0800</bug_when>
    <thetext>Comment on attachment 359036
Patch

Patch is likely bitrotten, but just asking for review in order to get some feedback and so that we don&apos;t forget about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510436</commentid>
    <comment_count>5</comment_count>
      <attachid>359036</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2019-02-27 07:40:02 -0800</bug_when>
    <thetext>Comment on attachment 359036
Patch

mmh, it seems there are too many rebase conflicts here... It would probably be easier to start the patch again from scratch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2128107</commentid>
    <comment_count>6</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2025-07-07 05:23:57 -0700</bug_when>
    <thetext>Unassigning myself since I&apos;m no longer working on this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359024</attachid>
            <date>2019-01-14 03:04:10 -0800</date>
            <delta_ts>2019-01-14 07:42:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193394-20190114120408.patch</filename>
            <type>text/plain</type>
            <size>33680</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5OTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjhlMzMwODYwMzRkODc3
M2NlN2M2NWE1MzBkYzUxNzUzMzkzZDJhNC4uNjk3OWNiYTc1YWIzMzM1MmQxYjdiM2I1ODQ0NzYw
Y2IxOTA1NDEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE5LTAxLTE0ICBGcmVk
ZXJpYyBXYW5nICA8ZnJlZC53YW5nQGZyZWUuZnI+CisKKyAgICAgICAgTWFrZSB0aGUgc2Nyb2xs
aW5nIGNvZGUgdXNlICJBc3luYyIgaW5zdGVhZCBvZiAiQ29vcmRpbmF0ZWQiCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTMzOTQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMh
KS4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6c2Nyb2xsTGF5ZXJJRCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
On5SZW5kZXJMYXllckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OnNldElzQXN5bmNTY3JvbGxlZFdpdGhWaWV3cG9ydENvbnN0cmFp
bmVkUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6c2V0SXNTY3JvbGxDb29yZGluYXRlZFdpdGhWaWV3cG9y
dENvbnN0cmFpbmVkUm9sZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRp
bmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVBc3luY1Njcm9sbGVkTGF5ZXJzQWZ0ZXJGbHVzaEluY2x1ZGluZ1N1YmZyYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUFzeW5jU2Ny
b2xsZWRMYXllcnNBZnRlckZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlQ3VzdG9tTGF5ZXJzQWZ0ZXJGbHVzaCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEZsdXNoQ2hhbmdlc0ZvckxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyV2lsbEJlUmVtb3ZlZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Omhhc0FzeW5jU2Nyb2xs
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJh
bWVWaWV3RGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6Zml4ZWRSb290QmFja2dyb3VuZExheWVyQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldElzSW5XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjbGVhckJhY2tpbmdGb3JMYXllckluY2x1ZGluZ0Rlc2Nl
bmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNBc3lu
Y1Njcm9sbGFibGVTdGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVzZUFzeW5jU2Nyb2xsaW5nRm9yTGF5ZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1cmVSb290TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuVXNlQXN5bmNTY3JvbGxpbmdGb3JMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUFzeW5jU2Nyb2xsaW5nU3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVtb3ZlRnJvbUFz
eW5jU2Nyb2xsZWRMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6YXN5bmNTY3JvbGxlZEFuY2Vz
dG9ySW5QYXJlbnRPZkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVhdHRhY2hTdWJmcmFtZVNjcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjph
c3luY1Njcm9sbGluZ1JvbGVGb3JOb2RlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hBc3luY1Njcm9sbGVkTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVBc3luY1Njcm9sbGluZ0Zv
clRoaXNGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZUFzeW5jU2Nyb2xsZWRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29y
ZGluYXRlZExheWVyc0FmdGVyRmx1c2hJbmNsdWRpbmdTdWJmcmFtZXMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGlu
YXRlZExheWVyc0FmdGVyRmx1c2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpoYXNDb29yZGluYXRlZFNjcm9sbGluZyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVzZUNvb3JkaW5hdGVk
U2Nyb2xsaW5nRm9yTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2Fu
Q29vcmRpbmF0ZVNjcm9sbGluZ0ZvckxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRTdGF0dXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZW1vdmVG
cm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
c2Nyb2xsQ29vcmRpbmF0ZWRBbmNlc3RvckluUGFyZW50T2ZGcmFtZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpzY3JvbGxDb29yZGluYXRpb25Sb2xlRm9yTm9kZVR5cGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hTY3JvbGxD
b29yZGluYXRlZExheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0aW9uRm9yVGhpc0ZyYW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xs
Q29vcmRpbmF0ZWRMYXllcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5oOgorCiAyMDE5LTAxLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbRnJlZVR5cGVdIFN1cHBvcnQgZW1vamkgbW9k
aWZpZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZDI1YTdlNjFhN2FlMzRjYjI1
N2UxNGYwZTUyNWM3Mzk4MjI4MmRlOS4uNDgyY2ZhMmRhOWU0N2U0YzFkN2MyZmEwZGMyMzNlM2Q0
ZTViYzNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtOTA1LDcgKzkwNSw3IEBA
IHVpbnQ2NF90IEZyYW1lVmlldzo6c2Nyb2xsTGF5ZXJJRCgpIGNvbnN0CiAgICAgaWYgKCFiYWNr
aW5nKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBiYWNraW5nLT5zY3JvbGxpbmdO
b2RlSURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7CisgICAgcmV0
dXJuIGJhY2tpbmctPnNjcm9sbGluZ05vZGVJREZvclJvbGUoQXN5bmNTY3JvbGxpbmdSb2xlOjpT
Y3JvbGxpbmcpOwogfQogCiBTY3JvbGxhYmxlQXJlYSogRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJl
YUZvclNjcm9sbExheWVySUQodWludDY0X3Qgbm9kZUlEKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBiZThiYmEwYTdjODZl
YjE5ZTQyNGQ3NWIxYjA0MDUxZTFhZTkxNThjLi40NTljNmM3ODhjMTdjM2M0ZjgxNjg4YTZkYjIw
YzIzN2NkMTA4ZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcApAQCAtMjQ0LDcgKzI0NCw3IEBAIFJlbmRlckxheWVyQmFja2luZzo6flJl
bmRlckxheWVyQmFja2luZygpCiAgICAgdXBkYXRlQmFja2dyb3VuZExheWVyKGZhbHNlKTsKICAg
ICB1cGRhdGVNYXNraW5nTGF5ZXIoZmFsc2UsIGZhbHNlKTsKICAgICB1cGRhdGVTY3JvbGxpbmdM
YXllcnMoZmFsc2UpOwotICAgIGRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcih7IFNjcm9s
bENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZywgU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6Vmll
d3BvcnRDb25zdHJhaW5lZCB9KTsKKyAgICBkZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3Io
eyBBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGluZywgQXN5bmNTY3JvbGxpbmdSb2xlOjpWaWV3
cG9ydENvbnN0cmFpbmVkIH0pOwogICAgIGRlc3Ryb3lHcmFwaGljc0xheWVycygpOwogfQogCkBA
IC0xMjUyLDcgKzEyNTIsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0
cnkoKQogICAgIGlmIChzdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlckNoYW5nZWQob2xkU3VicGl4
ZWxPZmZzZXRGcm9tUmVuZGVyZXIsIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIsIGRldmlj
ZVNjYWxlRmFjdG9yKCkpICYmIGNhbklzc3VlU2V0TmVlZHNEaXNwbGF5KCkpCiAgICAgICAgIHNl
dENvbnRlbnRzTmVlZERpc3BsYXkoKTsKIAotICAgIGNvbXBvc2l0b3IoKS51cGRhdGVTY3JvbGxD
b29yZGluYXRlZFN0YXR1cyhtX293bmluZ0xheWVyLCB7IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllciwgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpT
Y3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgfSk7CisgICAgY29tcG9zaXRv
cigpLnVwZGF0ZUFzeW5jU2Nyb2xsaW5nU3RhdHVzKG1fb3duaW5nTGF5ZXIsIHsgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyLCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OlNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSB9KTsK
IH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKQpA
QCAtMTc3Miw3ICsxNzcyLDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9s
bGluZ0xheWVycyhib29sIG5lZWRzU2Nyb2xsaW5nTGF5ZXJzKQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFJlbmRlckxheWVyQmFja2luZzo6ZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5h
dG9yKE9wdGlvblNldDxTY3JvbGxDb29yZGluYXRpb25Sb2xlPiByb2xlcykKK3ZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjpkZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3IoT3B0aW9uU2V0PEFz
eW5jU2Nyb2xsaW5nUm9sZT4gcm9sZXMpCiB7CiAgICAgaWYgKCFtX3Njcm9sbGluZ05vZGVJRCAm
JiAhbV92aWV3cG9ydENvbnN0cmFpbmVkTm9kZUlEKQogICAgICAgICByZXR1cm47CkBAIC0xNzgx
LDIwICsxNzgxLDIwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpkZXRhY2hGcm9tU2Nyb2xs
aW5nQ29vcmRpbmF0b3IoT3B0aW9uU2V0PFNjcm9sbENvb3JkaW5hCiAgICAgaWYgKCFzY3JvbGxp
bmdDb29yZGluYXRvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKChyb2xlcy5jb250YWlu
cyhTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpKSAmJiBtX3Njcm9sbGluZ05vZGVJ
RCkgeworICAgIGlmICgocm9sZXMuY29udGFpbnMoQXN5bmNTY3JvbGxpbmdSb2xlOjpTY3JvbGxp
bmcpKSAmJiBtX3Njcm9sbGluZ05vZGVJRCkgewogICAgICAgICBMT0coQ29tcG9zaXRpbmcsICJE
ZXRhY2hpbmcgU2Nyb2xsaW5nIG5vZGUgJSIgUFJJdTY0LCBtX3Njcm9sbGluZ05vZGVJRCk7CiAg
ICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5kZXRhY2hGcm9tU3RhdGVUcmVlKG1fc2Nyb2xs
aW5nTm9kZUlEKTsKICAgICAgICAgbV9zY3JvbGxpbmdOb2RlSUQgPSAwOwogICAgIH0KICAgICAK
LSAgICBpZiAoKHJvbGVzLmNvbnRhaW5zKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlZpZXdwb3J0
Q29uc3RyYWluZWQpKSAmJiBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb2RlSUQpIHsKKyAgICBpZiAo
KHJvbGVzLmNvbnRhaW5zKEFzeW5jU2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkp
ICYmIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vZGVJRCkgewogICAgICAgICBMT0coQ29tcG9zaXRp
bmcsICJEZXRhY2hpbmcgVmlld3BvcnRDb25zdHJhaW5lZCBub2RlICUiIFBSSXU2NCwgbV92aWV3
cG9ydENvbnN0cmFpbmVkTm9kZUlEKTsKICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmRl
dGFjaEZyb21TdGF0ZVRyZWUobV92aWV3cG9ydENvbnN0cmFpbmVkTm9kZUlEKTsKICAgICAgICAg
bV92aWV3cG9ydENvbnN0cmFpbmVkTm9kZUlEID0gMDsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjpzZXRJc1Njcm9sbENvb3JkaW5hdGVkV2l0aFZpZXdwb3J0Q29uc3RyYWlu
ZWRSb2xlKGJvb2wgdmlld3BvcnRDb29yZGluYXRlZCkKK3ZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpzZXRJc0FzeW5jU2Nyb2xsZWRXaXRoVmlld3BvcnRDb25zdHJhaW5lZFJvbGUoYm9vbCB2aWV3
cG9ydENvb3JkaW5hdGVkKQogewogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0SXNWaWV3cG9ydENv
bnN0cmFpbmVkKHZpZXdwb3J0Q29vcmRpbmF0ZWQpOwogfQpAQCAtMzA4Miw5ICszMDgyLDkgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXJC
YWNraW5nJiBiYWNraW5nKQogICAgICAgICB0cyA8PCAiIHBhaW50c0ludG9Db21wb3NpdGVkQW5j
ZXN0b3IiOwogCiAgICAgdHMgPDwgIiBwcmltYXJ5IGxheWVyIElEICIgPDwgYmFja2luZy5ncmFw
aGljc0xheWVyKCktPnByaW1hcnlMYXllcklEKCk7Ci0gICAgaWYgKGF1dG8gbm9kZUlEID0gYmFj
a2luZy5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlZpZXdw
b3J0Q29uc3RyYWluZWQpKQorICAgIGlmIChhdXRvIG5vZGVJRCA9IGJhY2tpbmcuc2Nyb2xsaW5n
Tm9kZUlERm9yUm9sZShBc3luY1Njcm9sbGluZ1JvbGU6OlZpZXdwb3J0Q29uc3RyYWluZWQpKQog
ICAgICAgICB0cyA8PCAiIHZpZXdwb3J0IGNvbnN0cmFpbmVkIHNjcm9sbGluZyBub2RlICIgPDwg
bm9kZUlEOwotICAgIGlmIChhdXRvIG5vZGVJRCA9IGJhY2tpbmcuc2Nyb2xsaW5nTm9kZUlERm9y
Um9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpKQorICAgIGlmIChhdXRvIG5v
ZGVJRCA9IGJhY2tpbmcuc2Nyb2xsaW5nTm9kZUlERm9yUm9sZShBc3luY1Njcm9sbGluZ1JvbGU6
OlNjcm9sbGluZykpCiAgICAgICAgIHRzIDw8ICIgc2Nyb2xsaW5nIG5vZGUgIiA8PCBub2RlSUQ7
CiAgICAgcmV0dXJuIHRzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5oCmluZGV4IDhkNWY0M2M0ODE1ZDlkOTdhZGE0ZWQ3YzcxOWI0OTI5N2FmODZi
Y2MuLjg1MTQ1NDFkYTE0YTUyOTZmNjU3MzIzZjkzYzI2NDQ5MTMxZTBlNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKQEAgLTEwNSwzNSArMTA1
LDM1IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxpbmdMYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTGF5ZXIuZ2V0KCk7IH0KICAgICBHcmFwaGljc0xheWVyKiBz
Y3JvbGxpbmdDb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdDb250ZW50
c0xheWVyLmdldCgpOyB9CiAKLSAgICB2b2lkIGRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRv
cihPcHRpb25TZXQ8U2Nyb2xsQ29vcmRpbmF0aW9uUm9sZT4pOworICAgIHZvaWQgZGV0YWNoRnJv
bVNjcm9sbGluZ0Nvb3JkaW5hdG9yKE9wdGlvblNldDxBc3luY1Njcm9sbGluZ1JvbGU+KTsKICAg
ICAKLSAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29y
ZGluYXRpb25Sb2xlIHJvbGUpIGNvbnN0CisgICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05v
ZGVJREZvclJvbGUoQXN5bmNTY3JvbGxpbmdSb2xlIHJvbGUpIGNvbnN0CiAgICAgewogICAgICAg
ICBzd2l0Y2ggKHJvbGUpIHsKLSAgICAgICAgY2FzZSBTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpT
Y3JvbGxpbmc6CisgICAgICAgIGNhc2UgQXN5bmNTY3JvbGxpbmdSb2xlOjpTY3JvbGxpbmc6CiAg
ICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2RlSUQ7Ci0gICAgICAgIGNhc2UgU2Nyb2xs
Q29vcmRpbmF0aW9uUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZDoKKyAgICAgICAgY2FzZSBBc3lu
Y1Njcm9sbGluZ1JvbGU6OlZpZXdwb3J0Q29uc3RyYWluZWQ6CiAgICAgICAgICAgICByZXR1cm4g
bV92aWV3cG9ydENvbnN0cmFpbmVkTm9kZUlEOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xs
aW5nTm9kZUlEIG5vZGVJRCwgU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZSByb2xlKQorICAgIHZvaWQg
c2V0U2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCBBc3luY1Nj
cm9sbGluZ1JvbGUgcm9sZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAocm9sZSkgewotICAgICAg
ICBjYXNlIFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZzoKKyAgICAgICAgY2FzZSBB
c3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGluZzoKICAgICAgICAgICAgIG1fc2Nyb2xsaW5nTm9k
ZUlEID0gbm9kZUlEOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2Nyb2xsQ29v
cmRpbmF0aW9uUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZDoKKyAgICAgICAgY2FzZSBBc3luY1Nj
cm9sbGluZ1JvbGU6OlZpZXdwb3J0Q29uc3RyYWluZWQ6CiAgICAgICAgICAgICBtX3ZpZXdwb3J0
Q29uc3RyYWluZWROb2RlSUQgPSBub2RlSUQ7Ci0gICAgICAgICAgICBzZXRJc1Njcm9sbENvb3Jk
aW5hdGVkV2l0aFZpZXdwb3J0Q29uc3RyYWluZWRSb2xlKG5vZGVJRCk7CisgICAgICAgICAgICBz
ZXRJc0FzeW5jU2Nyb2xsZWRXaXRoVmlld3BvcnRDb25zdHJhaW5lZFJvbGUobm9kZUlEKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIFNjcm9sbGluZ05v
ZGVJRCBzY3JvbGxpbmdOb2RlSURGb3JDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
aW5nTm9kZUlEID8gbV9zY3JvbGxpbmdOb2RlSUQgOiBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb2Rl
SUQ7IH0KIAotICAgIHZvaWQgc2V0SXNTY3JvbGxDb29yZGluYXRlZFdpdGhWaWV3cG9ydENvbnN0
cmFpbmVkUm9sZShib29sKTsKKyAgICB2b2lkIHNldElzQXN5bmNTY3JvbGxlZFdpdGhWaWV3cG9y
dENvbnN0cmFpbmVkUm9sZShib29sKTsKIAogICAgIGJvb2wgaGFzTWFza0xheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXNrTGF5ZXI7IH0KICAgICBib29sIGhhc0NoaWxkQ2xpcHBpbmdNYXNrTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkQ2xpcHBpbmdNYXNrTGF5ZXIgIT0gbnVsbHB0cjsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAppbmRleCBhOGEyNTgzMTkwZDBhMzNkZTlhOTA2ZjcwYmY4NjUxYjI5OGY1ZTY3Li5lOTI2
OWUzODU1NGY0MTE4ZjJiMTA2ZGNhODc1ZDFmNTk3NWJjNzNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNDkwLDcgKzQ5
MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5n
ZXMoYm9vbCBpc0ZsdXNoUm9vdCkKICAgICAgICAgQVNTRVJUKG1fZmx1c2hpbmdMYXllcnMpOwog
ICAgIH0KIAotICAgIHVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzQWZ0ZXJGbHVzaEluY2x1
ZGluZ1N1YmZyYW1lcygpOworICAgIHVwZGF0ZUFzeW5jU2Nyb2xsZWRMYXllcnNBZnRlckZsdXNo
SW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlm
IChpc0ZsdXNoUm9vdCkKQEAgLTUwMSw5ICs1MDEsOSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKGJvb2wgaXNGbHVzaFJvb3QpCiAgICAgc3Rh
cnRMYXllckZsdXNoVGltZXJJZk5lZWRlZCgpOwogfQogCi12b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoSW5jbHVkaW5nU3Vi
ZnJhbWVzKCkKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVBc3luY1Njcm9sbGVk
TGF5ZXJzQWZ0ZXJGbHVzaEluY2x1ZGluZ1N1YmZyYW1lcygpCiB7Ci0gICAgdXBkYXRlU2Nyb2xs
Q29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoKCk7CisgICAgdXBkYXRlQXN5bmNTY3JvbGxlZExh
eWVyc0FmdGVyRmx1c2goKTsKIAogICAgIGF1dG8mIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1l
VmlldygpLmZyYW1lKCk7CiAgICAgZm9yIChGcmFtZSogc3ViZnJhbWUgPSBmcmFtZS50cmVlKCku
Zmlyc3RDaGlsZCgpOyBzdWJmcmFtZTsgc3ViZnJhbWUgPSBzdWJmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgmZnJhbWUpKSB7CkBAIC01MTEsMjYgKzUxMSwyNiBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoSW5jbHVk
aW5nU3ViZgogICAgICAgICBpZiAoIXZpZXcpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICB2aWV3LT5jb21wb3NpdG9yKCkudXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNBZnRl
ckZsdXNoKCk7CisgICAgICAgIHZpZXctPmNvbXBvc2l0b3IoKS51cGRhdGVBc3luY1Njcm9sbGVk
TGF5ZXJzQWZ0ZXJGbHVzaCgpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzQWZ0ZXJGbHVzaCgpCit2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQXN5bmNTY3JvbGxlZExheWVyc0FmdGVyRmx1c2goKQog
ewogICAgIHVwZGF0ZUN1c3RvbUxheWVyc0FmdGVyRmx1c2goKTsKIAogICAgIEhhc2hTZXQ8UmVu
ZGVyTGF5ZXIqPiBsYXllcnNOZWVkaW5nVXBkYXRlOwotICAgIHN0ZDo6c3dhcChtX3Njcm9sbENv
b3JkaW5hdGVkTGF5ZXJzTmVlZGluZ1VwZGF0ZSwgbGF5ZXJzTmVlZGluZ1VwZGF0ZSk7CisgICAg
c3RkOjpzd2FwKG1fYXN5bmNTY3JvbGxlZExheWVyc05lZWRpbmdVcGRhdGUsIGxheWVyc05lZWRp
bmdVcGRhdGUpOwogICAgIAogICAgIGZvciAoYXV0byogbGF5ZXIgOiBsYXllcnNOZWVkaW5nVXBk
YXRlKQotICAgICAgICB1cGRhdGVTY3JvbGxDb29yZGluYXRlZFN0YXR1cygqbGF5ZXIsIFNjcm9s
bGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpOworICAgICAgICB1cGRhdGVBc3luY1Njcm9sbGlu
Z1N0YXR1cygqbGF5ZXIsIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpOwogfQogCiB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ3VzdG9tTGF5ZXJzQWZ0ZXJGbHVzaCgp
CiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9sZWdhY3lTY3JvbGxpbmdM
YXllckNvb3JkaW5hdG9yKSB7Ci0gICAgICAgIG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGlu
YXRvci0+cmVnaXN0ZXJBbGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKCp0aGlzLCBtX3Njcm9s
bENvb3JkaW5hdGVkTGF5ZXJzKTsKKyAgICAgICAgbV9sZWdhY3lTY3JvbGxpbmdMYXllckNvb3Jk
aW5hdG9yLT5yZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKnRoaXMsIG1fYXN5
bmNTY3JvbGxlZExheWVycyk7CiAgICAgICAgIG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGlu
YXRvci0+cmVnaXN0ZXJTY3JvbGxpbmdMYXllcnNOZWVkaW5nVXBkYXRlKCk7CiAgICAgfQogI2Vu
ZGlmCkBAIC01MzgsOCArNTM4LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0
ZUN1c3RvbUxheWVyc0FmdGVyRmx1c2goKQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
ZGlkRmx1c2hDaGFuZ2VzRm9yTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyKQogewotICAgIGlmIChtX3Njcm9sbENvb3JkaW5hdGVkTGF5
ZXJzLmNvbnRhaW5zKCZsYXllcikpCi0gICAgICAgIG1fc2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNO
ZWVkaW5nVXBkYXRlLmFkZCgmbGF5ZXIpOworICAgIGlmIChtX2FzeW5jU2Nyb2xsZWRMYXllcnMu
Y29udGFpbnMoJmxheWVyKSkKKyAgICAgICAgbV9hc3luY1Njcm9sbGVkTGF5ZXJzTmVlZGluZ1Vw
ZGF0ZS5hZGQoJmxheWVyKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1f
bGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcikKQEAgLTE0OTYsOCArMTQ5Niw4IEBAIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXll
ciwgUmVxdWlyZXNDb21wb3NpdGluCiAKICAgICAgICAgICAgIGxheWVyLmVuc3VyZUJhY2tpbmco
KTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmlzUmVuZGVyVmlld0xheWVyKCkgJiYgdXNlQ29v
cmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihsYXllcikpIHsKLSAgICAgICAgICAgICAgICB1cGRh
dGVTY3JvbGxDb29yZGluYXRlZFN0YXR1cyhsYXllciwgeyBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxh
Z3M6OkxheWVyLCBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgfSk7Cisg
ICAgICAgICAgICBpZiAobGF5ZXIuaXNSZW5kZXJWaWV3TGF5ZXIoKSAmJiB1c2VBc3luY1Njcm9s
bGluZ0ZvckxheWVyKGxheWVyKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUFzeW5jU2Nyb2xs
aW5nU3RhdHVzKGxheWVyLCB7IFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIsIFNjcm9s
bGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSB9KTsKICAgICAgICAgICAgICAgICBp
ZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRv
cigpKQogICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3
Um9vdExheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSk7CiAjaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQpAQCAtMTUzNCw3ICsxNTM0LDcgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBSZXF1aXJlc0NvbXBv
c2l0aW4KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJl
bW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycyhsYXllcik7CisgICAgICAgICAgICByZW1v
dmVGcm9tQXN5bmNTY3JvbGxlZExheWVycyhsYXllcik7CiAKICAgICAgICAgICAgIGxheWVyLmNs
ZWFyQmFja2luZygpOwogICAgICAgICAgICAgbGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKQEAgLTE2NDQs
NyArMTY0NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVJlbW92
ZWQoUmVuZGVyTGF5ZXImIHBhcmVudCwgUmVuZGVyTGF5ZXImCiAgICAgaWYgKCFjaGlsZC5pc0Nv
bXBvc2l0ZWQoKSB8fCBwYXJlbnQucmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5
ZXJzKGNoaWxkKTsKKyAgICByZW1vdmVGcm9tQXN5bmNTY3JvbGxlZExheWVycyhjaGlsZCk7CiAg
ICAgcmVwYWludEluQ29tcG9zaXRlZEFuY2VzdG9yKGNoaWxkLCBjaGlsZC5iYWNraW5nKCktPmNv
bXBvc2l0ZWRCb3VuZHMoKSk7IC8vIEZJWE1FOiBkbyB2aWEgZGlydHkgYml0cz8KIAogICAgIHNl
dENvbXBvc2l0aW5nUGFyZW50KGNoaWxkLCBudWxscHRyKTsKQEAgLTE4MDMsNyArMTgwMyw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRDaGFuZ2VTaXplKCkKICAg
ICB9CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpoYXNDb29yZGluYXRlZFNjcm9s
bGluZygpIGNvbnN0Citib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzQXN5bmNTY3JvbGxp
bmcoKSBjb25zdAogewogICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKTsKICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgJiYg
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKSk7CkBAIC0xODM4LDcgKzE4MzgsNyBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVWaWV3RGlkU2Nyb2xsKCkKIAogICAgIC8vIElmIHRoZXJl
J3MgYSBzY3JvbGxpbmcgY29vcmRpbmF0b3IgdGhhdCBtYW5hZ2VzIHNjcm9sbGluZyBmb3IgdGhp
cyBmcmFtZSB2aWV3LAogICAgIC8vIGl0IHdpbGwgYWxzbyBtYW5hZ2UgdXBkYXRpbmcgdGhlIHNj
cm9sbCBsYXllciBwb3NpdGlvbi4KLSAgICBpZiAoaGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcoKSkg
eworICAgIGlmIChoYXNBc3luY1Njcm9sbGluZygpKSB7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8g
c2NoZWR1bGUgYSBmbHVzaCBpbiBvcmRlciBmb3IgdGhlIG1haW4gVGlsZWRCYWNraW5nIHRvIHVw
ZGF0ZSBpdHMgdGlsZSBjb3ZlcmFnZS4KICAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoTm93KCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTE4NzksNyArMTg3OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXJDaGFuZ2VkKCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKG1fcmVuZGVyVmlldy5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkKLSAg
ICAgICAgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRTdGF0dXMoKm1fcmVuZGVyVmlldy5sYXllcigp
LCBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyKTsKKyAgICAgICAgdXBkYXRlQXN5bmNT
Y3JvbGxpbmdTdGF0dXMoKm1fcmVuZGVyVmlldy5sYXllcigpLCBTY3JvbGxpbmdOb2RlQ2hhbmdl
RmxhZ3M6OkxheWVyKTsKIH0KIAogU3RyaW5nIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJU
cmVlQXNUZXh0KExheWVyVHJlZUZsYWdzIGZsYWdzKQpAQCAtMjAxNiw3ICsyMDE2LDcgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldElzSW5XaW5kb3coYm9vbCBpc0luV2luZG93KQog
ICAgICAgICBhdHRhY2hSb290TGF5ZXIoYXR0YWNobWVudCk7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICAgICAgaWYgKG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcikgewot
ICAgICAgICAgICAgbV9sZWdhY3lTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yLT5yZWdpc3RlckFs
bFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKnRoaXMsIG1fc2Nyb2xsQ29vcmRpbmF0ZWRMYXll
cnMpOworICAgICAgICAgICAgbV9sZWdhY3lTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yLT5yZWdp
c3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKnRoaXMsIG1fYXN5bmNTY3JvbGxlZExh
eWVycyk7CiAgICAgICAgICAgICBtX2xlZ2FjeVNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3ItPnJl
Z2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCk7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMjAzNyw3
ICsyMDM3LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldElzSW5XaW5kb3coYm9v
bCBpc0luV2luZG93KQogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsZWFyQmFja2luZ0Zv
ckxheWVySW5jbHVkaW5nRGVzY2VuZGFudHMoUmVuZGVyTGF5ZXImIGxheWVyKQogewogICAgIGlm
IChsYXllci5pc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICByZW1vdmVGcm9tU2Nyb2xsQ29vcmRp
bmF0ZWRMYXllcnMobGF5ZXIpOworICAgICAgICByZW1vdmVGcm9tQXN5bmNTY3JvbGxlZExheWVy
cyhsYXllcik7CiAgICAgICAgIGxheWVyLmNsZWFyQmFja2luZygpOwogICAgIH0KIApAQCAtMjc4
Niw3ICsyNzg2LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzQXN5bmNTY3JvbGxh
YmxlU3RpY2t5TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWUKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gTm8gb3ZlcmZsb3cgYW5jZXN0b3IsIHNvIHNlZSBpZiB0aGUgZnJhbWUg
c3VwcG9ydHMgYXN5bmMgc2Nyb2xsaW5nLgotICAgIGlmIChoYXNDb29yZGluYXRlZFNjcm9sbGlu
ZygpKQorICAgIGlmIChoYXNBc3luY1Njcm9sbGluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0yODMzLDkgKzI4MzMsOSBAQCBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Zml4ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydChjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZQogICAgIHJldHVybiB2aWV3Qm91bmRzLmludGVyc2VjdHMoZW5jbG9z
aW5nSW50UmVjdChhYnNvbHV0ZUJvdW5kcykpOwogfQogCi1ib29sIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciYg
bGF5ZXIpIGNvbnN0Citib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXNlQXN5bmNTY3JvbGxp
bmdGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIGNvbnN0CiB7Ci0gICAgaWYgKGxh
eWVyLmlzUmVuZGVyVmlld0xheWVyKCkgJiYgaGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcoKSkKKyAg
ICBpZiAobGF5ZXIuaXNSZW5kZXJWaWV3TGF5ZXIoKSAmJiBoYXNBc3luY1Njcm9sbGluZygpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0zNDMw
LDcgKzM0MzAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdExheWVy
KCkKIAogICAgICAgICAgICAgdXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycygpOwogCi0gICAg
ICAgICAgICBpZiAoaGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIGlmICho
YXNBc3luY1Njcm9sbGluZygpKQogICAgICAgICAgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCh0
cnVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB1cGRhdGVTY3JvbGxMYXll
clBvc2l0aW9uKCk7CkBAIC0zNjM5LDQzICszNjM5LDQzIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogICAgICAgICByb290TGF5
ZXItPm5vdGVEZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50
cygpOwogfQogCi1zdGF0aWMgYm9vbCBjYW5Db29yZGluYXRlU2Nyb2xsaW5nRm9yTGF5ZXIoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyKQorc3RhdGljIGJvb2wgY2FuVXNlQXN5bmNTY3JvbGxpbmdG
b3JMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiB7CiAgICAgcmV0dXJuIChsYXllci5p
c1JlbmRlclZpZXdMYXllcigpIHx8IGxheWVyLnBhcmVudCgpKSAmJiBsYXllci5pc0NvbXBvc2l0
ZWQoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3Jk
aW5hdGVkU3RhdHVzKFJlbmRlckxheWVyJiBsYXllciwgT3B0aW9uU2V0PFNjcm9sbGluZ05vZGVD
aGFuZ2VGbGFncz4gY2hhbmdlcykKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVB
c3luY1Njcm9sbGluZ1N0YXR1cyhSZW5kZXJMYXllciYgbGF5ZXIsIE9wdGlvblNldDxTY3JvbGxp
bmdOb2RlQ2hhbmdlRmxhZ3M+IGNoYW5nZXMpCiB7Ci0gICAgT3B0aW9uU2V0PFNjcm9sbENvb3Jk
aW5hdGlvblJvbGU+IGNvb3JkaW5hdGlvblJvbGVzOworICAgIE9wdGlvblNldDxBc3luY1Njcm9s
bGluZ1JvbGU+IGNvb3JkaW5hdGlvblJvbGVzOwogICAgIGlmIChpc1ZpZXdwb3J0Q29uc3RyYWlu
ZWRGaXhlZE9yU3RpY2t5TGF5ZXIobGF5ZXIpKQotICAgICAgICBjb29yZGluYXRpb25Sb2xlcy5h
ZGQoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCk7CisgICAgICAg
IGNvb3JkaW5hdGlvblJvbGVzLmFkZChBc3luY1Njcm9sbGluZ1JvbGU6OlZpZXdwb3J0Q29uc3Ry
YWluZWQpOwogCi0gICAgaWYgKHVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIobGF5ZXIp
KQotICAgICAgICBjb29yZGluYXRpb25Sb2xlcy5hZGQoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6
U2Nyb2xsaW5nKTsKKyAgICBpZiAodXNlQXN5bmNTY3JvbGxpbmdGb3JMYXllcihsYXllcikpCisg
ICAgICAgIGNvb3JkaW5hdGlvblJvbGVzLmFkZChBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGlu
Zyk7CiAKICAgICBpZiAobGF5ZXIuaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIGxheWVyLmJhY2tp
bmcoKS0+c2V0SXNTY3JvbGxDb29yZGluYXRlZFdpdGhWaWV3cG9ydENvbnN0cmFpbmVkUm9sZShj
b29yZGluYXRpb25Sb2xlcy5jb250YWlucyhTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpWaWV3cG9y
dENvbnN0cmFpbmVkKSk7CisgICAgICAgIGxheWVyLmJhY2tpbmcoKS0+c2V0SXNBc3luY1Njcm9s
bGVkV2l0aFZpZXdwb3J0Q29uc3RyYWluZWRSb2xlKGNvb3JkaW5hdGlvblJvbGVzLmNvbnRhaW5z
KEFzeW5jU2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpOwogCi0gICAgaWYgKGNv
b3JkaW5hdGlvblJvbGVzICYmIGNhbkNvb3JkaW5hdGVTY3JvbGxpbmdGb3JMYXllcihsYXllcikp
IHsKLSAgICAgICAgaWYgKG1fc2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMuYWRkKCZsYXllcikuaXNO
ZXdFbnRyeSkKKyAgICBpZiAoY29vcmRpbmF0aW9uUm9sZXMgJiYgY2FuVXNlQXN5bmNTY3JvbGxp
bmdGb3JMYXllcihsYXllcikpIHsKKyAgICAgICAgaWYgKG1fYXN5bmNTY3JvbGxlZExheWVycy5h
ZGQoJmxheWVyKS5pc05ld0VudHJ5KQogICAgICAgICAgICAgbV9zdWJmcmFtZVNjcm9sbExheWVy
c05lZWRSZWF0dGFjaCA9IHRydWU7CiAKLSAgICAgICAgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRM
YXllcihsYXllciwgY29vcmRpbmF0aW9uUm9sZXMsIGNoYW5nZXMpOworICAgICAgICB1cGRhdGVB
c3luY1Njcm9sbGVkTGF5ZXIobGF5ZXIsIGNvb3JkaW5hdGlvblJvbGVzLCBjaGFuZ2VzKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKGxheWVy
KTsKKyAgICAgICAgcmVtb3ZlRnJvbUFzeW5jU2Nyb2xsZWRMYXllcnMobGF5ZXIpOwogfQogCi12
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5
ZXJzKFJlbmRlckxheWVyJiBsYXllcikKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZW1v
dmVGcm9tQXN5bmNTY3JvbGxlZExheWVycyhSZW5kZXJMYXllciYgbGF5ZXIpCiB7Ci0gICAgaWYg
KCFtX3Njcm9sbENvb3JkaW5hdGVkTGF5ZXJzLmNvbnRhaW5zKCZsYXllcikpCisgICAgaWYgKCFt
X2FzeW5jU2Nyb2xsZWRMYXllcnMuY29udGFpbnMoJmxheWVyKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9zdWJmcmFtZVNjcm9sbExheWVyc05lZWRSZWF0dGFjaCA9IHRydWU7CiAgICAgCi0g
ICAgbV9zY3JvbGxDb29yZGluYXRlZExheWVycy5yZW1vdmUoJmxheWVyKTsKLSAgICBtX3Njcm9s
bENvb3JkaW5hdGVkTGF5ZXJzTmVlZGluZ1VwZGF0ZS5yZW1vdmUoJmxheWVyKTsKKyAgICBtX2Fz
eW5jU2Nyb2xsZWRMYXllcnMucmVtb3ZlKCZsYXllcik7CisgICAgbV9hc3luY1Njcm9sbGVkTGF5
ZXJzTmVlZGluZ1VwZGF0ZS5yZW1vdmUoJmxheWVyKTsKIAotICAgIGRldGFjaFNjcm9sbENvb3Jk
aW5hdGVkTGF5ZXIobGF5ZXIsIHsgU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nLCBT
Y3JvbGxDb29yZGluYXRpb25Sb2xlOjpWaWV3cG9ydENvbnN0cmFpbmVkIH0pOworICAgIGRldGFj
aEFzeW5jU2Nyb2xsZWRMYXllcihsYXllciwgeyBBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGlu
ZywgQXN5bmNTY3JvbGxpbmdSb2xlOjpWaWV3cG9ydENvbnN0cmFpbmVkIH0pOwogfQogCiBGaXhl
ZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1
dGVGaXhlZFZpZXdwb3J0Q29uc3RyYWludHMoUmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdApAQCAt
Mzc0OSw3ICszNzQ5LDcgQEAgc3RhdGljIFNjcm9sbGluZ05vZGVJRCBlbmNsb3NpbmdTY3JvbGxp
bmdOb2RlSUQoUmVuZGVyTGF5ZXImIGxheWVyLCBJbmNsdWRlU2VsZk8KICAgICByZXR1cm4gMDsK
IH0KIAotc3RhdGljIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxDb29yZGluYXRlZEFuY2VzdG9ySW5Q
YXJlbnRPZkZyYW1lKEZyYW1lJiBmcmFtZSkKK3N0YXRpYyBTY3JvbGxpbmdOb2RlSUQgYXN5bmNT
Y3JvbGxlZEFuY2VzdG9ySW5QYXJlbnRPZkZyYW1lKEZyYW1lJiBmcmFtZSkKIHsKICAgICBpZiAo
IWZyYW1lLmRvY3VtZW50KCkgfHwgIWZyYW1lLnZpZXcoKSkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0zNzg2LDcgKzM3ODYsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVhdHRhY2hT
dWJmcmFtZVNjcm9sbExheWVycygpCiAgICAgICAgIGlmICghZnJhbWVTY3JvbGxpbmdOb2RlSUQp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTY3JvbGxpbmdOb2RlSUQgcGFyZW50
Tm9kZUlEID0gc2Nyb2xsQ29vcmRpbmF0ZWRBbmNlc3RvckluUGFyZW50T2ZGcmFtZSgqY2hpbGQp
OworICAgICAgICBTY3JvbGxpbmdOb2RlSUQgcGFyZW50Tm9kZUlEID0gYXN5bmNTY3JvbGxlZEFu
Y2VzdG9ySW5QYXJlbnRPZkZyYW1lKCpjaGlsZCk7CiAgICAgICAgIGlmICghcGFyZW50Tm9kZUlE
KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTM3OTQsMTkgKzM3OTQsMTkgQEAgdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYXR0YWNoU3ViZnJhbWVTY3JvbGxMYXllcnMoKQogICAg
IH0KIH0KIAotc3RhdGljIGlubGluZSBTY3JvbGxDb29yZGluYXRpb25Sb2xlIHNjcm9sbENvb3Jk
aW5hdGlvblJvbGVGb3JOb2RlVHlwZShTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSkKK3N0YXRp
YyBpbmxpbmUgQXN5bmNTY3JvbGxpbmdSb2xlIGFzeW5jU2Nyb2xsaW5nUm9sZUZvck5vZGVUeXBl
KFNjcm9sbGluZ05vZGVUeXBlIG5vZGVUeXBlKQogewogICAgIHN3aXRjaCAobm9kZVR5cGUpIHsK
ICAgICBjYXNlIFNjcm9sbGluZ05vZGVUeXBlOjpNYWluRnJhbWU6CiAgICAgY2FzZSBTY3JvbGxp
bmdOb2RlVHlwZTo6U3ViZnJhbWU6CiAgICAgY2FzZSBTY3JvbGxpbmdOb2RlVHlwZTo6T3ZlcmZs
b3c6Ci0gICAgICAgIHJldHVybiBTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmc7Cisg
ICAgICAgIHJldHVybiBBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGluZzsKICAgICBjYXNlIFNj
cm9sbGluZ05vZGVUeXBlOjpGaXhlZDoKICAgICBjYXNlIFNjcm9sbGluZ05vZGVUeXBlOjpTdGlj
a3k6Ci0gICAgICAgIHJldHVybiBTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpWaWV3cG9ydENvbnN0
cmFpbmVkOworICAgICAgICByZXR1cm4gQXN5bmNTY3JvbGxpbmdSb2xlOjpWaWV3cG9ydENvbnN0
cmFpbmVkOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU2Ny
b2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nOworICAgIHJldHVybiBBc3luY1Njcm9sbGlu
Z1JvbGU6OlNjcm9sbGluZzsKIH0KIAogU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6YXR0YWNoU2Nyb2xsaW5nTm9kZShSZW5kZXJMYXllciYgbGF5ZXIsIFNjcm9sbGluZ05v
ZGVUeXBlIG5vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQgcGFyZW50Tm9kZUlEKQpAQCAtMzgxOCw3
ICszODE4LDcgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNo
U2Nyb2xsaW5nTm9kZShSZW5kZXJMYXllciYgbGF5ZXIsIFMKICAgICBpZiAoIWJhY2tpbmcpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZSByb2xlID0gc2Ny
b2xsQ29vcmRpbmF0aW9uUm9sZUZvck5vZGVUeXBlKG5vZGVUeXBlKTsKKyAgICBBc3luY1Njcm9s
bGluZ1JvbGUgcm9sZSA9IGFzeW5jU2Nyb2xsaW5nUm9sZUZvck5vZGVUeXBlKG5vZGVUeXBlKTsK
ICAgICBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEID0gYmFja2luZy0+c2Nyb2xsaW5nTm9kZUlERm9y
Um9sZShyb2xlKTsKICAgICBpZiAoIW5vZGVJRCkKICAgICAgICAgbm9kZUlEID0gc2Nyb2xsaW5n
Q29vcmRpbmF0b3ItPnVuaXF1ZVNjcm9sbGluZ05vZGVJRCgpOwpAQCAtMzgzMywyNiArMzgzMywy
NiBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hTY3JvbGxp
bmdOb2RlKFJlbmRlckxheWVyJiBsYXllciwgUwogICAgIHJldHVybiBub2RlSUQ7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hTY3JvbGxDb29yZGluYXRlZExheWVyKFJl
bmRlckxheWVyJiBsYXllciwgT3B0aW9uU2V0PFNjcm9sbENvb3JkaW5hdGlvblJvbGU+IHJvbGVz
KQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaEFzeW5jU2Nyb2xsZWRMYXllcihS
ZW5kZXJMYXllciYgbGF5ZXIsIE9wdGlvblNldDxBc3luY1Njcm9sbGluZ1JvbGU+IHJvbGVzKQog
ewogICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgaWYgKCFiYWNraW5n
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocm9sZXMuY29udGFpbnMoU2Nyb2xsQ29vcmRp
bmF0aW9uUm9sZTo6U2Nyb2xsaW5nKSkgewotICAgICAgICBpZiAoU2Nyb2xsaW5nTm9kZUlEIG5v
ZGVJRCA9IGJhY2tpbmctPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9u
Um9sZTo6U2Nyb2xsaW5nKSkKKyAgICBpZiAocm9sZXMuY29udGFpbnMoQXN5bmNTY3JvbGxpbmdS
b2xlOjpTY3JvbGxpbmcpKSB7CisgICAgICAgIGlmIChTY3JvbGxpbmdOb2RlSUQgbm9kZUlEID0g
YmFja2luZy0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9s
bGluZykpCiAgICAgICAgICAgICBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLnJlbW92ZShub2Rl
SUQpOwogICAgIH0KIAotICAgIGlmIChyb2xlcy5jb250YWlucyhTY3JvbGxDb29yZGluYXRpb25S
b2xlOjpWaWV3cG9ydENvbnN0cmFpbmVkKSkgewotICAgICAgICBpZiAoU2Nyb2xsaW5nTm9kZUlE
IG5vZGVJRCA9IGJhY2tpbmctPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0
aW9uUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpCisgICAgaWYgKHJvbGVzLmNvbnRhaW5zKEFz
eW5jU2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpIHsKKyAgICAgICAgaWYgKFNj
cm9sbGluZ05vZGVJRCBub2RlSUQgPSBiYWNraW5nLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKEFz
eW5jU2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpCiAgICAgICAgICAgICBtX3Nj
cm9sbGluZ05vZGVUb0xheWVyTWFwLnJlbW92ZShub2RlSUQpOwogICAgIH0KIAogICAgIGJhY2tp
bmctPmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcihyb2xlcyk7CiB9CiAKLXZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRpb25Gb3JUaGlzRnJhbWUo
U2Nyb2xsaW5nTm9kZUlEIHBhcmVudE5vZGVJRCkKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVBc3luY1Njcm9sbGluZ0ZvclRoaXNGcmFtZShTY3JvbGxpbmdOb2RlSUQgcGFyZW50
Tm9kZUlEKQogewogICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKTsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IG1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKTsKQEAgLTM4NzIsMTEgKzM4NzIsMTEgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGlvbkZvclRoaXNGcmFtZShTY3JvbGxpbmdO
b2RlSUQKICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+dXBkYXRlRnJhbWVTY3JvbGxpbmdOb2Rl
KG5vZGVJRCwgbV9zY3JvbGxMYXllci5nZXQoKSwgbV9yb290Q29udGVudExheWVyLmdldCgpLCBm
aXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xpcExheWVyKCksIHNjcm9sbGluZ0dlb21ldHJ5
KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5h
dGVkTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBPcHRpb25TZXQ8U2Nyb2xsQ29vcmRpbmF0aW9u
Um9sZT4gcm9sZXMsIE9wdGlvblNldDxTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M+IGNoYW5nZXMp
Cit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQXN5bmNTY3JvbGxlZExheWVyKFJl
bmRlckxheWVyJiBsYXllciwgT3B0aW9uU2V0PEFzeW5jU2Nyb2xsaW5nUm9sZT4gcm9sZXMsIE9w
dGlvblNldDxTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M+IGNoYW5nZXMpCiB7CiAgICAgYm9vbCBp
c1JlbmRlclZpZXdMYXllciA9IGxheWVyLmlzUmVuZGVyVmlld0xheWVyKCk7CiAKLSAgICBBU1NF
UlQobV9zY3JvbGxDb29yZGluYXRlZExheWVycy5jb250YWlucygmbGF5ZXIpKTsKKyAgICBBU1NF
UlQobV9hc3luY1Njcm9sbGVkTGF5ZXJzLmNvbnRhaW5zKCZsYXllcikpOwogICAgIEFTU0VSVChs
YXllci5pc0NvbXBvc2l0ZWQoKSk7CiAKICAgICBhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CkBAIC0zODg0LDEyICszODg0LDEyIEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyKFJl
bmRlckxheWVyJiBsYXllciwgT3B0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9yZW5k
ZXJWaWV3LmZyYW1lKCkuaXNNYWluRnJhbWUoKSkgewotICAgICAgICBTY3JvbGxpbmdOb2RlSUQg
cGFyZW50RG9jdW1lbnRIb3N0aW5nTm9kZUlEID0gc2Nyb2xsQ29vcmRpbmF0ZWRBbmNlc3Rvcklu
UGFyZW50T2ZGcmFtZShtX3JlbmRlclZpZXcuZnJhbWUoKSk7CisgICAgICAgIFNjcm9sbGluZ05v
ZGVJRCBwYXJlbnREb2N1bWVudEhvc3RpbmdOb2RlSUQgPSBhc3luY1Njcm9sbGVkQW5jZXN0b3JJ
blBhcmVudE9mRnJhbWUobV9yZW5kZXJWaWV3LmZyYW1lKCkpOwogICAgICAgICBpZiAoIXBhcmVu
dERvY3VtZW50SG9zdGluZ05vZGVJRCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB1
cGRhdGVTY3JvbGxDb29yZGluYXRpb25Gb3JUaGlzRnJhbWUocGFyZW50RG9jdW1lbnRIb3N0aW5n
Tm9kZUlEKTsKLSAgICAgICAgaWYgKCEocm9sZXMuY29udGFpbnMoU2Nyb2xsQ29vcmRpbmF0aW9u
Um9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpICYmIGlzUmVuZGVyVmlld0xheWVyKQorICAgICAg
ICB1cGRhdGVBc3luY1Njcm9sbGluZ0ZvclRoaXNGcmFtZShwYXJlbnREb2N1bWVudEhvc3RpbmdO
b2RlSUQpOworICAgICAgICBpZiAoIShyb2xlcy5jb250YWlucyhBc3luY1Njcm9sbGluZ1JvbGU6
OlZpZXdwb3J0Q29uc3RyYWluZWQpKSAmJiBpc1JlbmRlclZpZXdMYXllcikKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTM5MDEsNyArMzkwMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyKFJlbmRlckxheWVyJiBsYXll
ciwgT3B0CiAKICAgICAvLyBBbHdheXMgY2FsbCB0aGlzIGV2ZW4gaWYgdGhlIGJhY2tpbmcgaXMg
YWxyZWFkeSBhdHRhY2hlZCBiZWNhdXNlIHRoZSBwYXJlbnQgbWF5IGhhdmUgY2hhbmdlZC4KICAg
ICAvLyBJZiBhIG5vZGUgcGxheXMgYm90aCByb2xlcywgZml4ZWQvc3RpY2t5IGlzIGFsd2F5cyB0
aGUgYW5jZXN0b3Igbm9kZSBvZiBzY3JvbGxpbmcuCi0gICAgaWYgKHJvbGVzLmNvbnRhaW5zKFNj
cm9sbENvb3JkaW5hdGlvblJvbGU6OlZpZXdwb3J0Q29uc3RyYWluZWQpKSB7CisgICAgaWYgKHJv
bGVzLmNvbnRhaW5zKEFzeW5jU2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpIHsK
ICAgICAgICAgU2Nyb2xsaW5nTm9kZVR5cGUgbm9kZVR5cGUgPSBTY3JvbGxpbmdOb2RlVHlwZTo6
TWFpbkZyYW1lOwogICAgICAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25l
ZCgpKQogICAgICAgICAgICAgbm9kZVR5cGUgPSBTY3JvbGxpbmdOb2RlVHlwZTo6Rml4ZWQ7CkBA
IC0zOTM2LDExICszOTM2LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVT
Y3JvbGxDb29yZGluYXRlZExheWVyKFJlbmRlckxheWVyJiBsYXllciwgT3B0CiAgICAgICAgIAog
ICAgICAgICBwYXJlbnROb2RlSUQgPSBub2RlSUQ7CiAgICAgfSBlbHNlCi0gICAgICAgIGRldGFj
aFNjcm9sbENvb3JkaW5hdGVkTGF5ZXIobGF5ZXIsIFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlZp
ZXdwb3J0Q29uc3RyYWluZWQpOworICAgICAgICBkZXRhY2hBc3luY1Njcm9sbGVkTGF5ZXIobGF5
ZXIsIEFzeW5jU2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCk7CiAgICAgICAgIAot
ICAgIGlmIChyb2xlcy5jb250YWlucyhTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcp
KSB7CisgICAgaWYgKHJvbGVzLmNvbnRhaW5zKEFzeW5jU2Nyb2xsaW5nUm9sZTo6U2Nyb2xsaW5n
KSkgewogICAgICAgICBpZiAoaXNSZW5kZXJWaWV3TGF5ZXIpCi0gICAgICAgICAgICB1cGRhdGVT
Y3JvbGxDb29yZGluYXRpb25Gb3JUaGlzRnJhbWUocGFyZW50Tm9kZUlEKTsKKyAgICAgICAgICAg
IHVwZGF0ZUFzeW5jU2Nyb2xsaW5nRm9yVGhpc0ZyYW1lKHBhcmVudE5vZGVJRCk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgU2Nyb2xsaW5nTm9kZVR5cGUgbm9kZVR5cGUgPSBTY3JvbGxp
bmdOb2RlVHlwZTo6T3ZlcmZsb3c7CiAgICAgICAgICAgICBTY3JvbGxpbmdOb2RlSUQgbm9kZUlE
ID0gYXR0YWNoU2Nyb2xsaW5nTm9kZShsYXllciwgbm9kZVR5cGUsIHBhcmVudE5vZGVJRCk7CkBA
IC0zOTcyLDcgKzM5NzIsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Ny
b2xsQ29vcmRpbmF0ZWRMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIE9wdAogICAgICAgICAgICAg
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZShub2RlSUQs
IGJhY2tpbmctPnNjcm9sbGluZ0xheWVyKCksIGJhY2tpbmctPnNjcm9sbGluZ0NvbnRlbnRzTGF5
ZXIoKSwgc2Nyb2xsaW5nR2VvbWV0cnkpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAg
IGRldGFjaFNjcm9sbENvb3JkaW5hdGVkTGF5ZXIobGF5ZXIsIFNjcm9sbENvb3JkaW5hdGlvblJv
bGU6OlNjcm9sbGluZyk7CisgICAgICAgIGRldGFjaEFzeW5jU2Nyb2xsZWRMYXllcihsYXllciwg
QXN5bmNTY3JvbGxpbmdSb2xlOjpTY3JvbGxpbmcpOwogfQogCiBTY3JvbGxhYmxlQXJlYSogUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNjcm9sbExheWVySUQoU2Nyb2xs
aW5nTm9kZUlEIG5vZGVJRCkgY29uc3QKQEAgLTM5ODYsNyArMzk4Niw3IEBAIFNjcm9sbGFibGVB
cmVhKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsTGF5ZXJJ
RChTY3JvbGxpbmdOCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6d2lsbFJlbW92ZVNjcm9s
bGluZ0xheWVyV2l0aEJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBSZW5kZXJMYXllckJhY2tp
bmcmIGJhY2tpbmcpCiB7CiAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhp
cy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBiYWNraW5nLmRldGFjaEZyb21T
Y3JvbGxpbmdDb29yZGluYXRvcihTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOwor
ICAgICAgICBiYWNraW5nLmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcihBc3luY1Njcm9s
bGluZ1JvbGU6OlNjcm9sbGluZyk7CiAKICAgICAgICAgLy8gRm9yIENvb3JkaW5hdGVkIEdyYXBo
aWNzLgogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxM
YXllckRpZENoYW5nZShsYXllcik7CkBAIC00MDAyLDcgKzQwMDIsNyBAQCB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6d2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoUmVuZGVy
TGF5ZXImIGxheQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5n
TGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQogewotICAgIHVwZGF0ZVNjcm9sbENvb3JkaW5hdGVk
U3RhdHVzKGxheWVyLCB7IFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIsIFNjcm9sbGlu
Z05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSB9KTsKKyAgICB1cGRhdGVBc3luY1Njcm9s
bGluZ1N0YXR1cyhsYXllciwgeyBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyLCBTY3Jv
bGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgfSk7CiAKICAgICBpZiAoYXV0byog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CiAg
ICAgICAgIC8vIEZvciBDb29yZGluYXRlZCBHcmFwaGljcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCAwZjdhMDg3ODg0M2RiMjhm
MDhmNDNkYTk3MDc0MjhjYzRiN2UwNWFlLi41ODRkZGM5NjJlYjQxNTVkNWE5MDRhMmNmMzM2ODI1
NmEzZjhiNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5oCkBAIC04Myw3ICs4Myw3IEBAIGVudW0gY2xhc3MgQ29tcG9zaXRpbmdSZWFz
b24gewogICAgIEVtYmVkZGVkVmlldyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAy
NiwKIH07CiAKLWVudW0gY2xhc3MgU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZSB7CitlbnVtIGNsYXNz
IEFzeW5jU2Nyb2xsaW5nUm9sZSB7CiAgICAgVmlld3BvcnRDb25zdHJhaW5lZCA9IDEgPDwgMCwK
ICAgICBTY3JvbGxpbmcgICAgICAgICAgID0gMSA8PCAxCiB9OwpAQCAtMzIyLDggKzMyMiw4IEBA
IHB1YmxpYzoKICAgICAgICAgTGF5ZXJHZW9tZXRyeSAgID0gMSA8PCAxLAogICAgIH07CiAKLSAg
ICB2b2lkIHVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkU3RhdHVzKFJlbmRlckxheWVyJiwgT3B0aW9u
U2V0PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFncz4pOwotICAgIHZvaWQgcmVtb3ZlRnJvbVNjcm9s
bENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyJik7CisgICAgdm9pZCB1cGRhdGVBc3luY1Nj
cm9sbGluZ1N0YXR1cyhSZW5kZXJMYXllciYsIE9wdGlvblNldDxTY3JvbGxpbmdOb2RlQ2hhbmdl
RmxhZ3M+KTsKKyAgICB2b2lkIHJlbW92ZUZyb21Bc3luY1Njcm9sbGVkTGF5ZXJzKFJlbmRlckxh
eWVyJik7CiAKICAgICB2b2lkIHdpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJl
bmRlckxheWVyJiwgUmVuZGVyTGF5ZXJCYWNraW5nJik7CiAgICAgdm9pZCBkaWRBZGRTY3JvbGxp
bmdMYXllcihSZW5kZXJMYXllciYpOwpAQCAtNDM3LDggKzQzNyw4IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIG5vdGlmeUlGcmFtZXNPZkNvbXBvc2l0aW5nQ2hhbmdlKCk7CiAKLSAgICB2b2lkIHVw
ZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzQWZ0ZXJGbHVzaEluY2x1ZGluZ1N1YmZyYW1lcygp
OwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoKCk7Cisg
ICAgdm9pZCB1cGRhdGVBc3luY1Njcm9sbGVkTGF5ZXJzQWZ0ZXJGbHVzaEluY2x1ZGluZ1N1YmZy
YW1lcygpOworICAgIHZvaWQgdXBkYXRlQXN5bmNTY3JvbGxlZExheWVyc0FmdGVyRmx1c2goKTsK
IAogICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdEZvckxheWVyRmx1c2hpbmcoKSBjb25zdDsKICAg
ICAKQEAgLTQ3MywxMCArNDczLDEwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUN1c3Rv
bUxheWVyc0FmdGVyRmx1c2goKTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0aW9u
Rm9yVGhpc0ZyYW1lKFNjcm9sbGluZ05vZGVJRCk7CisgICAgdm9pZCB1cGRhdGVBc3luY1Njcm9s
bGluZ0ZvclRoaXNGcmFtZShTY3JvbGxpbmdOb2RlSUQpOwogICAgIFNjcm9sbGluZ05vZGVJRCBh
dHRhY2hTY3JvbGxpbmdOb2RlKFJlbmRlckxheWVyJiwgU2Nyb2xsaW5nTm9kZVR5cGUsIFNjcm9s
bGluZ05vZGVJRCBwYXJlbnROb2RlSUQpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0
ZWRMYXllcihSZW5kZXJMYXllciYsIE9wdGlvblNldDxTY3JvbGxDb29yZGluYXRpb25Sb2xlPiwg
T3B0aW9uU2V0PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFncz4pOwotICAgIHZvaWQgZGV0YWNoU2Ny
b2xsQ29vcmRpbmF0ZWRMYXllcihSZW5kZXJMYXllciYsIE9wdGlvblNldDxTY3JvbGxDb29yZGlu
YXRpb25Sb2xlPik7CisgICAgdm9pZCB1cGRhdGVBc3luY1Njcm9sbGVkTGF5ZXIoUmVuZGVyTGF5
ZXImLCBPcHRpb25TZXQ8QXN5bmNTY3JvbGxpbmdSb2xlPiwgT3B0aW9uU2V0PFNjcm9sbGluZ05v
ZGVDaGFuZ2VGbGFncz4pOworICAgIHZvaWQgZGV0YWNoQXN5bmNTY3JvbGxlZExheWVyKFJlbmRl
ckxheWVyJiwgT3B0aW9uU2V0PEFzeW5jU2Nyb2xsaW5nUm9sZT4pOwogICAgIHZvaWQgcmVhdHRh
Y2hTdWJmcmFtZVNjcm9sbExheWVycygpOwogICAgIAogICAgIEZpeGVkUG9zaXRpb25WaWV3cG9y
dENvbnN0cmFpbnRzIGNvbXB1dGVGaXhlZFZpZXdwb3J0Q29uc3RyYWludHMoUmVuZGVyTGF5ZXIm
KSBjb25zdDsKQEAgLTQ5MiwxMCArNDkyLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgLy8g
VHJ1ZSBpZiB0aGUgRnJhbWVWaWV3IHVzZXMgYSBTY3JvbGxpbmdDb29yZGluYXRvci4KLSAgICBi
b29sIGhhc0Nvb3JkaW5hdGVkU2Nyb2xsaW5nKCkgY29uc3Q7Ci0gICAgYm9vbCB1c2VDb29yZGlu
YXRlZFNjcm9sbGluZ0ZvckxheWVyKGNvbnN0IFJlbmRlckxheWVyJikgY29uc3Q7CisgICAgYm9v
bCBoYXNBc3luY1Njcm9sbGluZygpIGNvbnN0OworICAgIGJvb2wgdXNlQXN5bmNTY3JvbGxpbmdG
b3JMYXllcihjb25zdCBSZW5kZXJMYXllciYpIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IG1ha2Ug
dGhlIGNvb3JkaW5hdGVkL2FzeW5jIHRlcm1pbm9sb2d5IGNvbnNpc3RlbnQuCiAgICAgYm9vbCBp
c0FzeW5jU2Nyb2xsYWJsZVN0aWNreUxheWVyKGNvbnN0IFJlbmRlckxheWVyJiwgY29uc3QgUmVu
ZGVyTGF5ZXIqKiBlbmNsb3NpbmdBY2NlbGVyYXRlZE92ZXJmbG93TGF5ZXIgPSBudWxscHRyKSBj
b25zdDsKICAgICBib29sIGlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlja3lMYXllcihj
b25zdCBSZW5kZXJMYXllciYpIGNvbnN0OwogICAgIApAQCAtNTUwLDggKzU0OSw4IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPEdyYXBoaWNzTGF5ZXI+IG1fY2xpcExheWVyOwogICAgIFJlZlB0cjxH
cmFwaGljc0xheWVyPiBtX3Njcm9sbExheWVyOwogCi0gICAgSGFzaFNldDxSZW5kZXJMYXllcio+
IG1fc2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnM7Ci0gICAgSGFzaFNldDxSZW5kZXJMYXllcio+IG1f
c2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNOZWVkaW5nVXBkYXRlOworICAgIEhhc2hTZXQ8UmVuZGVy
TGF5ZXIqPiBtX2FzeW5jU2Nyb2xsZWRMYXllcnM7CisgICAgSGFzaFNldDxSZW5kZXJMYXllcio+
IG1fYXN5bmNTY3JvbGxlZExheWVyc05lZWRpbmdVcGRhdGU7CiAKICAgICAvLyBFbmNsb3Npbmcg
bGF5ZXIgZm9yIG92ZXJmbG93IGNvbnRyb2xzIGFuZCB0aGUgY2xpcHBpbmcgbGF5ZXIKICAgICBS
ZWZQdHI8R3JhcGhpY3NMYXllcj4gbV9vdmVyZmxvd0NvbnRyb2xzSG9zdExheWVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359036</attachid>
            <date>2019-01-14 07:42:30 -0800</date>
            <delta_ts>2019-02-27 07:40:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Make-the-scrolling-code-use-Async-instead-of-Coordin.patch</filename>
            <type>text/plain</type>
            <size>35212</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBjNTg4ZTYyNzE2ZDg5ZDQyOGMyMDIyZGUyMzBkNWZhMDlhNzA2OTI4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmd2FuZ0BpZ2FsaWEuY29tPgpEYXRl
OiBNb24sIDE0IEphbiAyMDE5IDE2OjM3OjMxICswMTAwClN1YmplY3Q6IFtQQVRDSCB4c2VydmVy
XSBNYWtlIHRoZSBzY3JvbGxpbmcgY29kZSB1c2UgIkFzeW5jIiBpbnN0ZWFkIG9mCiAiQ29vcmRp
bmF0ZWQiCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICB8ICA2NCArKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCAgICAg
ICAgICAgICB8ICAgMiArLQogLi4uL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmggICAgIHwgICAyICsKIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwICB8ICAxNiArLS0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaCB8ICAxOCArLS0KIC4uLi9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCAg
ICAgICB8IDEyOCArKysrKysrKystLS0tLS0tLS0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuaCB8ICAyNyArKy0tCiA3IGZpbGVzIGNoYW5nZWQsIDE2MSBpbnNl
cnRpb25zKCspLCA5NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjhlMzMwODYwMzQuLmEz
MTQwMWJmMGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTktMDEtMTQgIEZyZWRl
cmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgdGhlIHNjcm9sbGlu
ZyBjb2RlIHVzZSAiQXN5bmMiIGluc3RlYWQgb2YgIkNvb3JkaW5hdGVkIgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMzk0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gc2V2ZXJhbCBwbGFjZXMgb2Yg
dGhlIGNvZGUsIGZ1bmN0aW9ucyB0byBtYW5hZ2UgImNvb3JkaW5hdGVkIHNjcm9sbGluZyIgYWN0
dWFsbHkgYXNzdW1lcworICAgICAgICB0aGUgcHJlc2VuY2Ugb2YgYSBzY3JvbGxpbmcgdHJlZSBp
LmUuIGFuIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IgYW5kIGhlbmNlIGlzIGFjdHVhbGx5Cisg
ICAgICAgICJhc3luYyIgc2Nyb2xsaW5nLiBUaGlzIHBhdGNoIHJlbmFtZXMgU2Nyb2xsQ29vcmRp
bmF0aW9uLCBTY3JvbGxDb29yZGluYXRlZCwKKyAgICAgICAgQ29vcmRpbmF0ZWRTY3JvbGxpbmcg
ZXRjIHRvIHVzZSAiQXN5bmMiIGluc3RlYWQgb2YgIkNvb3JkaW5hdGVkIi4KKworICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xs
TGF5ZXJJRCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6On5SZW5kZXJMYXllckJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9t
ZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmRldGFjaEZyb21T
Y3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnNldElzQXN5bmNTY3JvbGxlZFdpdGhWaWV3cG9ydENvbnN0cmFpbmVkUm9sZSk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6c2V0SXNTY3JvbGxDb29yZGluYXRlZFdpdGhWaWV3cG9ydENvbnN0cmFpbmVkUm9s
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVBc3luY1Nj
cm9sbGVkTGF5ZXJzQWZ0ZXJGbHVzaEluY2x1ZGluZ1N1YmZyYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUFzeW5jU2Nyb2xsZWRMYXllcnNBZnRl
ckZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
Q3VzdG9tTGF5ZXJzQWZ0ZXJGbHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmRpZEZsdXNoQ2hhbmdlc0ZvckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyV2lsbEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Omhhc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVWaWV3RGlkU2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zml4ZWRSb290QmFj
a2dyb3VuZExheWVyQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnNldElzSW5XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpjbGVhckJhY2tpbmdGb3JMYXllckluY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNBc3luY1Njcm9sbGFibGVTdGlj
a3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVzZUFzeW5jU2Nyb2xsaW5nRm9yTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1cmVSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Y2FuVXNlQXN5bmNTY3JvbGxpbmdGb3JMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZUFzeW5jU2Nyb2xsaW5nU3RhdHVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVtb3ZlRnJvbUFzeW5jU2Nyb2xsZWRMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6YXN5bmNTY3JvbGxlZEFuY2VzdG9ySW5QYXJlbnRPZkZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVhdHRhY2hT
dWJmcmFtZVNjcm9sbExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjphc3luY1Njcm9sbGluZ1Jv
bGVGb3JOb2RlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmF0dGFjaFNjcm9sbGluZ05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpkZXRhY2hBc3luY1Njcm9sbGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVBc3luY1Njcm9sbGluZ0ZvclRoaXNGcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUFzeW5jU2Nyb2xs
ZWRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxS
ZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyc0Fm
dGVyRmx1c2hJbmNsdWRpbmdTdWJmcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyc0FmdGVy
Rmx1c2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpoYXNDb29yZGluYXRlZFNjcm9sbGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5
ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FuQ29vcmRpbmF0ZVNjcm9s
bGluZ0ZvckxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRTdGF0dXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZW1vdmVGcm9tU2Nyb2xsQ29vcmRp
bmF0ZWRMYXllcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsQ29vcmRpbmF0
ZWRBbmNlc3RvckluUGFyZW50T2ZGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
Y3JvbGxDb29yZGluYXRpb25Sb2xlRm9yTm9kZVR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hTY3JvbGxDb29yZGluYXRlZExheWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBk
YXRlU2Nyb2xsQ29vcmRpbmF0aW9uRm9yVGhpc0ZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXll
cik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
OgorCiAyMDE5LTAxLTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbRnJlZVR5cGVdIFN1cHBvcnQgZW1vamkgbW9kaWZpZXJzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZDI1YTdlNjFhN2EuLjQ4MmNmYTJkYTllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC05MDUsNyArOTA1LDcgQEAgdWludDY0X3QgRnJhbWVW
aWV3OjpzY3JvbGxMYXllcklEKCkgY29uc3QKICAgICBpZiAoIWJhY2tpbmcpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgcmV0dXJuIGJhY2tpbmctPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Ny
b2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKKyAgICByZXR1cm4gYmFja2luZy0+c2Ny
b2xsaW5nTm9kZUlERm9yUm9sZShBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGluZyk7CiB9CiAK
IFNjcm9sbGFibGVBcmVhKiBGcmFtZVZpZXc6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsTGF5ZXJJ
RCh1aW50NjRfdCBub2RlSUQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAppbmRleCA2MTRiNjcwNTU3NC4uNmU3NGQy
ZWY2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaApAQCAtMTI3LDggKzEyNywxMCBAQCBwdWJsaWM6CiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGFnZURlc3Ryb3llZCgpOwogICAgIAorI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCiAgICAgdmlydHVhbCBib29sIGlzQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlm
IC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAKICAgICAvLyBSZXR1cm4gd2hldGhlciB0aGlz
IHNjcm9sbGluZyBjb29yZGluYXRvciBoYW5kbGVzIHNjcm9sbGluZyBmb3IgdGhlIGdpdmVuIGZy
YW1lIHZpZXcuCiAgICAgdmlydHVhbCBib29sIGNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVW
aWV3KGNvbnN0IEZyYW1lVmlldyYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBiZThiYmEwYTdjOC4uNDU5YzZjNzg4YzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CkBAIC0yNDQsNyArMjQ0LDcgQEAgUmVuZGVyTGF5ZXJCYWNraW5nOjp+UmVuZGVyTGF5ZXJCYWNr
aW5nKCkKICAgICB1cGRhdGVCYWNrZ3JvdW5kTGF5ZXIoZmFsc2UpOwogICAgIHVwZGF0ZU1hc2tp
bmdMYXllcihmYWxzZSwgZmFsc2UpOwogICAgIHVwZGF0ZVNjcm9sbGluZ0xheWVycyhmYWxzZSk7
Ci0gICAgZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKHsgU2Nyb2xsQ29vcmRpbmF0aW9u
Um9sZTo6U2Nyb2xsaW5nLCBTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpWaWV3cG9ydENvbnN0cmFp
bmVkIH0pOworICAgIGRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcih7IEFzeW5jU2Nyb2xs
aW5nUm9sZTo6U2Nyb2xsaW5nLCBBc3luY1Njcm9sbGluZ1JvbGU6OlZpZXdwb3J0Q29uc3RyYWlu
ZWQgfSk7CiAgICAgZGVzdHJveUdyYXBoaWNzTGF5ZXJzKCk7CiB9CiAKQEAgLTEyNTIsNyArMTI1
Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSgpCiAgICAgaWYg
KHN1YnBpeGVsT2Zmc2V0RnJvbVJlbmRlcmVyQ2hhbmdlZChvbGRTdWJwaXhlbE9mZnNldEZyb21S
ZW5kZXJlciwgbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlciwgZGV2aWNlU2NhbGVGYWN0b3Io
KSkgJiYgY2FuSXNzdWVTZXROZWVkc0Rpc3BsYXkoKSkKICAgICAgICAgc2V0Q29udGVudHNOZWVk
RGlzcGxheSgpOwogCi0gICAgY29tcG9zaXRvcigpLnVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkU3Rh
dHVzKG1fb3duaW5nTGF5ZXIsIHsgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpTY3JvbGxpbmdOb2Rl
Q2hhbmdlRmxhZ3M6OkxheWVyLCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OlNjcm9sbGluZ05vZGVD
aGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSB9KTsKKyAgICBjb21wb3NpdG9yKCkudXBkYXRlQXN5
bmNTY3JvbGxpbmdTdGF0dXMobV9vd25pbmdMYXllciwgeyBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OlNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIsIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5IH0pOwogfQogCiB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlQWZ0ZXJEZXNjZW5kYW50cygpCkBAIC0xNzcyLDcgKzE3
NzIsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJv
b2wgbmVlZHNTY3JvbGxpbmdMYXllcnMpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpkZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3IoT3B0aW9uU2V0
PFNjcm9sbENvb3JkaW5hdGlvblJvbGU+IHJvbGVzKQordm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcihPcHRpb25TZXQ8QXN5bmNTY3JvbGxpbmdS
b2xlPiByb2xlcykKIHsKICAgICBpZiAoIW1fc2Nyb2xsaW5nTm9kZUlEICYmICFtX3ZpZXdwb3J0
Q29uc3RyYWluZWROb2RlSUQpCiAgICAgICAgIHJldHVybjsKQEAgLTE3ODEsMjAgKzE3ODEsMjAg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRv
cihPcHRpb25TZXQ8U2Nyb2xsQ29vcmRpbmEKICAgICBpZiAoIXNjcm9sbGluZ0Nvb3JkaW5hdG9y
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoKHJvbGVzLmNvbnRhaW5zKFNjcm9sbENvb3Jk
aW5hdGlvblJvbGU6OlNjcm9sbGluZykpICYmIG1fc2Nyb2xsaW5nTm9kZUlEKSB7CisgICAgaWYg
KChyb2xlcy5jb250YWlucyhBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGluZykpICYmIG1fc2Ny
b2xsaW5nTm9kZUlEKSB7CiAgICAgICAgIExPRyhDb21wb3NpdGluZywgIkRldGFjaGluZyBTY3Jv
bGxpbmcgbm9kZSAlIiBQUkl1NjQsIG1fc2Nyb2xsaW5nTm9kZUlEKTsKICAgICAgICAgc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmRldGFjaEZyb21TdGF0ZVRyZWUobV9zY3JvbGxpbmdOb2RlSUQpOwog
ICAgICAgICBtX3Njcm9sbGluZ05vZGVJRCA9IDA7CiAgICAgfQogICAgIAotICAgIGlmICgocm9s
ZXMuY29udGFpbnMoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkp
ICYmIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vZGVJRCkgeworICAgIGlmICgocm9sZXMuY29udGFp
bnMoQXN5bmNTY3JvbGxpbmdSb2xlOjpWaWV3cG9ydENvbnN0cmFpbmVkKSkgJiYgbV92aWV3cG9y
dENvbnN0cmFpbmVkTm9kZUlEKSB7CiAgICAgICAgIExPRyhDb21wb3NpdGluZywgIkRldGFjaGlu
ZyBWaWV3cG9ydENvbnN0cmFpbmVkIG5vZGUgJSIgUFJJdTY0LCBtX3ZpZXdwb3J0Q29uc3RyYWlu
ZWROb2RlSUQpOwogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZGV0YWNoRnJvbVN0YXRl
VHJlZShtX3ZpZXdwb3J0Q29uc3RyYWluZWROb2RlSUQpOwogICAgICAgICBtX3ZpZXdwb3J0Q29u
c3RyYWluZWROb2RlSUQgPSAwOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnNldElzU2Nyb2xsQ29vcmRpbmF0ZWRXaXRoVmlld3BvcnRDb25zdHJhaW5lZFJvbGUoYm9vbCB2
aWV3cG9ydENvb3JkaW5hdGVkKQordm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldElzQXN5bmNT
Y3JvbGxlZFdpdGhWaWV3cG9ydENvbnN0cmFpbmVkUm9sZShib29sIHZpZXdwb3J0Q29vcmRpbmF0
ZWQpCiB7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRJc1ZpZXdwb3J0Q29uc3RyYWluZWQodmll
d3BvcnRDb29yZGluYXRlZCk7CiB9CkBAIC0zMDgyLDkgKzMwODIsOSBAQCBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllckJhY2tpbmcmIGJhY2tp
bmcpCiAgICAgICAgIHRzIDw8ICIgcGFpbnRzSW50b0NvbXBvc2l0ZWRBbmNlc3RvciI7CiAKICAg
ICB0cyA8PCAiIHByaW1hcnkgbGF5ZXIgSUQgIiA8PCBiYWNraW5nLmdyYXBoaWNzTGF5ZXIoKS0+
cHJpbWFyeUxheWVySUQoKTsKLSAgICBpZiAoYXV0byBub2RlSUQgPSBiYWNraW5nLnNjcm9sbGlu
Z05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5l
ZCkpCisgICAgaWYgKGF1dG8gbm9kZUlEID0gYmFja2luZy5zY3JvbGxpbmdOb2RlSURGb3JSb2xl
KEFzeW5jU2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpCiAgICAgICAgIHRzIDw8
ICIgdmlld3BvcnQgY29uc3RyYWluZWQgc2Nyb2xsaW5nIG5vZGUgIiA8PCBub2RlSUQ7Ci0gICAg
aWYgKGF1dG8gbm9kZUlEID0gYmFja2luZy5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNjcm9sbENv
b3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZykpCisgICAgaWYgKGF1dG8gbm9kZUlEID0gYmFja2lu
Zy5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKEFzeW5jU2Nyb2xsaW5nUm9sZTo6U2Nyb2xsaW5nKSkK
ICAgICAgICAgdHMgPDwgIiBzY3JvbGxpbmcgbm9kZSAiIDw8IG5vZGVJRDsKICAgICByZXR1cm4g
dHM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgK
aW5kZXggOGQ1ZjQzYzQ4MTUuLjg1MTQ1NDFkYTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCkBAIC0xMDUsMzUgKzEwNSwzNSBAQCBwdWJsaWM6
CiAgICAgR3JhcGhpY3NMYXllciogc2Nyb2xsaW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Nj
cm9sbGluZ0xheWVyLmdldCgpOyB9CiAgICAgR3JhcGhpY3NMYXllciogc2Nyb2xsaW5nQ29udGVu
dHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nQ29udGVudHNMYXllci5nZXQoKTsg
fQogCi0gICAgdm9pZCBkZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3IoT3B0aW9uU2V0PFNj
cm9sbENvb3JkaW5hdGlvblJvbGU+KTsKKyAgICB2b2lkIGRldGFjaEZyb21TY3JvbGxpbmdDb29y
ZGluYXRvcihPcHRpb25TZXQ8QXN5bmNTY3JvbGxpbmdSb2xlPik7CiAgICAgCi0gICAgU2Nyb2xs
aW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZSBy
b2xlKSBjb25zdAorICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSURGb3JSb2xlKEFz
eW5jU2Nyb2xsaW5nUm9sZSByb2xlKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChyb2xl
KSB7Ci0gICAgICAgIGNhc2UgU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nOgorICAg
ICAgICBjYXNlIEFzeW5jU2Nyb2xsaW5nUm9sZTo6U2Nyb2xsaW5nOgogICAgICAgICAgICAgcmV0
dXJuIG1fc2Nyb2xsaW5nTm9kZUlEOwotICAgICAgICBjYXNlIFNjcm9sbENvb3JkaW5hdGlvblJv
bGU6OlZpZXdwb3J0Q29uc3RyYWluZWQ6CisgICAgICAgIGNhc2UgQXN5bmNTY3JvbGxpbmdSb2xl
OjpWaWV3cG9ydENvbnN0cmFpbmVkOgogICAgICAgICAgICAgcmV0dXJuIG1fdmlld3BvcnRDb25z
dHJhaW5lZE5vZGVJRDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBzZXRTY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNjcm9sbGluZ05vZGVJRCBub2Rl
SUQsIFNjcm9sbENvb3JkaW5hdGlvblJvbGUgcm9sZSkKKyAgICB2b2lkIHNldFNjcm9sbGluZ05v
ZGVJREZvclJvbGUoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgQXN5bmNTY3JvbGxpbmdSb2xlIHJv
bGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKLSAgICAgICAgY2FzZSBTY3JvbGxD
b29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmc6CisgICAgICAgIGNhc2UgQXN5bmNTY3JvbGxpbmdS
b2xlOjpTY3JvbGxpbmc6CiAgICAgICAgICAgICBtX3Njcm9sbGluZ05vZGVJRCA9IG5vZGVJRDsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNjcm9sbENvb3JkaW5hdGlvblJvbGU6
OlZpZXdwb3J0Q29uc3RyYWluZWQ6CisgICAgICAgIGNhc2UgQXN5bmNTY3JvbGxpbmdSb2xlOjpW
aWV3cG9ydENvbnN0cmFpbmVkOgogICAgICAgICAgICAgbV92aWV3cG9ydENvbnN0cmFpbmVkTm9k
ZUlEID0gbm9kZUlEOwotICAgICAgICAgICAgc2V0SXNTY3JvbGxDb29yZGluYXRlZFdpdGhWaWV3
cG9ydENvbnN0cmFpbmVkUm9sZShub2RlSUQpOworICAgICAgICAgICAgc2V0SXNBc3luY1Njcm9s
bGVkV2l0aFZpZXdwb3J0Q29uc3RyYWluZWRSb2xlKG5vZGVJRCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5n
Tm9kZUlERm9yQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ05vZGVJRCA/IG1f
c2Nyb2xsaW5nTm9kZUlEIDogbV92aWV3cG9ydENvbnN0cmFpbmVkTm9kZUlEOyB9CiAKLSAgICB2
b2lkIHNldElzU2Nyb2xsQ29vcmRpbmF0ZWRXaXRoVmlld3BvcnRDb25zdHJhaW5lZFJvbGUoYm9v
bCk7CisgICAgdm9pZCBzZXRJc0FzeW5jU2Nyb2xsZWRXaXRoVmlld3BvcnRDb25zdHJhaW5lZFJv
bGUoYm9vbCk7CiAKICAgICBib29sIGhhc01hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFz
a0xheWVyOyB9CiAgICAgYm9vbCBoYXNDaGlsZENsaXBwaW5nTWFza0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGlsZENsaXBwaW5nTWFza0xheWVyICE9IG51bGxwdHI7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggYThh
MjU4MzE5MGQuLmQ3NjA3NTFiYjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNDkwLDcgKzQ5MCw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoYm9vbCBpc0ZsdXNo
Um9vdCkKICAgICAgICAgQVNTRVJUKG1fZmx1c2hpbmdMYXllcnMpOwogICAgIH0KIAotICAgIHVw
ZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzQWZ0ZXJGbHVzaEluY2x1ZGluZ1N1YmZyYW1lcygp
OworICAgIHVwZGF0ZUFzeW5jU2Nyb2xsZWRMYXllcnNBZnRlckZsdXNoSW5jbHVkaW5nU3ViZnJh
bWVzKCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChpc0ZsdXNoUm9vdCkK
QEAgLTUwMSw5ICs1MDEsOSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzKGJvb2wgaXNGbHVzaFJvb3QpCiAgICAgc3RhcnRMYXllckZsdXNoVGlt
ZXJJZk5lZWRlZCgpOwogfQogCi12b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Ny
b2xsQ29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoSW5jbHVkaW5nU3ViZnJhbWVzKCkKK3ZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVBc3luY1Njcm9sbGVkTGF5ZXJzQWZ0ZXJGbHVz
aEluY2x1ZGluZ1N1YmZyYW1lcygpCiB7Ci0gICAgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXll
cnNBZnRlckZsdXNoKCk7CisgICAgdXBkYXRlQXN5bmNTY3JvbGxlZExheWVyc0FmdGVyRmx1c2go
KTsKIAogICAgIGF1dG8mIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7
CiAgICAgZm9yIChGcmFtZSogc3ViZnJhbWUgPSBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBz
dWJmcmFtZTsgc3ViZnJhbWUgPSBzdWJmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgmZnJhbWUp
KSB7CkBAIC01MTEsMjYgKzUxMSwyNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBk
YXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoSW5jbHVkaW5nU3ViZgogICAgICAg
ICBpZiAoIXZpZXcpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICB2aWV3LT5jb21w
b3NpdG9yKCkudXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoKCk7CisgICAg
ICAgIHZpZXctPmNvbXBvc2l0b3IoKS51cGRhdGVBc3luY1Njcm9sbGVkTGF5ZXJzQWZ0ZXJGbHVz
aCgpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9s
bENvb3JkaW5hdGVkTGF5ZXJzQWZ0ZXJGbHVzaCgpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlQXN5bmNTY3JvbGxlZExheWVyc0FmdGVyRmx1c2goKQogewogICAgIHVwZGF0ZUN1
c3RvbUxheWVyc0FmdGVyRmx1c2goKTsKIAogICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBsYXll
cnNOZWVkaW5nVXBkYXRlOwotICAgIHN0ZDo6c3dhcChtX3Njcm9sbENvb3JkaW5hdGVkTGF5ZXJz
TmVlZGluZ1VwZGF0ZSwgbGF5ZXJzTmVlZGluZ1VwZGF0ZSk7CisgICAgc3RkOjpzd2FwKG1fYXN5
bmNTY3JvbGxlZExheWVyc05lZWRpbmdVcGRhdGUsIGxheWVyc05lZWRpbmdVcGRhdGUpOwogICAg
IAogICAgIGZvciAoYXV0byogbGF5ZXIgOiBsYXllcnNOZWVkaW5nVXBkYXRlKQotICAgICAgICB1
cGRhdGVTY3JvbGxDb29yZGluYXRlZFN0YXR1cygqbGF5ZXIsIFNjcm9sbGluZ05vZGVDaGFuZ2VG
bGFnczo6TGF5ZXIpOworICAgICAgICB1cGRhdGVBc3luY1Njcm9sbGluZ1N0YXR1cygqbGF5ZXIs
IFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpOwogfQogCiB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlQ3VzdG9tTGF5ZXJzQWZ0ZXJGbHVzaCgpCiB7CiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9sZWdhY3lTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9y
KSB7Ci0gICAgICAgIG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvci0+cmVnaXN0ZXJB
bGxWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKCp0aGlzLCBtX3Njcm9sbENvb3JkaW5hdGVkTGF5
ZXJzKTsKKyAgICAgICAgbV9sZWdhY3lTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yLT5yZWdpc3Rl
ckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnMoKnRoaXMsIG1fYXN5bmNTY3JvbGxlZExheWVy
cyk7CiAgICAgICAgIG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvci0+cmVnaXN0ZXJT
Y3JvbGxpbmdMYXllcnNOZWVkaW5nVXBkYXRlKCk7CiAgICAgfQogI2VuZGlmCkBAIC01MzgsOCAr
NTM4LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUN1c3RvbUxheWVyc0Fm
dGVyRmx1c2goKQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkRmx1c2hDaGFuZ2Vz
Rm9yTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyKQogewotICAgIGlmIChtX3Njcm9sbENvb3JkaW5hdGVkTGF5ZXJzLmNvbnRhaW5zKCZs
YXllcikpCi0gICAgICAgIG1fc2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNOZWVkaW5nVXBkYXRlLmFk
ZCgmbGF5ZXIpOworICAgIGlmIChtX2FzeW5jU2Nyb2xsZWRMYXllcnMuY29udGFpbnMoJmxheWVy
KSkKKyAgICAgICAgbV9hc3luY1Njcm9sbGVkTGF5ZXJzTmVlZGluZ1VwZGF0ZS5hZGQoJmxheWVy
KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1fbGVnYWN5U2Nyb2xsaW5n
TGF5ZXJDb29yZGluYXRvcikKQEAgLTE0OTYsOCArMTQ5Niw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVxdWlyZXNDb21w
b3NpdGluCiAKICAgICAgICAgICAgIGxheWVyLmVuc3VyZUJhY2tpbmcoKTsKIAotICAgICAgICAg
ICAgaWYgKGxheWVyLmlzUmVuZGVyVmlld0xheWVyKCkgJiYgdXNlQ29vcmRpbmF0ZWRTY3JvbGxp
bmdGb3JMYXllcihsYXllcikpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVTY3JvbGxDb29yZGlu
YXRlZFN0YXR1cyhsYXllciwgeyBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyLCBTY3Jv
bGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgfSk7CisgICAgICAgICAgICBpZiAo
bGF5ZXIuaXNSZW5kZXJWaWV3TGF5ZXIoKSAmJiB1c2VBc3luY1Njcm9sbGluZ0ZvckxheWVyKGxh
eWVyKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUFzeW5jU2Nyb2xsaW5nU3RhdHVzKGxheWVy
LCB7IFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIsIFNjcm9sbGluZ05vZGVDaGFuZ2VG
bGFnczo6TGF5ZXJHZW9tZXRyeSB9KTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xs
aW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQogICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hh
bmdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSk7CiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQpAQCAtMTUzNCw3ICsxNTM0LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0
ZUJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBSZXF1aXJlc0NvbXBvc2l0aW4KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJlbW92ZUZyb21TY3JvbGxD
b29yZGluYXRlZExheWVycyhsYXllcik7CisgICAgICAgICAgICByZW1vdmVGcm9tQXN5bmNTY3Jv
bGxlZExheWVycyhsYXllcik7CiAKICAgICAgICAgICAgIGxheWVyLmNsZWFyQmFja2luZygpOwog
ICAgICAgICAgICAgbGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKQEAgLTE2NDQsNyArMTY0NCw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVJlbW92ZWQoUmVuZGVyTGF5ZXIm
IHBhcmVudCwgUmVuZGVyTGF5ZXImCiAgICAgaWYgKCFjaGlsZC5pc0NvbXBvc2l0ZWQoKSB8fCBw
YXJlbnQucmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKGNoaWxkKTsKKyAg
ICByZW1vdmVGcm9tQXN5bmNTY3JvbGxlZExheWVycyhjaGlsZCk7CiAgICAgcmVwYWludEluQ29t
cG9zaXRlZEFuY2VzdG9yKGNoaWxkLCBjaGlsZC5iYWNraW5nKCktPmNvbXBvc2l0ZWRCb3VuZHMo
KSk7IC8vIEZJWE1FOiBkbyB2aWEgZGlydHkgYml0cz8KIAogICAgIHNldENvbXBvc2l0aW5nUGFy
ZW50KGNoaWxkLCBudWxscHRyKTsKQEAgLTE4MDMsNyArMTgwMyw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRDaGFuZ2VTaXplKCkKICAgICB9CiB9CiAKLWJvb2wg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpoYXNDb29yZGluYXRlZFNjcm9sbGluZygpIGNvbnN0Citi
b29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAogewog
ICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKTsKICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgJiYgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KG1fcmVuZGVyVmlldy5mcmFt
ZVZpZXcoKSk7CkBAIC0xODM4LDcgKzE4MzgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6ZnJhbWVWaWV3RGlkU2Nyb2xsKCkKIAogICAgIC8vIElmIHRoZXJlJ3MgYSBzY3JvbGxpbmcg
Y29vcmRpbmF0b3IgdGhhdCBtYW5hZ2VzIHNjcm9sbGluZyBmb3IgdGhpcyBmcmFtZSB2aWV3LAog
ICAgIC8vIGl0IHdpbGwgYWxzbyBtYW5hZ2UgdXBkYXRpbmcgdGhlIHNjcm9sbCBsYXllciBwb3Np
dGlvbi4KLSAgICBpZiAoaGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcoKSkgeworICAgIGlmIChoYXNB
c3luY1Njcm9sbGluZygpKSB7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gc2NoZWR1bGUgYSBmbHVz
aCBpbiBvcmRlciBmb3IgdGhlIG1haW4gVGlsZWRCYWNraW5nIHRvIHVwZGF0ZSBpdHMgdGlsZSBj
b3ZlcmFnZS4KICAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoTm93KCk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTE4NzksNyArMTg3OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmaXhl
ZFJvb3RCYWNrZ3JvdW5kTGF5ZXJDaGFuZ2VkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KG1fcmVuZGVyVmlldy5sYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkKLSAgICAgICAgdXBkYXRlU2Ny
b2xsQ29vcmRpbmF0ZWRTdGF0dXMoKm1fcmVuZGVyVmlldy5sYXllcigpLCBTY3JvbGxpbmdOb2Rl
Q2hhbmdlRmxhZ3M6OkxheWVyKTsKKyAgICAgICAgdXBkYXRlQXN5bmNTY3JvbGxpbmdTdGF0dXMo
Km1fcmVuZGVyVmlldy5sYXllcigpLCBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyKTsK
IH0KIAogU3RyaW5nIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJUcmVlQXNUZXh0KExheWVy
VHJlZUZsYWdzIGZsYWdzKQpAQCAtMjAxNiw3ICsyMDE2LDcgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnNldElzSW5XaW5kb3coYm9vbCBpc0luV2luZG93KQogICAgICAgICBhdHRhY2hS
b290TGF5ZXIoYXR0YWNobWVudCk7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAg
aWYgKG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcikgewotICAgICAgICAgICAgbV9s
ZWdhY3lTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yLT5yZWdpc3RlckFsbFZpZXdwb3J0Q29uc3Ry
YWluZWRMYXllcnMoKnRoaXMsIG1fc2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMpOworICAgICAgICAg
ICAgbV9sZWdhY3lTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yLT5yZWdpc3RlckFsbFZpZXdwb3J0
Q29uc3RyYWluZWRMYXllcnMoKnRoaXMsIG1fYXN5bmNTY3JvbGxlZExheWVycyk7CiAgICAgICAg
ICAgICBtX2xlZ2FjeVNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3ItPnJlZ2lzdGVyQWxsU2Nyb2xs
aW5nTGF5ZXJzKCk7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMjAzNyw3ICsyMDM3LDcgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldElzSW5XaW5kb3coYm9vbCBpc0luV2luZG93KQog
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsZWFyQmFja2luZ0ZvckxheWVySW5jbHVkaW5n
RGVzY2VuZGFudHMoUmVuZGVyTGF5ZXImIGxheWVyKQogewogICAgIGlmIChsYXllci5pc0NvbXBv
c2l0ZWQoKSkgewotICAgICAgICByZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMobGF5
ZXIpOworICAgICAgICByZW1vdmVGcm9tQXN5bmNTY3JvbGxlZExheWVycyhsYXllcik7CiAgICAg
ICAgIGxheWVyLmNsZWFyQmFja2luZygpOwogICAgIH0KIApAQCAtMjc4Niw3ICsyNzg2LDcgQEAg
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzQXN5bmNTY3JvbGxhYmxlU3RpY2t5TGF5ZXIo
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8g
Tm8gb3ZlcmZsb3cgYW5jZXN0b3IsIHNvIHNlZSBpZiB0aGUgZnJhbWUgc3VwcG9ydHMgYXN5bmMg
c2Nyb2xsaW5nLgotICAgIGlmIChoYXNDb29yZGluYXRlZFNjcm9sbGluZygpKQorICAgIGlmICho
YXNBc3luY1Njcm9sbGluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCkBAIC0yODMzLDkgKzI4MzMsOSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6Zml4ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydChjb25zdCBSZW5kZXJMYXllciYgbGF5
ZQogICAgIHJldHVybiB2aWV3Qm91bmRzLmludGVyc2VjdHMoZW5jbG9zaW5nSW50UmVjdChhYnNv
bHV0ZUJvdW5kcykpOwogfQogCi1ib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXNlQ29vcmRp
bmF0ZWRTY3JvbGxpbmdGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIGNvbnN0Citi
b29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXNlQXN5bmNTY3JvbGxpbmdGb3JMYXllcihjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIpIGNvbnN0CiB7Ci0gICAgaWYgKGxheWVyLmlzUmVuZGVyVmll
d0xheWVyKCkgJiYgaGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcoKSkKKyAgICBpZiAobGF5ZXIuaXNS
ZW5kZXJWaWV3TGF5ZXIoKSAmJiBoYXNBc3luY1Njcm9sbGluZygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0zNDMwLDcgKzM0MzAsNyBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdExheWVyKCkKIAogICAgICAgICAg
ICAgdXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycygpOwogCi0gICAgICAgICAgICBpZiAoaGFz
Q29vcmRpbmF0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIGlmIChoYXNBc3luY1Njcm9sbGlu
ZygpKQogICAgICAgICAgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCh0cnVlKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICB1cGRhdGVTY3JvbGxMYXllclBvc2l0aW9uKCk7CkBA
IC0zNjM5LDQzICszNjM5LDQzIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXZpY2VP
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogICAgICAgICByb290TGF5ZXItPm5vdGVEZXZpY2VP
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogfQogCi1zdGF0
aWMgYm9vbCBjYW5Db29yZGluYXRlU2Nyb2xsaW5nRm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyKQorc3RhdGljIGJvb2wgY2FuVXNlQXN5bmNTY3JvbGxpbmdGb3JMYXllcihjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZXIpCiB7CiAgICAgcmV0dXJuIChsYXllci5pc1JlbmRlclZpZXdMYXll
cigpIHx8IGxheWVyLnBhcmVudCgpKSAmJiBsYXllci5pc0NvbXBvc2l0ZWQoKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkU3RhdHVzKFJl
bmRlckxheWVyJiBsYXllciwgT3B0aW9uU2V0PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFncz4gY2hh
bmdlcykKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVBc3luY1Njcm9sbGluZ1N0
YXR1cyhSZW5kZXJMYXllciYgbGF5ZXIsIE9wdGlvblNldDxTY3JvbGxpbmdOb2RlQ2hhbmdlRmxh
Z3M+IGNoYW5nZXMpCiB7Ci0gICAgT3B0aW9uU2V0PFNjcm9sbENvb3JkaW5hdGlvblJvbGU+IGNv
b3JkaW5hdGlvblJvbGVzOworICAgIE9wdGlvblNldDxBc3luY1Njcm9sbGluZ1JvbGU+IGFzeW5j
U2Nyb2xsaW5nUm9sZXM7CiAgICAgaWYgKGlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlj
a3lMYXllcihsYXllcikpCi0gICAgICAgIGNvb3JkaW5hdGlvblJvbGVzLmFkZChTY3JvbGxDb29y
ZGluYXRpb25Sb2xlOjpWaWV3cG9ydENvbnN0cmFpbmVkKTsKKyAgICAgICAgYXN5bmNTY3JvbGxp
bmdSb2xlcy5hZGQoQXN5bmNTY3JvbGxpbmdSb2xlOjpWaWV3cG9ydENvbnN0cmFpbmVkKTsKIAot
ICAgIGlmICh1c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKGxheWVyKSkKLSAgICAgICAg
Y29vcmRpbmF0aW9uUm9sZXMuYWRkKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7
CisgICAgaWYgKHVzZUFzeW5jU2Nyb2xsaW5nRm9yTGF5ZXIobGF5ZXIpKQorICAgICAgICBhc3lu
Y1Njcm9sbGluZ1JvbGVzLmFkZChBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGluZyk7CiAKICAg
ICBpZiAobGF5ZXIuaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIGxheWVyLmJhY2tpbmcoKS0+c2V0
SXNTY3JvbGxDb29yZGluYXRlZFdpdGhWaWV3cG9ydENvbnN0cmFpbmVkUm9sZShjb29yZGluYXRp
b25Sb2xlcy5jb250YWlucyhTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpWaWV3cG9ydENvbnN0cmFp
bmVkKSk7CisgICAgICAgIGxheWVyLmJhY2tpbmcoKS0+c2V0SXNBc3luY1Njcm9sbGVkV2l0aFZp
ZXdwb3J0Q29uc3RyYWluZWRSb2xlKGFzeW5jU2Nyb2xsaW5nUm9sZXMuY29udGFpbnMoQXN5bmNT
Y3JvbGxpbmdSb2xlOjpWaWV3cG9ydENvbnN0cmFpbmVkKSk7CiAKLSAgICBpZiAoY29vcmRpbmF0
aW9uUm9sZXMgJiYgY2FuQ29vcmRpbmF0ZVNjcm9sbGluZ0ZvckxheWVyKGxheWVyKSkgewotICAg
ICAgICBpZiAobV9zY3JvbGxDb29yZGluYXRlZExheWVycy5hZGQoJmxheWVyKS5pc05ld0VudHJ5
KQorICAgIGlmIChhc3luY1Njcm9sbGluZ1JvbGVzICYmIGNhblVzZUFzeW5jU2Nyb2xsaW5nRm9y
TGF5ZXIobGF5ZXIpKSB7CisgICAgICAgIGlmIChtX2FzeW5jU2Nyb2xsZWRMYXllcnMuYWRkKCZs
YXllcikuaXNOZXdFbnRyeSkKICAgICAgICAgICAgIG1fc3ViZnJhbWVTY3JvbGxMYXllcnNOZWVk
UmVhdHRhY2ggPSB0cnVlOwogCi0gICAgICAgIHVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXIo
bGF5ZXIsIGNvb3JkaW5hdGlvblJvbGVzLCBjaGFuZ2VzKTsKKyAgICAgICAgdXBkYXRlQXN5bmNT
Y3JvbGxlZExheWVyKGxheWVyLCBhc3luY1Njcm9sbGluZ1JvbGVzLCBjaGFuZ2VzKTsKICAgICB9
IGVsc2UKLSAgICAgICAgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKGxheWVyKTsK
KyAgICAgICAgcmVtb3ZlRnJvbUFzeW5jU2Nyb2xsZWRMYXllcnMobGF5ZXIpOwogfQogCi12b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJz
KFJlbmRlckxheWVyJiBsYXllcikKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZW1vdmVG
cm9tQXN5bmNTY3JvbGxlZExheWVycyhSZW5kZXJMYXllciYgbGF5ZXIpCiB7Ci0gICAgaWYgKCFt
X3Njcm9sbENvb3JkaW5hdGVkTGF5ZXJzLmNvbnRhaW5zKCZsYXllcikpCisgICAgaWYgKCFtX2Fz
eW5jU2Nyb2xsZWRMYXllcnMuY29udGFpbnMoJmxheWVyKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9zdWJmcmFtZVNjcm9sbExheWVyc05lZWRSZWF0dGFjaCA9IHRydWU7CiAgICAgCi0gICAg
bV9zY3JvbGxDb29yZGluYXRlZExheWVycy5yZW1vdmUoJmxheWVyKTsKLSAgICBtX3Njcm9sbENv
b3JkaW5hdGVkTGF5ZXJzTmVlZGluZ1VwZGF0ZS5yZW1vdmUoJmxheWVyKTsKKyAgICBtX2FzeW5j
U2Nyb2xsZWRMYXllcnMucmVtb3ZlKCZsYXllcik7CisgICAgbV9hc3luY1Njcm9sbGVkTGF5ZXJz
TmVlZGluZ1VwZGF0ZS5yZW1vdmUoJmxheWVyKTsKIAotICAgIGRldGFjaFNjcm9sbENvb3JkaW5h
dGVkTGF5ZXIobGF5ZXIsIHsgU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nLCBTY3Jv
bGxDb29yZGluYXRpb25Sb2xlOjpWaWV3cG9ydENvbnN0cmFpbmVkIH0pOworICAgIGRldGFjaEFz
eW5jU2Nyb2xsZWRMYXllcihsYXllciwgeyBBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGluZywg
QXN5bmNTY3JvbGxpbmdSb2xlOjpWaWV3cG9ydENvbnN0cmFpbmVkIH0pOwogfQogCiBGaXhlZFBv
c2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVG
aXhlZFZpZXdwb3J0Q29uc3RyYWludHMoUmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdApAQCAtMzc0
OSw3ICszNzQ5LDcgQEAgc3RhdGljIFNjcm9sbGluZ05vZGVJRCBlbmNsb3NpbmdTY3JvbGxpbmdO
b2RlSUQoUmVuZGVyTGF5ZXImIGxheWVyLCBJbmNsdWRlU2VsZk8KICAgICByZXR1cm4gMDsKIH0K
IAotc3RhdGljIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxDb29yZGluYXRlZEFuY2VzdG9ySW5QYXJl
bnRPZkZyYW1lKEZyYW1lJiBmcmFtZSkKK3N0YXRpYyBTY3JvbGxpbmdOb2RlSUQgYXN5bmNTY3Jv
bGxlZEFuY2VzdG9ySW5QYXJlbnRPZkZyYW1lKEZyYW1lJiBmcmFtZSkKIHsKICAgICBpZiAoIWZy
YW1lLmRvY3VtZW50KCkgfHwgIWZyYW1lLnZpZXcoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0z
Nzg2LDcgKzM3ODYsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVhdHRhY2hTdWJm
cmFtZVNjcm9sbExheWVycygpCiAgICAgICAgIGlmICghZnJhbWVTY3JvbGxpbmdOb2RlSUQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTY3JvbGxpbmdOb2RlSUQgcGFyZW50Tm9k
ZUlEID0gc2Nyb2xsQ29vcmRpbmF0ZWRBbmNlc3RvckluUGFyZW50T2ZGcmFtZSgqY2hpbGQpOwor
ICAgICAgICBTY3JvbGxpbmdOb2RlSUQgcGFyZW50Tm9kZUlEID0gYXN5bmNTY3JvbGxlZEFuY2Vz
dG9ySW5QYXJlbnRPZkZyYW1lKCpjaGlsZCk7CiAgICAgICAgIGlmICghcGFyZW50Tm9kZUlEKQog
ICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTM3OTQsMTkgKzM3OTQsMTkgQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnJlYXR0YWNoU3ViZnJhbWVTY3JvbGxMYXllcnMoKQogICAgIH0K
IH0KIAotc3RhdGljIGlubGluZSBTY3JvbGxDb29yZGluYXRpb25Sb2xlIHNjcm9sbENvb3JkaW5h
dGlvblJvbGVGb3JOb2RlVHlwZShTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSkKK3N0YXRpYyBp
bmxpbmUgQXN5bmNTY3JvbGxpbmdSb2xlIGFzeW5jU2Nyb2xsaW5nUm9sZUZvck5vZGVUeXBlKFNj
cm9sbGluZ05vZGVUeXBlIG5vZGVUeXBlKQogewogICAgIHN3aXRjaCAobm9kZVR5cGUpIHsKICAg
ICBjYXNlIFNjcm9sbGluZ05vZGVUeXBlOjpNYWluRnJhbWU6CiAgICAgY2FzZSBTY3JvbGxpbmdO
b2RlVHlwZTo6U3ViZnJhbWU6CiAgICAgY2FzZSBTY3JvbGxpbmdOb2RlVHlwZTo6T3ZlcmZsb3c6
Ci0gICAgICAgIHJldHVybiBTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmc7CisgICAg
ICAgIHJldHVybiBBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGluZzsKICAgICBjYXNlIFNjcm9s
bGluZ05vZGVUeXBlOjpGaXhlZDoKICAgICBjYXNlIFNjcm9sbGluZ05vZGVUeXBlOjpTdGlja3k6
Ci0gICAgICAgIHJldHVybiBTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpWaWV3cG9ydENvbnN0cmFp
bmVkOworICAgICAgICByZXR1cm4gQXN5bmNTY3JvbGxpbmdSb2xlOjpWaWV3cG9ydENvbnN0cmFp
bmVkOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU2Nyb2xs
Q29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nOworICAgIHJldHVybiBBc3luY1Njcm9sbGluZ1Jv
bGU6OlNjcm9sbGluZzsKIH0KIAogU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6YXR0YWNoU2Nyb2xsaW5nTm9kZShSZW5kZXJMYXllciYgbGF5ZXIsIFNjcm9sbGluZ05vZGVU
eXBlIG5vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQgcGFyZW50Tm9kZUlEKQpAQCAtMzgxOCw3ICsz
ODE4LDcgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoU2Ny
b2xsaW5nTm9kZShSZW5kZXJMYXllciYgbGF5ZXIsIFMKICAgICBpZiAoIWJhY2tpbmcpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZSByb2xlID0gc2Nyb2xs
Q29vcmRpbmF0aW9uUm9sZUZvck5vZGVUeXBlKG5vZGVUeXBlKTsKKyAgICBBc3luY1Njcm9sbGlu
Z1JvbGUgcm9sZSA9IGFzeW5jU2Nyb2xsaW5nUm9sZUZvck5vZGVUeXBlKG5vZGVUeXBlKTsKICAg
ICBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEID0gYmFja2luZy0+c2Nyb2xsaW5nTm9kZUlERm9yUm9s
ZShyb2xlKTsKICAgICBpZiAoIW5vZGVJRCkKICAgICAgICAgbm9kZUlEID0gc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPnVuaXF1ZVNjcm9sbGluZ05vZGVJRCgpOwpAQCAtMzgzMywyNiArMzgzMywyNiBA
QCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hTY3JvbGxpbmdO
b2RlKFJlbmRlckxheWVyJiBsYXllciwgUwogICAgIHJldHVybiBub2RlSUQ7CiB9CiAKLXZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hTY3JvbGxDb29yZGluYXRlZExheWVyKFJlbmRl
ckxheWVyJiBsYXllciwgT3B0aW9uU2V0PFNjcm9sbENvb3JkaW5hdGlvblJvbGU+IHJvbGVzKQor
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaEFzeW5jU2Nyb2xsZWRMYXllcihSZW5k
ZXJMYXllciYgbGF5ZXIsIE9wdGlvblNldDxBc3luY1Njcm9sbGluZ1JvbGU+IHJvbGVzKQogewog
ICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgaWYgKCFiYWNraW5nKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocm9sZXMuY29udGFpbnMoU2Nyb2xsQ29vcmRpbmF0
aW9uUm9sZTo6U2Nyb2xsaW5nKSkgewotICAgICAgICBpZiAoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJ
RCA9IGJhY2tpbmctPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9s
ZTo6U2Nyb2xsaW5nKSkKKyAgICBpZiAocm9sZXMuY29udGFpbnMoQXN5bmNTY3JvbGxpbmdSb2xl
OjpTY3JvbGxpbmcpKSB7CisgICAgICAgIGlmIChTY3JvbGxpbmdOb2RlSUQgbm9kZUlEID0gYmFj
a2luZy0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShBc3luY1Njcm9sbGluZ1JvbGU6OlNjcm9sbGlu
ZykpCiAgICAgICAgICAgICBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLnJlbW92ZShub2RlSUQp
OwogICAgIH0KIAotICAgIGlmIChyb2xlcy5jb250YWlucyhTY3JvbGxDb29yZGluYXRpb25Sb2xl
OjpWaWV3cG9ydENvbnN0cmFpbmVkKSkgewotICAgICAgICBpZiAoU2Nyb2xsaW5nTm9kZUlEIG5v
ZGVJRCA9IGJhY2tpbmctPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9u
Um9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpCisgICAgaWYgKHJvbGVzLmNvbnRhaW5zKEFzeW5j
U2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpIHsKKyAgICAgICAgaWYgKFNjcm9s
bGluZ05vZGVJRCBub2RlSUQgPSBiYWNraW5nLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKEFzeW5j
U2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpCiAgICAgICAgICAgICBtX3Njcm9s
bGluZ05vZGVUb0xheWVyTWFwLnJlbW92ZShub2RlSUQpOwogICAgIH0KIAogICAgIGJhY2tpbmct
PmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcihyb2xlcyk7CiB9CiAKLXZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRpb25Gb3JUaGlzRnJhbWUoU2Ny
b2xsaW5nTm9kZUlEIHBhcmVudE5vZGVJRCkKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1
cGRhdGVBc3luY1Njcm9sbGluZ0ZvclRoaXNGcmFtZShTY3JvbGxpbmdOb2RlSUQgcGFyZW50Tm9k
ZUlEKQogewogICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKTsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5m
cmFtZVZpZXcoKTsKQEAgLTM4NzIsMTEgKzM4NzIsMTEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGlvbkZvclRoaXNGcmFtZShTY3JvbGxpbmdOb2Rl
SUQKICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+dXBkYXRlRnJhbWVTY3JvbGxpbmdOb2RlKG5v
ZGVJRCwgbV9zY3JvbGxMYXllci5nZXQoKSwgbV9yb290Q29udGVudExheWVyLmdldCgpLCBmaXhl
ZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xpcExheWVyKCksIHNjcm9sbGluZ0dlb21ldHJ5KTsK
IH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGVk
TGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBPcHRpb25TZXQ8U2Nyb2xsQ29vcmRpbmF0aW9uUm9s
ZT4gcm9sZXMsIE9wdGlvblNldDxTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M+IGNoYW5nZXMpCit2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQXN5bmNTY3JvbGxlZExheWVyKFJlbmRl
ckxheWVyJiBsYXllciwgT3B0aW9uU2V0PEFzeW5jU2Nyb2xsaW5nUm9sZT4gcm9sZXMsIE9wdGlv
blNldDxTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M+IGNoYW5nZXMpCiB7CiAgICAgYm9vbCBpc1Jl
bmRlclZpZXdMYXllciA9IGxheWVyLmlzUmVuZGVyVmlld0xheWVyKCk7CiAKLSAgICBBU1NFUlQo
bV9zY3JvbGxDb29yZGluYXRlZExheWVycy5jb250YWlucygmbGF5ZXIpKTsKKyAgICBBU1NFUlQo
bV9hc3luY1Njcm9sbGVkTGF5ZXJzLmNvbnRhaW5zKCZsYXllcikpOwogICAgIEFTU0VSVChsYXll
ci5pc0NvbXBvc2l0ZWQoKSk7CiAKICAgICBhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRo
aXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CkBAIC0zODg0LDEyICszODg0LDEyIEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyKFJlbmRl
ckxheWVyJiBsYXllciwgT3B0CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9yZW5kZXJW
aWV3LmZyYW1lKCkuaXNNYWluRnJhbWUoKSkgewotICAgICAgICBTY3JvbGxpbmdOb2RlSUQgcGFy
ZW50RG9jdW1lbnRIb3N0aW5nTm9kZUlEID0gc2Nyb2xsQ29vcmRpbmF0ZWRBbmNlc3RvckluUGFy
ZW50T2ZGcmFtZShtX3JlbmRlclZpZXcuZnJhbWUoKSk7CisgICAgICAgIFNjcm9sbGluZ05vZGVJ
RCBwYXJlbnREb2N1bWVudEhvc3RpbmdOb2RlSUQgPSBhc3luY1Njcm9sbGVkQW5jZXN0b3JJblBh
cmVudE9mRnJhbWUobV9yZW5kZXJWaWV3LmZyYW1lKCkpOwogICAgICAgICBpZiAoIXBhcmVudERv
Y3VtZW50SG9zdGluZ05vZGVJRCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB1cGRh
dGVTY3JvbGxDb29yZGluYXRpb25Gb3JUaGlzRnJhbWUocGFyZW50RG9jdW1lbnRIb3N0aW5nTm9k
ZUlEKTsKLSAgICAgICAgaWYgKCEocm9sZXMuY29udGFpbnMoU2Nyb2xsQ29vcmRpbmF0aW9uUm9s
ZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpICYmIGlzUmVuZGVyVmlld0xheWVyKQorICAgICAgICB1
cGRhdGVBc3luY1Njcm9sbGluZ0ZvclRoaXNGcmFtZShwYXJlbnREb2N1bWVudEhvc3RpbmdOb2Rl
SUQpOworICAgICAgICBpZiAoIShyb2xlcy5jb250YWlucyhBc3luY1Njcm9sbGluZ1JvbGU6OlZp
ZXdwb3J0Q29uc3RyYWluZWQpKSAmJiBpc1JlbmRlclZpZXdMYXllcikKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTM5MDEsNyArMzkwMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyKFJlbmRlckxheWVyJiBsYXllciwg
T3B0CiAKICAgICAvLyBBbHdheXMgY2FsbCB0aGlzIGV2ZW4gaWYgdGhlIGJhY2tpbmcgaXMgYWxy
ZWFkeSBhdHRhY2hlZCBiZWNhdXNlIHRoZSBwYXJlbnQgbWF5IGhhdmUgY2hhbmdlZC4KICAgICAv
LyBJZiBhIG5vZGUgcGxheXMgYm90aCByb2xlcywgZml4ZWQvc3RpY2t5IGlzIGFsd2F5cyB0aGUg
YW5jZXN0b3Igbm9kZSBvZiBzY3JvbGxpbmcuCi0gICAgaWYgKHJvbGVzLmNvbnRhaW5zKFNjcm9s
bENvb3JkaW5hdGlvblJvbGU6OlZpZXdwb3J0Q29uc3RyYWluZWQpKSB7CisgICAgaWYgKHJvbGVz
LmNvbnRhaW5zKEFzeW5jU2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCkpIHsKICAg
ICAgICAgU2Nyb2xsaW5nTm9kZVR5cGUgbm9kZVR5cGUgPSBTY3JvbGxpbmdOb2RlVHlwZTo6TWFp
bkZyYW1lOwogICAgICAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25lZCgp
KQogICAgICAgICAgICAgbm9kZVR5cGUgPSBTY3JvbGxpbmdOb2RlVHlwZTo6Rml4ZWQ7CkBAIC0z
OTM2LDExICszOTM2LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3Jv
bGxDb29yZGluYXRlZExheWVyKFJlbmRlckxheWVyJiBsYXllciwgT3B0CiAgICAgICAgIAogICAg
ICAgICBwYXJlbnROb2RlSUQgPSBub2RlSUQ7CiAgICAgfSBlbHNlCi0gICAgICAgIGRldGFjaFNj
cm9sbENvb3JkaW5hdGVkTGF5ZXIobGF5ZXIsIFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlZpZXdw
b3J0Q29uc3RyYWluZWQpOworICAgICAgICBkZXRhY2hBc3luY1Njcm9sbGVkTGF5ZXIobGF5ZXIs
IEFzeW5jU2Nyb2xsaW5nUm9sZTo6Vmlld3BvcnRDb25zdHJhaW5lZCk7CiAgICAgICAgIAotICAg
IGlmIChyb2xlcy5jb250YWlucyhTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpKSB7
CisgICAgaWYgKHJvbGVzLmNvbnRhaW5zKEFzeW5jU2Nyb2xsaW5nUm9sZTo6U2Nyb2xsaW5nKSkg
ewogICAgICAgICBpZiAoaXNSZW5kZXJWaWV3TGF5ZXIpCi0gICAgICAgICAgICB1cGRhdGVTY3Jv
bGxDb29yZGluYXRpb25Gb3JUaGlzRnJhbWUocGFyZW50Tm9kZUlEKTsKKyAgICAgICAgICAgIHVw
ZGF0ZUFzeW5jU2Nyb2xsaW5nRm9yVGhpc0ZyYW1lKHBhcmVudE5vZGVJRCk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgU2Nyb2xsaW5nTm9kZVR5cGUgbm9kZVR5cGUgPSBTY3JvbGxpbmdO
b2RlVHlwZTo6T3ZlcmZsb3c7CiAgICAgICAgICAgICBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEID0g
YXR0YWNoU2Nyb2xsaW5nTm9kZShsYXllciwgbm9kZVR5cGUsIHBhcmVudE5vZGVJRCk7CkBAIC0z
OTcyLDcgKzM5NzIsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xs
Q29vcmRpbmF0ZWRMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIE9wdAogICAgICAgICAgICAgc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZShub2RlSUQsIGJh
Y2tpbmctPnNjcm9sbGluZ0xheWVyKCksIGJhY2tpbmctPnNjcm9sbGluZ0NvbnRlbnRzTGF5ZXIo
KSwgc2Nyb2xsaW5nR2VvbWV0cnkpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIGRl
dGFjaFNjcm9sbENvb3JkaW5hdGVkTGF5ZXIobGF5ZXIsIFNjcm9sbENvb3JkaW5hdGlvblJvbGU6
OlNjcm9sbGluZyk7CisgICAgICAgIGRldGFjaEFzeW5jU2Nyb2xsZWRMYXllcihsYXllciwgQXN5
bmNTY3JvbGxpbmdSb2xlOjpTY3JvbGxpbmcpOwogfQogCiBTY3JvbGxhYmxlQXJlYSogUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNjcm9sbExheWVySUQoU2Nyb2xsaW5n
Tm9kZUlEIG5vZGVJRCkgY29uc3QKQEAgLTM5ODYsNyArMzk4Niw3IEBAIFNjcm9sbGFibGVBcmVh
KiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsTGF5ZXJJRChT
Y3JvbGxpbmdOCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6d2lsbFJlbW92ZVNjcm9sbGlu
Z0xheWVyV2l0aEJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBSZW5kZXJMYXllckJhY2tpbmcm
IGJhY2tpbmcpCiB7CiAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBiYWNraW5nLmRldGFjaEZyb21TY3Jv
bGxpbmdDb29yZGluYXRvcihTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOworICAg
ICAgICBiYWNraW5nLmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcihBc3luY1Njcm9sbGlu
Z1JvbGU6OlNjcm9sbGluZyk7CiAKICAgICAgICAgLy8gRm9yIENvb3JkaW5hdGVkIEdyYXBoaWNz
LgogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXll
ckRpZENoYW5nZShsYXllcik7CkBAIC00MDAyLDcgKzQwMDIsNyBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6d2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoUmVuZGVyTGF5
ZXImIGxheQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5
ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQogewotICAgIHVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkU3Rh
dHVzKGxheWVyLCB7IFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIsIFNjcm9sbGluZ05v
ZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSB9KTsKKyAgICB1cGRhdGVBc3luY1Njcm9sbGlu
Z1N0YXR1cyhsYXllciwgeyBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyLCBTY3JvbGxp
bmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgfSk7CiAKICAgICBpZiAoYXV0byogc2Ny
b2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CiAgICAg
ICAgIC8vIEZvciBDb29yZGluYXRlZCBHcmFwaGljcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCAwZjdhMDg3ODg0My4uNDQwMmFk
OWMwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmgKQEAgLTgzLDcgKzgzLDcgQEAgZW51bSBjbGFzcyBDb21wb3NpdGluZ1JlYXNvbiB7
CiAgICAgRW1iZWRkZWRWaWV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDI2LAog
fTsKIAotZW51bSBjbGFzcyBTY3JvbGxDb29yZGluYXRpb25Sb2xlIHsKK2VudW0gY2xhc3MgQXN5
bmNTY3JvbGxpbmdSb2xlIHsKICAgICBWaWV3cG9ydENvbnN0cmFpbmVkID0gMSA8PCAwLAogICAg
IFNjcm9sbGluZyAgICAgICAgICAgPSAxIDw8IDEKIH07CkBAIC0zMjIsOCArMzIyLDggQEAgcHVi
bGljOgogICAgICAgICBMYXllckdlb21ldHJ5ICAgPSAxIDw8IDEsCiAgICAgfTsKIAotICAgIHZv
aWQgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRTdGF0dXMoUmVuZGVyTGF5ZXImLCBPcHRpb25TZXQ8
U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzPik7Ci0gICAgdm9pZCByZW1vdmVGcm9tU2Nyb2xsQ29v
cmRpbmF0ZWRMYXllcnMoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHVwZGF0ZUFzeW5jU2Nyb2xs
aW5nU3RhdHVzKFJlbmRlckxheWVyJiwgT3B0aW9uU2V0PFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFn
cz4pOworICAgIHZvaWQgcmVtb3ZlRnJvbUFzeW5jU2Nyb2xsZWRMYXllcnMoUmVuZGVyTGF5ZXIm
KTsKIAogICAgIHZvaWQgd2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoUmVuZGVy
TGF5ZXImLCBSZW5kZXJMYXllckJhY2tpbmcmKTsKICAgICB2b2lkIGRpZEFkZFNjcm9sbGluZ0xh
eWVyKFJlbmRlckxheWVyJik7CkBAIC00MzcsOCArNDM3LDggQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgbm90aWZ5SUZyYW1lc09mQ29tcG9zaXRpbmdDaGFuZ2UoKTsKIAotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoSW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0g
ICAgdm9pZCB1cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyc0FmdGVyRmx1c2goKTsKKyAgICB2
b2lkIHVwZGF0ZUFzeW5jU2Nyb2xsZWRMYXllcnNBZnRlckZsdXNoSW5jbHVkaW5nU3ViZnJhbWVz
KCk7CisgICAgdm9pZCB1cGRhdGVBc3luY1Njcm9sbGVkTGF5ZXJzQWZ0ZXJGbHVzaCgpOwogCiAg
ICAgRmxvYXRSZWN0IHZpc2libGVSZWN0Rm9yTGF5ZXJGbHVzaGluZygpIGNvbnN0OwogICAgIApA
QCAtNDczLDEwICs0NzMsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlQ3VzdG9tTGF5
ZXJzQWZ0ZXJGbHVzaCgpOwogCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxDb29yZGluYXRpb25Gb3JU
aGlzRnJhbWUoU2Nyb2xsaW5nTm9kZUlEKTsKKyAgICB2b2lkIHVwZGF0ZUFzeW5jU2Nyb2xsaW5n
Rm9yVGhpc0ZyYW1lKFNjcm9sbGluZ05vZGVJRCk7CiAgICAgU2Nyb2xsaW5nTm9kZUlEIGF0dGFj
aFNjcm9sbGluZ05vZGUoUmVuZGVyTGF5ZXImLCBTY3JvbGxpbmdOb2RlVHlwZSwgU2Nyb2xsaW5n
Tm9kZUlEIHBhcmVudE5vZGVJRCk7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxDb29yZGluYXRlZExh
eWVyKFJlbmRlckxheWVyJiwgT3B0aW9uU2V0PFNjcm9sbENvb3JkaW5hdGlvblJvbGU+LCBPcHRp
b25TZXQ8U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzPik7Ci0gICAgdm9pZCBkZXRhY2hTY3JvbGxD
b29yZGluYXRlZExheWVyKFJlbmRlckxheWVyJiwgT3B0aW9uU2V0PFNjcm9sbENvb3JkaW5hdGlv
blJvbGU+KTsKKyAgICB2b2lkIHVwZGF0ZUFzeW5jU2Nyb2xsZWRMYXllcihSZW5kZXJMYXllciYs
IE9wdGlvblNldDxBc3luY1Njcm9sbGluZ1JvbGU+LCBPcHRpb25TZXQ8U2Nyb2xsaW5nTm9kZUNo
YW5nZUZsYWdzPik7CisgICAgdm9pZCBkZXRhY2hBc3luY1Njcm9sbGVkTGF5ZXIoUmVuZGVyTGF5
ZXImLCBPcHRpb25TZXQ8QXN5bmNTY3JvbGxpbmdSb2xlPik7CiAgICAgdm9pZCByZWF0dGFjaFN1
YmZyYW1lU2Nyb2xsTGF5ZXJzKCk7CiAgICAgCiAgICAgRml4ZWRQb3NpdGlvblZpZXdwb3J0Q29u
c3RyYWludHMgY29tcHV0ZUZpeGVkVmlld3BvcnRDb25zdHJhaW50cyhSZW5kZXJMYXllciYpIGNv
bnN0OwpAQCAtNDkxLDExICs0OTEsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzQ29u
dGVudFNoYWRvd0xheWVyKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIC8vIFRydWUgaWYgdGhlIEZy
YW1lVmlldyB1c2VzIGEgU2Nyb2xsaW5nQ29vcmRpbmF0b3IuCi0gICAgYm9vbCBoYXNDb29yZGlu
YXRlZFNjcm9sbGluZygpIGNvbnN0OwotICAgIGJvb2wgdXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdG
b3JMYXllcihjb25zdCBSZW5kZXJMYXllciYpIGNvbnN0OworICAgIC8vIFRydWUgaWYgdGhlIEZy
YW1lVmlldyB1c2VzIGFzeW5jIHNjcm9sbGluZy4KKyAgICBib29sIGhhc0FzeW5jU2Nyb2xsaW5n
KCkgY29uc3Q7CisgICAgYm9vbCB1c2VBc3luY1Njcm9sbGluZ0ZvckxheWVyKGNvbnN0IFJlbmRl
ckxheWVyJikgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogbWFrZSB0aGUgY29vcmRpbmF0ZWQvYXN5
bmMgdGVybWlub2xvZ3kgY29uc2lzdGVudC4KICAgICBib29sIGlzQXN5bmNTY3JvbGxhYmxlU3Rp
Y2t5TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImLCBjb25zdCBSZW5kZXJMYXllcioqIGVuY2xvc2lu
Z0FjY2VsZXJhdGVkT3ZlcmZsb3dMYXllciA9IG51bGxwdHIpIGNvbnN0OwogICAgIGJvb2wgaXNW
aWV3cG9ydENvbnN0cmFpbmVkRml4ZWRPclN0aWNreUxheWVyKGNvbnN0IFJlbmRlckxheWVyJikg
Y29uc3Q7CiAgICAgCkBAIC01NTAsOCArNTQ5LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8R3Jh
cGhpY3NMYXllcj4gbV9jbGlwTGF5ZXI7CiAgICAgUmVmUHRyPEdyYXBoaWNzTGF5ZXI+IG1fc2Ny
b2xsTGF5ZXI7CiAKLSAgICBIYXNoU2V0PFJlbmRlckxheWVyKj4gbV9zY3JvbGxDb29yZGluYXRl
ZExheWVyczsKLSAgICBIYXNoU2V0PFJlbmRlckxheWVyKj4gbV9zY3JvbGxDb29yZGluYXRlZExh
eWVyc05lZWRpbmdVcGRhdGU7CisgICAgSGFzaFNldDxSZW5kZXJMYXllcio+IG1fYXN5bmNTY3Jv
bGxlZExheWVyczsKKyAgICBIYXNoU2V0PFJlbmRlckxheWVyKj4gbV9hc3luY1Njcm9sbGVkTGF5
ZXJzTmVlZGluZ1VwZGF0ZTsKIAogICAgIC8vIEVuY2xvc2luZyBsYXllciBmb3Igb3ZlcmZsb3cg
Y29udHJvbHMgYW5kIHRoZSBjbGlwcGluZyBsYXllcgogICAgIFJlZlB0cjxHcmFwaGljc0xheWVy
PiBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXI7Ci0tIAoyLjIwLjEKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>