<?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>194289</bug_id>
          
          <creation_ts>2019-02-05 08:52:46 -0800</creation_ts>
          <short_desc>Glitch-free async scrolling</short_desc>
          <delta_ts>2024-03-19 08:35:18 -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>Scrolling</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>194433</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fred.wang</cc>
    
    <cc>nekohayo</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>the.bull</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1502375</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-02-05 08:52:46 -0800</bug_when>
    <thetext>Glitch free fixed positioning in iframes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502376</commentid>
    <comment_count>1</comment_count>
      <attachid>361194</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-02-05 08:55:47 -0800</bug_when>
    <thetext>Created attachment 361194
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502378</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-02-05 09:01:13 -0800</bug_when>
    <thetext>The existing code computes fixed position rect based on the last layout scroll position in web process and then tries to make it match the actual layer position by applying offsets in the UI process.

This patch gets rid of all that and simply computes the correct fixed position rect entirely in the UI (scrolling tree) side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502390</commentid>
    <comment_count>3</comment_count>
      <attachid>361197</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-02-05 09:24:56 -0800</bug_when>
    <thetext>Created attachment 361197
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502461</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-02-05 12:26:28 -0800</bug_when>
    <thetext>Design statement: all data which is input to the scrolling tree should be computed independent from any scroll positions or viewport rects which the scrolling tree itself manipulates.

That implies that the scrolling tree should compute layer positions simply using the data in the scrolling tree + the current state of scrolling-tree-owned scroll positions (for the root, frames and overflow) and viewport rects.

We&apos;ll need to be careful that the &quot;viewport constraints&quot; used for fixed and sticky are &quot;pure&quot; in the sense the they don&apos;t encode the current layout and viewport rects. I&apos;m not sure what should happen when a programmatic scroll (when zoomed) affects visual and viewport rects; they need to be update synchronously in the web process for various APIs to work correctly, then I guess the &quot;requested scroll position&quot; is sent to the scrolling tree, and the scrolling thread/UI process basically replicate the same logic and hopefully end up with the same rects?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502509</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-02-05 14:21:34 -0800</bug_when>
    <thetext>Things to test while you&apos;re working on this (all should test with busy content that is triggering layouts):

* fixed in the main frame
* fixed in subframes
* fixed in overflow scroll (can test the shipping code path with -webkit-overflow-scrolling: touch)
* sticky relative to the main frame
* sticky relative to overflow scroll (-webkit-overflow-scrolling: touch)
* behavior of fixed when zoomed on iOS (layout vs. visual viewports)
* behavior of fixed while zooming on iOS (layout/visual viewports)

Test everything on macOS too, including with zooming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502588</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-05 16:33:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/47836678&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503764</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-02-07 09:49:26 -0800</bug_when>
    <thetext>Pulling scroll positions out of layer geometry seems do-able, with a bit of refactoring of RenderLayer::updateLayerPosition(). We&apos;d also need to have RenderLayer::offsetFromAncestor() be able to ignore scroll positions, and plumb some state through all the callers (e.g. clip rect computation) that need scroll-position-independent values, avoiding clip rect caching at the same time.

Scroll position also proposes through layout (see offsetFromContainer()), and it seems harder to extract that. It&apos;s also very unclear where that feeds into data that can affect compositing and scrolling tree state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504100</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-02-07 20:44:52 -0800</bug_when>
    <thetext>&gt; Scroll position also proposes through layout (see offsetFromContainer()),
^propagates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504155</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-02-08 05:21:34 -0800</bug_when>
    <thetext>Moved the patch to https://bugs.webkit.org/show_bug.cgi?id=194433 since this has turned into architecture master bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506061</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-02-13 22:27:41 -0800</bug_when>
    <thetext>There&apos;s another tricky piece to having the scrolling tree inputs be scroll position-independent for layers inside overflow scroll: for a positioned layer whose position is affected by overflow scrolling, that position is a factor of both container scroll position and other CSS positioning. If we were to do as this bug proposes, updating geometry on such layers in a normal compositing update would have to be followed by running the scrolling tree layer positioning logic. So every compositing update would have to be followed by a scrolling tree pass. Maybe not terrible, but some additional complexity.

Right now, avoiding jank on such layers is done via the ScrollingLayerPositionAction::Sync stuff, which is also error-prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506062</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-02-13 22:29:57 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #10)

&gt; were to do as this bug proposes, updating geometry on such layers in a
&gt; normal compositing update would have to be followed by running the scrolling
&gt; tree layer positioning logic. So every compositing update would have to be
&gt; followed by a scrolling tree pass.

Actually you only need to do the scrolling tree pass on each compositing flush (and you have to do that before computing tiling areas which rely on these positions).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506063</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-02-13 22:32:37 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #11)

&gt; Actually you only need to do the scrolling tree pass on each compositing
&gt; flush (and you have to do that before computing tiling areas which rely on
&gt; these positions).

And with UI-side compositing we effectively do this already in RemoteLayerTreeDrawingAreaProxy::commitLayerTree(), by calling m_webPageProxy.scrollingCoordinatorProxy()-&gt;viewportChangedViaDelegatedScrolling().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506070</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-02-13 23:02:43 -0800</bug_when>
    <thetext>Right. This is more like a recognition (and sharpening) of how things already work rather than a new architectural concept.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513512</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-07 08:45:59 -0800</bug_when>
    <thetext>Some more detail:

