<?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>23360</bug_id>
          
          <creation_ts>2009-01-15 15:00:05 -0800</creation_ts>
          <short_desc>Make repainting compositing-aware for accelerated compositing</short_desc>
          <delta_ts>2009-03-02 11:51:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23359</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>105974</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-15 15:00:05 -0800</bug_when>
    <thetext>This bug trackes changes to the repainting code that are required for accelerated compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107155</commentid>
    <comment_count>1</comment_count>
      <attachid>27067</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-26 21:51:20 -0800</bug_when>
    <thetext>Created attachment 27067
Patch to create container-relative repaint methods

This is phase 1: add variants of the various &quot;absolute repaint&quot; methods that take a RenderBox container, and compute the repaint rect relative to that. For now, RenderObject::containerForRepaint() always returns 0, so all repaints are still root-relative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107158</commentid>
    <comment_count>2</comment_count>
      <attachid>27067</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-26 22:41:13 -0800</bug_when>
    <thetext>Comment on attachment 27067
Patch to create container-relative repaint methods

r=me

We&apos;ve got to rename these methods to something better though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107160</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-26 22:51:31 -0800</bug_when>
    <thetext>Filed bug 23565 on renaming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107162</commentid>
    <comment_count>4</comment_count>
      <attachid>27067</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-26 22:58:47 -0800</bug_when>
    <thetext>Comment on attachment 27067
Patch to create container-relative repaint methods

Committed in http://trac.webkit.org/changeset/40288</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107166</commentid>
    <comment_count>5</comment_count>
      <attachid>27069</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-26 23:53:42 -0800</bug_when>
    <thetext>Created attachment 27069
Phase 2 patch: use the new container-relative repaint rects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107219</commentid>
    <comment_count>6</comment_count>
      <attachid>27077</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-27 11:00:17 -0800</bug_when>
    <thetext>Created attachment 27077
Phase 2 patch: use the new container-relative repaint rects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107246</commentid>
    <comment_count>7</comment_count>
      <attachid>27077</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-27 13:46:04 -0800</bug_when>
    <thetext>Comment on attachment 27077
Phase 2 patch: use the new container-relative repaint rects.

Will re-do this patch after another change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107247</commentid>
    <comment_count>8</comment_count>
      <attachid>27086</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-27 13:46:56 -0800</bug_when>
    <thetext>Created attachment 27086
Patch to put the repaintContainer argument first in computeRectForRepaint()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107248</commentid>
    <comment_count>9</comment_count>
      <attachid>27086</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-27 13:48:53 -0800</bug_when>
    <thetext>Comment on attachment 27086
Patch to put the repaintContainer argument first in computeRectForRepaint()

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107250</commentid>
    <comment_count>10</comment_count>
      <attachid>27086</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-27 13:54:57 -0800</bug_when>
    <thetext>Comment on attachment 27086
Patch to put the repaintContainer argument first in computeRectForRepaint()

Committed:

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/rendering/RenderBox.cpp
	M	WebCore/rendering/RenderBox.h
	M	WebCore/rendering/RenderForeignObject.cpp
	M	WebCore/rendering/RenderForeignObject.h
	M	WebCore/rendering/RenderInline.cpp
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderObject.h
	M	WebCore/rendering/RenderReplaced.cpp
	M	WebCore/rendering/RenderTableCell.cpp
	M	WebCore/rendering/RenderTableCell.h
	M	WebCore/rendering/RenderView.cpp
	M	WebCore/rendering/RenderView.h
Committed r40300</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107256</commentid>
    <comment_count>11</comment_count>
      <attachid>27087</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-27 14:19:51 -0800</bug_when>
    <thetext>Created attachment 27087
Phase 3 patch: use container-relative repaint during layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107257</commentid>
    <comment_count>12</comment_count>
      <attachid>27087</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-27 14:28:02 -0800</bug_when>
    <thetext>Comment on attachment 27087
Phase 3 patch: use container-relative repaint during layout.

r=me.  Please rename repaintViaContainer to repaintUsingContainer. I think &quot;Via&quot; is just awkward in a method name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107267</commentid>
    <comment_count>13</comment_count>
      <attachid>27087</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-27 15:06:19 -0800</bug_when>
    <thetext>Comment on attachment 27087
Phase 3 patch: use container-relative repaint during layout.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/rendering/RenderBlock.cpp
	M	WebCore/rendering/RenderFlexibleBox.cpp
	M	WebCore/rendering/RenderForeignObject.cpp
	M	WebCore/rendering/RenderLayer.cpp
	M	WebCore/rendering/RenderLayer.h
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderObject.h
	M	WebCore/rendering/RenderPath.cpp
	M	WebCore/rendering/RenderReplaced.cpp
	M	WebCore/rendering/RenderSVGContainer.cpp
	M	WebCore/rendering/RenderSVGImage.cpp
	M	WebCore/rendering/RenderSVGRoot.cpp
	M	WebCore/rendering/RenderSVGText.cpp
	M	WebCore/rendering/RenderSVGViewportContainer.cpp
	M	WebCore/rendering/RenderTable.cpp
	M	WebCore/rendering/bidi.cpp
Committed r40303</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107764</commentid>
    <comment_count>14</comment_count>
      <attachid>27193</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-30 13:44:22 -0800</bug_when>
    <thetext>Created attachment 27193
Patch to use container-relative methods for computing repaints before layout</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107765</commentid>
    <comment_count>15</comment_count>
      <attachid>27193</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-30 13:45:42 -0800</bug_when>
    <thetext>Comment on attachment 27193
Patch to use container-relative methods for computing repaints before layout

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107766</commentid>
    <comment_count>16</comment_count>
      <attachid>27193</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-01-30 13:48:45 -0800</bug_when>
    <thetext>Comment on attachment 27193
Patch to use container-relative methods for computing repaints before layout

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/rendering/RenderObject.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108064</commentid>
    <comment_count>17</comment_count>
      <attachid>27268</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-02-02 17:05:21 -0800</bug_when>
    <thetext>Created attachment 27268
Final repaint patch: hook up to composited layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108132</commentid>
    <comment_count>18</comment_count>
      <attachid>27268</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-03 11:33:57 -0800</bug_when>
    <thetext>Comment on attachment 27268
Final repaint patch: hook up to composited layers.

Put a FIXME in RenderInline, since you aren&apos;t really dealing with the problem yet.

You really shouldn&apos;t get a null containingBlock() ever from within containingBlockWith()/Height().  I do approve of nuking a useless FIXME though. :)

I think it&apos;s ok to have an enclosingCompositingLayer on RenderObject itself.  That will make the code cleaner in RenderObject::containerForRepaint.

OwnPtr please for RenderView::m_compositor.

updateRootLayerPosition should not be in updateWidgetPositions.  I would suggest updateLayerPositions or updateLayerPosition for the root layer, or perhaps you meant to do it post-layout (either where updateLayerPositions is or in performPostLayoutTasks).

I think you could just fix selection by adding enough info to get back to the repaint container to SelectionInfo objects, and then you wouldn&apos;t need the special view method.

Caret painting could also cache the repaint container that it needs to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108354</commentid>
    <comment_count>19</comment_count>
      <attachid>27333</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-02-04 15:45:26 -0800</bug_when>
    <thetext>Created attachment 27333
Updated patch, changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108357</commentid>
    <comment_count>20</comment_count>
      <attachid>27333</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-04 15:48:06 -0800</bug_when>
    <thetext>Comment on attachment 27333
Updated patch, changelog

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108360</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-02-04 15:57:21 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/editing/SelectionController.cpp
	M	WebCore/rendering/RenderInline.cpp
	M	WebCore/rendering/RenderLayer.cpp
	M	WebCore/rendering/RenderLayer.h
	M	WebCore/rendering/RenderLayerBacking.cpp
	M	WebCore/rendering/RenderLayerCompositor.cpp
	M	WebCore/rendering/RenderLayerCompositor.h
	M	WebCore/rendering/RenderObject.cpp
	M	WebCore/rendering/RenderObject.h
	M	WebCore/rendering/RenderView.cpp
	M	WebCore/rendering/RenderView.h
	M	WebCore/rendering/RenderWidget.cpp
Committed r40640

Repaint work is now complete.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27067</attachid>
            <date>2009-01-26 21:51:20 -0800</date>
            <delta_ts>2009-01-26 22:58:47 -0800</delta_ts>
            <desc>Patch to create container-relative repaint methods</desc>
            <filename>23360_patch_phase_1.txt</filename>
            <type>text/plain</type>
            <size>46263</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDRlZTllNS4uYjE3ZmMzNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw4NCBAQAogMjAwOS0wMS0yNiAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzNjAKKworICAgICAgICBBZGQgdmFyaWFudHMgb2YgYWxsIHRoZSBtZXRob2RzIHRoYXQg
Y29tcHV0ZSBkaXJ0eSByZWN0cyBmb3IgcmVwYWludGluZworICAgICAgICB3aXRoIHZlcnNpb25z
IHRoYXQgY29tcHV0ZSB0aG9zZSByZWN0cyByZWxhdGl2ZSB0byBzb21lIGNvbnRhaW5lcgorICAg
ICAgICBSZW5kZXJCb3ggdGhhdCBhY3RzIGFzIGEgcGFpbnRpbmcgcm9vdC4KKworICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpz
dHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om91dGxpbmVCb3Vu
ZHNGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxUb0NvbnRh
aW5lclF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZWN0
Rm9yUmVwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZvcmVpZ25PYmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6Y2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6Y29udGFpbmVyRm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OnJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpy
ZXBhaW50UmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVjdFdp
dGhPdXRsaW5lRm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6bG9jYWxUb0NvbnRhaW5lclF1YWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRl
UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlQ2xpcHBlZE92
ZXJmbG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbXB1dGVBYnNv
bHV0ZVJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1
dGVPdXRsaW5lQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b3V0bGlu
ZUJvdW5kc0ZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXRoLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6Om91dGxpbmVCb3VuZHNGb3JSZXBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGF0aC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNl
ZDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpjbGlwcGVkT3ZlcmZs
b3dSZWN0Rm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6
Om91dGxpbmVCb3VuZHNGb3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmNsaXBw
ZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpjbGlwcGVkT3ZlcmZsb3dSZWN0
Rm9yUmVwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUm9vdDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdSb290Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6Y2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0Lmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZUNlbGw6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6bG9jYWxUb0NvbnRhaW5lclF1YWQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGFibGVDb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDb2w6
OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpsb2NhbFRvQ29udGFpbmVyUXVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJWaWV3Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3Lmg6CisKKzIwMDktMDEtMjYgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQKICAg
ICAgICAgCiAgICAgICAgIEJhY2sgb3V0IHI0MDI4NSwgYmVjYXVzZSBpdCB3YXMgY2hlY2tlZCBp
biB3aXRoIG5vIGJ1ZyBudW1iZXIsIG5vCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBjNGVh
ODJkLi5kYzZmMzMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTE3MCw3ICsxNzAsNyBA
QCB2b2lkIFJlbmRlckJveDo6c3R5bGVXaWxsQ2hhbmdlKFJlbmRlclN0eWxlOjpEaWZmIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdAogdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdl
KFJlbmRlclN0eWxlOjpEaWZmIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsK
ICAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHZpZXctPm1heGltYWxPdXRsaW5lU2l6ZSgp
IGlzIHZhbGlkIGZvciBhbnkgcmVwYWludHMgdGhhdCBoYXBwZW4KLSAgICAvLyBkdXJpbmcgdGhl
IHN0eWxlIGNoYW5nZSAoaXQncyB1c2VkIGJ5IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgp
KS4KKyAgICAvLyBkdXJpbmcgdGhlIHN0eWxlIGNoYW5nZSAoaXQncyB1c2VkIGJ5IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KCkpLgogICAgIGlmIChzdHlsZSgpLT5vdXRsaW5lV2lkdGgo
KSA+IDAgJiYgc3R5bGUoKS0+b3V0bGluZVNpemUoKSA+IG1heGltYWxPdXRsaW5lU2l6ZShQYWlu
dFBoYXNlT3V0bGluZSkpCiAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclZpZXcqPihkb2N1bWVu
dCgpLT5yZW5kZXJlcigpKS0+c2V0TWF4aW1hbE91dGxpbmVTaXplKHN0eWxlKCktPm91dGxpbmVT
aXplKCkpOwogCkBAIC00ODksMTMgKzQ4OSwxNiBAQCBGbG9hdFF1YWQgUmVuZGVyQm94OjphYnNv
bHV0ZUNvbnRlbnRRdWFkKCkgY29uc3QKIH0KIAogCi1JbnRSZWN0IFJlbmRlckJveDo6YWJzb2x1
dGVPdXRsaW5lQm91bmRzKCkgY29uc3QKK0ludFJlY3QgUmVuZGVyQm94OjpvdXRsaW5lQm91bmRz
Rm9yUmVwYWludChSZW5kZXJCb3gqIC8qcmVwYWludENvbnRhaW5lciovKSBjb25zdAogewogICAg
IEludFJlY3QgYm94ID0gYm9yZGVyQm91bmRpbmdCb3goKTsKICAgICBhZGp1c3RSZWN0Rm9yT3V0
bGluZUFuZFNoYWRvdyhib3gpOwogCiAgICAgRmxvYXRRdWFkIGFic091dGxpbmVRdWFkID0gbG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm94KSk7CiAgICAgYm94ID0gYWJzT3V0bGluZVF1
YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKworICAgIC8vIEZJWE1FOiBsYXlvdXREZWx0YSBu
ZWVkcyB0byBiZSBhcHBsaWVkIGluIHBhcnRzIGJlZm9yZS9hZnRlciB0cmFuc2Zvcm1zIGFuZAor
ICAgIC8vIHJlcGFpbnQgY29udGFpbmVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMzA4CiAgICAgYm94Lm1vdmUodmlldygpLT5sYXlvdXREZWx0YSgpKTsKIAog
ICAgIHJldHVybiBib3g7CkBAIC0xNDM3LDggKzE0NDAsMTEgQEAgRmxvYXRQb2ludCBSZW5kZXJC
b3g6OmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVk
LCBib28KICAgICByZXR1cm4gRmxvYXRQb2ludCgpOwogfQogCi1GbG9hdFF1YWQgUmVuZGVyQm94
Ojpsb2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgbG9jYWxRdWFkLCBib29sIGZp
eGVkKSBjb25zdAorRmxvYXRRdWFkIFJlbmRlckJveDo6bG9jYWxUb0NvbnRhaW5lclF1YWQoY29u
c3QgRmxvYXRRdWFkJiBsb2NhbFF1YWQsIFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgYm9v
bCBmaXhlZCkgY29uc3QKIHsKKyAgICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0aGlzKQorICAg
ICAgICByZXR1cm4gbG9jYWxRdWFkOworCiAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0g
Rml4ZWRQb3NpdGlvbikKICAgICAgICAgZml4ZWQgPSB0cnVlOwogCkBAIC0xNDUwLDcgKzE0NTYs
NyBAQCBGbG9hdFF1YWQgUmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0
UXVhZCYgbG9jYWxRdWFkLCBib29sIGZpeGVkKQogICAgICAgICAgICAgcXVhZCA9IG1fbGF5ZXIt
PnRyYW5zZm9ybSgpLT5tYXBRdWFkKHF1YWQpOwogICAgICAgICB9CiAgICAgICAgIHF1YWQgKz0g
b2Zmc2V0RnJvbUNvbnRhaW5lcihvKTsKLSAgICAgICAgcmV0dXJuIG8tPmxvY2FsVG9BYnNvbHV0
ZVF1YWQocXVhZCwgZml4ZWQpOworICAgICAgICByZXR1cm4gby0+bG9jYWxUb0NvbnRhaW5lclF1
YWQocXVhZCwgcmVwYWludENvbnRhaW5lciwgZml4ZWQpOwogICAgIH0KICAgICAKICAgICByZXR1
cm4gRmxvYXRRdWFkKCk7CkBAIC0xNTM0LDcgKzE1NDAsNyBAQCB2b2lkIFJlbmRlckJveDo6ZGVs
ZXRlTGluZUJveFdyYXBwZXIoKQogICAgIH0KIH0KIAotSW50UmVjdCBSZW5kZXJCb3g6OmFic29s
dXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpCitJbnRSZWN0IFJlbmRlckJveDo6Y2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyKQogewogICAgIGlm
IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSAmJiAhZW5jbG9zaW5nTGF5ZXIoKS0+
aGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKQEAgLTE1NDIs
OSArMTU0OCwxMiBAQCBJbnRSZWN0IFJlbmRlckJveDo6YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dS
ZWN0KCkKICAgICBJbnRSZWN0IHIgPSBvdmVyZmxvd1JlY3QoZmFsc2UpOwogCiAgICAgUmVuZGVy
VmlldyogdiA9IHZpZXcoKTsKLSAgICBpZiAodikKKyAgICBpZiAodikgeworICAgICAgICAvLyBG
SVhNRTogbGF5b3V0RGVsdGEgbmVlZHMgdG8gYmUgYXBwbGllZCBpbiBwYXJ0cyBiZWZvcmUvYWZ0
ZXIgdHJhbnNmb3JtcyBhbmQKKyAgICAgICAgLy8gcmVwYWludCBjb250YWluZXJzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMDgKICAgICAgICAgci5tb3ZlKHYt
PmxheW91dERlbHRhKCkpOwotCisgICAgfQorICAgIAogICAgIGlmIChzdHlsZSgpKSB7CiAgICAg
ICAgIGlmIChzdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCiAgICAgICAgICAgICAvLyBUaGUgdGhl
bWUgbWF5IHdpc2ggdG8gaW5mbGF0ZSB0aGUgcmVjdCB1c2VkIHdoZW4gcmVwYWludGluZy4KQEAg
LTE1NTcsMTQgKzE1NjYsMTUgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmFic29sdXRlQ2xpcHBlZE92
ZXJmbG93UmVjdCgpCiAgICAgICAgICAgICByLmluZmxhdGUodi0+bWF4aW1hbE91dGxpbmVTaXpl
KCkpOwogICAgICAgICB9CiAgICAgfQotICAgIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KHIp
OworICAgIGNvbXB1dGVSZWN0Rm9yUmVwYWludChyLCByZXBhaW50Q29udGFpbmVyKTsKICAgICBy
ZXR1cm4gcjsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0
KEludFJlY3QmIHJlY3QsIGJvb2wgZml4ZWQpCit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RG
b3JSZXBhaW50KEludFJlY3QmIHJlY3QsIFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgYm9v
bCBmaXhlZCkKIHsKICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkgewotICAgICAgICBp
ZiAodi0+bGF5b3V0U3RhdGVFbmFibGVkKCkpIHsKKyAgICAgICAgLy8gTGF5b3V0U3RhdGUgaXMg
b25seSB2YWxpZCBmb3Igcm9vdC1yZWxhdGl2ZSByZXBhaW50aW5nCisgICAgICAgIGlmICh2LT5s
YXlvdXRTdGF0ZUVuYWJsZWQoKSAmJiAhcmVwYWludENvbnRhaW5lcikgewogICAgICAgICAgICAg
TGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsKICAgICAgICAgICAg
IGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbV9sYXllcikK
ICAgICAgICAgICAgICAgICByZWN0Lm1vdmUobV9sYXllci0+cmVsYXRpdmVQb3NpdGlvbk9mZnNl
dCgpKTsKQEAgLTE1ODAsNiArMTU5MCw5IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1
dGVSZXBhaW50UmVjdChJbnRSZWN0JiByZWN0LCBib29sIGZpeGVkKQogICAgIGlmIChoYXNSZWZs
ZWN0aW9uKCkpCiAgICAgICAgIHJlY3QudW5pdGUocmVmbGVjdGVkUmVjdChyZWN0KSk7CiAKKyAg
ICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0aGlzKQorICAgICAgICByZXR1cm47CisKICAgICBS
ZW5kZXJPYmplY3QqIG8gPSBjb250YWluZXIoKTsKICAgICBpZiAoIW8pCiAgICAgICAgIHJldHVy
bjsKQEAgLTE2MzgsNyArMTY1MSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlQWJzb2x1dGVS
ZXBhaW50UmVjdChJbnRSZWN0JiByZWN0LCBib29sIGZpeGVkKQogICAgIH0gZWxzZQogICAgICAg
ICByZWN0LnNldExvY2F0aW9uKHRvcExlZnQpOwogICAgIAotICAgIG8tPmNvbXB1dGVBYnNvbHV0
ZVJlcGFpbnRSZWN0KHJlY3QsIGZpeGVkKTsKKyAgICBvLT5jb21wdXRlUmVjdEZvclJlcGFpbnQo
cmVjdCwgcmVwYWludENvbnRhaW5lciwgZml4ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6cmVw
YWludER1cmluZ0xheW91dElmTW92ZWQoY29uc3QgSW50UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgKaW5kZXggYzU4OWFlZC4uODkwOWFlNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTcw
LDcgKzcwLDcgQEAgcHVibGljOgogICAgIEZsb2F0UXVhZCBhYnNvbHV0ZUNvbnRlbnRRdWFkKCkg
Y29uc3Q7CiAKICAgICAvLyBCb3VuZHMgb2YgdGhlIG91dGxpbmUgYm94IGluIGFic29sdXRlIGNv
b3Jkcy4gUmVzcGVjdHMgdHJhbnNmb3JtcwotICAgIHZpcnR1YWwgSW50UmVjdCBhYnNvbHV0ZU91
dGxpbmVCb3VuZHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgb3V0bGluZUJvdW5kc0Zv
clJlcGFpbnQoUmVuZGVyQm94KiAvKnJlcGFpbnRDb250YWluZXIqLykgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50
IHR5KTsKIAogICAgIC8vIFVzZSB0aGlzIHdpdGggY2F1dGlvbiEgTm8gdHlwZSBjaGVja2luZyBp
cyBkb25lIQpAQCAtMTc1LDcgKzE3NSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgRmxvYXRQ
b2ludCBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxvYXRQb2ludCgp
LCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBjb25zdDsK
ICAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgYWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9pbnQgY29udGFp
bmVyUG9pbnQsIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2Up
IGNvbnN0OwotICAgIHZpcnR1YWwgRmxvYXRRdWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQoY29uc3Qg
RmxvYXRRdWFkJiwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgSW50
U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIApAQCAt
MjA3LDkgKzIwNiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgcmlnaHRtb3N0UG9zaXRp
b24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVkZVNlbGYg
PSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgaW5j
bHVkZU92ZXJmbG93SW50ZXJpb3IgPSB0cnVlLCBib29sIGluY2x1ZGVTZWxmID0gdHJ1ZSkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmLCBi
b29sIGZpeGVkID0gZmFsc2UpOworICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpOworICAgIHZpcnR1YWwg
dm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoSW50UmVjdCYsIFJlbmRlckJveCogcmVwYWludENv
bnRhaW5lciwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKICAgICBJbnRTaXplIG9mZnNldEZvclBvc2l0
aW9uZWRJbkNvbnRhaW5lcihSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZsb2F0
UXVhZCBsb2NhbFRvQ29udGFpbmVyUXVhZChjb25zdCBGbG9hdFF1YWQmLCBSZW5kZXJCb3gqIHJl
cGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IHZvaWQgcmVwYWludER1cmluZ0xheW91dElmTW92ZWQoY29uc3QgSW50UmVjdCYpOwogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCmluZGV4IGZjMTI1NzAuLjUyMzYw
MWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCkBAIC03MCwx
MiArNzAsMTIgQEAgdm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKQogICAgIHBhaW50SW5mby5jb250ZXh0
LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6Y29tcHV0ZUFic29s
dXRlUmVwYWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmKQordm9pZCBSZW5kZXJGb3JlaWduT2Jq
ZWN0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoSW50UmVjdCYgcmVjdCwgUmVuZGVyQm94KiByZXBh
aW50Q29udGFpbmVyLCBib29sIGZpeGVkKQogewogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zZm9ybSA9IHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpICogbG9jYWxUcmFuc2Zvcm0oKTsK
LSAgICByID0gdHJhbnNmb3JtLm1hcFJlY3Qocik7CisgICAgcmVjdCA9IHRyYW5zZm9ybS5tYXBS
ZWN0KHJlY3QpOwogCi0gICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0
KHIsIGYpOworICAgIFJlbmRlckJsb2NrOjpjb21wdXRlUmVjdEZvclJlcGFpbnQocmVjdCwgcmVw
YWludENvbnRhaW5lciwgZml4ZWQpOwogfQogCiBib29sIFJlbmRlckZvcmVpZ25PYmplY3Q6OmNh
bGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZvcmVpZ25PYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmpl
Y3QuaAppbmRleCAyMzIwYTFkLi4yOGY0ZGRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9y
ZWlnbk9iamVjdC5oCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRy
YW5zZm9ybTsgfQogICAgIHZpcnR1YWwgYm9vbCBjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmLCBi
b29sIGZpeGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KEludFJl
Y3QmLCBSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CiAg
ICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAK
aW5kZXggYTg5MTJhOC4uNGY0NDEyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCkBA
IC0zOTksNyArMzk5LDcgQEAgSW50UmVjdCBSZW5kZXJJbmxpbmU6OmxpbmVzQm91bmRpbmdCb3go
KSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUludFJlY3QgUmVuZGVySW5saW5lOjph
YnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKQorSW50UmVjdCBSZW5kZXJJbmxpbmU6OmNsaXBw
ZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lcikKIHsK
ICAgICAvLyBPbmx5IHJ1bi1pbnMgYXJlIGFsbG93ZWQgaW4gaGVyZSBkdXJpbmcgbGF5b3V0Lgog
ICAgIEFTU0VSVCghdmlldygpIHx8ICF2aWV3KCktPmxheW91dFN0YXRlRW5hYmxlZCgpIHx8IGlz
UnVuSW4oKSk7CkBAIC00MzksMTggKzQzOSwxOSBAQCBJbnRSZWN0IFJlbmRlcklubGluZTo6YWJz
b2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkKICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh4
LCB5LCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOwogICAgICAgICByID0gaW50ZXJzZWN0aW9uKHJl
cGFpbnRSZWN0LCBib3hSZWN0KTsKICAgICB9Ci0gICAgY2ItPmNvbXB1dGVBYnNvbHV0ZVJlcGFp
bnRSZWN0KHIpOworICAgIEFTU0VSVChyZXBhaW50Q29udGFpbmVyICE9IHRoaXMpOworICAgIGNi
LT5jb21wdXRlUmVjdEZvclJlcGFpbnQociwgcmVwYWludENvbnRhaW5lcik7CiAKICAgICBpZiAo
b3cpIHsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnIt
PmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBjaGlsZFJlY3QgPSBjdXJyLT5n
ZXRBYnNvbHV0ZVJlcGFpbnRSZWN0V2l0aE91dGxpbmUob3cpOworICAgICAgICAgICAgICAgIElu
dFJlY3QgY2hpbGRSZWN0ID0gY3Vyci0+cmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChyZXBhaW50
Q29udGFpbmVyLCBvdyk7CiAgICAgICAgICAgICAgICAgci51bml0ZShjaGlsZFJlY3QpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbigpICYmICFj
b250aW51YXRpb24oKS0+aXNJbmxpbmUoKSkgewotICAgICAgICAgICAgSW50UmVjdCBjb250UmVj
dCA9IGNvbnRpbnVhdGlvbigpLT5nZXRBYnNvbHV0ZVJlcGFpbnRSZWN0V2l0aE91dGxpbmUob3cp
OworICAgICAgICAgICAgSW50UmVjdCBjb250UmVjdCA9IGNvbnRpbnVhdGlvbigpLT5yZWN0V2l0
aE91dGxpbmVGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIG93KTsKICAgICAgICAgICAgIHIu
dW5pdGUoY29udFJlY3QpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
aAppbmRleCA0MzlkMDQ3Li44M2I4NTA2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaApAQCAt
NjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAgICAgdmlydHVh
bCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0g
dHJ1ZSk7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0
KCk7CisgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJl
bmRlckJveCogcmVwYWludENvbnRhaW5lcik7CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCmluZGV4IGIwNGY5NjcuLmJiZGJmNTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcApAQCAtMTY0NCw2ICsxNjQ0LDEyIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWlu
dChQYWludEluZm8mIC8qcGFpbnRJbmZvKi8sIGludCAvKnR4Ki8sIGludCAvKnR5Ki8pCiB7CiB9
CiAKK1JlbmRlckJveCogUmVuZGVyT2JqZWN0Ojpjb250YWluZXJGb3JSZXBhaW50KCkgY29uc3QK
K3sKKyAgICAvLyBGb3Igbm93LCBhbGwgcmVwYWludHMgYXJlIHJvb3QtcmVsYXRpdmUuCisgICAg
cmV0dXJuIDA7Cit9CisKIHZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50KGJvb2wgaW1tZWRpYXRl
KQogewogICAgIC8vIENhbid0IHVzZSB2aWV3KCksIHNpbmNlIHdlIG1pZ2h0IGJlIHVucm9vdGVk
LgpAQCAtMTY1Miw5ICsxNjU4LDExIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50KGJvb2wg
aW1tZWRpYXRlKQogICAgICAgICBvID0gby0+cGFyZW50KCk7CiAgICAgaWYgKCFvLT5pc1JlbmRl
clZpZXcoKSkKICAgICAgICAgcmV0dXJuOworCiAgICAgUmVuZGVyVmlldyogdmlldyA9IHN0YXRp
Y19jYXN0PFJlbmRlclZpZXcqPihvKTsKICAgICBpZiAodmlldy0+cHJpbnRpbmcoKSkKICAgICAg
ICAgcmV0dXJuOyAvLyBEb24ndCByZXBhaW50IGlmIHdlJ3JlIHByaW50aW5nLgorCiAgICAgdmll
dy0+cmVwYWludFZpZXdSZWN0YW5nbGUoYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCksIGlt
bWVkaWF0ZSk7CiB9CiAKQEAgLTE2NjYsMTEgKzE2NzQsMTcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OnJlcGFpbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUpCiAgICAg
ICAgIG8gPSBvLT5wYXJlbnQoKTsKICAgICBpZiAoIW8tPmlzUmVuZGVyVmlldygpKQogICAgICAg
ICByZXR1cm47CisKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVmll
dyo+KG8pOwogICAgIGlmICh2aWV3LT5wcmludGluZygpKQogICAgICAgICByZXR1cm47IC8vIERv
bid0IHJlcGFpbnQgaWYgd2UncmUgcHJpbnRpbmcuCisKICAgICBJbnRSZWN0IGFic1JlY3Qocik7
CisKKyAgICAvLyBGSVhNRTogbGF5b3V0RGVsdGEgbmVlZHMgdG8gYmUgYXBwbGllZCBpbiBwYXJ0
cyBiZWZvcmUvYWZ0ZXIgdHJhbnNmb3JtcyBhbmQKKyAgICAvLyByZXBhaW50IGNvbnRhaW5lcnMu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMwOAogICAgIGFic1Jl
Y3QubW92ZSh2aWV3LT5sYXlvdXREZWx0YSgpKTsKKwogICAgIGNvbXB1dGVBYnNvbHV0ZVJlcGFp
bnRSZWN0KGFic1JlY3QpOwogICAgIHZpZXctPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGFic1JlY3Qs
IGltbWVkaWF0ZSk7CiB9CkBAIC0xNzkxLDEwICsxODA1LDEwIEBAIGJvb2wgUmVuZGVyT2JqZWN0
OjpjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSBjb25zdAogICAgIHJldHVybiAhZG9jdW1l
bnQoKS0+dmlldygpLT5uZWVkc0Z1bGxSZXBhaW50KCkgJiYgIWhhc0xheWVyKCk7CiB9CiAKLUlu
dFJlY3QgUmVuZGVyT2JqZWN0OjpnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0V2l0aE91dGxpbmUoaW50
IG93KQorSW50UmVjdCBSZW5kZXJPYmplY3Q6OnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoUmVu
ZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBpbnQgb3V0bGluZVdpZHRoKQogewotICAgIEludFJl
Y3QgcihhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgci5pbmZsYXRlKG93KTsK
KyAgICBJbnRSZWN0IHIoY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRh
aW5lcikpOworICAgIHIuaW5mbGF0ZShvdXRsaW5lV2lkdGgpOwogCiAgICAgaWYgKHZpcnR1YWxD
b250aW51YXRpb24oKSAmJiAhaXNJbmxpbmUoKSkKICAgICAgICAgci5pbmZsYXRlWSh0b1JlbmRl
ckJveCh0aGlzKS0+Y29sbGFwc2VkTWFyZ2luVG9wKCkpOwpAQCAtMTgwMiwyMiArMTgxNiwyNSBA
QCBJbnRSZWN0IFJlbmRlck9iamVjdDo6Z2V0QWJzb2x1dGVSZXBhaW50UmVjdFdpdGhPdXRsaW5l
KGludCBvdykKICAgICBpZiAoaXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICBmb3IgKFJlbmRl
ck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkpCi0gICAgICAgICAgICAg
ICAgci51bml0ZShjdXJyLT5nZXRBYnNvbHV0ZVJlcGFpbnRSZWN0V2l0aE91dGxpbmUob3cpKTsK
KyAgICAgICAgICAgICAgICByLnVuaXRlKGN1cnItPnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQo
cmVwYWludENvbnRhaW5lciwgb3V0bGluZVdpZHRoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICByZXR1cm4gcjsKIH0KIAotSW50UmVjdCBSZW5kZXJPYmplY3Q6OmFic29sdXRlQ2xpcHBlZE92
ZXJmbG93UmVjdCgpCitJbnRSZWN0IFJlbmRlck9iamVjdDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyKQogewogICAgIGlmIChwYXJlbnQo
KSkKLSAgICAgICAgcmV0dXJuIHBhcmVudCgpLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3Qo
KTsKKyAgICAgICAgcmV0dXJuIHBhcmVudCgpLT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChyZXBhaW50Q29udGFpbmVyKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCi12b2lkIFJl
bmRlck9iamVjdDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVjdCYgcmVjdCwgYm9v
bCBmaXhlZCkKK3ZvaWQgUmVuZGVyT2JqZWN0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoSW50UmVj
dCYgcmVjdCwgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkKQogeworICAg
IGlmIChyZXBhaW50Q29udGFpbmVyID09IHRoaXMpCisgICAgICAgIHJldHVybjsKKwogICAgIGlm
IChSZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKSkgewogICAgICAgICBpZiAoby0+aXNCbG9ja0Zs
b3coKSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiID0gc3RhdGljX2Nhc3Q8UmVuZGVy
QmxvY2sqPihvKTsKQEAgLTE4NDEsNyArMTg1OCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpjb21w
dXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByZWN0LCBib29sIGZpeGVkKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG8tPmNvbXB1dGVBYnNvbHV0
ZVJlcGFpbnRSZWN0KHJlY3QsIGZpeGVkKTsKKyAgICAgICAgby0+Y29tcHV0ZVJlY3RGb3JSZXBh
aW50KHJlY3QsIHJlcGFpbnRDb250YWluZXIsIGZpeGVkKTsKICAgICB9CiB9CiAKQEAgLTIxNjAs
MTQgKzIxNzcsMTcgQEAgRmxvYXRQb2ludCBSZW5kZXJPYmplY3Q6OmFic29sdXRlVG9Mb2NhbChG
bG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkLAogICAgIHJldHVybiBGbG9hdFBv
aW50KCk7CiB9CiAKLUZsb2F0UXVhZCBSZW5kZXJPYmplY3Q6OmxvY2FsVG9BYnNvbHV0ZVF1YWQo
Y29uc3QgRmxvYXRRdWFkJiBsb2NhbFF1YWQsIGJvb2wgZml4ZWQpIGNvbnN0CitGbG9hdFF1YWQg
UmVuZGVyT2JqZWN0Ojpsb2NhbFRvQ29udGFpbmVyUXVhZChjb25zdCBGbG9hdFF1YWQmIGxvY2Fs
UXVhZCwgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkKSBjb25zdAogewor
ICAgIGlmIChyZXBhaW50Q29udGFpbmVyID09IHRoaXMpCisgICAgICAgIHJldHVybiBsb2NhbFF1
YWQ7CisKICAgICBSZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKTsKICAgICBpZiAobykgewogICAg
ICAgICBGbG9hdFF1YWQgcXVhZCA9IGxvY2FsUXVhZDsKICAgICAgICAgaWYgKG8tPmhhc092ZXJm
bG93Q2xpcCgpKQogICAgICAgICAgICAgcXVhZCAtPSB0b1JlbmRlckJveChvKS0+bGF5ZXIoKS0+
c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7Ci0gICAgICAgIHJldHVybiBvLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKHF1YWQsIGZpeGVkKTsKKyAgICAgICAgcmV0dXJuIG8tPmxvY2FsVG9Db250YWluZXJR
dWFkKHF1YWQsIHJlcGFpbnRDb250YWluZXIsIGZpeGVkKTsKICAgICB9CiAKICAgICByZXR1cm4g
RmxvYXRRdWFkKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGIzZWExNTEuLmM3YjE0
MWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5l
IFJlbmRlck9iamVjdF9oCiAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKIApAQCAtNTIyLDggKzUyMywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBG
bG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBGbG9hdFBv
aW50KCksIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNv
bnN0OwogICAgIHZpcnR1YWwgRmxvYXRQb2ludCBhYnNvbHV0ZVRvTG9jYWwoRmxvYXRQb2ludCwg
Ym9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAK
LSAgICAvLyBDb252ZXJ0IGEgbG9jYWwgcXVhZCB0byBhbiBhYnNvbHV0ZSBxdWFkLCB0YWtpbmcg
dHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCi0gICAgdmlydHVhbCBGbG9hdFF1YWQgbG9jYWxUb0Fi
c29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Owor
ICAgIC8vIENvbnZlcnQgYSBsb2NhbCBxdWFkIHRvIGFic29sdXRlIGNvb3JkaW5hdGVzLCB0YWtp
bmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCisgICAgRmxvYXRRdWFkIGxvY2FsVG9BYnNvbHV0
ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbG9jYWxUb0NvbnRhaW5lclF1YWQocXVhZCwgMCwgZml4ZWQp
OworICAgIH0KKyAgICAvLyBDb252ZXJ0IGEgbG9jYWwgcXVhZCBpbnRvIHRoZSBjb29yZGluYXRl
IHN5c3RlbSBvZiBjb250YWluZXIsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KKyAg
ICB2aXJ0dWFsIEZsb2F0UXVhZCBsb2NhbFRvQ29udGFpbmVyUXVhZChjb25zdCBGbG9hdFF1YWQm
LCBSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7
CiAKICAgICAvLyBSZXR1cm4gdGhlIG9mZnNldCBmcm9tIHRoZSBjb250YWluZXIoKSByZW5kZXJl
ciAoZXhjbHVkaW5nIHRyYW5zZm9ybXMpCiAgICAgdmlydHVhbCBJbnRTaXplIG9mZnNldEZyb21D
b250YWluZXIoUmVuZGVyT2JqZWN0KikgY29uc3Q7CkBAIC01NjMsNiArNTY5LDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRyYXdCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiwgaW50IHgxLCBpbnQgeTEs
IGludCB4MiwgaW50IHkyLCBCb3JkZXJTaWRlLAogICAgICAgICAgICAgICAgICAgICBDb2xvciwg
Y29uc3QgQ29sb3ImIHRleHRjb2xvciwgRUJvcmRlclN0eWxlLCBpbnQgYWRqYncxLCBpbnQgYWRq
YncyKTsKIAorICAgIC8vIFJldHVybiB0aGUgUmVuZGVyQm94IGluIHRoZSBjb250YWluZXIgY2hh
aW4gd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRoaXMgb2JqZWN0LCBvciAwCisg
ICAgLy8gaWYgcGFpbnRpbmcgaXMgcm9vdC1yZWxhdGl2ZS4gVGhpcyBpcyB0aGUgY29udGFpbmVy
IHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgJ2ZvclJlcGFpbnQnCisgICAgLy8gbWV0aG9k
cy4KKyAgICBSZW5kZXJCb3gqIGNvbnRhaW5lckZvclJlcGFpbnQoKSBjb25zdDsKKyAgICAKICAg
ICAvLyBSZXBhaW50IHRoZSBlbnRpcmUgb2JqZWN0LiAgQ2FsbGVkIHdoZW4sIGUuZy4sIHRoZSBj
b2xvciBvZiBhIGJvcmRlciBjaGFuZ2VzLCBvciB3aGVuIGEgYm9yZGVyCiAgICAgLy8gc3R5bGUg
Y2hhbmdlcy4KICAgICB2b2lkIHJlcGFpbnQoYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSk7CkBAIC01
ODMsMTMgKzU5NCwyMyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQg
c2hvdWxkIGJlIHJlcGFpbnRlZCB3aGVuZXZlciB0aGlzIG9iamVjdCBjaGFuZ2VzLiAgVGhlIHJl
Y3QgaXMgaW4gdGhlIHZpZXcncwogICAgIC8vIGNvb3JkaW5hdGUgc3BhY2UuICBUaGlzIG1ldGhv
ZCBkZWFscyB3aXRoIG91dGxpbmVzIGFuZCBvdmVyZmxvdy4KLSAgICB2aXJ0dWFsIEludFJlY3Qg
YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgSW50UmVjdCBhYnNvbHV0ZUNsaXBw
ZWRPdmVyZmxvd1JlY3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KDApOworICAgIH0KKyAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyKTsKICAgICAKLSAg
ICBJbnRSZWN0IGdldEFic29sdXRlUmVwYWludFJlY3RXaXRoT3V0bGluZShpbnQgb3cpOworICAg
IEludFJlY3QgcmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250
YWluZXIsIGludCBvdXRsaW5lV2lkdGgpOwogCi0gICAgLy8gR2l2ZW4gYSByZWN0IGluIHRoZSBv
YmplY3QncyBjb29yZGluYXRlIHNwYWNlLCB0aGlzIG1ldGhvZCBjb252ZXJ0cyB0aGUgcmVjdGFu
Z2xlIHRvIHRoZSB2aWV3J3MKLSAgICAvLyBjb29yZGluYXRlIHNwYWNlLgotICAgIHZpcnR1YWwg
dm9pZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZh
bHNlKTsKKyAgICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3Bh
Y2UsIGNvbXB1dGUgYSByZWN0IHN1aXRhYmxlIGZvciByZXBhaW50aW5nCisgICAgLy8gdGhhdCBy
ZWN0IGluIHZpZXcgY29vcmRpbmF0ZXMuCisgICAgdm9pZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50
UmVjdChJbnRSZWN0JiByLCBib29sIGZpeGVkID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1
cm4gY29tcHV0ZVJlY3RGb3JSZXBhaW50KHIsIDAsIGZpeGVkKTsKKyAgICB9CisgICAgLy8gR2l2
ZW4gYSByZWN0IGluIHRoZSBvYmplY3QncyBjb29yZGluYXRlIHNwYWNlLCBjb21wdXRlIGEgcmVj
dCBzdWl0YWJsZSBmb3IgcmVwYWludGluZworICAgIC8vIHRoYXQgcmVjdCBpbiB0aGUgY29vcmRp
bmF0ZSBzcGFjZSBvZiByZXBhaW50Q29udGFpbmVyLgorICAgIHZpcnR1YWwgdm9pZCBjb21wdXRl
UmVjdEZvclJlcGFpbnQoSW50UmVjdCYsIFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgYm9v
bCBmaXhlZCA9IGZhbHNlKTsKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KIApAQCAtNzM2LDcgKzc1NywxMSBAQCBwdWJsaWM6CiAgICAgYm9v
bCB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IFZJU0lCTEUgJiYgc3R5bGUoKS0+cG9pbnRlckV2ZW50cygpICE9IFBFX05PTkU7IH0K
ICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0
KiwgaW50IC8qdHgqLywgaW50IC8qdHkqLykgeyB9OwotICAgIHZpcnR1YWwgSW50UmVjdCBhYnNv
bHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7IH0KKworICAgIElu
dFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBvdXRsaW5lQm91bmRzRm9yUmVwYWludCgwKTsKKyAgICB9CiAKIHByb3RlY3RlZDoKICAgICAv
LyBPdmVycmlkZXMgc2hvdWxkIGNhbGwgdGhlIHN1cGVyY2xhc3MgYXQgdGhlIGVuZApAQCAtNzU3
LDYgKzc4Miw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYXJlbmFEZWxldGUoUmVuZGVyQXJl
bmEqLCB2b2lkKiBvYmplY3RCYXNlKTsKIAorICAgIHZpcnR1YWwgSW50UmVjdCBvdXRsaW5lQm91
bmRzRm9yUmVwYWludChSZW5kZXJCb3gqIC8qcmVwYWludENvbnRhaW5lciovKSBjb25zdCB7IHJl
dHVybiBJbnRSZWN0KCk7IH0KKwogcHJpdmF0ZToKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1f
c3R5bGU7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKaW5kZXggOTg1ZDQyNy4uMWY3M2M3MCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKQEAgLTE3Niw4ICsxNzYsOSBAQCB2b2lkIFJlbmRl
clBhdGg6OmxheW91dCgpCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCi1JbnRSZWN0
IFJlbmRlclBhdGg6OmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpCitJbnRSZWN0IFJlbmRl
clBhdGg6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveCogLypyZXBhaW50
Q29udGFpbmVyKi8pCiB7CisgICAgLy8gRklYTUU6IGhhbmRsZSBub24tcm9vdCByZXBhaW50Q29u
dGFpbmVyCiAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5t
YXBSZWN0KHJlbGF0aXZlQkJveCh0cnVlKSk7CiAKICAgICAvLyBNYXJrZXJzIGNhbiBleHBhbmQg
dGhlIGJvdW5kaW5nIGJveApAQCAtNDc1LDggKzQ3Niw5IEBAIEZsb2F0UmVjdCBSZW5kZXJQYXRo
OjpkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRSCiAgICAgcmV0dXJuIGJvdW5kczsKIH0KIAotSW50UmVjdCBSZW5kZXJQYXRoOjphYnNvbHV0
ZU91dGxpbmVCb3VuZHMoKSBjb25zdAorSW50UmVjdCBSZW5kZXJQYXRoOjpvdXRsaW5lQm91bmRz
Rm9yUmVwYWludChSZW5kZXJCb3gqIC8qcmVwYWludENvbnRhaW5lciovKSBjb25zdAogeworICAg
IC8vIEZJWE1FOiBoYW5kbGUgbm9uLXJvb3QgcmVwYWludENvbnRhaW5lcgogICAgIEludFJlY3Qg
cmVzdWx0ID0gbV9hYnNvbHV0ZUJvdW5kczsKICAgICBhZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNo
YWRvdyhyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJQYXRoLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmgKaW5k
ZXggOWNlNTM5Yy4uODFiNWM1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UGF0aC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguaApAQCAtNTksNyArNTks
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRyYW5z
Zm9ybSgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0
dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgdmlydHVhbCBJ
bnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENv
bnRhaW5lcik7CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoYm9vbCBiLCBib29sIGlzUm9v
dExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlv
bihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKQEAgLTczLDEwICs3
Myw5IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UmVjdCBkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFBhdGgmKSBjb25zdDsKICAgICAK
LSAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3Q7Ci0KIHBy
aXZhdGU6CiAgICAgRmxvYXRQb2ludCBtYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbChjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBh
aW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7CiAKICAgICBtdXRhYmxlIFBh
dGggbV9wYXRoOwogICAgIG11dGFibGUgRmxvYXRSZWN0IG1fZmlsbEJCb3g7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5kZXggYzU5MDBmZi4uZTc0ZTIyNyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtMzg5LDcgKzM4OSw3IEBAIEludFJlY3QgUmVuZGVy
UmVwbGFjZWQ6Om92ZXJmbG93UmVjdChib29sKSBjb25zdAogICAgIHJldHVybiBib3JkZXJCb3hS
ZWN0KCk7CiB9CiAKLUludFJlY3QgUmVuZGVyUmVwbGFjZWQ6OmFic29sdXRlQ2xpcHBlZE92ZXJm
bG93UmVjdCgpCitJbnRSZWN0IFJlbmRlclJlcGxhY2VkOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpCiB7CiAgICAgaWYgKHN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFICYmICFlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxl
Q29udGVudCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwpAQCAtMzk5LDggKzM5OSwxMSBA
QCBJbnRSZWN0IFJlbmRlclJlcGxhY2VkOjphYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKQog
ICAgIEludFJlY3QgciA9IGxvY2FsU2VsZWN0aW9uUmVjdChmYWxzZSk7CiAKICAgICBSZW5kZXJW
aWV3KiB2ID0gdmlldygpOwotICAgIGlmICh2KQorICAgIGlmICh2KSB7CisgICAgICAgIC8vIEZJ
WE1FOiBsYXlvdXREZWx0YSBuZWVkcyB0byBiZSBhcHBsaWVkIGluIHBhcnRzIGJlZm9yZS9hZnRl
ciB0cmFuc2Zvcm1zIGFuZAorICAgICAgICAvLyByZXBhaW50IGNvbnRhaW5lcnMuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMwOAogICAgICAgICByLm1vdmUodi0+
bGF5b3V0RGVsdGEoKSk7CisgICAgfQogCiAgICAgaWYgKHN0eWxlKCkpIHsKICAgICAgICAgaWYg
KHN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKQEAgLTQwOSw3ICs0MTIsNyBAQCBJbnRSZWN0IFJl
bmRlclJlcGxhY2VkOjphYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKQogICAgICAgICBpZiAo
dikKICAgICAgICAgICAgIHIuaW5mbGF0ZShzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpKTsKICAgICB9
Ci0gICAgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3Qocik7CisgICAgY29tcHV0ZVJlY3RGb3JS
ZXBhaW50KHIsIHJlcGFpbnRDb250YWluZXIpOwogICAgIHJldHVybiByOwogfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuaAppbmRleCAzMTg2NzE4Li5jODdkYjU4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
aW50IG92ZXJmbG93VG9wKGJvb2wgaW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3Q7CiAgICAg
dmlydHVhbCBJbnRSZWN0IG92ZXJmbG93UmVjdChib29sIGluY2x1ZGVJbnRlcmlvciA9IHRydWUp
IGNvbnN0OwogCi0gICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVj
dCgpOworICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChS
ZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBjYXJl
dE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0NvbnRhaW5lci5jcHAKaW5kZXggOGQ3MzMxYS4uNmUxN2MwNSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCkBAIC0zNTcsMTIgKzM1NywxMiBAQCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJTVkdDb250YWluZXI6OnZpZXdwb3J0VHJhbnNmb3JtKCkg
Y29uc3QKICAgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CiB9CiAKLUludFJlY3Qg
UmVuZGVyU1ZHQ29udGFpbmVyOjphYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKQorSW50UmVj
dCBSZW5kZXJTVkdDb250YWluZXI6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRl
ckJveCogcmVwYWludENvbnRhaW5lcikKIHsKICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3Q7CiAK
ICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudCAh
PSAwOyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcmVwYWludFJl
Y3QudW5pdGUoY3VycmVudC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpOworICAgICAg
ICByZXBhaW50UmVjdC51bml0ZShjdXJyZW50LT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChyZXBhaW50Q29udGFpbmVyKSk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZJTFRFUlMpCiAgICAgLy8g
RmlsdGVycyBjYW4gZXhwYW5kIHRoZSBib3VuZGluZyBib3gKQEAgLTQyNSw4ICs0MjUsOSBAQCBi
b29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSW50UmVjdCBS
ZW5kZXJTVkdDb250YWluZXI6OmFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0CitJbnRSZWN0
IFJlbmRlclNWR0NvbnRhaW5lcjo6b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94KiAv
KnJlcGFpbnRDb250YWluZXIqLykgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogaGFuZGxlIG5vbi1y
b290IHJlcGFpbnRDb250YWluZXIKICAgICBJbnRSZWN0IHJlc3VsdCA9IG1fYWJzb2x1dGVCb3Vu
ZHM7CiAgICAgYWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3cocmVzdWx0KTsKICAgICByZXR1
cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFp
bmVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAppbmRleCBmY2Y4
MjRiLi5lNDk4YThhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250
YWluZXIuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaApAQCAt
NzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwog
Ci0gICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOworICAg
IHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gq
IHJlcGFpbnRDb250YWluZXIpOwogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7
CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29s
IHRvcExldmVsID0gdHJ1ZSk7CiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdy
YXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKQEAgLTg5LDE0ICs4OSwxNCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbik7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29u
c3Q7Ci0KIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlDb250ZW50VHJhbnNmb3Jt
cyhQYWludEluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBZGRpdGlvbmFsVHJhbnNmb3Jt
cyhQYWludEluZm8mKTsKIAogICAgIHZvaWQgY2FsY0JvdW5kcygpOwogCisgICAgdmlydHVhbCBJ
bnRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRlckJveCogLypyZXBhaW50Q29udGFp
bmVyKi8pIGNvbnN0OworCiBwcml2YXRlOgogICAgIGludCBjYWxjUmVwbGFjZWRXaWR0aCgpIGNv
bnN0OwogICAgIGludCBjYWxjUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCmluZGV4IGUxNmM0M2MuLjIzYWUx
M2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNw
cApAQCAtNzEsNyArNzEsNyBAQCB2b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6cGFpbnQo
UGFpbnRJbmZvJiwgaW50LCBpbnQpCiAgICAgLy8gVGhpcyBzdWJ0cmVlIGRvZXMgbm90IHBhaW50
LgogfQogCi1JbnRSZWN0IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6YWJzb2x1dGVDbGlwcGVk
T3ZlcmZsb3dSZWN0KCkKK0ludFJlY3QgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpjbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIC8qcmVwYWludENvbnRhaW5lciovKQog
ewogICAgIHJldHVybiBJbnRSZWN0KCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oCmluZGV4IDM1YzFmODguLjI4MmUzZjMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCkBAIC01MSw3ICs1MSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KTsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgSW50UmVjdCBhYnNvbHV0ZUNsaXBwZWRPdmVy
Zmxvd1JlY3QoKTsKKyAgICAgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lcik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5
LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCB0b3BMZXZlbCA9IHRydWUpOwogICAgICAgICAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAppbmRleCA4ZTY4NTYyLi41MDM2NjNhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCkBAIC0yNDksOCArMjQ5LDkgQEAgdm9p
ZCBSZW5kZXJTVkdJbWFnZTo6Y2FsY3VsYXRlQWJzb2x1dGVCb3VuZHMoKQogICAgIG1fYWJzb2x1
dGVCb3VuZHMgPSBlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUmVjdCk7CiB9CiAKLUludFJlY3Qg
UmVuZGVyU1ZHSW1hZ2U6OmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpCitJbnRSZWN0IFJl
bmRlclNWR0ltYWdlOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIC8q
cmVwYWludENvbnRhaW5lciovKQogeworICAgIC8vIEZJWE1FOiBoYW5kbGUgbm9uLXJvb3QgcmVw
YWludENvbnRhaW5lcgogICAgIHJldHVybiBtX2Fic29sdXRlQm91bmRzOwogfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW1hZ2UuaAppbmRleCBmNWExOGQxLi5jYjQ0MGQyIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0ltYWdlLmgKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogICAgICAgICAKICAgICAgICAgdmlydHVh
bCBGbG9hdFJlY3QgcmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChS
ZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1
dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSwgYm9vbCB0b3BMZXZlbCA9
IHRydWUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRR
dWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGFkZEZv
Y3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5kZXggNjQzODIzNi4uNTRhMzBkZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUm9vdC5jcHAKQEAgLTIzMSwxMiArMjMxLDEyIEBAIHZvaWQgUmVuZGVyU1ZH
Um9vdDo6Y2FsY1ZpZXdwb3J0KCkKICAgICB9CiB9CiAKLUludFJlY3QgUmVuZGVyU1ZHUm9vdDo6
YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkKK0ludFJlY3QgUmVuZGVyU1ZHUm9vdDo6Y2xp
cHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyKQog
ewogICAgIEludFJlY3QgcmVwYWludFJlY3Q7CiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3Vy
cmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudCAhPSAwOyBjdXJyZW50ID0gY3VycmVudC0+bmV4
dFNpYmxpbmcoKSkKLSAgICAgICAgcmVwYWludFJlY3QudW5pdGUoY3VycmVudC0+YWJzb2x1dGVD
bGlwcGVkT3ZlcmZsb3dSZWN0KCkpOworICAgICAgICByZXBhaW50UmVjdC51bml0ZShjdXJyZW50
LT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKSk7CiAKICNp
ZiBFTkFCTEUoU1ZHX0ZJTFRFUlMpCiAgICAgLy8gRmlsdGVycyBjYW4gZXhwYW5kIHRoZSBib3Vu
ZGluZyBib3gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAppbmRleCBhY2FjNzhiLi4wNDhmYzhi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CiAgICAgCi0gICAgdmlydHVhbCBJbnRS
ZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOworICAgIHZpcnR1YWwgSW50UmVjdCBj
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIp
OwogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8
RmxvYXRRdWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdUZXh0LmNwcAppbmRleCAxZmUyYjNiLi5lZTVhYjM0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdUZXh0LmNwcApAQCAtNDksOCArNDksOSBAQCBSZW5kZXJTVkdUZXh0OjpS
ZW5kZXJTVkdUZXh0KFNWR1RleHRFbGVtZW50KiBub2RlKQogewogfQogCi1JbnRSZWN0IFJlbmRl
clNWR1RleHQ6OmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpCitJbnRSZWN0IFJlbmRlclNW
R1RleHQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveCogLypyZXBhaW50
Q29udGFpbmVyKi8pCiB7CisgICAgLy8gRklYTUU6IGhhbmRsZSBub24tcm9vdCByZXBhaW50Q29u
dGFpbmVyCiAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5t
YXBSZWN0KHJlbGF0aXZlQkJveCh0cnVlKSk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZJTFRFUlMpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdUZXh0LmgKaW5kZXggNDE4NmMwMy4uNDU5MmY0ZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5oCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1RleHQuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHksIGJv
b2wgdG9wTGV2ZWwgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYsIGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKIAotICAgIHZpcnR1YWwgSW50
UmVjdCBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKKyAgICB2aXJ0dWFsIEludFJlY3Qg
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVy
KTsKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tl
ID0gdHJ1ZSkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGlu
ZUJveChib29sIG1ha2VQbGFjZUhvbGRlckJveCwgYm9vbCBpc1Jvb3RMaW5lQm94LCBib29sIGlz
T25seVJ1biA9IGZhbHNlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCmluZGV4
IGM4Njk1NGEuLmE4NDMxMzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcApA
QCAtMTUzLDE0ICsxNTMsMTQgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnNldE92ZXJyaWRlU2l6
ZShpbnQgc2l6ZSkKICAgICBSZW5kZXJCbG9jazo6c2V0T3ZlcnJpZGVTaXplKHNpemUpOwogfQog
Ci1JbnRSZWN0IFJlbmRlclRhYmxlQ2VsbDo6YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkK
K0ludFJlY3QgUmVuZGVyVGFibGVDZWxsOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChS
ZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpCiB7CiAgICAgLy8gSWYgdGhlIHRhYmxlIGdyaWQg
aXMgZGlydHksIHdlIGNhbm5vdCBnZXQgcmVsaWFibGUgaW5mb3JtYXRpb24gYWJvdXQgYWRqb2lu
aW5nIGNlbGxzLAogICAgIC8vIHNvIHdlIGlnbm9yZSBvdXRzaWRlIGJvcmRlcnMuIFRoaXMgc2hv
dWxkIG5vdCBiZSBhIHByb2JsZW0gYmVjYXVzZSBpdCBtZWFucyB0aGF0CiAgICAgLy8gdGhlIHRh
YmxlIGlzIGdvaW5nIHRvIHJlY2FsY3VsYXRlIHRoZSBncmlkLCByZWxheW91dCBhbmQgcmVwYWlu
dCBpdHMgY3VycmVudCByZWN0LCB3aGljaAogICAgIC8vIGluY2x1ZGVzIGFueSBvdXRzaWRlIGJv
cmRlcnMgb2YgdGhpcyBjZWxsLgogICAgIGlmICghdGFibGUoKS0+Y29sbGFwc2VCb3JkZXJzKCkg
fHwgdGFibGUoKS0+bmVlZHNTZWN0aW9uUmVjYWxjKCkpCi0gICAgICAgIHJldHVybiBSZW5kZXJC
bG9jazo6YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgICAgIHJldHVybiBSZW5k
ZXJCbG9jazo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7
CiAKICAgICBib29sIHJ0bCA9IHRhYmxlKCktPnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTDsK
ICAgICBpbnQgb3V0bGluZVNpemUgPSBzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpOwpAQCAtMTk2LDIw
ICsxOTYsMjQgQEAgSW50UmVjdCBSZW5kZXJUYWJsZUNlbGw6OmFic29sdXRlQ2xpcHBlZE92ZXJm
bG93UmVjdCgpCiAgICAgdG9wID0gbWF4KHRvcCwgLW92ZXJmbG93VG9wKGZhbHNlKSk7CiAgICAg
SW50UmVjdCByKC1sZWZ0LCAtIHRvcCwgbGVmdCArIG1heCh3aWR0aCgpICsgcmlnaHQsIG92ZXJm
bG93V2lkdGgoZmFsc2UpKSwgdG9wICsgbWF4KGhlaWdodCgpICsgYm90dG9tLCBvdmVyZmxvd0hl
aWdodChmYWxzZSkpKTsKIAotICAgIGlmIChSZW5kZXJWaWV3KiB2ID0gdmlldygpKQorICAgIGlm
IChSZW5kZXJWaWV3KiB2ID0gdmlldygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBsYXlvdXREZWx0
YSBuZWVkcyB0byBiZSBhcHBsaWVkIGluIHBhcnRzIGJlZm9yZS9hZnRlciB0cmFuc2Zvcm1zIGFu
ZAorICAgICAgICAvLyByZXBhaW50IGNvbnRhaW5lcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzMwOAogICAgICAgICByLm1vdmUodi0+bGF5b3V0RGVsdGEoKSk7
Ci0KLSAgICBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyKTsKKyAgICB9CisgICAgY29tcHV0
ZVJlY3RGb3JSZXBhaW50KHIsIHJlcGFpbnRDb250YWluZXIpOwogICAgIHJldHVybiByOwogfQog
Ci12b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoSW50UmVj
dCYgciwgYm9vbCBmaXhlZCkKK3ZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlUmVjdEZvclJl
cGFpbnQoSW50UmVjdCYgciwgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVk
KQogeworICAgIGlmIChyZXBhaW50Q29udGFpbmVyID09IHRoaXMpCisgICAgICAgIHJldHVybjsK
ICAgICByLnNldFkoci55KCkpOwogICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CiAgICAgaWYg
KCghdiB8fCAhdi0+bGF5b3V0U3RhdGVFbmFibGVkKCkpICYmIHBhcmVudCgpKQogICAgICAgICBy
Lm1vdmUoLXBhcmVudEJveCgpLT54KCksIC1wYXJlbnRCb3goKS0+eSgpKTsgLy8gUm93cyBhcmUg
aW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRoZWlyIG9mZnNldCBp
bi4KLSAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QociwgZml4ZWQp
OworICAgIFJlbmRlckJsb2NrOjpjb21wdXRlUmVjdEZvclJlcGFpbnQociwgcmVwYWludENvbnRh
aW5lciwgZml4ZWQpOwogfQogCiBGbG9hdFBvaW50IFJlbmRlclRhYmxlQ2VsbDo6bG9jYWxUb0Fi
c29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zv
cm1zKSBjb25zdApAQCAtMjMyLDE0ICsyMzYsMTcgQEAgRmxvYXRQb2ludCBSZW5kZXJUYWJsZUNl
bGw6OmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGUK
ICAgICByZXR1cm4gbG9jYWxQb2ludDsKIH0KIAotRmxvYXRRdWFkIFJlbmRlclRhYmxlQ2VsbDo6
bG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmIGxvY2FsUXVhZCwgYm9vbCBmaXhl
ZCkgY29uc3QKK0Zsb2F0UXVhZCBSZW5kZXJUYWJsZUNlbGw6OmxvY2FsVG9Db250YWluZXJRdWFk
KGNvbnN0IEZsb2F0UXVhZCYgbG9jYWxRdWFkLCBSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIs
IGJvb2wgZml4ZWQpIGNvbnN0CiB7CisgICAgaWYgKHJlcGFpbnRDb250YWluZXIgPT0gdGhpcykK
KyAgICAgICAgcmV0dXJuIGxvY2FsUXVhZDsKKwogICAgIEZsb2F0UXVhZCBxdWFkID0gbG9jYWxR
dWFkOwogICAgIGlmIChwYXJlbnQoKSkgewogICAgICAgICAvLyBSb3dzIGFyZSBpbiB0aGUgc2Ft
ZSBjb29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgogICAgICAg
ICBxdWFkLm1vdmUoLXBhcmVudEJveCgpLT54KCksIC1wYXJlbnRCb3goKS0+eSgpKTsKICAgICB9
Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpsb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWQsIGZpeGVk
KTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmxvY2FsVG9Db250YWluZXJRdWFkKHF1YWQsIHJl
cGFpbnRDb250YWluZXIsIGZpeGVkKTsKIH0KIAogaW50IFJlbmRlclRhYmxlQ2VsbDo6YmFzZWxp
bmVQb3NpdGlvbihib29sIC8qZmlyc3RMaW5lKi8sIGJvb2wgLyppc1Jvb3RMaW5lQm94Ki8pIGNv
bnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCmluZGV4IDRhM2JiYzguLjc1ZjEzODgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCkBAIC05NCwxMSArOTQsMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgcGFpbnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiwgaW50
IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwogICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kc0JlaGlu
ZENlbGwoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHksIFJlbmRlck9iamVjdCogYmFja2dyb3Vu
ZE9iamVjdCk7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dS
ZWN0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJl
Y3QmLCBib29sIGZpeGVkID0gZmFsc2UpOworICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpOworICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoSW50UmVjdCYsIFJlbmRlckJveCogcmVw
YWludENvbnRhaW5lciwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIEZsb2F0UG9p
bnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQoKSwg
Ym9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7CiAg
ICAgdmlydHVhbCBGbG9hdFBvaW50IGFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50IGNvbnRhaW5l
clBvaW50LCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNlKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEZsb2F0UXVhZCBsb2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZs
b2F0UXVhZCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBi
YXNlbGluZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lID0gZmFsc2UsIGJvb2wgaXNSb290TGluZUJv
eCA9IGZhbHNlKSBjb25zdDsKIApAQCAtMTE5LDYgKzExOCw4IEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFJlbmRlclN0eWxlOjpEaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSogbmV3U3R5bGUpOwogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShSZW5k
ZXJTdHlsZTo6RGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAorICAgIHZpcnR1
YWwgRmxvYXRRdWFkIGxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIFJlbmRl
ckJveCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKKwogcHJp
dmF0ZToKICAgICBpbnQgbV9yb3c7CiAgICAgaW50IG1fY29sdW1uOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuY3BwCmluZGV4IDVjMmEwNDkuLjE5NTM4ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNvbC5jcHAKQEAgLTY5LDExICs2OSwxMiBAQCBib29sIFJlbmRlclRhYmxlQ29s
OjpjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdAogICAgIHJldHVybiBzdHlsZSgpLT5kaXNwbGF5KCkg
PT0gVEFCTEVfQ09MVU1OX0dST1VQOwogfQogCi1JbnRSZWN0IFJlbmRlclRhYmxlQ29sOjphYnNv
bHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKQorSW50UmVjdCBSZW5kZXJUYWJsZUNvbDo6Y2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiAvKnJlcGFpbnRDb250YWluZXIqLykK
IHsKICAgICAvLyBGb3Igbm93LCBqdXN0IHJlcGFpbnQgdGhlIHdob2xlIHRhYmxlLgogICAgIC8v
IEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCBlLmcuLCBuZWVkIHRvIHJlcGFp
bnQgYWxsIHRoZSBjZWxscyB0aGF0IHdlCiAgICAgLy8gbWlnaHQgaGF2ZSBwcm9wYWdhdGVkIGEg
YmFja2dyb3VuZCBjb2xvciBvciBib3JkZXJzIGludG8uCisgICAgLy8gRklYTUU6IGNoZWNrIGZv
ciByZXBhaW50Q29udGFpbmVyIGVhY2ggdGltZSBoZXJlPwogICAgIFJlbmRlck9iamVjdCogdGFi
bGUgPSBwYXJlbnQoKTsKICAgICBpZiAodGFibGUgJiYgIXRhYmxlLT5pc1RhYmxlKCkpCiAgICAg
ICAgIHRhYmxlID0gdGFibGUtPnBhcmVudCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDb2wuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgK
aW5kZXggYWYxYTBiMS4uMzQ3Mjk2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5oCkBA
IC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVu
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93
UmVjdCgpOworICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpOwogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNo
YW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwogCiAgICAgaW50IHNw
YW4oKSBjb25zdCB7IHJldHVybiBtX3NwYW47IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlUm93LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmNwcAppbmRleCA0ZmYyMTIzLi42YjgzNzY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVJvdy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVS
b3cuY3BwCkBAIC0xNjEsMTMgKzE2MSwxNCBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjpsYXlvdXQo
KQogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIAotSW50UmVjdCBSZW5kZXJUYWJsZVJv
dzo6YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkKK0ludFJlY3QgUmVuZGVyVGFibGVSb3c6
OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5l
cikKIHsKICAgICAvLyBGb3Igbm93LCBqdXN0IHJlcGFpbnQgdGhlIHdob2xlIHRhYmxlLgogICAg
IC8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCBlLmcuLCBuZWVkIHRvIHJl
cGFpbnQgYWxsIHRoZSBjZWxscyB0aGF0IHdlCiAgICAgLy8gbWlnaHQgaGF2ZSBwcm9wYWdhdGVk
IGEgYmFja2dyb3VuZCBjb2xvciBpbnRvLgorICAgIC8vIEZJWE1FOiBkbyByZXBhaW50Q29udGFp
bmVyIGNoZWNrcyBoZXJlCiAgICAgaWYgKFJlbmRlclRhYmxlKiBwYXJlbnRUYWJsZSA9IHRhYmxl
KCkpCi0gICAgICAgIHJldHVybiBwYXJlbnRUYWJsZS0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dS
ZWN0KCk7CisgICAgICAgIHJldHVybiBwYXJlbnRUYWJsZS0+Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CiAKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKaW5kZXggNjEzOWQzNS4uNzlkMzJkOCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCkBAIC00OSw3ICs0OSw3IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBpbnQgbGluZUhlaWdodChib29sLCBib29sKSBjb25zdCB7IHJldHVybiAwOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uKElubGluZUJveCopIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dS
ZWN0KCk7CisgICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50
KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lcik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgLy8gVGhlIG9ubHkgdGltZSBy
b3dzIGdldCBhIGxheWVyIGlzIHdoZW4gdGhleSBoYXZlIHRyYW5zcGFyZW5jeS4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAKaW5kZXggYzY0MDFjMy4uMDg0YmU3MSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHAKQEAgLTEwNzAsMTAgKzEwNzAsMTAgQEAgSW50UmVjdCBSZW5kZXJUZXh0OjpsaW5l
c0JvdW5kaW5nQm94KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1JbnRSZWN0IFJl
bmRlclRleHQ6OmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpCitJbnRSZWN0IFJlbmRlclRl
eHQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRh
aW5lcikKIHsKICAgICBSZW5kZXJPYmplY3QqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAg
cmV0dXJuIGNiLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKKyAgICByZXR1cm4gY2It
PmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwogfQogCiBJ
bnRSZWN0IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3QoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVu
dCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaAppbmRleCA3NzM2ZjFhLi42YTA5NjA1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5oCkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50
IG1hcmdpbkxlZnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkuY2FsY01p
blZhbHVlKDApOyB9CiAgICAgdmlydHVhbCBpbnQgbWFyZ2luUmlnaHQoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5tYXJnaW5SaWdodCgpLmNhbGNNaW5WYWx1ZSgwKTsgfQogCi0gICAgdmlydHVh
bCBJbnRSZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOworICAgIHZpcnR1YWwgSW50
UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250
YWluZXIpOwogCiAgICAgSW5saW5lVGV4dEJveCogZmlyc3RUZXh0Qm94KCkgY29uc3QgeyByZXR1
cm4gbV9maXJzdFRleHRCb3g7IH0KICAgICBJbmxpbmVUZXh0Qm94KiBsYXN0VGV4dEJveCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGFzdFRleHRCb3g7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5k
ZXggYjM4NDVjNC4uYzZlZGQ1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTE0Myw4
ICsxNDMsMTIgQEAgRmxvYXRQb2ludCBSZW5kZXJWaWV3OjphYnNvbHV0ZVRvTG9jYWwoRmxvYXRQ
b2ludCBjb250YWluZXJQb2ludCwgYm9vbCBmaXhlZCwgYm8KICAgICByZXR1cm4gY29udGFpbmVy
UG9pbnQ7CiB9CiAKLUZsb2F0UXVhZCBSZW5kZXJWaWV3Ojpsb2NhbFRvQWJzb2x1dGVRdWFkKGNv
bnN0IEZsb2F0UXVhZCYgbG9jYWxRdWFkLCBib29sIGZpeGVkKSBjb25zdAorRmxvYXRRdWFkIFJl
bmRlclZpZXc6OmxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEZsb2F0UXVhZCYgbG9jYWxRdWFk
LCBSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQpIGNvbnN0CiB7CisgICAg
Ly8gSWYgYSBjb250YWluZXIgd2FzIHNwZWNpZmllZCwgYW5kIHdhcyBub3QgMCBvciB0aGUgUmVu
ZGVyVmlldywKKyAgICAvLyB0aGVuIHdlIHNob3VsZCBoYXZlIGZvdW5kIGl0IGJ5IG5vdy4KKyAg
ICBBU1NFUlRfVU5VU0VEKHJlcGFpbnRDb250YWluZXIsICFyZXBhaW50Q29udGFpbmVyIHx8IHJl
cGFpbnRDb250YWluZXIgPT0gdGhpcyk7CisKICAgICBGbG9hdFF1YWQgcXVhZCA9IGxvY2FsUXVh
ZDsKICAgICBpZiAoZml4ZWQgJiYgbV9mcmFtZVZpZXcpCiAgICAgICAgIHF1YWQgKz0gbV9mcmFt
ZVZpZXctPnNjcm9sbE9mZnNldCgpOwpAQCAtMjM2LDggKzI0MCwxMiBAQCB2b2lkIFJlbmRlclZp
ZXc6OnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHVyLCBib29sIGltbWVkaWF0
ZSkKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJl
Y3QoSW50UmVjdCYgcmVjdCwgYm9vbCBmaXhlZCkKK3ZvaWQgUmVuZGVyVmlldzo6Y29tcHV0ZVJl
Y3RGb3JSZXBhaW50KEludFJlY3QmIHJlY3QsIFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwg
Ym9vbCBmaXhlZCkKIHsKKyAgICAvLyBJZiBhIGNvbnRhaW5lciB3YXMgc3BlY2lmaWVkLCBhbmQg
d2FzIG5vdCAwIG9yIHRoZSBSZW5kZXJWaWV3LAorICAgIC8vIHRoZW4gd2Ugc2hvdWxkIGhhdmUg
Zm91bmQgaXQgYnkgbm93LgorICAgIEFTU0VSVF9VTlVTRUQocmVwYWludENvbnRhaW5lciwgIXJl
cGFpbnRDb250YWluZXIgfHwgcmVwYWludENvbnRhaW5lciA9PSB0aGlzKTsKKwogICAgIGlmIChw
cmludGluZygpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCA0
NGQwMTJhLi44ZTdiZjk1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC00Niw3ICs0Niw2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKICAgICB2aXJ0dWFs
IEZsb2F0UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0
UG9pbnQoKSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkg
Y29uc3Q7CiAgICAgdmlydHVhbCBGbG9hdFBvaW50IGFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50
IGNvbnRhaW5lclBvaW50LCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9
IGZhbHNlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEZsb2F0UXVhZCBsb2NhbFRvQWJzb2x1dGVRdWFk
KGNvbnN0IEZsb2F0UXVhZCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CiAgICAgCiAgICAg
aW50IGRvY0hlaWdodCgpIGNvbnN0OwogICAgIGludCBkb2NXaWR0aCgpIGNvbnN0OwpAQCAtNjEs
NyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3ZlcmhhbmdpbmdGbG9h
dHMoKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0
ZVJlcGFpbnRSZWN0KEludFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpOworICAgIHZpcnR1YWwg
dm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoSW50UmVjdCYsIFJlbmRlckJveCogcmVwYWludENv
bnRhaW5lciwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludFZp
ZXdSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKQEAgLTE0
NSw2ICsxNDQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNhYmxlTGF5b3V0U3RhdGUoKSB7IG1f
bGF5b3V0U3RhdGVEaXNhYmxlQ291bnQrKzsgfQogICAgIHZvaWQgZW5hYmxlTGF5b3V0U3RhdGUo
KSB7IEFTU0VSVChtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50ID4gMCk7IG1fbGF5b3V0U3RhdGVE
aXNhYmxlQ291bnQtLTsgfQogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBGbG9hdFF1YWQgbG9j
YWxUb0NvbnRhaW5lclF1YWQoY29uc3QgRmxvYXRRdWFkJiwgUmVuZGVyQm94KiByZXBhaW50Q29u
dGFpbmVyLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OworCiBwcml2YXRlOgogICAgIC8vIHNl
bGVjdGlvblJlY3Qgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvbiBhIFJlbmRlclZpZXcKICAgICB2
aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdChib29sKTsK
</data>
<flag name="review"
          id="12988"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27069</attachid>
            <date>2009-01-26 23:53:42 -0800</date>
            <delta_ts>2009-01-27 11:00:17 -0800</delta_ts>
            <desc>Phase 2 patch: use the new container-relative repaint rects.</desc>
            <filename>23360_patch_phase_2.txt</filename>
            <type>text/plain</type>
            <size>28090</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjFjMjFhNS4uYTU2NzYwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw1OSBAQAogMjAwOS0wMS0yNiAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzNjAKKyAgICAgICAgCisgICAgICAgIFVzZSB0aGUgbmV3IGNvbnRhaW5lci1yZWxhdGl2
ZSByZXBhaW50IG1ldGhvZHMgdG8gY29tcHV0ZQorICAgICAgICBwb3N0LWxheW91dCByZXBhaW50
cywgYW5kIHJlcGFpbnRzIHVzaW5nIFJlbmRlckxheWVyJ3MKKyAgICAgICAgY2FjaGVkIHJlcGFp
bnRSZWN0KCkgcmVsYXRpdmUgdG8gdGhhdCBjb250YWluZXIsIHJhdGhlciB0aGFuCisgICAgICAg
IHVzaW5nIGFic29sdXRlIGNvb3Jkcy4KKworICAgICAgICBSZXBsYWNlZCBsb3RzIG9mIGJvaWxl
cnBsYXRlIG9sZC9uZXcgcmVjdCBjb2RlIGluIHZhcmlvdXMKKyAgICAgICAgbGF5b3V0IG1ldGhv
ZHMgd2l0aCBhIHN0YWNrLWJhc2VkIExheW91dFJlcGFpbnRlciBjbGFzcywgYW5kCisgICAgICAg
IGZpeGVkIGEgYnVnIGluIFJlbmRlclRhYmxlIHdoaWNoIHNldCBkaWRGdWxsUmVwYWludCB0bwor
ICAgICAgICAndHJ1ZScgZXZlcnkgdGltZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2spOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVp
Z25PYmplY3Q6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0SGFzVmlzaWJsZUNvbnRlbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpyZXBhaW50Vmlh
Q29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlcGFpbnRSZWN0YW5nbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpMYXlvdXRSZXBhaW50ZXI6OkxheW91dFJlcGFpbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OkxheW91dFJlcGFpbnRlcjo6cmVwYWludEFmdGVyTGF5b3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6TGF5b3V0UmVwYWludGVyOjpjaGVj
a0ZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXRoLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpsYXlv
dXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFn
ZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Omxh
eW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpsYXlvdXQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvYmlkaS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorCisy
MDA5LTAxLTI2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQKIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNjAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRl
eCBjZDlkNzU0Li5jMmM4MzgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC02MTEs
MTQgKzYxMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbikKICAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4gJiYgbGF5b3V0T25seVBvc2l0aW9u
ZWRPYmplY3RzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3Qgb2xkQm91bmRzOwot
ICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IG1f
ZXZlckhhZExheW91dCAmJiBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKTsKLSAgICBpZiAo
Y2hlY2tGb3JSZXBhaW50KSB7Ci0gICAgICAgIG9sZEJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92
ZXJmbG93UmVjdCgpOwotICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91
bmRzKCk7Ci0gICAgfQotCisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9l
dmVySGFkTGF5b3V0KTsKICAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmll
dygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgbV9oYXNDb2x1bW5zIHx8IGhhc1RyYW5zZm9y
bSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7CiAKICAgICBpbnQgb2xkV2lkdGggPSB3aWR0aCgpOwpA
QCAtNzQ5LDkgKzc0Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbikKICAgICAgICAgbV9sYXllci0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCk7CiAKICAgICAvLyBSZXBhaW50IHdpdGggb3VyIG5ldyBib3VuZHMgaWYgdGhleSBhcmUg
ZGlmZmVyZW50IGZyb20gb3VyIG9sZCBib3VuZHMuCi0gICAgYm9vbCBkaWRGdWxsUmVwYWludCA9
IGZhbHNlOwotICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCi0gICAgICAgIGRpZEZ1bGxSZXBhaW50
ID0gcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94KTsK
KyAgICBib29sIGRpZEZ1bGxSZXBhaW50ID0gcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgp
OwogICAgIGlmICghZGlkRnVsbFJlcGFpbnQgJiYgcmVwYWludFRvcCAhPSByZXBhaW50Qm90dG9t
ICYmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSB8fCBlbmNsb3NpbmdMYXllcigp
LT5oYXNWaXNpYmxlQ29udGVudCgpKSkgewogICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KG1f
b3ZlcmZsb3dMZWZ0LCByZXBhaW50VG9wLCBtX292ZXJmbG93V2lkdGggLSBtX292ZXJmbG93TGVm
dCwgcmVwYWludEJvdHRvbSAtIHJlcGFpbnRUb3ApOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHAKaW5kZXggYzQwZmI3NS4uOGY4YWFjYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmNwcApAQCAtMjAwLDE0ICsyMDAsNyBAQCB2b2lkIFJlbmRlckZs
ZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgaWYgKCFy
ZWxheW91dENoaWxkcmVuICYmIGxheW91dE9ubHlQb3NpdGlvbmVkT2JqZWN0cygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBJbnRSZWN0IG9sZEJvdW5kczsKLSAgICBJbnRSZWN0IG9sZE91dGxp
bmVCb3g7Ci0gICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJlcGFpbnREdXJpbmdM
YXlvdXQoKTsKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KSB7Ci0gICAgICAgIG9sZEJvdW5kcyA9
IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwotICAgICAgICBvbGRPdXRsaW5lQm94ID0g
YWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7Ci0gICAgfQotCisgICAgTGF5b3V0UmVwYWludGVyIHJl
cGFpbnRlcigqdGhpcyk7CiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZp
ZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHkoKSksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxl
Y3Rpb24oKSk7CiAKICAgICBpbnQgcHJldmlvdXNXaWR0aCA9IHdpZHRoKCk7CkBAIC0zMDIsOCAr
Mjk1LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91
dENoaWxkcmVuKQogICAgICAgICBtX2xheWVyLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQo
KTsKIAogICAgIC8vIFJlcGFpbnQgd2l0aCBvdXIgbmV3IGJvdW5kcyBpZiB0aGV5IGFyZSBkaWZm
ZXJlbnQgZnJvbSBvdXIgb2xkIGJvdW5kcy4KLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQotICAg
ICAgICByZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChvbGRCb3VuZHMsIG9sZE91dGxpbmVCb3gp
OworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKICAgICAKICAgICBzZXROZWVk
c0xheW91dChmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
b3JlaWduT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3Qu
Y3BwCmluZGV4IDUyMzYwMWMuLjhiZDk1ZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZv
cmVpZ25PYmplY3QuY3BwCkBAIC05MiwxMyArOTIsOCBAQCB2b2lkIFJlbmRlckZvcmVpZ25PYmpl
Y3Q6OmxheW91dCgpCiAgICAgLy8gQXJiaXRyYXJ5IGFmZmluZSB0cmFuc2Zvcm1zIGFyZSBpbmNv
bXBhdGlibGUgd2l0aCBMYXlvdXRTdGF0ZS4KICAgICB2aWV3KCktPmRpc2FibGVMYXlvdXRTdGF0
ZSgpOwogCi0gICAgSW50UmVjdCBvbGRCb3VuZHM7Ci0gICAgSW50UmVjdCBvbGRPdXRsaW5lQm94
OwotICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0
KCk7Ci0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkgewotICAgICAgICBvbGRCb3VuZHMgPSBtX2Fi
c29sdXRlQm91bmRzOwotICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91
bmRzKCk7Ci0gICAgfQorICAgIC8vIEZJWE1FOiB1c2luZyBtX2Fic29sdXRlQm91bmRzIGJyZWFr
cyBpZiBjb250YWluZXJGb3JSZXBhaW50KCkgaXMgbm90IHRoZSByb290CisgICAgTGF5b3V0UmVw
YWludGVyIHJlcGFpbnRlcigqdGhpcywgJm1fYWJzb2x1dGVCb3VuZHMpOwogICAgIAogICAgIGNh
bGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7CiAgICAgCkBAIC0xMDYsOCArMTAxLDcgQEAgdm9pZCBS
ZW5kZXJGb3JlaWduT2JqZWN0OjpsYXlvdXQoKQogCiAgICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGFi
c29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwogCi0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkK
LSAgICAgICAgcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5l
Qm94KTsKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CiAKICAgICB2aWV3KCkt
PmVuYWJsZUxheW91dFN0YXRlKCk7CiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGJlMDc0YmUuLjc1NTNjZjEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKQEAgLTIzMSwxNiArMjMxLDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zKGJvb2wgZG9GdWxsUmVwYWludCwgYm9vbCBjaGVja0ZvclJlcGFp
bnQpCiAgICAgICAgIC8vIGZyb20gdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkuCiAgICAg
ICAgIEFTU0VSVCghdmlldy0+bGF5b3V0U3RhdGVFbmFibGVkKCkpOwogCi0gICAgICAgIEludFJl
Y3QgbmV3UmVjdCA9IHJlbmRlcmVyKCktPmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwot
ICAgICAgICBJbnRSZWN0IG5ld091dGxpbmVCb3ggPSByZW5kZXJlcigpLT5hYnNvbHV0ZU91dGxp
bmVCb3VuZHMoKTsKKyAgICAgICAgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVy
ZXIoKS0+Y29udGFpbmVyRm9yUmVwYWludCgpOworICAgICAgICBJbnRSZWN0IG5ld1JlY3QgPSBy
ZW5kZXJlcigpLT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVy
KTsKKyAgICAgICAgSW50UmVjdCBuZXdPdXRsaW5lQm94ID0gcmVuZGVyZXIoKS0+b3V0bGluZUJv
dW5kc0ZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CiAgICAgICAgIGlmIChjaGVja0ZvclJl
cGFpbnQpIHsKICAgICAgICAgICAgIGlmICh2aWV3ICYmICF2aWV3LT5wcmludGluZygpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fbmVlZHNGdWxsUmVwYWludCkgewotICAgICAgICAgICAgICAg
ICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3RhbmdsZShtX3JlcGFpbnRSZWN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFp
bmVyLCBtX3JlcGFpbnRSZWN0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1JlY3QgIT0g
bV9yZXBhaW50UmVjdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpZXctPnJlcGFpbnRWaWV3
UmVjdGFuZ2xlKG5ld1JlY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+
cmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBuZXdSZWN0KTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludEFm
dGVyTGF5b3V0SWZOZWVkZWQobV9yZXBhaW50UmVjdCwgbV9vdXRsaW5lQm94KTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQocmVwYWlu
dENvbnRhaW5lciwgbV9yZXBhaW50UmVjdCwgbV9vdXRsaW5lQm94KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gbmV3UmVjdDsKQEAgLTI4OCw4ICsy
ODksOSBAQCB2b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWaXNpYmxlQ29udGVudChib29sIGIpCiAg
ICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7IAogICAgIG1faGFzVmlzaWJs
ZUNvbnRlbnQgPSBiOwogICAgIGlmIChtX2hhc1Zpc2libGVDb250ZW50KSB7Ci0gICAgICAgIG1f
cmVwYWludFJlY3QgPSByZW5kZXJlcigpLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsK
LSAgICAgICAgbV9vdXRsaW5lQm94ID0gcmVuZGVyZXIoKS0+YWJzb2x1dGVPdXRsaW5lQm91bmRz
KCk7CisgICAgICAgIFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCktPmNv
bnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAgICAgbV9yZXBhaW50UmVjdCA9IHJlbmRlcmVyKCkt
PmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworICAgICAg
ICBtX291dGxpbmVCb3ggPSByZW5kZXJlcigpLT5vdXRsaW5lQm91bmRzRm9yUmVwYWludChyZXBh
aW50Q29udGFpbmVyKTsKICAgICAgICAgaWYgKCFpc092ZXJmbG93T25seSgpKQogICAgICAgICAg
ICAgZGlydHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cygpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCmluZGV4IDU0YzE1ZTkuLmZlNDMzZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aApAQCAtMzU4LDYgKzM1OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlSG92ZXJBY3Rp
dmVTdGF0ZShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKIAorICAgIC8v
IFJldHVybiBhIGNhY2hlZCByZXBhaW50IHJlY3QsIGNvbXB1dGVkIHJlbGF0aXZlIHRvIHRoZSBs
YXllciByZW5kZXJlcidzIGNvbnRhaW5lckZvclJlcGFpbnQuCiAgICAgSW50UmVjdCByZXBhaW50
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0KICAgICB2b2lkIHNldE5lZWRz
RnVsbFJlcGFpbnQoYm9vbCBmID0gdHJ1ZSkgeyBtX25lZWRzRnVsbFJlcGFpbnQgPSBmOyB9CiAg
ICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBiYmRiZjUxLi45ZWQyZWViIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTE2NTAsNiArMTY1MCwxNyBAQCBSZW5k
ZXJCb3gqIFJlbmRlck9iamVjdDo6Y29udGFpbmVyRm9yUmVwYWludCgpIGNvbnN0CiAgICAgcmV0
dXJuIDA7CiB9CiAKK3ZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50VmlhQ29udGFpbmVyKFJlbmRl
ckJveCogcmVwYWludENvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUp
Cit7CisgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyIHx8IHJlcGFpbnRDb250YWluZXItPmlzUmVu
ZGVyVmlldygpKSB7CisgICAgICAgIFJlbmRlclZpZXcqIHYgPSByZXBhaW50Q29udGFpbmVyID8g
c3RhdGljX2Nhc3Q8UmVuZGVyVmlldyo+KHJlcGFpbnRDb250YWluZXIpIDogdmlldygpOworICAg
ICAgICB2LT5yZXBhaW50Vmlld1JlY3RhbmdsZShyLCBpbW1lZGlhdGUpOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIEhhbmRsZSBjb250YWluZXItcmVsYXRpdmUgcmVwYWludHMgZXZlbnR1YWxs
eS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRl
ck9iamVjdDo6cmVwYWludChib29sIGltbWVkaWF0ZSkKIHsKICAgICAvLyBDYW4ndCB1c2Ugdmll
dygpLCBzaW5jZSB3ZSBtaWdodCBiZSB1bnJvb3RlZC4KQEAgLTE2NjMsNyArMTY3NCw4IEBAIHZv
aWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50KGJvb2wgaW1tZWRpYXRlKQogICAgIGlmICh2aWV3LT5w
cmludGluZygpKQogICAgICAgICByZXR1cm47IC8vIERvbid0IHJlcGFpbnQgaWYgd2UncmUgcHJp
bnRpbmcuCiAKLSAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3RhbmdsZShhYnNvbHV0ZUNsaXBwZWRP
dmVyZmxvd1JlY3QoKSwgaW1tZWRpYXRlKTsKKyAgICBSZW5kZXJCb3gqIHJlcGFpbnRDb250YWlu
ZXIgPSBjb250YWluZXJGb3JSZXBhaW50KCk7CisgICAgcmVwYWludFZpYUNvbnRhaW5lcihyZXBh
aW50Q29udGFpbmVyLCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFp
bmVyKSwgaW1tZWRpYXRlKTsKIH0KIAogdm9pZCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRSZWN0YW5n
bGUoY29uc3QgSW50UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUpCkBAIC0xNjc5LDIzICsxNjkxLDI0
IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHIs
IGJvb2wgaW1tZWRpYXRlKQogICAgIGlmICh2aWV3LT5wcmludGluZygpKQogICAgICAgICByZXR1
cm47IC8vIERvbid0IHJlcGFpbnQgaWYgd2UncmUgcHJpbnRpbmcuCiAKLSAgICBJbnRSZWN0IGFi
c1JlY3Qocik7CisgICAgSW50UmVjdCBkaXJ0eVJlY3Qocik7CiAKICAgICAvLyBGSVhNRTogbGF5
b3V0RGVsdGEgbmVlZHMgdG8gYmUgYXBwbGllZCBpbiBwYXJ0cyBiZWZvcmUvYWZ0ZXIgdHJhbnNm
b3JtcyBhbmQKICAgICAvLyByZXBhaW50IGNvbnRhaW5lcnMuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMwOAotICAgIGFic1JlY3QubW92ZSh2aWV3LT5sYXlvdXRE
ZWx0YSgpKTsKKyAgICBkaXJ0eVJlY3QubW92ZSh2aWV3LT5sYXlvdXREZWx0YSgpKTsKIAotICAg
IGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KGFic1JlY3QpOwotICAgIHZpZXctPnJlcGFpbnRW
aWV3UmVjdGFuZ2xlKGFic1JlY3QsIGltbWVkaWF0ZSk7CisgICAgUmVuZGVyQm94KiByZXBhaW50
Q29udGFpbmVyID0gY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIGNvbXB1dGVSZWN0Rm9yUmVw
YWludChkaXJ0eVJlY3QsIHJlcGFpbnRDb250YWluZXIpOworICAgIHJlcGFpbnRWaWFDb250YWlu
ZXIocmVwYWludENvbnRhaW5lciwgZGlydHlSZWN0LCBpbW1lZGlhdGUpOwogfQogCi1ib29sIFJl
bmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQoY29uc3QgSW50UmVjdCYgb2xk
Qm91bmRzLCBjb25zdCBJbnRSZWN0JiBvbGRPdXRsaW5lQm94KQorYm9vbCBSZW5kZXJPYmplY3Q6
OnJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwg
Y29uc3QgSW50UmVjdCYgb2xkQm91bmRzLCBjb25zdCBJbnRSZWN0JiBvbGRPdXRsaW5lQm94KQog
ewogICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CiAgICAgaWYgKHYtPnByaW50aW5nKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gRG9uJ3QgcmVwYWludCBpZiB3ZSdyZSBwcmludGluZy4K
IAotICAgIEludFJlY3QgbmV3Qm91bmRzID0gYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
CisgICAgSW50UmVjdCBuZXdCb3VuZHMgPSBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChy
ZXBhaW50Q29udGFpbmVyKTsKICAgICBJbnRSZWN0IG5ld091dGxpbmVCb3g7CiAKICAgICBib29s
IGZ1bGxSZXBhaW50ID0gc2VsZk5lZWRzTGF5b3V0KCk7CkBAIC0xNzAzLDE0ICsxNzE2LDE4IEBA
IGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChjb25zdCBJbnRS
ZWN0JiBvbGRCb3VuZHMsIGNvbnN0IEluCiAgICAgaWYgKCFmdWxsUmVwYWludCAmJiBzdHlsZSgp
LT5ib3JkZXJGaXQoKSA9PSBCb3JkZXJGaXRMaW5lcykKICAgICAgICAgZnVsbFJlcGFpbnQgPSB0
cnVlOwogICAgIGlmICghZnVsbFJlcGFpbnQpIHsKLSAgICAgICAgbmV3T3V0bGluZUJveCA9IGFi
c29sdXRlT3V0bGluZUJvdW5kcygpOworICAgICAgICBuZXdPdXRsaW5lQm94ID0gb3V0bGluZUJv
dW5kc0ZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CiAgICAgICAgIGlmIChuZXdPdXRsaW5l
Qm94LmxvY2F0aW9uKCkgIT0gb2xkT3V0bGluZUJveC5sb2NhdGlvbigpIHx8IChtdXN0UmVwYWlu
dEJhY2tncm91bmRPckJvcmRlcigpICYmIChuZXdCb3VuZHMgIT0gb2xkQm91bmRzIHx8IG5ld091
dGxpbmVCb3ggIT0gb2xkT3V0bGluZUJveCkpKQogICAgICAgICAgICAgZnVsbFJlcGFpbnQgPSB0
cnVlOwogICAgIH0KKworICAgIGlmICghcmVwYWludENvbnRhaW5lcikKKyAgICAgICAgcmVwYWlu
dENvbnRhaW5lciA9IHY7CisKICAgICBpZiAoZnVsbFJlcGFpbnQpIHsKLSAgICAgICAgdi0+cmVw
YWludFZpZXdSZWN0YW5nbGUob2xkQm91bmRzKTsKKyAgICAgICAgcmVwYWludFZpYUNvbnRhaW5l
cihyZXBhaW50Q29udGFpbmVyLCBvbGRCb3VuZHMpOwogICAgICAgICBpZiAobmV3Qm91bmRzICE9
IG9sZEJvdW5kcykKLSAgICAgICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKG5ld0JvdW5k
cyk7CisgICAgICAgICAgICByZXBhaW50VmlhQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIG5l
d0JvdW5kcyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTcxOSwyNyArMTcz
NiwyNyBAQCBib29sIFJlbmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQoY29u
c3QgSW50UmVjdCYgb2xkQm91bmRzLCBjb25zdCBJbgogCiAgICAgaW50IGRlbHRhTGVmdCA9IG5l
d0JvdW5kcy54KCkgLSBvbGRCb3VuZHMueCgpOwogICAgIGlmIChkZWx0YUxlZnQgPiAwKQotICAg
ICAgICB2LT5yZXBhaW50Vmlld1JlY3RhbmdsZShJbnRSZWN0KG9sZEJvdW5kcy54KCksIG9sZEJv
dW5kcy55KCksIGRlbHRhTGVmdCwgb2xkQm91bmRzLmhlaWdodCgpKSk7CisgICAgICAgIHJlcGFp
bnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChvbGRCb3VuZHMueCgpLCBv
bGRCb3VuZHMueSgpLCBkZWx0YUxlZnQsIG9sZEJvdW5kcy5oZWlnaHQoKSkpOwogICAgIGVsc2Ug
aWYgKGRlbHRhTGVmdCA8IDApCi0gICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKEludFJl
Y3QobmV3Qm91bmRzLngoKSwgbmV3Qm91bmRzLnkoKSwgLWRlbHRhTGVmdCwgbmV3Qm91bmRzLmhl
aWdodCgpKSk7CisgICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5lciwg
SW50UmVjdChuZXdCb3VuZHMueCgpLCBuZXdCb3VuZHMueSgpLCAtZGVsdGFMZWZ0LCBuZXdCb3Vu
ZHMuaGVpZ2h0KCkpKTsKIAogICAgIGludCBkZWx0YVJpZ2h0ID0gbmV3Qm91bmRzLnJpZ2h0KCkg
LSBvbGRCb3VuZHMucmlnaHQoKTsKICAgICBpZiAoZGVsdGFSaWdodCA+IDApCi0gICAgICAgIHYt
PnJlcGFpbnRWaWV3UmVjdGFuZ2xlKEludFJlY3Qob2xkQm91bmRzLnJpZ2h0KCksIG5ld0JvdW5k
cy55KCksIGRlbHRhUmlnaHQsIG5ld0JvdW5kcy5oZWlnaHQoKSkpOworICAgICAgICByZXBhaW50
VmlhQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qob2xkQm91bmRzLnJpZ2h0KCks
IG5ld0JvdW5kcy55KCksIGRlbHRhUmlnaHQsIG5ld0JvdW5kcy5oZWlnaHQoKSkpOwogICAgIGVs
c2UgaWYgKGRlbHRhUmlnaHQgPCAwKQotICAgICAgICB2LT5yZXBhaW50Vmlld1JlY3RhbmdsZShJ
bnRSZWN0KG5ld0JvdW5kcy5yaWdodCgpLCBvbGRCb3VuZHMueSgpLCAtZGVsdGFSaWdodCwgb2xk
Qm91bmRzLmhlaWdodCgpKSk7CisgICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIocmVwYWludENv
bnRhaW5lciwgSW50UmVjdChuZXdCb3VuZHMucmlnaHQoKSwgb2xkQm91bmRzLnkoKSwgLWRlbHRh
UmlnaHQsIG9sZEJvdW5kcy5oZWlnaHQoKSkpOwogCiAgICAgaW50IGRlbHRhVG9wID0gbmV3Qm91
bmRzLnkoKSAtIG9sZEJvdW5kcy55KCk7CiAgICAgaWYgKGRlbHRhVG9wID4gMCkKLSAgICAgICAg
di0+cmVwYWludFZpZXdSZWN0YW5nbGUoSW50UmVjdChvbGRCb3VuZHMueCgpLCBvbGRCb3VuZHMu
eSgpLCBvbGRCb3VuZHMud2lkdGgoKSwgZGVsdGFUb3ApKTsKKyAgICAgICAgcmVwYWludFZpYUNv
bnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG9sZEJvdW5kcy54KCksIG9sZEJvdW5k
cy55KCksIG9sZEJvdW5kcy53aWR0aCgpLCBkZWx0YVRvcCkpOwogICAgIGVsc2UgaWYgKGRlbHRh
VG9wIDwgMCkKLSAgICAgICAgdi0+cmVwYWludFZpZXdSZWN0YW5nbGUoSW50UmVjdChuZXdCb3Vu
ZHMueCgpLCBuZXdCb3VuZHMueSgpLCBuZXdCb3VuZHMud2lkdGgoKSwgLWRlbHRhVG9wKSk7Cisg
ICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChuZXdC
b3VuZHMueCgpLCBuZXdCb3VuZHMueSgpLCBuZXdCb3VuZHMud2lkdGgoKSwgLWRlbHRhVG9wKSk7
CiAKICAgICBpbnQgZGVsdGFCb3R0b20gPSBuZXdCb3VuZHMuYm90dG9tKCkgLSBvbGRCb3VuZHMu
Ym90dG9tKCk7CiAgICAgaWYgKGRlbHRhQm90dG9tID4gMCkKLSAgICAgICAgdi0+cmVwYWludFZp
ZXdSZWN0YW5nbGUoSW50UmVjdChuZXdCb3VuZHMueCgpLCBvbGRCb3VuZHMuYm90dG9tKCksIG5l
d0JvdW5kcy53aWR0aCgpLCBkZWx0YUJvdHRvbSkpOworICAgICAgICByZXBhaW50VmlhQ29udGFp
bmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3QobmV3Qm91bmRzLngoKSwgb2xkQm91bmRzLmJv
dHRvbSgpLCBuZXdCb3VuZHMud2lkdGgoKSwgZGVsdGFCb3R0b20pKTsKICAgICBlbHNlIGlmIChk
ZWx0YUJvdHRvbSA8IDApCi0gICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKEludFJlY3Qo
b2xkQm91bmRzLngoKSwgbmV3Qm91bmRzLmJvdHRvbSgpLCBvbGRCb3VuZHMud2lkdGgoKSwgLWRl
bHRhQm90dG9tKSk7CisgICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5l
ciwgSW50UmVjdChvbGRCb3VuZHMueCgpLCBuZXdCb3VuZHMuYm90dG9tKCksIG9sZEJvdW5kcy53
aWR0aCgpLCAtZGVsdGFCb3R0b20pKTsKIAogICAgIGlmIChuZXdPdXRsaW5lQm94ID09IG9sZE91
dGxpbmVCb3gpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NjUsNyArMTc4Miw3IEBAIGJv
b2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChjb25zdCBJbnRSZWN0
JiBvbGRCb3VuZHMsIGNvbnN0IEluCiAgICAgICAgIGludCByaWdodCA9IG1pbihuZXdCb3VuZHMu
cmlnaHQoKSwgb2xkQm91bmRzLnJpZ2h0KCkpOwogICAgICAgICBpZiAocmlnaHRSZWN0LngoKSA8
IHJpZ2h0KSB7CiAgICAgICAgICAgICByaWdodFJlY3Quc2V0V2lkdGgobWluKHJpZ2h0UmVjdC53
aWR0aCgpLCByaWdodCAtIHJpZ2h0UmVjdC54KCkpKTsKLSAgICAgICAgICAgIHYtPnJlcGFpbnRW
aWV3UmVjdGFuZ2xlKHJpZ2h0UmVjdCk7CisgICAgICAgICAgICByZXBhaW50VmlhQ29udGFpbmVy
KHJlcGFpbnRDb250YWluZXIsIHJpZ2h0UmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaW50
IGhlaWdodCA9IGFicyhuZXdPdXRsaW5lQm94LmhlaWdodCgpIC0gb2xkT3V0bGluZUJveC5oZWln
aHQoKSk7CkBAIC0xNzgzLDcgKzE4MDAsNyBAQCBib29sIFJlbmRlck9iamVjdDo6cmVwYWludEFm
dGVyTGF5b3V0SWZOZWVkZWQoY29uc3QgSW50UmVjdCYgb2xkQm91bmRzLCBjb25zdCBJbgogICAg
ICAgICBpbnQgYm90dG9tID0gbWluKG5ld0JvdW5kcy5ib3R0b20oKSwgb2xkQm91bmRzLmJvdHRv
bSgpKTsKICAgICAgICAgaWYgKGJvdHRvbVJlY3QueSgpIDwgYm90dG9tKSB7CiAgICAgICAgICAg
ICBib3R0b21SZWN0LnNldEhlaWdodChtaW4oYm90dG9tUmVjdC5oZWlnaHQoKSwgYm90dG9tIC0g
Ym90dG9tUmVjdC55KCkpKTsKLSAgICAgICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGJv
dHRvbVJlY3QpOworICAgICAgICAgICAgcmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFp
bmVyLCBib3R0b21SZWN0KTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGM3YjE0MWIuLjlmYjU0MDUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCkBAIC01NzMsNiArNTczLDkgQEAgcHVibGljOgogICAgIC8vIGlmIHBh
aW50aW5nIGlzIHJvb3QtcmVsYXRpdmUuIFRoaXMgaXMgdGhlIGNvbnRhaW5lciB0aGF0IHNob3Vs
ZCBiZSBwYXNzZWQgdG8gdGhlICdmb3JSZXBhaW50JwogICAgIC8vIG1ldGhvZHMuCiAgICAgUmVu
ZGVyQm94KiBjb250YWluZXJGb3JSZXBhaW50KCkgY29uc3Q7CisgICAgLy8gQWN0dWFsbHkgZG8g
dGhlIHJlcGFpbnQgb2YgcmVjdCByIGZvciB0aGlzIG9iamVjdCB3aGljaCBoYXMgYmVlbiBjb21w
dXRlZCBpbiB0aGUgY29vcmRpbmF0ZSBzcGFjZQorICAgIC8vIG9mIHJlcGFpbnRDb250YWluZXIu
IElmIHJlcGFpbnRDb250YWluZXIgaXMgMCwgcmVwYWludCB2aWEgdGhlIHZpZXcuCisgICAgdm9p
ZCByZXBhaW50VmlhQ29udGFpbmVyKFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgY29uc3Qg
SW50UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSk7CiAgICAgCiAgICAgLy8gUmVwYWlu
dCB0aGUgZW50aXJlIG9iamVjdC4gIENhbGxlZCB3aGVuLCBlLmcuLCB0aGUgY29sb3Igb2YgYSBi
b3JkZXIgY2hhbmdlcywgb3Igd2hlbiBhIGJvcmRlcgogICAgIC8vIHN0eWxlIGNoYW5nZXMuCkBA
IC01ODIsNyArNTg1LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVwYWludFJlY3RhbmdsZShjb25z
dCBJbnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSk7CiAKICAgICAvLyBSZXBhaW50IG9u
bHkgaWYgb3VyIG9sZCBib3VuZHMgYW5kIG5ldyBib3VuZHMgYXJlIGRpZmZlcmVudC4KLSAgICBi
b29sIHJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKGNvbnN0IEludFJlY3QmIG9sZEJvdW5kcywg
Y29uc3QgSW50UmVjdCYgb2xkT3V0bGluZUJveCk7CisgICAgYm9vbCByZXBhaW50QWZ0ZXJMYXlv
dXRJZk5lZWRlZChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IEludFJlY3QmIG9s
ZEJvdW5kcywgY29uc3QgSW50UmVjdCYgb2xkT3V0bGluZUJveCk7CiAKICAgICAvLyBSZXBhaW50
IG9ubHkgaWYgdGhlIG9iamVjdCBtb3ZlZC4KICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludER1cmlu
Z0xheW91dElmTW92ZWQoY29uc3QgSW50UmVjdCYgcmVjdCk7CkBAIC03ODQsNiArNzg3LDM2IEBA
IHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgSW50UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWlu
dChSZW5kZXJCb3gqIC8qcmVwYWludENvbnRhaW5lciovKSBjb25zdCB7IHJldHVybiBJbnRSZWN0
KCk7IH0KIAorICAgIGNsYXNzIExheW91dFJlcGFpbnRlciB7CisgICAgcHVibGljOgorICAgICAg
ICBMYXlvdXRSZXBhaW50ZXIoUmVuZGVyT2JqZWN0JiBvYmplY3QsIGJvb2wgc2hvdWxkUmVwYWlu
dCA9IHRydWUsIGNvbnN0IEludFJlY3QqIG9sZEJvdW5kcyA9IDApCisgICAgICAgICAgICA6IG1f
b2JqZWN0KG9iamVjdCkKKyAgICAgICAgICAgICwgbV9yZXBhaW50Q29udGFpbmVyKDApCisgICAg
ICAgICAgICAsIG1fY2hlY2tGb3JSZXBhaW50KG1fb2JqZWN0LmNoZWNrRm9yUmVwYWludER1cmlu
Z0xheW91dCgpICYmIHNob3VsZFJlcGFpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X2NoZWNrRm9yUmVwYWludCkgeworICAgICAgICAgICAgICAgIG1fb2xkQm91bmRzID0gb2xkQm91
bmRzID8gKm9sZEJvdW5kcyA6IG1fb2JqZWN0LmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgp
OworICAgICAgICAgICAgICAgIG1fb2xkT3V0bGluZUJveCA9IG1fb2JqZWN0LmFic29sdXRlT3V0
bGluZUJvdW5kcygpOworICAgICAgICAgICAgICAgIG1fcmVwYWludENvbnRhaW5lciA9IG1fb2Jq
ZWN0LmNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gUmV0dXJuIHRydWUgaWYgaXQgcmVwYWludGVkLgorICAgICAgICBi
b29sIHJlcGFpbnRBZnRlckxheW91dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2NoZWNrRm9yUmVwYWludCA/IG1fb2JqZWN0LnJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKG1f
cmVwYWludENvbnRhaW5lciwgbV9vbGRCb3VuZHMsIG1fb2xkT3V0bGluZUJveCkgOiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjaGVja0ZvclJlcGFpbnQoKSBjb25z
dCB7IHJldHVybiBtX2NoZWNrRm9yUmVwYWludDsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBSZW5kZXJPYmplY3QmIG1fb2JqZWN0OworICAgICAgICBSZW5kZXJCb3gqIG1fcmVw
YWludENvbnRhaW5lcjsKKyAgICAgICAgSW50UmVjdCBtX29sZEJvdW5kczsKKyAgICAgICAgSW50
UmVjdCBtX29sZE91dGxpbmVCb3g7CisgICAgICAgIGJvb2wgbV9jaGVja0ZvclJlcGFpbnQ7Cisg
ICAgfTsKKyAgICAKIHByaXZhdGU6CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCmluZGV4IDFmNzNjNzAuLjU5ZTAxOGQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclBhdGguY3BwCkBAIC0xNTYsMjIgKzE1NiwxNiBAQCBib29sIFJlbmRlclBhdGg6
OmNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCkKIAogdm9pZCBSZW5kZXJQYXRoOjpsYXlvdXQoKQog
ewotICAgIEludFJlY3Qgb2xkQm91bmRzOwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAg
ICBib29sIGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYm
IHNlbGZOZWVkc0xheW91dCgpOwotICAgIGlmIChjaGVja0ZvclJlcGFpbnQpIHsKLSAgICAgICAg
b2xkQm91bmRzID0gbV9hYnNvbHV0ZUJvdW5kczsKLSAgICAgICAgb2xkT3V0bGluZUJveCA9IGFi
c29sdXRlT3V0bGluZUJvdW5kcygpOwotICAgIH0KLSAgICAgICAgCisgICAgLy8gRklYTUU6IHVz
aW5nIG1fYWJzb2x1dGVCb3VuZHMgYnJlYWtzIGlmIGNvbnRhaW5lckZvclJlcGFpbnQoKSBpcyBu
b3QgdGhlIHJvb3QKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBzZWxmTmVl
ZHNMYXlvdXQoKSwgJm1fYWJzb2x1dGVCb3VuZHMpOworICAgIAogICAgIGNhbGN1bGF0ZUxvY2Fs
VHJhbnNmb3JtKCk7CiAKICAgICBzZXRQYXRoKHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50Kj4oZWxlbWVudCgpKS0+dG9QYXRoRGF0YSgpKTsKIAogICAgIG1fYWJzb2x1
dGVCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKIAotICAgIGlmIChjaGVj
a0ZvclJlcGFpbnQpCi0gICAgICAgIHJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKG9sZEJvdW5k
cywgb2xkT3V0bGluZUJveCk7CisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwog
CiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuY3BwCmluZGV4IGU3NGUyMjcuLjRjODM3OGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBs
YWNlZC5jcHAKQEAgLTc3LDEzICs3Nyw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmxheW91dCgp
CiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwogICAgIAotICAgIEludFJlY3Qgb2xkQm91
bmRzOwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAgICBib29sIGNoZWNrRm9yUmVwYWlu
dCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwotICAgIGlmIChjaGVja0ZvclJlcGFp
bnQpIHsKLSAgICAgICAgb2xkQm91bmRzID0gYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
Ci0gICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKLSAgICB9
CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcyk7CiAgICAgCiAgICAgc2V0SGVp
Z2h0KG1pbmltdW1SZXBsYWNlZEhlaWdodCgpKTsKICAgICAKQEAgLTkxLDkgKzg1LDggQEAgdm9p
ZCBSZW5kZXJSZXBsYWNlZDo6bGF5b3V0KCkKICAgICBjYWxjSGVpZ2h0KCk7CiAgICAgYWRqdXN0
T3ZlcmZsb3dGb3JCb3hTaGFkb3coKTsKICAgICAKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQot
ICAgICAgICByZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChvbGRCb3VuZHMsIG9sZE91dGxpbmVC
b3gpOwotICAgIAorICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsgICAgCisKICAg
ICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcAppbmRleCA2ZTE3YzA1Li5lZTZlM2Q4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0NvbnRhaW5lci5jcHAKQEAgLTIyNiwxMyArMjI2LDggQEAgdm9pZCBSZW5kZXJT
VkdDb250YWluZXI6OmxheW91dCgpCiAgICAgLy8gQXJiaXRyYXJ5IGFmZmluZSB0cmFuc2Zvcm1z
IGFyZSBpbmNvbXBhdGlibGUgd2l0aCBMYXlvdXRTdGF0ZS4KICAgICB2aWV3KCktPmRpc2FibGVM
YXlvdXRTdGF0ZSgpOwogCi0gICAgSW50UmVjdCBvbGRCb3VuZHM7Ci0gICAgSW50UmVjdCBvbGRP
dXRsaW5lQm94OwotICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkgJiYgc2VsZldpbGxQYWludCgpOwotICAgIGlmIChjaGVja0ZvclJlcGFpbnQp
IHsKLSAgICAgICAgb2xkQm91bmRzID0gbV9hYnNvbHV0ZUJvdW5kczsKLSAgICAgICAgb2xkT3V0
bGluZUJveCA9IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwotICAgIH0KKyAgICAvLyBGSVhNRTog
dXNpbmcgbV9hYnNvbHV0ZUJvdW5kcyBicmVha3MgaWYgY29udGFpbmVyRm9yUmVwYWludCgpIGlz
IG5vdCB0aGUgcm9vdAorICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIHNlbGZX
aWxsUGFpbnQoKSwgJm1fYWJzb2x1dGVCb3VuZHMpOwogICAgIAogICAgIGNhbGN1bGF0ZUxvY2Fs
VHJhbnNmb3JtKCk7CiAKQEAgLTI1MCw4ICsyNDUsNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5l
cjo6bGF5b3V0KCkKIAogICAgIGNhbGNCb3VuZHMoKTsKIAotICAgIGlmIChjaGVja0ZvclJlcGFp
bnQpCi0gICAgICAgIHJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKG9sZEJvdW5kcywgb2xkT3V0
bGluZUJveCk7CisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwogCiAgICAgdmll
dygpLT5lbmFibGVMYXlvdXRTdGF0ZSgpOwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcAppbmRleCA1MDM2NjNhLi4yOGMwYzNiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCkBAIC0xMzcsMTMgKzEzNyw3IEBAIHZvaWQg
UmVuZGVyU1ZHSW1hZ2U6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwog
ICAgIAotICAgIEludFJlY3Qgb2xkQm91bmRzOwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsK
LSAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgp
OwotICAgIGlmIChjaGVja0ZvclJlcGFpbnQpIHsKLSAgICAgICAgb2xkQm91bmRzID0gYWJzb2x1
dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0
ZU91dGxpbmVCb3VuZHMoKTsKLSAgICB9CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigq
dGhpcyk7CiAgICAgCiAgICAgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKICAgICAKQEAgLTE1
OCw5ICsxNTIsOCBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpsYXlvdXQoKQogCiAgICAgY2FsY3Vs
YXRlQWJzb2x1dGVCb3VuZHMoKTsKIAotICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCi0gICAgICAg
IHJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKG9sZEJvdW5kcywgb2xkT3V0bGluZUJveCk7Ci0K
KyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgCiAgICAgc2V0TmVlZHNM
YXlvdXQoZmFsc2UpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSb290LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCmluZGV4IDU0
YTMwZGYuLjBmNzk3OGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jv
b3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC05MSwx
MSArOTEsOCBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OmxheW91dCgpCiAgICAgLy8gQXJiaXRyYXJ5
IGFmZmluZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBMYXlvdXRTdGF0ZS4KICAg
ICB2aWV3KCktPmRpc2FibGVMYXlvdXRTdGF0ZSgpOwogCi0gICAgSW50UmVjdCBvbGRCb3VuZHMg
PSBtX2Fic29sdXRlQm91bmRzOwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAgICBib29s
IGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZO
ZWVkc0xheW91dCgpOwotICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCi0gICAgICAgIG9sZE91dGxp
bmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKKyAgICAvLyBGSVhNRTogdXNpbmcgbV9h
YnNvbHV0ZUJvdW5kcyBicmVha3MgaWYgY29udGFpbmVyRm9yUmVwYWludCgpIGlzIG5vdCB0aGUg
cm9vdAorICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIHNlbGZOZWVkc0xheW91
dCgpLCAmbV9hYnNvbHV0ZUJvdW5kcyk7CiAKICAgICBjYWxjV2lkdGgoKTsKICAgICBjYWxjSGVp
Z2h0KCk7CkBAIC0xMTMsOCArMTEwLDcgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQog
ICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVkc0xheW91dCgpKTsKICAgICB9CiAKLSAgICBpZiAo
Y2hlY2tGb3JSZXBhaW50KQotICAgICAgICByZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChvbGRC
b3VuZHMsIG9sZE91dGxpbmVCb3gpOworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQo
KTsKIAogICAgIHZpZXcoKS0+ZW5hYmxlTGF5b3V0U3RhdGUoKTsKICAgICBzZXROZWVkc0xheW91
dChmYWxzZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IGVlNWFiMzQuLjg0
MmEwMjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCkBAIC04MSwxMyArODEsOCBA
QCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBo
YWNrIHRvIGF2b2lkIHRoZSBSZW5kZXJCbG9jazo6bGF5b3V0KCkgcGFydGlhbCByZXBhaW50aW5n
IGNvZGUgd2hpY2ggaXMgbm90ICh5ZXQpIFNWRyBhd2FyZQogICAgIHNldE5lZWRzTGF5b3V0KHRy
dWUpOwogCi0gICAgSW50UmVjdCBvbGRCb3VuZHM7Ci0gICAgSW50UmVjdCBvbGRPdXRsaW5lQm94
OwotICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0
KCk7Ci0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkgewotICAgICAgICBvbGRCb3VuZHMgPSBtX2Fi
c29sdXRlQm91bmRzOwotICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91
bmRzKCk7Ci0gICAgfQorICAgIC8vIEZJWE1FOiB1c2luZyBtX2Fic29sdXRlQm91bmRzIGJyZWFr
cyBpZiBjb250YWluZXJGb3JSZXBhaW50KCkgaXMgbm90IHRoZSByb290CisgICAgTGF5b3V0UmVw
YWludGVyIHJlcGFpbnRlcigqdGhpcywgJm1fYWJzb2x1dGVCb3VuZHMpOwogCiAgICAgLy8gQmVz
dCBndWVzcyBmb3IgYSByZWxhdGl2ZSBzdGFydGluZyBwb2ludAogICAgIFNWR1RleHRFbGVtZW50
KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dEVsZW1lbnQqPihlbGVtZW50KCkpOwpAQCAtMTAx
LDEwICs5Niw4IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKIAogICAgIG1fYWJzb2x1
dGVCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKIAotICAgIGJvb2wgcmVw
YWludGVkID0gZmFsc2U7Ci0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkKLSAgICAgICAgcmVwYWlu
dGVkID0gcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94
KTsKLSAgICAKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgICAgIAog
ICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIuY3BwCmluZGV4IDQyODJlZmMuLmQyY2IxZDEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAK
QEAgLTUyLDEyICs1Miw5IEBAIHZvaWQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmxheW91
dCgpCiAgICAgLy8gQXJiaXRyYXJ5IGFmZmluZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUg
d2l0aCBMYXlvdXRTdGF0ZS4KICAgICB2aWV3KCktPmRpc2FibGVMYXlvdXRTdGF0ZSgpOwogICAg
IAotICAgIEludFJlY3Qgb2xkQm91bmRzID0gbV9hYnNvbHV0ZUJvdW5kczsKLSAgICBJbnRSZWN0
IG9sZE91dGxpbmVCb3g7Ci0gICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJlcGFp
bnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKTsKLSAgICBpZiAoY2hlY2tGb3JS
ZXBhaW50KQotICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7
Ci0KKyAgICAvLyBGSVhNRTogdXNpbmcgbV9hYnNvbHV0ZUJvdW5kcyBicmVha3MgaWYgY29udGFp
bmVyRm9yUmVwYWludCgpIGlzIG5vdCB0aGUgcm9vdAorICAgIExheW91dFJlcGFpbnRlciByZXBh
aW50ZXIoKnRoaXMsIHNlbGZOZWVkc0xheW91dCgpLCAmbV9hYnNvbHV0ZUJvdW5kcyk7CisgICAg
CiAgICAgY2FsY0JvdW5kcygpOyAgICAKICAgICAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7
CkBAIC02OCw4ICs2NSw3IEBAIHZvaWQgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXI6OmxheW91
dCgpCiAgICAgICAgIEFTU0VSVCghY2hpbGQtPm5lZWRzTGF5b3V0KCkpOwogICAgIH0KICAgICAK
LSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQotICAgICAgICByZXBhaW50QWZ0ZXJMYXlvdXRJZk5l
ZWRlZChvbGRCb3VuZHMsIG9sZE91dGxpbmVCb3gpOworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0
ZXJMYXlvdXQoKTsKICAgICAKICAgICB2aWV3KCktPmVuYWJsZUxheW91dFN0YXRlKCk7CiAgICAg
c2V0TmVlZHNMYXlvdXQoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCmluZGV4IGFl
ZTA3MjcuLjg5YWJiMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTI1NywxNCAr
MjU3LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKIAogICAgIHJlY2FsY1NlY3Rpb25z
SWZOZWVkZWQoKTsKICAgICAgICAgCi0gICAgSW50UmVjdCBvbGRCb3VuZHM7Ci0gICAgSW50UmVj
dCBvbGRPdXRsaW5lQm94OwotICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBh
aW50RHVyaW5nTGF5b3V0KCk7Ci0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkgewotICAgICAgICBv
bGRCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgb2xkT3V0
bGluZUJveCA9IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwotICAgIH0KLSAgICAKKyAgICBMYXlv
dXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzKTsKICAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIg
c3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSk7CiAKICAgICBzZXRI
ZWlnaHQoMCk7CkBAIC00MjcsMTAgKzQyMCw4IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgp
CiAKICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKIAotICAgIGJvb2wgZGlkRnVsbFJlcGFpbnQgPSB0
cnVlOworICAgIGJvb2wgZGlkRnVsbFJlcGFpbnQgPSByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5
b3V0KCk7CiAgICAgLy8gUmVwYWludCB3aXRoIG91ciBuZXcgYm91bmRzIGlmIHRoZXkgYXJlIGRp
ZmZlcmVudCBmcm9tIG91ciBvbGQgYm91bmRzLgotICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCi0g
ICAgICAgIGRpZEZ1bGxSZXBhaW50ID0gcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91
bmRzLCBvbGRPdXRsaW5lQm94KTsKICAgICBpZiAoIWRpZEZ1bGxSZXBhaW50ICYmIHNlY3Rpb25N
b3ZlZCkKICAgICAgICAgcmVwYWludFJlY3RhbmdsZShJbnRSZWN0KG1fb3ZlcmZsb3dMZWZ0LCBt
b3ZlZFNlY3Rpb25Ub3AsIG1fb3ZlcmZsb3dXaWR0aCAtIG1fb3ZlcmZsb3dMZWZ0LCBtX292ZXJm
bG93SGVpZ2h0IC0gbW92ZWRTZWN0aW9uVG9wKSk7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9iaWRpLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwCmluZGV4IDU4
NjE4MDQuLmY0M2YwYzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwCkBAIC04NDUsNyArODQ1LDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBp
bnQmIHJlcGFpbnRUb3AsIGkKICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBibG9jayByZWFs
bHkgbmVlZGVkIGEgZnVsbCBsYXlvdXQsIHdlIG1pc3NlZCBvdXIgY2hhbmNlIHRvIHJlcGFpbnQg
dGhlIGxheWVyCiAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIGxheW91dCBzdGFydGVkLiAgTHVj
a2lseSB0aGUgbGF5ZXIgaGFzIGNhY2hlZCB0aGUgcmVwYWludCByZWN0IGZvciBpdHMgb3JpZ2lu
YWwKICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiBhbmQgc2l6ZSwgYW5kIHNvIHdlIGNhbiB1
c2UgdGhhdCB0byBtYWtlIGEgcmVwYWludCBoYXBwZW4gbm93LgotICAgICAgICAgICAgICAgIHYt
PnJlcGFpbnRWaWV3UmVjdGFuZ2xlKG1fbGF5ZXItPnJlcGFpbnRSZWN0KCkpOworICAgICAgICAg
ICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIoY29udGFpbmVyRm9yUmVwYWludCgpLCBtX2xheWVy
LT5yZXBhaW50UmVjdCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27077</attachid>
            <date>2009-01-27 11:00:17 -0800</date>
            <delta_ts>2009-01-27 13:46:04 -0800</delta_ts>
            <desc>Phase 2 patch: use the new container-relative repaint rects.</desc>
            <filename>23360_patch_phase2.txt</filename>
            <type>text/plain</type>
            <size>28115</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjRkZTdjYS4uMzAxOWY4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAwOS0wMS0yNyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzNjAKKyAgICAgICAgCisgICAgICAgIFVzZSB0aGUgbmV3IGNvbnRhaW5lci1yZWxhdGl2
ZSByZXBhaW50IG1ldGhvZHMgdG8gY29tcHV0ZQorICAgICAgICBwb3N0LWxheW91dCByZXBhaW50
cywgYW5kIHJlcGFpbnRzIHVzaW5nIFJlbmRlckxheWVyJ3MKKyAgICAgICAgY2FjaGVkIHJlcGFp
bnRSZWN0KCkgcmVsYXRpdmUgdG8gdGhhdCBjb250YWluZXIsIHJhdGhlciB0aGFuCisgICAgICAg
IHVzaW5nIGFic29sdXRlIGNvb3Jkcy4KKworICAgICAgICBSZXBsYWNlZCBsb3RzIG9mIGJvaWxl
cnBsYXRlIG9sZC9uZXcgcmVjdCBjb2RlIGluIHZhcmlvdXMKKyAgICAgICAgbGF5b3V0IG1ldGhv
ZHMgd2l0aCBhIHN0YWNrLWJhc2VkIExheW91dFJlcGFpbnRlciBjbGFzcywgYW5kCisgICAgICAg
IGZpeGVkIGEgYnVnIGluIFJlbmRlclRhYmxlIHdoaWNoIHNldCBkaWRGdWxsUmVwYWludCB0bwor
ICAgICAgICAndHJ1ZScgZXZlcnkgdGltZS4KKworCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
b3JlaWduT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVpZ25PYmplY3Q6
OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0SGFzVmlzaWJsZUNvbnRlbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpyZXBhaW50VmlhQ29udGFpbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlcGFpbnRSZWN0YW5nbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpMYXlvdXRSZXBhaW50ZXI6OkxheW91dFJlcGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OkxheW91dFJlcGFpbnRlcjo6cmVwYWludEFmdGVyTGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6TGF5b3V0UmVwYWludGVyOjpjaGVja0ZvclJlcGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclBhdGg6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpsYXlvdXQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6bGF5b3V0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmxheW91dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpsYXlvdXQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvYmlkaS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorCiAyMDA5LTAxLTI3
ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgLSBidWlsZCBmaXgK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBjZDlkNzU0Li5jMmM4MzgzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC02MTEsMTQgKzYxMSw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKICAgICBpZiAoIXJlbGF5b3V0
Q2hpbGRyZW4gJiYgbGF5b3V0T25seVBvc2l0aW9uZWRPYmplY3RzKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEludFJlY3Qgb2xkQm91bmRzOwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsK
LSAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IG1fZXZlckhhZExheW91dCAmJiBjaGVja0ZvclJl
cGFpbnREdXJpbmdMYXlvdXQoKTsKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KSB7Ci0gICAgICAg
IG9sZEJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwotICAgICAgICBvbGRP
dXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7Ci0gICAgfQotCisgICAgTGF5b3V0
UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFkTGF5b3V0KTsKICAgICBMYXlvdXRT
dGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgp
KSwgbV9oYXNDb2x1bW5zIHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7CiAK
ICAgICBpbnQgb2xkV2lkdGggPSB3aWR0aCgpOwpAQCAtNzQ5LDkgKzc0Miw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKICAgICAgICAgbV9s
YXllci0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiAKICAgICAvLyBSZXBhaW50IHdp
dGggb3VyIG5ldyBib3VuZHMgaWYgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gb3VyIG9sZCBib3Vu
ZHMuCi0gICAgYm9vbCBkaWRGdWxsUmVwYWludCA9IGZhbHNlOwotICAgIGlmIChjaGVja0ZvclJl
cGFpbnQpCi0gICAgICAgIGRpZEZ1bGxSZXBhaW50ID0gcmVwYWludEFmdGVyTGF5b3V0SWZOZWVk
ZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94KTsKKyAgICBib29sIGRpZEZ1bGxSZXBhaW50ID0g
cmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwogICAgIGlmICghZGlkRnVsbFJlcGFpbnQg
JiYgcmVwYWludFRvcCAhPSByZXBhaW50Qm90dG9tICYmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSB8fCBlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKSkgewog
ICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KG1fb3ZlcmZsb3dMZWZ0LCByZXBhaW50VG9wLCBt
X292ZXJmbG93V2lkdGggLSBtX292ZXJmbG93TGVmdCwgcmVwYWludEJvdHRvbSAtIHJlcGFpbnRU
b3ApOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKaW5kZXggYzQwZmI3
NS4uOGY4YWFjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcApAQCAt
MjAwLDE0ICsyMDAsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIGxheW91dE9u
bHlQb3NpdGlvbmVkT2JqZWN0cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IG9s
ZEJvdW5kczsKLSAgICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7Ci0gICAgYm9vbCBjaGVja0ZvclJl
cGFpbnQgPSBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKTsKLSAgICBpZiAoY2hlY2tGb3JS
ZXBhaW50KSB7Ci0gICAgICAgIG9sZEJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVj
dCgpOwotICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7Ci0g
ICAgfQotCisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcyk7CiAgICAgTGF5b3V0
U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHko
KSksIGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7CiAKICAgICBpbnQgcHJldmlv
dXNXaWR0aCA9IHdpZHRoKCk7CkBAIC0zMDIsOCArMjk1LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJs
ZUJveDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuKQogICAgICAgICBtX2xheWVy
LT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIAogICAgIC8vIFJlcGFpbnQgd2l0aCBv
dXIgbmV3IGJvdW5kcyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBvdXIgb2xkIGJvdW5kcy4K
LSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQotICAgICAgICByZXBhaW50QWZ0ZXJMYXlvdXRJZk5l
ZWRlZChvbGRCb3VuZHMsIG9sZE91dGxpbmVCb3gpOworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0
ZXJMYXlvdXQoKTsKICAgICAKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCmluZGV4IDUyMzYwMWMuLjhiZDk1ZWYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCkBAIC05MiwxMyAr
OTIsOCBAQCB2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OmxheW91dCgpCiAgICAgLy8gQXJiaXRy
YXJ5IGFmZmluZSB0cmFuc2Zvcm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBMYXlvdXRTdGF0ZS4K
ICAgICB2aWV3KCktPmRpc2FibGVMYXlvdXRTdGF0ZSgpOwogCi0gICAgSW50UmVjdCBvbGRCb3Vu
ZHM7Ci0gICAgSW50UmVjdCBvbGRPdXRsaW5lQm94OwotICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50
ID0gY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCk7Ci0gICAgaWYgKGNoZWNrRm9yUmVwYWlu
dCkgewotICAgICAgICBvbGRCb3VuZHMgPSBtX2Fic29sdXRlQm91bmRzOwotICAgICAgICBvbGRP
dXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7Ci0gICAgfQorICAgIC8vIEZJWE1F
OiB1c2luZyBtX2Fic29sdXRlQm91bmRzIGJyZWFrcyBpZiBjb250YWluZXJGb3JSZXBhaW50KCkg
aXMgbm90IHRoZSByb290CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgJm1f
YWJzb2x1dGVCb3VuZHMpOwogICAgIAogICAgIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7CiAg
ICAgCkBAIC0xMDYsOCArMTAxLDcgQEAgdm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpsYXlvdXQo
KQogCiAgICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgp
OwogCi0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkKLSAgICAgICAgcmVwYWludEFmdGVyTGF5b3V0
SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94KTsKKyAgICByZXBhaW50ZXIucmVwYWlu
dEFmdGVyTGF5b3V0KCk7CiAKICAgICB2aWV3KCktPmVuYWJsZUxheW91dFN0YXRlKCk7CiAgICAg
c2V0TmVlZHNMYXlvdXQoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGJl
MDc0YmUuLjc1NTNjZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTIzMSwxNiAr
MjMxLDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKGJvb2wgZG9G
dWxsUmVwYWludCwgYm9vbCBjaGVja0ZvclJlcGFpbnQpCiAgICAgICAgIC8vIGZyb20gdXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkuCiAgICAgICAgIEFTU0VSVCghdmlldy0+bGF5b3V0U3Rh
dGVFbmFibGVkKCkpOwogCi0gICAgICAgIEludFJlY3QgbmV3UmVjdCA9IHJlbmRlcmVyKCktPmFi
c29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwotICAgICAgICBJbnRSZWN0IG5ld091dGxpbmVC
b3ggPSByZW5kZXJlcigpLT5hYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKKyAgICAgICAgUmVuZGVy
Qm94KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS0+Y29udGFpbmVyRm9yUmVwYWludCgp
OworICAgICAgICBJbnRSZWN0IG5ld1JlY3QgPSByZW5kZXJlcigpLT5jbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKyAgICAgICAgSW50UmVjdCBuZXdPdXRs
aW5lQm94ID0gcmVuZGVyZXIoKS0+b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQocmVwYWludENvbnRh
aW5lcik7CiAgICAgICAgIGlmIChjaGVja0ZvclJlcGFpbnQpIHsKICAgICAgICAgICAgIGlmICh2
aWV3ICYmICF2aWV3LT5wcmludGluZygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fbmVlZHNG
dWxsUmVwYWludCkgewotICAgICAgICAgICAgICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3Rh
bmdsZShtX3JlcGFpbnRSZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cmVw
YWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBtX3JlcGFpbnRSZWN0KTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5ld1JlY3QgIT0gbV9yZXBhaW50UmVjdCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZpZXctPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKG5ld1JlY3QpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50
Q29udGFpbmVyLCBuZXdSZWN0KTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQobV9yZXBhaW50
UmVjdCwgbV9vdXRsaW5lQm94KTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+cmVw
YWludEFmdGVyTGF5b3V0SWZOZWVkZWQocmVwYWludENvbnRhaW5lciwgbV9yZXBhaW50UmVjdCwg
bV9vdXRsaW5lQm94KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtX3JlcGFp
bnRSZWN0ID0gbmV3UmVjdDsKQEAgLTI4OCw4ICsyODksOSBAQCB2b2lkIFJlbmRlckxheWVyOjpz
ZXRIYXNWaXNpYmxlQ29udGVudChib29sIGIpCiAgICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0Rp
cnR5ID0gZmFsc2U7IAogICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSBiOwogICAgIGlmIChtX2hh
c1Zpc2libGVDb250ZW50KSB7Ci0gICAgICAgIG1fcmVwYWludFJlY3QgPSByZW5kZXJlcigpLT5h
YnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgbV9vdXRsaW5lQm94ID0gcmVu
ZGVyZXIoKS0+YWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7CisgICAgICAgIFJlbmRlckJveCogcmVw
YWludENvbnRhaW5lciA9IHJlbmRlcmVyKCktPmNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAg
ICAgbV9yZXBhaW50UmVjdCA9IHJlbmRlcmVyKCktPmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KHJlcGFpbnRDb250YWluZXIpOworICAgICAgICBtX291dGxpbmVCb3ggPSByZW5kZXJlcigp
LT5vdXRsaW5lQm91bmRzRm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKICAgICAgICAgaWYg
KCFpc092ZXJmbG93T25seSgpKQogICAgICAgICAgICAgZGlydHlTdGFja2luZ0NvbnRleHRaT3Jk
ZXJMaXN0cygpOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDU0YzE1ZTkuLmZl
NDMzZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMzU4LDYgKzM1OCw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgdXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmKTsKIAorICAgIC8vIFJldHVybiBhIGNhY2hlZCByZXBhaW50IHJl
Y3QsIGNvbXB1dGVkIHJlbGF0aXZlIHRvIHRoZSBsYXllciByZW5kZXJlcidzIGNvbnRhaW5lckZv
clJlcGFpbnQuCiAgICAgSW50UmVjdCByZXBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
YWludFJlY3Q7IH0KICAgICB2b2lkIHNldE5lZWRzRnVsbFJlcGFpbnQoYm9vbCBmID0gdHJ1ZSkg
eyBtX25lZWRzRnVsbFJlcGFpbnQgPSBmOyB9CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAppbmRleCBiYmRiZjUxLi5hMzEwYzM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKQEAgLTE2NTAsNiArMTY1MCwxNyBAQCBSZW5kZXJCb3gqIFJlbmRlck9iamVjdDo6Y29udGFp
bmVyRm9yUmVwYWludCgpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgUmVuZGVyT2Jq
ZWN0OjpyZXBhaW50VmlhQ29udGFpbmVyKFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgY29u
c3QgSW50UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUpCit7CisgICAgaWYgKCFyZXBhaW50Q29udGFp
bmVyIHx8IHJlcGFpbnRDb250YWluZXItPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgIFJlbmRl
clZpZXcqIHYgPSByZXBhaW50Q29udGFpbmVyID8gc3RhdGljX2Nhc3Q8UmVuZGVyVmlldyo+KHJl
cGFpbnRDb250YWluZXIpIDogdmlldygpOworICAgICAgICB2LT5yZXBhaW50Vmlld1JlY3Rhbmds
ZShyLCBpbW1lZGlhdGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEhhbmRsZSBjb250YWlu
ZXItcmVsYXRpdmUgcmVwYWludHMgZXZlbnR1YWxseS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlck9iamVjdDo6cmVwYWludChib29sIGltbWVk
aWF0ZSkKIHsKICAgICAvLyBDYW4ndCB1c2UgdmlldygpLCBzaW5jZSB3ZSBtaWdodCBiZSB1bnJv
b3RlZC4KQEAgLTE2NjMsNyArMTY3NCw4IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50KGJv
b2wgaW1tZWRpYXRlKQogICAgIGlmICh2aWV3LT5wcmludGluZygpKQogICAgICAgICByZXR1cm47
IC8vIERvbid0IHJlcGFpbnQgaWYgd2UncmUgcHJpbnRpbmcuCiAKLSAgICB2aWV3LT5yZXBhaW50
Vmlld1JlY3RhbmdsZShhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSwgaW1tZWRpYXRlKTsK
KyAgICBSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIgPSBjb250YWluZXJGb3JSZXBhaW50KCk7
CisgICAgcmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyID8gcmVwYWludENvbnRh
aW5lciA6IHZpZXcsIGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWlu
ZXIpLCBpbW1lZGlhdGUpOwogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6cmVwYWludFJlY3Rhbmds
ZShjb25zdCBJbnRSZWN0JiByLCBib29sIGltbWVkaWF0ZSkKQEAgLTE2NzksMjMgKzE2OTEsMjQg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgciwg
Ym9vbCBpbW1lZGlhdGUpCiAgICAgaWYgKHZpZXctPnByaW50aW5nKCkpCiAgICAgICAgIHJldHVy
bjsgLy8gRG9uJ3QgcmVwYWludCBpZiB3ZSdyZSBwcmludGluZy4KIAotICAgIEludFJlY3QgYWJz
UmVjdChyKTsKKyAgICBJbnRSZWN0IGRpcnR5UmVjdChyKTsKIAogICAgIC8vIEZJWE1FOiBsYXlv
dXREZWx0YSBuZWVkcyB0byBiZSBhcHBsaWVkIGluIHBhcnRzIGJlZm9yZS9hZnRlciB0cmFuc2Zv
cm1zIGFuZAogICAgIC8vIHJlcGFpbnQgY29udGFpbmVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzMzA4Ci0gICAgYWJzUmVjdC5tb3ZlKHZpZXctPmxheW91dERl
bHRhKCkpOworICAgIGRpcnR5UmVjdC5tb3ZlKHZpZXctPmxheW91dERlbHRhKCkpOwogCi0gICAg
Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoYWJzUmVjdCk7Ci0gICAgdmlldy0+cmVwYWludFZp
ZXdSZWN0YW5nbGUoYWJzUmVjdCwgaW1tZWRpYXRlKTsKKyAgICBSZW5kZXJCb3gqIHJlcGFpbnRD
b250YWluZXIgPSBjb250YWluZXJGb3JSZXBhaW50KCk7CisgICAgY29tcHV0ZVJlY3RGb3JSZXBh
aW50KGRpcnR5UmVjdCwgcmVwYWludENvbnRhaW5lcik7CisgICAgcmVwYWludFZpYUNvbnRhaW5l
cihyZXBhaW50Q29udGFpbmVyID8gcmVwYWludENvbnRhaW5lciA6IHZpZXcsIGRpcnR5UmVjdCwg
aW1tZWRpYXRlKTsKIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElm
TmVlZGVkKGNvbnN0IEludFJlY3QmIG9sZEJvdW5kcywgY29uc3QgSW50UmVjdCYgb2xkT3V0bGlu
ZUJveCkKK2Jvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChSZW5k
ZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IEludFJlY3QmIG9sZEJvdW5kcywgY29uc3Qg
SW50UmVjdCYgb2xkT3V0bGluZUJveCkKIHsKICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwog
ICAgIGlmICh2LT5wcmludGluZygpKQogICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERvbid0IHJl
cGFpbnQgaWYgd2UncmUgcHJpbnRpbmcuCiAKLSAgICBJbnRSZWN0IG5ld0JvdW5kcyA9IGFic29s
dXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOworICAgIEludFJlY3QgbmV3Qm91bmRzID0gY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CiAgICAgSW50UmVjdCBu
ZXdPdXRsaW5lQm94OwogCiAgICAgYm9vbCBmdWxsUmVwYWludCA9IHNlbGZOZWVkc0xheW91dCgp
OwpAQCAtMTcwMywxNCArMTcxNiwxOCBAQCBib29sIFJlbmRlck9iamVjdDo6cmVwYWludEFmdGVy
TGF5b3V0SWZOZWVkZWQoY29uc3QgSW50UmVjdCYgb2xkQm91bmRzLCBjb25zdCBJbgogICAgIGlm
ICghZnVsbFJlcGFpbnQgJiYgc3R5bGUoKS0+Ym9yZGVyRml0KCkgPT0gQm9yZGVyRml0TGluZXMp
CiAgICAgICAgIGZ1bGxSZXBhaW50ID0gdHJ1ZTsKICAgICBpZiAoIWZ1bGxSZXBhaW50KSB7Ci0g
ICAgICAgIG5ld091dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKKyAgICAgICAg
bmV3T3V0bGluZUJveCA9IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIp
OwogICAgICAgICBpZiAobmV3T3V0bGluZUJveC5sb2NhdGlvbigpICE9IG9sZE91dGxpbmVCb3gu
bG9jYXRpb24oKSB8fCAobXVzdFJlcGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiAobmV3Qm91
bmRzICE9IG9sZEJvdW5kcyB8fCBuZXdPdXRsaW5lQm94ICE9IG9sZE91dGxpbmVCb3gpKSkKICAg
ICAgICAgICAgIGZ1bGxSZXBhaW50ID0gdHJ1ZTsKICAgICB9CisKKyAgICBpZiAoIXJlcGFpbnRD
b250YWluZXIpCisgICAgICAgIHJlcGFpbnRDb250YWluZXIgPSB2OworCiAgICAgaWYgKGZ1bGxS
ZXBhaW50KSB7Ci0gICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKG9sZEJvdW5kcyk7Cisg
ICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5lciwgb2xkQm91bmRzKTsK
ICAgICAgICAgaWYgKG5ld0JvdW5kcyAhPSBvbGRCb3VuZHMpCi0gICAgICAgICAgICB2LT5yZXBh
aW50Vmlld1JlY3RhbmdsZShuZXdCb3VuZHMpOworICAgICAgICAgICAgcmVwYWludFZpYUNvbnRh
aW5lcihyZXBhaW50Q29udGFpbmVyLCBuZXdCb3VuZHMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKQEAgLTE3MTksMjcgKzE3MzYsMjcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OnJlcGFp
bnRBZnRlckxheW91dElmTmVlZGVkKGNvbnN0IEludFJlY3QmIG9sZEJvdW5kcywgY29uc3QgSW4K
IAogICAgIGludCBkZWx0YUxlZnQgPSBuZXdCb3VuZHMueCgpIC0gb2xkQm91bmRzLngoKTsKICAg
ICBpZiAoZGVsdGFMZWZ0ID4gMCkKLSAgICAgICAgdi0+cmVwYWludFZpZXdSZWN0YW5nbGUoSW50
UmVjdChvbGRCb3VuZHMueCgpLCBvbGRCb3VuZHMueSgpLCBkZWx0YUxlZnQsIG9sZEJvdW5kcy5o
ZWlnaHQoKSkpOworICAgICAgICByZXBhaW50VmlhQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IEludFJlY3Qob2xkQm91bmRzLngoKSwgb2xkQm91bmRzLnkoKSwgZGVsdGFMZWZ0LCBvbGRCb3Vu
ZHMuaGVpZ2h0KCkpKTsKICAgICBlbHNlIGlmIChkZWx0YUxlZnQgPCAwKQotICAgICAgICB2LT5y
ZXBhaW50Vmlld1JlY3RhbmdsZShJbnRSZWN0KG5ld0JvdW5kcy54KCksIG5ld0JvdW5kcy55KCks
IC1kZWx0YUxlZnQsIG5ld0JvdW5kcy5oZWlnaHQoKSkpOworICAgICAgICByZXBhaW50VmlhQ29u
dGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3QobmV3Qm91bmRzLngoKSwgbmV3Qm91bmRz
LnkoKSwgLWRlbHRhTGVmdCwgbmV3Qm91bmRzLmhlaWdodCgpKSk7CiAKICAgICBpbnQgZGVsdGFS
aWdodCA9IG5ld0JvdW5kcy5yaWdodCgpIC0gb2xkQm91bmRzLnJpZ2h0KCk7CiAgICAgaWYgKGRl
bHRhUmlnaHQgPiAwKQotICAgICAgICB2LT5yZXBhaW50Vmlld1JlY3RhbmdsZShJbnRSZWN0KG9s
ZEJvdW5kcy5yaWdodCgpLCBuZXdCb3VuZHMueSgpLCBkZWx0YVJpZ2h0LCBuZXdCb3VuZHMuaGVp
Z2h0KCkpKTsKKyAgICAgICAgcmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJ
bnRSZWN0KG9sZEJvdW5kcy5yaWdodCgpLCBuZXdCb3VuZHMueSgpLCBkZWx0YVJpZ2h0LCBuZXdC
b3VuZHMuaGVpZ2h0KCkpKTsKICAgICBlbHNlIGlmIChkZWx0YVJpZ2h0IDwgMCkKLSAgICAgICAg
di0+cmVwYWludFZpZXdSZWN0YW5nbGUoSW50UmVjdChuZXdCb3VuZHMucmlnaHQoKSwgb2xkQm91
bmRzLnkoKSwgLWRlbHRhUmlnaHQsIG9sZEJvdW5kcy5oZWlnaHQoKSkpOworICAgICAgICByZXBh
aW50VmlhQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3QobmV3Qm91bmRzLnJpZ2h0
KCksIG9sZEJvdW5kcy55KCksIC1kZWx0YVJpZ2h0LCBvbGRCb3VuZHMuaGVpZ2h0KCkpKTsKIAog
ICAgIGludCBkZWx0YVRvcCA9IG5ld0JvdW5kcy55KCkgLSBvbGRCb3VuZHMueSgpOwogICAgIGlm
IChkZWx0YVRvcCA+IDApCi0gICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKEludFJlY3Qo
b2xkQm91bmRzLngoKSwgb2xkQm91bmRzLnkoKSwgb2xkQm91bmRzLndpZHRoKCksIGRlbHRhVG9w
KSk7CisgICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVj
dChvbGRCb3VuZHMueCgpLCBvbGRCb3VuZHMueSgpLCBvbGRCb3VuZHMud2lkdGgoKSwgZGVsdGFU
b3ApKTsKICAgICBlbHNlIGlmIChkZWx0YVRvcCA8IDApCi0gICAgICAgIHYtPnJlcGFpbnRWaWV3
UmVjdGFuZ2xlKEludFJlY3QobmV3Qm91bmRzLngoKSwgbmV3Qm91bmRzLnkoKSwgbmV3Qm91bmRz
LndpZHRoKCksIC1kZWx0YVRvcCkpOworICAgICAgICByZXBhaW50VmlhQ29udGFpbmVyKHJlcGFp
bnRDb250YWluZXIsIEludFJlY3QobmV3Qm91bmRzLngoKSwgbmV3Qm91bmRzLnkoKSwgbmV3Qm91
bmRzLndpZHRoKCksIC1kZWx0YVRvcCkpOwogCiAgICAgaW50IGRlbHRhQm90dG9tID0gbmV3Qm91
bmRzLmJvdHRvbSgpIC0gb2xkQm91bmRzLmJvdHRvbSgpOwogICAgIGlmIChkZWx0YUJvdHRvbSA+
IDApCi0gICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKEludFJlY3QobmV3Qm91bmRzLngo
KSwgb2xkQm91bmRzLmJvdHRvbSgpLCBuZXdCb3VuZHMud2lkdGgoKSwgZGVsdGFCb3R0b20pKTsK
KyAgICAgICAgcmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5l
d0JvdW5kcy54KCksIG9sZEJvdW5kcy5ib3R0b20oKSwgbmV3Qm91bmRzLndpZHRoKCksIGRlbHRh
Qm90dG9tKSk7CiAgICAgZWxzZSBpZiAoZGVsdGFCb3R0b20gPCAwKQotICAgICAgICB2LT5yZXBh
aW50Vmlld1JlY3RhbmdsZShJbnRSZWN0KG9sZEJvdW5kcy54KCksIG5ld0JvdW5kcy5ib3R0b20o
KSwgb2xkQm91bmRzLndpZHRoKCksIC1kZWx0YUJvdHRvbSkpOworICAgICAgICByZXBhaW50Vmlh
Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qob2xkQm91bmRzLngoKSwgbmV3Qm91
bmRzLmJvdHRvbSgpLCBvbGRCb3VuZHMud2lkdGgoKSwgLWRlbHRhQm90dG9tKSk7CiAKICAgICBp
ZiAobmV3T3V0bGluZUJveCA9PSBvbGRPdXRsaW5lQm94KQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xNzY1LDcgKzE3ODIsNyBAQCBib29sIFJlbmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5
b3V0SWZOZWVkZWQoY29uc3QgSW50UmVjdCYgb2xkQm91bmRzLCBjb25zdCBJbgogICAgICAgICBp
bnQgcmlnaHQgPSBtaW4obmV3Qm91bmRzLnJpZ2h0KCksIG9sZEJvdW5kcy5yaWdodCgpKTsKICAg
ICAgICAgaWYgKHJpZ2h0UmVjdC54KCkgPCByaWdodCkgewogICAgICAgICAgICAgcmlnaHRSZWN0
LnNldFdpZHRoKG1pbihyaWdodFJlY3Qud2lkdGgoKSwgcmlnaHQgLSByaWdodFJlY3QueCgpKSk7
Ci0gICAgICAgICAgICB2LT5yZXBhaW50Vmlld1JlY3RhbmdsZShyaWdodFJlY3QpOworICAgICAg
ICAgICAgcmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByaWdodFJlY3QpOwog
ICAgICAgICB9CiAgICAgfQogICAgIGludCBoZWlnaHQgPSBhYnMobmV3T3V0bGluZUJveC5oZWln
aHQoKSAtIG9sZE91dGxpbmVCb3guaGVpZ2h0KCkpOwpAQCAtMTc4Myw3ICsxODAwLDcgQEAgYm9v
bCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKGNvbnN0IEludFJlY3Qm
IG9sZEJvdW5kcywgY29uc3QgSW4KICAgICAgICAgaW50IGJvdHRvbSA9IG1pbihuZXdCb3VuZHMu
Ym90dG9tKCksIG9sZEJvdW5kcy5ib3R0b20oKSk7CiAgICAgICAgIGlmIChib3R0b21SZWN0Lnko
KSA8IGJvdHRvbSkgewogICAgICAgICAgICAgYm90dG9tUmVjdC5zZXRIZWlnaHQobWluKGJvdHRv
bVJlY3QuaGVpZ2h0KCksIGJvdHRvbSAtIGJvdHRvbVJlY3QueSgpKSk7Ci0gICAgICAgICAgICB2
LT5yZXBhaW50Vmlld1JlY3RhbmdsZShib3R0b21SZWN0KTsKKyAgICAgICAgICAgIHJlcGFpbnRW
aWFDb250YWluZXIocmVwYWludENvbnRhaW5lciwgYm90dG9tUmVjdCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBjN2Ix
NDFiLi45ZmI1NDA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNTczLDYgKzU3Myw5
IEBAIHB1YmxpYzoKICAgICAvLyBpZiBwYWludGluZyBpcyByb290LXJlbGF0aXZlLiBUaGlzIGlz
IHRoZSBjb250YWluZXIgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSAnZm9yUmVwYWludCcK
ICAgICAvLyBtZXRob2RzLgogICAgIFJlbmRlckJveCogY29udGFpbmVyRm9yUmVwYWludCgpIGNv
bnN0OworICAgIC8vIEFjdHVhbGx5IGRvIHRoZSByZXBhaW50IG9mIHJlY3QgciBmb3IgdGhpcyBv
YmplY3Qgd2hpY2ggaGFzIGJlZW4gY29tcHV0ZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2UKKyAg
ICAvLyBvZiByZXBhaW50Q29udGFpbmVyLiBJZiByZXBhaW50Q29udGFpbmVyIGlzIDAsIHJlcGFp
bnQgdmlhIHRoZSB2aWV3LgorICAgIHZvaWQgcmVwYWludFZpYUNvbnRhaW5lcihSZW5kZXJCb3gq
IHJlcGFpbnRDb250YWluZXIsIGNvbnN0IEludFJlY3QmIHIsIGJvb2wgaW1tZWRpYXRlID0gZmFs
c2UpOwogICAgIAogICAgIC8vIFJlcGFpbnQgdGhlIGVudGlyZSBvYmplY3QuICBDYWxsZWQgd2hl
biwgZS5nLiwgdGhlIGNvbG9yIG9mIGEgYm9yZGVyIGNoYW5nZXMsIG9yIHdoZW4gYSBib3JkZXIK
ICAgICAvLyBzdHlsZSBjaGFuZ2VzLgpAQCAtNTgyLDcgKzU4NSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlcGFpbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRlID0gZmFs
c2UpOwogCiAgICAgLy8gUmVwYWludCBvbmx5IGlmIG91ciBvbGQgYm91bmRzIGFuZCBuZXcgYm91
bmRzIGFyZSBkaWZmZXJlbnQuCi0gICAgYm9vbCByZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChj
b25zdCBJbnRSZWN0JiBvbGRCb3VuZHMsIGNvbnN0IEludFJlY3QmIG9sZE91dGxpbmVCb3gpOwor
ICAgIGJvb2wgcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQoUmVuZGVyQm94KiByZXBhaW50Q29u
dGFpbmVyLCBjb25zdCBJbnRSZWN0JiBvbGRCb3VuZHMsIGNvbnN0IEludFJlY3QmIG9sZE91dGxp
bmVCb3gpOwogCiAgICAgLy8gUmVwYWludCBvbmx5IGlmIHRoZSBvYmplY3QgbW92ZWQuCiAgICAg
dmlydHVhbCB2b2lkIHJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKGNvbnN0IEludFJlY3QmIHJl
Y3QpOwpAQCAtNzg0LDYgKzc4NywzNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIEludFJl
Y3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94KiAvKnJlcGFpbnRDb250YWluZXIq
LykgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CiAKKyAgICBjbGFzcyBMYXlvdXRSZXBhaW50
ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgTGF5b3V0UmVwYWludGVyKFJlbmRlck9iamVjdCYg
b2JqZWN0LCBib29sIHNob3VsZFJlcGFpbnQgPSB0cnVlLCBjb25zdCBJbnRSZWN0KiBvbGRCb3Vu
ZHMgPSAwKQorICAgICAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICAgICAsIG1f
cmVwYWludENvbnRhaW5lcigwKQorICAgICAgICAgICAgLCBtX2NoZWNrRm9yUmVwYWludChtX29i
amVjdC5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzaG91bGRSZXBhaW50KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobV9jaGVja0ZvclJlcGFpbnQpIHsKKyAgICAgICAgICAg
ICAgICBtX29sZEJvdW5kcyA9IG9sZEJvdW5kcyA/ICpvbGRCb3VuZHMgOiBtX29iamVjdC5hYnNv
bHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKKyAgICAgICAgICAgICAgICBtX29sZE91dGxpbmVC
b3ggPSBtX29iamVjdC5hYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKKyAgICAgICAgICAgICAgICBt
X3JlcGFpbnRDb250YWluZXIgPSBtX29iamVjdC5jb250YWluZXJGb3JSZXBhaW50KCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybiB0cnVlIGlm
IGl0IHJlcGFpbnRlZC4KKyAgICAgICAgYm9vbCByZXBhaW50QWZ0ZXJMYXlvdXQoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jaGVja0ZvclJlcGFpbnQgPyBtX29iamVjdC5yZXBh
aW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChtX3JlcGFpbnRDb250YWluZXIsIG1fb2xkQm91bmRzLCBt
X29sZE91dGxpbmVCb3gpIDogZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJv
b2wgY2hlY2tGb3JSZXBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9jaGVja0ZvclJlcGFpbnQ7IH0K
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVuZGVyT2JqZWN0JiBtX29iamVjdDsK
KyAgICAgICAgUmVuZGVyQm94KiBtX3JlcGFpbnRDb250YWluZXI7CisgICAgICAgIEludFJlY3Qg
bV9vbGRCb3VuZHM7CisgICAgICAgIEludFJlY3QgbV9vbGRPdXRsaW5lQm94OworICAgICAgICBi
b29sIG1fY2hlY2tGb3JSZXBhaW50OworICAgIH07CisgICAgCiBwcml2YXRlOgogICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUGF0aC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAppbmRleCAx
ZjczYzcwLi41OWUwMThkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRo
LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcApAQCAtMTU2LDIyICsx
NTYsMTYgQEAgYm9vbCBSZW5kZXJQYXRoOjpjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpCiAKIHZv
aWQgUmVuZGVyUGF0aDo6bGF5b3V0KCkKIHsKLSAgICBJbnRSZWN0IG9sZEJvdW5kczsKLSAgICBJ
bnRSZWN0IG9sZE91dGxpbmVCb3g7Ci0gICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0Zv
clJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKTsKLSAgICBpZiAoY2hl
Y2tGb3JSZXBhaW50KSB7Ci0gICAgICAgIG9sZEJvdW5kcyA9IG1fYWJzb2x1dGVCb3VuZHM7Ci0g
ICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKLSAgICB9Ci0g
ICAgICAgIAorICAgIC8vIEZJWE1FOiB1c2luZyBtX2Fic29sdXRlQm91bmRzIGJyZWFrcyBpZiBj
b250YWluZXJGb3JSZXBhaW50KCkgaXMgbm90IHRoZSByb290CisgICAgTGF5b3V0UmVwYWludGVy
IHJlcGFpbnRlcigqdGhpcywgc2VsZk5lZWRzTGF5b3V0KCksICZtX2Fic29sdXRlQm91bmRzKTsK
KyAgICAKICAgICBjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpOwogCiAgICAgc2V0UGF0aChzdGF0
aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KGVsZW1lbnQoKSktPnRvUGF0
aERhdGEoKSk7CiAKICAgICBtX2Fic29sdXRlQm91bmRzID0gYWJzb2x1dGVDbGlwcGVkT3ZlcmZs
b3dSZWN0KCk7CiAKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQotICAgICAgICByZXBhaW50QWZ0
ZXJMYXlvdXRJZk5lZWRlZChvbGRCb3VuZHMsIG9sZE91dGxpbmVCb3gpOworICAgIHJlcGFpbnRl
ci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKIAogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCBlNzRlMjI3Li40YzgzNzhhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBAIC03NywxMyArNzcsNyBAQCB2b2lk
IFJlbmRlclJlcGxhY2VkOjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsK
ICAgICAKLSAgICBJbnRSZWN0IG9sZEJvdW5kczsKLSAgICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7
Ci0gICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQo
KTsKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KSB7Ci0gICAgICAgIG9sZEJvdW5kcyA9IGFic29s
dXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwotICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1
dGVPdXRsaW5lQm91bmRzKCk7Ci0gICAgfQorICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIo
KnRoaXMpOwogICAgIAogICAgIHNldEhlaWdodChtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSk7CiAg
ICAgCkBAIC05MSw5ICs4NSw4IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmxheW91dCgpCiAgICAg
Y2FsY0hlaWdodCgpOwogICAgIGFkanVzdE92ZXJmbG93Rm9yQm94U2hhZG93KCk7CiAgICAgCi0g
ICAgaWYgKGNoZWNrRm9yUmVwYWludCkKLSAgICAgICAgcmVwYWludEFmdGVyTGF5b3V0SWZOZWVk
ZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94KTsKLSAgICAKKyAgICByZXBhaW50ZXIucmVwYWlu
dEFmdGVyTGF5b3V0KCk7ICAgIAorCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKaW5kZXggNmUxN2MwNS4uZWU2
ZTNkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCkBAIC0yMjYs
MTMgKzIyNiw4IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQoKQogICAgIC8vIEFy
Yml0cmFyeSBhZmZpbmUgdHJhbnNmb3JtcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggTGF5b3V0U3Rh
dGUuCiAgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKIAotICAgIEludFJlY3Qgb2xk
Qm91bmRzOwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAgICBib29sIGNoZWNrRm9yUmVw
YWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZXaWxsUGFpbnQoKTsK
LSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KSB7Ci0gICAgICAgIG9sZEJvdW5kcyA9IG1fYWJzb2x1
dGVCb3VuZHM7Ci0gICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMo
KTsKLSAgICB9CisgICAgLy8gRklYTUU6IHVzaW5nIG1fYWJzb2x1dGVCb3VuZHMgYnJlYWtzIGlm
IGNvbnRhaW5lckZvclJlcGFpbnQoKSBpcyBub3QgdGhlIHJvb3QKKyAgICBMYXlvdXRSZXBhaW50
ZXIgcmVwYWludGVyKCp0aGlzLCBzZWxmV2lsbFBhaW50KCksICZtX2Fic29sdXRlQm91bmRzKTsK
ICAgICAKICAgICBjYWxjdWxhdGVMb2NhbFRyYW5zZm9ybSgpOwogCkBAIC0yNTAsOCArMjQ1LDcg
QEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCgpCiAKICAgICBjYWxjQm91bmRzKCk7
CiAKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQotICAgICAgICByZXBhaW50QWZ0ZXJMYXlvdXRJ
Zk5lZWRlZChvbGRCb3VuZHMsIG9sZE91dGxpbmVCb3gpOworICAgIHJlcGFpbnRlci5yZXBhaW50
QWZ0ZXJMYXlvdXQoKTsKIAogICAgIHZpZXcoKS0+ZW5hYmxlTGF5b3V0U3RhdGUoKTsKICAgICBz
ZXROZWVkc0xheW91dChmYWxzZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdJbWFnZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKaW5k
ZXggNTAzNjYzYS4uMjhjMGMzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHSW1hZ2UuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdlLmNwcApA
QCAtMTM3LDEzICsxMzcsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpsYXlvdXQoKQogewogICAg
IEFTU0VSVChuZWVkc0xheW91dCgpKTsKICAgICAKLSAgICBJbnRSZWN0IG9sZEJvdW5kczsKLSAg
ICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7Ci0gICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVj
a0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKTsKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KSB7Ci0g
ICAgICAgIG9sZEJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwotICAgICAg
ICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7Ci0gICAgfQorICAgIExh
eW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMpOwogICAgIAogICAgIGNhbGN1bGF0ZUxvY2Fs
VHJhbnNmb3JtKCk7CiAgICAgCkBAIC0xNTgsOSArMTUyLDggQEAgdm9pZCBSZW5kZXJTVkdJbWFn
ZTo6bGF5b3V0KCkKIAogICAgIGNhbGN1bGF0ZUFic29sdXRlQm91bmRzKCk7CiAKLSAgICBpZiAo
Y2hlY2tGb3JSZXBhaW50KQotICAgICAgICByZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChvbGRC
b3VuZHMsIG9sZE91dGxpbmVCb3gpOwotCisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91
dCgpOworICAgIAogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmNwcAppbmRleCA1NGEzMGRmLi4wZjc5NzhjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSb290LmNwcApAQCAtOTEsMTEgKzkxLDggQEAgdm9pZCBSZW5kZXJTVkdSb290Ojps
YXlvdXQoKQogICAgIC8vIEFyYml0cmFyeSBhZmZpbmUgdHJhbnNmb3JtcyBhcmUgaW5jb21wYXRp
YmxlIHdpdGggTGF5b3V0U3RhdGUuCiAgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsK
IAotICAgIEludFJlY3Qgb2xkQm91bmRzID0gbV9hYnNvbHV0ZUJvdW5kczsKLSAgICBJbnRSZWN0
IG9sZE91dGxpbmVCb3g7Ci0gICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJlcGFp
bnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKTsKLSAgICBpZiAoY2hlY2tGb3JS
ZXBhaW50KQotICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7
CisgICAgLy8gRklYTUU6IHVzaW5nIG1fYWJzb2x1dGVCb3VuZHMgYnJlYWtzIGlmIGNvbnRhaW5l
ckZvclJlcGFpbnQoKSBpcyBub3QgdGhlIHJvb3QKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWlu
dGVyKCp0aGlzLCBzZWxmTmVlZHNMYXlvdXQoKSwgJm1fYWJzb2x1dGVCb3VuZHMpOwogCiAgICAg
Y2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwpAQCAtMTEzLDggKzExMCw3IEBAIHZvaWQg
UmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKICAgICAgICAgQVNTRVJUKCFjaGlsZC0+bmVlZHNMYXlv
dXQoKSk7CiAgICAgfQogCi0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkKLSAgICAgICAgcmVwYWlu
dEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94KTsKKyAgICByZXBh
aW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CiAKICAgICB2aWV3KCktPmVuYWJsZUxheW91dFN0
YXRlKCk7CiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0LmNwcAppbmRleCBlZTVhYjM0Li44NDJhMDI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdUZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0LmNwcApAQCAtODEsMTMgKzgxLDggQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQog
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgaGFjayB0byBhdm9pZCB0aGUgUmVuZGVyQmxvY2s6Omxh
eW91dCgpIHBhcnRpYWwgcmVwYWludGluZyBjb2RlIHdoaWNoIGlzIG5vdCAoeWV0KSBTVkcgYXdh
cmUKICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKIAotICAgIEludFJlY3Qgb2xkQm91bmRzOwot
ICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IGNo
ZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwotICAgIGlmIChjaGVja0ZvclJlcGFpbnQpIHsK
LSAgICAgICAgb2xkQm91bmRzID0gbV9hYnNvbHV0ZUJvdW5kczsKLSAgICAgICAgb2xkT3V0bGlu
ZUJveCA9IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwotICAgIH0KKyAgICAvLyBGSVhNRTogdXNp
bmcgbV9hYnNvbHV0ZUJvdW5kcyBicmVha3MgaWYgY29udGFpbmVyRm9yUmVwYWludCgpIGlzIG5v
dCB0aGUgcm9vdAorICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsICZtX2Fic29s
dXRlQm91bmRzKTsKIAogICAgIC8vIEJlc3QgZ3Vlc3MgZm9yIGEgcmVsYXRpdmUgc3RhcnRpbmcg
cG9pbnQKICAgICBTVkdUZXh0RWxlbWVudCogdGV4dCA9IHN0YXRpY19jYXN0PFNWR1RleHRFbGVt
ZW50Kj4oZWxlbWVudCgpKTsKQEAgLTEwMSwxMCArOTYsOCBAQCB2b2lkIFJlbmRlclNWR1RleHQ6
OmxheW91dCgpCiAKICAgICBtX2Fic29sdXRlQm91bmRzID0gYWJzb2x1dGVDbGlwcGVkT3ZlcmZs
b3dSZWN0KCk7CiAKLSAgICBib29sIHJlcGFpbnRlZCA9IGZhbHNlOwotICAgIGlmIChjaGVja0Zv
clJlcGFpbnQpCi0gICAgICAgIHJlcGFpbnRlZCA9IHJlcGFpbnRBZnRlckxheW91dElmTmVlZGVk
KG9sZEJvdW5kcywgb2xkT3V0bGluZUJveCk7Ci0gICAgCisgICAgcmVwYWludGVyLnJlcGFpbnRB
ZnRlckxheW91dCgpOworICAgICAgICAKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVy
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNwcApp
bmRleCA0MjgyZWZjLi5kMmNiMWQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U1ZHVmlld3BvcnRDb250YWluZXIuY3BwCkBAIC01MiwxMiArNTIsOSBAQCB2b2lkIFJlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyOjpsYXlvdXQoKQogICAgIC8vIEFyYml0cmFyeSBhZmZpbmUgdHJh
bnNmb3JtcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggTGF5b3V0U3RhdGUuCiAgICAgdmlldygpLT5k
aXNhYmxlTGF5b3V0U3RhdGUoKTsKICAgICAKLSAgICBJbnRSZWN0IG9sZEJvdW5kcyA9IG1fYWJz
b2x1dGVCb3VuZHM7Ci0gICAgSW50UmVjdCBvbGRPdXRsaW5lQm94OwotICAgIGJvb2wgY2hlY2tG
b3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5lZWRzTGF5
b3V0KCk7Ci0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkKLSAgICAgICAgb2xkT3V0bGluZUJveCA9
IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwotCisgICAgLy8gRklYTUU6IHVzaW5nIG1fYWJzb2x1
dGVCb3VuZHMgYnJlYWtzIGlmIGNvbnRhaW5lckZvclJlcGFpbnQoKSBpcyBub3QgdGhlIHJvb3QK
KyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBzZWxmTmVlZHNMYXlvdXQoKSwg
Jm1fYWJzb2x1dGVCb3VuZHMpOworICAgIAogICAgIGNhbGNCb3VuZHMoKTsgICAgCiAgICAgCiAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewpAQCAtNjgsOCArNjUsNyBAQCB2b2lkIFJlbmRlclNW
R1ZpZXdwb3J0Q29udGFpbmVyOjpsYXlvdXQoKQogICAgICAgICBBU1NFUlQoIWNoaWxkLT5uZWVk
c0xheW91dCgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkKLSAgICAg
ICAgcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94KTsK
KyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CiAgICAgCiAgICAgdmlldygpLT5l
bmFibGVMYXlvdXRTdGF0ZSgpOwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAppbmRleCBhZWUwNzI3Li44OWFiYjAxIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwCkBAIC0yNTcsMTQgKzI1Nyw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91
dCgpCiAKICAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAgICAgICAgIAotICAgIEludFJl
Y3Qgb2xkQm91bmRzOwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAgICBib29sIGNoZWNr
Rm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwotICAgIGlmIChjaGVj
a0ZvclJlcGFpbnQpIHsKLSAgICAgICAgb2xkQm91bmRzID0gYWJzb2x1dGVDbGlwcGVkT3ZlcmZs
b3dSZWN0KCk7Ci0gICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMo
KTsKLSAgICB9Ci0gICAgCisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcyk7CiAg
ICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6
ZSh4KCksIHkoKSkpOwogCiAgICAgc2V0SGVpZ2h0KDApOwpAQCAtNDI3LDEwICs0MjAsOCBAQCB2
b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogCiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CiAKLSAg
ICBib29sIGRpZEZ1bGxSZXBhaW50ID0gdHJ1ZTsKKyAgICBib29sIGRpZEZ1bGxSZXBhaW50ID0g
cmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwogICAgIC8vIFJlcGFpbnQgd2l0aCBvdXIg
bmV3IGJvdW5kcyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBvdXIgb2xkIGJvdW5kcy4KLSAg
ICBpZiAoY2hlY2tGb3JSZXBhaW50KQotICAgICAgICBkaWRGdWxsUmVwYWludCA9IHJlcGFpbnRB
ZnRlckxheW91dElmTmVlZGVkKG9sZEJvdW5kcywgb2xkT3V0bGluZUJveCk7CiAgICAgaWYgKCFk
aWRGdWxsUmVwYWludCAmJiBzZWN0aW9uTW92ZWQpCiAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUo
SW50UmVjdChtX292ZXJmbG93TGVmdCwgbW92ZWRTZWN0aW9uVG9wLCBtX292ZXJmbG93V2lkdGgg
LSBtX292ZXJmbG93TGVmdCwgbV9vdmVyZmxvd0hlaWdodCAtIG1vdmVkU2VjdGlvblRvcCkpOwog
ICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgYi9XZWJDb3JlL3Jl
bmRlcmluZy9iaWRpLmNwcAppbmRleCA1ODYxODA0Li5mNDNmMGM0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9iaWRpLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcApA
QCAtODQ1LDcgKzg0NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVu
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50VG9wLCBpCiAgICAgICAgICAgICAg
ICAgLy8gdGhhdCB0aGUgYmxvY2sgcmVhbGx5IG5lZWRlZCBhIGZ1bGwgbGF5b3V0LCB3ZSBtaXNz
ZWQgb3VyIGNoYW5jZSB0byByZXBhaW50IHRoZSBsYXllcgogICAgICAgICAgICAgICAgIC8vIGJl
Zm9yZSBsYXlvdXQgc3RhcnRlZC4gIEx1Y2tpbHkgdGhlIGxheWVyIGhhcyBjYWNoZWQgdGhlIHJl
cGFpbnQgcmVjdCBmb3IgaXRzIG9yaWdpbmFsCiAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24g
YW5kIHNpemUsIGFuZCBzbyB3ZSBjYW4gdXNlIHRoYXQgdG8gbWFrZSBhIHJlcGFpbnQgaGFwcGVu
IG5vdy4KLSAgICAgICAgICAgICAgICB2LT5yZXBhaW50Vmlld1JlY3RhbmdsZShtX2xheWVyLT5y
ZXBhaW50UmVjdCgpKTsKKyAgICAgICAgICAgICAgICByZXBhaW50VmlhQ29udGFpbmVyKGNvbnRh
aW5lckZvclJlcGFpbnQoKSwgbV9sYXllci0+cmVwYWludFJlY3QoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27086</attachid>
            <date>2009-01-27 13:46:56 -0800</date>
            <delta_ts>2009-01-27 13:54:57 -0800</delta_ts>
            <desc>Patch to put the repaintContainer argument first in computeRectForRepaint()</desc>
            <filename>23360_patch_3.txt</filename>
            <type>text/plain</type>
            <size>11424</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTA5MDRiMi4uNTM4YTM2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzNyBAQAogMjAwOS0wMS0yNyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGbGlwIHRoZSBhcmd1bWVudHMgb2YgY29tcHV0ZVJlY3RGb3JS
ZXBhaW50KCkgZnJvbQorICAgICAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBhaW50KEludFJlY3Qm
LCBSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIGJvb2wpCisgICAgICAgIHRvIAorICAgICAg
ICAgICAgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwg
SW50UmVjdCYsIGJvb2wpCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGb3JlaWduT2Jq
ZWN0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
b3JlaWduT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpj
b21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJWaWV3Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJWaWV3Lmg6CisKKzIwMDktMDEtMjcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dAogCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU2NwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKaW5kZXggZGM2ZjMzMC4uOTJiYzI0NiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCkBAIC0xNTY2LDExICsxNTY2LDExIEBAIEludFJlY3QgUmVuZGVyQm94OjpjbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpCiAgICAg
ICAgICAgICByLmluZmxhdGUodi0+bWF4aW1hbE91dGxpbmVTaXplKCkpOwogICAgICAgICB9CiAg
ICAgfQotICAgIGNvbXB1dGVSZWN0Rm9yUmVwYWludChyLCByZXBhaW50Q29udGFpbmVyKTsKKyAg
ICBjb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcik7CiAgICAgcmV0dXJu
IHI7CiB9CiAKLXZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoSW50UmVjdCYg
cmVjdCwgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkKQordm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIs
IEludFJlY3QmIHJlY3QsIGJvb2wgZml4ZWQpCiB7CiAgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2
aWV3KCkpIHsKICAgICAgICAgLy8gTGF5b3V0U3RhdGUgaXMgb25seSB2YWxpZCBmb3Igcm9vdC1y
ZWxhdGl2ZSByZXBhaW50aW5nCkBAIC0xNjUxLDcgKzE2NTEsNyBAQCB2b2lkIFJlbmRlckJveDo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KEludFJlY3QmIHJlY3QsIFJlbmRlckJveCogcmVwYWludENv
bnRhaW5lcgogICAgIH0gZWxzZQogICAgICAgICByZWN0LnNldExvY2F0aW9uKHRvcExlZnQpOwog
ICAgIAotICAgIG8tPmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZWN0LCByZXBhaW50Q29udGFpbmVy
LCBmaXhlZCk7CisgICAgby0+Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIs
IHJlY3QsIGZpeGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnJlcGFpbnREdXJpbmdMYXlvdXRJ
Zk1vdmVkKGNvbnN0IEludFJlY3QmIHJlY3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDg5MDlh
ZTUuLjliMDU2Y2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC0yMDcsNyArMjA3LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgaW50IGxlZnRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZs
b3dJbnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVkZVNlbGYgPSB0cnVlKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gq
IHJlcGFpbnRDb250YWluZXIpOwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFp
bnQoSW50UmVjdCYsIFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCA9IGZh
bHNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveCog
cmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CiAgICAgSW50
U2l6ZSBvZmZzZXRGb3JQb3NpdGlvbmVkSW5Db250YWluZXIoUmVuZGVyT2JqZWN0KikgY29uc3Q7
CiAgICAgdmlydHVhbCBGbG9hdFF1YWQgbG9jYWxUb0NvbnRhaW5lclF1YWQoY29uc3QgRmxvYXRR
dWFkJiwgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkID0gZmFsc2UpIGNv
bnN0OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0
LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCmluZGV4IDUy
MzYwMWMuLmEzYjA0MzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVp
Z25PYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3Qu
Y3BwCkBAIC03MCwxMiArNzAsMTIgQEAgdm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKQogICAgIHBhaW50
SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KEludFJlY3QmIHJlY3QsIFJlbmRlckJveCogcmVwYWludENv
bnRhaW5lciwgYm9vbCBmaXhlZCkKK3ZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6Y29tcHV0ZVJl
Y3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVjdCwg
Ym9vbCBmaXhlZCkKIHsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSB0cmFu
c2xhdGlvbkZvckF0dHJpYnV0ZXMoKSAqIGxvY2FsVHJhbnNmb3JtKCk7CiAgICAgcmVjdCA9IHRy
YW5zZm9ybS5tYXBSZWN0KHJlY3QpOwogCi0gICAgUmVuZGVyQmxvY2s6OmNvbXB1dGVSZWN0Rm9y
UmVwYWludChyZWN0LCByZXBhaW50Q29udGFpbmVyLCBmaXhlZCk7CisgICAgUmVuZGVyQmxvY2s6
OmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCByZWN0LCBmaXhlZCk7CiB9
CiAKIGJvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6Y2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5oCmluZGV4IDI4ZjRkZGIuLmQ0OTFj
ODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuaAor
KysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKQEAgLTQyLDcgKzQy
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggbG9jYWxUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCBi
b29sIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0
ZVJlY3RGb3JSZXBhaW50KEludFJlY3QmLCBSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIGJv
b2wgZml4ZWQgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVkID0gZmFs
c2UpOwogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCmluZGV4IDRmNDQxMmQuLjYxMDgyYTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcApAQCAtNDQwLDcgKzQ0MCw3IEBAIEludFJlY3QgUmVuZGVySW5saW5lOjpjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpCiAgICAgICAg
IHIgPSBpbnRlcnNlY3Rpb24ocmVwYWludFJlY3QsIGJveFJlY3QpOwogICAgIH0KICAgICBBU1NF
UlQocmVwYWludENvbnRhaW5lciAhPSB0aGlzKTsKLSAgICBjYi0+Y29tcHV0ZVJlY3RGb3JSZXBh
aW50KHIsIHJlcGFpbnRDb250YWluZXIpOworICAgIGNiLT5jb21wdXRlUmVjdEZvclJlcGFpbnQo
cmVwYWludENvbnRhaW5lciwgcik7CiAKICAgICBpZiAob3cpIHsKICAgICAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2li
bGluZygpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBiYmRiZjUxLi5iOGVk
YTlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTE4MzAsNyArMTgzMCw3IEBA
IEludFJlY3QgUmVuZGVyT2JqZWN0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5k
ZXJCb3gqIHJlcGFpbnRDb250YWluZXIpCiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KIAotdm9p
ZCBSZW5kZXJPYmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChJbnRSZWN0JiByZWN0LCBSZW5k
ZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQpCit2b2lkIFJlbmRlck9iamVjdDo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgSW50UmVj
dCYgcmVjdCwgYm9vbCBmaXhlZCkKIHsKICAgICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0aGlz
KQogICAgICAgICByZXR1cm47CkBAIC0xODU4LDcgKzE4NTgsNyBAQCB2b2lkIFJlbmRlck9iamVj
dDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KEludFJlY3QmIHJlY3QsIFJlbmRlckJveCogcmVwYWlu
dENvbnRhaQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG8t
PmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZWN0LCByZXBhaW50Q29udGFpbmVyLCBmaXhlZCk7Cisg
ICAgICAgIG8tPmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCByZWN0LCBm
aXhlZCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGM3YjE0MWIu
LjhiNzNkN2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC02MDYsMTEgKzYwNiwxMSBA
QCBwdWJsaWM6CiAgICAgLy8gdGhhdCByZWN0IGluIHZpZXcgY29vcmRpbmF0ZXMuCiAgICAgdm9p
ZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29sIGZpeGVkID0gZmFs
c2UpCiAgICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZVJlY3RGb3JSZXBhaW50KHIsIDAsIGZp
eGVkKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVSZWN0Rm9yUmVwYWludCgwLCByLCBmaXhlZCk7
CiAgICAgfQogICAgIC8vIEdpdmVuIGEgcmVjdCBpbiB0aGUgb2JqZWN0J3MgY29vcmRpbmF0ZSBz
cGFjZSwgY29tcHV0ZSBhIHJlY3Qgc3VpdGFibGUgZm9yIHJlcGFpbnRpbmcKICAgICAvLyB0aGF0
IHJlY3QgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgcmVwYWludENvbnRhaW5lci4KLSAgICB2
aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KEludFJlY3QmLCBSZW5kZXJCb3gqIHJl
cGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lkIGNv
bXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qm
LCBib29sIGZpeGVkID0gZmFsc2UpOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gMTsgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAK
aW5kZXggZTc0ZTIyNy4uZGVlM2ZjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNw
cApAQCAtNDEyLDcgKzQxMiw3IEBAIEludFJlY3QgUmVuZGVyUmVwbGFjZWQ6OmNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lCiAgICAgICAgIGlm
ICh2KQogICAgICAgICAgICAgci5pbmZsYXRlKHN0eWxlKCktPm91dGxpbmVTaXplKCkpOwogICAg
IH0KLSAgICBjb21wdXRlUmVjdEZvclJlcGFpbnQociwgcmVwYWludENvbnRhaW5lcik7CisgICAg
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHIpOwogICAgIHJldHVybiBy
OwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCBhODQzMTMxLi5h
MWY4YjFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
CisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTIwMSwxMSAr
MjAxLDExIEBAIEludFJlY3QgUmVuZGVyVGFibGVDZWxsOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluCiAgICAgICAgIC8vIHJlcGFpbnQgY29u
dGFpbmVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzA4CiAg
ICAgICAgIHIubW92ZSh2LT5sYXlvdXREZWx0YSgpKTsKICAgICB9Ci0gICAgY29tcHV0ZVJlY3RG
b3JSZXBhaW50KHIsIHJlcGFpbnRDb250YWluZXIpOworICAgIGNvbXB1dGVSZWN0Rm9yUmVwYWlu
dChyZXBhaW50Q29udGFpbmVyLCByKTsKICAgICByZXR1cm4gcjsKIH0KIAotdm9pZCBSZW5kZXJU
YWJsZUNlbGw6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChJbnRSZWN0JiByLCBSZW5kZXJCb3gqIHJl
cGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0
ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgciwg
Ym9vbCBmaXhlZCkKIHsKICAgICBpZiAocmVwYWludENvbnRhaW5lciA9PSB0aGlzKQogICAgICAg
ICByZXR1cm47CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNvbXB1
dGVSZWN0Rm9yUmVwYWludChJbnRSZWN0JiByLCBSZW5kZXJCb3gqIHJlcGFpbnRDb250YWkKICAg
ICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwogICAgIGlmICgoIXYgfHwgIXYtPmxheW91dFN0YXRl
RW5hYmxlZCgpKSAmJiBwYXJlbnQoKSkKICAgICAgICAgci5tb3ZlKC1wYXJlbnRCb3goKS0+eCgp
LCAtcGFyZW50Qm94KCktPnkoKSk7IC8vIFJvd3MgYXJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUg
c3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCi0gICAgUmVuZGVyQmxvY2s6OmNv
bXB1dGVSZWN0Rm9yUmVwYWludChyLCByZXBhaW50Q29udGFpbmVyLCBmaXhlZCk7CisgICAgUmVu
ZGVyQmxvY2s6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCByLCBmaXhl
ZCk7CiB9CiAKIEZsb2F0UG9pbnQgUmVuZGVyVGFibGVDZWxsOjpsb2NhbFRvQWJzb2x1dGUoRmxv
YXRQb2ludCBsb2NhbFBvaW50LCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMpIGNvbnN0
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCmluZGV4IDc1ZjEzODguLjY2ZGM5NjMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKFBhaW50SW5mbyYsIGludCB0eCwg
aW50IHR5LCBSZW5kZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpOwogCiAgICAgdmlydHVhbCBJ
bnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENv
bnRhaW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChJbnRSZWN0
JiwgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkID0gZmFsc2UpOworICAg
IHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29u
dGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIEZsb2F0
UG9pbnQgbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IEZsb2F0UG9pbnQo
KSwgYm9vbCBmaXhlZCA9IGZhbHNlLCBib29sIHVzZVRyYW5zZm9ybXMgPSBmYWxzZSkgY29uc3Q7
CiAgICAgdmlydHVhbCBGbG9hdFBvaW50IGFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50IGNvbnRh
aW5lclBvaW50LCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNl
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAppbmRleCBjNmVkZDViLi4zZjExOGUw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgUmVu
ZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgdXIsIGJvb2wgaW1t
ZWRpYXRlKQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJWaWV3Ojpjb21wdXRlUmVjdEZvclJlcGFp
bnQoSW50UmVjdCYgcmVjdCwgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVk
KQordm9pZCBSZW5kZXJWaWV3Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBh
aW50Q29udGFpbmVyLCBJbnRSZWN0JiByZWN0LCBib29sIGZpeGVkKQogewogICAgIC8vIElmIGEg
Y29udGFpbmVyIHdhcyBzcGVjaWZpZWQsIGFuZCB3YXMgbm90IDAgb3IgdGhlIFJlbmRlclZpZXcs
CiAgICAgLy8gdGhlbiB3ZSBzaG91bGQgaGF2ZSBmb3VuZCBpdCBieSBub3cuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmgKaW5kZXggOGU3YmY5NS4uYzFmMzA3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApA
QCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3Zlcmhhbmdp
bmdGbG9hdHMoKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVS
ZWN0Rm9yUmVwYWludChJbnRSZWN0JiwgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBib29s
IGZpeGVkID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQo
UmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNl
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludFZpZXdSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYs
IGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsK
</data>
<flag name="review"
          id="13006"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27087</attachid>
            <date>2009-01-27 14:19:51 -0800</date>
            <delta_ts>2009-01-27 15:06:19 -0800</delta_ts>
            <desc>Phase 3 patch: use container-relative repaint during layout.</desc>
            <filename>23360_patch_phase3.txt</filename>
            <type>text/plain</type>
            <size>28453</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmM3NWI4OS4uMDQ2MmVlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw1OSBAQAogMjAwOS0wMS0yNyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzNjAKKyAgICAgICAgCisgICAgICAgIFVzZSB0aGUgbmV3IGNvbnRhaW5lci1yZWxhdGl2
ZSByZXBhaW50IG1ldGhvZHMgdG8gY29tcHV0ZQorICAgICAgICBwb3N0LWxheW91dCByZXBhaW50
cywgYW5kIHJlcGFpbnRzIHVzaW5nIFJlbmRlckxheWVyJ3MKKyAgICAgICAgY2FjaGVkIHJlcGFp
bnRSZWN0KCkgcmVsYXRpdmUgdG8gdGhhdCBjb250YWluZXIsIHJhdGhlciB0aGFuCisgICAgICAg
IHVzaW5nIGFic29sdXRlIGNvb3Jkcy4KKworICAgICAgICBSZXBsYWNlZCBsb3RzIG9mIGJvaWxl
cnBsYXRlIG9sZC9uZXcgcmVjdCBjb2RlIGluIHZhcmlvdXMKKyAgICAgICAgbGF5b3V0IG1ldGhv
ZHMgd2l0aCBhIHN0YWNrLWJhc2VkIExheW91dFJlcGFpbnRlciBjbGFzcywgYW5kCisgICAgICAg
IGZpeGVkIGEgYnVnIGluIFJlbmRlclRhYmxlIHdoaWNoIHNldCBkaWRGdWxsUmVwYWludCB0bwor
ICAgICAgICAndHJ1ZScgZXZlcnkgdGltZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2spOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZvcmVp
Z25PYmplY3Q6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0SGFzVmlzaWJsZUNvbnRlbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpyZXBhaW50Vmlh
Q29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlcGFpbnRSZWN0YW5nbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpMYXlvdXRSZXBhaW50ZXI6OkxheW91dFJlcGFpbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OkxheW91dFJlcGFpbnRlcjo6cmVwYWludEFmdGVyTGF5b3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6TGF5b3V0UmVwYWludGVyOjpjaGVj
a0ZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXRoLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpsYXlv
dXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFn
ZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6Omxh
eW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyOjpsYXlvdXQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvYmlkaS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorCisy
MDA5LTAxLTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQKIAogICAgICAgICBGbGlwIHRoZSBhcmd1bWVudHMg
b2YgY29tcHV0ZVJlY3RGb3JSZXBhaW50KCkgZnJvbQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CmluZGV4IGNkOWQ3NTQuLjU4YWU3ZTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAg
LTYxMSwxNCArNjExLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxh
eW91dENoaWxkcmVuKQogICAgIGlmICghcmVsYXlvdXRDaGlsZHJlbiAmJiBsYXlvdXRPbmx5UG9z
aXRpb25lZE9iamVjdHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBvbGRCb3Vu
ZHM7Ci0gICAgSW50UmVjdCBvbGRPdXRsaW5lQm94OwotICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50
ID0gbV9ldmVySGFkTGF5b3V0ICYmIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwotICAg
IGlmIChjaGVja0ZvclJlcGFpbnQpIHsKLSAgICAgICAgb2xkQm91bmRzID0gYWJzb2x1dGVDbGlw
cGVkT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxp
bmVCb3VuZHMoKTsKLSAgICB9Ci0KKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlz
LCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOwogICAg
IExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUo
eCgpLCB5KCkpLCBtX2hhc0NvbHVtbnMgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlv
bigpKTsKIAogICAgIGludCBvbGRXaWR0aCA9IHdpZHRoKCk7CkBAIC03NDksOSArNzQyLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuKQogICAg
ICAgICBtX2xheWVyLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIAogICAgIC8vIFJl
cGFpbnQgd2l0aCBvdXIgbmV3IGJvdW5kcyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBvdXIg
b2xkIGJvdW5kcy4KLSAgICBib29sIGRpZEZ1bGxSZXBhaW50ID0gZmFsc2U7Ci0gICAgaWYgKGNo
ZWNrRm9yUmVwYWludCkKLSAgICAgICAgZGlkRnVsbFJlcGFpbnQgPSByZXBhaW50QWZ0ZXJMYXlv
dXRJZk5lZWRlZChvbGRCb3VuZHMsIG9sZE91dGxpbmVCb3gpOworICAgIGJvb2wgZGlkRnVsbFJl
cGFpbnQgPSByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CiAgICAgaWYgKCFkaWRGdWxs
UmVwYWludCAmJiByZXBhaW50VG9wICE9IHJlcGFpbnRCb3R0b20gJiYgKHN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFIHx8IGVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50
KCkpKSB7CiAgICAgICAgIEludFJlY3QgcmVwYWludFJlY3QobV9vdmVyZmxvd0xlZnQsIHJlcGFp
bnRUb3AsIG1fb3ZlcmZsb3dXaWR0aCAtIG1fb3ZlcmZsb3dMZWZ0LCByZXBhaW50Qm90dG9tIC0g
cmVwYWludFRvcCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhp
YmxlQm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAppbmRl
eCBjNDBmYjc1Li4zMzQxMWY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
Y3BwCkBAIC0yMDAsMTQgKzIwMCw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKICAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4gJiYg
bGF5b3V0T25seVBvc2l0aW9uZWRPYmplY3RzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIElu
dFJlY3Qgb2xkQm91bmRzOwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAgICBib29sIGNo
ZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwotICAgIGlmIChj
aGVja0ZvclJlcGFpbnQpIHsKLSAgICAgICAgb2xkQm91bmRzID0gYWJzb2x1dGVDbGlwcGVkT3Zl
cmZsb3dSZWN0KCk7Ci0gICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3Vu
ZHMoKTsKLSAgICB9Ci0KKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVj
a0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CiAgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0
YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHkoKSksIGhhc1RyYW5zZm9ybSgp
IHx8IGhhc1JlZmxlY3Rpb24oKSk7CiAKICAgICBpbnQgcHJldmlvdXNXaWR0aCA9IHdpZHRoKCk7
CkBAIC0zMDIsOCArMjk1LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2so
Ym9vbCByZWxheW91dENoaWxkcmVuKQogICAgICAgICBtX2xheWVyLT51cGRhdGVTY3JvbGxJbmZv
QWZ0ZXJMYXlvdXQoKTsKIAogICAgIC8vIFJlcGFpbnQgd2l0aCBvdXIgbmV3IGJvdW5kcyBpZiB0
aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBvdXIgb2xkIGJvdW5kcy4KLSAgICBpZiAoY2hlY2tGb3JS
ZXBhaW50KQotICAgICAgICByZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChvbGRCb3VuZHMsIG9s
ZE91dGxpbmVCb3gpOworICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKICAgICAK
ICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZv
cmVpZ25PYmplY3QuY3BwCmluZGV4IGEzYjA0MzIuLmVhYjg3NjkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCkBAIC05MiwxMyArOTIsOCBAQCB2b2lkIFJlbmRl
ckZvcmVpZ25PYmplY3Q6OmxheW91dCgpCiAgICAgLy8gQXJiaXRyYXJ5IGFmZmluZSB0cmFuc2Zv
cm1zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBMYXlvdXRTdGF0ZS4KICAgICB2aWV3KCktPmRpc2Fi
bGVMYXlvdXRTdGF0ZSgpOwogCi0gICAgSW50UmVjdCBvbGRCb3VuZHM7Ci0gICAgSW50UmVjdCBv
bGRPdXRsaW5lQm94OwotICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCk7Ci0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkgewotICAgICAgICBvbGRC
b3VuZHMgPSBtX2Fic29sdXRlQm91bmRzOwotICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1
dGVPdXRsaW5lQm91bmRzKCk7Ci0gICAgfQorICAgIC8vIEZJWE1FOiB1c2luZyBtX2Fic29sdXRl
Qm91bmRzIGJyZWFrcyBpZiBjb250YWluZXJGb3JSZXBhaW50KCkgaXMgbm90IHRoZSByb290Cisg
ICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5n
TGF5b3V0KCksICZtX2Fic29sdXRlQm91bmRzKTsKICAgICAKICAgICBjYWxjdWxhdGVMb2NhbFRy
YW5zZm9ybSgpOwogICAgIApAQCAtMTA2LDggKzEwMSw3IEBAIHZvaWQgUmVuZGVyRm9yZWlnbk9i
amVjdDo6bGF5b3V0KCkKIAogICAgIG1fYWJzb2x1dGVCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRP
dmVyZmxvd1JlY3QoKTsKIAotICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCi0gICAgICAgIHJlcGFp
bnRBZnRlckxheW91dElmTmVlZGVkKG9sZEJvdW5kcywgb2xkT3V0bGluZUJveCk7CisgICAgcmVw
YWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwogCiAgICAgdmlldygpLT5lbmFibGVMYXlvdXRT
dGF0ZSgpOwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAppbmRleCBiZTA3NGJlLi43NTUzY2YxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CkBAIC0yMzEsMTYgKzIzMSwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9ucyhib29sIGRvRnVsbFJlcGFpbnQsIGJvb2wgY2hlY2tGb3JSZXBhaW50KQogICAgICAgICAv
LyBmcm9tIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpLgogICAgICAgICBBU1NFUlQoIXZp
ZXctPmxheW91dFN0YXRlRW5hYmxlZCgpKTsKIAotICAgICAgICBJbnRSZWN0IG5ld1JlY3QgPSBy
ZW5kZXJlcigpLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgSW50UmVj
dCBuZXdPdXRsaW5lQm94ID0gcmVuZGVyZXIoKS0+YWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7Cisg
ICAgICAgIFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCktPmNvbnRhaW5l
ckZvclJlcGFpbnQoKTsKKyAgICAgICAgSW50UmVjdCBuZXdSZWN0ID0gcmVuZGVyZXIoKS0+Y2xp
cHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CisgICAgICAgIElu
dFJlY3QgbmV3T3V0bGluZUJveCA9IHJlbmRlcmVyKCktPm91dGxpbmVCb3VuZHNGb3JSZXBhaW50
KHJlcGFpbnRDb250YWluZXIpOwogICAgICAgICBpZiAoY2hlY2tGb3JSZXBhaW50KSB7CiAgICAg
ICAgICAgICBpZiAodmlldyAmJiAhdmlldy0+cHJpbnRpbmcoKSkgewogICAgICAgICAgICAgICAg
IGlmIChtX25lZWRzRnVsbFJlcGFpbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdmlldy0+cmVw
YWludFZpZXdSZWN0YW5nbGUobV9yZXBhaW50UmVjdCk7CisgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCktPnJlcGFpbnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5lciwgbV9yZXBhaW50
UmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdSZWN0ICE9IG1fcmVwYWludFJlY3Qp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3RhbmdsZShuZXdS
ZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnRWaWFDb250
YWluZXIocmVwYWludENvbnRhaW5lciwgbmV3UmVjdCk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnRBZnRlckxheW91dElmTmVl
ZGVkKG1fcmVwYWludFJlY3QsIG1fb3V0bGluZUJveCk7CisgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCktPnJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKHJlcGFpbnRDb250YWluZXIsIG1f
cmVwYWludFJlY3QsIG1fb3V0bGluZUJveCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgbV9yZXBhaW50UmVjdCA9IG5ld1JlY3Q7CkBAIC0yODgsOCArMjg5LDkgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6c2V0SGFzVmlzaWJsZUNvbnRlbnQoYm9vbCBiKQogICAgIG1fdmlzaWJsZUNv
bnRlbnRTdGF0dXNEaXJ0eSA9IGZhbHNlOyAKICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gYjsK
ICAgICBpZiAobV9oYXNWaXNpYmxlQ29udGVudCkgewotICAgICAgICBtX3JlcGFpbnRSZWN0ID0g
cmVuZGVyZXIoKS0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgIG1fb3V0
bGluZUJveCA9IHJlbmRlcmVyKCktPmFic29sdXRlT3V0bGluZUJvdW5kcygpOworICAgICAgICBS
ZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLT5jb250YWluZXJGb3JSZXBh
aW50KCk7CisgICAgICAgIG1fcmVwYWludFJlY3QgPSByZW5kZXJlcigpLT5jbGlwcGVkT3ZlcmZs
b3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKyAgICAgICAgbV9vdXRsaW5lQm94
ID0gcmVuZGVyZXIoKS0+b3V0bGluZUJvdW5kc0ZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7
CiAgICAgICAgIGlmICghaXNPdmVyZmxvd09ubHkoKSkKICAgICAgICAgICAgIGRpcnR5U3RhY2tp
bmdDb250ZXh0Wk9yZGVyTGlzdHMoKTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRl
eCA1NGMxNWU5Li5mZTQzM2YwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTM1OCw2ICsz
NTgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZUhvdmVyQWN0aXZlU3RhdGUoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jik7CiAKKyAgICAvLyBSZXR1cm4gYSBjYWNo
ZWQgcmVwYWludCByZWN0LCBjb21wdXRlZCByZWxhdGl2ZSB0byB0aGUgbGF5ZXIgcmVuZGVyZXIn
cyBjb250YWluZXJGb3JSZXBhaW50LgogICAgIEludFJlY3QgcmVwYWludFJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlcGFpbnRSZWN0OyB9CiAgICAgdm9pZCBzZXROZWVkc0Z1bGxSZXBhaW50KGJv
b2wgZiA9IHRydWUpIHsgbV9uZWVkc0Z1bGxSZXBhaW50ID0gZjsgfQogICAgIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKaW5kZXggYjhlZGE5ZC4uOTZiYzI1NCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCkBAIC0xNjUwLDYgKzE2NTAsMTcgQEAgUmVuZGVyQm94KiBSZW5kZXJP
YmplY3Q6OmNvbnRhaW5lckZvclJlcGFpbnQoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCit2
b2lkIFJlbmRlck9iamVjdDo6cmVwYWludFZpYUNvbnRhaW5lcihSZW5kZXJCb3gqIHJlcGFpbnRD
b250YWluZXIsIGNvbnN0IEludFJlY3QmIHIsIGJvb2wgaW1tZWRpYXRlKQoreworICAgIGlmICgh
cmVwYWludENvbnRhaW5lciB8fCByZXBhaW50Q29udGFpbmVyLT5pc1JlbmRlclZpZXcoKSkgewor
ICAgICAgICBSZW5kZXJWaWV3KiB2ID0gcmVwYWludENvbnRhaW5lciA/IHN0YXRpY19jYXN0PFJl
bmRlclZpZXcqPihyZXBhaW50Q29udGFpbmVyKSA6IHZpZXcoKTsKKyAgICAgICAgdi0+cmVwYWlu
dFZpZXdSZWN0YW5nbGUociwgaW1tZWRpYXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBI
YW5kbGUgY29udGFpbmVyLXJlbGF0aXZlIHJlcGFpbnRzIGV2ZW50dWFsbHkuCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJPYmplY3Q6OnJlcGFp
bnQoYm9vbCBpbW1lZGlhdGUpCiB7CiAgICAgLy8gQ2FuJ3QgdXNlIHZpZXcoKSwgc2luY2Ugd2Ug
bWlnaHQgYmUgdW5yb290ZWQuCkBAIC0xNjYzLDcgKzE2NzQsOCBAQCB2b2lkIFJlbmRlck9iamVj
dDo6cmVwYWludChib29sIGltbWVkaWF0ZSkKICAgICBpZiAodmlldy0+cHJpbnRpbmcoKSkKICAg
ICAgICAgcmV0dXJuOyAvLyBEb24ndCByZXBhaW50IGlmIHdlJ3JlIHByaW50aW5nLgogCi0gICAg
dmlldy0+cmVwYWludFZpZXdSZWN0YW5nbGUoYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCks
IGltbWVkaWF0ZSk7CisgICAgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyID0gY29udGFpbmVy
Rm9yUmVwYWludCgpOworICAgIHJlcGFpbnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5lciA/
IHJlcGFpbnRDb250YWluZXIgOiB2aWV3LCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChy
ZXBhaW50Q29udGFpbmVyKSwgaW1tZWRpYXRlKTsKIH0KIAogdm9pZCBSZW5kZXJPYmplY3Q6OnJl
cGFpbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgciwgYm9vbCBpbW1lZGlhdGUpCkBAIC0xNjc5
LDIzICsxNjkxLDI0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50UmVjdGFuZ2xlKGNvbnN0
IEludFJlY3QmIHIsIGJvb2wgaW1tZWRpYXRlKQogICAgIGlmICh2aWV3LT5wcmludGluZygpKQog
ICAgICAgICByZXR1cm47IC8vIERvbid0IHJlcGFpbnQgaWYgd2UncmUgcHJpbnRpbmcuCiAKLSAg
ICBJbnRSZWN0IGFic1JlY3Qocik7CisgICAgSW50UmVjdCBkaXJ0eVJlY3Qocik7CiAKICAgICAv
LyBGSVhNRTogbGF5b3V0RGVsdGEgbmVlZHMgdG8gYmUgYXBwbGllZCBpbiBwYXJ0cyBiZWZvcmUv
YWZ0ZXIgdHJhbnNmb3JtcyBhbmQKICAgICAvLyByZXBhaW50IGNvbnRhaW5lcnMuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMwOAotICAgIGFic1JlY3QubW92ZSh2
aWV3LT5sYXlvdXREZWx0YSgpKTsKKyAgICBkaXJ0eVJlY3QubW92ZSh2aWV3LT5sYXlvdXREZWx0
YSgpKTsKIAotICAgIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KGFic1JlY3QpOwotICAgIHZp
ZXctPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGFic1JlY3QsIGltbWVkaWF0ZSk7CisgICAgUmVuZGVy
Qm94KiByZXBhaW50Q29udGFpbmVyID0gY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIGNvbXB1
dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCBkaXJ0eVJlY3QpOworICAgIHJlcGFp
bnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5lciA/IHJlcGFpbnRDb250YWluZXIgOiB2aWV3
LCBkaXJ0eVJlY3QsIGltbWVkaWF0ZSk7CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50
QWZ0ZXJMYXlvdXRJZk5lZWRlZChjb25zdCBJbnRSZWN0JiBvbGRCb3VuZHMsIGNvbnN0IEludFJl
Y3QmIG9sZE91dGxpbmVCb3gpCitib29sIFJlbmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0
SWZOZWVkZWQoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiBvbGRC
b3VuZHMsIGNvbnN0IEludFJlY3QmIG9sZE91dGxpbmVCb3gpCiB7CiAgICAgUmVuZGVyVmlldyog
diA9IHZpZXcoKTsKICAgICBpZiAodi0+cHJpbnRpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBEb24ndCByZXBhaW50IGlmIHdlJ3JlIHByaW50aW5nLgogCi0gICAgSW50UmVjdCBuZXdC
b3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKKyAgICBJbnRSZWN0IG5ld0Jv
dW5kcyA9IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwog
ICAgIEludFJlY3QgbmV3T3V0bGluZUJveDsKIAogICAgIGJvb2wgZnVsbFJlcGFpbnQgPSBzZWxm
TmVlZHNMYXlvdXQoKTsKQEAgLTE3MDMsMTQgKzE3MTYsMTggQEAgYm9vbCBSZW5kZXJPYmplY3Q6
OnJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKGNvbnN0IEludFJlY3QmIG9sZEJvdW5kcywgY29u
c3QgSW4KICAgICBpZiAoIWZ1bGxSZXBhaW50ICYmIHN0eWxlKCktPmJvcmRlckZpdCgpID09IEJv
cmRlckZpdExpbmVzKQogICAgICAgICBmdWxsUmVwYWludCA9IHRydWU7CiAgICAgaWYgKCFmdWxs
UmVwYWludCkgewotICAgICAgICBuZXdPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRz
KCk7CisgICAgICAgIG5ld091dGxpbmVCb3ggPSBvdXRsaW5lQm91bmRzRm9yUmVwYWludChyZXBh
aW50Q29udGFpbmVyKTsKICAgICAgICAgaWYgKG5ld091dGxpbmVCb3gubG9jYXRpb24oKSAhPSBv
bGRPdXRsaW5lQm94LmxvY2F0aW9uKCkgfHwgKG11c3RSZXBhaW50QmFja2dyb3VuZE9yQm9yZGVy
KCkgJiYgKG5ld0JvdW5kcyAhPSBvbGRCb3VuZHMgfHwgbmV3T3V0bGluZUJveCAhPSBvbGRPdXRs
aW5lQm94KSkpCiAgICAgICAgICAgICBmdWxsUmVwYWludCA9IHRydWU7CiAgICAgfQorCisgICAg
aWYgKCFyZXBhaW50Q29udGFpbmVyKQorICAgICAgICByZXBhaW50Q29udGFpbmVyID0gdjsKKwog
ICAgIGlmIChmdWxsUmVwYWludCkgewotICAgICAgICB2LT5yZXBhaW50Vmlld1JlY3RhbmdsZShv
bGRCb3VuZHMpOworICAgICAgICByZXBhaW50VmlhQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IG9sZEJvdW5kcyk7CiAgICAgICAgIGlmIChuZXdCb3VuZHMgIT0gb2xkQm91bmRzKQotICAgICAg
ICAgICAgdi0+cmVwYWludFZpZXdSZWN0YW5nbGUobmV3Qm91bmRzKTsKKyAgICAgICAgICAgIHJl
cGFpbnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5lciwgbmV3Qm91bmRzKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNzE5LDI3ICsxNzM2LDI3IEBAIGJvb2wgUmVuZGVy
T2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChjb25zdCBJbnRSZWN0JiBvbGRCb3Vu
ZHMsIGNvbnN0IEluCiAKICAgICBpbnQgZGVsdGFMZWZ0ID0gbmV3Qm91bmRzLngoKSAtIG9sZEJv
dW5kcy54KCk7CiAgICAgaWYgKGRlbHRhTGVmdCA+IDApCi0gICAgICAgIHYtPnJlcGFpbnRWaWV3
UmVjdGFuZ2xlKEludFJlY3Qob2xkQm91bmRzLngoKSwgb2xkQm91bmRzLnkoKSwgZGVsdGFMZWZ0
LCBvbGRCb3VuZHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgcmVwYWludFZpYUNvbnRhaW5lcihyZXBh
aW50Q29udGFpbmVyLCBJbnRSZWN0KG9sZEJvdW5kcy54KCksIG9sZEJvdW5kcy55KCksIGRlbHRh
TGVmdCwgb2xkQm91bmRzLmhlaWdodCgpKSk7CiAgICAgZWxzZSBpZiAoZGVsdGFMZWZ0IDwgMCkK
LSAgICAgICAgdi0+cmVwYWludFZpZXdSZWN0YW5nbGUoSW50UmVjdChuZXdCb3VuZHMueCgpLCBu
ZXdCb3VuZHMueSgpLCAtZGVsdGFMZWZ0LCBuZXdCb3VuZHMuaGVpZ2h0KCkpKTsKKyAgICAgICAg
cmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0JvdW5kcy54
KCksIG5ld0JvdW5kcy55KCksIC1kZWx0YUxlZnQsIG5ld0JvdW5kcy5oZWlnaHQoKSkpOwogCiAg
ICAgaW50IGRlbHRhUmlnaHQgPSBuZXdCb3VuZHMucmlnaHQoKSAtIG9sZEJvdW5kcy5yaWdodCgp
OwogICAgIGlmIChkZWx0YVJpZ2h0ID4gMCkKLSAgICAgICAgdi0+cmVwYWludFZpZXdSZWN0YW5n
bGUoSW50UmVjdChvbGRCb3VuZHMucmlnaHQoKSwgbmV3Qm91bmRzLnkoKSwgZGVsdGFSaWdodCwg
bmV3Qm91bmRzLmhlaWdodCgpKSk7CisgICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIocmVwYWlu
dENvbnRhaW5lciwgSW50UmVjdChvbGRCb3VuZHMucmlnaHQoKSwgbmV3Qm91bmRzLnkoKSwgZGVs
dGFSaWdodCwgbmV3Qm91bmRzLmhlaWdodCgpKSk7CiAgICAgZWxzZSBpZiAoZGVsdGFSaWdodCA8
IDApCi0gICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKEludFJlY3QobmV3Qm91bmRzLnJp
Z2h0KCksIG9sZEJvdW5kcy55KCksIC1kZWx0YVJpZ2h0LCBvbGRCb3VuZHMuaGVpZ2h0KCkpKTsK
KyAgICAgICAgcmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5l
d0JvdW5kcy5yaWdodCgpLCBvbGRCb3VuZHMueSgpLCAtZGVsdGFSaWdodCwgb2xkQm91bmRzLmhl
aWdodCgpKSk7CiAKICAgICBpbnQgZGVsdGFUb3AgPSBuZXdCb3VuZHMueSgpIC0gb2xkQm91bmRz
LnkoKTsKICAgICBpZiAoZGVsdGFUb3AgPiAwKQotICAgICAgICB2LT5yZXBhaW50Vmlld1JlY3Rh
bmdsZShJbnRSZWN0KG9sZEJvdW5kcy54KCksIG9sZEJvdW5kcy55KCksIG9sZEJvdW5kcy53aWR0
aCgpLCBkZWx0YVRvcCkpOworICAgICAgICByZXBhaW50VmlhQ29udGFpbmVyKHJlcGFpbnRDb250
YWluZXIsIEludFJlY3Qob2xkQm91bmRzLngoKSwgb2xkQm91bmRzLnkoKSwgb2xkQm91bmRzLndp
ZHRoKCksIGRlbHRhVG9wKSk7CiAgICAgZWxzZSBpZiAoZGVsdGFUb3AgPCAwKQotICAgICAgICB2
LT5yZXBhaW50Vmlld1JlY3RhbmdsZShJbnRSZWN0KG5ld0JvdW5kcy54KCksIG5ld0JvdW5kcy55
KCksIG5ld0JvdW5kcy53aWR0aCgpLCAtZGVsdGFUb3ApKTsKKyAgICAgICAgcmVwYWludFZpYUNv
bnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0JvdW5kcy54KCksIG5ld0JvdW5k
cy55KCksIG5ld0JvdW5kcy53aWR0aCgpLCAtZGVsdGFUb3ApKTsKIAogICAgIGludCBkZWx0YUJv
dHRvbSA9IG5ld0JvdW5kcy5ib3R0b20oKSAtIG9sZEJvdW5kcy5ib3R0b20oKTsKICAgICBpZiAo
ZGVsdGFCb3R0b20gPiAwKQotICAgICAgICB2LT5yZXBhaW50Vmlld1JlY3RhbmdsZShJbnRSZWN0
KG5ld0JvdW5kcy54KCksIG9sZEJvdW5kcy5ib3R0b20oKSwgbmV3Qm91bmRzLndpZHRoKCksIGRl
bHRhQm90dG9tKSk7CisgICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5l
ciwgSW50UmVjdChuZXdCb3VuZHMueCgpLCBvbGRCb3VuZHMuYm90dG9tKCksIG5ld0JvdW5kcy53
aWR0aCgpLCBkZWx0YUJvdHRvbSkpOwogICAgIGVsc2UgaWYgKGRlbHRhQm90dG9tIDwgMCkKLSAg
ICAgICAgdi0+cmVwYWludFZpZXdSZWN0YW5nbGUoSW50UmVjdChvbGRCb3VuZHMueCgpLCBuZXdC
b3VuZHMuYm90dG9tKCksIG9sZEJvdW5kcy53aWR0aCgpLCAtZGVsdGFCb3R0b20pKTsKKyAgICAg
ICAgcmVwYWludFZpYUNvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG9sZEJvdW5k
cy54KCksIG5ld0JvdW5kcy5ib3R0b20oKSwgb2xkQm91bmRzLndpZHRoKCksIC1kZWx0YUJvdHRv
bSkpOwogCiAgICAgaWYgKG5ld091dGxpbmVCb3ggPT0gb2xkT3V0bGluZUJveCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTc2NSw3ICsxNzgyLDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OnJl
cGFpbnRBZnRlckxheW91dElmTmVlZGVkKGNvbnN0IEludFJlY3QmIG9sZEJvdW5kcywgY29uc3Qg
SW4KICAgICAgICAgaW50IHJpZ2h0ID0gbWluKG5ld0JvdW5kcy5yaWdodCgpLCBvbGRCb3VuZHMu
cmlnaHQoKSk7CiAgICAgICAgIGlmIChyaWdodFJlY3QueCgpIDwgcmlnaHQpIHsKICAgICAgICAg
ICAgIHJpZ2h0UmVjdC5zZXRXaWR0aChtaW4ocmlnaHRSZWN0LndpZHRoKCksIHJpZ2h0IC0gcmln
aHRSZWN0LngoKSkpOwotICAgICAgICAgICAgdi0+cmVwYWludFZpZXdSZWN0YW5nbGUocmlnaHRS
ZWN0KTsKKyAgICAgICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIocmVwYWludENvbnRhaW5lciwg
cmlnaHRSZWN0KTsKICAgICAgICAgfQogICAgIH0KICAgICBpbnQgaGVpZ2h0ID0gYWJzKG5ld091
dGxpbmVCb3guaGVpZ2h0KCkgLSBvbGRPdXRsaW5lQm94LmhlaWdodCgpKTsKQEAgLTE3ODMsNyAr
MTgwMCw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChj
b25zdCBJbnRSZWN0JiBvbGRCb3VuZHMsIGNvbnN0IEluCiAgICAgICAgIGludCBib3R0b20gPSBt
aW4obmV3Qm91bmRzLmJvdHRvbSgpLCBvbGRCb3VuZHMuYm90dG9tKCkpOwogICAgICAgICBpZiAo
Ym90dG9tUmVjdC55KCkgPCBib3R0b20pIHsKICAgICAgICAgICAgIGJvdHRvbVJlY3Quc2V0SGVp
Z2h0KG1pbihib3R0b21SZWN0LmhlaWdodCgpLCBib3R0b20gLSBib3R0b21SZWN0LnkoKSkpOwot
ICAgICAgICAgICAgdi0+cmVwYWludFZpZXdSZWN0YW5nbGUoYm90dG9tUmVjdCk7CisgICAgICAg
ICAgICByZXBhaW50VmlhQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGJvdHRvbVJlY3QpOwog
ICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKaW5kZXggOGI3M2Q3ZC4uOWVmNTY3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAg
LTU3Myw2ICs1NzMsOSBAQCBwdWJsaWM6CiAgICAgLy8gaWYgcGFpbnRpbmcgaXMgcm9vdC1yZWxh
dGl2ZS4gVGhpcyBpcyB0aGUgY29udGFpbmVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUg
J2ZvclJlcGFpbnQnCiAgICAgLy8gbWV0aG9kcy4KICAgICBSZW5kZXJCb3gqIGNvbnRhaW5lckZv
clJlcGFpbnQoKSBjb25zdDsKKyAgICAvLyBBY3R1YWxseSBkbyB0aGUgcmVwYWludCBvZiByZWN0
IHIgZm9yIHRoaXMgb2JqZWN0IHdoaWNoIGhhcyBiZWVuIGNvbXB1dGVkIGluIHRoZSBjb29yZGlu
YXRlIHNwYWNlCisgICAgLy8gb2YgcmVwYWludENvbnRhaW5lci4gSWYgcmVwYWludENvbnRhaW5l
ciBpcyAwLCByZXBhaW50IHZpYSB0aGUgdmlldy4KKyAgICB2b2lkIHJlcGFpbnRWaWFDb250YWlu
ZXIoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBJbnRSZWN0JiByLCBib29sIGlt
bWVkaWF0ZSA9IGZhbHNlKTsKICAgICAKICAgICAvLyBSZXBhaW50IHRoZSBlbnRpcmUgb2JqZWN0
LiAgQ2FsbGVkIHdoZW4sIGUuZy4sIHRoZSBjb2xvciBvZiBhIGJvcmRlciBjaGFuZ2VzLCBvciB3
aGVuIGEgYm9yZGVyCiAgICAgLy8gc3R5bGUgY2hhbmdlcy4KQEAgLTU4Miw3ICs1ODUsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZXBhaW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29sIGlt
bWVkaWF0ZSA9IGZhbHNlKTsKIAogICAgIC8vIFJlcGFpbnQgb25seSBpZiBvdXIgb2xkIGJvdW5k
cyBhbmQgbmV3IGJvdW5kcyBhcmUgZGlmZmVyZW50LgotICAgIGJvb2wgcmVwYWludEFmdGVyTGF5
b3V0SWZOZWVkZWQoY29uc3QgSW50UmVjdCYgb2xkQm91bmRzLCBjb25zdCBJbnRSZWN0JiBvbGRP
dXRsaW5lQm94KTsKKyAgICBib29sIHJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKFJlbmRlckJv
eCogcmVwYWludENvbnRhaW5lciwgY29uc3QgSW50UmVjdCYgb2xkQm91bmRzLCBjb25zdCBJbnRS
ZWN0JiBvbGRPdXRsaW5lQm94KTsKIAogICAgIC8vIFJlcGFpbnQgb25seSBpZiB0aGUgb2JqZWN0
IG1vdmVkLgogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50RHVyaW5nTGF5b3V0SWZNb3ZlZChjb25z
dCBJbnRSZWN0JiByZWN0KTsKQEAgLTc4NCw2ICs3ODcsMzYgQEAgcHJvdGVjdGVkOgogCiAgICAg
dmlydHVhbCBJbnRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRlckJveCogLypyZXBh
aW50Q29udGFpbmVyKi8pIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoKTsgfQogCisgICAgY2xhc3Mg
TGF5b3V0UmVwYWludGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIExheW91dFJlcGFpbnRlcihS
ZW5kZXJPYmplY3QmIG9iamVjdCwgYm9vbCBjaGVja0ZvclJlcGFpbnQsIGNvbnN0IEludFJlY3Qq
IG9sZEJvdW5kcyA9IDApCisgICAgICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAg
ICAgICwgbV9yZXBhaW50Q29udGFpbmVyKDApCisgICAgICAgICAgICAsIG1fY2hlY2tGb3JSZXBh
aW50KGNoZWNrRm9yUmVwYWludCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fY2hlY2tG
b3JSZXBhaW50KSB7CisgICAgICAgICAgICAgICAgbV9vbGRCb3VuZHMgPSBvbGRCb3VuZHMgPyAq
b2xkQm91bmRzIDogbV9vYmplY3QuYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAg
ICAgICAgICAgICAgbV9vbGRPdXRsaW5lQm94ID0gbV9vYmplY3QuYWJzb2x1dGVPdXRsaW5lQm91
bmRzKCk7CisgICAgICAgICAgICAgICAgbV9yZXBhaW50Q29udGFpbmVyID0gbV9vYmplY3QuY29u
dGFpbmVyRm9yUmVwYWludCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBpdCByZXBhaW50ZWQuCisgICAgICAgIGJvb2wgcmVw
YWludEFmdGVyTGF5b3V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY2hlY2tG
b3JSZXBhaW50ID8gbV9vYmplY3QucmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQobV9yZXBhaW50
Q29udGFpbmVyLCBtX29sZEJvdW5kcywgbV9vbGRPdXRsaW5lQm94KSA6IGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBib29sIGNoZWNrRm9yUmVwYWludCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hlY2tGb3JSZXBhaW50OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IFJlbmRlck9iamVjdCYgbV9vYmplY3Q7CisgICAgICAgIFJlbmRlckJveCogbV9yZXBhaW50Q29u
dGFpbmVyOworICAgICAgICBJbnRSZWN0IG1fb2xkQm91bmRzOworICAgICAgICBJbnRSZWN0IG1f
b2xkT3V0bGluZUJveDsKKyAgICAgICAgYm9vbCBtX2NoZWNrRm9yUmVwYWludDsKKyAgICB9Owor
ICAgIAogcHJpdmF0ZToKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUGF0aC5jcHAKaW5kZXggMWY3M2M3MC4uYWU2NjM2MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUGF0aC5jcHAKQEAgLTE1NiwyMiArMTU2LDE2IEBAIGJvb2wgUmVuZGVyUGF0aDo6Y2FsY3Vs
YXRlTG9jYWxUcmFuc2Zvcm0oKQogCiB2b2lkIFJlbmRlclBhdGg6OmxheW91dCgpCiB7Ci0gICAg
SW50UmVjdCBvbGRCb3VuZHM7Ci0gICAgSW50UmVjdCBvbGRPdXRsaW5lQm94OwotICAgIGJvb2wg
Y2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkgJiYgc2VsZk5l
ZWRzTGF5b3V0KCk7Ci0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkgewotICAgICAgICBvbGRCb3Vu
ZHMgPSBtX2Fic29sdXRlQm91bmRzOwotICAgICAgICBvbGRPdXRsaW5lQm94ID0gYWJzb2x1dGVP
dXRsaW5lQm91bmRzKCk7Ci0gICAgfQotICAgICAgICAKKyAgICAvLyBGSVhNRTogdXNpbmcgbV9h
YnNvbHV0ZUJvdW5kcyBicmVha3MgaWYgY29udGFpbmVyRm9yUmVwYWludCgpIGlzIG5vdCB0aGUg
cm9vdAorICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWlu
dER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpLCAmbV9hYnNvbHV0ZUJvdW5kcyk7
CisgICAgCiAgICAgY2FsY3VsYXRlTG9jYWxUcmFuc2Zvcm0oKTsKIAogICAgIHNldFBhdGgoc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihlbGVtZW50KCkpLT50b1Bh
dGhEYXRhKCkpOwogCiAgICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJm
bG93UmVjdCgpOwogCi0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkKLSAgICAgICAgcmVwYWludEFm
dGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94KTsKKyAgICByZXBhaW50
ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CiAKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5kZXggZGVlM2ZjYi4uMzUxMzNjNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtNzcsMTMgKzc3LDcgQEAgdm9p
ZCBSZW5kZXJSZXBsYWNlZDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7
CiAgICAgCi0gICAgSW50UmVjdCBvbGRCb3VuZHM7Ci0gICAgSW50UmVjdCBvbGRPdXRsaW5lQm94
OwotICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0
KCk7Ci0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkgewotICAgICAgICBvbGRCb3VuZHMgPSBhYnNv
bHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgb2xkT3V0bGluZUJveCA9IGFic29s
dXRlT3V0bGluZUJvdW5kcygpOwotICAgIH0KKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVy
KCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CiAgICAgCiAgICAgc2V0SGVp
Z2h0KG1pbmltdW1SZXBsYWNlZEhlaWdodCgpKTsKICAgICAKQEAgLTkxLDkgKzg1LDggQEAgdm9p
ZCBSZW5kZXJSZXBsYWNlZDo6bGF5b3V0KCkKICAgICBjYWxjSGVpZ2h0KCk7CiAgICAgYWRqdXN0
T3ZlcmZsb3dGb3JCb3hTaGFkb3coKTsKICAgICAKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQot
ICAgICAgICByZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChvbGRCb3VuZHMsIG9sZE91dGxpbmVC
b3gpOwotICAgIAorICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsgICAgCisKICAg
ICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcAppbmRleCA2ZTE3YzA1Li4zOWRlYjBhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0NvbnRhaW5lci5jcHAKQEAgLTIyNiwxMyArMjI2LDggQEAgdm9pZCBSZW5kZXJT
VkdDb250YWluZXI6OmxheW91dCgpCiAgICAgLy8gQXJiaXRyYXJ5IGFmZmluZSB0cmFuc2Zvcm1z
IGFyZSBpbmNvbXBhdGlibGUgd2l0aCBMYXlvdXRTdGF0ZS4KICAgICB2aWV3KCktPmRpc2FibGVM
YXlvdXRTdGF0ZSgpOwogCi0gICAgSW50UmVjdCBvbGRCb3VuZHM7Ci0gICAgSW50UmVjdCBvbGRP
dXRsaW5lQm94OwotICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkgJiYgc2VsZldpbGxQYWludCgpOwotICAgIGlmIChjaGVja0ZvclJlcGFpbnQp
IHsKLSAgICAgICAgb2xkQm91bmRzID0gbV9hYnNvbHV0ZUJvdW5kczsKLSAgICAgICAgb2xkT3V0
bGluZUJveCA9IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwotICAgIH0KKyAgICAvLyBGSVhNRTog
dXNpbmcgbV9hYnNvbHV0ZUJvdW5kcyBicmVha3MgaWYgY29udGFpbmVyRm9yUmVwYWludCgpIGlz
IG5vdCB0aGUgcm9vdAorICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNr
Rm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZXaWxsUGFpbnQoKSwgJm1fYWJzb2x1dGVC
b3VuZHMpOwogICAgIAogICAgIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7CiAKQEAgLTI1MCw4
ICsyNDUsNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCkKIAogICAgIGNhbGNC
b3VuZHMoKTsKIAotICAgIGlmIChjaGVja0ZvclJlcGFpbnQpCi0gICAgICAgIHJlcGFpbnRBZnRl
ckxheW91dElmTmVlZGVkKG9sZEJvdW5kcywgb2xkT3V0bGluZUJveCk7CisgICAgcmVwYWludGVy
LnJlcGFpbnRBZnRlckxheW91dCgpOwogCiAgICAgdmlldygpLT5lbmFibGVMYXlvdXRTdGF0ZSgp
OwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0ltYWdlLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdl
LmNwcAppbmRleCBjZmUzNjU5Li43ZmMzZTMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdJbWFnZS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1h
Z2UuY3BwCkBAIC0xMzcsMTMgKzEzNyw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmxheW91dCgp
CiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwogICAgIAotICAgIEludFJlY3Qgb2xkQm91
bmRzOwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAgICBib29sIGNoZWNrRm9yUmVwYWlu
dCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwotICAgIGlmIChjaGVja0ZvclJlcGFp
bnQpIHsKLSAgICAgICAgb2xkQm91bmRzID0gYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
Ci0gICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKTsKLSAgICB9
CisgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCkpOwogICAgIAogICAgIGNhbGN1bGF0ZUxvY2FsVHJhbnNmb3JtKCk7CiAgICAg
CkBAIC0xNTgsOSArMTUyLDggQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6bGF5b3V0KCkKIAogICAg
IGNhbGN1bGF0ZUFic29sdXRlQm91bmRzKCk7CiAKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQot
ICAgICAgICByZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChvbGRCb3VuZHMsIG9sZE91dGxpbmVC
b3gpOwotCisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOworICAgIAogICAgIHNl
dE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHUm9vdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcApp
bmRleCA1NGEzMGRmLi44MGFiZWZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSb290LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcApA
QCAtOTEsMTEgKzkxLDggQEAgdm9pZCBSZW5kZXJTVkdSb290OjpsYXlvdXQoKQogICAgIC8vIEFy
Yml0cmFyeSBhZmZpbmUgdHJhbnNmb3JtcyBhcmUgaW5jb21wYXRpYmxlIHdpdGggTGF5b3V0U3Rh
dGUuCiAgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKIAotICAgIEludFJlY3Qgb2xk
Qm91bmRzID0gbV9hYnNvbHV0ZUJvdW5kczsKLSAgICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7Ci0g
ICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSAm
JiBzZWxmTmVlZHNMYXlvdXQoKTsKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQotICAgICAgICBv
bGRPdXRsaW5lQm94ID0gYWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7CisgICAgLy8gRklYTUU6IHVz
aW5nIG1fYWJzb2x1dGVCb3VuZHMgYnJlYWtzIGlmIGNvbnRhaW5lckZvclJlcGFpbnQoKSBpcyBu
b3QgdGhlIHJvb3QKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0Zv
clJlcGFpbnREdXJpbmdMYXlvdXQoKSAmJiBzZWxmTmVlZHNMYXlvdXQoKSwgJm1fYWJzb2x1dGVC
b3VuZHMpOwogCiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwpAQCAtMTEzLDgg
KzExMCw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkKICAgICAgICAgQVNTRVJUKCFj
aGlsZC0+bmVlZHNMYXlvdXQoKSk7CiAgICAgfQogCi0gICAgaWYgKGNoZWNrRm9yUmVwYWludCkK
LSAgICAgICAgcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5l
Qm94KTsKKyAgICByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CiAKICAgICB2aWV3KCkt
PmVuYWJsZUxheW91dFN0YXRlKCk7CiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdUZXh0LmNwcAppbmRleCBlZTVhYjM0Li5mNmFlMmI0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdUZXh0LmNwcApAQCAtODEsMTMgKzgxLDggQEAgdm9pZCBSZW5kZXJTVkdU
ZXh0OjpsYXlvdXQoKQogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgaGFjayB0byBhdm9pZCB0aGUg
UmVuZGVyQmxvY2s6OmxheW91dCgpIHBhcnRpYWwgcmVwYWludGluZyBjb2RlIHdoaWNoIGlzIG5v
dCAoeWV0KSBTVkcgYXdhcmUKICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKIAotICAgIEludFJl
Y3Qgb2xkQm91bmRzOwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAgICBib29sIGNoZWNr
Rm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwotICAgIGlmIChjaGVj
a0ZvclJlcGFpbnQpIHsKLSAgICAgICAgb2xkQm91bmRzID0gbV9hYnNvbHV0ZUJvdW5kczsKLSAg
ICAgICAgb2xkT3V0bGluZUJveCA9IGFic29sdXRlT3V0bGluZUJvdW5kcygpOwotICAgIH0KKyAg
ICAvLyBGSVhNRTogdXNpbmcgbV9hYnNvbHV0ZUJvdW5kcyBicmVha3MgaWYgY29udGFpbmVyRm9y
UmVwYWludCgpIGlzIG5vdCB0aGUgcm9vdAorICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIo
KnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpLCAmbV9hYnNvbHV0ZUJvdW5kcyk7
CiAKICAgICAvLyBCZXN0IGd1ZXNzIGZvciBhIHJlbGF0aXZlIHN0YXJ0aW5nIHBvaW50CiAgICAg
U1ZHVGV4dEVsZW1lbnQqIHRleHQgPSBzdGF0aWNfY2FzdDxTVkdUZXh0RWxlbWVudCo+KGVsZW1l
bnQoKSk7CkBAIC0xMDEsMTAgKzk2LDggQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQog
CiAgICAgbV9hYnNvbHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwog
Ci0gICAgYm9vbCByZXBhaW50ZWQgPSBmYWxzZTsKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQot
ICAgICAgICByZXBhaW50ZWQgPSByZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZChvbGRCb3VuZHMs
IG9sZE91dGxpbmVCb3gpOwotICAgIAorICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQo
KTsKKyAgICAgICAgCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5jcHAKaW5kZXggNDI4MmVm
Yy4uYTg0MjE2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVmlld3Bv
cnRDb250YWluZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1ZpZXdwb3J0
Q29udGFpbmVyLmNwcApAQCAtNTIsMTIgKzUyLDkgQEAgdm9pZCBSZW5kZXJTVkdWaWV3cG9ydENv
bnRhaW5lcjo6bGF5b3V0KCkKICAgICAvLyBBcmJpdHJhcnkgYWZmaW5lIHRyYW5zZm9ybXMgYXJl
IGluY29tcGF0aWJsZSB3aXRoIExheW91dFN0YXRlLgogICAgIHZpZXcoKS0+ZGlzYWJsZUxheW91
dFN0YXRlKCk7CiAgICAgCi0gICAgSW50UmVjdCBvbGRCb3VuZHMgPSBtX2Fic29sdXRlQm91bmRz
OwotICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKLSAgICBib29sIGNoZWNrRm9yUmVwYWludCA9
IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpICYmIHNlbGZOZWVkc0xheW91dCgpOwotICAg
IGlmIChjaGVja0ZvclJlcGFpbnQpCi0gICAgICAgIG9sZE91dGxpbmVCb3ggPSBhYnNvbHV0ZU91
dGxpbmVCb3VuZHMoKTsKLQorICAgIC8vIEZJWE1FOiB1c2luZyBtX2Fic29sdXRlQm91bmRzIGJy
ZWFrcyBpZiBjb250YWluZXJGb3JSZXBhaW50KCkgaXMgbm90IHRoZSByb290CisgICAgTGF5b3V0
UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkg
JiYgc2VsZk5lZWRzTGF5b3V0KCksICZtX2Fic29sdXRlQm91bmRzKTsKKyAgICAKICAgICBjYWxj
Qm91bmRzKCk7ICAgIAogICAgIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKQEAgLTY4LDgg
KzY1LDcgQEAgdm9pZCBSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lcjo6bGF5b3V0KCkKICAgICAg
ICAgQVNTRVJUKCFjaGlsZC0+bmVlZHNMYXlvdXQoKSk7CiAgICAgfQogICAgIAotICAgIGlmIChj
aGVja0ZvclJlcGFpbnQpCi0gICAgICAgIHJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKG9sZEJv
dW5kcywgb2xkT3V0bGluZUJveCk7CisgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgp
OwogICAgIAogICAgIHZpZXcoKS0+ZW5hYmxlTGF5b3V0U3RhdGUoKTsKICAgICBzZXROZWVkc0xh
eW91dChmYWxzZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKaW5kZXggYWVlMDcyNy4uZGZj
MzE3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcApAQCAtMjU3LDE0ICsyNTcsNyBAQCB2
b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogCiAgICAgcmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgp
OwogICAgICAgICAKLSAgICBJbnRSZWN0IG9sZEJvdW5kczsKLSAgICBJbnRSZWN0IG9sZE91dGxp
bmVCb3g7Ci0gICAgYm9vbCBjaGVja0ZvclJlcGFpbnQgPSBjaGVja0ZvclJlcGFpbnREdXJpbmdM
YXlvdXQoKTsKLSAgICBpZiAoY2hlY2tGb3JSZXBhaW50KSB7Ci0gICAgICAgIG9sZEJvdW5kcyA9
IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwotICAgICAgICBvbGRPdXRsaW5lQm94ID0g
YWJzb2x1dGVPdXRsaW5lQm91bmRzKCk7Ci0gICAgfQotICAgIAorICAgIExheW91dFJlcGFpbnRl
ciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKICAgICBM
YXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgo
KSwgeSgpKSk7CiAKICAgICBzZXRIZWlnaHQoMCk7CkBAIC00MjcsMTAgKzQyMCw4IEBAIHZvaWQg
UmVuZGVyVGFibGU6OmxheW91dCgpCiAKICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKIAotICAgIGJv
b2wgZGlkRnVsbFJlcGFpbnQgPSB0cnVlOworICAgIGJvb2wgZGlkRnVsbFJlcGFpbnQgPSByZXBh
aW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CiAgICAgLy8gUmVwYWludCB3aXRoIG91ciBuZXcg
Ym91bmRzIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIG91ciBvbGQgYm91bmRzLgotICAgIGlm
IChjaGVja0ZvclJlcGFpbnQpCi0gICAgICAgIGRpZEZ1bGxSZXBhaW50ID0gcmVwYWludEFmdGVy
TGF5b3V0SWZOZWVkZWQob2xkQm91bmRzLCBvbGRPdXRsaW5lQm94KTsKICAgICBpZiAoIWRpZEZ1
bGxSZXBhaW50ICYmIHNlY3Rpb25Nb3ZlZCkKICAgICAgICAgcmVwYWludFJlY3RhbmdsZShJbnRS
ZWN0KG1fb3ZlcmZsb3dMZWZ0LCBtb3ZlZFNlY3Rpb25Ub3AsIG1fb3ZlcmZsb3dXaWR0aCAtIG1f
b3ZlcmZsb3dMZWZ0LCBtX292ZXJmbG93SGVpZ2h0IC0gbW92ZWRTZWN0aW9uVG9wKSk7CiAgICAg
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL2JpZGkuY3BwCmluZGV4IDU4NjE4MDQuLmY0M2YwYzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL2JpZGkuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwCkBAIC04
NDUsNyArODQ1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9v
bCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRUb3AsIGkKICAgICAgICAgICAgICAgICAv
LyB0aGF0IHRoZSBibG9jayByZWFsbHkgbmVlZGVkIGEgZnVsbCBsYXlvdXQsIHdlIG1pc3NlZCBv
dXIgY2hhbmNlIHRvIHJlcGFpbnQgdGhlIGxheWVyCiAgICAgICAgICAgICAgICAgLy8gYmVmb3Jl
IGxheW91dCBzdGFydGVkLiAgTHVja2lseSB0aGUgbGF5ZXIgaGFzIGNhY2hlZCB0aGUgcmVwYWlu
dCByZWN0IGZvciBpdHMgb3JpZ2luYWwKICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiBhbmQg
c2l6ZSwgYW5kIHNvIHdlIGNhbiB1c2UgdGhhdCB0byBtYWtlIGEgcmVwYWludCBoYXBwZW4gbm93
LgotICAgICAgICAgICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKG1fbGF5ZXItPnJlcGFp
bnRSZWN0KCkpOworICAgICAgICAgICAgICAgIHJlcGFpbnRWaWFDb250YWluZXIoY29udGFpbmVy
Rm9yUmVwYWludCgpLCBtX2xheWVyLT5yZXBhaW50UmVjdCgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCg==
</data>
<flag name="review"
          id="13007"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27193</attachid>
            <date>2009-01-30 13:44:22 -0800</date>
            <delta_ts>2009-01-30 13:48:45 -0800</delta_ts>
            <desc>Patch to use container-relative methods for computing repaints before layout</desc>
            <filename>23360_patch_fixup.txt</filename>
            <type>text/plain</type>
            <size>1401</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODgzMWUzOC4uZDFlOTRmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wMS0zMCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzNjAKKworICAgICAgICBSZWFsbHkgdXNlIHRoZSBjb250YWluZXItcmVsYXRpdmUgcmVw
YWludCByZWN0IG1ldGhvZHMKKyAgICAgICAgZm9yIHJlcGFpbnQgZHVyaW5nIGxheW91dAorCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpMYXlvdXRSZXBhaW50ZXI6OkxheW91dFJlcGFpbnRlcik6CisKIDIwMDktMDEt
MzAgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTYW0gV2VpbmlnIGFuZCBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKaW5kZXggZDAyM2RmZS4uZTM3MjViNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAg
LTgwOCw5ICs4MDgsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAsIG1fY2hlY2tGb3JSZXBh
aW50KGNoZWNrRm9yUmVwYWludCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fY2hlY2tG
b3JSZXBhaW50KSB7Ci0gICAgICAgICAgICAgICAgbV9vbGRCb3VuZHMgPSBvbGRCb3VuZHMgPyAq
b2xkQm91bmRzIDogbV9vYmplY3QuYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7Ci0gICAg
ICAgICAgICAgICAgbV9vbGRPdXRsaW5lQm94ID0gbV9vYmplY3QuYWJzb2x1dGVPdXRsaW5lQm91
bmRzKCk7CiAgICAgICAgICAgICAgICAgbV9yZXBhaW50Q29udGFpbmVyID0gbV9vYmplY3QuY29u
dGFpbmVyRm9yUmVwYWludCgpOworICAgICAgICAgICAgICAgIG1fb2xkQm91bmRzID0gb2xkQm91
bmRzID8gKm9sZEJvdW5kcyA6IG1fb2JqZWN0LmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50
KG1fcmVwYWludENvbnRhaW5lcik7CisgICAgICAgICAgICAgICAgbV9vbGRPdXRsaW5lQm94ID0g
bV9vYmplY3Qub3V0bGluZUJvdW5kc0ZvclJlcGFpbnQobV9yZXBhaW50Q29udGFpbmVyKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAK
</data>
<flag name="review"
          id="13086"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27268</attachid>
            <date>2009-02-02 17:05:21 -0800</date>
            <delta_ts>2009-02-04 15:45:26 -0800</delta_ts>
            <desc>Final repaint patch: hook up to composited layers.</desc>
            <filename>23360_patch4.txt</filename>
            <type>text/plain</type>
            <size>15277</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGRjMmQxZi4uMjc3YTM3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0MSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzM2MAorICAgICAgICAKKyAgICAgICAgV2hlbiB1c2luZyBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZywgbWFrZSByZXBhaW50cyB1c2UgdGhlIGNvcnJlY3QKKyAgICAgICAgcmVwYWlu
dCBjb250YWluZXIuIEhvb2sgdXAgdGhlIFJlbmRlckxheWVyQ29tcG9zaXRvciBpbiBSZW5kZXJW
aWV3LAorICAgICAgICBhbmQgYWRkIHRvIFJlbmRlclZpZXcgYSBtZXRob2QgdGhhdCByZXBhaW50
cyBib3RoIHRoZSB2aWV3CisgICAgICAgIGNvbnRlbnRzLCBhbmQgYW55IGludGVyc2VjdGluZyBj
b21wb3NpdGVkIGxheWVycy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW5saW5lOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OmNvbnRhaW5pbmdCbG9ja1dpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
Y29udGFpbmVyRm9yUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJl
cGFpbnRVc2luZ0NvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJWaWV3Ojp+UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpzaG91bGRSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJl
cGFpbnRWaWV3UmVjdGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJlcGFp
bnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OnNldE1heGltYWxPdXRsaW5lU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6
dXBkYXRlV2lkZ2V0UG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnVz
ZXNDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojpjb21wb3NpdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmRpZE1vdmVPbnNjcmVlbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojp3aWxsTW92ZU9mZnNjcmVlbik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKworMjAwOS0wMi0wMiAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMz
NTgKIAogICAgICAgICBIb29rIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGludG8gUmVuZGVyTGF5
ZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBmNjZkOGEwLi5jNjg3NzY0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKQEAgLTE1NjksNyArMTU2OSwxNSBAQCB2b2lkIFJlbmRlckJveDo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgSW50UmVj
dCYgcmVjdAogICAgIC8vIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHNwYWNlIHRoYXQgZW5j
bG9zZXMgdXMuCiAgICAgaWYgKG1fbGF5ZXIgJiYgbV9sYXllci0+dHJhbnNmb3JtKCkpIHsKICAg
ICAgICAgZml4ZWQgPSBmYWxzZTsKLSAgICAgICAgcmVjdCA9IG1fbGF5ZXItPnRyYW5zZm9ybSgp
LT5tYXBSZWN0KHJlY3QpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAg
ICAgLy8gSWRlYWxseSwgcmVwYWludHMgd291bGQgbmV2ZXIgY3Jvc3MgY29tcG9zaXRpbmcgYm91
bmRhcmllcywgYnV0IHRoZXJlIGFyZSBjYXNlcworICAgICAgICAvLyB3aGVyZSB0aGV5IHN0aWxs
IGRvIChlLmcuIGZvciBzZWxlY3Rpb24pLiBXaGVuIGNvbXB1dGluZyByZXBhaW50IHJlY3RzIGFj
cm9zcworICAgICAgICAvLyBjb21wb3NpdGluZyBib3VuZGFyaWVzLCB3ZSBqdXN0IGlnbm9yZSB0
cmFuc2Zvcm1zIGFwcGxpZWQgdG8gY29tcG9zaXRpbmcgbGF5ZXJzLgorICAgICAgICBpZiAoIW1f
bGF5ZXItPmlzQ29tcG9zaXRlZCgpKQorICAgICAgICAgICAgcmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QobV9sYXllci0+dHJhbnNmb3JtKCktPm1hcFJlY3QoRmxvYXRSZWN0KHJlY3QpKSk7CisjZWxz
ZQorICAgICAgICByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2xheWVyLT50cmFuc2Zvcm0oKS0+
bWFwUmVjdChGbG9hdFJlY3QocmVjdCkpKTsKKyNlbmRpZgogICAgICAgICAvLyBGSVhNRTogdGhp
cyBjbG9iYmVycyB0b3BMZWZ0IGFkanVzdG1lbnQgZG9uZSBmb3IgbXVsdGljb2wgYWJvdmUKICAg
ICAgICAgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKICAgICAgICAgdG9wTGVmdC5tb3ZlKHgo
KSwgeSgpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmluZGV4IDkyMGIxMmIuLjAwMGZk
MjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtNTU4LDggKzU1OCw5IEBAIElu
dFJlY3QgUmVuZGVySW5saW5lOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJC
b3gqIHJlcGFpbnRDb250YWluZXIpCiAgICAgICAgIEludFJlY3QgcmVwYWludFJlY3QoeCwgeSwg
ci53aWR0aCgpLCByLmhlaWdodCgpKTsKICAgICAgICAgciA9IGludGVyc2VjdGlvbihyZXBhaW50
UmVjdCwgYm94UmVjdCk7CiAgICAgfQotICAgIEFTU0VSVChyZXBhaW50Q29udGFpbmVyICE9IHRo
aXMpOwotICAgIGNiLT5jb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcik7
CisgICAgLy8gRG9uJ3QgYWxsb3cgY29tcHV0ZVJlY3RGb3JSZXBhaW50IHRvIGdvIGFib3ZlIHRo
ZSByZXBhaW50IGNvbnRhaW5lci4KKyAgICBpZiAocmVwYWludENvbnRhaW5lciAhPSB0aGlzKQor
ICAgICAgICBjYi0+Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHIpOwog
CiAgICAgaWYgKG93KSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RD
aGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKaW5kZXggMzEyZDcwMy4uODEzNDY0YSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCkBAIC00OCw2ICs0OCwxMCBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2VuZGlm
CisKICNpZiBFTkFCTEUoV01MKQogI2luY2x1ZGUgIldNTE5hbWVzLmgiCiAjZW5kaWYKQEAgLTU3
OCwxNCArNTgyLDE0IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9j
aygpIGNvbnN0CiAKIGludCBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9ja1dpZHRoKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRSA/Ci0gICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5hdmFp
bGFibGVXaWR0aCgpOworICAgIFJlbmRlckJsb2NrKiBjb250YWluZXIgPSBjb250YWluaW5nQmxv
Y2soKTsKKyAgICByZXR1cm4gY29udGFpbmVyID8gY29udGFpbmVyLT5hdmFpbGFibGVXaWR0aCgp
IDogMDsKIH0KIAogaW50IFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrSGVpZ2h0KCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRSA/Ci0gICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jaygpLT5jb250
ZW50SGVpZ2h0KCk7CisgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciA9IGNvbnRhaW5pbmdCbG9j
aygpOworICAgIHJldHVybiBjb250YWluZXIgPyBjb250YWluZXItPmNvbnRlbnRIZWlnaHQoKSA6
IDA7CiB9CiAKIHN0YXRpYyBib29sIG11c3RSZXBhaW50RmlsbExheWVycyhjb25zdCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBGaWxsTGF5ZXIqIGxheWVyKQpAQCAtMTU1Miw3ICsxNTU2
LDE1IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludChQYWludEluZm8mIC8qcGFpbnRJbmZvKi8s
IGludCAvKnR4Ki8sIGludCAvKnR5Ki8pCiAKIFJlbmRlckJveCogUmVuZGVyT2JqZWN0Ojpjb250
YWluZXJGb3JSZXBhaW50KCkgY29uc3QKIHsKLSAgICAvLyBGb3Igbm93LCBhbGwgcmVwYWludHMg
YXJlIHJvb3QtcmVsYXRpdmUuCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IGlmIChSZW5kZXJWaWV3KiB2ID0gdmlldygpKSB7CisgICAgICAgIGlmICh2LT51c2VzQ29tcG9z
aXRpbmcoKSkgeworICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGNvbXBMYXllciA9IHYtPmNvbXBv
c2l0b3IoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcihlbmNsb3NpbmdMYXllcigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBjb21wTGF5ZXIgPyBjb21wTGF5ZXItPnJlbmRlcmVyKCkgOiAwOwor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgLy8gRG8gcm9vdC1yZWxhdGl2ZSByZXBhaW50
LgogICAgIHJldHVybiAwOwogfQogCkBAIC0xNTYyLDggKzE1NzQsMTUgQEAgdm9pZCBSZW5kZXJP
YmplY3Q6OnJlcGFpbnRVc2luZ0NvbnRhaW5lcihSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIs
IGNvbnN0IEludFIKICAgICAgICAgUmVuZGVyVmlldyogdiA9IHJlcGFpbnRDb250YWluZXIgPyB0
b1JlbmRlclZpZXcocmVwYWludENvbnRhaW5lcikgOiB2aWV3KCk7CiAgICAgICAgIHYtPnJlcGFp
bnRWaWV3UmVjdGFuZ2xlKHIsIGltbWVkaWF0ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8g
SGFuZGxlIGNvbnRhaW5lci1yZWxhdGl2ZSByZXBhaW50cyBldmVudHVhbGx5LgorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsK
KyAgICAgICAgaWYgKHYtPnVzZXNDb21wb3NpdGluZygpKSB7CisgICAgICAgICAgICBBU1NFUlQo
cmVwYWludENvbnRhaW5lci0+aGFzTGF5ZXIoKSAmJiByZXBhaW50Q29udGFpbmVyLT5sYXllcigp
LT5pc0NvbXBvc2l0ZWQoKSk7CisgICAgICAgICAgICByZXBhaW50Q29udGFpbmVyLT5sYXllcigp
LT5zZXRCYWNraW5nTmVlZHNSZXBhaW50SW5SZWN0KHIpOworICAgICAgICB9CisjZWxzZQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcAppbmRleCBlZmUzNjBkLi42MWE2OTk1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcApAQCAtMzAsNiArMzAsMTAgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWVW
aWV3KiB2aWV3KQpAQCAtNDMsNiArNDcsOSBAQCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUq
IG5vZGUsIEZyYW1lVmlldyogdmlldykKICAgICAsIG1fbWF4aW1hbE91dGxpbmVTaXplKDApCiAg
ICAgLCBtX2xheW91dFN0YXRlKDApCiAgICAgLCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50KDAp
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICwgbV9jb21wb3NpdG9yKDAp
CisjZW5kaWYKIHsKICAgICAvLyBDbGVhciBvdXIgYW5vbnltb3VzIGJpdCwgc2V0IGJlY2F1c2Ug
UmVuZGVyT2JqZWN0IGFzc3VtZXMKICAgICAvLyBhbnkgcmVuZGVyZXIgd2l0aCBkb2N1bWVudCBh
cyB0aGUgbm9kZSBpcyBhbm9ueW1vdXMuCkBAIC02NSw2ICs3Miw5IEBAIFJlbmRlclZpZXc6OlJl
bmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWVWaWV3KiB2aWV3KQogCiBSZW5kZXJWaWV3Ojp+UmVu
ZGVyVmlldygpCiB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGRlbGV0
ZSBtX2NvbXBvc2l0b3I7CisjZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJWaWV3OjpjYWxjSGVpZ2h0
KCkKQEAgLTIxMywxMiArMjIzLDIwIEBAIHZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCiAgICAgfQogfQogCi12b2lkIFJl
bmRlclZpZXc6OnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHVyLCBib29sIGlt
bWVkaWF0ZSkKK2Jvb2wgUmVuZGVyVmlldzo6c2hvdWxkUmVwYWludChjb25zdCBJbnRSZWN0JiBy
KSBjb25zdAogewotICAgIGlmIChwcmludGluZygpIHx8IHVyLndpZHRoKCkgPT0gMCB8fCB1ci5o
ZWlnaHQoKSA9PSAwKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHByaW50aW5nKCkgfHwgci53
aWR0aCgpID09IDAgfHwgci5oZWlnaHQoKSA9PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoIW1fZnJhbWVWaWV3KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUo
Y29uc3QgSW50UmVjdCYgdXIsIGJvb2wgaW1tZWRpYXRlKQoreworICAgIGlmICghc2hvdWxkUmVw
YWludCh1cikpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGFsd2F5cyBqdXN0IGludmFs
aWRhdGUgdGhlIHJvb3Qgdmlldywgc2luY2Ugd2UgY291bGQgYmUgYW4gaWZyYW1lIHRoYXQgaXMg
Y2xpcHBlZCBvdXQKQEAgLTI0MSw2ICsyNTksMjQgQEAgdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50
Vmlld1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiB1ciwgYm9vbCBpbW1lZGlhdGUpCiAgICAgfQog
fQogCit2b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVk
TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVyLCBib29sIGltbWVkaWF0ZSkKK3sKKyAgICBpZiAoIXNo
b3VsZFJlcGFpbnQodXIpKQorICAgICAgICByZXR1cm47CisKKyAgICByZXBhaW50Vmlld1JlY3Rh
bmdsZSh1ciwgaW1tZWRpYXRlKTsKKyAgICAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisgICAgLy8gSWYgd2UncmUgYSBmcmFtZSwgcmVwYWludFZpZXdSZWN0YW5nbGUgd2lsbCBo
YXZlIHJlcGFpbnRlZCB2aWEgYSBSZW5kZXJPYmplY3QgaW4gdGhlCisgICAgLy8gcGFyZW50IGRv
Y3VtZW50LgorICAgIGlmIChkb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGNvbXBvc2l0b3IoKS0+aW5Db21wb3NpdGluZ01vZGUoKSkKKyAgICAg
ICAgY29tcG9zaXRvcigpLT5yZXBhaW50Q29tcG9zaXRlZExheWVyc0Fic29sdXRlUmVjdCh1cik7
CisjZW5kaWYKK30KKwogdm9pZCBSZW5kZXJWaWV3Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVu
ZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByZWN0LCBib29sIGZpeGVkKQogewog
ICAgIC8vIElmIGEgY29udGFpbmVyIHdhcyBzcGVjaWZpZWQsIGFuZCB3YXMgbm90IDAgb3IgdGhl
IFJlbmRlclZpZXcsCkBAIC0zMjQsNiArMzYwLDIxIEBAIEludFJlY3QgUmVuZGVyVmlldzo6c2Vs
ZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CiAgICAgcmV0dXJu
IHNlbFJlY3Q7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisvLyBDb21w
b3NpdGluZyBsYXllciBkaW1lbnNpb25zIHRha2Ugb3V0bGluZSBzaXplIGludG8gYWNjb3VudCwg
c28gd2UgaGF2ZSB0byByZWNvbXB1dGUgbGF5ZXIKKy8vIGJvdW5kcyB3aGVuIGl0IGNoYW5nZXMu
CisvLyBGSVhNRTogVGhpcyBpcyB1Z2x5OyBpdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSBiZXR0
ZXIgd2F5IHRvIGRvIHRoaXMuCit2b2lkIFJlbmRlclZpZXc6OnNldE1heGltYWxPdXRsaW5lU2l6
ZShpbnQgbykKK3sKKyAgICBpZiAobyAhPSBtX21heGltYWxPdXRsaW5lU2l6ZSkgeworICAgICAg
ICBtX21heGltYWxPdXRsaW5lU2l6ZSA9IG87CisKKyAgICAgICAgaWYgKG1fZnJhbWVWaWV3KQor
ICAgICAgICAgICAgbV9mcmFtZVZpZXctPnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKEZyYW1lVmll
dzo6Rm9yY2VkVXBkYXRlKTsKKyAgICB9Cit9CisjZW5kaWYKKwogdm9pZCBSZW5kZXJWaWV3Ojpz
ZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmpl
Y3QqIGVuZCwgaW50IGVuZFBvcykKIHsKICAgICAvLyBNYWtlIHN1cmUgYm90aCBvdXIgc3RhcnQg
YW5kIGVuZCBvYmplY3RzIGFyZSBkZWZpbmVkLgpAQCAtNDM5LDkgKzQ5MCw5IEBAIHZvaWQgUmVu
ZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywg
UmVuZGVyT2JqZWN0KiBlCiAgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0KCkg
IT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUo
KSB8fAogICAgICAgICAgICAgKG1fc2VsZWN0aW9uU3RhcnQgPT0gb2JqICYmIG9sZFN0YXJ0UG9z
ICE9IG1fc2VsZWN0aW9uU3RhcnRQb3MpIHx8CiAgICAgICAgICAgICAobV9zZWxlY3Rpb25FbmQg
PT0gb2JqICYmIG9sZEVuZFBvcyAhPSBtX3NlbGVjdGlvbkVuZFBvcykpIHsKLSAgICAgICAgICAg
IHJlcGFpbnRWaWV3UmVjdGFuZ2xlKG9sZEluZm8tPnJlY3QoKSk7CisgICAgICAgICAgICByZXBh
aW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhvbGRJbmZvLT5yZWN0KCkpOwog
ICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICByZXBhaW50Vmlld1Jl
Y3RhbmdsZShuZXdJbmZvLT5yZWN0KCkpOworICAgICAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5n
bGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKG5ld0luZm8tPnJlY3QoKSk7CiAgICAgICAgICAg
ICAgICAgbmV3U2VsZWN0ZWRPYmplY3RzLnJlbW92ZShvYmopOwogICAgICAgICAgICAgICAgIGRl
bGV0ZSBuZXdJbmZvOwogICAgICAgICAgICAgfQpAQCAtNDUzLDcgKzUwNCw3IEBAIHZvaWQgUmVu
ZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywg
UmVuZGVyT2JqZWN0KiBlCiAgICAgU2VsZWN0ZWRPYmplY3RNYXA6Oml0ZXJhdG9yIG5ld09iamVj
dHNFbmQgPSBuZXdTZWxlY3RlZE9iamVjdHMuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZE9iamVj
dE1hcDo6aXRlcmF0b3IgaSA9IG5ld1NlbGVjdGVkT2JqZWN0cy5iZWdpbigpOyBpICE9IG5ld09i
amVjdHNFbmQ7ICsraSkgewogICAgICAgICBTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gaS0+c2Vj
b25kOwotICAgICAgICByZXBhaW50Vmlld1JlY3RhbmdsZShuZXdJbmZvLT5yZWN0KCkpOworICAg
ICAgICByZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhuZXdJbmZvLT5y
ZWN0KCkpOwogICAgICAgICBkZWxldGUgbmV3SW5mbzsKICAgICB9CiAKQEAgLTQ2NCw5ICs1MTUs
OSBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBp
bnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAgICAgICBCbG9ja1NlbGVjdGlvbkluZm8q
IG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOwogICAgICAgICBCbG9ja1Nl
bGVjdGlvbkluZm8qIG9sZEluZm8gPSBpLT5zZWNvbmQ7CiAgICAgICAgIGlmICghbmV3SW5mbyB8
fCBvbGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8tPnJlY3RzKCkgfHwgb2xkSW5mby0+c3RhdGUo
KSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7Ci0gICAgICAgICAgICByZXBhaW50Vmlld1JlY3Rhbmds
ZShvbGRJbmZvLT5yZWN0cygpKTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGVJblZpZXdB
bmRDb21wb3NpdGVkTGF5ZXJzKG9sZEluZm8tPnJlY3RzKCkpOwogICAgICAgICAgICAgaWYgKG5l
d0luZm8pIHsKLSAgICAgICAgICAgICAgICByZXBhaW50Vmlld1JlY3RhbmdsZShuZXdJbmZvLT5y
ZWN0cygpKTsKKyAgICAgICAgICAgICAgICByZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9z
aXRlZExheWVycyhuZXdJbmZvLT5yZWN0cygpKTsKICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rl
ZEJsb2Nrcy5yZW1vdmUoYmxvY2spOwogICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdJbmZvOwog
ICAgICAgICAgICAgfQpAQCAtNDc4LDcgKzUyOSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2Vs
ZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBl
CiAgICAgU2VsZWN0ZWRCbG9ja01hcDo6aXRlcmF0b3IgbmV3QmxvY2tzRW5kID0gbmV3U2VsZWN0
ZWRCbG9ja3MuZW5kKCk7CiAgICAgZm9yIChTZWxlY3RlZEJsb2NrTWFwOjppdGVyYXRvciBpID0g
bmV3U2VsZWN0ZWRCbG9ja3MuYmVnaW4oKTsgaSAhPSBuZXdCbG9ja3NFbmQ7ICsraSkgewogICAg
ICAgICBCbG9ja1NlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBpLT5zZWNvbmQ7Ci0gICAgICAgIHJl
cGFpbnRWaWV3UmVjdGFuZ2xlKG5ld0luZm8tPnJlY3RzKCkpOworICAgICAgICByZXBhaW50UmVj
dGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhuZXdJbmZvLT5yZWN0cygpKTsKICAgICAg
ICAgZGVsZXRlIG5ld0luZm87CiAgICAgfQogfQpAQCAtNTAxLDYgKzU1MiwxMSBAQCBib29sIFJl
bmRlclZpZXc6OnByaW50aW5nKCkgY29uc3QKIAogdm9pZCBSZW5kZXJWaWV3Ojp1cGRhdGVXaWRn
ZXRQb3NpdGlvbnMoKQogeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBp
ZiAobV9jb21wb3NpdG9yKQorICAgICAgICBtX2NvbXBvc2l0b3ItPnVwZGF0ZVJvb3RMYXllclBv
c2l0aW9uKCk7CisjZW5kaWYKKwogICAgIFJlbmRlck9iamVjdFNldDo6aXRlcmF0b3IgZW5kID0g
bV93aWRnZXRzLmVuZCgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0U2V0OjppdGVyYXRvciBpdCA9
IG1fd2lkZ2V0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT51cGRh
dGVXaWRnZXRQb3NpdGlvbigpOwpAQCAtNjI2LDE0ICs2ODIsMzUgQEAgdm9pZCBSZW5kZXJWaWV3
Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9p
bnQmIHBvaW4KICAgICB9CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiti
b29sIFJlbmRlclZpZXc6OnVzZXNDb21wb3NpdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Y29tcG9zaXRvciAmJiBtX2NvbXBvc2l0b3ItPmluQ29tcG9zaXRpbmdNb2RlKCk7Cit9CisKK1Jl
bmRlckxheWVyQ29tcG9zaXRvciogUmVuZGVyVmlldzo6Y29tcG9zaXRvcigpCit7CisgICAgaWYg
KCFtX2NvbXBvc2l0b3IpCisgICAgICAgIG1fY29tcG9zaXRvciA9IG5ldyBSZW5kZXJMYXllckNv
bXBvc2l0b3IodGhpcyk7CisKKyAgICByZXR1cm4gbV9jb21wb3NpdG9yOworfQorI2VuZGlmCisK
IHZvaWQgUmVuZGVyVmlldzo6ZGlkTW92ZU9uc2NyZWVuKCkKIHsKLSAgICAvLyBGSVhNRTogd2ls
bCBjYWxsIGludG8gUmVuZGVyTGF5ZXJDb21wb3NpdG9yCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIGlmIChtX2NvbXBvc2l0b3IpCisgICAgICAgIG1fY29tcG9zaXRvci0+
ZGlkTW92ZU9uc2NyZWVuKCk7CisjZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJWaWV3Ojp3aWxsTW92
ZU9mZnNjcmVlbigpCiB7Ci0gICAgLy8gRklYTUU6IHdpbGwgY2FsbCBpbnRvIFJlbmRlckxheWVy
Q29tcG9zaXRvcgorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAobV9j
b21wb3NpdG9yKQorICAgICAgICBtX2NvbXBvc2l0b3ItPndpbGxNb3ZlT2Zmc2NyZWVuKCk7Cisj
ZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmlu
ZGV4IDQ2ZWM0ZDAuLjQ1NWQwOWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTMwLDYgKzMw
LDExIEBACiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewor
ICAgIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK2NsYXNzIEdyYXBoaWNzTGF5
ZXI7CitjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CisjZW5kaWYKIAogY2xhc3MgUmVuZGVy
VmlldyA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CkBAIC02MSw3ICs2NiwxMSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc092ZXJoYW5naW5nRmxvYXRzKCkgeyByZXR1cm4g
ZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVy
Qm94KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKKwog
ICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Vmlld1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiwgYm9v
bCBpbW1lZGlhdGUgPSBmYWxzZSk7CisgICAgLy8gUmVwYWludCB0aGUgdmlldywgYW5kIGFsbCBj
b21wb3NpdGVkIGxheWVycyB0aGF0IGludGVyc2VjdCB0aGUgZ2l2ZW4gYWJzb2x1dGUgcmVjdGFu
Z2xlLgorICAgIC8vIEZJWE1FOiBpZGVhbGx5IHdlJ2QgbmV2ZXIgaGF2ZSB0byBkbyB0aGlzLCBp
ZiBhbGwgcmVwYWludHMgYXJlIGNvbnRhaW5lci1yZWxhdGl2ZS4KKyAgICB2aXJ0dWFsIHZvaWQg
cmVwYWludFJlY3RhbmdsZUluVmlld0FuZENvbXBvc2l0ZWRMYXllcnMoY29uc3QgSW50UmVjdCYs
IGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CkBAIC04NSw3ICs5NCwxMSBAQCBwdWJs
aWM6CiAKICAgICBJbnRSZWN0IHNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250
ZW50ID0gdHJ1ZSkgY29uc3Q7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgdm9pZCBzZXRNYXhpbWFsT3V0bGluZVNpemUoaW50IG8pOworI2Vsc2UKICAgICB2b2lkIHNl
dE1heGltYWxPdXRsaW5lU2l6ZShpbnQgbykgeyBtX21heGltYWxPdXRsaW5lU2l6ZSA9IG87IH0K
KyNlbmRpZgogICAgIGludCBtYXhpbWFsT3V0bGluZVNpemUoKSBjb25zdCB7IHJldHVybiBtX21h
eGltYWxPdXRsaW5lU2l6ZTsgfQogCiAgICAgdmlydHVhbCBJbnRSZWN0IHZpZXdSZWN0KCkgY29u
c3Q7CkBAIC0xNDYsNiArMTU5LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYpOwogCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFJlbmRlckxheWVyQ29tcG9zaXRvciog
Y29tcG9zaXRvcigpOworICAgIGJvb2wgdXNlc0NvbXBvc2l0aW5nKCkgY29uc3Q7CisjZW5kaWYK
KyAgICAgICAgCisgICAgLy8gTm90aWZpY2F0aW9ucyB0aGF0IHRoaXMgdmlldyBiZWNhbWUgdmlz
aWJsZSBpbiBhIHdpbmRvdywgb3Igd2lsbCBiZQorICAgIC8vIHJlbW92ZWQgZnJvbSB0aGUgd2lu
ZG93LgogICAgIHZvaWQgZGlkTW92ZU9uc2NyZWVuKCk7CiAgICAgdm9pZCB3aWxsTW92ZU9mZnNj
cmVlbigpOwogCkBAIC0xNTYsNiArMTc2LDggQEAgcHJpdmF0ZToKICAgICAvLyBzZWxlY3Rpb25S
ZWN0IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24gYSBSZW5kZXJWaWV3CiAgICAgdmlydHVhbCBJ
bnRSZWN0IHNlbGVjdGlvblJlY3QoYm9vbCk7CiAKKyAgICBib29sIHNob3VsZFJlcGFpbnQoY29u
c3QgSW50UmVjdCYgcikgY29uc3Q7CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgRnJhbWVWaWV3KiBt
X2ZyYW1lVmlldzsKIApAQCAtMTgxLDYgKzIwMyw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Zv
cmNlZFBhZ2VCcmVhazsKICAgICBMYXlvdXRTdGF0ZSogbV9sYXlvdXRTdGF0ZTsKICAgICB1bnNp
Z25lZCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50OworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICBSZW5kZXJMYXllckNvbXBvc2l0b3IqIG1fY29tcG9zaXRvcjsKKyNlbmRp
ZgogfTsKIAogaW5saW5lIFJlbmRlclZpZXcqIHRvUmVuZGVyVmlldyhSZW5kZXJPYmplY3QqIG8p
Cg==
</data>
<flag name="review"
          id="13143"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27333</attachid>
            <date>2009-02-04 15:45:26 -0800</date>
            <delta_ts>2009-02-04 15:48:06 -0800</delta_ts>
            <desc>Updated patch, changelog</desc>
            <filename>23360_patch5.txt</filename>
            <type>text/plain</type>
            <size>26514</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDc3MDBiNy4uZjQzMjYyMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAwOS0wMi0wNCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjMzNjAKKyAgICAgICAgCisgICAgICAgIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgY29tcG9z
aXRpbmcsIG1ha2UgcmVwYWludHMgdXNlIHRoZSBjb3JyZWN0CisgICAgICAgIHJlcGFpbnQgY29u
dGFpbmVyLiBIb29rIHVwIHRoZSBSZW5kZXJMYXllckNvbXBvc2l0b3IgaW4gUmVuZGVyVmlldywK
KyAgICAgICAgYW5kIGFkZCB0byBSZW5kZXJWaWV3IGEgbWV0aG9kIHRoYXQgcmVwYWludHMgYm90
aCB0aGUgdmlldworICAgICAgICBjb250ZW50cywgYW5kIGFueSBpbnRlcnNlY3RpbmcgY29tcG9z
aXRlZCBsYXllcnMuCisgICAgICAgIAorICAgICAgICBNYWtlIGVuY2xvc2luZ0NvbXBvc2l0aW5n
TGF5ZXIoKSBhIG1ldGhvZCBvbiBSZW5kZXJPYmplY3QsIGFuZCB1cGRhdGUKKyAgICAgICAgdGhl
IGNvbXBvc2l0b3IgdG8gdXNlIHRoYXQuIEFkZCBhIGhlbHBlciBtZXRob2Qgb24gdGhlIGNvbXBv
c2l0b3IgdG8KKyAgICAgICAgZ2V0IHRoZSBub24tc2VsZiBjb21wb3NpdGluZyBhbmNlc3Rvcjog
YW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCkuCisgICAgICAgIAorICAgICAgICBDYWxsIHJlcGFp
bnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKCkgaW4gcGxhY2VzIHRoYXQgZG9u
J3QgZG8KKyAgICAgICAgY29udGFpbmVyLXJlbGF0aXZlIHJlcGFpbnRpbmc6IHNlbGVjdGlvbiBy
ZWRyYXcgb24gZm9jdXMgY2hhbmdlLCBjYXJldCwKKyAgICAgICAgYW5kIHdpZGdldCB1cGRhdGVz
LgorICAgICAgICAKKyAgICAgICAgRml4IGEgYnVnIGluIFJlbmRlckxheWVyQ29tcG9zaXRvciB3
aGVyZSB0aGUgbV9jb21wb3NpdGluZ0xheWVyc05lZWRVcGRhdGUgZmxhZworICAgICAgICB3b3Vs
ZCBnZXQgY2xlYXJlZCBmb3IgcGFydGlhbCB1cGRhdGVzLCB0aHVzIHByZXZlbnRpbmcgc3Vic2Vx
dWVudCBmdWxsIHVwZGF0ZXMuCisgICAgICAgIAorICAgICAgICBGaXggYSBidWcgaW4gUmVuZGVy
TGF5ZXI6OmVuc3VyZUJhY2tpbmcoKSB0aGF0IG1hZGUgbmV3IGJhY2tpbmcgZXZlcnkgdGltZS4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6cmVjb21wdXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvbkNvbnRyb2xsZXI6OmludmFsaWRhdGVDYXJldFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcklubGluZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXBvc2l0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZW1vdmVDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5zdXJlQmFja2luZyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmFja2lu
Zyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5VHJhbnNpdGlv
blN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpub3RpZnlB
bmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjbGlwcGVkQnlBbmNlc3Rvcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjplbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0Ojpjb250YWluaW5nQmxvY2tIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0Ojpjb250YWluZXJGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6cmVwYWludFVzaW5nQ29udGFpbmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVmlldzo6c2hvdWxkUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJWaWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpyZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRNYXhpbWFsT3V0bGluZVNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6dXNlc0NvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OmNvbXBvc2l0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6ZGlkTW92ZU9uc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OndpbGxN
b3ZlT2Zmc2NyZWVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
V2lkZ2V0Ojp1cGRhdGVXaWRnZXRQb3NpdGlvbik6CisKIDIwMDktMDItMDQgIERpbWl0cmkgR2xh
emtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0g
V2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIu
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGE1M2E1
ZDkuLmUxNDE2YjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKQEAg
LTg1NCw4ICs4NTQsOSBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlY29tcHV0ZUNhcmV0
UmVjdCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAoUmVuZGVyVmlldyog
dmlldyA9IHRvUmVuZGVyVmlldyhtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJlcigpKSkgewot
ICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3RhbmdsZShvbGRBYnNSZXBhaW50UmVjdCwgZmFs
c2UpOwotICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1JlY3RhbmdsZShtX2Fic0NhcmV0Qm91bmRz
LCBmYWxzZSk7CisgICAgICAgIC8vIEZJWE1FOiBtYWtlIGNhcmV0IHJlcGFpbnRpbmcgY29udGFp
bmVyLWF3YXJlLgorICAgICAgICB2aWV3LT5yZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9z
aXRlZExheWVycyhvbGRBYnNSZXBhaW50UmVjdCwgZmFsc2UpOworICAgICAgICB2aWV3LT5yZXBh
aW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhtX2Fic0NhcmV0Qm91bmRzLCBm
YWxzZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC04ODcsNyArODg4LDcgQEAgdm9p
ZCBTZWxlY3Rpb25Db250cm9sbGVyOjppbnZhbGlkYXRlQ2FyZXRSZWN0KCkKIAogICAgIGlmICgh
Y2FyZXRSZWN0Q2hhbmdlZCkgewogICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRvUmVu
ZGVyVmlldyhkLT5yZW5kZXJlcigpKSkKLSAgICAgICAgICAgIHZpZXctPnJlcGFpbnRWaWV3UmVj
dGFuZ2xlKGNhcmV0UmVwYWludFJlY3QoKSwgZmFsc2UpOworICAgICAgICAgICAgdmlldy0+cmVw
YWludFJlY3RhbmdsZUluVmlld0FuZENvbXBvc2l0ZWRMYXllcnMoY2FyZXRSZXBhaW50UmVjdCgp
LCBmYWxzZSk7CiAgICAgfQogfQogCkBAIC0xMTY4LDcgKzExNjksNyBAQCB2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiAgICAgLy8gUmVuZGVy
T2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMg
YWN0aXZlLAogICAgIC8vIHdlIGhhdmUgdG8gdXBkYXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2Vy
ZSBwYWludGVkLgogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KG1fZnJh
bWUtPmRvY3VtZW50KCktPnJlbmRlcmVyKCkpKQotICAgICAgICB2aWV3LT5yZXBhaW50Vmlld1Jl
Y3RhbmdsZShlbmNsb3NpbmdJbnRSZWN0KG1fZnJhbWUtPnNlbGVjdGlvbkJvdW5kcygpKSk7Cisg
ICAgICAgIHZpZXctPnJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKGVu
Y2xvc2luZ0ludFJlY3QobV9mcmFtZS0+c2VsZWN0aW9uQm91bmRzKCkpKTsKIAogICAgIC8vIENh
cmV0IGFwcGVhcnMgaW4gdGhlIGFjdGl2ZSBmcmFtZS4KICAgICBpZiAoYWN0aXZlQW5kRm9jdXNl
ZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmluZGV4IDhlYmZkOTguLjYyOTI2ZGYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtNTU4LDggKzU1OCwxMCBAQCBJbnRSZWN0
IFJlbmRlcklubGluZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiBy
ZXBhaW50Q29udGFpbmVyKQogICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KHgsIHksIHIud2lk
dGgoKSwgci5oZWlnaHQoKSk7CiAgICAgICAgIHIgPSBpbnRlcnNlY3Rpb24ocmVwYWludFJlY3Qs
IGJveFJlY3QpOwogICAgIH0KLSAgICBBU1NFUlQocmVwYWludENvbnRhaW5lciAhPSB0aGlzKTsK
LSAgICBjYi0+Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHIpOworICAg
IC8vIEZJWE1FOiBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIGNvbXB1dGUgdGhlIGNvcnJlY3QgcmVw
YWludCByZWN0IHdoZW4gdGhlIHJlcGFpbnQgY29udGFpbmVyCisgICAgLy8gaXMgYW4gaW5saW5l
LgorICAgIGlmIChyZXBhaW50Q29udGFpbmVyICE9IHRoaXMpCisgICAgICAgIGNiLT5jb21wdXRl
UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgcik7CiAKICAgICBpZiAob3cpIHsKICAg
ICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIg
PSBjdXJyLT5uZXh0U2libGluZygpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXgg
ZDk4ZTY3Mi4uNzcyNDM1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTcwLDEz
ICsxNzAsOSBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyQm94KiByZW5kZXJlcikK
ICAgICAsIG1fbWFycXVlZSgwKQogICAgICwgbV9zdGF0aWNYKDApCiAgICAgLCBtX3N0YXRpY1ko
MCkKLSAgICAsIG1fdHJhbnNmb3JtKDApCiAgICAgLCBtX3JlZmxlY3Rpb24oMCkKICAgICAsIG1f
c2Nyb2xsQ29ybmVyKDApCiAgICAgLCBtX3Jlc2l6ZXIoMCkKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0gICAgLCBtX2JhY2tpbmcoMCkKLSNlbmRpZgogewogICAgIGlmICghcmVu
ZGVyZXItPmZpcnN0Q2hpbGQoKSAmJiByZW5kZXJlci0+c3R5bGUoKSkgewogICAgICAgICBtX3Zp
c2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsKQEAgLTIyNSw2ICsyMjEsNyBAQCBSZW5k
ZXJMYXllcjo6flJlbmRlckxheWVyKCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiBSZW5kZXJMYXllckNvbXBvc2l0b3IqIFJlbmRlckxheWVyOjpjb21wb3NpdG9yKCkgY29uc3QK
IHsKKyAgICBBU1NFUlQocmVuZGVyZXIoKS0+dmlldygpKTsKICAgICByZXR1cm4gcmVuZGVyZXIo
KS0+dmlldygpLT5jb21wb3NpdG9yKCk7CiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpAQCAtMjkzLDYgKzI5MCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zKGJvb2wgZG9GdWxsUmVwYWludCwgYm9vbCBjaGVja0ZvclJlcGFpbnQpCiAg
ICAgICAgIGNoaWxkLT51cGRhdGVMYXllclBvc2l0aW9ucyhkb0Z1bGxSZXBhaW50LCBjaGVja0Zv
clJlcGFpbnQpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICgh
cGFyZW50KCkpCisgICAgICAgIGNvbXBvc2l0b3IoKS0+dXBkYXRlUm9vdExheWVyUG9zaXRpb24o
KTsKKwogICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkKICAgICAgICAgYmFja2luZygpLT51cGRhdGVB
ZnRlckxheW91dCgpOwogI2VuZGlmCkBAIC02NjgsNyArNjY4LDggQEAgdm9pZCBSZW5kZXJMYXll
cjo6YWRkQ2hpbGQoUmVuZGVyTGF5ZXIqIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQp
CiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OnJlbW92ZUNoaWxkKFJlbmRlckxheWVyKiBvbGRD
aGlsZCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgY29tcG9zaXRv
cigpLT5sYXllcldpbGxCZVJlbW92ZWQodGhpcywgb2xkQ2hpbGQpOworICAgIGlmICghcmVuZGVy
ZXIoKS0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKQorICAgICAgICBjb21wb3NpdG9yKCktPmxh
eWVyV2lsbEJlUmVtb3ZlZCh0aGlzLCBvbGRDaGlsZCk7CiAjZW5kaWYKIAogICAgIC8vIHJlbW92
ZSB0aGUgY2hpbGQKQEAgLTIzNjQsNyArMjM2NSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFy
Q2xpcFJlY3RzKCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBSZW5kZXJMYXll
ckJhY2tpbmcqIFJlbmRlckxheWVyOjplbnN1cmVCYWNraW5nKCkKIHsKLSAgICBtX2JhY2tpbmcu
YWRvcHQobmV3IFJlbmRlckxheWVyQmFja2luZyh0aGlzKSk7CisgICAgaWYgKCFtX2JhY2tpbmcp
CisgICAgICAgIG1fYmFja2luZy5zZXQobmV3IFJlbmRlckxheWVyQmFja2luZyh0aGlzKSk7CiAg
ICAgcmV0dXJuIG1fYmFja2luZy5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5k
ZXggZThjNGI4My4uZjU1YjNmYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC00MDEsNyAr
NDAxLDcgQEAgcHVibGljOgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IGJvb2wgaXNDb21wb3NpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nICE9IDA7IH0KLSAg
ICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmc7
IH0KKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tpbmcuZ2V0KCk7IH0KICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsK
ICAgICB2b2lkIGNsZWFyQmFja2luZygpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCmluZGV4IDgyYmVjNjcuLjZjZmI1MTggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgpAQCAtMTc0LDcgKzE3NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFw
aGljc0xheWVyR2VvbWV0cnkoKQogCiAgICAgbV9jb21wb3NpdGluZ0NvbnRlbnRPZmZzZXREaXJ0
eSA9IHRydWU7CiAgICAgCi0gICAgUmVuZGVyTGF5ZXIqIGNvbXBBbmNlc3RvciA9IGNvbXBvc2l0
b3IoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcihtX293bmluZ0xheWVyLCBmYWxzZSk7Cisg
ICAgUmVuZGVyTGF5ZXIqIGNvbXBBbmNlc3RvciA9IGNvbXBvc2l0b3IoKS0+YW5jZXN0b3JDb21w
b3NpdGluZ0xheWVyKG1fb3duaW5nTGF5ZXIpOwogICAgIAogICAgIC8vIFdlIGNvbXB1dGUgZXZl
cnl0aGluZyByZWxhdGl2ZSB0byB0aGUgZW5jbG9zaW5nIGNvbXBvc2l0aW5nIGxheWVyLgogICAg
IEludFJlY3QgYW5jZXN0b3JDb21wb3NpdGluZ0JvdW5kczsKQEAgLTY2Nyw4ICs2NjgsNyBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RM
YXllciwgR3JhcGhpY3NDb250ZXh0KgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGlmIChtX293bmluZ0xheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpICYmIChtX293bmluZ0xheWVy
LT5tX3pPcmRlckxpc3RzRGlydHkgfHwgbV9vd25pbmdMYXllci0+bV9vdmVyZmxvd0xpc3REaXJ0
eSkpCi0gICAgICAgIGNvbXBvc2l0b3IoKS0+dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMobV9vd25p
bmdMYXllcik7CisgICAgbV9vd25pbmdMYXllci0+dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7
CiAgICAgCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCiAg
ICAgSW50UmVjdCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRs
aW5lUmVjdDsKQEAgLTg5OCwxMiArODk4LDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpz
dGFydFRyYW5zaXRpb24oZG91YmxlIGJlZ2luVGltZSwgaW50IHByb3BlcnR5LCBjb25zdCBSCiAK
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpub3RpZnlUcmFuc2l0aW9uU3RhcnRlZChjb25zdCBH
cmFwaGljc0xheWVyKiwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5LCBkb3VibGUgdGltZSkK
IHsKLSAgICByZW5kZXJlcigpLT5ub3RpZnlUcmFuc2l0aW9uU3RhcnRlZChncmFwaGljc0xheWVy
VG9DU1NQcm9wZXJ0eShwcm9wZXJ0eSksIHRpbWUpOworICAgIHJlbmRlcmVyKCktPmFuaW1hdGlv
bigpLT5ub3RpZnlUcmFuc2l0aW9uU3RhcnRlZChyZW5kZXJlcigpLCBncmFwaGljc0xheWVyVG9D
U1NQcm9wZXJ0eShwcm9wZXJ0eSksIHRpbWUpOwogfQogCiB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRp
bWUpCiB7Ci0gICAgcmVuZGVyZXIoKS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aW1lKTsKKyAg
ICByZW5kZXJlcigpLT5hbmltYXRpb24oKS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChyZW5kZXJl
cigpLCB0aW1lKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmFuaW1hdGlvbkZpbmlz
aGVkKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IGluZGV4LCBib29sIHJlc2V0KQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggOTQzM2YzZS4uMWQ3OGNk
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC0z
MCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJI
aXRUZXN0UmVxdWVzdC5oIgpAQCAtMTE1LDEyICsxMTYsMTMgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKFJlbmRlckxheWVyKiB1cGRhdGVSb290
KQogICAgIGlmICghbV9jb21wb3NpdGluZ0xheWVyc05lZWRVcGRhdGUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fY29tcG9zaXRpbmdMYXllcnNOZWVkVXBkYXRlID0gZmFsc2U7Ci0KICAgICBB
U1NFUlQoaW5Db21wb3NpdGluZ01vZGUoKSk7CiAKLSAgICBpZiAoIXVwZGF0ZVJvb3QpCisgICAg
aWYgKCF1cGRhdGVSb290KSB7CisgICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIGZsYWcgaWYgd2Un
cmUgdXBkYXRpbmcgdGhlIGVudGlyZSBoaWVyYXJjaHkKKyAgICAgICAgbV9jb21wb3NpdGluZ0xh
eWVyc05lZWRVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgdXBkYXRlUm9vdCA9IHJvb3RSZW5kZXJM
YXllcigpOworICAgIH0KIAogI2lmIFBST0ZJTEVfTEFZRVJfUkVCVUlMRAogICAgICsrbV9yb290
TGF5ZXJVcGRhdGVDb3VudDsKQEAgLTE0OSw3ICsxNTEsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoUmVuZGVyTGF5ZXIqIHVwZGF0ZVJvb3Qp
CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXBkYXRlICVkOiBjb21wdXRlQ29tcG9zaXRpbmdS
ZXF1aXJlbWVudHMgZm9yIHRoZSB3b3JsZCB0b29rICVmbXNcbiIKICAgICAgICAgICAgICAgICAg
ICAgbV9yb290TGF5ZXJVcGRhdGVDb3VudCwgMTAwMC4wICogKGVuZFRpbWUgLSBzdGFydFRpbWUp
KTsKICNlbmRpZgotICAgIEFTU0VSVCghbV9jb21wb3NpdGluZ0xheWVyc05lZWRVcGRhdGUpOwor
ICAgIEFTU0VSVCh1cGRhdGVSb290IHx8ICFtX2NvbXBvc2l0aW5nTGF5ZXJzTmVlZFVwZGF0ZSk7
CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckNvbXBvc2l0aW5n
U3RhdGUoUmVuZGVyTGF5ZXIqIGxheWVyLCBTdHlsZURpZmZlcmVuY2UgZGlmZikKQEAgLTE3MCw4
ICsxNzIsOCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJDb21wb3Np
dGluZ1N0YXRlKFJlbmRlckxheWVyKiBsYXllciwgU3R5bAogICAgIH0KICAgICAKICAgICBpZiAo
bGF5ZXJDaGFuZ2VkKSB7Ci0gICAgICAgIC8vIGludmFsaWRhdGUgdGhlIHBhcmVudCBpbiB0aGlz
IHJlZ2lvbgotICAgICAgICBSZW5kZXJMYXllciogY29tcExheWVyID0gZW5jbG9zaW5nQ29tcG9z
aXRpbmdMYXllcihsYXllciwgZmFsc2UpOworICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBwYXJl
bnQgaW4gdGhpcyByZWdpb24uCisgICAgICAgIFJlbmRlckxheWVyKiBjb21wTGF5ZXIgPSBhbmNl
c3RvckNvbXBvc2l0aW5nTGF5ZXIobGF5ZXIpOwogICAgICAgICBpZiAoY29tcExheWVyKSB7CiAg
ICAgICAgICAgICAvLyBXZSBjYW4ndCByZWxpYWJseSBjb21wdXRlIGEgZGlydHkgcmVjdCwgYmVj
YXVzZSBzdHlsZSBtYXkgaGF2ZSBjaGFuZ2VkIGFscmVhZHksIAogICAgICAgICAgICAgLy8gc28g
anVzdCBkaXJ0eSB0aGUgd2hvbGUgcGFyZW50IGxheWVyCkBAIC0yNzIsNyArMjc0LDcgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyV2lsbEJlUmVtb3ZlZChSZW5kZXJMYXllciog
cGFyZW50LCBSZW5kZXJMYXllcioKICAgICBpZiAocGFyZW50LT5yZW5kZXJlcigpLT5kb2N1bWVu
dEJlaW5nRGVzdHJveWVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckxheWVyKiBj
b21wTGF5ZXIgPSBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKHBhcmVudCwgZmFsc2UpOworICAg
IFJlbmRlckxheWVyKiBjb21wTGF5ZXIgPSBwYXJlbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0Nv
bXBvc2l0aW5nTGF5ZXIoKTsKICAgICBpZiAoY29tcExheWVyKSB7CiAgICAgICAgIEludFJlY3Qg
YW5jZXN0b3JSZWN0ID0gY2FsY3VsYXRlQ29tcG9zaXRlZEJvdW5kcyhjaGlsZCwgY29tcExheWVy
KTsKICAgICAgICAgY29tcExheWVyLT5zZXRCYWNraW5nTmVlZHNSZXBhaW50SW5SZWN0KGFuY2Vz
dG9yUmVjdCk7CkBAIC0yODQsMjUgKzI4Niw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpsYXllcldpbGxCZVJlbW92ZWQoUmVuZGVyTGF5ZXIqIHBhcmVudCwgUmVuZGVyTGF5ZXIqCiAg
ICAgc2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkVXBkYXRlKCk7CiB9CiAKLVJlbmRlckxheWVyKiBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoUmVuZGVyTGF5
ZXIqIGxheWVyLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdAotewotICAgIGlmIChpbmNsdWRlU2Vs
ZiAmJiBsYXllci0+aXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJldHVybiBsYXllcjsKLQotICAg
IGJvb2wgY2hpbGRPdmVyZmxvd09ubHkgPSBsYXllci0+aXNPdmVyZmxvd09ubHkoKTsKLSAgICBm
b3IgKFJlbmRlckxheWVyKiBjdXJyID0gbGF5ZXItPnBhcmVudCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+cGFyZW50KCkpIHsKLSAgICAgICAgLy8gQ29tcG9zaXRpbmcgbGF5ZXJzIGFyZSBwYXJlbnRl
ZCBhY2NvcmRpbmcgdG8gc3RhY2tpbmcgb3JkZXIgYW5kIG92ZXJmbG93IGxpc3QsCi0gICAgICAg
IC8vIHNvIHdlIGhhdmUgdG8gY2hlY2sgd2hldGhlciB0aGUgcGFyZW50IGlzIGEgc3RhY2tpbmcg
Y29udGV4dCwgb3Igd2hldGhlciAKLSAgICAgICAgLy8gdGhlIGNoaWxkIGlzIG92ZXJmbG93LW9u
bHkuCi0gICAgICAgIGlmIChjdXJyLT5pc0NvbXBvc2l0ZWQoKSAmJiAoY2hpbGRPdmVyZmxvd09u
bHkgfHwgY3Vyci0+aXNTdGFja2luZ0NvbnRleHQoKSkpCi0gICAgICAgICAgICByZXR1cm4gY3Vy
cjsKLSAgICAgICAgCi0gICAgICAgIGNoaWxkT3ZlcmZsb3dPbmx5ID0gY3Vyci0+aXNPdmVyZmxv
d09ubHkoKTsKLSAgICB9Ci0gICAgICAgICAKLSAgICByZXR1cm4gMDsKLX0KLQogUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5jbG9zaW5nTm9uU3RhY2tpbmdDbGlwcGluZ0xh
eWVyKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QKIHsKICAgICBmb3IgKFJlbmRlckxh
eWVyKiBjdXJyID0gbGF5ZXItPnBhcmVudCgpOyBjdXJyICE9IDA7IGN1cnIgPSBjdXJyLT5wYXJl
bnQoKSkgewpAQCAtNDE2LDYgKzM5OSwxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
c2V0Rm9yY2VkQ29tcG9zaXRpbmdMYXllcihSZW5kZXJMYXllciogbGF5ZXIsIGJvb2wgZgogICAg
IH0KIH0KIAorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YW5jZXN0b3JDb21w
b3NpdGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikgY29uc3QKK3sKKyAgICBpZiAo
IWxheWVyLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbGF5ZXIt
PnBhcmVudCgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7Cit9CisK
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRDb21wb3NpdGluZ1BhcmVudChSZW5kZXJM
YXllciogY2hpbGRMYXllciwgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKQogewogICAgIEFTU0VS
VChjaGlsZExheWVyLT5pc0NvbXBvc2l0ZWQoKSk7CkBAIC02ODcsNyArNjc4LDcgQEAgYm9vbCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsaXBwZWRCeUFuY2VzdG9yKFJlbmRlckxheWVyKiBsYXll
cikgY29uc3QKICAgICBpZiAoIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSB8fCAhbGF5ZXItPnBhcmVu
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJMYXllciogY29tcG9zaXRp
bmdBbmNlc3RvciA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIobGF5ZXIsIGZhbHNlKTsKKyAg
ICBSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IGFuY2VzdG9yQ29tcG9zaXRpbmdM
YXllcihsYXllcik7CiAKICAgICAvLyBXZSBuZWVkIGFuY2VzdG9yIGNsaXBwaW5nIGlmIHNvbWV0
aGluZyBjbGlwcyBiZXR3ZWVuIHRoaXMgbGF5ZXIgYW5kIGl0cyBjb21wb3NpdGluZywgc3RhY2tp
bmcgY29udGV4dCBhbmNlc3RvcgogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gbGF5
ZXItPnBhcmVudCgpOyBjdXJMYXllciAmJiBjdXJMYXllciAhPSBjb21wb3NpdGluZ0FuY2VzdG9y
OyBjdXJMYXllciA9IGN1ckxheWVyLT5wYXJlbnQoKSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBhMmNjNzZmLi5jZTQ3Zjc4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtNzEsOCArNzEsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBsYXllcldhc0FkZGVkKFJlbmRlckxheWVyKiBwYXJlbnQsIFJlbmRlckxheWVy
KiBjaGlsZCk7CiAgICAgdm9pZCBsYXllcldpbGxCZVJlbW92ZWQoUmVuZGVyTGF5ZXIqIHBhcmVu
dCwgUmVuZGVyTGF5ZXIqIGNoaWxkKTsKIAotICAgIC8vIEdldHMgdGhlIG5lYXJlc3QgZW5jbG9z
aW5nIHJlbmRlciBsYXllciB0aGF0IGlzIGNvbXBvc2l0ZWQgKG9wdGlvbmFsbHkgaW5jbHVkaW5n
IHNlbGYpCi0gICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoUmVuZGVy
TGF5ZXIqIGxheWVyLCBib29sIGluY2x1ZGVTZWxmID0gdHJ1ZSkgY29uc3Q7CisgICAgLy8gQW5j
ZXN0b3IgbGF5ZXIgb2YgdGhlIGdpdmVuIGxheWVyIHRoYXQgaXMgY29tcG9zaXRlZCwgZXhjbHVk
aW5nIHRoZSBsYXllciBpdHNlbGYuCisgICAgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yQ29tcG9zaXRp
bmdMYXllcihjb25zdCBSZW5kZXJMYXllciopIGNvbnN0OwogCiAgICAgLy8gR2V0IHRoZSBuZWFy
ZXN0IGFuY2VzdG9yIGxheWVyIHRoYXQgaGFzIG92ZXJmbG93IG9yIGNsaXAsIGJ1dCBpcyBub3Qg
YSBzdGFja2luZyBjb250ZXh0CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ05vblN0YWNraW5n
Q2xpcHBpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKaW5kZXggNWM0MjI3My4uNDY0OTM1NiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCkBAIC00NTcsNiArNDU3LDIwIEBAIFJlbmRlckxheWVyKiBSZW5kZXJP
YmplY3Q6OmVuY2xvc2luZ0xheWVyKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK1JlbmRlckxheWVyKiBSZW5kZXJPYmplY3Q6OmVu
Y2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKSBjb25zdAoreworICAgIGNvbnN0IFJlbmRlck9iamVj
dCogY3VyciA9IHRoaXM7CisgICAgd2hpbGUgKGN1cnIpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXIq
IGxheWVyID0gY3Vyci0+aGFzTGF5ZXIoKSA/IHRvUmVuZGVyQm94KGN1cnIpLT5sYXllcigpIDog
MDsKKyAgICAgICAgaWYgKGxheWVyICYmIGxheWVyLT5pc0NvbXBvc2l0ZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBsYXllcjsKKyAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOworICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiBSZW5kZXJCb3gqIFJlbmRlck9iamVjdDo6ZW5j
bG9zaW5nQm94KCkgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3QqIGN1cnIgPSBjb25zdF9jYXN0
PFJlbmRlck9iamVjdCo+KHRoaXMpOwpAQCAtNTU4LDEzICs1NzIsMTEgQEAgUmVuZGVyQmxvY2sq
IFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrKCkgY29uc3QKIAogaW50IFJlbmRlck9iamVj
dDo6Y29udGFpbmluZ0Jsb2NrV2lkdGgoKSBjb25zdAogewotICAgIC8vIEZJWE1FID8KICAgICBy
ZXR1cm4gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZVdpZHRoKCk7CiB9CiAKIGludCBSZW5k
ZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9ja0hlaWdodCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUUg
PwogICAgIHJldHVybiBjb250YWluaW5nQmxvY2soKS0+Y29udGVudEhlaWdodCgpOwogfQogCkBA
IC0xNTYzLDcgKzE1NzUsMTUgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50KFBhaW50SW5mbyYg
LypwYWludEluZm8qLywgaW50IC8qdHgqLywgaW50IC8qdHkqLykKIAogUmVuZGVyQm94KiBSZW5k
ZXJPYmplY3Q6OmNvbnRhaW5lckZvclJlcGFpbnQoKSBjb25zdAogewotICAgIC8vIEZvciBub3cs
IGFsbCByZXBhaW50cyBhcmUgcm9vdC1yZWxhdGl2ZS4KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpIHsKKyAgICAgICAgaWYg
KHYtPnVzZXNDb21wb3NpdGluZygpKSB7CisgICAgICAgICAgICBSZW5kZXJMYXllciogY29tcExh
eWVyID0gZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpOworICAgICAgICAgICAgcmV0dXJuIGNv
bXBMYXllciA/IGNvbXBMYXllci0+cmVuZGVyZXIoKSA6IDA7CisgICAgICAgIH0KKyAgICB9Cisj
ZW5kaWYKKyAgICAvLyBEbyByb290LXJlbGF0aXZlIHJlcGFpbnQuCiAgICAgcmV0dXJuIDA7CiB9
CiAKQEAgLTE1NzMsOCArMTU5MywxNSBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVwYWludFVzaW5n
Q29udGFpbmVyKFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgY29uc3QgSW50UgogICAgICAg
ICBSZW5kZXJWaWV3KiB2ID0gcmVwYWludENvbnRhaW5lciA/IHRvUmVuZGVyVmlldyhyZXBhaW50
Q29udGFpbmVyKSA6IHZpZXcoKTsKICAgICAgICAgdi0+cmVwYWludFZpZXdSZWN0YW5nbGUociwg
aW1tZWRpYXRlKTsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBIYW5kbGUgY29udGFpbmVyLXJl
bGF0aXZlIHJlcGFpbnRzIGV2ZW50dWFsbHkuCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorICAgICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOworICAgICAgICBpZiAodi0+dXNl
c0NvbXBvc2l0aW5nKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXBhaW50Q29udGFpbmVyLT5o
YXNMYXllcigpICYmIHJlcGFpbnRDb250YWluZXItPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKTsK
KyAgICAgICAgICAgIHJlcGFpbnRDb250YWluZXItPmxheWVyKCktPnNldEJhY2tpbmdOZWVkc1Jl
cGFpbnRJblJlY3Qocik7CisgICAgICAgIH0KKyNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworI2VuZGlmCiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4
IGIwNmUzZWYuLmRmYzU2MmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xNTYsMTUg
KzE1NiwyMCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdExlYWZDaGlsZCgpIGNv
bnN0OwogICAgIFJlbmRlck9iamVjdCogbGFzdExlYWZDaGlsZCgpIGNvbnN0OwogCi0gICAgLy8g
VGhlIGZvbGxvd2luZyBmaXZlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIHRoZSByZW5kZXIgdHJl
ZSBoaWVyYXJjaHkgY2hhbmdlcyB0byBtYWtlIHN1cmUgbGF5ZXJzIGdldAorICAgIC8vIFRoZSBm
b2xsb3dpbmcgc2l4IGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIHRoZSByZW5kZXIgdHJlZSBoaWVy
YXJjaHkgY2hhbmdlcyB0byBtYWtlIHN1cmUgbGF5ZXJzIGdldAogICAgIC8vIHByb3Blcmx5IGFk
ZGVkIGFuZCByZW1vdmVkLiAgU2luY2UgY29udGFpbmVyc2hpcCBjYW4gYmUgaW1wbGVtZW50ZWQg
YnkgYW55IHN1YmNsYXNzLCBhbmQgc2luY2UgYSBoaWVyYXJjaHkKICAgICAvLyBjYW4gY29udGFp
biBhIG1peHR1cmUgb2YgYm94ZXMgYW5kIG90aGVyIG9iamVjdCB0eXBlcywgdGhlc2UgZnVuY3Rp
b25zIG5lZWQgdG8gYmUgaW4gdGhlIGJhc2UgY2xhc3MuCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ0xheWVyKCkgY29uc3Q7CisgICAgCiAgICAgdm9pZCBhZGRMYXllcnMoUmVuZGVyTGF5ZXIq
IHBhcmVudExheWVyLCBSZW5kZXJPYmplY3QqIG5ld09iamVjdCk7CiAgICAgdm9pZCByZW1vdmVM
YXllcnMoUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyKTsKICAgICB2b2lkIG1vdmVMYXllcnMoUmVu
ZGVyTGF5ZXIqIG9sZFBhcmVudCwgUmVuZGVyTGF5ZXIqIG5ld1BhcmVudCk7CiAgICAgUmVuZGVy
TGF5ZXIqIGZpbmROZXh0TGF5ZXIoUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyLCBSZW5kZXJPYmpl
Y3QqIHN0YXJ0UG9pbnQsIGJvb2wgY2hlY2tQYXJlbnQgPSB0cnVlKTsKIAorI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29tcG9zaXRp
bmdMYXllcigpIGNvbnN0OworI2VuZGlmCisKICAgICAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBm
b3IgZ2V0dGluZyB0byB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgYm94IG9mIGEgUmVuZGVyT2JqZWN0
LgogICAgIFJlbmRlckJveCogZW5jbG9zaW5nQm94KCkgY29uc3Q7CiAgICAgCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCmluZGV4IDA1ODgyNjMuLjg1ZTZkZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCkBAIC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBG
cmFtZVZpZXcqIHZpZXcpCkBAIC0yMTQsMTIgKzIxOCwyMCBAQCB2b2lkIFJlbmRlclZpZXc6OnBh
aW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQogICAgIH0K
IH0KIAotdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50Vmlld1JlY3RhbmdsZShjb25zdCBJbnRSZWN0
JiB1ciwgYm9vbCBpbW1lZGlhdGUpCitib29sIFJlbmRlclZpZXc6OnNob3VsZFJlcGFpbnQoY29u
c3QgSW50UmVjdCYgcikgY29uc3QKIHsKLSAgICBpZiAocHJpbnRpbmcoKSB8fCB1ci53aWR0aCgp
ID09IDAgfHwgdXIuaGVpZ2h0KCkgPT0gMCkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChwcmlu
dGluZygpIHx8IHIud2lkdGgoKSA9PSAwIHx8IHIuaGVpZ2h0KCkgPT0gMCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFtX2ZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRW
aWV3UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHVyLCBib29sIGltbWVkaWF0ZSkKK3sKKyAgICBp
ZiAoIXNob3VsZFJlcGFpbnQodXIpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBhbHdh
eXMganVzdCBpbnZhbGlkYXRlIHRoZSByb290IHZpZXcsIHNpbmNlIHdlIGNvdWxkIGJlIGFuIGlm
cmFtZSB0aGF0IGlzIGNsaXBwZWQgb3V0CkBAIC0yNDIsNiArMjU0LDI0IEBAIHZvaWQgUmVuZGVy
Vmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYgdXIsIGJvb2wgaW1tZWRp
YXRlKQogICAgIH0KIH0KIAordm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50UmVjdGFuZ2xlSW5WaWV3
QW5kQ29tcG9zaXRlZExheWVycyhjb25zdCBJbnRSZWN0JiB1ciwgYm9vbCBpbW1lZGlhdGUpCit7
CisgICAgaWYgKCFzaG91bGRSZXBhaW50KHVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVw
YWludFZpZXdSZWN0YW5nbGUodXIsIGltbWVkaWF0ZSk7CisgICAgCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIElmIHdlJ3JlIGEgZnJhbWUsIHJlcGFpbnRWaWV3UmVj
dGFuZ2xlIHdpbGwgaGF2ZSByZXBhaW50ZWQgdmlhIGEgUmVuZGVyT2JqZWN0IGluIHRoZQorICAg
IC8vIHBhcmVudCBkb2N1bWVudC4KKyAgICBpZiAoZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb21wb3NpdG9yKCktPmluQ29tcG9zaXRpbmdN
b2RlKCkpCisgICAgICAgIGNvbXBvc2l0b3IoKS0+cmVwYWludENvbXBvc2l0ZWRMYXllcnNBYnNv
bHV0ZVJlY3QodXIpOworI2VuZGlmCit9CisKIHZvaWQgUmVuZGVyVmlldzo6Y29tcHV0ZVJlY3RG
b3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVjdCwgYm9v
bCBmaXhlZCkKIHsKICAgICAvLyBJZiBhIGNvbnRhaW5lciB3YXMgc3BlY2lmaWVkLCBhbmQgd2Fz
IG5vdCAwIG9yIHRoZSBSZW5kZXJWaWV3LApAQCAtMzE1LDYgKzM0NSwyMSBAQCBJbnRSZWN0IFJl
bmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25z
dAogICAgIHJldHVybiBzZWxSZWN0OwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorLy8gQ29tcG9zaXRpbmcgbGF5ZXIgZGltZW5zaW9ucyB0YWtlIG91dGxpbmUgc2l6ZSBp
bnRvIGFjY291bnQsIHNvIHdlIGhhdmUgdG8gcmVjb21wdXRlIGxheWVyCisvLyBib3VuZHMgd2hl
biBpdCBjaGFuZ2VzLgorLy8gRklYTUU6IFRoaXMgaXMgdWdseTsgaXQgd291bGQgYmUgbmljZSB0
byBoYXZlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLgordm9pZCBSZW5kZXJWaWV3OjpzZXRNYXhp
bWFsT3V0bGluZVNpemUoaW50IG8pCit7CisgICAgaWYgKG8gIT0gbV9tYXhpbWFsT3V0bGluZVNp
emUpIHsKKyAgICAgICAgbV9tYXhpbWFsT3V0bGluZVNpemUgPSBvOworCisgICAgICAgIGlmICht
X2ZyYW1lVmlldykKKyAgICAgICAgICAgIG1fZnJhbWVWaWV3LT51cGRhdGVDb21wb3NpdGluZ0xh
eWVycyhGcmFtZVZpZXc6OkZvcmNlZENvbXBvc2l0aW5nVXBkYXRlKTsKKyAgICB9Cit9CisjZW5k
aWYKKwogdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwg
aW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwgaW50IGVuZFBvcykKIHsKICAgICAvLyBN
YWtlIHN1cmUgYm90aCBvdXIgc3RhcnQgYW5kIGVuZCBvYmplY3RzIGFyZSBkZWZpbmVkLgpAQCAt
NjE3LDE0ICs2NjIsMzUgQEAgdm9pZCBSZW5kZXJWaWV3Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW4KICAgICB9CiB9CiAKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitib29sIFJlbmRlclZpZXc6OnVzZXNDb21w
b3NpdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tcG9zaXRvciAmJiBtX2NvbXBvc2l0
b3ItPmluQ29tcG9zaXRpbmdNb2RlKCk7Cit9CisKK1JlbmRlckxheWVyQ29tcG9zaXRvciogUmVu
ZGVyVmlldzo6Y29tcG9zaXRvcigpCit7CisgICAgaWYgKCFtX2NvbXBvc2l0b3IpCisgICAgICAg
IG1fY29tcG9zaXRvci5zZXQobmV3IFJlbmRlckxheWVyQ29tcG9zaXRvcih0aGlzKSk7CisKKyAg
ICByZXR1cm4gbV9jb21wb3NpdG9yLmdldCgpOworfQorI2VuZGlmCisKIHZvaWQgUmVuZGVyVmll
dzo6ZGlkTW92ZU9uc2NyZWVuKCkKIHsKLSAgICAvLyBGSVhNRTogd2lsbCBjYWxsIGludG8gUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IGlmIChtX2NvbXBvc2l0b3IpCisgICAgICAgIG1fY29tcG9zaXRvci0+ZGlkTW92ZU9uc2NyZWVu
KCk7CisjZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJWaWV3Ojp3aWxsTW92ZU9mZnNjcmVlbigpCiB7
Ci0gICAgLy8gRklYTUU6IHdpbGwgY2FsbCBpbnRvIFJlbmRlckxheWVyQ29tcG9zaXRvcgorI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAobV9jb21wb3NpdG9yKQorICAg
ICAgICBtX2NvbXBvc2l0b3ItPndpbGxNb3ZlT2Zmc2NyZWVuKCk7CisjZW5kaWYKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IDE1ZmRmNmUuLjIw
YjhiMTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTI4LDggKzI4LDEzIEBACiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlckJs
b2NrLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorY2xhc3MgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOworI2VuZGlmCiAKIGNsYXNzIFJlbmRlclZpZXcgOiBwdWJsaWMgUmVuZGVyQmxv
Y2sgewogcHVibGljOgpAQCAtNjIsNiArNjcsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWludENvbnRhaW5lciwgSW50
UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRWaWV3
UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29sIGltbWVkaWF0ZSA9IGZhbHNlKTsKKyAgICAv
LyBSZXBhaW50IHRoZSB2aWV3LCBhbmQgYWxsIGNvbXBvc2l0ZWQgbGF5ZXJzIHRoYXQgaW50ZXJz
ZWN0IHRoZSBnaXZlbiBhYnNvbHV0ZSByZWN0YW5nbGUuCisgICAgLy8gRklYTUU6IGlkZWFsbHkg
d2UnZCBuZXZlciBoYXZlIHRvIGRvIHRoaXMsIGlmIGFsbCByZXBhaW50cyBhcmUgY29udGFpbmVy
LXJlbGF0aXZlLgorICAgIHZpcnR1YWwgdm9pZCByZXBhaW50UmVjdGFuZ2xlSW5WaWV3QW5kQ29t
cG9zaXRlZExheWVycyhjb25zdCBJbnRSZWN0JiwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAg
IHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50
IHR5KTsKQEAgLTg1LDcgKzkzLDExIEBAIHB1YmxpYzoKIAogICAgIEludFJlY3Qgc2VsZWN0aW9u
Qm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKIAorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2b2lkIHNldE1heGltYWxPdXRsaW5lU2l6
ZShpbnQgbyk7CisjZWxzZQogICAgIHZvaWQgc2V0TWF4aW1hbE91dGxpbmVTaXplKGludCBvKSB7
IG1fbWF4aW1hbE91dGxpbmVTaXplID0gbzsgfQorI2VuZGlmCiAgICAgaW50IG1heGltYWxPdXRs
aW5lU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4aW1hbE91dGxpbmVTaXplOyB9CiAKICAgICB2
aXJ0dWFsIEludFJlY3Qgdmlld1JlY3QoKSBjb25zdDsKQEAgLTE0NiwxMiArMTU4LDIyIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBJbnRQb2ludCYpOwogCisgICAgLy8gTm90aWZpY2F0aW9ucyB0aGF0IHRoaXMg
dmlldyBiZWNhbWUgdmlzaWJsZSBpbiBhIHdpbmRvdywgb3Igd2lsbCBiZQorICAgIC8vIHJlbW92
ZWQgZnJvbSB0aGUgd2luZG93LgogICAgIHZvaWQgZGlkTW92ZU9uc2NyZWVuKCk7CiAgICAgdm9p
ZCB3aWxsTW92ZU9mZnNjcmVlbigpOwogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorICAgIFJlbmRlckxheWVyQ29tcG9zaXRvciogY29tcG9zaXRvcigpOworICAgIGJvb2wgdXNl
c0NvbXBvc2l0aW5nKCkgY29uc3Q7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
RmxvYXRRdWFkIGxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIFJlbmRlckJv
eCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKIAorcHJpdmF0
ZToKKyAgICBib29sIHNob3VsZFJlcGFpbnQoY29uc3QgSW50UmVjdCYgcikgY29uc3Q7CisKIHBy
b3RlY3RlZDoKICAgICBGcmFtZVZpZXcqIG1fZnJhbWVWaWV3OwogCkBAIC0xNzcsNiArMTk5LDkg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fZm9yY2VkUGFnZUJyZWFrOwogICAgIExheW91dFN0YXRl
KiBtX2xheW91dFN0YXRlOwogICAgIHVuc2lnbmVkIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQ7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIE93blB0cjxSZW5kZXJMYXll
ckNvbXBvc2l0b3I+IG1fY29tcG9zaXRvcjsKKyNlbmRpZgogfTsKIAogaW5saW5lIFJlbmRlclZp
ZXcqIHRvUmVuZGVyVmlldyhSZW5kZXJPYmplY3QqIG8pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAppbmRleCBjM2I3M2E0Li5kOGE3MWU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAKQEAgLTIzNSw4ICsyMzUsOSBAQCB2b2lkIFJlbmRlcldpZGdldDo6dXBkYXRlV2lkZ2V0UG9z
aXRpb24oKQogICAgICAgICBpZiAoY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpIHsKICAg
ICAgICAgICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CiAgICAgICAgICAgICBpZiAoIXYtPnBy
aW50aW5nKCkpIHsKLSAgICAgICAgICAgICAgICB2LT5yZXBhaW50Vmlld1JlY3RhbmdsZShvbGRC
b3VuZHMpOwotICAgICAgICAgICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKG5ld0JvdW5k
cyk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGRvIGNvbnRhaW5lci1yZWxhdGl2ZSByZXBh
aW50CisgICAgICAgICAgICAgICAgdi0+cmVwYWludFJlY3RhbmdsZUluVmlld0FuZENvbXBvc2l0
ZWRMYXllcnMob2xkQm91bmRzKTsKKyAgICAgICAgICAgICAgICB2LT5yZXBhaW50UmVjdGFuZ2xl
SW5WaWV3QW5kQ29tcG9zaXRlZExheWVycyhuZXdCb3VuZHMpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAK
</data>
<flag name="review"
          id="13190"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>