The geometry of fixed layers is based on the geometry of layers in the z-order ancestor chain (because the layer tree is unavoidably in z-order, because that&apos;s the only way to have CA do the right back-to-front ordering. That means that a fixed layer can be deeply nested in the z-order tree; even though its containing block is trivially the RenderView, we must compute the position for that fixed layer relative to its parent in z-order, which can be some arbitrary layer, even inside of overflow:scroll.

That, in turn, means that layout information is baked into FixedPositionViewportConstraints::m_layerPositionAtLastLayout, and we need pass m_viewportRectAtLastLayout in order to compute deltas in the scrolling tree.

This means that it&apos;s impossible to unbake scroll positions out of inputs to the scrolling tree in anything other than the most trivial cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513547</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-07 09:34:24 -0800</bug_when>
    <thetext>With fixed, there&apos;s one thing you could do: tell the scrolling tree the viewport-relative offsets, then, on the scrolling thread/UI process side, do two -[layer convertPoint:toLayer:] to the root, and to the parent layer, and then set the fixed layer positions as the difference. However, that means you&apos;re using the CALayer tree as a source of data, so you risk racing with layer flushing (on macOS).

Also, that wouldn&apos;t work for sticky, where part of the constraints are containing block bounds, which aren&apos;t represented in the layer or scrolling trees at present. It would also not work for my up-coming positioned layers, whose containing blocks aren&apos;t represented in either tree either.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361194</attachid>
            <date>2019-02-05 08:55:47 -0800</date>
            <delta_ts>2019-02-08 05:22:07 -0800</delta_ts>
            <desc>wip</desc>
            <filename>frame-fixed-position-ios.patch</filename>
            <type>text/plain</type>
            <size>35744</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0Fz
eW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAyNDA5NzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjM2LDcgKzYzNiw2IEBAIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0U2Nyb2wKIAogICAgIHNjcm9sbGluZ05vZGUuc2V0UGFyZW50UmVsYXRpdmVTY3Jv
bGxhYmxlUmVjdChzY3JvbGxpbmdHZW9tZXRyeS5wYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0
KTsKICAgICBzY3JvbGxpbmdOb2RlLnNldFNjcm9sbE9yaWdpbihzY3JvbGxpbmdHZW9tZXRyeS5z
Y3JvbGxPcmlnaW4pOwotICAgIHNjcm9sbGluZ05vZGUuc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xs
aW5nR2VvbWV0cnkuc2Nyb2xsUG9zaXRpb24pOwogICAgIHNjcm9sbGluZ05vZGUuc2V0VG90YWxD
b250ZW50c1NpemUoc2Nyb2xsaW5nR2VvbWV0cnkuY29udGVudFNpemUpOwogICAgIHNjcm9sbGlu
Z05vZGUuc2V0UmVhY2hhYmxlQ29udGVudHNTaXplKHNjcm9sbGluZ0dlb21ldHJ5LnJlYWNoYWJs
ZUNvbnRlbnRTaXplKTsKICAgICBzY3JvbGxpbmdOb2RlLnNldFNjcm9sbGFibGVBcmVhU2l6ZShz
Y3JvbGxpbmdHZW9tZXRyeS5zY3JvbGxhYmxlQXJlYVNpemUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUuY3BwCShyZXZpc2lvbiAyNDA5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw3ICs0NCw2IEBAIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsaW5nU3QK
ICAgICAsIG1fdG90YWxDb250ZW50c1NpemUoc3RhdGVOb2RlLnRvdGFsQ29udGVudHNTaXplKCkp
CiAgICAgLCBtX3JlYWNoYWJsZUNvbnRlbnRzU2l6ZShzdGF0ZU5vZGUucmVhY2hhYmxlQ29udGVu
dHNTaXplKCkpCiAgICAgLCBtX3BhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3Qoc3RhdGVOb2Rl
LnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QoKSkKLSAgICAsIG1fc2Nyb2xsUG9zaXRpb24o
c3RhdGVOb2RlLnNjcm9sbFBvc2l0aW9uKCkpCiAgICAgLCBtX3JlcXVlc3RlZFNjcm9sbFBvc2l0
aW9uKHN0YXRlTm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigpKQogICAgICwgbV9zY3JvbGxP
cmlnaW4oc3RhdGVOb2RlLnNjcm9sbE9yaWdpbigpKQogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCkBAIC02OCw3ICs2Nyw2IEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpz
ZXRBbGwKICAgICBzZXRQcm9wZXJ0eUNoYW5nZWRCaXQoVG90YWxDb250ZW50c1NpemUpOwogICAg
IHNldFByb3BlcnR5Q2hhbmdlZEJpdChSZWFjaGFibGVDb250ZW50c1NpemUpOwogICAgIHNldFBy
b3BlcnR5Q2hhbmdlZEJpdChQYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KTsKLSAgICBzZXRQ
cm9wZXJ0eUNoYW5nZWRCaXQoU2Nyb2xsUG9zaXRpb24pOwogICAgIHNldFByb3BlcnR5Q2hhbmdl
ZEJpdChTY3JvbGxPcmlnaW4pOwogICAgIHNldFByb3BlcnR5Q2hhbmdlZEJpdChTY3JvbGxhYmxl
QXJlYVBhcmFtcyk7CiAgICAgc2V0UHJvcGVydHlDaGFuZ2VkQml0KFJlcXVlc3RlZFNjcm9sbFBv
c2l0aW9uKTsKQEAgLTEyMywxNSArMTIxLDYgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OnNldFBhcgogICAgIHNldFByb3BlcnR5Q2hhbmdlZChQYXJlbnRSZWxhdGl2ZVNjcm9s
bGFibGVSZWN0KTsKIH0KIAotdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OnNldFNj
cm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQotewotICAgIGlm
IChtX3Njcm9sbFBvc2l0aW9uID09IHNjcm9sbFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247Ci0gICAgc2V0UHJvcGVydHlD
aGFuZ2VkKFNjcm9sbFBvc2l0aW9uKTsKLX0KLQogdm9pZCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OnNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQogewog
ICAgIGlmIChtX3Njcm9sbE9yaWdpbiA9PSBzY3JvbGxPcmlnaW4pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUuaAkocmV2aXNpb24gMjQwOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDcgKzQzLDYgQEAgcHVibGljOgogICAgICAgICBUb3RhbENvbnRlbnRzU2l6ZSwKICAgICAgICAg
UmVhY2hhYmxlQ29udGVudHNTaXplLAogICAgICAgICBQYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVS
ZWN0LAotICAgICAgICBTY3JvbGxQb3NpdGlvbiwKICAgICAgICAgU2Nyb2xsT3JpZ2luLAogICAg
ICAgICBTY3JvbGxhYmxlQXJlYVBhcmFtcywKICAgICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9zaXRp
b24sCkBAIC03Myw5ICs3Miw2IEBAIHB1YmxpYzoKICAgICBjb25zdCBMYXlvdXRSZWN0JiBwYXJl
bnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRSZWxhdGl2
ZVNjcm9sbGFibGVSZWN0OyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQYXJlbnRSZWxh
dGl2ZVNjcm9sbGFibGVSZWN0KGNvbnN0IExheW91dFJlY3QmKTsKIAotICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsg
fQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQ
b2ludCYpOwotCiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbE9yaWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsT3JpZ2luOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTY3JvbGxP
cmlnaW4oY29uc3QgSW50UG9pbnQmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lSG9zdGluZ05vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVGcmFtZUhvc3RpbmdOb2Rl
LmNwcAkocmV2aXNpb24gMjQwOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nVHJlZUZyYW1lSG9zdGluZ05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nywx
MyArNTcsMTMgQEAgdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVIb3N0aW5nTm9kZTo6Y29tbQogICAg
ICAgICBtX3BhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QgPSBmcmFtZUhvc3RpbmdTdGF0ZU5v
ZGUucGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCgpOwogfQogCi12b2lkIFNjcm9sbGluZ1Ry
ZWVGcmFtZUhvc3RpbmdOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0
IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBv
c2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCit2b2lkIFNjcm9s
bGluZ1RyZWVGcmFtZUhvc3RpbmdOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdl
KGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBm
aXhlZFBvc2l0aW9uUmVjdCkKIHsKICAgICBpZiAoIW1fY2hpbGRyZW4pCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQt
PnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRp
b25SZWN0LCBjdW11bGF0aXZlRGVsdGEpOworICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0
ZXJBbmNlc3RvckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3QpOwogfQogCiBM
YXlvdXRQb2ludCBTY3JvbGxpbmdUcmVlRnJhbWVIb3N0aW5nTm9kZTo6cGFyZW50VG9Mb2NhbFBv
aW50KExheW91dFBvaW50IHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lSG9zdGluZ05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVIb3N0aW5nTm9k
ZS5oCShyZXZpc2lvbiAyNDA5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlRnJhbWVIb3N0aW5nTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIHByaXZhdGU6CiAgICAgU2Nyb2xsaW5nVHJlZUZyYW1lSG9zdGluZ05vZGUoU2Nyb2xs
aW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CiAKICAgICB2b2lkIGNvbW1pdFN0YXRlQmVmb3Jl
Q2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikgZmluYWw7Ci0gICAgdm9pZCB1cGRh
dGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFu
Z2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxvYXRT
aXplJiBjdW11bGF0aXZlRGVsdGEpIGZpbmFsOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJB
bmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0
IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QpIGZpbmFsOwogCiAgICAgY29uc3QgTGF5b3V0
UmVjdCYgcGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
ZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZS5oCShyZXZpc2lvbiAyNDA5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tbWl0U3RhdGVCZWZvcmVDaGlsZHJl
bihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmKSBvdmVycmlkZTsKICAgICAKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGltcGxlbWVudCB0aGlzIHdoZW4gd2Ugc3VwcG9ydCBTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZXMgYXMgY2hpbGRyZW4uCi0gICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlckFu
Y2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiAvKmNoYW5nZWROb2RlKi8sIGNv
bnN0IEZsb2F0UmVjdCYgLypmaXhlZFBvc2l0aW9uUmVjdCovLCBjb25zdCBGbG9hdFNpemUmIC8q
Y3VtdWxhdGl2ZURlbHRhKi8pIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0
ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYgLypjaGFuZ2VkTm9kZSov
LCBjb25zdCBGbG9hdFJlY3QmIC8qZml4ZWRQb3NpdGlvblJlY3QqLykgb3ZlcnJpZGUgeyB9CiAK
ICAgICBTY3JvbGxpbmdFdmVudFJlc3VsdCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYpIG92ZXJyaWRlID0gMDsKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAg
IEZsb2F0U2l6ZSB2aWV3VG9Db250ZW50c09mZnNldChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQ
b3NpdGlvbikgY29uc3Q7CiAgICAgRmxvYXRSZWN0IGxheW91dFZpZXdwb3J0Rm9yU2Nyb2xsUG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmlzaWJsZUNvbnRlbnRPcmlnaW4sIGZsb2F0IHNjYWxl
KSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBmaXhlZFBvc2l0aW9uUmVjdCgpIHsgcmV0dXJuIEZs
b2F0UmVjdChsYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb24oKSwgc2Nyb2xsYWJsZUFyZWFTaXpl
KCkpOyB9OworICAgIEZsb2F0UmVjdCBmaXhlZFBvc2l0aW9uUmVjdCgpIHsgcmV0dXJuIEZsb2F0
UmVjdChzY3JvbGxQb3NpdGlvbigpLCBzY3JvbGxhYmxlQXJlYVNpemUoKSk7IH07CiAKICAgICBm
bG9hdCBmcmFtZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVNjYWxlRmFjdG9y
OyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZU5vZGUuaAkocmV2aXNpb24gMjQwOTcwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4o
Y29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXRT
dGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikgeyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxp
bmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJl
Y3QsIGNvbnN0IEZsb2F0U2l6ZSYgY3VtdWxhdGl2ZURlbHRhKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5v
ZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0KSA9IDA7
CiAKICAgICBTY3JvbGxpbmdUcmVlTm9kZSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJl
bnQ7IH0KICAgICB2b2lkIHNldFBhcmVudChTY3JvbGxpbmdUcmVlTm9kZSogcGFyZW50KSB7IG1f
cGFyZW50ID0gcGFyZW50OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCShyZXZpc2lv
biAyNDA5NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDYgQEAgdm9pZCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6Y29tbWl0UwogICAgIGlmIChzdGF0ZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50
c1NpemUpKQogICAgICAgICBtX3JlYWNoYWJsZUNvbnRlbnRzU2l6ZSA9IHN0YXRlLnJlYWNoYWJs
ZUNvbnRlbnRzU2l6ZSgpOwogCi0gICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0aW9uKSkKLSAgICAgICAgbV9sYXN0
Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb24gPSBzdGF0ZS5zY3JvbGxQb3NpdGlvbigpOwotCiAgICAg
aWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QpKQogICAgICAgICBtX3BhcmVudFJlbGF0aXZl
U2Nyb2xsYWJsZVJlY3QgPSBzdGF0ZS5wYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KCk7CiAK
QEAgLTExMywxMyArMTEwLDEzIEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNv
bW1pdFMKICAgICAgICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlUmVxdWVzdHNT
Y3JvbGwoc2Nyb2xsaW5nTm9kZUlEKCksIHNjcm9sbGluZ1N0YXRlTm9kZS5yZXF1ZXN0ZWRTY3Jv
bGxQb3NpdGlvbigpLCBzY3JvbGxpbmdTdGF0ZU5vZGUucmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25S
ZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9s
bGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9u
UmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCit2b2lkIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNj
cm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0
aW9uUmVjdCkKIHsKICAgICBpZiAoIW1fY2hpbGRyZW4pCiAgICAgICAgIHJldHVybjsKIAogICAg
IGZvciAoYXV0byYgY2hpbGQgOiAqbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQtPnVwZGF0ZUxh
eWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBj
dW11bGF0aXZlRGVsdGEpOworICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3Rv
ckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3QpOwogfQogCiB2b2lkIFNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50
JiBzY3JvbGxQb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAkocmV2aXNpb24gMjQw
OTcwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9s
bGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29tbWl0
U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdl
KGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBm
aXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpIG92ZXJy
aWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNo
YW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IEZsb2F0UmVj
dCYgZml4ZWRQb3NpdGlvblJlY3QpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBTY3JvbGxpbmdF
dmVudFJlc3VsdCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpID0g
MDsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYpOwpAQCAtOTAsNyArOTAsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRSZWN0JiBsYXlvdXRWaWV3cG9ydCkgPSAwOwogCi0gICAgRmxvYXRQb2ludCBsYXN0Q29t
bWl0dGVkU2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xhc3RDb21taXR0ZWRTY3Jv
bGxQb3NpdGlvbjsgfQogICAgIGNvbnN0IEZsb2F0U2l6ZSYgcmVhY2hhYmxlQ29udGVudHNTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9yZWFjaGFibGVDb250ZW50c1NpemU7IH0KICAgICBjb25zdCBM
YXlvdXRSZWN0JiBwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9wYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0OyB9CiAgICAgY29uc3QgSW50UG9pbnQmIHNj
cm9sbE9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT3JpZ2luOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmNwcAkocmV2aXNpb24gMjQwOTcwKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDExICs0NCw2IEBAIFNjcm9sbGluZ1Ry
ZWUmIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2QKICAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2Rl
LnNjcm9sbGluZ1RyZWUoKTsKIH0KIAotRmxvYXRQb2ludCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlOjpsYXN0Q29tbWl0dGVkU2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtX3Njcm9sbGluZ05vZGUubGFzdENvbW1pdHRlZFNjcm9sbFBvc2l0aW9uKCk7Ci19
Ci0KIGNvbnN0IEZsb2F0U2l6ZSYgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZTo6
dG90YWxDb250ZW50c1NpemUoKQogewogICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGUudG90YWxD
b250ZW50c1NpemUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29h
L1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgJKHJldmlzaW9uIDI0
MDk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgog
ICAgIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJ
RCk7CiAKICAgICB2b2lkIGNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5n
U3RhdGVOb2RlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9y
Q2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRS
ZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEp
IG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25z
dCBTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQ
b3NpdGlvblJlY3QpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkdW1wUHJvcGVydGllcyhXVEY6OlRl
eHRTdHJlYW0mLCBTY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHRCZWhhdmlvcikgY29uc3Qgb3ZlcnJp
ZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGlu
Z1RyZWVGaXhlZE5vZGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5tbQkocmV2aXNpb24gMjQwOTcwKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZUZpeGVk
Tm9kZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNzAsMTUgKzcwLDEzIEBAIHN0YXRpYyBpbmxpbmUg
Q0dQb2ludCBvcGVyYXRvciooQ0dQb2ludCYKIH0KIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlRml4
ZWROb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1Ry
ZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwg
Y29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCit2b2lkIFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJl
ZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0KQog
ewogICAgIHVzaW5nIG5hbWVzcGFjZSBTY3JvbGxpbmdUcmVlRml4ZWROb2RlSW50ZXJuYWw7CiAg
ICAgRmxvYXRQb2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9u
Rm9yVmlld3BvcnRSZWN0KGZpeGVkUG9zaXRpb25SZWN0KTsKIAogICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZSAiIDw8IHNjcm9s
bGluZ05vZGVJRCgpIDw8ICIgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZTogbmV3IHZp
ZXdwb3J0ICIgPDwgZml4ZWRQb3NpdGlvblJlY3QgPDwgIiB2aWV3cG9ydFJlY3RBdExhc3RMYXlv
dXQgIiA8PCBtX2NvbnN0cmFpbnRzLnZpZXdwb3J0UmVjdEF0TGFzdExheW91dCgpIDw8ICIgbGFz
dCBsYXllciBwb3MgIiA8PCBtX2NvbnN0cmFpbnRzLmxheWVyUG9zaXRpb25BdExhc3RMYXlvdXQo
KSA8PCAiIG5ldyBvZmZzZXQgZnJvbSB0b3AgIiA8PCAoZml4ZWRQb3NpdGlvblJlY3QueSgpIC0g
bGF5ZXJQb3NpdGlvbi55KCkpKTsKIAotICAgIGxheWVyUG9zaXRpb24gLT0gY3VtdWxhdGl2ZURl
bHRhOwotCiAgICAgQ0dSZWN0IGxheWVyQm91bmRzID0gW21fbGF5ZXIgYm91bmRzXTsKICAgICBD
R1BvaW50IGFuY2hvclBvaW50ID0gW21fbGF5ZXIgYW5jaG9yUG9pbnRdOwogICAgIENHUG9pbnQg
bmV3UG9zaXRpb24gPSBsYXllclBvc2l0aW9uIC0gbV9jb25zdHJhaW50cy5hbGlnbm1lbnRPZmZz
ZXQoKSArIGFuY2hvclBvaW50ICogbGF5ZXJCb3VuZHMuc2l6ZTsKQEAgLTk2LDEwICs5NCw4IEBA
IHZvaWQgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6dXBkYXRlTGF5ZXIKICAgICBpZiAoIW1fY2hp
bGRyZW4pCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0U2l6ZSBuZXdEZWx0YSA9IGxheWVy
UG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmxheWVyUG9zaXRpb25BdExhc3RMYXlvdXQoKSArIGN1
bXVsYXRpdmVEZWx0YTsKLQogICAgIGZvciAoYXV0byYgY2hpbGQgOiAqbV9jaGlsZHJlbikKLSAg
ICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUs
IGZpeGVkUG9zaXRpb25SZWN0LCBuZXdEZWx0YSk7CisgICAgICAgIGNoaWxkLT51cGRhdGVMYXll
cnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNoYW5nZWROb2RlLCBmaXhlZFBvc2l0aW9uUmVjdCk7CiB9
CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6ZHVtcFByb3BlcnRpZXMoVGV4dFN0cmVh
bSYgdHMsIFNjcm9sbGluZ1N0YXRlVHJlZUFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29jb2EvU2Nyb2xsaW5nVHJlZVN0
aWNreU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
b2NvYS9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCShyZXZpc2lvbiAyNDA5NzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgU2Nyb2xsaW5n
VHJlZVN0aWNreU5vZGUoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CiAKICAgICB2
b2lkIGNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0
IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBv
c2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdU
cmVlTm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3Qp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBkdW1wUHJvcGVydGllcyhXVEY6OlRleHRTdHJlYW0mLCBT
Y3JvbGxpbmdTdGF0ZVRyZWVBc1RleHRCZWhhdmlvcikgY29uc3Qgb3ZlcnJpZGU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29hL1Njcm9sbGluZ1RyZWVTdGlja3lO
b2RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2NvY29h
L1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLm1tCShyZXZpc2lvbiAyNDA5NzApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb2NvYS9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgaW5saW5lIENHUG9pbnQgb3Bl
cmF0b3IqKENHUG9pbnQmCiB9CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OnVw
ZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNo
YW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9h
dFNpemUmIGN1bXVsYXRpdmVEZWx0YSkKK3ZvaWQgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OnVw
ZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNo
YW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0KQogewogICAgIHVz
aW5nIG5hbWVzcGFjZSBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZUludGVybmFsOwogICAgIGJvb2wg
YWRqdXN0U3RpY2t5TGF5ZXIgPSBmYWxzZTsKQEAgLTg4LDggKzg4LDYgQEAgdm9pZCBTY3JvbGxp
bmdUcmVlU3RpY2t5Tm9kZTo6dXBkYXRlTGF5ZQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9s
bGluZywgc3RyZWFtIDw8ICJTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSAiIDw8IHNjcm9sbGluZ05v
ZGVJRCgpIDw8ICIgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZTogbmV3IHZpZXdwb3J0
ICIgPDwgZml4ZWRQb3NpdGlvblJlY3QgPDwgIiBjb25zdHJhaW5pbmdSZWN0QXRMYXN0TGF5b3V0
ICIgPDwgbV9jb25zdHJhaW50cy5jb25zdHJhaW5pbmdSZWN0QXRMYXN0TGF5b3V0KCkgPDwgIiBs
YXN0IGxheWVyIHBvcyAiIDw8IG1fY29uc3RyYWludHMubGF5ZXJQb3NpdGlvbkF0TGFzdExheW91
dCgpIDw8ICIgYWRqdXN0U3RpY2t5TGF5ZXIgIiA8PCBhZGp1c3RTdGlja3lMYXllcik7CiAKLSAg
ICBGbG9hdFNpemUgZGVsdGFGb3JEZXNjZW5kYW50cyA9IGN1bXVsYXRpdmVEZWx0YTsKLQogICAg
IGlmIChhZGp1c3RTdGlja3lMYXllcikgewogICAgICAgICBGbG9hdFBvaW50IGxheWVyUG9zaXRp
b24gPSBtX2NvbnN0cmFpbnRzLmxheWVyUG9zaXRpb25Gb3JDb25zdHJhaW5pbmdSZWN0KGNvbnN0
cmFpbmluZ1JlY3QpOwogCkBAIC05NywxNSArOTUsMTMgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZTo6dXBkYXRlTGF5ZQogICAgICAgICBDR1BvaW50IGFuY2hvclBvaW50ID0gW21fbGF5
ZXIgYW5jaG9yUG9pbnRdOwogICAgICAgICBDR1BvaW50IG5ld1Bvc2l0aW9uID0gbGF5ZXJQb3Np
dGlvbiAtIG1fY29uc3RyYWludHMuYWxpZ25tZW50T2Zmc2V0KCkgKyBhbmNob3JQb2ludCAqIGxh
eWVyQm91bmRzLnNpemU7CiAgICAgICAgIFttX2xheWVyIHNldFBvc2l0aW9uOm5ld1Bvc2l0aW9u
XTsKLQotICAgICAgICBkZWx0YUZvckRlc2NlbmRhbnRzID0gbGF5ZXJQb3NpdGlvbiAtIG1fY29u
c3RyYWludHMubGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dCgpICsgY3VtdWxhdGl2ZURlbHRhOwog
ICAgIH0KIAogICAgIGlmICghbV9jaGlsZHJlbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9y
IChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQotICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJz
QWZ0ZXJBbmNlc3RvckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3QsIGRlbHRh
Rm9yRGVzY2VuZGFudHMpOworICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3Rv
ckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3QpOwogfQogCiB2b2lkIFNjcm9s
bGluZ1RyZWVTdGlja3lOb2RlOjpkdW1wUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgU2Nyb2xs
aW5nU3RhdGVUcmVlQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZUlPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2lvcy9T
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlSU9TLmgJKHJldmlzaW9uIDI0MDk3MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3Jv
bGxpbmdOb2RlSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHJvdGVjdGVk
OgogCiAgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlclZpZXdwb3J0Q2hhbmdlKGNvbnN0IEZsb2F0
UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGRvdWJsZSBzY2FsZSkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCB1cGRhdGVMYXllcnNBZnRlckRlbGVnYXRlZFNjcm9sbChjb25zdCBGbG9hdFBvaW50Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNj
cm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0
aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpIG92ZXJyaWRlOworICAg
IHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVl
Tm9kZSYgY2hhbmdlZE5vZGUsIGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QpIG92
ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFJlY3QmIGxheW91dFZpZXdwb3J0KSBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2lvcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlSU9TLm1tCShyZXZpc2lvbiAyNDA5
NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQxLDE3ICsxNDEsMTYg
QEAgdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlSU9TOgogICAgICAgICByZXR1
cm47CiAKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogKm1fY2hpbGRyZW4pCi0gICAgICAgIGNoaWxk
LT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKCp0aGlzLCBmaXhlZFBvc2l0aW9uUmVj
dCwgRmxvYXRTaXplKCkpOworICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3Rv
ckNoYW5nZSgqdGhpcywgZml4ZWRQb3NpdGlvblJlY3QpOwogfQogCi12b2lkIFNjcm9sbGluZ1Ry
ZWVGcmFtZVNjcm9sbGluZ05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2Uo
Y29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGbG9hdFNpemUmKQordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlSU9T
Ojp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2Rl
JiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JikKIHsKICAgICBpZiAoIW1fY2hpbGRyZW4p
CiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0UmVjdCBmaXhlZFBvc2l0aW9uUmVjdChzY3Jv
bGxQb3NpdGlvbigpLCBzY3JvbGxhYmxlQXJlYVNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBjaGls
ZCA6ICptX2NoaWxkcmVuKQotICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3Rv
ckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3QsIEZsb2F0U2l6ZSgpKTsKKyAg
ICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUs
IGZpeGVkUG9zaXRpb25SZWN0KCkpOwogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVJT1M6OnVwZGF0ZUxheWVyc0FmdGVyRGVsZWdhdGVkU2Nyb2xsKGNvbnN0IEZsb2F0
UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQpAQCAtMTkzLDcgKzE5Miw3IEBAIHZvaWQgU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUlPUzoKICAgICAgICAgZml4ZWRQb3NpdGlvblJlY3QgPSBG
bG9hdFJlY3Qoc2Nyb2xsUG9zaXRpb24sIHNjcm9sbGFibGVBcmVhU2l6ZSgpKTsKIAogICAgIGZv
ciAoYXV0byYgY2hpbGQgOiAqbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVy
c0FmdGVyQW5jZXN0b3JDaGFuZ2UoKnRoaXMsIGZpeGVkUG9zaXRpb25SZWN0LCBGbG9hdFNpemUo
KSk7CisgICAgICAgIGNoaWxkLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKCp0aGlz
LCBmaXhlZFBvc2l0aW9uUmVjdCk7CiB9CiAKIEZsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZUlPUzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCShyZXZpc2lvbiAyNDA5
NzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzM3LDcgKzMzNyw3IEBA
IHZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzoKICAgICAgICAgcmV0dXJu
OwogCiAgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQotICAgICAgICBjaGlsZC0+
dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSgqdGhpcywgZml4ZWRQb3NpdGlvblJlY3Qs
IEZsb2F0U2l6ZSgpKTsKKyAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JD
aGFuZ2UoKnRoaXMsIGZpeGVkUG9zaXRpb25SZWN0KTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRhdGVMYXllcnNBZnRlclZpZXdwb3J0Q2hhbmdlKGNv
bnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL21hYy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTWFjLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVPdmVy
Zmxvd1Njcm9sbGluZ05vZGVNYWMuaAkocmV2aXNpb24gMjQwOTcwKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVN
YWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
dXBkYXRlTGF5ZXJzQWZ0ZXJWaWV3cG9ydENoYW5nZShjb25zdCBGbG9hdFJlY3QmLCBkb3VibGUp
IG92ZXJyaWRlIHsgfQogICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJEZWxlZ2F0ZWRTY3JvbGwo
Y29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pIG92ZXJyaWRlOwogCi0gICAgdm9pZCB1
cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBj
aGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxv
YXRTaXplJiBjdW11bGF0aXZlRGVsdGEpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlTGF5ZXJz
QWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYgY2hhbmdlZE5vZGUs
IGNvbnN0IEZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QpIG92ZXJyaWRlOwogCiAgICAgU2Ny
b2xsaW5nRXZlbnRSZXN1bHQgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmKSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFj
L1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDI0MDk3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05MywxMSArOTMsMTAgQEAgU2Nyb2xsaW5nRXZlbnRSZXN1bHQg
U2Nyb2xsaW5nVHJlZU92ZXJmbAogCiAKIAotdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlTWFjOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9s
bGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9u
UmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCit2b2lkIFNjcm9sbGluZ1Ry
ZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVNYWM6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFu
Z2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJlY3Qm
IGZpeGVkUG9zaXRpb25SZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShjaGFuZ2VkTm9kZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGZpeGVkUG9zaXRpb25SZWN0KTsKLSAgICBVTlVTRURfUEFSQU0oY3Vt
dWxhdGl2ZURlbHRhKTsKIH0KIAogRmxvYXRQb2ludCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlTWFjOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CkBAIC0xMzEsNyArMTMwLDcgQEAg
dm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlTQogICAgICAgICByZXR1cm47
CiAKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogKm1fY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkLT51
cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKCp0aGlzLCBmaXhlZFBvc2l0aW9uUmVjdCwg
eyB9KTsKKyAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoKnRo
aXMsIGZpeGVkUG9zaXRpb25SZWN0KTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dT
Y3JvbGxpbmdOb2RlTWFjOjp1cGRhdGVMYXllcnNBZnRlckRlbGVnYXRlZFNjcm9sbChjb25zdCBG
bG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDI0MDk3MCkKKysr
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw2IEBA
IHZvaWQgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGkKICAgICBTQ1JPTExJTkdf
Tk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxhYmxlQXJlYVNp
emUsIHNjcm9sbGFibGVBcmVhU2l6ZSkKICAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSwgdG90YWxDb250ZW50c1Np
emUpCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6UmVhY2hhYmxlQ29udGVudHNTaXplLCByZWFjaGFibGVDb250ZW50c1NpemUpCi0gICAgU0NS
T0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsUG9z
aXRpb24sIHNjcm9sbFBvc2l0aW9uKQogICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbiwgc2Nyb2xsT3JpZ2luKQogI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRzLCBob3Jpem9udGFsU25h
cE9mZnNldHMpCkBAIC0yMTYsNyArMjE1LDYgQEAgYm9vbCBBcmd1bWVudENvZGVyPFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaQogICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlNjcm9sbGFibGVBcmVhU2l6ZSwgRmxvYXRTaXplLCBzZXRTY3JvbGxhYmxl
QXJlYVNpemUpOwogICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OlRvdGFsQ29udGVudHNTaXplLCBGbG9hdFNpemUsIHNldFRvdGFsQ29udGVudHNT
aXplKTsKICAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUsIEZsb2F0U2l6ZSwgc2V0UmVhY2hhYmxlQ29udGVu
dHNTaXplKTsKLSAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpTY3JvbGxQb3NpdGlvbiwgRmxvYXRQb2ludCwgc2V0U2Nyb2xsUG9zaXRpb24pOwog
ICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbE9yaWdpbiwgSW50UG9pbnQsIHNldFNjcm9sbE9yaWdpbik7CiAjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKICAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNldHMsIFZlY3RvcjxmbG9hdD4sIHNldEhvcml6
b250YWxTbmFwT2Zmc2V0cyk7CkBAIC01MTIsOSArNTEwLDYgQEAgc3RhdGljIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUwogICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5IHx8
IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVh
Y2hhYmxlQ29udGVudHNTaXplKSkKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWFjaGFibGUt
Y29udGVudHMtc2l6ZSIsIG5vZGUucmVhY2hhYmxlQ29udGVudHNTaXplKCkpOwogCi0gICAgaWYg
KCFjaGFuZ2VkUHJvcGVydGllc09ubHkgfHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbikpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic2Nyb2xsLXBvc2l0aW9uIiwgbm9kZS5zY3JvbGxQb3NpdGlvbigpKTsKLQogICAg
IGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luKSkKICAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJzY3JvbGwtb3JpZ2luIiwgbm9kZS5zY3JvbGxPcmlnaW4oKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZVJlbW90ZUlPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZVJlbW90ZUlPUy5oCShyZXZpc2lvbiAyNDA5NzApCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVSZW1vdGVJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBsYXlvdXRWaWV3cG9ydCkgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyRGVsZWdhdGVkU2Nyb2xsKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUxh
eWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZU5vZGUm
IGNoYW5nZWROb2RlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkgb3ZlcnJpZGU7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlP
Uz4gbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGU7CiB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
UmVtb3RlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZVJlbW90ZUlPUy5t
bQkocmV2aXNpb24gMjQwOTcwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5
ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlUmVtb3RlSU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC01MywxMCArNTMsOCBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVSZW1vCiAgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUlPUzo6
Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihzdGF0ZU5vZGUpOwogCiAgICAgaWYgKHN0YXRlTm9k
ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxD
b250YWluZXJMYXllcikpIHsKLSAgICAgICAgaWYgKHNjcm9sbENvbnRhaW5lckxheWVyKCkpCisg
ICAgICAgIGlmIChzY3JvbGxDb250YWluZXJMYXllcigpICYmICFtX3Njcm9sbGluZ05vZGVEZWxl
Z2F0ZSkKICAgICAgICAgICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlID0gc3RkOjptYWtlX3Vu
aXF1ZTxTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TPigqdGhpcyk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlID0gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBpZiAobV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUpCkBAIC03MSwxNSArNjks
NiBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVSZW1vCiAgICAgICAgIG1f
c2Nyb2xsaW5nTm9kZURlbGVnYXRlLT5jb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oZG93bmNhc3Q8
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpKTsKIH0KIAotdm9pZCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlUmVtb3RlSU9TOjp1cGRhdGVMYXllcnNBZnRlckFu
Y2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3Qg
RmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZl
RGVsdGEpCi17Ci0gICAgaWYgKG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlKSB7Ci0gICAgICAgIG1f
c2Nyb2xsaW5nTm9kZURlbGVnYXRlLT51cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNo
YW5nZWROb2RlLCBmaXhlZFBvc2l0aW9uUmVjdCwgY3VtdWxhdGl2ZURlbHRhKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlSU9TOjp1
cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNoYW5nZWROb2RlLCBmaXhlZFBvc2l0aW9u
UmVjdCwgY3VtdWxhdGl2ZURlbHRhKTsKLX0KLQogRmxvYXRQb2ludCBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlUmVtb3RlSU9TOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7CiAgICAg
aWYgKG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmgJKHJldmlzaW9u
IDI0MDk3MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3Mv
U2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw4ICs1MSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlclZpZXdw
b3J0Q2hhbmdlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZml4ZWRQb3NpdGlvblJlY3QsIGRv
dWJsZSBzY2FsZSkgb3ZlcnJpZGUgeyB9CiAgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlckRlbGVn
YXRlZFNjcm9sbChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3Qg
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGN1
bXVsYXRpdmVEZWx0YSkgb3ZlcnJpZGU7Ci0KICAgICBXZWJDb3JlOjpTY3JvbGxpbmdFdmVudFJl
c3VsdCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudCYp
IG92ZXJyaWRlIHsgcmV0dXJuIFNjcm9sbGluZ0V2ZW50UmVzdWx0OjpEaWROb3RIYW5kbGVFdmVu
dDsgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1M+IG1fc2Nyb2xsaW5nTm9kZURlbGVnYXRlOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxp
bmdOb2RlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQko
cmV2aXNpb24gMjQwOTcwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02NiwxMSArNjYsNiBAQCB2b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJCiAgICAgbV9zY3JvbGxpbmdOb2RlRGVsZWdhdGUtPmNvbW1pdFN0YXRlQWZ0ZXJD
aGlsZHJlbihkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+KHN0YXRlTm9kZSkp
OwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1M6OnVwZGF0
ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5n
ZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNp
emUmIGN1bXVsYXRpdmVEZWx0YSkKLXsKLSAgICBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+dXBk
YXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJl
Y3QsIGN1bXVsYXRpdmVEZWx0YSk7Ci19Ci0KIEZsb2F0UG9pbnQgU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZUlPUzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVy
biBtX3Njcm9sbGluZ05vZGVEZWxlZ2F0ZS0+c2Nyb2xsUG9zaXRpb24oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUlPUy5oCShyZXZpc2lvbiAyNDA5NzApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1v
dGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MuaAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFNj
cm9sbFZpZXdEZWxlZ2F0ZSgpOwogICAgIHZvaWQgY29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihj
b25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmKTsKICAgICB2b2lkIGNv
bW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUmKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29u
c3QgV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
IGN1bXVsYXRpdmVEZWx0YSk7CiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBzY3JvbGxQb3NpdGlv
bigpIGNvbnN0OwogICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50Jik7CiAgICAgdm9pZCB1cGRhdGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlP
Uy5tbQkocmV2aXNpb24gMjQwOTcwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDYgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlSQogICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250ZW50c0xh
eWVyKQogICAgICAgICB8fCBzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250ZW50c1NpemUpCiAgICAgICAgIHx8
IHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUpCi0gICAgICAgIHx8IHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpT
Y3JvbGxQb3NpdGlvbikKICAgICAgICAgfHwgc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbikpIHsKICAg
ICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgICAgIFVJU2Nyb2xsVmlldyAq
c2Nyb2xsVmlldyA9IChVSVNjcm9sbFZpZXcgKilbc2Nyb2xsTGF5ZXIoKSBkZWxlZ2F0ZV07CkBA
IC0yNDcsMTIgKzI0Niw4IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZUkKICAgICAgICAgICAgIHJlY29tcHV0ZUluc2V0cyA9IHRydWU7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgICAgIHx8IHNjcm9s
bGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpTY3JvbGxPcmlnaW4pKQotICAgICAgICAgICAgJiYgIVttX3Njcm9sbFZpZXdEZWxlZ2F0
ZSBfaXNJblVzZXJJbnRlcmFjdGlvbl0pIHsKLSAgICAgICAgICAgIHNjcm9sbFZpZXcuY29udGVu
dE9mZnNldCA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxQb3NpdGlvbigpICsgc2Nyb2xsT3Jp
Z2luKCk7CisgICAgICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luKSkKICAgICAgICAgICAg
IHJlY29tcHV0ZUluc2V0cyA9IHRydWU7Ci0gICAgICAgIH0KIAogICAgICAgICBpZiAocmVjb21w
dXRlSW5zZXRzKSB7CiAgICAgICAgICAgICBVSUVkZ2VJbnNldHMgaW5zZXRzID0gVUlFZGdlSW5z
ZXRzTWFrZSgwLCAwLCAwLCAwKTsKQEAgLTI3NSwxNyArMjcwLDYgQEAgdm9pZCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSQogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdl
KGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBm
aXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCi17Ci0g
ICAgaWYgKCFzY3JvbGxpbmdOb2RlKCkuY2hpbGRyZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbGFzdENvbW1pdHRlZFNjcm9sbFBvc2l0aW9uKCkg
LSBzY3JvbGxpbmdOb2RlKCkuc2Nyb2xsUG9zaXRpb24oKTsKLQotICAgIGZvciAoYXV0byYgY2hp
bGQgOiAqc2Nyb2xsaW5nTm9kZSgpLmNoaWxkcmVuKCkpCi0gICAgICAgIGNoaWxkLT51cGRhdGVM
YXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNoYW5nZWROb2RlLCBmaXhlZFBvc2l0aW9uUmVjdCwg
Y3VtdWxhdGl2ZURlbHRhICsgc2Nyb2xsRGVsdGEpOwotfQotCiBGbG9hdFBvaW50IFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1M6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsK
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKQEAgLTI5NywxMiArMjgxLDE1IEBAIEZs
b2F0UG9pbnQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWwKIAogdm9pZCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogewotICAgIFttX3Njcm9sbExheWVyIHNldFBv
c2l0aW9uOkNHUG9pbnRNYWtlKHNjcm9sbFBvc2l0aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngo
KSwgc2Nyb2xsUG9zaXRpb24ueSgpICsgc2Nyb2xsT3JpZ2luKCkueSgpKV07CisvLyAgICBVSVNj
cm9sbFZpZXcgKnNjcm9sbFZpZXcgPSAoVUlTY3JvbGxWaWV3ICopW3Njcm9sbExheWVyKCkgZGVs
ZWdhdGVdOworLy8gICAgW3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpDR1BvaW50TWFrZShz
Y3JvbGxQb3NpdGlvbi54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSldOwogICAgIHVwZGF0ZUNoaWxk
Tm9kZXNBZnRlclNjcm9sbChzY3JvbGxQb3NpdGlvbik7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUzo6dXBkYXRlQ2hpbGROb2Rlc0FmdGVyU2Nyb2xsKGNv
bnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogeworICAgIG9zX2xvZyhPU19MT0dfREVG
QVVMVCwgImFudHRpOiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjp1cGRh
dGVDaGlsZE5vZGVzQWZ0ZXJTY3JvbGwiKTsKKwogICAgIGlmICghc2Nyb2xsaW5nTm9kZSgpLmNo
aWxkcmVuKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzEyLDEwICsyOTksMTEgQEAgdm9pZCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSQogICAgICAgICBmaXhlZFBvc2l0aW9u
UmVjdCA9IGZyYW1lTm9kZS0+Zml4ZWRQb3NpdGlvblJlY3QoKTsKICAgICBlbHNlCiAgICAgICAg
IGZpeGVkUG9zaXRpb25SZWN0ID0gc2Nyb2xsaW5nVHJlZSgpLmZpeGVkUG9zaXRpb25SZWN0KCk7
Ci0gICAgRmxvYXRTaXplIHNjcm9sbERlbHRhID0gbGFzdENvbW1pdHRlZFNjcm9sbFBvc2l0aW9u
KCkgLSBzY3JvbGxQb3NpdGlvbjsKKworICAgIG9zX2xvZyhPU19MT0dfREVGQVVMVCwgImFudHRp
OiBmaXhlZFBvc2l0aW9uUmVjdCB4IHkgJWYgJWYgc3ViZnJhbWUgJWQiLCBmaXhlZFBvc2l0aW9u
UmVjdC54KCksIGZpeGVkUG9zaXRpb25SZWN0LnkoKSwgZnJhbWVOb2RlICYmIGZyYW1lTm9kZS0+
bm9kZVR5cGUoKSA9PSBTY3JvbGxpbmdOb2RlVHlwZTo6U3ViZnJhbWUpOwogCiAgICAgZm9yIChh
dXRvJiBjaGlsZCA6ICpzY3JvbGxpbmdOb2RlKCkuY2hpbGRyZW4oKSkKLSAgICAgICAgY2hpbGQt
PnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2Uoc2Nyb2xsaW5nTm9kZSgpLCBmaXhlZFBv
c2l0aW9uUmVjdCwgc2Nyb2xsRGVsdGEpOworICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJzQWZ0
ZXJBbmNlc3RvckNoYW5nZShzY3JvbGxpbmdOb2RlKCksIGZpeGVkUG9zaXRpb25SZWN0KTsKIH0K
IAogdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TOjpzY3JvbGxXaWxs
U3RhcnQoKSBjb25zdApAQCAtMzM1LDkgKzMyMywxMyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVJCiAKIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxl
Z2F0ZUlPUzo6c2Nyb2xsVmlld0RpZFNjcm9sbChjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3Np
dGlvbiwgYm9vbCBpblVzZXJJbnRlcmFjdGlvbikgY29uc3QKIHsKKwogICAgIGlmIChtX3VwZGF0
aW5nRnJvbVN0YXRlTm9kZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgb3NfbG9nKE9TX0xPR19E
RUZBVUxULCAiYW50dGk6IHNjcm9sbFZpZXdEaWRTY3JvbGwgeCB5ICVmICVmIiwgc2Nyb2xsUG9z
aXRpb24ueCgpLCBzY3JvbGxQb3NpdGlvbi55KCkpOworCisKICAgICBzY3JvbGxpbmdUcmVlKCku
c2Nyb2xsUG9zaXRpb25DaGFuZ2VkVmlhRGVsZWdhdGVkU2Nyb2xsaW5nKHNjcm9sbGluZ05vZGUo
KS5zY3JvbGxpbmdOb2RlSUQoKSwgc2Nyb2xsUG9zaXRpb24sIGluVXNlckludGVyYWN0aW9uKTsK
IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>361197</attachid>
            <date>2019-02-05 09:24:56 -0800</date>
            <delta_ts>2019-02-08 05:21:55 -0800</delta_ts>
            <desc>test case</desc>
            <filename>fixed-frame-scroll.html</filename>
            <type>text/html</type>
            <size>6123</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KPGhlYWQ+CiAgICA8c3R5bGU+CiAgICAgICAgLnNjcm9s
bGVyIHsKICAgICAgICAgICAgbWFyZ2luOiAyMHB4OwogICAgICAgICAgICB3aWR0aDogNDAwcHg7
CiAgICAgICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgICAgICAgIGJvcmRlcjogMjBweCBzb2xp
ZCByZ2JhKDAsIDAsIDEyOCwgMC41KTsKICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAg
ICB9CiAgICAgICAgLnBvc2l0aW9uZWQgewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAg
ICAgICAgICAgIGxlZnQ6IDMwMHB4OwogICAgICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAg
ICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5pbnNpZGUgewog
ICAgICAgICAgICB0b3A6IDEwMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBvcmFu
Z2U7CiAgICAgICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5v
dXRzaWRlIHsKICAgICAgICAgICAgdG9wOiA0MDBweDsKICAgICAgICAgICAgYmFja2dyb3VuZC1j
b2xvcjogZ3JlZW47CiAgICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzY3JpcHQ+CgogICAgICAg
IGZ1bmN0aW9uIHNsZWVwKG1pbGxpcykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBkYXRlID0g
bmV3IERhdGUoKTsKICAgICAgICAgICAgdmFyIGN1ckRhdGUgPSBudWxsOwogICAgICAgICAgICBk
byB7CiAgICAgICAgICAgICAgICBjdXJEYXRlID0gbmV3IERhdGUoKTsKICAgICAgICAgICAgfSB3
aGlsZShjdXJEYXRlLWRhdGUgPCBtaWxsaXMpOwogICAgICAgIH0gICAgICAgIAogICAgICAgIAog
ICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4gewogICAgICAgICAg
ICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICAgICAgICBzbGVlcCgyMDApOwogICAgICAg
ICAgICB9LCA1MCk7CiAgICAgICAgfSwgZmFsc2UpOwogICAgPC9zY3JpcHQ+CjwvaGVhZD4KPGJv
ZHk+Cgo8cD5UaGUgb3JhbmdlIGJveCBzaG91bGQgYmUgY2xpcHBlZCwgYnV0IHNjcm9sbCBpbiBm
cm9udCBvZiB0aGUgZ3JlZW4gYm94LjwvcD4KCjxpZnJhbWUgd2lkdGg9NDAwIGhlaWdodD00MDAg
IHNyY2RvYz0iCiAgICAgICAgPHN0eWxlPgogICAgICAgIC5wb3NpdGlvbmVkIHsKICAgICAgICAg
ICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgICB0b3A6IDEwMHB4OwogICAgICAgICAgICBs
ZWZ0OiAzMDBweDsKICAgICAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICAgICAgd2lkdGg6
IDIwMHB4OwogICAgICAgIH0KICAgICAgICAuaW5zaWRlIHsKICAgICAgICAgICAgYmFja2dyb3Vu
ZC1jb2xvcjogb3JhbmdlOwogICAgICAgICAgICB6LWluZGV4OiAyOwogICAgICAgIH0KICAgIDwv
c3R5bGU+CiAgICA8cD5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRp
cGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3Jl
IGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5v
c3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEg
Y29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0
IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBh
cmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBz
dW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJv
cnVtLjwvcD4KICAgIDxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBh
ZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJv
cmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMg
bm9zdHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBl
YSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVy
aXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEg
cGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQs
IHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxh
Ym9ydW0uPC9wPgogICAgPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVy
IGFkaXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxh
Ym9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVp
cyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4
IGVhIGNvbW1vZG8gY29uc2VxdWF0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5k
ZXJpdCBpbiB2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxs
YSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVu
dCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3Qg
bGFib3J1bS48L3A+CiAgICA8cD5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0
dXIgYWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQg
bGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBx
dWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAg
ZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhl
bmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51
bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lk
ZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVz
dCBsYWJvcnVtLjwvcD4KICAgIDxkaXYgY2xhc3M9J3Bvc2l0aW9uZWQgaW5zaWRlJz48L2Rpdj4K
ICAgIDxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2lu
ZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9s
b3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBl
eGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2Rv
IGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9s
dXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIu
IEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4g
Y3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uPC9w
PgogICAgPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2lj
aW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBk
b2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVk
IGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1v
ZG8gY29uc2VxdWF0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2
b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1
ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBp
biBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS48
L3A+CiAgICA8cD5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlz
aWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0
IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3Ry
dWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29t
bW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGlu
IHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlh
dHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50
IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVt
LjwvcD4KICAgIDxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlw
aXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUg
ZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9z
dHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBj
b21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQg
aW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFy
aWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1
bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9y
dW0uPC9wPgogICAgPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFk
aXBpc2ljaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9y
ZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBu
b3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVh
IGNvbW1vZG8gY29uc2VxdWF0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJp
dCBpbiB2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBw
YXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwg
c3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFi
b3J1bS48L3A+CiAgICA8cD5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIg
YWRpcGlzaWNpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFi
b3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlz
IG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXgg
ZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRl
cml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxh
IHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50
LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBs
YWJvcnVtLjwvcD4iPgo8L2lmcmFtZT4KCjxkaXYgY2xhc3M9InBvc2l0aW9uZWQgb3V0c2lkZSI+
PC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>